Name: series-workflowk2s4v Phase: Failed StartedAt: 2026-09-03 04:39:07 +0000 UTC FinishedAt: 2026-09-03 04:41:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk2s4v[0] Phase: Succeeded StartedAt: 2026-09-03 04:39:07 +0000 UTC FinishedAt: 2026-09-03 04:41:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk2s4v[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 04:39:07 +0000 UTC FinishedAt: 2026-09-03 04:41:18 +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+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3JvY2hpcCBLU1ovTEFOIHNlcmllcyBEU0EgRXRoZXJuZXQgc3dpdGNoIGRyaXZlcnMgKHNwZWNpZmljYWxseSBhZGRpbmcgUFRQIHBlcmlvZGljIG91dHB1dCBhbmQgcGluIGNhcGFiaWxpdGllcyBmb3IgS1NaODQ2MyBhbmQgcmVsYXRlZCBzd2l0Y2hlcykuIFRoZXNlIHN3aXRjaCBkcml2ZXJzIG9wZXJhdGUgb3ZlciBTUEksIEkyQywgb3IgU01JIGJ1c2VzIGFuZCByZXF1aXJlIHBoeXNpY2FsIE1pY3JvY2hpcCBzd2l0Y2ggQVNJQ3MgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoc3VjaCBhcyBRRU1VIG9yIEdDRSksIG1ha2luZyB0aGVzZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGUzN2NjMTE0MTk2MmIyNzZhYjU4MDJlZjY4MjZhZjJjMzExZDk2YTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDA0OjQwOjI1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmNcbmluZGV4IDk0MWFlOWY2NmY3MGIuLjZiMDhiYjhmZWQ1YjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmNcbkBAIC0yNDc4LDYgJiM0MzsyNDc4LDcgQEAgc3RhdGljIGludCBrc3o4NDYzX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRnb3RvIGZyZWVfZ2lycTtcbiBcbiYjNDM7XHRcdGtzejg0NjNfcHRwX3NldF9jYXBzKGRzKTtcbiBcdFx0cmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7XG4gXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2s6ICVkXFxuXCYjMzQ7LFxuQEAgLTI3NzUsNiAmIzQzOzI3NzYsNyBAQCBzdGF0aWMgaW50IGtzejhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0fVxuIFxuIFx0aWYgKGRldi1cdTAwM2VpbmZvLVx1MDAzZXB0cF9jYXBhYmxlKSB7XG4mIzQzO1x0XHRrc3pfcHRwX3NldF9jYXBzKGRzKTtcbiBcdFx0cmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7XG4gXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2s6ICVkXFxuXCYjMzQ7LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmNcbmluZGV4IDNlZTk5NTU0NWM1NzkuLjcyNTI4YTUzYjY3ZDIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmNcbkBAIC0xNzgxLDYgJiM0MzsxNzgxLDcgQEAgc3RhdGljIGludCBrc3o5NDc3X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdH1cbiBcbiBcdGlmIChkZXYtXHUwMDNlaW5mby1cdTAwM2VwdHBfY2FwYWJsZSkge1xuJiM0MztcdFx0a3N6X3B0cF9zZXRfY2Fwcyhkcyk7XG4gXHRcdHJldCA9IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoZHMpO1xuIFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrOiAlZFxcblwmIzM0OyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jXG5pbmRleCAxYTlkNmY4M2EwMjMyLi45ZTIzNGFkNzFiNzIzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jXG5AQCAtMTE2MSw2ICYjNDM7MTE2MSw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcbiBcdFx0LnN1cHBvcnRzX21paSA9IHtmYWxzZSwgZmFsc2UsIHRydWV9LFxuIFx0XHQuc3VwcG9ydHNfcm1paSA9IHtmYWxzZSwgZmFsc2UsIHRydWV9LFxuIFx0XHQuaW50ZXJuYWxfcGh5ID0ge3RydWUsIHRydWUsIGZhbHNlfSxcbiYjNDM7XHRcdC5uX3BpbnMgPSAxMixcbiYjNDM7XHRcdC5uX3Blcl9vdXQgPSAxMixcbiBcdH0sXG4gXG4gXHRbS1NaODU2M10gPSB7XG5AQCAtMTE5NCw2ICYjNDM7MTE5Niw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcbiBcdFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcbiBcdFx0LndyX3RhYmxlID0gXHUwMDI2a3N6ODU2M19yZWdpc3Rlcl9zZXQsXG4gXHRcdC5yZF90YWJsZSA9IFx1MDAyNmtzejg1NjNfcmVnaXN0ZXJfc2V0LFxuJiM0MztcdFx0Lm5fcGlucyA9IDIsXG4mIzQzO1x0XHQubl9wZXJfb3V0ID0gMyxcbiBcdH0sXG4gXG4gXHRbS1NaODc5NV0gPSB7XG5AQCAtMTQxNCw2ICYjNDM7MTQxOCw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcbiBcdFx0LnNnbWlpX3BvcnQgPSA3LFxuIFx0XHQud3JfdGFibGUgPSBcdTAwMjZrc3o5NDc3X3JlZ2lzdGVyX3NldCxcbiBcdFx0LnJkX3RhYmxlID0gXHUwMDI2a3N6OTQ3N19yZWdpc3Rlcl9zZXQsXG4mIzQzO1x0XHQubl9waW5zID0gMixcbiYjNDM7XHRcdC5uX3Blcl9vdXQgPSAzLFxuIFx0fSxcbiBcbiBcdFtLU1o5ODk2XSA9IHtcbkBAIC0xNTQ0LDYgJiM0MzsxNTUwLDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xuIFx0XHQuaW50ZXJuYWxfcGh5ID0ge3RydWUsIHRydWUsIGZhbHNlfSxcbiBcdFx0LmdiaXRfY2FwYWJsZSA9IHt0cnVlLCB0cnVlLCB0cnVlfSxcbiBcdFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcbiYjNDM7XHRcdC5uX3BpbnMgPSAyLFxuJiM0MztcdFx0Lm5fcGVyX291dCA9IDMsXG4gXHR9LFxuIFxuIFx0W0tTWjg1NjddID0ge1xuQEAgLTE1ODEsNiAmIzQzOzE1ODksOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XG4gXHRcdC5nYml0X2NhcGFibGVcdD0ge2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSxcbiBcdFx0XHRcdCAgIHRydWUsIHRydWV9LFxuIFx0XHQucHRwX2NhcGFibGUgPSB0cnVlLFxuJiM0MztcdFx0Lm5fcGlucyA9IDIsXG4mIzQzO1x0XHQubl9wZXJfb3V0ID0gMyxcbiBcdH0sXG4gXG4gXHRbS1NaOTU2N10gPSB7XG5AQCAtMTYxNSw2ICYjNDM7MTYyNSw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcbiBcdFx0XHRcdCAgIHRydWUsIGZhbHNlLCBmYWxzZX0sXG4gXHRcdC5nYml0X2NhcGFibGVcdD0ge3RydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWV9LFxuIFx0XHQucHRwX2NhcGFibGUgPSB0cnVlLFxuJiM0MztcdFx0Lm5fcGlucyA9IDIsXG4mIzQzO1x0XHQubl9wZXJfb3V0ID0gMyxcbiBcdH0sXG4gXG4gXHRbTEFOOTM3MF0gPSB7XG5AQCAtMTY0Niw2ICYjNDM7MTY1OCw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcbiBcdFx0LnN1cHBvcnRzX3JnbWlpID0ge2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlfSxcbiBcdFx0LmludGVybmFsX3BoeSA9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZX0sXG4gXHRcdC5wdHBfY2FwYWJsZSA9IHRydWUsXG4mIzQzO1x0XHQubl9waW5zID0gMixcbiYjNDM7XHRcdC5uX3Blcl9vdXQgPSAzLFxuIFx0fSxcbiBcbiBcdFtMQU45MzcxXSA9IHtcbkBAIC0xNjc3LDYgJiM0MzsxNjkxLDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xuIFx0XHQuc3VwcG9ydHNfcmdtaWkgPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWV9LFxuIFx0XHQuaW50ZXJuYWxfcGh5ID0ge3RydWUsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZX0sXG4gXHRcdC5wdHBfY2FwYWJsZSA9IHRydWUsXG4mIzQzO1x0XHQubl9waW5zID0gMixcbiYjNDM7XHRcdC5uX3Blcl9vdXQgPSAzLFxuIFx0fSxcbiBcbiBcdFtMQU45MzcyXSA9IHtcbkBAIC0xNzEyLDYgJiM0MzsxNzI4LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xuIFx0XHQuaW50ZXJuYWxfcGh5XHQ9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLFxuIFx0XHRcdFx0ICAgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlfSxcbiBcdFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcbiYjNDM7XHRcdC5uX3BpbnMgPSAyLFxuJiM0MztcdFx0Lm5fcGVyX291dCA9IDMsXG4gXHR9LFxuIFxuIFx0W0xBTjkzNzNdID0ge1xuQEAgLTE3NDcsNiAmIzQzOzE3NjUsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XG4gXHRcdC5pbnRlcm5hbF9waHlcdD0ge3RydWUsIHRydWUsIHRydWUsIGZhbHNlLFxuIFx0XHRcdFx0ICAgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlfSxcbiBcdFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcbiYjNDM7XHRcdC5uX3BpbnMgPSAyLFxuJiM0MztcdFx0Lm5fcGVyX291dCA9IDMsXG4gXHR9LFxuIFxuIFx0W0xBTjkzNzRdID0ge1xuQEAgLTE3ODIsNiAmIzQzOzE4MDIsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XG4gXHRcdC5pbnRlcm5hbF9waHlcdD0ge3RydWUsIHRydWUsIHRydWUsIHRydWUsXG4gXHRcdFx0XHQgICBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWV9LFxuIFx0XHQucHRwX2NhcGFibGUgPSB0cnVlLFxuJiM0MztcdFx0Lm5fcGlucyA9IDIsXG4mIzQzO1x0XHQubl9wZXJfb3V0ID0gMyxcbiBcdH0sXG4gXG4gXHRbTEFOOTY0Nl0gPSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaFxuaW5kZXggY2JlOTg0OTQ1NzhjMy4uMTE1NWIzOTM1MGMyYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaFxuQEAgLTEzOSw2ICYjNDM7MTM5LDggQEAgc3RydWN0IGtzel9jaGlwX2RhdGEge1xuIFx0dTggc2dtaWlfcG9ydDtcbiBcdGNvbnN0IHN0cnVjdCByZWdtYXBfYWNjZXNzX3RhYmxlICp3cl90YWJsZTtcbiBcdGNvbnN0IHN0cnVjdCByZWdtYXBfYWNjZXNzX3RhYmxlICpyZF90YWJsZTtcbiYjNDM7XHRjb25zdCB1OCBuX3BpbnM7XG4mIzQzO1x0Y29uc3QgdTggbl9wZXJfb3V0O1xuIH07XG4gXG4gc3RydWN0IGtzel9pcnEge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmNcbmluZGV4IDM5Y2M3MGQ2NTkwMGIuLmQzMzAzNDg5MmE4ZjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmNcbkBAIC0yNiw2ICYjNDM7MjYsNyBAQFxuICAqL1xuICNkZWZpbmUgS1NaX01BWF9EUklGVF9DT1JSIDYyNDk5OTlcbiAjZGVmaW5lIEtTWl9NQVhfUFVMU0VfV0lEVEggMTI1MDAwMDAwTExcbiYjNDM7I2RlZmluZSBLU1o4NDYzX01BWF9QVUxTRV9XSURUSCA1MDAwMDBMTFxuIFxuICNkZWZpbmUgS1NaX1BUUF9JTkNfTlMgNDBVTEwgIC8qIEhXIGNsb2NrIGlzIGluY3JlbWVudGVkIGV2ZXJ5IDQwIG5zIChieSA0MCkgKi9cbiAjZGVmaW5lIEtTWl9QVFBfU1VCTlNfQklUUyAzMlxuQEAgLTYzLDYgJiM0Mzs2NCwxNyBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X2dwaW8oc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiBcdFx0XHQgTEVEX1NSQ19QVFBfR1BJT18xIHwgTEVEX1NSQ19QVFBfR1BJT18yKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfdG91X3Jlc2V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHVuaXQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrc3pfcm13MTYoZGV2LCBLU1o4NDYzX1RPVV9TV19SU1QsIEJJVCh1bml0KSwgQklUKHVuaXQpKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGtzel9ybXcxNihkZXYsIEtTWjg0NjNfVE9VX1NXX1JTVCwgQklUKHVuaXQpLCAwKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGtzel9wdHBfdG91X3Jlc2V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHVuaXQpXG4ge1xuIFx0dTMyIGRhdGE7XG5AQCAtODYsNyAmIzQzOzk4LDcgQEAgc3RhdGljIGludCBrc3pfcHRwX3RvdV9yZXNldChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCB1bml0KVxuIFx0XHRcdCAwKTtcbiB9XG4gXG4tc3RhdGljIGludCBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkodTY0IHB1bHNlX25zKVxuJiM0MztzdGF0aWMgaW50IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeSh1NjQgcHVsc2VfbnMsIHUzMiBtYXNrKVxuIHtcbiBcdHUzMiBkYXRhO1xuIFxuQEAgLTk0LDcgJiM0MzsxMDYsNyBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeSh1NjQgcHVsc2VfbnMpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0ZGF0YSA9IChwdWxzZV9ucyAvIDgpO1xuLVx0aWYgKCFGSUVMRF9GSVQoVFJJR19QVUxTRV9XSURUSF9NLCBkYXRhKSlcbiYjNDM7XHRpZiAoKG1hc2sgXHUwMDI2IGRhdGEpICE9IGRhdGEpXG4gXHRcdHJldHVybiAtRVJBTkdFO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTIwLDYgJiM0MzsxMzIsMjggQEAgc3RhdGljIGludCBrc3pfcHRwX3RvdV90YXJnZXRfdGltZV9zZXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBrc3o4NDYzX3B0cF90b3Vfc3RhcnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdClcbiYjNDM7e1xuJiM0MztcdHUxNiBkYXRhO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGtzel9ybXcxNihkZXYsIEtTWjg0NjNfVE9VX0VOLCBCSVQodW5pdCksIEJJVCh1bml0KSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGtzel9yZWFkMTYoZGV2LCBLU1o4NDYzX1RPVV9BQ1RJVkUsIFx1MDAyNmRhdGEpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIShkYXRhIFx1MDAyNiBCSVQodW5pdCkpKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBUcmlnZ2VyIHVuaXQlZCBlcnJvciFcXG5cJiMzNDssIF9fZnVuY19fLFxuJiM0MztcdFx0XHR1bml0KTtcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBrc3pfcHRwX3RvdV9zdGFydChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCB1bml0KVxuIHtcbiBcdHUzMiBkYXRhO1xuQEAgLTE0Nyw2ICYjNDM7MTgxLDU2IEBAIHN0YXRpYyBpbnQga3N6X3B0cF90b3Vfc3RhcnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBrc3o4NDYzX3B0cF9jb25maWd1cmVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0XHR1MzIgY3ljbGVfd2lkdGhfbnMsIHUzMiBwdWxzZV93aWR0aF9ucyxcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCB0aW1lc3BlYzY0IGNvbnN0ICp0YXJnZXRfdGltZSxcbiYjNDM7XHRcdFx0XHRcdHU4IGluZGV4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHB0cF9waW5fZGVzYyAqcGluID0gXHUwMDI2ZGV2LVx1MDAzZXB0cF9kYXRhLnBpbl9jb25maWdbaW5kZXhdO1xuJiM0MztcdHUxNiBjZmdfYmFzZSA9IEtTWjg0NjNfVFJJRzFfQ0ZHICYjNDM7IEtTWjg0NjNfVFJJR05fQ0ZHX1NJWkUgKiBwaW4tXHUwMDNlY2hhbjtcbiYjNDM7XHR1MTYgZGF0YTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBIYXJkd2FyZSBoYXMgb25seSAzMiBiaXQgKi9cbiYjNDM7XHRpZiAoKHRhcmdldF90aW1lLVx1MDAzZXR2X3NlYyBcdTAwMjYgMHhmZmZmZmZmZikgIT0gdGFyZ2V0X3RpbWUtXHUwMDNldHZfc2VjKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGRhdGEgPSBLU1o4NDYzX05PVElGWV9CSVQgfFxuJiM0MztcdCAgICAgICBGSUVMRF9QUkVQKEtTWjg0NjNfUEFUVEVSTl9NLCBUUklHX1BPU19QRVJJT0QpIHxcbiYjNDM7XHQgICAgICAgcGluLVx1MDAzZWluZGV4O1xuJiM0MztcdHJldCA9IGtzel93cml0ZTE2KGRldiwgY2ZnX2Jhc2UgJiM0MzsgS1NaODQ2M19QQVRURVJOX09GRiwgZGF0YSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGtzel93cml0ZTMyKGRldiwgY2ZnX2Jhc2UgJiM0MzsgS1NaODQ2M19DWUNMRV9XSURUSF9PRkYsXG4mIzQzO1x0XHRcdCAgY3ljbGVfd2lkdGhfbnMpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBTZXQgY3ljbGUgY291bnQgMCAtIEluZmluaXRlICovXG4mIzQzO1x0cmV0ID0ga3N6X3dyaXRlMTYoZGV2LCBjZmdfYmFzZSAmIzQzOyBLU1o4NDYzX0NZQ0xFX0NOVF9PRkYsIDApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBLU1o4NDYzIHVzZXMgYSA4IG5zIHVuaXQgdmFsdWUgdG8gY29tcHV0ZSB0aGUgcHVsc2Ugd2lkdGggKi9cbiYjNDM7XHRkYXRhID0gKHB1bHNlX3dpZHRoX25zIC8gOCk7XG4mIzQzO1x0cmV0ID0ga3N6X3dyaXRlMTYoZGV2LCBjZmdfYmFzZSAmIzQzOyBLU1o4NDYzX1BVTFNFX1dJRFRIX09GRiwgZGF0YSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGtzel93cml0ZTMyKGRldiwgY2ZnX2Jhc2UgJiM0MzsgS1NaODQ2M19UQVJHRVRfTlNFQyxcbiYjNDM7XHRcdFx0ICB0YXJnZXRfdGltZS1cdTAwM2V0dl9uc2VjKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCBjZmdfYmFzZSAmIzQzOyBLU1o4NDYzX1RBUkdFVF9TRUMsXG4mIzQzO1x0XHRcdCAgdGFyZ2V0X3RpbWUtXHUwMDNldHZfc2VjKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBrc3pfcHRwX2NvbmZpZ3VyZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCAgICB1MzIgY3ljbGVfd2lkdGhfbnMsIHUzMiBwdWxzZV93aWR0aF9ucyxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBjb25zdCAqdGFyZ2V0X3RpbWUsXG5AQCAtMTgzLDE3ICYjNDM7MjY3LDExIEBAIHN0YXRpYyBpbnQga3N6X3B0cF9jb25maWd1cmVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBrc3pfcHRwX2VuYWJsZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbi1cdFx0XHRcdCBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LFxuLVx0XHRcdFx0IGludCBvbilcbiYjNDM7c3RhdGljIGludCBrc3pfcHRwX2dldF9waW4oc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0ICAgc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCBjb25zdCAqcmVxdWVzdClcbiB7XG4gXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IFx1MDAyNmRldi1cdTAwM2VwdHBfZGF0YTtcbi1cdHU2NCByZXFfcHVsc2Vfd2lkdGhfbnM7XG4tXHR1NjQgY3ljbGVfd2lkdGhfbnM7XG4tXHR1NjQgcHVsc2Vfd2lkdGhfbnM7XG4tXHRpbnQgcGluID0gMDtcbi1cdHUzMiBkYXRhMzI7XG4tXHRpbnQgcmV0O1xuJiM0MztcdGludCBwaW47XG4gXG4gXHRpZiAocmVxdWVzdC1cdTAwM2VmbGFncyBcdTAwMjYgflBUUF9QRVJPVVRfRFVUWV9DWUNMRSlcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuQEAgLTIwNiw2ICYjNDM7Mjg0LDExNCBAQCBzdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuIFx0aWYgKHBpbiBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0cmV0dXJuIHBpbjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBrc3pfcHRwX2NvbXB1dGVfcGVyb3V0X2N5Y2xlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LFxuJiM0MztcdFx0XHRcdFx0dTY0ICpjeWNsZV93aWR0aF9ucylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gXHUwMDI2ZGV2LVx1MDAzZXB0cF9kYXRhO1xuJiM0MztcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2VwZXJvdXRfdGFyZ2V0X3RpbWVfZmlyc3QudHZfc2VjICA9IHJlcXVlc3QtXHUwMDNlc3RhcnQuc2VjO1xuJiM0MztcdHB0cF9kYXRhLVx1MDAzZXBlcm91dF90YXJnZXRfdGltZV9maXJzdC50dl9uc2VjID0gcmVxdWVzdC1cdTAwM2VzdGFydC5uc2VjO1xuJiM0MztcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2VwZXJvdXRfcGVyaW9kLnR2X3NlYyA9IHJlcXVlc3QtXHUwMDNlcGVyaW9kLnNlYztcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2VwZXJvdXRfcGVyaW9kLnR2X25zZWMgPSByZXF1ZXN0LVx1MDAzZXBlcmlvZC5uc2VjO1xuJiM0MztcbiYjNDM7XHQqY3ljbGVfd2lkdGhfbnMgPSB0aW1lc3BlYzY0X3RvX25zKFx1MDAyNnB0cF9kYXRhLVx1MDAzZXBlcm91dF9wZXJpb2QpO1xuJiM0MztcdGlmICgoKmN5Y2xlX3dpZHRoX25zIFx1MDAyNiBUUklHX0NZQ0xFX1dJRFRIX00pICE9ICpjeWNsZV93aWR0aF9ucykge1xuJiM0MztcdFx0KmN5Y2xlX3dpZHRoX25zID0gMDtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1NjQga3N6X3B0cF9jb21wdXRlX3Blcm91dF9wdWxzZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCBjb25zdCAqcmVxdWVzdCxcbiYjNDM7XHRcdFx0XHRcdHU2NCBtYXhfcHVsc2Vfd2lkdGgpXG4mIzQzO3tcbiYjNDM7XHR1NjQgcmVxX3B1bHNlX3dpZHRoX25zO1xuJiM0MztcbiYjNDM7XHRpZiAocmVxdWVzdC1cdTAwM2VmbGFncyBcdTAwMjYgUFRQX1BFUk9VVF9EVVRZX0NZQ0xFKVxuJiM0MztcdFx0cmV0dXJuIHJlcXVlc3QtXHUwMDNlb24uc2VjICogTlNFQ19QRVJfU0VDICYjNDM7XHRyZXF1ZXN0LVx1MDAzZW9uLm5zZWM7XG4mIzQzO1xuJiM0MztcdC8qIFVzZSBhIGR1dHkgY3ljbGUgb2YgNTAlLiBNYXhpbXVtIHB1bHNlIHdpZHRoIHN1cHBvcnRlZCBieSB0aGVcbiYjNDM7XHQgKiBoYXJkd2FyZSBpcyBhIGxpdHRsZSBiaXQgbW9yZSB0aGFuIDEyNSBtcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXFfcHVsc2Vfd2lkdGhfbnMgPSAocmVxdWVzdC1cdTAwM2VwZXJpb2Quc2VjICogTlNFQ19QRVJfU0VDICYjNDM7XG4mIzQzO1x0XHRcdCAgICAgIHJlcXVlc3QtXHUwMDNlcGVyaW9kLm5zZWMpIC8gMjtcbiYjNDM7XHRyZXR1cm4gbWluX3QodTY0LCByZXFfcHVsc2Vfd2lkdGhfbnMsIG1heF9wdWxzZV93aWR0aCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfZW5hYmxlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCBjb25zdCAqcmVxdWVzdCxcbiYjNDM7XHRcdFx0XHQgICAgIGludCBvbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gXHUwMDI2ZGV2LVx1MDAzZXB0cF9kYXRhO1xuJiM0MztcdHU2NCBjeWNsZV93aWR0aF9ucztcbiYjNDM7XHR1NjQgcHVsc2Vfd2lkdGhfbnM7XG4mIzQzO1x0aW50IHBpbjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwaW4gPSBrc3pfcHRwX2dldF9waW4oZGV2LCByZXF1ZXN0KTtcbiYjNDM7XHRpZiAocGluIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHBpbjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0ga3N6ODQ2M19wdHBfdG91X3Jlc2V0KGRldiwgcmVxdWVzdC1cdTAwM2VpbmRleCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghb24pIHtcbiYjNDM7XHRcdHB0cF9kYXRhLVx1MDAzZXRvdV9tb2RlID0gS1NaX1BUUF9UT1VfSURMRTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XHRyZXQgPSBrc3pfcHRwX2NvbXB1dGVfcGVyb3V0X2N5Y2xlKGRldiwgcmVxdWVzdCwgXHUwMDI2Y3ljbGVfd2lkdGhfbnMpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHB1bHNlX3dpZHRoX25zID0ga3N6X3B0cF9jb21wdXRlX3Blcm91dF9wdWxzZShkZXYsIHJlcXVlc3QsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIEtTWjg0NjNfTUFYX1BVTFNFX1dJRFRIKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0ga3N6X3B0cF90b3VfcHVsc2VfdmVyaWZ5KHB1bHNlX3dpZHRoX25zLFxuJiM0MztcdFx0XHRcdCAgICAgICBLU1o4NDYzX1RSSUdfUFVMU0VfV0lEVEhfTSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGtzejg0NjNfcHRwX2NvbmZpZ3VyZV9wZXJvdXQoZGV2LCBjeWNsZV93aWR0aF9ucywgcHVsc2Vfd2lkdGhfbnMsXG4mIzQzO1x0XHRcdFx0XHQgICBcdTAwMjZwdHBfZGF0YS1cdTAwM2VwZXJvdXRfdGFyZ2V0X3RpbWVfZmlyc3QsXG4mIzQzO1x0XHRcdFx0XHQgICBwaW4pO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrc3pfcHRwX3RvdV9ncGlvKGRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGtzejg0NjNfcHRwX3RvdV9zdGFydChkZXYsIHJlcXVlc3QtXHUwMDNlaW5kZXgpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2V0b3VfbW9kZSA9IEtTWl9QVFBfVE9VX1BFUk9VVDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQga3N6X3B0cF9lbmFibGVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgY29uc3QgKnJlcXVlc3QsXG4mIzQzO1x0XHRcdFx0IGludCBvbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gXHUwMDI2ZGV2LVx1MDAzZXB0cF9kYXRhO1xuJiM0MztcdHU2NCBjeWNsZV93aWR0aF9ucztcbiYjNDM7XHR1NjQgcHVsc2Vfd2lkdGhfbnM7XG4mIzQzO1x0aW50IHBpbiA9IDA7XG4mIzQzO1x0dTMyIGRhdGEzMjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwaW4gPSBrc3pfcHRwX2dldF9waW4oZGV2LCByZXF1ZXN0KTtcbiYjNDM7XHRpZiAocGluIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHBpbjtcbiYjNDM7XG4gXHRkYXRhMzIgPSBGSUVMRF9QUkVQKFBUUF9HUElPX0lOREVYLCBwaW4pIHxcbiBcdFx0IEZJRUxEX1BSRVAoUFRQX1RPVV9JTkRFWCwgcmVxdWVzdC1cdTAwM2VpbmRleCk7XG4gXHRyZXQgPSBrc3pfcm13MzIoZGV2LCBSRUdfUFRQX1VOSVRfSU5ERVhfXzQsXG5AQCAtMjIxLDMxICYjNDM7NDA3LDEzIEBAIHN0YXRpYyBpbnQga3N6X3B0cF9lbmFibGVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4gXHRcdHB0cF9kYXRhLVx1MDAzZXRvdV9tb2RlID0gS1NaX1BUUF9UT1VfSURMRTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4mIzQzO1x0cmV0ID0ga3N6X3B0cF9jb21wdXRlX3Blcm91dF9jeWNsZShkZXYsIHJlcXVlc3QsIFx1MDAyNmN5Y2xlX3dpZHRoX25zKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRwdWxzZV93aWR0aF9ucyA9IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfcHVsc2UoZGV2LCByZXF1ZXN0LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICBLU1pfTUFYX1BVTFNFX1dJRFRIKTtcbiBcbi1cdHB0cF9kYXRhLVx1MDAzZXBlcm91dF90YXJnZXRfdGltZV9maXJzdC50dl9zZWMgID0gcmVxdWVzdC1cdTAwM2VzdGFydC5zZWM7XG4tXHRwdHBfZGF0YS1cdTAwM2VwZXJvdXRfdGFyZ2V0X3RpbWVfZmlyc3QudHZfbnNlYyA9IHJlcXVlc3QtXHUwMDNlc3RhcnQubnNlYztcbi1cbi1cdHB0cF9kYXRhLVx1MDAzZXBlcm91dF9wZXJpb2QudHZfc2VjID0gcmVxdWVzdC1cdTAwM2VwZXJpb2Quc2VjO1xuLVx0cHRwX2RhdGEtXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9uc2VjID0gcmVxdWVzdC1cdTAwM2VwZXJpb2QubnNlYztcbi1cbi1cdGN5Y2xlX3dpZHRoX25zID0gdGltZXNwZWM2NF90b19ucyhcdTAwMjZwdHBfZGF0YS1cdTAwM2VwZXJvdXRfcGVyaW9kKTtcbi1cdGlmICgoY3ljbGVfd2lkdGhfbnMgXHUwMDI2IFRSSUdfQ1lDTEVfV0lEVEhfTSkgIT0gY3ljbGVfd2lkdGhfbnMpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuLVx0aWYgKHJlcXVlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IFBUUF9QRVJPVVRfRFVUWV9DWUNMRSkge1xuLVx0XHRwdWxzZV93aWR0aF9ucyA9IHJlcXVlc3QtXHUwMDNlb24uc2VjICogTlNFQ19QRVJfU0VDICYjNDM7XG4tXHRcdFx0cmVxdWVzdC1cdTAwM2Vvbi5uc2VjO1xuLVx0fSBlbHNlIHtcbi1cdFx0LyogVXNlIGEgZHV0eSBjeWNsZSBvZiA1MCUuIE1heGltdW0gcHVsc2Ugd2lkdGggc3VwcG9ydGVkIGJ5IHRoZVxuLVx0XHQgKiBoYXJkd2FyZSBpcyBhIGxpdHRsZSBiaXQgbW9yZSB0aGFuIDEyNSBtcy5cbi1cdFx0ICovXG4tXHRcdHJlcV9wdWxzZV93aWR0aF9ucyA9IChyZXF1ZXN0LVx1MDAzZXBlcmlvZC5zZWMgKiBOU0VDX1BFUl9TRUMgJiM0Mztcbi1cdFx0XHRcdCAgICAgIHJlcXVlc3QtXHUwMDNlcGVyaW9kLm5zZWMpIC8gMjtcbi1cdFx0cHVsc2Vfd2lkdGhfbnMgPSBtaW5fdCh1NjQsIHJlcV9wdWxzZV93aWR0aF9ucyxcbi1cdFx0XHRcdCAgICAgICBLU1pfTUFYX1BVTFNFX1dJRFRIKTtcbi1cdH1cbi1cbi1cdHJldCA9IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeShwdWxzZV93aWR0aF9ucyk7XG4mIzQzO1x0cmV0ID0ga3N6X3B0cF90b3VfcHVsc2VfdmVyaWZ5KHB1bHNlX3dpZHRoX25zLCBUUklHX1BVTFNFX1dJRFRIX00pO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC03NTYsMTEgJiM0Mzs5MjQsMTEgQEAgc3RhdGljIGludCBrc3pfcHRwX2dldHRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQga3N6X3B0cF9yZXN0YXJ0X3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuJiM0MztzdGF0aWMgaW50IGtzel9wdHBfcHJlcGFyZV9yZXN0YXJ0X3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0ICpyZXF1ZXN0KVxuIHtcbiBcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gXHUwMDI2ZGV2LVx1MDAzZXB0cF9kYXRhO1xuIFx0czY0IG5vd19ucywgZmlyc3RfbnMsIHBlcmlvZF9ucywgbmV4dF9ucztcbi1cdHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgcmVxdWVzdDtcbiBcdHN0cnVjdCB0aW1lc3BlYzY0IG5leHQ7XG4gXHRzdHJ1Y3QgdGltZXNwZWM2NCBub3c7XG4gXHR1bnNpZ25lZCBpbnQgY291bnQ7XG5AQCAtNzkxLDQwICYjNDM7OTU5LDExMSBAQCBzdGF0aWMgaW50IGtzel9wdHBfcmVzdGFydF9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiBcbiBcdC8qIFJlc3RhcnQgcGVyaW9kaWMgb3V0cHV0IHNpZ25hbCAqL1xuIFx0bmV4dCA9IG5zX3RvX3RpbWVzcGVjNjQobmV4dF9ucyk7XG4tXHRyZXF1ZXN0LnN0YXJ0LnNlYyAgPSBuZXh0LnR2X3NlYztcbi1cdHJlcXVlc3Quc3RhcnQubnNlYyA9IG5leHQudHZfbnNlYztcbi1cdHJlcXVlc3QucGVyaW9kLnNlYyAgPSBwdHBfZGF0YS1cdTAwM2VwZXJvdXRfcGVyaW9kLnR2X3NlYztcbi1cdHJlcXVlc3QucGVyaW9kLm5zZWMgPSBwdHBfZGF0YS1cdTAwM2VwZXJvdXRfcGVyaW9kLnR2X25zZWM7XG4tXHRyZXF1ZXN0LmluZGV4ID0gMDtcbi1cdHJlcXVlc3QuZmxhZ3MgPSAwO1xuJiM0MztcdHJlcXVlc3QtXHUwMDNlc3RhcnQuc2VjICA9IG5leHQudHZfc2VjO1xuJiM0MztcdHJlcXVlc3QtXHUwMDNlc3RhcnQubnNlYyA9IG5leHQudHZfbnNlYztcbiYjNDM7XHRyZXF1ZXN0LVx1MDAzZXBlcmlvZC5zZWMgID0gcHRwX2RhdGEtXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9zZWM7XG4mIzQzO1x0cmVxdWVzdC1cdTAwM2VwZXJpb2QubnNlYyA9IHB0cF9kYXRhLVx1MDAzZXBlcm91dF9wZXJpb2QudHZfbnNlYztcbiYjNDM7XHRyZXF1ZXN0LVx1MDAzZWluZGV4ID0gMDtcbiYjNDM7XHRyZXF1ZXN0LVx1MDAzZWZsYWdzID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQga3N6X3B0cF9yZXN0YXJ0X3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCByZXF1ZXN0O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGtzel9wdHBfcHJlcGFyZV9yZXN0YXJ0X3Blcm91dChkZXYsIFx1MDAyNnJlcXVlc3QpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0dXJuIGtzel9wdHBfZW5hYmxlX3Blcm91dChkZXYsIFx1MDAyNnJlcXVlc3QsIDEpO1xuIH1cbiBcbi1zdGF0aWMgaW50IGtzel9wdHBfc2V0dGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcbi1cdFx0XHQgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4mIzQzO3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfcmVzdGFydF9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiB7XG4tXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTtcbi1cdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTtcbi1cdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZXJlZ3M7XG4mIzQzO1x0c3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCByZXF1ZXN0O1xuIFx0aW50IHJldDtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2cHRwX2RhdGEtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmV0ID0ga3N6X3B0cF9wcmVwYXJlX3Jlc3RhcnRfcGVyb3V0KGRldiwgXHUwMDI2cmVxdWVzdCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBrc3o4NDYzX3B0cF9lbmFibGVfcGVyb3V0KGRldiwgXHUwMDI2cmVxdWVzdCwgMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19rc3pfcHRwX3NldHRpbWUoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCB1MTYgKnJlZ3MgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2VyZWdzO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHQvKiBXcml0ZSB0byBzaGFkb3cgcmVnaXN0ZXJzIGFuZCBMb2FkIFBUUCBjbG9jayAqL1xuIFx0cmV0ID0ga3N6X3dyaXRlMTYoZGV2LCByZWdzW1BUUF9SVENfU1VCX05BTk9TRUNdLCBQVFBfUlRDXzBOUyk7XG4gXHRpZiAocmV0KVxuLVx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXG4gXHRyZXQgPSBrc3pfd3JpdGUzMihkZXYsIHJlZ3NbUFRQX1JUQ19OQU5PU0VDXSwgdHMtXHUwMDNldHZfbnNlYyk7XG4gXHRpZiAocmV0KVxuLVx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXG4gXHRyZXQgPSBrc3pfd3JpdGUzMihkZXYsIHJlZ3NbUFRQX1JUQ19TRUNdLCB0cy1cdTAwM2V0dl9zZWMpO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0ga3N6X3JtdzE2KGRldiwgcmVnc1tQVFBfQ0xLX0NUUkxdLCBQVFBfTE9BRF9USU1FLCBQVFBfTE9BRF9USU1FKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfc2V0dGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcbiYjNDM7XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gcHRwX2NhcHNfdG9fZGF0YShwdHApO1xuJiM0MztcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX2tzel9wdHBfc2V0dGltZShkZXYsIHRzKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byB1bmxvY2s7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAocHRwX2RhdGEtXHUwMDNldG91X21vZGUpIHtcbiYjNDM7XHRjYXNlIEtTWl9QVFBfVE9VX0lETEU6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0Y2FzZSBLU1pfUFRQX1RPVV9QRVJPVVQ6XG4mIzQzO1x0XHRyZXQgPSBrc3o4NDYzX3B0cF9yZXN0YXJ0X3Blcm91dChkZXYpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2cHRwX2RhdGEtXHUwMDNlY2xvY2tfbG9jayk7XG4mIzQzO1x0cHRwX2RhdGEtXHUwMDNlY2xvY2tfdGltZSA9ICp0cztcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZwdHBfZGF0YS1cdTAwM2VjbG9ja19sb2NrKTtcbiYjNDM7XG4mIzQzO3VubG9jazpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHRwX2RhdGEtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQga3N6X3B0cF9zZXR0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxuJiM0MztcdFx0XHQgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTtcbiYjNDM7XHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwdHBfZGF0YS1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19rc3pfcHRwX3NldHRpbWUoZGV2LCB0cyk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIHVubG9jaztcbiBcbkBAIC04OTAsMTggJiM0MzsxMTI5LDEzIEBAIHN0YXRpYyBpbnQga3N6X3B0cF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBsb25nIHNjYWxlZF9wcG0pXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgaW50IGtzel9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKVxuJiM0MztzdGF0aWMgaW50IF9fa3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHM2NCBkZWx0YSlcbiB7XG4tXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTtcbi1cdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTtcbi1cdHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhNjQgPSBuc190b190aW1lc3BlYzY0KGRlbHRhKTtcbiBcdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZXJlZ3M7XG4gXHRzMzIgc2VjLCBuc2VjO1xuIFx0dTE2IGRhdGExNjtcbiBcdGludCByZXQ7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuLVxuIFx0LyogZG8gbm90IHVzZSBuc190b190aW1lc3BlYzY0KCksXG4gXHQgKiBib3RoIHNlYyBhbmQgbnNlYyBhcmUgc3VidHJhY3RlZCBieSBod1xuIFx0ICovXG5AQCAtOTA5LDE1ICYjNDM7MTE0MywxNSBAQCBzdGF0aWMgaW50IGtzel9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKVxuIFxuIFx0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfTkFOT1NFQ10sIGFicyhuc2VjKSk7XG4gXHRpZiAocmV0KVxuLVx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXG4gXHRyZXQgPSBrc3pfd3JpdGUzMihkZXYsIHJlZ3NbUFRQX1JUQ19TRUNdLCBhYnMoc2VjKSk7XG4gXHRpZiAocmV0KVxuLVx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXG4gXHRyZXQgPSBrc3pfcmVhZDE2KGRldiwgcmVnc1tQVFBfQ0xLX0NUUkxdLCBcdTAwMjZkYXRhMTYpO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0ZGF0YTE2IHw9IFBUUF9TVEVQX0FESjtcbiBcbkBAIC05MjgsNiAmIzQzOzExNjIsNTYgQEAgc3RhdGljIGludCBrc3pfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHM2NCBkZWx0YSlcbiBcdFx0ZGF0YTE2IHw9IFBUUF9TVEVQX0RJUjtcbiBcbiBcdHJldCA9IGtzel93cml0ZTE2KGRldiwgcmVnc1tQVFBfQ0xLX0NUUkxdLCBkYXRhMTYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBrc3o4NDYzX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTtcbiYjNDM7XHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XG4mIzQzO1x0c3RydWN0IHRpbWVzcGVjNjQgZGVsdGE2NCA9IG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHRwX2RhdGEtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fa3N6X3B0cF9hZGp0aW1lKGRldiwgZGVsdGEpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChwdHBfZGF0YS1cdTAwM2V0b3VfbW9kZSkge1xuJiM0MztcdGNhc2UgS1NaX1BUUF9UT1VfSURMRTpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIEtTWl9QVFBfVE9VX1BFUk9VVDpcbiYjNDM7XHRcdHJldCA9IGtzejg0NjNfcHRwX3Jlc3RhcnRfcGVyb3V0KGRldik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZwdHBfZGF0YS1cdTAwM2VjbG9ja19sb2NrKTtcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2VjbG9ja190aW1lID0gdGltZXNwZWM2NF9hZGQocHRwX2RhdGEtXHUwMDNlY2xvY2tfdGltZSwgZGVsdGE2NCk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cHRwX2RhdGEtXHUwMDNlY2xvY2tfbG9jayk7XG4mIzQzO1xuJiM0Mzt1bmxvY2s6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQga3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTtcbiYjNDM7XHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XG4mIzQzO1x0c3RydWN0IHRpbWVzcGVjNjQgZGVsdGE2NCA9IG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHRwX2RhdGEtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fa3N6X3B0cF9hZGp0aW1lKGRldiwgZGVsdGEpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byB1bmxvY2s7XG4gXG5AQCAtOTUyLDYgJiM0MzsxMjM2LDI2IEBAIHN0YXRpYyBpbnQga3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBrc3o4NDYzX3B0cF9lbmFibGUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcmVxLCBpbnQgb24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTtcbiYjNDM7XHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChyZXEtXHUwMDNldHlwZSkge1xuJiM0MztcdGNhc2UgUFRQX0NMS19SRVFfUEVST1VUOlxuJiM0MztcdFx0bXV0ZXhfbG9jayhcdTAwMjZwdHBfZGF0YS1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHJldCA9IGtzejg0NjNfcHRwX2VuYWJsZV9wZXJvdXQoZGV2LCBcdTAwMjZyZXEtXHUwMDNlcGVyb3V0LCBvbik7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2cHRwX2RhdGEtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxuIFx0XHRcdCAgc3RydWN0IHB0cF9jbG9ja19yZXF1ZXN0ICpyZXEsIGludCBvbilcbiB7XG5AQCAtMTAyOCwxNyAmIzQzOzEzMzIsMzMgQEAgc3RhdGljIGludCBrc3pfcHRwX3N0YXJ0X2Nsb2NrKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4taW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuJiM0Mzt2b2lkIGtzejg0NjNfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuJiM0MztcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhO1xuJiM0MztcbiYjNDM7XHRwdHBfZGF0YSA9IFx1MDAyNmRldi1cdTAwM2VwdHBfZGF0YTtcbiYjNDM7XG4mIzQzO1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy5vd25lclx0XHQ9IFRISVNfTU9EVUxFO1xuJiM0MztcdHNucHJpbnRmKHB0cF9kYXRhLVx1MDAzZWNhcHMubmFtZSwgMTYsIFwmIzM0O01pY3JvY2hpcCBDbG9ja1wmIzM0Oyk7XG4mIzQzO1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy5tYXhfYWRqXHRcdD0gS1NaX01BWF9EUklGVF9DT1JSO1xuJiM0MztcdHB0cF9kYXRhLVx1MDAzZWNhcHMuZ2V0dGltZTY0XHQ9IGtzel9wdHBfZ2V0dGltZTtcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2VjYXBzLnNldHRpbWU2NFx0PSBrc3o4NDYzX3B0cF9zZXR0aW1lO1xuJiM0MztcdHB0cF9kYXRhLVx1MDAzZWNhcHMuYWRqZmluZVx0XHQ9IGtzel9wdHBfYWRqZmluZTtcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2VjYXBzLmFkanRpbWVcdFx0PSBrc3o4NDYzX3B0cF9hZGp0aW1lO1xuJiM0MztcdHB0cF9kYXRhLVx1MDAzZWNhcHMuZG9fYXV4X3dvcmtcdD0ga3N6X3B0cF9kb19hdXhfd29yaztcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2VjYXBzLmVuYWJsZVx0XHQ9IGtzejg0NjNfcHRwX2VuYWJsZTtcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2VjYXBzLnZlcmlmeVx0XHQ9IGtzel9wdHBfdmVyaWZ5X3BpbjtcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2VjYXBzLm5fcGluc1x0XHQ9IGRldi1cdTAwM2VpbmZvLVx1MDAzZW5fcGlucztcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2VjYXBzLm5fcGVyX291dFx0PSBkZXYtXHUwMDNlaW5mby1cdTAwM2VuX3Blcl9vdXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQga3N6X3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4ge1xuIFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4tXHRjb25zdCB1MTYgKnJlZ3MgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2VyZWdzO1xuIFx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGE7XG4tXHRpbnQgcmV0O1xuLVx0dTggaTtcbiBcbiBcdHB0cF9kYXRhID0gXHUwMDI2ZGV2LVx1MDAzZXB0cF9kYXRhO1xuLVx0bXV0ZXhfaW5pdChcdTAwMjZwdHBfZGF0YS1cdTAwM2Vsb2NrKTtcbi1cdHNwaW5fbG9ja19pbml0KFx1MDAyNnB0cF9kYXRhLVx1MDAzZWNsb2NrX2xvY2spO1xuIFxuIFx0cHRwX2RhdGEtXHUwMDNlY2Fwcy5vd25lclx0XHQ9IFRISVNfTU9EVUxFO1xuIFx0c25wcmludGYocHRwX2RhdGEtXHUwMDNlY2Fwcy5uYW1lLCAxNiwgXCYjMzQ7TWljcm9jaGlwIENsb2NrXCYjMzQ7KTtcbkBAIC0xMDUwLDE0ICYjNDM7MTM3MCwyNyBAQCBpbnQga3N6X3B0cF9jbG9ja19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRwdHBfZGF0YS1cdTAwM2VjYXBzLmRvX2F1eF93b3JrXHQ9IGtzel9wdHBfZG9fYXV4X3dvcms7XG4gXHRwdHBfZGF0YS1cdTAwM2VjYXBzLmVuYWJsZVx0XHQ9IGtzel9wdHBfZW5hYmxlO1xuIFx0cHRwX2RhdGEtXHUwMDNlY2Fwcy52ZXJpZnlcdFx0PSBrc3pfcHRwX3ZlcmlmeV9waW47XG4tXHRwdHBfZGF0YS1cdTAwM2VjYXBzLm5fcGluc1x0XHQ9IEtTWl9QVFBfTl9HUElPO1xuLVx0cHRwX2RhdGEtXHUwMDNlY2Fwcy5uX3Blcl9vdXRcdD0gMztcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2VjYXBzLm5fcGluc1x0XHQ9IGRldi1cdTAwM2VpbmZvLVx1MDAzZW5fcGlucztcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2VjYXBzLm5fcGVyX291dFx0PSBkZXYtXHUwMDNlaW5mby1cdTAwM2VuX3Blcl9vdXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuJiM0MztcdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZXJlZ3M7XG4mIzQzO1x0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGE7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHR1OCBpO1xuJiM0MztcbiYjNDM7XHRwdHBfZGF0YSA9IFx1MDAyNmRldi1cdTAwM2VwdHBfZGF0YTtcbiYjNDM7XHRtdXRleF9pbml0KFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNnB0cF9kYXRhLVx1MDAzZWNsb2NrX2xvY2spO1xuIFxuIFx0cmV0ID0ga3N6X3B0cF9zdGFydF9jbG9jayhkZXYpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEtTWl9QVFBfTl9HUElPOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldi1cdTAwM2VpbmZvLVx1MDAzZW5fcGluczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0c3RydWN0IHB0cF9waW5fZGVzYyAqcHRwX3BpbiA9IFx1MDAyNnB0cF9kYXRhLVx1MDAzZXBpbl9jb25maWdbaV07XG4gXG4gXHRcdHNucHJpbnRmKHB0cF9waW4tXHUwMDNlbmFtZSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oXG5pbmRleCA3MDY3ZWM5YmQxZTZmLi45MjU4OWNmMzczYWMyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oXG5AQCAtMTIsNyAmIzQzOzEyLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiBcbi0jZGVmaW5lIEtTWl9QVFBfTl9HUElPXHRcdDJcbiYjNDM7I2RlZmluZSBLU1pfUFRQX05fR1BJT1x0XHQxMlxuIFxuIGVudW0ga3N6X3B0cF90b3VfbW9kZSB7XG4gXHRLU1pfUFRQX1RPVV9JRExFLFxuQEAgLTMzLDYgJiM0MzszMyw4IEBAIHN0cnVjdCBrc3pfcHRwX2RhdGEge1xuIFx0c3RydWN0IHRpbWVzcGVjNjQgcGVyb3V0X3BlcmlvZDtcbiB9O1xuIFxuJiM0Mzt2b2lkIGtzel9wdHBfc2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbiYjNDM7dm9pZCBrc3o4NDYzX3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xuIGludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XG4gXG4gdm9pZCBrc3pfcHRwX2Nsb2NrX3VucmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbkBAIC02NSw2ICYjNDM7NjcsNyBAQCBzdHJ1Y3Qga3N6X3B0cF9kYXRhIHtcbiBcdHN0cnVjdCBtdXRleCBsb2NrO1xuIH07XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBrc3pfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykgeyB9XG4gc3RhdGljIGlubGluZSBpbnQga3N6X3B0cF9jbG9ja19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4ge1xuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwX3JlZy5oIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwX3JlZy5oXG5pbmRleCA2NWVhODU3N2FmNzU1Li4xNmYxMTdmYTVkNDliIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwX3JlZy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmhcbkBAIC01MSw2ICYjNDM7NTEsMjIgQEBcbiBcbiAjZGVmaW5lIFJFR19QVFBfVU5JVF9JTkRFWF9fNFx0XHQweDA1MjBcbiBcbiYjNDM7I2RlZmluZSBLU1o4NDYzX1RPVV9BQ1RJVkVcdFx0MHgyMDJcbiYjNDM7I2RlZmluZSBLU1o4NDYzX1RPVV9FTlx0XHRcdDB4MjA2XG4mIzQzOyNkZWZpbmUgS1NaODQ2M19UT1VfU1dfUlNUXHRcdDB4MjA4XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEtTWjg0NjNfVFJJR05fQ0ZHX1NJWkVcdFx0MHgyMFxuJiM0MzsjZGVmaW5lIEtTWjg0NjNfVFJJRzFfQ0ZHXHRcdDB4MjIwXG4mIzQzOyNkZWZpbmUgS1NaODQ2M19UQVJHRVRfTlNFQ1x0XHQweDAwMFxuJiM0MzsjZGVmaW5lIEtTWjg0NjNfVEFSR0VUX1NFQ1x0XHQweDAwNFxuJiM0MzsjZGVmaW5lIEtTWjg0NjNfUEFUVEVSTl9PRkZcdFx0MHgwMDhcbiYjNDM7I2RlZmluZSBLU1o4NDYzX05PVElGWV9CSVRcdFx0QklUKDgpXG4mIzQzOyNkZWZpbmUgS1NaODQ2M19QQVRURVJOX01cdFx0R0VOTUFTSyg2LCA0KVxuJiM0MzsjZGVmaW5lIEtTWjg0NjNfUFVMU0VfV0lEVEhfT0ZGXHRcdDB4MDBBXG4mIzQzOyNkZWZpbmUgS1NaODQ2M19UUklHX1BVTFNFX1dJRFRIX01cdEdFTk1BU0soMTUsIDApXG4mIzQzOyNkZWZpbmUgS1NaODQ2M19DWUNMRV9XSURUSF9PRkZcdFx0MHgwMENcbiYjNDM7I2RlZmluZSBLU1o4NDYzX0NZQ0xFX0NOVF9PRkZcdFx0MHgwMTBcbiYjNDM7XG4gI2RlZmluZSBQVFBfR1BJT19JTkRFWFx0XHRcdEdFTk1BU0soMTksIDE2KVxuICNkZWZpbmUgUFRQX1RTSV9JTkRFWFx0XHRcdEJJVCg4KVxuICNkZWZpbmUgUFRQX1RPVV9JTkRFWFx0XHRcdEdFTk1BU0soMSwgMClcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uY1xuaW5kZXggODZjZTNhODY3MDVmOS4uM2EyMDkxMjJmYzdkYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmNcbkBAIC04NjcsNiAmIzQzOzg2Nyw3IEBAIHN0YXRpYyBpbnQgbGFuOTM3eF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRcdH1cbiBcdH1cbiBcbiYjNDM7XHRrc3pfcHRwX3NldF9jYXBzKGRzKTtcbiBcdHJldCA9IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoZHMpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2s6ICVkXFxuXCYjMzQ7LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb2NoaXAgS1NaL0xBTiBzZXJpZXMgRFNBIEV0aGVybmV0IHN3aXRjaCBkcml2ZXJzIChzcGVjaWZpY2FsbHkgYWRkaW5nIFBUUCBwZXJpb2RpYyBvdXRwdXQgYW5kIHBpbiBjYXBhYmlsaXRpZXMgZm9yIEtTWjg0NjMgYW5kIHJlbGF0ZWQgc3dpdGNoZXMpLiBUaGVzZSBzd2l0Y2ggZHJpdmVycyBvcGVyYXRlIG92ZXIgU1BJLCBJMkMsIG9yIFNNSSBidXNlcyBhbmQgcmVxdWlyZSBwaHlzaWNhbCBNaWNyb2NoaXAgc3dpdGNoIEFTSUNzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKHN1Y2ggYXMgUUVNVSBvciBHQ0UpLCBtYWtpbmcgdGhlc2UgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlMzdjYzExNDE5NjJiMjc2YWI1ODAyZWY2ODI2YWYyYzMxMWQ5NmE5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAwNDo0MDoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMKaW5kZXggOTQxYWU5ZjY2ZjcwYi4uNmIwOGJiOGZlZDViNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMKQEAgLTI0NzgsNiAmIzQzOzI0NzgsNyBAQCBzdGF0aWMgaW50IGtzejg0NjNfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCQlpZiAocmV0KQogCQkJZ290byBmcmVlX2dpcnE7CiAKJiM0MzsJCWtzejg0NjNfcHRwX3NldF9jYXBzKGRzKTsKIAkJcmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7CiAJCWlmIChyZXQpIHsKIAkJCWRldl9lcnIoZGV2LSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jazogJWRcbiYjMzQ7LApAQCAtMjc3NSw2ICYjNDM7Mjc3Niw3IEBAIHN0YXRpYyBpbnQga3N6OF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAJfQogCiAJaWYgKGRldi0mZ3Q7aW5mby0mZ3Q7cHRwX2NhcGFibGUpIHsKJiM0MzsJCWtzel9wdHBfc2V0X2NhcHMoZHMpOwogCQlyZXQgPSBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKGRzKTsKIAkJaWYgKHJldCkgewogCQkJZGV2X2VycihkZXYtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrOiAlZFxuJiMzNDssCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jCmluZGV4IDNlZTk5NTU0NWM1NzkuLjcyNTI4YTUzYjY3ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jCkBAIC0xNzgxLDYgJiM0MzsxNzgxLDcgQEAgc3RhdGljIGludCBrc3o5NDc3X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIAl9CiAKIAlpZiAoZGV2LSZndDtpbmZvLSZndDtwdHBfY2FwYWJsZSkgewomIzQzOwkJa3N6X3B0cF9zZXRfY2Fwcyhkcyk7CiAJCXJldCA9IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoZHMpOwogCQlpZiAocmV0KSB7CiAJCQlkZXZfZXJyKGRldi0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2s6ICVkXG4mIzM0OywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMKaW5kZXggMWE5ZDZmODNhMDIzMi4uOWUyMzRhZDcxYjcyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMKQEAgLTExNjEsNiAmIzQzOzExNjEsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7CiAJCS5zdXBwb3J0c19taWkgPSB7ZmFsc2UsIGZhbHNlLCB0cnVlfSwKIAkJLnN1cHBvcnRzX3JtaWkgPSB7ZmFsc2UsIGZhbHNlLCB0cnVlfSwKIAkJLmludGVybmFsX3BoeSA9IHt0cnVlLCB0cnVlLCBmYWxzZX0sCiYjNDM7CQkubl9waW5zID0gMTIsCiYjNDM7CQkubl9wZXJfb3V0ID0gMTIsCiAJfSwKIAogCVtLU1o4NTYzXSA9IHsKQEAgLTExOTQsNiAmIzQzOzExOTYsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7CiAJCS5wdHBfY2FwYWJsZSA9IHRydWUsCiAJCS53cl90YWJsZSA9ICZhbXA7a3N6ODU2M19yZWdpc3Rlcl9zZXQsCiAJCS5yZF90YWJsZSA9ICZhbXA7a3N6ODU2M19yZWdpc3Rlcl9zZXQsCiYjNDM7CQkubl9waW5zID0gMiwKJiM0MzsJCS5uX3Blcl9vdXQgPSAzLAogCX0sCiAKIAlbS1NaODc5NV0gPSB7CkBAIC0xNDE0LDYgJiM0MzsxNDE4LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0gewogCQkuc2dtaWlfcG9ydCA9IDcsCiAJCS53cl90YWJsZSA9ICZhbXA7a3N6OTQ3N19yZWdpc3Rlcl9zZXQsCiAJCS5yZF90YWJsZSA9ICZhbXA7a3N6OTQ3N19yZWdpc3Rlcl9zZXQsCiYjNDM7CQkubl9waW5zID0gMiwKJiM0MzsJCS5uX3Blcl9vdXQgPSAzLAogCX0sCiAKIAlbS1NaOTg5Nl0gPSB7CkBAIC0xNTQ0LDYgJiM0MzsxNTUwLDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0gewogCQkuaW50ZXJuYWxfcGh5ID0ge3RydWUsIHRydWUsIGZhbHNlfSwKIAkJLmdiaXRfY2FwYWJsZSA9IHt0cnVlLCB0cnVlLCB0cnVlfSwKIAkJLnB0cF9jYXBhYmxlID0gdHJ1ZSwKJiM0MzsJCS5uX3BpbnMgPSAyLAomIzQzOwkJLm5fcGVyX291dCA9IDMsCiAJfSwKIAogCVtLU1o4NTY3XSA9IHsKQEAgLTE1ODEsNiAmIzQzOzE1ODksOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7CiAJCS5nYml0X2NhcGFibGUJPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAogCQkJCSAgIHRydWUsIHRydWV9LAogCQkucHRwX2NhcGFibGUgPSB0cnVlLAomIzQzOwkJLm5fcGlucyA9IDIsCiYjNDM7CQkubl9wZXJfb3V0ID0gMywKIAl9LAogCiAJW0tTWjk1NjddID0gewpAQCAtMTYxNSw2ICYjNDM7MTYyNSw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHsKIAkJCQkgICB0cnVlLCBmYWxzZSwgZmFsc2V9LAogCQkuZ2JpdF9jYXBhYmxlCT0ge3RydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWV9LAogCQkucHRwX2NhcGFibGUgPSB0cnVlLAomIzQzOwkJLm5fcGlucyA9IDIsCiYjNDM7CQkubl9wZXJfb3V0ID0gMywKIAl9LAogCiAJW0xBTjkzNzBdID0gewpAQCAtMTY0Niw2ICYjNDM7MTY1OCw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHsKIAkJLnN1cHBvcnRzX3JnbWlpID0ge2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlfSwKIAkJLmludGVybmFsX3BoeSA9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZX0sCiAJCS5wdHBfY2FwYWJsZSA9IHRydWUsCiYjNDM7CQkubl9waW5zID0gMiwKJiM0MzsJCS5uX3Blcl9vdXQgPSAzLAogCX0sCiAKIAlbTEFOOTM3MV0gPSB7CkBAIC0xNjc3LDYgJiM0MzsxNjkxLDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0gewogCQkuc3VwcG9ydHNfcmdtaWkgPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWV9LAogCQkuaW50ZXJuYWxfcGh5ID0ge3RydWUsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZX0sCiAJCS5wdHBfY2FwYWJsZSA9IHRydWUsCiYjNDM7CQkubl9waW5zID0gMiwKJiM0MzsJCS5uX3Blcl9vdXQgPSAzLAogCX0sCiAKIAlbTEFOOTM3Ml0gPSB7CkBAIC0xNzEyLDYgJiM0MzsxNzI4LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0gewogCQkuaW50ZXJuYWxfcGh5CT0ge3RydWUsIHRydWUsIHRydWUsIHRydWUsCiAJCQkJICAgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlfSwKIAkJLnB0cF9jYXBhYmxlID0gdHJ1ZSwKJiM0MzsJCS5uX3BpbnMgPSAyLAomIzQzOwkJLm5fcGVyX291dCA9IDMsCiAJfSwKIAogCVtMQU45MzczXSA9IHsKQEAgLTE3NDcsNiAmIzQzOzE3NjUsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7CiAJCS5pbnRlcm5hbF9waHkJPSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsCiAJCQkJICAgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlfSwKIAkJLnB0cF9jYXBhYmxlID0gdHJ1ZSwKJiM0MzsJCS5uX3BpbnMgPSAyLAomIzQzOwkJLm5fcGVyX291dCA9IDMsCiAJfSwKIAogCVtMQU45Mzc0XSA9IHsKQEAgLTE3ODIsNiAmIzQzOzE4MDIsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7CiAJCS5pbnRlcm5hbF9waHkJPSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwKIAkJCQkgICBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWV9LAogCQkucHRwX2NhcGFibGUgPSB0cnVlLAomIzQzOwkJLm5fcGlucyA9IDIsCiYjNDM7CQkubl9wZXJfb3V0ID0gMywKIAl9LAogCiAJW0xBTjk2NDZdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaAppbmRleCBjYmU5ODQ5NDU3OGMzLi4xMTU1YjM5MzUwYzJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaApAQCAtMTM5LDYgJiM0MzsxMzksOCBAQCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSB7CiAJdTggc2dtaWlfcG9ydDsKIAljb25zdCBzdHJ1Y3QgcmVnbWFwX2FjY2Vzc190YWJsZSAqd3JfdGFibGU7CiAJY29uc3Qgc3RydWN0IHJlZ21hcF9hY2Nlc3NfdGFibGUgKnJkX3RhYmxlOwomIzQzOwljb25zdCB1OCBuX3BpbnM7CiYjNDM7CWNvbnN0IHU4IG5fcGVyX291dDsKIH07CiAKIHN0cnVjdCBrc3pfaXJxIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMKaW5kZXggMzljYzcwZDY1OTAwYi4uZDMzMDM0ODkyYThmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMKQEAgLTI2LDYgJiM0MzsyNiw3IEBACiAgKi8KICNkZWZpbmUgS1NaX01BWF9EUklGVF9DT1JSIDYyNDk5OTkKICNkZWZpbmUgS1NaX01BWF9QVUxTRV9XSURUSCAxMjUwMDAwMDBMTAomIzQzOyNkZWZpbmUgS1NaODQ2M19NQVhfUFVMU0VfV0lEVEggNTAwMDAwTEwKIAogI2RlZmluZSBLU1pfUFRQX0lOQ19OUyA0MFVMTCAgLyogSFcgY2xvY2sgaXMgaW5jcmVtZW50ZWQgZXZlcnkgNDAgbnMgKGJ5IDQwKSAqLwogI2RlZmluZSBLU1pfUFRQX1NVQk5TX0JJVFMgMzIKQEAgLTYzLDYgJiM0Mzs2NCwxNyBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X2dwaW8oc3RydWN0IGtzel9kZXZpY2UgKmRldikKIAkJCSBMRURfU1JDX1BUUF9HUElPXzEgfCBMRURfU1JDX1BUUF9HUElPXzIpOwogfQogCiYjNDM7c3RhdGljIGludCBrc3o4NDYzX3B0cF90b3VfcmVzZXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGtzel9ybXcxNihkZXYsIEtTWjg0NjNfVE9VX1NXX1JTVCwgQklUKHVuaXQpLCBCSVQodW5pdCkpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGtzel9ybXcxNihkZXYsIEtTWjg0NjNfVE9VX1NXX1JTVCwgQklUKHVuaXQpLCAwKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGtzel9wdHBfdG91X3Jlc2V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHVuaXQpCiB7CiAJdTMyIGRhdGE7CkBAIC04Niw3ICYjNDM7OTgsNyBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X3Jlc2V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHVuaXQpCiAJCQkgMCk7CiB9CiAKLXN0YXRpYyBpbnQga3N6X3B0cF90b3VfcHVsc2VfdmVyaWZ5KHU2NCBwdWxzZV9ucykKJiM0MztzdGF0aWMgaW50IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeSh1NjQgcHVsc2VfbnMsIHUzMiBtYXNrKQogewogCXUzMiBkYXRhOwogCkBAIC05NCw3ICYjNDM7MTA2LDcgQEAgc3RhdGljIGludCBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkodTY0IHB1bHNlX25zKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWRhdGEgPSAocHVsc2VfbnMgLyA4KTsKLQlpZiAoIUZJRUxEX0ZJVChUUklHX1BVTFNFX1dJRFRIX00sIGRhdGEpKQomIzQzOwlpZiAoKG1hc2sgJmFtcDsgZGF0YSkgIT0gZGF0YSkKIAkJcmV0dXJuIC1FUkFOR0U7CiAKIAlyZXR1cm4gMDsKQEAgLTEyMCw2ICYjNDM7MTMyLDI4IEBAIHN0YXRpYyBpbnQga3N6X3B0cF90b3VfdGFyZ2V0X3RpbWVfc2V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IGtzejg0NjNfcHRwX3RvdV9zdGFydChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCB1bml0KQomIzQzO3sKJiM0MzsJdTE2IGRhdGE7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGtzel9ybXcxNihkZXYsIEtTWjg0NjNfVE9VX0VOLCBCSVQodW5pdCksIEJJVCh1bml0KSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBrc3pfcmVhZDE2KGRldiwgS1NaODQ2M19UT1VfQUNUSVZFLCAmYW1wO2RhdGEpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKCEoZGF0YSAmYW1wOyBCSVQodW5pdCkpKSB7CiYjNDM7CQlkZXZfZXJyKGRldi0mZ3Q7ZGV2LCAmIzM0OyVzOiBUcmlnZ2VyIHVuaXQlZCBlcnJvciFcbiYjMzQ7LCBfX2Z1bmNfXywKJiM0MzsJCQl1bml0KTsKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQga3N6X3B0cF90b3Vfc3RhcnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdCkKIHsKIAl1MzIgZGF0YTsKQEAgLTE0Nyw2ICYjNDM7MTgxLDU2IEBAIHN0YXRpYyBpbnQga3N6X3B0cF90b3Vfc3RhcnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfY29uZmlndXJlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAomIzQzOwkJCQkJdTMyIGN5Y2xlX3dpZHRoX25zLCB1MzIgcHVsc2Vfd2lkdGhfbnMsCiYjNDM7CQkJCQlzdHJ1Y3QgdGltZXNwZWM2NCBjb25zdCAqdGFyZ2V0X3RpbWUsCiYjNDM7CQkJCQl1OCBpbmRleCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwdHBfcGluX2Rlc2MgKnBpbiA9ICZhbXA7ZGV2LSZndDtwdHBfZGF0YS5waW5fY29uZmlnW2luZGV4XTsKJiM0MzsJdTE2IGNmZ19iYXNlID0gS1NaODQ2M19UUklHMV9DRkcgJiM0MzsgS1NaODQ2M19UUklHTl9DRkdfU0laRSAqIHBpbi0mZ3Q7Y2hhbjsKJiM0MzsJdTE2IGRhdGE7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qIEhhcmR3YXJlIGhhcyBvbmx5IDMyIGJpdCAqLwomIzQzOwlpZiAoKHRhcmdldF90aW1lLSZndDt0dl9zZWMgJmFtcDsgMHhmZmZmZmZmZikgIT0gdGFyZ2V0X3RpbWUtJmd0O3R2X3NlYykKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlkYXRhID0gS1NaODQ2M19OT1RJRllfQklUIHwKJiM0MzsJICAgICAgIEZJRUxEX1BSRVAoS1NaODQ2M19QQVRURVJOX00sIFRSSUdfUE9TX1BFUklPRCkgfAomIzQzOwkgICAgICAgcGluLSZndDtpbmRleDsKJiM0MzsJcmV0ID0ga3N6X3dyaXRlMTYoZGV2LCBjZmdfYmFzZSAmIzQzOyBLU1o4NDYzX1BBVFRFUk5fT0ZGLCBkYXRhKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGtzel93cml0ZTMyKGRldiwgY2ZnX2Jhc2UgJiM0MzsgS1NaODQ2M19DWUNMRV9XSURUSF9PRkYsCiYjNDM7CQkJICBjeWNsZV93aWR0aF9ucyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBTZXQgY3ljbGUgY291bnQgMCAtIEluZmluaXRlICovCiYjNDM7CXJldCA9IGtzel93cml0ZTE2KGRldiwgY2ZnX2Jhc2UgJiM0MzsgS1NaODQ2M19DWUNMRV9DTlRfT0ZGLCAwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIEtTWjg0NjMgdXNlcyBhIDggbnMgdW5pdCB2YWx1ZSB0byBjb21wdXRlIHRoZSBwdWxzZSB3aWR0aCAqLwomIzQzOwlkYXRhID0gKHB1bHNlX3dpZHRoX25zIC8gOCk7CiYjNDM7CXJldCA9IGtzel93cml0ZTE2KGRldiwgY2ZnX2Jhc2UgJiM0MzsgS1NaODQ2M19QVUxTRV9XSURUSF9PRkYsIGRhdGEpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0ga3N6X3dyaXRlMzIoZGV2LCBjZmdfYmFzZSAmIzQzOyBLU1o4NDYzX1RBUkdFVF9OU0VDLAomIzQzOwkJCSAgdGFyZ2V0X3RpbWUtJmd0O3R2X25zZWMpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0ga3N6X3dyaXRlMzIoZGV2LCBjZmdfYmFzZSAmIzQzOyBLU1o4NDYzX1RBUkdFVF9TRUMsCiYjNDM7CQkJICB0YXJnZXRfdGltZS0mZ3Q7dHZfc2VjKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQga3N6X3B0cF9jb25maWd1cmVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsCiAJCQkJICAgIHUzMiBjeWNsZV93aWR0aF9ucywgdTMyIHB1bHNlX3dpZHRoX25zLAogCQkJCSAgICBzdHJ1Y3QgdGltZXNwZWM2NCBjb25zdCAqdGFyZ2V0X3RpbWUsCkBAIC0xODMsMTcgJiM0MzsyNjcsMTEgQEAgc3RhdGljIGludCBrc3pfcHRwX2NvbmZpZ3VyZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBrc3pfcHRwX2VuYWJsZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCBjb25zdCAqcmVxdWVzdCwKLQkJCQkgaW50IG9uKQomIzQzO3N0YXRpYyBpbnQga3N6X3B0cF9nZXRfcGluKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsCiYjNDM7CQkJICAgc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCBjb25zdCAqcmVxdWVzdCkKIHsKIAlzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9ICZhbXA7ZGV2LSZndDtwdHBfZGF0YTsKLQl1NjQgcmVxX3B1bHNlX3dpZHRoX25zOwotCXU2NCBjeWNsZV93aWR0aF9uczsKLQl1NjQgcHVsc2Vfd2lkdGhfbnM7Ci0JaW50IHBpbiA9IDA7Ci0JdTMyIGRhdGEzMjsKLQlpbnQgcmV0OwomIzQzOwlpbnQgcGluOwogCiAJaWYgKHJlcXVlc3QtJmd0O2ZsYWdzICZhbXA7IH5QVFBfUEVST1VUX0RVVFlfQ1lDTEUpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTIwNiw2ICYjNDM7Mjg0LDExNCBAQCBzdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAogCWlmIChwaW4gJmx0OyAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwlyZXR1cm4gcGluOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfY3ljbGUoc3RydWN0IGtzel9kZXZpY2UgKmRldiwKJiM0MzsJCQkJCXN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgY29uc3QgKnJlcXVlc3QsCiYjNDM7CQkJCQl1NjQgKmN5Y2xlX3dpZHRoX25zKQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSAmYW1wO2Rldi0mZ3Q7cHRwX2RhdGE7CiYjNDM7CiYjNDM7CXB0cF9kYXRhLSZndDtwZXJvdXRfdGFyZ2V0X3RpbWVfZmlyc3QudHZfc2VjICA9IHJlcXVlc3QtJmd0O3N0YXJ0LnNlYzsKJiM0MzsJcHRwX2RhdGEtJmd0O3Blcm91dF90YXJnZXRfdGltZV9maXJzdC50dl9uc2VjID0gcmVxdWVzdC0mZ3Q7c3RhcnQubnNlYzsKJiM0MzsKJiM0MzsJcHRwX2RhdGEtJmd0O3Blcm91dF9wZXJpb2QudHZfc2VjID0gcmVxdWVzdC0mZ3Q7cGVyaW9kLnNlYzsKJiM0MzsJcHRwX2RhdGEtJmd0O3Blcm91dF9wZXJpb2QudHZfbnNlYyA9IHJlcXVlc3QtJmd0O3BlcmlvZC5uc2VjOwomIzQzOwomIzQzOwkqY3ljbGVfd2lkdGhfbnMgPSB0aW1lc3BlYzY0X3RvX25zKCZhbXA7cHRwX2RhdGEtJmd0O3Blcm91dF9wZXJpb2QpOwomIzQzOwlpZiAoKCpjeWNsZV93aWR0aF9ucyAmYW1wOyBUUklHX0NZQ0xFX1dJRFRIX00pICE9ICpjeWNsZV93aWR0aF9ucykgewomIzQzOwkJKmN5Y2xlX3dpZHRoX25zID0gMDsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTY0IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfcHVsc2Uoc3RydWN0IGtzel9kZXZpY2UgKmRldiwKJiM0MzsJCQkJCXN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgY29uc3QgKnJlcXVlc3QsCiYjNDM7CQkJCQl1NjQgbWF4X3B1bHNlX3dpZHRoKQomIzQzO3sKJiM0MzsJdTY0IHJlcV9wdWxzZV93aWR0aF9uczsKJiM0MzsKJiM0MzsJaWYgKHJlcXVlc3QtJmd0O2ZsYWdzICZhbXA7IFBUUF9QRVJPVVRfRFVUWV9DWUNMRSkKJiM0MzsJCXJldHVybiByZXF1ZXN0LSZndDtvbi5zZWMgKiBOU0VDX1BFUl9TRUMgJiM0MzsJcmVxdWVzdC0mZ3Q7b24ubnNlYzsKJiM0MzsKJiM0MzsJLyogVXNlIGEgZHV0eSBjeWNsZSBvZiA1MCUuIE1heGltdW0gcHVsc2Ugd2lkdGggc3VwcG9ydGVkIGJ5IHRoZQomIzQzOwkgKiBoYXJkd2FyZSBpcyBhIGxpdHRsZSBiaXQgbW9yZSB0aGFuIDEyNSBtcy4KJiM0MzsJICovCiYjNDM7CXJlcV9wdWxzZV93aWR0aF9ucyA9IChyZXF1ZXN0LSZndDtwZXJpb2Quc2VjICogTlNFQ19QRVJfU0VDICYjNDM7CiYjNDM7CQkJICAgICAgcmVxdWVzdC0mZ3Q7cGVyaW9kLm5zZWMpIC8gMjsKJiM0MzsJcmV0dXJuIG1pbl90KHU2NCwgcmVxX3B1bHNlX3dpZHRoX25zLCBtYXhfcHVsc2Vfd2lkdGgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGtzejg0NjNfcHRwX2VuYWJsZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LAomIzQzOwkJCQkgICAgIGludCBvbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gJmFtcDtkZXYtJmd0O3B0cF9kYXRhOwomIzQzOwl1NjQgY3ljbGVfd2lkdGhfbnM7CiYjNDM7CXU2NCBwdWxzZV93aWR0aF9uczsKJiM0MzsJaW50IHBpbjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGluID0ga3N6X3B0cF9nZXRfcGluKGRldiwgcmVxdWVzdCk7CiYjNDM7CWlmIChwaW4gJmx0OyAwKQomIzQzOwkJcmV0dXJuIHBpbjsKJiM0MzsKJiM0MzsJcmV0ID0ga3N6ODQ2M19wdHBfdG91X3Jlc2V0KGRldiwgcmVxdWVzdC0mZ3Q7aW5kZXgpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKCFvbikgewomIzQzOwkJcHRwX2RhdGEtJmd0O3RvdV9tb2RlID0gS1NaX1BUUF9UT1VfSURMRTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CXJldCA9IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfY3ljbGUoZGV2LCByZXF1ZXN0LCAmYW1wO2N5Y2xlX3dpZHRoX25zKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXB1bHNlX3dpZHRoX25zID0ga3N6X3B0cF9jb21wdXRlX3Blcm91dF9wdWxzZShkZXYsIHJlcXVlc3QsCiYjNDM7CQkJCQkJICAgICAgS1NaODQ2M19NQVhfUFVMU0VfV0lEVEgpOwomIzQzOwomIzQzOwlyZXQgPSBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkocHVsc2Vfd2lkdGhfbnMsCiYjNDM7CQkJCSAgICAgICBLU1o4NDYzX1RSSUdfUFVMU0VfV0lEVEhfTSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBrc3o4NDYzX3B0cF9jb25maWd1cmVfcGVyb3V0KGRldiwgY3ljbGVfd2lkdGhfbnMsIHB1bHNlX3dpZHRoX25zLAomIzQzOwkJCQkJICAgJmFtcDtwdHBfZGF0YS0mZ3Q7cGVyb3V0X3RhcmdldF90aW1lX2ZpcnN0LAomIzQzOwkJCQkJICAgcGluKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGtzel9wdHBfdG91X2dwaW8oZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGtzejg0NjNfcHRwX3RvdV9zdGFydChkZXYsIHJlcXVlc3QtJmd0O2luZGV4KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXB0cF9kYXRhLSZndDt0b3VfbW9kZSA9IEtTWl9QVFBfVE9VX1BFUk9VVDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQga3N6X3B0cF9lbmFibGVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsCiYjNDM7CQkJCSBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LAomIzQzOwkJCQkgaW50IG9uKQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSAmYW1wO2Rldi0mZ3Q7cHRwX2RhdGE7CiYjNDM7CXU2NCBjeWNsZV93aWR0aF9uczsKJiM0MzsJdTY0IHB1bHNlX3dpZHRoX25zOwomIzQzOwlpbnQgcGluID0gMDsKJiM0MzsJdTMyIGRhdGEzMjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGluID0ga3N6X3B0cF9nZXRfcGluKGRldiwgcmVxdWVzdCk7CiYjNDM7CWlmIChwaW4gJmx0OyAwKQomIzQzOwkJcmV0dXJuIHBpbjsKJiM0MzsKIAlkYXRhMzIgPSBGSUVMRF9QUkVQKFBUUF9HUElPX0lOREVYLCBwaW4pIHwKIAkJIEZJRUxEX1BSRVAoUFRQX1RPVV9JTkRFWCwgcmVxdWVzdC0mZ3Q7aW5kZXgpOwogCXJldCA9IGtzel9ybXczMihkZXYsIFJFR19QVFBfVU5JVF9JTkRFWF9fNCwKQEAgLTIyMSwzMSAmIzQzOzQwNywxMyBAQCBzdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAogCQlwdHBfZGF0YS0mZ3Q7dG91X21vZGUgPSBLU1pfUFRQX1RPVV9JRExFOwogCQlyZXR1cm4gMDsKIAl9CiYjNDM7CXJldCA9IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfY3ljbGUoZGV2LCByZXF1ZXN0LCAmYW1wO2N5Y2xlX3dpZHRoX25zKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXB1bHNlX3dpZHRoX25zID0ga3N6X3B0cF9jb21wdXRlX3Blcm91dF9wdWxzZShkZXYsIHJlcXVlc3QsCiYjNDM7CQkJCQkJICAgICAgS1NaX01BWF9QVUxTRV9XSURUSCk7CiAKLQlwdHBfZGF0YS0mZ3Q7cGVyb3V0X3RhcmdldF90aW1lX2ZpcnN0LnR2X3NlYyAgPSByZXF1ZXN0LSZndDtzdGFydC5zZWM7Ci0JcHRwX2RhdGEtJmd0O3Blcm91dF90YXJnZXRfdGltZV9maXJzdC50dl9uc2VjID0gcmVxdWVzdC0mZ3Q7c3RhcnQubnNlYzsKLQotCXB0cF9kYXRhLSZndDtwZXJvdXRfcGVyaW9kLnR2X3NlYyA9IHJlcXVlc3QtJmd0O3BlcmlvZC5zZWM7Ci0JcHRwX2RhdGEtJmd0O3Blcm91dF9wZXJpb2QudHZfbnNlYyA9IHJlcXVlc3QtJmd0O3BlcmlvZC5uc2VjOwotCi0JY3ljbGVfd2lkdGhfbnMgPSB0aW1lc3BlYzY0X3RvX25zKCZhbXA7cHRwX2RhdGEtJmd0O3Blcm91dF9wZXJpb2QpOwotCWlmICgoY3ljbGVfd2lkdGhfbnMgJmFtcDsgVFJJR19DWUNMRV9XSURUSF9NKSAhPSBjeWNsZV93aWR0aF9ucykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAocmVxdWVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgUFRQX1BFUk9VVF9EVVRZX0NZQ0xFKSB7Ci0JCXB1bHNlX3dpZHRoX25zID0gcmVxdWVzdC0mZ3Q7b24uc2VjICogTlNFQ19QRVJfU0VDICYjNDM7Ci0JCQlyZXF1ZXN0LSZndDtvbi5uc2VjOwotCX0gZWxzZSB7Ci0JCS8qIFVzZSBhIGR1dHkgY3ljbGUgb2YgNTAlLiBNYXhpbXVtIHB1bHNlIHdpZHRoIHN1cHBvcnRlZCBieSB0aGUKLQkJICogaGFyZHdhcmUgaXMgYSBsaXR0bGUgYml0IG1vcmUgdGhhbiAxMjUgbXMuCi0JCSAqLwotCQlyZXFfcHVsc2Vfd2lkdGhfbnMgPSAocmVxdWVzdC0mZ3Q7cGVyaW9kLnNlYyAqIE5TRUNfUEVSX1NFQyAmIzQzOwotCQkJCSAgICAgIHJlcXVlc3QtJmd0O3BlcmlvZC5uc2VjKSAvIDI7Ci0JCXB1bHNlX3dpZHRoX25zID0gbWluX3QodTY0LCByZXFfcHVsc2Vfd2lkdGhfbnMsCi0JCQkJICAgICAgIEtTWl9NQVhfUFVMU0VfV0lEVEgpOwotCX0KLQotCXJldCA9IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeShwdWxzZV93aWR0aF9ucyk7CiYjNDM7CXJldCA9IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeShwdWxzZV93aWR0aF9ucywgVFJJR19QVUxTRV9XSURUSF9NKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC03NTYsMTEgJiM0Mzs5MjQsMTEgQEAgc3RhdGljIGludCBrc3pfcHRwX2dldHRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGtzel9wdHBfcmVzdGFydF9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldikKJiM0MztzdGF0aWMgaW50IGtzel9wdHBfcHJlcGFyZV9yZXN0YXJ0X3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAomIzQzOwkJCQkJICBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0ICpyZXF1ZXN0KQogewogCXN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gJmFtcDtkZXYtJmd0O3B0cF9kYXRhOwogCXM2NCBub3dfbnMsIGZpcnN0X25zLCBwZXJpb2RfbnMsIG5leHRfbnM7Ci0Jc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCByZXF1ZXN0OwogCXN0cnVjdCB0aW1lc3BlYzY0IG5leHQ7CiAJc3RydWN0IHRpbWVzcGVjNjQgbm93OwogCXVuc2lnbmVkIGludCBjb3VudDsKQEAgLTc5MSw0MCAmIzQzOzk1OSwxMTEgQEAgc3RhdGljIGludCBrc3pfcHRwX3Jlc3RhcnRfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpCiAKIAkvKiBSZXN0YXJ0IHBlcmlvZGljIG91dHB1dCBzaWduYWwgKi8KIAluZXh0ID0gbnNfdG9fdGltZXNwZWM2NChuZXh0X25zKTsKLQlyZXF1ZXN0LnN0YXJ0LnNlYyAgPSBuZXh0LnR2X3NlYzsKLQlyZXF1ZXN0LnN0YXJ0Lm5zZWMgPSBuZXh0LnR2X25zZWM7Ci0JcmVxdWVzdC5wZXJpb2Quc2VjICA9IHB0cF9kYXRhLSZndDtwZXJvdXRfcGVyaW9kLnR2X3NlYzsKLQlyZXF1ZXN0LnBlcmlvZC5uc2VjID0gcHRwX2RhdGEtJmd0O3Blcm91dF9wZXJpb2QudHZfbnNlYzsKLQlyZXF1ZXN0LmluZGV4ID0gMDsKLQlyZXF1ZXN0LmZsYWdzID0gMDsKJiM0MzsJcmVxdWVzdC0mZ3Q7c3RhcnQuc2VjICA9IG5leHQudHZfc2VjOwomIzQzOwlyZXF1ZXN0LSZndDtzdGFydC5uc2VjID0gbmV4dC50dl9uc2VjOwomIzQzOwlyZXF1ZXN0LSZndDtwZXJpb2Quc2VjICA9IHB0cF9kYXRhLSZndDtwZXJvdXRfcGVyaW9kLnR2X3NlYzsKJiM0MzsJcmVxdWVzdC0mZ3Q7cGVyaW9kLm5zZWMgPSBwdHBfZGF0YS0mZ3Q7cGVyb3V0X3BlcmlvZC50dl9uc2VjOwomIzQzOwlyZXF1ZXN0LSZndDtpbmRleCA9IDA7CiYjNDM7CXJlcXVlc3QtJmd0O2ZsYWdzID0gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQga3N6X3B0cF9yZXN0YXJ0X3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCByZXF1ZXN0OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBrc3pfcHRwX3ByZXBhcmVfcmVzdGFydF9wZXJvdXQoZGV2LCAmYW1wO3JlcXVlc3QpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKIAogCXJldHVybiBrc3pfcHRwX2VuYWJsZV9wZXJvdXQoZGV2LCAmYW1wO3JlcXVlc3QsIDEpOwogfQogCi1zdGF0aWMgaW50IGtzel9wdHBfc2V0dGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwKLQkJCSAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKJiM0MztzdGF0aWMgaW50IGtzejg0NjNfcHRwX3Jlc3RhcnRfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7Ci0Jc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IHB0cF9kYXRhX3RvX2tzel9kZXYocHRwX2RhdGEpOwotCWNvbnN0IHUxNiAqcmVncyA9IGRldi0mZ3Q7aW5mby0mZ3Q7cmVnczsKJiM0MzsJc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCByZXF1ZXN0OwogCWludCByZXQ7CiAKLQltdXRleF9sb2NrKCZhbXA7cHRwX2RhdGEtJmd0O2xvY2spOwomIzQzOwlyZXQgPSBrc3pfcHRwX3ByZXBhcmVfcmVzdGFydF9wZXJvdXQoZGV2LCAmYW1wO3JlcXVlc3QpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGtzejg0NjNfcHRwX2VuYWJsZV9wZXJvdXQoZGV2LCAmYW1wO3JlcXVlc3QsIDEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fa3N6X3B0cF9zZXR0aW1lKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsCiYjNDM7CQkJICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpCiYjNDM7ewomIzQzOwljb25zdCB1MTYgKnJlZ3MgPSBkZXYtJmd0O2luZm8tJmd0O3JlZ3M7CiYjNDM7CWludCByZXQ7CiAKIAkvKiBXcml0ZSB0byBzaGFkb3cgcmVnaXN0ZXJzIGFuZCBMb2FkIFBUUCBjbG9jayAqLwogCXJldCA9IGtzel93cml0ZTE2KGRldiwgcmVnc1tQVFBfUlRDX1NVQl9OQU5PU0VDXSwgUFRQX1JUQ18wTlMpOwogCWlmIChyZXQpCi0JCWdvdG8gdW5sb2NrOwomIzQzOwkJcmV0dXJuIHJldDsKIAogCXJldCA9IGtzel93cml0ZTMyKGRldiwgcmVnc1tQVFBfUlRDX05BTk9TRUNdLCB0cy0mZ3Q7dHZfbnNlYyk7CiAJaWYgKHJldCkKLQkJZ290byB1bmxvY2s7CiYjNDM7CQlyZXR1cm4gcmV0OwogCiAJcmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfU0VDXSwgdHMtJmd0O3R2X3NlYyk7CiAJaWYgKHJldCkKLQkJZ290byB1bmxvY2s7CiYjNDM7CQlyZXR1cm4gcmV0OwogCiAJcmV0ID0ga3N6X3JtdzE2KGRldiwgcmVnc1tQVFBfQ0xLX0NUUkxdLCBQVFBfTE9BRF9USU1FLCBQVFBfTE9BRF9USU1FKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGtzejg0NjNfcHRwX3NldHRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsCiYjNDM7CQkJICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gcHRwX2NhcHNfdG9fZGF0YShwdHApOwomIzQzOwlzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwdHBfZGF0YS0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldCA9IF9fa3N6X3B0cF9zZXR0aW1lKGRldiwgdHMpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CiYjNDM7CXN3aXRjaCAocHRwX2RhdGEtJmd0O3RvdV9tb2RlKSB7CiYjNDM7CWNhc2UgS1NaX1BUUF9UT1VfSURMRToKJiM0MzsJCWJyZWFrOwomIzQzOwomIzQzOwljYXNlIEtTWl9QVFBfVE9VX1BFUk9VVDoKJiM0MzsJCXJldCA9IGtzejg0NjNfcHRwX3Jlc3RhcnRfcGVyb3V0KGRldik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gdW5sb2NrOwomIzQzOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7cHRwX2RhdGEtJmd0O2Nsb2NrX2xvY2spOwomIzQzOwlwdHBfZGF0YS0mZ3Q7Y2xvY2tfdGltZSA9ICp0czsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtwdHBfZGF0YS0mZ3Q7Y2xvY2tfbG9jayk7CiYjNDM7CiYjNDM7dW5sb2NrOgomIzQzOwltdXRleF91bmxvY2soJmFtcDtwdHBfZGF0YS0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQga3N6X3B0cF9zZXR0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLAomIzQzOwkJCSAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gcHRwX2NhcHNfdG9fZGF0YShwdHApOwomIzQzOwlzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwdHBfZGF0YS0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldCA9IF9fa3N6X3B0cF9zZXR0aW1lKGRldiwgdHMpOwogCWlmIChyZXQpCiAJCWdvdG8gdW5sb2NrOwogCkBAIC04OTAsMTggJiM0MzsxMTI5LDEzIEBAIHN0YXRpYyBpbnQga3N6X3B0cF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBsb25nIHNjYWxlZF9wcG0pCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBrc3pfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHM2NCBkZWx0YSkKJiM0MztzdGF0aWMgaW50IF9fa3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHM2NCBkZWx0YSkKIHsKLQlzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTsKLQlzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7Ci0Jc3RydWN0IHRpbWVzcGVjNjQgZGVsdGE2NCA9IG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpOwogCWNvbnN0IHUxNiAqcmVncyA9IGRldi0mZ3Q7aW5mby0mZ3Q7cmVnczsKIAlzMzIgc2VjLCBuc2VjOwogCXUxNiBkYXRhMTY7CiAJaW50IHJldDsKIAotCW11dGV4X2xvY2soJmFtcDtwdHBfZGF0YS0mZ3Q7bG9jayk7Ci0KIAkvKiBkbyBub3QgdXNlIG5zX3RvX3RpbWVzcGVjNjQoKSwKIAkgKiBib3RoIHNlYyBhbmQgbnNlYyBhcmUgc3VidHJhY3RlZCBieSBodwogCSAqLwpAQCAtOTA5LDE1ICYjNDM7MTE0MywxNSBAQCBzdGF0aWMgaW50IGtzel9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKQogCiAJcmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfTkFOT1NFQ10sIGFicyhuc2VjKSk7CiAJaWYgKHJldCkKLQkJZ290byB1bmxvY2s7CiYjNDM7CQlyZXR1cm4gcmV0OwogCiAJcmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfU0VDXSwgYWJzKHNlYykpOwogCWlmIChyZXQpCi0JCWdvdG8gdW5sb2NrOwomIzQzOwkJcmV0dXJuIHJldDsKIAogCXJldCA9IGtzel9yZWFkMTYoZGV2LCByZWdzW1BUUF9DTEtfQ1RSTF0sICZhbXA7ZGF0YTE2KTsKIAlpZiAocmV0KQotCQlnb3RvIHVubG9jazsKJiM0MzsJCXJldHVybiByZXQ7CiAKIAlkYXRhMTYgfD0gUFRQX1NURVBfQURKOwogCkBAIC05MjgsNiAmIzQzOzExNjIsNTYgQEAgc3RhdGljIGludCBrc3pfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHM2NCBkZWx0YSkKIAkJZGF0YTE2IHw9IFBUUF9TVEVQX0RJUjsKIAogCXJldCA9IGtzel93cml0ZTE2KGRldiwgcmVnc1tQVFBfQ0xLX0NUUkxdLCBkYXRhMTYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7CiYjNDM7CXN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTsKJiM0MzsJc3RydWN0IHRpbWVzcGVjNjQgZGVsdGE2NCA9IG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHRwX2RhdGEtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXQgPSBfX2tzel9wdHBfYWRqdGltZShkZXYsIGRlbHRhKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwomIzQzOwlzd2l0Y2ggKHB0cF9kYXRhLSZndDt0b3VfbW9kZSkgewomIzQzOwljYXNlIEtTWl9QVFBfVE9VX0lETEU6CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJY2FzZSBLU1pfUFRQX1RPVV9QRVJPVVQ6CiYjNDM7CQlyZXQgPSBrc3o4NDYzX3B0cF9yZXN0YXJ0X3Blcm91dChkZXYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIHVubG9jazsKJiM0MzsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO3B0cF9kYXRhLSZndDtjbG9ja19sb2NrKTsKJiM0MzsJcHRwX2RhdGEtJmd0O2Nsb2NrX3RpbWUgPSB0aW1lc3BlYzY0X2FkZChwdHBfZGF0YS0mZ3Q7Y2xvY2tfdGltZSwgZGVsdGE2NCk7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7cHRwX2RhdGEtJmd0O2Nsb2NrX2xvY2spOwomIzQzOwomIzQzO3VubG9jazoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHRwX2RhdGEtJmd0O2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGtzel9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7CiYjNDM7CXN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTsKJiM0MzsJc3RydWN0IHRpbWVzcGVjNjQgZGVsdGE2NCA9IG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHRwX2RhdGEtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXQgPSBfX2tzel9wdHBfYWRqdGltZShkZXYsIGRlbHRhKTsKIAlpZiAocmV0KQogCQlnb3RvIHVubG9jazsKIApAQCAtOTUyLDYgJiM0MzsxMjM2LDI2IEBAIHN0YXRpYyBpbnQga3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLAomIzQzOwkJCSAgICAgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcmVxLCBpbnQgb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTsKJiM0MzsJc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IHB0cF9kYXRhX3RvX2tzel9kZXYocHRwX2RhdGEpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlzd2l0Y2ggKHJlcS0mZ3Q7dHlwZSkgewomIzQzOwljYXNlIFBUUF9DTEtfUkVRX1BFUk9VVDoKJiM0MzsJCW11dGV4X2xvY2soJmFtcDtwdHBfZGF0YS0mZ3Q7bG9jayk7CiYjNDM7CQlyZXQgPSBrc3o4NDYzX3B0cF9lbmFibGVfcGVyb3V0KGRldiwgJmFtcDtyZXEtJmd0O3Blcm91dCwgb24pOwomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7cHRwX2RhdGEtJmd0O2xvY2spOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLAogCQkJICBzdHJ1Y3QgcHRwX2Nsb2NrX3JlcXVlc3QgKnJlcSwgaW50IG9uKQogewpAQCAtMTAyOCwxNyAmIzQzOzEzMzIsMzMgQEAgc3RhdGljIGludCBrc3pfcHRwX3N0YXJ0X2Nsb2NrKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpCiAJcmV0dXJuIDA7CiB9CiAKLWludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKJiM0Mzt2b2lkIGtzejg0NjNfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGE7CiYjNDM7CiYjNDM7CXB0cF9kYXRhID0gJmFtcDtkZXYtJmd0O3B0cF9kYXRhOwomIzQzOwomIzQzOwlwdHBfZGF0YS0mZ3Q7Y2Fwcy5vd25lcgkJPSBUSElTX01PRFVMRTsKJiM0MzsJc25wcmludGYocHRwX2RhdGEtJmd0O2NhcHMubmFtZSwgMTYsICYjMzQ7TWljcm9jaGlwIENsb2NrJiMzNDspOwomIzQzOwlwdHBfZGF0YS0mZ3Q7Y2Fwcy5tYXhfYWRqCQk9IEtTWl9NQVhfRFJJRlRfQ09SUjsKJiM0MzsJcHRwX2RhdGEtJmd0O2NhcHMuZ2V0dGltZTY0CT0ga3N6X3B0cF9nZXR0aW1lOwomIzQzOwlwdHBfZGF0YS0mZ3Q7Y2Fwcy5zZXR0aW1lNjQJPSBrc3o4NDYzX3B0cF9zZXR0aW1lOwomIzQzOwlwdHBfZGF0YS0mZ3Q7Y2Fwcy5hZGpmaW5lCQk9IGtzel9wdHBfYWRqZmluZTsKJiM0MzsJcHRwX2RhdGEtJmd0O2NhcHMuYWRqdGltZQkJPSBrc3o4NDYzX3B0cF9hZGp0aW1lOwomIzQzOwlwdHBfZGF0YS0mZ3Q7Y2Fwcy5kb19hdXhfd29yawk9IGtzel9wdHBfZG9fYXV4X3dvcms7CiYjNDM7CXB0cF9kYXRhLSZndDtjYXBzLmVuYWJsZQkJPSBrc3o4NDYzX3B0cF9lbmFibGU7CiYjNDM7CXB0cF9kYXRhLSZndDtjYXBzLnZlcmlmeQkJPSBrc3pfcHRwX3ZlcmlmeV9waW47CiYjNDM7CXB0cF9kYXRhLSZndDtjYXBzLm5fcGlucwkJPSBkZXYtJmd0O2luZm8tJmd0O25fcGluczsKJiM0MzsJcHRwX2RhdGEtJmd0O2NhcHMubl9wZXJfb3V0CT0gZGV2LSZndDtpbmZvLSZndDtuX3Blcl9vdXQ7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQga3N6X3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiB7CiAJc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLSZndDtwcml2OwotCWNvbnN0IHUxNiAqcmVncyA9IGRldi0mZ3Q7aW5mby0mZ3Q7cmVnczsKIAlzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YTsKLQlpbnQgcmV0OwotCXU4IGk7CiAKIAlwdHBfZGF0YSA9ICZhbXA7ZGV2LSZndDtwdHBfZGF0YTsKLQltdXRleF9pbml0KCZhbXA7cHRwX2RhdGEtJmd0O2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZhbXA7cHRwX2RhdGEtJmd0O2Nsb2NrX2xvY2spOwogCiAJcHRwX2RhdGEtJmd0O2NhcHMub3duZXIJCT0gVEhJU19NT0RVTEU7CiAJc25wcmludGYocHRwX2RhdGEtJmd0O2NhcHMubmFtZSwgMTYsICYjMzQ7TWljcm9jaGlwIENsb2NrJiMzNDspOwpAQCAtMTA1MCwxNCAmIzQzOzEzNzAsMjcgQEAgaW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCXB0cF9kYXRhLSZndDtjYXBzLmRvX2F1eF93b3JrCT0ga3N6X3B0cF9kb19hdXhfd29yazsKIAlwdHBfZGF0YS0mZ3Q7Y2Fwcy5lbmFibGUJCT0ga3N6X3B0cF9lbmFibGU7CiAJcHRwX2RhdGEtJmd0O2NhcHMudmVyaWZ5CQk9IGtzel9wdHBfdmVyaWZ5X3BpbjsKLQlwdHBfZGF0YS0mZ3Q7Y2Fwcy5uX3BpbnMJCT0gS1NaX1BUUF9OX0dQSU87Ci0JcHRwX2RhdGEtJmd0O2NhcHMubl9wZXJfb3V0CT0gMzsKJiM0MzsJcHRwX2RhdGEtJmd0O2NhcHMubl9waW5zCQk9IGRldi0mZ3Q7aW5mby0mZ3Q7bl9waW5zOwomIzQzOwlwdHBfZGF0YS0mZ3Q7Y2Fwcy5uX3Blcl9vdXQJPSBkZXYtJmd0O2luZm8tJmd0O25fcGVyX291dDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLSZndDtwcml2OwomIzQzOwljb25zdCB1MTYgKnJlZ3MgPSBkZXYtJmd0O2luZm8tJmd0O3JlZ3M7CiYjNDM7CXN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhOwomIzQzOwlpbnQgcmV0OwomIzQzOwl1OCBpOwomIzQzOwomIzQzOwlwdHBfZGF0YSA9ICZhbXA7ZGV2LSZndDtwdHBfZGF0YTsKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO3B0cF9kYXRhLSZndDtsb2NrKTsKJiM0MzsJc3Bpbl9sb2NrX2luaXQoJmFtcDtwdHBfZGF0YS0mZ3Q7Y2xvY2tfbG9jayk7CiAKIAlyZXQgPSBrc3pfcHRwX3N0YXJ0X2Nsb2NrKGRldik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBLU1pfUFRQX05fR1BJTzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGRldi0mZ3Q7aW5mby0mZ3Q7bl9waW5zOyBpJiM0MzsmIzQzOykgewogCQlzdHJ1Y3QgcHRwX3Bpbl9kZXNjICpwdHBfcGluID0gJmFtcDtwdHBfZGF0YS0mZ3Q7cGluX2NvbmZpZ1tpXTsKIAogCQlzbnByaW50ZihwdHBfcGluLSZndDtuYW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaAppbmRleCA3MDY3ZWM5YmQxZTZmLi45MjU4OWNmMzczYWMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaApAQCAtMTIsNyAmIzQzOzEyLDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaCZndDsKIAotI2RlZmluZSBLU1pfUFRQX05fR1BJTwkJMgomIzQzOyNkZWZpbmUgS1NaX1BUUF9OX0dQSU8JCTEyCiAKIGVudW0ga3N6X3B0cF90b3VfbW9kZSB7CiAJS1NaX1BUUF9UT1VfSURMRSwKQEAgLTMzLDYgJiM0MzszMyw4IEBAIHN0cnVjdCBrc3pfcHRwX2RhdGEgewogCXN0cnVjdCB0aW1lc3BlYzY0IHBlcm91dF9wZXJpb2Q7CiB9OwogCiYjNDM7dm9pZCBrc3pfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7CiYjNDM7dm9pZCBrc3o4NDYzX3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpOwogaW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTsKIAogdm9pZCBrc3pfcHRwX2Nsb2NrX3VucmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTsKQEAgLTY1LDYgJiM0Mzs2Nyw3IEBAIHN0cnVjdCBrc3pfcHRwX2RhdGEgewogCXN0cnVjdCBtdXRleCBsb2NrOwogfTsKIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBrc3pfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykgeyB9CiBzdGF0aWMgaW5saW5lIGludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIHsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cF9yZWcuaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cF9yZWcuaAppbmRleCA2NWVhODU3N2FmNzU1Li4xNmYxMTdmYTVkNDliIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwX3JlZy5oCkBAIC01MSw2ICYjNDM7NTEsMjIgQEAKIAogI2RlZmluZSBSRUdfUFRQX1VOSVRfSU5ERVhfXzQJCTB4MDUyMAogCiYjNDM7I2RlZmluZSBLU1o4NDYzX1RPVV9BQ1RJVkUJCTB4MjAyCiYjNDM7I2RlZmluZSBLU1o4NDYzX1RPVV9FTgkJCTB4MjA2CiYjNDM7I2RlZmluZSBLU1o4NDYzX1RPVV9TV19SU1QJCTB4MjA4CiYjNDM7CiYjNDM7I2RlZmluZSBLU1o4NDYzX1RSSUdOX0NGR19TSVpFCQkweDIwCiYjNDM7I2RlZmluZSBLU1o4NDYzX1RSSUcxX0NGRwkJMHgyMjAKJiM0MzsjZGVmaW5lIEtTWjg0NjNfVEFSR0VUX05TRUMJCTB4MDAwCiYjNDM7I2RlZmluZSBLU1o4NDYzX1RBUkdFVF9TRUMJCTB4MDA0CiYjNDM7I2RlZmluZSBLU1o4NDYzX1BBVFRFUk5fT0ZGCQkweDAwOAomIzQzOyNkZWZpbmUgS1NaODQ2M19OT1RJRllfQklUCQlCSVQoOCkKJiM0MzsjZGVmaW5lIEtTWjg0NjNfUEFUVEVSTl9NCQlHRU5NQVNLKDYsIDQpCiYjNDM7I2RlZmluZSBLU1o4NDYzX1BVTFNFX1dJRFRIX09GRgkJMHgwMEEKJiM0MzsjZGVmaW5lIEtTWjg0NjNfVFJJR19QVUxTRV9XSURUSF9NCUdFTk1BU0soMTUsIDApCiYjNDM7I2RlZmluZSBLU1o4NDYzX0NZQ0xFX1dJRFRIX09GRgkJMHgwMEMKJiM0MzsjZGVmaW5lIEtTWjg0NjNfQ1lDTEVfQ05UX09GRgkJMHgwMTAKJiM0MzsKICNkZWZpbmUgUFRQX0dQSU9fSU5ERVgJCQlHRU5NQVNLKDE5LCAxNikKICNkZWZpbmUgUFRQX1RTSV9JTkRFWAkJCUJJVCg4KQogI2RlZmluZSBQVFBfVE9VX0lOREVYCQkJR0VOTUFTSygxLCAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMKaW5kZXggODZjZTNhODY3MDVmOS4uM2EyMDkxMjJmYzdkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jCkBAIC04NjcsNiAmIzQzOzg2Nyw3IEBAIHN0YXRpYyBpbnQgbGFuOTM3eF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAJCX0KIAl9CiAKJiM0MzsJa3N6X3B0cF9zZXRfY2Fwcyhkcyk7CiAJcmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKGRldi0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2s6ICVkXG4mIzM0OywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0MzQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGZWFzaWJpbGl0eSBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIGFuZCBkZWNpZGUgaWYgd2UmIzM5O3JlIGdvaW5nIHRvIHB1dCBpdCB0aHJvdWdoIHRoZSBmdXp6aW5nIG1pbGwuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBzY29wZS4gSSBzZWUgdGhhdCBpdCB0b3VjaGVzIGBkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2AsIHdoaWNoIG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggTWljcm9jaGlwIEtTWi9MQU4gRFNBIEV0aGVybmV0IHN3aXRjaCBkcml2ZXJzLiBTcGVjaWZpY2FsbHksIHRoaW5ncyBsaWtlIHRoZSBLU1o4NDYzLCBLU1o4NTYzLCBLU1o5NDc3LCBLU1o5NTY3LCBhbmQgTEFOOTM3eC4KCk5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGhvdyBkb2VzIHRoZSBrZXJuZWwgaW50ZXJmYWNlIHdpdGggdGhlc2Ugc3dpdGNoZXM/IFNQSSwgSTJDLCBtZW1vcnktbWFwcGVkLCBNRElPPyBLbm93aW5nIHRoYXQgd2lsbCBiZSBjcnVjaWFsLiBBbmQgbW9yZSBpbXBvcnRhbnRseSwgY2FuIHdlIGV2ZW4gcmVhY2ggdGhlc2UgZHJpdmVycyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVT8gQ2FuIHdlIGVtdWxhdGUgYSBEU0Egc3dpdGNoIG9yIGEgYmFzaWMgU1BJL0kyQyBNaWNyb2NoaXAgc3dpdGNoLCBvciBhcmUgd2Ugc3R1Y2sgd2l0aCBwaHlzaWNhbCBoYXJkd2FyZT8gSWYgaXQmIzM5O3MgdGhlIGxhdHRlciwgdGhhdCYjMzk7cyBnb2luZyB0byBiZSBhIHNpZ25pZmljYW50IGh1cmRsZS4KClRpbWUgdG8gZmlyZSB1cCB0aGUgZ3JlcHBlciBvciByZWFkLWZpbGUgdG8gZG8gYSBsaXR0bGUgZGlnZ2luZyBhbmQgZ2V0IHNvbWUgYW5zd2Vycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNSUNST0NISVBfS1NaJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZzoyOm1lbnVjb25maWcgTkVUX0RTQV9NSUNST0NISVBfS1NaX0NPTU1PTlxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb2NoaXAgS1NaOFhYWC9LU1o5WFhYL0xBTjkzN1ggc2VyaWVzIHN3aXRjaCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTE2LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjE3OmNvbmZpZyBORVRfRFNBX01JQ1JPQ0hJUF9LU1o5NDc3X0kyQ1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTE4LVx0dHJpc3RhdGUgXCYjMzQ7S1NaIHNlcmllcyBJMkMgY29ubmVjdGVkIHN3aXRjaCBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZzoxOTpcdGRlcGVuZHMgb24gTkVUX0RTQV9NSUNST0NISVBfS1NaX0NPTU1PTiBcdTAwMjZcdTAwMjYgSTJDXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMjAtXHRzZWxlY3QgUkVHTUFQX0kyQ1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZy0yMy1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZzoyNDpjb25maWcgTkVUX0RTQV9NSUNST0NISVBfS1NaX1NQSVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTI1LVx0dHJpc3RhdGUgXCYjMzQ7S1NaIHNlcmllcyBTUEkgY29ubmVjdGVkIHN3aXRjaCBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZzoyNjpcdGRlcGVuZHMgb24gTkVUX0RTQV9NSUNST0NISVBfS1NaX0NPTU1PTiBcdTAwMjZcdTAwMjYgU1BJXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMjctXHRzZWxlY3QgUkVHTUFQX1NQSVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZy0zMC1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZzozMTpjb25maWcgTkVUX0RTQV9NSUNST0NISVBfS1NaX1BUUFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTMyLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciB0aGUgUFRQIGNsb2NrIG9uIHRoZSBLU1o5NTYzL0xBTjkzN3ggRXRoZXJuZXQgU3dpdGNoXCYjMzQ7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWc6MzM6XHRkZXBlbmRzIG9uIE5FVF9EU0FfTUlDUk9DSElQX0tTWl9DT01NT04gXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWc6MzQ6XHRkZXBlbmRzIG9uIE5FVF9EU0FfTUlDUk9DSElQX0tTWl9DT01NT049bSB8fCBQVFBfMTU4OF9DTE9DSz15XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMzUtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTQwLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjQxOmNvbmZpZyBORVRfRFNBX01JQ1JPQ0hJUF9LU1o4ODYzX1NNSVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTQyLVx0dHJpc3RhdGUgXCYjMzQ7S1NaIHNlcmllcyBTTUkgY29ubmVjdGVkIHN3aXRjaCBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZzo0MzpcdGRlcGVuZHMgb24gTkVUX0RTQV9NSUNST0NISVBfS1NaX0NPTU1PTlxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTQ0LVx0c2VsZWN0IE1ESU9fQklUQkFOR1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfTkVUX0RTQV9NSUNST0NISVBfS1NaX0NPTU1PTilcdCYjNDM7PSBrc3pfc3dpdGNoLm9cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGUtMy1rc3pfc3dpdGNoLW9ianMgOj0ga3N6X2NvbW1vbi5vIGtzel9kY2Iub1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGU9Nj1rc3pfc3dpdGNoLW9ianMgJiM0Mzs9IGxhbjkzN3hfbWFpbi5vXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL01ha2VmaWxlLTctXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL01ha2VmaWxlOjg6aWZkZWYgQ09ORklHX05FVF9EU0FfTUlDUk9DSElQX0tTWl9QVFBcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGUtOS1rc3pfc3dpdGNoLW9ianMgJiM0Mzs9IGtzel9wdHAub1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZT0xMD1lbmRpZlxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZS0xMS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX05FVF9EU0FfTUlDUk9DSElQX0tTWjk0NzdfSTJDKVx0JiM0Mzs9IGtzejk0NzdfaTJjLm9cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX05FVF9EU0FfTUlDUk9DSElQX0tTWl9TUEkpXHRcdCYjNDM7PSBrc3pfc3BpLm9cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGU6MTQ6b2JqLSQoQ09ORklHX05FVF9EU0FfTUlDUk9DSElQX0tTWjg4NjNfU01JKVx0JiM0Mzs9IGtzejg4NjNfc21pLm9cbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaD0xNzE9c3RydWN0IGtzel9wb3J0IHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaC0xOTQtXHRzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcztcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oOjE5NTojaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9NSUNST0NISVBfS1NaX1BUUClcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTE5Ni1cdHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnIHRzdGFtcF9jb25maWc7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgtMTAtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaDoxMTojaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9NSUNST0NISVBfS1NaX1BUUClcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oLTEyLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oPTkwPXN0YXRpYyBpbmxpbmUgdm9pZCBrc3o4NDYzX3B0cF9pcnFfZnJlZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpIHt9XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgtMTA1LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg6MTA2OiNlbmRpZlx0LyogRW5kIG9mIENPTkZJR19ORVRfRFNBX01JQ1JPQ0hJUF9LU1pfUFRQICovXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC0xMDctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzODUKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGRyaXZlciBzaXR1YXRpb24uIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmRhbWVudGFsIGFyY2hpdGVjdHVyZTogYXJlIHRoZXNlIGRyaXZlcnMgc3RyaWN0bHkgdGllZCB0byBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBjb21wb25lbnRzPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhleSYjMzk7cmUgcHJvYmVkIGFuZCBib3VuZC4KCk15IGluc3RpbmN0IGlzIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY29kZSBpdHNlbGYuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlc2UgYGtzemAgZHJpdmVycyBkaXJlY3RseSB0byBzZWUgdGhlIGJpbmRpbmcgbWVjaGFuaXNtIGluIGRldGFpbC4gSSYjMzk7bGwgdGFyZ2V0IHRoZSBga3N6X3NwaS5jYCwgYGtzejk0NzdfaTJjLmNgLCBhbmQgYGtzejg4NjNfc21pLmNgIGZpbGVzIGFzIGEgc3RhcnRpbmcgcG9pbnQuIFRob3NlIHNlZW0gbGlrZSB0aGV5JiMzOTtsbCBjb3ZlciBhIHJhbmdlIG9mIGludGVyZmFjZSBtZXRob2RvbG9naWVzIHRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB0aGluZ3MuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBzZWUgdGhlIGludGVyYWN0aW9ucyBmaXJzdGhhbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX3NwaV9kcml2ZXJ8bW9kdWxlX2kyY19kcml2ZXJ8bW9kdWxlX21kaW9fZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmM9MTMzPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBrc3o5NDc3X2kyY19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jLTE0NC1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYzoxNDU6bW9kdWxlX2kyY19kcml2ZXIoa3N6OTQ3N19pMmNfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYy0xNDYtXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmM9MzQ5PXN0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBrc3pfc3BpX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYy0zNjAtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYzozNjE6bW9kdWxlX3NwaV9kcml2ZXIoa3N6X3NwaV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmMtMzYyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTM4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFRob3VnaHQgUHJvY2VzcyBvbiBEU0EgU3dpdGNoZXMgYW5kIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIERTQSBzd2l0Y2hlcy4gVGhlIHByb21wdCBzYXlzICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgaWYgaXQgZmFsbHMgdW5kZXIgc3BlY2lmaWMgY3JpdGVyaWEsIHNvIGxldCYjMzk7cyBicmVhayBpdCBkb3duOiBBcmUgRFNBIHN3aXRjaGVzIGFsd2F5cyBwaHlzaWNhbCBoYXJkd2FyZS1kZXBlbmRlbnQsIG9yIGNhbiB3ZSBnZXQgYXQgdGhlbSBzb21laG93IGluIHN5emthbGxlciBvciBhIHZpcnR1YWxpemVkIFFFTVUgZW52aXJvbm1lbnQ/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHdlIGNhbiBldmVuICpyZWFjaCogdGhpcyBjb2RlLgoKQWxyaWdodCwgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgbG9vayBhdCB0aGUgJiMzNDtub3QgV29ydGhGdXp6aW5nJiMzNDsgY29uZGl0aW9ucy4gSXQmIzM5O3MgYSBsb3Qgb2YgdGhpbmdzLCBsaWtlIGRvY3VtZW50YXRpb24sIGxvZ2dpbmcsIGNvbnN0YW50cyB0aGF0IGRvbiYjMzk7dCBjaGFuZ2UgZmxvdywgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHZlbmRvci1zcGVjaWZpYyBzdHVmZiB0aWVkIHRvIGFjdHVhbCBoYXJkd2FyZSAobGlrZSBQQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCksIGFuZCB0ZWFyZG93biBjYWxsYmFja3MgdGhhdCBvbmx5IHJ1biBkdXJpbmcgaG90LXVucGx1Zy4KClRoZSByZWFsIHF1ZXN0aW9uIGlzLCBjYW4gdGhlc2UgRFNBIHN3aXRjaGVzIG9uIFNQSSBvciBJMkMgKHNwZWNpZmljYWxseSwgdGhpbmtpbmcgYWJvdXQgc29tZXRoaW5nIGxpa2UgYSBNaWNyb2NoaXAgS1NaKSBldmVuIGJlICpwcm9iZWQqIG9yIGluc3RhbnRpYXRlZCBpbiBRRU1VL3N5emthbGxlciB3aXRob3V0IGEgcGh5c2ljYWwgc2V0dXA/IE5vdyBJJiMzOTttIHJlbWVtYmVyaW5nIHRoYXQgU1BJIGFuZCBJMkMgZHJpdmVycyBjYW4gc29tZXRpbWVzIGJlIGludGVyYWN0ZWQgd2l0aCBmcm9tIHVzZXJzcGFjZSwgcmlnaHQ/IExpa2UsIGNhbiBJIGNyZWF0ZSBhbiBJMkMgZGV2aWNlIHZpYSBzeXNmcyB3aXRoIGAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtWC9uZXdfZGV2aWNlYD8gT3IgdmlhIFNQSS9PRiwgb3IgZXZlbiB3aXRoIGEgZHVtbXkgZGV2aWNlPwoKQWhhLCB0aGF0JiMzOTtzIGl0ISBJbiBMaW51eCwgeW91ICpjYW4qIGluc3RhbnRpYXRlIEkyQyBkZXZpY2VzIHdpdGggdGhhdCBgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLVgvbmV3X2RldmljZWAgcGF0aC4gQnV0LCB0aGUgcXVlc3Rpb24gYmVjb21lcywgY2FuIHN5emthbGxlciAqdXNlKiB0aGlzPyBEb2VzIFFFTVUgZXZlbiBoYXZlIGFuIEkyQyBidXMgaW1wbGVtZW50ZWQ/IEkgbmVlZCB0byBjaGVjayBpZiBzeXprYWxsZXIgaGFzICYjMzQ7aTJjIG5ld19kZXZpY2UmIzM0OyBmdW5jdGlvbmFsaXR5LCBhbmQgaWYgRFNBIHN3aXRjaGVzIGNhbiBiZSBjb250cm9sbGVkIHZpYSB0aGlzLgoKT2theSwgbGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBkZXRhaWxzLiBEU0Egc3dpdGNoIGRyaXZlciBwcm9iaW5nIHJlcXVpcmVzIGEgRFNBIHRyZWUgYW5kIHBsYXRmb3JtL2RldmljZSB0cmVlIGRhdGEuIFNvIG5vdyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGU6IFNwZWNpZmljYWxseSwgbGV0JiMzOTtzIGxvb2sgYXQgYGtzejk0NzdfaTJjX3Byb2JlYCBhbmQgYGtzel9zd2l0Y2hfcmVnaXN0ZXJgIGluIGBkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2AgdG8gc2VlIGlmIHRoZXkgY2FuIHNvbWVob3cgYmUgYWNjZXNzZWQgdmlydHVhbGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tzejk0NzdfaTJjX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmM9MTU9S1NaX1JFR01BUF9UQUJMRShrc3o5NDc3LCBub3RfdXNlZCwgMTYsIDAsIDApO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jLTE2LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jOjE3OnN0YXRpYyBpbnQga3N6OTQ3N19pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYylcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYy0xOC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jPTEzMz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIga3N6OTQ3N19pMmNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYy0xMzgtXHR9LFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jOjEzOTpcdC5wcm9iZSA9IGtzejk0NzdfaTJjX3Byb2JlLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jLTE0MC1cdC5yZW1vdmVcdD0ga3N6OTQ3N19pMmNfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzQ4CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEtTWjk0NzcgRHJpdmVyKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgS1NaOTQ3NyBzd2l0Y2ggaXMgYmVpbmcgaGFuZGxlZCBpbiB0aGUgTGludXgga2VybmVsLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGF0IGBrc3o5NDc3X2kyY19wcm9iZWAgYW5kIGBrc3pfc3dpdGNoX3JlZ2lzdGVyYCBmdW5jdGlvbnMuIFRoZXNlIGFyZSBsaWtlbHkgdGhlIGNvcmUgZW50cnkgcG9pbnRzIGZvciBpbml0aWFsaXppbmcgYW5kIHJlZ2lzdGVyaW5nIHRoZSBkZXZpY2UsIEkmIzM5O2QgZXhwZWN0LiBUaGUgZmlsZSBwYXRocyBhcmUgc3RyYWlnaHRmb3J3YXJkIGVub3VnaDogYGRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuY2AgYW5kIGBrc3pfY29tbW9uLmNgLiBJJiMzOTttIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgSTJDIGNvbW11bmljYXRpb24gaXMgc2V0IHVwLCB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgdXNlZCwgYW5kIGhvdyB0aGUgc3dpdGNoIGlzIGludGVncmF0ZWQgd2l0aGluIHRoZSBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGZyYW1ld29yay4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbiB0b28sIGFzIHRoYXQmIzM5O3MgYWx3YXlzIGEgY3JpdGljYWwgYXNwZWN0IGluIGRyaXZlciBkZXZlbG9wbWVudC4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDE3Olx0c3RhdGljIGludCBrc3o5NDc3X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjKVxuICAxODpcdHtcbiAgMTk6XHRcdGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhICpjaGlwO1xuICAyMDpcdFx0c3RydWN0IGRldmljZSAqZGRldiA9IFx1MDAyNmkyYy1cdTAwM2VkZXY7XG4gIDIxOlx0XHRzdHJ1Y3QgcmVnbWFwX2NvbmZpZyByYztcbiAgMjI6XHRcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXY7XG4gIDIzOlx0XHRpbnQgaSwgcmV0O1xuICAyNDpcdFxuICAyNTpcdFx0Y2hpcCA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShkZGV2KTtcbiAgMjY6XHRcdGlmICghY2hpcClcbiAgMjc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gIDI4Olx0XG4gIDI5Olx0XHRkZXYgPSBrc3pfc3dpdGNoX2FsbG9jKFx1MDAyNmkyYy1cdTAwM2VkZXYsIGNoaXAsIGkyYyk7XG4gIDMwOlx0XHRpZiAoIWRldilcbiAgMzE6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gIDMyOlx0XG4gIDMzOlx0XHQvKiBTYXZlIGNoaXAgaWQgdG8gZG8gc3BlY2lhbCBpbml0aWFsaXphdGlvbiB3aGVuIHByb2JpbmcuICovXG4gIDM0Olx0XHRkZXYtXHUwMDNlY2hpcF9pZCA9IGNoaXAtXHUwMDNlY2hpcF9pZDtcbiAgMzU6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIF9fS1NaX05VTV9SRUdNQVBTOyBpJiM0MzsmIzQzOykge1xuICAzNjpcdFx0XHRyYyA9IGtzejk0NzdfcmVnbWFwX2NvbmZpZ1tpXTtcbiAgMzc6XHRcdFx0cmMubG9ja19hcmcgPSBcdTAwMjZkZXYtXHUwMDNlcmVnbWFwX211dGV4O1xuICAzODpcdFx0XHRkZXYtXHUwMDNlcmVnbWFwW2ldID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoaTJjLCBcdTAwMjZyYyk7XG4gIDM5Olx0XHRcdGlmIChJU19FUlIoZGV2LVx1MDAzZXJlZ21hcFtpXSkpIHtcbiAgNDA6XHRcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcdTAwMjZpMmMtXHUwMDNlZGV2LCBQVFJfRVJSKGRldi1cdTAwM2VyZWdtYXBbaV0pLFxuICA0MTpcdFx0XHRcdFx0XHQgICAgIFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIHJlZ21hcCVpXFxuXCYjMzQ7LFxuICA0MjpcdFx0XHRcdFx0XHQgICAgIGtzejk0NzdfcmVnbWFwX2NvbmZpZ1tpXS52YWxfYml0cyk7XG4gIDQzOlx0XHRcdH1cbiAgNDQ6XHRcdH1cbiAgNDU6XHRcbiAgNDY6XHRcdGlmIChpMmMtXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGEpXG4gIDQ3Olx0XHRcdGRldi1cdTAwM2VwZGF0YSA9IGkyYy1cdTAwM2VkZXYucGxhdGZvcm1fZGF0YTtcbiAgNDg6XHRcbiAgNDk6XHRcdGRldi1cdTAwM2VpcnEgPSBpMmMtXHUwMDNlaXJxO1xuICA1MDpcdFxuICA1MTpcdFx0cmV0ID0ga3N6X3N3aXRjaF9yZWdpc3RlcihkZXYpO1xuICA1MjpcdFxuICA1MzpcdFx0LyogTWFpbiBEU0EgZHJpdmVyIG1heSBub3QgYmUgc3RhcnRlZCB5ZXQuICovXG4gIDU0Olx0XHRpZiAocmV0KVxuICA1NTpcdFx0XHRyZXR1cm4gcmV0O1xuICA1NjpcdFxuICA1NzpcdFx0aTJjX3NldF9jbGllbnRkYXRhKGkyYywgZGV2KTtcbiAgNTg6XHRcbiAgNTk6XHRcdHJldHVybiAwO1xuICA2MDpcdH1cbiAgNjE6XHRcbiAgNjI6XHRzdGF0aWMgdm9pZCBrc3o5NDc3X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmkyYylcbiAgNjM6XHR7XG4gIDY0Olx0XHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gaTJjX2dldF9jbGllbnRkYXRhKGkyYyk7XG4gIDY1Olx0XG4gIDY2Olx0XHRpZiAoZGV2KVxuICA2NzpcdFx0XHRrc3pfc3dpdGNoX3JlbW92ZShkZXYpO1xuICA2ODpcdH1cbiAgNjk6XHRcbiAgNzA6XHRzdGF0aWMgdm9pZCBrc3o5NDc3X2kyY19zaHV0ZG93bihzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjKVxuICA3MTpcdHtcbiAgNzI6XHRcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBpMmNfZ2V0X2NsaWVudGRhdGEoaTJjKTtcbiAgNzM6XHRcbiAgNzQ6XHRcdGlmICghZGV2KVxuICA3NTpcdFx0XHRyZXR1cm47XG4gIDc2Olx0XG4gIDc3Olx0XHRrc3pfc3dpdGNoX3NodXRkb3duKGRldik7XG4gIDc4Olx0XG4gIDc5Olx0XHRpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBOVUxMKTtcbiAgODA6XHR9XG4gIDgxOlx0XG4gIDgyOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGtzejk0NzdfaTJjX2lkW10gPSB7XG4gIDgzOlx0XHR7IC5uYW1lID0gXCYjMzQ7a3N6OTQ3Ny1zd2l0Y2hcJiMzNDsgfSxcbiAgODQ6XHRcdHsgfVxuICA4NTpcdH07XG4gIDg2Olx0XG4gIDg3Olx0TU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGtzejk0NzdfaTJjX2lkKTtcbiAgODg6XHRcbiAgODk6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBrc3o5NDc3X2R0X2lkc1tdID0ge1xuICA5MDpcdFx0e1xuICA5MTpcdFx0XHQuY29tcGF0aWJsZSA9IFwmIzM0O21pY3JvY2hpcCxrc3o5NDc3XCYjMzQ7LFxuICA5MjpcdFx0XHQuZGF0YSA9IFx1MDAyNmtzel9zd2l0Y2hfY2hpcHNbS1NaOTQ3N11cbiAgOTM6XHRcdH0sXG4gIDk0Olx0XHR7XG4gIDk1Olx0XHRcdC5jb21wYXRpYmxlID0gXCYjMzQ7bWljcm9jaGlwLGtzejk4OTZcJiMzNDssXG4gIDk2Olx0XHRcdC5kYXRhID0gXHUwMDI2a3N6X3N3aXRjaF9jaGlwc1tLU1o5ODk2XVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg0NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBrc3o5NDc3IERyaXZlciBQcm9iZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBrc3o5NDc3X2kyY19wcm9iZWAgZnVuY3Rpb24uIExpbmVzIDI1LTI3IGp1bXAgb3V0IGF0IG1lIGltbWVkaWF0ZWx5OiB0aGV5IHRyeSB0byByZXRyaWV2ZSBtYXRjaCBkYXRhIGZyb20gdGhlIGRldmljZSB1c2luZyBgZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRkZXYpYCwgYW5kIHRoZW4gYmFpbCBpZiBpdCYjMzk7cyBOVUxMLiBUaGlzIG1ha2VzIHNlbnNlIGluIG1vc3QgY29udGV4dHMsIGJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uIGlmIHRoZSBkZXZpY2UgaXMgaW5pdGlhbGl6ZWQgdGhyb3VnaCB0aGUgSTJDIElELCBzcGVjaWZpY2FsbHkgYCYjMzQ7a3N6OTQ3Ny1zd2l0Y2gmIzM0O2AgYXMgZGVmaW5lZCBpbiBga3N6OTQ3N19pMmNfaWRgLCB3b3VsZG4mIzM5O3QgdGhhdCBtZWFuIGBkcml2ZXJfZGF0YWAgaXMgYDBgIG9yIE5VTEw/IEluIHRoYXQgc2NlbmFyaW8sIGBkZXZpY2VfZ2V0X21hdGNoX2RhdGFgIHdvdWxkICphbHdheXMqIHJldHVybiBOVUxMLCByaWdodD8gVGhhdCBsb29rcyBsaWtlIGEgYnVnLiBCZWZvcmUgSSBkaWcgZGVlcGVyLCBsZXQgbWUgY2hlY2sgdGhlIGBrc3pfc3dpdGNoX3JlZ2lzdGVyYCBmdW5jdGlvbiBpbiBga3N6X2NvbW1vbi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjaGlwIGlzIG1lYW50IHRvIGJlIHJlZ2lzdGVyZWQgYW5kIGlmIHRoZXJlJiMzOTtzIGFueSBpbXBsaWNpdCBkYXRhIHNldHVwIHRoYXQgbWlnaHQgYmUgbWlzc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQga3N6X3N3aXRjaF9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM9MzkxMT1zdGF0aWMgaW50IGtzejg0NjNfcmVsZWFzZV9zdHJhcHNfc3BpKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMzkxNS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jOjM5MTY6aW50IGtzel9zd2l0Y2hfcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTM5MTcte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oPTQyOT1zdHJ1Y3Qga3N6X2RldmljZSAqa3N6X3N3aXRjaF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpiYXNlLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTQzMS1cdFx0XHRcdCAgICB2b2lkICpwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oOjQzMjppbnQga3N6X3N3aXRjaF9yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTQzMy12b2lkIGtzel9zd2l0Y2hfcmVtb3ZlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTU0NgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gcHVsbCB1cCBga3N6X3N3aXRjaF9yZWdpc3RlcmAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uY2AgZmlsZS4gSSYjMzk7bSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uIGFuZCBsb2NhdGlvbiwgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgcmVnaXN0ZXJpbmcgYSBNaWNyb2NoaXAgS1NaIHNlcmllcyBzd2l0Y2ggd2l0aGluIHRoZSBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGZyYW1ld29yay4gS25vd2luZyBLU1ogc3dpdGNoZXMsIGl0IGxpa2VseSBoYW5kbGVzIHRoZSBiYXNpYyBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiwgc2V0dGluZyB1cCBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHN3aXRjaCAobGlrZWx5IHRocm91Z2ggTURJTyksIGFuZCB0aGVuIGludGVncmF0aW5nIHRoZSBzd2l0Y2gmIzM5O3MgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIExpbnV4IG5ldHdvcmtpbmcgc3RhY2suIEl0IHdpbGwgcHJvYmFibHkgaW52b2x2ZSBzb21lIGRldmljZSB0cmVlIHBhcnNpbmcgdG8gY29uZmlndXJlIGl0cyBoYXJkd2FyZSwgcG9zc2libHkgaW5jbHVkaW5nIHRoaW5ncyBsaWtlIHRoZSBNRElPIGJ1cyBhZGRyZXNzLCB0aGUgUEhZIGFkZHJlc3NlcywgYW5kIGFueSBzcGVjaWZpYyBjbG9jayBjb25maWd1cmF0aW9ucyBuZWVkZWQgZm9yIHByb3BlciBvcGVyYXRpb24uIEkgZXhwZWN0IHRvIHNlZSB0aGUgc3RhbmRhcmQgZGV2aWNlIHJlZ2lzdHJhdGlvbiBjYWxscyBmb3IgRFNBLCBhbG9uZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBzd2l0Y2gmIzM5O3MgdmFyaW91cyBwb3J0cyBhbmQgdGhlaXIgY2hhcmFjdGVyaXN0aWNzLiBIb3BlZnVsbHkgaXQgY29udGFpbnMgYSBjbGVhbiBlcnJvciBoYW5kbGluZyBwYXRoIC0gdGhhdCYjMzk7cyBhbHdheXMgZ29vZCBwcmFjdGljZSwgZXNwZWNpYWxseSBpbiBhIGRyaXZlci4gSSYjMzk7bGwgYmUgbG9va2luZyB0byBzZWUgaG93IHdlbGwgaXQmIzM5O3Mgd3JpdHRlbiBhbmQgaWYgaXQgcHJvdmlkZXMgcm9idXN0IGVub3VnaCBzdXBwb3J0IGZvciBhbGwgb2YgdGhlIGZlYXR1cmVzIHRoYXQgS1NaIHN3aXRjaGVzIHByb3ZpZGUuIEkmIzM5O20gYWxzbyBob3BpbmcgZm9yIGNsZWFyIGRvY3VtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTE2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM5MTY6XHRpbnQga3N6X3N3aXRjaF9yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuMzkxNzpcdHtcbjM5MTg6XHRcdGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhICppbmZvO1xuMzkxOTpcdFx0c3RydWN0IGRldmljZV9ub2RlICpwb3J0cztcbjM5MjA6XHRcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG4zOTIxOlx0XHR1bnNpZ25lZCBpbnQgcG9ydF9udW07XG4zOTIyOlx0XHRpbnQgcmV0O1xuMzkyMzpcdFx0aW50IGk7XG4zOTI0Olx0XG4zOTI1Olx0XHRkZXYtXHUwMDNlcmVzZXRfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKGRldi1cdTAwM2VkZXYsIFwmIzM0O3Jlc2V0XCYjMzQ7LFxuMzkyNjpcdFx0XHRcdFx0XHRcdCAgR1BJT0RfT1VUX0xPVyk7XG4zOTI3Olx0XHRpZiAoSVNfRVJSKGRldi1cdTAwM2VyZXNldF9ncGlvKSlcbjM5Mjg6XHRcdFx0cmV0dXJuIFBUUl9FUlIoZGV2LVx1MDAzZXJlc2V0X2dwaW8pO1xuMzkyOTpcdFxuMzkzMDpcdFx0aWYgKGRldi1cdTAwM2VyZXNldF9ncGlvKSB7XG4zOTMxOlx0XHRcdGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkZXYtXHUwMDNlZGV2LVx1MDAzZW9mX25vZGUsIFwmIzM0O21pY3JvY2hpcCxrc3o4NDYzXCYjMzQ7KSkge1xuMzkzMjpcdFx0XHRcdHJldCA9IGtzejg0NjNfY29uZmlndXJlX3N0cmFwc19zcGkoZGV2KTtcbjM5MzM6XHRcdFx0XHRpZiAocmV0KVxuMzkzNDpcdFx0XHRcdFx0cmV0dXJuIHJldDtcbjM5MzU6XHRcdFx0fVxuMzkzNjpcdFxuMzkzNzpcdFx0XHRncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoZGV2LVx1MDAzZXJlc2V0X2dwaW8sIDEpO1xuMzkzODpcdFx0XHR1c2xlZXBfcmFuZ2UoMTAwMDAsIDEyMDAwKTtcbjM5Mzk6XHRcdFx0Z3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGRldi1cdTAwM2VyZXNldF9ncGlvLCAwKTtcbjM5NDA6XHRcdFx0bXNsZWVwKDEwMCk7XG4zOTQxOlx0XG4zOTQyOlx0XHRcdGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkZXYtXHUwMDNlZGV2LVx1MDAzZW9mX25vZGUsIFwmIzM0O21pY3JvY2hpcCxrc3o4NDYzXCYjMzQ7KSkge1xuMzk0MzpcdFx0XHRcdHJldCA9IGtzejg0NjNfcmVsZWFzZV9zdHJhcHNfc3BpKGRldik7XG4zOTQ0Olx0XHRcdFx0aWYgKHJldClcbjM5NDU6XHRcdFx0XHRcdHJldHVybiByZXQ7XG4zOTQ2Olx0XHRcdH1cbjM5NDc6XHRcdH1cbjM5NDg6XHRcbjM5NDk6XHRcdG11dGV4X2luaXQoXHUwMDI2ZGV2LVx1MDAzZWRldl9tdXRleCk7XG4zOTUwOlx0XHRtdXRleF9pbml0KFx1MDAyNmRldi1cdTAwM2VyZWdtYXBfbXV0ZXgpO1xuMzk1MTpcdFx0bXV0ZXhfaW5pdChcdTAwMjZkZXYtXHUwMDNlYWx1X211dGV4KTtcbjM5NTI6XHRcdG11dGV4X2luaXQoXHUwMDI2ZGV2LVx1MDAzZXZsYW5fbXV0ZXgpO1xuMzk1MzpcdFxuMzk1NDpcdFx0cmV0ID0ga3N6X3N3aXRjaF9kZXRlY3QoZGV2KTtcbjM5NTU6XHRcdGlmIChyZXQpXG4zOTU2Olx0XHRcdHJldHVybiByZXQ7XG4zOTU3Olx0XG4zOTU4Olx0XHRpbmZvID0ga3N6X2xvb2t1cF9pbmZvKGRldi1cdTAwM2VjaGlwX2lkKTtcbjM5NTk6XHRcdGlmICghaW5mbylcbjM5NjA6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4zOTYxOlx0XG4zOTYyOlx0XHQvKiBVcGRhdGUgdGhlIGNvbXBhdGlibGUgaW5mbyB3aXRoIHRoZSBwcm9iZWQgb25lICovXG4zOTYzOlx0XHRkZXYtXHUwMDNlaW5mbyA9IGluZm87XG4zOTY0Olx0XG4zOTY1Olx0XHRkZXZfaW5mbyhkZXYtXHUwMDNlZGV2LCBcJiMzNDtmb3VuZCBzd2l0Y2g6ICVzLCByZXYgJWlcXG5cJiMzNDssXG4zOTY2Olx0XHRcdCBkZXYtXHUwMDNlaW5mby1cdTAwM2VkZXZfbmFtZSwgZGV2LVx1MDAzZWNoaXBfcmV2KTtcbjM5Njc6XHRcbjM5Njg6XHRcdHJldCA9IGtzel9jaGVja19kZXZpY2VfaWQoZGV2KTtcbjM5Njk6XHRcdGlmIChyZXQpXG4zOTcwOlx0XHRcdHJldHVybiByZXQ7XG4zOTcxOlx0XG4zOTcyOlx0XHRkZXYtXHUwMDNlZGV2X29wcyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZW9wcztcbjM5NzM6XHRcbjM5NzQ6XHRcdHJldCA9IGRldi1cdTAwM2VkZXZfb3BzLVx1MDAzZWluaXQoZGV2KTtcbjM5NzU6XHRcdGlmIChyZXQpXG4zOTc2Olx0XHRcdHJldHVybiByZXQ7XG4zOTc3Olx0XG4zOTc4Olx0XHRkZXYtXHUwMDNlcG9ydHMgPSBkZXZtX2t6YWxsb2MoZGV2LVx1MDAzZWRldixcbjM5Nzk6XHRcdFx0XHRcdCAgZGV2LVx1MDAzZWluZm8tXHUwMDNlcG9ydF9jbnQgKiBzaXplb2Yoc3RydWN0IGtzel9wb3J0KSxcbjM5ODA6XHRcdFx0XHRcdCAgR0ZQX0tFUk5FTCk7XG4zOTgxOlx0XHRpZiAoIWRldi1cdTAwM2Vwb3J0cylcbjM5ODI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4zOTgzOlx0XG4zOTg0Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXYtXHUwMDNlaW5mby1cdTAwM2Vwb3J0X2NudDsgaSYjNDM7JiM0MzspIHtcbjM5ODU6XHRcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXBvcnRzW2ldLm1pYi5zdGF0czY0X2xvY2spO1xuMzk4NjpcdFx0XHRtdXRleF9pbml0KFx1MDAyNmRldi1cdTAwM2Vwb3J0c1tpXS5taWIuY250X211dGV4KTtcbjM5ODc6XHRcdFx0ZGV2LVx1MDAzZXBvcnRzW2ldLm1pYi5jb3VudGVycyA9XG4zOTg4Olx0XHRcdFx0ZGV2bV9remFsbG9jKGRldi1cdTAwM2VkZXYsXG4zOTg5Olx0XHRcdFx0XHQgICAgIHNpemVvZih1NjQpICogKGRldi1cdTAwM2VpbmZvLVx1MDAzZW1pYl9jbnQgJiM0MzsgMSksXG4zOTkwOlx0XHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuMzk5MTpcdFx0XHRpZiAoIWRldi1cdTAwM2Vwb3J0c1tpXS5taWIuY291bnRlcnMpXG4zOTkyOlx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4zOTkzOlx0XG4zOTk0Olx0XHRcdGRldi1cdTAwM2Vwb3J0c1tpXS5rc3pfZGV2ID0gZGV2O1xuMzk5NTpcdFx0XHRkZXYtXHUwMDNlcG9ydHNbaV0ubnVtID0gaTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExMDkKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBrc3pfc3dpdGNoX3JlZ2lzdGVyYCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKKipBbmFseXppbmcgdGhlIGBrc3pfc3dpdGNoX3JlZ2lzdGVyYCBGdW5jdGlvbiYjMzk7cyBOZXh0IFN0ZXBzKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY29taW5nIG5leHQgaW4gdGhpcyBga3N6X3N3aXRjaF9yZWdpc3RlcmAgZnVuY3Rpb24uIEkmIzM5O3ZlIGdvdCBteSBkZWJ1Z2dpbmcgaGF0IG9uLCBhbmQgSSYjMzk7bSByZWFkeSB0byBmb2xsb3cgdGhlIGZsb3cuIEkga25vdyB0aGUgZ2VuZXJhbCBwdXJwb3NlLCBvZiBjb3Vyc2UsIGJ1dCBpdCYjMzk7cyB0aW1lIHRvIGRyaWxsIGRvd24gaW50byB0aGUgc3BlY2lmaWNzLiBXaGF0IGFyZSB0aGUga2V5IG9wZXJhdGlvbnMgYmVpbmcgcGVyZm9ybWVkPyBJcyBpdCBoYW5kbGluZyBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiwgZGV2aWNlIGNvbmZpZ3VyYXRpb24sIG9yIGludGVycnVwdCBzZXR1cD8gSSYjMzk7bSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQ7IHRob3NlIHVzdWFsbHkgaG9sZCB0aGUgc2VjcmV0cyB0byB0aGUgbG9naWMuIEFueSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgcmVzb3VyY2UgbWFuYWdlbWVudCBzeXN0ZW0gbmVlZHMgY2FyZWZ1bCBzY3J1dGlueSwgcGFydGljdWxhcmx5IHdpdGggdGhlc2Ugc29ydHMgb2YgZGV2aWNlIGRyaXZlcnMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzLiBUaGUgZXJyb3IgaGFuZGxpbmcgaXMgY3JpdGljYWwgYXMgd2VsbDogYXJlIHRoZSBlcnJvciBjb2RlcyBtZWFuaW5nZnVsPyBBcmUgdGhlcmUgc3VmZmljaWVudCByZXRyaWVzIGluIGNhc2Ugb2YgdHJhbnNpZW50IGZhaWx1cmVzPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBsb29raW5nIGZvciBhbnkgY2FsbHMgdG8gb3RoZXIgZnVuY3Rpb25zIGFuZCB0cmFjaW5nIHRoZW0gb3V0LiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBsb29raW5nIGF0IGFueSBoYXJkd2FyZSBhY2Nlc3MsIG9yIGNhbGxzIHRvIHJlc291cmNlIGFsbG9jYXRpb24gcm91dGluZXMsIHdoaWNoIGNvdWxkIGJlIHRoZSBzb3VyY2Ugb2YgaXNzdWVzLiBJIGFsc28gd2FudCB0byBtYWtlIHN1cmUgdGhlIGRhdGEgc3RydWN0dXJlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEluIHNob3J0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gdGhlIGxvdyBsZXZlbCBhbmQgc2VlIHdoYXQmIzM5O3MgYmVpbmcgZG9uZSBhbmQgd2hldGhlciBpdCYjMzk7cyBkb25lIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM5OTYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mzk5NjpcdFx0fVxuMzk5NzpcdFxuMzk5ODpcdFx0Lyogc2V0IHRoZSByZWFsIG51bWJlciBvZiBwb3J0cyAqL1xuMzk5OTpcdFx0ZGV2LVx1MDAzZWRzLVx1MDAzZW51bV9wb3J0cyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZXBvcnRfY250O1xuNDAwMDpcdFxuNDAwMTpcdFx0Lyogc2V0IHRoZSBwaHlsaW5rIG9wcyAqL1xuNDAwMjpcdFx0ZGV2LVx1MDAzZWRzLVx1MDAzZXBoeWxpbmtfbWFjX29wcyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZXBoeWxpbmtfbWFjX29wcztcbjQwMDM6XHRcbjQwMDQ6XHRcdC8qIEhvc3QgcG9ydCBpbnRlcmZhY2Ugd2lsbCBiZSBzZWxmIGRldGVjdGVkLCBvciBzcGVjaWZpY2FsbHkgc2V0IGluXG40MDA1Olx0XHQgKiBkZXZpY2UgdHJlZS5cbjQwMDY6XHRcdCAqL1xuNDAwNzpcdFx0Zm9yIChwb3J0X251bSA9IDA7IHBvcnRfbnVtIFx1MDAzYyBkZXYtXHUwMDNlaW5mby1cdTAwM2Vwb3J0X2NudDsgJiM0MzsmIzQzO3BvcnRfbnVtKVxuNDAwODpcdFx0XHRkZXYtXHUwMDNlcG9ydHNbcG9ydF9udW1dLmludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQTtcbjQwMDk6XHRcdGlmIChkZXYtXHUwMDNlZGV2LVx1MDAzZW9mX25vZGUpIHtcbjQwMTA6XHRcdFx0cmV0ID0gb2ZfZ2V0X3BoeV9tb2RlKGRldi1cdTAwM2VkZXYtXHUwMDNlb2Zfbm9kZSwgXHUwMDI2aW50ZXJmYWNlKTtcbjQwMTE6XHRcdFx0aWYgKHJldCA9PSAwKVxuNDAxMjpcdFx0XHRcdGRldi1cdTAwM2Vjb21wYXRfaW50ZXJmYWNlID0gaW50ZXJmYWNlO1xuNDAxMzpcdFx0XHRwb3J0cyA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldi1cdTAwM2VkZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7ZXRoZXJuZXQtcG9ydHNcJiMzNDspO1xuNDAxNDpcdFx0XHRpZiAoIXBvcnRzKVxuNDAxNTpcdFx0XHRcdHBvcnRzID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2LVx1MDAzZWRldi1cdTAwM2VvZl9ub2RlLCBcJiMzNDtwb3J0c1wmIzM0Oyk7XG40MDE2Olx0XHRcdGlmIChwb3J0cykge1xuNDAxNzpcdFx0XHRcdGZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlX3Njb3BlZChwb3J0cywgcG9ydCkge1xuNDAxODpcdFx0XHRcdFx0aWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBvcnQsIFwmIzM0O3JlZ1wmIzM0OyxcbjQwMTk6XHRcdFx0XHRcdFx0XHRcdCBcdTAwMjZwb3J0X251bSkpXG40MDIwOlx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuNDAyMTpcdFx0XHRcdFx0aWYgKCEoZGV2LVx1MDAzZXBvcnRfbWFzayBcdTAwMjYgQklUKHBvcnRfbnVtKSkpIHtcbjQwMjI6XHRcdFx0XHRcdFx0b2Zfbm9kZV9wdXQocG9ydHMpO1xuNDAyMzpcdFx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQwMjQ6XHRcdFx0XHRcdH1cbjQwMjU6XHRcdFx0XHRcdG9mX2dldF9waHlfbW9kZShwb3J0LFxuNDAyNjpcdFx0XHRcdFx0XHRcdFx1MDAyNmRldi1cdTAwM2Vwb3J0c1twb3J0X251bV0uaW50ZXJmYWNlKTtcbjQwMjc6XHRcbjQwMjg6XHRcdFx0XHRcdGtzel9wYXJzZV9yZ21paV9kZWxheShkZXYsIHBvcnRfbnVtLCBwb3J0KTtcbjQwMjk6XHRcdFx0XHRcdGRldi1cdTAwM2Vwb3J0c1twb3J0X251bV0uZmliZXIgPVxuNDAzMDpcdFx0XHRcdFx0XHRvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wocG9ydCxcbjQwMzE6XHRcdFx0XHRcdFx0XHRcdCAgICAgIFwmIzM0O21pY3JlbCxmaWJlci1tb2RlXCYjMzQ7KTtcbjQwMzI6XHRcdFx0XHR9XG40MDMzOlx0XHRcdFx0b2Zfbm9kZV9wdXQocG9ydHMpO1xuNDAzNDpcdFx0XHR9XG40MDM1Olx0XHRcdGRldi1cdTAwM2VzeW5jbGtvXzEyNSA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYtXHUwMDNlZGV2LVx1MDAzZW9mX25vZGUsXG40MDM2Olx0XHRcdFx0XHRcdFx0XHQgXCYjMzQ7bWljcm9jaGlwLHN5bmNsa28tMTI1XCYjMzQ7KTtcbjQwMzc6XHRcdFx0ZGV2LVx1MDAzZXN5bmNsa29fZGlzYWJsZSA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYtXHUwMDNlZGV2LVx1MDAzZW9mX25vZGUsXG40MDM4Olx0XHRcdFx0XHRcdFx0XHQgICAgIFwmIzM0O21pY3JvY2hpcCxzeW5jbGtvLWRpc2FibGVcJiMzNDspO1xuNDAzOTpcdFx0XHRpZiAoZGV2LVx1MDAzZXN5bmNsa29fMTI1IFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNlc3luY2xrb19kaXNhYmxlKSB7XG40MDQwOlx0XHRcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcJiMzNDtpbmNvbnNpc3RlbnQgc3luY2xrbyBzZXR0aW5nc1xcblwmIzM0Oyk7XG40MDQxOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40MDQyOlx0XHRcdH1cbjQwNDM6XHRcbjQwNDQ6XHRcdFx0ZGV2LVx1MDAzZXdha2V1cF9zb3VyY2UgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2LVx1MDAzZWRldi1cdTAwM2VvZl9ub2RlLFxuNDA0NTpcdFx0XHRcdFx0XHRcdFx0ICAgXCYjMzQ7d2FrZXVwLXNvdXJjZVwmIzM0Oyk7XG40MDQ2Olx0XHRcdGRldi1cdTAwM2VwbWVfYWN0aXZlX2hpZ2ggPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2LVx1MDAzZWRldi1cdTAwM2VvZl9ub2RlLFxuNDA0NzpcdFx0XHRcdFx0XHRcdFx0ICAgICBcJiMzNDttaWNyb2NoaXAscG1lLWFjdGl2ZS1oaWdoXCYjMzQ7KTtcbjQwNDg6XHRcdH1cbjQwNDk6XHRcbjQwNTA6XHRcdHJldCA9IGRzYV9yZWdpc3Rlcl9zd2l0Y2goZGV2LVx1MDAzZWRzKTtcbjQwNTE6XHRcdGlmIChyZXQpXG40MDUyOlx0XHRcdHJldHVybiByZXQ7XG40MDUzOlx0XG40MDU0Olx0XHQvKiBSZWFkIE1JQiBjb3VudGVycyBldmVyeSAzMCBzZWNvbmRzIHRvIGF2b2lkIG92ZXJmbG93LiAqL1xuNDA1NTpcdFx0ZGV2LVx1MDAzZW1pYl9yZWFkX2ludGVydmFsID0gbXNlY3NfdG9famlmZmllcyg1MDAwKTtcbjQwNTY6XHRcbjQwNTc6XHRcdC8qIFN0YXJ0IHRoZSBNSUIgdGltZXIuICovXG40MDU4Olx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2ZGV2LVx1MDAzZW1pYl9yZWFkLCAwKTtcbjQwNTk6XHRcbjQwNjA6XHRcdHJldHVybiByZXQ7XG40MDYxOlx0fVxuNDA2MjpcdEVYUE9SVF9TWU1CT0woa3N6X3N3aXRjaF9yZWdpc3Rlcik7XG40MDYzOlx0XG40MDY0Olx0dm9pZCBrc3pfc3dpdGNoX3JlbW92ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuNDA2NTpcdHtcbjQwNjY6XHRcdC8qIHRpbWVyIHN0YXJ0ZWQgKi9cbjQwNjc6XHRcdGlmIChkZXYtXHUwMDNlbWliX3JlYWRfaW50ZXJ2YWwpIHtcbjQwNjg6XHRcdFx0ZGV2LVx1MDAzZW1pYl9yZWFkX2ludGVydmFsID0gMDtcbjQwNjk6XHRcdFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNmRldi1cdTAwM2VtaWJfcmVhZCk7XG40MDcwOlx0XHR9XG40MDcxOlx0XG40MDcyOlx0XHRkc2FfdW5yZWdpc3Rlcl9zd2l0Y2goZGV2LVx1MDAzZWRzKTtcbjQwNzM6XHR9XG40MDc0Olx0RVhQT1JUX1NZTUJPTChrc3pfc3dpdGNoX3JlbW92ZSk7XG40MDc1Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzY0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBjb2RlLgoKKipBbmFseXppbmcga3N6XF9zd2l0Y2hcX2RldGVjdChkZXYpKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdHJhY2luZyB0aHJvdWdoIHRoaXMgYGtzel9zd2l0Y2hgIGRyaXZlciwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgY2FsbCB0byBga3N6X3N3aXRjaF9kZXRlY3QoZGV2KWAgaW4gYGtzel9zd2l0Y2hfcmVnaXN0ZXJgLiBOb3csICp0aGF0KiBwaXF1ZXMgbXkgaW50ZXJlc3QhIENsZWFybHksIHRoaXMgaXMgd2hlcmUgdGhlIHN5c3RlbSBpcyB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhbiBhY3R1YWwgc3dpdGNoIHByZXNlbnQgYW5kLCBpZiBzbywgd2hhdCBraW5kLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGBrc3pfc3dpdGNoX2RldGVjdGAgZnVuY3Rpb24gaXRzZWxmIGFuZCBzZWUgaG93IGl0IGdvZXMgYWJvdXQgZG9pbmcgdGhhdCBkZXRlY3Rpb24uIFRoaXMgaXMgdGhlIGNydXggb2YgdGhlIGluaXRpYWxpemF0aW9uLCBJIGJldC4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIHByb2JlIHNlcXVlbmNlLCByZWdpc3RlciByZWFkcy4uLiBtYXliZSBldmVuIHNvbWUgdmVuZG9yLXNwZWNpZmljIG1hZ2ljIHRvIGlkZW50aWZ5IHRoZSBoYXJkd2FyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHNlY3JldHMgaXQmIzM5O3MgaGlkaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrc3pfc3dpdGNoX2RldGVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM9MjkxNj12b2lkIGtzel9waHlsaW5rX21hY19jb25maWcoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMjkyNy1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jOjI5Mjg6c3RhdGljIGludCBrc3pfc3dpdGNoX2RldGVjdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMjkyOS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM9MzkxNj1pbnQga3N6X3N3aXRjaF9yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTM5NTMtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzozOTU0Olx0cmV0ID0ga3N6X3N3aXRjaF9kZXRlY3QoZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTM5NTUtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzI4NwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGF0IGZ1bmN0aW9uLCBga3N6X3N3aXRjaF9kZXRlY3RgLCBuZXN0bGVkIHdpdGhpbiBgZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNgLgoKKipEaXZpbmcgRGVlcCBpbnRvIEtTWiBTd2l0Y2ggRGV0ZWN0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGlzc2VjdCBga3N6X3N3aXRjaF9kZXRlY3RgIGZyb20gYGtzel9jb21tb24uY2AuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgdHJpZ2dlcnMgdGhpcyByb3V0aW5lLCB0aGUga2V5IHJlZ2lzdGVycyBpdCYjMzk7cyByZWFkaW5nIGFuZCB3cml0aW5nLCBhbmQgdGhlIGxvZ2ljIGJlaGluZCBob3cgaXQgZGV0ZXJtaW5lcyBpZiBhIE1pY3JvY2hpcCBLU1ogc3dpdGNoIGlzIHByZXNlbnQgYW5kIGZ1bmN0aW9uaW5nIGNvcnJlY3RseS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGhhcmR3YXJlLXNwZWNpZmljIHF1aXJrcyBvciB3b3JrYXJvdW5kcyBpbiB0aGlzIGxvdy1sZXZlbCBkcml2ZXIuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHBhcnQgb2YgYSBsYXJnZXIgRFNBIChEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlKSBmcmFtZXdvcmssIHNvIEkgc2hvdWxkIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIGhpZ2hlci1sZXZlbCBEU0EgY29tcG9uZW50cy4gSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IGVycm9yIGhhbmRsaW5nIGFuZCByZXRyeSBtZWNoYW5pc21zLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgcG90ZW50aWFsIGNoYWxsZW5nZXMg4oCTIHRoZSBuZWVkIHRvIGhhbmRsZSBkaWZmZXJlbnQgS1NaIHN3aXRjaCByZXZpc2lvbnMsIHZhcmlhdGlvbnMgaW4gUEhZIGNvbmZpZ3VyYXRpb25zLCBhbmQgbWF5YmUgZXZlbiBzb21lIGNsZXZlciByZWdpc3RlciBwcm9iaW5nIHRlY2huaXF1ZXMuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHNvIGxldCYjMzk7cyBzZWUgd2hhdCB0aGV5JiMzOTt2ZSBjb21lIHVwIHdpdGguIExldCYjMzk7cyBzZWUgaWYgdGhpcyBjb2RlIGlzIHdlbGwtd3JpdHRlbiwgZWZmaWNpZW50LCBhbmQgcm9idXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjkyOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyOTI4Olx0c3RhdGljIGludCBrc3pfc3dpdGNoX2RldGVjdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuMjkyOTpcdHtcbjI5MzA6XHRcdHU4IGlkMSwgaWQyLCBpZDQ7XG4yOTMxOlx0XHR1MTYgaWQxNjtcbjI5MzI6XHRcdHUzMiBpZDMyO1xuMjkzMzpcdFx0aW50IHJldDtcbjI5MzQ6XHRcbjI5MzU6XHRcdC8qIHJlYWQgY2hpcCBpZCAqL1xuMjkzNjpcdFx0cmV0ID0ga3N6X3JlYWQxNihkZXYsIFJFR19DSElQX0lEMCwgXHUwMDI2aWQxNik7XG4yOTM3Olx0XHRpZiAocmV0KVxuMjkzODpcdFx0XHRyZXR1cm4gcmV0O1xuMjkzOTpcdFxuMjk0MDpcdFx0aWQxID0gRklFTERfR0VUKFNXX0ZBTUlMWV9JRF9NLCBpZDE2KTtcbjI5NDE6XHRcdGlkMiA9IEZJRUxEX0dFVChTV19DSElQX0lEX00sIGlkMTYpO1xuMjk0MjpcdFxuMjk0MzpcdFx0c3dpdGNoIChpZDEpIHtcbjI5NDQ6XHRcdGNhc2UgS1NaODRfRkFNSUxZX0lEOlxuMjk0NTpcdFx0XHRkZXYtXHUwMDNlY2hpcF9pZCA9IEtTWjg0NjNfQ0hJUF9JRDtcbjI5NDY6XHRcdFx0YnJlYWs7XG4yOTQ3Olx0XHRjYXNlIEtTWjg3X0ZBTUlMWV9JRDpcbjI5NDg6XHRcdFx0aWYgKGlkMiA9PSBLU1o4N19DSElQX0lEXzk1KSB7XG4yOTQ5Olx0XHRcdFx0dTggdmFsO1xuMjk1MDpcdFxuMjk1MTpcdFx0XHRcdGRldi1cdTAwM2VjaGlwX2lkID0gS1NaODc5NV9DSElQX0lEO1xuMjk1MjpcdFxuMjk1MzpcdFx0XHRcdGtzel9yZWFkOChkZXYsIEtTWjhfUE9SVF9TVEFUVVNfMCwgXHUwMDI2dmFsKTtcbjI5NTQ6XHRcdFx0XHRpZiAodmFsIFx1MDAyNiBLU1o4X1BPUlRfRklCRVJfTU9ERSlcbjI5NTU6XHRcdFx0XHRcdGRldi1cdTAwM2VjaGlwX2lkID0gS1NaODc2NV9DSElQX0lEO1xuMjk1NjpcdFx0XHR9IGVsc2UgaWYgKGlkMiA9PSBLU1o4N19DSElQX0lEXzk0KSB7XG4yOTU3Olx0XHRcdFx0ZGV2LVx1MDAzZWNoaXBfaWQgPSBLU1o4Nzk0X0NISVBfSUQ7XG4yOTU4Olx0XHRcdH0gZWxzZSB7XG4yOTU5Olx0XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4yOTYwOlx0XHRcdH1cbjI5NjE6XHRcdFx0YnJlYWs7XG4yOTYyOlx0XHRjYXNlIEtTWjg4X0ZBTUlMWV9JRDpcbjI5NjM6XHRcdFx0aWYgKGlkMiA9PSBLU1o4OF9DSElQX0lEXzYzKVxuMjk2NDpcdFx0XHRcdGRldi1cdTAwM2VjaGlwX2lkID0gS1NaODhYM19DSElQX0lEO1xuMjk2NTpcdFx0XHRlbHNlXG4yOTY2Olx0XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4yOTY3Olx0XHRcdGJyZWFrO1xuMjk2ODpcdFx0Y2FzZSBLU1o4ODk1X0ZBTUlMWV9JRDpcbjI5Njk6XHRcdFx0aWYgKGlkMiA9PSBLU1o4ODk1X0NISVBfSURfOTUgfHxcbjI5NzA6XHRcdFx0ICAgIGlkMiA9PSBLU1o4ODk1X0NISVBfSURfOTVSKVxuMjk3MTpcdFx0XHRcdGRldi1cdTAwM2VjaGlwX2lkID0gS1NaODg5NV9DSElQX0lEO1xuMjk3MjpcdFx0XHRlbHNlXG4yOTczOlx0XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4yOTc0Olx0XHRcdHJldCA9IGtzel9yZWFkOChkZXYsIFJFR19LU1o4ODY0X0NISVBfSUQsIFx1MDAyNmlkNCk7XG4yOTc1Olx0XHRcdGlmIChyZXQpXG4yOTc2Olx0XHRcdFx0cmV0dXJuIHJldDtcbjI5Nzc6XHRcdFx0aWYgKGlkNCBcdTAwMjYgU1dfS1NaODg2NClcbjI5Nzg6XHRcdFx0XHRkZXYtXHUwMDNlY2hpcF9pZCA9IEtTWjg4NjRfQ0hJUF9JRDtcbjI5Nzk6XHRcdFx0YnJlYWs7XG4yOTgwOlx0XHRkZWZhdWx0OlxuMjk4MTpcdFx0XHRyZXQgPSBrc3pfcmVhZDMyKGRldiwgUkVHX0NISVBfSUQwLCBcdTAwMjZpZDMyKTtcbjI5ODI6XHRcdFx0aWYgKHJldClcbjI5ODM6XHRcdFx0XHRyZXR1cm4gcmV0O1xuMjk4NDpcdFxuMjk4NTpcdFx0XHRkZXYtXHUwMDNlY2hpcF9yZXYgPSBGSUVMRF9HRVQoU1dfUkVWX0lEX00sIGlkMzIpO1xuMjk4NjpcdFx0XHRpZDMyIFx1MDAyNj0gfjB4RkY7XG4yOTg3Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NjM4CgkJCQkJCQlvdXRwdXQ6IDExOAoJCQkJCQkJdGhvdWdodHM6IDExMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIEFzc2Vzc21lbnQ6IE1pY3JvY2hpcCBLU1ovTEFOIERTQSBTd2l0Y2ggRHJpdmVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBga3N6X3N3aXRjaF9kZXRlY3RgIHdoaWNoIHVzZXMgYHJlZ21hcGAgdG8gcmVhZCByZWdpc3RlcnMgb3ZlciBJMkMvU1BJL1NNSS4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGhhcmR3YXJlIGludGVyYWN0aW9uLiBJZiB0aGVyZSYjMzk7cyBubyBhY3R1YWwgS1NaIGhhcmR3YXJlIHByZXNlbnQsIGl0JiMzOTtsbCBlaXRoZXIgcmV0dXJuIGEgMC8weEZGIG9yIGVycm9yIG91dC4gVGhpcyBjb25maXJtcyBpdCYjMzk7cyBhIGRlZGljYXRlZCBkcml2ZXIgZm9yIE1pY3JvY2hpcCBLU1ovTEFOIGV0aGVybmV0IHN3aXRjaGVzIOKAkyBLU1o4NDYzLCBLU1o4NTYzLCBLU1o5NDc3LCBLU1o5NTY3LCBMQU45Mzd4LgoKTm93LCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgUUVNVSBlbXVsYXRlIGFueSBvZiB0aGVzZT8gTm9wZSwgUUVNVSBoYXMgcGxlbnR5IG9mIG5ldHdvcmsgZW11bGF0aW9ucywgYnV0IGl0IGRvZXNuJiMzOTt0IHRvdWNoIE1pY3JvY2hpcCBLU1ogc3dpdGNoZXMuIFNvLCB3ZSBhcmUgbm90IHJ1bm5pbmcgdGhpcyBjb2RlIG9uIFFFTVUuCgpBbHJpZ2h0LCB0aW1lIHRvIGNoZWNrIHRoZSBXb3J0aEZ1enppbmcgZ3VpZGVsaW5lcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHBhdGNoIGlzbiYjMzk7dCBmYWxsaW5nIGludG8gdGhlICYjMzQ7dW5mdXp6YWJsZSYjMzQ7IGNhdGVnb3J5LiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIGNvZGUgaXNuJiMzOTt0IHNvbWV0aGluZyB0aGF0IGNhbiBvbmx5IHJ1biBpbiBhIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnQuIFRoZSBndWlkZWxpbmVzIHNheSBpdCBpcyBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiBpdCBtb2RpZmllcyBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGVzcGVjaWFsbHkgZm9yIGhhcmR3YXJlIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlLiBUaGlzIGluY2x1ZGVzIHZlbmRvci1zcGVjaWZpYyBzd2l0Y2ggZHJpdmVycy4KCk5vdywgbGV0JiMzOTtzIGJlIGFic29sdXRlbHkgc3VyZS4gQXJlIHRoZXJlIGFueSBzb2Z0d2FyZSBtb2NrIG9yIGR1bW15IERTQSBkZXZpY2VzIEkgY2FuIHVzZT8gTm8sIERTQSAoRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSkgc3dpdGNoZXMgYXJlIGhhcmR3YXJlIHNwZWNpZmljLCBhbmQsIHNwZWNpZmljYWxseSwgdGhlIGBkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2AgY29kZSBpcyBkZXNpZ25lZCBmb3IgZW1iZWRkZWQgRXRoZXJuZXQgc3dpdGNoIGNoaXBzLCBsaWtlIHRoZSBvbmVzIEkgbWVudGlvbmVkIGJlZm9yZS4gTm8gd2F5IHRvIHJ1biBpdCB3aXRob3V0IHRoZSBwaHlzaWNhbCBBU0lDLgoKT2theSwgbGV0JiMzOTtzIHJldmlldyB0aGUgZmlsZXMgdGhhdCBhcmUgYmVpbmcgcGF0Y2hlZDogYGRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jYCwgYGRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jYCwgYGtzel9jb21tb24uY2AsIGBrc3pfY29tbW9uLmhgLCBga3N6X3B0cC5jYCwgYGtzel9wdHAuaGAsIGBrc3pfcHRwX3JlZy5oYCwgYW5kIGBsYW45Mzd4X21haW4uY2AuIFRoZSBwYXRjaCBhZGRzIFBUUCBwZXItb3V0IHN1cHBvcnQgYW5kIHBpbiBjYXBhYmlsaXRpZXMgZm9yIEtTWjg0NjMgYW5kIG90aGVyIE1pY3JvY2hpcCBzd2l0Y2hlcyBpbiB0aGUgRFNBIGRyaXZlci4KCkFsbCB0aGUgbW9kaWZpZWQgY29kZSBpcyB3aXRoaW4gYGRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvYC4gVGhpcyBpcyB1bmRlbmlhYmx5IGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBjb2RlIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgTWljcm9jaGlwIHN3aXRjaCBoYXJkd2FyZSAoS1NaL0xBTiBzZXJpZXMpIGNvbm5lY3RlZCB2aWEgU1BJL0kyQy9TTUkuIFN0YW5kYXJkIFFFTVUvR0NFIGRvZXMgTk9UIGVtdWxhdGUgdGhpcy4gQmVjYXVzZSBvZiB0aGlzLCB0aGUgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuCgpUaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgdGhhdCBgV29ydGhGdXp6aW5nYCBpcyBgZmFsc2VgLgoKVGhlIGFyZ3VtZW50cyBmb3IgYHNldC1yZXN1bHRzYCB3aWxsIGJlOgoqICAgYFdvcnRoRnV6emluZzogZmFsc2VgCiogICBgRW5hYmxlQ29uZmlnczogW11gCiogICBgRm9jdXNTeW1ib2xzOiBbXWAKKiAgIGBSZWFzb25pbmc6IFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9jaGlwIEtTWi9MQU4gc2VyaWVzIERTQSBzd2l0Y2ggZHJpdmVyIChzcGVjaWZpY2FsbHkgUFRQIHN1cHBvcnQgZm9yIEtTWjg0NjMgYW5kIG90aGVyIE1pY3JvY2hpcCBzd2l0Y2ggY2hpcHMpLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgcGh5c2ljYWwgTWljcm9jaGlwIGhhcmR3YXJlIGNvbm5lY3RlZCB2aWEgU1BJLCBJMkMsIG9yIFNNSSwgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBUaHVzLCB0aGUgbW9kaWZpZWQgY29kZSBpcyB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5gCgpMZXQmIzM5O3MgbWFrZSB0aGF0IHRvb2wgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9jaGlwIEtTWi9MQU4gc2VyaWVzIERTQSBFdGhlcm5ldCBzd2l0Y2ggZHJpdmVycyAoc3BlY2lmaWNhbGx5IGFkZGluZyBQVFAgcGVyaW9kaWMgb3V0cHV0IGFuZCBwaW4gY2FwYWJpbGl0aWVzIGZvciBLU1o4NDYzIGFuZCByZWxhdGVkIHN3aXRjaGVzKS4gVGhlc2Ugc3dpdGNoIGRyaXZlcnMgb3BlcmF0ZSBvdmVyIFNQSSwgSTJDLCBvciBTTUkgYnVzZXMgYW5kIHJlcXVpcmUgcGh5c2ljYWwgTWljcm9jaGlwIHN3aXRjaCBBU0lDcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChzdWNoIGFzIFFFTVUgb3IgR0NFKSwgbWFraW5nIHRoZXNlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9jaGlwIEtTWi9MQU4gc2VyaWVzIERTQSBFdGhlcm5ldCBzd2l0Y2ggZHJpdmVycyAoc3BlY2lmaWNhbGx5IGFkZGluZyBQVFAgcGVyaW9kaWMgb3V0cHV0IGFuZCBwaW4gY2FwYWJpbGl0aWVzIGZvciBLU1o4NDYzIGFuZCByZWxhdGVkIHN3aXRjaGVzKS4gVGhlc2Ugc3dpdGNoIGRyaXZlcnMgb3BlcmF0ZSBvdmVyIFNQSSwgSTJDLCBvciBTTUkgYnVzZXMgYW5kIHJlcXVpcmUgcGh5c2ljYWwgTWljcm9jaGlwIHN3aXRjaCBBU0lDcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChzdWNoIGFzIFFFTVUgb3IgR0NFKSwgbWFraW5nIHRoZXNlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDA6MjYuNTUxMDIwMDYzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEwNjk0NTMwODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9jaGlwIEtTWi9MQU4gc2VyaWVzIERTQSBFdGhlcm5ldCBzd2l0Y2ggZHJpdmVycyAoc3BlY2lmaWNhbGx5IGFkZGluZyBQVFAgcGVyaW9kaWMgb3V0cHV0IGFuZCBwaW4gY2FwYWJpbGl0aWVzIGZvciBLU1o4NDYzIGFuZCByZWxhdGVkIHN3aXRjaGVzKS4gVGhlc2Ugc3dpdGNoIGRyaXZlcnMgb3BlcmF0ZSBvdmVyIFNQSSwgSTJDLCBvciBTTUkgYnVzZXMgYW5kIHJlcXVpcmUgcGh5c2ljYWwgTWljcm9jaGlwIHN3aXRjaCBBU0lDcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChzdWNoIGFzIFFFTVUgb3IgR0NFKSwgbWFraW5nIHRoZXNlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MDoyNi41NTEwMjY3MzNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMjQ2MDM1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGUzN2NjMTE0MTk2MmIyNzZhYjU4MDJlZjY4MjZhZjJjMzExZDk2YTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMyAwNDo0MDoyNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jXFxuaW5kZXggOTQxYWU5ZjY2ZjcwYi4uNmIwOGJiOGZlZDViNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jXFxuQEAgLTI0NzgsNiArMjQ3OCw3IEBAIHN0YXRpYyBpbnQga3N6ODQ2M19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIFxcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdGdvdG8gZnJlZV9naXJxO1xcbiBcXG4rXFx0XFx0a3N6ODQ2M19wdHBfc2V0X2NhcHMoZHMpO1xcbiBcXHRcXHRyZXQgPSBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKGRzKTtcXG4gXFx0XFx0aWYgKHJldCkge1xcbiBcXHRcXHRcXHRkZXZfZXJyKGRldi1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jazogJWRcXFxcblxcXCIsXFxuQEAgLTI3NzUsNiArMjc3Niw3IEBAIHN0YXRpYyBpbnQga3N6OF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIFxcdH1cXG4gXFxuIFxcdGlmIChkZXYtXFx1MDAzZWluZm8tXFx1MDAzZXB0cF9jYXBhYmxlKSB7XFxuK1xcdFxcdGtzel9wdHBfc2V0X2NhcHMoZHMpO1xcbiBcXHRcXHRyZXQgPSBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKGRzKTtcXG4gXFx0XFx0aWYgKHJldCkge1xcbiBcXHRcXHRcXHRkZXZfZXJyKGRldi1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jazogJWRcXFxcblxcXCIsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmNcXG5pbmRleCAzZWU5OTU1NDVjNTc5Li43MjUyOGE1M2I2N2QyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmNcXG5AQCAtMTc4MSw2ICsxNzgxLDcgQEAgc3RhdGljIGludCBrc3o5NDc3X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGRldi1cXHUwMDNlaW5mby1cXHUwMDNlcHRwX2NhcGFibGUpIHtcXG4rXFx0XFx0a3N6X3B0cF9zZXRfY2Fwcyhkcyk7XFxuIFxcdFxcdHJldCA9IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoZHMpO1xcbiBcXHRcXHRpZiAocmV0KSB7XFxuIFxcdFxcdFxcdGRldl9lcnIoZGV2LVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrOiAlZFxcXFxuXFxcIixcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uY1xcbmluZGV4IDFhOWQ2ZjgzYTAyMzIuLjllMjM0YWQ3MWI3MjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uY1xcbkBAIC0xMTYxLDYgKzExNjEsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XFxuIFxcdFxcdC5zdXBwb3J0c19taWkgPSB7ZmFsc2UsIGZhbHNlLCB0cnVlfSxcXG4gXFx0XFx0LnN1cHBvcnRzX3JtaWkgPSB7ZmFsc2UsIGZhbHNlLCB0cnVlfSxcXG4gXFx0XFx0LmludGVybmFsX3BoeSA9IHt0cnVlLCB0cnVlLCBmYWxzZX0sXFxuK1xcdFxcdC5uX3BpbnMgPSAxMixcXG4rXFx0XFx0Lm5fcGVyX291dCA9IDEyLFxcbiBcXHR9LFxcbiBcXG4gXFx0W0tTWjg1NjNdID0ge1xcbkBAIC0xMTk0LDYgKzExOTYsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XFxuIFxcdFxcdC5wdHBfY2FwYWJsZSA9IHRydWUsXFxuIFxcdFxcdC53cl90YWJsZSA9IFxcdTAwMjZrc3o4NTYzX3JlZ2lzdGVyX3NldCxcXG4gXFx0XFx0LnJkX3RhYmxlID0gXFx1MDAyNmtzejg1NjNfcmVnaXN0ZXJfc2V0LFxcbitcXHRcXHQubl9waW5zID0gMixcXG4rXFx0XFx0Lm5fcGVyX291dCA9IDMsXFxuIFxcdH0sXFxuIFxcbiBcXHRbS1NaODc5NV0gPSB7XFxuQEAgLTE0MTQsNiArMTQxOCw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcXG4gXFx0XFx0LnNnbWlpX3BvcnQgPSA3LFxcbiBcXHRcXHQud3JfdGFibGUgPSBcXHUwMDI2a3N6OTQ3N19yZWdpc3Rlcl9zZXQsXFxuIFxcdFxcdC5yZF90YWJsZSA9IFxcdTAwMjZrc3o5NDc3X3JlZ2lzdGVyX3NldCxcXG4rXFx0XFx0Lm5fcGlucyA9IDIsXFxuK1xcdFxcdC5uX3Blcl9vdXQgPSAzLFxcbiBcXHR9LFxcbiBcXG4gXFx0W0tTWjk4OTZdID0ge1xcbkBAIC0xNTQ0LDYgKzE1NTAsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XFxuIFxcdFxcdC5pbnRlcm5hbF9waHkgPSB7dHJ1ZSwgdHJ1ZSwgZmFsc2V9LFxcbiBcXHRcXHQuZ2JpdF9jYXBhYmxlID0ge3RydWUsIHRydWUsIHRydWV9LFxcbiBcXHRcXHQucHRwX2NhcGFibGUgPSB0cnVlLFxcbitcXHRcXHQubl9waW5zID0gMixcXG4rXFx0XFx0Lm5fcGVyX291dCA9IDMsXFxuIFxcdH0sXFxuIFxcbiBcXHRbS1NaODU2N10gPSB7XFxuQEAgLTE1ODEsNiArMTU4OSw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcXG4gXFx0XFx0LmdiaXRfY2FwYWJsZVxcdD0ge2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSxcXG4gXFx0XFx0XFx0XFx0ICAgdHJ1ZSwgdHJ1ZX0sXFxuIFxcdFxcdC5wdHBfY2FwYWJsZSA9IHRydWUsXFxuK1xcdFxcdC5uX3BpbnMgPSAyLFxcbitcXHRcXHQubl9wZXJfb3V0ID0gMyxcXG4gXFx0fSxcXG4gXFxuIFxcdFtLU1o5NTY3XSA9IHtcXG5AQCAtMTYxNSw2ICsxNjI1LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xcbiBcXHRcXHRcXHRcXHQgICB0cnVlLCBmYWxzZSwgZmFsc2V9LFxcbiBcXHRcXHQuZ2JpdF9jYXBhYmxlXFx0PSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZX0sXFxuIFxcdFxcdC5wdHBfY2FwYWJsZSA9IHRydWUsXFxuK1xcdFxcdC5uX3BpbnMgPSAyLFxcbitcXHRcXHQubl9wZXJfb3V0ID0gMyxcXG4gXFx0fSxcXG4gXFxuIFxcdFtMQU45MzcwXSA9IHtcXG5AQCAtMTY0Niw2ICsxNjU4LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xcbiBcXHRcXHQuc3VwcG9ydHNfcmdtaWkgPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWV9LFxcbiBcXHRcXHQuaW50ZXJuYWxfcGh5ID0ge3RydWUsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlfSxcXG4gXFx0XFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcXG4rXFx0XFx0Lm5fcGlucyA9IDIsXFxuK1xcdFxcdC5uX3Blcl9vdXQgPSAzLFxcbiBcXHR9LFxcbiBcXG4gXFx0W0xBTjkzNzFdID0ge1xcbkBAIC0xNjc3LDYgKzE2OTEsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XFxuIFxcdFxcdC5zdXBwb3J0c19yZ21paSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZX0sXFxuIFxcdFxcdC5pbnRlcm5hbF9waHkgPSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlfSxcXG4gXFx0XFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcXG4rXFx0XFx0Lm5fcGlucyA9IDIsXFxuK1xcdFxcdC5uX3Blcl9vdXQgPSAzLFxcbiBcXHR9LFxcbiBcXG4gXFx0W0xBTjkzNzJdID0ge1xcbkBAIC0xNzEyLDYgKzE3MjgsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XFxuIFxcdFxcdC5pbnRlcm5hbF9waHlcXHQ9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLFxcbiBcXHRcXHRcXHRcXHQgICBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWV9LFxcbiBcXHRcXHQucHRwX2NhcGFibGUgPSB0cnVlLFxcbitcXHRcXHQubl9waW5zID0gMixcXG4rXFx0XFx0Lm5fcGVyX291dCA9IDMsXFxuIFxcdH0sXFxuIFxcbiBcXHRbTEFOOTM3M10gPSB7XFxuQEAgLTE3NDcsNiArMTc2NSw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcXG4gXFx0XFx0LmludGVybmFsX3BoeVxcdD0ge3RydWUsIHRydWUsIHRydWUsIGZhbHNlLFxcbiBcXHRcXHRcXHRcXHQgICBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWV9LFxcbiBcXHRcXHQucHRwX2NhcGFibGUgPSB0cnVlLFxcbitcXHRcXHQubl9waW5zID0gMixcXG4rXFx0XFx0Lm5fcGVyX291dCA9IDMsXFxuIFxcdH0sXFxuIFxcbiBcXHRbTEFOOTM3NF0gPSB7XFxuQEAgLTE3ODIsNiArMTgwMiw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcXG4gXFx0XFx0LmludGVybmFsX3BoeVxcdD0ge3RydWUsIHRydWUsIHRydWUsIHRydWUsXFxuIFxcdFxcdFxcdFxcdCAgIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZX0sXFxuIFxcdFxcdC5wdHBfY2FwYWJsZSA9IHRydWUsXFxuK1xcdFxcdC5uX3BpbnMgPSAyLFxcbitcXHRcXHQubl9wZXJfb3V0ID0gMyxcXG4gXFx0fSxcXG4gXFxuIFxcdFtMQU45NjQ2XSA9IHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaFxcbmluZGV4IGNiZTk4NDk0NTc4YzMuLjExNTViMzkzNTBjMmIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmhcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaFxcbkBAIC0xMzksNiArMTM5LDggQEAgc3RydWN0IGtzel9jaGlwX2RhdGEge1xcbiBcXHR1OCBzZ21paV9wb3J0O1xcbiBcXHRjb25zdCBzdHJ1Y3QgcmVnbWFwX2FjY2Vzc190YWJsZSAqd3JfdGFibGU7XFxuIFxcdGNvbnN0IHN0cnVjdCByZWdtYXBfYWNjZXNzX3RhYmxlICpyZF90YWJsZTtcXG4rXFx0Y29uc3QgdTggbl9waW5zO1xcbitcXHRjb25zdCB1OCBuX3Blcl9vdXQ7XFxuIH07XFxuIFxcbiBzdHJ1Y3Qga3N6X2lycSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmNcXG5pbmRleCAzOWNjNzBkNjU5MDBiLi5kMzMwMzQ4OTJhOGY2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmNcXG5AQCAtMjYsNiArMjYsNyBAQFxcbiAgKi9cXG4gI2RlZmluZSBLU1pfTUFYX0RSSUZUX0NPUlIgNjI0OTk5OVxcbiAjZGVmaW5lIEtTWl9NQVhfUFVMU0VfV0lEVEggMTI1MDAwMDAwTExcXG4rI2RlZmluZSBLU1o4NDYzX01BWF9QVUxTRV9XSURUSCA1MDAwMDBMTFxcbiBcXG4gI2RlZmluZSBLU1pfUFRQX0lOQ19OUyA0MFVMTCAgLyogSFcgY2xvY2sgaXMgaW5jcmVtZW50ZWQgZXZlcnkgNDAgbnMgKGJ5IDQwKSAqL1xcbiAjZGVmaW5lIEtTWl9QVFBfU1VCTlNfQklUUyAzMlxcbkBAIC02Myw2ICs2NCwxNyBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X2dwaW8oc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4gXFx0XFx0XFx0IExFRF9TUkNfUFRQX0dQSU9fMSB8IExFRF9TUkNfUFRQX0dQSU9fMik7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfdG91X3Jlc2V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHVuaXQpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGtzel9ybXcxNihkZXYsIEtTWjg0NjNfVE9VX1NXX1JTVCwgQklUKHVuaXQpLCBCSVQodW5pdCkpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIGtzel9ybXcxNihkZXYsIEtTWjg0NjNfVE9VX1NXX1JTVCwgQklUKHVuaXQpLCAwKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBrc3pfcHRwX3RvdV9yZXNldChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCB1bml0KVxcbiB7XFxuIFxcdHUzMiBkYXRhO1xcbkBAIC04Niw3ICs5OCw3IEBAIHN0YXRpYyBpbnQga3N6X3B0cF90b3VfcmVzZXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdClcXG4gXFx0XFx0XFx0IDApO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeSh1NjQgcHVsc2VfbnMpXFxuK3N0YXRpYyBpbnQga3N6X3B0cF90b3VfcHVsc2VfdmVyaWZ5KHU2NCBwdWxzZV9ucywgdTMyIG1hc2spXFxuIHtcXG4gXFx0dTMyIGRhdGE7XFxuIFxcbkBAIC05NCw3ICsxMDYsNyBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeSh1NjQgcHVsc2VfbnMpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0ZGF0YSA9IChwdWxzZV9ucyAvIDgpO1xcbi1cXHRpZiAoIUZJRUxEX0ZJVChUUklHX1BVTFNFX1dJRFRIX00sIGRhdGEpKVxcbitcXHRpZiAoKG1hc2sgXFx1MDAyNiBkYXRhKSAhPSBkYXRhKVxcbiBcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC0xMjAsNiArMTMyLDI4IEBAIHN0YXRpYyBpbnQga3N6X3B0cF90b3VfdGFyZ2V0X3RpbWVfc2V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGtzejg0NjNfcHRwX3RvdV9zdGFydChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCB1bml0KVxcbit7XFxuK1xcdHUxNiBkYXRhO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0ga3N6X3JtdzE2KGRldiwgS1NaODQ2M19UT1VfRU4sIEJJVCh1bml0KSwgQklUKHVuaXQpKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IGtzel9yZWFkMTYoZGV2LCBLU1o4NDYzX1RPVV9BQ1RJVkUsIFxcdTAwMjZkYXRhKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmICghKGRhdGEgXFx1MDAyNiBCSVQodW5pdCkpKSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LVxcdTAwM2VkZXYsIFxcXCIlczogVHJpZ2dlciB1bml0JWQgZXJyb3IhXFxcXG5cXFwiLCBfX2Z1bmNfXyxcXG4rXFx0XFx0XFx0dW5pdCk7XFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBrc3pfcHRwX3RvdV9zdGFydChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCB1bml0KVxcbiB7XFxuIFxcdHUzMiBkYXRhO1xcbkBAIC0xNDcsNiArMTgxLDU2IEBAIHN0YXRpYyBpbnQga3N6X3B0cF90b3Vfc3RhcnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfY29uZmlndXJlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHRcXHR1MzIgY3ljbGVfd2lkdGhfbnMsIHUzMiBwdWxzZV93aWR0aF9ucyxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IHRpbWVzcGVjNjQgY29uc3QgKnRhcmdldF90aW1lLFxcbitcXHRcXHRcXHRcXHRcXHR1OCBpbmRleClcXG4re1xcbitcXHRzdHJ1Y3QgcHRwX3Bpbl9kZXNjICpwaW4gPSBcXHUwMDI2ZGV2LVxcdTAwM2VwdHBfZGF0YS5waW5fY29uZmlnW2luZGV4XTtcXG4rXFx0dTE2IGNmZ19iYXNlID0gS1NaODQ2M19UUklHMV9DRkcgKyBLU1o4NDYzX1RSSUdOX0NGR19TSVpFICogcGluLVxcdTAwM2VjaGFuO1xcbitcXHR1MTYgZGF0YTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdC8qIEhhcmR3YXJlIGhhcyBvbmx5IDMyIGJpdCAqL1xcbitcXHRpZiAoKHRhcmdldF90aW1lLVxcdTAwM2V0dl9zZWMgXFx1MDAyNiAweGZmZmZmZmZmKSAhPSB0YXJnZXRfdGltZS1cXHUwMDNldHZfc2VjKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGRhdGEgPSBLU1o4NDYzX05PVElGWV9CSVQgfFxcbitcXHQgICAgICAgRklFTERfUFJFUChLU1o4NDYzX1BBVFRFUk5fTSwgVFJJR19QT1NfUEVSSU9EKSB8XFxuK1xcdCAgICAgICBwaW4tXFx1MDAzZWluZGV4O1xcbitcXHRyZXQgPSBrc3pfd3JpdGUxNihkZXYsIGNmZ19iYXNlICsgS1NaODQ2M19QQVRURVJOX09GRiwgZGF0YSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBrc3pfd3JpdGUzMihkZXYsIGNmZ19iYXNlICsgS1NaODQ2M19DWUNMRV9XSURUSF9PRkYsXFxuK1xcdFxcdFxcdCAgY3ljbGVfd2lkdGhfbnMpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0LyogU2V0IGN5Y2xlIGNvdW50IDAgLSBJbmZpbml0ZSAqL1xcbitcXHRyZXQgPSBrc3pfd3JpdGUxNihkZXYsIGNmZ19iYXNlICsgS1NaODQ2M19DWUNMRV9DTlRfT0ZGLCAwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIEtTWjg0NjMgdXNlcyBhIDggbnMgdW5pdCB2YWx1ZSB0byBjb21wdXRlIHRoZSBwdWxzZSB3aWR0aCAqL1xcbitcXHRkYXRhID0gKHB1bHNlX3dpZHRoX25zIC8gOCk7XFxuK1xcdHJldCA9IGtzel93cml0ZTE2KGRldiwgY2ZnX2Jhc2UgKyBLU1o4NDYzX1BVTFNFX1dJRFRIX09GRiwgZGF0YSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBrc3pfd3JpdGUzMihkZXYsIGNmZ19iYXNlICsgS1NaODQ2M19UQVJHRVRfTlNFQyxcXG4rXFx0XFx0XFx0ICB0YXJnZXRfdGltZS1cXHUwMDNldHZfbnNlYyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBrc3pfd3JpdGUzMihkZXYsIGNmZ19iYXNlICsgS1NaODQ2M19UQVJHRVRfU0VDLFxcbitcXHRcXHRcXHQgIHRhcmdldF90aW1lLVxcdTAwM2V0dl9zZWMpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQga3N6X3B0cF9jb25maWd1cmVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICB1MzIgY3ljbGVfd2lkdGhfbnMsIHUzMiBwdWxzZV93aWR0aF9ucyxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGNvbnN0ICp0YXJnZXRfdGltZSxcXG5AQCAtMTgzLDE3ICsyNjcsMTEgQEAgc3RhdGljIGludCBrc3pfcHRwX2NvbmZpZ3VyZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQga3N6X3B0cF9lbmFibGVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXFxuLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LFxcbi1cXHRcXHRcXHRcXHQgaW50IG9uKVxcbitzdGF0aWMgaW50IGtzel9wdHBfZ2V0X3BpbihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0KVxcbiB7XFxuIFxcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gXFx1MDAyNmRldi1cXHUwMDNlcHRwX2RhdGE7XFxuLVxcdHU2NCByZXFfcHVsc2Vfd2lkdGhfbnM7XFxuLVxcdHU2NCBjeWNsZV93aWR0aF9ucztcXG4tXFx0dTY0IHB1bHNlX3dpZHRoX25zO1xcbi1cXHRpbnQgcGluID0gMDtcXG4tXFx0dTMyIGRhdGEzMjtcXG4tXFx0aW50IHJldDtcXG4rXFx0aW50IHBpbjtcXG4gXFxuIFxcdGlmIChyZXF1ZXN0LVxcdTAwM2VmbGFncyBcXHUwMDI2IH5QVFBfUEVST1VUX0RVVFlfQ1lDTEUpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5AQCAtMjA2LDYgKzI4NCwxMTQgQEAgc3RhdGljIGludCBrc3pfcHRwX2VuYWJsZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcXG4gXFx0aWYgKHBpbiBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4rXFx0cmV0dXJuIHBpbjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBrc3pfcHRwX2NvbXB1dGVfcGVyb3V0X2N5Y2xlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgY29uc3QgKnJlcXVlc3QsXFxuK1xcdFxcdFxcdFxcdFxcdHU2NCAqY3ljbGVfd2lkdGhfbnMpXFxuK3tcXG4rXFx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBcXHUwMDI2ZGV2LVxcdTAwM2VwdHBfZGF0YTtcXG4rXFxuK1xcdHB0cF9kYXRhLVxcdTAwM2VwZXJvdXRfdGFyZ2V0X3RpbWVfZmlyc3QudHZfc2VjICA9IHJlcXVlc3QtXFx1MDAzZXN0YXJ0LnNlYztcXG4rXFx0cHRwX2RhdGEtXFx1MDAzZXBlcm91dF90YXJnZXRfdGltZV9maXJzdC50dl9uc2VjID0gcmVxdWVzdC1cXHUwMDNlc3RhcnQubnNlYztcXG4rXFxuK1xcdHB0cF9kYXRhLVxcdTAwM2VwZXJvdXRfcGVyaW9kLnR2X3NlYyA9IHJlcXVlc3QtXFx1MDAzZXBlcmlvZC5zZWM7XFxuK1xcdHB0cF9kYXRhLVxcdTAwM2VwZXJvdXRfcGVyaW9kLnR2X25zZWMgPSByZXF1ZXN0LVxcdTAwM2VwZXJpb2QubnNlYztcXG4rXFxuK1xcdCpjeWNsZV93aWR0aF9ucyA9IHRpbWVzcGVjNjRfdG9fbnMoXFx1MDAyNnB0cF9kYXRhLVxcdTAwM2VwZXJvdXRfcGVyaW9kKTtcXG4rXFx0aWYgKCgqY3ljbGVfd2lkdGhfbnMgXFx1MDAyNiBUUklHX0NZQ0xFX1dJRFRIX00pICE9ICpjeWNsZV93aWR0aF9ucykge1xcbitcXHRcXHQqY3ljbGVfd2lkdGhfbnMgPSAwO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB1NjQga3N6X3B0cF9jb21wdXRlX3Blcm91dF9wdWxzZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LFxcbitcXHRcXHRcXHRcXHRcXHR1NjQgbWF4X3B1bHNlX3dpZHRoKVxcbit7XFxuK1xcdHU2NCByZXFfcHVsc2Vfd2lkdGhfbnM7XFxuK1xcbitcXHRpZiAocmVxdWVzdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQVFBfUEVST1VUX0RVVFlfQ1lDTEUpXFxuK1xcdFxcdHJldHVybiByZXF1ZXN0LVxcdTAwM2Vvbi5zZWMgKiBOU0VDX1BFUl9TRUMgK1xcdHJlcXVlc3QtXFx1MDAzZW9uLm5zZWM7XFxuK1xcbitcXHQvKiBVc2UgYSBkdXR5IGN5Y2xlIG9mIDUwJS4gTWF4aW11bSBwdWxzZSB3aWR0aCBzdXBwb3J0ZWQgYnkgdGhlXFxuK1xcdCAqIGhhcmR3YXJlIGlzIGEgbGl0dGxlIGJpdCBtb3JlIHRoYW4gMTI1IG1zLlxcbitcXHQgKi9cXG4rXFx0cmVxX3B1bHNlX3dpZHRoX25zID0gKHJlcXVlc3QtXFx1MDAzZXBlcmlvZC5zZWMgKiBOU0VDX1BFUl9TRUMgK1xcbitcXHRcXHRcXHQgICAgICByZXF1ZXN0LVxcdTAwM2VwZXJpb2QubnNlYykgLyAyO1xcbitcXHRyZXR1cm4gbWluX3QodTY0LCByZXFfcHVsc2Vfd2lkdGhfbnMsIG1heF9wdWxzZV93aWR0aCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfZW5hYmxlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgY29uc3QgKnJlcXVlc3QsXFxuK1xcdFxcdFxcdFxcdCAgICAgaW50IG9uKVxcbit7XFxuK1xcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gXFx1MDAyNmRldi1cXHUwMDNlcHRwX2RhdGE7XFxuK1xcdHU2NCBjeWNsZV93aWR0aF9ucztcXG4rXFx0dTY0IHB1bHNlX3dpZHRoX25zO1xcbitcXHRpbnQgcGluO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cGluID0ga3N6X3B0cF9nZXRfcGluKGRldiwgcmVxdWVzdCk7XFxuK1xcdGlmIChwaW4gXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcGluO1xcbitcXG4rXFx0cmV0ID0ga3N6ODQ2M19wdHBfdG91X3Jlc2V0KGRldiwgcmVxdWVzdC1cXHUwMDNlaW5kZXgpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKCFvbikge1xcbitcXHRcXHRwdHBfZGF0YS1cXHUwMDNldG91X21vZGUgPSBLU1pfUFRQX1RPVV9JRExFO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXHRyZXQgPSBrc3pfcHRwX2NvbXB1dGVfcGVyb3V0X2N5Y2xlKGRldiwgcmVxdWVzdCwgXFx1MDAyNmN5Y2xlX3dpZHRoX25zKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cHVsc2Vfd2lkdGhfbnMgPSBrc3pfcHRwX2NvbXB1dGVfcGVyb3V0X3B1bHNlKGRldiwgcmVxdWVzdCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgS1NaODQ2M19NQVhfUFVMU0VfV0lEVEgpO1xcbitcXG4rXFx0cmV0ID0ga3N6X3B0cF90b3VfcHVsc2VfdmVyaWZ5KHB1bHNlX3dpZHRoX25zLFxcbitcXHRcXHRcXHRcXHQgICAgICAgS1NaODQ2M19UUklHX1BVTFNFX1dJRFRIX00pO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0ga3N6ODQ2M19wdHBfY29uZmlndXJlX3Blcm91dChkZXYsIGN5Y2xlX3dpZHRoX25zLCBwdWxzZV93aWR0aF9ucyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNnB0cF9kYXRhLVxcdTAwM2VwZXJvdXRfdGFyZ2V0X3RpbWVfZmlyc3QsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHBpbik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBrc3pfcHRwX3RvdV9ncGlvKGRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBrc3o4NDYzX3B0cF90b3Vfc3RhcnQoZGV2LCByZXF1ZXN0LVxcdTAwM2VpbmRleCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRwdHBfZGF0YS1cXHUwMDNldG91X21vZGUgPSBLU1pfUFRQX1RPVV9QRVJPVVQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBrc3pfcHRwX2VuYWJsZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgY29uc3QgKnJlcXVlc3QsXFxuK1xcdFxcdFxcdFxcdCBpbnQgb24pXFxuK3tcXG4rXFx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBcXHUwMDI2ZGV2LVxcdTAwM2VwdHBfZGF0YTtcXG4rXFx0dTY0IGN5Y2xlX3dpZHRoX25zO1xcbitcXHR1NjQgcHVsc2Vfd2lkdGhfbnM7XFxuK1xcdGludCBwaW4gPSAwO1xcbitcXHR1MzIgZGF0YTMyO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cGluID0ga3N6X3B0cF9nZXRfcGluKGRldiwgcmVxdWVzdCk7XFxuK1xcdGlmIChwaW4gXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcGluO1xcbitcXG4gXFx0ZGF0YTMyID0gRklFTERfUFJFUChQVFBfR1BJT19JTkRFWCwgcGluKSB8XFxuIFxcdFxcdCBGSUVMRF9QUkVQKFBUUF9UT1VfSU5ERVgsIHJlcXVlc3QtXFx1MDAzZWluZGV4KTtcXG4gXFx0cmV0ID0ga3N6X3JtdzMyKGRldiwgUkVHX1BUUF9VTklUX0lOREVYX180LFxcbkBAIC0yMjEsMzEgKzQwNywxMyBAQCBzdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbiBcXHRcXHRwdHBfZGF0YS1cXHUwMDNldG91X21vZGUgPSBLU1pfUFRQX1RPVV9JRExFO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbitcXHRyZXQgPSBrc3pfcHRwX2NvbXB1dGVfcGVyb3V0X2N5Y2xlKGRldiwgcmVxdWVzdCwgXFx1MDAyNmN5Y2xlX3dpZHRoX25zKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cHVsc2Vfd2lkdGhfbnMgPSBrc3pfcHRwX2NvbXB1dGVfcGVyb3V0X3B1bHNlKGRldiwgcmVxdWVzdCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgS1NaX01BWF9QVUxTRV9XSURUSCk7XFxuIFxcbi1cXHRwdHBfZGF0YS1cXHUwMDNlcGVyb3V0X3RhcmdldF90aW1lX2ZpcnN0LnR2X3NlYyAgPSByZXF1ZXN0LVxcdTAwM2VzdGFydC5zZWM7XFxuLVxcdHB0cF9kYXRhLVxcdTAwM2VwZXJvdXRfdGFyZ2V0X3RpbWVfZmlyc3QudHZfbnNlYyA9IHJlcXVlc3QtXFx1MDAzZXN0YXJ0Lm5zZWM7XFxuLVxcbi1cXHRwdHBfZGF0YS1cXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9zZWMgPSByZXF1ZXN0LVxcdTAwM2VwZXJpb2Quc2VjO1xcbi1cXHRwdHBfZGF0YS1cXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9uc2VjID0gcmVxdWVzdC1cXHUwMDNlcGVyaW9kLm5zZWM7XFxuLVxcbi1cXHRjeWNsZV93aWR0aF9ucyA9IHRpbWVzcGVjNjRfdG9fbnMoXFx1MDAyNnB0cF9kYXRhLVxcdTAwM2VwZXJvdXRfcGVyaW9kKTtcXG4tXFx0aWYgKChjeWNsZV93aWR0aF9ucyBcXHUwMDI2IFRSSUdfQ1lDTEVfV0lEVEhfTSkgIT0gY3ljbGVfd2lkdGhfbnMpXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXG4tXFx0aWYgKHJlcXVlc3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUFRQX1BFUk9VVF9EVVRZX0NZQ0xFKSB7XFxuLVxcdFxcdHB1bHNlX3dpZHRoX25zID0gcmVxdWVzdC1cXHUwMDNlb24uc2VjICogTlNFQ19QRVJfU0VDICtcXG4tXFx0XFx0XFx0cmVxdWVzdC1cXHUwMDNlb24ubnNlYztcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0LyogVXNlIGEgZHV0eSBjeWNsZSBvZiA1MCUuIE1heGltdW0gcHVsc2Ugd2lkdGggc3VwcG9ydGVkIGJ5IHRoZVxcbi1cXHRcXHQgKiBoYXJkd2FyZSBpcyBhIGxpdHRsZSBiaXQgbW9yZSB0aGFuIDEyNSBtcy5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdHJlcV9wdWxzZV93aWR0aF9ucyA9IChyZXF1ZXN0LVxcdTAwM2VwZXJpb2Quc2VjICogTlNFQ19QRVJfU0VDICtcXG4tXFx0XFx0XFx0XFx0ICAgICAgcmVxdWVzdC1cXHUwMDNlcGVyaW9kLm5zZWMpIC8gMjtcXG4tXFx0XFx0cHVsc2Vfd2lkdGhfbnMgPSBtaW5fdCh1NjQsIHJlcV9wdWxzZV93aWR0aF9ucyxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIEtTWl9NQVhfUFVMU0VfV0lEVEgpO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXQgPSBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkocHVsc2Vfd2lkdGhfbnMpO1xcbitcXHRyZXQgPSBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkocHVsc2Vfd2lkdGhfbnMsIFRSSUdfUFVMU0VfV0lEVEhfTSk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbkBAIC03NTYsMTEgKzkyNCwxMSBAQCBzdGF0aWMgaW50IGtzel9wdHBfZ2V0dGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGtzel9wdHBfcmVzdGFydF9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4rc3RhdGljIGludCBrc3pfcHRwX3ByZXBhcmVfcmVzdGFydF9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0ICpyZXF1ZXN0KVxcbiB7XFxuIFxcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gXFx1MDAyNmRldi1cXHUwMDNlcHRwX2RhdGE7XFxuIFxcdHM2NCBub3dfbnMsIGZpcnN0X25zLCBwZXJpb2RfbnMsIG5leHRfbnM7XFxuLVxcdHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgcmVxdWVzdDtcXG4gXFx0c3RydWN0IHRpbWVzcGVjNjQgbmV4dDtcXG4gXFx0c3RydWN0IHRpbWVzcGVjNjQgbm93O1xcbiBcXHR1bnNpZ25lZCBpbnQgY291bnQ7XFxuQEAgLTc5MSw0MCArOTU5LDExMSBAQCBzdGF0aWMgaW50IGtzel9wdHBfcmVzdGFydF9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4gXFxuIFxcdC8qIFJlc3RhcnQgcGVyaW9kaWMgb3V0cHV0IHNpZ25hbCAqL1xcbiBcXHRuZXh0ID0gbnNfdG9fdGltZXNwZWM2NChuZXh0X25zKTtcXG4tXFx0cmVxdWVzdC5zdGFydC5zZWMgID0gbmV4dC50dl9zZWM7XFxuLVxcdHJlcXVlc3Quc3RhcnQubnNlYyA9IG5leHQudHZfbnNlYztcXG4tXFx0cmVxdWVzdC5wZXJpb2Quc2VjICA9IHB0cF9kYXRhLVxcdTAwM2VwZXJvdXRfcGVyaW9kLnR2X3NlYztcXG4tXFx0cmVxdWVzdC5wZXJpb2QubnNlYyA9IHB0cF9kYXRhLVxcdTAwM2VwZXJvdXRfcGVyaW9kLnR2X25zZWM7XFxuLVxcdHJlcXVlc3QuaW5kZXggPSAwO1xcbi1cXHRyZXF1ZXN0LmZsYWdzID0gMDtcXG4rXFx0cmVxdWVzdC1cXHUwMDNlc3RhcnQuc2VjICA9IG5leHQudHZfc2VjO1xcbitcXHRyZXF1ZXN0LVxcdTAwM2VzdGFydC5uc2VjID0gbmV4dC50dl9uc2VjO1xcbitcXHRyZXF1ZXN0LVxcdTAwM2VwZXJpb2Quc2VjICA9IHB0cF9kYXRhLVxcdTAwM2VwZXJvdXRfcGVyaW9kLnR2X3NlYztcXG4rXFx0cmVxdWVzdC1cXHUwMDNlcGVyaW9kLm5zZWMgPSBwdHBfZGF0YS1cXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9uc2VjO1xcbitcXHRyZXF1ZXN0LVxcdTAwM2VpbmRleCA9IDA7XFxuK1xcdHJlcXVlc3QtXFx1MDAzZWZsYWdzID0gMDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGtzel9wdHBfcmVzdGFydF9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IHJlcXVlc3Q7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBrc3pfcHRwX3ByZXBhcmVfcmVzdGFydF9wZXJvdXQoZGV2LCBcXHUwMDI2cmVxdWVzdCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRyZXR1cm4ga3N6X3B0cF9lbmFibGVfcGVyb3V0KGRldiwgXFx1MDAyNnJlcXVlc3QsIDEpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGtzel9wdHBfc2V0dGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcXG4tXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxcbitzdGF0aWMgaW50IGtzejg0NjNfcHRwX3Jlc3RhcnRfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuIHtcXG4tXFx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XFxuLVxcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTtcXG4tXFx0Y29uc3QgdTE2ICpyZWdzID0gZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VyZWdzO1xcbitcXHRzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IHJlcXVlc3Q7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlbG9jayk7XFxuK1xcdHJldCA9IGtzel9wdHBfcHJlcGFyZV9yZXN0YXJ0X3Blcm91dChkZXYsIFxcdTAwMjZyZXF1ZXN0KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBrc3o4NDYzX3B0cF9lbmFibGVfcGVyb3V0KGRldiwgXFx1MDAyNnJlcXVlc3QsIDEpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9fa3N6X3B0cF9zZXR0aW1lKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxcbit7XFxuK1xcdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cXHUwMDNlaW5mby1cXHUwMDNlcmVncztcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdC8qIFdyaXRlIHRvIHNoYWRvdyByZWdpc3RlcnMgYW5kIExvYWQgUFRQIGNsb2NrICovXFxuIFxcdHJldCA9IGtzel93cml0ZTE2KGRldiwgcmVnc1tQVFBfUlRDX1NVQl9OQU5PU0VDXSwgUFRQX1JUQ18wTlMpO1xcbiBcXHRpZiAocmV0KVxcbi1cXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdHJldCA9IGtzel93cml0ZTMyKGRldiwgcmVnc1tQVFBfUlRDX05BTk9TRUNdLCB0cy1cXHUwMDNldHZfbnNlYyk7XFxuIFxcdGlmIChyZXQpXFxuLVxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfU0VDXSwgdHMtXFx1MDAzZXR2X3NlYyk7XFxuIFxcdGlmIChyZXQpXFxuLVxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0cmV0ID0ga3N6X3JtdzE2KGRldiwgcmVnc1tQVFBfQ0xLX0NUUkxdLCBQVFBfTE9BRF9USU1FLCBQVFBfTE9BRF9USU1FKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGtzejg0NjNfcHRwX3NldHRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXFxuK1xcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXFxuK3tcXG4rXFx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XFxuK1xcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnB0cF9kYXRhLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldCA9IF9fa3N6X3B0cF9zZXR0aW1lKGRldiwgdHMpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIHVubG9jaztcXG4rXFxuK1xcdHN3aXRjaCAocHRwX2RhdGEtXFx1MDAzZXRvdV9tb2RlKSB7XFxuK1xcdGNhc2UgS1NaX1BUUF9UT1VfSURMRTpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRjYXNlIEtTWl9QVFBfVE9VX1BFUk9VVDpcXG4rXFx0XFx0cmV0ID0ga3N6ODQ2M19wdHBfcmVzdGFydF9wZXJvdXQoZGV2KTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlY2xvY2tfbG9jayk7XFxuK1xcdHB0cF9kYXRhLVxcdTAwM2VjbG9ja190aW1lID0gKnRzO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cHRwX2RhdGEtXFx1MDAzZWNsb2NrX2xvY2spO1xcbitcXG4rdW5sb2NrOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnB0cF9kYXRhLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQga3N6X3B0cF9zZXR0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxcbitcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXFxuK3tcXG4rXFx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XFxuK1xcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnB0cF9kYXRhLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldCA9IF9fa3N6X3B0cF9zZXR0aW1lKGRldiwgdHMpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIHVubG9jaztcXG4gXFxuQEAgLTg5MCwxOCArMTEyOSwxMyBAQCBzdGF0aWMgaW50IGtzel9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgbG9uZyBzY2FsZWRfcHBtKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGtzel9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKVxcbitzdGF0aWMgaW50IF9fa3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHM2NCBkZWx0YSlcXG4ge1xcbi1cXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTtcXG4tXFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IHB0cF9kYXRhX3RvX2tzel9kZXYocHRwX2RhdGEpO1xcbi1cXHRzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YTY0ID0gbnNfdG9fdGltZXNwZWM2NChkZWx0YSk7XFxuIFxcdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cXHUwMDNlaW5mby1cXHUwMDNlcmVncztcXG4gXFx0czMyIHNlYywgbnNlYztcXG4gXFx0dTE2IGRhdGExNjtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNnB0cF9kYXRhLVxcdTAwM2Vsb2NrKTtcXG4tXFxuIFxcdC8qIGRvIG5vdCB1c2UgbnNfdG9fdGltZXNwZWM2NCgpLFxcbiBcXHQgKiBib3RoIHNlYyBhbmQgbnNlYyBhcmUgc3VidHJhY3RlZCBieSBod1xcbiBcXHQgKi9cXG5AQCAtOTA5LDE1ICsxMTQzLDE1IEBAIHN0YXRpYyBpbnQga3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpXFxuIFxcbiBcXHRyZXQgPSBrc3pfd3JpdGUzMihkZXYsIHJlZ3NbUFRQX1JUQ19OQU5PU0VDXSwgYWJzKG5zZWMpKTtcXG4gXFx0aWYgKHJldClcXG4tXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRyZXQgPSBrc3pfd3JpdGUzMihkZXYsIHJlZ3NbUFRQX1JUQ19TRUNdLCBhYnMoc2VjKSk7XFxuIFxcdGlmIChyZXQpXFxuLVxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0cmV0ID0ga3N6X3JlYWQxNihkZXYsIHJlZ3NbUFRQX0NMS19DVFJMXSwgXFx1MDAyNmRhdGExNik7XFxuIFxcdGlmIChyZXQpXFxuLVxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0ZGF0YTE2IHw9IFBUUF9TVEVQX0FESjtcXG4gXFxuQEAgLTkyOCw2ICsxMTYyLDU2IEBAIHN0YXRpYyBpbnQga3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpXFxuIFxcdFxcdGRhdGExNiB8PSBQVFBfU1RFUF9ESVI7XFxuIFxcbiBcXHRyZXQgPSBrc3pfd3JpdGUxNihkZXYsIHJlZ3NbUFRQX0NMS19DVFJMXSwgZGF0YTE2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGtzejg0NjNfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHM2NCBkZWx0YSlcXG4re1xcbitcXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTtcXG4rXFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IHB0cF9kYXRhX3RvX2tzel9kZXYocHRwX2RhdGEpO1xcbitcXHRzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YTY0ID0gbnNfdG9fdGltZXNwZWM2NChkZWx0YSk7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRyZXQgPSBfX2tzel9wdHBfYWRqdGltZShkZXYsIGRlbHRhKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcbitcXHRzd2l0Y2ggKHB0cF9kYXRhLVxcdTAwM2V0b3VfbW9kZSkge1xcbitcXHRjYXNlIEtTWl9QVFBfVE9VX0lETEU6XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0Y2FzZSBLU1pfUFRQX1RPVV9QRVJPVVQ6XFxuK1xcdFxcdHJldCA9IGtzejg0NjNfcHRwX3Jlc3RhcnRfcGVyb3V0KGRldik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2cHRwX2RhdGEtXFx1MDAzZWNsb2NrX2xvY2spO1xcbitcXHRwdHBfZGF0YS1cXHUwMDNlY2xvY2tfdGltZSA9IHRpbWVzcGVjNjRfYWRkKHB0cF9kYXRhLVxcdTAwM2VjbG9ja190aW1lLCBkZWx0YTY0KTtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnB0cF9kYXRhLVxcdTAwM2VjbG9ja19sb2NrKTtcXG4rXFxuK3VubG9jazpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlbG9jayk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQga3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpXFxuK3tcXG4rXFx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XFxuK1xcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTtcXG4rXFx0c3RydWN0IHRpbWVzcGVjNjQgZGVsdGE2NCA9IG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHRwX2RhdGEtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0ID0gX19rc3pfcHRwX2FkanRpbWUoZGV2LCBkZWx0YSk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gdW5sb2NrO1xcbiBcXG5AQCAtOTUyLDYgKzEyMzYsMjYgQEAgc3RhdGljIGludCBrc3pfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHM2NCBkZWx0YSlcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBrc3o4NDYzX3B0cF9lbmFibGUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcmVxLCBpbnQgb24pXFxuK3tcXG4rXFx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XFxuK1xcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHN3aXRjaCAocmVxLVxcdTAwM2V0eXBlKSB7XFxuK1xcdGNhc2UgUFRQX0NMS19SRVFfUEVST1VUOlxcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdHJldCA9IGtzejg0NjNfcHRwX2VuYWJsZV9wZXJvdXQoZGV2LCBcXHUwMDI2cmVxLVxcdTAwM2VwZXJvdXQsIG9uKTtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQga3N6X3B0cF9lbmFibGUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXFxuIFxcdFxcdFxcdCAgc3RydWN0IHB0cF9jbG9ja19yZXF1ZXN0ICpyZXEsIGludCBvbilcXG4ge1xcbkBAIC0xMDI4LDE3ICsxMzMyLDMzIEBAIHN0YXRpYyBpbnQga3N6X3B0cF9zdGFydF9jbG9jayhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4taW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbit2b2lkIGtzejg0NjNfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4re1xcbitcXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXFx1MDAzZXByaXY7XFxuK1xcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhO1xcbitcXG4rXFx0cHRwX2RhdGEgPSBcXHUwMDI2ZGV2LVxcdTAwM2VwdHBfZGF0YTtcXG4rXFxuK1xcdHB0cF9kYXRhLVxcdTAwM2VjYXBzLm93bmVyXFx0XFx0PSBUSElTX01PRFVMRTtcXG4rXFx0c25wcmludGYocHRwX2RhdGEtXFx1MDAzZWNhcHMubmFtZSwgMTYsIFxcXCJNaWNyb2NoaXAgQ2xvY2tcXFwiKTtcXG4rXFx0cHRwX2RhdGEtXFx1MDAzZWNhcHMubWF4X2FkalxcdFxcdD0gS1NaX01BWF9EUklGVF9DT1JSO1xcbitcXHRwdHBfZGF0YS1cXHUwMDNlY2Fwcy5nZXR0aW1lNjRcXHQ9IGtzel9wdHBfZ2V0dGltZTtcXG4rXFx0cHRwX2RhdGEtXFx1MDAzZWNhcHMuc2V0dGltZTY0XFx0PSBrc3o4NDYzX3B0cF9zZXR0aW1lO1xcbitcXHRwdHBfZGF0YS1cXHUwMDNlY2Fwcy5hZGpmaW5lXFx0XFx0PSBrc3pfcHRwX2FkamZpbmU7XFxuK1xcdHB0cF9kYXRhLVxcdTAwM2VjYXBzLmFkanRpbWVcXHRcXHQ9IGtzejg0NjNfcHRwX2FkanRpbWU7XFxuK1xcdHB0cF9kYXRhLVxcdTAwM2VjYXBzLmRvX2F1eF93b3JrXFx0PSBrc3pfcHRwX2RvX2F1eF93b3JrO1xcbitcXHRwdHBfZGF0YS1cXHUwMDNlY2Fwcy5lbmFibGVcXHRcXHQ9IGtzejg0NjNfcHRwX2VuYWJsZTtcXG4rXFx0cHRwX2RhdGEtXFx1MDAzZWNhcHMudmVyaWZ5XFx0XFx0PSBrc3pfcHRwX3ZlcmlmeV9waW47XFxuK1xcdHB0cF9kYXRhLVxcdTAwM2VjYXBzLm5fcGluc1xcdFxcdD0gZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VuX3BpbnM7XFxuK1xcdHB0cF9kYXRhLVxcdTAwM2VjYXBzLm5fcGVyX291dFxcdD0gZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VuX3Blcl9vdXQ7XFxuK31cXG4rXFxuK3ZvaWQga3N6X3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIHtcXG4gXFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVxcdTAwM2Vwcml2O1xcbi1cXHRjb25zdCB1MTYgKnJlZ3MgPSBkZXYtXFx1MDAzZWluZm8tXFx1MDAzZXJlZ3M7XFxuIFxcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhO1xcbi1cXHRpbnQgcmV0O1xcbi1cXHR1OCBpO1xcbiBcXG4gXFx0cHRwX2RhdGEgPSBcXHUwMDI2ZGV2LVxcdTAwM2VwdHBfZGF0YTtcXG4tXFx0bXV0ZXhfaW5pdChcXHUwMDI2cHRwX2RhdGEtXFx1MDAzZWxvY2spO1xcbi1cXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2cHRwX2RhdGEtXFx1MDAzZWNsb2NrX2xvY2spO1xcbiBcXG4gXFx0cHRwX2RhdGEtXFx1MDAzZWNhcHMub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFO1xcbiBcXHRzbnByaW50ZihwdHBfZGF0YS1cXHUwMDNlY2Fwcy5uYW1lLCAxNiwgXFxcIk1pY3JvY2hpcCBDbG9ja1xcXCIpO1xcbkBAIC0xMDUwLDE0ICsxMzcwLDI3IEBAIGludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFx0cHRwX2RhdGEtXFx1MDAzZWNhcHMuZG9fYXV4X3dvcmtcXHQ9IGtzel9wdHBfZG9fYXV4X3dvcms7XFxuIFxcdHB0cF9kYXRhLVxcdTAwM2VjYXBzLmVuYWJsZVxcdFxcdD0ga3N6X3B0cF9lbmFibGU7XFxuIFxcdHB0cF9kYXRhLVxcdTAwM2VjYXBzLnZlcmlmeVxcdFxcdD0ga3N6X3B0cF92ZXJpZnlfcGluO1xcbi1cXHRwdHBfZGF0YS1cXHUwMDNlY2Fwcy5uX3BpbnNcXHRcXHQ9IEtTWl9QVFBfTl9HUElPO1xcbi1cXHRwdHBfZGF0YS1cXHUwMDNlY2Fwcy5uX3Blcl9vdXRcXHQ9IDM7XFxuK1xcdHB0cF9kYXRhLVxcdTAwM2VjYXBzLm5fcGluc1xcdFxcdD0gZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VuX3BpbnM7XFxuK1xcdHB0cF9kYXRhLVxcdTAwM2VjYXBzLm5fcGVyX291dFxcdD0gZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VuX3Blcl9vdXQ7XFxuK31cXG4rXFxuK2ludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4re1xcbitcXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXFx1MDAzZXByaXY7XFxuK1xcdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cXHUwMDNlaW5mby1cXHUwMDNlcmVncztcXG4rXFx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGE7XFxuK1xcdGludCByZXQ7XFxuK1xcdHU4IGk7XFxuK1xcbitcXHRwdHBfZGF0YSA9IFxcdTAwMjZkZXYtXFx1MDAzZXB0cF9kYXRhO1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlbG9jayk7XFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlY2xvY2tfbG9jayk7XFxuIFxcbiBcXHRyZXQgPSBrc3pfcHRwX3N0YXJ0X2Nsb2NrKGRldik7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgS1NaX1BUUF9OX0dQSU87IGkrKykge1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VuX3BpbnM7IGkrKykge1xcbiBcXHRcXHRzdHJ1Y3QgcHRwX3Bpbl9kZXNjICpwdHBfcGluID0gXFx1MDAyNnB0cF9kYXRhLVxcdTAwM2VwaW5fY29uZmlnW2ldO1xcbiBcXG4gXFx0XFx0c25wcmludGYocHRwX3Bpbi1cXHUwMDNlbmFtZSxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaFxcbmluZGV4IDcwNjdlYzliZDFlNmYuLjkyNTg5Y2YzNzNhYzIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmhcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaFxcbkBAIC0xMiw3ICsxMiw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXFx1MDAzZVxcbiBcXG4tI2RlZmluZSBLU1pfUFRQX05fR1BJT1xcdFxcdDJcXG4rI2RlZmluZSBLU1pfUFRQX05fR1BJT1xcdFxcdDEyXFxuIFxcbiBlbnVtIGtzel9wdHBfdG91X21vZGUge1xcbiBcXHRLU1pfUFRQX1RPVV9JRExFLFxcbkBAIC0zMyw2ICszMyw4IEBAIHN0cnVjdCBrc3pfcHRwX2RhdGEge1xcbiBcXHRzdHJ1Y3QgdGltZXNwZWM2NCBwZXJvdXRfcGVyaW9kO1xcbiB9O1xcbiBcXG4rdm9pZCBrc3pfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XFxuK3ZvaWQga3N6ODQ2M19wdHBfc2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcXG4gaW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcXG4gXFxuIHZvaWQga3N6X3B0cF9jbG9ja191bnJlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XFxuQEAgLTY1LDYgKzY3LDcgQEAgc3RydWN0IGtzel9wdHBfZGF0YSB7XFxuIFxcdHN0cnVjdCBtdXRleCBsb2NrO1xcbiB9O1xcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIGtzel9wdHBfc2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKSB7IH1cXG4gc3RhdGljIGlubGluZSBpbnQga3N6X3B0cF9jbG9ja19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cF9yZWcuaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cF9yZWcuaFxcbmluZGV4IDY1ZWE4NTc3YWY3NTUuLjE2ZjExN2ZhNWQ0OWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwX3JlZy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwX3JlZy5oXFxuQEAgLTUxLDYgKzUxLDIyIEBAXFxuIFxcbiAjZGVmaW5lIFJFR19QVFBfVU5JVF9JTkRFWF9fNFxcdFxcdDB4MDUyMFxcbiBcXG4rI2RlZmluZSBLU1o4NDYzX1RPVV9BQ1RJVkVcXHRcXHQweDIwMlxcbisjZGVmaW5lIEtTWjg0NjNfVE9VX0VOXFx0XFx0XFx0MHgyMDZcXG4rI2RlZmluZSBLU1o4NDYzX1RPVV9TV19SU1RcXHRcXHQweDIwOFxcbitcXG4rI2RlZmluZSBLU1o4NDYzX1RSSUdOX0NGR19TSVpFXFx0XFx0MHgyMFxcbisjZGVmaW5lIEtTWjg0NjNfVFJJRzFfQ0ZHXFx0XFx0MHgyMjBcXG4rI2RlZmluZSBLU1o4NDYzX1RBUkdFVF9OU0VDXFx0XFx0MHgwMDBcXG4rI2RlZmluZSBLU1o4NDYzX1RBUkdFVF9TRUNcXHRcXHQweDAwNFxcbisjZGVmaW5lIEtTWjg0NjNfUEFUVEVSTl9PRkZcXHRcXHQweDAwOFxcbisjZGVmaW5lIEtTWjg0NjNfTk9USUZZX0JJVFxcdFxcdEJJVCg4KVxcbisjZGVmaW5lIEtTWjg0NjNfUEFUVEVSTl9NXFx0XFx0R0VOTUFTSyg2LCA0KVxcbisjZGVmaW5lIEtTWjg0NjNfUFVMU0VfV0lEVEhfT0ZGXFx0XFx0MHgwMEFcXG4rI2RlZmluZSBLU1o4NDYzX1RSSUdfUFVMU0VfV0lEVEhfTVxcdEdFTk1BU0soMTUsIDApXFxuKyNkZWZpbmUgS1NaODQ2M19DWUNMRV9XSURUSF9PRkZcXHRcXHQweDAwQ1xcbisjZGVmaW5lIEtTWjg0NjNfQ1lDTEVfQ05UX09GRlxcdFxcdDB4MDEwXFxuK1xcbiAjZGVmaW5lIFBUUF9HUElPX0lOREVYXFx0XFx0XFx0R0VOTUFTSygxOSwgMTYpXFxuICNkZWZpbmUgUFRQX1RTSV9JTkRFWFxcdFxcdFxcdEJJVCg4KVxcbiAjZGVmaW5lIFBUUF9UT1VfSU5ERVhcXHRcXHRcXHRHRU5NQVNLKDEsIDApXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jXFxuaW5kZXggODZjZTNhODY3MDVmOS4uM2EyMDkxMjJmYzdkYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uY1xcbkBAIC04NjcsNiArODY3LDcgQEAgc3RhdGljIGludCBsYW45Mzd4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHRrc3pfcHRwX3NldF9jYXBzKGRzKTtcXG4gXFx0cmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7XFxuIFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0ZGV2X2VycihkZXYtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2s6ICVkXFxcXG5cXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MDoyNy4xNTQ0MDcyNjdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQwNDY2MDQ3OTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9jaGlwIEtTWi9MQU4gc2VyaWVzIERTQSBFdGhlcm5ldCBzd2l0Y2ggZHJpdmVycyAoc3BlY2lmaWNhbGx5IGFkZGluZyBQVFAgcGVyaW9kaWMgb3V0cHV0IGFuZCBwaW4gY2FwYWJpbGl0aWVzIGZvciBLU1o4NDYzIGFuZCByZWxhdGVkIHN3aXRjaGVzKS4gVGhlc2Ugc3dpdGNoIGRyaXZlcnMgb3BlcmF0ZSBvdmVyIFNQSSwgSTJDLCBvciBTTUkgYnVzZXMgYW5kIHJlcXVpcmUgcGh5c2ljYWwgTWljcm9jaGlwIHN3aXRjaCBBU0lDcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChzdWNoIGFzIFFFTVUgb3IgR0NFKSwgbWFraW5nIHRoZXNlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlMzdjYzExNDE5NjJiMjc2YWI1ODAyZWY2ODI2YWYyYzMxMWQ5NmE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwNDo0MDoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmNcbmluZGV4IDk0MWFlOWY2NmY3MGIuLjZiMDhiYjhmZWQ1YjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguY1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmNcbkBAIC0yNDc4LDYgKzI0NzgsNyBAQCBzdGF0aWMgaW50IGtzejg0NjNfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0XHRpZiAocmV0KVxuIFx0XHRcdGdvdG8gZnJlZV9naXJxO1xuIFxuK1x0XHRrc3o4NDYzX3B0cF9zZXRfY2Fwcyhkcyk7XG4gXHRcdHJldCA9IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoZHMpO1xuIFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2s6ICVkXFxuXCIsXG5AQCAtMjc3NSw2ICsyNzc2LDcgQEAgc3RhdGljIGludCBrc3o4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdH1cbiBcbiBcdGlmIChkZXYtXHUwMDNlaW5mby1cdTAwM2VwdHBfY2FwYWJsZSkge1xuK1x0XHRrc3pfcHRwX3NldF9jYXBzKGRzKTtcbiBcdFx0cmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7XG4gXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jazogJWRcXG5cIixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jXG5pbmRleCAzZWU5OTU1NDVjNTc5Li43MjUyOGE1M2I2N2QyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jXG5AQCAtMTc4MSw2ICsxNzgxLDcgQEAgc3RhdGljIGludCBrc3o5NDc3X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdH1cbiBcbiBcdGlmIChkZXYtXHUwMDNlaW5mby1cdTAwM2VwdHBfY2FwYWJsZSkge1xuK1x0XHRrc3pfcHRwX3NldF9jYXBzKGRzKTtcbiBcdFx0cmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7XG4gXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jazogJWRcXG5cIixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jXG5pbmRleCAxYTlkNmY4M2EwMjMyLi45ZTIzNGFkNzFiNzIzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jXG5AQCAtMTE2MSw2ICsxMTYxLDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xuIFx0XHQuc3VwcG9ydHNfbWlpID0ge2ZhbHNlLCBmYWxzZSwgdHJ1ZX0sXG4gXHRcdC5zdXBwb3J0c19ybWlpID0ge2ZhbHNlLCBmYWxzZSwgdHJ1ZX0sXG4gXHRcdC5pbnRlcm5hbF9waHkgPSB7dHJ1ZSwgdHJ1ZSwgZmFsc2V9LFxuK1x0XHQubl9waW5zID0gMTIsXG4rXHRcdC5uX3Blcl9vdXQgPSAxMixcbiBcdH0sXG4gXG4gXHRbS1NaODU2M10gPSB7XG5AQCAtMTE5NCw2ICsxMTk2LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xuIFx0XHQucHRwX2NhcGFibGUgPSB0cnVlLFxuIFx0XHQud3JfdGFibGUgPSBcdTAwMjZrc3o4NTYzX3JlZ2lzdGVyX3NldCxcbiBcdFx0LnJkX3RhYmxlID0gXHUwMDI2a3N6ODU2M19yZWdpc3Rlcl9zZXQsXG4rXHRcdC5uX3BpbnMgPSAyLFxuK1x0XHQubl9wZXJfb3V0ID0gMyxcbiBcdH0sXG4gXG4gXHRbS1NaODc5NV0gPSB7XG5AQCAtMTQxNCw2ICsxNDE4LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xuIFx0XHQuc2dtaWlfcG9ydCA9IDcsXG4gXHRcdC53cl90YWJsZSA9IFx1MDAyNmtzejk0NzdfcmVnaXN0ZXJfc2V0LFxuIFx0XHQucmRfdGFibGUgPSBcdTAwMjZrc3o5NDc3X3JlZ2lzdGVyX3NldCxcbitcdFx0Lm5fcGlucyA9IDIsXG4rXHRcdC5uX3Blcl9vdXQgPSAzLFxuIFx0fSxcbiBcbiBcdFtLU1o5ODk2XSA9IHtcbkBAIC0xNTQ0LDYgKzE1NTAsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XG4gXHRcdC5pbnRlcm5hbF9waHkgPSB7dHJ1ZSwgdHJ1ZSwgZmFsc2V9LFxuIFx0XHQuZ2JpdF9jYXBhYmxlID0ge3RydWUsIHRydWUsIHRydWV9LFxuIFx0XHQucHRwX2NhcGFibGUgPSB0cnVlLFxuK1x0XHQubl9waW5zID0gMixcbitcdFx0Lm5fcGVyX291dCA9IDMsXG4gXHR9LFxuIFxuIFx0W0tTWjg1NjddID0ge1xuQEAgLTE1ODEsNiArMTU4OSw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcbiBcdFx0LmdiaXRfY2FwYWJsZVx0PSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLFxuIFx0XHRcdFx0ICAgdHJ1ZSwgdHJ1ZX0sXG4gXHRcdC5wdHBfY2FwYWJsZSA9IHRydWUsXG4rXHRcdC5uX3BpbnMgPSAyLFxuK1x0XHQubl9wZXJfb3V0ID0gMyxcbiBcdH0sXG4gXG4gXHRbS1NaOTU2N10gPSB7XG5AQCAtMTYxNSw2ICsxNjI1LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xuIFx0XHRcdFx0ICAgdHJ1ZSwgZmFsc2UsIGZhbHNlfSxcbiBcdFx0LmdiaXRfY2FwYWJsZVx0PSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZX0sXG4gXHRcdC5wdHBfY2FwYWJsZSA9IHRydWUsXG4rXHRcdC5uX3BpbnMgPSAyLFxuK1x0XHQubl9wZXJfb3V0ID0gMyxcbiBcdH0sXG4gXG4gXHRbTEFOOTM3MF0gPSB7XG5AQCAtMTY0Niw2ICsxNjU4LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xuIFx0XHQuc3VwcG9ydHNfcmdtaWkgPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWV9LFxuIFx0XHQuaW50ZXJuYWxfcGh5ID0ge3RydWUsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlfSxcbiBcdFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcbitcdFx0Lm5fcGlucyA9IDIsXG4rXHRcdC5uX3Blcl9vdXQgPSAzLFxuIFx0fSxcbiBcbiBcdFtMQU45MzcxXSA9IHtcbkBAIC0xNjc3LDYgKzE2OTEsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XG4gXHRcdC5zdXBwb3J0c19yZ21paSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZX0sXG4gXHRcdC5pbnRlcm5hbF9waHkgPSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlfSxcbiBcdFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcbitcdFx0Lm5fcGlucyA9IDIsXG4rXHRcdC5uX3Blcl9vdXQgPSAzLFxuIFx0fSxcbiBcbiBcdFtMQU45MzcyXSA9IHtcbkBAIC0xNzEyLDYgKzE3MjgsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XG4gXHRcdC5pbnRlcm5hbF9waHlcdD0ge3RydWUsIHRydWUsIHRydWUsIHRydWUsXG4gXHRcdFx0XHQgICBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWV9LFxuIFx0XHQucHRwX2NhcGFibGUgPSB0cnVlLFxuK1x0XHQubl9waW5zID0gMixcbitcdFx0Lm5fcGVyX291dCA9IDMsXG4gXHR9LFxuIFxuIFx0W0xBTjkzNzNdID0ge1xuQEAgLTE3NDcsNiArMTc2NSw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcbiBcdFx0LmludGVybmFsX3BoeVx0PSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsXG4gXHRcdFx0XHQgICBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWV9LFxuIFx0XHQucHRwX2NhcGFibGUgPSB0cnVlLFxuK1x0XHQubl9waW5zID0gMixcbitcdFx0Lm5fcGVyX291dCA9IDMsXG4gXHR9LFxuIFxuIFx0W0xBTjkzNzRdID0ge1xuQEAgLTE3ODIsNiArMTgwMiw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcbiBcdFx0LmludGVybmFsX3BoeVx0PSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSxcbiBcdFx0XHRcdCAgIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZX0sXG4gXHRcdC5wdHBfY2FwYWJsZSA9IHRydWUsXG4rXHRcdC5uX3BpbnMgPSAyLFxuK1x0XHQubl9wZXJfb3V0ID0gMyxcbiBcdH0sXG4gXG4gXHRbTEFOOTY0Nl0gPSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaFxuaW5kZXggY2JlOTg0OTQ1NzhjMy4uMTE1NWIzOTM1MGMyYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaFxuQEAgLTEzOSw2ICsxMzksOCBAQCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSB7XG4gXHR1OCBzZ21paV9wb3J0O1xuIFx0Y29uc3Qgc3RydWN0IHJlZ21hcF9hY2Nlc3NfdGFibGUgKndyX3RhYmxlO1xuIFx0Y29uc3Qgc3RydWN0IHJlZ21hcF9hY2Nlc3NfdGFibGUgKnJkX3RhYmxlO1xuK1x0Y29uc3QgdTggbl9waW5zO1xuK1x0Y29uc3QgdTggbl9wZXJfb3V0O1xuIH07XG4gXG4gc3RydWN0IGtzel9pcnEge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmNcbmluZGV4IDM5Y2M3MGQ2NTkwMGIuLmQzMzAzNDg5MmE4ZjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuY1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmNcbkBAIC0yNiw2ICsyNiw3IEBAXG4gICovXG4gI2RlZmluZSBLU1pfTUFYX0RSSUZUX0NPUlIgNjI0OTk5OVxuICNkZWZpbmUgS1NaX01BWF9QVUxTRV9XSURUSCAxMjUwMDAwMDBMTFxuKyNkZWZpbmUgS1NaODQ2M19NQVhfUFVMU0VfV0lEVEggNTAwMDAwTExcbiBcbiAjZGVmaW5lIEtTWl9QVFBfSU5DX05TIDQwVUxMICAvKiBIVyBjbG9jayBpcyBpbmNyZW1lbnRlZCBldmVyeSA0MCBucyAoYnkgNDApICovXG4gI2RlZmluZSBLU1pfUFRQX1NVQk5TX0JJVFMgMzJcbkBAIC02Myw2ICs2NCwxNyBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X2dwaW8oc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiBcdFx0XHQgTEVEX1NSQ19QVFBfR1BJT18xIHwgTEVEX1NSQ19QVFBfR1BJT18yKTtcbiB9XG4gXG4rc3RhdGljIGludCBrc3o4NDYzX3B0cF90b3VfcmVzZXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdClcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0ga3N6X3JtdzE2KGRldiwgS1NaODQ2M19UT1VfU1dfUlNULCBCSVQodW5pdCksIEJJVCh1bml0KSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIGtzel9ybXcxNihkZXYsIEtTWjg0NjNfVE9VX1NXX1JTVCwgQklUKHVuaXQpLCAwKTtcbit9XG4rXG4gc3RhdGljIGludCBrc3pfcHRwX3RvdV9yZXNldChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCB1bml0KVxuIHtcbiBcdHUzMiBkYXRhO1xuQEAgLTg2LDcgKzk4LDcgQEAgc3RhdGljIGludCBrc3pfcHRwX3RvdV9yZXNldChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCB1bml0KVxuIFx0XHRcdCAwKTtcbiB9XG4gXG4tc3RhdGljIGludCBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkodTY0IHB1bHNlX25zKVxuK3N0YXRpYyBpbnQga3N6X3B0cF90b3VfcHVsc2VfdmVyaWZ5KHU2NCBwdWxzZV9ucywgdTMyIG1hc2spXG4ge1xuIFx0dTMyIGRhdGE7XG4gXG5AQCAtOTQsNyArMTA2LDcgQEAgc3RhdGljIGludCBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkodTY0IHB1bHNlX25zKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGRhdGEgPSAocHVsc2VfbnMgLyA4KTtcbi1cdGlmICghRklFTERfRklUKFRSSUdfUFVMU0VfV0lEVEhfTSwgZGF0YSkpXG4rXHRpZiAoKG1hc2sgXHUwMDI2IGRhdGEpICE9IGRhdGEpXG4gXHRcdHJldHVybiAtRVJBTkdFO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTIwLDYgKzEzMiwyOCBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X3RhcmdldF90aW1lX3NldChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfdG91X3N0YXJ0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHVuaXQpXG4re1xuK1x0dTE2IGRhdGE7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0ga3N6X3JtdzE2KGRldiwgS1NaODQ2M19UT1VfRU4sIEJJVCh1bml0KSwgQklUKHVuaXQpKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBrc3pfcmVhZDE2KGRldiwgS1NaODQ2M19UT1VfQUNUSVZFLCBcdTAwMjZkYXRhKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAoIShkYXRhIFx1MDAyNiBCSVQodW5pdCkpKSB7XG4rXHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldiwgXCIlczogVHJpZ2dlciB1bml0JWQgZXJyb3IhXFxuXCIsIF9fZnVuY19fLFxuK1x0XHRcdHVuaXQpO1xuK1x0XHRyZXR1cm4gLUVJTztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IGtzel9wdHBfdG91X3N0YXJ0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHVuaXQpXG4ge1xuIFx0dTMyIGRhdGE7XG5AQCAtMTQ3LDYgKzE4MSw1NiBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X3N0YXJ0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHVuaXQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBrc3o4NDYzX3B0cF9jb25maWd1cmVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHRcdHUzMiBjeWNsZV93aWR0aF9ucywgdTMyIHB1bHNlX3dpZHRoX25zLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgdGltZXNwZWM2NCBjb25zdCAqdGFyZ2V0X3RpbWUsXG4rXHRcdFx0XHRcdHU4IGluZGV4KVxuK3tcbitcdHN0cnVjdCBwdHBfcGluX2Rlc2MgKnBpbiA9IFx1MDAyNmRldi1cdTAwM2VwdHBfZGF0YS5waW5fY29uZmlnW2luZGV4XTtcbitcdHUxNiBjZmdfYmFzZSA9IEtTWjg0NjNfVFJJRzFfQ0ZHICsgS1NaODQ2M19UUklHTl9DRkdfU0laRSAqIHBpbi1cdTAwM2VjaGFuO1xuK1x0dTE2IGRhdGE7XG4rXHRpbnQgcmV0O1xuK1xuK1x0LyogSGFyZHdhcmUgaGFzIG9ubHkgMzIgYml0ICovXG4rXHRpZiAoKHRhcmdldF90aW1lLVx1MDAzZXR2X3NlYyBcdTAwMjYgMHhmZmZmZmZmZikgIT0gdGFyZ2V0X3RpbWUtXHUwMDNldHZfc2VjKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGRhdGEgPSBLU1o4NDYzX05PVElGWV9CSVQgfFxuK1x0ICAgICAgIEZJRUxEX1BSRVAoS1NaODQ2M19QQVRURVJOX00sIFRSSUdfUE9TX1BFUklPRCkgfFxuK1x0ICAgICAgIHBpbi1cdTAwM2VpbmRleDtcbitcdHJldCA9IGtzel93cml0ZTE2KGRldiwgY2ZnX2Jhc2UgKyBLU1o4NDYzX1BBVFRFUk5fT0ZGLCBkYXRhKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBrc3pfd3JpdGUzMihkZXYsIGNmZ19iYXNlICsgS1NaODQ2M19DWUNMRV9XSURUSF9PRkYsXG4rXHRcdFx0ICBjeWNsZV93aWR0aF9ucyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogU2V0IGN5Y2xlIGNvdW50IDAgLSBJbmZpbml0ZSAqL1xuK1x0cmV0ID0ga3N6X3dyaXRlMTYoZGV2LCBjZmdfYmFzZSArIEtTWjg0NjNfQ1lDTEVfQ05UX09GRiwgMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogS1NaODQ2MyB1c2VzIGEgOCBucyB1bml0IHZhbHVlIHRvIGNvbXB1dGUgdGhlIHB1bHNlIHdpZHRoICovXG4rXHRkYXRhID0gKHB1bHNlX3dpZHRoX25zIC8gOCk7XG4rXHRyZXQgPSBrc3pfd3JpdGUxNihkZXYsIGNmZ19iYXNlICsgS1NaODQ2M19QVUxTRV9XSURUSF9PRkYsIGRhdGEpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IGtzel93cml0ZTMyKGRldiwgY2ZnX2Jhc2UgKyBLU1o4NDYzX1RBUkdFVF9OU0VDLFxuK1x0XHRcdCAgdGFyZ2V0X3RpbWUtXHUwMDNldHZfbnNlYyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCBjZmdfYmFzZSArIEtTWjg0NjNfVEFSR0VUX1NFQyxcbitcdFx0XHQgIHRhcmdldF90aW1lLVx1MDAzZXR2X3NlYyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQga3N6X3B0cF9jb25maWd1cmVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgICAgdTMyIGN5Y2xlX3dpZHRoX25zLCB1MzIgcHVsc2Vfd2lkdGhfbnMsXG4gXHRcdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgY29uc3QgKnRhcmdldF90aW1lLFxuQEAgLTE4MywxNyArMjY3LDExIEBAIHN0YXRpYyBpbnQga3N6X3B0cF9jb25maWd1cmVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBrc3pfcHRwX2VuYWJsZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbi1cdFx0XHRcdCBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LFxuLVx0XHRcdFx0IGludCBvbilcbitzdGF0aWMgaW50IGtzel9wdHBfZ2V0X3BpbihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuK1x0XHRcdCAgIHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgY29uc3QgKnJlcXVlc3QpXG4ge1xuIFx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBcdTAwMjZkZXYtXHUwMDNlcHRwX2RhdGE7XG4tXHR1NjQgcmVxX3B1bHNlX3dpZHRoX25zO1xuLVx0dTY0IGN5Y2xlX3dpZHRoX25zO1xuLVx0dTY0IHB1bHNlX3dpZHRoX25zO1xuLVx0aW50IHBpbiA9IDA7XG4tXHR1MzIgZGF0YTMyO1xuLVx0aW50IHJldDtcbitcdGludCBwaW47XG4gXG4gXHRpZiAocmVxdWVzdC1cdTAwM2VmbGFncyBcdTAwMjYgflBUUF9QRVJPVVRfRFVUWV9DWUNMRSlcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuQEAgLTIwNiw2ICsyODQsMTE0IEBAIHN0YXRpYyBpbnQga3N6X3B0cF9lbmFibGVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4gXHRpZiAocGluIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdHJldHVybiBwaW47XG4rfVxuK1xuK3N0YXRpYyBpbnQga3N6X3B0cF9jb21wdXRlX3Blcm91dF9jeWNsZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0XHRzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LFxuK1x0XHRcdFx0XHR1NjQgKmN5Y2xlX3dpZHRoX25zKVxuK3tcbitcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gXHUwMDI2ZGV2LVx1MDAzZXB0cF9kYXRhO1xuK1xuK1x0cHRwX2RhdGEtXHUwMDNlcGVyb3V0X3RhcmdldF90aW1lX2ZpcnN0LnR2X3NlYyAgPSByZXF1ZXN0LVx1MDAzZXN0YXJ0LnNlYztcbitcdHB0cF9kYXRhLVx1MDAzZXBlcm91dF90YXJnZXRfdGltZV9maXJzdC50dl9uc2VjID0gcmVxdWVzdC1cdTAwM2VzdGFydC5uc2VjO1xuK1xuK1x0cHRwX2RhdGEtXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9zZWMgPSByZXF1ZXN0LVx1MDAzZXBlcmlvZC5zZWM7XG4rXHRwdHBfZGF0YS1cdTAwM2VwZXJvdXRfcGVyaW9kLnR2X25zZWMgPSByZXF1ZXN0LVx1MDAzZXBlcmlvZC5uc2VjO1xuK1xuK1x0KmN5Y2xlX3dpZHRoX25zID0gdGltZXNwZWM2NF90b19ucyhcdTAwMjZwdHBfZGF0YS1cdTAwM2VwZXJvdXRfcGVyaW9kKTtcbitcdGlmICgoKmN5Y2xlX3dpZHRoX25zIFx1MDAyNiBUUklHX0NZQ0xFX1dJRFRIX00pICE9ICpjeWNsZV93aWR0aF9ucykge1xuK1x0XHQqY3ljbGVfd2lkdGhfbnMgPSAwO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdTY0IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfcHVsc2Uoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbitcdFx0XHRcdFx0c3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCBjb25zdCAqcmVxdWVzdCxcbitcdFx0XHRcdFx0dTY0IG1heF9wdWxzZV93aWR0aClcbit7XG4rXHR1NjQgcmVxX3B1bHNlX3dpZHRoX25zO1xuK1xuK1x0aWYgKHJlcXVlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IFBUUF9QRVJPVVRfRFVUWV9DWUNMRSlcbitcdFx0cmV0dXJuIHJlcXVlc3QtXHUwMDNlb24uc2VjICogTlNFQ19QRVJfU0VDICtcdHJlcXVlc3QtXHUwMDNlb24ubnNlYztcbitcbitcdC8qIFVzZSBhIGR1dHkgY3ljbGUgb2YgNTAlLiBNYXhpbXVtIHB1bHNlIHdpZHRoIHN1cHBvcnRlZCBieSB0aGVcbitcdCAqIGhhcmR3YXJlIGlzIGEgbGl0dGxlIGJpdCBtb3JlIHRoYW4gMTI1IG1zLlxuK1x0ICovXG4rXHRyZXFfcHVsc2Vfd2lkdGhfbnMgPSAocmVxdWVzdC1cdTAwM2VwZXJpb2Quc2VjICogTlNFQ19QRVJfU0VDICtcbitcdFx0XHQgICAgICByZXF1ZXN0LVx1MDAzZXBlcmlvZC5uc2VjKSAvIDI7XG4rXHRyZXR1cm4gbWluX3QodTY0LCByZXFfcHVsc2Vfd2lkdGhfbnMsIG1heF9wdWxzZV93aWR0aCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfZW5hYmxlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LFxuK1x0XHRcdFx0ICAgICBpbnQgb24pXG4re1xuK1x0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBcdTAwMjZkZXYtXHUwMDNlcHRwX2RhdGE7XG4rXHR1NjQgY3ljbGVfd2lkdGhfbnM7XG4rXHR1NjQgcHVsc2Vfd2lkdGhfbnM7XG4rXHRpbnQgcGluO1xuK1x0aW50IHJldDtcbitcbitcdHBpbiA9IGtzel9wdHBfZ2V0X3BpbihkZXYsIHJlcXVlc3QpO1xuK1x0aWYgKHBpbiBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHBpbjtcbitcbitcdHJldCA9IGtzejg0NjNfcHRwX3RvdV9yZXNldChkZXYsIHJlcXVlc3QtXHUwMDNlaW5kZXgpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmICghb24pIHtcbitcdFx0cHRwX2RhdGEtXHUwMDNldG91X21vZGUgPSBLU1pfUFRQX1RPVV9JRExFO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcdHJldCA9IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfY3ljbGUoZGV2LCByZXF1ZXN0LCBcdTAwMjZjeWNsZV93aWR0aF9ucyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cHVsc2Vfd2lkdGhfbnMgPSBrc3pfcHRwX2NvbXB1dGVfcGVyb3V0X3B1bHNlKGRldiwgcmVxdWVzdCxcbitcdFx0XHRcdFx0XHQgICAgICBLU1o4NDYzX01BWF9QVUxTRV9XSURUSCk7XG4rXG4rXHRyZXQgPSBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkocHVsc2Vfd2lkdGhfbnMsXG4rXHRcdFx0XHQgICAgICAgS1NaODQ2M19UUklHX1BVTFNFX1dJRFRIX00pO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IGtzejg0NjNfcHRwX2NvbmZpZ3VyZV9wZXJvdXQoZGV2LCBjeWNsZV93aWR0aF9ucywgcHVsc2Vfd2lkdGhfbnMsXG4rXHRcdFx0XHRcdCAgIFx1MDAyNnB0cF9kYXRhLVx1MDAzZXBlcm91dF90YXJnZXRfdGltZV9maXJzdCxcbitcdFx0XHRcdFx0ICAgcGluKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBrc3pfcHRwX3RvdV9ncGlvKGRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0ga3N6ODQ2M19wdHBfdG91X3N0YXJ0KGRldiwgcmVxdWVzdC1cdTAwM2VpbmRleCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cHRwX2RhdGEtXHUwMDNldG91X21vZGUgPSBLU1pfUFRQX1RPVV9QRVJPVVQ7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBrc3pfcHRwX2VuYWJsZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbitcdFx0XHRcdCBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LFxuK1x0XHRcdFx0IGludCBvbilcbit7XG4rXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IFx1MDAyNmRldi1cdTAwM2VwdHBfZGF0YTtcbitcdHU2NCBjeWNsZV93aWR0aF9ucztcbitcdHU2NCBwdWxzZV93aWR0aF9ucztcbitcdGludCBwaW4gPSAwO1xuK1x0dTMyIGRhdGEzMjtcbitcdGludCByZXQ7XG4rXG4rXHRwaW4gPSBrc3pfcHRwX2dldF9waW4oZGV2LCByZXF1ZXN0KTtcbitcdGlmIChwaW4gXHUwMDNjIDApXG4rXHRcdHJldHVybiBwaW47XG4rXG4gXHRkYXRhMzIgPSBGSUVMRF9QUkVQKFBUUF9HUElPX0lOREVYLCBwaW4pIHxcbiBcdFx0IEZJRUxEX1BSRVAoUFRQX1RPVV9JTkRFWCwgcmVxdWVzdC1cdTAwM2VpbmRleCk7XG4gXHRyZXQgPSBrc3pfcm13MzIoZGV2LCBSRUdfUFRQX1VOSVRfSU5ERVhfXzQsXG5AQCAtMjIxLDMxICs0MDcsMTMgQEAgc3RhdGljIGludCBrc3pfcHRwX2VuYWJsZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiBcdFx0cHRwX2RhdGEtXHUwMDNldG91X21vZGUgPSBLU1pfUFRQX1RPVV9JRExFO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbitcdHJldCA9IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfY3ljbGUoZGV2LCByZXF1ZXN0LCBcdTAwMjZjeWNsZV93aWR0aF9ucyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cHVsc2Vfd2lkdGhfbnMgPSBrc3pfcHRwX2NvbXB1dGVfcGVyb3V0X3B1bHNlKGRldiwgcmVxdWVzdCxcbitcdFx0XHRcdFx0XHQgICAgICBLU1pfTUFYX1BVTFNFX1dJRFRIKTtcbiBcbi1cdHB0cF9kYXRhLVx1MDAzZXBlcm91dF90YXJnZXRfdGltZV9maXJzdC50dl9zZWMgID0gcmVxdWVzdC1cdTAwM2VzdGFydC5zZWM7XG4tXHRwdHBfZGF0YS1cdTAwM2VwZXJvdXRfdGFyZ2V0X3RpbWVfZmlyc3QudHZfbnNlYyA9IHJlcXVlc3QtXHUwMDNlc3RhcnQubnNlYztcbi1cbi1cdHB0cF9kYXRhLVx1MDAzZXBlcm91dF9wZXJpb2QudHZfc2VjID0gcmVxdWVzdC1cdTAwM2VwZXJpb2Quc2VjO1xuLVx0cHRwX2RhdGEtXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9uc2VjID0gcmVxdWVzdC1cdTAwM2VwZXJpb2QubnNlYztcbi1cbi1cdGN5Y2xlX3dpZHRoX25zID0gdGltZXNwZWM2NF90b19ucyhcdTAwMjZwdHBfZGF0YS1cdTAwM2VwZXJvdXRfcGVyaW9kKTtcbi1cdGlmICgoY3ljbGVfd2lkdGhfbnMgXHUwMDI2IFRSSUdfQ1lDTEVfV0lEVEhfTSkgIT0gY3ljbGVfd2lkdGhfbnMpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuLVx0aWYgKHJlcXVlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IFBUUF9QRVJPVVRfRFVUWV9DWUNMRSkge1xuLVx0XHRwdWxzZV93aWR0aF9ucyA9IHJlcXVlc3QtXHUwMDNlb24uc2VjICogTlNFQ19QRVJfU0VDICtcbi1cdFx0XHRyZXF1ZXN0LVx1MDAzZW9uLm5zZWM7XG4tXHR9IGVsc2Uge1xuLVx0XHQvKiBVc2UgYSBkdXR5IGN5Y2xlIG9mIDUwJS4gTWF4aW11bSBwdWxzZSB3aWR0aCBzdXBwb3J0ZWQgYnkgdGhlXG4tXHRcdCAqIGhhcmR3YXJlIGlzIGEgbGl0dGxlIGJpdCBtb3JlIHRoYW4gMTI1IG1zLlxuLVx0XHQgKi9cbi1cdFx0cmVxX3B1bHNlX3dpZHRoX25zID0gKHJlcXVlc3QtXHUwMDNlcGVyaW9kLnNlYyAqIE5TRUNfUEVSX1NFQyArXG4tXHRcdFx0XHQgICAgICByZXF1ZXN0LVx1MDAzZXBlcmlvZC5uc2VjKSAvIDI7XG4tXHRcdHB1bHNlX3dpZHRoX25zID0gbWluX3QodTY0LCByZXFfcHVsc2Vfd2lkdGhfbnMsXG4tXHRcdFx0XHQgICAgICAgS1NaX01BWF9QVUxTRV9XSURUSCk7XG4tXHR9XG4tXG4tXHRyZXQgPSBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkocHVsc2Vfd2lkdGhfbnMpO1xuK1x0cmV0ID0ga3N6X3B0cF90b3VfcHVsc2VfdmVyaWZ5KHB1bHNlX3dpZHRoX25zLCBUUklHX1BVTFNFX1dJRFRIX00pO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC03NTYsMTEgKzkyNCwxMSBAQCBzdGF0aWMgaW50IGtzel9wdHBfZ2V0dGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCBrc3pfcHRwX3Jlc3RhcnRfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4rc3RhdGljIGludCBrc3pfcHRwX3ByZXBhcmVfcmVzdGFydF9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbitcdFx0XHRcdFx0ICBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0ICpyZXF1ZXN0KVxuIHtcbiBcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gXHUwMDI2ZGV2LVx1MDAzZXB0cF9kYXRhO1xuIFx0czY0IG5vd19ucywgZmlyc3RfbnMsIHBlcmlvZF9ucywgbmV4dF9ucztcbi1cdHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgcmVxdWVzdDtcbiBcdHN0cnVjdCB0aW1lc3BlYzY0IG5leHQ7XG4gXHRzdHJ1Y3QgdGltZXNwZWM2NCBub3c7XG4gXHR1bnNpZ25lZCBpbnQgY291bnQ7XG5AQCAtNzkxLDQwICs5NTksMTExIEBAIHN0YXRpYyBpbnQga3N6X3B0cF9yZXN0YXJ0X3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuIFxuIFx0LyogUmVzdGFydCBwZXJpb2RpYyBvdXRwdXQgc2lnbmFsICovXG4gXHRuZXh0ID0gbnNfdG9fdGltZXNwZWM2NChuZXh0X25zKTtcbi1cdHJlcXVlc3Quc3RhcnQuc2VjICA9IG5leHQudHZfc2VjO1xuLVx0cmVxdWVzdC5zdGFydC5uc2VjID0gbmV4dC50dl9uc2VjO1xuLVx0cmVxdWVzdC5wZXJpb2Quc2VjICA9IHB0cF9kYXRhLVx1MDAzZXBlcm91dF9wZXJpb2QudHZfc2VjO1xuLVx0cmVxdWVzdC5wZXJpb2QubnNlYyA9IHB0cF9kYXRhLVx1MDAzZXBlcm91dF9wZXJpb2QudHZfbnNlYztcbi1cdHJlcXVlc3QuaW5kZXggPSAwO1xuLVx0cmVxdWVzdC5mbGFncyA9IDA7XG4rXHRyZXF1ZXN0LVx1MDAzZXN0YXJ0LnNlYyAgPSBuZXh0LnR2X3NlYztcbitcdHJlcXVlc3QtXHUwMDNlc3RhcnQubnNlYyA9IG5leHQudHZfbnNlYztcbitcdHJlcXVlc3QtXHUwMDNlcGVyaW9kLnNlYyAgPSBwdHBfZGF0YS1cdTAwM2VwZXJvdXRfcGVyaW9kLnR2X3NlYztcbitcdHJlcXVlc3QtXHUwMDNlcGVyaW9kLm5zZWMgPSBwdHBfZGF0YS1cdTAwM2VwZXJvdXRfcGVyaW9kLnR2X25zZWM7XG4rXHRyZXF1ZXN0LVx1MDAzZWluZGV4ID0gMDtcbitcdHJlcXVlc3QtXHUwMDNlZmxhZ3MgPSAwO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQga3N6X3B0cF9yZXN0YXJ0X3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuK3tcbitcdHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgcmVxdWVzdDtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBrc3pfcHRwX3ByZXBhcmVfcmVzdGFydF9wZXJvdXQoZGV2LCBcdTAwMjZyZXF1ZXN0KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4gXG4gXHRyZXR1cm4ga3N6X3B0cF9lbmFibGVfcGVyb3V0KGRldiwgXHUwMDI2cmVxdWVzdCwgMSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQga3N6X3B0cF9zZXR0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxuLVx0XHRcdCAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbitzdGF0aWMgaW50IGtzejg0NjNfcHRwX3Jlc3RhcnRfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4ge1xuLVx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XG4tXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XG4tXHRjb25zdCB1MTYgKnJlZ3MgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2VyZWdzO1xuK1x0c3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCByZXF1ZXN0O1xuIFx0aW50IHJldDtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2cHRwX2RhdGEtXHUwMDNlbG9jayk7XG4rXHRyZXQgPSBrc3pfcHRwX3ByZXBhcmVfcmVzdGFydF9wZXJvdXQoZGV2LCBcdTAwMjZyZXF1ZXN0KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4ga3N6ODQ2M19wdHBfZW5hYmxlX3Blcm91dChkZXYsIFx1MDAyNnJlcXVlc3QsIDEpO1xuK31cbitcbitzdGF0aWMgaW50IF9fa3N6X3B0cF9zZXR0aW1lKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4rXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4re1xuK1x0Y29uc3QgdTE2ICpyZWdzID0gZGV2LVx1MDAzZWluZm8tXHUwMDNlcmVncztcbitcdGludCByZXQ7XG4gXG4gXHQvKiBXcml0ZSB0byBzaGFkb3cgcmVnaXN0ZXJzIGFuZCBMb2FkIFBUUCBjbG9jayAqL1xuIFx0cmV0ID0ga3N6X3dyaXRlMTYoZGV2LCByZWdzW1BUUF9SVENfU1VCX05BTk9TRUNdLCBQVFBfUlRDXzBOUyk7XG4gXHRpZiAocmV0KVxuLVx0XHRnb3RvIHVubG9jaztcbitcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHJldCA9IGtzel93cml0ZTMyKGRldiwgcmVnc1tQVFBfUlRDX05BTk9TRUNdLCB0cy1cdTAwM2V0dl9uc2VjKTtcbiBcdGlmIChyZXQpXG4tXHRcdGdvdG8gdW5sb2NrO1xuK1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfU0VDXSwgdHMtXHUwMDNldHZfc2VjKTtcbiBcdGlmIChyZXQpXG4tXHRcdGdvdG8gdW5sb2NrO1xuK1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0ga3N6X3JtdzE2KGRldiwgcmVnc1tQVFBfQ0xLX0NUUkxdLCBQVFBfTE9BRF9USU1FLCBQVFBfTE9BRF9USU1FKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBrc3o4NDYzX3B0cF9zZXR0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxuK1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4re1xuK1x0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XG4rXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwdHBfZGF0YS1cdTAwM2Vsb2NrKTtcbitcbitcdHJldCA9IF9fa3N6X3B0cF9zZXR0aW1lKGRldiwgdHMpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byB1bmxvY2s7XG4rXG4rXHRzd2l0Y2ggKHB0cF9kYXRhLVx1MDAzZXRvdV9tb2RlKSB7XG4rXHRjYXNlIEtTWl9QVFBfVE9VX0lETEU6XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSBLU1pfUFRQX1RPVV9QRVJPVVQ6XG4rXHRcdHJldCA9IGtzejg0NjNfcHRwX3Jlc3RhcnRfcGVyb3V0KGRldik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWNsb2NrX2xvY2spO1xuK1x0cHRwX2RhdGEtXHUwMDNlY2xvY2tfdGltZSA9ICp0cztcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWNsb2NrX2xvY2spO1xuK1xuK3VubG9jazpcbitcdG11dGV4X3VubG9jayhcdTAwMjZwdHBfZGF0YS1cdTAwM2Vsb2NrKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQga3N6X3B0cF9zZXR0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxuK1x0XHRcdCAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbit7XG4rXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTtcbitcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuK1xuK1x0cmV0ID0gX19rc3pfcHRwX3NldHRpbWUoZGV2LCB0cyk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIHVubG9jaztcbiBcbkBAIC04OTAsMTggKzExMjksMTMgQEAgc3RhdGljIGludCBrc3pfcHRwX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIGxvbmcgc2NhbGVkX3BwbSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQga3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpXG4rc3RhdGljIGludCBfX2tzel9wdHBfYWRqdGltZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBzNjQgZGVsdGEpXG4ge1xuLVx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XG4tXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XG4tXHRzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YTY0ID0gbnNfdG9fdGltZXNwZWM2NChkZWx0YSk7XG4gXHRjb25zdCB1MTYgKnJlZ3MgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2VyZWdzO1xuIFx0czMyIHNlYywgbnNlYztcbiBcdHUxNiBkYXRhMTY7XG4gXHRpbnQgcmV0O1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZwdHBfZGF0YS1cdTAwM2Vsb2NrKTtcbi1cbiBcdC8qIGRvIG5vdCB1c2UgbnNfdG9fdGltZXNwZWM2NCgpLFxuIFx0ICogYm90aCBzZWMgYW5kIG5zZWMgYXJlIHN1YnRyYWN0ZWQgYnkgaHdcbiBcdCAqL1xuQEAgLTkwOSwxNSArMTE0MywxNSBAQCBzdGF0aWMgaW50IGtzel9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKVxuIFxuIFx0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfTkFOT1NFQ10sIGFicyhuc2VjKSk7XG4gXHRpZiAocmV0KVxuLVx0XHRnb3RvIHVubG9jaztcbitcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHJldCA9IGtzel93cml0ZTMyKGRldiwgcmVnc1tQVFBfUlRDX1NFQ10sIGFicyhzZWMpKTtcbiBcdGlmIChyZXQpXG4tXHRcdGdvdG8gdW5sb2NrO1xuK1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0ga3N6X3JlYWQxNihkZXYsIHJlZ3NbUFRQX0NMS19DVFJMXSwgXHUwMDI2ZGF0YTE2KTtcbiBcdGlmIChyZXQpXG4tXHRcdGdvdG8gdW5sb2NrO1xuK1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0ZGF0YTE2IHw9IFBUUF9TVEVQX0FESjtcbiBcbkBAIC05MjgsNiArMTE2Miw1NiBAQCBzdGF0aWMgaW50IGtzel9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKVxuIFx0XHRkYXRhMTYgfD0gUFRQX1NURVBfRElSO1xuIFxuIFx0cmV0ID0ga3N6X3dyaXRlMTYoZGV2LCByZWdzW1BUUF9DTEtfQ1RSTF0sIGRhdGExNik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKVxuK3tcbitcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gcHRwX2NhcHNfdG9fZGF0YShwdHApO1xuK1x0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IHB0cF9kYXRhX3RvX2tzel9kZXYocHRwX2RhdGEpO1xuK1x0c3RydWN0IHRpbWVzcGVjNjQgZGVsdGE2NCA9IG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpO1xuK1x0aW50IHJldDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHRwX2RhdGEtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXQgPSBfX2tzel9wdHBfYWRqdGltZShkZXYsIGRlbHRhKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gdW5sb2NrO1xuK1xuK1x0c3dpdGNoIChwdHBfZGF0YS1cdTAwM2V0b3VfbW9kZSkge1xuK1x0Y2FzZSBLU1pfUFRQX1RPVV9JRExFOlxuK1x0XHRicmVhaztcbitcbitcdGNhc2UgS1NaX1BUUF9UT1VfUEVST1VUOlxuK1x0XHRyZXQgPSBrc3o4NDYzX3B0cF9yZXN0YXJ0X3Blcm91dChkZXYpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gdW5sb2NrO1xuK1xuK1x0XHRicmVhaztcbitcdH1cbitcbitcdHNwaW5fbG9ja19iaChcdTAwMjZwdHBfZGF0YS1cdTAwM2VjbG9ja19sb2NrKTtcbitcdHB0cF9kYXRhLVx1MDAzZWNsb2NrX3RpbWUgPSB0aW1lc3BlYzY0X2FkZChwdHBfZGF0YS1cdTAwM2VjbG9ja190aW1lLCBkZWx0YTY0KTtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWNsb2NrX2xvY2spO1xuK1xuK3VubG9jazpcbitcdG11dGV4X3VubG9jayhcdTAwMjZwdHBfZGF0YS1cdTAwM2Vsb2NrKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQga3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpXG4re1xuK1x0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XG4rXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XG4rXHRzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YTY0ID0gbnNfdG9fdGltZXNwZWM2NChkZWx0YSk7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwdHBfZGF0YS1cdTAwM2Vsb2NrKTtcbitcbitcdHJldCA9IF9fa3N6X3B0cF9hZGp0aW1lKGRldiwgZGVsdGEpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byB1bmxvY2s7XG4gXG5AQCAtOTUyLDYgKzEyMzYsMjYgQEAgc3RhdGljIGludCBrc3pfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHM2NCBkZWx0YSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcmVxLCBpbnQgb24pXG4re1xuK1x0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XG4rXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XG4rXHRpbnQgcmV0O1xuK1xuK1x0c3dpdGNoIChyZXEtXHUwMDNldHlwZSkge1xuK1x0Y2FzZSBQVFBfQ0xLX1JFUV9QRVJPVVQ6XG4rXHRcdG11dGV4X2xvY2soXHUwMDI2cHRwX2RhdGEtXHUwMDNlbG9jayk7XG4rXHRcdHJldCA9IGtzejg0NjNfcHRwX2VuYWJsZV9wZXJvdXQoZGV2LCBcdTAwMjZyZXEtXHUwMDNlcGVyb3V0LCBvbik7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZwdHBfZGF0YS1cdTAwM2Vsb2NrKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiBzdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxuIFx0XHRcdCAgc3RydWN0IHB0cF9jbG9ja19yZXF1ZXN0ICpyZXEsIGludCBvbilcbiB7XG5AQCAtMTAyOCwxNyArMTMzMiwzMyBAQCBzdGF0aWMgaW50IGtzel9wdHBfc3RhcnRfY2xvY2soc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1pbnQga3N6X3B0cF9jbG9ja19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4rdm9pZCBrc3o4NDYzX3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4re1xuK1x0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4rXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YTtcbitcbitcdHB0cF9kYXRhID0gXHUwMDI2ZGV2LVx1MDAzZXB0cF9kYXRhO1xuK1xuK1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy5vd25lclx0XHQ9IFRISVNfTU9EVUxFO1xuK1x0c25wcmludGYocHRwX2RhdGEtXHUwMDNlY2Fwcy5uYW1lLCAxNiwgXCJNaWNyb2NoaXAgQ2xvY2tcIik7XG4rXHRwdHBfZGF0YS1cdTAwM2VjYXBzLm1heF9hZGpcdFx0PSBLU1pfTUFYX0RSSUZUX0NPUlI7XG4rXHRwdHBfZGF0YS1cdTAwM2VjYXBzLmdldHRpbWU2NFx0PSBrc3pfcHRwX2dldHRpbWU7XG4rXHRwdHBfZGF0YS1cdTAwM2VjYXBzLnNldHRpbWU2NFx0PSBrc3o4NDYzX3B0cF9zZXR0aW1lO1xuK1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy5hZGpmaW5lXHRcdD0ga3N6X3B0cF9hZGpmaW5lO1xuK1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy5hZGp0aW1lXHRcdD0ga3N6ODQ2M19wdHBfYWRqdGltZTtcbitcdHB0cF9kYXRhLVx1MDAzZWNhcHMuZG9fYXV4X3dvcmtcdD0ga3N6X3B0cF9kb19hdXhfd29yaztcbitcdHB0cF9kYXRhLVx1MDAzZWNhcHMuZW5hYmxlXHRcdD0ga3N6ODQ2M19wdHBfZW5hYmxlO1xuK1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy52ZXJpZnlcdFx0PSBrc3pfcHRwX3ZlcmlmeV9waW47XG4rXHRwdHBfZGF0YS1cdTAwM2VjYXBzLm5fcGluc1x0XHQ9IGRldi1cdTAwM2VpbmZvLVx1MDAzZW5fcGlucztcbitcdHB0cF9kYXRhLVx1MDAzZWNhcHMubl9wZXJfb3V0XHQ9IGRldi1cdTAwM2VpbmZvLVx1MDAzZW5fcGVyX291dDtcbit9XG4rXG4rdm9pZCBrc3pfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiB7XG4gXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbi1cdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZXJlZ3M7XG4gXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YTtcbi1cdGludCByZXQ7XG4tXHR1OCBpO1xuIFxuIFx0cHRwX2RhdGEgPSBcdTAwMjZkZXYtXHUwMDNlcHRwX2RhdGE7XG4tXHRtdXRleF9pbml0KFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuLVx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2cHRwX2RhdGEtXHUwMDNlY2xvY2tfbG9jayk7XG4gXG4gXHRwdHBfZGF0YS1cdTAwM2VjYXBzLm93bmVyXHRcdD0gVEhJU19NT0RVTEU7XG4gXHRzbnByaW50ZihwdHBfZGF0YS1cdTAwM2VjYXBzLm5hbWUsIDE2LCBcIk1pY3JvY2hpcCBDbG9ja1wiKTtcbkBAIC0xMDUwLDE0ICsxMzcwLDI3IEBAIGludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdHB0cF9kYXRhLVx1MDAzZWNhcHMuZG9fYXV4X3dvcmtcdD0ga3N6X3B0cF9kb19hdXhfd29yaztcbiBcdHB0cF9kYXRhLVx1MDAzZWNhcHMuZW5hYmxlXHRcdD0ga3N6X3B0cF9lbmFibGU7XG4gXHRwdHBfZGF0YS1cdTAwM2VjYXBzLnZlcmlmeVx0XHQ9IGtzel9wdHBfdmVyaWZ5X3Bpbjtcbi1cdHB0cF9kYXRhLVx1MDAzZWNhcHMubl9waW5zXHRcdD0gS1NaX1BUUF9OX0dQSU87XG4tXHRwdHBfZGF0YS1cdTAwM2VjYXBzLm5fcGVyX291dFx0PSAzO1xuK1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy5uX3BpbnNcdFx0PSBkZXYtXHUwMDNlaW5mby1cdTAwM2VuX3BpbnM7XG4rXHRwdHBfZGF0YS1cdTAwM2VjYXBzLm5fcGVyX291dFx0PSBkZXYtXHUwMDNlaW5mby1cdTAwM2VuX3Blcl9vdXQ7XG4rfVxuK1xuK2ludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbit7XG4rXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbitcdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZXJlZ3M7XG4rXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YTtcbitcdGludCByZXQ7XG4rXHR1OCBpO1xuK1xuK1x0cHRwX2RhdGEgPSBcdTAwMjZkZXYtXHUwMDNlcHRwX2RhdGE7XG4rXHRtdXRleF9pbml0KFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2cHRwX2RhdGEtXHUwMDNlY2xvY2tfbG9jayk7XG4gXG4gXHRyZXQgPSBrc3pfcHRwX3N0YXJ0X2Nsb2NrKGRldik7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgS1NaX1BUUF9OX0dQSU87IGkrKykge1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGV2LVx1MDAzZWluZm8tXHUwMDNlbl9waW5zOyBpKyspIHtcbiBcdFx0c3RydWN0IHB0cF9waW5fZGVzYyAqcHRwX3BpbiA9IFx1MDAyNnB0cF9kYXRhLVx1MDAzZXBpbl9jb25maWdbaV07XG4gXG4gXHRcdHNucHJpbnRmKHB0cF9waW4tXHUwMDNlbmFtZSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oXG5pbmRleCA3MDY3ZWM5YmQxZTZmLi45MjU4OWNmMzczYWMyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmhcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oXG5AQCAtMTIsNyArMTIsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuIFxuLSNkZWZpbmUgS1NaX1BUUF9OX0dQSU9cdFx0MlxuKyNkZWZpbmUgS1NaX1BUUF9OX0dQSU9cdFx0MTJcbiBcbiBlbnVtIGtzel9wdHBfdG91X21vZGUge1xuIFx0S1NaX1BUUF9UT1VfSURMRSxcbkBAIC0zMyw2ICszMyw4IEBAIHN0cnVjdCBrc3pfcHRwX2RhdGEge1xuIFx0c3RydWN0IHRpbWVzcGVjNjQgcGVyb3V0X3BlcmlvZDtcbiB9O1xuIFxuK3ZvaWQga3N6X3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xuK3ZvaWQga3N6ODQ2M19wdHBfc2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbiBpbnQga3N6X3B0cF9jbG9ja19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xuIFxuIHZvaWQga3N6X3B0cF9jbG9ja191bnJlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XG5AQCAtNjUsNiArNjcsNyBAQCBzdHJ1Y3Qga3N6X3B0cF9kYXRhIHtcbiBcdHN0cnVjdCBtdXRleCBsb2NrO1xuIH07XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIGtzel9wdHBfc2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKSB7IH1cbiBzdGF0aWMgaW5saW5lIGludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiB7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmhcbmluZGV4IDY1ZWE4NTc3YWY3NTUuLjE2ZjExN2ZhNWQ0OWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmhcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cF9yZWcuaFxuQEAgLTUxLDYgKzUxLDIyIEBAXG4gXG4gI2RlZmluZSBSRUdfUFRQX1VOSVRfSU5ERVhfXzRcdFx0MHgwNTIwXG4gXG4rI2RlZmluZSBLU1o4NDYzX1RPVV9BQ1RJVkVcdFx0MHgyMDJcbisjZGVmaW5lIEtTWjg0NjNfVE9VX0VOXHRcdFx0MHgyMDZcbisjZGVmaW5lIEtTWjg0NjNfVE9VX1NXX1JTVFx0XHQweDIwOFxuK1xuKyNkZWZpbmUgS1NaODQ2M19UUklHTl9DRkdfU0laRVx0XHQweDIwXG4rI2RlZmluZSBLU1o4NDYzX1RSSUcxX0NGR1x0XHQweDIyMFxuKyNkZWZpbmUgS1NaODQ2M19UQVJHRVRfTlNFQ1x0XHQweDAwMFxuKyNkZWZpbmUgS1NaODQ2M19UQVJHRVRfU0VDXHRcdDB4MDA0XG4rI2RlZmluZSBLU1o4NDYzX1BBVFRFUk5fT0ZGXHRcdDB4MDA4XG4rI2RlZmluZSBLU1o4NDYzX05PVElGWV9CSVRcdFx0QklUKDgpXG4rI2RlZmluZSBLU1o4NDYzX1BBVFRFUk5fTVx0XHRHRU5NQVNLKDYsIDQpXG4rI2RlZmluZSBLU1o4NDYzX1BVTFNFX1dJRFRIX09GRlx0XHQweDAwQVxuKyNkZWZpbmUgS1NaODQ2M19UUklHX1BVTFNFX1dJRFRIX01cdEdFTk1BU0soMTUsIDApXG4rI2RlZmluZSBLU1o4NDYzX0NZQ0xFX1dJRFRIX09GRlx0XHQweDAwQ1xuKyNkZWZpbmUgS1NaODQ2M19DWUNMRV9DTlRfT0ZGXHRcdDB4MDEwXG4rXG4gI2RlZmluZSBQVFBfR1BJT19JTkRFWFx0XHRcdEdFTk1BU0soMTksIDE2KVxuICNkZWZpbmUgUFRQX1RTSV9JTkRFWFx0XHRcdEJJVCg4KVxuICNkZWZpbmUgUFRQX1RPVV9JTkRFWFx0XHRcdEdFTk1BU0soMSwgMClcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uY1xuaW5kZXggODZjZTNhODY3MDVmOS4uM2EyMDkxMjJmYzdkYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmNcbkBAIC04NjcsNiArODY3LDcgQEAgc3RhdGljIGludCBsYW45Mzd4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdFx0fVxuIFx0fVxuIFxuK1x0a3N6X3B0cF9zZXRfY2Fwcyhkcyk7XG4gXHRyZXQgPSBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKGRzKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2s6ICVkXFxuXCIsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MDoyNy4xNTQ0MDk0MThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTg3OTAyMjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgcGF0Y2ggYW5kIGRlY2lkZSBpZiB3ZSdyZSBnb2luZyB0byBwdXQgaXQgdGhyb3VnaCB0aGUgZnV6emluZyBtaWxsLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUuIEkgc2VlIHRoYXQgaXQgdG91Y2hlcyBgZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9gLCB3aGljaCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggTWljcm9jaGlwIEtTWi9MQU4gRFNBIEV0aGVybmV0IHN3aXRjaCBkcml2ZXJzLiBTcGVjaWZpY2FsbHksIHRoaW5ncyBsaWtlIHRoZSBLU1o4NDYzLCBLU1o4NTYzLCBLU1o5NDc3LCBLU1o5NTY3LCBhbmQgTEFOOTM3eC5cblxuTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgaG93IGRvZXMgdGhlIGtlcm5lbCBpbnRlcmZhY2Ugd2l0aCB0aGVzZSBzd2l0Y2hlcz8gU1BJLCBJMkMsIG1lbW9yeS1tYXBwZWQsIE1ESU8/IEtub3dpbmcgdGhhdCB3aWxsIGJlIGNydWNpYWwuIEFuZCBtb3JlIGltcG9ydGFudGx5LCBjYW4gd2UgZXZlbiByZWFjaCB0aGVzZSBkcml2ZXJzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VPyBDYW4gd2UgZW11bGF0ZSBhIERTQSBzd2l0Y2ggb3IgYSBiYXNpYyBTUEkvSTJDIE1pY3JvY2hpcCBzd2l0Y2gsIG9yIGFyZSB3ZSBzdHVjayB3aXRoIHBoeXNpY2FsIGhhcmR3YXJlPyBJZiBpdCdzIHRoZSBsYXR0ZXIsIHRoYXQncyBnb2luZyB0byBiZSBhIHNpZ25pZmljYW50IGh1cmRsZS5cblxuVGltZSB0byBmaXJlIHVwIHRoZSBncmVwcGVyIG9yIHJlYWQtZmlsZSB0byBkbyBhIGxpdHRsZSBkaWdnaW5nIGFuZCBnZXQgc29tZSBhbnN3ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQzNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQwOjMwLjM0MjMxNDk3OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTE3NTQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNSUNST0NISVBfS1NaXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjI6bWVudWNvbmZpZyBORVRfRFNBX01JQ1JPQ0hJUF9LU1pfQ09NTU9OXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk1pY3JvY2hpcCBLU1o4WFhYL0tTWjlYWFgvTEFOOTM3WCBzZXJpZXMgc3dpdGNoIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMTYtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjE3OmNvbmZpZyBORVRfRFNBX01JQ1JPQ0hJUF9LU1o5NDc3X0kyQ1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZy0xOC1cXHR0cmlzdGF0ZSBcXFwiS1NaIHNlcmllcyBJMkMgY29ubmVjdGVkIHN3aXRjaCBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjE5OlxcdGRlcGVuZHMgb24gTkVUX0RTQV9NSUNST0NISVBfS1NaX0NPTU1PTiBcXHUwMDI2XFx1MDAyNiBJMkNcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMjAtXFx0c2VsZWN0IFJFR01BUF9JMkNcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZy0yMy1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWc6MjQ6Y29uZmlnIE5FVF9EU0FfTUlDUk9DSElQX0tTWl9TUElcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMjUtXFx0dHJpc3RhdGUgXFxcIktTWiBzZXJpZXMgU1BJIGNvbm5lY3RlZCBzd2l0Y2ggZHJpdmVyXFxcIlxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZzoyNjpcXHRkZXBlbmRzIG9uIE5FVF9EU0FfTUlDUk9DSElQX0tTWl9DT01NT04gXFx1MDAyNlxcdTAwMjYgU1BJXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTI3LVxcdHNlbGVjdCBSRUdNQVBfU1BJXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMzAtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjMxOmNvbmZpZyBORVRfRFNBX01JQ1JPQ0hJUF9LU1pfUFRQXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHRoZSBQVFAgY2xvY2sgb24gdGhlIEtTWjk1NjMvTEFOOTM3eCBFdGhlcm5ldCBTd2l0Y2hcXFwiXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjMzOlxcdGRlcGVuZHMgb24gTkVUX0RTQV9NSUNST0NISVBfS1NaX0NPTU1PTiBcXHUwMDI2XFx1MDAyNiBQVFBfMTU4OF9DTE9DS1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZzozNDpcXHRkZXBlbmRzIG9uIE5FVF9EU0FfTUlDUk9DSElQX0tTWl9DT01NT049bSB8fCBQVFBfMTU4OF9DTE9DSz15XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTM1LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZy00MC1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWc6NDE6Y29uZmlnIE5FVF9EU0FfTUlDUk9DSElQX0tTWjg4NjNfU01JXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTQyLVxcdHRyaXN0YXRlIFxcXCJLU1ogc2VyaWVzIFNNSSBjb25uZWN0ZWQgc3dpdGNoIGRyaXZlclxcXCJcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWc6NDM6XFx0ZGVwZW5kcyBvbiBORVRfRFNBX01JQ1JPQ0hJUF9LU1pfQ09NTU9OXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTQ0LVxcdHNlbGVjdCBNRElPX0JJVEJBTkdcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX05FVF9EU0FfTUlDUk9DSElQX0tTWl9DT01NT04pXFx0Kz0ga3N6X3N3aXRjaC5vXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZS0zLWtzel9zd2l0Y2gtb2JqcyA6PSBrc3pfY29tbW9uLm8ga3N6X2RjYi5vXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL01ha2VmaWxlPTY9a3N6X3N3aXRjaC1vYmpzICs9IGxhbjkzN3hfbWFpbi5vXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZS03LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGU6ODppZmRlZiBDT05GSUdfTkVUX0RTQV9NSUNST0NISVBfS1NaX1BUUFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGUtOS1rc3pfc3dpdGNoLW9ianMgKz0ga3N6X3B0cC5vXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZT0xMD1lbmRpZlxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGUtMTEtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfTkVUX0RTQV9NSUNST0NISVBfS1NaOTQ3N19JMkMpXFx0Kz0ga3N6OTQ3N19pMmMub1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX05FVF9EU0FfTUlDUk9DSElQX0tTWl9TUEkpXFx0XFx0Kz0ga3N6X3NwaS5vXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfTkVUX0RTQV9NSUNST0NISVBfS1NaODg2M19TTUkpXFx0Kz0ga3N6ODg2M19zbWkub1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmg9MTcxPXN0cnVjdCBrc3pfcG9ydCB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaC0xOTQtXFx0c3RydWN0IHBoeWxpbmtfcGNzICpwY3M7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmg6MTk1OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX01JQ1JPQ0hJUF9LU1pfUFRQKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTE5Ni1cXHRzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyB0c3RhbXBfY29uZmlnO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgtMTAtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg6MTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfTUlDUk9DSElQX0tTWl9QVFApXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgtMTItXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaD05MD1zdGF0aWMgaW5saW5lIHZvaWQga3N6ODQ2M19wdHBfaXJxX2ZyZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKSB7fVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgtMTA1LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oOjEwNjojZW5kaWZcXHQvKiBFbmQgb2YgQ09ORklHX05FVF9EU0FfTUlDUk9DSElQX0tTWl9QVFAgKi9cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC0xMDctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQwOjMwLjQxMzQ5NjY3NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMzMwODc5MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGRyaXZlciBzaXR1YXRpb24uIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmRhbWVudGFsIGFyY2hpdGVjdHVyZTogYXJlIHRoZXNlIGRyaXZlcnMgc3RyaWN0bHkgdGllZCB0byBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBjb21wb25lbnRzPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhleSdyZSBwcm9iZWQgYW5kIGJvdW5kLlxuXG5NeSBpbnN0aW5jdCBpcyB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNvZGUgaXRzZWxmLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlc2UgYGtzemAgZHJpdmVycyBkaXJlY3RseSB0byBzZWUgdGhlIGJpbmRpbmcgbWVjaGFuaXNtIGluIGRldGFpbC4gSSdsbCB0YXJnZXQgdGhlIGBrc3pfc3BpLmNgLCBga3N6OTQ3N19pMmMuY2AsIGFuZCBga3N6ODg2M19zbWkuY2AgZmlsZXMgYXMgYSBzdGFydGluZyBwb2ludC4gVGhvc2Ugc2VlbSBsaWtlIHRoZXknbGwgY292ZXIgYSByYW5nZSBvZiBpbnRlcmZhY2UgbWV0aG9kb2xvZ2llcyB0aGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gdGhpbmdzLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gc2VlIHRoZSBpbnRlcmFjdGlvbnMgZmlyc3RoYW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM4NSwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQwOjMyLjQ0NjU4Nzk1MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDIyODMxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfc3BpX2RyaXZlcnxtb2R1bGVfaTJjX2RyaXZlcnxtb2R1bGVfbWRpb19kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmM9MTMzPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBrc3o5NDc3X2kyY19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmMtMTQ0LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYzoxNDU6bW9kdWxlX2kyY19kcml2ZXIoa3N6OTQ3N19pMmNfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmMtMTQ2LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmM9MzQ5PXN0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBrc3pfc3BpX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jLTM2MC1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYzozNjE6bW9kdWxlX3NwaV9kcml2ZXIoa3N6X3NwaV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jLTM2Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDA6MzIuNTAwODI2MjI3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODE2ODkxMTc0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gRFNBIFN3aXRjaGVzIGFuZCBGdXp6aW5nIFdvcnRoaW5lc3MqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIERTQSBzd2l0Y2hlcy4gVGhlIHByb21wdCBzYXlzIFwiV29ydGhGdXp6aW5nPWZhbHNlXCIgaWYgaXQgZmFsbHMgdW5kZXIgc3BlY2lmaWMgY3JpdGVyaWEsIHNvIGxldCdzIGJyZWFrIGl0IGRvd246IEFyZSBEU0Egc3dpdGNoZXMgYWx3YXlzIHBoeXNpY2FsIGhhcmR3YXJlLWRlcGVuZGVudCwgb3IgY2FuIHdlIGdldCBhdCB0aGVtIHNvbWVob3cgaW4gc3l6a2FsbGVyIG9yIGEgdmlydHVhbGl6ZWQgUUVNVSBlbnZpcm9ubWVudD8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgd2UgY2FuIGV2ZW4gKnJlYWNoKiB0aGlzIGNvZGUuXG5cbkFscmlnaHQsIGxldCdzIHN0ZXAgYmFjayBhbmQgbG9vayBhdCB0aGUgXCJub3QgV29ydGhGdXp6aW5nXCIgY29uZGl0aW9ucy4gSXQncyBhIGxvdCBvZiB0aGluZ3MsIGxpa2UgZG9jdW1lbnRhdGlvbiwgbG9nZ2luZywgY29uc3RhbnRzIHRoYXQgZG9uJ3QgY2hhbmdlIGZsb3csIHVucmVhY2hhYmxlIGNvZGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB2ZW5kb3Itc3BlY2lmaWMgc3R1ZmYgdGllZCB0byBhY3R1YWwgaGFyZHdhcmUgKGxpa2UgUENJZSBjYXJkcyBub3QgZW11bGF0ZWQpLCBhbmQgdGVhcmRvd24gY2FsbGJhY2tzIHRoYXQgb25seSBydW4gZHVyaW5nIGhvdC11bnBsdWcuXG5cblRoZSByZWFsIHF1ZXN0aW9uIGlzLCBjYW4gdGhlc2UgRFNBIHN3aXRjaGVzIG9uIFNQSSBvciBJMkMgKHNwZWNpZmljYWxseSwgdGhpbmtpbmcgYWJvdXQgc29tZXRoaW5nIGxpa2UgYSBNaWNyb2NoaXAgS1NaKSBldmVuIGJlICpwcm9iZWQqIG9yIGluc3RhbnRpYXRlZCBpbiBRRU1VL3N5emthbGxlciB3aXRob3V0IGEgcGh5c2ljYWwgc2V0dXA/IE5vdyBJJ20gcmVtZW1iZXJpbmcgdGhhdCBTUEkgYW5kIEkyQyBkcml2ZXJzIGNhbiBzb21ldGltZXMgYmUgaW50ZXJhY3RlZCB3aXRoIGZyb20gdXNlcnNwYWNlLCByaWdodD8gTGlrZSwgY2FuIEkgY3JlYXRlIGFuIEkyQyBkZXZpY2UgdmlhIHN5c2ZzIHdpdGggYC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy1YL25ld19kZXZpY2VgPyBPciB2aWEgU1BJL09GLCBvciBldmVuIHdpdGggYSBkdW1teSBkZXZpY2U/XG5cbkFoYSwgdGhhdCdzIGl0ISBJbiBMaW51eCwgeW91ICpjYW4qIGluc3RhbnRpYXRlIEkyQyBkZXZpY2VzIHdpdGggdGhhdCBgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLVgvbmV3X2RldmljZWAgcGF0aC4gQnV0LCB0aGUgcXVlc3Rpb24gYmVjb21lcywgY2FuIHN5emthbGxlciAqdXNlKiB0aGlzPyBEb2VzIFFFTVUgZXZlbiBoYXZlIGFuIEkyQyBidXMgaW1wbGVtZW50ZWQ/IEkgbmVlZCB0byBjaGVjayBpZiBzeXprYWxsZXIgaGFzIFwiaTJjIG5ld19kZXZpY2VcIiBmdW5jdGlvbmFsaXR5LCBhbmQgaWYgRFNBIHN3aXRjaGVzIGNhbiBiZSBjb250cm9sbGVkIHZpYSB0aGlzLlxuXG5Pa2F5LCBsZXQncyBkaWcgaW50byB0aGUgZGV0YWlscy4gRFNBIHN3aXRjaCBkcml2ZXIgcHJvYmluZyByZXF1aXJlcyBhIERTQSB0cmVlIGFuZCBwbGF0Zm9ybS9kZXZpY2UgdHJlZSBkYXRhLiBTbyBub3cgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlOiBTcGVjaWZpY2FsbHksIGxldCdzIGxvb2sgYXQgYGtzejk0NzdfaTJjX3Byb2JlYCBhbmQgYGtzel9zd2l0Y2hfcmVnaXN0ZXJgIGluIGBkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2AgdG8gc2VlIGlmIHRoZXkgY2FuIHNvbWVob3cgYmUgYWNjZXNzZWQgdmlydHVhbGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTkzOCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MDo0MC42Njk3NDEwMTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwMDg1NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3N6OTQ3N19pMmNfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmM9MTU9S1NaX1JFR01BUF9UQUJMRShrc3o5NDc3LCBub3RfdXNlZCwgMTYsIDAsIDApO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYy0xNi1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmM6MTc6c3RhdGljIGludCBrc3o5NDc3X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYy0xOC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmM9MTMzPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBrc3o5NDc3X2kyY19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmMtMTM4LVxcdH0sXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jOjEzOTpcXHQucHJvYmUgPSBrc3o5NDc3X2kyY19wcm9iZSxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmMtMTQwLVxcdC5yZW1vdmVcXHQ9IGtzejk0NzdfaTJjX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDA6NDAuNzE4NzU3NzEzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTI2MDM5NDQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEtTWjk0NzcgRHJpdmVyKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBLU1o5NDc3IHN3aXRjaCBpcyBiZWluZyBoYW5kbGVkIGluIHRoZSBMaW51eCBrZXJuZWwuIFRpbWUgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgbG9va2luZyBhdCBga3N6OTQ3N19pMmNfcHJvYmVgIGFuZCBga3N6X3N3aXRjaF9yZWdpc3RlcmAgZnVuY3Rpb25zLiBUaGVzZSBhcmUgbGlrZWx5IHRoZSBjb3JlIGVudHJ5IHBvaW50cyBmb3IgaW5pdGlhbGl6aW5nIGFuZCByZWdpc3RlcmluZyB0aGUgZGV2aWNlLCBJJ2QgZXhwZWN0LiBUaGUgZmlsZSBwYXRocyBhcmUgc3RyYWlnaHRmb3J3YXJkIGVub3VnaDogYGRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuY2AgYW5kIGBrc3pfY29tbW9uLmNgLiBJJ20gaG9waW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBJMkMgY29tbXVuaWNhdGlvbiBpcyBzZXQgdXAsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyB1c2VkLCBhbmQgaG93IHRoZSBzd2l0Y2ggaXMgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIERTQSAoRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSkgZnJhbWV3b3JrLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIHJlc291cmNlIGFsbG9jYXRpb24gdG9vLCBhcyB0aGF0J3MgYWx3YXlzIGEgY3JpdGljYWwgYXNwZWN0IGluIGRyaXZlciBkZXZlbG9wbWVudC4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzM0OCwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQwOjQ1Ljk3OTE1NDg3OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDE3OlxcdHN0YXRpYyBpbnQga3N6OTQ3N19pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYylcXG4gIDE4OlxcdHtcXG4gIDE5OlxcdFxcdGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhICpjaGlwO1xcbiAgMjA6XFx0XFx0c3RydWN0IGRldmljZSAqZGRldiA9IFxcdTAwMjZpMmMtXFx1MDAzZWRldjtcXG4gIDIxOlxcdFxcdHN0cnVjdCByZWdtYXBfY29uZmlnIHJjO1xcbiAgMjI6XFx0XFx0c3RydWN0IGtzel9kZXZpY2UgKmRldjtcXG4gIDIzOlxcdFxcdGludCBpLCByZXQ7XFxuICAyNDpcXHRcXG4gIDI1OlxcdFxcdGNoaXAgPSBkZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGRldik7XFxuICAyNjpcXHRcXHRpZiAoIWNoaXApXFxuICAyNzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gIDI4OlxcdFxcbiAgMjk6XFx0XFx0ZGV2ID0ga3N6X3N3aXRjaF9hbGxvYyhcXHUwMDI2aTJjLVxcdTAwM2VkZXYsIGNoaXAsIGkyYyk7XFxuICAzMDpcXHRcXHRpZiAoIWRldilcXG4gIDMxOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQvKiBTYXZlIGNoaXAgaWQgdG8gZG8gc3BlY2lhbCBpbml0aWFsaXphdGlvbiB3aGVuIHByb2JpbmcuICovXFxuICAzNDpcXHRcXHRkZXYtXFx1MDAzZWNoaXBfaWQgPSBjaGlwLVxcdTAwM2VjaGlwX2lkO1xcbiAgMzU6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIF9fS1NaX05VTV9SRUdNQVBTOyBpKyspIHtcXG4gIDM2OlxcdFxcdFxcdHJjID0ga3N6OTQ3N19yZWdtYXBfY29uZmlnW2ldO1xcbiAgMzc6XFx0XFx0XFx0cmMubG9ja19hcmcgPSBcXHUwMDI2ZGV2LVxcdTAwM2VyZWdtYXBfbXV0ZXg7XFxuICAzODpcXHRcXHRcXHRkZXYtXFx1MDAzZXJlZ21hcFtpXSA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGkyYywgXFx1MDAyNnJjKTtcXG4gIDM5OlxcdFxcdFxcdGlmIChJU19FUlIoZGV2LVxcdTAwM2VyZWdtYXBbaV0pKSB7XFxuICA0MDpcXHRcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcXHUwMDI2aTJjLVxcdTAwM2VkZXYsIFBUUl9FUlIoZGV2LVxcdTAwM2VyZWdtYXBbaV0pLFxcbiAgNDE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgcmVnbWFwJWlcXFxcblxcXCIsXFxuICA0MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGtzejk0NzdfcmVnbWFwX2NvbmZpZ1tpXS52YWxfYml0cyk7XFxuICA0MzpcXHRcXHRcXHR9XFxuICA0NDpcXHRcXHR9XFxuICA0NTpcXHRcXG4gIDQ2OlxcdFxcdGlmIChpMmMtXFx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhKVxcbiAgNDc6XFx0XFx0XFx0ZGV2LVxcdTAwM2VwZGF0YSA9IGkyYy1cXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGE7XFxuICA0ODpcXHRcXG4gIDQ5OlxcdFxcdGRldi1cXHUwMDNlaXJxID0gaTJjLVxcdTAwM2VpcnE7XFxuICA1MDpcXHRcXG4gIDUxOlxcdFxcdHJldCA9IGtzel9zd2l0Y2hfcmVnaXN0ZXIoZGV2KTtcXG4gIDUyOlxcdFxcbiAgNTM6XFx0XFx0LyogTWFpbiBEU0EgZHJpdmVyIG1heSBub3QgYmUgc3RhcnRlZCB5ZXQuICovXFxuICA1NDpcXHRcXHRpZiAocmV0KVxcbiAgNTU6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFx0aTJjX3NldF9jbGllbnRkYXRhKGkyYywgZGV2KTtcXG4gIDU4OlxcdFxcbiAgNTk6XFx0XFx0cmV0dXJuIDA7XFxuICA2MDpcXHR9XFxuICA2MTpcXHRcXG4gIDYyOlxcdHN0YXRpYyB2b2lkIGtzejk0NzdfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjKVxcbiAgNjM6XFx0e1xcbiAgNjQ6XFx0XFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGkyY19nZXRfY2xpZW50ZGF0YShpMmMpO1xcbiAgNjU6XFx0XFxuICA2NjpcXHRcXHRpZiAoZGV2KVxcbiAgNjc6XFx0XFx0XFx0a3N6X3N3aXRjaF9yZW1vdmUoZGV2KTtcXG4gIDY4OlxcdH1cXG4gIDY5OlxcdFxcbiAgNzA6XFx0c3RhdGljIHZvaWQga3N6OTQ3N19pMmNfc2h1dGRvd24oc3RydWN0IGkyY19jbGllbnQgKmkyYylcXG4gIDcxOlxcdHtcXG4gIDcyOlxcdFxcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBpMmNfZ2V0X2NsaWVudGRhdGEoaTJjKTtcXG4gIDczOlxcdFxcbiAgNzQ6XFx0XFx0aWYgKCFkZXYpXFxuICA3NTpcXHRcXHRcXHRyZXR1cm47XFxuICA3NjpcXHRcXG4gIDc3OlxcdFxcdGtzel9zd2l0Y2hfc2h1dGRvd24oZGV2KTtcXG4gIDc4OlxcdFxcbiAgNzk6XFx0XFx0aTJjX3NldF9jbGllbnRkYXRhKGkyYywgTlVMTCk7XFxuICA4MDpcXHR9XFxuICA4MTpcXHRcXG4gIDgyOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBrc3o5NDc3X2kyY19pZFtdID0ge1xcbiAgODM6XFx0XFx0eyAubmFtZSA9IFxcXCJrc3o5NDc3LXN3aXRjaFxcXCIgfSxcXG4gIDg0OlxcdFxcdHsgfVxcbiAgODU6XFx0fTtcXG4gIDg2OlxcdFxcbiAgODc6XFx0TU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGtzejk0NzdfaTJjX2lkKTtcXG4gIDg4OlxcdFxcbiAgODk6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQga3N6OTQ3N19kdF9pZHNbXSA9IHtcXG4gIDkwOlxcdFxcdHtcXG4gIDkxOlxcdFxcdFxcdC5jb21wYXRpYmxlID0gXFxcIm1pY3JvY2hpcCxrc3o5NDc3XFxcIixcXG4gIDkyOlxcdFxcdFxcdC5kYXRhID0gXFx1MDAyNmtzel9zd2l0Y2hfY2hpcHNbS1NaOTQ3N11cXG4gIDkzOlxcdFxcdH0sXFxuICA5NDpcXHRcXHR7XFxuICA5NTpcXHRcXHRcXHQuY29tcGF0aWJsZSA9IFxcXCJtaWNyb2NoaXAsa3N6OTg5NlxcXCIsXFxuICA5NjpcXHRcXHRcXHQuZGF0YSA9IFxcdTAwMjZrc3pfc3dpdGNoX2NoaXBzW0tTWjk4OTZdXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQwOjQ1Ljk3OTI4NDA4OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDg4OTk2Mzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gdGhlIGtzejk0NzcgRHJpdmVyIFByb2JlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBrc3o5NDc3X2kyY19wcm9iZWAgZnVuY3Rpb24uIExpbmVzIDI1LTI3IGp1bXAgb3V0IGF0IG1lIGltbWVkaWF0ZWx5OiB0aGV5IHRyeSB0byByZXRyaWV2ZSBtYXRjaCBkYXRhIGZyb20gdGhlIGRldmljZSB1c2luZyBgZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRkZXYpYCwgYW5kIHRoZW4gYmFpbCBpZiBpdCdzIE5VTEwuIFRoaXMgbWFrZXMgc2Vuc2UgaW4gbW9zdCBjb250ZXh0cywgYnV0IGhvbGQgb24gYSBzZWNvbmQuLi4gaWYgdGhlIGRldmljZSBpcyBpbml0aWFsaXplZCB0aHJvdWdoIHRoZSBJMkMgSUQsIHNwZWNpZmljYWxseSBgXCJrc3o5NDc3LXN3aXRjaFwiYCBhcyBkZWZpbmVkIGluIGBrc3o5NDc3X2kyY19pZGAsIHdvdWxkbid0IHRoYXQgbWVhbiBgZHJpdmVyX2RhdGFgIGlzIGAwYCBvciBOVUxMPyBJbiB0aGF0IHNjZW5hcmlvLCBgZGV2aWNlX2dldF9tYXRjaF9kYXRhYCB3b3VsZCAqYWx3YXlzKiByZXR1cm4gTlVMTCwgcmlnaHQ/IFRoYXQgbG9va3MgbGlrZSBhIGJ1Zy4gQmVmb3JlIEkgZGlnIGRlZXBlciwgbGV0IG1lIGNoZWNrIHRoZSBga3N6X3N3aXRjaF9yZWdpc3RlcmAgZnVuY3Rpb24gaW4gYGtzel9jb21tb24uY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2hpcCBpcyBtZWFudCB0byBiZSByZWdpc3RlcmVkIGFuZCBpZiB0aGVyZSdzIGFueSBpbXBsaWNpdCBkYXRhIHNldHVwIHRoYXQgbWlnaHQgYmUgbWlzc2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg0NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQwOjQ5LjQ2ODI4MzM4OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE1OTYwNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGtzel9zd2l0Y2hfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYz0zOTExPXN0YXRpYyBpbnQga3N6ODQ2M19yZWxlYXNlX3N0cmFwc19zcGkoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTM5MTUtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6MzkxNjppbnQga3N6X3N3aXRjaF9yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTM5MTcte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmg9NDI5PXN0cnVjdCBrc3pfZGV2aWNlICprc3pfc3dpdGNoX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmJhc2UsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaC00MzEtXFx0XFx0XFx0XFx0ICAgIHZvaWQgKnByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oOjQzMjppbnQga3N6X3N3aXRjaF9yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaC00MzMtdm9pZCBrc3pfc3dpdGNoX3JlbW92ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDA6NDkuNTE5ODg2MjY0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NzQ5NjI0MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gcHVsbCB1cCBga3N6X3N3aXRjaF9yZWdpc3RlcmAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uY2AgZmlsZS4gSSdtIGFzc3VtaW5nLCBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gYW5kIGxvY2F0aW9uLCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciByZWdpc3RlcmluZyBhIE1pY3JvY2hpcCBLU1ogc2VyaWVzIHN3aXRjaCB3aXRoaW4gdGhlIERTQSAoRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSkgZnJhbWV3b3JrLiBLbm93aW5nIEtTWiBzd2l0Y2hlcywgaXQgbGlrZWx5IGhhbmRsZXMgdGhlIGJhc2ljIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uLCBzZXR0aW5nIHVwIGNvbW11bmljYXRpb24gd2l0aCB0aGUgc3dpdGNoIChsaWtlbHkgdGhyb3VnaCBNRElPKSwgYW5kIHRoZW4gaW50ZWdyYXRpbmcgdGhlIHN3aXRjaCdzIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBMaW51eCBuZXR3b3JraW5nIHN0YWNrLiBJdCB3aWxsIHByb2JhYmx5IGludm9sdmUgc29tZSBkZXZpY2UgdHJlZSBwYXJzaW5nIHRvIGNvbmZpZ3VyZSBpdHMgaGFyZHdhcmUsIHBvc3NpYmx5IGluY2x1ZGluZyB0aGluZ3MgbGlrZSB0aGUgTURJTyBidXMgYWRkcmVzcywgdGhlIFBIWSBhZGRyZXNzZXMsIGFuZCBhbnkgc3BlY2lmaWMgY2xvY2sgY29uZmlndXJhdGlvbnMgbmVlZGVkIGZvciBwcm9wZXIgb3BlcmF0aW9uLiBJIGV4cGVjdCB0byBzZWUgdGhlIHN0YW5kYXJkIGRldmljZSByZWdpc3RyYXRpb24gY2FsbHMgZm9yIERTQSwgYWxvbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgc3dpdGNoJ3MgdmFyaW91cyBwb3J0cyBhbmQgdGhlaXIgY2hhcmFjdGVyaXN0aWNzLiBIb3BlZnVsbHkgaXQgY29udGFpbnMgYSBjbGVhbiBlcnJvciBoYW5kbGluZyBwYXRoIC0gdGhhdCdzIGFsd2F5cyBnb29kIHByYWN0aWNlLCBlc3BlY2lhbGx5IGluIGEgZHJpdmVyLiBJJ2xsIGJlIGxvb2tpbmcgdG8gc2VlIGhvdyB3ZWxsIGl0J3Mgd3JpdHRlbiBhbmQgaWYgaXQgcHJvdmlkZXMgcm9idXN0IGVub3VnaCBzdXBwb3J0IGZvciBhbGwgb2YgdGhlIGZlYXR1cmVzIHRoYXQgS1NaIHN3aXRjaGVzIHByb3ZpZGUuIEknbSBhbHNvIGhvcGluZyBmb3IgY2xlYXIgZG9jdW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1NDYsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MDo1Mi40OTQ4NTE2NzJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgzNjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5MTYsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM5MTY6XFx0aW50IGtzel9zd2l0Y2hfcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4zOTE3OlxcdHtcXG4zOTE4OlxcdFxcdGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhICppbmZvO1xcbjM5MTk6XFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpwb3J0cztcXG4zOTIwOlxcdFxcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XFxuMzkyMTpcXHRcXHR1bnNpZ25lZCBpbnQgcG9ydF9udW07XFxuMzkyMjpcXHRcXHRpbnQgcmV0O1xcbjM5MjM6XFx0XFx0aW50IGk7XFxuMzkyNDpcXHRcXG4zOTI1OlxcdFxcdGRldi1cXHUwMDNlcmVzZXRfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKGRldi1cXHUwMDNlZGV2LCBcXFwicmVzZXRcXFwiLFxcbjM5MjY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBHUElPRF9PVVRfTE9XKTtcXG4zOTI3OlxcdFxcdGlmIChJU19FUlIoZGV2LVxcdTAwM2VyZXNldF9ncGlvKSlcXG4zOTI4OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGRldi1cXHUwMDNlcmVzZXRfZ3Bpbyk7XFxuMzkyOTpcXHRcXG4zOTMwOlxcdFxcdGlmIChkZXYtXFx1MDAzZXJlc2V0X2dwaW8pIHtcXG4zOTMxOlxcdFxcdFxcdGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkZXYtXFx1MDAzZWRldi1cXHUwMDNlb2Zfbm9kZSwgXFxcIm1pY3JvY2hpcCxrc3o4NDYzXFxcIikpIHtcXG4zOTMyOlxcdFxcdFxcdFxcdHJldCA9IGtzejg0NjNfY29uZmlndXJlX3N0cmFwc19zcGkoZGV2KTtcXG4zOTMzOlxcdFxcdFxcdFxcdGlmIChyZXQpXFxuMzkzNDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjM5MzU6XFx0XFx0XFx0fVxcbjM5MzY6XFx0XFxuMzkzNzpcXHRcXHRcXHRncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoZGV2LVxcdTAwM2VyZXNldF9ncGlvLCAxKTtcXG4zOTM4OlxcdFxcdFxcdHVzbGVlcF9yYW5nZSgxMDAwMCwgMTIwMDApO1xcbjM5Mzk6XFx0XFx0XFx0Z3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGRldi1cXHUwMDNlcmVzZXRfZ3BpbywgMCk7XFxuMzk0MDpcXHRcXHRcXHRtc2xlZXAoMTAwKTtcXG4zOTQxOlxcdFxcbjM5NDI6XFx0XFx0XFx0aWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGRldi1cXHUwMDNlZGV2LVxcdTAwM2VvZl9ub2RlLCBcXFwibWljcm9jaGlwLGtzejg0NjNcXFwiKSkge1xcbjM5NDM6XFx0XFx0XFx0XFx0cmV0ID0ga3N6ODQ2M19yZWxlYXNlX3N0cmFwc19zcGkoZGV2KTtcXG4zOTQ0OlxcdFxcdFxcdFxcdGlmIChyZXQpXFxuMzk0NTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjM5NDY6XFx0XFx0XFx0fVxcbjM5NDc6XFx0XFx0fVxcbjM5NDg6XFx0XFxuMzk0OTpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZWRldl9tdXRleCk7XFxuMzk1MDpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZXJlZ21hcF9tdXRleCk7XFxuMzk1MTpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZWFsdV9tdXRleCk7XFxuMzk1MjpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZXZsYW5fbXV0ZXgpO1xcbjM5NTM6XFx0XFxuMzk1NDpcXHRcXHRyZXQgPSBrc3pfc3dpdGNoX2RldGVjdChkZXYpO1xcbjM5NTU6XFx0XFx0aWYgKHJldClcXG4zOTU2OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMzk1NzpcXHRcXG4zOTU4OlxcdFxcdGluZm8gPSBrc3pfbG9va3VwX2luZm8oZGV2LVxcdTAwM2VjaGlwX2lkKTtcXG4zOTU5OlxcdFxcdGlmICghaW5mbylcXG4zOTYwOlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbjM5NjE6XFx0XFxuMzk2MjpcXHRcXHQvKiBVcGRhdGUgdGhlIGNvbXBhdGlibGUgaW5mbyB3aXRoIHRoZSBwcm9iZWQgb25lICovXFxuMzk2MzpcXHRcXHRkZXYtXFx1MDAzZWluZm8gPSBpbmZvO1xcbjM5NjQ6XFx0XFxuMzk2NTpcXHRcXHRkZXZfaW5mbyhkZXYtXFx1MDAzZWRldiwgXFxcImZvdW5kIHN3aXRjaDogJXMsIHJldiAlaVxcXFxuXFxcIixcXG4zOTY2OlxcdFxcdFxcdCBkZXYtXFx1MDAzZWluZm8tXFx1MDAzZWRldl9uYW1lLCBkZXYtXFx1MDAzZWNoaXBfcmV2KTtcXG4zOTY3OlxcdFxcbjM5Njg6XFx0XFx0cmV0ID0ga3N6X2NoZWNrX2RldmljZV9pZChkZXYpO1xcbjM5Njk6XFx0XFx0aWYgKHJldClcXG4zOTcwOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMzk3MTpcXHRcXG4zOTcyOlxcdFxcdGRldi1cXHUwMDNlZGV2X29wcyA9IGRldi1cXHUwMDNlaW5mby1cXHUwMDNlb3BzO1xcbjM5NzM6XFx0XFxuMzk3NDpcXHRcXHRyZXQgPSBkZXYtXFx1MDAzZWRldl9vcHMtXFx1MDAzZWluaXQoZGV2KTtcXG4zOTc1OlxcdFxcdGlmIChyZXQpXFxuMzk3NjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjM5Nzc6XFx0XFxuMzk3ODpcXHRcXHRkZXYtXFx1MDAzZXBvcnRzID0gZGV2bV9remFsbG9jKGRldi1cXHUwMDNlZGV2LFxcbjM5Nzk6XFx0XFx0XFx0XFx0XFx0ICBkZXYtXFx1MDAzZWluZm8tXFx1MDAzZXBvcnRfY250ICogc2l6ZW9mKHN0cnVjdCBrc3pfcG9ydCksXFxuMzk4MDpcXHRcXHRcXHRcXHRcXHQgIEdGUF9LRVJORUwpO1xcbjM5ODE6XFx0XFx0aWYgKCFkZXYtXFx1MDAzZXBvcnRzKVxcbjM5ODI6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMzk4MzpcXHRcXG4zOTg0OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBkZXYtXFx1MDAzZWluZm8tXFx1MDAzZXBvcnRfY250OyBpKyspIHtcXG4zOTg1OlxcdFxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZkZXYtXFx1MDAzZXBvcnRzW2ldLm1pYi5zdGF0czY0X2xvY2spO1xcbjM5ODY6XFx0XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2Vwb3J0c1tpXS5taWIuY250X211dGV4KTtcXG4zOTg3OlxcdFxcdFxcdGRldi1cXHUwMDNlcG9ydHNbaV0ubWliLmNvdW50ZXJzID1cXG4zOTg4OlxcdFxcdFxcdFxcdGRldm1fa3phbGxvYyhkZXYtXFx1MDAzZWRldixcXG4zOTg5OlxcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKHU2NCkgKiAoZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VtaWJfY250ICsgMSksXFxuMzk5MDpcXHRcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUwpO1xcbjM5OTE6XFx0XFx0XFx0aWYgKCFkZXYtXFx1MDAzZXBvcnRzW2ldLm1pYi5jb3VudGVycylcXG4zOTkyOlxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjM5OTM6XFx0XFxuMzk5NDpcXHRcXHRcXHRkZXYtXFx1MDAzZXBvcnRzW2ldLmtzel9kZXYgPSBkZXY7XFxuMzk5NTpcXHRcXHRcXHRkZXYtXFx1MDAzZXBvcnRzW2ldLm51bSA9IGk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQwOjUyLjQ5NTEzOTIyMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDUzODM2NzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBga3N6X3N3aXRjaF9yZWdpc3RlcmAgZnVuY3Rpb24gYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nLlxuXG4qKkFuYWx5emluZyB0aGUgYGtzel9zd2l0Y2hfcmVnaXN0ZXJgIEZ1bmN0aW9uJ3MgTmV4dCBTdGVwcyoqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBjb21pbmcgbmV4dCBpbiB0aGlzIGBrc3pfc3dpdGNoX3JlZ2lzdGVyYCBmdW5jdGlvbi4gSSd2ZSBnb3QgbXkgZGVidWdnaW5nIGhhdCBvbiwgYW5kIEknbSByZWFkeSB0byBmb2xsb3cgdGhlIGZsb3cuIEkga25vdyB0aGUgZ2VuZXJhbCBwdXJwb3NlLCBvZiBjb3Vyc2UsIGJ1dCBpdCdzIHRpbWUgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBzcGVjaWZpY3MuIFdoYXQgYXJlIHRoZSBrZXkgb3BlcmF0aW9ucyBiZWluZyBwZXJmb3JtZWQ/IElzIGl0IGhhbmRsaW5nIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uLCBkZXZpY2UgY29uZmlndXJhdGlvbiwgb3IgaW50ZXJydXB0IHNldHVwPyBJJ20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkOyB0aG9zZSB1c3VhbGx5IGhvbGQgdGhlIHNlY3JldHMgdG8gdGhlIGxvZ2ljLiBBbnkgaW50ZXJhY3Rpb24gd2l0aCB0aGUga2VybmVsJ3MgcmVzb3VyY2UgbWFuYWdlbWVudCBzeXN0ZW0gbmVlZHMgY2FyZWZ1bCBzY3J1dGlueSwgcGFydGljdWxhcmx5IHdpdGggdGhlc2Ugc29ydHMgb2YgZGV2aWNlIGRyaXZlcnMuIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMuIFRoZSBlcnJvciBoYW5kbGluZyBpcyBjcml0aWNhbCBhcyB3ZWxsOiBhcmUgdGhlIGVycm9yIGNvZGVzIG1lYW5pbmdmdWw/IEFyZSB0aGVyZSBzdWZmaWNpZW50IHJldHJpZXMgaW4gY2FzZSBvZiB0cmFuc2llbnQgZmFpbHVyZXM/IEknbGwgcHJvYmFibHkgc3RhcnQgYnkgbG9va2luZyBmb3IgYW55IGNhbGxzIHRvIG90aGVyIGZ1bmN0aW9ucyBhbmQgdHJhY2luZyB0aGVtIG91dC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBsb29raW5nIGF0IGFueSBoYXJkd2FyZSBhY2Nlc3MsIG9yIGNhbGxzIHRvIHJlc291cmNlIGFsbG9jYXRpb24gcm91dGluZXMsIHdoaWNoIGNvdWxkIGJlIHRoZSBzb3VyY2Ugb2YgaXNzdWVzLiBJIGFsc28gd2FudCB0byBtYWtlIHN1cmUgdGhlIGRhdGEgc3RydWN0dXJlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEluIHNob3J0LCBsZXQncyBnZXQgZG93biB0byB0aGUgbG93IGxldmVsIGFuZCBzZWUgd2hhdCdzIGJlaW5nIGRvbmUgYW5kIHdoZXRoZXIgaXQncyBkb25lIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExMDksIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQwOjU1LjU0ODk4NjYxM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQ1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzk5NixcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzk5NjpcXHRcXHR9XFxuMzk5NzpcXHRcXG4zOTk4OlxcdFxcdC8qIHNldCB0aGUgcmVhbCBudW1iZXIgb2YgcG9ydHMgKi9cXG4zOTk5OlxcdFxcdGRldi1cXHUwMDNlZHMtXFx1MDAzZW51bV9wb3J0cyA9IGRldi1cXHUwMDNlaW5mby1cXHUwMDNlcG9ydF9jbnQ7XFxuNDAwMDpcXHRcXG40MDAxOlxcdFxcdC8qIHNldCB0aGUgcGh5bGluayBvcHMgKi9cXG40MDAyOlxcdFxcdGRldi1cXHUwMDNlZHMtXFx1MDAzZXBoeWxpbmtfbWFjX29wcyA9IGRldi1cXHUwMDNlaW5mby1cXHUwMDNlcGh5bGlua19tYWNfb3BzO1xcbjQwMDM6XFx0XFxuNDAwNDpcXHRcXHQvKiBIb3N0IHBvcnQgaW50ZXJmYWNlIHdpbGwgYmUgc2VsZiBkZXRlY3RlZCwgb3Igc3BlY2lmaWNhbGx5IHNldCBpblxcbjQwMDU6XFx0XFx0ICogZGV2aWNlIHRyZWUuXFxuNDAwNjpcXHRcXHQgKi9cXG40MDA3OlxcdFxcdGZvciAocG9ydF9udW0gPSAwOyBwb3J0X251bSBcXHUwMDNjIGRldi1cXHUwMDNlaW5mby1cXHUwMDNlcG9ydF9jbnQ7ICsrcG9ydF9udW0pXFxuNDAwODpcXHRcXHRcXHRkZXYtXFx1MDAzZXBvcnRzW3BvcnRfbnVtXS5pbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTkE7XFxuNDAwOTpcXHRcXHRpZiAoZGV2LVxcdTAwM2VkZXYtXFx1MDAzZW9mX25vZGUpIHtcXG40MDEwOlxcdFxcdFxcdHJldCA9IG9mX2dldF9waHlfbW9kZShkZXYtXFx1MDAzZWRldi1cXHUwMDNlb2Zfbm9kZSwgXFx1MDAyNmludGVyZmFjZSk7XFxuNDAxMTpcXHRcXHRcXHRpZiAocmV0ID09IDApXFxuNDAxMjpcXHRcXHRcXHRcXHRkZXYtXFx1MDAzZWNvbXBhdF9pbnRlcmZhY2UgPSBpbnRlcmZhY2U7XFxuNDAxMzpcXHRcXHRcXHRwb3J0cyA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldi1cXHUwMDNlZGV2LVxcdTAwM2VvZl9ub2RlLCBcXFwiZXRoZXJuZXQtcG9ydHNcXFwiKTtcXG40MDE0OlxcdFxcdFxcdGlmICghcG9ydHMpXFxuNDAxNTpcXHRcXHRcXHRcXHRwb3J0cyA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldi1cXHUwMDNlZGV2LVxcdTAwM2VvZl9ub2RlLCBcXFwicG9ydHNcXFwiKTtcXG40MDE2OlxcdFxcdFxcdGlmIChwb3J0cykge1xcbjQwMTc6XFx0XFx0XFx0XFx0Zm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGVfc2NvcGVkKHBvcnRzLCBwb3J0KSB7XFxuNDAxODpcXHRcXHRcXHRcXHRcXHRpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIocG9ydCwgXFxcInJlZ1xcXCIsXFxuNDAxOTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnBvcnRfbnVtKSlcXG40MDIwOlxcdFxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjQwMjE6XFx0XFx0XFx0XFx0XFx0aWYgKCEoZGV2LVxcdTAwM2Vwb3J0X21hc2sgXFx1MDAyNiBCSVQocG9ydF9udW0pKSkge1xcbjQwMjI6XFx0XFx0XFx0XFx0XFx0XFx0b2Zfbm9kZV9wdXQocG9ydHMpO1xcbjQwMjM6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDAyNDpcXHRcXHRcXHRcXHRcXHR9XFxuNDAyNTpcXHRcXHRcXHRcXHRcXHRvZl9nZXRfcGh5X21vZGUocG9ydCxcXG40MDI2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZkZXYtXFx1MDAzZXBvcnRzW3BvcnRfbnVtXS5pbnRlcmZhY2UpO1xcbjQwMjc6XFx0XFxuNDAyODpcXHRcXHRcXHRcXHRcXHRrc3pfcGFyc2VfcmdtaWlfZGVsYXkoZGV2LCBwb3J0X251bSwgcG9ydCk7XFxuNDAyOTpcXHRcXHRcXHRcXHRcXHRkZXYtXFx1MDAzZXBvcnRzW3BvcnRfbnVtXS5maWJlciA9XFxuNDAzMDpcXHRcXHRcXHRcXHRcXHRcXHRvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wocG9ydCxcXG40MDMxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJtaWNyZWwsZmliZXItbW9kZVxcXCIpO1xcbjQwMzI6XFx0XFx0XFx0XFx0fVxcbjQwMzM6XFx0XFx0XFx0XFx0b2Zfbm9kZV9wdXQocG9ydHMpO1xcbjQwMzQ6XFx0XFx0XFx0fVxcbjQwMzU6XFx0XFx0XFx0ZGV2LVxcdTAwM2VzeW5jbGtvXzEyNSA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYtXFx1MDAzZWRldi1cXHUwMDNlb2Zfbm9kZSxcXG40MDM2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBcXFwibWljcm9jaGlwLHN5bmNsa28tMTI1XFxcIik7XFxuNDAzNzpcXHRcXHRcXHRkZXYtXFx1MDAzZXN5bmNsa29fZGlzYWJsZSA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYtXFx1MDAzZWRldi1cXHUwMDNlb2Zfbm9kZSxcXG40MDM4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFxcIm1pY3JvY2hpcCxzeW5jbGtvLWRpc2FibGVcXFwiKTtcXG40MDM5OlxcdFxcdFxcdGlmIChkZXYtXFx1MDAzZXN5bmNsa29fMTI1IFxcdTAwMjZcXHUwMDI2IGRldi1cXHUwMDNlc3luY2xrb19kaXNhYmxlKSB7XFxuNDA0MDpcXHRcXHRcXHRcXHRkZXZfZXJyKGRldi1cXHUwMDNlZGV2LCBcXFwiaW5jb25zaXN0ZW50IHN5bmNsa28gc2V0dGluZ3NcXFxcblxcXCIpO1xcbjQwNDE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDA0MjpcXHRcXHRcXHR9XFxuNDA0MzpcXHRcXG40MDQ0OlxcdFxcdFxcdGRldi1cXHUwMDNld2FrZXVwX3NvdXJjZSA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYtXFx1MDAzZWRldi1cXHUwMDNlb2Zfbm9kZSxcXG40MDQ1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcXCJ3YWtldXAtc291cmNlXFxcIik7XFxuNDA0NjpcXHRcXHRcXHRkZXYtXFx1MDAzZXBtZV9hY3RpdmVfaGlnaCA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYtXFx1MDAzZWRldi1cXHUwMDNlb2Zfbm9kZSxcXG40MDQ3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFxcIm1pY3JvY2hpcCxwbWUtYWN0aXZlLWhpZ2hcXFwiKTtcXG40MDQ4OlxcdFxcdH1cXG40MDQ5OlxcdFxcbjQwNTA6XFx0XFx0cmV0ID0gZHNhX3JlZ2lzdGVyX3N3aXRjaChkZXYtXFx1MDAzZWRzKTtcXG40MDUxOlxcdFxcdGlmIChyZXQpXFxuNDA1MjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjQwNTM6XFx0XFxuNDA1NDpcXHRcXHQvKiBSZWFkIE1JQiBjb3VudGVycyBldmVyeSAzMCBzZWNvbmRzIHRvIGF2b2lkIG92ZXJmbG93LiAqL1xcbjQwNTU6XFx0XFx0ZGV2LVxcdTAwM2VtaWJfcmVhZF9pbnRlcnZhbCA9IG1zZWNzX3RvX2ppZmZpZXMoNTAwMCk7XFxuNDA1NjpcXHRcXG40MDU3OlxcdFxcdC8qIFN0YXJ0IHRoZSBNSUIgdGltZXIuICovXFxuNDA1ODpcXHRcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNmRldi1cXHUwMDNlbWliX3JlYWQsIDApO1xcbjQwNTk6XFx0XFxuNDA2MDpcXHRcXHRyZXR1cm4gcmV0O1xcbjQwNjE6XFx0fVxcbjQwNjI6XFx0RVhQT1JUX1NZTUJPTChrc3pfc3dpdGNoX3JlZ2lzdGVyKTtcXG40MDYzOlxcdFxcbjQwNjQ6XFx0dm9pZCBrc3pfc3dpdGNoX3JlbW92ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbjQwNjU6XFx0e1xcbjQwNjY6XFx0XFx0LyogdGltZXIgc3RhcnRlZCAqL1xcbjQwNjc6XFx0XFx0aWYgKGRldi1cXHUwMDNlbWliX3JlYWRfaW50ZXJ2YWwpIHtcXG40MDY4OlxcdFxcdFxcdGRldi1cXHUwMDNlbWliX3JlYWRfaW50ZXJ2YWwgPSAwO1xcbjQwNjk6XFx0XFx0XFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZkZXYtXFx1MDAzZW1pYl9yZWFkKTtcXG40MDcwOlxcdFxcdH1cXG40MDcxOlxcdFxcbjQwNzI6XFx0XFx0ZHNhX3VucmVnaXN0ZXJfc3dpdGNoKGRldi1cXHUwMDNlZHMpO1xcbjQwNzM6XFx0fVxcbjQwNzQ6XFx0RVhQT1JUX1NZTUJPTChrc3pfc3dpdGNoX3JlbW92ZSk7XFxuNDA3NTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDA6NTUuNTQ5NDczNTgzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzODg1MDIxOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqQW5hbHl6aW5nIGtzelxcX3N3aXRjaFxcX2RldGVjdChkZXYpKipcblxuQWxyaWdodCwgc28gSSdtIHRyYWNpbmcgdGhyb3VnaCB0aGlzIGBrc3pfc3dpdGNoYCBkcml2ZXIsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGNhbGwgdG8gYGtzel9zd2l0Y2hfZGV0ZWN0KGRldilgIGluIGBrc3pfc3dpdGNoX3JlZ2lzdGVyYC4gTm93LCAqdGhhdCogcGlxdWVzIG15IGludGVyZXN0ISBDbGVhcmx5LCB0aGlzIGlzIHdoZXJlIHRoZSBzeXN0ZW0gaXMgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhbiBhY3R1YWwgc3dpdGNoIHByZXNlbnQgYW5kLCBpZiBzbywgd2hhdCBraW5kLiBMZXQncyBkaWcgaW50byB0aGUgYGtzel9zd2l0Y2hfZGV0ZWN0YCBmdW5jdGlvbiBpdHNlbGYgYW5kIHNlZSBob3cgaXQgZ29lcyBhYm91dCBkb2luZyB0aGF0IGRldGVjdGlvbi4gVGhpcyBpcyB0aGUgY3J1eCBvZiB0aGUgaW5pdGlhbGl6YXRpb24sIEkgYmV0LiBJJ20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiBwcm9iZSBzZXF1ZW5jZSwgcmVnaXN0ZXIgcmVhZHMuLi4gbWF5YmUgZXZlbiBzb21lIHZlbmRvci1zcGVjaWZpYyBtYWdpYyB0byBpZGVudGlmeSB0aGUgaGFyZHdhcmUuIExldCdzIHNlZSB3aGF0IHNlY3JldHMgaXQncyBoaWRpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNzY0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MDo1Ny45Mzc5Nzk0NDRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NzA2NDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtzel9zd2l0Y2hfZGV0ZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM9MjkxNj12b2lkIGtzel9waHlsaW5rX21hY19jb25maWcoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0yOTI3LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jOjI5Mjg6c3RhdGljIGludCBrc3pfc3dpdGNoX2RldGVjdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTI5Mjkte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM9MzkxNj1pbnQga3N6X3N3aXRjaF9yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMzk1My1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzozOTU0OlxcdHJldCA9IGtzel9zd2l0Y2hfZGV0ZWN0KGRldik7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMzk1NS1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MDo1Ny45ODY2OTI2OTFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM4MTU3NTE4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRoYXQgZnVuY3Rpb24sIGBrc3pfc3dpdGNoX2RldGVjdGAsIG5lc3RsZWQgd2l0aGluIGBkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uY2AuXG5cbioqRGl2aW5nIERlZXAgaW50byBLU1ogU3dpdGNoIERldGVjdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlzc2VjdCBga3N6X3N3aXRjaF9kZXRlY3RgIGZyb20gYGtzel9jb21tb24uY2AuIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VycyB0aGlzIHJvdXRpbmUsIHRoZSBrZXkgcmVnaXN0ZXJzIGl0J3MgcmVhZGluZyBhbmQgd3JpdGluZywgYW5kIHRoZSBsb2dpYyBiZWhpbmQgaG93IGl0IGRldGVybWluZXMgaWYgYSBNaWNyb2NoaXAgS1NaIHN3aXRjaCBpcyBwcmVzZW50IGFuZCBmdW5jdGlvbmluZyBjb3JyZWN0bHkuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhhcmR3YXJlLXNwZWNpZmljIHF1aXJrcyBvciB3b3JrYXJvdW5kcyBpbiB0aGlzIGxvdy1sZXZlbCBkcml2ZXIuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgcGFydCBvZiBhIGxhcmdlciBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGZyYW1ld29yaywgc28gSSBzaG91bGQgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgaGlnaGVyLWxldmVsIERTQSBjb21wb25lbnRzLiBJJ2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBlcnJvciBoYW5kbGluZyBhbmQgcmV0cnkgbWVjaGFuaXNtcy4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgcG90ZW50aWFsIGNoYWxsZW5nZXMg4oCTIHRoZSBuZWVkIHRvIGhhbmRsZSBkaWZmZXJlbnQgS1NaIHN3aXRjaCByZXZpc2lvbnMsIHZhcmlhdGlvbnMgaW4gUEhZIGNvbmZpZ3VyYXRpb25zLCBhbmQgbWF5YmUgZXZlbiBzb21lIGNsZXZlciByZWdpc3RlciBwcm9iaW5nIHRlY2huaXF1ZXMuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHNvIGxldCdzIHNlZSB3aGF0IHRoZXkndmUgY29tZSB1cCB3aXRoLiBMZXQncyBzZWUgaWYgdGhpcyBjb2RlIGlzIHdlbGwtd3JpdHRlbiwgZWZmaWNpZW50LCBhbmQgcm9idXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzI4NywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQxOjAwLjM2ODI3MTk1M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjkyOCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjkyODpcXHRzdGF0aWMgaW50IGtzel9zd2l0Y2hfZGV0ZWN0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuMjkyOTpcXHR7XFxuMjkzMDpcXHRcXHR1OCBpZDEsIGlkMiwgaWQ0O1xcbjI5MzE6XFx0XFx0dTE2IGlkMTY7XFxuMjkzMjpcXHRcXHR1MzIgaWQzMjtcXG4yOTMzOlxcdFxcdGludCByZXQ7XFxuMjkzNDpcXHRcXG4yOTM1OlxcdFxcdC8qIHJlYWQgY2hpcCBpZCAqL1xcbjI5MzY6XFx0XFx0cmV0ID0ga3N6X3JlYWQxNihkZXYsIFJFR19DSElQX0lEMCwgXFx1MDAyNmlkMTYpO1xcbjI5Mzc6XFx0XFx0aWYgKHJldClcXG4yOTM4OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjkzOTpcXHRcXG4yOTQwOlxcdFxcdGlkMSA9IEZJRUxEX0dFVChTV19GQU1JTFlfSURfTSwgaWQxNik7XFxuMjk0MTpcXHRcXHRpZDIgPSBGSUVMRF9HRVQoU1dfQ0hJUF9JRF9NLCBpZDE2KTtcXG4yOTQyOlxcdFxcbjI5NDM6XFx0XFx0c3dpdGNoIChpZDEpIHtcXG4yOTQ0OlxcdFxcdGNhc2UgS1NaODRfRkFNSUxZX0lEOlxcbjI5NDU6XFx0XFx0XFx0ZGV2LVxcdTAwM2VjaGlwX2lkID0gS1NaODQ2M19DSElQX0lEO1xcbjI5NDY6XFx0XFx0XFx0YnJlYWs7XFxuMjk0NzpcXHRcXHRjYXNlIEtTWjg3X0ZBTUlMWV9JRDpcXG4yOTQ4OlxcdFxcdFxcdGlmIChpZDIgPT0gS1NaODdfQ0hJUF9JRF85NSkge1xcbjI5NDk6XFx0XFx0XFx0XFx0dTggdmFsO1xcbjI5NTA6XFx0XFxuMjk1MTpcXHRcXHRcXHRcXHRkZXYtXFx1MDAzZWNoaXBfaWQgPSBLU1o4Nzk1X0NISVBfSUQ7XFxuMjk1MjpcXHRcXG4yOTUzOlxcdFxcdFxcdFxcdGtzel9yZWFkOChkZXYsIEtTWjhfUE9SVF9TVEFUVVNfMCwgXFx1MDAyNnZhbCk7XFxuMjk1NDpcXHRcXHRcXHRcXHRpZiAodmFsIFxcdTAwMjYgS1NaOF9QT1JUX0ZJQkVSX01PREUpXFxuMjk1NTpcXHRcXHRcXHRcXHRcXHRkZXYtXFx1MDAzZWNoaXBfaWQgPSBLU1o4NzY1X0NISVBfSUQ7XFxuMjk1NjpcXHRcXHRcXHR9IGVsc2UgaWYgKGlkMiA9PSBLU1o4N19DSElQX0lEXzk0KSB7XFxuMjk1NzpcXHRcXHRcXHRcXHRkZXYtXFx1MDAzZWNoaXBfaWQgPSBLU1o4Nzk0X0NISVBfSUQ7XFxuMjk1ODpcXHRcXHRcXHR9IGVsc2Uge1xcbjI5NTk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMjk2MDpcXHRcXHRcXHR9XFxuMjk2MTpcXHRcXHRcXHRicmVhaztcXG4yOTYyOlxcdFxcdGNhc2UgS1NaODhfRkFNSUxZX0lEOlxcbjI5NjM6XFx0XFx0XFx0aWYgKGlkMiA9PSBLU1o4OF9DSElQX0lEXzYzKVxcbjI5NjQ6XFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2VjaGlwX2lkID0gS1NaODhYM19DSElQX0lEO1xcbjI5NjU6XFx0XFx0XFx0ZWxzZVxcbjI5NjY6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMjk2NzpcXHRcXHRcXHRicmVhaztcXG4yOTY4OlxcdFxcdGNhc2UgS1NaODg5NV9GQU1JTFlfSUQ6XFxuMjk2OTpcXHRcXHRcXHRpZiAoaWQyID09IEtTWjg4OTVfQ0hJUF9JRF85NSB8fFxcbjI5NzA6XFx0XFx0XFx0ICAgIGlkMiA9PSBLU1o4ODk1X0NISVBfSURfOTVSKVxcbjI5NzE6XFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2VjaGlwX2lkID0gS1NaODg5NV9DSElQX0lEO1xcbjI5NzI6XFx0XFx0XFx0ZWxzZVxcbjI5NzM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMjk3NDpcXHRcXHRcXHRyZXQgPSBrc3pfcmVhZDgoZGV2LCBSRUdfS1NaODg2NF9DSElQX0lELCBcXHUwMDI2aWQ0KTtcXG4yOTc1OlxcdFxcdFxcdGlmIChyZXQpXFxuMjk3NjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjI5Nzc6XFx0XFx0XFx0aWYgKGlkNCBcXHUwMDI2IFNXX0tTWjg4NjQpXFxuMjk3ODpcXHRcXHRcXHRcXHRkZXYtXFx1MDAzZWNoaXBfaWQgPSBLU1o4ODY0X0NISVBfSUQ7XFxuMjk3OTpcXHRcXHRcXHRicmVhaztcXG4yOTgwOlxcdFxcdGRlZmF1bHQ6XFxuMjk4MTpcXHRcXHRcXHRyZXQgPSBrc3pfcmVhZDMyKGRldiwgUkVHX0NISVBfSUQwLCBcXHUwMDI2aWQzMik7XFxuMjk4MjpcXHRcXHRcXHRpZiAocmV0KVxcbjI5ODM6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4yOTg0OlxcdFxcbjI5ODU6XFx0XFx0XFx0ZGV2LVxcdTAwM2VjaGlwX3JldiA9IEZJRUxEX0dFVChTV19SRVZfSURfTSwgaWQzMik7XFxuMjk4NjpcXHRcXHRcXHRpZDMyIFxcdTAwMjY9IH4weEZGO1xcbjI5ODc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQxOjAwLjM2ODQ1MDUxM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MjUxOTY5Mjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBNaWNyb2NoaXAgS1NaL0xBTiBEU0EgU3dpdGNoIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIGBrc3pfc3dpdGNoX2RldGVjdGAgd2hpY2ggdXNlcyBgcmVnbWFwYCB0byByZWFkIHJlZ2lzdGVycyBvdmVyIEkyQy9TUEkvU01JLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBoYXJkd2FyZSBpbnRlcmFjdGlvbi4gSWYgdGhlcmUncyBubyBhY3R1YWwgS1NaIGhhcmR3YXJlIHByZXNlbnQsIGl0J2xsIGVpdGhlciByZXR1cm4gYSAwLzB4RkYgb3IgZXJyb3Igb3V0LiBUaGlzIGNvbmZpcm1zIGl0J3MgYSBkZWRpY2F0ZWQgZHJpdmVyIGZvciBNaWNyb2NoaXAgS1NaL0xBTiBldGhlcm5ldCBzd2l0Y2hlcyDigJMgS1NaODQ2MywgS1NaODU2MywgS1NaOTQ3NywgS1NaOTU2NywgTEFOOTM3eC5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgUUVNVSBlbXVsYXRlIGFueSBvZiB0aGVzZT8gTm9wZSwgUUVNVSBoYXMgcGxlbnR5IG9mIG5ldHdvcmsgZW11bGF0aW9ucywgYnV0IGl0IGRvZXNuJ3QgdG91Y2ggTWljcm9jaGlwIEtTWiBzd2l0Y2hlcy4gU28sIHdlIGFyZSBub3QgcnVubmluZyB0aGlzIGNvZGUgb24gUUVNVS5cblxuQWxyaWdodCwgdGltZSB0byBjaGVjayB0aGUgV29ydGhGdXp6aW5nIGd1aWRlbGluZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBwYXRjaCBpc24ndCBmYWxsaW5nIGludG8gdGhlIFwidW5mdXp6YWJsZVwiIGNhdGVnb3J5LiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIGNvZGUgaXNuJ3Qgc29tZXRoaW5nIHRoYXQgY2FuIG9ubHkgcnVuIGluIGEgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudC4gVGhlIGd1aWRlbGluZXMgc2F5IGl0IGlzIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIGl0IG1vZGlmaWVzIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXNwZWNpYWxseSBmb3IgaGFyZHdhcmUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUuIFRoaXMgaW5jbHVkZXMgdmVuZG9yLXNwZWNpZmljIHN3aXRjaCBkcml2ZXJzLlxuXG5Ob3csIGxldCdzIGJlIGFic29sdXRlbHkgc3VyZS4gQXJlIHRoZXJlIGFueSBzb2Z0d2FyZSBtb2NrIG9yIGR1bW15IERTQSBkZXZpY2VzIEkgY2FuIHVzZT8gTm8sIERTQSAoRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSkgc3dpdGNoZXMgYXJlIGhhcmR3YXJlIHNwZWNpZmljLCBhbmQsIHNwZWNpZmljYWxseSwgdGhlIGBkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2AgY29kZSBpcyBkZXNpZ25lZCBmb3IgZW1iZWRkZWQgRXRoZXJuZXQgc3dpdGNoIGNoaXBzLCBsaWtlIHRoZSBvbmVzIEkgbWVudGlvbmVkIGJlZm9yZS4gTm8gd2F5IHRvIHJ1biBpdCB3aXRob3V0IHRoZSBwaHlzaWNhbCBBU0lDLlxuXG5Pa2F5LCBsZXQncyByZXZpZXcgdGhlIGZpbGVzIHRoYXQgYXJlIGJlaW5nIHBhdGNoZWQ6IGBkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguY2AsIGBkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuY2AsIGBrc3pfY29tbW9uLmNgLCBga3N6X2NvbW1vbi5oYCwgYGtzel9wdHAuY2AsIGBrc3pfcHRwLmhgLCBga3N6X3B0cF9yZWcuaGAsIGFuZCBgbGFuOTM3eF9tYWluLmNgLiBUaGUgcGF0Y2ggYWRkcyBQVFAgcGVyLW91dCBzdXBwb3J0IGFuZCBwaW4gY2FwYWJpbGl0aWVzIGZvciBLU1o4NDYzIGFuZCBvdGhlciBNaWNyb2NoaXAgc3dpdGNoZXMgaW4gdGhlIERTQSBkcml2ZXIuXG5cbkFsbCB0aGUgbW9kaWZpZWQgY29kZSBpcyB3aXRoaW4gYGRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvYC4gVGhpcyBpcyB1bmRlbmlhYmx5IGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBjb2RlIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgTWljcm9jaGlwIHN3aXRjaCBoYXJkd2FyZSAoS1NaL0xBTiBzZXJpZXMpIGNvbm5lY3RlZCB2aWEgU1BJL0kyQy9TTUkuIFN0YW5kYXJkIFFFTVUvR0NFIGRvZXMgTk9UIGVtdWxhdGUgdGhpcy4gQmVjYXVzZSBvZiB0aGlzLCB0aGUgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXG5cblRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IGBXb3J0aEZ1enppbmdgIGlzIGBmYWxzZWAuXG5cblRoZSBhcmd1bWVudHMgZm9yIGBzZXQtcmVzdWx0c2Agd2lsbCBiZTpcbiogICBgV29ydGhGdXp6aW5nOiBmYWxzZWBcbiogICBgRW5hYmxlQ29uZmlnczogW11gXG4qICAgYEZvY3VzU3ltYm9sczogW11gXG4qICAgYFJlYXNvbmluZzogVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb2NoaXAgS1NaL0xBTiBzZXJpZXMgRFNBIHN3aXRjaCBkcml2ZXIgKHNwZWNpZmljYWxseSBQVFAgc3VwcG9ydCBmb3IgS1NaODQ2MyBhbmQgb3RoZXIgTWljcm9jaGlwIHN3aXRjaCBjaGlwcykuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBwaHlzaWNhbCBNaWNyb2NoaXAgaGFyZHdhcmUgY29ubmVjdGVkIHZpYSBTUEksIEkyQywgb3IgU01JLCB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuIFRodXMsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLmBcblxuTGV0J3MgbWFrZSB0aGF0IHRvb2wgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2MzgsIk91dHB1dFRva2VucyI6MTE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQxOjA3LjYyMDQyMzY4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3JvY2hpcCBLU1ovTEFOIHNlcmllcyBEU0EgRXRoZXJuZXQgc3dpdGNoIGRyaXZlcnMgKHNwZWNpZmljYWxseSBhZGRpbmcgUFRQIHBlcmlvZGljIG91dHB1dCBhbmQgcGluIGNhcGFiaWxpdGllcyBmb3IgS1NaODQ2MyBhbmQgcmVsYXRlZCBzd2l0Y2hlcykuIFRoZXNlIHN3aXRjaCBkcml2ZXJzIG9wZXJhdGUgb3ZlciBTUEksIEkyQywgb3IgU01JIGJ1c2VzIGFuZCByZXF1aXJlIHBoeXNpY2FsIE1pY3JvY2hpcCBzd2l0Y2ggQVNJQ3MgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoc3VjaCBhcyBRRU1VIG9yIEdDRSksIG1ha2luZyB0aGVzZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3JvY2hpcCBLU1ovTEFOIHNlcmllcyBEU0EgRXRoZXJuZXQgc3dpdGNoIGRyaXZlcnMgKHNwZWNpZmljYWxseSBhZGRpbmcgUFRQIHBlcmlvZGljIG91dHB1dCBhbmQgcGluIGNhcGFiaWxpdGllcyBmb3IgS1NaODQ2MyBhbmQgcmVsYXRlZCBzd2l0Y2hlcykuIFRoZXNlIHN3aXRjaCBkcml2ZXJzIG9wZXJhdGUgb3ZlciBTUEksIEkyQywgb3IgU01JIGJ1c2VzIGFuZCByZXF1aXJlIHBoeXNpY2FsIE1pY3JvY2hpcCBzd2l0Y2ggQVNJQ3MgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoc3VjaCBhcyBRRU1VIG9yIEdDRSksIG1ha2luZyB0aGVzZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDE6MDcuNjIwNDU4MjVaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowk2s4v[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 04:39:07 +0000 UTC FinishedAt: 2026-09-03 04:41:09 +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+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3JvY2hpcCBLU1ovTEFOIHNlcmllcyBEU0EgRXRoZXJuZXQgc3dpdGNoIGRyaXZlcnMgKHNwZWNpZmljYWxseSBhZGRpbmcgUFRQIHBlcmlvZGljIG91dHB1dCBhbmQgcGluIGNhcGFiaWxpdGllcyBmb3IgS1NaODQ2MyBhbmQgcmVsYXRlZCBzd2l0Y2hlcykuIFRoZXNlIHN3aXRjaCBkcml2ZXJzIG9wZXJhdGUgb3ZlciBTUEksIEkyQywgb3IgU01JIGJ1c2VzIGFuZCByZXF1aXJlIHBoeXNpY2FsIE1pY3JvY2hpcCBzd2l0Y2ggQVNJQ3MgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoc3VjaCBhcyBRRU1VIG9yIEdDRSksIG1ha2luZyB0aGVzZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGUzN2NjMTE0MTk2MmIyNzZhYjU4MDJlZjY4MjZhZjJjMzExZDk2YTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDA0OjQwOjI1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmNcbmluZGV4IDk0MWFlOWY2NmY3MGIuLjZiMDhiYjhmZWQ1YjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmNcbkBAIC0yNDc4LDYgJiM0MzsyNDc4LDcgQEAgc3RhdGljIGludCBrc3o4NDYzX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRnb3RvIGZyZWVfZ2lycTtcbiBcbiYjNDM7XHRcdGtzejg0NjNfcHRwX3NldF9jYXBzKGRzKTtcbiBcdFx0cmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7XG4gXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2s6ICVkXFxuXCYjMzQ7LFxuQEAgLTI3NzUsNiAmIzQzOzI3NzYsNyBAQCBzdGF0aWMgaW50IGtzejhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0fVxuIFxuIFx0aWYgKGRldi1cdTAwM2VpbmZvLVx1MDAzZXB0cF9jYXBhYmxlKSB7XG4mIzQzO1x0XHRrc3pfcHRwX3NldF9jYXBzKGRzKTtcbiBcdFx0cmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7XG4gXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2s6ICVkXFxuXCYjMzQ7LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmNcbmluZGV4IDNlZTk5NTU0NWM1NzkuLjcyNTI4YTUzYjY3ZDIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmNcbkBAIC0xNzgxLDYgJiM0MzsxNzgxLDcgQEAgc3RhdGljIGludCBrc3o5NDc3X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdH1cbiBcbiBcdGlmIChkZXYtXHUwMDNlaW5mby1cdTAwM2VwdHBfY2FwYWJsZSkge1xuJiM0MztcdFx0a3N6X3B0cF9zZXRfY2Fwcyhkcyk7XG4gXHRcdHJldCA9IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoZHMpO1xuIFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrOiAlZFxcblwmIzM0OyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jXG5pbmRleCAxYTlkNmY4M2EwMjMyLi45ZTIzNGFkNzFiNzIzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jXG5AQCAtMTE2MSw2ICYjNDM7MTE2MSw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcbiBcdFx0LnN1cHBvcnRzX21paSA9IHtmYWxzZSwgZmFsc2UsIHRydWV9LFxuIFx0XHQuc3VwcG9ydHNfcm1paSA9IHtmYWxzZSwgZmFsc2UsIHRydWV9LFxuIFx0XHQuaW50ZXJuYWxfcGh5ID0ge3RydWUsIHRydWUsIGZhbHNlfSxcbiYjNDM7XHRcdC5uX3BpbnMgPSAxMixcbiYjNDM7XHRcdC5uX3Blcl9vdXQgPSAxMixcbiBcdH0sXG4gXG4gXHRbS1NaODU2M10gPSB7XG5AQCAtMTE5NCw2ICYjNDM7MTE5Niw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcbiBcdFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcbiBcdFx0LndyX3RhYmxlID0gXHUwMDI2a3N6ODU2M19yZWdpc3Rlcl9zZXQsXG4gXHRcdC5yZF90YWJsZSA9IFx1MDAyNmtzejg1NjNfcmVnaXN0ZXJfc2V0LFxuJiM0MztcdFx0Lm5fcGlucyA9IDIsXG4mIzQzO1x0XHQubl9wZXJfb3V0ID0gMyxcbiBcdH0sXG4gXG4gXHRbS1NaODc5NV0gPSB7XG5AQCAtMTQxNCw2ICYjNDM7MTQxOCw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcbiBcdFx0LnNnbWlpX3BvcnQgPSA3LFxuIFx0XHQud3JfdGFibGUgPSBcdTAwMjZrc3o5NDc3X3JlZ2lzdGVyX3NldCxcbiBcdFx0LnJkX3RhYmxlID0gXHUwMDI2a3N6OTQ3N19yZWdpc3Rlcl9zZXQsXG4mIzQzO1x0XHQubl9waW5zID0gMixcbiYjNDM7XHRcdC5uX3Blcl9vdXQgPSAzLFxuIFx0fSxcbiBcbiBcdFtLU1o5ODk2XSA9IHtcbkBAIC0xNTQ0LDYgJiM0MzsxNTUwLDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xuIFx0XHQuaW50ZXJuYWxfcGh5ID0ge3RydWUsIHRydWUsIGZhbHNlfSxcbiBcdFx0LmdiaXRfY2FwYWJsZSA9IHt0cnVlLCB0cnVlLCB0cnVlfSxcbiBcdFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcbiYjNDM7XHRcdC5uX3BpbnMgPSAyLFxuJiM0MztcdFx0Lm5fcGVyX291dCA9IDMsXG4gXHR9LFxuIFxuIFx0W0tTWjg1NjddID0ge1xuQEAgLTE1ODEsNiAmIzQzOzE1ODksOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XG4gXHRcdC5nYml0X2NhcGFibGVcdD0ge2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSxcbiBcdFx0XHRcdCAgIHRydWUsIHRydWV9LFxuIFx0XHQucHRwX2NhcGFibGUgPSB0cnVlLFxuJiM0MztcdFx0Lm5fcGlucyA9IDIsXG4mIzQzO1x0XHQubl9wZXJfb3V0ID0gMyxcbiBcdH0sXG4gXG4gXHRbS1NaOTU2N10gPSB7XG5AQCAtMTYxNSw2ICYjNDM7MTYyNSw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcbiBcdFx0XHRcdCAgIHRydWUsIGZhbHNlLCBmYWxzZX0sXG4gXHRcdC5nYml0X2NhcGFibGVcdD0ge3RydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWV9LFxuIFx0XHQucHRwX2NhcGFibGUgPSB0cnVlLFxuJiM0MztcdFx0Lm5fcGlucyA9IDIsXG4mIzQzO1x0XHQubl9wZXJfb3V0ID0gMyxcbiBcdH0sXG4gXG4gXHRbTEFOOTM3MF0gPSB7XG5AQCAtMTY0Niw2ICYjNDM7MTY1OCw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcbiBcdFx0LnN1cHBvcnRzX3JnbWlpID0ge2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlfSxcbiBcdFx0LmludGVybmFsX3BoeSA9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZX0sXG4gXHRcdC5wdHBfY2FwYWJsZSA9IHRydWUsXG4mIzQzO1x0XHQubl9waW5zID0gMixcbiYjNDM7XHRcdC5uX3Blcl9vdXQgPSAzLFxuIFx0fSxcbiBcbiBcdFtMQU45MzcxXSA9IHtcbkBAIC0xNjc3LDYgJiM0MzsxNjkxLDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xuIFx0XHQuc3VwcG9ydHNfcmdtaWkgPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWV9LFxuIFx0XHQuaW50ZXJuYWxfcGh5ID0ge3RydWUsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZX0sXG4gXHRcdC5wdHBfY2FwYWJsZSA9IHRydWUsXG4mIzQzO1x0XHQubl9waW5zID0gMixcbiYjNDM7XHRcdC5uX3Blcl9vdXQgPSAzLFxuIFx0fSxcbiBcbiBcdFtMQU45MzcyXSA9IHtcbkBAIC0xNzEyLDYgJiM0MzsxNzI4LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xuIFx0XHQuaW50ZXJuYWxfcGh5XHQ9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLFxuIFx0XHRcdFx0ICAgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlfSxcbiBcdFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcbiYjNDM7XHRcdC5uX3BpbnMgPSAyLFxuJiM0MztcdFx0Lm5fcGVyX291dCA9IDMsXG4gXHR9LFxuIFxuIFx0W0xBTjkzNzNdID0ge1xuQEAgLTE3NDcsNiAmIzQzOzE3NjUsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XG4gXHRcdC5pbnRlcm5hbF9waHlcdD0ge3RydWUsIHRydWUsIHRydWUsIGZhbHNlLFxuIFx0XHRcdFx0ICAgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlfSxcbiBcdFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcbiYjNDM7XHRcdC5uX3BpbnMgPSAyLFxuJiM0MztcdFx0Lm5fcGVyX291dCA9IDMsXG4gXHR9LFxuIFxuIFx0W0xBTjkzNzRdID0ge1xuQEAgLTE3ODIsNiAmIzQzOzE4MDIsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XG4gXHRcdC5pbnRlcm5hbF9waHlcdD0ge3RydWUsIHRydWUsIHRydWUsIHRydWUsXG4gXHRcdFx0XHQgICBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWV9LFxuIFx0XHQucHRwX2NhcGFibGUgPSB0cnVlLFxuJiM0MztcdFx0Lm5fcGlucyA9IDIsXG4mIzQzO1x0XHQubl9wZXJfb3V0ID0gMyxcbiBcdH0sXG4gXG4gXHRbTEFOOTY0Nl0gPSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaFxuaW5kZXggY2JlOTg0OTQ1NzhjMy4uMTE1NWIzOTM1MGMyYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaFxuQEAgLTEzOSw2ICYjNDM7MTM5LDggQEAgc3RydWN0IGtzel9jaGlwX2RhdGEge1xuIFx0dTggc2dtaWlfcG9ydDtcbiBcdGNvbnN0IHN0cnVjdCByZWdtYXBfYWNjZXNzX3RhYmxlICp3cl90YWJsZTtcbiBcdGNvbnN0IHN0cnVjdCByZWdtYXBfYWNjZXNzX3RhYmxlICpyZF90YWJsZTtcbiYjNDM7XHRjb25zdCB1OCBuX3BpbnM7XG4mIzQzO1x0Y29uc3QgdTggbl9wZXJfb3V0O1xuIH07XG4gXG4gc3RydWN0IGtzel9pcnEge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmNcbmluZGV4IDM5Y2M3MGQ2NTkwMGIuLmQzMzAzNDg5MmE4ZjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmNcbkBAIC0yNiw2ICYjNDM7MjYsNyBAQFxuICAqL1xuICNkZWZpbmUgS1NaX01BWF9EUklGVF9DT1JSIDYyNDk5OTlcbiAjZGVmaW5lIEtTWl9NQVhfUFVMU0VfV0lEVEggMTI1MDAwMDAwTExcbiYjNDM7I2RlZmluZSBLU1o4NDYzX01BWF9QVUxTRV9XSURUSCA1MDAwMDBMTFxuIFxuICNkZWZpbmUgS1NaX1BUUF9JTkNfTlMgNDBVTEwgIC8qIEhXIGNsb2NrIGlzIGluY3JlbWVudGVkIGV2ZXJ5IDQwIG5zIChieSA0MCkgKi9cbiAjZGVmaW5lIEtTWl9QVFBfU1VCTlNfQklUUyAzMlxuQEAgLTYzLDYgJiM0Mzs2NCwxNyBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X2dwaW8oc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiBcdFx0XHQgTEVEX1NSQ19QVFBfR1BJT18xIHwgTEVEX1NSQ19QVFBfR1BJT18yKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfdG91X3Jlc2V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHVuaXQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrc3pfcm13MTYoZGV2LCBLU1o4NDYzX1RPVV9TV19SU1QsIEJJVCh1bml0KSwgQklUKHVuaXQpKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGtzel9ybXcxNihkZXYsIEtTWjg0NjNfVE9VX1NXX1JTVCwgQklUKHVuaXQpLCAwKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGtzel9wdHBfdG91X3Jlc2V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHVuaXQpXG4ge1xuIFx0dTMyIGRhdGE7XG5AQCAtODYsNyAmIzQzOzk4LDcgQEAgc3RhdGljIGludCBrc3pfcHRwX3RvdV9yZXNldChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCB1bml0KVxuIFx0XHRcdCAwKTtcbiB9XG4gXG4tc3RhdGljIGludCBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkodTY0IHB1bHNlX25zKVxuJiM0MztzdGF0aWMgaW50IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeSh1NjQgcHVsc2VfbnMsIHUzMiBtYXNrKVxuIHtcbiBcdHUzMiBkYXRhO1xuIFxuQEAgLTk0LDcgJiM0MzsxMDYsNyBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeSh1NjQgcHVsc2VfbnMpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0ZGF0YSA9IChwdWxzZV9ucyAvIDgpO1xuLVx0aWYgKCFGSUVMRF9GSVQoVFJJR19QVUxTRV9XSURUSF9NLCBkYXRhKSlcbiYjNDM7XHRpZiAoKG1hc2sgXHUwMDI2IGRhdGEpICE9IGRhdGEpXG4gXHRcdHJldHVybiAtRVJBTkdFO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTIwLDYgJiM0MzsxMzIsMjggQEAgc3RhdGljIGludCBrc3pfcHRwX3RvdV90YXJnZXRfdGltZV9zZXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBrc3o4NDYzX3B0cF90b3Vfc3RhcnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdClcbiYjNDM7e1xuJiM0MztcdHUxNiBkYXRhO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGtzel9ybXcxNihkZXYsIEtTWjg0NjNfVE9VX0VOLCBCSVQodW5pdCksIEJJVCh1bml0KSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGtzel9yZWFkMTYoZGV2LCBLU1o4NDYzX1RPVV9BQ1RJVkUsIFx1MDAyNmRhdGEpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIShkYXRhIFx1MDAyNiBCSVQodW5pdCkpKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBUcmlnZ2VyIHVuaXQlZCBlcnJvciFcXG5cJiMzNDssIF9fZnVuY19fLFxuJiM0MztcdFx0XHR1bml0KTtcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBrc3pfcHRwX3RvdV9zdGFydChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCB1bml0KVxuIHtcbiBcdHUzMiBkYXRhO1xuQEAgLTE0Nyw2ICYjNDM7MTgxLDU2IEBAIHN0YXRpYyBpbnQga3N6X3B0cF90b3Vfc3RhcnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBrc3o4NDYzX3B0cF9jb25maWd1cmVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0XHR1MzIgY3ljbGVfd2lkdGhfbnMsIHUzMiBwdWxzZV93aWR0aF9ucyxcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCB0aW1lc3BlYzY0IGNvbnN0ICp0YXJnZXRfdGltZSxcbiYjNDM7XHRcdFx0XHRcdHU4IGluZGV4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHB0cF9waW5fZGVzYyAqcGluID0gXHUwMDI2ZGV2LVx1MDAzZXB0cF9kYXRhLnBpbl9jb25maWdbaW5kZXhdO1xuJiM0MztcdHUxNiBjZmdfYmFzZSA9IEtTWjg0NjNfVFJJRzFfQ0ZHICYjNDM7IEtTWjg0NjNfVFJJR05fQ0ZHX1NJWkUgKiBwaW4tXHUwMDNlY2hhbjtcbiYjNDM7XHR1MTYgZGF0YTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBIYXJkd2FyZSBoYXMgb25seSAzMiBiaXQgKi9cbiYjNDM7XHRpZiAoKHRhcmdldF90aW1lLVx1MDAzZXR2X3NlYyBcdTAwMjYgMHhmZmZmZmZmZikgIT0gdGFyZ2V0X3RpbWUtXHUwMDNldHZfc2VjKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGRhdGEgPSBLU1o4NDYzX05PVElGWV9CSVQgfFxuJiM0MztcdCAgICAgICBGSUVMRF9QUkVQKEtTWjg0NjNfUEFUVEVSTl9NLCBUUklHX1BPU19QRVJJT0QpIHxcbiYjNDM7XHQgICAgICAgcGluLVx1MDAzZWluZGV4O1xuJiM0MztcdHJldCA9IGtzel93cml0ZTE2KGRldiwgY2ZnX2Jhc2UgJiM0MzsgS1NaODQ2M19QQVRURVJOX09GRiwgZGF0YSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGtzel93cml0ZTMyKGRldiwgY2ZnX2Jhc2UgJiM0MzsgS1NaODQ2M19DWUNMRV9XSURUSF9PRkYsXG4mIzQzO1x0XHRcdCAgY3ljbGVfd2lkdGhfbnMpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBTZXQgY3ljbGUgY291bnQgMCAtIEluZmluaXRlICovXG4mIzQzO1x0cmV0ID0ga3N6X3dyaXRlMTYoZGV2LCBjZmdfYmFzZSAmIzQzOyBLU1o4NDYzX0NZQ0xFX0NOVF9PRkYsIDApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBLU1o4NDYzIHVzZXMgYSA4IG5zIHVuaXQgdmFsdWUgdG8gY29tcHV0ZSB0aGUgcHVsc2Ugd2lkdGggKi9cbiYjNDM7XHRkYXRhID0gKHB1bHNlX3dpZHRoX25zIC8gOCk7XG4mIzQzO1x0cmV0ID0ga3N6X3dyaXRlMTYoZGV2LCBjZmdfYmFzZSAmIzQzOyBLU1o4NDYzX1BVTFNFX1dJRFRIX09GRiwgZGF0YSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGtzel93cml0ZTMyKGRldiwgY2ZnX2Jhc2UgJiM0MzsgS1NaODQ2M19UQVJHRVRfTlNFQyxcbiYjNDM7XHRcdFx0ICB0YXJnZXRfdGltZS1cdTAwM2V0dl9uc2VjKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCBjZmdfYmFzZSAmIzQzOyBLU1o4NDYzX1RBUkdFVF9TRUMsXG4mIzQzO1x0XHRcdCAgdGFyZ2V0X3RpbWUtXHUwMDNldHZfc2VjKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBrc3pfcHRwX2NvbmZpZ3VyZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCAgICB1MzIgY3ljbGVfd2lkdGhfbnMsIHUzMiBwdWxzZV93aWR0aF9ucyxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBjb25zdCAqdGFyZ2V0X3RpbWUsXG5AQCAtMTgzLDE3ICYjNDM7MjY3LDExIEBAIHN0YXRpYyBpbnQga3N6X3B0cF9jb25maWd1cmVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBrc3pfcHRwX2VuYWJsZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbi1cdFx0XHRcdCBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LFxuLVx0XHRcdFx0IGludCBvbilcbiYjNDM7c3RhdGljIGludCBrc3pfcHRwX2dldF9waW4oc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0ICAgc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCBjb25zdCAqcmVxdWVzdClcbiB7XG4gXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IFx1MDAyNmRldi1cdTAwM2VwdHBfZGF0YTtcbi1cdHU2NCByZXFfcHVsc2Vfd2lkdGhfbnM7XG4tXHR1NjQgY3ljbGVfd2lkdGhfbnM7XG4tXHR1NjQgcHVsc2Vfd2lkdGhfbnM7XG4tXHRpbnQgcGluID0gMDtcbi1cdHUzMiBkYXRhMzI7XG4tXHRpbnQgcmV0O1xuJiM0MztcdGludCBwaW47XG4gXG4gXHRpZiAocmVxdWVzdC1cdTAwM2VmbGFncyBcdTAwMjYgflBUUF9QRVJPVVRfRFVUWV9DWUNMRSlcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuQEAgLTIwNiw2ICYjNDM7Mjg0LDExNCBAQCBzdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuIFx0aWYgKHBpbiBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0cmV0dXJuIHBpbjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBrc3pfcHRwX2NvbXB1dGVfcGVyb3V0X2N5Y2xlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LFxuJiM0MztcdFx0XHRcdFx0dTY0ICpjeWNsZV93aWR0aF9ucylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gXHUwMDI2ZGV2LVx1MDAzZXB0cF9kYXRhO1xuJiM0MztcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2VwZXJvdXRfdGFyZ2V0X3RpbWVfZmlyc3QudHZfc2VjICA9IHJlcXVlc3QtXHUwMDNlc3RhcnQuc2VjO1xuJiM0MztcdHB0cF9kYXRhLVx1MDAzZXBlcm91dF90YXJnZXRfdGltZV9maXJzdC50dl9uc2VjID0gcmVxdWVzdC1cdTAwM2VzdGFydC5uc2VjO1xuJiM0MztcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2VwZXJvdXRfcGVyaW9kLnR2X3NlYyA9IHJlcXVlc3QtXHUwMDNlcGVyaW9kLnNlYztcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2VwZXJvdXRfcGVyaW9kLnR2X25zZWMgPSByZXF1ZXN0LVx1MDAzZXBlcmlvZC5uc2VjO1xuJiM0MztcbiYjNDM7XHQqY3ljbGVfd2lkdGhfbnMgPSB0aW1lc3BlYzY0X3RvX25zKFx1MDAyNnB0cF9kYXRhLVx1MDAzZXBlcm91dF9wZXJpb2QpO1xuJiM0MztcdGlmICgoKmN5Y2xlX3dpZHRoX25zIFx1MDAyNiBUUklHX0NZQ0xFX1dJRFRIX00pICE9ICpjeWNsZV93aWR0aF9ucykge1xuJiM0MztcdFx0KmN5Y2xlX3dpZHRoX25zID0gMDtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1NjQga3N6X3B0cF9jb21wdXRlX3Blcm91dF9wdWxzZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCBjb25zdCAqcmVxdWVzdCxcbiYjNDM7XHRcdFx0XHRcdHU2NCBtYXhfcHVsc2Vfd2lkdGgpXG4mIzQzO3tcbiYjNDM7XHR1NjQgcmVxX3B1bHNlX3dpZHRoX25zO1xuJiM0MztcbiYjNDM7XHRpZiAocmVxdWVzdC1cdTAwM2VmbGFncyBcdTAwMjYgUFRQX1BFUk9VVF9EVVRZX0NZQ0xFKVxuJiM0MztcdFx0cmV0dXJuIHJlcXVlc3QtXHUwMDNlb24uc2VjICogTlNFQ19QRVJfU0VDICYjNDM7XHRyZXF1ZXN0LVx1MDAzZW9uLm5zZWM7XG4mIzQzO1xuJiM0MztcdC8qIFVzZSBhIGR1dHkgY3ljbGUgb2YgNTAlLiBNYXhpbXVtIHB1bHNlIHdpZHRoIHN1cHBvcnRlZCBieSB0aGVcbiYjNDM7XHQgKiBoYXJkd2FyZSBpcyBhIGxpdHRsZSBiaXQgbW9yZSB0aGFuIDEyNSBtcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXFfcHVsc2Vfd2lkdGhfbnMgPSAocmVxdWVzdC1cdTAwM2VwZXJpb2Quc2VjICogTlNFQ19QRVJfU0VDICYjNDM7XG4mIzQzO1x0XHRcdCAgICAgIHJlcXVlc3QtXHUwMDNlcGVyaW9kLm5zZWMpIC8gMjtcbiYjNDM7XHRyZXR1cm4gbWluX3QodTY0LCByZXFfcHVsc2Vfd2lkdGhfbnMsIG1heF9wdWxzZV93aWR0aCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfZW5hYmxlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCBjb25zdCAqcmVxdWVzdCxcbiYjNDM7XHRcdFx0XHQgICAgIGludCBvbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gXHUwMDI2ZGV2LVx1MDAzZXB0cF9kYXRhO1xuJiM0MztcdHU2NCBjeWNsZV93aWR0aF9ucztcbiYjNDM7XHR1NjQgcHVsc2Vfd2lkdGhfbnM7XG4mIzQzO1x0aW50IHBpbjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwaW4gPSBrc3pfcHRwX2dldF9waW4oZGV2LCByZXF1ZXN0KTtcbiYjNDM7XHRpZiAocGluIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHBpbjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0ga3N6ODQ2M19wdHBfdG91X3Jlc2V0KGRldiwgcmVxdWVzdC1cdTAwM2VpbmRleCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghb24pIHtcbiYjNDM7XHRcdHB0cF9kYXRhLVx1MDAzZXRvdV9tb2RlID0gS1NaX1BUUF9UT1VfSURMRTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XHRyZXQgPSBrc3pfcHRwX2NvbXB1dGVfcGVyb3V0X2N5Y2xlKGRldiwgcmVxdWVzdCwgXHUwMDI2Y3ljbGVfd2lkdGhfbnMpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHB1bHNlX3dpZHRoX25zID0ga3N6X3B0cF9jb21wdXRlX3Blcm91dF9wdWxzZShkZXYsIHJlcXVlc3QsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIEtTWjg0NjNfTUFYX1BVTFNFX1dJRFRIKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0ga3N6X3B0cF90b3VfcHVsc2VfdmVyaWZ5KHB1bHNlX3dpZHRoX25zLFxuJiM0MztcdFx0XHRcdCAgICAgICBLU1o4NDYzX1RSSUdfUFVMU0VfV0lEVEhfTSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGtzejg0NjNfcHRwX2NvbmZpZ3VyZV9wZXJvdXQoZGV2LCBjeWNsZV93aWR0aF9ucywgcHVsc2Vfd2lkdGhfbnMsXG4mIzQzO1x0XHRcdFx0XHQgICBcdTAwMjZwdHBfZGF0YS1cdTAwM2VwZXJvdXRfdGFyZ2V0X3RpbWVfZmlyc3QsXG4mIzQzO1x0XHRcdFx0XHQgICBwaW4pO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrc3pfcHRwX3RvdV9ncGlvKGRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGtzejg0NjNfcHRwX3RvdV9zdGFydChkZXYsIHJlcXVlc3QtXHUwMDNlaW5kZXgpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2V0b3VfbW9kZSA9IEtTWl9QVFBfVE9VX1BFUk9VVDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQga3N6X3B0cF9lbmFibGVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgY29uc3QgKnJlcXVlc3QsXG4mIzQzO1x0XHRcdFx0IGludCBvbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gXHUwMDI2ZGV2LVx1MDAzZXB0cF9kYXRhO1xuJiM0MztcdHU2NCBjeWNsZV93aWR0aF9ucztcbiYjNDM7XHR1NjQgcHVsc2Vfd2lkdGhfbnM7XG4mIzQzO1x0aW50IHBpbiA9IDA7XG4mIzQzO1x0dTMyIGRhdGEzMjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwaW4gPSBrc3pfcHRwX2dldF9waW4oZGV2LCByZXF1ZXN0KTtcbiYjNDM7XHRpZiAocGluIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHBpbjtcbiYjNDM7XG4gXHRkYXRhMzIgPSBGSUVMRF9QUkVQKFBUUF9HUElPX0lOREVYLCBwaW4pIHxcbiBcdFx0IEZJRUxEX1BSRVAoUFRQX1RPVV9JTkRFWCwgcmVxdWVzdC1cdTAwM2VpbmRleCk7XG4gXHRyZXQgPSBrc3pfcm13MzIoZGV2LCBSRUdfUFRQX1VOSVRfSU5ERVhfXzQsXG5AQCAtMjIxLDMxICYjNDM7NDA3LDEzIEBAIHN0YXRpYyBpbnQga3N6X3B0cF9lbmFibGVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4gXHRcdHB0cF9kYXRhLVx1MDAzZXRvdV9tb2RlID0gS1NaX1BUUF9UT1VfSURMRTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4mIzQzO1x0cmV0ID0ga3N6X3B0cF9jb21wdXRlX3Blcm91dF9jeWNsZShkZXYsIHJlcXVlc3QsIFx1MDAyNmN5Y2xlX3dpZHRoX25zKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRwdWxzZV93aWR0aF9ucyA9IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfcHVsc2UoZGV2LCByZXF1ZXN0LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICBLU1pfTUFYX1BVTFNFX1dJRFRIKTtcbiBcbi1cdHB0cF9kYXRhLVx1MDAzZXBlcm91dF90YXJnZXRfdGltZV9maXJzdC50dl9zZWMgID0gcmVxdWVzdC1cdTAwM2VzdGFydC5zZWM7XG4tXHRwdHBfZGF0YS1cdTAwM2VwZXJvdXRfdGFyZ2V0X3RpbWVfZmlyc3QudHZfbnNlYyA9IHJlcXVlc3QtXHUwMDNlc3RhcnQubnNlYztcbi1cbi1cdHB0cF9kYXRhLVx1MDAzZXBlcm91dF9wZXJpb2QudHZfc2VjID0gcmVxdWVzdC1cdTAwM2VwZXJpb2Quc2VjO1xuLVx0cHRwX2RhdGEtXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9uc2VjID0gcmVxdWVzdC1cdTAwM2VwZXJpb2QubnNlYztcbi1cbi1cdGN5Y2xlX3dpZHRoX25zID0gdGltZXNwZWM2NF90b19ucyhcdTAwMjZwdHBfZGF0YS1cdTAwM2VwZXJvdXRfcGVyaW9kKTtcbi1cdGlmICgoY3ljbGVfd2lkdGhfbnMgXHUwMDI2IFRSSUdfQ1lDTEVfV0lEVEhfTSkgIT0gY3ljbGVfd2lkdGhfbnMpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuLVx0aWYgKHJlcXVlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IFBUUF9QRVJPVVRfRFVUWV9DWUNMRSkge1xuLVx0XHRwdWxzZV93aWR0aF9ucyA9IHJlcXVlc3QtXHUwMDNlb24uc2VjICogTlNFQ19QRVJfU0VDICYjNDM7XG4tXHRcdFx0cmVxdWVzdC1cdTAwM2Vvbi5uc2VjO1xuLVx0fSBlbHNlIHtcbi1cdFx0LyogVXNlIGEgZHV0eSBjeWNsZSBvZiA1MCUuIE1heGltdW0gcHVsc2Ugd2lkdGggc3VwcG9ydGVkIGJ5IHRoZVxuLVx0XHQgKiBoYXJkd2FyZSBpcyBhIGxpdHRsZSBiaXQgbW9yZSB0aGFuIDEyNSBtcy5cbi1cdFx0ICovXG4tXHRcdHJlcV9wdWxzZV93aWR0aF9ucyA9IChyZXF1ZXN0LVx1MDAzZXBlcmlvZC5zZWMgKiBOU0VDX1BFUl9TRUMgJiM0Mztcbi1cdFx0XHRcdCAgICAgIHJlcXVlc3QtXHUwMDNlcGVyaW9kLm5zZWMpIC8gMjtcbi1cdFx0cHVsc2Vfd2lkdGhfbnMgPSBtaW5fdCh1NjQsIHJlcV9wdWxzZV93aWR0aF9ucyxcbi1cdFx0XHRcdCAgICAgICBLU1pfTUFYX1BVTFNFX1dJRFRIKTtcbi1cdH1cbi1cbi1cdHJldCA9IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeShwdWxzZV93aWR0aF9ucyk7XG4mIzQzO1x0cmV0ID0ga3N6X3B0cF90b3VfcHVsc2VfdmVyaWZ5KHB1bHNlX3dpZHRoX25zLCBUUklHX1BVTFNFX1dJRFRIX00pO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC03NTYsMTEgJiM0Mzs5MjQsMTEgQEAgc3RhdGljIGludCBrc3pfcHRwX2dldHRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQga3N6X3B0cF9yZXN0YXJ0X3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuJiM0MztzdGF0aWMgaW50IGtzel9wdHBfcHJlcGFyZV9yZXN0YXJ0X3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0ICpyZXF1ZXN0KVxuIHtcbiBcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gXHUwMDI2ZGV2LVx1MDAzZXB0cF9kYXRhO1xuIFx0czY0IG5vd19ucywgZmlyc3RfbnMsIHBlcmlvZF9ucywgbmV4dF9ucztcbi1cdHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgcmVxdWVzdDtcbiBcdHN0cnVjdCB0aW1lc3BlYzY0IG5leHQ7XG4gXHRzdHJ1Y3QgdGltZXNwZWM2NCBub3c7XG4gXHR1bnNpZ25lZCBpbnQgY291bnQ7XG5AQCAtNzkxLDQwICYjNDM7OTU5LDExMSBAQCBzdGF0aWMgaW50IGtzel9wdHBfcmVzdGFydF9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiBcbiBcdC8qIFJlc3RhcnQgcGVyaW9kaWMgb3V0cHV0IHNpZ25hbCAqL1xuIFx0bmV4dCA9IG5zX3RvX3RpbWVzcGVjNjQobmV4dF9ucyk7XG4tXHRyZXF1ZXN0LnN0YXJ0LnNlYyAgPSBuZXh0LnR2X3NlYztcbi1cdHJlcXVlc3Quc3RhcnQubnNlYyA9IG5leHQudHZfbnNlYztcbi1cdHJlcXVlc3QucGVyaW9kLnNlYyAgPSBwdHBfZGF0YS1cdTAwM2VwZXJvdXRfcGVyaW9kLnR2X3NlYztcbi1cdHJlcXVlc3QucGVyaW9kLm5zZWMgPSBwdHBfZGF0YS1cdTAwM2VwZXJvdXRfcGVyaW9kLnR2X25zZWM7XG4tXHRyZXF1ZXN0LmluZGV4ID0gMDtcbi1cdHJlcXVlc3QuZmxhZ3MgPSAwO1xuJiM0MztcdHJlcXVlc3QtXHUwMDNlc3RhcnQuc2VjICA9IG5leHQudHZfc2VjO1xuJiM0MztcdHJlcXVlc3QtXHUwMDNlc3RhcnQubnNlYyA9IG5leHQudHZfbnNlYztcbiYjNDM7XHRyZXF1ZXN0LVx1MDAzZXBlcmlvZC5zZWMgID0gcHRwX2RhdGEtXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9zZWM7XG4mIzQzO1x0cmVxdWVzdC1cdTAwM2VwZXJpb2QubnNlYyA9IHB0cF9kYXRhLVx1MDAzZXBlcm91dF9wZXJpb2QudHZfbnNlYztcbiYjNDM7XHRyZXF1ZXN0LVx1MDAzZWluZGV4ID0gMDtcbiYjNDM7XHRyZXF1ZXN0LVx1MDAzZWZsYWdzID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQga3N6X3B0cF9yZXN0YXJ0X3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCByZXF1ZXN0O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGtzel9wdHBfcHJlcGFyZV9yZXN0YXJ0X3Blcm91dChkZXYsIFx1MDAyNnJlcXVlc3QpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0dXJuIGtzel9wdHBfZW5hYmxlX3Blcm91dChkZXYsIFx1MDAyNnJlcXVlc3QsIDEpO1xuIH1cbiBcbi1zdGF0aWMgaW50IGtzel9wdHBfc2V0dGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcbi1cdFx0XHQgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4mIzQzO3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfcmVzdGFydF9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiB7XG4tXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTtcbi1cdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTtcbi1cdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZXJlZ3M7XG4mIzQzO1x0c3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCByZXF1ZXN0O1xuIFx0aW50IHJldDtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2cHRwX2RhdGEtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmV0ID0ga3N6X3B0cF9wcmVwYXJlX3Jlc3RhcnRfcGVyb3V0KGRldiwgXHUwMDI2cmVxdWVzdCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBrc3o4NDYzX3B0cF9lbmFibGVfcGVyb3V0KGRldiwgXHUwMDI2cmVxdWVzdCwgMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19rc3pfcHRwX3NldHRpbWUoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCB1MTYgKnJlZ3MgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2VyZWdzO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHQvKiBXcml0ZSB0byBzaGFkb3cgcmVnaXN0ZXJzIGFuZCBMb2FkIFBUUCBjbG9jayAqL1xuIFx0cmV0ID0ga3N6X3dyaXRlMTYoZGV2LCByZWdzW1BUUF9SVENfU1VCX05BTk9TRUNdLCBQVFBfUlRDXzBOUyk7XG4gXHRpZiAocmV0KVxuLVx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXG4gXHRyZXQgPSBrc3pfd3JpdGUzMihkZXYsIHJlZ3NbUFRQX1JUQ19OQU5PU0VDXSwgdHMtXHUwMDNldHZfbnNlYyk7XG4gXHRpZiAocmV0KVxuLVx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXG4gXHRyZXQgPSBrc3pfd3JpdGUzMihkZXYsIHJlZ3NbUFRQX1JUQ19TRUNdLCB0cy1cdTAwM2V0dl9zZWMpO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0ga3N6X3JtdzE2KGRldiwgcmVnc1tQVFBfQ0xLX0NUUkxdLCBQVFBfTE9BRF9USU1FLCBQVFBfTE9BRF9USU1FKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfc2V0dGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcbiYjNDM7XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gcHRwX2NhcHNfdG9fZGF0YShwdHApO1xuJiM0MztcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX2tzel9wdHBfc2V0dGltZShkZXYsIHRzKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byB1bmxvY2s7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAocHRwX2RhdGEtXHUwMDNldG91X21vZGUpIHtcbiYjNDM7XHRjYXNlIEtTWl9QVFBfVE9VX0lETEU6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0Y2FzZSBLU1pfUFRQX1RPVV9QRVJPVVQ6XG4mIzQzO1x0XHRyZXQgPSBrc3o4NDYzX3B0cF9yZXN0YXJ0X3Blcm91dChkZXYpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2cHRwX2RhdGEtXHUwMDNlY2xvY2tfbG9jayk7XG4mIzQzO1x0cHRwX2RhdGEtXHUwMDNlY2xvY2tfdGltZSA9ICp0cztcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZwdHBfZGF0YS1cdTAwM2VjbG9ja19sb2NrKTtcbiYjNDM7XG4mIzQzO3VubG9jazpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHRwX2RhdGEtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQga3N6X3B0cF9zZXR0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxuJiM0MztcdFx0XHQgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTtcbiYjNDM7XHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwdHBfZGF0YS1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19rc3pfcHRwX3NldHRpbWUoZGV2LCB0cyk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIHVubG9jaztcbiBcbkBAIC04OTAsMTggJiM0MzsxMTI5LDEzIEBAIHN0YXRpYyBpbnQga3N6X3B0cF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBsb25nIHNjYWxlZF9wcG0pXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgaW50IGtzel9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKVxuJiM0MztzdGF0aWMgaW50IF9fa3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHM2NCBkZWx0YSlcbiB7XG4tXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTtcbi1cdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTtcbi1cdHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhNjQgPSBuc190b190aW1lc3BlYzY0KGRlbHRhKTtcbiBcdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZXJlZ3M7XG4gXHRzMzIgc2VjLCBuc2VjO1xuIFx0dTE2IGRhdGExNjtcbiBcdGludCByZXQ7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuLVxuIFx0LyogZG8gbm90IHVzZSBuc190b190aW1lc3BlYzY0KCksXG4gXHQgKiBib3RoIHNlYyBhbmQgbnNlYyBhcmUgc3VidHJhY3RlZCBieSBod1xuIFx0ICovXG5AQCAtOTA5LDE1ICYjNDM7MTE0MywxNSBAQCBzdGF0aWMgaW50IGtzel9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKVxuIFxuIFx0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfTkFOT1NFQ10sIGFicyhuc2VjKSk7XG4gXHRpZiAocmV0KVxuLVx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXG4gXHRyZXQgPSBrc3pfd3JpdGUzMihkZXYsIHJlZ3NbUFRQX1JUQ19TRUNdLCBhYnMoc2VjKSk7XG4gXHRpZiAocmV0KVxuLVx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXG4gXHRyZXQgPSBrc3pfcmVhZDE2KGRldiwgcmVnc1tQVFBfQ0xLX0NUUkxdLCBcdTAwMjZkYXRhMTYpO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0ZGF0YTE2IHw9IFBUUF9TVEVQX0FESjtcbiBcbkBAIC05MjgsNiAmIzQzOzExNjIsNTYgQEAgc3RhdGljIGludCBrc3pfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHM2NCBkZWx0YSlcbiBcdFx0ZGF0YTE2IHw9IFBUUF9TVEVQX0RJUjtcbiBcbiBcdHJldCA9IGtzel93cml0ZTE2KGRldiwgcmVnc1tQVFBfQ0xLX0NUUkxdLCBkYXRhMTYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBrc3o4NDYzX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTtcbiYjNDM7XHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XG4mIzQzO1x0c3RydWN0IHRpbWVzcGVjNjQgZGVsdGE2NCA9IG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHRwX2RhdGEtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fa3N6X3B0cF9hZGp0aW1lKGRldiwgZGVsdGEpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChwdHBfZGF0YS1cdTAwM2V0b3VfbW9kZSkge1xuJiM0MztcdGNhc2UgS1NaX1BUUF9UT1VfSURMRTpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIEtTWl9QVFBfVE9VX1BFUk9VVDpcbiYjNDM7XHRcdHJldCA9IGtzejg0NjNfcHRwX3Jlc3RhcnRfcGVyb3V0KGRldik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZwdHBfZGF0YS1cdTAwM2VjbG9ja19sb2NrKTtcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2VjbG9ja190aW1lID0gdGltZXNwZWM2NF9hZGQocHRwX2RhdGEtXHUwMDNlY2xvY2tfdGltZSwgZGVsdGE2NCk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cHRwX2RhdGEtXHUwMDNlY2xvY2tfbG9jayk7XG4mIzQzO1xuJiM0Mzt1bmxvY2s6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQga3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTtcbiYjNDM7XHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XG4mIzQzO1x0c3RydWN0IHRpbWVzcGVjNjQgZGVsdGE2NCA9IG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHRwX2RhdGEtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fa3N6X3B0cF9hZGp0aW1lKGRldiwgZGVsdGEpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byB1bmxvY2s7XG4gXG5AQCAtOTUyLDYgJiM0MzsxMjM2LDI2IEBAIHN0YXRpYyBpbnQga3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBrc3o4NDYzX3B0cF9lbmFibGUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcmVxLCBpbnQgb24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTtcbiYjNDM7XHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChyZXEtXHUwMDNldHlwZSkge1xuJiM0MztcdGNhc2UgUFRQX0NMS19SRVFfUEVST1VUOlxuJiM0MztcdFx0bXV0ZXhfbG9jayhcdTAwMjZwdHBfZGF0YS1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHJldCA9IGtzejg0NjNfcHRwX2VuYWJsZV9wZXJvdXQoZGV2LCBcdTAwMjZyZXEtXHUwMDNlcGVyb3V0LCBvbik7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2cHRwX2RhdGEtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxuIFx0XHRcdCAgc3RydWN0IHB0cF9jbG9ja19yZXF1ZXN0ICpyZXEsIGludCBvbilcbiB7XG5AQCAtMTAyOCwxNyAmIzQzOzEzMzIsMzMgQEAgc3RhdGljIGludCBrc3pfcHRwX3N0YXJ0X2Nsb2NrKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4taW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuJiM0Mzt2b2lkIGtzejg0NjNfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuJiM0MztcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhO1xuJiM0MztcbiYjNDM7XHRwdHBfZGF0YSA9IFx1MDAyNmRldi1cdTAwM2VwdHBfZGF0YTtcbiYjNDM7XG4mIzQzO1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy5vd25lclx0XHQ9IFRISVNfTU9EVUxFO1xuJiM0MztcdHNucHJpbnRmKHB0cF9kYXRhLVx1MDAzZWNhcHMubmFtZSwgMTYsIFwmIzM0O01pY3JvY2hpcCBDbG9ja1wmIzM0Oyk7XG4mIzQzO1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy5tYXhfYWRqXHRcdD0gS1NaX01BWF9EUklGVF9DT1JSO1xuJiM0MztcdHB0cF9kYXRhLVx1MDAzZWNhcHMuZ2V0dGltZTY0XHQ9IGtzel9wdHBfZ2V0dGltZTtcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2VjYXBzLnNldHRpbWU2NFx0PSBrc3o4NDYzX3B0cF9zZXR0aW1lO1xuJiM0MztcdHB0cF9kYXRhLVx1MDAzZWNhcHMuYWRqZmluZVx0XHQ9IGtzel9wdHBfYWRqZmluZTtcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2VjYXBzLmFkanRpbWVcdFx0PSBrc3o4NDYzX3B0cF9hZGp0aW1lO1xuJiM0MztcdHB0cF9kYXRhLVx1MDAzZWNhcHMuZG9fYXV4X3dvcmtcdD0ga3N6X3B0cF9kb19hdXhfd29yaztcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2VjYXBzLmVuYWJsZVx0XHQ9IGtzejg0NjNfcHRwX2VuYWJsZTtcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2VjYXBzLnZlcmlmeVx0XHQ9IGtzel9wdHBfdmVyaWZ5X3BpbjtcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2VjYXBzLm5fcGluc1x0XHQ9IGRldi1cdTAwM2VpbmZvLVx1MDAzZW5fcGlucztcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2VjYXBzLm5fcGVyX291dFx0PSBkZXYtXHUwMDNlaW5mby1cdTAwM2VuX3Blcl9vdXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQga3N6X3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4ge1xuIFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4tXHRjb25zdCB1MTYgKnJlZ3MgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2VyZWdzO1xuIFx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGE7XG4tXHRpbnQgcmV0O1xuLVx0dTggaTtcbiBcbiBcdHB0cF9kYXRhID0gXHUwMDI2ZGV2LVx1MDAzZXB0cF9kYXRhO1xuLVx0bXV0ZXhfaW5pdChcdTAwMjZwdHBfZGF0YS1cdTAwM2Vsb2NrKTtcbi1cdHNwaW5fbG9ja19pbml0KFx1MDAyNnB0cF9kYXRhLVx1MDAzZWNsb2NrX2xvY2spO1xuIFxuIFx0cHRwX2RhdGEtXHUwMDNlY2Fwcy5vd25lclx0XHQ9IFRISVNfTU9EVUxFO1xuIFx0c25wcmludGYocHRwX2RhdGEtXHUwMDNlY2Fwcy5uYW1lLCAxNiwgXCYjMzQ7TWljcm9jaGlwIENsb2NrXCYjMzQ7KTtcbkBAIC0xMDUwLDE0ICYjNDM7MTM3MCwyNyBAQCBpbnQga3N6X3B0cF9jbG9ja19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRwdHBfZGF0YS1cdTAwM2VjYXBzLmRvX2F1eF93b3JrXHQ9IGtzel9wdHBfZG9fYXV4X3dvcms7XG4gXHRwdHBfZGF0YS1cdTAwM2VjYXBzLmVuYWJsZVx0XHQ9IGtzel9wdHBfZW5hYmxlO1xuIFx0cHRwX2RhdGEtXHUwMDNlY2Fwcy52ZXJpZnlcdFx0PSBrc3pfcHRwX3ZlcmlmeV9waW47XG4tXHRwdHBfZGF0YS1cdTAwM2VjYXBzLm5fcGluc1x0XHQ9IEtTWl9QVFBfTl9HUElPO1xuLVx0cHRwX2RhdGEtXHUwMDNlY2Fwcy5uX3Blcl9vdXRcdD0gMztcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2VjYXBzLm5fcGluc1x0XHQ9IGRldi1cdTAwM2VpbmZvLVx1MDAzZW5fcGlucztcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2VjYXBzLm5fcGVyX291dFx0PSBkZXYtXHUwMDNlaW5mby1cdTAwM2VuX3Blcl9vdXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuJiM0MztcdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZXJlZ3M7XG4mIzQzO1x0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGE7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHR1OCBpO1xuJiM0MztcbiYjNDM7XHRwdHBfZGF0YSA9IFx1MDAyNmRldi1cdTAwM2VwdHBfZGF0YTtcbiYjNDM7XHRtdXRleF9pbml0KFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNnB0cF9kYXRhLVx1MDAzZWNsb2NrX2xvY2spO1xuIFxuIFx0cmV0ID0ga3N6X3B0cF9zdGFydF9jbG9jayhkZXYpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEtTWl9QVFBfTl9HUElPOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldi1cdTAwM2VpbmZvLVx1MDAzZW5fcGluczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0c3RydWN0IHB0cF9waW5fZGVzYyAqcHRwX3BpbiA9IFx1MDAyNnB0cF9kYXRhLVx1MDAzZXBpbl9jb25maWdbaV07XG4gXG4gXHRcdHNucHJpbnRmKHB0cF9waW4tXHUwMDNlbmFtZSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oXG5pbmRleCA3MDY3ZWM5YmQxZTZmLi45MjU4OWNmMzczYWMyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oXG5AQCAtMTIsNyAmIzQzOzEyLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiBcbi0jZGVmaW5lIEtTWl9QVFBfTl9HUElPXHRcdDJcbiYjNDM7I2RlZmluZSBLU1pfUFRQX05fR1BJT1x0XHQxMlxuIFxuIGVudW0ga3N6X3B0cF90b3VfbW9kZSB7XG4gXHRLU1pfUFRQX1RPVV9JRExFLFxuQEAgLTMzLDYgJiM0MzszMyw4IEBAIHN0cnVjdCBrc3pfcHRwX2RhdGEge1xuIFx0c3RydWN0IHRpbWVzcGVjNjQgcGVyb3V0X3BlcmlvZDtcbiB9O1xuIFxuJiM0Mzt2b2lkIGtzel9wdHBfc2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbiYjNDM7dm9pZCBrc3o4NDYzX3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xuIGludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XG4gXG4gdm9pZCBrc3pfcHRwX2Nsb2NrX3VucmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbkBAIC02NSw2ICYjNDM7NjcsNyBAQCBzdHJ1Y3Qga3N6X3B0cF9kYXRhIHtcbiBcdHN0cnVjdCBtdXRleCBsb2NrO1xuIH07XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBrc3pfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykgeyB9XG4gc3RhdGljIGlubGluZSBpbnQga3N6X3B0cF9jbG9ja19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4ge1xuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwX3JlZy5oIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwX3JlZy5oXG5pbmRleCA2NWVhODU3N2FmNzU1Li4xNmYxMTdmYTVkNDliIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwX3JlZy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmhcbkBAIC01MSw2ICYjNDM7NTEsMjIgQEBcbiBcbiAjZGVmaW5lIFJFR19QVFBfVU5JVF9JTkRFWF9fNFx0XHQweDA1MjBcbiBcbiYjNDM7I2RlZmluZSBLU1o4NDYzX1RPVV9BQ1RJVkVcdFx0MHgyMDJcbiYjNDM7I2RlZmluZSBLU1o4NDYzX1RPVV9FTlx0XHRcdDB4MjA2XG4mIzQzOyNkZWZpbmUgS1NaODQ2M19UT1VfU1dfUlNUXHRcdDB4MjA4XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEtTWjg0NjNfVFJJR05fQ0ZHX1NJWkVcdFx0MHgyMFxuJiM0MzsjZGVmaW5lIEtTWjg0NjNfVFJJRzFfQ0ZHXHRcdDB4MjIwXG4mIzQzOyNkZWZpbmUgS1NaODQ2M19UQVJHRVRfTlNFQ1x0XHQweDAwMFxuJiM0MzsjZGVmaW5lIEtTWjg0NjNfVEFSR0VUX1NFQ1x0XHQweDAwNFxuJiM0MzsjZGVmaW5lIEtTWjg0NjNfUEFUVEVSTl9PRkZcdFx0MHgwMDhcbiYjNDM7I2RlZmluZSBLU1o4NDYzX05PVElGWV9CSVRcdFx0QklUKDgpXG4mIzQzOyNkZWZpbmUgS1NaODQ2M19QQVRURVJOX01cdFx0R0VOTUFTSyg2LCA0KVxuJiM0MzsjZGVmaW5lIEtTWjg0NjNfUFVMU0VfV0lEVEhfT0ZGXHRcdDB4MDBBXG4mIzQzOyNkZWZpbmUgS1NaODQ2M19UUklHX1BVTFNFX1dJRFRIX01cdEdFTk1BU0soMTUsIDApXG4mIzQzOyNkZWZpbmUgS1NaODQ2M19DWUNMRV9XSURUSF9PRkZcdFx0MHgwMENcbiYjNDM7I2RlZmluZSBLU1o4NDYzX0NZQ0xFX0NOVF9PRkZcdFx0MHgwMTBcbiYjNDM7XG4gI2RlZmluZSBQVFBfR1BJT19JTkRFWFx0XHRcdEdFTk1BU0soMTksIDE2KVxuICNkZWZpbmUgUFRQX1RTSV9JTkRFWFx0XHRcdEJJVCg4KVxuICNkZWZpbmUgUFRQX1RPVV9JTkRFWFx0XHRcdEdFTk1BU0soMSwgMClcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uY1xuaW5kZXggODZjZTNhODY3MDVmOS4uM2EyMDkxMjJmYzdkYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmNcbkBAIC04NjcsNiAmIzQzOzg2Nyw3IEBAIHN0YXRpYyBpbnQgbGFuOTM3eF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRcdH1cbiBcdH1cbiBcbiYjNDM7XHRrc3pfcHRwX3NldF9jYXBzKGRzKTtcbiBcdHJldCA9IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoZHMpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2s6ICVkXFxuXCYjMzQ7LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb2NoaXAgS1NaL0xBTiBzZXJpZXMgRFNBIEV0aGVybmV0IHN3aXRjaCBkcml2ZXJzIChzcGVjaWZpY2FsbHkgYWRkaW5nIFBUUCBwZXJpb2RpYyBvdXRwdXQgYW5kIHBpbiBjYXBhYmlsaXRpZXMgZm9yIEtTWjg0NjMgYW5kIHJlbGF0ZWQgc3dpdGNoZXMpLiBUaGVzZSBzd2l0Y2ggZHJpdmVycyBvcGVyYXRlIG92ZXIgU1BJLCBJMkMsIG9yIFNNSSBidXNlcyBhbmQgcmVxdWlyZSBwaHlzaWNhbCBNaWNyb2NoaXAgc3dpdGNoIEFTSUNzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKHN1Y2ggYXMgUUVNVSBvciBHQ0UpLCBtYWtpbmcgdGhlc2UgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlMzdjYzExNDE5NjJiMjc2YWI1ODAyZWY2ODI2YWYyYzMxMWQ5NmE5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAwNDo0MDoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMKaW5kZXggOTQxYWU5ZjY2ZjcwYi4uNmIwOGJiOGZlZDViNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMKQEAgLTI0NzgsNiAmIzQzOzI0NzgsNyBAQCBzdGF0aWMgaW50IGtzejg0NjNfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCQlpZiAocmV0KQogCQkJZ290byBmcmVlX2dpcnE7CiAKJiM0MzsJCWtzejg0NjNfcHRwX3NldF9jYXBzKGRzKTsKIAkJcmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7CiAJCWlmIChyZXQpIHsKIAkJCWRldl9lcnIoZGV2LSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jazogJWRcbiYjMzQ7LApAQCAtMjc3NSw2ICYjNDM7Mjc3Niw3IEBAIHN0YXRpYyBpbnQga3N6OF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAJfQogCiAJaWYgKGRldi0mZ3Q7aW5mby0mZ3Q7cHRwX2NhcGFibGUpIHsKJiM0MzsJCWtzel9wdHBfc2V0X2NhcHMoZHMpOwogCQlyZXQgPSBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKGRzKTsKIAkJaWYgKHJldCkgewogCQkJZGV2X2VycihkZXYtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrOiAlZFxuJiMzNDssCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jCmluZGV4IDNlZTk5NTU0NWM1NzkuLjcyNTI4YTUzYjY3ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jCkBAIC0xNzgxLDYgJiM0MzsxNzgxLDcgQEAgc3RhdGljIGludCBrc3o5NDc3X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIAl9CiAKIAlpZiAoZGV2LSZndDtpbmZvLSZndDtwdHBfY2FwYWJsZSkgewomIzQzOwkJa3N6X3B0cF9zZXRfY2Fwcyhkcyk7CiAJCXJldCA9IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoZHMpOwogCQlpZiAocmV0KSB7CiAJCQlkZXZfZXJyKGRldi0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2s6ICVkXG4mIzM0OywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMKaW5kZXggMWE5ZDZmODNhMDIzMi4uOWUyMzRhZDcxYjcyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMKQEAgLTExNjEsNiAmIzQzOzExNjEsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7CiAJCS5zdXBwb3J0c19taWkgPSB7ZmFsc2UsIGZhbHNlLCB0cnVlfSwKIAkJLnN1cHBvcnRzX3JtaWkgPSB7ZmFsc2UsIGZhbHNlLCB0cnVlfSwKIAkJLmludGVybmFsX3BoeSA9IHt0cnVlLCB0cnVlLCBmYWxzZX0sCiYjNDM7CQkubl9waW5zID0gMTIsCiYjNDM7CQkubl9wZXJfb3V0ID0gMTIsCiAJfSwKIAogCVtLU1o4NTYzXSA9IHsKQEAgLTExOTQsNiAmIzQzOzExOTYsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7CiAJCS5wdHBfY2FwYWJsZSA9IHRydWUsCiAJCS53cl90YWJsZSA9ICZhbXA7a3N6ODU2M19yZWdpc3Rlcl9zZXQsCiAJCS5yZF90YWJsZSA9ICZhbXA7a3N6ODU2M19yZWdpc3Rlcl9zZXQsCiYjNDM7CQkubl9waW5zID0gMiwKJiM0MzsJCS5uX3Blcl9vdXQgPSAzLAogCX0sCiAKIAlbS1NaODc5NV0gPSB7CkBAIC0xNDE0LDYgJiM0MzsxNDE4LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0gewogCQkuc2dtaWlfcG9ydCA9IDcsCiAJCS53cl90YWJsZSA9ICZhbXA7a3N6OTQ3N19yZWdpc3Rlcl9zZXQsCiAJCS5yZF90YWJsZSA9ICZhbXA7a3N6OTQ3N19yZWdpc3Rlcl9zZXQsCiYjNDM7CQkubl9waW5zID0gMiwKJiM0MzsJCS5uX3Blcl9vdXQgPSAzLAogCX0sCiAKIAlbS1NaOTg5Nl0gPSB7CkBAIC0xNTQ0LDYgJiM0MzsxNTUwLDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0gewogCQkuaW50ZXJuYWxfcGh5ID0ge3RydWUsIHRydWUsIGZhbHNlfSwKIAkJLmdiaXRfY2FwYWJsZSA9IHt0cnVlLCB0cnVlLCB0cnVlfSwKIAkJLnB0cF9jYXBhYmxlID0gdHJ1ZSwKJiM0MzsJCS5uX3BpbnMgPSAyLAomIzQzOwkJLm5fcGVyX291dCA9IDMsCiAJfSwKIAogCVtLU1o4NTY3XSA9IHsKQEAgLTE1ODEsNiAmIzQzOzE1ODksOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7CiAJCS5nYml0X2NhcGFibGUJPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAogCQkJCSAgIHRydWUsIHRydWV9LAogCQkucHRwX2NhcGFibGUgPSB0cnVlLAomIzQzOwkJLm5fcGlucyA9IDIsCiYjNDM7CQkubl9wZXJfb3V0ID0gMywKIAl9LAogCiAJW0tTWjk1NjddID0gewpAQCAtMTYxNSw2ICYjNDM7MTYyNSw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHsKIAkJCQkgICB0cnVlLCBmYWxzZSwgZmFsc2V9LAogCQkuZ2JpdF9jYXBhYmxlCT0ge3RydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWV9LAogCQkucHRwX2NhcGFibGUgPSB0cnVlLAomIzQzOwkJLm5fcGlucyA9IDIsCiYjNDM7CQkubl9wZXJfb3V0ID0gMywKIAl9LAogCiAJW0xBTjkzNzBdID0gewpAQCAtMTY0Niw2ICYjNDM7MTY1OCw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHsKIAkJLnN1cHBvcnRzX3JnbWlpID0ge2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlfSwKIAkJLmludGVybmFsX3BoeSA9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZX0sCiAJCS5wdHBfY2FwYWJsZSA9IHRydWUsCiYjNDM7CQkubl9waW5zID0gMiwKJiM0MzsJCS5uX3Blcl9vdXQgPSAzLAogCX0sCiAKIAlbTEFOOTM3MV0gPSB7CkBAIC0xNjc3LDYgJiM0MzsxNjkxLDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0gewogCQkuc3VwcG9ydHNfcmdtaWkgPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWV9LAogCQkuaW50ZXJuYWxfcGh5ID0ge3RydWUsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZX0sCiAJCS5wdHBfY2FwYWJsZSA9IHRydWUsCiYjNDM7CQkubl9waW5zID0gMiwKJiM0MzsJCS5uX3Blcl9vdXQgPSAzLAogCX0sCiAKIAlbTEFOOTM3Ml0gPSB7CkBAIC0xNzEyLDYgJiM0MzsxNzI4LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0gewogCQkuaW50ZXJuYWxfcGh5CT0ge3RydWUsIHRydWUsIHRydWUsIHRydWUsCiAJCQkJICAgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlfSwKIAkJLnB0cF9jYXBhYmxlID0gdHJ1ZSwKJiM0MzsJCS5uX3BpbnMgPSAyLAomIzQzOwkJLm5fcGVyX291dCA9IDMsCiAJfSwKIAogCVtMQU45MzczXSA9IHsKQEAgLTE3NDcsNiAmIzQzOzE3NjUsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7CiAJCS5pbnRlcm5hbF9waHkJPSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsCiAJCQkJICAgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlfSwKIAkJLnB0cF9jYXBhYmxlID0gdHJ1ZSwKJiM0MzsJCS5uX3BpbnMgPSAyLAomIzQzOwkJLm5fcGVyX291dCA9IDMsCiAJfSwKIAogCVtMQU45Mzc0XSA9IHsKQEAgLTE3ODIsNiAmIzQzOzE4MDIsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7CiAJCS5pbnRlcm5hbF9waHkJPSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwKIAkJCQkgICBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWV9LAogCQkucHRwX2NhcGFibGUgPSB0cnVlLAomIzQzOwkJLm5fcGlucyA9IDIsCiYjNDM7CQkubl9wZXJfb3V0ID0gMywKIAl9LAogCiAJW0xBTjk2NDZdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaAppbmRleCBjYmU5ODQ5NDU3OGMzLi4xMTU1YjM5MzUwYzJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaApAQCAtMTM5LDYgJiM0MzsxMzksOCBAQCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSB7CiAJdTggc2dtaWlfcG9ydDsKIAljb25zdCBzdHJ1Y3QgcmVnbWFwX2FjY2Vzc190YWJsZSAqd3JfdGFibGU7CiAJY29uc3Qgc3RydWN0IHJlZ21hcF9hY2Nlc3NfdGFibGUgKnJkX3RhYmxlOwomIzQzOwljb25zdCB1OCBuX3BpbnM7CiYjNDM7CWNvbnN0IHU4IG5fcGVyX291dDsKIH07CiAKIHN0cnVjdCBrc3pfaXJxIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMKaW5kZXggMzljYzcwZDY1OTAwYi4uZDMzMDM0ODkyYThmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMKQEAgLTI2LDYgJiM0MzsyNiw3IEBACiAgKi8KICNkZWZpbmUgS1NaX01BWF9EUklGVF9DT1JSIDYyNDk5OTkKICNkZWZpbmUgS1NaX01BWF9QVUxTRV9XSURUSCAxMjUwMDAwMDBMTAomIzQzOyNkZWZpbmUgS1NaODQ2M19NQVhfUFVMU0VfV0lEVEggNTAwMDAwTEwKIAogI2RlZmluZSBLU1pfUFRQX0lOQ19OUyA0MFVMTCAgLyogSFcgY2xvY2sgaXMgaW5jcmVtZW50ZWQgZXZlcnkgNDAgbnMgKGJ5IDQwKSAqLwogI2RlZmluZSBLU1pfUFRQX1NVQk5TX0JJVFMgMzIKQEAgLTYzLDYgJiM0Mzs2NCwxNyBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X2dwaW8oc3RydWN0IGtzel9kZXZpY2UgKmRldikKIAkJCSBMRURfU1JDX1BUUF9HUElPXzEgfCBMRURfU1JDX1BUUF9HUElPXzIpOwogfQogCiYjNDM7c3RhdGljIGludCBrc3o4NDYzX3B0cF90b3VfcmVzZXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGtzel9ybXcxNihkZXYsIEtTWjg0NjNfVE9VX1NXX1JTVCwgQklUKHVuaXQpLCBCSVQodW5pdCkpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGtzel9ybXcxNihkZXYsIEtTWjg0NjNfVE9VX1NXX1JTVCwgQklUKHVuaXQpLCAwKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGtzel9wdHBfdG91X3Jlc2V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHVuaXQpCiB7CiAJdTMyIGRhdGE7CkBAIC04Niw3ICYjNDM7OTgsNyBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X3Jlc2V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHVuaXQpCiAJCQkgMCk7CiB9CiAKLXN0YXRpYyBpbnQga3N6X3B0cF90b3VfcHVsc2VfdmVyaWZ5KHU2NCBwdWxzZV9ucykKJiM0MztzdGF0aWMgaW50IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeSh1NjQgcHVsc2VfbnMsIHUzMiBtYXNrKQogewogCXUzMiBkYXRhOwogCkBAIC05NCw3ICYjNDM7MTA2LDcgQEAgc3RhdGljIGludCBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkodTY0IHB1bHNlX25zKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWRhdGEgPSAocHVsc2VfbnMgLyA4KTsKLQlpZiAoIUZJRUxEX0ZJVChUUklHX1BVTFNFX1dJRFRIX00sIGRhdGEpKQomIzQzOwlpZiAoKG1hc2sgJmFtcDsgZGF0YSkgIT0gZGF0YSkKIAkJcmV0dXJuIC1FUkFOR0U7CiAKIAlyZXR1cm4gMDsKQEAgLTEyMCw2ICYjNDM7MTMyLDI4IEBAIHN0YXRpYyBpbnQga3N6X3B0cF90b3VfdGFyZ2V0X3RpbWVfc2V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IGtzejg0NjNfcHRwX3RvdV9zdGFydChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCB1bml0KQomIzQzO3sKJiM0MzsJdTE2IGRhdGE7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGtzel9ybXcxNihkZXYsIEtTWjg0NjNfVE9VX0VOLCBCSVQodW5pdCksIEJJVCh1bml0KSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBrc3pfcmVhZDE2KGRldiwgS1NaODQ2M19UT1VfQUNUSVZFLCAmYW1wO2RhdGEpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKCEoZGF0YSAmYW1wOyBCSVQodW5pdCkpKSB7CiYjNDM7CQlkZXZfZXJyKGRldi0mZ3Q7ZGV2LCAmIzM0OyVzOiBUcmlnZ2VyIHVuaXQlZCBlcnJvciFcbiYjMzQ7LCBfX2Z1bmNfXywKJiM0MzsJCQl1bml0KTsKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQga3N6X3B0cF90b3Vfc3RhcnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdCkKIHsKIAl1MzIgZGF0YTsKQEAgLTE0Nyw2ICYjNDM7MTgxLDU2IEBAIHN0YXRpYyBpbnQga3N6X3B0cF90b3Vfc3RhcnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfY29uZmlndXJlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAomIzQzOwkJCQkJdTMyIGN5Y2xlX3dpZHRoX25zLCB1MzIgcHVsc2Vfd2lkdGhfbnMsCiYjNDM7CQkJCQlzdHJ1Y3QgdGltZXNwZWM2NCBjb25zdCAqdGFyZ2V0X3RpbWUsCiYjNDM7CQkJCQl1OCBpbmRleCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwdHBfcGluX2Rlc2MgKnBpbiA9ICZhbXA7ZGV2LSZndDtwdHBfZGF0YS5waW5fY29uZmlnW2luZGV4XTsKJiM0MzsJdTE2IGNmZ19iYXNlID0gS1NaODQ2M19UUklHMV9DRkcgJiM0MzsgS1NaODQ2M19UUklHTl9DRkdfU0laRSAqIHBpbi0mZ3Q7Y2hhbjsKJiM0MzsJdTE2IGRhdGE7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qIEhhcmR3YXJlIGhhcyBvbmx5IDMyIGJpdCAqLwomIzQzOwlpZiAoKHRhcmdldF90aW1lLSZndDt0dl9zZWMgJmFtcDsgMHhmZmZmZmZmZikgIT0gdGFyZ2V0X3RpbWUtJmd0O3R2X3NlYykKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlkYXRhID0gS1NaODQ2M19OT1RJRllfQklUIHwKJiM0MzsJICAgICAgIEZJRUxEX1BSRVAoS1NaODQ2M19QQVRURVJOX00sIFRSSUdfUE9TX1BFUklPRCkgfAomIzQzOwkgICAgICAgcGluLSZndDtpbmRleDsKJiM0MzsJcmV0ID0ga3N6X3dyaXRlMTYoZGV2LCBjZmdfYmFzZSAmIzQzOyBLU1o4NDYzX1BBVFRFUk5fT0ZGLCBkYXRhKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGtzel93cml0ZTMyKGRldiwgY2ZnX2Jhc2UgJiM0MzsgS1NaODQ2M19DWUNMRV9XSURUSF9PRkYsCiYjNDM7CQkJICBjeWNsZV93aWR0aF9ucyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBTZXQgY3ljbGUgY291bnQgMCAtIEluZmluaXRlICovCiYjNDM7CXJldCA9IGtzel93cml0ZTE2KGRldiwgY2ZnX2Jhc2UgJiM0MzsgS1NaODQ2M19DWUNMRV9DTlRfT0ZGLCAwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIEtTWjg0NjMgdXNlcyBhIDggbnMgdW5pdCB2YWx1ZSB0byBjb21wdXRlIHRoZSBwdWxzZSB3aWR0aCAqLwomIzQzOwlkYXRhID0gKHB1bHNlX3dpZHRoX25zIC8gOCk7CiYjNDM7CXJldCA9IGtzel93cml0ZTE2KGRldiwgY2ZnX2Jhc2UgJiM0MzsgS1NaODQ2M19QVUxTRV9XSURUSF9PRkYsIGRhdGEpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0ga3N6X3dyaXRlMzIoZGV2LCBjZmdfYmFzZSAmIzQzOyBLU1o4NDYzX1RBUkdFVF9OU0VDLAomIzQzOwkJCSAgdGFyZ2V0X3RpbWUtJmd0O3R2X25zZWMpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0ga3N6X3dyaXRlMzIoZGV2LCBjZmdfYmFzZSAmIzQzOyBLU1o4NDYzX1RBUkdFVF9TRUMsCiYjNDM7CQkJICB0YXJnZXRfdGltZS0mZ3Q7dHZfc2VjKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQga3N6X3B0cF9jb25maWd1cmVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsCiAJCQkJICAgIHUzMiBjeWNsZV93aWR0aF9ucywgdTMyIHB1bHNlX3dpZHRoX25zLAogCQkJCSAgICBzdHJ1Y3QgdGltZXNwZWM2NCBjb25zdCAqdGFyZ2V0X3RpbWUsCkBAIC0xODMsMTcgJiM0MzsyNjcsMTEgQEAgc3RhdGljIGludCBrc3pfcHRwX2NvbmZpZ3VyZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBrc3pfcHRwX2VuYWJsZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCBjb25zdCAqcmVxdWVzdCwKLQkJCQkgaW50IG9uKQomIzQzO3N0YXRpYyBpbnQga3N6X3B0cF9nZXRfcGluKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsCiYjNDM7CQkJICAgc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCBjb25zdCAqcmVxdWVzdCkKIHsKIAlzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9ICZhbXA7ZGV2LSZndDtwdHBfZGF0YTsKLQl1NjQgcmVxX3B1bHNlX3dpZHRoX25zOwotCXU2NCBjeWNsZV93aWR0aF9uczsKLQl1NjQgcHVsc2Vfd2lkdGhfbnM7Ci0JaW50IHBpbiA9IDA7Ci0JdTMyIGRhdGEzMjsKLQlpbnQgcmV0OwomIzQzOwlpbnQgcGluOwogCiAJaWYgKHJlcXVlc3QtJmd0O2ZsYWdzICZhbXA7IH5QVFBfUEVST1VUX0RVVFlfQ1lDTEUpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTIwNiw2ICYjNDM7Mjg0LDExNCBAQCBzdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAogCWlmIChwaW4gJmx0OyAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwlyZXR1cm4gcGluOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfY3ljbGUoc3RydWN0IGtzel9kZXZpY2UgKmRldiwKJiM0MzsJCQkJCXN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgY29uc3QgKnJlcXVlc3QsCiYjNDM7CQkJCQl1NjQgKmN5Y2xlX3dpZHRoX25zKQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSAmYW1wO2Rldi0mZ3Q7cHRwX2RhdGE7CiYjNDM7CiYjNDM7CXB0cF9kYXRhLSZndDtwZXJvdXRfdGFyZ2V0X3RpbWVfZmlyc3QudHZfc2VjICA9IHJlcXVlc3QtJmd0O3N0YXJ0LnNlYzsKJiM0MzsJcHRwX2RhdGEtJmd0O3Blcm91dF90YXJnZXRfdGltZV9maXJzdC50dl9uc2VjID0gcmVxdWVzdC0mZ3Q7c3RhcnQubnNlYzsKJiM0MzsKJiM0MzsJcHRwX2RhdGEtJmd0O3Blcm91dF9wZXJpb2QudHZfc2VjID0gcmVxdWVzdC0mZ3Q7cGVyaW9kLnNlYzsKJiM0MzsJcHRwX2RhdGEtJmd0O3Blcm91dF9wZXJpb2QudHZfbnNlYyA9IHJlcXVlc3QtJmd0O3BlcmlvZC5uc2VjOwomIzQzOwomIzQzOwkqY3ljbGVfd2lkdGhfbnMgPSB0aW1lc3BlYzY0X3RvX25zKCZhbXA7cHRwX2RhdGEtJmd0O3Blcm91dF9wZXJpb2QpOwomIzQzOwlpZiAoKCpjeWNsZV93aWR0aF9ucyAmYW1wOyBUUklHX0NZQ0xFX1dJRFRIX00pICE9ICpjeWNsZV93aWR0aF9ucykgewomIzQzOwkJKmN5Y2xlX3dpZHRoX25zID0gMDsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTY0IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfcHVsc2Uoc3RydWN0IGtzel9kZXZpY2UgKmRldiwKJiM0MzsJCQkJCXN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgY29uc3QgKnJlcXVlc3QsCiYjNDM7CQkJCQl1NjQgbWF4X3B1bHNlX3dpZHRoKQomIzQzO3sKJiM0MzsJdTY0IHJlcV9wdWxzZV93aWR0aF9uczsKJiM0MzsKJiM0MzsJaWYgKHJlcXVlc3QtJmd0O2ZsYWdzICZhbXA7IFBUUF9QRVJPVVRfRFVUWV9DWUNMRSkKJiM0MzsJCXJldHVybiByZXF1ZXN0LSZndDtvbi5zZWMgKiBOU0VDX1BFUl9TRUMgJiM0MzsJcmVxdWVzdC0mZ3Q7b24ubnNlYzsKJiM0MzsKJiM0MzsJLyogVXNlIGEgZHV0eSBjeWNsZSBvZiA1MCUuIE1heGltdW0gcHVsc2Ugd2lkdGggc3VwcG9ydGVkIGJ5IHRoZQomIzQzOwkgKiBoYXJkd2FyZSBpcyBhIGxpdHRsZSBiaXQgbW9yZSB0aGFuIDEyNSBtcy4KJiM0MzsJICovCiYjNDM7CXJlcV9wdWxzZV93aWR0aF9ucyA9IChyZXF1ZXN0LSZndDtwZXJpb2Quc2VjICogTlNFQ19QRVJfU0VDICYjNDM7CiYjNDM7CQkJICAgICAgcmVxdWVzdC0mZ3Q7cGVyaW9kLm5zZWMpIC8gMjsKJiM0MzsJcmV0dXJuIG1pbl90KHU2NCwgcmVxX3B1bHNlX3dpZHRoX25zLCBtYXhfcHVsc2Vfd2lkdGgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGtzejg0NjNfcHRwX2VuYWJsZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LAomIzQzOwkJCQkgICAgIGludCBvbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gJmFtcDtkZXYtJmd0O3B0cF9kYXRhOwomIzQzOwl1NjQgY3ljbGVfd2lkdGhfbnM7CiYjNDM7CXU2NCBwdWxzZV93aWR0aF9uczsKJiM0MzsJaW50IHBpbjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGluID0ga3N6X3B0cF9nZXRfcGluKGRldiwgcmVxdWVzdCk7CiYjNDM7CWlmIChwaW4gJmx0OyAwKQomIzQzOwkJcmV0dXJuIHBpbjsKJiM0MzsKJiM0MzsJcmV0ID0ga3N6ODQ2M19wdHBfdG91X3Jlc2V0KGRldiwgcmVxdWVzdC0mZ3Q7aW5kZXgpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKCFvbikgewomIzQzOwkJcHRwX2RhdGEtJmd0O3RvdV9tb2RlID0gS1NaX1BUUF9UT1VfSURMRTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CXJldCA9IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfY3ljbGUoZGV2LCByZXF1ZXN0LCAmYW1wO2N5Y2xlX3dpZHRoX25zKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXB1bHNlX3dpZHRoX25zID0ga3N6X3B0cF9jb21wdXRlX3Blcm91dF9wdWxzZShkZXYsIHJlcXVlc3QsCiYjNDM7CQkJCQkJICAgICAgS1NaODQ2M19NQVhfUFVMU0VfV0lEVEgpOwomIzQzOwomIzQzOwlyZXQgPSBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkocHVsc2Vfd2lkdGhfbnMsCiYjNDM7CQkJCSAgICAgICBLU1o4NDYzX1RSSUdfUFVMU0VfV0lEVEhfTSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBrc3o4NDYzX3B0cF9jb25maWd1cmVfcGVyb3V0KGRldiwgY3ljbGVfd2lkdGhfbnMsIHB1bHNlX3dpZHRoX25zLAomIzQzOwkJCQkJICAgJmFtcDtwdHBfZGF0YS0mZ3Q7cGVyb3V0X3RhcmdldF90aW1lX2ZpcnN0LAomIzQzOwkJCQkJICAgcGluKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGtzel9wdHBfdG91X2dwaW8oZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGtzejg0NjNfcHRwX3RvdV9zdGFydChkZXYsIHJlcXVlc3QtJmd0O2luZGV4KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXB0cF9kYXRhLSZndDt0b3VfbW9kZSA9IEtTWl9QVFBfVE9VX1BFUk9VVDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQga3N6X3B0cF9lbmFibGVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsCiYjNDM7CQkJCSBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LAomIzQzOwkJCQkgaW50IG9uKQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSAmYW1wO2Rldi0mZ3Q7cHRwX2RhdGE7CiYjNDM7CXU2NCBjeWNsZV93aWR0aF9uczsKJiM0MzsJdTY0IHB1bHNlX3dpZHRoX25zOwomIzQzOwlpbnQgcGluID0gMDsKJiM0MzsJdTMyIGRhdGEzMjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGluID0ga3N6X3B0cF9nZXRfcGluKGRldiwgcmVxdWVzdCk7CiYjNDM7CWlmIChwaW4gJmx0OyAwKQomIzQzOwkJcmV0dXJuIHBpbjsKJiM0MzsKIAlkYXRhMzIgPSBGSUVMRF9QUkVQKFBUUF9HUElPX0lOREVYLCBwaW4pIHwKIAkJIEZJRUxEX1BSRVAoUFRQX1RPVV9JTkRFWCwgcmVxdWVzdC0mZ3Q7aW5kZXgpOwogCXJldCA9IGtzel9ybXczMihkZXYsIFJFR19QVFBfVU5JVF9JTkRFWF9fNCwKQEAgLTIyMSwzMSAmIzQzOzQwNywxMyBAQCBzdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAogCQlwdHBfZGF0YS0mZ3Q7dG91X21vZGUgPSBLU1pfUFRQX1RPVV9JRExFOwogCQlyZXR1cm4gMDsKIAl9CiYjNDM7CXJldCA9IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfY3ljbGUoZGV2LCByZXF1ZXN0LCAmYW1wO2N5Y2xlX3dpZHRoX25zKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXB1bHNlX3dpZHRoX25zID0ga3N6X3B0cF9jb21wdXRlX3Blcm91dF9wdWxzZShkZXYsIHJlcXVlc3QsCiYjNDM7CQkJCQkJICAgICAgS1NaX01BWF9QVUxTRV9XSURUSCk7CiAKLQlwdHBfZGF0YS0mZ3Q7cGVyb3V0X3RhcmdldF90aW1lX2ZpcnN0LnR2X3NlYyAgPSByZXF1ZXN0LSZndDtzdGFydC5zZWM7Ci0JcHRwX2RhdGEtJmd0O3Blcm91dF90YXJnZXRfdGltZV9maXJzdC50dl9uc2VjID0gcmVxdWVzdC0mZ3Q7c3RhcnQubnNlYzsKLQotCXB0cF9kYXRhLSZndDtwZXJvdXRfcGVyaW9kLnR2X3NlYyA9IHJlcXVlc3QtJmd0O3BlcmlvZC5zZWM7Ci0JcHRwX2RhdGEtJmd0O3Blcm91dF9wZXJpb2QudHZfbnNlYyA9IHJlcXVlc3QtJmd0O3BlcmlvZC5uc2VjOwotCi0JY3ljbGVfd2lkdGhfbnMgPSB0aW1lc3BlYzY0X3RvX25zKCZhbXA7cHRwX2RhdGEtJmd0O3Blcm91dF9wZXJpb2QpOwotCWlmICgoY3ljbGVfd2lkdGhfbnMgJmFtcDsgVFJJR19DWUNMRV9XSURUSF9NKSAhPSBjeWNsZV93aWR0aF9ucykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAocmVxdWVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgUFRQX1BFUk9VVF9EVVRZX0NZQ0xFKSB7Ci0JCXB1bHNlX3dpZHRoX25zID0gcmVxdWVzdC0mZ3Q7b24uc2VjICogTlNFQ19QRVJfU0VDICYjNDM7Ci0JCQlyZXF1ZXN0LSZndDtvbi5uc2VjOwotCX0gZWxzZSB7Ci0JCS8qIFVzZSBhIGR1dHkgY3ljbGUgb2YgNTAlLiBNYXhpbXVtIHB1bHNlIHdpZHRoIHN1cHBvcnRlZCBieSB0aGUKLQkJICogaGFyZHdhcmUgaXMgYSBsaXR0bGUgYml0IG1vcmUgdGhhbiAxMjUgbXMuCi0JCSAqLwotCQlyZXFfcHVsc2Vfd2lkdGhfbnMgPSAocmVxdWVzdC0mZ3Q7cGVyaW9kLnNlYyAqIE5TRUNfUEVSX1NFQyAmIzQzOwotCQkJCSAgICAgIHJlcXVlc3QtJmd0O3BlcmlvZC5uc2VjKSAvIDI7Ci0JCXB1bHNlX3dpZHRoX25zID0gbWluX3QodTY0LCByZXFfcHVsc2Vfd2lkdGhfbnMsCi0JCQkJICAgICAgIEtTWl9NQVhfUFVMU0VfV0lEVEgpOwotCX0KLQotCXJldCA9IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeShwdWxzZV93aWR0aF9ucyk7CiYjNDM7CXJldCA9IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeShwdWxzZV93aWR0aF9ucywgVFJJR19QVUxTRV9XSURUSF9NKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC03NTYsMTEgJiM0Mzs5MjQsMTEgQEAgc3RhdGljIGludCBrc3pfcHRwX2dldHRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGtzel9wdHBfcmVzdGFydF9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldikKJiM0MztzdGF0aWMgaW50IGtzel9wdHBfcHJlcGFyZV9yZXN0YXJ0X3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAomIzQzOwkJCQkJICBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0ICpyZXF1ZXN0KQogewogCXN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gJmFtcDtkZXYtJmd0O3B0cF9kYXRhOwogCXM2NCBub3dfbnMsIGZpcnN0X25zLCBwZXJpb2RfbnMsIG5leHRfbnM7Ci0Jc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCByZXF1ZXN0OwogCXN0cnVjdCB0aW1lc3BlYzY0IG5leHQ7CiAJc3RydWN0IHRpbWVzcGVjNjQgbm93OwogCXVuc2lnbmVkIGludCBjb3VudDsKQEAgLTc5MSw0MCAmIzQzOzk1OSwxMTEgQEAgc3RhdGljIGludCBrc3pfcHRwX3Jlc3RhcnRfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpCiAKIAkvKiBSZXN0YXJ0IHBlcmlvZGljIG91dHB1dCBzaWduYWwgKi8KIAluZXh0ID0gbnNfdG9fdGltZXNwZWM2NChuZXh0X25zKTsKLQlyZXF1ZXN0LnN0YXJ0LnNlYyAgPSBuZXh0LnR2X3NlYzsKLQlyZXF1ZXN0LnN0YXJ0Lm5zZWMgPSBuZXh0LnR2X25zZWM7Ci0JcmVxdWVzdC5wZXJpb2Quc2VjICA9IHB0cF9kYXRhLSZndDtwZXJvdXRfcGVyaW9kLnR2X3NlYzsKLQlyZXF1ZXN0LnBlcmlvZC5uc2VjID0gcHRwX2RhdGEtJmd0O3Blcm91dF9wZXJpb2QudHZfbnNlYzsKLQlyZXF1ZXN0LmluZGV4ID0gMDsKLQlyZXF1ZXN0LmZsYWdzID0gMDsKJiM0MzsJcmVxdWVzdC0mZ3Q7c3RhcnQuc2VjICA9IG5leHQudHZfc2VjOwomIzQzOwlyZXF1ZXN0LSZndDtzdGFydC5uc2VjID0gbmV4dC50dl9uc2VjOwomIzQzOwlyZXF1ZXN0LSZndDtwZXJpb2Quc2VjICA9IHB0cF9kYXRhLSZndDtwZXJvdXRfcGVyaW9kLnR2X3NlYzsKJiM0MzsJcmVxdWVzdC0mZ3Q7cGVyaW9kLm5zZWMgPSBwdHBfZGF0YS0mZ3Q7cGVyb3V0X3BlcmlvZC50dl9uc2VjOwomIzQzOwlyZXF1ZXN0LSZndDtpbmRleCA9IDA7CiYjNDM7CXJlcXVlc3QtJmd0O2ZsYWdzID0gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQga3N6X3B0cF9yZXN0YXJ0X3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCByZXF1ZXN0OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBrc3pfcHRwX3ByZXBhcmVfcmVzdGFydF9wZXJvdXQoZGV2LCAmYW1wO3JlcXVlc3QpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKIAogCXJldHVybiBrc3pfcHRwX2VuYWJsZV9wZXJvdXQoZGV2LCAmYW1wO3JlcXVlc3QsIDEpOwogfQogCi1zdGF0aWMgaW50IGtzel9wdHBfc2V0dGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwKLQkJCSAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKJiM0MztzdGF0aWMgaW50IGtzejg0NjNfcHRwX3Jlc3RhcnRfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7Ci0Jc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IHB0cF9kYXRhX3RvX2tzel9kZXYocHRwX2RhdGEpOwotCWNvbnN0IHUxNiAqcmVncyA9IGRldi0mZ3Q7aW5mby0mZ3Q7cmVnczsKJiM0MzsJc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCByZXF1ZXN0OwogCWludCByZXQ7CiAKLQltdXRleF9sb2NrKCZhbXA7cHRwX2RhdGEtJmd0O2xvY2spOwomIzQzOwlyZXQgPSBrc3pfcHRwX3ByZXBhcmVfcmVzdGFydF9wZXJvdXQoZGV2LCAmYW1wO3JlcXVlc3QpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGtzejg0NjNfcHRwX2VuYWJsZV9wZXJvdXQoZGV2LCAmYW1wO3JlcXVlc3QsIDEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fa3N6X3B0cF9zZXR0aW1lKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsCiYjNDM7CQkJICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpCiYjNDM7ewomIzQzOwljb25zdCB1MTYgKnJlZ3MgPSBkZXYtJmd0O2luZm8tJmd0O3JlZ3M7CiYjNDM7CWludCByZXQ7CiAKIAkvKiBXcml0ZSB0byBzaGFkb3cgcmVnaXN0ZXJzIGFuZCBMb2FkIFBUUCBjbG9jayAqLwogCXJldCA9IGtzel93cml0ZTE2KGRldiwgcmVnc1tQVFBfUlRDX1NVQl9OQU5PU0VDXSwgUFRQX1JUQ18wTlMpOwogCWlmIChyZXQpCi0JCWdvdG8gdW5sb2NrOwomIzQzOwkJcmV0dXJuIHJldDsKIAogCXJldCA9IGtzel93cml0ZTMyKGRldiwgcmVnc1tQVFBfUlRDX05BTk9TRUNdLCB0cy0mZ3Q7dHZfbnNlYyk7CiAJaWYgKHJldCkKLQkJZ290byB1bmxvY2s7CiYjNDM7CQlyZXR1cm4gcmV0OwogCiAJcmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfU0VDXSwgdHMtJmd0O3R2X3NlYyk7CiAJaWYgKHJldCkKLQkJZ290byB1bmxvY2s7CiYjNDM7CQlyZXR1cm4gcmV0OwogCiAJcmV0ID0ga3N6X3JtdzE2KGRldiwgcmVnc1tQVFBfQ0xLX0NUUkxdLCBQVFBfTE9BRF9USU1FLCBQVFBfTE9BRF9USU1FKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGtzejg0NjNfcHRwX3NldHRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsCiYjNDM7CQkJICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gcHRwX2NhcHNfdG9fZGF0YShwdHApOwomIzQzOwlzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwdHBfZGF0YS0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldCA9IF9fa3N6X3B0cF9zZXR0aW1lKGRldiwgdHMpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CiYjNDM7CXN3aXRjaCAocHRwX2RhdGEtJmd0O3RvdV9tb2RlKSB7CiYjNDM7CWNhc2UgS1NaX1BUUF9UT1VfSURMRToKJiM0MzsJCWJyZWFrOwomIzQzOwomIzQzOwljYXNlIEtTWl9QVFBfVE9VX1BFUk9VVDoKJiM0MzsJCXJldCA9IGtzejg0NjNfcHRwX3Jlc3RhcnRfcGVyb3V0KGRldik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gdW5sb2NrOwomIzQzOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7cHRwX2RhdGEtJmd0O2Nsb2NrX2xvY2spOwomIzQzOwlwdHBfZGF0YS0mZ3Q7Y2xvY2tfdGltZSA9ICp0czsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtwdHBfZGF0YS0mZ3Q7Y2xvY2tfbG9jayk7CiYjNDM7CiYjNDM7dW5sb2NrOgomIzQzOwltdXRleF91bmxvY2soJmFtcDtwdHBfZGF0YS0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQga3N6X3B0cF9zZXR0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLAomIzQzOwkJCSAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gcHRwX2NhcHNfdG9fZGF0YShwdHApOwomIzQzOwlzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwdHBfZGF0YS0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldCA9IF9fa3N6X3B0cF9zZXR0aW1lKGRldiwgdHMpOwogCWlmIChyZXQpCiAJCWdvdG8gdW5sb2NrOwogCkBAIC04OTAsMTggJiM0MzsxMTI5LDEzIEBAIHN0YXRpYyBpbnQga3N6X3B0cF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBsb25nIHNjYWxlZF9wcG0pCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBrc3pfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHM2NCBkZWx0YSkKJiM0MztzdGF0aWMgaW50IF9fa3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHM2NCBkZWx0YSkKIHsKLQlzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTsKLQlzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7Ci0Jc3RydWN0IHRpbWVzcGVjNjQgZGVsdGE2NCA9IG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpOwogCWNvbnN0IHUxNiAqcmVncyA9IGRldi0mZ3Q7aW5mby0mZ3Q7cmVnczsKIAlzMzIgc2VjLCBuc2VjOwogCXUxNiBkYXRhMTY7CiAJaW50IHJldDsKIAotCW11dGV4X2xvY2soJmFtcDtwdHBfZGF0YS0mZ3Q7bG9jayk7Ci0KIAkvKiBkbyBub3QgdXNlIG5zX3RvX3RpbWVzcGVjNjQoKSwKIAkgKiBib3RoIHNlYyBhbmQgbnNlYyBhcmUgc3VidHJhY3RlZCBieSBodwogCSAqLwpAQCAtOTA5LDE1ICYjNDM7MTE0MywxNSBAQCBzdGF0aWMgaW50IGtzel9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKQogCiAJcmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfTkFOT1NFQ10sIGFicyhuc2VjKSk7CiAJaWYgKHJldCkKLQkJZ290byB1bmxvY2s7CiYjNDM7CQlyZXR1cm4gcmV0OwogCiAJcmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfU0VDXSwgYWJzKHNlYykpOwogCWlmIChyZXQpCi0JCWdvdG8gdW5sb2NrOwomIzQzOwkJcmV0dXJuIHJldDsKIAogCXJldCA9IGtzel9yZWFkMTYoZGV2LCByZWdzW1BUUF9DTEtfQ1RSTF0sICZhbXA7ZGF0YTE2KTsKIAlpZiAocmV0KQotCQlnb3RvIHVubG9jazsKJiM0MzsJCXJldHVybiByZXQ7CiAKIAlkYXRhMTYgfD0gUFRQX1NURVBfQURKOwogCkBAIC05MjgsNiAmIzQzOzExNjIsNTYgQEAgc3RhdGljIGludCBrc3pfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHM2NCBkZWx0YSkKIAkJZGF0YTE2IHw9IFBUUF9TVEVQX0RJUjsKIAogCXJldCA9IGtzel93cml0ZTE2KGRldiwgcmVnc1tQVFBfQ0xLX0NUUkxdLCBkYXRhMTYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7CiYjNDM7CXN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTsKJiM0MzsJc3RydWN0IHRpbWVzcGVjNjQgZGVsdGE2NCA9IG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHRwX2RhdGEtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXQgPSBfX2tzel9wdHBfYWRqdGltZShkZXYsIGRlbHRhKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwomIzQzOwlzd2l0Y2ggKHB0cF9kYXRhLSZndDt0b3VfbW9kZSkgewomIzQzOwljYXNlIEtTWl9QVFBfVE9VX0lETEU6CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJY2FzZSBLU1pfUFRQX1RPVV9QRVJPVVQ6CiYjNDM7CQlyZXQgPSBrc3o4NDYzX3B0cF9yZXN0YXJ0X3Blcm91dChkZXYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIHVubG9jazsKJiM0MzsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO3B0cF9kYXRhLSZndDtjbG9ja19sb2NrKTsKJiM0MzsJcHRwX2RhdGEtJmd0O2Nsb2NrX3RpbWUgPSB0aW1lc3BlYzY0X2FkZChwdHBfZGF0YS0mZ3Q7Y2xvY2tfdGltZSwgZGVsdGE2NCk7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7cHRwX2RhdGEtJmd0O2Nsb2NrX2xvY2spOwomIzQzOwomIzQzO3VubG9jazoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHRwX2RhdGEtJmd0O2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGtzel9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7CiYjNDM7CXN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTsKJiM0MzsJc3RydWN0IHRpbWVzcGVjNjQgZGVsdGE2NCA9IG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHRwX2RhdGEtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXQgPSBfX2tzel9wdHBfYWRqdGltZShkZXYsIGRlbHRhKTsKIAlpZiAocmV0KQogCQlnb3RvIHVubG9jazsKIApAQCAtOTUyLDYgJiM0MzsxMjM2LDI2IEBAIHN0YXRpYyBpbnQga3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLAomIzQzOwkJCSAgICAgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcmVxLCBpbnQgb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTsKJiM0MzsJc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IHB0cF9kYXRhX3RvX2tzel9kZXYocHRwX2RhdGEpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlzd2l0Y2ggKHJlcS0mZ3Q7dHlwZSkgewomIzQzOwljYXNlIFBUUF9DTEtfUkVRX1BFUk9VVDoKJiM0MzsJCW11dGV4X2xvY2soJmFtcDtwdHBfZGF0YS0mZ3Q7bG9jayk7CiYjNDM7CQlyZXQgPSBrc3o4NDYzX3B0cF9lbmFibGVfcGVyb3V0KGRldiwgJmFtcDtyZXEtJmd0O3Blcm91dCwgb24pOwomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7cHRwX2RhdGEtJmd0O2xvY2spOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLAogCQkJICBzdHJ1Y3QgcHRwX2Nsb2NrX3JlcXVlc3QgKnJlcSwgaW50IG9uKQogewpAQCAtMTAyOCwxNyAmIzQzOzEzMzIsMzMgQEAgc3RhdGljIGludCBrc3pfcHRwX3N0YXJ0X2Nsb2NrKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpCiAJcmV0dXJuIDA7CiB9CiAKLWludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKJiM0Mzt2b2lkIGtzejg0NjNfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGE7CiYjNDM7CiYjNDM7CXB0cF9kYXRhID0gJmFtcDtkZXYtJmd0O3B0cF9kYXRhOwomIzQzOwomIzQzOwlwdHBfZGF0YS0mZ3Q7Y2Fwcy5vd25lcgkJPSBUSElTX01PRFVMRTsKJiM0MzsJc25wcmludGYocHRwX2RhdGEtJmd0O2NhcHMubmFtZSwgMTYsICYjMzQ7TWljcm9jaGlwIENsb2NrJiMzNDspOwomIzQzOwlwdHBfZGF0YS0mZ3Q7Y2Fwcy5tYXhfYWRqCQk9IEtTWl9NQVhfRFJJRlRfQ09SUjsKJiM0MzsJcHRwX2RhdGEtJmd0O2NhcHMuZ2V0dGltZTY0CT0ga3N6X3B0cF9nZXR0aW1lOwomIzQzOwlwdHBfZGF0YS0mZ3Q7Y2Fwcy5zZXR0aW1lNjQJPSBrc3o4NDYzX3B0cF9zZXR0aW1lOwomIzQzOwlwdHBfZGF0YS0mZ3Q7Y2Fwcy5hZGpmaW5lCQk9IGtzel9wdHBfYWRqZmluZTsKJiM0MzsJcHRwX2RhdGEtJmd0O2NhcHMuYWRqdGltZQkJPSBrc3o4NDYzX3B0cF9hZGp0aW1lOwomIzQzOwlwdHBfZGF0YS0mZ3Q7Y2Fwcy5kb19hdXhfd29yawk9IGtzel9wdHBfZG9fYXV4X3dvcms7CiYjNDM7CXB0cF9kYXRhLSZndDtjYXBzLmVuYWJsZQkJPSBrc3o4NDYzX3B0cF9lbmFibGU7CiYjNDM7CXB0cF9kYXRhLSZndDtjYXBzLnZlcmlmeQkJPSBrc3pfcHRwX3ZlcmlmeV9waW47CiYjNDM7CXB0cF9kYXRhLSZndDtjYXBzLm5fcGlucwkJPSBkZXYtJmd0O2luZm8tJmd0O25fcGluczsKJiM0MzsJcHRwX2RhdGEtJmd0O2NhcHMubl9wZXJfb3V0CT0gZGV2LSZndDtpbmZvLSZndDtuX3Blcl9vdXQ7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQga3N6X3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiB7CiAJc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLSZndDtwcml2OwotCWNvbnN0IHUxNiAqcmVncyA9IGRldi0mZ3Q7aW5mby0mZ3Q7cmVnczsKIAlzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YTsKLQlpbnQgcmV0OwotCXU4IGk7CiAKIAlwdHBfZGF0YSA9ICZhbXA7ZGV2LSZndDtwdHBfZGF0YTsKLQltdXRleF9pbml0KCZhbXA7cHRwX2RhdGEtJmd0O2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZhbXA7cHRwX2RhdGEtJmd0O2Nsb2NrX2xvY2spOwogCiAJcHRwX2RhdGEtJmd0O2NhcHMub3duZXIJCT0gVEhJU19NT0RVTEU7CiAJc25wcmludGYocHRwX2RhdGEtJmd0O2NhcHMubmFtZSwgMTYsICYjMzQ7TWljcm9jaGlwIENsb2NrJiMzNDspOwpAQCAtMTA1MCwxNCAmIzQzOzEzNzAsMjcgQEAgaW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCXB0cF9kYXRhLSZndDtjYXBzLmRvX2F1eF93b3JrCT0ga3N6X3B0cF9kb19hdXhfd29yazsKIAlwdHBfZGF0YS0mZ3Q7Y2Fwcy5lbmFibGUJCT0ga3N6X3B0cF9lbmFibGU7CiAJcHRwX2RhdGEtJmd0O2NhcHMudmVyaWZ5CQk9IGtzel9wdHBfdmVyaWZ5X3BpbjsKLQlwdHBfZGF0YS0mZ3Q7Y2Fwcy5uX3BpbnMJCT0gS1NaX1BUUF9OX0dQSU87Ci0JcHRwX2RhdGEtJmd0O2NhcHMubl9wZXJfb3V0CT0gMzsKJiM0MzsJcHRwX2RhdGEtJmd0O2NhcHMubl9waW5zCQk9IGRldi0mZ3Q7aW5mby0mZ3Q7bl9waW5zOwomIzQzOwlwdHBfZGF0YS0mZ3Q7Y2Fwcy5uX3Blcl9vdXQJPSBkZXYtJmd0O2luZm8tJmd0O25fcGVyX291dDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLSZndDtwcml2OwomIzQzOwljb25zdCB1MTYgKnJlZ3MgPSBkZXYtJmd0O2luZm8tJmd0O3JlZ3M7CiYjNDM7CXN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhOwomIzQzOwlpbnQgcmV0OwomIzQzOwl1OCBpOwomIzQzOwomIzQzOwlwdHBfZGF0YSA9ICZhbXA7ZGV2LSZndDtwdHBfZGF0YTsKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO3B0cF9kYXRhLSZndDtsb2NrKTsKJiM0MzsJc3Bpbl9sb2NrX2luaXQoJmFtcDtwdHBfZGF0YS0mZ3Q7Y2xvY2tfbG9jayk7CiAKIAlyZXQgPSBrc3pfcHRwX3N0YXJ0X2Nsb2NrKGRldik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBLU1pfUFRQX05fR1BJTzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGRldi0mZ3Q7aW5mby0mZ3Q7bl9waW5zOyBpJiM0MzsmIzQzOykgewogCQlzdHJ1Y3QgcHRwX3Bpbl9kZXNjICpwdHBfcGluID0gJmFtcDtwdHBfZGF0YS0mZ3Q7cGluX2NvbmZpZ1tpXTsKIAogCQlzbnByaW50ZihwdHBfcGluLSZndDtuYW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaAppbmRleCA3MDY3ZWM5YmQxZTZmLi45MjU4OWNmMzczYWMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaApAQCAtMTIsNyAmIzQzOzEyLDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaCZndDsKIAotI2RlZmluZSBLU1pfUFRQX05fR1BJTwkJMgomIzQzOyNkZWZpbmUgS1NaX1BUUF9OX0dQSU8JCTEyCiAKIGVudW0ga3N6X3B0cF90b3VfbW9kZSB7CiAJS1NaX1BUUF9UT1VfSURMRSwKQEAgLTMzLDYgJiM0MzszMyw4IEBAIHN0cnVjdCBrc3pfcHRwX2RhdGEgewogCXN0cnVjdCB0aW1lc3BlYzY0IHBlcm91dF9wZXJpb2Q7CiB9OwogCiYjNDM7dm9pZCBrc3pfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7CiYjNDM7dm9pZCBrc3o4NDYzX3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpOwogaW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTsKIAogdm9pZCBrc3pfcHRwX2Nsb2NrX3VucmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTsKQEAgLTY1LDYgJiM0Mzs2Nyw3IEBAIHN0cnVjdCBrc3pfcHRwX2RhdGEgewogCXN0cnVjdCBtdXRleCBsb2NrOwogfTsKIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBrc3pfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykgeyB9CiBzdGF0aWMgaW5saW5lIGludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIHsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cF9yZWcuaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cF9yZWcuaAppbmRleCA2NWVhODU3N2FmNzU1Li4xNmYxMTdmYTVkNDliIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwX3JlZy5oCkBAIC01MSw2ICYjNDM7NTEsMjIgQEAKIAogI2RlZmluZSBSRUdfUFRQX1VOSVRfSU5ERVhfXzQJCTB4MDUyMAogCiYjNDM7I2RlZmluZSBLU1o4NDYzX1RPVV9BQ1RJVkUJCTB4MjAyCiYjNDM7I2RlZmluZSBLU1o4NDYzX1RPVV9FTgkJCTB4MjA2CiYjNDM7I2RlZmluZSBLU1o4NDYzX1RPVV9TV19SU1QJCTB4MjA4CiYjNDM7CiYjNDM7I2RlZmluZSBLU1o4NDYzX1RSSUdOX0NGR19TSVpFCQkweDIwCiYjNDM7I2RlZmluZSBLU1o4NDYzX1RSSUcxX0NGRwkJMHgyMjAKJiM0MzsjZGVmaW5lIEtTWjg0NjNfVEFSR0VUX05TRUMJCTB4MDAwCiYjNDM7I2RlZmluZSBLU1o4NDYzX1RBUkdFVF9TRUMJCTB4MDA0CiYjNDM7I2RlZmluZSBLU1o4NDYzX1BBVFRFUk5fT0ZGCQkweDAwOAomIzQzOyNkZWZpbmUgS1NaODQ2M19OT1RJRllfQklUCQlCSVQoOCkKJiM0MzsjZGVmaW5lIEtTWjg0NjNfUEFUVEVSTl9NCQlHRU5NQVNLKDYsIDQpCiYjNDM7I2RlZmluZSBLU1o4NDYzX1BVTFNFX1dJRFRIX09GRgkJMHgwMEEKJiM0MzsjZGVmaW5lIEtTWjg0NjNfVFJJR19QVUxTRV9XSURUSF9NCUdFTk1BU0soMTUsIDApCiYjNDM7I2RlZmluZSBLU1o4NDYzX0NZQ0xFX1dJRFRIX09GRgkJMHgwMEMKJiM0MzsjZGVmaW5lIEtTWjg0NjNfQ1lDTEVfQ05UX09GRgkJMHgwMTAKJiM0MzsKICNkZWZpbmUgUFRQX0dQSU9fSU5ERVgJCQlHRU5NQVNLKDE5LCAxNikKICNkZWZpbmUgUFRQX1RTSV9JTkRFWAkJCUJJVCg4KQogI2RlZmluZSBQVFBfVE9VX0lOREVYCQkJR0VOTUFTSygxLCAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMKaW5kZXggODZjZTNhODY3MDVmOS4uM2EyMDkxMjJmYzdkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jCkBAIC04NjcsNiAmIzQzOzg2Nyw3IEBAIHN0YXRpYyBpbnQgbGFuOTM3eF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAJCX0KIAl9CiAKJiM0MzsJa3N6X3B0cF9zZXRfY2Fwcyhkcyk7CiAJcmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKGRldi0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2s6ICVkXG4mIzM0OywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0MzQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGZWFzaWJpbGl0eSBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIGFuZCBkZWNpZGUgaWYgd2UmIzM5O3JlIGdvaW5nIHRvIHB1dCBpdCB0aHJvdWdoIHRoZSBmdXp6aW5nIG1pbGwuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBzY29wZS4gSSBzZWUgdGhhdCBpdCB0b3VjaGVzIGBkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2AsIHdoaWNoIG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggTWljcm9jaGlwIEtTWi9MQU4gRFNBIEV0aGVybmV0IHN3aXRjaCBkcml2ZXJzLiBTcGVjaWZpY2FsbHksIHRoaW5ncyBsaWtlIHRoZSBLU1o4NDYzLCBLU1o4NTYzLCBLU1o5NDc3LCBLU1o5NTY3LCBhbmQgTEFOOTM3eC4KCk5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGhvdyBkb2VzIHRoZSBrZXJuZWwgaW50ZXJmYWNlIHdpdGggdGhlc2Ugc3dpdGNoZXM/IFNQSSwgSTJDLCBtZW1vcnktbWFwcGVkLCBNRElPPyBLbm93aW5nIHRoYXQgd2lsbCBiZSBjcnVjaWFsLiBBbmQgbW9yZSBpbXBvcnRhbnRseSwgY2FuIHdlIGV2ZW4gcmVhY2ggdGhlc2UgZHJpdmVycyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVT8gQ2FuIHdlIGVtdWxhdGUgYSBEU0Egc3dpdGNoIG9yIGEgYmFzaWMgU1BJL0kyQyBNaWNyb2NoaXAgc3dpdGNoLCBvciBhcmUgd2Ugc3R1Y2sgd2l0aCBwaHlzaWNhbCBoYXJkd2FyZT8gSWYgaXQmIzM5O3MgdGhlIGxhdHRlciwgdGhhdCYjMzk7cyBnb2luZyB0byBiZSBhIHNpZ25pZmljYW50IGh1cmRsZS4KClRpbWUgdG8gZmlyZSB1cCB0aGUgZ3JlcHBlciBvciByZWFkLWZpbGUgdG8gZG8gYSBsaXR0bGUgZGlnZ2luZyBhbmQgZ2V0IHNvbWUgYW5zd2Vycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNSUNST0NISVBfS1NaJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZzoyOm1lbnVjb25maWcgTkVUX0RTQV9NSUNST0NISVBfS1NaX0NPTU1PTlxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb2NoaXAgS1NaOFhYWC9LU1o5WFhYL0xBTjkzN1ggc2VyaWVzIHN3aXRjaCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTE2LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjE3OmNvbmZpZyBORVRfRFNBX01JQ1JPQ0hJUF9LU1o5NDc3X0kyQ1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTE4LVx0dHJpc3RhdGUgXCYjMzQ7S1NaIHNlcmllcyBJMkMgY29ubmVjdGVkIHN3aXRjaCBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZzoxOTpcdGRlcGVuZHMgb24gTkVUX0RTQV9NSUNST0NISVBfS1NaX0NPTU1PTiBcdTAwMjZcdTAwMjYgSTJDXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMjAtXHRzZWxlY3QgUkVHTUFQX0kyQ1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZy0yMy1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZzoyNDpjb25maWcgTkVUX0RTQV9NSUNST0NISVBfS1NaX1NQSVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTI1LVx0dHJpc3RhdGUgXCYjMzQ7S1NaIHNlcmllcyBTUEkgY29ubmVjdGVkIHN3aXRjaCBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZzoyNjpcdGRlcGVuZHMgb24gTkVUX0RTQV9NSUNST0NISVBfS1NaX0NPTU1PTiBcdTAwMjZcdTAwMjYgU1BJXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMjctXHRzZWxlY3QgUkVHTUFQX1NQSVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZy0zMC1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZzozMTpjb25maWcgTkVUX0RTQV9NSUNST0NISVBfS1NaX1BUUFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTMyLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciB0aGUgUFRQIGNsb2NrIG9uIHRoZSBLU1o5NTYzL0xBTjkzN3ggRXRoZXJuZXQgU3dpdGNoXCYjMzQ7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWc6MzM6XHRkZXBlbmRzIG9uIE5FVF9EU0FfTUlDUk9DSElQX0tTWl9DT01NT04gXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWc6MzQ6XHRkZXBlbmRzIG9uIE5FVF9EU0FfTUlDUk9DSElQX0tTWl9DT01NT049bSB8fCBQVFBfMTU4OF9DTE9DSz15XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMzUtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTQwLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjQxOmNvbmZpZyBORVRfRFNBX01JQ1JPQ0hJUF9LU1o4ODYzX1NNSVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTQyLVx0dHJpc3RhdGUgXCYjMzQ7S1NaIHNlcmllcyBTTUkgY29ubmVjdGVkIHN3aXRjaCBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZzo0MzpcdGRlcGVuZHMgb24gTkVUX0RTQV9NSUNST0NISVBfS1NaX0NPTU1PTlxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTQ0LVx0c2VsZWN0IE1ESU9fQklUQkFOR1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfTkVUX0RTQV9NSUNST0NISVBfS1NaX0NPTU1PTilcdCYjNDM7PSBrc3pfc3dpdGNoLm9cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGUtMy1rc3pfc3dpdGNoLW9ianMgOj0ga3N6X2NvbW1vbi5vIGtzel9kY2Iub1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGU9Nj1rc3pfc3dpdGNoLW9ianMgJiM0Mzs9IGxhbjkzN3hfbWFpbi5vXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL01ha2VmaWxlLTctXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL01ha2VmaWxlOjg6aWZkZWYgQ09ORklHX05FVF9EU0FfTUlDUk9DSElQX0tTWl9QVFBcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGUtOS1rc3pfc3dpdGNoLW9ianMgJiM0Mzs9IGtzel9wdHAub1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZT0xMD1lbmRpZlxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZS0xMS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX05FVF9EU0FfTUlDUk9DSElQX0tTWjk0NzdfSTJDKVx0JiM0Mzs9IGtzejk0NzdfaTJjLm9cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX05FVF9EU0FfTUlDUk9DSElQX0tTWl9TUEkpXHRcdCYjNDM7PSBrc3pfc3BpLm9cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGU6MTQ6b2JqLSQoQ09ORklHX05FVF9EU0FfTUlDUk9DSElQX0tTWjg4NjNfU01JKVx0JiM0Mzs9IGtzejg4NjNfc21pLm9cbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaD0xNzE9c3RydWN0IGtzel9wb3J0IHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaC0xOTQtXHRzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcztcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oOjE5NTojaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9NSUNST0NISVBfS1NaX1BUUClcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTE5Ni1cdHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnIHRzdGFtcF9jb25maWc7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgtMTAtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaDoxMTojaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9NSUNST0NISVBfS1NaX1BUUClcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oLTEyLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oPTkwPXN0YXRpYyBpbmxpbmUgdm9pZCBrc3o4NDYzX3B0cF9pcnFfZnJlZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpIHt9XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgtMTA1LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg6MTA2OiNlbmRpZlx0LyogRW5kIG9mIENPTkZJR19ORVRfRFNBX01JQ1JPQ0hJUF9LU1pfUFRQICovXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC0xMDctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzODUKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGRyaXZlciBzaXR1YXRpb24uIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmRhbWVudGFsIGFyY2hpdGVjdHVyZTogYXJlIHRoZXNlIGRyaXZlcnMgc3RyaWN0bHkgdGllZCB0byBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBjb21wb25lbnRzPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhleSYjMzk7cmUgcHJvYmVkIGFuZCBib3VuZC4KCk15IGluc3RpbmN0IGlzIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY29kZSBpdHNlbGYuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlc2UgYGtzemAgZHJpdmVycyBkaXJlY3RseSB0byBzZWUgdGhlIGJpbmRpbmcgbWVjaGFuaXNtIGluIGRldGFpbC4gSSYjMzk7bGwgdGFyZ2V0IHRoZSBga3N6X3NwaS5jYCwgYGtzejk0NzdfaTJjLmNgLCBhbmQgYGtzejg4NjNfc21pLmNgIGZpbGVzIGFzIGEgc3RhcnRpbmcgcG9pbnQuIFRob3NlIHNlZW0gbGlrZSB0aGV5JiMzOTtsbCBjb3ZlciBhIHJhbmdlIG9mIGludGVyZmFjZSBtZXRob2RvbG9naWVzIHRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB0aGluZ3MuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBzZWUgdGhlIGludGVyYWN0aW9ucyBmaXJzdGhhbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX3NwaV9kcml2ZXJ8bW9kdWxlX2kyY19kcml2ZXJ8bW9kdWxlX21kaW9fZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmM9MTMzPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBrc3o5NDc3X2kyY19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jLTE0NC1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYzoxNDU6bW9kdWxlX2kyY19kcml2ZXIoa3N6OTQ3N19pMmNfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYy0xNDYtXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmM9MzQ5PXN0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBrc3pfc3BpX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYy0zNjAtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYzozNjE6bW9kdWxlX3NwaV9kcml2ZXIoa3N6X3NwaV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmMtMzYyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTM4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFRob3VnaHQgUHJvY2VzcyBvbiBEU0EgU3dpdGNoZXMgYW5kIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIERTQSBzd2l0Y2hlcy4gVGhlIHByb21wdCBzYXlzICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgaWYgaXQgZmFsbHMgdW5kZXIgc3BlY2lmaWMgY3JpdGVyaWEsIHNvIGxldCYjMzk7cyBicmVhayBpdCBkb3duOiBBcmUgRFNBIHN3aXRjaGVzIGFsd2F5cyBwaHlzaWNhbCBoYXJkd2FyZS1kZXBlbmRlbnQsIG9yIGNhbiB3ZSBnZXQgYXQgdGhlbSBzb21laG93IGluIHN5emthbGxlciBvciBhIHZpcnR1YWxpemVkIFFFTVUgZW52aXJvbm1lbnQ/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHdlIGNhbiBldmVuICpyZWFjaCogdGhpcyBjb2RlLgoKQWxyaWdodCwgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgbG9vayBhdCB0aGUgJiMzNDtub3QgV29ydGhGdXp6aW5nJiMzNDsgY29uZGl0aW9ucy4gSXQmIzM5O3MgYSBsb3Qgb2YgdGhpbmdzLCBsaWtlIGRvY3VtZW50YXRpb24sIGxvZ2dpbmcsIGNvbnN0YW50cyB0aGF0IGRvbiYjMzk7dCBjaGFuZ2UgZmxvdywgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHZlbmRvci1zcGVjaWZpYyBzdHVmZiB0aWVkIHRvIGFjdHVhbCBoYXJkd2FyZSAobGlrZSBQQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCksIGFuZCB0ZWFyZG93biBjYWxsYmFja3MgdGhhdCBvbmx5IHJ1biBkdXJpbmcgaG90LXVucGx1Zy4KClRoZSByZWFsIHF1ZXN0aW9uIGlzLCBjYW4gdGhlc2UgRFNBIHN3aXRjaGVzIG9uIFNQSSBvciBJMkMgKHNwZWNpZmljYWxseSwgdGhpbmtpbmcgYWJvdXQgc29tZXRoaW5nIGxpa2UgYSBNaWNyb2NoaXAgS1NaKSBldmVuIGJlICpwcm9iZWQqIG9yIGluc3RhbnRpYXRlZCBpbiBRRU1VL3N5emthbGxlciB3aXRob3V0IGEgcGh5c2ljYWwgc2V0dXA/IE5vdyBJJiMzOTttIHJlbWVtYmVyaW5nIHRoYXQgU1BJIGFuZCBJMkMgZHJpdmVycyBjYW4gc29tZXRpbWVzIGJlIGludGVyYWN0ZWQgd2l0aCBmcm9tIHVzZXJzcGFjZSwgcmlnaHQ/IExpa2UsIGNhbiBJIGNyZWF0ZSBhbiBJMkMgZGV2aWNlIHZpYSBzeXNmcyB3aXRoIGAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtWC9uZXdfZGV2aWNlYD8gT3IgdmlhIFNQSS9PRiwgb3IgZXZlbiB3aXRoIGEgZHVtbXkgZGV2aWNlPwoKQWhhLCB0aGF0JiMzOTtzIGl0ISBJbiBMaW51eCwgeW91ICpjYW4qIGluc3RhbnRpYXRlIEkyQyBkZXZpY2VzIHdpdGggdGhhdCBgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLVgvbmV3X2RldmljZWAgcGF0aC4gQnV0LCB0aGUgcXVlc3Rpb24gYmVjb21lcywgY2FuIHN5emthbGxlciAqdXNlKiB0aGlzPyBEb2VzIFFFTVUgZXZlbiBoYXZlIGFuIEkyQyBidXMgaW1wbGVtZW50ZWQ/IEkgbmVlZCB0byBjaGVjayBpZiBzeXprYWxsZXIgaGFzICYjMzQ7aTJjIG5ld19kZXZpY2UmIzM0OyBmdW5jdGlvbmFsaXR5LCBhbmQgaWYgRFNBIHN3aXRjaGVzIGNhbiBiZSBjb250cm9sbGVkIHZpYSB0aGlzLgoKT2theSwgbGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBkZXRhaWxzLiBEU0Egc3dpdGNoIGRyaXZlciBwcm9iaW5nIHJlcXVpcmVzIGEgRFNBIHRyZWUgYW5kIHBsYXRmb3JtL2RldmljZSB0cmVlIGRhdGEuIFNvIG5vdyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGU6IFNwZWNpZmljYWxseSwgbGV0JiMzOTtzIGxvb2sgYXQgYGtzejk0NzdfaTJjX3Byb2JlYCBhbmQgYGtzel9zd2l0Y2hfcmVnaXN0ZXJgIGluIGBkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2AgdG8gc2VlIGlmIHRoZXkgY2FuIHNvbWVob3cgYmUgYWNjZXNzZWQgdmlydHVhbGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tzejk0NzdfaTJjX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmM9MTU9S1NaX1JFR01BUF9UQUJMRShrc3o5NDc3LCBub3RfdXNlZCwgMTYsIDAsIDApO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jLTE2LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jOjE3OnN0YXRpYyBpbnQga3N6OTQ3N19pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYylcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYy0xOC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jPTEzMz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIga3N6OTQ3N19pMmNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYy0xMzgtXHR9LFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jOjEzOTpcdC5wcm9iZSA9IGtzejk0NzdfaTJjX3Byb2JlLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jLTE0MC1cdC5yZW1vdmVcdD0ga3N6OTQ3N19pMmNfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzQ4CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEtTWjk0NzcgRHJpdmVyKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgS1NaOTQ3NyBzd2l0Y2ggaXMgYmVpbmcgaGFuZGxlZCBpbiB0aGUgTGludXgga2VybmVsLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGF0IGBrc3o5NDc3X2kyY19wcm9iZWAgYW5kIGBrc3pfc3dpdGNoX3JlZ2lzdGVyYCBmdW5jdGlvbnMuIFRoZXNlIGFyZSBsaWtlbHkgdGhlIGNvcmUgZW50cnkgcG9pbnRzIGZvciBpbml0aWFsaXppbmcgYW5kIHJlZ2lzdGVyaW5nIHRoZSBkZXZpY2UsIEkmIzM5O2QgZXhwZWN0LiBUaGUgZmlsZSBwYXRocyBhcmUgc3RyYWlnaHRmb3J3YXJkIGVub3VnaDogYGRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuY2AgYW5kIGBrc3pfY29tbW9uLmNgLiBJJiMzOTttIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgSTJDIGNvbW11bmljYXRpb24gaXMgc2V0IHVwLCB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgdXNlZCwgYW5kIGhvdyB0aGUgc3dpdGNoIGlzIGludGVncmF0ZWQgd2l0aGluIHRoZSBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGZyYW1ld29yay4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbiB0b28sIGFzIHRoYXQmIzM5O3MgYWx3YXlzIGEgY3JpdGljYWwgYXNwZWN0IGluIGRyaXZlciBkZXZlbG9wbWVudC4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDE3Olx0c3RhdGljIGludCBrc3o5NDc3X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjKVxuICAxODpcdHtcbiAgMTk6XHRcdGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhICpjaGlwO1xuICAyMDpcdFx0c3RydWN0IGRldmljZSAqZGRldiA9IFx1MDAyNmkyYy1cdTAwM2VkZXY7XG4gIDIxOlx0XHRzdHJ1Y3QgcmVnbWFwX2NvbmZpZyByYztcbiAgMjI6XHRcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXY7XG4gIDIzOlx0XHRpbnQgaSwgcmV0O1xuICAyNDpcdFxuICAyNTpcdFx0Y2hpcCA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShkZGV2KTtcbiAgMjY6XHRcdGlmICghY2hpcClcbiAgMjc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gIDI4Olx0XG4gIDI5Olx0XHRkZXYgPSBrc3pfc3dpdGNoX2FsbG9jKFx1MDAyNmkyYy1cdTAwM2VkZXYsIGNoaXAsIGkyYyk7XG4gIDMwOlx0XHRpZiAoIWRldilcbiAgMzE6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gIDMyOlx0XG4gIDMzOlx0XHQvKiBTYXZlIGNoaXAgaWQgdG8gZG8gc3BlY2lhbCBpbml0aWFsaXphdGlvbiB3aGVuIHByb2JpbmcuICovXG4gIDM0Olx0XHRkZXYtXHUwMDNlY2hpcF9pZCA9IGNoaXAtXHUwMDNlY2hpcF9pZDtcbiAgMzU6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIF9fS1NaX05VTV9SRUdNQVBTOyBpJiM0MzsmIzQzOykge1xuICAzNjpcdFx0XHRyYyA9IGtzejk0NzdfcmVnbWFwX2NvbmZpZ1tpXTtcbiAgMzc6XHRcdFx0cmMubG9ja19hcmcgPSBcdTAwMjZkZXYtXHUwMDNlcmVnbWFwX211dGV4O1xuICAzODpcdFx0XHRkZXYtXHUwMDNlcmVnbWFwW2ldID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoaTJjLCBcdTAwMjZyYyk7XG4gIDM5Olx0XHRcdGlmIChJU19FUlIoZGV2LVx1MDAzZXJlZ21hcFtpXSkpIHtcbiAgNDA6XHRcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcdTAwMjZpMmMtXHUwMDNlZGV2LCBQVFJfRVJSKGRldi1cdTAwM2VyZWdtYXBbaV0pLFxuICA0MTpcdFx0XHRcdFx0XHQgICAgIFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIHJlZ21hcCVpXFxuXCYjMzQ7LFxuICA0MjpcdFx0XHRcdFx0XHQgICAgIGtzejk0NzdfcmVnbWFwX2NvbmZpZ1tpXS52YWxfYml0cyk7XG4gIDQzOlx0XHRcdH1cbiAgNDQ6XHRcdH1cbiAgNDU6XHRcbiAgNDY6XHRcdGlmIChpMmMtXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGEpXG4gIDQ3Olx0XHRcdGRldi1cdTAwM2VwZGF0YSA9IGkyYy1cdTAwM2VkZXYucGxhdGZvcm1fZGF0YTtcbiAgNDg6XHRcbiAgNDk6XHRcdGRldi1cdTAwM2VpcnEgPSBpMmMtXHUwMDNlaXJxO1xuICA1MDpcdFxuICA1MTpcdFx0cmV0ID0ga3N6X3N3aXRjaF9yZWdpc3RlcihkZXYpO1xuICA1MjpcdFxuICA1MzpcdFx0LyogTWFpbiBEU0EgZHJpdmVyIG1heSBub3QgYmUgc3RhcnRlZCB5ZXQuICovXG4gIDU0Olx0XHRpZiAocmV0KVxuICA1NTpcdFx0XHRyZXR1cm4gcmV0O1xuICA1NjpcdFxuICA1NzpcdFx0aTJjX3NldF9jbGllbnRkYXRhKGkyYywgZGV2KTtcbiAgNTg6XHRcbiAgNTk6XHRcdHJldHVybiAwO1xuICA2MDpcdH1cbiAgNjE6XHRcbiAgNjI6XHRzdGF0aWMgdm9pZCBrc3o5NDc3X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmkyYylcbiAgNjM6XHR7XG4gIDY0Olx0XHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gaTJjX2dldF9jbGllbnRkYXRhKGkyYyk7XG4gIDY1Olx0XG4gIDY2Olx0XHRpZiAoZGV2KVxuICA2NzpcdFx0XHRrc3pfc3dpdGNoX3JlbW92ZShkZXYpO1xuICA2ODpcdH1cbiAgNjk6XHRcbiAgNzA6XHRzdGF0aWMgdm9pZCBrc3o5NDc3X2kyY19zaHV0ZG93bihzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjKVxuICA3MTpcdHtcbiAgNzI6XHRcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBpMmNfZ2V0X2NsaWVudGRhdGEoaTJjKTtcbiAgNzM6XHRcbiAgNzQ6XHRcdGlmICghZGV2KVxuICA3NTpcdFx0XHRyZXR1cm47XG4gIDc2Olx0XG4gIDc3Olx0XHRrc3pfc3dpdGNoX3NodXRkb3duKGRldik7XG4gIDc4Olx0XG4gIDc5Olx0XHRpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBOVUxMKTtcbiAgODA6XHR9XG4gIDgxOlx0XG4gIDgyOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGtzejk0NzdfaTJjX2lkW10gPSB7XG4gIDgzOlx0XHR7IC5uYW1lID0gXCYjMzQ7a3N6OTQ3Ny1zd2l0Y2hcJiMzNDsgfSxcbiAgODQ6XHRcdHsgfVxuICA4NTpcdH07XG4gIDg2Olx0XG4gIDg3Olx0TU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGtzejk0NzdfaTJjX2lkKTtcbiAgODg6XHRcbiAgODk6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBrc3o5NDc3X2R0X2lkc1tdID0ge1xuICA5MDpcdFx0e1xuICA5MTpcdFx0XHQuY29tcGF0aWJsZSA9IFwmIzM0O21pY3JvY2hpcCxrc3o5NDc3XCYjMzQ7LFxuICA5MjpcdFx0XHQuZGF0YSA9IFx1MDAyNmtzel9zd2l0Y2hfY2hpcHNbS1NaOTQ3N11cbiAgOTM6XHRcdH0sXG4gIDk0Olx0XHR7XG4gIDk1Olx0XHRcdC5jb21wYXRpYmxlID0gXCYjMzQ7bWljcm9jaGlwLGtzejk4OTZcJiMzNDssXG4gIDk2Olx0XHRcdC5kYXRhID0gXHUwMDI2a3N6X3N3aXRjaF9jaGlwc1tLU1o5ODk2XVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg0NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBrc3o5NDc3IERyaXZlciBQcm9iZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBrc3o5NDc3X2kyY19wcm9iZWAgZnVuY3Rpb24uIExpbmVzIDI1LTI3IGp1bXAgb3V0IGF0IG1lIGltbWVkaWF0ZWx5OiB0aGV5IHRyeSB0byByZXRyaWV2ZSBtYXRjaCBkYXRhIGZyb20gdGhlIGRldmljZSB1c2luZyBgZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRkZXYpYCwgYW5kIHRoZW4gYmFpbCBpZiBpdCYjMzk7cyBOVUxMLiBUaGlzIG1ha2VzIHNlbnNlIGluIG1vc3QgY29udGV4dHMsIGJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uIGlmIHRoZSBkZXZpY2UgaXMgaW5pdGlhbGl6ZWQgdGhyb3VnaCB0aGUgSTJDIElELCBzcGVjaWZpY2FsbHkgYCYjMzQ7a3N6OTQ3Ny1zd2l0Y2gmIzM0O2AgYXMgZGVmaW5lZCBpbiBga3N6OTQ3N19pMmNfaWRgLCB3b3VsZG4mIzM5O3QgdGhhdCBtZWFuIGBkcml2ZXJfZGF0YWAgaXMgYDBgIG9yIE5VTEw/IEluIHRoYXQgc2NlbmFyaW8sIGBkZXZpY2VfZ2V0X21hdGNoX2RhdGFgIHdvdWxkICphbHdheXMqIHJldHVybiBOVUxMLCByaWdodD8gVGhhdCBsb29rcyBsaWtlIGEgYnVnLiBCZWZvcmUgSSBkaWcgZGVlcGVyLCBsZXQgbWUgY2hlY2sgdGhlIGBrc3pfc3dpdGNoX3JlZ2lzdGVyYCBmdW5jdGlvbiBpbiBga3N6X2NvbW1vbi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjaGlwIGlzIG1lYW50IHRvIGJlIHJlZ2lzdGVyZWQgYW5kIGlmIHRoZXJlJiMzOTtzIGFueSBpbXBsaWNpdCBkYXRhIHNldHVwIHRoYXQgbWlnaHQgYmUgbWlzc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQga3N6X3N3aXRjaF9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM9MzkxMT1zdGF0aWMgaW50IGtzejg0NjNfcmVsZWFzZV9zdHJhcHNfc3BpKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMzkxNS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jOjM5MTY6aW50IGtzel9zd2l0Y2hfcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTM5MTcte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oPTQyOT1zdHJ1Y3Qga3N6X2RldmljZSAqa3N6X3N3aXRjaF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpiYXNlLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTQzMS1cdFx0XHRcdCAgICB2b2lkICpwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oOjQzMjppbnQga3N6X3N3aXRjaF9yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTQzMy12b2lkIGtzel9zd2l0Y2hfcmVtb3ZlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTU0NgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gcHVsbCB1cCBga3N6X3N3aXRjaF9yZWdpc3RlcmAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uY2AgZmlsZS4gSSYjMzk7bSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uIGFuZCBsb2NhdGlvbiwgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgcmVnaXN0ZXJpbmcgYSBNaWNyb2NoaXAgS1NaIHNlcmllcyBzd2l0Y2ggd2l0aGluIHRoZSBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGZyYW1ld29yay4gS25vd2luZyBLU1ogc3dpdGNoZXMsIGl0IGxpa2VseSBoYW5kbGVzIHRoZSBiYXNpYyBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiwgc2V0dGluZyB1cCBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHN3aXRjaCAobGlrZWx5IHRocm91Z2ggTURJTyksIGFuZCB0aGVuIGludGVncmF0aW5nIHRoZSBzd2l0Y2gmIzM5O3MgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIExpbnV4IG5ldHdvcmtpbmcgc3RhY2suIEl0IHdpbGwgcHJvYmFibHkgaW52b2x2ZSBzb21lIGRldmljZSB0cmVlIHBhcnNpbmcgdG8gY29uZmlndXJlIGl0cyBoYXJkd2FyZSwgcG9zc2libHkgaW5jbHVkaW5nIHRoaW5ncyBsaWtlIHRoZSBNRElPIGJ1cyBhZGRyZXNzLCB0aGUgUEhZIGFkZHJlc3NlcywgYW5kIGFueSBzcGVjaWZpYyBjbG9jayBjb25maWd1cmF0aW9ucyBuZWVkZWQgZm9yIHByb3BlciBvcGVyYXRpb24uIEkgZXhwZWN0IHRvIHNlZSB0aGUgc3RhbmRhcmQgZGV2aWNlIHJlZ2lzdHJhdGlvbiBjYWxscyBmb3IgRFNBLCBhbG9uZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBzd2l0Y2gmIzM5O3MgdmFyaW91cyBwb3J0cyBhbmQgdGhlaXIgY2hhcmFjdGVyaXN0aWNzLiBIb3BlZnVsbHkgaXQgY29udGFpbnMgYSBjbGVhbiBlcnJvciBoYW5kbGluZyBwYXRoIC0gdGhhdCYjMzk7cyBhbHdheXMgZ29vZCBwcmFjdGljZSwgZXNwZWNpYWxseSBpbiBhIGRyaXZlci4gSSYjMzk7bGwgYmUgbG9va2luZyB0byBzZWUgaG93IHdlbGwgaXQmIzM5O3Mgd3JpdHRlbiBhbmQgaWYgaXQgcHJvdmlkZXMgcm9idXN0IGVub3VnaCBzdXBwb3J0IGZvciBhbGwgb2YgdGhlIGZlYXR1cmVzIHRoYXQgS1NaIHN3aXRjaGVzIHByb3ZpZGUuIEkmIzM5O20gYWxzbyBob3BpbmcgZm9yIGNsZWFyIGRvY3VtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTE2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM5MTY6XHRpbnQga3N6X3N3aXRjaF9yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuMzkxNzpcdHtcbjM5MTg6XHRcdGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhICppbmZvO1xuMzkxOTpcdFx0c3RydWN0IGRldmljZV9ub2RlICpwb3J0cztcbjM5MjA6XHRcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG4zOTIxOlx0XHR1bnNpZ25lZCBpbnQgcG9ydF9udW07XG4zOTIyOlx0XHRpbnQgcmV0O1xuMzkyMzpcdFx0aW50IGk7XG4zOTI0Olx0XG4zOTI1Olx0XHRkZXYtXHUwMDNlcmVzZXRfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKGRldi1cdTAwM2VkZXYsIFwmIzM0O3Jlc2V0XCYjMzQ7LFxuMzkyNjpcdFx0XHRcdFx0XHRcdCAgR1BJT0RfT1VUX0xPVyk7XG4zOTI3Olx0XHRpZiAoSVNfRVJSKGRldi1cdTAwM2VyZXNldF9ncGlvKSlcbjM5Mjg6XHRcdFx0cmV0dXJuIFBUUl9FUlIoZGV2LVx1MDAzZXJlc2V0X2dwaW8pO1xuMzkyOTpcdFxuMzkzMDpcdFx0aWYgKGRldi1cdTAwM2VyZXNldF9ncGlvKSB7XG4zOTMxOlx0XHRcdGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkZXYtXHUwMDNlZGV2LVx1MDAzZW9mX25vZGUsIFwmIzM0O21pY3JvY2hpcCxrc3o4NDYzXCYjMzQ7KSkge1xuMzkzMjpcdFx0XHRcdHJldCA9IGtzejg0NjNfY29uZmlndXJlX3N0cmFwc19zcGkoZGV2KTtcbjM5MzM6XHRcdFx0XHRpZiAocmV0KVxuMzkzNDpcdFx0XHRcdFx0cmV0dXJuIHJldDtcbjM5MzU6XHRcdFx0fVxuMzkzNjpcdFxuMzkzNzpcdFx0XHRncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoZGV2LVx1MDAzZXJlc2V0X2dwaW8sIDEpO1xuMzkzODpcdFx0XHR1c2xlZXBfcmFuZ2UoMTAwMDAsIDEyMDAwKTtcbjM5Mzk6XHRcdFx0Z3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGRldi1cdTAwM2VyZXNldF9ncGlvLCAwKTtcbjM5NDA6XHRcdFx0bXNsZWVwKDEwMCk7XG4zOTQxOlx0XG4zOTQyOlx0XHRcdGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkZXYtXHUwMDNlZGV2LVx1MDAzZW9mX25vZGUsIFwmIzM0O21pY3JvY2hpcCxrc3o4NDYzXCYjMzQ7KSkge1xuMzk0MzpcdFx0XHRcdHJldCA9IGtzejg0NjNfcmVsZWFzZV9zdHJhcHNfc3BpKGRldik7XG4zOTQ0Olx0XHRcdFx0aWYgKHJldClcbjM5NDU6XHRcdFx0XHRcdHJldHVybiByZXQ7XG4zOTQ2Olx0XHRcdH1cbjM5NDc6XHRcdH1cbjM5NDg6XHRcbjM5NDk6XHRcdG11dGV4X2luaXQoXHUwMDI2ZGV2LVx1MDAzZWRldl9tdXRleCk7XG4zOTUwOlx0XHRtdXRleF9pbml0KFx1MDAyNmRldi1cdTAwM2VyZWdtYXBfbXV0ZXgpO1xuMzk1MTpcdFx0bXV0ZXhfaW5pdChcdTAwMjZkZXYtXHUwMDNlYWx1X211dGV4KTtcbjM5NTI6XHRcdG11dGV4X2luaXQoXHUwMDI2ZGV2LVx1MDAzZXZsYW5fbXV0ZXgpO1xuMzk1MzpcdFxuMzk1NDpcdFx0cmV0ID0ga3N6X3N3aXRjaF9kZXRlY3QoZGV2KTtcbjM5NTU6XHRcdGlmIChyZXQpXG4zOTU2Olx0XHRcdHJldHVybiByZXQ7XG4zOTU3Olx0XG4zOTU4Olx0XHRpbmZvID0ga3N6X2xvb2t1cF9pbmZvKGRldi1cdTAwM2VjaGlwX2lkKTtcbjM5NTk6XHRcdGlmICghaW5mbylcbjM5NjA6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4zOTYxOlx0XG4zOTYyOlx0XHQvKiBVcGRhdGUgdGhlIGNvbXBhdGlibGUgaW5mbyB3aXRoIHRoZSBwcm9iZWQgb25lICovXG4zOTYzOlx0XHRkZXYtXHUwMDNlaW5mbyA9IGluZm87XG4zOTY0Olx0XG4zOTY1Olx0XHRkZXZfaW5mbyhkZXYtXHUwMDNlZGV2LCBcJiMzNDtmb3VuZCBzd2l0Y2g6ICVzLCByZXYgJWlcXG5cJiMzNDssXG4zOTY2Olx0XHRcdCBkZXYtXHUwMDNlaW5mby1cdTAwM2VkZXZfbmFtZSwgZGV2LVx1MDAzZWNoaXBfcmV2KTtcbjM5Njc6XHRcbjM5Njg6XHRcdHJldCA9IGtzel9jaGVja19kZXZpY2VfaWQoZGV2KTtcbjM5Njk6XHRcdGlmIChyZXQpXG4zOTcwOlx0XHRcdHJldHVybiByZXQ7XG4zOTcxOlx0XG4zOTcyOlx0XHRkZXYtXHUwMDNlZGV2X29wcyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZW9wcztcbjM5NzM6XHRcbjM5NzQ6XHRcdHJldCA9IGRldi1cdTAwM2VkZXZfb3BzLVx1MDAzZWluaXQoZGV2KTtcbjM5NzU6XHRcdGlmIChyZXQpXG4zOTc2Olx0XHRcdHJldHVybiByZXQ7XG4zOTc3Olx0XG4zOTc4Olx0XHRkZXYtXHUwMDNlcG9ydHMgPSBkZXZtX2t6YWxsb2MoZGV2LVx1MDAzZWRldixcbjM5Nzk6XHRcdFx0XHRcdCAgZGV2LVx1MDAzZWluZm8tXHUwMDNlcG9ydF9jbnQgKiBzaXplb2Yoc3RydWN0IGtzel9wb3J0KSxcbjM5ODA6XHRcdFx0XHRcdCAgR0ZQX0tFUk5FTCk7XG4zOTgxOlx0XHRpZiAoIWRldi1cdTAwM2Vwb3J0cylcbjM5ODI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4zOTgzOlx0XG4zOTg0Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXYtXHUwMDNlaW5mby1cdTAwM2Vwb3J0X2NudDsgaSYjNDM7JiM0MzspIHtcbjM5ODU6XHRcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXBvcnRzW2ldLm1pYi5zdGF0czY0X2xvY2spO1xuMzk4NjpcdFx0XHRtdXRleF9pbml0KFx1MDAyNmRldi1cdTAwM2Vwb3J0c1tpXS5taWIuY250X211dGV4KTtcbjM5ODc6XHRcdFx0ZGV2LVx1MDAzZXBvcnRzW2ldLm1pYi5jb3VudGVycyA9XG4zOTg4Olx0XHRcdFx0ZGV2bV9remFsbG9jKGRldi1cdTAwM2VkZXYsXG4zOTg5Olx0XHRcdFx0XHQgICAgIHNpemVvZih1NjQpICogKGRldi1cdTAwM2VpbmZvLVx1MDAzZW1pYl9jbnQgJiM0MzsgMSksXG4zOTkwOlx0XHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuMzk5MTpcdFx0XHRpZiAoIWRldi1cdTAwM2Vwb3J0c1tpXS5taWIuY291bnRlcnMpXG4zOTkyOlx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4zOTkzOlx0XG4zOTk0Olx0XHRcdGRldi1cdTAwM2Vwb3J0c1tpXS5rc3pfZGV2ID0gZGV2O1xuMzk5NTpcdFx0XHRkZXYtXHUwMDNlcG9ydHNbaV0ubnVtID0gaTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExMDkKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBrc3pfc3dpdGNoX3JlZ2lzdGVyYCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKKipBbmFseXppbmcgdGhlIGBrc3pfc3dpdGNoX3JlZ2lzdGVyYCBGdW5jdGlvbiYjMzk7cyBOZXh0IFN0ZXBzKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY29taW5nIG5leHQgaW4gdGhpcyBga3N6X3N3aXRjaF9yZWdpc3RlcmAgZnVuY3Rpb24uIEkmIzM5O3ZlIGdvdCBteSBkZWJ1Z2dpbmcgaGF0IG9uLCBhbmQgSSYjMzk7bSByZWFkeSB0byBmb2xsb3cgdGhlIGZsb3cuIEkga25vdyB0aGUgZ2VuZXJhbCBwdXJwb3NlLCBvZiBjb3Vyc2UsIGJ1dCBpdCYjMzk7cyB0aW1lIHRvIGRyaWxsIGRvd24gaW50byB0aGUgc3BlY2lmaWNzLiBXaGF0IGFyZSB0aGUga2V5IG9wZXJhdGlvbnMgYmVpbmcgcGVyZm9ybWVkPyBJcyBpdCBoYW5kbGluZyBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiwgZGV2aWNlIGNvbmZpZ3VyYXRpb24sIG9yIGludGVycnVwdCBzZXR1cD8gSSYjMzk7bSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQ7IHRob3NlIHVzdWFsbHkgaG9sZCB0aGUgc2VjcmV0cyB0byB0aGUgbG9naWMuIEFueSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgcmVzb3VyY2UgbWFuYWdlbWVudCBzeXN0ZW0gbmVlZHMgY2FyZWZ1bCBzY3J1dGlueSwgcGFydGljdWxhcmx5IHdpdGggdGhlc2Ugc29ydHMgb2YgZGV2aWNlIGRyaXZlcnMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzLiBUaGUgZXJyb3IgaGFuZGxpbmcgaXMgY3JpdGljYWwgYXMgd2VsbDogYXJlIHRoZSBlcnJvciBjb2RlcyBtZWFuaW5nZnVsPyBBcmUgdGhlcmUgc3VmZmljaWVudCByZXRyaWVzIGluIGNhc2Ugb2YgdHJhbnNpZW50IGZhaWx1cmVzPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBsb29raW5nIGZvciBhbnkgY2FsbHMgdG8gb3RoZXIgZnVuY3Rpb25zIGFuZCB0cmFjaW5nIHRoZW0gb3V0LiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBsb29raW5nIGF0IGFueSBoYXJkd2FyZSBhY2Nlc3MsIG9yIGNhbGxzIHRvIHJlc291cmNlIGFsbG9jYXRpb24gcm91dGluZXMsIHdoaWNoIGNvdWxkIGJlIHRoZSBzb3VyY2Ugb2YgaXNzdWVzLiBJIGFsc28gd2FudCB0byBtYWtlIHN1cmUgdGhlIGRhdGEgc3RydWN0dXJlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEluIHNob3J0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gdGhlIGxvdyBsZXZlbCBhbmQgc2VlIHdoYXQmIzM5O3MgYmVpbmcgZG9uZSBhbmQgd2hldGhlciBpdCYjMzk7cyBkb25lIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM5OTYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mzk5NjpcdFx0fVxuMzk5NzpcdFxuMzk5ODpcdFx0Lyogc2V0IHRoZSByZWFsIG51bWJlciBvZiBwb3J0cyAqL1xuMzk5OTpcdFx0ZGV2LVx1MDAzZWRzLVx1MDAzZW51bV9wb3J0cyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZXBvcnRfY250O1xuNDAwMDpcdFxuNDAwMTpcdFx0Lyogc2V0IHRoZSBwaHlsaW5rIG9wcyAqL1xuNDAwMjpcdFx0ZGV2LVx1MDAzZWRzLVx1MDAzZXBoeWxpbmtfbWFjX29wcyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZXBoeWxpbmtfbWFjX29wcztcbjQwMDM6XHRcbjQwMDQ6XHRcdC8qIEhvc3QgcG9ydCBpbnRlcmZhY2Ugd2lsbCBiZSBzZWxmIGRldGVjdGVkLCBvciBzcGVjaWZpY2FsbHkgc2V0IGluXG40MDA1Olx0XHQgKiBkZXZpY2UgdHJlZS5cbjQwMDY6XHRcdCAqL1xuNDAwNzpcdFx0Zm9yIChwb3J0X251bSA9IDA7IHBvcnRfbnVtIFx1MDAzYyBkZXYtXHUwMDNlaW5mby1cdTAwM2Vwb3J0X2NudDsgJiM0MzsmIzQzO3BvcnRfbnVtKVxuNDAwODpcdFx0XHRkZXYtXHUwMDNlcG9ydHNbcG9ydF9udW1dLmludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQTtcbjQwMDk6XHRcdGlmIChkZXYtXHUwMDNlZGV2LVx1MDAzZW9mX25vZGUpIHtcbjQwMTA6XHRcdFx0cmV0ID0gb2ZfZ2V0X3BoeV9tb2RlKGRldi1cdTAwM2VkZXYtXHUwMDNlb2Zfbm9kZSwgXHUwMDI2aW50ZXJmYWNlKTtcbjQwMTE6XHRcdFx0aWYgKHJldCA9PSAwKVxuNDAxMjpcdFx0XHRcdGRldi1cdTAwM2Vjb21wYXRfaW50ZXJmYWNlID0gaW50ZXJmYWNlO1xuNDAxMzpcdFx0XHRwb3J0cyA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldi1cdTAwM2VkZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7ZXRoZXJuZXQtcG9ydHNcJiMzNDspO1xuNDAxNDpcdFx0XHRpZiAoIXBvcnRzKVxuNDAxNTpcdFx0XHRcdHBvcnRzID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2LVx1MDAzZWRldi1cdTAwM2VvZl9ub2RlLCBcJiMzNDtwb3J0c1wmIzM0Oyk7XG40MDE2Olx0XHRcdGlmIChwb3J0cykge1xuNDAxNzpcdFx0XHRcdGZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlX3Njb3BlZChwb3J0cywgcG9ydCkge1xuNDAxODpcdFx0XHRcdFx0aWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBvcnQsIFwmIzM0O3JlZ1wmIzM0OyxcbjQwMTk6XHRcdFx0XHRcdFx0XHRcdCBcdTAwMjZwb3J0X251bSkpXG40MDIwOlx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuNDAyMTpcdFx0XHRcdFx0aWYgKCEoZGV2LVx1MDAzZXBvcnRfbWFzayBcdTAwMjYgQklUKHBvcnRfbnVtKSkpIHtcbjQwMjI6XHRcdFx0XHRcdFx0b2Zfbm9kZV9wdXQocG9ydHMpO1xuNDAyMzpcdFx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQwMjQ6XHRcdFx0XHRcdH1cbjQwMjU6XHRcdFx0XHRcdG9mX2dldF9waHlfbW9kZShwb3J0LFxuNDAyNjpcdFx0XHRcdFx0XHRcdFx1MDAyNmRldi1cdTAwM2Vwb3J0c1twb3J0X251bV0uaW50ZXJmYWNlKTtcbjQwMjc6XHRcbjQwMjg6XHRcdFx0XHRcdGtzel9wYXJzZV9yZ21paV9kZWxheShkZXYsIHBvcnRfbnVtLCBwb3J0KTtcbjQwMjk6XHRcdFx0XHRcdGRldi1cdTAwM2Vwb3J0c1twb3J0X251bV0uZmliZXIgPVxuNDAzMDpcdFx0XHRcdFx0XHRvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wocG9ydCxcbjQwMzE6XHRcdFx0XHRcdFx0XHRcdCAgICAgIFwmIzM0O21pY3JlbCxmaWJlci1tb2RlXCYjMzQ7KTtcbjQwMzI6XHRcdFx0XHR9XG40MDMzOlx0XHRcdFx0b2Zfbm9kZV9wdXQocG9ydHMpO1xuNDAzNDpcdFx0XHR9XG40MDM1Olx0XHRcdGRldi1cdTAwM2VzeW5jbGtvXzEyNSA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYtXHUwMDNlZGV2LVx1MDAzZW9mX25vZGUsXG40MDM2Olx0XHRcdFx0XHRcdFx0XHQgXCYjMzQ7bWljcm9jaGlwLHN5bmNsa28tMTI1XCYjMzQ7KTtcbjQwMzc6XHRcdFx0ZGV2LVx1MDAzZXN5bmNsa29fZGlzYWJsZSA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYtXHUwMDNlZGV2LVx1MDAzZW9mX25vZGUsXG40MDM4Olx0XHRcdFx0XHRcdFx0XHQgICAgIFwmIzM0O21pY3JvY2hpcCxzeW5jbGtvLWRpc2FibGVcJiMzNDspO1xuNDAzOTpcdFx0XHRpZiAoZGV2LVx1MDAzZXN5bmNsa29fMTI1IFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNlc3luY2xrb19kaXNhYmxlKSB7XG40MDQwOlx0XHRcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcJiMzNDtpbmNvbnNpc3RlbnQgc3luY2xrbyBzZXR0aW5nc1xcblwmIzM0Oyk7XG40MDQxOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40MDQyOlx0XHRcdH1cbjQwNDM6XHRcbjQwNDQ6XHRcdFx0ZGV2LVx1MDAzZXdha2V1cF9zb3VyY2UgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2LVx1MDAzZWRldi1cdTAwM2VvZl9ub2RlLFxuNDA0NTpcdFx0XHRcdFx0XHRcdFx0ICAgXCYjMzQ7d2FrZXVwLXNvdXJjZVwmIzM0Oyk7XG40MDQ2Olx0XHRcdGRldi1cdTAwM2VwbWVfYWN0aXZlX2hpZ2ggPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2LVx1MDAzZWRldi1cdTAwM2VvZl9ub2RlLFxuNDA0NzpcdFx0XHRcdFx0XHRcdFx0ICAgICBcJiMzNDttaWNyb2NoaXAscG1lLWFjdGl2ZS1oaWdoXCYjMzQ7KTtcbjQwNDg6XHRcdH1cbjQwNDk6XHRcbjQwNTA6XHRcdHJldCA9IGRzYV9yZWdpc3Rlcl9zd2l0Y2goZGV2LVx1MDAzZWRzKTtcbjQwNTE6XHRcdGlmIChyZXQpXG40MDUyOlx0XHRcdHJldHVybiByZXQ7XG40MDUzOlx0XG40MDU0Olx0XHQvKiBSZWFkIE1JQiBjb3VudGVycyBldmVyeSAzMCBzZWNvbmRzIHRvIGF2b2lkIG92ZXJmbG93LiAqL1xuNDA1NTpcdFx0ZGV2LVx1MDAzZW1pYl9yZWFkX2ludGVydmFsID0gbXNlY3NfdG9famlmZmllcyg1MDAwKTtcbjQwNTY6XHRcbjQwNTc6XHRcdC8qIFN0YXJ0IHRoZSBNSUIgdGltZXIuICovXG40MDU4Olx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2ZGV2LVx1MDAzZW1pYl9yZWFkLCAwKTtcbjQwNTk6XHRcbjQwNjA6XHRcdHJldHVybiByZXQ7XG40MDYxOlx0fVxuNDA2MjpcdEVYUE9SVF9TWU1CT0woa3N6X3N3aXRjaF9yZWdpc3Rlcik7XG40MDYzOlx0XG40MDY0Olx0dm9pZCBrc3pfc3dpdGNoX3JlbW92ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuNDA2NTpcdHtcbjQwNjY6XHRcdC8qIHRpbWVyIHN0YXJ0ZWQgKi9cbjQwNjc6XHRcdGlmIChkZXYtXHUwMDNlbWliX3JlYWRfaW50ZXJ2YWwpIHtcbjQwNjg6XHRcdFx0ZGV2LVx1MDAzZW1pYl9yZWFkX2ludGVydmFsID0gMDtcbjQwNjk6XHRcdFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNmRldi1cdTAwM2VtaWJfcmVhZCk7XG40MDcwOlx0XHR9XG40MDcxOlx0XG40MDcyOlx0XHRkc2FfdW5yZWdpc3Rlcl9zd2l0Y2goZGV2LVx1MDAzZWRzKTtcbjQwNzM6XHR9XG40MDc0Olx0RVhQT1JUX1NZTUJPTChrc3pfc3dpdGNoX3JlbW92ZSk7XG40MDc1Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzY0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBjb2RlLgoKKipBbmFseXppbmcga3N6XF9zd2l0Y2hcX2RldGVjdChkZXYpKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdHJhY2luZyB0aHJvdWdoIHRoaXMgYGtzel9zd2l0Y2hgIGRyaXZlciwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgY2FsbCB0byBga3N6X3N3aXRjaF9kZXRlY3QoZGV2KWAgaW4gYGtzel9zd2l0Y2hfcmVnaXN0ZXJgLiBOb3csICp0aGF0KiBwaXF1ZXMgbXkgaW50ZXJlc3QhIENsZWFybHksIHRoaXMgaXMgd2hlcmUgdGhlIHN5c3RlbSBpcyB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhbiBhY3R1YWwgc3dpdGNoIHByZXNlbnQgYW5kLCBpZiBzbywgd2hhdCBraW5kLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGBrc3pfc3dpdGNoX2RldGVjdGAgZnVuY3Rpb24gaXRzZWxmIGFuZCBzZWUgaG93IGl0IGdvZXMgYWJvdXQgZG9pbmcgdGhhdCBkZXRlY3Rpb24uIFRoaXMgaXMgdGhlIGNydXggb2YgdGhlIGluaXRpYWxpemF0aW9uLCBJIGJldC4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIHByb2JlIHNlcXVlbmNlLCByZWdpc3RlciByZWFkcy4uLiBtYXliZSBldmVuIHNvbWUgdmVuZG9yLXNwZWNpZmljIG1hZ2ljIHRvIGlkZW50aWZ5IHRoZSBoYXJkd2FyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHNlY3JldHMgaXQmIzM5O3MgaGlkaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrc3pfc3dpdGNoX2RldGVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM9MjkxNj12b2lkIGtzel9waHlsaW5rX21hY19jb25maWcoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMjkyNy1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jOjI5Mjg6c3RhdGljIGludCBrc3pfc3dpdGNoX2RldGVjdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMjkyOS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM9MzkxNj1pbnQga3N6X3N3aXRjaF9yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTM5NTMtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzozOTU0Olx0cmV0ID0ga3N6X3N3aXRjaF9kZXRlY3QoZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTM5NTUtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzI4NwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGF0IGZ1bmN0aW9uLCBga3N6X3N3aXRjaF9kZXRlY3RgLCBuZXN0bGVkIHdpdGhpbiBgZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNgLgoKKipEaXZpbmcgRGVlcCBpbnRvIEtTWiBTd2l0Y2ggRGV0ZWN0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGlzc2VjdCBga3N6X3N3aXRjaF9kZXRlY3RgIGZyb20gYGtzel9jb21tb24uY2AuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgdHJpZ2dlcnMgdGhpcyByb3V0aW5lLCB0aGUga2V5IHJlZ2lzdGVycyBpdCYjMzk7cyByZWFkaW5nIGFuZCB3cml0aW5nLCBhbmQgdGhlIGxvZ2ljIGJlaGluZCBob3cgaXQgZGV0ZXJtaW5lcyBpZiBhIE1pY3JvY2hpcCBLU1ogc3dpdGNoIGlzIHByZXNlbnQgYW5kIGZ1bmN0aW9uaW5nIGNvcnJlY3RseS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGhhcmR3YXJlLXNwZWNpZmljIHF1aXJrcyBvciB3b3JrYXJvdW5kcyBpbiB0aGlzIGxvdy1sZXZlbCBkcml2ZXIuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHBhcnQgb2YgYSBsYXJnZXIgRFNBIChEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlKSBmcmFtZXdvcmssIHNvIEkgc2hvdWxkIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIGhpZ2hlci1sZXZlbCBEU0EgY29tcG9uZW50cy4gSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IGVycm9yIGhhbmRsaW5nIGFuZCByZXRyeSBtZWNoYW5pc21zLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgcG90ZW50aWFsIGNoYWxsZW5nZXMg4oCTIHRoZSBuZWVkIHRvIGhhbmRsZSBkaWZmZXJlbnQgS1NaIHN3aXRjaCByZXZpc2lvbnMsIHZhcmlhdGlvbnMgaW4gUEhZIGNvbmZpZ3VyYXRpb25zLCBhbmQgbWF5YmUgZXZlbiBzb21lIGNsZXZlciByZWdpc3RlciBwcm9iaW5nIHRlY2huaXF1ZXMuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHNvIGxldCYjMzk7cyBzZWUgd2hhdCB0aGV5JiMzOTt2ZSBjb21lIHVwIHdpdGguIExldCYjMzk7cyBzZWUgaWYgdGhpcyBjb2RlIGlzIHdlbGwtd3JpdHRlbiwgZWZmaWNpZW50LCBhbmQgcm9idXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjkyOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyOTI4Olx0c3RhdGljIGludCBrc3pfc3dpdGNoX2RldGVjdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuMjkyOTpcdHtcbjI5MzA6XHRcdHU4IGlkMSwgaWQyLCBpZDQ7XG4yOTMxOlx0XHR1MTYgaWQxNjtcbjI5MzI6XHRcdHUzMiBpZDMyO1xuMjkzMzpcdFx0aW50IHJldDtcbjI5MzQ6XHRcbjI5MzU6XHRcdC8qIHJlYWQgY2hpcCBpZCAqL1xuMjkzNjpcdFx0cmV0ID0ga3N6X3JlYWQxNihkZXYsIFJFR19DSElQX0lEMCwgXHUwMDI2aWQxNik7XG4yOTM3Olx0XHRpZiAocmV0KVxuMjkzODpcdFx0XHRyZXR1cm4gcmV0O1xuMjkzOTpcdFxuMjk0MDpcdFx0aWQxID0gRklFTERfR0VUKFNXX0ZBTUlMWV9JRF9NLCBpZDE2KTtcbjI5NDE6XHRcdGlkMiA9IEZJRUxEX0dFVChTV19DSElQX0lEX00sIGlkMTYpO1xuMjk0MjpcdFxuMjk0MzpcdFx0c3dpdGNoIChpZDEpIHtcbjI5NDQ6XHRcdGNhc2UgS1NaODRfRkFNSUxZX0lEOlxuMjk0NTpcdFx0XHRkZXYtXHUwMDNlY2hpcF9pZCA9IEtTWjg0NjNfQ0hJUF9JRDtcbjI5NDY6XHRcdFx0YnJlYWs7XG4yOTQ3Olx0XHRjYXNlIEtTWjg3X0ZBTUlMWV9JRDpcbjI5NDg6XHRcdFx0aWYgKGlkMiA9PSBLU1o4N19DSElQX0lEXzk1KSB7XG4yOTQ5Olx0XHRcdFx0dTggdmFsO1xuMjk1MDpcdFxuMjk1MTpcdFx0XHRcdGRldi1cdTAwM2VjaGlwX2lkID0gS1NaODc5NV9DSElQX0lEO1xuMjk1MjpcdFxuMjk1MzpcdFx0XHRcdGtzel9yZWFkOChkZXYsIEtTWjhfUE9SVF9TVEFUVVNfMCwgXHUwMDI2dmFsKTtcbjI5NTQ6XHRcdFx0XHRpZiAodmFsIFx1MDAyNiBLU1o4X1BPUlRfRklCRVJfTU9ERSlcbjI5NTU6XHRcdFx0XHRcdGRldi1cdTAwM2VjaGlwX2lkID0gS1NaODc2NV9DSElQX0lEO1xuMjk1NjpcdFx0XHR9IGVsc2UgaWYgKGlkMiA9PSBLU1o4N19DSElQX0lEXzk0KSB7XG4yOTU3Olx0XHRcdFx0ZGV2LVx1MDAzZWNoaXBfaWQgPSBLU1o4Nzk0X0NISVBfSUQ7XG4yOTU4Olx0XHRcdH0gZWxzZSB7XG4yOTU5Olx0XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4yOTYwOlx0XHRcdH1cbjI5NjE6XHRcdFx0YnJlYWs7XG4yOTYyOlx0XHRjYXNlIEtTWjg4X0ZBTUlMWV9JRDpcbjI5NjM6XHRcdFx0aWYgKGlkMiA9PSBLU1o4OF9DSElQX0lEXzYzKVxuMjk2NDpcdFx0XHRcdGRldi1cdTAwM2VjaGlwX2lkID0gS1NaODhYM19DSElQX0lEO1xuMjk2NTpcdFx0XHRlbHNlXG4yOTY2Olx0XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4yOTY3Olx0XHRcdGJyZWFrO1xuMjk2ODpcdFx0Y2FzZSBLU1o4ODk1X0ZBTUlMWV9JRDpcbjI5Njk6XHRcdFx0aWYgKGlkMiA9PSBLU1o4ODk1X0NISVBfSURfOTUgfHxcbjI5NzA6XHRcdFx0ICAgIGlkMiA9PSBLU1o4ODk1X0NISVBfSURfOTVSKVxuMjk3MTpcdFx0XHRcdGRldi1cdTAwM2VjaGlwX2lkID0gS1NaODg5NV9DSElQX0lEO1xuMjk3MjpcdFx0XHRlbHNlXG4yOTczOlx0XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4yOTc0Olx0XHRcdHJldCA9IGtzel9yZWFkOChkZXYsIFJFR19LU1o4ODY0X0NISVBfSUQsIFx1MDAyNmlkNCk7XG4yOTc1Olx0XHRcdGlmIChyZXQpXG4yOTc2Olx0XHRcdFx0cmV0dXJuIHJldDtcbjI5Nzc6XHRcdFx0aWYgKGlkNCBcdTAwMjYgU1dfS1NaODg2NClcbjI5Nzg6XHRcdFx0XHRkZXYtXHUwMDNlY2hpcF9pZCA9IEtTWjg4NjRfQ0hJUF9JRDtcbjI5Nzk6XHRcdFx0YnJlYWs7XG4yOTgwOlx0XHRkZWZhdWx0OlxuMjk4MTpcdFx0XHRyZXQgPSBrc3pfcmVhZDMyKGRldiwgUkVHX0NISVBfSUQwLCBcdTAwMjZpZDMyKTtcbjI5ODI6XHRcdFx0aWYgKHJldClcbjI5ODM6XHRcdFx0XHRyZXR1cm4gcmV0O1xuMjk4NDpcdFxuMjk4NTpcdFx0XHRkZXYtXHUwMDNlY2hpcF9yZXYgPSBGSUVMRF9HRVQoU1dfUkVWX0lEX00sIGlkMzIpO1xuMjk4NjpcdFx0XHRpZDMyIFx1MDAyNj0gfjB4RkY7XG4yOTg3Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NjM4CgkJCQkJCQlvdXRwdXQ6IDExOAoJCQkJCQkJdGhvdWdodHM6IDExMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIEFzc2Vzc21lbnQ6IE1pY3JvY2hpcCBLU1ovTEFOIERTQSBTd2l0Y2ggRHJpdmVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBga3N6X3N3aXRjaF9kZXRlY3RgIHdoaWNoIHVzZXMgYHJlZ21hcGAgdG8gcmVhZCByZWdpc3RlcnMgb3ZlciBJMkMvU1BJL1NNSS4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGhhcmR3YXJlIGludGVyYWN0aW9uLiBJZiB0aGVyZSYjMzk7cyBubyBhY3R1YWwgS1NaIGhhcmR3YXJlIHByZXNlbnQsIGl0JiMzOTtsbCBlaXRoZXIgcmV0dXJuIGEgMC8weEZGIG9yIGVycm9yIG91dC4gVGhpcyBjb25maXJtcyBpdCYjMzk7cyBhIGRlZGljYXRlZCBkcml2ZXIgZm9yIE1pY3JvY2hpcCBLU1ovTEFOIGV0aGVybmV0IHN3aXRjaGVzIOKAkyBLU1o4NDYzLCBLU1o4NTYzLCBLU1o5NDc3LCBLU1o5NTY3LCBMQU45Mzd4LgoKTm93LCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgUUVNVSBlbXVsYXRlIGFueSBvZiB0aGVzZT8gTm9wZSwgUUVNVSBoYXMgcGxlbnR5IG9mIG5ldHdvcmsgZW11bGF0aW9ucywgYnV0IGl0IGRvZXNuJiMzOTt0IHRvdWNoIE1pY3JvY2hpcCBLU1ogc3dpdGNoZXMuIFNvLCB3ZSBhcmUgbm90IHJ1bm5pbmcgdGhpcyBjb2RlIG9uIFFFTVUuCgpBbHJpZ2h0LCB0aW1lIHRvIGNoZWNrIHRoZSBXb3J0aEZ1enppbmcgZ3VpZGVsaW5lcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHBhdGNoIGlzbiYjMzk7dCBmYWxsaW5nIGludG8gdGhlICYjMzQ7dW5mdXp6YWJsZSYjMzQ7IGNhdGVnb3J5LiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIGNvZGUgaXNuJiMzOTt0IHNvbWV0aGluZyB0aGF0IGNhbiBvbmx5IHJ1biBpbiBhIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnQuIFRoZSBndWlkZWxpbmVzIHNheSBpdCBpcyBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiBpdCBtb2RpZmllcyBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGVzcGVjaWFsbHkgZm9yIGhhcmR3YXJlIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlLiBUaGlzIGluY2x1ZGVzIHZlbmRvci1zcGVjaWZpYyBzd2l0Y2ggZHJpdmVycy4KCk5vdywgbGV0JiMzOTtzIGJlIGFic29sdXRlbHkgc3VyZS4gQXJlIHRoZXJlIGFueSBzb2Z0d2FyZSBtb2NrIG9yIGR1bW15IERTQSBkZXZpY2VzIEkgY2FuIHVzZT8gTm8sIERTQSAoRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSkgc3dpdGNoZXMgYXJlIGhhcmR3YXJlIHNwZWNpZmljLCBhbmQsIHNwZWNpZmljYWxseSwgdGhlIGBkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2AgY29kZSBpcyBkZXNpZ25lZCBmb3IgZW1iZWRkZWQgRXRoZXJuZXQgc3dpdGNoIGNoaXBzLCBsaWtlIHRoZSBvbmVzIEkgbWVudGlvbmVkIGJlZm9yZS4gTm8gd2F5IHRvIHJ1biBpdCB3aXRob3V0IHRoZSBwaHlzaWNhbCBBU0lDLgoKT2theSwgbGV0JiMzOTtzIHJldmlldyB0aGUgZmlsZXMgdGhhdCBhcmUgYmVpbmcgcGF0Y2hlZDogYGRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jYCwgYGRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jYCwgYGtzel9jb21tb24uY2AsIGBrc3pfY29tbW9uLmhgLCBga3N6X3B0cC5jYCwgYGtzel9wdHAuaGAsIGBrc3pfcHRwX3JlZy5oYCwgYW5kIGBsYW45Mzd4X21haW4uY2AuIFRoZSBwYXRjaCBhZGRzIFBUUCBwZXItb3V0IHN1cHBvcnQgYW5kIHBpbiBjYXBhYmlsaXRpZXMgZm9yIEtTWjg0NjMgYW5kIG90aGVyIE1pY3JvY2hpcCBzd2l0Y2hlcyBpbiB0aGUgRFNBIGRyaXZlci4KCkFsbCB0aGUgbW9kaWZpZWQgY29kZSBpcyB3aXRoaW4gYGRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvYC4gVGhpcyBpcyB1bmRlbmlhYmx5IGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBjb2RlIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgTWljcm9jaGlwIHN3aXRjaCBoYXJkd2FyZSAoS1NaL0xBTiBzZXJpZXMpIGNvbm5lY3RlZCB2aWEgU1BJL0kyQy9TTUkuIFN0YW5kYXJkIFFFTVUvR0NFIGRvZXMgTk9UIGVtdWxhdGUgdGhpcy4gQmVjYXVzZSBvZiB0aGlzLCB0aGUgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuCgpUaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgdGhhdCBgV29ydGhGdXp6aW5nYCBpcyBgZmFsc2VgLgoKVGhlIGFyZ3VtZW50cyBmb3IgYHNldC1yZXN1bHRzYCB3aWxsIGJlOgoqICAgYFdvcnRoRnV6emluZzogZmFsc2VgCiogICBgRW5hYmxlQ29uZmlnczogW11gCiogICBgRm9jdXNTeW1ib2xzOiBbXWAKKiAgIGBSZWFzb25pbmc6IFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9jaGlwIEtTWi9MQU4gc2VyaWVzIERTQSBzd2l0Y2ggZHJpdmVyIChzcGVjaWZpY2FsbHkgUFRQIHN1cHBvcnQgZm9yIEtTWjg0NjMgYW5kIG90aGVyIE1pY3JvY2hpcCBzd2l0Y2ggY2hpcHMpLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgcGh5c2ljYWwgTWljcm9jaGlwIGhhcmR3YXJlIGNvbm5lY3RlZCB2aWEgU1BJLCBJMkMsIG9yIFNNSSwgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBUaHVzLCB0aGUgbW9kaWZpZWQgY29kZSBpcyB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5gCgpMZXQmIzM5O3MgbWFrZSB0aGF0IHRvb2wgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9jaGlwIEtTWi9MQU4gc2VyaWVzIERTQSBFdGhlcm5ldCBzd2l0Y2ggZHJpdmVycyAoc3BlY2lmaWNhbGx5IGFkZGluZyBQVFAgcGVyaW9kaWMgb3V0cHV0IGFuZCBwaW4gY2FwYWJpbGl0aWVzIGZvciBLU1o4NDYzIGFuZCByZWxhdGVkIHN3aXRjaGVzKS4gVGhlc2Ugc3dpdGNoIGRyaXZlcnMgb3BlcmF0ZSBvdmVyIFNQSSwgSTJDLCBvciBTTUkgYnVzZXMgYW5kIHJlcXVpcmUgcGh5c2ljYWwgTWljcm9jaGlwIHN3aXRjaCBBU0lDcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChzdWNoIGFzIFFFTVUgb3IgR0NFKSwgbWFraW5nIHRoZXNlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9jaGlwIEtTWi9MQU4gc2VyaWVzIERTQSBFdGhlcm5ldCBzd2l0Y2ggZHJpdmVycyAoc3BlY2lmaWNhbGx5IGFkZGluZyBQVFAgcGVyaW9kaWMgb3V0cHV0IGFuZCBwaW4gY2FwYWJpbGl0aWVzIGZvciBLU1o4NDYzIGFuZCByZWxhdGVkIHN3aXRjaGVzKS4gVGhlc2Ugc3dpdGNoIGRyaXZlcnMgb3BlcmF0ZSBvdmVyIFNQSSwgSTJDLCBvciBTTUkgYnVzZXMgYW5kIHJlcXVpcmUgcGh5c2ljYWwgTWljcm9jaGlwIHN3aXRjaCBBU0lDcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChzdWNoIGFzIFFFTVUgb3IgR0NFKSwgbWFraW5nIHRoZXNlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDA6MjYuNTUxMDIwMDYzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEwNjk0NTMwODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9jaGlwIEtTWi9MQU4gc2VyaWVzIERTQSBFdGhlcm5ldCBzd2l0Y2ggZHJpdmVycyAoc3BlY2lmaWNhbGx5IGFkZGluZyBQVFAgcGVyaW9kaWMgb3V0cHV0IGFuZCBwaW4gY2FwYWJpbGl0aWVzIGZvciBLU1o4NDYzIGFuZCByZWxhdGVkIHN3aXRjaGVzKS4gVGhlc2Ugc3dpdGNoIGRyaXZlcnMgb3BlcmF0ZSBvdmVyIFNQSSwgSTJDLCBvciBTTUkgYnVzZXMgYW5kIHJlcXVpcmUgcGh5c2ljYWwgTWljcm9jaGlwIHN3aXRjaCBBU0lDcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChzdWNoIGFzIFFFTVUgb3IgR0NFKSwgbWFraW5nIHRoZXNlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MDoyNi41NTEwMjY3MzNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMjQ2MDM1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGUzN2NjMTE0MTk2MmIyNzZhYjU4MDJlZjY4MjZhZjJjMzExZDk2YTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMyAwNDo0MDoyNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jXFxuaW5kZXggOTQxYWU5ZjY2ZjcwYi4uNmIwOGJiOGZlZDViNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jXFxuQEAgLTI0NzgsNiArMjQ3OCw3IEBAIHN0YXRpYyBpbnQga3N6ODQ2M19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIFxcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdGdvdG8gZnJlZV9naXJxO1xcbiBcXG4rXFx0XFx0a3N6ODQ2M19wdHBfc2V0X2NhcHMoZHMpO1xcbiBcXHRcXHRyZXQgPSBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKGRzKTtcXG4gXFx0XFx0aWYgKHJldCkge1xcbiBcXHRcXHRcXHRkZXZfZXJyKGRldi1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jazogJWRcXFxcblxcXCIsXFxuQEAgLTI3NzUsNiArMjc3Niw3IEBAIHN0YXRpYyBpbnQga3N6OF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIFxcdH1cXG4gXFxuIFxcdGlmIChkZXYtXFx1MDAzZWluZm8tXFx1MDAzZXB0cF9jYXBhYmxlKSB7XFxuK1xcdFxcdGtzel9wdHBfc2V0X2NhcHMoZHMpO1xcbiBcXHRcXHRyZXQgPSBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKGRzKTtcXG4gXFx0XFx0aWYgKHJldCkge1xcbiBcXHRcXHRcXHRkZXZfZXJyKGRldi1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jazogJWRcXFxcblxcXCIsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmNcXG5pbmRleCAzZWU5OTU1NDVjNTc5Li43MjUyOGE1M2I2N2QyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmNcXG5AQCAtMTc4MSw2ICsxNzgxLDcgQEAgc3RhdGljIGludCBrc3o5NDc3X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGRldi1cXHUwMDNlaW5mby1cXHUwMDNlcHRwX2NhcGFibGUpIHtcXG4rXFx0XFx0a3N6X3B0cF9zZXRfY2Fwcyhkcyk7XFxuIFxcdFxcdHJldCA9IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoZHMpO1xcbiBcXHRcXHRpZiAocmV0KSB7XFxuIFxcdFxcdFxcdGRldl9lcnIoZGV2LVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrOiAlZFxcXFxuXFxcIixcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uY1xcbmluZGV4IDFhOWQ2ZjgzYTAyMzIuLjllMjM0YWQ3MWI3MjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uY1xcbkBAIC0xMTYxLDYgKzExNjEsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XFxuIFxcdFxcdC5zdXBwb3J0c19taWkgPSB7ZmFsc2UsIGZhbHNlLCB0cnVlfSxcXG4gXFx0XFx0LnN1cHBvcnRzX3JtaWkgPSB7ZmFsc2UsIGZhbHNlLCB0cnVlfSxcXG4gXFx0XFx0LmludGVybmFsX3BoeSA9IHt0cnVlLCB0cnVlLCBmYWxzZX0sXFxuK1xcdFxcdC5uX3BpbnMgPSAxMixcXG4rXFx0XFx0Lm5fcGVyX291dCA9IDEyLFxcbiBcXHR9LFxcbiBcXG4gXFx0W0tTWjg1NjNdID0ge1xcbkBAIC0xMTk0LDYgKzExOTYsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XFxuIFxcdFxcdC5wdHBfY2FwYWJsZSA9IHRydWUsXFxuIFxcdFxcdC53cl90YWJsZSA9IFxcdTAwMjZrc3o4NTYzX3JlZ2lzdGVyX3NldCxcXG4gXFx0XFx0LnJkX3RhYmxlID0gXFx1MDAyNmtzejg1NjNfcmVnaXN0ZXJfc2V0LFxcbitcXHRcXHQubl9waW5zID0gMixcXG4rXFx0XFx0Lm5fcGVyX291dCA9IDMsXFxuIFxcdH0sXFxuIFxcbiBcXHRbS1NaODc5NV0gPSB7XFxuQEAgLTE0MTQsNiArMTQxOCw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcXG4gXFx0XFx0LnNnbWlpX3BvcnQgPSA3LFxcbiBcXHRcXHQud3JfdGFibGUgPSBcXHUwMDI2a3N6OTQ3N19yZWdpc3Rlcl9zZXQsXFxuIFxcdFxcdC5yZF90YWJsZSA9IFxcdTAwMjZrc3o5NDc3X3JlZ2lzdGVyX3NldCxcXG4rXFx0XFx0Lm5fcGlucyA9IDIsXFxuK1xcdFxcdC5uX3Blcl9vdXQgPSAzLFxcbiBcXHR9LFxcbiBcXG4gXFx0W0tTWjk4OTZdID0ge1xcbkBAIC0xNTQ0LDYgKzE1NTAsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XFxuIFxcdFxcdC5pbnRlcm5hbF9waHkgPSB7dHJ1ZSwgdHJ1ZSwgZmFsc2V9LFxcbiBcXHRcXHQuZ2JpdF9jYXBhYmxlID0ge3RydWUsIHRydWUsIHRydWV9LFxcbiBcXHRcXHQucHRwX2NhcGFibGUgPSB0cnVlLFxcbitcXHRcXHQubl9waW5zID0gMixcXG4rXFx0XFx0Lm5fcGVyX291dCA9IDMsXFxuIFxcdH0sXFxuIFxcbiBcXHRbS1NaODU2N10gPSB7XFxuQEAgLTE1ODEsNiArMTU4OSw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcXG4gXFx0XFx0LmdiaXRfY2FwYWJsZVxcdD0ge2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSxcXG4gXFx0XFx0XFx0XFx0ICAgdHJ1ZSwgdHJ1ZX0sXFxuIFxcdFxcdC5wdHBfY2FwYWJsZSA9IHRydWUsXFxuK1xcdFxcdC5uX3BpbnMgPSAyLFxcbitcXHRcXHQubl9wZXJfb3V0ID0gMyxcXG4gXFx0fSxcXG4gXFxuIFxcdFtLU1o5NTY3XSA9IHtcXG5AQCAtMTYxNSw2ICsxNjI1LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xcbiBcXHRcXHRcXHRcXHQgICB0cnVlLCBmYWxzZSwgZmFsc2V9LFxcbiBcXHRcXHQuZ2JpdF9jYXBhYmxlXFx0PSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZX0sXFxuIFxcdFxcdC5wdHBfY2FwYWJsZSA9IHRydWUsXFxuK1xcdFxcdC5uX3BpbnMgPSAyLFxcbitcXHRcXHQubl9wZXJfb3V0ID0gMyxcXG4gXFx0fSxcXG4gXFxuIFxcdFtMQU45MzcwXSA9IHtcXG5AQCAtMTY0Niw2ICsxNjU4LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xcbiBcXHRcXHQuc3VwcG9ydHNfcmdtaWkgPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWV9LFxcbiBcXHRcXHQuaW50ZXJuYWxfcGh5ID0ge3RydWUsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlfSxcXG4gXFx0XFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcXG4rXFx0XFx0Lm5fcGlucyA9IDIsXFxuK1xcdFxcdC5uX3Blcl9vdXQgPSAzLFxcbiBcXHR9LFxcbiBcXG4gXFx0W0xBTjkzNzFdID0ge1xcbkBAIC0xNjc3LDYgKzE2OTEsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XFxuIFxcdFxcdC5zdXBwb3J0c19yZ21paSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZX0sXFxuIFxcdFxcdC5pbnRlcm5hbF9waHkgPSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlfSxcXG4gXFx0XFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcXG4rXFx0XFx0Lm5fcGlucyA9IDIsXFxuK1xcdFxcdC5uX3Blcl9vdXQgPSAzLFxcbiBcXHR9LFxcbiBcXG4gXFx0W0xBTjkzNzJdID0ge1xcbkBAIC0xNzEyLDYgKzE3MjgsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XFxuIFxcdFxcdC5pbnRlcm5hbF9waHlcXHQ9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLFxcbiBcXHRcXHRcXHRcXHQgICBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWV9LFxcbiBcXHRcXHQucHRwX2NhcGFibGUgPSB0cnVlLFxcbitcXHRcXHQubl9waW5zID0gMixcXG4rXFx0XFx0Lm5fcGVyX291dCA9IDMsXFxuIFxcdH0sXFxuIFxcbiBcXHRbTEFOOTM3M10gPSB7XFxuQEAgLTE3NDcsNiArMTc2NSw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcXG4gXFx0XFx0LmludGVybmFsX3BoeVxcdD0ge3RydWUsIHRydWUsIHRydWUsIGZhbHNlLFxcbiBcXHRcXHRcXHRcXHQgICBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWV9LFxcbiBcXHRcXHQucHRwX2NhcGFibGUgPSB0cnVlLFxcbitcXHRcXHQubl9waW5zID0gMixcXG4rXFx0XFx0Lm5fcGVyX291dCA9IDMsXFxuIFxcdH0sXFxuIFxcbiBcXHRbTEFOOTM3NF0gPSB7XFxuQEAgLTE3ODIsNiArMTgwMiw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcXG4gXFx0XFx0LmludGVybmFsX3BoeVxcdD0ge3RydWUsIHRydWUsIHRydWUsIHRydWUsXFxuIFxcdFxcdFxcdFxcdCAgIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZX0sXFxuIFxcdFxcdC5wdHBfY2FwYWJsZSA9IHRydWUsXFxuK1xcdFxcdC5uX3BpbnMgPSAyLFxcbitcXHRcXHQubl9wZXJfb3V0ID0gMyxcXG4gXFx0fSxcXG4gXFxuIFxcdFtMQU45NjQ2XSA9IHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaFxcbmluZGV4IGNiZTk4NDk0NTc4YzMuLjExNTViMzkzNTBjMmIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmhcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaFxcbkBAIC0xMzksNiArMTM5LDggQEAgc3RydWN0IGtzel9jaGlwX2RhdGEge1xcbiBcXHR1OCBzZ21paV9wb3J0O1xcbiBcXHRjb25zdCBzdHJ1Y3QgcmVnbWFwX2FjY2Vzc190YWJsZSAqd3JfdGFibGU7XFxuIFxcdGNvbnN0IHN0cnVjdCByZWdtYXBfYWNjZXNzX3RhYmxlICpyZF90YWJsZTtcXG4rXFx0Y29uc3QgdTggbl9waW5zO1xcbitcXHRjb25zdCB1OCBuX3Blcl9vdXQ7XFxuIH07XFxuIFxcbiBzdHJ1Y3Qga3N6X2lycSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmNcXG5pbmRleCAzOWNjNzBkNjU5MDBiLi5kMzMwMzQ4OTJhOGY2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmNcXG5AQCAtMjYsNiArMjYsNyBAQFxcbiAgKi9cXG4gI2RlZmluZSBLU1pfTUFYX0RSSUZUX0NPUlIgNjI0OTk5OVxcbiAjZGVmaW5lIEtTWl9NQVhfUFVMU0VfV0lEVEggMTI1MDAwMDAwTExcXG4rI2RlZmluZSBLU1o4NDYzX01BWF9QVUxTRV9XSURUSCA1MDAwMDBMTFxcbiBcXG4gI2RlZmluZSBLU1pfUFRQX0lOQ19OUyA0MFVMTCAgLyogSFcgY2xvY2sgaXMgaW5jcmVtZW50ZWQgZXZlcnkgNDAgbnMgKGJ5IDQwKSAqL1xcbiAjZGVmaW5lIEtTWl9QVFBfU1VCTlNfQklUUyAzMlxcbkBAIC02Myw2ICs2NCwxNyBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X2dwaW8oc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4gXFx0XFx0XFx0IExFRF9TUkNfUFRQX0dQSU9fMSB8IExFRF9TUkNfUFRQX0dQSU9fMik7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfdG91X3Jlc2V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHVuaXQpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGtzel9ybXcxNihkZXYsIEtTWjg0NjNfVE9VX1NXX1JTVCwgQklUKHVuaXQpLCBCSVQodW5pdCkpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIGtzel9ybXcxNihkZXYsIEtTWjg0NjNfVE9VX1NXX1JTVCwgQklUKHVuaXQpLCAwKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBrc3pfcHRwX3RvdV9yZXNldChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCB1bml0KVxcbiB7XFxuIFxcdHUzMiBkYXRhO1xcbkBAIC04Niw3ICs5OCw3IEBAIHN0YXRpYyBpbnQga3N6X3B0cF90b3VfcmVzZXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdClcXG4gXFx0XFx0XFx0IDApO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeSh1NjQgcHVsc2VfbnMpXFxuK3N0YXRpYyBpbnQga3N6X3B0cF90b3VfcHVsc2VfdmVyaWZ5KHU2NCBwdWxzZV9ucywgdTMyIG1hc2spXFxuIHtcXG4gXFx0dTMyIGRhdGE7XFxuIFxcbkBAIC05NCw3ICsxMDYsNyBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeSh1NjQgcHVsc2VfbnMpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0ZGF0YSA9IChwdWxzZV9ucyAvIDgpO1xcbi1cXHRpZiAoIUZJRUxEX0ZJVChUUklHX1BVTFNFX1dJRFRIX00sIGRhdGEpKVxcbitcXHRpZiAoKG1hc2sgXFx1MDAyNiBkYXRhKSAhPSBkYXRhKVxcbiBcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC0xMjAsNiArMTMyLDI4IEBAIHN0YXRpYyBpbnQga3N6X3B0cF90b3VfdGFyZ2V0X3RpbWVfc2V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGtzejg0NjNfcHRwX3RvdV9zdGFydChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCB1bml0KVxcbit7XFxuK1xcdHUxNiBkYXRhO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0ga3N6X3JtdzE2KGRldiwgS1NaODQ2M19UT1VfRU4sIEJJVCh1bml0KSwgQklUKHVuaXQpKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IGtzel9yZWFkMTYoZGV2LCBLU1o4NDYzX1RPVV9BQ1RJVkUsIFxcdTAwMjZkYXRhKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmICghKGRhdGEgXFx1MDAyNiBCSVQodW5pdCkpKSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LVxcdTAwM2VkZXYsIFxcXCIlczogVHJpZ2dlciB1bml0JWQgZXJyb3IhXFxcXG5cXFwiLCBfX2Z1bmNfXyxcXG4rXFx0XFx0XFx0dW5pdCk7XFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBrc3pfcHRwX3RvdV9zdGFydChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCB1bml0KVxcbiB7XFxuIFxcdHUzMiBkYXRhO1xcbkBAIC0xNDcsNiArMTgxLDU2IEBAIHN0YXRpYyBpbnQga3N6X3B0cF90b3Vfc3RhcnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfY29uZmlndXJlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHRcXHR1MzIgY3ljbGVfd2lkdGhfbnMsIHUzMiBwdWxzZV93aWR0aF9ucyxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IHRpbWVzcGVjNjQgY29uc3QgKnRhcmdldF90aW1lLFxcbitcXHRcXHRcXHRcXHRcXHR1OCBpbmRleClcXG4re1xcbitcXHRzdHJ1Y3QgcHRwX3Bpbl9kZXNjICpwaW4gPSBcXHUwMDI2ZGV2LVxcdTAwM2VwdHBfZGF0YS5waW5fY29uZmlnW2luZGV4XTtcXG4rXFx0dTE2IGNmZ19iYXNlID0gS1NaODQ2M19UUklHMV9DRkcgKyBLU1o4NDYzX1RSSUdOX0NGR19TSVpFICogcGluLVxcdTAwM2VjaGFuO1xcbitcXHR1MTYgZGF0YTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdC8qIEhhcmR3YXJlIGhhcyBvbmx5IDMyIGJpdCAqL1xcbitcXHRpZiAoKHRhcmdldF90aW1lLVxcdTAwM2V0dl9zZWMgXFx1MDAyNiAweGZmZmZmZmZmKSAhPSB0YXJnZXRfdGltZS1cXHUwMDNldHZfc2VjKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGRhdGEgPSBLU1o4NDYzX05PVElGWV9CSVQgfFxcbitcXHQgICAgICAgRklFTERfUFJFUChLU1o4NDYzX1BBVFRFUk5fTSwgVFJJR19QT1NfUEVSSU9EKSB8XFxuK1xcdCAgICAgICBwaW4tXFx1MDAzZWluZGV4O1xcbitcXHRyZXQgPSBrc3pfd3JpdGUxNihkZXYsIGNmZ19iYXNlICsgS1NaODQ2M19QQVRURVJOX09GRiwgZGF0YSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBrc3pfd3JpdGUzMihkZXYsIGNmZ19iYXNlICsgS1NaODQ2M19DWUNMRV9XSURUSF9PRkYsXFxuK1xcdFxcdFxcdCAgY3ljbGVfd2lkdGhfbnMpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0LyogU2V0IGN5Y2xlIGNvdW50IDAgLSBJbmZpbml0ZSAqL1xcbitcXHRyZXQgPSBrc3pfd3JpdGUxNihkZXYsIGNmZ19iYXNlICsgS1NaODQ2M19DWUNMRV9DTlRfT0ZGLCAwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIEtTWjg0NjMgdXNlcyBhIDggbnMgdW5pdCB2YWx1ZSB0byBjb21wdXRlIHRoZSBwdWxzZSB3aWR0aCAqL1xcbitcXHRkYXRhID0gKHB1bHNlX3dpZHRoX25zIC8gOCk7XFxuK1xcdHJldCA9IGtzel93cml0ZTE2KGRldiwgY2ZnX2Jhc2UgKyBLU1o4NDYzX1BVTFNFX1dJRFRIX09GRiwgZGF0YSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBrc3pfd3JpdGUzMihkZXYsIGNmZ19iYXNlICsgS1NaODQ2M19UQVJHRVRfTlNFQyxcXG4rXFx0XFx0XFx0ICB0YXJnZXRfdGltZS1cXHUwMDNldHZfbnNlYyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBrc3pfd3JpdGUzMihkZXYsIGNmZ19iYXNlICsgS1NaODQ2M19UQVJHRVRfU0VDLFxcbitcXHRcXHRcXHQgIHRhcmdldF90aW1lLVxcdTAwM2V0dl9zZWMpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQga3N6X3B0cF9jb25maWd1cmVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICB1MzIgY3ljbGVfd2lkdGhfbnMsIHUzMiBwdWxzZV93aWR0aF9ucyxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGNvbnN0ICp0YXJnZXRfdGltZSxcXG5AQCAtMTgzLDE3ICsyNjcsMTEgQEAgc3RhdGljIGludCBrc3pfcHRwX2NvbmZpZ3VyZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQga3N6X3B0cF9lbmFibGVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXFxuLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LFxcbi1cXHRcXHRcXHRcXHQgaW50IG9uKVxcbitzdGF0aWMgaW50IGtzel9wdHBfZ2V0X3BpbihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0KVxcbiB7XFxuIFxcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gXFx1MDAyNmRldi1cXHUwMDNlcHRwX2RhdGE7XFxuLVxcdHU2NCByZXFfcHVsc2Vfd2lkdGhfbnM7XFxuLVxcdHU2NCBjeWNsZV93aWR0aF9ucztcXG4tXFx0dTY0IHB1bHNlX3dpZHRoX25zO1xcbi1cXHRpbnQgcGluID0gMDtcXG4tXFx0dTMyIGRhdGEzMjtcXG4tXFx0aW50IHJldDtcXG4rXFx0aW50IHBpbjtcXG4gXFxuIFxcdGlmIChyZXF1ZXN0LVxcdTAwM2VmbGFncyBcXHUwMDI2IH5QVFBfUEVST1VUX0RVVFlfQ1lDTEUpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5AQCAtMjA2LDYgKzI4NCwxMTQgQEAgc3RhdGljIGludCBrc3pfcHRwX2VuYWJsZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcXG4gXFx0aWYgKHBpbiBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4rXFx0cmV0dXJuIHBpbjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBrc3pfcHRwX2NvbXB1dGVfcGVyb3V0X2N5Y2xlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgY29uc3QgKnJlcXVlc3QsXFxuK1xcdFxcdFxcdFxcdFxcdHU2NCAqY3ljbGVfd2lkdGhfbnMpXFxuK3tcXG4rXFx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBcXHUwMDI2ZGV2LVxcdTAwM2VwdHBfZGF0YTtcXG4rXFxuK1xcdHB0cF9kYXRhLVxcdTAwM2VwZXJvdXRfdGFyZ2V0X3RpbWVfZmlyc3QudHZfc2VjICA9IHJlcXVlc3QtXFx1MDAzZXN0YXJ0LnNlYztcXG4rXFx0cHRwX2RhdGEtXFx1MDAzZXBlcm91dF90YXJnZXRfdGltZV9maXJzdC50dl9uc2VjID0gcmVxdWVzdC1cXHUwMDNlc3RhcnQubnNlYztcXG4rXFxuK1xcdHB0cF9kYXRhLVxcdTAwM2VwZXJvdXRfcGVyaW9kLnR2X3NlYyA9IHJlcXVlc3QtXFx1MDAzZXBlcmlvZC5zZWM7XFxuK1xcdHB0cF9kYXRhLVxcdTAwM2VwZXJvdXRfcGVyaW9kLnR2X25zZWMgPSByZXF1ZXN0LVxcdTAwM2VwZXJpb2QubnNlYztcXG4rXFxuK1xcdCpjeWNsZV93aWR0aF9ucyA9IHRpbWVzcGVjNjRfdG9fbnMoXFx1MDAyNnB0cF9kYXRhLVxcdTAwM2VwZXJvdXRfcGVyaW9kKTtcXG4rXFx0aWYgKCgqY3ljbGVfd2lkdGhfbnMgXFx1MDAyNiBUUklHX0NZQ0xFX1dJRFRIX00pICE9ICpjeWNsZV93aWR0aF9ucykge1xcbitcXHRcXHQqY3ljbGVfd2lkdGhfbnMgPSAwO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB1NjQga3N6X3B0cF9jb21wdXRlX3Blcm91dF9wdWxzZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LFxcbitcXHRcXHRcXHRcXHRcXHR1NjQgbWF4X3B1bHNlX3dpZHRoKVxcbit7XFxuK1xcdHU2NCByZXFfcHVsc2Vfd2lkdGhfbnM7XFxuK1xcbitcXHRpZiAocmVxdWVzdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQVFBfUEVST1VUX0RVVFlfQ1lDTEUpXFxuK1xcdFxcdHJldHVybiByZXF1ZXN0LVxcdTAwM2Vvbi5zZWMgKiBOU0VDX1BFUl9TRUMgK1xcdHJlcXVlc3QtXFx1MDAzZW9uLm5zZWM7XFxuK1xcbitcXHQvKiBVc2UgYSBkdXR5IGN5Y2xlIG9mIDUwJS4gTWF4aW11bSBwdWxzZSB3aWR0aCBzdXBwb3J0ZWQgYnkgdGhlXFxuK1xcdCAqIGhhcmR3YXJlIGlzIGEgbGl0dGxlIGJpdCBtb3JlIHRoYW4gMTI1IG1zLlxcbitcXHQgKi9cXG4rXFx0cmVxX3B1bHNlX3dpZHRoX25zID0gKHJlcXVlc3QtXFx1MDAzZXBlcmlvZC5zZWMgKiBOU0VDX1BFUl9TRUMgK1xcbitcXHRcXHRcXHQgICAgICByZXF1ZXN0LVxcdTAwM2VwZXJpb2QubnNlYykgLyAyO1xcbitcXHRyZXR1cm4gbWluX3QodTY0LCByZXFfcHVsc2Vfd2lkdGhfbnMsIG1heF9wdWxzZV93aWR0aCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfZW5hYmxlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgY29uc3QgKnJlcXVlc3QsXFxuK1xcdFxcdFxcdFxcdCAgICAgaW50IG9uKVxcbit7XFxuK1xcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gXFx1MDAyNmRldi1cXHUwMDNlcHRwX2RhdGE7XFxuK1xcdHU2NCBjeWNsZV93aWR0aF9ucztcXG4rXFx0dTY0IHB1bHNlX3dpZHRoX25zO1xcbitcXHRpbnQgcGluO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cGluID0ga3N6X3B0cF9nZXRfcGluKGRldiwgcmVxdWVzdCk7XFxuK1xcdGlmIChwaW4gXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcGluO1xcbitcXG4rXFx0cmV0ID0ga3N6ODQ2M19wdHBfdG91X3Jlc2V0KGRldiwgcmVxdWVzdC1cXHUwMDNlaW5kZXgpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKCFvbikge1xcbitcXHRcXHRwdHBfZGF0YS1cXHUwMDNldG91X21vZGUgPSBLU1pfUFRQX1RPVV9JRExFO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXHRyZXQgPSBrc3pfcHRwX2NvbXB1dGVfcGVyb3V0X2N5Y2xlKGRldiwgcmVxdWVzdCwgXFx1MDAyNmN5Y2xlX3dpZHRoX25zKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cHVsc2Vfd2lkdGhfbnMgPSBrc3pfcHRwX2NvbXB1dGVfcGVyb3V0X3B1bHNlKGRldiwgcmVxdWVzdCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgS1NaODQ2M19NQVhfUFVMU0VfV0lEVEgpO1xcbitcXG4rXFx0cmV0ID0ga3N6X3B0cF90b3VfcHVsc2VfdmVyaWZ5KHB1bHNlX3dpZHRoX25zLFxcbitcXHRcXHRcXHRcXHQgICAgICAgS1NaODQ2M19UUklHX1BVTFNFX1dJRFRIX00pO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0ga3N6ODQ2M19wdHBfY29uZmlndXJlX3Blcm91dChkZXYsIGN5Y2xlX3dpZHRoX25zLCBwdWxzZV93aWR0aF9ucyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNnB0cF9kYXRhLVxcdTAwM2VwZXJvdXRfdGFyZ2V0X3RpbWVfZmlyc3QsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHBpbik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBrc3pfcHRwX3RvdV9ncGlvKGRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBrc3o4NDYzX3B0cF90b3Vfc3RhcnQoZGV2LCByZXF1ZXN0LVxcdTAwM2VpbmRleCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRwdHBfZGF0YS1cXHUwMDNldG91X21vZGUgPSBLU1pfUFRQX1RPVV9QRVJPVVQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBrc3pfcHRwX2VuYWJsZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgY29uc3QgKnJlcXVlc3QsXFxuK1xcdFxcdFxcdFxcdCBpbnQgb24pXFxuK3tcXG4rXFx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBcXHUwMDI2ZGV2LVxcdTAwM2VwdHBfZGF0YTtcXG4rXFx0dTY0IGN5Y2xlX3dpZHRoX25zO1xcbitcXHR1NjQgcHVsc2Vfd2lkdGhfbnM7XFxuK1xcdGludCBwaW4gPSAwO1xcbitcXHR1MzIgZGF0YTMyO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cGluID0ga3N6X3B0cF9nZXRfcGluKGRldiwgcmVxdWVzdCk7XFxuK1xcdGlmIChwaW4gXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcGluO1xcbitcXG4gXFx0ZGF0YTMyID0gRklFTERfUFJFUChQVFBfR1BJT19JTkRFWCwgcGluKSB8XFxuIFxcdFxcdCBGSUVMRF9QUkVQKFBUUF9UT1VfSU5ERVgsIHJlcXVlc3QtXFx1MDAzZWluZGV4KTtcXG4gXFx0cmV0ID0ga3N6X3JtdzMyKGRldiwgUkVHX1BUUF9VTklUX0lOREVYX180LFxcbkBAIC0yMjEsMzEgKzQwNywxMyBAQCBzdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbiBcXHRcXHRwdHBfZGF0YS1cXHUwMDNldG91X21vZGUgPSBLU1pfUFRQX1RPVV9JRExFO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbitcXHRyZXQgPSBrc3pfcHRwX2NvbXB1dGVfcGVyb3V0X2N5Y2xlKGRldiwgcmVxdWVzdCwgXFx1MDAyNmN5Y2xlX3dpZHRoX25zKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cHVsc2Vfd2lkdGhfbnMgPSBrc3pfcHRwX2NvbXB1dGVfcGVyb3V0X3B1bHNlKGRldiwgcmVxdWVzdCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgS1NaX01BWF9QVUxTRV9XSURUSCk7XFxuIFxcbi1cXHRwdHBfZGF0YS1cXHUwMDNlcGVyb3V0X3RhcmdldF90aW1lX2ZpcnN0LnR2X3NlYyAgPSByZXF1ZXN0LVxcdTAwM2VzdGFydC5zZWM7XFxuLVxcdHB0cF9kYXRhLVxcdTAwM2VwZXJvdXRfdGFyZ2V0X3RpbWVfZmlyc3QudHZfbnNlYyA9IHJlcXVlc3QtXFx1MDAzZXN0YXJ0Lm5zZWM7XFxuLVxcbi1cXHRwdHBfZGF0YS1cXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9zZWMgPSByZXF1ZXN0LVxcdTAwM2VwZXJpb2Quc2VjO1xcbi1cXHRwdHBfZGF0YS1cXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9uc2VjID0gcmVxdWVzdC1cXHUwMDNlcGVyaW9kLm5zZWM7XFxuLVxcbi1cXHRjeWNsZV93aWR0aF9ucyA9IHRpbWVzcGVjNjRfdG9fbnMoXFx1MDAyNnB0cF9kYXRhLVxcdTAwM2VwZXJvdXRfcGVyaW9kKTtcXG4tXFx0aWYgKChjeWNsZV93aWR0aF9ucyBcXHUwMDI2IFRSSUdfQ1lDTEVfV0lEVEhfTSkgIT0gY3ljbGVfd2lkdGhfbnMpXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXG4tXFx0aWYgKHJlcXVlc3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUFRQX1BFUk9VVF9EVVRZX0NZQ0xFKSB7XFxuLVxcdFxcdHB1bHNlX3dpZHRoX25zID0gcmVxdWVzdC1cXHUwMDNlb24uc2VjICogTlNFQ19QRVJfU0VDICtcXG4tXFx0XFx0XFx0cmVxdWVzdC1cXHUwMDNlb24ubnNlYztcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0LyogVXNlIGEgZHV0eSBjeWNsZSBvZiA1MCUuIE1heGltdW0gcHVsc2Ugd2lkdGggc3VwcG9ydGVkIGJ5IHRoZVxcbi1cXHRcXHQgKiBoYXJkd2FyZSBpcyBhIGxpdHRsZSBiaXQgbW9yZSB0aGFuIDEyNSBtcy5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdHJlcV9wdWxzZV93aWR0aF9ucyA9IChyZXF1ZXN0LVxcdTAwM2VwZXJpb2Quc2VjICogTlNFQ19QRVJfU0VDICtcXG4tXFx0XFx0XFx0XFx0ICAgICAgcmVxdWVzdC1cXHUwMDNlcGVyaW9kLm5zZWMpIC8gMjtcXG4tXFx0XFx0cHVsc2Vfd2lkdGhfbnMgPSBtaW5fdCh1NjQsIHJlcV9wdWxzZV93aWR0aF9ucyxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIEtTWl9NQVhfUFVMU0VfV0lEVEgpO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXQgPSBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkocHVsc2Vfd2lkdGhfbnMpO1xcbitcXHRyZXQgPSBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkocHVsc2Vfd2lkdGhfbnMsIFRSSUdfUFVMU0VfV0lEVEhfTSk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbkBAIC03NTYsMTEgKzkyNCwxMSBAQCBzdGF0aWMgaW50IGtzel9wdHBfZ2V0dGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGtzel9wdHBfcmVzdGFydF9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4rc3RhdGljIGludCBrc3pfcHRwX3ByZXBhcmVfcmVzdGFydF9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0ICpyZXF1ZXN0KVxcbiB7XFxuIFxcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gXFx1MDAyNmRldi1cXHUwMDNlcHRwX2RhdGE7XFxuIFxcdHM2NCBub3dfbnMsIGZpcnN0X25zLCBwZXJpb2RfbnMsIG5leHRfbnM7XFxuLVxcdHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgcmVxdWVzdDtcXG4gXFx0c3RydWN0IHRpbWVzcGVjNjQgbmV4dDtcXG4gXFx0c3RydWN0IHRpbWVzcGVjNjQgbm93O1xcbiBcXHR1bnNpZ25lZCBpbnQgY291bnQ7XFxuQEAgLTc5MSw0MCArOTU5LDExMSBAQCBzdGF0aWMgaW50IGtzel9wdHBfcmVzdGFydF9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4gXFxuIFxcdC8qIFJlc3RhcnQgcGVyaW9kaWMgb3V0cHV0IHNpZ25hbCAqL1xcbiBcXHRuZXh0ID0gbnNfdG9fdGltZXNwZWM2NChuZXh0X25zKTtcXG4tXFx0cmVxdWVzdC5zdGFydC5zZWMgID0gbmV4dC50dl9zZWM7XFxuLVxcdHJlcXVlc3Quc3RhcnQubnNlYyA9IG5leHQudHZfbnNlYztcXG4tXFx0cmVxdWVzdC5wZXJpb2Quc2VjICA9IHB0cF9kYXRhLVxcdTAwM2VwZXJvdXRfcGVyaW9kLnR2X3NlYztcXG4tXFx0cmVxdWVzdC5wZXJpb2QubnNlYyA9IHB0cF9kYXRhLVxcdTAwM2VwZXJvdXRfcGVyaW9kLnR2X25zZWM7XFxuLVxcdHJlcXVlc3QuaW5kZXggPSAwO1xcbi1cXHRyZXF1ZXN0LmZsYWdzID0gMDtcXG4rXFx0cmVxdWVzdC1cXHUwMDNlc3RhcnQuc2VjICA9IG5leHQudHZfc2VjO1xcbitcXHRyZXF1ZXN0LVxcdTAwM2VzdGFydC5uc2VjID0gbmV4dC50dl9uc2VjO1xcbitcXHRyZXF1ZXN0LVxcdTAwM2VwZXJpb2Quc2VjICA9IHB0cF9kYXRhLVxcdTAwM2VwZXJvdXRfcGVyaW9kLnR2X3NlYztcXG4rXFx0cmVxdWVzdC1cXHUwMDNlcGVyaW9kLm5zZWMgPSBwdHBfZGF0YS1cXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9uc2VjO1xcbitcXHRyZXF1ZXN0LVxcdTAwM2VpbmRleCA9IDA7XFxuK1xcdHJlcXVlc3QtXFx1MDAzZWZsYWdzID0gMDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGtzel9wdHBfcmVzdGFydF9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IHJlcXVlc3Q7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBrc3pfcHRwX3ByZXBhcmVfcmVzdGFydF9wZXJvdXQoZGV2LCBcXHUwMDI2cmVxdWVzdCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRyZXR1cm4ga3N6X3B0cF9lbmFibGVfcGVyb3V0KGRldiwgXFx1MDAyNnJlcXVlc3QsIDEpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGtzel9wdHBfc2V0dGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcXG4tXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxcbitzdGF0aWMgaW50IGtzejg0NjNfcHRwX3Jlc3RhcnRfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuIHtcXG4tXFx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XFxuLVxcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTtcXG4tXFx0Y29uc3QgdTE2ICpyZWdzID0gZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VyZWdzO1xcbitcXHRzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IHJlcXVlc3Q7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlbG9jayk7XFxuK1xcdHJldCA9IGtzel9wdHBfcHJlcGFyZV9yZXN0YXJ0X3Blcm91dChkZXYsIFxcdTAwMjZyZXF1ZXN0KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBrc3o4NDYzX3B0cF9lbmFibGVfcGVyb3V0KGRldiwgXFx1MDAyNnJlcXVlc3QsIDEpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9fa3N6X3B0cF9zZXR0aW1lKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxcbit7XFxuK1xcdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cXHUwMDNlaW5mby1cXHUwMDNlcmVncztcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdC8qIFdyaXRlIHRvIHNoYWRvdyByZWdpc3RlcnMgYW5kIExvYWQgUFRQIGNsb2NrICovXFxuIFxcdHJldCA9IGtzel93cml0ZTE2KGRldiwgcmVnc1tQVFBfUlRDX1NVQl9OQU5PU0VDXSwgUFRQX1JUQ18wTlMpO1xcbiBcXHRpZiAocmV0KVxcbi1cXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdHJldCA9IGtzel93cml0ZTMyKGRldiwgcmVnc1tQVFBfUlRDX05BTk9TRUNdLCB0cy1cXHUwMDNldHZfbnNlYyk7XFxuIFxcdGlmIChyZXQpXFxuLVxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfU0VDXSwgdHMtXFx1MDAzZXR2X3NlYyk7XFxuIFxcdGlmIChyZXQpXFxuLVxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0cmV0ID0ga3N6X3JtdzE2KGRldiwgcmVnc1tQVFBfQ0xLX0NUUkxdLCBQVFBfTE9BRF9USU1FLCBQVFBfTE9BRF9USU1FKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGtzejg0NjNfcHRwX3NldHRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXFxuK1xcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXFxuK3tcXG4rXFx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XFxuK1xcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnB0cF9kYXRhLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldCA9IF9fa3N6X3B0cF9zZXR0aW1lKGRldiwgdHMpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIHVubG9jaztcXG4rXFxuK1xcdHN3aXRjaCAocHRwX2RhdGEtXFx1MDAzZXRvdV9tb2RlKSB7XFxuK1xcdGNhc2UgS1NaX1BUUF9UT1VfSURMRTpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRjYXNlIEtTWl9QVFBfVE9VX1BFUk9VVDpcXG4rXFx0XFx0cmV0ID0ga3N6ODQ2M19wdHBfcmVzdGFydF9wZXJvdXQoZGV2KTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlY2xvY2tfbG9jayk7XFxuK1xcdHB0cF9kYXRhLVxcdTAwM2VjbG9ja190aW1lID0gKnRzO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cHRwX2RhdGEtXFx1MDAzZWNsb2NrX2xvY2spO1xcbitcXG4rdW5sb2NrOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnB0cF9kYXRhLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQga3N6X3B0cF9zZXR0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxcbitcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXFxuK3tcXG4rXFx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XFxuK1xcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnB0cF9kYXRhLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldCA9IF9fa3N6X3B0cF9zZXR0aW1lKGRldiwgdHMpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIHVubG9jaztcXG4gXFxuQEAgLTg5MCwxOCArMTEyOSwxMyBAQCBzdGF0aWMgaW50IGtzel9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgbG9uZyBzY2FsZWRfcHBtKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGtzel9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKVxcbitzdGF0aWMgaW50IF9fa3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHM2NCBkZWx0YSlcXG4ge1xcbi1cXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTtcXG4tXFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IHB0cF9kYXRhX3RvX2tzel9kZXYocHRwX2RhdGEpO1xcbi1cXHRzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YTY0ID0gbnNfdG9fdGltZXNwZWM2NChkZWx0YSk7XFxuIFxcdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cXHUwMDNlaW5mby1cXHUwMDNlcmVncztcXG4gXFx0czMyIHNlYywgbnNlYztcXG4gXFx0dTE2IGRhdGExNjtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNnB0cF9kYXRhLVxcdTAwM2Vsb2NrKTtcXG4tXFxuIFxcdC8qIGRvIG5vdCB1c2UgbnNfdG9fdGltZXNwZWM2NCgpLFxcbiBcXHQgKiBib3RoIHNlYyBhbmQgbnNlYyBhcmUgc3VidHJhY3RlZCBieSBod1xcbiBcXHQgKi9cXG5AQCAtOTA5LDE1ICsxMTQzLDE1IEBAIHN0YXRpYyBpbnQga3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpXFxuIFxcbiBcXHRyZXQgPSBrc3pfd3JpdGUzMihkZXYsIHJlZ3NbUFRQX1JUQ19OQU5PU0VDXSwgYWJzKG5zZWMpKTtcXG4gXFx0aWYgKHJldClcXG4tXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRyZXQgPSBrc3pfd3JpdGUzMihkZXYsIHJlZ3NbUFRQX1JUQ19TRUNdLCBhYnMoc2VjKSk7XFxuIFxcdGlmIChyZXQpXFxuLVxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0cmV0ID0ga3N6X3JlYWQxNihkZXYsIHJlZ3NbUFRQX0NMS19DVFJMXSwgXFx1MDAyNmRhdGExNik7XFxuIFxcdGlmIChyZXQpXFxuLVxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0ZGF0YTE2IHw9IFBUUF9TVEVQX0FESjtcXG4gXFxuQEAgLTkyOCw2ICsxMTYyLDU2IEBAIHN0YXRpYyBpbnQga3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpXFxuIFxcdFxcdGRhdGExNiB8PSBQVFBfU1RFUF9ESVI7XFxuIFxcbiBcXHRyZXQgPSBrc3pfd3JpdGUxNihkZXYsIHJlZ3NbUFRQX0NMS19DVFJMXSwgZGF0YTE2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGtzejg0NjNfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHM2NCBkZWx0YSlcXG4re1xcbitcXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTtcXG4rXFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IHB0cF9kYXRhX3RvX2tzel9kZXYocHRwX2RhdGEpO1xcbitcXHRzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YTY0ID0gbnNfdG9fdGltZXNwZWM2NChkZWx0YSk7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRyZXQgPSBfX2tzel9wdHBfYWRqdGltZShkZXYsIGRlbHRhKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcbitcXHRzd2l0Y2ggKHB0cF9kYXRhLVxcdTAwM2V0b3VfbW9kZSkge1xcbitcXHRjYXNlIEtTWl9QVFBfVE9VX0lETEU6XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0Y2FzZSBLU1pfUFRQX1RPVV9QRVJPVVQ6XFxuK1xcdFxcdHJldCA9IGtzejg0NjNfcHRwX3Jlc3RhcnRfcGVyb3V0KGRldik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2cHRwX2RhdGEtXFx1MDAzZWNsb2NrX2xvY2spO1xcbitcXHRwdHBfZGF0YS1cXHUwMDNlY2xvY2tfdGltZSA9IHRpbWVzcGVjNjRfYWRkKHB0cF9kYXRhLVxcdTAwM2VjbG9ja190aW1lLCBkZWx0YTY0KTtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnB0cF9kYXRhLVxcdTAwM2VjbG9ja19sb2NrKTtcXG4rXFxuK3VubG9jazpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlbG9jayk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQga3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpXFxuK3tcXG4rXFx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XFxuK1xcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTtcXG4rXFx0c3RydWN0IHRpbWVzcGVjNjQgZGVsdGE2NCA9IG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHRwX2RhdGEtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0ID0gX19rc3pfcHRwX2FkanRpbWUoZGV2LCBkZWx0YSk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gdW5sb2NrO1xcbiBcXG5AQCAtOTUyLDYgKzEyMzYsMjYgQEAgc3RhdGljIGludCBrc3pfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHM2NCBkZWx0YSlcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBrc3o4NDYzX3B0cF9lbmFibGUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcmVxLCBpbnQgb24pXFxuK3tcXG4rXFx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XFxuK1xcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHN3aXRjaCAocmVxLVxcdTAwM2V0eXBlKSB7XFxuK1xcdGNhc2UgUFRQX0NMS19SRVFfUEVST1VUOlxcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdHJldCA9IGtzejg0NjNfcHRwX2VuYWJsZV9wZXJvdXQoZGV2LCBcXHUwMDI2cmVxLVxcdTAwM2VwZXJvdXQsIG9uKTtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQga3N6X3B0cF9lbmFibGUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXFxuIFxcdFxcdFxcdCAgc3RydWN0IHB0cF9jbG9ja19yZXF1ZXN0ICpyZXEsIGludCBvbilcXG4ge1xcbkBAIC0xMDI4LDE3ICsxMzMyLDMzIEBAIHN0YXRpYyBpbnQga3N6X3B0cF9zdGFydF9jbG9jayhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4taW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbit2b2lkIGtzejg0NjNfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4re1xcbitcXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXFx1MDAzZXByaXY7XFxuK1xcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhO1xcbitcXG4rXFx0cHRwX2RhdGEgPSBcXHUwMDI2ZGV2LVxcdTAwM2VwdHBfZGF0YTtcXG4rXFxuK1xcdHB0cF9kYXRhLVxcdTAwM2VjYXBzLm93bmVyXFx0XFx0PSBUSElTX01PRFVMRTtcXG4rXFx0c25wcmludGYocHRwX2RhdGEtXFx1MDAzZWNhcHMubmFtZSwgMTYsIFxcXCJNaWNyb2NoaXAgQ2xvY2tcXFwiKTtcXG4rXFx0cHRwX2RhdGEtXFx1MDAzZWNhcHMubWF4X2FkalxcdFxcdD0gS1NaX01BWF9EUklGVF9DT1JSO1xcbitcXHRwdHBfZGF0YS1cXHUwMDNlY2Fwcy5nZXR0aW1lNjRcXHQ9IGtzel9wdHBfZ2V0dGltZTtcXG4rXFx0cHRwX2RhdGEtXFx1MDAzZWNhcHMuc2V0dGltZTY0XFx0PSBrc3o4NDYzX3B0cF9zZXR0aW1lO1xcbitcXHRwdHBfZGF0YS1cXHUwMDNlY2Fwcy5hZGpmaW5lXFx0XFx0PSBrc3pfcHRwX2FkamZpbmU7XFxuK1xcdHB0cF9kYXRhLVxcdTAwM2VjYXBzLmFkanRpbWVcXHRcXHQ9IGtzejg0NjNfcHRwX2FkanRpbWU7XFxuK1xcdHB0cF9kYXRhLVxcdTAwM2VjYXBzLmRvX2F1eF93b3JrXFx0PSBrc3pfcHRwX2RvX2F1eF93b3JrO1xcbitcXHRwdHBfZGF0YS1cXHUwMDNlY2Fwcy5lbmFibGVcXHRcXHQ9IGtzejg0NjNfcHRwX2VuYWJsZTtcXG4rXFx0cHRwX2RhdGEtXFx1MDAzZWNhcHMudmVyaWZ5XFx0XFx0PSBrc3pfcHRwX3ZlcmlmeV9waW47XFxuK1xcdHB0cF9kYXRhLVxcdTAwM2VjYXBzLm5fcGluc1xcdFxcdD0gZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VuX3BpbnM7XFxuK1xcdHB0cF9kYXRhLVxcdTAwM2VjYXBzLm5fcGVyX291dFxcdD0gZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VuX3Blcl9vdXQ7XFxuK31cXG4rXFxuK3ZvaWQga3N6X3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIHtcXG4gXFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVxcdTAwM2Vwcml2O1xcbi1cXHRjb25zdCB1MTYgKnJlZ3MgPSBkZXYtXFx1MDAzZWluZm8tXFx1MDAzZXJlZ3M7XFxuIFxcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhO1xcbi1cXHRpbnQgcmV0O1xcbi1cXHR1OCBpO1xcbiBcXG4gXFx0cHRwX2RhdGEgPSBcXHUwMDI2ZGV2LVxcdTAwM2VwdHBfZGF0YTtcXG4tXFx0bXV0ZXhfaW5pdChcXHUwMDI2cHRwX2RhdGEtXFx1MDAzZWxvY2spO1xcbi1cXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2cHRwX2RhdGEtXFx1MDAzZWNsb2NrX2xvY2spO1xcbiBcXG4gXFx0cHRwX2RhdGEtXFx1MDAzZWNhcHMub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFO1xcbiBcXHRzbnByaW50ZihwdHBfZGF0YS1cXHUwMDNlY2Fwcy5uYW1lLCAxNiwgXFxcIk1pY3JvY2hpcCBDbG9ja1xcXCIpO1xcbkBAIC0xMDUwLDE0ICsxMzcwLDI3IEBAIGludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFx0cHRwX2RhdGEtXFx1MDAzZWNhcHMuZG9fYXV4X3dvcmtcXHQ9IGtzel9wdHBfZG9fYXV4X3dvcms7XFxuIFxcdHB0cF9kYXRhLVxcdTAwM2VjYXBzLmVuYWJsZVxcdFxcdD0ga3N6X3B0cF9lbmFibGU7XFxuIFxcdHB0cF9kYXRhLVxcdTAwM2VjYXBzLnZlcmlmeVxcdFxcdD0ga3N6X3B0cF92ZXJpZnlfcGluO1xcbi1cXHRwdHBfZGF0YS1cXHUwMDNlY2Fwcy5uX3BpbnNcXHRcXHQ9IEtTWl9QVFBfTl9HUElPO1xcbi1cXHRwdHBfZGF0YS1cXHUwMDNlY2Fwcy5uX3Blcl9vdXRcXHQ9IDM7XFxuK1xcdHB0cF9kYXRhLVxcdTAwM2VjYXBzLm5fcGluc1xcdFxcdD0gZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VuX3BpbnM7XFxuK1xcdHB0cF9kYXRhLVxcdTAwM2VjYXBzLm5fcGVyX291dFxcdD0gZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VuX3Blcl9vdXQ7XFxuK31cXG4rXFxuK2ludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4re1xcbitcXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXFx1MDAzZXByaXY7XFxuK1xcdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cXHUwMDNlaW5mby1cXHUwMDNlcmVncztcXG4rXFx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGE7XFxuK1xcdGludCByZXQ7XFxuK1xcdHU4IGk7XFxuK1xcbitcXHRwdHBfZGF0YSA9IFxcdTAwMjZkZXYtXFx1MDAzZXB0cF9kYXRhO1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlbG9jayk7XFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlY2xvY2tfbG9jayk7XFxuIFxcbiBcXHRyZXQgPSBrc3pfcHRwX3N0YXJ0X2Nsb2NrKGRldik7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgS1NaX1BUUF9OX0dQSU87IGkrKykge1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VuX3BpbnM7IGkrKykge1xcbiBcXHRcXHRzdHJ1Y3QgcHRwX3Bpbl9kZXNjICpwdHBfcGluID0gXFx1MDAyNnB0cF9kYXRhLVxcdTAwM2VwaW5fY29uZmlnW2ldO1xcbiBcXG4gXFx0XFx0c25wcmludGYocHRwX3Bpbi1cXHUwMDNlbmFtZSxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaFxcbmluZGV4IDcwNjdlYzliZDFlNmYuLjkyNTg5Y2YzNzNhYzIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmhcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaFxcbkBAIC0xMiw3ICsxMiw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXFx1MDAzZVxcbiBcXG4tI2RlZmluZSBLU1pfUFRQX05fR1BJT1xcdFxcdDJcXG4rI2RlZmluZSBLU1pfUFRQX05fR1BJT1xcdFxcdDEyXFxuIFxcbiBlbnVtIGtzel9wdHBfdG91X21vZGUge1xcbiBcXHRLU1pfUFRQX1RPVV9JRExFLFxcbkBAIC0zMyw2ICszMyw4IEBAIHN0cnVjdCBrc3pfcHRwX2RhdGEge1xcbiBcXHRzdHJ1Y3QgdGltZXNwZWM2NCBwZXJvdXRfcGVyaW9kO1xcbiB9O1xcbiBcXG4rdm9pZCBrc3pfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XFxuK3ZvaWQga3N6ODQ2M19wdHBfc2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcXG4gaW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcXG4gXFxuIHZvaWQga3N6X3B0cF9jbG9ja191bnJlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XFxuQEAgLTY1LDYgKzY3LDcgQEAgc3RydWN0IGtzel9wdHBfZGF0YSB7XFxuIFxcdHN0cnVjdCBtdXRleCBsb2NrO1xcbiB9O1xcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIGtzel9wdHBfc2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKSB7IH1cXG4gc3RhdGljIGlubGluZSBpbnQga3N6X3B0cF9jbG9ja19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cF9yZWcuaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cF9yZWcuaFxcbmluZGV4IDY1ZWE4NTc3YWY3NTUuLjE2ZjExN2ZhNWQ0OWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwX3JlZy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwX3JlZy5oXFxuQEAgLTUxLDYgKzUxLDIyIEBAXFxuIFxcbiAjZGVmaW5lIFJFR19QVFBfVU5JVF9JTkRFWF9fNFxcdFxcdDB4MDUyMFxcbiBcXG4rI2RlZmluZSBLU1o4NDYzX1RPVV9BQ1RJVkVcXHRcXHQweDIwMlxcbisjZGVmaW5lIEtTWjg0NjNfVE9VX0VOXFx0XFx0XFx0MHgyMDZcXG4rI2RlZmluZSBLU1o4NDYzX1RPVV9TV19SU1RcXHRcXHQweDIwOFxcbitcXG4rI2RlZmluZSBLU1o4NDYzX1RSSUdOX0NGR19TSVpFXFx0XFx0MHgyMFxcbisjZGVmaW5lIEtTWjg0NjNfVFJJRzFfQ0ZHXFx0XFx0MHgyMjBcXG4rI2RlZmluZSBLU1o4NDYzX1RBUkdFVF9OU0VDXFx0XFx0MHgwMDBcXG4rI2RlZmluZSBLU1o4NDYzX1RBUkdFVF9TRUNcXHRcXHQweDAwNFxcbisjZGVmaW5lIEtTWjg0NjNfUEFUVEVSTl9PRkZcXHRcXHQweDAwOFxcbisjZGVmaW5lIEtTWjg0NjNfTk9USUZZX0JJVFxcdFxcdEJJVCg4KVxcbisjZGVmaW5lIEtTWjg0NjNfUEFUVEVSTl9NXFx0XFx0R0VOTUFTSyg2LCA0KVxcbisjZGVmaW5lIEtTWjg0NjNfUFVMU0VfV0lEVEhfT0ZGXFx0XFx0MHgwMEFcXG4rI2RlZmluZSBLU1o4NDYzX1RSSUdfUFVMU0VfV0lEVEhfTVxcdEdFTk1BU0soMTUsIDApXFxuKyNkZWZpbmUgS1NaODQ2M19DWUNMRV9XSURUSF9PRkZcXHRcXHQweDAwQ1xcbisjZGVmaW5lIEtTWjg0NjNfQ1lDTEVfQ05UX09GRlxcdFxcdDB4MDEwXFxuK1xcbiAjZGVmaW5lIFBUUF9HUElPX0lOREVYXFx0XFx0XFx0R0VOTUFTSygxOSwgMTYpXFxuICNkZWZpbmUgUFRQX1RTSV9JTkRFWFxcdFxcdFxcdEJJVCg4KVxcbiAjZGVmaW5lIFBUUF9UT1VfSU5ERVhcXHRcXHRcXHRHRU5NQVNLKDEsIDApXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jXFxuaW5kZXggODZjZTNhODY3MDVmOS4uM2EyMDkxMjJmYzdkYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uY1xcbkBAIC04NjcsNiArODY3LDcgQEAgc3RhdGljIGludCBsYW45Mzd4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHRrc3pfcHRwX3NldF9jYXBzKGRzKTtcXG4gXFx0cmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7XFxuIFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0ZGV2X2VycihkZXYtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2s6ICVkXFxcXG5cXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MDoyNy4xNTQ0MDcyNjdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQwNDY2MDQ3OTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9jaGlwIEtTWi9MQU4gc2VyaWVzIERTQSBFdGhlcm5ldCBzd2l0Y2ggZHJpdmVycyAoc3BlY2lmaWNhbGx5IGFkZGluZyBQVFAgcGVyaW9kaWMgb3V0cHV0IGFuZCBwaW4gY2FwYWJpbGl0aWVzIGZvciBLU1o4NDYzIGFuZCByZWxhdGVkIHN3aXRjaGVzKS4gVGhlc2Ugc3dpdGNoIGRyaXZlcnMgb3BlcmF0ZSBvdmVyIFNQSSwgSTJDLCBvciBTTUkgYnVzZXMgYW5kIHJlcXVpcmUgcGh5c2ljYWwgTWljcm9jaGlwIHN3aXRjaCBBU0lDcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChzdWNoIGFzIFFFTVUgb3IgR0NFKSwgbWFraW5nIHRoZXNlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlMzdjYzExNDE5NjJiMjc2YWI1ODAyZWY2ODI2YWYyYzMxMWQ5NmE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwNDo0MDoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmNcbmluZGV4IDk0MWFlOWY2NmY3MGIuLjZiMDhiYjhmZWQ1YjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguY1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmNcbkBAIC0yNDc4LDYgKzI0NzgsNyBAQCBzdGF0aWMgaW50IGtzejg0NjNfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0XHRpZiAocmV0KVxuIFx0XHRcdGdvdG8gZnJlZV9naXJxO1xuIFxuK1x0XHRrc3o4NDYzX3B0cF9zZXRfY2Fwcyhkcyk7XG4gXHRcdHJldCA9IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoZHMpO1xuIFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2s6ICVkXFxuXCIsXG5AQCAtMjc3NSw2ICsyNzc2LDcgQEAgc3RhdGljIGludCBrc3o4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdH1cbiBcbiBcdGlmIChkZXYtXHUwMDNlaW5mby1cdTAwM2VwdHBfY2FwYWJsZSkge1xuK1x0XHRrc3pfcHRwX3NldF9jYXBzKGRzKTtcbiBcdFx0cmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7XG4gXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jazogJWRcXG5cIixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jXG5pbmRleCAzZWU5OTU1NDVjNTc5Li43MjUyOGE1M2I2N2QyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jXG5AQCAtMTc4MSw2ICsxNzgxLDcgQEAgc3RhdGljIGludCBrc3o5NDc3X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdH1cbiBcbiBcdGlmIChkZXYtXHUwMDNlaW5mby1cdTAwM2VwdHBfY2FwYWJsZSkge1xuK1x0XHRrc3pfcHRwX3NldF9jYXBzKGRzKTtcbiBcdFx0cmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7XG4gXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jazogJWRcXG5cIixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jXG5pbmRleCAxYTlkNmY4M2EwMjMyLi45ZTIzNGFkNzFiNzIzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jXG5AQCAtMTE2MSw2ICsxMTYxLDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xuIFx0XHQuc3VwcG9ydHNfbWlpID0ge2ZhbHNlLCBmYWxzZSwgdHJ1ZX0sXG4gXHRcdC5zdXBwb3J0c19ybWlpID0ge2ZhbHNlLCBmYWxzZSwgdHJ1ZX0sXG4gXHRcdC5pbnRlcm5hbF9waHkgPSB7dHJ1ZSwgdHJ1ZSwgZmFsc2V9LFxuK1x0XHQubl9waW5zID0gMTIsXG4rXHRcdC5uX3Blcl9vdXQgPSAxMixcbiBcdH0sXG4gXG4gXHRbS1NaODU2M10gPSB7XG5AQCAtMTE5NCw2ICsxMTk2LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xuIFx0XHQucHRwX2NhcGFibGUgPSB0cnVlLFxuIFx0XHQud3JfdGFibGUgPSBcdTAwMjZrc3o4NTYzX3JlZ2lzdGVyX3NldCxcbiBcdFx0LnJkX3RhYmxlID0gXHUwMDI2a3N6ODU2M19yZWdpc3Rlcl9zZXQsXG4rXHRcdC5uX3BpbnMgPSAyLFxuK1x0XHQubl9wZXJfb3V0ID0gMyxcbiBcdH0sXG4gXG4gXHRbS1NaODc5NV0gPSB7XG5AQCAtMTQxNCw2ICsxNDE4LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xuIFx0XHQuc2dtaWlfcG9ydCA9IDcsXG4gXHRcdC53cl90YWJsZSA9IFx1MDAyNmtzejk0NzdfcmVnaXN0ZXJfc2V0LFxuIFx0XHQucmRfdGFibGUgPSBcdTAwMjZrc3o5NDc3X3JlZ2lzdGVyX3NldCxcbitcdFx0Lm5fcGlucyA9IDIsXG4rXHRcdC5uX3Blcl9vdXQgPSAzLFxuIFx0fSxcbiBcbiBcdFtLU1o5ODk2XSA9IHtcbkBAIC0xNTQ0LDYgKzE1NTAsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XG4gXHRcdC5pbnRlcm5hbF9waHkgPSB7dHJ1ZSwgdHJ1ZSwgZmFsc2V9LFxuIFx0XHQuZ2JpdF9jYXBhYmxlID0ge3RydWUsIHRydWUsIHRydWV9LFxuIFx0XHQucHRwX2NhcGFibGUgPSB0cnVlLFxuK1x0XHQubl9waW5zID0gMixcbitcdFx0Lm5fcGVyX291dCA9IDMsXG4gXHR9LFxuIFxuIFx0W0tTWjg1NjddID0ge1xuQEAgLTE1ODEsNiArMTU4OSw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcbiBcdFx0LmdiaXRfY2FwYWJsZVx0PSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLFxuIFx0XHRcdFx0ICAgdHJ1ZSwgdHJ1ZX0sXG4gXHRcdC5wdHBfY2FwYWJsZSA9IHRydWUsXG4rXHRcdC5uX3BpbnMgPSAyLFxuK1x0XHQubl9wZXJfb3V0ID0gMyxcbiBcdH0sXG4gXG4gXHRbS1NaOTU2N10gPSB7XG5AQCAtMTYxNSw2ICsxNjI1LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xuIFx0XHRcdFx0ICAgdHJ1ZSwgZmFsc2UsIGZhbHNlfSxcbiBcdFx0LmdiaXRfY2FwYWJsZVx0PSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZX0sXG4gXHRcdC5wdHBfY2FwYWJsZSA9IHRydWUsXG4rXHRcdC5uX3BpbnMgPSAyLFxuK1x0XHQubl9wZXJfb3V0ID0gMyxcbiBcdH0sXG4gXG4gXHRbTEFOOTM3MF0gPSB7XG5AQCAtMTY0Niw2ICsxNjU4LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xuIFx0XHQuc3VwcG9ydHNfcmdtaWkgPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWV9LFxuIFx0XHQuaW50ZXJuYWxfcGh5ID0ge3RydWUsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlfSxcbiBcdFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcbitcdFx0Lm5fcGlucyA9IDIsXG4rXHRcdC5uX3Blcl9vdXQgPSAzLFxuIFx0fSxcbiBcbiBcdFtMQU45MzcxXSA9IHtcbkBAIC0xNjc3LDYgKzE2OTEsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XG4gXHRcdC5zdXBwb3J0c19yZ21paSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZX0sXG4gXHRcdC5pbnRlcm5hbF9waHkgPSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlfSxcbiBcdFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcbitcdFx0Lm5fcGlucyA9IDIsXG4rXHRcdC5uX3Blcl9vdXQgPSAzLFxuIFx0fSxcbiBcbiBcdFtMQU45MzcyXSA9IHtcbkBAIC0xNzEyLDYgKzE3MjgsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XG4gXHRcdC5pbnRlcm5hbF9waHlcdD0ge3RydWUsIHRydWUsIHRydWUsIHRydWUsXG4gXHRcdFx0XHQgICBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWV9LFxuIFx0XHQucHRwX2NhcGFibGUgPSB0cnVlLFxuK1x0XHQubl9waW5zID0gMixcbitcdFx0Lm5fcGVyX291dCA9IDMsXG4gXHR9LFxuIFxuIFx0W0xBTjkzNzNdID0ge1xuQEAgLTE3NDcsNiArMTc2NSw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcbiBcdFx0LmludGVybmFsX3BoeVx0PSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsXG4gXHRcdFx0XHQgICBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWV9LFxuIFx0XHQucHRwX2NhcGFibGUgPSB0cnVlLFxuK1x0XHQubl9waW5zID0gMixcbitcdFx0Lm5fcGVyX291dCA9IDMsXG4gXHR9LFxuIFxuIFx0W0xBTjkzNzRdID0ge1xuQEAgLTE3ODIsNiArMTgwMiw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcbiBcdFx0LmludGVybmFsX3BoeVx0PSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSxcbiBcdFx0XHRcdCAgIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZX0sXG4gXHRcdC5wdHBfY2FwYWJsZSA9IHRydWUsXG4rXHRcdC5uX3BpbnMgPSAyLFxuK1x0XHQubl9wZXJfb3V0ID0gMyxcbiBcdH0sXG4gXG4gXHRbTEFOOTY0Nl0gPSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaFxuaW5kZXggY2JlOTg0OTQ1NzhjMy4uMTE1NWIzOTM1MGMyYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaFxuQEAgLTEzOSw2ICsxMzksOCBAQCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSB7XG4gXHR1OCBzZ21paV9wb3J0O1xuIFx0Y29uc3Qgc3RydWN0IHJlZ21hcF9hY2Nlc3NfdGFibGUgKndyX3RhYmxlO1xuIFx0Y29uc3Qgc3RydWN0IHJlZ21hcF9hY2Nlc3NfdGFibGUgKnJkX3RhYmxlO1xuK1x0Y29uc3QgdTggbl9waW5zO1xuK1x0Y29uc3QgdTggbl9wZXJfb3V0O1xuIH07XG4gXG4gc3RydWN0IGtzel9pcnEge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmNcbmluZGV4IDM5Y2M3MGQ2NTkwMGIuLmQzMzAzNDg5MmE4ZjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuY1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmNcbkBAIC0yNiw2ICsyNiw3IEBAXG4gICovXG4gI2RlZmluZSBLU1pfTUFYX0RSSUZUX0NPUlIgNjI0OTk5OVxuICNkZWZpbmUgS1NaX01BWF9QVUxTRV9XSURUSCAxMjUwMDAwMDBMTFxuKyNkZWZpbmUgS1NaODQ2M19NQVhfUFVMU0VfV0lEVEggNTAwMDAwTExcbiBcbiAjZGVmaW5lIEtTWl9QVFBfSU5DX05TIDQwVUxMICAvKiBIVyBjbG9jayBpcyBpbmNyZW1lbnRlZCBldmVyeSA0MCBucyAoYnkgNDApICovXG4gI2RlZmluZSBLU1pfUFRQX1NVQk5TX0JJVFMgMzJcbkBAIC02Myw2ICs2NCwxNyBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X2dwaW8oc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiBcdFx0XHQgTEVEX1NSQ19QVFBfR1BJT18xIHwgTEVEX1NSQ19QVFBfR1BJT18yKTtcbiB9XG4gXG4rc3RhdGljIGludCBrc3o4NDYzX3B0cF90b3VfcmVzZXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdClcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0ga3N6X3JtdzE2KGRldiwgS1NaODQ2M19UT1VfU1dfUlNULCBCSVQodW5pdCksIEJJVCh1bml0KSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIGtzel9ybXcxNihkZXYsIEtTWjg0NjNfVE9VX1NXX1JTVCwgQklUKHVuaXQpLCAwKTtcbit9XG4rXG4gc3RhdGljIGludCBrc3pfcHRwX3RvdV9yZXNldChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCB1bml0KVxuIHtcbiBcdHUzMiBkYXRhO1xuQEAgLTg2LDcgKzk4LDcgQEAgc3RhdGljIGludCBrc3pfcHRwX3RvdV9yZXNldChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCB1bml0KVxuIFx0XHRcdCAwKTtcbiB9XG4gXG4tc3RhdGljIGludCBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkodTY0IHB1bHNlX25zKVxuK3N0YXRpYyBpbnQga3N6X3B0cF90b3VfcHVsc2VfdmVyaWZ5KHU2NCBwdWxzZV9ucywgdTMyIG1hc2spXG4ge1xuIFx0dTMyIGRhdGE7XG4gXG5AQCAtOTQsNyArMTA2LDcgQEAgc3RhdGljIGludCBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkodTY0IHB1bHNlX25zKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGRhdGEgPSAocHVsc2VfbnMgLyA4KTtcbi1cdGlmICghRklFTERfRklUKFRSSUdfUFVMU0VfV0lEVEhfTSwgZGF0YSkpXG4rXHRpZiAoKG1hc2sgXHUwMDI2IGRhdGEpICE9IGRhdGEpXG4gXHRcdHJldHVybiAtRVJBTkdFO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTIwLDYgKzEzMiwyOCBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X3RhcmdldF90aW1lX3NldChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfdG91X3N0YXJ0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHVuaXQpXG4re1xuK1x0dTE2IGRhdGE7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0ga3N6X3JtdzE2KGRldiwgS1NaODQ2M19UT1VfRU4sIEJJVCh1bml0KSwgQklUKHVuaXQpKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBrc3pfcmVhZDE2KGRldiwgS1NaODQ2M19UT1VfQUNUSVZFLCBcdTAwMjZkYXRhKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAoIShkYXRhIFx1MDAyNiBCSVQodW5pdCkpKSB7XG4rXHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldiwgXCIlczogVHJpZ2dlciB1bml0JWQgZXJyb3IhXFxuXCIsIF9fZnVuY19fLFxuK1x0XHRcdHVuaXQpO1xuK1x0XHRyZXR1cm4gLUVJTztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IGtzel9wdHBfdG91X3N0YXJ0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHVuaXQpXG4ge1xuIFx0dTMyIGRhdGE7XG5AQCAtMTQ3LDYgKzE4MSw1NiBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X3N0YXJ0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHVuaXQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBrc3o4NDYzX3B0cF9jb25maWd1cmVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHRcdHUzMiBjeWNsZV93aWR0aF9ucywgdTMyIHB1bHNlX3dpZHRoX25zLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgdGltZXNwZWM2NCBjb25zdCAqdGFyZ2V0X3RpbWUsXG4rXHRcdFx0XHRcdHU4IGluZGV4KVxuK3tcbitcdHN0cnVjdCBwdHBfcGluX2Rlc2MgKnBpbiA9IFx1MDAyNmRldi1cdTAwM2VwdHBfZGF0YS5waW5fY29uZmlnW2luZGV4XTtcbitcdHUxNiBjZmdfYmFzZSA9IEtTWjg0NjNfVFJJRzFfQ0ZHICsgS1NaODQ2M19UUklHTl9DRkdfU0laRSAqIHBpbi1cdTAwM2VjaGFuO1xuK1x0dTE2IGRhdGE7XG4rXHRpbnQgcmV0O1xuK1xuK1x0LyogSGFyZHdhcmUgaGFzIG9ubHkgMzIgYml0ICovXG4rXHRpZiAoKHRhcmdldF90aW1lLVx1MDAzZXR2X3NlYyBcdTAwMjYgMHhmZmZmZmZmZikgIT0gdGFyZ2V0X3RpbWUtXHUwMDNldHZfc2VjKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGRhdGEgPSBLU1o4NDYzX05PVElGWV9CSVQgfFxuK1x0ICAgICAgIEZJRUxEX1BSRVAoS1NaODQ2M19QQVRURVJOX00sIFRSSUdfUE9TX1BFUklPRCkgfFxuK1x0ICAgICAgIHBpbi1cdTAwM2VpbmRleDtcbitcdHJldCA9IGtzel93cml0ZTE2KGRldiwgY2ZnX2Jhc2UgKyBLU1o4NDYzX1BBVFRFUk5fT0ZGLCBkYXRhKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBrc3pfd3JpdGUzMihkZXYsIGNmZ19iYXNlICsgS1NaODQ2M19DWUNMRV9XSURUSF9PRkYsXG4rXHRcdFx0ICBjeWNsZV93aWR0aF9ucyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogU2V0IGN5Y2xlIGNvdW50IDAgLSBJbmZpbml0ZSAqL1xuK1x0cmV0ID0ga3N6X3dyaXRlMTYoZGV2LCBjZmdfYmFzZSArIEtTWjg0NjNfQ1lDTEVfQ05UX09GRiwgMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogS1NaODQ2MyB1c2VzIGEgOCBucyB1bml0IHZhbHVlIHRvIGNvbXB1dGUgdGhlIHB1bHNlIHdpZHRoICovXG4rXHRkYXRhID0gKHB1bHNlX3dpZHRoX25zIC8gOCk7XG4rXHRyZXQgPSBrc3pfd3JpdGUxNihkZXYsIGNmZ19iYXNlICsgS1NaODQ2M19QVUxTRV9XSURUSF9PRkYsIGRhdGEpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IGtzel93cml0ZTMyKGRldiwgY2ZnX2Jhc2UgKyBLU1o4NDYzX1RBUkdFVF9OU0VDLFxuK1x0XHRcdCAgdGFyZ2V0X3RpbWUtXHUwMDNldHZfbnNlYyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCBjZmdfYmFzZSArIEtTWjg0NjNfVEFSR0VUX1NFQyxcbitcdFx0XHQgIHRhcmdldF90aW1lLVx1MDAzZXR2X3NlYyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQga3N6X3B0cF9jb25maWd1cmVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgICAgdTMyIGN5Y2xlX3dpZHRoX25zLCB1MzIgcHVsc2Vfd2lkdGhfbnMsXG4gXHRcdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgY29uc3QgKnRhcmdldF90aW1lLFxuQEAgLTE4MywxNyArMjY3LDExIEBAIHN0YXRpYyBpbnQga3N6X3B0cF9jb25maWd1cmVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBrc3pfcHRwX2VuYWJsZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbi1cdFx0XHRcdCBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LFxuLVx0XHRcdFx0IGludCBvbilcbitzdGF0aWMgaW50IGtzel9wdHBfZ2V0X3BpbihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuK1x0XHRcdCAgIHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgY29uc3QgKnJlcXVlc3QpXG4ge1xuIFx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBcdTAwMjZkZXYtXHUwMDNlcHRwX2RhdGE7XG4tXHR1NjQgcmVxX3B1bHNlX3dpZHRoX25zO1xuLVx0dTY0IGN5Y2xlX3dpZHRoX25zO1xuLVx0dTY0IHB1bHNlX3dpZHRoX25zO1xuLVx0aW50IHBpbiA9IDA7XG4tXHR1MzIgZGF0YTMyO1xuLVx0aW50IHJldDtcbitcdGludCBwaW47XG4gXG4gXHRpZiAocmVxdWVzdC1cdTAwM2VmbGFncyBcdTAwMjYgflBUUF9QRVJPVVRfRFVUWV9DWUNMRSlcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuQEAgLTIwNiw2ICsyODQsMTE0IEBAIHN0YXRpYyBpbnQga3N6X3B0cF9lbmFibGVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4gXHRpZiAocGluIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdHJldHVybiBwaW47XG4rfVxuK1xuK3N0YXRpYyBpbnQga3N6X3B0cF9jb21wdXRlX3Blcm91dF9jeWNsZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0XHRzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LFxuK1x0XHRcdFx0XHR1NjQgKmN5Y2xlX3dpZHRoX25zKVxuK3tcbitcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gXHUwMDI2ZGV2LVx1MDAzZXB0cF9kYXRhO1xuK1xuK1x0cHRwX2RhdGEtXHUwMDNlcGVyb3V0X3RhcmdldF90aW1lX2ZpcnN0LnR2X3NlYyAgPSByZXF1ZXN0LVx1MDAzZXN0YXJ0LnNlYztcbitcdHB0cF9kYXRhLVx1MDAzZXBlcm91dF90YXJnZXRfdGltZV9maXJzdC50dl9uc2VjID0gcmVxdWVzdC1cdTAwM2VzdGFydC5uc2VjO1xuK1xuK1x0cHRwX2RhdGEtXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9zZWMgPSByZXF1ZXN0LVx1MDAzZXBlcmlvZC5zZWM7XG4rXHRwdHBfZGF0YS1cdTAwM2VwZXJvdXRfcGVyaW9kLnR2X25zZWMgPSByZXF1ZXN0LVx1MDAzZXBlcmlvZC5uc2VjO1xuK1xuK1x0KmN5Y2xlX3dpZHRoX25zID0gdGltZXNwZWM2NF90b19ucyhcdTAwMjZwdHBfZGF0YS1cdTAwM2VwZXJvdXRfcGVyaW9kKTtcbitcdGlmICgoKmN5Y2xlX3dpZHRoX25zIFx1MDAyNiBUUklHX0NZQ0xFX1dJRFRIX00pICE9ICpjeWNsZV93aWR0aF9ucykge1xuK1x0XHQqY3ljbGVfd2lkdGhfbnMgPSAwO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdTY0IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfcHVsc2Uoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbitcdFx0XHRcdFx0c3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCBjb25zdCAqcmVxdWVzdCxcbitcdFx0XHRcdFx0dTY0IG1heF9wdWxzZV93aWR0aClcbit7XG4rXHR1NjQgcmVxX3B1bHNlX3dpZHRoX25zO1xuK1xuK1x0aWYgKHJlcXVlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IFBUUF9QRVJPVVRfRFVUWV9DWUNMRSlcbitcdFx0cmV0dXJuIHJlcXVlc3QtXHUwMDNlb24uc2VjICogTlNFQ19QRVJfU0VDICtcdHJlcXVlc3QtXHUwMDNlb24ubnNlYztcbitcbitcdC8qIFVzZSBhIGR1dHkgY3ljbGUgb2YgNTAlLiBNYXhpbXVtIHB1bHNlIHdpZHRoIHN1cHBvcnRlZCBieSB0aGVcbitcdCAqIGhhcmR3YXJlIGlzIGEgbGl0dGxlIGJpdCBtb3JlIHRoYW4gMTI1IG1zLlxuK1x0ICovXG4rXHRyZXFfcHVsc2Vfd2lkdGhfbnMgPSAocmVxdWVzdC1cdTAwM2VwZXJpb2Quc2VjICogTlNFQ19QRVJfU0VDICtcbitcdFx0XHQgICAgICByZXF1ZXN0LVx1MDAzZXBlcmlvZC5uc2VjKSAvIDI7XG4rXHRyZXR1cm4gbWluX3QodTY0LCByZXFfcHVsc2Vfd2lkdGhfbnMsIG1heF9wdWxzZV93aWR0aCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfZW5hYmxlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LFxuK1x0XHRcdFx0ICAgICBpbnQgb24pXG4re1xuK1x0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBcdTAwMjZkZXYtXHUwMDNlcHRwX2RhdGE7XG4rXHR1NjQgY3ljbGVfd2lkdGhfbnM7XG4rXHR1NjQgcHVsc2Vfd2lkdGhfbnM7XG4rXHRpbnQgcGluO1xuK1x0aW50IHJldDtcbitcbitcdHBpbiA9IGtzel9wdHBfZ2V0X3BpbihkZXYsIHJlcXVlc3QpO1xuK1x0aWYgKHBpbiBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHBpbjtcbitcbitcdHJldCA9IGtzejg0NjNfcHRwX3RvdV9yZXNldChkZXYsIHJlcXVlc3QtXHUwMDNlaW5kZXgpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmICghb24pIHtcbitcdFx0cHRwX2RhdGEtXHUwMDNldG91X21vZGUgPSBLU1pfUFRQX1RPVV9JRExFO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcdHJldCA9IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfY3ljbGUoZGV2LCByZXF1ZXN0LCBcdTAwMjZjeWNsZV93aWR0aF9ucyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cHVsc2Vfd2lkdGhfbnMgPSBrc3pfcHRwX2NvbXB1dGVfcGVyb3V0X3B1bHNlKGRldiwgcmVxdWVzdCxcbitcdFx0XHRcdFx0XHQgICAgICBLU1o4NDYzX01BWF9QVUxTRV9XSURUSCk7XG4rXG4rXHRyZXQgPSBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkocHVsc2Vfd2lkdGhfbnMsXG4rXHRcdFx0XHQgICAgICAgS1NaODQ2M19UUklHX1BVTFNFX1dJRFRIX00pO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IGtzejg0NjNfcHRwX2NvbmZpZ3VyZV9wZXJvdXQoZGV2LCBjeWNsZV93aWR0aF9ucywgcHVsc2Vfd2lkdGhfbnMsXG4rXHRcdFx0XHRcdCAgIFx1MDAyNnB0cF9kYXRhLVx1MDAzZXBlcm91dF90YXJnZXRfdGltZV9maXJzdCxcbitcdFx0XHRcdFx0ICAgcGluKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBrc3pfcHRwX3RvdV9ncGlvKGRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0ga3N6ODQ2M19wdHBfdG91X3N0YXJ0KGRldiwgcmVxdWVzdC1cdTAwM2VpbmRleCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cHRwX2RhdGEtXHUwMDNldG91X21vZGUgPSBLU1pfUFRQX1RPVV9QRVJPVVQ7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBrc3pfcHRwX2VuYWJsZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbitcdFx0XHRcdCBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LFxuK1x0XHRcdFx0IGludCBvbilcbit7XG4rXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IFx1MDAyNmRldi1cdTAwM2VwdHBfZGF0YTtcbitcdHU2NCBjeWNsZV93aWR0aF9ucztcbitcdHU2NCBwdWxzZV93aWR0aF9ucztcbitcdGludCBwaW4gPSAwO1xuK1x0dTMyIGRhdGEzMjtcbitcdGludCByZXQ7XG4rXG4rXHRwaW4gPSBrc3pfcHRwX2dldF9waW4oZGV2LCByZXF1ZXN0KTtcbitcdGlmIChwaW4gXHUwMDNjIDApXG4rXHRcdHJldHVybiBwaW47XG4rXG4gXHRkYXRhMzIgPSBGSUVMRF9QUkVQKFBUUF9HUElPX0lOREVYLCBwaW4pIHxcbiBcdFx0IEZJRUxEX1BSRVAoUFRQX1RPVV9JTkRFWCwgcmVxdWVzdC1cdTAwM2VpbmRleCk7XG4gXHRyZXQgPSBrc3pfcm13MzIoZGV2LCBSRUdfUFRQX1VOSVRfSU5ERVhfXzQsXG5AQCAtMjIxLDMxICs0MDcsMTMgQEAgc3RhdGljIGludCBrc3pfcHRwX2VuYWJsZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiBcdFx0cHRwX2RhdGEtXHUwMDNldG91X21vZGUgPSBLU1pfUFRQX1RPVV9JRExFO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbitcdHJldCA9IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfY3ljbGUoZGV2LCByZXF1ZXN0LCBcdTAwMjZjeWNsZV93aWR0aF9ucyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cHVsc2Vfd2lkdGhfbnMgPSBrc3pfcHRwX2NvbXB1dGVfcGVyb3V0X3B1bHNlKGRldiwgcmVxdWVzdCxcbitcdFx0XHRcdFx0XHQgICAgICBLU1pfTUFYX1BVTFNFX1dJRFRIKTtcbiBcbi1cdHB0cF9kYXRhLVx1MDAzZXBlcm91dF90YXJnZXRfdGltZV9maXJzdC50dl9zZWMgID0gcmVxdWVzdC1cdTAwM2VzdGFydC5zZWM7XG4tXHRwdHBfZGF0YS1cdTAwM2VwZXJvdXRfdGFyZ2V0X3RpbWVfZmlyc3QudHZfbnNlYyA9IHJlcXVlc3QtXHUwMDNlc3RhcnQubnNlYztcbi1cbi1cdHB0cF9kYXRhLVx1MDAzZXBlcm91dF9wZXJpb2QudHZfc2VjID0gcmVxdWVzdC1cdTAwM2VwZXJpb2Quc2VjO1xuLVx0cHRwX2RhdGEtXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9uc2VjID0gcmVxdWVzdC1cdTAwM2VwZXJpb2QubnNlYztcbi1cbi1cdGN5Y2xlX3dpZHRoX25zID0gdGltZXNwZWM2NF90b19ucyhcdTAwMjZwdHBfZGF0YS1cdTAwM2VwZXJvdXRfcGVyaW9kKTtcbi1cdGlmICgoY3ljbGVfd2lkdGhfbnMgXHUwMDI2IFRSSUdfQ1lDTEVfV0lEVEhfTSkgIT0gY3ljbGVfd2lkdGhfbnMpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuLVx0aWYgKHJlcXVlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IFBUUF9QRVJPVVRfRFVUWV9DWUNMRSkge1xuLVx0XHRwdWxzZV93aWR0aF9ucyA9IHJlcXVlc3QtXHUwMDNlb24uc2VjICogTlNFQ19QRVJfU0VDICtcbi1cdFx0XHRyZXF1ZXN0LVx1MDAzZW9uLm5zZWM7XG4tXHR9IGVsc2Uge1xuLVx0XHQvKiBVc2UgYSBkdXR5IGN5Y2xlIG9mIDUwJS4gTWF4aW11bSBwdWxzZSB3aWR0aCBzdXBwb3J0ZWQgYnkgdGhlXG4tXHRcdCAqIGhhcmR3YXJlIGlzIGEgbGl0dGxlIGJpdCBtb3JlIHRoYW4gMTI1IG1zLlxuLVx0XHQgKi9cbi1cdFx0cmVxX3B1bHNlX3dpZHRoX25zID0gKHJlcXVlc3QtXHUwMDNlcGVyaW9kLnNlYyAqIE5TRUNfUEVSX1NFQyArXG4tXHRcdFx0XHQgICAgICByZXF1ZXN0LVx1MDAzZXBlcmlvZC5uc2VjKSAvIDI7XG4tXHRcdHB1bHNlX3dpZHRoX25zID0gbWluX3QodTY0LCByZXFfcHVsc2Vfd2lkdGhfbnMsXG4tXHRcdFx0XHQgICAgICAgS1NaX01BWF9QVUxTRV9XSURUSCk7XG4tXHR9XG4tXG4tXHRyZXQgPSBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkocHVsc2Vfd2lkdGhfbnMpO1xuK1x0cmV0ID0ga3N6X3B0cF90b3VfcHVsc2VfdmVyaWZ5KHB1bHNlX3dpZHRoX25zLCBUUklHX1BVTFNFX1dJRFRIX00pO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC03NTYsMTEgKzkyNCwxMSBAQCBzdGF0aWMgaW50IGtzel9wdHBfZ2V0dGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCBrc3pfcHRwX3Jlc3RhcnRfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4rc3RhdGljIGludCBrc3pfcHRwX3ByZXBhcmVfcmVzdGFydF9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbitcdFx0XHRcdFx0ICBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0ICpyZXF1ZXN0KVxuIHtcbiBcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gXHUwMDI2ZGV2LVx1MDAzZXB0cF9kYXRhO1xuIFx0czY0IG5vd19ucywgZmlyc3RfbnMsIHBlcmlvZF9ucywgbmV4dF9ucztcbi1cdHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgcmVxdWVzdDtcbiBcdHN0cnVjdCB0aW1lc3BlYzY0IG5leHQ7XG4gXHRzdHJ1Y3QgdGltZXNwZWM2NCBub3c7XG4gXHR1bnNpZ25lZCBpbnQgY291bnQ7XG5AQCAtNzkxLDQwICs5NTksMTExIEBAIHN0YXRpYyBpbnQga3N6X3B0cF9yZXN0YXJ0X3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuIFxuIFx0LyogUmVzdGFydCBwZXJpb2RpYyBvdXRwdXQgc2lnbmFsICovXG4gXHRuZXh0ID0gbnNfdG9fdGltZXNwZWM2NChuZXh0X25zKTtcbi1cdHJlcXVlc3Quc3RhcnQuc2VjICA9IG5leHQudHZfc2VjO1xuLVx0cmVxdWVzdC5zdGFydC5uc2VjID0gbmV4dC50dl9uc2VjO1xuLVx0cmVxdWVzdC5wZXJpb2Quc2VjICA9IHB0cF9kYXRhLVx1MDAzZXBlcm91dF9wZXJpb2QudHZfc2VjO1xuLVx0cmVxdWVzdC5wZXJpb2QubnNlYyA9IHB0cF9kYXRhLVx1MDAzZXBlcm91dF9wZXJpb2QudHZfbnNlYztcbi1cdHJlcXVlc3QuaW5kZXggPSAwO1xuLVx0cmVxdWVzdC5mbGFncyA9IDA7XG4rXHRyZXF1ZXN0LVx1MDAzZXN0YXJ0LnNlYyAgPSBuZXh0LnR2X3NlYztcbitcdHJlcXVlc3QtXHUwMDNlc3RhcnQubnNlYyA9IG5leHQudHZfbnNlYztcbitcdHJlcXVlc3QtXHUwMDNlcGVyaW9kLnNlYyAgPSBwdHBfZGF0YS1cdTAwM2VwZXJvdXRfcGVyaW9kLnR2X3NlYztcbitcdHJlcXVlc3QtXHUwMDNlcGVyaW9kLm5zZWMgPSBwdHBfZGF0YS1cdTAwM2VwZXJvdXRfcGVyaW9kLnR2X25zZWM7XG4rXHRyZXF1ZXN0LVx1MDAzZWluZGV4ID0gMDtcbitcdHJlcXVlc3QtXHUwMDNlZmxhZ3MgPSAwO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQga3N6X3B0cF9yZXN0YXJ0X3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuK3tcbitcdHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgcmVxdWVzdDtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBrc3pfcHRwX3ByZXBhcmVfcmVzdGFydF9wZXJvdXQoZGV2LCBcdTAwMjZyZXF1ZXN0KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4gXG4gXHRyZXR1cm4ga3N6X3B0cF9lbmFibGVfcGVyb3V0KGRldiwgXHUwMDI2cmVxdWVzdCwgMSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQga3N6X3B0cF9zZXR0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxuLVx0XHRcdCAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbitzdGF0aWMgaW50IGtzejg0NjNfcHRwX3Jlc3RhcnRfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4ge1xuLVx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XG4tXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XG4tXHRjb25zdCB1MTYgKnJlZ3MgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2VyZWdzO1xuK1x0c3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCByZXF1ZXN0O1xuIFx0aW50IHJldDtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2cHRwX2RhdGEtXHUwMDNlbG9jayk7XG4rXHRyZXQgPSBrc3pfcHRwX3ByZXBhcmVfcmVzdGFydF9wZXJvdXQoZGV2LCBcdTAwMjZyZXF1ZXN0KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4ga3N6ODQ2M19wdHBfZW5hYmxlX3Blcm91dChkZXYsIFx1MDAyNnJlcXVlc3QsIDEpO1xuK31cbitcbitzdGF0aWMgaW50IF9fa3N6X3B0cF9zZXR0aW1lKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4rXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4re1xuK1x0Y29uc3QgdTE2ICpyZWdzID0gZGV2LVx1MDAzZWluZm8tXHUwMDNlcmVncztcbitcdGludCByZXQ7XG4gXG4gXHQvKiBXcml0ZSB0byBzaGFkb3cgcmVnaXN0ZXJzIGFuZCBMb2FkIFBUUCBjbG9jayAqL1xuIFx0cmV0ID0ga3N6X3dyaXRlMTYoZGV2LCByZWdzW1BUUF9SVENfU1VCX05BTk9TRUNdLCBQVFBfUlRDXzBOUyk7XG4gXHRpZiAocmV0KVxuLVx0XHRnb3RvIHVubG9jaztcbitcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHJldCA9IGtzel93cml0ZTMyKGRldiwgcmVnc1tQVFBfUlRDX05BTk9TRUNdLCB0cy1cdTAwM2V0dl9uc2VjKTtcbiBcdGlmIChyZXQpXG4tXHRcdGdvdG8gdW5sb2NrO1xuK1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfU0VDXSwgdHMtXHUwMDNldHZfc2VjKTtcbiBcdGlmIChyZXQpXG4tXHRcdGdvdG8gdW5sb2NrO1xuK1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0ga3N6X3JtdzE2KGRldiwgcmVnc1tQVFBfQ0xLX0NUUkxdLCBQVFBfTE9BRF9USU1FLCBQVFBfTE9BRF9USU1FKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBrc3o4NDYzX3B0cF9zZXR0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxuK1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4re1xuK1x0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XG4rXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwdHBfZGF0YS1cdTAwM2Vsb2NrKTtcbitcbitcdHJldCA9IF9fa3N6X3B0cF9zZXR0aW1lKGRldiwgdHMpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byB1bmxvY2s7XG4rXG4rXHRzd2l0Y2ggKHB0cF9kYXRhLVx1MDAzZXRvdV9tb2RlKSB7XG4rXHRjYXNlIEtTWl9QVFBfVE9VX0lETEU6XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSBLU1pfUFRQX1RPVV9QRVJPVVQ6XG4rXHRcdHJldCA9IGtzejg0NjNfcHRwX3Jlc3RhcnRfcGVyb3V0KGRldik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWNsb2NrX2xvY2spO1xuK1x0cHRwX2RhdGEtXHUwMDNlY2xvY2tfdGltZSA9ICp0cztcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWNsb2NrX2xvY2spO1xuK1xuK3VubG9jazpcbitcdG11dGV4X3VubG9jayhcdTAwMjZwdHBfZGF0YS1cdTAwM2Vsb2NrKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQga3N6X3B0cF9zZXR0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxuK1x0XHRcdCAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbit7XG4rXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTtcbitcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuK1xuK1x0cmV0ID0gX19rc3pfcHRwX3NldHRpbWUoZGV2LCB0cyk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIHVubG9jaztcbiBcbkBAIC04OTAsMTggKzExMjksMTMgQEAgc3RhdGljIGludCBrc3pfcHRwX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIGxvbmcgc2NhbGVkX3BwbSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQga3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpXG4rc3RhdGljIGludCBfX2tzel9wdHBfYWRqdGltZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBzNjQgZGVsdGEpXG4ge1xuLVx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XG4tXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XG4tXHRzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YTY0ID0gbnNfdG9fdGltZXNwZWM2NChkZWx0YSk7XG4gXHRjb25zdCB1MTYgKnJlZ3MgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2VyZWdzO1xuIFx0czMyIHNlYywgbnNlYztcbiBcdHUxNiBkYXRhMTY7XG4gXHRpbnQgcmV0O1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZwdHBfZGF0YS1cdTAwM2Vsb2NrKTtcbi1cbiBcdC8qIGRvIG5vdCB1c2UgbnNfdG9fdGltZXNwZWM2NCgpLFxuIFx0ICogYm90aCBzZWMgYW5kIG5zZWMgYXJlIHN1YnRyYWN0ZWQgYnkgaHdcbiBcdCAqL1xuQEAgLTkwOSwxNSArMTE0MywxNSBAQCBzdGF0aWMgaW50IGtzel9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKVxuIFxuIFx0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfTkFOT1NFQ10sIGFicyhuc2VjKSk7XG4gXHRpZiAocmV0KVxuLVx0XHRnb3RvIHVubG9jaztcbitcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHJldCA9IGtzel93cml0ZTMyKGRldiwgcmVnc1tQVFBfUlRDX1NFQ10sIGFicyhzZWMpKTtcbiBcdGlmIChyZXQpXG4tXHRcdGdvdG8gdW5sb2NrO1xuK1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0ga3N6X3JlYWQxNihkZXYsIHJlZ3NbUFRQX0NMS19DVFJMXSwgXHUwMDI2ZGF0YTE2KTtcbiBcdGlmIChyZXQpXG4tXHRcdGdvdG8gdW5sb2NrO1xuK1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0ZGF0YTE2IHw9IFBUUF9TVEVQX0FESjtcbiBcbkBAIC05MjgsNiArMTE2Miw1NiBAQCBzdGF0aWMgaW50IGtzel9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKVxuIFx0XHRkYXRhMTYgfD0gUFRQX1NURVBfRElSO1xuIFxuIFx0cmV0ID0ga3N6X3dyaXRlMTYoZGV2LCByZWdzW1BUUF9DTEtfQ1RSTF0sIGRhdGExNik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKVxuK3tcbitcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gcHRwX2NhcHNfdG9fZGF0YShwdHApO1xuK1x0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IHB0cF9kYXRhX3RvX2tzel9kZXYocHRwX2RhdGEpO1xuK1x0c3RydWN0IHRpbWVzcGVjNjQgZGVsdGE2NCA9IG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpO1xuK1x0aW50IHJldDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHRwX2RhdGEtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXQgPSBfX2tzel9wdHBfYWRqdGltZShkZXYsIGRlbHRhKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gdW5sb2NrO1xuK1xuK1x0c3dpdGNoIChwdHBfZGF0YS1cdTAwM2V0b3VfbW9kZSkge1xuK1x0Y2FzZSBLU1pfUFRQX1RPVV9JRExFOlxuK1x0XHRicmVhaztcbitcbitcdGNhc2UgS1NaX1BUUF9UT1VfUEVST1VUOlxuK1x0XHRyZXQgPSBrc3o4NDYzX3B0cF9yZXN0YXJ0X3Blcm91dChkZXYpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gdW5sb2NrO1xuK1xuK1x0XHRicmVhaztcbitcdH1cbitcbitcdHNwaW5fbG9ja19iaChcdTAwMjZwdHBfZGF0YS1cdTAwM2VjbG9ja19sb2NrKTtcbitcdHB0cF9kYXRhLVx1MDAzZWNsb2NrX3RpbWUgPSB0aW1lc3BlYzY0X2FkZChwdHBfZGF0YS1cdTAwM2VjbG9ja190aW1lLCBkZWx0YTY0KTtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWNsb2NrX2xvY2spO1xuK1xuK3VubG9jazpcbitcdG11dGV4X3VubG9jayhcdTAwMjZwdHBfZGF0YS1cdTAwM2Vsb2NrKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQga3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpXG4re1xuK1x0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XG4rXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XG4rXHRzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YTY0ID0gbnNfdG9fdGltZXNwZWM2NChkZWx0YSk7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwdHBfZGF0YS1cdTAwM2Vsb2NrKTtcbitcbitcdHJldCA9IF9fa3N6X3B0cF9hZGp0aW1lKGRldiwgZGVsdGEpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byB1bmxvY2s7XG4gXG5AQCAtOTUyLDYgKzEyMzYsMjYgQEAgc3RhdGljIGludCBrc3pfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHM2NCBkZWx0YSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcmVxLCBpbnQgb24pXG4re1xuK1x0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XG4rXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XG4rXHRpbnQgcmV0O1xuK1xuK1x0c3dpdGNoIChyZXEtXHUwMDNldHlwZSkge1xuK1x0Y2FzZSBQVFBfQ0xLX1JFUV9QRVJPVVQ6XG4rXHRcdG11dGV4X2xvY2soXHUwMDI2cHRwX2RhdGEtXHUwMDNlbG9jayk7XG4rXHRcdHJldCA9IGtzejg0NjNfcHRwX2VuYWJsZV9wZXJvdXQoZGV2LCBcdTAwMjZyZXEtXHUwMDNlcGVyb3V0LCBvbik7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZwdHBfZGF0YS1cdTAwM2Vsb2NrKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiBzdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxuIFx0XHRcdCAgc3RydWN0IHB0cF9jbG9ja19yZXF1ZXN0ICpyZXEsIGludCBvbilcbiB7XG5AQCAtMTAyOCwxNyArMTMzMiwzMyBAQCBzdGF0aWMgaW50IGtzel9wdHBfc3RhcnRfY2xvY2soc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1pbnQga3N6X3B0cF9jbG9ja19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4rdm9pZCBrc3o4NDYzX3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4re1xuK1x0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4rXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YTtcbitcbitcdHB0cF9kYXRhID0gXHUwMDI2ZGV2LVx1MDAzZXB0cF9kYXRhO1xuK1xuK1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy5vd25lclx0XHQ9IFRISVNfTU9EVUxFO1xuK1x0c25wcmludGYocHRwX2RhdGEtXHUwMDNlY2Fwcy5uYW1lLCAxNiwgXCJNaWNyb2NoaXAgQ2xvY2tcIik7XG4rXHRwdHBfZGF0YS1cdTAwM2VjYXBzLm1heF9hZGpcdFx0PSBLU1pfTUFYX0RSSUZUX0NPUlI7XG4rXHRwdHBfZGF0YS1cdTAwM2VjYXBzLmdldHRpbWU2NFx0PSBrc3pfcHRwX2dldHRpbWU7XG4rXHRwdHBfZGF0YS1cdTAwM2VjYXBzLnNldHRpbWU2NFx0PSBrc3o4NDYzX3B0cF9zZXR0aW1lO1xuK1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy5hZGpmaW5lXHRcdD0ga3N6X3B0cF9hZGpmaW5lO1xuK1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy5hZGp0aW1lXHRcdD0ga3N6ODQ2M19wdHBfYWRqdGltZTtcbitcdHB0cF9kYXRhLVx1MDAzZWNhcHMuZG9fYXV4X3dvcmtcdD0ga3N6X3B0cF9kb19hdXhfd29yaztcbitcdHB0cF9kYXRhLVx1MDAzZWNhcHMuZW5hYmxlXHRcdD0ga3N6ODQ2M19wdHBfZW5hYmxlO1xuK1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy52ZXJpZnlcdFx0PSBrc3pfcHRwX3ZlcmlmeV9waW47XG4rXHRwdHBfZGF0YS1cdTAwM2VjYXBzLm5fcGluc1x0XHQ9IGRldi1cdTAwM2VpbmZvLVx1MDAzZW5fcGlucztcbitcdHB0cF9kYXRhLVx1MDAzZWNhcHMubl9wZXJfb3V0XHQ9IGRldi1cdTAwM2VpbmZvLVx1MDAzZW5fcGVyX291dDtcbit9XG4rXG4rdm9pZCBrc3pfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiB7XG4gXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbi1cdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZXJlZ3M7XG4gXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YTtcbi1cdGludCByZXQ7XG4tXHR1OCBpO1xuIFxuIFx0cHRwX2RhdGEgPSBcdTAwMjZkZXYtXHUwMDNlcHRwX2RhdGE7XG4tXHRtdXRleF9pbml0KFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuLVx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2cHRwX2RhdGEtXHUwMDNlY2xvY2tfbG9jayk7XG4gXG4gXHRwdHBfZGF0YS1cdTAwM2VjYXBzLm93bmVyXHRcdD0gVEhJU19NT0RVTEU7XG4gXHRzbnByaW50ZihwdHBfZGF0YS1cdTAwM2VjYXBzLm5hbWUsIDE2LCBcIk1pY3JvY2hpcCBDbG9ja1wiKTtcbkBAIC0xMDUwLDE0ICsxMzcwLDI3IEBAIGludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdHB0cF9kYXRhLVx1MDAzZWNhcHMuZG9fYXV4X3dvcmtcdD0ga3N6X3B0cF9kb19hdXhfd29yaztcbiBcdHB0cF9kYXRhLVx1MDAzZWNhcHMuZW5hYmxlXHRcdD0ga3N6X3B0cF9lbmFibGU7XG4gXHRwdHBfZGF0YS1cdTAwM2VjYXBzLnZlcmlmeVx0XHQ9IGtzel9wdHBfdmVyaWZ5X3Bpbjtcbi1cdHB0cF9kYXRhLVx1MDAzZWNhcHMubl9waW5zXHRcdD0gS1NaX1BUUF9OX0dQSU87XG4tXHRwdHBfZGF0YS1cdTAwM2VjYXBzLm5fcGVyX291dFx0PSAzO1xuK1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy5uX3BpbnNcdFx0PSBkZXYtXHUwMDNlaW5mby1cdTAwM2VuX3BpbnM7XG4rXHRwdHBfZGF0YS1cdTAwM2VjYXBzLm5fcGVyX291dFx0PSBkZXYtXHUwMDNlaW5mby1cdTAwM2VuX3Blcl9vdXQ7XG4rfVxuK1xuK2ludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbit7XG4rXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbitcdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZXJlZ3M7XG4rXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YTtcbitcdGludCByZXQ7XG4rXHR1OCBpO1xuK1xuK1x0cHRwX2RhdGEgPSBcdTAwMjZkZXYtXHUwMDNlcHRwX2RhdGE7XG4rXHRtdXRleF9pbml0KFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2cHRwX2RhdGEtXHUwMDNlY2xvY2tfbG9jayk7XG4gXG4gXHRyZXQgPSBrc3pfcHRwX3N0YXJ0X2Nsb2NrKGRldik7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgS1NaX1BUUF9OX0dQSU87IGkrKykge1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGV2LVx1MDAzZWluZm8tXHUwMDNlbl9waW5zOyBpKyspIHtcbiBcdFx0c3RydWN0IHB0cF9waW5fZGVzYyAqcHRwX3BpbiA9IFx1MDAyNnB0cF9kYXRhLVx1MDAzZXBpbl9jb25maWdbaV07XG4gXG4gXHRcdHNucHJpbnRmKHB0cF9waW4tXHUwMDNlbmFtZSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oXG5pbmRleCA3MDY3ZWM5YmQxZTZmLi45MjU4OWNmMzczYWMyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmhcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oXG5AQCAtMTIsNyArMTIsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuIFxuLSNkZWZpbmUgS1NaX1BUUF9OX0dQSU9cdFx0MlxuKyNkZWZpbmUgS1NaX1BUUF9OX0dQSU9cdFx0MTJcbiBcbiBlbnVtIGtzel9wdHBfdG91X21vZGUge1xuIFx0S1NaX1BUUF9UT1VfSURMRSxcbkBAIC0zMyw2ICszMyw4IEBAIHN0cnVjdCBrc3pfcHRwX2RhdGEge1xuIFx0c3RydWN0IHRpbWVzcGVjNjQgcGVyb3V0X3BlcmlvZDtcbiB9O1xuIFxuK3ZvaWQga3N6X3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xuK3ZvaWQga3N6ODQ2M19wdHBfc2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbiBpbnQga3N6X3B0cF9jbG9ja19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xuIFxuIHZvaWQga3N6X3B0cF9jbG9ja191bnJlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XG5AQCAtNjUsNiArNjcsNyBAQCBzdHJ1Y3Qga3N6X3B0cF9kYXRhIHtcbiBcdHN0cnVjdCBtdXRleCBsb2NrO1xuIH07XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIGtzel9wdHBfc2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKSB7IH1cbiBzdGF0aWMgaW5saW5lIGludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiB7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmhcbmluZGV4IDY1ZWE4NTc3YWY3NTUuLjE2ZjExN2ZhNWQ0OWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmhcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cF9yZWcuaFxuQEAgLTUxLDYgKzUxLDIyIEBAXG4gXG4gI2RlZmluZSBSRUdfUFRQX1VOSVRfSU5ERVhfXzRcdFx0MHgwNTIwXG4gXG4rI2RlZmluZSBLU1o4NDYzX1RPVV9BQ1RJVkVcdFx0MHgyMDJcbisjZGVmaW5lIEtTWjg0NjNfVE9VX0VOXHRcdFx0MHgyMDZcbisjZGVmaW5lIEtTWjg0NjNfVE9VX1NXX1JTVFx0XHQweDIwOFxuK1xuKyNkZWZpbmUgS1NaODQ2M19UUklHTl9DRkdfU0laRVx0XHQweDIwXG4rI2RlZmluZSBLU1o4NDYzX1RSSUcxX0NGR1x0XHQweDIyMFxuKyNkZWZpbmUgS1NaODQ2M19UQVJHRVRfTlNFQ1x0XHQweDAwMFxuKyNkZWZpbmUgS1NaODQ2M19UQVJHRVRfU0VDXHRcdDB4MDA0XG4rI2RlZmluZSBLU1o4NDYzX1BBVFRFUk5fT0ZGXHRcdDB4MDA4XG4rI2RlZmluZSBLU1o4NDYzX05PVElGWV9CSVRcdFx0QklUKDgpXG4rI2RlZmluZSBLU1o4NDYzX1BBVFRFUk5fTVx0XHRHRU5NQVNLKDYsIDQpXG4rI2RlZmluZSBLU1o4NDYzX1BVTFNFX1dJRFRIX09GRlx0XHQweDAwQVxuKyNkZWZpbmUgS1NaODQ2M19UUklHX1BVTFNFX1dJRFRIX01cdEdFTk1BU0soMTUsIDApXG4rI2RlZmluZSBLU1o4NDYzX0NZQ0xFX1dJRFRIX09GRlx0XHQweDAwQ1xuKyNkZWZpbmUgS1NaODQ2M19DWUNMRV9DTlRfT0ZGXHRcdDB4MDEwXG4rXG4gI2RlZmluZSBQVFBfR1BJT19JTkRFWFx0XHRcdEdFTk1BU0soMTksIDE2KVxuICNkZWZpbmUgUFRQX1RTSV9JTkRFWFx0XHRcdEJJVCg4KVxuICNkZWZpbmUgUFRQX1RPVV9JTkRFWFx0XHRcdEdFTk1BU0soMSwgMClcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uY1xuaW5kZXggODZjZTNhODY3MDVmOS4uM2EyMDkxMjJmYzdkYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmNcbkBAIC04NjcsNiArODY3LDcgQEAgc3RhdGljIGludCBsYW45Mzd4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdFx0fVxuIFx0fVxuIFxuK1x0a3N6X3B0cF9zZXRfY2Fwcyhkcyk7XG4gXHRyZXQgPSBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKGRzKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2s6ICVkXFxuXCIsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MDoyNy4xNTQ0MDk0MThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTg3OTAyMjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgcGF0Y2ggYW5kIGRlY2lkZSBpZiB3ZSdyZSBnb2luZyB0byBwdXQgaXQgdGhyb3VnaCB0aGUgZnV6emluZyBtaWxsLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUuIEkgc2VlIHRoYXQgaXQgdG91Y2hlcyBgZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9gLCB3aGljaCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggTWljcm9jaGlwIEtTWi9MQU4gRFNBIEV0aGVybmV0IHN3aXRjaCBkcml2ZXJzLiBTcGVjaWZpY2FsbHksIHRoaW5ncyBsaWtlIHRoZSBLU1o4NDYzLCBLU1o4NTYzLCBLU1o5NDc3LCBLU1o5NTY3LCBhbmQgTEFOOTM3eC5cblxuTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgaG93IGRvZXMgdGhlIGtlcm5lbCBpbnRlcmZhY2Ugd2l0aCB0aGVzZSBzd2l0Y2hlcz8gU1BJLCBJMkMsIG1lbW9yeS1tYXBwZWQsIE1ESU8/IEtub3dpbmcgdGhhdCB3aWxsIGJlIGNydWNpYWwuIEFuZCBtb3JlIGltcG9ydGFudGx5LCBjYW4gd2UgZXZlbiByZWFjaCB0aGVzZSBkcml2ZXJzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VPyBDYW4gd2UgZW11bGF0ZSBhIERTQSBzd2l0Y2ggb3IgYSBiYXNpYyBTUEkvSTJDIE1pY3JvY2hpcCBzd2l0Y2gsIG9yIGFyZSB3ZSBzdHVjayB3aXRoIHBoeXNpY2FsIGhhcmR3YXJlPyBJZiBpdCdzIHRoZSBsYXR0ZXIsIHRoYXQncyBnb2luZyB0byBiZSBhIHNpZ25pZmljYW50IGh1cmRsZS5cblxuVGltZSB0byBmaXJlIHVwIHRoZSBncmVwcGVyIG9yIHJlYWQtZmlsZSB0byBkbyBhIGxpdHRsZSBkaWdnaW5nIGFuZCBnZXQgc29tZSBhbnN3ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQzNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQwOjMwLjM0MjMxNDk3OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTE3NTQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNSUNST0NISVBfS1NaXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjI6bWVudWNvbmZpZyBORVRfRFNBX01JQ1JPQ0hJUF9LU1pfQ09NTU9OXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk1pY3JvY2hpcCBLU1o4WFhYL0tTWjlYWFgvTEFOOTM3WCBzZXJpZXMgc3dpdGNoIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMTYtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjE3OmNvbmZpZyBORVRfRFNBX01JQ1JPQ0hJUF9LU1o5NDc3X0kyQ1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZy0xOC1cXHR0cmlzdGF0ZSBcXFwiS1NaIHNlcmllcyBJMkMgY29ubmVjdGVkIHN3aXRjaCBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjE5OlxcdGRlcGVuZHMgb24gTkVUX0RTQV9NSUNST0NISVBfS1NaX0NPTU1PTiBcXHUwMDI2XFx1MDAyNiBJMkNcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMjAtXFx0c2VsZWN0IFJFR01BUF9JMkNcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZy0yMy1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWc6MjQ6Y29uZmlnIE5FVF9EU0FfTUlDUk9DSElQX0tTWl9TUElcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMjUtXFx0dHJpc3RhdGUgXFxcIktTWiBzZXJpZXMgU1BJIGNvbm5lY3RlZCBzd2l0Y2ggZHJpdmVyXFxcIlxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZzoyNjpcXHRkZXBlbmRzIG9uIE5FVF9EU0FfTUlDUk9DSElQX0tTWl9DT01NT04gXFx1MDAyNlxcdTAwMjYgU1BJXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTI3LVxcdHNlbGVjdCBSRUdNQVBfU1BJXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMzAtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjMxOmNvbmZpZyBORVRfRFNBX01JQ1JPQ0hJUF9LU1pfUFRQXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHRoZSBQVFAgY2xvY2sgb24gdGhlIEtTWjk1NjMvTEFOOTM3eCBFdGhlcm5ldCBTd2l0Y2hcXFwiXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjMzOlxcdGRlcGVuZHMgb24gTkVUX0RTQV9NSUNST0NISVBfS1NaX0NPTU1PTiBcXHUwMDI2XFx1MDAyNiBQVFBfMTU4OF9DTE9DS1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZzozNDpcXHRkZXBlbmRzIG9uIE5FVF9EU0FfTUlDUk9DSElQX0tTWl9DT01NT049bSB8fCBQVFBfMTU4OF9DTE9DSz15XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTM1LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZy00MC1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWc6NDE6Y29uZmlnIE5FVF9EU0FfTUlDUk9DSElQX0tTWjg4NjNfU01JXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTQyLVxcdHRyaXN0YXRlIFxcXCJLU1ogc2VyaWVzIFNNSSBjb25uZWN0ZWQgc3dpdGNoIGRyaXZlclxcXCJcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWc6NDM6XFx0ZGVwZW5kcyBvbiBORVRfRFNBX01JQ1JPQ0hJUF9LU1pfQ09NTU9OXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTQ0LVxcdHNlbGVjdCBNRElPX0JJVEJBTkdcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX05FVF9EU0FfTUlDUk9DSElQX0tTWl9DT01NT04pXFx0Kz0ga3N6X3N3aXRjaC5vXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZS0zLWtzel9zd2l0Y2gtb2JqcyA6PSBrc3pfY29tbW9uLm8ga3N6X2RjYi5vXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL01ha2VmaWxlPTY9a3N6X3N3aXRjaC1vYmpzICs9IGxhbjkzN3hfbWFpbi5vXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZS03LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGU6ODppZmRlZiBDT05GSUdfTkVUX0RTQV9NSUNST0NISVBfS1NaX1BUUFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGUtOS1rc3pfc3dpdGNoLW9ianMgKz0ga3N6X3B0cC5vXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZT0xMD1lbmRpZlxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGUtMTEtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfTkVUX0RTQV9NSUNST0NISVBfS1NaOTQ3N19JMkMpXFx0Kz0ga3N6OTQ3N19pMmMub1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX05FVF9EU0FfTUlDUk9DSElQX0tTWl9TUEkpXFx0XFx0Kz0ga3N6X3NwaS5vXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfTkVUX0RTQV9NSUNST0NISVBfS1NaODg2M19TTUkpXFx0Kz0ga3N6ODg2M19zbWkub1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmg9MTcxPXN0cnVjdCBrc3pfcG9ydCB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaC0xOTQtXFx0c3RydWN0IHBoeWxpbmtfcGNzICpwY3M7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmg6MTk1OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX01JQ1JPQ0hJUF9LU1pfUFRQKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTE5Ni1cXHRzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyB0c3RhbXBfY29uZmlnO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgtMTAtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg6MTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfTUlDUk9DSElQX0tTWl9QVFApXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgtMTItXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaD05MD1zdGF0aWMgaW5saW5lIHZvaWQga3N6ODQ2M19wdHBfaXJxX2ZyZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKSB7fVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgtMTA1LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oOjEwNjojZW5kaWZcXHQvKiBFbmQgb2YgQ09ORklHX05FVF9EU0FfTUlDUk9DSElQX0tTWl9QVFAgKi9cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC0xMDctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQwOjMwLjQxMzQ5NjY3NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMzMwODc5MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGRyaXZlciBzaXR1YXRpb24uIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmRhbWVudGFsIGFyY2hpdGVjdHVyZTogYXJlIHRoZXNlIGRyaXZlcnMgc3RyaWN0bHkgdGllZCB0byBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBjb21wb25lbnRzPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhleSdyZSBwcm9iZWQgYW5kIGJvdW5kLlxuXG5NeSBpbnN0aW5jdCBpcyB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNvZGUgaXRzZWxmLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlc2UgYGtzemAgZHJpdmVycyBkaXJlY3RseSB0byBzZWUgdGhlIGJpbmRpbmcgbWVjaGFuaXNtIGluIGRldGFpbC4gSSdsbCB0YXJnZXQgdGhlIGBrc3pfc3BpLmNgLCBga3N6OTQ3N19pMmMuY2AsIGFuZCBga3N6ODg2M19zbWkuY2AgZmlsZXMgYXMgYSBzdGFydGluZyBwb2ludC4gVGhvc2Ugc2VlbSBsaWtlIHRoZXknbGwgY292ZXIgYSByYW5nZSBvZiBpbnRlcmZhY2UgbWV0aG9kb2xvZ2llcyB0aGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gdGhpbmdzLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gc2VlIHRoZSBpbnRlcmFjdGlvbnMgZmlyc3RoYW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM4NSwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQwOjMyLjQ0NjU4Nzk1MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDIyODMxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfc3BpX2RyaXZlcnxtb2R1bGVfaTJjX2RyaXZlcnxtb2R1bGVfbWRpb19kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmM9MTMzPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBrc3o5NDc3X2kyY19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmMtMTQ0LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYzoxNDU6bW9kdWxlX2kyY19kcml2ZXIoa3N6OTQ3N19pMmNfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmMtMTQ2LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmM9MzQ5PXN0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBrc3pfc3BpX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jLTM2MC1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYzozNjE6bW9kdWxlX3NwaV9kcml2ZXIoa3N6X3NwaV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jLTM2Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDA6MzIuNTAwODI2MjI3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODE2ODkxMTc0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gRFNBIFN3aXRjaGVzIGFuZCBGdXp6aW5nIFdvcnRoaW5lc3MqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIERTQSBzd2l0Y2hlcy4gVGhlIHByb21wdCBzYXlzIFwiV29ydGhGdXp6aW5nPWZhbHNlXCIgaWYgaXQgZmFsbHMgdW5kZXIgc3BlY2lmaWMgY3JpdGVyaWEsIHNvIGxldCdzIGJyZWFrIGl0IGRvd246IEFyZSBEU0Egc3dpdGNoZXMgYWx3YXlzIHBoeXNpY2FsIGhhcmR3YXJlLWRlcGVuZGVudCwgb3IgY2FuIHdlIGdldCBhdCB0aGVtIHNvbWVob3cgaW4gc3l6a2FsbGVyIG9yIGEgdmlydHVhbGl6ZWQgUUVNVSBlbnZpcm9ubWVudD8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgd2UgY2FuIGV2ZW4gKnJlYWNoKiB0aGlzIGNvZGUuXG5cbkFscmlnaHQsIGxldCdzIHN0ZXAgYmFjayBhbmQgbG9vayBhdCB0aGUgXCJub3QgV29ydGhGdXp6aW5nXCIgY29uZGl0aW9ucy4gSXQncyBhIGxvdCBvZiB0aGluZ3MsIGxpa2UgZG9jdW1lbnRhdGlvbiwgbG9nZ2luZywgY29uc3RhbnRzIHRoYXQgZG9uJ3QgY2hhbmdlIGZsb3csIHVucmVhY2hhYmxlIGNvZGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB2ZW5kb3Itc3BlY2lmaWMgc3R1ZmYgdGllZCB0byBhY3R1YWwgaGFyZHdhcmUgKGxpa2UgUENJZSBjYXJkcyBub3QgZW11bGF0ZWQpLCBhbmQgdGVhcmRvd24gY2FsbGJhY2tzIHRoYXQgb25seSBydW4gZHVyaW5nIGhvdC11bnBsdWcuXG5cblRoZSByZWFsIHF1ZXN0aW9uIGlzLCBjYW4gdGhlc2UgRFNBIHN3aXRjaGVzIG9uIFNQSSBvciBJMkMgKHNwZWNpZmljYWxseSwgdGhpbmtpbmcgYWJvdXQgc29tZXRoaW5nIGxpa2UgYSBNaWNyb2NoaXAgS1NaKSBldmVuIGJlICpwcm9iZWQqIG9yIGluc3RhbnRpYXRlZCBpbiBRRU1VL3N5emthbGxlciB3aXRob3V0IGEgcGh5c2ljYWwgc2V0dXA/IE5vdyBJJ20gcmVtZW1iZXJpbmcgdGhhdCBTUEkgYW5kIEkyQyBkcml2ZXJzIGNhbiBzb21ldGltZXMgYmUgaW50ZXJhY3RlZCB3aXRoIGZyb20gdXNlcnNwYWNlLCByaWdodD8gTGlrZSwgY2FuIEkgY3JlYXRlIGFuIEkyQyBkZXZpY2UgdmlhIHN5c2ZzIHdpdGggYC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy1YL25ld19kZXZpY2VgPyBPciB2aWEgU1BJL09GLCBvciBldmVuIHdpdGggYSBkdW1teSBkZXZpY2U/XG5cbkFoYSwgdGhhdCdzIGl0ISBJbiBMaW51eCwgeW91ICpjYW4qIGluc3RhbnRpYXRlIEkyQyBkZXZpY2VzIHdpdGggdGhhdCBgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLVgvbmV3X2RldmljZWAgcGF0aC4gQnV0LCB0aGUgcXVlc3Rpb24gYmVjb21lcywgY2FuIHN5emthbGxlciAqdXNlKiB0aGlzPyBEb2VzIFFFTVUgZXZlbiBoYXZlIGFuIEkyQyBidXMgaW1wbGVtZW50ZWQ/IEkgbmVlZCB0byBjaGVjayBpZiBzeXprYWxsZXIgaGFzIFwiaTJjIG5ld19kZXZpY2VcIiBmdW5jdGlvbmFsaXR5LCBhbmQgaWYgRFNBIHN3aXRjaGVzIGNhbiBiZSBjb250cm9sbGVkIHZpYSB0aGlzLlxuXG5Pa2F5LCBsZXQncyBkaWcgaW50byB0aGUgZGV0YWlscy4gRFNBIHN3aXRjaCBkcml2ZXIgcHJvYmluZyByZXF1aXJlcyBhIERTQSB0cmVlIGFuZCBwbGF0Zm9ybS9kZXZpY2UgdHJlZSBkYXRhLiBTbyBub3cgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlOiBTcGVjaWZpY2FsbHksIGxldCdzIGxvb2sgYXQgYGtzejk0NzdfaTJjX3Byb2JlYCBhbmQgYGtzel9zd2l0Y2hfcmVnaXN0ZXJgIGluIGBkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2AgdG8gc2VlIGlmIHRoZXkgY2FuIHNvbWVob3cgYmUgYWNjZXNzZWQgdmlydHVhbGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTkzOCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MDo0MC42Njk3NDEwMTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwMDg1NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3N6OTQ3N19pMmNfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmM9MTU9S1NaX1JFR01BUF9UQUJMRShrc3o5NDc3LCBub3RfdXNlZCwgMTYsIDAsIDApO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYy0xNi1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmM6MTc6c3RhdGljIGludCBrc3o5NDc3X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYy0xOC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmM9MTMzPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBrc3o5NDc3X2kyY19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmMtMTM4LVxcdH0sXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jOjEzOTpcXHQucHJvYmUgPSBrc3o5NDc3X2kyY19wcm9iZSxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmMtMTQwLVxcdC5yZW1vdmVcXHQ9IGtzejk0NzdfaTJjX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDA6NDAuNzE4NzU3NzEzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTI2MDM5NDQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEtTWjk0NzcgRHJpdmVyKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBLU1o5NDc3IHN3aXRjaCBpcyBiZWluZyBoYW5kbGVkIGluIHRoZSBMaW51eCBrZXJuZWwuIFRpbWUgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgbG9va2luZyBhdCBga3N6OTQ3N19pMmNfcHJvYmVgIGFuZCBga3N6X3N3aXRjaF9yZWdpc3RlcmAgZnVuY3Rpb25zLiBUaGVzZSBhcmUgbGlrZWx5IHRoZSBjb3JlIGVudHJ5IHBvaW50cyBmb3IgaW5pdGlhbGl6aW5nIGFuZCByZWdpc3RlcmluZyB0aGUgZGV2aWNlLCBJJ2QgZXhwZWN0LiBUaGUgZmlsZSBwYXRocyBhcmUgc3RyYWlnaHRmb3J3YXJkIGVub3VnaDogYGRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuY2AgYW5kIGBrc3pfY29tbW9uLmNgLiBJJ20gaG9waW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBJMkMgY29tbXVuaWNhdGlvbiBpcyBzZXQgdXAsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyB1c2VkLCBhbmQgaG93IHRoZSBzd2l0Y2ggaXMgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIERTQSAoRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSkgZnJhbWV3b3JrLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIHJlc291cmNlIGFsbG9jYXRpb24gdG9vLCBhcyB0aGF0J3MgYWx3YXlzIGEgY3JpdGljYWwgYXNwZWN0IGluIGRyaXZlciBkZXZlbG9wbWVudC4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzM0OCwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQwOjQ1Ljk3OTE1NDg3OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDE3OlxcdHN0YXRpYyBpbnQga3N6OTQ3N19pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYylcXG4gIDE4OlxcdHtcXG4gIDE5OlxcdFxcdGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhICpjaGlwO1xcbiAgMjA6XFx0XFx0c3RydWN0IGRldmljZSAqZGRldiA9IFxcdTAwMjZpMmMtXFx1MDAzZWRldjtcXG4gIDIxOlxcdFxcdHN0cnVjdCByZWdtYXBfY29uZmlnIHJjO1xcbiAgMjI6XFx0XFx0c3RydWN0IGtzel9kZXZpY2UgKmRldjtcXG4gIDIzOlxcdFxcdGludCBpLCByZXQ7XFxuICAyNDpcXHRcXG4gIDI1OlxcdFxcdGNoaXAgPSBkZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGRldik7XFxuICAyNjpcXHRcXHRpZiAoIWNoaXApXFxuICAyNzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gIDI4OlxcdFxcbiAgMjk6XFx0XFx0ZGV2ID0ga3N6X3N3aXRjaF9hbGxvYyhcXHUwMDI2aTJjLVxcdTAwM2VkZXYsIGNoaXAsIGkyYyk7XFxuICAzMDpcXHRcXHRpZiAoIWRldilcXG4gIDMxOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQvKiBTYXZlIGNoaXAgaWQgdG8gZG8gc3BlY2lhbCBpbml0aWFsaXphdGlvbiB3aGVuIHByb2JpbmcuICovXFxuICAzNDpcXHRcXHRkZXYtXFx1MDAzZWNoaXBfaWQgPSBjaGlwLVxcdTAwM2VjaGlwX2lkO1xcbiAgMzU6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIF9fS1NaX05VTV9SRUdNQVBTOyBpKyspIHtcXG4gIDM2OlxcdFxcdFxcdHJjID0ga3N6OTQ3N19yZWdtYXBfY29uZmlnW2ldO1xcbiAgMzc6XFx0XFx0XFx0cmMubG9ja19hcmcgPSBcXHUwMDI2ZGV2LVxcdTAwM2VyZWdtYXBfbXV0ZXg7XFxuICAzODpcXHRcXHRcXHRkZXYtXFx1MDAzZXJlZ21hcFtpXSA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGkyYywgXFx1MDAyNnJjKTtcXG4gIDM5OlxcdFxcdFxcdGlmIChJU19FUlIoZGV2LVxcdTAwM2VyZWdtYXBbaV0pKSB7XFxuICA0MDpcXHRcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcXHUwMDI2aTJjLVxcdTAwM2VkZXYsIFBUUl9FUlIoZGV2LVxcdTAwM2VyZWdtYXBbaV0pLFxcbiAgNDE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgcmVnbWFwJWlcXFxcblxcXCIsXFxuICA0MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGtzejk0NzdfcmVnbWFwX2NvbmZpZ1tpXS52YWxfYml0cyk7XFxuICA0MzpcXHRcXHRcXHR9XFxuICA0NDpcXHRcXHR9XFxuICA0NTpcXHRcXG4gIDQ2OlxcdFxcdGlmIChpMmMtXFx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhKVxcbiAgNDc6XFx0XFx0XFx0ZGV2LVxcdTAwM2VwZGF0YSA9IGkyYy1cXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGE7XFxuICA0ODpcXHRcXG4gIDQ5OlxcdFxcdGRldi1cXHUwMDNlaXJxID0gaTJjLVxcdTAwM2VpcnE7XFxuICA1MDpcXHRcXG4gIDUxOlxcdFxcdHJldCA9IGtzel9zd2l0Y2hfcmVnaXN0ZXIoZGV2KTtcXG4gIDUyOlxcdFxcbiAgNTM6XFx0XFx0LyogTWFpbiBEU0EgZHJpdmVyIG1heSBub3QgYmUgc3RhcnRlZCB5ZXQuICovXFxuICA1NDpcXHRcXHRpZiAocmV0KVxcbiAgNTU6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFx0aTJjX3NldF9jbGllbnRkYXRhKGkyYywgZGV2KTtcXG4gIDU4OlxcdFxcbiAgNTk6XFx0XFx0cmV0dXJuIDA7XFxuICA2MDpcXHR9XFxuICA2MTpcXHRcXG4gIDYyOlxcdHN0YXRpYyB2b2lkIGtzejk0NzdfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjKVxcbiAgNjM6XFx0e1xcbiAgNjQ6XFx0XFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGkyY19nZXRfY2xpZW50ZGF0YShpMmMpO1xcbiAgNjU6XFx0XFxuICA2NjpcXHRcXHRpZiAoZGV2KVxcbiAgNjc6XFx0XFx0XFx0a3N6X3N3aXRjaF9yZW1vdmUoZGV2KTtcXG4gIDY4OlxcdH1cXG4gIDY5OlxcdFxcbiAgNzA6XFx0c3RhdGljIHZvaWQga3N6OTQ3N19pMmNfc2h1dGRvd24oc3RydWN0IGkyY19jbGllbnQgKmkyYylcXG4gIDcxOlxcdHtcXG4gIDcyOlxcdFxcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBpMmNfZ2V0X2NsaWVudGRhdGEoaTJjKTtcXG4gIDczOlxcdFxcbiAgNzQ6XFx0XFx0aWYgKCFkZXYpXFxuICA3NTpcXHRcXHRcXHRyZXR1cm47XFxuICA3NjpcXHRcXG4gIDc3OlxcdFxcdGtzel9zd2l0Y2hfc2h1dGRvd24oZGV2KTtcXG4gIDc4OlxcdFxcbiAgNzk6XFx0XFx0aTJjX3NldF9jbGllbnRkYXRhKGkyYywgTlVMTCk7XFxuICA4MDpcXHR9XFxuICA4MTpcXHRcXG4gIDgyOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBrc3o5NDc3X2kyY19pZFtdID0ge1xcbiAgODM6XFx0XFx0eyAubmFtZSA9IFxcXCJrc3o5NDc3LXN3aXRjaFxcXCIgfSxcXG4gIDg0OlxcdFxcdHsgfVxcbiAgODU6XFx0fTtcXG4gIDg2OlxcdFxcbiAgODc6XFx0TU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGtzejk0NzdfaTJjX2lkKTtcXG4gIDg4OlxcdFxcbiAgODk6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQga3N6OTQ3N19kdF9pZHNbXSA9IHtcXG4gIDkwOlxcdFxcdHtcXG4gIDkxOlxcdFxcdFxcdC5jb21wYXRpYmxlID0gXFxcIm1pY3JvY2hpcCxrc3o5NDc3XFxcIixcXG4gIDkyOlxcdFxcdFxcdC5kYXRhID0gXFx1MDAyNmtzel9zd2l0Y2hfY2hpcHNbS1NaOTQ3N11cXG4gIDkzOlxcdFxcdH0sXFxuICA5NDpcXHRcXHR7XFxuICA5NTpcXHRcXHRcXHQuY29tcGF0aWJsZSA9IFxcXCJtaWNyb2NoaXAsa3N6OTg5NlxcXCIsXFxuICA5NjpcXHRcXHRcXHQuZGF0YSA9IFxcdTAwMjZrc3pfc3dpdGNoX2NoaXBzW0tTWjk4OTZdXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQwOjQ1Ljk3OTI4NDA4OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDg4OTk2Mzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gdGhlIGtzejk0NzcgRHJpdmVyIFByb2JlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBrc3o5NDc3X2kyY19wcm9iZWAgZnVuY3Rpb24uIExpbmVzIDI1LTI3IGp1bXAgb3V0IGF0IG1lIGltbWVkaWF0ZWx5OiB0aGV5IHRyeSB0byByZXRyaWV2ZSBtYXRjaCBkYXRhIGZyb20gdGhlIGRldmljZSB1c2luZyBgZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRkZXYpYCwgYW5kIHRoZW4gYmFpbCBpZiBpdCdzIE5VTEwuIFRoaXMgbWFrZXMgc2Vuc2UgaW4gbW9zdCBjb250ZXh0cywgYnV0IGhvbGQgb24gYSBzZWNvbmQuLi4gaWYgdGhlIGRldmljZSBpcyBpbml0aWFsaXplZCB0aHJvdWdoIHRoZSBJMkMgSUQsIHNwZWNpZmljYWxseSBgXCJrc3o5NDc3LXN3aXRjaFwiYCBhcyBkZWZpbmVkIGluIGBrc3o5NDc3X2kyY19pZGAsIHdvdWxkbid0IHRoYXQgbWVhbiBgZHJpdmVyX2RhdGFgIGlzIGAwYCBvciBOVUxMPyBJbiB0aGF0IHNjZW5hcmlvLCBgZGV2aWNlX2dldF9tYXRjaF9kYXRhYCB3b3VsZCAqYWx3YXlzKiByZXR1cm4gTlVMTCwgcmlnaHQ/IFRoYXQgbG9va3MgbGlrZSBhIGJ1Zy4gQmVmb3JlIEkgZGlnIGRlZXBlciwgbGV0IG1lIGNoZWNrIHRoZSBga3N6X3N3aXRjaF9yZWdpc3RlcmAgZnVuY3Rpb24gaW4gYGtzel9jb21tb24uY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2hpcCBpcyBtZWFudCB0byBiZSByZWdpc3RlcmVkIGFuZCBpZiB0aGVyZSdzIGFueSBpbXBsaWNpdCBkYXRhIHNldHVwIHRoYXQgbWlnaHQgYmUgbWlzc2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg0NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQwOjQ5LjQ2ODI4MzM4OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE1OTYwNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGtzel9zd2l0Y2hfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYz0zOTExPXN0YXRpYyBpbnQga3N6ODQ2M19yZWxlYXNlX3N0cmFwc19zcGkoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTM5MTUtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6MzkxNjppbnQga3N6X3N3aXRjaF9yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTM5MTcte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmg9NDI5PXN0cnVjdCBrc3pfZGV2aWNlICprc3pfc3dpdGNoX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmJhc2UsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaC00MzEtXFx0XFx0XFx0XFx0ICAgIHZvaWQgKnByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oOjQzMjppbnQga3N6X3N3aXRjaF9yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaC00MzMtdm9pZCBrc3pfc3dpdGNoX3JlbW92ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDA6NDkuNTE5ODg2MjY0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NzQ5NjI0MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gcHVsbCB1cCBga3N6X3N3aXRjaF9yZWdpc3RlcmAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uY2AgZmlsZS4gSSdtIGFzc3VtaW5nLCBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gYW5kIGxvY2F0aW9uLCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciByZWdpc3RlcmluZyBhIE1pY3JvY2hpcCBLU1ogc2VyaWVzIHN3aXRjaCB3aXRoaW4gdGhlIERTQSAoRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSkgZnJhbWV3b3JrLiBLbm93aW5nIEtTWiBzd2l0Y2hlcywgaXQgbGlrZWx5IGhhbmRsZXMgdGhlIGJhc2ljIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uLCBzZXR0aW5nIHVwIGNvbW11bmljYXRpb24gd2l0aCB0aGUgc3dpdGNoIChsaWtlbHkgdGhyb3VnaCBNRElPKSwgYW5kIHRoZW4gaW50ZWdyYXRpbmcgdGhlIHN3aXRjaCdzIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBMaW51eCBuZXR3b3JraW5nIHN0YWNrLiBJdCB3aWxsIHByb2JhYmx5IGludm9sdmUgc29tZSBkZXZpY2UgdHJlZSBwYXJzaW5nIHRvIGNvbmZpZ3VyZSBpdHMgaGFyZHdhcmUsIHBvc3NpYmx5IGluY2x1ZGluZyB0aGluZ3MgbGlrZSB0aGUgTURJTyBidXMgYWRkcmVzcywgdGhlIFBIWSBhZGRyZXNzZXMsIGFuZCBhbnkgc3BlY2lmaWMgY2xvY2sgY29uZmlndXJhdGlvbnMgbmVlZGVkIGZvciBwcm9wZXIgb3BlcmF0aW9uLiBJIGV4cGVjdCB0byBzZWUgdGhlIHN0YW5kYXJkIGRldmljZSByZWdpc3RyYXRpb24gY2FsbHMgZm9yIERTQSwgYWxvbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgc3dpdGNoJ3MgdmFyaW91cyBwb3J0cyBhbmQgdGhlaXIgY2hhcmFjdGVyaXN0aWNzLiBIb3BlZnVsbHkgaXQgY29udGFpbnMgYSBjbGVhbiBlcnJvciBoYW5kbGluZyBwYXRoIC0gdGhhdCdzIGFsd2F5cyBnb29kIHByYWN0aWNlLCBlc3BlY2lhbGx5IGluIGEgZHJpdmVyLiBJJ2xsIGJlIGxvb2tpbmcgdG8gc2VlIGhvdyB3ZWxsIGl0J3Mgd3JpdHRlbiBhbmQgaWYgaXQgcHJvdmlkZXMgcm9idXN0IGVub3VnaCBzdXBwb3J0IGZvciBhbGwgb2YgdGhlIGZlYXR1cmVzIHRoYXQgS1NaIHN3aXRjaGVzIHByb3ZpZGUuIEknbSBhbHNvIGhvcGluZyBmb3IgY2xlYXIgZG9jdW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1NDYsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MDo1Mi40OTQ4NTE2NzJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgzNjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5MTYsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM5MTY6XFx0aW50IGtzel9zd2l0Y2hfcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4zOTE3OlxcdHtcXG4zOTE4OlxcdFxcdGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhICppbmZvO1xcbjM5MTk6XFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpwb3J0cztcXG4zOTIwOlxcdFxcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XFxuMzkyMTpcXHRcXHR1bnNpZ25lZCBpbnQgcG9ydF9udW07XFxuMzkyMjpcXHRcXHRpbnQgcmV0O1xcbjM5MjM6XFx0XFx0aW50IGk7XFxuMzkyNDpcXHRcXG4zOTI1OlxcdFxcdGRldi1cXHUwMDNlcmVzZXRfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKGRldi1cXHUwMDNlZGV2LCBcXFwicmVzZXRcXFwiLFxcbjM5MjY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBHUElPRF9PVVRfTE9XKTtcXG4zOTI3OlxcdFxcdGlmIChJU19FUlIoZGV2LVxcdTAwM2VyZXNldF9ncGlvKSlcXG4zOTI4OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGRldi1cXHUwMDNlcmVzZXRfZ3Bpbyk7XFxuMzkyOTpcXHRcXG4zOTMwOlxcdFxcdGlmIChkZXYtXFx1MDAzZXJlc2V0X2dwaW8pIHtcXG4zOTMxOlxcdFxcdFxcdGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkZXYtXFx1MDAzZWRldi1cXHUwMDNlb2Zfbm9kZSwgXFxcIm1pY3JvY2hpcCxrc3o4NDYzXFxcIikpIHtcXG4zOTMyOlxcdFxcdFxcdFxcdHJldCA9IGtzejg0NjNfY29uZmlndXJlX3N0cmFwc19zcGkoZGV2KTtcXG4zOTMzOlxcdFxcdFxcdFxcdGlmIChyZXQpXFxuMzkzNDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjM5MzU6XFx0XFx0XFx0fVxcbjM5MzY6XFx0XFxuMzkzNzpcXHRcXHRcXHRncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoZGV2LVxcdTAwM2VyZXNldF9ncGlvLCAxKTtcXG4zOTM4OlxcdFxcdFxcdHVzbGVlcF9yYW5nZSgxMDAwMCwgMTIwMDApO1xcbjM5Mzk6XFx0XFx0XFx0Z3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGRldi1cXHUwMDNlcmVzZXRfZ3BpbywgMCk7XFxuMzk0MDpcXHRcXHRcXHRtc2xlZXAoMTAwKTtcXG4zOTQxOlxcdFxcbjM5NDI6XFx0XFx0XFx0aWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGRldi1cXHUwMDNlZGV2LVxcdTAwM2VvZl9ub2RlLCBcXFwibWljcm9jaGlwLGtzejg0NjNcXFwiKSkge1xcbjM5NDM6XFx0XFx0XFx0XFx0cmV0ID0ga3N6ODQ2M19yZWxlYXNlX3N0cmFwc19zcGkoZGV2KTtcXG4zOTQ0OlxcdFxcdFxcdFxcdGlmIChyZXQpXFxuMzk0NTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjM5NDY6XFx0XFx0XFx0fVxcbjM5NDc6XFx0XFx0fVxcbjM5NDg6XFx0XFxuMzk0OTpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZWRldl9tdXRleCk7XFxuMzk1MDpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZXJlZ21hcF9tdXRleCk7XFxuMzk1MTpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZWFsdV9tdXRleCk7XFxuMzk1MjpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZXZsYW5fbXV0ZXgpO1xcbjM5NTM6XFx0XFxuMzk1NDpcXHRcXHRyZXQgPSBrc3pfc3dpdGNoX2RldGVjdChkZXYpO1xcbjM5NTU6XFx0XFx0aWYgKHJldClcXG4zOTU2OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMzk1NzpcXHRcXG4zOTU4OlxcdFxcdGluZm8gPSBrc3pfbG9va3VwX2luZm8oZGV2LVxcdTAwM2VjaGlwX2lkKTtcXG4zOTU5OlxcdFxcdGlmICghaW5mbylcXG4zOTYwOlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbjM5NjE6XFx0XFxuMzk2MjpcXHRcXHQvKiBVcGRhdGUgdGhlIGNvbXBhdGlibGUgaW5mbyB3aXRoIHRoZSBwcm9iZWQgb25lICovXFxuMzk2MzpcXHRcXHRkZXYtXFx1MDAzZWluZm8gPSBpbmZvO1xcbjM5NjQ6XFx0XFxuMzk2NTpcXHRcXHRkZXZfaW5mbyhkZXYtXFx1MDAzZWRldiwgXFxcImZvdW5kIHN3aXRjaDogJXMsIHJldiAlaVxcXFxuXFxcIixcXG4zOTY2OlxcdFxcdFxcdCBkZXYtXFx1MDAzZWluZm8tXFx1MDAzZWRldl9uYW1lLCBkZXYtXFx1MDAzZWNoaXBfcmV2KTtcXG4zOTY3OlxcdFxcbjM5Njg6XFx0XFx0cmV0ID0ga3N6X2NoZWNrX2RldmljZV9pZChkZXYpO1xcbjM5Njk6XFx0XFx0aWYgKHJldClcXG4zOTcwOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMzk3MTpcXHRcXG4zOTcyOlxcdFxcdGRldi1cXHUwMDNlZGV2X29wcyA9IGRldi1cXHUwMDNlaW5mby1cXHUwMDNlb3BzO1xcbjM5NzM6XFx0XFxuMzk3NDpcXHRcXHRyZXQgPSBkZXYtXFx1MDAzZWRldl9vcHMtXFx1MDAzZWluaXQoZGV2KTtcXG4zOTc1OlxcdFxcdGlmIChyZXQpXFxuMzk3NjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjM5Nzc6XFx0XFxuMzk3ODpcXHRcXHRkZXYtXFx1MDAzZXBvcnRzID0gZGV2bV9remFsbG9jKGRldi1cXHUwMDNlZGV2LFxcbjM5Nzk6XFx0XFx0XFx0XFx0XFx0ICBkZXYtXFx1MDAzZWluZm8tXFx1MDAzZXBvcnRfY250ICogc2l6ZW9mKHN0cnVjdCBrc3pfcG9ydCksXFxuMzk4MDpcXHRcXHRcXHRcXHRcXHQgIEdGUF9LRVJORUwpO1xcbjM5ODE6XFx0XFx0aWYgKCFkZXYtXFx1MDAzZXBvcnRzKVxcbjM5ODI6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMzk4MzpcXHRcXG4zOTg0OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBkZXYtXFx1MDAzZWluZm8tXFx1MDAzZXBvcnRfY250OyBpKyspIHtcXG4zOTg1OlxcdFxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZkZXYtXFx1MDAzZXBvcnRzW2ldLm1pYi5zdGF0czY0X2xvY2spO1xcbjM5ODY6XFx0XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2Vwb3J0c1tpXS5taWIuY250X211dGV4KTtcXG4zOTg3OlxcdFxcdFxcdGRldi1cXHUwMDNlcG9ydHNbaV0ubWliLmNvdW50ZXJzID1cXG4zOTg4OlxcdFxcdFxcdFxcdGRldm1fa3phbGxvYyhkZXYtXFx1MDAzZWRldixcXG4zOTg5OlxcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKHU2NCkgKiAoZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VtaWJfY250ICsgMSksXFxuMzk5MDpcXHRcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUwpO1xcbjM5OTE6XFx0XFx0XFx0aWYgKCFkZXYtXFx1MDAzZXBvcnRzW2ldLm1pYi5jb3VudGVycylcXG4zOTkyOlxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjM5OTM6XFx0XFxuMzk5NDpcXHRcXHRcXHRkZXYtXFx1MDAzZXBvcnRzW2ldLmtzel9kZXYgPSBkZXY7XFxuMzk5NTpcXHRcXHRcXHRkZXYtXFx1MDAzZXBvcnRzW2ldLm51bSA9IGk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQwOjUyLjQ5NTEzOTIyMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDUzODM2NzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBga3N6X3N3aXRjaF9yZWdpc3RlcmAgZnVuY3Rpb24gYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nLlxuXG4qKkFuYWx5emluZyB0aGUgYGtzel9zd2l0Y2hfcmVnaXN0ZXJgIEZ1bmN0aW9uJ3MgTmV4dCBTdGVwcyoqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBjb21pbmcgbmV4dCBpbiB0aGlzIGBrc3pfc3dpdGNoX3JlZ2lzdGVyYCBmdW5jdGlvbi4gSSd2ZSBnb3QgbXkgZGVidWdnaW5nIGhhdCBvbiwgYW5kIEknbSByZWFkeSB0byBmb2xsb3cgdGhlIGZsb3cuIEkga25vdyB0aGUgZ2VuZXJhbCBwdXJwb3NlLCBvZiBjb3Vyc2UsIGJ1dCBpdCdzIHRpbWUgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBzcGVjaWZpY3MuIFdoYXQgYXJlIHRoZSBrZXkgb3BlcmF0aW9ucyBiZWluZyBwZXJmb3JtZWQ/IElzIGl0IGhhbmRsaW5nIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uLCBkZXZpY2UgY29uZmlndXJhdGlvbiwgb3IgaW50ZXJydXB0IHNldHVwPyBJJ20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkOyB0aG9zZSB1c3VhbGx5IGhvbGQgdGhlIHNlY3JldHMgdG8gdGhlIGxvZ2ljLiBBbnkgaW50ZXJhY3Rpb24gd2l0aCB0aGUga2VybmVsJ3MgcmVzb3VyY2UgbWFuYWdlbWVudCBzeXN0ZW0gbmVlZHMgY2FyZWZ1bCBzY3J1dGlueSwgcGFydGljdWxhcmx5IHdpdGggdGhlc2Ugc29ydHMgb2YgZGV2aWNlIGRyaXZlcnMuIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMuIFRoZSBlcnJvciBoYW5kbGluZyBpcyBjcml0aWNhbCBhcyB3ZWxsOiBhcmUgdGhlIGVycm9yIGNvZGVzIG1lYW5pbmdmdWw/IEFyZSB0aGVyZSBzdWZmaWNpZW50IHJldHJpZXMgaW4gY2FzZSBvZiB0cmFuc2llbnQgZmFpbHVyZXM/IEknbGwgcHJvYmFibHkgc3RhcnQgYnkgbG9va2luZyBmb3IgYW55IGNhbGxzIHRvIG90aGVyIGZ1bmN0aW9ucyBhbmQgdHJhY2luZyB0aGVtIG91dC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBsb29raW5nIGF0IGFueSBoYXJkd2FyZSBhY2Nlc3MsIG9yIGNhbGxzIHRvIHJlc291cmNlIGFsbG9jYXRpb24gcm91dGluZXMsIHdoaWNoIGNvdWxkIGJlIHRoZSBzb3VyY2Ugb2YgaXNzdWVzLiBJIGFsc28gd2FudCB0byBtYWtlIHN1cmUgdGhlIGRhdGEgc3RydWN0dXJlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEluIHNob3J0LCBsZXQncyBnZXQgZG93biB0byB0aGUgbG93IGxldmVsIGFuZCBzZWUgd2hhdCdzIGJlaW5nIGRvbmUgYW5kIHdoZXRoZXIgaXQncyBkb25lIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExMDksIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQwOjU1LjU0ODk4NjYxM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQ1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzk5NixcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzk5NjpcXHRcXHR9XFxuMzk5NzpcXHRcXG4zOTk4OlxcdFxcdC8qIHNldCB0aGUgcmVhbCBudW1iZXIgb2YgcG9ydHMgKi9cXG4zOTk5OlxcdFxcdGRldi1cXHUwMDNlZHMtXFx1MDAzZW51bV9wb3J0cyA9IGRldi1cXHUwMDNlaW5mby1cXHUwMDNlcG9ydF9jbnQ7XFxuNDAwMDpcXHRcXG40MDAxOlxcdFxcdC8qIHNldCB0aGUgcGh5bGluayBvcHMgKi9cXG40MDAyOlxcdFxcdGRldi1cXHUwMDNlZHMtXFx1MDAzZXBoeWxpbmtfbWFjX29wcyA9IGRldi1cXHUwMDNlaW5mby1cXHUwMDNlcGh5bGlua19tYWNfb3BzO1xcbjQwMDM6XFx0XFxuNDAwNDpcXHRcXHQvKiBIb3N0IHBvcnQgaW50ZXJmYWNlIHdpbGwgYmUgc2VsZiBkZXRlY3RlZCwgb3Igc3BlY2lmaWNhbGx5IHNldCBpblxcbjQwMDU6XFx0XFx0ICogZGV2aWNlIHRyZWUuXFxuNDAwNjpcXHRcXHQgKi9cXG40MDA3OlxcdFxcdGZvciAocG9ydF9udW0gPSAwOyBwb3J0X251bSBcXHUwMDNjIGRldi1cXHUwMDNlaW5mby1cXHUwMDNlcG9ydF9jbnQ7ICsrcG9ydF9udW0pXFxuNDAwODpcXHRcXHRcXHRkZXYtXFx1MDAzZXBvcnRzW3BvcnRfbnVtXS5pbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTkE7XFxuNDAwOTpcXHRcXHRpZiAoZGV2LVxcdTAwM2VkZXYtXFx1MDAzZW9mX25vZGUpIHtcXG40MDEwOlxcdFxcdFxcdHJldCA9IG9mX2dldF9waHlfbW9kZShkZXYtXFx1MDAzZWRldi1cXHUwMDNlb2Zfbm9kZSwgXFx1MDAyNmludGVyZmFjZSk7XFxuNDAxMTpcXHRcXHRcXHRpZiAocmV0ID09IDApXFxuNDAxMjpcXHRcXHRcXHRcXHRkZXYtXFx1MDAzZWNvbXBhdF9pbnRlcmZhY2UgPSBpbnRlcmZhY2U7XFxuNDAxMzpcXHRcXHRcXHRwb3J0cyA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldi1cXHUwMDNlZGV2LVxcdTAwM2VvZl9ub2RlLCBcXFwiZXRoZXJuZXQtcG9ydHNcXFwiKTtcXG40MDE0OlxcdFxcdFxcdGlmICghcG9ydHMpXFxuNDAxNTpcXHRcXHRcXHRcXHRwb3J0cyA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldi1cXHUwMDNlZGV2LVxcdTAwM2VvZl9ub2RlLCBcXFwicG9ydHNcXFwiKTtcXG40MDE2OlxcdFxcdFxcdGlmIChwb3J0cykge1xcbjQwMTc6XFx0XFx0XFx0XFx0Zm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGVfc2NvcGVkKHBvcnRzLCBwb3J0KSB7XFxuNDAxODpcXHRcXHRcXHRcXHRcXHRpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIocG9ydCwgXFxcInJlZ1xcXCIsXFxuNDAxOTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnBvcnRfbnVtKSlcXG40MDIwOlxcdFxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjQwMjE6XFx0XFx0XFx0XFx0XFx0aWYgKCEoZGV2LVxcdTAwM2Vwb3J0X21hc2sgXFx1MDAyNiBCSVQocG9ydF9udW0pKSkge1xcbjQwMjI6XFx0XFx0XFx0XFx0XFx0XFx0b2Zfbm9kZV9wdXQocG9ydHMpO1xcbjQwMjM6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDAyNDpcXHRcXHRcXHRcXHRcXHR9XFxuNDAyNTpcXHRcXHRcXHRcXHRcXHRvZl9nZXRfcGh5X21vZGUocG9ydCxcXG40MDI2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZkZXYtXFx1MDAzZXBvcnRzW3BvcnRfbnVtXS5pbnRlcmZhY2UpO1xcbjQwMjc6XFx0XFxuNDAyODpcXHRcXHRcXHRcXHRcXHRrc3pfcGFyc2VfcmdtaWlfZGVsYXkoZGV2LCBwb3J0X251bSwgcG9ydCk7XFxuNDAyOTpcXHRcXHRcXHRcXHRcXHRkZXYtXFx1MDAzZXBvcnRzW3BvcnRfbnVtXS5maWJlciA9XFxuNDAzMDpcXHRcXHRcXHRcXHRcXHRcXHRvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wocG9ydCxcXG40MDMxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJtaWNyZWwsZmliZXItbW9kZVxcXCIpO1xcbjQwMzI6XFx0XFx0XFx0XFx0fVxcbjQwMzM6XFx0XFx0XFx0XFx0b2Zfbm9kZV9wdXQocG9ydHMpO1xcbjQwMzQ6XFx0XFx0XFx0fVxcbjQwMzU6XFx0XFx0XFx0ZGV2LVxcdTAwM2VzeW5jbGtvXzEyNSA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYtXFx1MDAzZWRldi1cXHUwMDNlb2Zfbm9kZSxcXG40MDM2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBcXFwibWljcm9jaGlwLHN5bmNsa28tMTI1XFxcIik7XFxuNDAzNzpcXHRcXHRcXHRkZXYtXFx1MDAzZXN5bmNsa29fZGlzYWJsZSA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYtXFx1MDAzZWRldi1cXHUwMDNlb2Zfbm9kZSxcXG40MDM4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFxcIm1pY3JvY2hpcCxzeW5jbGtvLWRpc2FibGVcXFwiKTtcXG40MDM5OlxcdFxcdFxcdGlmIChkZXYtXFx1MDAzZXN5bmNsa29fMTI1IFxcdTAwMjZcXHUwMDI2IGRldi1cXHUwMDNlc3luY2xrb19kaXNhYmxlKSB7XFxuNDA0MDpcXHRcXHRcXHRcXHRkZXZfZXJyKGRldi1cXHUwMDNlZGV2LCBcXFwiaW5jb25zaXN0ZW50IHN5bmNsa28gc2V0dGluZ3NcXFxcblxcXCIpO1xcbjQwNDE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDA0MjpcXHRcXHRcXHR9XFxuNDA0MzpcXHRcXG40MDQ0OlxcdFxcdFxcdGRldi1cXHUwMDNld2FrZXVwX3NvdXJjZSA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYtXFx1MDAzZWRldi1cXHUwMDNlb2Zfbm9kZSxcXG40MDQ1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcXCJ3YWtldXAtc291cmNlXFxcIik7XFxuNDA0NjpcXHRcXHRcXHRkZXYtXFx1MDAzZXBtZV9hY3RpdmVfaGlnaCA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYtXFx1MDAzZWRldi1cXHUwMDNlb2Zfbm9kZSxcXG40MDQ3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFxcIm1pY3JvY2hpcCxwbWUtYWN0aXZlLWhpZ2hcXFwiKTtcXG40MDQ4OlxcdFxcdH1cXG40MDQ5OlxcdFxcbjQwNTA6XFx0XFx0cmV0ID0gZHNhX3JlZ2lzdGVyX3N3aXRjaChkZXYtXFx1MDAzZWRzKTtcXG40MDUxOlxcdFxcdGlmIChyZXQpXFxuNDA1MjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjQwNTM6XFx0XFxuNDA1NDpcXHRcXHQvKiBSZWFkIE1JQiBjb3VudGVycyBldmVyeSAzMCBzZWNvbmRzIHRvIGF2b2lkIG92ZXJmbG93LiAqL1xcbjQwNTU6XFx0XFx0ZGV2LVxcdTAwM2VtaWJfcmVhZF9pbnRlcnZhbCA9IG1zZWNzX3RvX2ppZmZpZXMoNTAwMCk7XFxuNDA1NjpcXHRcXG40MDU3OlxcdFxcdC8qIFN0YXJ0IHRoZSBNSUIgdGltZXIuICovXFxuNDA1ODpcXHRcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNmRldi1cXHUwMDNlbWliX3JlYWQsIDApO1xcbjQwNTk6XFx0XFxuNDA2MDpcXHRcXHRyZXR1cm4gcmV0O1xcbjQwNjE6XFx0fVxcbjQwNjI6XFx0RVhQT1JUX1NZTUJPTChrc3pfc3dpdGNoX3JlZ2lzdGVyKTtcXG40MDYzOlxcdFxcbjQwNjQ6XFx0dm9pZCBrc3pfc3dpdGNoX3JlbW92ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbjQwNjU6XFx0e1xcbjQwNjY6XFx0XFx0LyogdGltZXIgc3RhcnRlZCAqL1xcbjQwNjc6XFx0XFx0aWYgKGRldi1cXHUwMDNlbWliX3JlYWRfaW50ZXJ2YWwpIHtcXG40MDY4OlxcdFxcdFxcdGRldi1cXHUwMDNlbWliX3JlYWRfaW50ZXJ2YWwgPSAwO1xcbjQwNjk6XFx0XFx0XFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZkZXYtXFx1MDAzZW1pYl9yZWFkKTtcXG40MDcwOlxcdFxcdH1cXG40MDcxOlxcdFxcbjQwNzI6XFx0XFx0ZHNhX3VucmVnaXN0ZXJfc3dpdGNoKGRldi1cXHUwMDNlZHMpO1xcbjQwNzM6XFx0fVxcbjQwNzQ6XFx0RVhQT1JUX1NZTUJPTChrc3pfc3dpdGNoX3JlbW92ZSk7XFxuNDA3NTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDA6NTUuNTQ5NDczNTgzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzODg1MDIxOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqQW5hbHl6aW5nIGtzelxcX3N3aXRjaFxcX2RldGVjdChkZXYpKipcblxuQWxyaWdodCwgc28gSSdtIHRyYWNpbmcgdGhyb3VnaCB0aGlzIGBrc3pfc3dpdGNoYCBkcml2ZXIsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGNhbGwgdG8gYGtzel9zd2l0Y2hfZGV0ZWN0KGRldilgIGluIGBrc3pfc3dpdGNoX3JlZ2lzdGVyYC4gTm93LCAqdGhhdCogcGlxdWVzIG15IGludGVyZXN0ISBDbGVhcmx5LCB0aGlzIGlzIHdoZXJlIHRoZSBzeXN0ZW0gaXMgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhbiBhY3R1YWwgc3dpdGNoIHByZXNlbnQgYW5kLCBpZiBzbywgd2hhdCBraW5kLiBMZXQncyBkaWcgaW50byB0aGUgYGtzel9zd2l0Y2hfZGV0ZWN0YCBmdW5jdGlvbiBpdHNlbGYgYW5kIHNlZSBob3cgaXQgZ29lcyBhYm91dCBkb2luZyB0aGF0IGRldGVjdGlvbi4gVGhpcyBpcyB0aGUgY3J1eCBvZiB0aGUgaW5pdGlhbGl6YXRpb24sIEkgYmV0LiBJJ20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiBwcm9iZSBzZXF1ZW5jZSwgcmVnaXN0ZXIgcmVhZHMuLi4gbWF5YmUgZXZlbiBzb21lIHZlbmRvci1zcGVjaWZpYyBtYWdpYyB0byBpZGVudGlmeSB0aGUgaGFyZHdhcmUuIExldCdzIHNlZSB3aGF0IHNlY3JldHMgaXQncyBoaWRpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNzY0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MDo1Ny45Mzc5Nzk0NDRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NzA2NDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtzel9zd2l0Y2hfZGV0ZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM9MjkxNj12b2lkIGtzel9waHlsaW5rX21hY19jb25maWcoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0yOTI3LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jOjI5Mjg6c3RhdGljIGludCBrc3pfc3dpdGNoX2RldGVjdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTI5Mjkte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM9MzkxNj1pbnQga3N6X3N3aXRjaF9yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMzk1My1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzozOTU0OlxcdHJldCA9IGtzel9zd2l0Y2hfZGV0ZWN0KGRldik7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMzk1NS1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MDo1Ny45ODY2OTI2OTFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM4MTU3NTE4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRoYXQgZnVuY3Rpb24sIGBrc3pfc3dpdGNoX2RldGVjdGAsIG5lc3RsZWQgd2l0aGluIGBkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uY2AuXG5cbioqRGl2aW5nIERlZXAgaW50byBLU1ogU3dpdGNoIERldGVjdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlzc2VjdCBga3N6X3N3aXRjaF9kZXRlY3RgIGZyb20gYGtzel9jb21tb24uY2AuIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VycyB0aGlzIHJvdXRpbmUsIHRoZSBrZXkgcmVnaXN0ZXJzIGl0J3MgcmVhZGluZyBhbmQgd3JpdGluZywgYW5kIHRoZSBsb2dpYyBiZWhpbmQgaG93IGl0IGRldGVybWluZXMgaWYgYSBNaWNyb2NoaXAgS1NaIHN3aXRjaCBpcyBwcmVzZW50IGFuZCBmdW5jdGlvbmluZyBjb3JyZWN0bHkuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhhcmR3YXJlLXNwZWNpZmljIHF1aXJrcyBvciB3b3JrYXJvdW5kcyBpbiB0aGlzIGxvdy1sZXZlbCBkcml2ZXIuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgcGFydCBvZiBhIGxhcmdlciBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGZyYW1ld29yaywgc28gSSBzaG91bGQgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgaGlnaGVyLWxldmVsIERTQSBjb21wb25lbnRzLiBJJ2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBlcnJvciBoYW5kbGluZyBhbmQgcmV0cnkgbWVjaGFuaXNtcy4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgcG90ZW50aWFsIGNoYWxsZW5nZXMg4oCTIHRoZSBuZWVkIHRvIGhhbmRsZSBkaWZmZXJlbnQgS1NaIHN3aXRjaCByZXZpc2lvbnMsIHZhcmlhdGlvbnMgaW4gUEhZIGNvbmZpZ3VyYXRpb25zLCBhbmQgbWF5YmUgZXZlbiBzb21lIGNsZXZlciByZWdpc3RlciBwcm9iaW5nIHRlY2huaXF1ZXMuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHNvIGxldCdzIHNlZSB3aGF0IHRoZXkndmUgY29tZSB1cCB3aXRoLiBMZXQncyBzZWUgaWYgdGhpcyBjb2RlIGlzIHdlbGwtd3JpdHRlbiwgZWZmaWNpZW50LCBhbmQgcm9idXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzI4NywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQxOjAwLjM2ODI3MTk1M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjkyOCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjkyODpcXHRzdGF0aWMgaW50IGtzel9zd2l0Y2hfZGV0ZWN0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuMjkyOTpcXHR7XFxuMjkzMDpcXHRcXHR1OCBpZDEsIGlkMiwgaWQ0O1xcbjI5MzE6XFx0XFx0dTE2IGlkMTY7XFxuMjkzMjpcXHRcXHR1MzIgaWQzMjtcXG4yOTMzOlxcdFxcdGludCByZXQ7XFxuMjkzNDpcXHRcXG4yOTM1OlxcdFxcdC8qIHJlYWQgY2hpcCBpZCAqL1xcbjI5MzY6XFx0XFx0cmV0ID0ga3N6X3JlYWQxNihkZXYsIFJFR19DSElQX0lEMCwgXFx1MDAyNmlkMTYpO1xcbjI5Mzc6XFx0XFx0aWYgKHJldClcXG4yOTM4OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjkzOTpcXHRcXG4yOTQwOlxcdFxcdGlkMSA9IEZJRUxEX0dFVChTV19GQU1JTFlfSURfTSwgaWQxNik7XFxuMjk0MTpcXHRcXHRpZDIgPSBGSUVMRF9HRVQoU1dfQ0hJUF9JRF9NLCBpZDE2KTtcXG4yOTQyOlxcdFxcbjI5NDM6XFx0XFx0c3dpdGNoIChpZDEpIHtcXG4yOTQ0OlxcdFxcdGNhc2UgS1NaODRfRkFNSUxZX0lEOlxcbjI5NDU6XFx0XFx0XFx0ZGV2LVxcdTAwM2VjaGlwX2lkID0gS1NaODQ2M19DSElQX0lEO1xcbjI5NDY6XFx0XFx0XFx0YnJlYWs7XFxuMjk0NzpcXHRcXHRjYXNlIEtTWjg3X0ZBTUlMWV9JRDpcXG4yOTQ4OlxcdFxcdFxcdGlmIChpZDIgPT0gS1NaODdfQ0hJUF9JRF85NSkge1xcbjI5NDk6XFx0XFx0XFx0XFx0dTggdmFsO1xcbjI5NTA6XFx0XFxuMjk1MTpcXHRcXHRcXHRcXHRkZXYtXFx1MDAzZWNoaXBfaWQgPSBLU1o4Nzk1X0NISVBfSUQ7XFxuMjk1MjpcXHRcXG4yOTUzOlxcdFxcdFxcdFxcdGtzel9yZWFkOChkZXYsIEtTWjhfUE9SVF9TVEFUVVNfMCwgXFx1MDAyNnZhbCk7XFxuMjk1NDpcXHRcXHRcXHRcXHRpZiAodmFsIFxcdTAwMjYgS1NaOF9QT1JUX0ZJQkVSX01PREUpXFxuMjk1NTpcXHRcXHRcXHRcXHRcXHRkZXYtXFx1MDAzZWNoaXBfaWQgPSBLU1o4NzY1X0NISVBfSUQ7XFxuMjk1NjpcXHRcXHRcXHR9IGVsc2UgaWYgKGlkMiA9PSBLU1o4N19DSElQX0lEXzk0KSB7XFxuMjk1NzpcXHRcXHRcXHRcXHRkZXYtXFx1MDAzZWNoaXBfaWQgPSBLU1o4Nzk0X0NISVBfSUQ7XFxuMjk1ODpcXHRcXHRcXHR9IGVsc2Uge1xcbjI5NTk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMjk2MDpcXHRcXHRcXHR9XFxuMjk2MTpcXHRcXHRcXHRicmVhaztcXG4yOTYyOlxcdFxcdGNhc2UgS1NaODhfRkFNSUxZX0lEOlxcbjI5NjM6XFx0XFx0XFx0aWYgKGlkMiA9PSBLU1o4OF9DSElQX0lEXzYzKVxcbjI5NjQ6XFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2VjaGlwX2lkID0gS1NaODhYM19DSElQX0lEO1xcbjI5NjU6XFx0XFx0XFx0ZWxzZVxcbjI5NjY6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMjk2NzpcXHRcXHRcXHRicmVhaztcXG4yOTY4OlxcdFxcdGNhc2UgS1NaODg5NV9GQU1JTFlfSUQ6XFxuMjk2OTpcXHRcXHRcXHRpZiAoaWQyID09IEtTWjg4OTVfQ0hJUF9JRF85NSB8fFxcbjI5NzA6XFx0XFx0XFx0ICAgIGlkMiA9PSBLU1o4ODk1X0NISVBfSURfOTVSKVxcbjI5NzE6XFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2VjaGlwX2lkID0gS1NaODg5NV9DSElQX0lEO1xcbjI5NzI6XFx0XFx0XFx0ZWxzZVxcbjI5NzM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMjk3NDpcXHRcXHRcXHRyZXQgPSBrc3pfcmVhZDgoZGV2LCBSRUdfS1NaODg2NF9DSElQX0lELCBcXHUwMDI2aWQ0KTtcXG4yOTc1OlxcdFxcdFxcdGlmIChyZXQpXFxuMjk3NjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjI5Nzc6XFx0XFx0XFx0aWYgKGlkNCBcXHUwMDI2IFNXX0tTWjg4NjQpXFxuMjk3ODpcXHRcXHRcXHRcXHRkZXYtXFx1MDAzZWNoaXBfaWQgPSBLU1o4ODY0X0NISVBfSUQ7XFxuMjk3OTpcXHRcXHRcXHRicmVhaztcXG4yOTgwOlxcdFxcdGRlZmF1bHQ6XFxuMjk4MTpcXHRcXHRcXHRyZXQgPSBrc3pfcmVhZDMyKGRldiwgUkVHX0NISVBfSUQwLCBcXHUwMDI2aWQzMik7XFxuMjk4MjpcXHRcXHRcXHRpZiAocmV0KVxcbjI5ODM6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4yOTg0OlxcdFxcbjI5ODU6XFx0XFx0XFx0ZGV2LVxcdTAwM2VjaGlwX3JldiA9IEZJRUxEX0dFVChTV19SRVZfSURfTSwgaWQzMik7XFxuMjk4NjpcXHRcXHRcXHRpZDMyIFxcdTAwMjY9IH4weEZGO1xcbjI5ODc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQxOjAwLjM2ODQ1MDUxM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MjUxOTY5Mjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBNaWNyb2NoaXAgS1NaL0xBTiBEU0EgU3dpdGNoIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIGBrc3pfc3dpdGNoX2RldGVjdGAgd2hpY2ggdXNlcyBgcmVnbWFwYCB0byByZWFkIHJlZ2lzdGVycyBvdmVyIEkyQy9TUEkvU01JLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBoYXJkd2FyZSBpbnRlcmFjdGlvbi4gSWYgdGhlcmUncyBubyBhY3R1YWwgS1NaIGhhcmR3YXJlIHByZXNlbnQsIGl0J2xsIGVpdGhlciByZXR1cm4gYSAwLzB4RkYgb3IgZXJyb3Igb3V0LiBUaGlzIGNvbmZpcm1zIGl0J3MgYSBkZWRpY2F0ZWQgZHJpdmVyIGZvciBNaWNyb2NoaXAgS1NaL0xBTiBldGhlcm5ldCBzd2l0Y2hlcyDigJMgS1NaODQ2MywgS1NaODU2MywgS1NaOTQ3NywgS1NaOTU2NywgTEFOOTM3eC5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgUUVNVSBlbXVsYXRlIGFueSBvZiB0aGVzZT8gTm9wZSwgUUVNVSBoYXMgcGxlbnR5IG9mIG5ldHdvcmsgZW11bGF0aW9ucywgYnV0IGl0IGRvZXNuJ3QgdG91Y2ggTWljcm9jaGlwIEtTWiBzd2l0Y2hlcy4gU28sIHdlIGFyZSBub3QgcnVubmluZyB0aGlzIGNvZGUgb24gUUVNVS5cblxuQWxyaWdodCwgdGltZSB0byBjaGVjayB0aGUgV29ydGhGdXp6aW5nIGd1aWRlbGluZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBwYXRjaCBpc24ndCBmYWxsaW5nIGludG8gdGhlIFwidW5mdXp6YWJsZVwiIGNhdGVnb3J5LiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIGNvZGUgaXNuJ3Qgc29tZXRoaW5nIHRoYXQgY2FuIG9ubHkgcnVuIGluIGEgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudC4gVGhlIGd1aWRlbGluZXMgc2F5IGl0IGlzIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIGl0IG1vZGlmaWVzIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXNwZWNpYWxseSBmb3IgaGFyZHdhcmUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUuIFRoaXMgaW5jbHVkZXMgdmVuZG9yLXNwZWNpZmljIHN3aXRjaCBkcml2ZXJzLlxuXG5Ob3csIGxldCdzIGJlIGFic29sdXRlbHkgc3VyZS4gQXJlIHRoZXJlIGFueSBzb2Z0d2FyZSBtb2NrIG9yIGR1bW15IERTQSBkZXZpY2VzIEkgY2FuIHVzZT8gTm8sIERTQSAoRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSkgc3dpdGNoZXMgYXJlIGhhcmR3YXJlIHNwZWNpZmljLCBhbmQsIHNwZWNpZmljYWxseSwgdGhlIGBkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2AgY29kZSBpcyBkZXNpZ25lZCBmb3IgZW1iZWRkZWQgRXRoZXJuZXQgc3dpdGNoIGNoaXBzLCBsaWtlIHRoZSBvbmVzIEkgbWVudGlvbmVkIGJlZm9yZS4gTm8gd2F5IHRvIHJ1biBpdCB3aXRob3V0IHRoZSBwaHlzaWNhbCBBU0lDLlxuXG5Pa2F5LCBsZXQncyByZXZpZXcgdGhlIGZpbGVzIHRoYXQgYXJlIGJlaW5nIHBhdGNoZWQ6IGBkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguY2AsIGBkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuY2AsIGBrc3pfY29tbW9uLmNgLCBga3N6X2NvbW1vbi5oYCwgYGtzel9wdHAuY2AsIGBrc3pfcHRwLmhgLCBga3N6X3B0cF9yZWcuaGAsIGFuZCBgbGFuOTM3eF9tYWluLmNgLiBUaGUgcGF0Y2ggYWRkcyBQVFAgcGVyLW91dCBzdXBwb3J0IGFuZCBwaW4gY2FwYWJpbGl0aWVzIGZvciBLU1o4NDYzIGFuZCBvdGhlciBNaWNyb2NoaXAgc3dpdGNoZXMgaW4gdGhlIERTQSBkcml2ZXIuXG5cbkFsbCB0aGUgbW9kaWZpZWQgY29kZSBpcyB3aXRoaW4gYGRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvYC4gVGhpcyBpcyB1bmRlbmlhYmx5IGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBjb2RlIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgTWljcm9jaGlwIHN3aXRjaCBoYXJkd2FyZSAoS1NaL0xBTiBzZXJpZXMpIGNvbm5lY3RlZCB2aWEgU1BJL0kyQy9TTUkuIFN0YW5kYXJkIFFFTVUvR0NFIGRvZXMgTk9UIGVtdWxhdGUgdGhpcy4gQmVjYXVzZSBvZiB0aGlzLCB0aGUgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXG5cblRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IGBXb3J0aEZ1enppbmdgIGlzIGBmYWxzZWAuXG5cblRoZSBhcmd1bWVudHMgZm9yIGBzZXQtcmVzdWx0c2Agd2lsbCBiZTpcbiogICBgV29ydGhGdXp6aW5nOiBmYWxzZWBcbiogICBgRW5hYmxlQ29uZmlnczogW11gXG4qICAgYEZvY3VzU3ltYm9sczogW11gXG4qICAgYFJlYXNvbmluZzogVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb2NoaXAgS1NaL0xBTiBzZXJpZXMgRFNBIHN3aXRjaCBkcml2ZXIgKHNwZWNpZmljYWxseSBQVFAgc3VwcG9ydCBmb3IgS1NaODQ2MyBhbmQgb3RoZXIgTWljcm9jaGlwIHN3aXRjaCBjaGlwcykuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBwaHlzaWNhbCBNaWNyb2NoaXAgaGFyZHdhcmUgY29ubmVjdGVkIHZpYSBTUEksIEkyQywgb3IgU01JLCB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuIFRodXMsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLmBcblxuTGV0J3MgbWFrZSB0aGF0IHRvb2wgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2MzgsIk91dHB1dFRva2VucyI6MTE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQxOjA3LjYyMDQyMzY4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3JvY2hpcCBLU1ovTEFOIHNlcmllcyBEU0EgRXRoZXJuZXQgc3dpdGNoIGRyaXZlcnMgKHNwZWNpZmljYWxseSBhZGRpbmcgUFRQIHBlcmlvZGljIG91dHB1dCBhbmQgcGluIGNhcGFiaWxpdGllcyBmb3IgS1NaODQ2MyBhbmQgcmVsYXRlZCBzd2l0Y2hlcykuIFRoZXNlIHN3aXRjaCBkcml2ZXJzIG9wZXJhdGUgb3ZlciBTUEksIEkyQywgb3IgU01JIGJ1c2VzIGFuZCByZXF1aXJlIHBoeXNpY2FsIE1pY3JvY2hpcCBzd2l0Y2ggQVNJQ3MgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoc3VjaCBhcyBRRU1VIG9yIEdDRSksIG1ha2luZyB0aGVzZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3JvY2hpcCBLU1ovTEFOIHNlcmllcyBEU0EgRXRoZXJuZXQgc3dpdGNoIGRyaXZlcnMgKHNwZWNpZmljYWxseSBhZGRpbmcgUFRQIHBlcmlvZGljIG91dHB1dCBhbmQgcGluIGNhcGFiaWxpdGllcyBmb3IgS1NaODQ2MyBhbmQgcmVsYXRlZCBzd2l0Y2hlcykuIFRoZXNlIHN3aXRjaCBkcml2ZXJzIG9wZXJhdGUgb3ZlciBTUEksIEkyQywgb3IgU01JIGJ1c2VzIGFuZCByZXF1aXJlIHBoeXNpY2FsIE1pY3JvY2hpcCBzd2l0Y2ggQVNJQ3MgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoc3VjaCBhcyBRRU1VIG9yIEdDRSksIG1ha2luZyB0aGVzZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDE6MDcuNjIwNDU4MjVaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowk2s4v[1] Phase: Running StartedAt: 2026-09-03 04:41:18 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk2s4v[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-03 04:41:18 +0000 UTC FinishedAt: 2026-09-03 04:41:23 +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,}