Name: series-workflow5wrvt Phase: Failed StartedAt: 2026-08-13 03:08:15 +0000 UTC FinishedAt: 2026-08-13 03:26:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wrvt[0] Phase: Succeeded StartedAt: 2026-08-13 03:08:15 +0000 UTC FinishedAt: 2026-08-13 03:25:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wrvt[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 03:08:15 +0000 UTC FinishedAt: 2026-08-13 03:25:51 +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+CgkJCTx0ZD4yMDI2LzA4LzEzIDAzOjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9QRU4gQWxsaWFuY2UgMTBCQVNFLVQxeCBNQUMtUEhZIFNlcmlhbCBJbnRlcmZhY2UgKG9hX3RjNikgZnJhbWV3b3JrLCB3aGljaCBpcyBjdXJyZW50bHkgb25seSB1c2VkIGJ5IHRoZSBNaWNyb2NoaXAgTEFOODY1eCBTUEkgZHJpdmVyLiBTaW5jZSBTUEkgZGV2aWNlcyByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBjYW5ub3QgYmUgZHluYW1pY2FsbHkgaW5zdGFudGlhdGVkIG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMzoyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZiMTJjN2Q4MjhkYWU4YWVkMTg1NDJlZGNlMjM5NjUyYjFkOTM3NGNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwMzoyNDozNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jXG5pbmRleCAwNzI3ZDUzMzQ1YTMzLi42ZTI3ZWQzOWE5OWJkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jXG5AQCAtMTI3LDcgJiM0MzsxMjcsNyBAQCBzdHJ1Y3Qgb2FfdGM2IHtcbiBcdHUxNiBzcGlfZGF0YV90eF9idWZfb2Zmc2V0O1xuIFx0dTE2IHR4X2NyZWRpdHM7XG4gXHR1OCByeF9jaHVua3NfYXZhaWxhYmxlO1xuLVx0Ym9vbCByeF9idWZfb3ZlcmZsb3c7XG4mIzQzO1x0Ym9vbCB3YWl0X3VudGlsX3N0YXJ0X3ZhbGlkO1xuIFx0Ym9vbCBpbnRfZmxhZztcbiBcdGJvb2wgZGlzYWJsZV90cmFmZmljO1xuIH07XG5AQCAtNDIzLDcgJiM0Mzs0MjMsNyBAQCBzdGF0aWMgaW50IG9hX3RjNl9tZGlvYnVzX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWdudW0pXG4ge1xuIFx0c3RydWN0IG9hX3RjNiAqdGM2ID0gYnVzLVx1MDAzZXByaXY7XG4gXHR1MzIgcmVndmFsO1xuLVx0Ym9vbCByZXQ7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdHJldCA9IG9hX3RjNl9yZWFkX3JlZ2lzdGVyKHRjNiwgT0FfVEM2X1BIWV9TVERfUkVHX0FERFJfQkFTRSB8XG4gXHRcdFx0XHQgICAocmVnbnVtIFx1MDAyNiBPQV9UQzZfUEhZX1NURF9SRUdfQUREUl9NQVNLKSxcbkBAIC02NTIsNiAmIzQzOzY1MiwyNiBAQCBzdGF0aWMgaW50IG9hX3RjNl9lbmFibGVfZGF0YV90cmFuc2ZlcihzdHJ1Y3Qgb2FfdGM2ICp0YzYpXG4gXHRyZXR1cm4gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHRjNiwgT0FfVEM2X1JFR19DT05GSUcwLCB2YWx1ZSk7XG4gfVxuIFxuJiM0MzsvKiBDYWxsZWQgd2hlbiBhIGZyYW1lIHRoYXQgaXMgbWVhbnQgdG8gYmUgdHJhbnNtaXR0ZWQsIGlzIGRyb3BwZWQuICovXG4mIzQzO3N0YXRpYyB2b2lkIG9hX3RjNl9kcm9wX3R4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRpZiAoc2tiKSB7XG4mIzQzO1x0XHR0YzYtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuJiM0MztcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqb2FfdGM2X2RldGFjaF93YWl0aW5nX3R4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnRjNi1cdTAwM2V0eF9za2JfbG9jayk7XG4mIzQzO1x0c2tiID0gdGM2LVx1MDAzZXdhaXRpbmdfdHhfc2tiO1xuJiM0MztcdHRjNi1cdTAwM2V3YWl0aW5nX3R4X3NrYiA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdHJldHVybiBza2I7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgb2FfdGM2X2NsZWFudXBfb25nb2luZ19yeF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2KVxuIHtcbiBcdGlmICh0YzYtXHUwMDNlcnhfc2tiKSB7XG5AQCAtNjYzLDI5ICYjNDM7NjgzLDM5IEBAIHN0YXRpYyB2b2lkIG9hX3RjNl9jbGVhbnVwX29uZ29pbmdfcnhfc2tiKHN0cnVjdCBvYV90YzYgKnRjNilcbiBcbiBzdGF0aWMgdm9pZCBvYV90YzZfY2xlYW51cF9vbmdvaW5nX3R4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYpXG4ge1xuLVx0aWYgKHRjNi1cdTAwM2VvbmdvaW5nX3R4X3NrYikge1xuLVx0XHR0YzYtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuLVx0XHRrZnJlZV9za2IodGM2LVx1MDAzZW9uZ29pbmdfdHhfc2tiKTtcbi1cdFx0dGM2LVx1MDAzZW9uZ29pbmdfdHhfc2tiID0gTlVMTDtcbi1cdH1cbiYjNDM7XHRvYV90YzZfZHJvcF90eF9za2IodGM2LCB0YzYtXHUwMDNlb25nb2luZ190eF9za2IpO1xuJiM0MztcdHRjNi1cdTAwM2VvbmdvaW5nX3R4X3NrYiA9IE5VTEw7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG9hX3RjNl9jbGVhbnVwX3dhaXRpbmdfdHhfc2tiKHN0cnVjdCBvYV90YzYgKnRjNilcbiB7XG4tXHRpZiAodGM2LVx1MDAzZXdhaXRpbmdfdHhfc2tiKSB7XG4tXHRcdHRjNi1cdTAwM2VuZXRkZXYtXHUwMDNlc3RhdHMudHhfZHJvcHBlZCYjNDM7JiM0Mzs7XG4tXHRcdGtmcmVlX3NrYih0YzYtXHUwMDNld2FpdGluZ190eF9za2IpO1xuLVx0XHR0YzYtXHUwMDNld2FpdGluZ190eF9za2IgPSBOVUxMO1xuLVx0fVxuJiM0MztcdHN0cnVjdCBza19idWZmICpza2I7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZ0YzYtXHUwMDNldHhfc2tiX2xvY2spO1xuJiM0MztcdHNrYiA9IG9hX3RjNl9kZXRhY2hfd2FpdGluZ190eF9za2IodGM2KTtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZ0YzYtXHUwMDNldHhfc2tiX2xvY2spO1xuJiM0MztcbiYjNDM7XHRvYV90YzZfZHJvcF90eF9za2IodGM2LCBza2IpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBvYV90YzZfZnJlZV9wZW5kaW5nX3NrYnMoc3RydWN0IG9hX3RjNiAqdGM2KVxuJiM0MztzdGF0aWMgdm9pZCBvYV90YzZfZnJlZV9vbmdvaW5nX3NrYnMoc3RydWN0IG9hX3RjNiAqdGM2KVxuIHtcbiBcdG9hX3RjNl9jbGVhbnVwX29uZ29pbmdfdHhfc2tiKHRjNik7XG4gXHRvYV90YzZfY2xlYW51cF9vbmdvaW5nX3J4X3NrYih0YzYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBvYV90YzZfZnJlZV9wZW5kaW5nX3NrYnMoc3RydWN0IG9hX3RjNiAqdGM2KVxuJiM0Mzt7XG4mIzQzO1x0b2FfdGM2X2ZyZWVfb25nb2luZ19za2JzKHRjNik7XG4gXHRvYV90YzZfY2xlYW51cF93YWl0aW5nX3R4X3NrYih0YzYpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgb2FfdGM2X2xvb2tfZm9yX25ld19mcmFtZShzdHJ1Y3Qgb2FfdGM2ICp0YzYpXG4mIzQzO3tcbiYjNDM7XHR0YzYtXHUwMDNld2FpdF91bnRpbF9zdGFydF92YWxpZCA9IHRydWU7XG4mIzQzO1x0b2FfdGM2X2NsZWFudXBfb25nb2luZ19yeF9za2IodGM2KTtcbiYjNDM7fVxuJiM0MztcbiAvKiBJZiB0aGUgZmFpbHVyZSBpcyBhdCBTUEkgaW50ZXJmYWNlIGxldmVsLCBtYXNraW5nIGFuZCBjbGVhcmluZ1xuICAqIHRoZSBpbnRlcnJ1cHQgb2YgdGhlIGRldmljZSB3b24mIzM5O3Qgd29yay4gU2luY2UgU1BJIGludGVycnVwdCBpc1xuICAqIGRpc2FibGVkLCBpdCBzaG91bGQgc3RvcCB0aGUgcmVwZWF0ZWQgaW50ZXJydXB0cy5cbkBAIC02OTMsOSAmIzQzOzcyMywyMSBAQCBzdGF0aWMgdm9pZCBvYV90YzZfZnJlZV9wZW5kaW5nX3NrYnMoc3RydWN0IG9hX3RjNiAqdGM2KVxuIHN0YXRpYyB2b2lkIG9hX3RjNl9kaXNhYmxlX3RyYWZmaWMoc3RydWN0IG9hX3RjNiAqdGM2KVxuIHtcbiBcdHUzMiByZWd2YWwgPSBJTlRfTUFTSzBfQUxMX0lOVEVSUlVQVFM7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2dGM2LVx1MDAzZXR4X3NrYl9sb2NrKTtcbiBcdHRjNi1cdTAwM2VkaXNhYmxlX3RyYWZmaWMgPSB0cnVlO1xuLVx0b2FfdGM2X2ZyZWVfcGVuZGluZ19za2JzKHRjNik7XG4mIzQzO1x0c2tiID0gb2FfdGM2X2RldGFjaF93YWl0aW5nX3R4X3NrYih0YzYpO1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRjNi1cdTAwM2V0eF9za2JfbG9jayk7XG4mIzQzO1xuJiM0MztcdC8qIGRpc2FibGVfdHJhZmZpYywgd2hlbiBzZXQsIGlzIGEgcG9pbnQgb2Ygbm8gcmV0dXJuIHRvIHdvcmtpbmdcbiYjNDM7XHQgKiBzdGF0ZS4gVFggcXVldWVzIGFyZSBkaXNhYmxlZC4gSW4gc29tZSBjYXNlcywgdXBwZXIgbGF5ZXIgb3JcbiYjNDM7XHQgKiB2ZW5kb3IgY29kZSBtYXkgaW5hZHZlcnRlbnRseSBlbmFibGUgdGhlIHF1ZXVlLiBJbnRlbnRpb24gb2ZcbiYjNDM7XHQgKiB0aGUgZGlzYWJsZV90cmFmZmljIGZsYWcgaXMgdG8gc3RvcCB0cmFmZmljIGZyb20gZmxvd2luZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRuZXRpZl90eF9kaXNhYmxlKHRjNi1cdTAwM2VuZXRkZXYpO1xuJiM0MztcdG9hX3RjNl9kcm9wX3R4X3NrYih0YzYsIHNrYik7XG4mIzQzO1x0b2FfdGM2X2ZyZWVfb25nb2luZ19za2JzKHRjNik7XG4gXHRvYV90YzZfd3JpdGVfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUkVHX0lOVF9NQVNLMCwgcmVndmFsKTtcbiBcdG9hX3RjNl9yZWFkX3JlZ2lzdGVyKHRjNiwgT0FfVEM2X1JFR19TVEFUVVMwLCBcdTAwMjZyZWd2YWwpO1xuIFx0b2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHRjNiwgT0FfVEM2X1JFR19TVEFUVVMwLCByZWd2YWwpO1xuQEAgLTcxNCw2ICYjNDM7NzU2LDEzIEBAIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3NfZXh0ZW5kZWRfc3RhdHVzKHN0cnVjdCBvYV90YzYgKnRjNilcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbiYjNDM7XHQvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgZWFjaCBjaHVuayByZWNlaXZlZCBpbiBhIGdpdmVuIFNQSVxuJiM0MztcdCAqIHRyYW5zYWN0aW9uLiBJbiBjYXNlLCBleHRlbmRlZCBzdGF0dXMgYml0IGlzIHNldCBpbiBtb3JlIHRoYW5cbiYjNDM7XHQgKiBvbmUgY2h1bmssIHNraXAgdGhlIHdyaXRlLCBpZiBzdGF0dXMwIGlzIGFscmVhZHkgY2xlYXJlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXZhbHVlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuIFx0LyogQ2xlYXIgdGhlIGVycm9yIGludGVycnVwdHMgc3RhdHVzICovXG4gXHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUkVHX1NUQVRVUzAsIHZhbHVlKTtcbiBcdGlmIChyZXQpIHtcbkBAIC03MjMsOCAmIzQzOzc3Miw3IEBAIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3NfZXh0ZW5kZWRfc3RhdHVzKHN0cnVjdCBvYV90YzYgKnRjNilcbiBcdH1cbiBcbiBcdGlmIChGSUVMRF9HRVQoU1RBVFVTMF9SWF9CVUZGRVJfT1ZFUkZMT1dfRVJST1IsIHZhbHVlKSkge1xuLVx0XHR0YzYtXHUwMDNlcnhfYnVmX292ZXJmbG93ID0gdHJ1ZTtcbi1cdFx0b2FfdGM2X2NsZWFudXBfb25nb2luZ19yeF9za2IodGM2KTtcbiYjNDM7XHRcdG9hX3RjNl9sb29rX2Zvcl9uZXdfZnJhbWUodGM2KTtcbiBcdFx0bmV0X2Vycl9yYXRlbGltaXRlZChcJiMzNDslczogUmVjZWl2ZSBidWZmZXIgb3ZlcmZsb3cgZXJyb3JcXG5cJiMzNDssXG4gXHRcdFx0XHQgICAgdGM2LVx1MDAzZW5ldGRldi1cdTAwM2VuYW1lKTtcbiBcdFx0cmV0dXJuIC1FQUdBSU47XG5AQCAtNzUwLDYgJiM0Mzs3OTgsOCBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcm9jZXNzX2V4dGVuZGVkX3N0YXR1cyhzdHJ1Y3Qgb2FfdGM2ICp0YzYpXG4gXG4gc3RhdGljIGludCBvYV90YzZfcHJvY2Vzc19yeF9jaHVua19mb290ZXIoc3RydWN0IG9hX3RjNiAqdGM2LCB1MzIgZm9vdGVyKVxuIHtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4gXHQvKiBQcm9jZXNzIHJ4IGNodW5rIGZvb3RlciBmb3IgdGhlIGZvbGxvd2luZyxcbiBcdCAqIDEuIHR4IGNyZWRpdHNcbiBcdCAqIDIuIGVycm9ycyBpZiBhbnkgZnJvbSBNQUMtUEhZXG5AQCAtNzYwLDkgJiM0Mzs4MTAsMTEgQEAgc3RhdGljIGludCBvYV90YzZfcHJvY2Vzc19yeF9jaHVua19mb290ZXIoc3RydWN0IG9hX3RjNiAqdGM2LCB1MzIgZm9vdGVyKVxuIFx0XHRcdFx0XHQgICAgIGZvb3Rlcik7XG4gXG4gXHRpZiAoRklFTERfR0VUKE9BX1RDNl9EQVRBX0ZPT1RFUl9FWFRFTkRFRF9TVFMsIGZvb3RlcikpIHtcbi1cdFx0aW50IHJldCA9IG9hX3RjNl9wcm9jZXNzX2V4dGVuZGVkX3N0YXR1cyh0YzYpO1xuLVxuLVx0XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0ID0gb2FfdGM2X3Byb2Nlc3NfZXh0ZW5kZWRfc3RhdHVzKHRjNik7XG4mIzQzO1x0XHQvKiBFQUdBSU4gZXJyb3IgaXMgcmVjb3ZlcmFibGUuIE1vdmUgb24gdG8gY2hlY2tcbiYjNDM7XHRcdCAqIEhFQURFUiBhbmQgU1lOQyBlcnJvcnMgYmVmb3JlIHJldHVybmluZy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FQUdBSU4pXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbkBAIC03ODAsNyAmIzQzOzgzMiw3IEBAIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3NfcnhfY2h1bmtfZm9vdGVyKHN0cnVjdCBvYV90YzYgKnRjNiwgdTMyIGZvb3RlcilcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHR9XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBvYV90YzZfc3VibWl0X3J4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYpXG5AQCAtODA1LDEzICYjNDM7ODU3LDM1IEBAIHN0YXRpYyB2b2lkIG9hX3RjNl9zdWJtaXRfcnhfc2tiKHN0cnVjdCBvYV90YzYgKnRjNilcbiBcdHRjNi1cdTAwM2VyeF9za2IgPSBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBvYV90YzZfdXBkYXRlX3J4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpwYXlsb2FkLCB1OCBsZW5ndGgpXG4mIzQzOy8qIE9uIG92ZXJzdWJzY3JpYmVkIHRyYWZmaWMgY29uZGl0aW9uLCBwYXJ0aWN1bGFybHkgd2l0aCBvdmVyd2hlbG1pbmcgcnhcbiYjNDM7ICogYnVmZmVyIG92ZXJmbG93IGVycm9ycywgdGhlcmUgY291bGQgYmUgZGF0YSBjaHVuayBsb3NzLiBJZiB0YWlsICYjNDM7IGxlbmd0aFxuJiM0MzsgKiBnb2VzIGJleW9uZCBlbmQgcG9pbnRlciwgdGhhdCBpcyBhbiBpbmRpY2F0aW9uIHRoYXQgdGhlIGRhdGEgY2h1bmsgd2l0aFxuJiM0MzsgKiBlbmRfdmFsaWQgYml0IGlzIGxvc3QuIFRpbWUgdG8gbG9vayBmb3IgYSBkYXRhIGNodW5rIHdpdGggc3RhcnRfdmFsaWQgYml0LlxuJiM0MzsgKlxuJiM0MzsgKiBJZiByeF9za2IgaXMgTlVMTCwgaXQgaXMgdGltZSB0byBzdGFydCBsb29raW5nIGZvciBkYXRhIGNodW5rIHdpdGhcbiYjNDM7ICogc3RhcnRfYml0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBvYV90YzZfdXBkYXRlX3J4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpwYXlsb2FkLCB1OCBsZW5ndGgpXG4ge1xuJiM0MztcdGlmICghdGM2LVx1MDAzZXJ4X3NrYiB8fFxuJiM0MztcdCAgICBza2JfdGFpbHJvb20odGM2LVx1MDAzZXJ4X3NrYikgXHUwMDNjIGxlbmd0aCkge1xuJiM0MztcdFx0b2FfdGM2X2xvb2tfZm9yX25ld19mcmFtZSh0YzYpO1xuJiM0MztcdFx0cmV0dXJuIC1FQUdBSU47XG4mIzQzO1x0fVxuJiM0MztcbiBcdG1lbWNweShza2JfcHV0KHRjNi1cdTAwM2VyeF9za2IsIGxlbmd0aCksIHBheWxvYWQsIGxlbmd0aCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKiBPbiBvdmVyd2hlbG1pbmcgcnggYnVmZmVyIG92ZXJmbG93IGVycm9ycywgZHVlIHRvIGRhdGEgY2h1bmsgbG9zcywgaXQgaXNcbiYjNDM7ICogcG9zc2libGUgdGhhdCB3ZSBnZXQgdHdvIGRhdGEgY2h1bmtzIHdpdGggc3RhcnRfdmFsaWQgYml0IHNldCwgd2l0aG91dFxuJiM0MzsgKiBlbmRfdmFsaWQgYml0IHNldCBpbiBiZXR3ZWVuLiBJbiB0aGlzIGNhc2UsIHJ4X3NrYiB3b3VsZCBoYXZlIGEgdmFsaWRcbiYjNDM7ICogYnVmZmVyIHBvaW50ZXIuIFdlIHNob3VsZCByZWxlYXNlLCBpZiBhIHZhbGlkIHBvaW50ZXIgaXMgZm91bmQgYmVmb3JlXG4mIzQzOyAqIGFsbG9jYXRpbmcgYSBuZXcgb25lLlxuJiM0MzsgKi9cbiBzdGF0aWMgaW50IG9hX3RjNl9hbGxvY2F0ZV9yeF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2KVxuIHtcbiYjNDM7XHRvYV90YzZfY2xlYW51cF9vbmdvaW5nX3J4X3NrYih0YzYpO1xuIFx0dGM2LVx1MDAzZXJ4X3NrYiA9IG5ldGRldl9hbGxvY19za2JfaXBfYWxpZ24odGM2LVx1MDAzZW5ldGRldiwgdGM2LVx1MDAzZW5ldGRldi1cdTAwM2VtdHUgJiM0MztcbiBcdFx0XHRcdFx0XHRFVEhfSExFTiAmIzQzOyBFVEhfRkNTX0xFTik7XG4gXHRpZiAoIXRjNi1cdTAwM2VyeF9za2IpIHtcbkBAIC04MzEsNyAmIzQzOzkwNSw5IEBAIHN0YXRpYyBpbnQgb2FfdGM2X3ByY3NfY29tcGxldGVfcnhfZnJhbWUoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqcGF5bG9hZCxcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRvYV90YzZfdXBkYXRlX3J4X3NrYih0YzYsIHBheWxvYWQsIHNpemUpO1xuJiM0MztcdHJldCA9IG9hX3RjNl91cGRhdGVfcnhfc2tiKHRjNiwgcGF5bG9hZCwgc2l6ZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXG4gXHRvYV90YzZfc3VibWl0X3J4X3NrYih0YzYpO1xuIFxuQEAgLTg0NiwyMiAmIzQzOzkyMiwyNCBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcmNzX3J4X2ZyYW1lX3N0YXJ0KHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKnBheWxvYWQsIHUxNiBzaXplKVxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdG9hX3RjNl91cGRhdGVfcnhfc2tiKHRjNiwgcGF5bG9hZCwgc2l6ZSk7XG4tXG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gb2FfdGM2X3VwZGF0ZV9yeF9za2IodGM2LCBwYXlsb2FkLCBzaXplKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgb2FfdGM2X3ByY3NfcnhfZnJhbWVfZW5kKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKnBheWxvYWQsIHUxNiBzaXplKVxuJiM0MztzdGF0aWMgaW50IG9hX3RjNl9wcmNzX3J4X2ZyYW1lX2VuZChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpwYXlsb2FkLCB1MTYgc2l6ZSlcbiB7XG4tXHRvYV90YzZfdXBkYXRlX3J4X3NrYih0YzYsIHBheWxvYWQsIHNpemUpO1xuJiM0MztcdGludCByZXQ7XG4gXG4tXHRvYV90YzZfc3VibWl0X3J4X3NrYih0YzYpO1xuJiM0MztcdHJldCA9IG9hX3RjNl91cGRhdGVfcnhfc2tiKHRjNiwgcGF5bG9hZCwgc2l6ZSk7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHRvYV90YzZfc3VibWl0X3J4X3NrYih0YzYpO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG9hX3RjNl9wcmNzX29uZ29pbmdfcnhfZnJhbWUoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqcGF5bG9hZCxcbi1cdFx0XHRcdFx0IHUzMiBmb290ZXIpXG4mIzQzO3N0YXRpYyBpbnQgb2FfdGM2X3ByY3Nfb25nb2luZ19yeF9mcmFtZShzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpwYXlsb2FkLFxuJiM0MztcdFx0XHRcdFx0dTMyIGZvb3RlcilcbiB7XG4tXHRvYV90YzZfdXBkYXRlX3J4X3NrYih0YzYsIHBheWxvYWQsIE9BX1RDNl9DSFVOS19QQVlMT0FEX1NJWkUpO1xuJiM0MztcdHJldHVybiBvYV90YzZfdXBkYXRlX3J4X3NrYih0YzYsIHBheWxvYWQsXG4mIzQzO1x0XHRcdFx0ICAgIE9BX1RDNl9DSFVOS19QQVlMT0FEX1NJWkUpO1xuIH1cbiBcbiBzdGF0aWMgaW50IG9hX3RjNl9wcmNzX3J4X2NodW5rX3BheWxvYWQoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqZGF0YSxcbkBAIC04NzYsMTAgJiM0Mzs5NTQsMTAgQEAgc3RhdGljIGludCBvYV90YzZfcHJjc19yeF9jaHVua19wYXlsb2FkKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKmRhdGEsXG4gXHR1MTYgc2l6ZTtcbiBcbiBcdC8qIFJlc3RhcnQgdGhlIG5ldyByeCBmcmFtZSBhZnRlciByZWNlaXZpbmcgcnggYnVmZmVyIG92ZXJmbG93IGVycm9yICovXG4tXHRpZiAoc3RhcnRfdmFsaWQgXHUwMDI2XHUwMDI2IHRjNi1cdTAwM2VyeF9idWZfb3ZlcmZsb3cpXG4tXHRcdHRjNi1cdTAwM2VyeF9idWZfb3ZlcmZsb3cgPSBmYWxzZTtcbiYjNDM7XHRpZiAoc3RhcnRfdmFsaWQgXHUwMDI2XHUwMDI2IHRjNi1cdTAwM2V3YWl0X3VudGlsX3N0YXJ0X3ZhbGlkKVxuJiM0MztcdFx0dGM2LVx1MDAzZXdhaXRfdW50aWxfc3RhcnRfdmFsaWQgPSBmYWxzZTtcbiBcbi1cdGlmICh0YzYtXHUwMDNlcnhfYnVmX292ZXJmbG93KVxuJiM0MztcdGlmICh0YzYtXHUwMDNld2FpdF91bnRpbF9zdGFydF92YWxpZClcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHQvKiBQcm9jZXNzIHRoZSBjaHVuayB3aXRoIGNvbXBsZXRlIHJ4IGZyYW1lICovXG5AQCAtOTAxLDggJiM0Mzs5NzksNyBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcmNzX3J4X2NodW5rX3BheWxvYWQoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqZGF0YSxcbiBcdC8qIFByb2Nlc3MgdGhlIGNodW5rIHdpdGggb25seSByeCBmcmFtZSBlbmQgKi9cbiBcdGlmIChlbmRfdmFsaWQgXHUwMDI2XHUwMDI2ICFzdGFydF92YWxpZCkge1xuIFx0XHRzaXplID0gZW5kX2J5dGVfb2Zmc2V0ICYjNDM7IDE7XG4tXHRcdG9hX3RjNl9wcmNzX3J4X2ZyYW1lX2VuZCh0YzYsIGRhdGEsIHNpemUpO1xuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdHJldHVybiBvYV90YzZfcHJjc19yeF9mcmFtZV9lbmQodGM2LCBkYXRhLCBzaXplKTtcbiBcdH1cbiBcbiBcdC8qIFByb2Nlc3MgdGhlIGNodW5rIHdpdGggcHJldmlvdXMgcnggZnJhbWUgZW5kIGFuZCBuZXh0IHJ4IGZyYW1lXG5AQCAtOTE2LDYgJiM0Mzs5OTMsMTUgQEAgc3RhdGljIGludCBvYV90YzZfcHJjc19yeF9jaHVua19wYXlsb2FkKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKmRhdGEsXG4gXHRcdGlmICh0YzYtXHUwMDNlcnhfc2tiKSB7XG4gXHRcdFx0c2l6ZSA9IGVuZF9ieXRlX29mZnNldCAmIzQzOyAxO1xuIFx0XHRcdG9hX3RjNl9wcmNzX3J4X2ZyYW1lX2VuZCh0YzYsIGRhdGEsIHNpemUpO1xuJiM0MztcbiYjNDM7XHRcdFx0LyogUmV0dXJuIHZhbHVlIGZyb20gb2FfdGM2X3ByY3NfcnhfZnJhbWVfZW5kIGlzIG5vdFxuJiM0MztcdFx0XHQgKiBjaGVja2VkLiBJZiBpdCByZXR1cm5lZCBhbiBlcnJvciwgaXQgaXMgdG8gbWFrZVxuJiM0MztcdFx0XHQgKiB0aGUgY29kZSB0byBsb29rIGZvciBuZXcgZnJhbWUuIEF0IHRoaXMgc3RhZ2UsXG4mIzQzO1x0XHRcdCAqIGNvZGUgYmVsb3cgaXMgZ29pbmcgdG8gcHJvY2VzcyBhIG5ldyBmcmFtZS4gU28sXG4mIzQzO1x0XHRcdCAqIGVycm9yIGNvbmRpdGlvbiBpcyBzZXQgdG8gZmFsc2UsIGluIGNhc2UgaXQgaXNcbiYjNDM7XHRcdFx0ICogc2V0IGJlZm9yZSBwcm9jZWVkaW5nLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0dGM2LVx1MDAzZXdhaXRfdW50aWxfc3RhcnRfdmFsaWQgPSBmYWxzZTtcbiBcdFx0fVxuIFx0XHRzaXplID0gT0FfVEM2X0NIVU5LX1BBWUxPQURfU0laRSAtIHN0YXJ0X2J5dGVfb2Zmc2V0O1xuIFx0XHRyZXR1cm4gb2FfdGM2X3ByY3NfcnhfZnJhbWVfc3RhcnQodGM2LFxuQEAgLTkyNCw5ICYjNDM7MTAxMCw3IEBAIHN0YXRpYyBpbnQgb2FfdGM2X3ByY3NfcnhfY2h1bmtfcGF5bG9hZChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpkYXRhLFxuIFx0fVxuIFxuIFx0LyogUHJvY2VzcyB0aGUgY2h1bmsgd2l0aCBvbmdvaW5nIHJ4IGZyYW1lIGRhdGEgKi9cbi1cdG9hX3RjNl9wcmNzX29uZ29pbmdfcnhfZnJhbWUodGM2LCBkYXRhLCBmb290ZXIpO1xuLVxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIG9hX3RjNl9wcmNzX29uZ29pbmdfcnhfZnJhbWUodGM2LCBkYXRhLCBmb290ZXIpO1xuIH1cbiBcbiBzdGF0aWMgdTMyIG9hX3RjNl9nZXRfcnhfY2h1bmtfZm9vdGVyKHN0cnVjdCBvYV90YzYgKnRjNiwgdTE2IGZvb3Rlcl9vZmZzZXQpXG5AQCAtOTQyLDggJiM0MzsxMDI2LDkgQEAgc3RhdGljIHUzMiBvYV90YzZfZ2V0X3J4X2NodW5rX2Zvb3RlcihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUxNiBmb290ZXJfb2Zmc2V0KVxuIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3Nfc3BpX2RhdGFfcnhfYnVmKHN0cnVjdCBvYV90YzYgKnRjNiwgdTE2IGxlbmd0aClcbiB7XG4gXHR1MTYgbm9fb2ZfcnhfY2h1bmtzID0gbGVuZ3RoIC8gT0FfVEM2X0NIVU5LX1NJWkU7XG4mIzQzO1x0Ym9vbCByZXRyeSA9IGZhbHNlO1xuJiM0MztcdGludCByZXQgPSAwO1xuIFx0dTMyIGZvb3Rlcjtcbi1cdGludCByZXQ7XG4gXG4gXHQvKiBBbGwgdGhlIHJ4IGNodW5rcyBpbiB0aGUgcmVjZWl2ZSBTUEkgZGF0YSBidWZmZXIgYXJlIGV4YW1pbmVkIGhlcmUgKi9cbiBcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBub19vZl9yeF9jaHVua3M7IGkmIzQzOyYjNDM7KSB7XG5AQCAtOTUyLDggJiM0MzsxMDM3LDExIEBAIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3Nfc3BpX2RhdGFfcnhfYnVmKHN0cnVjdCBvYV90YzYgKnRjNiwgdTE2IGxlbmd0aClcbiBcdFx0XHRcdFx0XHQgICAgT0FfVEM2X0NIVU5LX1BBWUxPQURfU0laRSk7XG4gXG4gXHRcdHJldCA9IG9hX3RjNl9wcm9jZXNzX3J4X2NodW5rX2Zvb3Rlcih0YzYsIGZvb3Rlcik7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0aWYgKHJldCAhPSAtRUFHQUlOKVxuJiM0MztcdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRcdHJldHJ5ID0gdHJ1ZTtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0LyogSWYgdGhlcmUgaXMgYSBkYXRhIHZhbGlkIGNodW5rcyB0aGVuIHByb2Nlc3MgaXQgZm9yIHRoZVxuIFx0XHQgKiBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gZGV0ZXJtaW5lIHRoZSB2YWxpZGl0eSBhbmQgdGhlIGxvY2F0aW9uXG5AQCAtOTY1LDEyICYjNDM7MTA1MywzNSBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcm9jZXNzX3NwaV9kYXRhX3J4X2J1ZihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUxNiBsZW5ndGgpXG4gXG4gXHRcdFx0cmV0ID0gb2FfdGM2X3ByY3NfcnhfY2h1bmtfcGF5bG9hZCh0YzYsIHBheWxvYWQsXG4gXHRcdFx0XHRcdFx0XHQgICBmb290ZXIpO1xuLVx0XHRcdGlmIChyZXQpXG4tXHRcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdFx0aWYgKHJldCAhPSAtRU5PTUVNIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVBR0FJTilcbiYjNDM7XHRcdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRcdFx0cmV0cnkgPSB0cnVlO1xuJiM0MztcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbiBcbi1cdHJldHVybiAwO1xuJiM0MztcdC8qIE5vdCBiYWlsaW5nIG91dCBvbiByZWNvdmVyYWJsZSBlcnJvciBjb2RlcywgLUVBR0FJTiBhbmRcbiYjNDM7XHQgKiAtRU5PTUVNLiBJZiBzdWJzZXF1ZW50IGxvb3AgaXRlcmF0aW9ucywgaWYgYW55LCBzdWNjZWVkcyxcbiYjNDM7XHQgKiBlcnJvciBjb2RlIHdvdWxkIGJlIG92ZXJ3cml0dGVuLiByZXRyeSBmbGFnIGhlbHBzIHRvXG4mIzQzO1x0ICogbWFrZSB0aGUgY2FsbGVyIHRvIGNvbnRpbnVlIGFuZCByZXRyeS4gU2luY2UgcmVjb3ZlcnlcbiYjNDM7XHQgKiBhY3Rpb24gZm9yIC1FTk9NRU0gYW5kIC1FQUdBSU4gYXJlIHNhbWUsIHdlIGFyZSByZXR1cm5pbmdcbiYjNDM7XHQgKiBvbmUgb2YgdGhlIGVycm9yIGNvZGVzLCB0aGF0IGlzIC1FQUdBSU4uXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBTdWNjZXNzZnVsIHJlY292ZXJ5IGRlcGVuZHMgb24gaG93IHNtYWxsIHRoZSBmcmFtZXMgYXJlLFxuJiM0MztcdCAqIGhvdyBtYW55IGNodW5rcywgYW1vbmcgdGhlIHJlY2VpdmVkIGNodW5rcyB0cmlnZ2VyZWQgdGhlXG4mIzQzO1x0ICogZXJyb3IsIHdoZXRoZXIgZGF0YSBpcyBpbnRhY3QgZXZlbiB3aXRoIGVycm9yIGNvbmRpdGlvbnMuXG4mIzQzO1x0ICogQXMgYSByZXN1bHQsIHRoZXJlIGlzIG5vIHNpbmdsZSwgYmVzdCBtZXRob2QgdG8gcmVjb3ZlclxuJiM0MztcdCAqIG1vc3QgZGF0YSB3aGVuIGVycm9yIGNvbmRpdGlvbnMgaGl0LiBXZSBkbyBvdXIgYmVzdCBieVxuJiM0MztcdCAqIHByb2Nlc3NpbmcgYWxsIHRoZSBjaHVua3Mgd2l0aCBnb29kIFwmIzM0O2Zvb3RlciBoZWFkZXJcJiMzNDsgYW5kXG4mIzQzO1x0ICogXCYjMzQ7ZGF0YSB2YWxpZFwmIzM0OyBiaXQgc2V0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyZXRyeSkge1xuJiM0MztcdFx0cmV0ID0gLUVBR0FJTjtcbiYjNDM7XHRcdG9hX3RjNl9sb29rX2Zvcl9uZXdfZnJhbWUodGM2KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBfX2JlMzIgb2FfdGM2X3ByZXBhcmVfZGF0YV9oZWFkZXIoYm9vbCBkYXRhX3ZhbGlkLCBib29sIHN0YXJ0X3ZhbGlkLFxuQEAgLTExMzIsMTIgJiM0MzsxMjQzLDkgQEAgc3RhdGljIGludCBvYV90YzZfdHJ5X3NwaV90cmFuc2ZlcihzdHJ1Y3Qgb2FfdGM2ICp0YzYpXG4gXHRcdH1cbiBcbiBcdFx0cmV0ID0gb2FfdGM2X3Byb2Nlc3Nfc3BpX2RhdGFfcnhfYnVmKHRjNiwgc3BpX2xlbik7XG4tXHRcdGlmIChyZXQpIHtcbi1cdFx0XHRpZiAocmV0ID09IC1FQUdBSU4pXG4tXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRvYV90YzZfY2xlYW51cF9vbmdvaW5nX3R4X3NrYih0YzYpO1xuLVx0XHRcdG9hX3RjNl9jbGVhbnVwX29uZ29pbmdfcnhfc2tiKHRjNik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVBR0FJTikge1xuJiM0MztcdFx0XHRvYV90YzZfZnJlZV9vbmdvaW5nX3NrYnModGM2KTtcbiBcdFx0XHRuZXRkZXZfZXJyKHRjNi1cdTAwM2VuZXRkZXYsIFwmIzM0O0RldmljZSBlcnJvcjogJWRcXG5cJiMzNDssIHJldCk7XG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0fVxuQEAgLTExNTksMTUgJiM0MzsxMjY3LDIwIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBvYV90YzZfbWFjcGh5X3RocmVhZGVkX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKVxuIFx0ICogbm8gbmVlZCB0byBhdHRlbXB0IHNwaSB0cmFuc2Zlciwgb25jZSBpdCBmYWlscy4gUGVuZGluZyBza2JzXG4gXHQgKiBhcmUgYWxyZWFkeSBmcmVlZC5cbiBcdCAqL1xuLVx0aWYgKCF0YzYtXHUwMDNlZGlzYWJsZV90cmFmZmljKSB7XG4tXHRcdHdoaWxlICh0YzYtXHUwMDNlaW50X2ZsYWcgfHxcbi1cdFx0ICAgICAgICh0YzYtXHUwMDNld2FpdGluZ190eF9za2IgXHUwMDI2XHUwMDI2IHRjNi1cdTAwM2V0eF9jcmVkaXRzKSkge1xuLVx0XHRcdHJldCA9IG9hX3RjNl90cnlfc3BpX3RyYW5zZmVyKHRjNik7XG4tXHRcdFx0aWYgKHJldCkge1xuLVx0XHRcdFx0ZGlzYWJsZV9pcnFfbm9zeW5jKHRjNi1cdTAwM2VzcGktXHUwMDNlaXJxKTtcbi1cdFx0XHRcdG9hX3RjNl9kaXNhYmxlX3RyYWZmaWModGM2KTtcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2dGM2LVx1MDAzZXR4X3NrYl9sb2NrKTtcbiYjNDM7XHRpZiAodGM2LVx1MDAzZWRpc2FibGVfdHJhZmZpYykge1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGM2LVx1MDAzZXR4X3NrYl9sb2NrKTtcbiYjNDM7XHRcdHJldHVybiBJUlFfSEFORExFRDtcbiYjNDM7XHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGM2LVx1MDAzZXR4X3NrYl9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKHRjNi1cdTAwM2VpbnRfZmxhZyB8fFxuJiM0MztcdCAgICAgICAodGM2LVx1MDAzZXdhaXRpbmdfdHhfc2tiIFx1MDAyNlx1MDAyNiB0YzYtXHUwMDNldHhfY3JlZGl0cykpIHtcbiYjNDM7XHRcdHJldCA9IG9hX3RjNl90cnlfc3BpX3RyYW5zZmVyKHRjNik7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdGRpc2FibGVfaXJxX25vc3luYyh0YzYtXHUwMDNlc3BpLVx1MDAzZWlycSk7XG4mIzQzO1x0XHRcdG9hX3RjNl9kaXNhYmxlX3RyYWZmaWModGM2KTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC0xMjQ1LDIzICYjNDM7MTM1OCwzMCBAQCBFWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfemVyb19hbGlnbl9yZWNlaXZlX2ZyYW1lX2VuYWJsZSk7XG4gICogQHRjNjogb2FfdGM2IHN0cnVjdC5cbiAgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIGluIHdoaWNoIHRoZSBldGhlcm5ldCBmcmFtZSBpcyBzdG9yZWQuXG4gICpcbi0gKiBSZXR1cm46IE5FVERFVl9UWF9PSyBpZiB0aGUgdHJhbnNtaXQgZXRoZXJuZXQgZnJhbWUgc2tiIGFkZGVkIGluIHRoZSB0eF9za2JfcVxuLSAqIG90aGVyd2lzZSByZXR1cm5zIE5FVERFVl9UWF9CVVNZLlxuJiM0MzsgKiBSZXR1cm46IE5FVERFVl9UWF9PSyBlaXRoZXIgb24gc3VjY2Vzc2Z1bCBxdWV1ZWluZyBvZiB0aGUgcGFja2V0IGZvclxuJiM0MzsgKiB0cmFuc21pc3Npb24sIG9yIG9uIHBhY2tldCBnZXR0aW5nIGRyb3BwZWQuIFBhY2tldCBjYW4gYmUgZHJvcHBlZCBkdWUgdG9cbiYjNDM7ICogZmFpbHVyZSBpbiBsaW5lYXJpemluZyB0aGUgYnVmZmVyIG9yIGRpc2FibGVfdHJhZmZpYyBpcyBzZXQgZHVlIHRvXG4mIzQzOyAqIGVhcmxpZXIgZmF0YWwgZXJyb3IuIFJldHVybnMgTkVUREVWX1RYX0JVU1kgd2hlbiB0aGVyZSBpcyBubyByb29tXG4mIzQzOyAqIHRvIHF1ZXVlIHRoZSBwYWNrZXQuXG4gICovXG4gbmV0ZGV2X3R4X3Qgb2FfdGM2X3N0YXJ0X3htaXQoc3RydWN0IG9hX3RjNiAqdGM2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdGlmICh0YzYtXHUwMDNlZGlzYWJsZV90cmFmZmljIHx8IHRjNi1cdTAwM2V3YWl0aW5nX3R4X3NrYikge1xuLVx0XHRuZXRpZl9zdG9wX3F1ZXVlKHRjNi1cdTAwM2VuZXRkZXYpO1xuLVx0XHRyZXR1cm4gTkVUREVWX1RYX0JVU1k7XG4tXHR9XG4tXG4gXHRpZiAoc2tiX2xpbmVhcml6ZShza2IpKSB7XG4tXHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4tXHRcdHRjNi1cdTAwM2VuZXRkZXYtXHUwMDNlc3RhdHMudHhfZHJvcHBlZCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRvYV90YzZfZHJvcF90eF9za2IodGM2LCBza2IpO1xuIFx0XHRyZXR1cm4gTkVUREVWX1RYX09LO1xuIFx0fVxuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRjNi1cdTAwM2V0eF9za2JfbG9jayk7XG4mIzQzO1x0aWYgKHRjNi1cdTAwM2V3YWl0aW5nX3R4X3NrYikge1xuJiM0MztcdFx0bmV0aWZfc3RvcF9xdWV1ZSh0YzYtXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRjNi1cdTAwM2V0eF9za2JfbG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gTkVUREVWX1RYX0JVU1k7XG4mIzQzO1x0fVxuJiM0MztcdGlmICh0YzYtXHUwMDNlZGlzYWJsZV90cmFmZmljKSB7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZ0YzYtXHUwMDNldHhfc2tiX2xvY2spO1xuJiM0MztcdFx0b2FfdGM2X2Ryb3BfdHhfc2tiKHRjNiwgc2tiKTtcbiYjNDM7XHRcdHJldHVybiBORVRERVZfVFhfT0s7XG4mIzQzO1x0fVxuIFx0dGM2LVx1MDAzZXdhaXRpbmdfdHhfc2tiID0gc2tiO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGM2LVx1MDAzZXR4X3NrYl9sb2NrKTtcbiBcbkBAIC0xMzkzLDggJiM0MzsxNTEzLDEwIEBAIEVYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl9pbml0KTtcbiAgKi9cbiB2b2lkIG9hX3RjNl9leGl0KHN0cnVjdCBvYV90YzYgKnRjNilcbiB7XG4tXHR0YzYtXHUwMDNlZGlzYWJsZV90cmFmZmljID0gdHJ1ZTtcbiBcdGRpc2FibGVfaXJxKHRjNi1cdTAwM2VzcGktXHUwMDNlaXJxKTtcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2dGM2LVx1MDAzZXR4X3NrYl9sb2NrKTtcbiYjNDM7XHR0YzYtXHUwMDNlZGlzYWJsZV90cmFmZmljID0gdHJ1ZTtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZ0YzYtXHUwMDNldHhfc2tiX2xvY2spO1xuIFx0b2FfdGM2X3BoeV9leGl0KHRjNik7XG4gXHRvYV90YzZfZnJlZV9wZW5kaW5nX3NrYnModGM2KTtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPUEVOIEFsbGlhbmNlIDEwQkFTRS1UMXggTUFDLVBIWSBTZXJpYWwgSW50ZXJmYWNlIChvYV90YzYpIGZyYW1ld29yaywgd2hpY2ggaXMgY3VycmVudGx5IG9ubHkgdXNlZCBieSB0aGUgTWljcm9jaGlwIExBTjg2NXggU1BJIGRyaXZlci4gU2luY2UgU1BJIGRldmljZXMgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgY2Fubm90IGJlIGR5bmFtaWNhbGx5IGluc3RhbnRpYXRlZCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2YjEyYzdkODI4ZGFlOGFlZDE4NTQyZWRjZTIzOTY1MmIxZDkzNzRjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMDM6MjQ6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jCmluZGV4IDA3MjdkNTMzNDVhMzMuLjZlMjdlZDM5YTk5YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jCkBAIC0xMjcsNyAmIzQzOzEyNyw3IEBAIHN0cnVjdCBvYV90YzYgewogCXUxNiBzcGlfZGF0YV90eF9idWZfb2Zmc2V0OwogCXUxNiB0eF9jcmVkaXRzOwogCXU4IHJ4X2NodW5rc19hdmFpbGFibGU7Ci0JYm9vbCByeF9idWZfb3ZlcmZsb3c7CiYjNDM7CWJvb2wgd2FpdF91bnRpbF9zdGFydF92YWxpZDsKIAlib29sIGludF9mbGFnOwogCWJvb2wgZGlzYWJsZV90cmFmZmljOwogfTsKQEAgLTQyMyw3ICYjNDM7NDIzLDcgQEAgc3RhdGljIGludCBvYV90YzZfbWRpb2J1c19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnbnVtKQogewogCXN0cnVjdCBvYV90YzYgKnRjNiA9IGJ1cy0mZ3Q7cHJpdjsKIAl1MzIgcmVndmFsOwotCWJvb2wgcmV0OwomIzQzOwlpbnQgcmV0OwogCiAJcmV0ID0gb2FfdGM2X3JlYWRfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUEhZX1NURF9SRUdfQUREUl9CQVNFIHwKIAkJCQkgICAocmVnbnVtICZhbXA7IE9BX1RDNl9QSFlfU1REX1JFR19BRERSX01BU0spLApAQCAtNjUyLDYgJiM0Mzs2NTIsMjYgQEAgc3RhdGljIGludCBvYV90YzZfZW5hYmxlX2RhdGFfdHJhbnNmZXIoc3RydWN0IG9hX3RjNiAqdGM2KQogCXJldHVybiBvYV90YzZfd3JpdGVfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUkVHX0NPTkZJRzAsIHZhbHVlKTsKIH0KIAomIzQzOy8qIENhbGxlZCB3aGVuIGEgZnJhbWUgdGhhdCBpcyBtZWFudCB0byBiZSB0cmFuc21pdHRlZCwgaXMgZHJvcHBlZC4gKi8KJiM0MztzdGF0aWMgdm9pZCBvYV90YzZfZHJvcF90eF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJaWYgKHNrYikgewomIzQzOwkJdGM2LSZndDtuZXRkZXYtJmd0O3N0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7OwomIzQzOwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm9hX3RjNl9kZXRhY2hfd2FpdGluZ190eF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2KQomIzQzO3sKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNrYjsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3RjNi0mZ3Q7dHhfc2tiX2xvY2spOwomIzQzOwlza2IgPSB0YzYtJmd0O3dhaXRpbmdfdHhfc2tiOwomIzQzOwl0YzYtJmd0O3dhaXRpbmdfdHhfc2tiID0gTlVMTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHNrYjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBvYV90YzZfY2xlYW51cF9vbmdvaW5nX3J4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYpCiB7CiAJaWYgKHRjNi0mZ3Q7cnhfc2tiKSB7CkBAIC02NjMsMjkgJiM0Mzs2ODMsMzkgQEAgc3RhdGljIHZvaWQgb2FfdGM2X2NsZWFudXBfb25nb2luZ19yeF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2KQogCiBzdGF0aWMgdm9pZCBvYV90YzZfY2xlYW51cF9vbmdvaW5nX3R4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYpCiB7Ci0JaWYgKHRjNi0mZ3Q7b25nb2luZ190eF9za2IpIHsKLQkJdGM2LSZndDtuZXRkZXYtJmd0O3N0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7OwotCQlrZnJlZV9za2IodGM2LSZndDtvbmdvaW5nX3R4X3NrYik7Ci0JCXRjNi0mZ3Q7b25nb2luZ190eF9za2IgPSBOVUxMOwotCX0KJiM0MzsJb2FfdGM2X2Ryb3BfdHhfc2tiKHRjNiwgdGM2LSZndDtvbmdvaW5nX3R4X3NrYik7CiYjNDM7CXRjNi0mZ3Q7b25nb2luZ190eF9za2IgPSBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBvYV90YzZfY2xlYW51cF93YWl0aW5nX3R4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYpCiB7Ci0JaWYgKHRjNi0mZ3Q7d2FpdGluZ190eF9za2IpIHsKLQkJdGM2LSZndDtuZXRkZXYtJmd0O3N0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7OwotCQlrZnJlZV9za2IodGM2LSZndDt3YWl0aW5nX3R4X3NrYik7Ci0JCXRjNi0mZ3Q7d2FpdGluZ190eF9za2IgPSBOVUxMOwotCX0KJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNrYjsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7dGM2LSZndDt0eF9za2JfbG9jayk7CiYjNDM7CXNrYiA9IG9hX3RjNl9kZXRhY2hfd2FpdGluZ190eF9za2IodGM2KTsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDt0YzYtJmd0O3R4X3NrYl9sb2NrKTsKJiM0MzsKJiM0MzsJb2FfdGM2X2Ryb3BfdHhfc2tiKHRjNiwgc2tiKTsKIH0KIAotc3RhdGljIHZvaWQgb2FfdGM2X2ZyZWVfcGVuZGluZ19za2JzKHN0cnVjdCBvYV90YzYgKnRjNikKJiM0MztzdGF0aWMgdm9pZCBvYV90YzZfZnJlZV9vbmdvaW5nX3NrYnMoc3RydWN0IG9hX3RjNiAqdGM2KQogewogCW9hX3RjNl9jbGVhbnVwX29uZ29pbmdfdHhfc2tiKHRjNik7CiAJb2FfdGM2X2NsZWFudXBfb25nb2luZ19yeF9za2IodGM2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgb2FfdGM2X2ZyZWVfcGVuZGluZ19za2JzKHN0cnVjdCBvYV90YzYgKnRjNikKJiM0Mzt7CiYjNDM7CW9hX3RjNl9mcmVlX29uZ29pbmdfc2ticyh0YzYpOwogCW9hX3RjNl9jbGVhbnVwX3dhaXRpbmdfdHhfc2tiKHRjNik7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBvYV90YzZfbG9va19mb3JfbmV3X2ZyYW1lKHN0cnVjdCBvYV90YzYgKnRjNikKJiM0Mzt7CiYjNDM7CXRjNi0mZ3Q7d2FpdF91bnRpbF9zdGFydF92YWxpZCA9IHRydWU7CiYjNDM7CW9hX3RjNl9jbGVhbnVwX29uZ29pbmdfcnhfc2tiKHRjNik7CiYjNDM7fQomIzQzOwogLyogSWYgdGhlIGZhaWx1cmUgaXMgYXQgU1BJIGludGVyZmFjZSBsZXZlbCwgbWFza2luZyBhbmQgY2xlYXJpbmcKICAqIHRoZSBpbnRlcnJ1cHQgb2YgdGhlIGRldmljZSB3b24mIzM5O3Qgd29yay4gU2luY2UgU1BJIGludGVycnVwdCBpcwogICogZGlzYWJsZWQsIGl0IHNob3VsZCBzdG9wIHRoZSByZXBlYXRlZCBpbnRlcnJ1cHRzLgpAQCAtNjkzLDkgJiM0Mzs3MjMsMjEgQEAgc3RhdGljIHZvaWQgb2FfdGM2X2ZyZWVfcGVuZGluZ19za2JzKHN0cnVjdCBvYV90YzYgKnRjNikKIHN0YXRpYyB2b2lkIG9hX3RjNl9kaXNhYmxlX3RyYWZmaWMoc3RydWN0IG9hX3RjNiAqdGM2KQogewogCXUzMiByZWd2YWwgPSBJTlRfTUFTSzBfQUxMX0lOVEVSUlVQVFM7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiAKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7dGM2LSZndDt0eF9za2JfbG9jayk7CiAJdGM2LSZndDtkaXNhYmxlX3RyYWZmaWMgPSB0cnVlOwotCW9hX3RjNl9mcmVlX3BlbmRpbmdfc2ticyh0YzYpOwomIzQzOwlza2IgPSBvYV90YzZfZGV0YWNoX3dhaXRpbmdfdHhfc2tiKHRjNik7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7dGM2LSZndDt0eF9za2JfbG9jayk7CiYjNDM7CiYjNDM7CS8qIGRpc2FibGVfdHJhZmZpYywgd2hlbiBzZXQsIGlzIGEgcG9pbnQgb2Ygbm8gcmV0dXJuIHRvIHdvcmtpbmcKJiM0MzsJICogc3RhdGUuIFRYIHF1ZXVlcyBhcmUgZGlzYWJsZWQuIEluIHNvbWUgY2FzZXMsIHVwcGVyIGxheWVyIG9yCiYjNDM7CSAqIHZlbmRvciBjb2RlIG1heSBpbmFkdmVydGVudGx5IGVuYWJsZSB0aGUgcXVldWUuIEludGVudGlvbiBvZgomIzQzOwkgKiB0aGUgZGlzYWJsZV90cmFmZmljIGZsYWcgaXMgdG8gc3RvcCB0cmFmZmljIGZyb20gZmxvd2luZy4KJiM0MzsJICovCiYjNDM7CW5ldGlmX3R4X2Rpc2FibGUodGM2LSZndDtuZXRkZXYpOwomIzQzOwlvYV90YzZfZHJvcF90eF9za2IodGM2LCBza2IpOwomIzQzOwlvYV90YzZfZnJlZV9vbmdvaW5nX3NrYnModGM2KTsKIAlvYV90YzZfd3JpdGVfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUkVHX0lOVF9NQVNLMCwgcmVndmFsKTsKIAlvYV90YzZfcmVhZF9yZWdpc3Rlcih0YzYsIE9BX1RDNl9SRUdfU1RBVFVTMCwgJmFtcDtyZWd2YWwpOwogCW9hX3RjNl93cml0ZV9yZWdpc3Rlcih0YzYsIE9BX1RDNl9SRUdfU1RBVFVTMCwgcmVndmFsKTsKQEAgLTcxNCw2ICYjNDM7NzU2LDEzIEBAIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3NfZXh0ZW5kZWRfc3RhdHVzKHN0cnVjdCBvYV90YzYgKnRjNikKIAkJcmV0dXJuIHJldDsKIAl9CiAKJiM0MzsJLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGVhY2ggY2h1bmsgcmVjZWl2ZWQgaW4gYSBnaXZlbiBTUEkKJiM0MzsJICogdHJhbnNhY3Rpb24uIEluIGNhc2UsIGV4dGVuZGVkIHN0YXR1cyBiaXQgaXMgc2V0IGluIG1vcmUgdGhhbgomIzQzOwkgKiBvbmUgY2h1bmssIHNraXAgdGhlIHdyaXRlLCBpZiBzdGF0dXMwIGlzIGFscmVhZHkgY2xlYXJlZC4KJiM0MzsJICovCiYjNDM7CWlmICghdmFsdWUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAkvKiBDbGVhciB0aGUgZXJyb3IgaW50ZXJydXB0cyBzdGF0dXMgKi8KIAlyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUkVHX1NUQVRVUzAsIHZhbHVlKTsKIAlpZiAocmV0KSB7CkBAIC03MjMsOCAmIzQzOzc3Miw3IEBAIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3NfZXh0ZW5kZWRfc3RhdHVzKHN0cnVjdCBvYV90YzYgKnRjNikKIAl9CiAKIAlpZiAoRklFTERfR0VUKFNUQVRVUzBfUlhfQlVGRkVSX09WRVJGTE9XX0VSUk9SLCB2YWx1ZSkpIHsKLQkJdGM2LSZndDtyeF9idWZfb3ZlcmZsb3cgPSB0cnVlOwotCQlvYV90YzZfY2xlYW51cF9vbmdvaW5nX3J4X3NrYih0YzYpOwomIzQzOwkJb2FfdGM2X2xvb2tfZm9yX25ld19mcmFtZSh0YzYpOwogCQluZXRfZXJyX3JhdGVsaW1pdGVkKCYjMzQ7JXM6IFJlY2VpdmUgYnVmZmVyIG92ZXJmbG93IGVycm9yXG4mIzM0OywKIAkJCQkgICAgdGM2LSZndDtuZXRkZXYtJmd0O25hbWUpOwogCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTc1MCw2ICYjNDM7Nzk4LDggQEAgc3RhdGljIGludCBvYV90YzZfcHJvY2Vzc19leHRlbmRlZF9zdGF0dXMoc3RydWN0IG9hX3RjNiAqdGM2KQogCiBzdGF0aWMgaW50IG9hX3RjNl9wcm9jZXNzX3J4X2NodW5rX2Zvb3RlcihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUzMiBmb290ZXIpCiB7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwogCS8qIFByb2Nlc3MgcnggY2h1bmsgZm9vdGVyIGZvciB0aGUgZm9sbG93aW5nLAogCSAqIDEuIHR4IGNyZWRpdHMKIAkgKiAyLiBlcnJvcnMgaWYgYW55IGZyb20gTUFDLVBIWQpAQCAtNzYwLDkgJiM0Mzs4MTAsMTEgQEAgc3RhdGljIGludCBvYV90YzZfcHJvY2Vzc19yeF9jaHVua19mb290ZXIoc3RydWN0IG9hX3RjNiAqdGM2LCB1MzIgZm9vdGVyKQogCQkJCQkgICAgIGZvb3Rlcik7CiAKIAlpZiAoRklFTERfR0VUKE9BX1RDNl9EQVRBX0ZPT1RFUl9FWFRFTkRFRF9TVFMsIGZvb3RlcikpIHsKLQkJaW50IHJldCA9IG9hX3RjNl9wcm9jZXNzX2V4dGVuZGVkX3N0YXR1cyh0YzYpOwotCi0JCWlmIChyZXQpCiYjNDM7CQlyZXQgPSBvYV90YzZfcHJvY2Vzc19leHRlbmRlZF9zdGF0dXModGM2KTsKJiM0MzsJCS8qIEVBR0FJTiBlcnJvciBpcyByZWNvdmVyYWJsZS4gTW92ZSBvbiB0byBjaGVjawomIzQzOwkJICogSEVBREVSIGFuZCBTWU5DIGVycm9ycyBiZWZvcmUgcmV0dXJuaW5nLgomIzQzOwkJICovCiYjNDM7CQlpZiAocmV0ICZhbXA7JmFtcDsgcmV0ICE9IC1FQUdBSU4pCiAJCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtNzgwLDcgJiM0Mzs4MzIsNyBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcm9jZXNzX3J4X2NodW5rX2Zvb3RlcihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUzMiBmb290ZXIpCiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCXJldHVybiAwOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBvYV90YzZfc3VibWl0X3J4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYpCkBAIC04MDUsMTMgJiM0Mzs4NTcsMzUgQEAgc3RhdGljIHZvaWQgb2FfdGM2X3N1Ym1pdF9yeF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2KQogCXRjNi0mZ3Q7cnhfc2tiID0gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgb2FfdGM2X3VwZGF0ZV9yeF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqcGF5bG9hZCwgdTggbGVuZ3RoKQomIzQzOy8qIE9uIG92ZXJzdWJzY3JpYmVkIHRyYWZmaWMgY29uZGl0aW9uLCBwYXJ0aWN1bGFybHkgd2l0aCBvdmVyd2hlbG1pbmcgcngKJiM0MzsgKiBidWZmZXIgb3ZlcmZsb3cgZXJyb3JzLCB0aGVyZSBjb3VsZCBiZSBkYXRhIGNodW5rIGxvc3MuIElmIHRhaWwgJiM0MzsgbGVuZ3RoCiYjNDM7ICogZ29lcyBiZXlvbmQgZW5kIHBvaW50ZXIsIHRoYXQgaXMgYW4gaW5kaWNhdGlvbiB0aGF0IHRoZSBkYXRhIGNodW5rIHdpdGgKJiM0MzsgKiBlbmRfdmFsaWQgYml0IGlzIGxvc3QuIFRpbWUgdG8gbG9vayBmb3IgYSBkYXRhIGNodW5rIHdpdGggc3RhcnRfdmFsaWQgYml0LgomIzQzOyAqCiYjNDM7ICogSWYgcnhfc2tiIGlzIE5VTEwsIGl0IGlzIHRpbWUgdG8gc3RhcnQgbG9va2luZyBmb3IgZGF0YSBjaHVuayB3aXRoCiYjNDM7ICogc3RhcnRfYml0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgb2FfdGM2X3VwZGF0ZV9yeF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqcGF5bG9hZCwgdTggbGVuZ3RoKQogewomIzQzOwlpZiAoIXRjNi0mZ3Q7cnhfc2tiIHx8CiYjNDM7CSAgICBza2JfdGFpbHJvb20odGM2LSZndDtyeF9za2IpICZsdDsgbGVuZ3RoKSB7CiYjNDM7CQlvYV90YzZfbG9va19mb3JfbmV3X2ZyYW1lKHRjNik7CiYjNDM7CQlyZXR1cm4gLUVBR0FJTjsKJiM0MzsJfQomIzQzOwogCW1lbWNweShza2JfcHV0KHRjNi0mZ3Q7cnhfc2tiLCBsZW5ndGgpLCBwYXlsb2FkLCBsZW5ndGgpOwomIzQzOwlyZXR1cm4gMDsKIH0KIAomIzQzOy8qIE9uIG92ZXJ3aGVsbWluZyByeCBidWZmZXIgb3ZlcmZsb3cgZXJyb3JzLCBkdWUgdG8gZGF0YSBjaHVuayBsb3NzLCBpdCBpcwomIzQzOyAqIHBvc3NpYmxlIHRoYXQgd2UgZ2V0IHR3byBkYXRhIGNodW5rcyB3aXRoIHN0YXJ0X3ZhbGlkIGJpdCBzZXQsIHdpdGhvdXQKJiM0MzsgKiBlbmRfdmFsaWQgYml0IHNldCBpbiBiZXR3ZWVuLiBJbiB0aGlzIGNhc2UsIHJ4X3NrYiB3b3VsZCBoYXZlIGEgdmFsaWQKJiM0MzsgKiBidWZmZXIgcG9pbnRlci4gV2Ugc2hvdWxkIHJlbGVhc2UsIGlmIGEgdmFsaWQgcG9pbnRlciBpcyBmb3VuZCBiZWZvcmUKJiM0MzsgKiBhbGxvY2F0aW5nIGEgbmV3IG9uZS4KJiM0MzsgKi8KIHN0YXRpYyBpbnQgb2FfdGM2X2FsbG9jYXRlX3J4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYpCiB7CiYjNDM7CW9hX3RjNl9jbGVhbnVwX29uZ29pbmdfcnhfc2tiKHRjNik7CiAJdGM2LSZndDtyeF9za2IgPSBuZXRkZXZfYWxsb2Nfc2tiX2lwX2FsaWduKHRjNi0mZ3Q7bmV0ZGV2LCB0YzYtJmd0O25ldGRldi0mZ3Q7bXR1ICYjNDM7CiAJCQkJCQlFVEhfSExFTiAmIzQzOyBFVEhfRkNTX0xFTik7CiAJaWYgKCF0YzYtJmd0O3J4X3NrYikgewpAQCAtODMxLDcgJiM0Mzs5MDUsOSBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcmNzX2NvbXBsZXRlX3J4X2ZyYW1lKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKnBheWxvYWQsCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCW9hX3RjNl91cGRhdGVfcnhfc2tiKHRjNiwgcGF5bG9hZCwgc2l6ZSk7CiYjNDM7CXJldCA9IG9hX3RjNl91cGRhdGVfcnhfc2tiKHRjNiwgcGF5bG9hZCwgc2l6ZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwogCiAJb2FfdGM2X3N1Ym1pdF9yeF9za2IodGM2KTsKIApAQCAtODQ2LDIyICYjNDM7OTIyLDI0IEBAIHN0YXRpYyBpbnQgb2FfdGM2X3ByY3NfcnhfZnJhbWVfc3RhcnQoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqcGF5bG9hZCwgdTE2IHNpemUpCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCW9hX3RjNl91cGRhdGVfcnhfc2tiKHRjNiwgcGF5bG9hZCwgc2l6ZSk7Ci0KLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIG9hX3RjNl91cGRhdGVfcnhfc2tiKHRjNiwgcGF5bG9hZCwgc2l6ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIG9hX3RjNl9wcmNzX3J4X2ZyYW1lX2VuZChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpwYXlsb2FkLCB1MTYgc2l6ZSkKJiM0MztzdGF0aWMgaW50IG9hX3RjNl9wcmNzX3J4X2ZyYW1lX2VuZChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpwYXlsb2FkLCB1MTYgc2l6ZSkKIHsKLQlvYV90YzZfdXBkYXRlX3J4X3NrYih0YzYsIHBheWxvYWQsIHNpemUpOwomIzQzOwlpbnQgcmV0OwogCi0Jb2FfdGM2X3N1Ym1pdF9yeF9za2IodGM2KTsKJiM0MzsJcmV0ID0gb2FfdGM2X3VwZGF0ZV9yeF9za2IodGM2LCBwYXlsb2FkLCBzaXplKTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlvYV90YzZfc3VibWl0X3J4X3NrYih0YzYpOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBvYV90YzZfcHJjc19vbmdvaW5nX3J4X2ZyYW1lKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKnBheWxvYWQsCi0JCQkJCSB1MzIgZm9vdGVyKQomIzQzO3N0YXRpYyBpbnQgb2FfdGM2X3ByY3Nfb25nb2luZ19yeF9mcmFtZShzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpwYXlsb2FkLAomIzQzOwkJCQkJdTMyIGZvb3RlcikKIHsKLQlvYV90YzZfdXBkYXRlX3J4X3NrYih0YzYsIHBheWxvYWQsIE9BX1RDNl9DSFVOS19QQVlMT0FEX1NJWkUpOwomIzQzOwlyZXR1cm4gb2FfdGM2X3VwZGF0ZV9yeF9za2IodGM2LCBwYXlsb2FkLAomIzQzOwkJCQkgICAgT0FfVEM2X0NIVU5LX1BBWUxPQURfU0laRSk7CiB9CiAKIHN0YXRpYyBpbnQgb2FfdGM2X3ByY3NfcnhfY2h1bmtfcGF5bG9hZChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpkYXRhLApAQCAtODc2LDEwICYjNDM7OTU0LDEwIEBAIHN0YXRpYyBpbnQgb2FfdGM2X3ByY3NfcnhfY2h1bmtfcGF5bG9hZChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpkYXRhLAogCXUxNiBzaXplOwogCiAJLyogUmVzdGFydCB0aGUgbmV3IHJ4IGZyYW1lIGFmdGVyIHJlY2VpdmluZyByeCBidWZmZXIgb3ZlcmZsb3cgZXJyb3IgKi8KLQlpZiAoc3RhcnRfdmFsaWQgJmFtcDsmYW1wOyB0YzYtJmd0O3J4X2J1Zl9vdmVyZmxvdykKLQkJdGM2LSZndDtyeF9idWZfb3ZlcmZsb3cgPSBmYWxzZTsKJiM0MzsJaWYgKHN0YXJ0X3ZhbGlkICZhbXA7JmFtcDsgdGM2LSZndDt3YWl0X3VudGlsX3N0YXJ0X3ZhbGlkKQomIzQzOwkJdGM2LSZndDt3YWl0X3VudGlsX3N0YXJ0X3ZhbGlkID0gZmFsc2U7CiAKLQlpZiAodGM2LSZndDtyeF9idWZfb3ZlcmZsb3cpCiYjNDM7CWlmICh0YzYtJmd0O3dhaXRfdW50aWxfc3RhcnRfdmFsaWQpCiAJCXJldHVybiAwOwogCiAJLyogUHJvY2VzcyB0aGUgY2h1bmsgd2l0aCBjb21wbGV0ZSByeCBmcmFtZSAqLwpAQCAtOTAxLDggJiM0Mzs5NzksNyBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcmNzX3J4X2NodW5rX3BheWxvYWQoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqZGF0YSwKIAkvKiBQcm9jZXNzIHRoZSBjaHVuayB3aXRoIG9ubHkgcnggZnJhbWUgZW5kICovCiAJaWYgKGVuZF92YWxpZCAmYW1wOyZhbXA7ICFzdGFydF92YWxpZCkgewogCQlzaXplID0gZW5kX2J5dGVfb2Zmc2V0ICYjNDM7IDE7Ci0JCW9hX3RjNl9wcmNzX3J4X2ZyYW1lX2VuZCh0YzYsIGRhdGEsIHNpemUpOwotCQlyZXR1cm4gMDsKJiM0MzsJCXJldHVybiBvYV90YzZfcHJjc19yeF9mcmFtZV9lbmQodGM2LCBkYXRhLCBzaXplKTsKIAl9CiAKIAkvKiBQcm9jZXNzIHRoZSBjaHVuayB3aXRoIHByZXZpb3VzIHJ4IGZyYW1lIGVuZCBhbmQgbmV4dCByeCBmcmFtZQpAQCAtOTE2LDYgJiM0Mzs5OTMsMTUgQEAgc3RhdGljIGludCBvYV90YzZfcHJjc19yeF9jaHVua19wYXlsb2FkKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKmRhdGEsCiAJCWlmICh0YzYtJmd0O3J4X3NrYikgewogCQkJc2l6ZSA9IGVuZF9ieXRlX29mZnNldCAmIzQzOyAxOwogCQkJb2FfdGM2X3ByY3NfcnhfZnJhbWVfZW5kKHRjNiwgZGF0YSwgc2l6ZSk7CiYjNDM7CiYjNDM7CQkJLyogUmV0dXJuIHZhbHVlIGZyb20gb2FfdGM2X3ByY3NfcnhfZnJhbWVfZW5kIGlzIG5vdAomIzQzOwkJCSAqIGNoZWNrZWQuIElmIGl0IHJldHVybmVkIGFuIGVycm9yLCBpdCBpcyB0byBtYWtlCiYjNDM7CQkJICogdGhlIGNvZGUgdG8gbG9vayBmb3IgbmV3IGZyYW1lLiBBdCB0aGlzIHN0YWdlLAomIzQzOwkJCSAqIGNvZGUgYmVsb3cgaXMgZ29pbmcgdG8gcHJvY2VzcyBhIG5ldyBmcmFtZS4gU28sCiYjNDM7CQkJICogZXJyb3IgY29uZGl0aW9uIGlzIHNldCB0byBmYWxzZSwgaW4gY2FzZSBpdCBpcwomIzQzOwkJCSAqIHNldCBiZWZvcmUgcHJvY2VlZGluZy4KJiM0MzsJCQkgKi8KJiM0MzsJCQl0YzYtJmd0O3dhaXRfdW50aWxfc3RhcnRfdmFsaWQgPSBmYWxzZTsKIAkJfQogCQlzaXplID0gT0FfVEM2X0NIVU5LX1BBWUxPQURfU0laRSAtIHN0YXJ0X2J5dGVfb2Zmc2V0OwogCQlyZXR1cm4gb2FfdGM2X3ByY3NfcnhfZnJhbWVfc3RhcnQodGM2LApAQCAtOTI0LDkgJiM0MzsxMDEwLDcgQEAgc3RhdGljIGludCBvYV90YzZfcHJjc19yeF9jaHVua19wYXlsb2FkKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKmRhdGEsCiAJfQogCiAJLyogUHJvY2VzcyB0aGUgY2h1bmsgd2l0aCBvbmdvaW5nIHJ4IGZyYW1lIGRhdGEgKi8KLQlvYV90YzZfcHJjc19vbmdvaW5nX3J4X2ZyYW1lKHRjNiwgZGF0YSwgZm9vdGVyKTsKLQotCXJldHVybiAwOwomIzQzOwlyZXR1cm4gb2FfdGM2X3ByY3Nfb25nb2luZ19yeF9mcmFtZSh0YzYsIGRhdGEsIGZvb3Rlcik7CiB9CiAKIHN0YXRpYyB1MzIgb2FfdGM2X2dldF9yeF9jaHVua19mb290ZXIoc3RydWN0IG9hX3RjNiAqdGM2LCB1MTYgZm9vdGVyX29mZnNldCkKQEAgLTk0Miw4ICYjNDM7MTAyNiw5IEBAIHN0YXRpYyB1MzIgb2FfdGM2X2dldF9yeF9jaHVua19mb290ZXIoc3RydWN0IG9hX3RjNiAqdGM2LCB1MTYgZm9vdGVyX29mZnNldCkKIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3Nfc3BpX2RhdGFfcnhfYnVmKHN0cnVjdCBvYV90YzYgKnRjNiwgdTE2IGxlbmd0aCkKIHsKIAl1MTYgbm9fb2ZfcnhfY2h1bmtzID0gbGVuZ3RoIC8gT0FfVEM2X0NIVU5LX1NJWkU7CiYjNDM7CWJvb2wgcmV0cnkgPSBmYWxzZTsKJiM0MzsJaW50IHJldCA9IDA7CiAJdTMyIGZvb3RlcjsKLQlpbnQgcmV0OwogCiAJLyogQWxsIHRoZSByeCBjaHVua3MgaW4gdGhlIHJlY2VpdmUgU1BJIGRhdGEgYnVmZmVyIGFyZSBleGFtaW5lZCBoZXJlICovCiAJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBub19vZl9yeF9jaHVua3M7IGkmIzQzOyYjNDM7KSB7CkBAIC05NTIsOCAmIzQzOzEwMzcsMTEgQEAgc3RhdGljIGludCBvYV90YzZfcHJvY2Vzc19zcGlfZGF0YV9yeF9idWYoc3RydWN0IG9hX3RjNiAqdGM2LCB1MTYgbGVuZ3RoKQogCQkJCQkJICAgIE9BX1RDNl9DSFVOS19QQVlMT0FEX1NJWkUpOwogCiAJCXJldCA9IG9hX3RjNl9wcm9jZXNzX3J4X2NodW5rX2Zvb3Rlcih0YzYsIGZvb3Rlcik7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCWlmIChyZXQgIT0gLUVBR0FJTikKJiM0MzsJCQkJcmV0dXJuIHJldDsKJiM0MzsJCQlyZXRyeSA9IHRydWU7CiYjNDM7CQl9CiAKIAkJLyogSWYgdGhlcmUgaXMgYSBkYXRhIHZhbGlkIGNodW5rcyB0aGVuIHByb2Nlc3MgaXQgZm9yIHRoZQogCQkgKiBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gZGV0ZXJtaW5lIHRoZSB2YWxpZGl0eSBhbmQgdGhlIGxvY2F0aW9uCkBAIC05NjUsMTIgJiM0MzsxMDUzLDM1IEBAIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3Nfc3BpX2RhdGFfcnhfYnVmKHN0cnVjdCBvYV90YzYgKnRjNiwgdTE2IGxlbmd0aCkKIAogCQkJcmV0ID0gb2FfdGM2X3ByY3NfcnhfY2h1bmtfcGF5bG9hZCh0YzYsIHBheWxvYWQsCiAJCQkJCQkJICAgZm9vdGVyKTsKLQkJCWlmIChyZXQpCi0JCQkJcmV0dXJuIHJldDsKJiM0MzsJCQlpZiAocmV0KSB7CiYjNDM7CQkJCWlmIChyZXQgIT0gLUVOT01FTSAmYW1wOyZhbXA7IHJldCAhPSAtRUFHQUlOKQomIzQzOwkJCQkJcmV0dXJuIHJldDsKJiM0MzsJCQkJcmV0cnkgPSB0cnVlOwomIzQzOwkJCX0KIAkJfQogCX0KIAotCXJldHVybiAwOwomIzQzOwkvKiBOb3QgYmFpbGluZyBvdXQgb24gcmVjb3ZlcmFibGUgZXJyb3IgY29kZXMsIC1FQUdBSU4gYW5kCiYjNDM7CSAqIC1FTk9NRU0uIElmIHN1YnNlcXVlbnQgbG9vcCBpdGVyYXRpb25zLCBpZiBhbnksIHN1Y2NlZWRzLAomIzQzOwkgKiBlcnJvciBjb2RlIHdvdWxkIGJlIG92ZXJ3cml0dGVuLiByZXRyeSBmbGFnIGhlbHBzIHRvCiYjNDM7CSAqIG1ha2UgdGhlIGNhbGxlciB0byBjb250aW51ZSBhbmQgcmV0cnkuIFNpbmNlIHJlY292ZXJ5CiYjNDM7CSAqIGFjdGlvbiBmb3IgLUVOT01FTSBhbmQgLUVBR0FJTiBhcmUgc2FtZSwgd2UgYXJlIHJldHVybmluZwomIzQzOwkgKiBvbmUgb2YgdGhlIGVycm9yIGNvZGVzLCB0aGF0IGlzIC1FQUdBSU4uCiYjNDM7CSAqCiYjNDM7CSAqIFN1Y2Nlc3NmdWwgcmVjb3ZlcnkgZGVwZW5kcyBvbiBob3cgc21hbGwgdGhlIGZyYW1lcyBhcmUsCiYjNDM7CSAqIGhvdyBtYW55IGNodW5rcywgYW1vbmcgdGhlIHJlY2VpdmVkIGNodW5rcyB0cmlnZ2VyZWQgdGhlCiYjNDM7CSAqIGVycm9yLCB3aGV0aGVyIGRhdGEgaXMgaW50YWN0IGV2ZW4gd2l0aCBlcnJvciBjb25kaXRpb25zLgomIzQzOwkgKiBBcyBhIHJlc3VsdCwgdGhlcmUgaXMgbm8gc2luZ2xlLCBiZXN0IG1ldGhvZCB0byByZWNvdmVyCiYjNDM7CSAqIG1vc3QgZGF0YSB3aGVuIGVycm9yIGNvbmRpdGlvbnMgaGl0LiBXZSBkbyBvdXIgYmVzdCBieQomIzQzOwkgKiBwcm9jZXNzaW5nIGFsbCB0aGUgY2h1bmtzIHdpdGggZ29vZCAmIzM0O2Zvb3RlciBoZWFkZXImIzM0OyBhbmQKJiM0MzsJICogJiMzNDtkYXRhIHZhbGlkJiMzNDsgYml0IHNldC4KJiM0MzsJICovCiYjNDM7CWlmIChyZXRyeSkgewomIzQzOwkJcmV0ID0gLUVBR0FJTjsKJiM0MzsJCW9hX3RjNl9sb29rX2Zvcl9uZXdfZnJhbWUodGM2KTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgX19iZTMyIG9hX3RjNl9wcmVwYXJlX2RhdGFfaGVhZGVyKGJvb2wgZGF0YV92YWxpZCwgYm9vbCBzdGFydF92YWxpZCwKQEAgLTExMzIsMTIgJiM0MzsxMjQzLDkgQEAgc3RhdGljIGludCBvYV90YzZfdHJ5X3NwaV90cmFuc2ZlcihzdHJ1Y3Qgb2FfdGM2ICp0YzYpCiAJCX0KIAogCQlyZXQgPSBvYV90YzZfcHJvY2Vzc19zcGlfZGF0YV9yeF9idWYodGM2LCBzcGlfbGVuKTsKLQkJaWYgKHJldCkgewotCQkJaWYgKHJldCA9PSAtRUFHQUlOKQotCQkJCWNvbnRpbnVlOwogCi0JCQlvYV90YzZfY2xlYW51cF9vbmdvaW5nX3R4X3NrYih0YzYpOwotCQkJb2FfdGM2X2NsZWFudXBfb25nb2luZ19yeF9za2IodGM2KTsKJiM0MzsJCWlmIChyZXQgJmFtcDsmYW1wOyByZXQgIT0gLUVBR0FJTikgewomIzQzOwkJCW9hX3RjNl9mcmVlX29uZ29pbmdfc2ticyh0YzYpOwogCQkJbmV0ZGV2X2Vycih0YzYtJmd0O25ldGRldiwgJiMzNDtEZXZpY2UgZXJyb3I6ICVkXG4mIzM0OywgcmV0KTsKIAkJCXJldHVybiByZXQ7CiAJCX0KQEAgLTExNTksMTUgJiM0MzsxMjY3LDIwIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBvYV90YzZfbWFjcGh5X3RocmVhZGVkX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQogCSAqIG5vIG5lZWQgdG8gYXR0ZW1wdCBzcGkgdHJhbnNmZXIsIG9uY2UgaXQgZmFpbHMuIFBlbmRpbmcgc2ticwogCSAqIGFyZSBhbHJlYWR5IGZyZWVkLgogCSAqLwotCWlmICghdGM2LSZndDtkaXNhYmxlX3RyYWZmaWMpIHsKLQkJd2hpbGUgKHRjNi0mZ3Q7aW50X2ZsYWcgfHwKLQkJICAgICAgICh0YzYtJmd0O3dhaXRpbmdfdHhfc2tiICZhbXA7JmFtcDsgdGM2LSZndDt0eF9jcmVkaXRzKSkgewotCQkJcmV0ID0gb2FfdGM2X3RyeV9zcGlfdHJhbnNmZXIodGM2KTsKLQkJCWlmIChyZXQpIHsKLQkJCQlkaXNhYmxlX2lycV9ub3N5bmModGM2LSZndDtzcGktJmd0O2lycSk7Ci0JCQkJb2FfdGM2X2Rpc2FibGVfdHJhZmZpYyh0YzYpOwotCQkJCWJyZWFrOwotCQkJfQomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDt0YzYtJmd0O3R4X3NrYl9sb2NrKTsKJiM0MzsJaWYgKHRjNi0mZ3Q7ZGlzYWJsZV90cmFmZmljKSB7CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO3RjNi0mZ3Q7dHhfc2tiX2xvY2spOwomIzQzOwkJcmV0dXJuIElSUV9IQU5ETEVEOwomIzQzOwl9CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7dGM2LSZndDt0eF9za2JfbG9jayk7CiYjNDM7CiYjNDM7CXdoaWxlICh0YzYtJmd0O2ludF9mbGFnIHx8CiYjNDM7CSAgICAgICAodGM2LSZndDt3YWl0aW5nX3R4X3NrYiAmYW1wOyZhbXA7IHRjNi0mZ3Q7dHhfY3JlZGl0cykpIHsKJiM0MzsJCXJldCA9IG9hX3RjNl90cnlfc3BpX3RyYW5zZmVyKHRjNik7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJZGlzYWJsZV9pcnFfbm9zeW5jKHRjNi0mZ3Q7c3BpLSZndDtpcnEpOwomIzQzOwkJCW9hX3RjNl9kaXNhYmxlX3RyYWZmaWModGM2KTsKJiM0MzsJCQlicmVhazsKIAkJfQogCX0KIApAQCAtMTI0NSwyMyAmIzQzOzEzNTgsMzAgQEAgRVhQT1JUX1NZTUJPTF9HUEwob2FfdGM2X3plcm9fYWxpZ25fcmVjZWl2ZV9mcmFtZV9lbmFibGUpOwogICogQHRjNjogb2FfdGM2IHN0cnVjdC4KICAqIEBza2I6IHNvY2tldCBidWZmZXIgaW4gd2hpY2ggdGhlIGV0aGVybmV0IGZyYW1lIGlzIHN0b3JlZC4KICAqCi0gKiBSZXR1cm46IE5FVERFVl9UWF9PSyBpZiB0aGUgdHJhbnNtaXQgZXRoZXJuZXQgZnJhbWUgc2tiIGFkZGVkIGluIHRoZSB0eF9za2JfcQotICogb3RoZXJ3aXNlIHJldHVybnMgTkVUREVWX1RYX0JVU1kuCiYjNDM7ICogUmV0dXJuOiBORVRERVZfVFhfT0sgZWl0aGVyIG9uIHN1Y2Nlc3NmdWwgcXVldWVpbmcgb2YgdGhlIHBhY2tldCBmb3IKJiM0MzsgKiB0cmFuc21pc3Npb24sIG9yIG9uIHBhY2tldCBnZXR0aW5nIGRyb3BwZWQuIFBhY2tldCBjYW4gYmUgZHJvcHBlZCBkdWUgdG8KJiM0MzsgKiBmYWlsdXJlIGluIGxpbmVhcml6aW5nIHRoZSBidWZmZXIgb3IgZGlzYWJsZV90cmFmZmljIGlzIHNldCBkdWUgdG8KJiM0MzsgKiBlYXJsaWVyIGZhdGFsIGVycm9yLiBSZXR1cm5zIE5FVERFVl9UWF9CVVNZIHdoZW4gdGhlcmUgaXMgbm8gcm9vbQomIzQzOyAqIHRvIHF1ZXVlIHRoZSBwYWNrZXQuCiAgKi8KIG5ldGRldl90eF90IG9hX3RjNl9zdGFydF94bWl0KHN0cnVjdCBvYV90YzYgKnRjNiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpZiAodGM2LSZndDtkaXNhYmxlX3RyYWZmaWMgfHwgdGM2LSZndDt3YWl0aW5nX3R4X3NrYikgewotCQluZXRpZl9zdG9wX3F1ZXVlKHRjNi0mZ3Q7bmV0ZGV2KTsKLQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwotCX0KLQogCWlmIChza2JfbGluZWFyaXplKHNrYikpIHsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJdGM2LSZndDtuZXRkZXYtJmd0O3N0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7OwomIzQzOwkJb2FfdGM2X2Ryb3BfdHhfc2tiKHRjNiwgc2tiKTsKIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAlzcGluX2xvY2tfYmgoJmFtcDt0YzYtJmd0O3R4X3NrYl9sb2NrKTsKJiM0MzsJaWYgKHRjNi0mZ3Q7d2FpdGluZ190eF9za2IpIHsKJiM0MzsJCW5ldGlmX3N0b3BfcXVldWUodGM2LSZndDtuZXRkZXYpOwomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDt0YzYtJmd0O3R4X3NrYl9sb2NrKTsKJiM0MzsJCXJldHVybiBORVRERVZfVFhfQlVTWTsKJiM0MzsJfQomIzQzOwlpZiAodGM2LSZndDtkaXNhYmxlX3RyYWZmaWMpIHsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7dGM2LSZndDt0eF9za2JfbG9jayk7CiYjNDM7CQlvYV90YzZfZHJvcF90eF9za2IodGM2LCBza2IpOwomIzQzOwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKJiM0MzsJfQogCXRjNi0mZ3Q7d2FpdGluZ190eF9za2IgPSBza2I7CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDt0YzYtJmd0O3R4X3NrYl9sb2NrKTsKIApAQCAtMTM5Myw4ICYjNDM7MTUxMywxMCBAQCBFWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfaW5pdCk7CiAgKi8KIHZvaWQgb2FfdGM2X2V4aXQoc3RydWN0IG9hX3RjNiAqdGM2KQogewotCXRjNi0mZ3Q7ZGlzYWJsZV90cmFmZmljID0gdHJ1ZTsKIAlkaXNhYmxlX2lycSh0YzYtJmd0O3NwaS0mZ3Q7aXJxKTsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7dGM2LSZndDt0eF9za2JfbG9jayk7CiYjNDM7CXRjNi0mZ3Q7ZGlzYWJsZV90cmFmZmljID0gdHJ1ZTsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDt0YzYtJmd0O3R4X3NrYl9sb2NrKTsKIAlvYV90YzZfcGh5X2V4aXQodGM2KTsKIAlvYV90YzZfZnJlZV9wZW5kaW5nX3NrYnModGM2KTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMyNQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDYwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBPUEVOIEFsbGlhbmNlIDEwQkFTRS1UMXggTUFDLVBIWSBEcml2ZXI6IEEgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmNgLCB3aGljaCwgYXMgSSByZWNhbGwsIGhhbmRsZXMgRXRoZXJuZXQgZnJhbWVzIG92ZXIgU1BJIGZvciB0aGUgT1BFTiBBbGxpYW5jZSAxMEJBU0UtVDF4IE1BQy1QSFkuICBUaGUgc2hlZXIgdm9sdW1lIG9mIG1vZGlmaWVkIGZ1bmN0aW9ucyDigJMgYSB3aG9sZSByYWZ0IG9mIHRoZW0g4oCTIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIHRoaXMgd2FycmFudHMgYSBjbG9zZXIgbG9vayBmb3IgZnV6emluZyBwb3RlbnRpYWwuIEl0JiMzOTtzIGEgY29tcHJlaGVuc2l2ZSBzZXQgb2YgY2hhbmdlcyB0b3VjaGluZyB2YXJpb3VzIGFzcGVjdHMgZnJvbSB0cmFuc21pdC9yZWNlaXZlIGJ1ZmZlcnMgdG8gaW50ZXJydXB0IGhhbmRsaW5nIGFuZCB0aGUgU1BJIHRyYW5zZmVyIG1lY2hhbmlzbSBpdHNlbGYuICBUaGUgYWRkaXRpb24gb2YgZnVuY3Rpb25zIGxpa2UgYG9hX3RjNl9kcm9wX3R4X3NrYmAsIGBvYV90YzZfZGV0YWNoX3dhaXRpbmdfdHhfc2tiYCwgYW5kIHNldmVyYWwgUlgtcmVsYXRlZCBhZGRpdGlvbnMgY2VydGFpbmx5IGNhdGNoZXMgbXkgYXR0ZW50aW9uLCBlc3BlY2lhbGx5IHRoZSBudW1lcm91cyBgcHJjc18qYCBmdW5jdGlvbnMuIFRoZXNlIGFyZSBhbGwgaGlnaC12YWx1ZSB0YXJnZXRzLgoKTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMsICYjMzQ7Q2FuIHdlIGV2ZW4gKmdldCogdG8gdGhpcyBpbiBhIGZ1enplcj8mIzM0OyBUaGlzIGlzIGEgaGFyZHdhcmUgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIGEgTUFDLVBIWSBjb25uZWN0ZWQgdmlhIFNQSS4gVGhhdCByYWlzZXMgYSBzaWduaWZpY2FudCBxdWVzdGlvbjogY2FuIGl0IGJlIHJlYWNoZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBvciBhIGZ1enppbmcgY29udGV4dD8gU1BJIGRldmljZXMgYXJlIG9mdGVuIHBoeXNpY2FsLCBhbmQgaW50ZXJhY3Rpbmcgd2l0aCB0aGVtIGRpcmVjdGx5IGlzIHVzdWFsbHkgYSBuby1nbyBmb3IgZnV6emluZyB3aXRob3V0IGFuIGVtdWxhdG9yIG9yIHNvbWUgZm9ybSBvZiBpbmplY3Rpb24uIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGV0aGVyIHRoZXJlIGFyZSBlbXVsYXRlZCBTUEkgY29udHJvbGxlcnMgYXZhaWxhYmxlIHdpdGhpbiB0aGUgdGVzdGluZyBpbmZyYXN0cnVjdHVyZSBvciwgZXZlbiBiZXR0ZXIsIGlmIHRoZXJlJiMzOTtzIGEgd2F5IHRvIGluamVjdCBTUEkgdHJhZmZpYyBkaXJlY3RseS4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IHN5emthbGxlciAqbWlnaHQqIGhhdmUgc29tZSBTUEkgc3VwcG9ydCwgYnV0IEkgY2FuJiMzOTt0IHF1aXRlIHJlbWVtYmVyIHRoZSBkZXRhaWxzLgoKVGhlIHJlYWwga2V5IGlzIHJlYWNoYWJpbGl0eS4gIEkgbmVlZCB0byBhc2NlcnRhaW4gaWYgYG9hX3RjNi5jYCBpcyBhY3R1YWxseSAqcmVhY2hhYmxlKiBmcm9tIGEgdXNlci1zcGFjZSBwcm9jZXNzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBrZXJuZWwgY29kZSBmb3IgY2FsbHMgdG8gYG9hX3RjNl9pbml0YCBvciBldmVuIGp1c3QgYSBkaXJlY3QgcmVmZXJlbmNlIHRvICYjMzQ7b2FfdGM2JiMzNDsgdG8gc2VlIHdoYXQgbW9kdWxlLCBkZXZpY2UsIG9yIG90aGVyIGNvbXBvbmVudCBhY3R1YWxseSBsb2FkcyBhbmQgdXNlcyB0aGlzIGRyaXZlci4gIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgYmVzdCBhcHByb2FjaCBmb3IgZnV6emluZyB0aGlzIGFuZCBsZXQgbWUga25vdyBpZiBpdCYjMzk7cyBldmVuIHdvcnRoIHRoZSBlZmZvcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2FfdGM2X2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0PTQ1ND1UaGUgaW5jbHVkZS9saW51eC9vYV90YzYuaCBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0LTQ1NS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdDo0NTY6Li4gYzpmdW5jdGlvbjo6IHN0cnVjdCBvYV90YzYgKm9hX3RjNl9pbml0KHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIFxcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb2EtdGM2LWZyYW1ld29yay5yc3QtNDU3LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYz0zMzM9c3RhdGljIGludCBsYW44NjV4X3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jLTM0OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYzozNDk6XHRwcml2LVx1MDAzZXRjNiA9IG9hX3RjNl9pbml0KHNwaSwgbmV0ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYy0zNTAtXHRpZiAoIXByaXYtXHUwMDNldGM2KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmM9MTM5Mz1FWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfc3RhcnRfeG1pdCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMtMTM5NS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jOjEzOTY6ICogb2FfdGM2X2luaXQgLSBhbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIG9hX3RjNiBzdHJ1Y3R1cmUuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy0xMzk3LSAqIEBzcGk6IGRldmljZSB3aXRoIHdoaWNoIGRhdGEgd2lsbCBiZSBleGNoYW5nZWQuXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMtMTQwMi0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jOjE0MDM6c3RydWN0IG9hX3RjNiAqb2FfdGM2X2luaXQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTE0MDQte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTE1MDctfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmM6MTUwODpFWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfaW5pdCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy0xNTA5LVxuLS1cbmluY2x1ZGUvbGludXgvb2FfdGM2Lmg9MTM9c3RydWN0IG9hX3RjNjtcbmluY2x1ZGUvbGludXgvb2FfdGM2LmgtMTQtXG5pbmNsdWRlL2xpbnV4L29hX3RjNi5oOjE1OnN0cnVjdCBvYV90YzYgKm9hX3RjNl9pbml0KHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xuaW5jbHVkZS9saW51eC9vYV90YzYuaC0xNi12b2lkIG9hX3RjNl9leGl0KHN0cnVjdCBvYV90YzYgKnRjNik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMTEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkFzc2Vzc2luZyBMQU44NjV4IERyaXZlciYjMzk7cyBTeXprYWxsZXIgQ29tcGF0aWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbGFuODY1eGAgZHJpdmVyLCB3aGljaCBpcyBhIE1pY3JvY2hpcCBMQU44NjUwLzEgTUFDLVBIWSBkcml2ZXIuIFRoZSBrZXkgaXNzdWUgaGVyZSBpcyB0aGF0IGl0ICpyZXF1aXJlcyogYSBwaHlzaWNhbCBTUEkgZGV2aWNlLiBOb3csIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgSSBjYW4gZ2V0IHRoaXMgd29ya2luZyB3aXRoaW4gdGhlIGNvbmZpbmVzIG9mIHN5emthbGxlciBmb3IgZnV6emluZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiBJIHNvbWVob3cgZW11bGF0ZSB0aGlzIFNQSSBkZXZpY2Ugd2l0aGluIHRoZSBzeXprYWxsZXIgZW52aXJvbm1lbnQ/CgpTeXprYWxsZXIgaXRzZWxmIGRvZXNuJiMzOTt0IG9mZmVyIGEgZ2VuZXJpYyBTUEkgZW11bGF0b3IsIHdoaWNoIGlzIGEgYml0IG9mIGEgcm9hZGJsb2NrLiBJIHF1aWNrbHkgc2Nhbm5lZCBteSBtZW50YWwgbGFuZHNjYXBlIGZvciBzb21ldGhpbmcgYW5hbG9nb3VzIHRvIGBtYWM4MDIxMV9od3NpbWAgZm9yIFNQSSwgYSBzb2Z0d2FyZSBzaW11bGF0aW9uIG9mIGhhcmR3YXJlIGluIHRoZSBuZXR3b3JrIHJlYWxtLCBidXQgbm90aGluZyBqdW1wZWQgb3V0LiBEYXJuLgoKQWxyaWdodCwgbGV0JiMzOTtzIHN0ZXAgYmFjayBhIGJpdC4gRG9lcyBzeXprYWxsZXIgb2ZmZXIgKmFueSogU1BJIGZ1enppbmcgc3VwcG9ydCwgcGVyaGFwcyB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIGBzcGlkZXZgIG9yIGEgc2ltaWxhciBjb25zdHJ1Y3Q/IE5vLCB0aGF0JiMzOTtzIG5vdCBpdC4gYHNwaWRldmAgaXMgYWxsIGFib3V0IHVzZXJzcGFjZSBpbnRlcmFjdGlvbiB3aXRoIFNQSSwgbm90IGFib3V0IGVtdWxhdGluZyB0aGUgdW5kZXJseWluZyBTUEkgZGV2aWNlIGl0c2VsZi4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgdXNlci10by1rZXJuZWwgaW50ZXJmYWNlLCBub3QgYW4gU1BJIGRldmljZSBpbiB0aGUga2VybmVsLgoKU28sIGhlcmUmIzM5O3MgdGhlIGNydXg6IGlmIHRoaXMgZHJpdmVyICphYnNvbHV0ZWx5KiBuZWVkcyBhIHBoeXNpY2FsIFNQSSBkZXZpY2UgbGlrZSB0aGUgTEFOODY1eCwgaXQmIzM5O3MgZ29pbmcgdG8gYmUgdHJpY2t5IHRvIHJlYWNoIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gVW5sZXNzIFFFTVUgc3BlY2lmaWNhbGx5IGVtdWxhdGVzIHRoaXMgcGFydGljdWxhciBTUEkgZGV2aWNlLCB3aGljaCBpcyB1bmxpa2VseSB3aXRob3V0IHNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQuIEkgbWlnaHQgbmVlZCBhIHNvZnR3YXJlIGVtdWxhdG9yLCBhIHNoaW0gdG8gcHJldGVuZCB0byBiZSB0aGUgaGFyZHdhcmUsIG9yIEkgbWlnaHQgaGF2ZSB0byBnbyBmdWxsLW9uIGhhcmR3YXJlLWluLXRoZS1sb29wLCB3aGljaCBpcyBnb2luZyB0byBiZSBwYWluZnVsIGFuZCBtZXNzeS4KCk15IG5leHQgc3RlcCBpcyB0byBjaGVjayBpZiBgbGFuODY1eGAgY2FuIGV2ZW4gKnByb2JlKiBzdWNjZXNzZnVsbHkgaW4gUUVNVS4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUsIHJpZ2h0PyBJdCYjMzk7cyBhbiBTUEkgZHJpdmVyLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBTUEkgc3Vic3lzdGVtIGlzIHdvcmtpbmcgYXMgZXhwZWN0ZWQuIExldCYjMzk7cyBzZWUgaWYgSSBjYW4gZ2V0IGV2ZW4gYmFzaWMgcHJvYmluZyB3b3JraW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAzOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xhbjg2NXhfZHJpdmVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYz00NDA9TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbGFuODY1eF9kdF9pZHMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jLTQ0MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYzo0NDI6c3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIGxhbjg2NXhfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jLTQ0My1cdC5kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jLTQ1MC19O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jOjQ1MTptb2R1bGVfc3BpX2RyaXZlcihsYW44NjV4X2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmMtNDUyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAzOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDU4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFNQSSBEcml2ZXIgU2NlbmFyaW8qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgU1BJIGRyaXZlciBhbmQgaW1tZWRpYXRlbHkgdGhlIHN0YW5kYXJkIGNvbnNpZGVyYXRpb25zIGNvbWUgdG8gbWluZC4gSXQmIzM5O3MgYW4gU1BJIGRyaXZlciwgc28gbmF0dXJhbGx5LCBpdHMgYmluZGluZyBpcyB0aWVkIHRvIGRldmljZXMgZGVmaW5lZCBpbiB0aGUgZGV2aWNlIHRyZWUgb3IgQUNQSS4gIEluIGEgdHlwaWNhbCBRRU1VIHNldHVwLCBhbmQgSSBrbm93IHRoaXMgZnJvbSBleHBlcmllbmNlLCB0aGUgcHJvYmUgZnVuY3Rpb24gZm9yIHRoaXMgZHJpdmVyIGlzIG5ldmVyIGdvaW5nIHRvIGJlIGNhbGxlZCB1bmxlc3Mgd2UgZXhwbGljaXRseSBhZGQgYSBub2RlIGluIHRoZSBkZXZpY2UgdHJlZSBmb3IgdGhpcyBzcGVjaWZpYyBTUEkgZGV2aWNlIGFuZCB0aGVuIHdpcmUgaXQgdXAgdG8gYW4gZW11bGF0ZWQgU1BJIGNvbnRyb2xsZXIgd2l0aGluIHRoZSBRRU1VIGVudmlyb25tZW50LiBFdmVuIGlmIHdlIGRvIHNvbWVob3cgbWFuYWdlIHRvIGdldCB0aGUgcHJvYmUgdG8gZXhlY3V0ZSwgYWxsIFNQSSBjb21tdW5pY2F0aW9uIHdvdWxkIGJlIGZ1dGlsZSB3aXRob3V0IGFuIGFjdHVhbCBwaWVjZSBvZiBoYXJkd2FyZSB0byByZXNwb25kLgoKV2FpdCBhIHNlY29uZC4uLiBhbmQgdGhpcyBpcyBhbiBpbXBvcnRhbnQgcG9pbnQuLi4gc3l6a2FsbGVyLCBhcyBmYXIgYXMgSSB1bmRlcnN0YW5kLCBkb2VzbiYjMzk7dCBlbXVsYXRlIFNQSSBkZXZpY2VzLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIElmIGl0IGRvZXNuJiMzOTt0LCB0aGF0IG1lYW5zIEkgbmVlZCB0byBhZGp1c3QgbXkgYXBwcm9hY2guIFRoZSBrZXkgbmV4dCBzdGVwIHRoZW4sIGlzIHRvIGZpZ3VyZSBvdXQgKndobyogZWxzZSBpcyB1c2luZyB0aGUgYG9hX3RjNl9pbml0YCBmdW5jdGlvbi4gVGhhdCYjMzk7cyB0aGUgbmV4dCBhdmVudWUgdG8gZXhwbG9yZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYV90YzZfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb2EtdGM2LWZyYW1ld29yay5yc3Q9NDU0PVRoZSBpbmNsdWRlL2xpbnV4L29hX3RjNi5oIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb2EtdGM2LWZyYW1ld29yay5yc3QtNDU1LVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0OjQ1NjouLiBjOmZ1bmN0aW9uOjogc3RydWN0IG9hX3RjNiAqb2FfdGM2X2luaXQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgXFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdC00NTctICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jPTMzMz1zdGF0aWMgaW50IGxhbjg2NXhfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmMtMzQ4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jOjM0OTpcdHByaXYtXHUwMDNldGM2ID0gb2FfdGM2X2luaXQoc3BpLCBuZXRkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jLTM1MC1cdGlmICghcHJpdi1cdTAwM2V0YzYpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYz0xMzkzPUVYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl9zdGFydF94bWl0KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy0xMzk1LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmM6MTM5NjogKiBvYV90YzZfaW5pdCAtIGFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgb2FfdGM2IHN0cnVjdHVyZS5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTEzOTctICogQHNwaTogZGV2aWNlIHdpdGggd2hpY2ggZGF0YSB3aWxsIGJlIGV4Y2hhbmdlZC5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy0xNDAyLSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmM6MTQwMzpzdHJ1Y3Qgb2FfdGM2ICpvYV90YzZfaW5pdChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMtMTQwNC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMtMTUwNy19XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYzoxNTA4OkVYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl9pbml0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTE1MDktXG4tLVxuaW5jbHVkZS9saW51eC9vYV90YzYuaD0xMz1zdHJ1Y3Qgb2FfdGM2O1xuaW5jbHVkZS9saW51eC9vYV90YzYuaC0xNC1cbmluY2x1ZGUvbGludXgvb2FfdGM2Lmg6MTU6c3RydWN0IG9hX3RjNiAqb2FfdGM2X2luaXQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XG5pbmNsdWRlL2xpbnV4L29hX3RjNi5oLTE2LXZvaWQgb2FfdGM2X2V4aXQoc3RydWN0IG9hX3RjNiAqdGM2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjEzOAoJCQkJCQkJb3V0cHV0OiA1MgoJCQkJCQkJdGhvdWdodHM6IDMxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXp6aW5nIFdvcnRoaW5lc3MqKgoKT2theSwgc28gdGhpcyBjb2RlIHBhdGggaXMgZXhjbHVzaXZlbHkgdGllZCB0byB0aGUgYGxhbjg2NXhgIGRyaXZlci4gVGhhdCYjMzk7cyBhIHNwZWNpZmljIFNQSSBkcml2ZXIgZm9yIGEgTUFDLVBIWS4gU2luY2Ugd2UmIzM5O3JlIG5vdCBlbXVsYXRpbmcgdGhhdCBoYXJkd2FyZSDigJMgbmVpdGhlciBpbiBHQ0Ugbm9yIFFFTVUg4oCTIHRob3NlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gYW55IG9mIG15IHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzLiBNeSBpbml0aWFsIGluY2xpbmF0aW9uIGlzIHRoYXQgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuCgpCdXQgaG9sZCBvbiwgbGV0IG1lIHF1aWNrbHkgdGhpbmsgdGhpcyB0aHJvdWdoLiBDYW4gc3l6a2FsbGVyIHNvbWVob3cgaW5qZWN0IFNQSSB0cmFmZmljPyBJIGtub3cgaXQgY2FuIGRvIFVTQiBhbmQgUENJICh0aHJvdWdoIGVtdWxhdGVkIGRldmljZXMgb3IgZGlyZWN0bHkgdmlhIHJhdyBQQ0kgY29uZmlnIHNwYWNlKSwgYnV0IFNQSSBpcyBkaWZmZXJlbnQuIFNQSSBuZWVkcyBhIG1hc3RlciBjb250cm9sbGVyLCBhbmQgdGhlIGBsYW44NjV4YCBkZXZpY2UgaXMgYSBzbGF2ZS4gV2l0aG91dCBib3RoIGFuIGVtdWxhdGVkIFNQSSBjb250cm9sbGVyICphbmQqIHRoZSBlbXVsYXRlZCBgbGFuODY1eGAgZGV2aWNlIGl0c2VsZiwgdGhlIGRyaXZlciYjMzk7cyBwcm9iZSBmdW5jdGlvbiB3aWxsIG5ldmVyIGV2ZW4gZ2V0IGNhbGxlZC4KCkV2ZW4gaWYgSSBjb3VsZCBzb21laG93IGZvcmNlIHRoZSBTUEkgZGV2aWNlIGluc3RhbnRpYXRpb24g4oCTIG1heWJlIHRocm91Z2ggc3lzZnMsIGNvbmZpZ2ZzIChpZiBzdXBwb3J0ZWQpLCBvciBhIGRldmljZSB0cmVlIG92ZXJsYXkg4oCTIHRoZSBTUEkgdHJhbnNmZXJzIHdvdWxkIGluZXZpdGFibHkgZmFpbCBvciB0aW1lb3V0LiBUaGVyZSYjMzk7cyBzaW1wbHkgbm8gaGFyZHdhcmUgcmVzcG9uZGluZyB0byB0aGUgU1BJIG1lc3NhZ2VzLiBUaGUgYG9hX3RjNmAgZnJhbWV3b3JrIGNvbW11bmljYXRlcyBvdmVyIFNQSSB1c2luZyBgc3BpX3N5bmNgIG9yIGBzcGlfYXN5bmNgLiBXaXRob3V0IGhhcmR3YXJlLCBgc3BpX3N5bmNgIGlzIGxpa2VseSB0byBlaXRoZXIgcmV0dXJuIGFuIGVycm9yIG9yIHNpbGVudGx5IHNlbmQgZGF0YSBpbnRvIHRoZSB2b2lkLCByZXR1cm5pbmcgZWl0aGVyIGFsbCB6ZXJvcyBvciBvbmVzLiBCdXQsIGFuZCB0aGlzIGlzIHRoZSBjcnV4IG9mIGl0LCB0byBldmVuICpnZXQqIHRvIHRoYXQgcG9pbnQsIHRoZSBgbGFuODY1eF9wcm9iZWAgZnVuY3Rpb24gaGFzIHRvIHN1Y2NlZWQuCgpBbHJpZ2h0LCB0aW1lIHRvIGV4YW1pbmUgYGxhbjg2NXhfcHJvYmVgIGNsb3NlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzMzOlx0c3RhdGljIGludCBsYW44NjV4X3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXG4gMzM0Olx0e1xuIDMzNTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiAzMzY6XHRcdHN0cnVjdCBsYW44NjV4X3ByaXYgKnByaXY7XG4gMzM3Olx0XHRpbnQgcmV0O1xuIDMzODpcdFxuIDMzOTpcdFx0bmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBsYW44NjV4X3ByaXYpKTtcbiAzNDA6XHRcdGlmICghbmV0ZGV2KVxuIDM0MTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAzNDI6XHRcbiAzNDM6XHRcdHByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIDM0NDpcdFx0cHJpdi1cdTAwM2VuZXRkZXYgPSBuZXRkZXY7XG4gMzQ1Olx0XHRwcml2LVx1MDAzZXNwaSA9IHNwaTtcbiAzNDY6XHRcdHNwaV9zZXRfZHJ2ZGF0YShzcGksIHByaXYpO1xuIDM0NzpcdFx0SU5JVF9XT1JLKFx1MDAyNnByaXYtXHUwMDNlbXVsdGljYXN0X3dvcmssIGxhbjg2NXhfbXVsdGljYXN0X3dvcmtfaGFuZGxlcik7XG4gMzQ4Olx0XG4gMzQ5Olx0XHRwcml2LVx1MDAzZXRjNiA9IG9hX3RjNl9pbml0KHNwaSwgbmV0ZGV2KTtcbiAzNTA6XHRcdGlmICghcHJpdi1cdTAwM2V0YzYpIHtcbiAzNTE6XHRcdFx0cmV0ID0gLUVOT0RFVjtcbiAzNTI6XHRcdFx0Z290byBmcmVlX25ldGRldjtcbiAzNTM6XHRcdH1cbiAzNTQ6XHRcbiAzNTU6XHRcdC8qIExBTjg2NXggUmV2LkIwL0IxIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBmcm9tIEFOMTc2MFxuIDM1NjpcdFx0ICogQXMgcGVyIHRoZSBDb25maWd1cmF0aW9uIEFwcGxpY2F0aW9uIE5vdGUgQU4xNzYwIHB1Ymxpc2hlZCBpbiB0aGVcbiAzNTc6XHRcdCAqIGxpbmssIGh0dHBzOi8vd3d3Lm1pY3JvY2hpcC5jb20vZW4tdXMvYXBwbGljYXRpb24tbm90ZXMvYW4xNzYwXG4gMzU4Olx0XHQgKiBSZXZpc2lvbiBGIChEUzYwMDAxNzYwRyAtIEp1bmUgMjAyNCksIGNvbmZpZ3VyZSB0aGUgTUFDIHRvIHNldCB0aW1lXG4gMzU5Olx0XHQgKiBzdGFtcGluZyBhdCB0aGUgZW5kIG9mIHRoZSBTdGFydCBvZiBGcmFtZSBEZWxpbWl0ZXIgKFNGRCkgYW5kIHNldCB0aGVcbiAzNjA6XHRcdCAqIFRpbWVyIEluY3JlbWVudCByZWcgdG8gNDAgbnMgdG8gYmUgdXNlZCBhcyBhIDI1IE1IeiBpbnRlcm5hbCBjbG9jay5cbiAzNjE6XHRcdCAqL1xuIDM2MjpcdFx0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHByaXYtXHUwMDNldGM2LCBMQU44NjVYX1JFR19NQUNfVFNVX1RJTUVSX0lOQ1IsXG4gMzYzOlx0XHRcdFx0XHQgICAgTUFDX1RTVV9USU1FUl9JTkNSX0NPVU5UX05BTk9TRUNPTkRTKTtcbiAzNjQ6XHRcdGlmIChyZXQpIHtcbiAzNjU6XHRcdFx0ZGV2X2VycihcdTAwMjZzcGktXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gY29uZmlnIFRTVSBUaW1lciBJbmNyIHJlZzogJWRcXG5cJiMzNDssXG4gMzY2Olx0XHRcdFx0cmV0KTtcbiAzNjc6XHRcdFx0Z290byBvYV90YzZfZXhpdDtcbiAzNjg6XHRcdH1cbiAzNjk6XHRcbiAzNzA6XHRcdC8qIEFzIHBlciB0aGUgcG9pbnQgczMgaW4gdGhlIGJlbG93IGVycmF0YSwgU1BJIHJlY2VpdmUgRXRoZXJuZXQgZnJhbWVcbiAzNzE6XHRcdCAqIHRyYW5zZmVyIG1heSBoYWx0IHdoZW4gc3RhcnRpbmcgdGhlIG5leHQgZnJhbWUgaW4gdGhlIHNhbWUgZGF0YSBibG9ja1xuIDM3MjpcdFx0ICogKGNodW5rKSBhcyB0aGUgZW5kIG9mIGEgcHJldmlvdXMgZnJhbWUuIFRoZSBSRkEgZmllbGQgc2hvdWxkIGJlXG4gMzczOlx0XHQgKiBjb25maWd1cmVkIHRvIDAxYiBvciAxMGIgZm9yIHByb3BlciBvcGVyYXRpb24uIEluIHRoZXNlIG1vZGVzLCBvbmx5XG4gMzc0Olx0XHQgKiBvbmUgcmVjZWl2ZSBFdGhlcm5ldCBmcmFtZSB3aWxsIGJlIHBsYWNlZCBpbiBhIHNpbmdsZSBkYXRhIGJsb2NrLlxuIDM3NTpcdFx0ICogV2hlbiB0aGUgUkZBIGZpZWxkIGlzIHdyaXR0ZW4gdG8gMDFiLCByZWNlaXZlZCBmcmFtZXMgd2lsbCBiZSBmb3JjZWRcbiAzNzY6XHRcdCAqIHRvIG9ubHkgc3RhcnQgaW4gdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGRhdGEgYmxvY2sgcGF5bG9hZCAoU1dPPTApLiBBc1xuIDM3NzpcdFx0ICogcmVjb21tZW5kZWQsIGVuYWJsZSB6ZXJvIGFsaWduIHJlY2VpdmUgZnJhbWUgZmVhdHVyZSBmb3IgcHJvcGVyXG4gMzc4Olx0XHQgKiBvcGVyYXRpb24uXG4gMzc5Olx0XHQgKlxuIDM4MDpcdFx0ICogaHR0cHM6Ly93dzEubWljcm9jaGlwLmNvbS9kb3dubG9hZHMvYWVtRG9jdW1lbnRzL2RvY3VtZW50cy9BSVMvUHJvZHVjdERvY3VtZW50cy9FcnJhdGEvTEFOODY1MC0xLUVycmF0YS04MDAwMTA3NS5wZGZcbiAzODE6XHRcdCAqL1xuIDM4MjpcdFx0cmV0ID0gb2FfdGM2X3plcm9fYWxpZ25fcmVjZWl2ZV9mcmFtZV9lbmFibGUocHJpdi1cdTAwM2V0YzYpO1xuIDM4MzpcdFx0aWYgKHJldCkge1xuIDM4NDpcdFx0XHRkZXZfZXJyKFx1MDAyNnNwaS1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byBzZXQgWkFSRkU6ICVkXFxuXCYjMzQ7LCByZXQpO1xuIDM4NTpcdFx0XHRnb3RvIG9hX3RjNl9leGl0O1xuIDM4NjpcdFx0fVxuIDM4NzpcdFxuIDM4ODpcdFx0LyogR2V0IHRoZSBNQUMgYWRkcmVzcyBmcm9tIHRoZSBTUEkgZGV2aWNlIHRyZWUgbm9kZSAqL1xuIDM4OTpcdFx0aWYgKGRldmljZV9nZXRfZXRoZGV2X2FkZHJlc3MoXHUwMDI2c3BpLVx1MDAzZWRldiwgbmV0ZGV2KSlcbiAzOTA6XHRcdFx0ZXRoX2h3X2FkZHJfcmFuZG9tKG5ldGRldik7XG4gMzkxOlx0XG4gMzkyOlx0XHRyZXQgPSBsYW44NjV4X3NldF9od19tYWNhZGRyKHByaXYsIG5ldGRldi1cdTAwM2VkZXZfYWRkcik7XG4gMzkzOlx0XHRpZiAocmV0KSB7XG4gMzk0Olx0XHRcdGRldl9lcnIoXHUwMDI2c3BpLVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIGNvbmZpZ3VyZSBNQUM6ICVkXFxuXCYjMzQ7LCByZXQpO1xuIDM5NTpcdFx0XHRnb3RvIG9hX3RjNl9leGl0O1xuIDM5NjpcdFx0fVxuIDM5NzpcdFxuIDM5ODpcdFx0bmV0ZGV2LVx1MDAzZWlmX3BvcnQgPSBJRl9QT1JUXzEwQkFTRVQ7XG4gMzk5Olx0XHRuZXRkZXYtXHUwMDNlaXJxID0gc3BpLVx1MDAzZWlycTtcbiA0MDA6XHRcdG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2bGFuODY1eF9uZXRkZXZfb3BzO1xuIDQwMTpcdFx0bmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2bGFuODY1eF9ldGh0b29sX29wcztcbiA0MDI6XHRcbiA0MDM6XHRcdHJldCA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpO1xuIDQwNDpcdFx0aWYgKHJldCkge1xuIDQwNTpcdFx0XHRkZXZfZXJyKFx1MDAyNnNwaS1cdTAwM2VkZXYsIFwmIzM0O1JlZ2lzdGVyIG5ldGRldiBmYWlsZWQgKHJldCA9ICVkKVwmIzM0OywgcmV0KTtcbiA0MDY6XHRcdFx0Z290byBvYV90YzZfZXhpdDtcbiA0MDc6XHRcdH1cbiA0MDg6XHRcbiA0MDk6XHRcdHJldHVybiAwO1xuIDQxMDpcdFxuIDQxMTpcdG9hX3RjNl9leGl0OlxuIDQxMjpcdFx0b2FfdGM2X2V4aXQocHJpdi1cdTAwM2V0YzYpO1xuIDQxMzpcdGZyZWVfbmV0ZGV2OlxuIDQxNDpcdFx0ZnJlZV9uZXRkZXYocHJpdi1cdTAwM2VuZXRkZXYpO1xuIDQxNTpcdFx0cmV0dXJuIHJldDtcbiA0MTY6XHR9XG4gNDE3Olx0XG4gNDE4Olx0c3RhdGljIHZvaWQgbGFuODY1eF9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSlcbiA0MTk6XHR7XG4gNDIwOlx0XHRzdHJ1Y3QgbGFuODY1eF9wcml2ICpwcml2ID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7XG4gNDIxOlx0XG4gNDIyOlx0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnByaXYtXHUwMDNlbXVsdGljYXN0X3dvcmspO1xuIDQyMzpcdFx0dW5yZWdpc3Rlcl9uZXRkZXYocHJpdi1cdTAwM2VuZXRkZXYpO1xuIDQyNDpcdFx0b2FfdGM2X2V4aXQocHJpdi1cdTAwM2V0YzYpO1xuIDQyNTpcdFx0ZnJlZV9uZXRkZXYocHJpdi1cdTAwM2VuZXRkZXYpO1xuIDQyNjpcdH1cbiA0Mjc6XHRcbiA0Mjg6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9kZXZpY2VfaWQgbGFuODY1eF9pZHNbXSA9IHtcbiA0Mjk6XHRcdHsgLm5hbWUgPSBcJiMzNDtsYW44NjUwXCYjMzQ7IH0sXG4gNDMwOlx0XHR7IC5uYW1lID0gXCYjMzQ7bGFuODY1MVwmIzM0OyB9LFxuIDQzMTpcdFx0e30sXG4gNDMyOlx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1ODUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTEFOODY1eCBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgYGxhbjg2NXhfcHJvYmVgIGZ1bmN0aW9uIGlzIGNhbGxpbmcgYG9hX3RjNl9pbml0YC4gIFRoZW4sIHJpZ2h0IGFmdGVyIHRoYXQsIHdlJiMzOTt2ZSBnb3QgYSBjYWxsIHRvIGBvYV90YzZfd3JpdGVfcmVnaXN0ZXJgLiAgTXkgZ3V0IGZlZWxpbmcgaXMgc3RhcnRpbmcgdG8ga2ljayBpbi4uLiAgaWYgd2UmIzM5O3JlIG1pc3NpbmcgdGhlIHBoeXNpY2FsIGhhcmR3YXJlLCB0aGF0IGBvYV90YzZfd3JpdGVfcmVnaXN0ZXJgIGlzIHByb2JhYmx5IHdoZXJlIHRoaW5ncyBhcmUgZ29pbmcgdG8gZmFsbCBhcGFydC4gSXTigJlzIG1ha2luZyBTUEkgdHJhbnNmZXJzLCBhbmQgb2YgY291cnNlLCBpdOKAmXMgZ29pbmcgdG8gZXhwZWN0IHNvbWUgc29ydCBvZiB2YWxpZCByZXNwb25zZSBiYWNrLiBUaGF0JiMzOTtzIHRoZSB0eXBpY2FsIGJlaGF2aW9yLgoKSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLiBCZWZvcmUgSSBqdW1wIHRvIGFueSBjb25jbHVzaW9ucywgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGhvdyBgb2FfdGM2X3dyaXRlX3JlZ2lzdGVyYCBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogSSB0aGluayBpdCB3aWxsIGZhaWwuIExldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWFraW5nIGFueSBhc3N1bXB0aW9ucyBoZXJlLiBUaGUgZGV0YWlscyBhcmUgY3JpdGljYWwsIGVzcGVjaWFsbHkgd2l0aCB0aGlzIGtpbmQgb2YgaGFyZHdhcmUgaW50ZXJhY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgZnVuY3Rpb24gZG9lc24mIzM5O3QgaGF2ZSBzb21lIGtpbmQgb2Ygc2FmZWd1YXJkIGJ1aWx0IGludG8gaXQuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7XG4gICAyOlx0LypcbiAgIDM6XHQgKiBPUEVOIEFsbGlhbmNlIDEwQkFTReKAkVQxeCBNQUPigJFQSFkgU2VyaWFsIEludGVyZmFjZSBmcmFtZXdvcmtcbiAgIDQ6XHQgKlxuICAgNTpcdCAqIEF1dGhvcjogUGFydGhpYmFuIFZlZXJhc29vcmFuIFx1MDAzY3BhcnRoaWJhbi52ZWVyYXNvb3JhbkBtaWNyb2NoaXAuY29tXHUwMDNlXG4gICA2Olx0ICovXG4gICA3Olx0XG4gICA4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuICAgOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9sbC5oXHUwMDNlXG4gIDEwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbiAgMTE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvLmhcdTAwM2VcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L29hX3RjNi5oXHUwMDNlXG4gIDE0Olx0XG4gIDE1Olx0LyogT1BFTiBBbGxpYW5jZSBUQzYgcmVnaXN0ZXJzICovXG4gIDE2Olx0LyogU3RhbmRhcmQgQ2FwYWJpbGl0aWVzIFJlZ2lzdGVyICovXG4gIDE3Olx0I2RlZmluZSBPQV9UQzZfUkVHX1NURENBUFx0XHRcdDB4MDAwMlxuICAxODpcdCNkZWZpbmUgU1REQ0FQX0RJUkVDVF9QSFlfUkVHX0FDQ0VTU1x0XHRCSVQoOClcbiAgMTk6XHRcbiAgMjA6XHQvKiBSZXNldCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi9cbiAgMjE6XHQjZGVmaW5lIE9BX1RDNl9SRUdfUkVTRVRcdFx0XHQweDAwMDNcbiAgMjI6XHQjZGVmaW5lIFJFU0VUX1NXUkVTRVRcdFx0XHRcdEJJVCgwKVx0LyogU29mdHdhcmUgUmVzZXQgKi9cbiAgMjM6XHRcbiAgMjQ6XHQvKiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICMwICovXG4gIDI1Olx0I2RlZmluZSBPQV9UQzZfUkVHX0NPTkZJRzBcdFx0XHQweDAwMDRcbiAgMjY6XHQjZGVmaW5lIENPTkZJRzBfU1lOQ1x0XHRcdFx0QklUKDE1KVxuICAyNzpcdCNkZWZpbmUgQ09ORklHMF9aQVJGRV9FTkFCTEVcdFx0XHRCSVQoMTIpXG4gIDI4Olx0XG4gIDI5Olx0LyogU3RhdHVzIFJlZ2lzdGVyICMwICovXG4gIDMwOlx0I2RlZmluZSBPQV9UQzZfUkVHX1NUQVRVUzBcdFx0XHQweDAwMDhcbiAgMzE6XHQjZGVmaW5lIFNUQVRVUzBfUkVTRVRDXHRcdFx0XHRCSVQoNilcdC8qIFJlc2V0IENvbXBsZXRlICovXG4gIDMyOlx0I2RlZmluZSBTVEFUVVMwX0hFQURFUl9FUlJPUlx0XHRcdEJJVCg1KVxuICAzMzpcdCNkZWZpbmUgU1RBVFVTMF9MT1NTX09GX0ZSQU1FX0VSUk9SXHRcdEJJVCg0KVxuICAzNDpcdCNkZWZpbmUgU1RBVFVTMF9SWF9CVUZGRVJfT1ZFUkZMT1dfRVJST1JcdEJJVCgzKVxuICAzNTpcdCNkZWZpbmUgU1RBVFVTMF9UWF9QUk9UT0NPTF9FUlJPUlx0XHRCSVQoMClcbiAgMzY6XHRcbiAgMzc6XHQvKiBCdWZmZXIgU3RhdHVzIFJlZ2lzdGVyICovXG4gIDM4Olx0I2RlZmluZSBPQV9UQzZfUkVHX0JVRkZFUl9TVEFUVVNcdFx0MHgwMDBCXG4gIDM5Olx0I2RlZmluZSBCVUZGRVJfU1RBVFVTX1RYX0NSRURJVFNfQVZBSUxBQkxFXHRHRU5NQVNLKDE1LCA4KVxuICA0MDpcdCNkZWZpbmUgQlVGRkVSX1NUQVRVU19SWF9DSFVOS1NfQVZBSUxBQkxFXHRHRU5NQVNLKDcsIDApXG4gIDQxOlx0XG4gIDQyOlx0LyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgIzAgKi9cbiAgNDM6XHQjZGVmaW5lIE9BX1RDNl9SRUdfSU5UX01BU0swXHRcdFx0MHgwMDBDXG4gIDQ0Olx0I2RlZmluZSBJTlRfTUFTSzBfSEVBREVSX0VSUl9NQVNLXHRcdEJJVCg1KVxuICA0NTpcdCNkZWZpbmUgSU5UX01BU0swX0xPU1NfT0ZfRlJBTUVfRVJSX01BU0tcdEJJVCg0KVxuICA0NjpcdCNkZWZpbmUgSU5UX01BU0swX1JYX0JVRkZFUl9PVkVSRkxPV19FUlJfTUFTS1x0QklUKDMpXG4gIDQ3Olx0I2RlZmluZSBJTlRfTUFTSzBfVFhfUFJPVE9DT0xfRVJSX01BU0tcdFx0QklUKDApXG4gIDQ4Olx0I2RlZmluZSBJTlRfTUFTSzBfQUxMX0lOVEVSUlVQVFMgICAgICAgICAgICAgICAgKEdFTk1BU0soNSwgMCkgfCBcXFxuICA0OTpcdFx0XHRcdFx0XHRcdCBHRU5NQVNLKDEyLCA3KSlcbiAgNTA6XHRcbiAgNTE6XHQvKiBQSFkgQ2xhdXNlIDIyIHJlZ2lzdGVycyBiYXNlIGFkZHJlc3MgYW5kIG1hc2sgKi9cbiAgNTI6XHQjZGVmaW5lIE9BX1RDNl9QSFlfU1REX1JFR19BRERSX0JBU0VcdFx0MHhGRjAwXG4gIDUzOlx0I2RlZmluZSBPQV9UQzZfUEhZX1NURF9SRUdfQUREUl9NQVNLXHRcdDB4MUZcbiAgNTQ6XHRcbiAgNTU6XHQvKiBDb250cm9sIGNvbW1hbmQgaGVhZGVyICovXG4gIDU2Olx0I2RlZmluZSBPQV9UQzZfQ1RSTF9IRUFERVJfREFUQV9OT1RfQ1RSTFx0QklUKDMxKVxuICA1NzpcdCNkZWZpbmUgT0FfVEM2X0NUUkxfSEVBREVSX1dSSVRFX05PVF9SRUFEXHRCSVQoMjkpXG4gIDU4Olx0I2RlZmluZSBPQV9UQzZfQ1RSTF9IRUFERVJfTUVNX01BUF9TRUxFQ1RPUlx0R0VOTUFTSygyNywgMjQpXG4gIDU5Olx0I2RlZmluZSBPQV9UQzZfQ1RSTF9IRUFERVJfQUREUlx0XHRcdEdFTk1BU0soMjMsIDgpXG4gIDYwOlx0I2RlZmluZSBPQV9UQzZfQ1RSTF9IRUFERVJfTEVOR1RIXHRcdEdFTk1BU0soNywgMSlcbiAgNjE6XHQjZGVmaW5lIE9BX1RDNl9DVFJMX0hFQURFUl9QQVJJVFlcdFx0QklUKDApXG4gIDYyOlx0XG4gIDYzOlx0LyogRGF0YSBoZWFkZXIgKi9cbiAgNjQ6XHQjZGVmaW5lIE9BX1RDNl9EQVRBX0hFQURFUl9EQVRBX05PVF9DVFJMXHRCSVQoMzEpXG4gIDY1Olx0I2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfREFUQV9WQUxJRFx0XHRCSVQoMjEpXG4gIDY2Olx0I2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfU1RBUlRfVkFMSURcdFx0QklUKDIwKVxuICA2NzpcdCNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX1NUQVJUX1dPUkRfT0ZGU0VUXHRHRU5NQVNLKDE5LCAxNilcbiAgNjg6XHQjZGVmaW5lIE9BX1RDNl9EQVRBX0hFQURFUl9FTkRfVkFMSURcdFx0QklUKDE0KVxuICA2OTpcdCNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX0VORF9CWVRFX09GRlNFVFx0R0VOTUFTSygxMywgOClcbiAgNzA6XHQjZGVmaW5lIE9BX1RDNl9EQVRBX0hFQURFUl9QQVJJVFlcdFx0QklUKDApXG4gIDcxOlx0XG4gIDcyOlx0LyogRGF0YSBmb290ZXIgKi9cbiAgNzM6XHQjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9FWFRFTkRFRF9TVFNcdFx0QklUKDMxKVxuICA3NDpcdCNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX1JYRF9IRUFERVJfQkFEXHRCSVQoMzApXG4gIDc1Olx0I2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfQ09ORklHX1NZTkNcdFx0QklUKDI5KVxuICA3NjpcdCNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX1JYX0NIVU5LU1x0XHRHRU5NQVNLKDI4LCAyNClcbiAgNzc6XHQjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9EQVRBX1ZBTElEXHRcdEJJVCgyMSlcbiAgNzg6XHQjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9TVEFSVF9WQUxJRFx0XHRCSVQoMjApXG4gIDc5Olx0I2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfU1RBUlRfV09SRF9PRkZTRVRcdEdFTk1BU0soMTksIDE2KVxuICA4MDpcdCNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX0VORF9WQUxJRFx0XHRCSVQoMTQpXG4gIDgxOlx0I2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfRU5EX0JZVEVfT0ZGU0VUXHRHRU5NQVNLKDEzLCA4KVxuICA4MjpcdCNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX1RYX0NSRURJVFNcdFx0R0VOTUFTSyg1LCAxKVxuICA4MzpcdFxuICA4NDpcdC8qIFBIWSDigJMgQ2xhdXNlIDQ1IHJlZ2lzdGVycyBtZW1vcnkgbWFwIHNlbGVjdG9yIChNTVMpIGFzIHBlciB0YWJsZSA2IGluIHRoZVxuICA4NTpcdCAqIE9QRU4gQWxsaWFuY2Ugc3BlY2lmaWNhdGlvbi5cbiAgODY6XHQgKi9cbiAgODc6XHQjZGVmaW5lIE9BX1RDNl9QSFlfQzQ1X1BDU19NTVMyXHRcdFx0Mlx0LyogTU1EIDMgKi9cbiAgODg6XHQjZGVmaW5lIE9BX1RDNl9QSFlfQzQ1X1BNQV9QTURfTU1TM1x0XHQzXHQvKiBNTUQgMSAqL1xuICA4OTpcdCNkZWZpbmUgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0XHRcdDRcdC8qIE1NRCAzMSAqL1xuICA5MDpcdCNkZWZpbmUgT0FfVEM2X1BIWV9DNDVfQVVUT19ORUdfTU1TNVx0XHQ1XHQvKiBNTUQgNyAqL1xuICA5MTpcdCNkZWZpbmUgT0FfVEM2X1BIWV9DNDVfUE9XRVJfVU5JVF9NTVM2XHRcdDZcdC8qIE1NRCAxMyAqL1xuICA5MjpcdFxuICA5MzpcdCNkZWZpbmUgT0FfVEM2X0NUUkxfSEVBREVSX1NJWkVcdFx0XHQ0XG4gIDk0Olx0I2RlZmluZSBPQV9UQzZfQ1RSTF9SRUdfVkFMVUVfU0laRVx0XHQ0XG4gIDk1Olx0I2RlZmluZSBPQV9UQzZfQ1RSTF9JR05PUkVEX1NJWkVcdFx0NFxuICA5NjpcdCNkZWZpbmUgT0FfVEM2X0NUUkxfTUFYX1JFR0lTVEVSU1x0XHQxMjhcbiAgOTc6XHQjZGVmaW5lIE9BX1RDNl9DVFJMX1NQSV9CVUZfU0laRVx0XHQoT0FfVEM2X0NUUkxfSEVBREVSX1NJWkUgJiM0MztcXFxuICA5ODpcdFx0XHRcdFx0XHRcdChPQV9UQzZfQ1RSTF9NQVhfUkVHSVNURVJTICpcXFxuICA5OTpcdFx0XHRcdFx0XHRcdE9BX1RDNl9DVFJMX1JFR19WQUxVRV9TSVpFKSAmIzQzO1xcXG4gMTAwOlx0XHRcdFx0XHRcdFx0T0FfVEM2X0NUUkxfSUdOT1JFRF9TSVpFKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzAzMQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgYG9hX3RjNmAgU1BJIERyaXZlciBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyB0aGUgYG9hX3RjNmAgZnJhbWV3b3JrIGlzIGEgKnB1cmUqIFNQSSBkcml2ZXIsIHdoaWNoIGltbWVkaWF0ZWx5IG5hcnJvd3MgZG93biBpdHMgYmVoYXZpb3IuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93IOKAkyBpdCYjMzk7cyBnb2luZyB0byBiZSBmdW5kYW1lbnRhbGx5IHJlbGlhbnQgb24gU1BJIGNvbW11bmljYXRpb24sIG5vIGhpZGRlbiBjb21wbGV4aXRpZXMuIE5vdywgaWYgSSYjMzk7bSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LCB3aXRob3V0IGFueSBhY3R1YWwgaGFyZHdhcmUgcHJlc2VudCwgYG9hX3RjNl9pbml0YCBpcyAqYm91bmQqIHRvIGhpdCBhIHNuYWcgcHJldHR5IGVhcmx5IG9uLiBUaGUgd2hvbGUgcG9pbnQgb2YgaW5pdGlhbGl6YXRpb24gaXMgdG8gZXN0YWJsaXNoIGEgY29ubmVjdGlvbiB0byBoYXJkd2FyZSwgYW5kIGEgY2hlY2sgbGlrZSBgb2FfdGM2X2NoZWNrX3N0YXR1c2AsIG9yIHNvbWV0aGluZyBlcXVpdmFsZW50LCBpcyBnb2luZyB0byBiZSB0aGUgc21va2luZyBndW4uIEl0JiMzOTtzIGdvaW5nIHRvIHRyeSB0byByZWFkIHRob3NlIFNQSSByZWdpc3RlcnMsIGFuZCB0aGUgbGFjayBvZiBhIHJlc3BvbnNlLCBvciBhbiB1bmV4cGVjdGVkIHJlc3BvbnNlLCB3aWxsIHRyaWdnZXIgYSBmYWlsdXJlLiBUaGlzIGxhY2sgb2YgaGFyZHdhcmUgaXMgZ29pbmcgdG8gYmUgdGhlIGNyaXRpY2FsIGZhY3RvciBpbiBkZXRlcm1pbmluZyBpdHMgc3VjY2VzcyBvciBmYWlsdXJlLiBBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBvYV90YzZfaW5pdGAgYW5kIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQwMDpcdCAqIFJldHVybjogcG9pbnRlciByZWZlcmVuY2UgdG8gdGhlIG9hX3RjNiBzdHJ1Y3R1cmUgaWYgdGhlIE1BQy1QSFlcbjE0MDE6XHQgKiBpbml0aWFsaXphdGlvbiBpcyBzdWNjZXNzZnVsIG90aGVyd2lzZSBOVUxMLlxuMTQwMjpcdCAqL1xuMTQwMzpcdHN0cnVjdCBvYV90YzYgKm9hX3RjNl9pbml0KHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4xNDA0Olx0e1xuMTQwNTpcdFx0c3RydWN0IG9hX3RjNiAqdGM2O1xuMTQwNjpcdFx0aW50IHJldDtcbjE0MDc6XHRcbjE0MDg6XHRcdHRjNiA9IGRldm1fa3phbGxvYyhcdTAwMjZzcGktXHUwMDNlZGV2LCBzaXplb2YoKnRjNiksIEdGUF9LRVJORUwpO1xuMTQwOTpcdFx0aWYgKCF0YzYpXG4xNDEwOlx0XHRcdHJldHVybiBOVUxMO1xuMTQxMTpcdFxuMTQxMjpcdFx0dGM2LVx1MDAzZXNwaSA9IHNwaTtcbjE0MTM6XHRcdHRjNi1cdTAwM2VuZXRkZXYgPSBuZXRkZXY7XG4xNDE0Olx0XHRTRVRfTkVUREVWX0RFVihuZXRkZXYsIFx1MDAyNnNwaS1cdTAwM2VkZXYpO1xuMTQxNTpcdFx0bXV0ZXhfaW5pdChcdTAwMjZ0YzYtXHUwMDNlc3BpX2N0cmxfbG9jayk7XG4xNDE2Olx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZ0YzYtXHUwMDNldHhfc2tiX2xvY2spO1xuMTQxNzpcdFxuMTQxODpcdFx0LyogU2V0IHRoZSBTUEkgY29udHJvbGxlciB0byBwdW1wIGF0IHJlYWx0aW1lIHByaW9yaXR5ICovXG4xNDE5Olx0XHR0YzYtXHUwMDNlc3BpLVx1MDAzZXJ0ID0gdHJ1ZTtcbjE0MjA6XHRcdGlmIChzcGlfc2V0dXAodGM2LVx1MDAzZXNwaSkgXHUwMDNjIDApXG4xNDIxOlx0XHRcdHJldHVybiBOVUxMO1xuMTQyMjpcdFxuMTQyMzpcdFx0dGM2LVx1MDAzZXNwaV9jdHJsX3R4X2J1ZiA9IGRldm1fa3phbGxvYyhcdTAwMjZ0YzYtXHUwMDNlc3BpLVx1MDAzZWRldixcbjE0MjQ6XHRcdFx0XHRcdFx0ICAgIE9BX1RDNl9DVFJMX1NQSV9CVUZfU0laRSxcbjE0MjU6XHRcdFx0XHRcdFx0ICAgIEdGUF9LRVJORUwpO1xuMTQyNjpcdFx0aWYgKCF0YzYtXHUwMDNlc3BpX2N0cmxfdHhfYnVmKVxuMTQyNzpcdFx0XHRyZXR1cm4gTlVMTDtcbjE0Mjg6XHRcbjE0Mjk6XHRcdHRjNi1cdTAwM2VzcGlfY3RybF9yeF9idWYgPSBkZXZtX2t6YWxsb2MoXHUwMDI2dGM2LVx1MDAzZXNwaS1cdTAwM2VkZXYsXG4xNDMwOlx0XHRcdFx0XHRcdCAgICBPQV9UQzZfQ1RSTF9TUElfQlVGX1NJWkUsXG4xNDMxOlx0XHRcdFx0XHRcdCAgICBHRlBfS0VSTkVMKTtcbjE0MzI6XHRcdGlmICghdGM2LVx1MDAzZXNwaV9jdHJsX3J4X2J1ZilcbjE0MzM6XHRcdFx0cmV0dXJuIE5VTEw7XG4xNDM0Olx0XG4xNDM1Olx0XHR0YzYtXHUwMDNlc3BpX2RhdGFfdHhfYnVmID0gZGV2bV9remFsbG9jKFx1MDAyNnRjNi1cdTAwM2VzcGktXHUwMDNlZGV2LFxuMTQzNjpcdFx0XHRcdFx0XHQgICAgT0FfVEM2X1NQSV9EQVRBX0JVRl9TSVpFLFxuMTQzNzpcdFx0XHRcdFx0XHQgICAgR0ZQX0tFUk5FTCk7XG4xNDM4Olx0XHRpZiAoIXRjNi1cdTAwM2VzcGlfZGF0YV90eF9idWYpXG4xNDM5Olx0XHRcdHJldHVybiBOVUxMO1xuMTQ0MDpcdFxuMTQ0MTpcdFx0dGM2LVx1MDAzZXNwaV9kYXRhX3J4X2J1ZiA9IGRldm1fa3phbGxvYyhcdTAwMjZ0YzYtXHUwMDNlc3BpLVx1MDAzZWRldixcbjE0NDI6XHRcdFx0XHRcdFx0ICAgIE9BX1RDNl9TUElfREFUQV9CVUZfU0laRSxcbjE0NDM6XHRcdFx0XHRcdFx0ICAgIEdGUF9LRVJORUwpO1xuMTQ0NDpcdFx0aWYgKCF0YzYtXHUwMDNlc3BpX2RhdGFfcnhfYnVmKVxuMTQ0NTpcdFx0XHRyZXR1cm4gTlVMTDtcbjE0NDY6XHRcbjE0NDc6XHRcdHJldCA9IG9hX3RjNl9zd19yZXNldF9tYWNwaHkodGM2KTtcbjE0NDg6XHRcdGlmIChyZXQpIHtcbjE0NDk6XHRcdFx0ZGV2X2VycihcdTAwMjZ0YzYtXHUwMDNlc3BpLVx1MDAzZWRldixcbjE0NTA6XHRcdFx0XHRcJiMzNDtNQUMtUEhZIHNvZnR3YXJlIHJlc2V0IGZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG4xNDUxOlx0XHRcdHJldHVybiBOVUxMO1xuMTQ1MjpcdFx0fVxuMTQ1MzpcdFxuMTQ1NDpcdFx0cmV0ID0gb2FfdGM2X3VubWFza19tYWNwaHlfZXJyb3JfaW50ZXJydXB0cyh0YzYpO1xuMTQ1NTpcdFx0aWYgKHJldCkge1xuMTQ1NjpcdFx0XHRkZXZfZXJyKFx1MDAyNnRjNi1cdTAwM2VzcGktXHUwMDNlZGV2LFxuMTQ1NzpcdFx0XHRcdFwmIzM0O01BQy1QSFkgZXJyb3IgaW50ZXJydXB0cyB1bm1hc2sgZmFpbGVkOiAlZFxcblwmIzM0OywgcmV0KTtcbjE0NTg6XHRcdFx0cmV0dXJuIE5VTEw7XG4xNDU5Olx0XHR9XG4xNDYwOlx0XG4xNDYxOlx0XHRyZXQgPSBvYV90YzZfcGh5X2luaXQodGM2KTtcbjE0NjI6XHRcdGlmIChyZXQpIHtcbjE0NjM6XHRcdFx0ZGV2X2VycihcdTAwMjZ0YzYtXHUwMDNlc3BpLVx1MDAzZWRldixcbjE0NjQ6XHRcdFx0XHRcJiMzNDtNQUMgaW50ZXJuYWwgUEhZIGluaXRpYWxpemF0aW9uIGZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG4xNDY1Olx0XHRcdHJldHVybiBOVUxMO1xuMTQ2NjpcdFx0fVxuMTQ2NzpcdFxuMTQ2ODpcdFx0cmV0ID0gb2FfdGM2X2VuYWJsZV9kYXRhX3RyYW5zZmVyKHRjNik7XG4xNDY5Olx0XHRpZiAocmV0KSB7XG4xNDcwOlx0XHRcdGRldl9lcnIoXHUwMDI2dGM2LVx1MDAzZXNwaS1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byBlbmFibGUgZGF0YSB0cmFuc2ZlcjogJWRcXG5cJiMzNDssXG4xNDcxOlx0XHRcdFx0cmV0KTtcbjE0NzI6XHRcdFx0Z290byBwaHlfZXhpdDtcbjE0NzM6XHRcdH1cbjE0NzQ6XHRcbjE0NzU6XHRcdHJldCA9IG9hX3RjNl91cGRhdGVfYnVmZmVyX3N0YXR1c19mcm9tX3JlZ2lzdGVyKHRjNik7XG4xNDc2Olx0XHRpZiAocmV0KSB7XG4xNDc3Olx0XHRcdGRldl9lcnIoXHUwMDI2dGM2LVx1MDAzZXNwaS1cdTAwM2VkZXYsXG4xNDc4Olx0XHRcdFx0XCYjMzQ7RmFpbGVkIHRvIHVwZGF0ZSBidWZmZXIgc3RhdHVzOiAlZFxcblwmIzM0OywgcmV0KTtcbjE0Nzk6XHRcdFx0Z290byBwaHlfZXhpdDtcbjE0ODA6XHRcdH1cbjE0ODE6XHRcbjE0ODI6XHRcdHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoXHUwMDI2dGM2LVx1MDAzZXNwaS1cdTAwM2VkZXYsIHRjNi1cdTAwM2VzcGktXHUwMDNlaXJxLFxuMTQ4MzpcdFx0XHRcdFx0XHRvYV90YzZfbWFjcGh5X2lzcixcbjE0ODQ6XHRcdFx0XHRcdFx0b2FfdGM2X21hY3BoeV90aHJlYWRlZF9pcnEsXG4xNDg1Olx0XHRcdFx0XHRcdElSUUZfVFJJR0dFUl9MT1cgfCBJUlFGX09ORVNIT1QsXG4xNDg2Olx0XHRcdFx0XHRcdGRldl9uYW1lKFx1MDAyNnRjNi1cdTAwM2VzcGktXHUwMDNlZGV2KSwgdGM2KTtcbjE0ODc6XHRcdGlmIChyZXQpIHtcbjE0ODg6XHRcdFx0ZGV2X2VycihcdTAwMjZ0YzYtXHUwMDNlc3BpLVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHJlcXVlc3QgbWFjcGh5IGlzciAlZFxcblwmIzM0OyxcbjE0ODk6XHRcdFx0XHRyZXQpO1xuMTQ5MDpcdFx0XHRnb3RvIHBoeV9leGl0O1xuMTQ5MTpcdFx0fVxuMTQ5MjpcdFxuMTQ5MzpcdFx0Lyogb2FfdGM2X3N3X3Jlc2V0X21hY3BoeSgpIGZ1bmN0aW9uIHJlc2V0cyBhbmQgY2xlYXJzIHRoZSBNQUMtUEhZIHJlc2V0XG4xNDk0Olx0XHQgKiBjb21wbGV0ZSBzdGF0dXMuIElSUSBpcyBhbHNvIGFzc2VydGVkIG9uIHJlc2V0IGNvbXBsZXRpb24gYW5kIGl0IGlzXG4xNDk1Olx0XHQgKiByZW1haW4gYXNzZXJ0ZWQgdW50aWwgTUFDLVBIWSByZWNlaXZlcyBhIGRhdGEgY2h1bmsuIFNvIHBlcmZvcm1pbmcgYW5cbjE0OTY6XHRcdCAqIGVtcHR5IGRhdGEgY2h1bmsgdHJhbnNtaXNzaW9uIHdpbGwgZGVhc3NlcnQgdGhlIElSUS4gUmVmZXIgc2VjdGlvblxuMTQ5NzpcdFx0ICogNy43IGFuZCA5LjIuOC44IGluIHRoZSBPUEVOIEFsbGlhbmNlIHNwZWNpZmljYXRpb24gZm9yIG1vcmUgZGV0YWlscy5cbjE0OTg6XHRcdCAqL1xuMTQ5OTpcdFx0dGM2LVx1MDAzZWludF9mbGFnID0gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5NzgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYGxhbjg2NXhfcHJvYmVgIFNjZW5hcmlvIGluIFN5emthbGxlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgb2FfdGM2X3N3X3Jlc2V0X21hY3BoeWAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyB0byBiZSBoZWF2aWx5IHJlbGlhbnQgb24gU1BJIHRyYW5zZmVycy4gVGhlIGNyaXRpY2FsIHBhdGggaGVyZSBsZWFkcyB0byBgb2FfdGM2X2luaXRgLCB3aGljaCByZXR1cm5zIE5VTEwgaWYgdGhlIFNQSSB0cmFuc2ZlcnMgZmFpbCwgdWx0aW1hdGVseSBjYXVzaW5nIGBsYW44NjV4X3Byb2JlYCB0byBmYWlsLiBUaGUgY29yZSBpc3N1ZSBpcyB3aGV0aGVyIG9yIG5vdCBTeXprYWxsZXIgY2FuIG1lYW5pbmdmdWxseSBpbnRlcmFjdCB3aXRoIFNQSSBkZXZpY2VzIHRvIGdldCB0byB0aGF0IHByb2JlIGZ1bmN0aW9uLgoKTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCBnZW5lcmljIFNQSSBlbXVsYXRpb24gaXMgbGlrZWx5IG1pc3NpbmcgZnJvbSBTeXprYWxsZXIuIEkga25vdyBpdCBsZWFucyB0b3dhcmRzIHJlYWwgaGFyZHdhcmUgaW50ZXJhY3Rpb24uIFdoaWxlIGBzcGlkZXZgIGV4aXN0cyBhcyBhIGNoYXJhY3RlciBkZXZpY2UsIHRoYXTigJlzIGp1c3QgYSB1c2VyLXNwYWNlIGludGVyZmFjZSB0byBhICpkcml2ZXIqLCBub3QgYW4gZW11bGF0b3Igb2YgU1BJIGZ1bmN0aW9uYWxpdHkuIFNpbWlsYXJseSwgYHNwaS1sb29wYmFjay10ZXN0YCBpcywgd2VsbCwganVzdCBmb3IgdGVzdGluZyBhbmQgbm90IGEgcGF0aCB0byBnZXR0aW5nIHRoZSBgbGFuODY1eGAgZGV2aWNlIGluaXRpYWxpemVkLiBJIG5lZWQgdG8gZmluZCBhIHdheSB0byBtYWtlIFN5emthbGxlciBzZWUgdGhlIGBsYW44NjV4YCBhbmQgcmVhY2ggdGhhdCBjcnVjaWFsIHByb2JlIGZ1bmN0aW9uLgoKQ2FuIFN5emthbGxlciBpbmplY3QgRGV2aWNlIFRyZWUgbm9kZXM/IE5vLCB0aGF0JiMzOTtzIG5vdCBpdHMgdHlwaWNhbCBhcHByb2FjaCwgZXhjZXB0IG1heWJlIHdpdGggY29uZmlnZnMgZm9yIGNlcnRhaW4gc3Vic3lzdGVtcywgYnV0IGRlZmluaXRlbHkgbm90IGZvciBTUEkgY29udHJvbGxlcnMuIEkgc3RhcnRlZCB3b25kZXJpbmcgaWYgSSBjb3VsZCB1c2Ugc29tZXRoaW5nIGxpa2UgYHN5el9kZXZsaW5rYCwgYnV0IEkgcXVpY2tseSBkaXNtaXNzZWQgdGhhdCBsaW5lIG9mIHRoaW5raW5nIGFzIGluY29ycmVjdC4KClRoZSBjb25jbHVzaW9uIHRoZW4gYmVjb21lcyBvYnZpb3VzOyBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQsIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUgb3IgYSBkZWNlbnQgZW11bGF0b3IsIEkgY2FuJiMzOTt0IHJlYWNoIGBsYW44NjV4X3Byb2JlYC4gSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIGludHJvZHVjZSBhbiBTUEkgY29udHJvbGxlciBpbnRvIHRoZSBzeXN0ZW0sIHNvbWV0aGluZyBTeXprYWxsZXIgY2FuIHJlY29nbml6ZS4gVGhhdCYjMzk7cyB3aGVuIEkgaGFkIHRoZSBpZGVhIG9mIGEgc29mdHdhcmUgU1BJIGNvbnRyb2xsZXIuIE1heWJlIHNvbWV0aGluZyBsaWtlIGBzcGktbW9ja3VwYCBvciBgc3BpLWdwaW9gIGNvdWxkIHdvcmsgaWYgaXQgZXhpc3RzLiBIb3dldmVyLCBpdCBzZWVtcyB0aGVyZSYjMzk7cyBubyBgc3BpLW1vY2t1cGAgaW4gdGhlIGtlcm5lbC4gYHNwaS1ncGlvYCBsb29rcyBwcm9taXNpbmcsIGJ1dCBJJiMzOTtkIHN0aWxsIG5lZWQgYSB3YXkgdG8gaW5zdGFudGlhdGUgdGhlIGBsYW44NjV4YCBTUEkgZGV2aWNlIG9uIGl0LCBnaXZlbiB0aGUgbGltaXRlZCBuYXR1cmUgb2YgU3l6a2FsbGVyJiMzOTtzIGRldmljZSBpbnN0YW50aWF0aW9uIGFiaWxpdGllcy4KClNvLCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gY3JlYXRlIHRoZSBgbGFuODY1eGAgZGV2aWNlIGl0c2VsZi4gSSB3aWxsIGhhdmUgdG8gc3RhcnQgYnkgY2hlY2tpbmcgaWYgSSBjYW4gY3JlYXRlIFNQSSBkZXZpY2VzIHZpYSBzeXNmcy4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBzdGFydCBkaWdnaW5nIHRvIHNlZSBpZiBJIGNhbiBldmVuIGdldCB0aGlzIGhhcmR3YXJlIGNvbm5lY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV3X2RldmljZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvc3BpLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3NwaS9zcGktYWx0ZXJhLWRmbC5jPTEyND1zdGF0aWMgaW50IGRmbF9zcGlfYWx0ZXJhX3Byb2JlKHN0cnVjdCBkZmxfZGV2aWNlICpkZmxfZGV2KVxuLS1cbmRyaXZlcnMvc3BpL3NwaS1hbHRlcmEtZGZsLmMtMTc0LVxuZHJpdmVycy9zcGkvc3BpLWFsdGVyYS1kZmwuYzoxNzU6XHRpZiAoIXNwaV9uZXdfZGV2aWNlKGhvc3QsIFx1MDAyNmJvYXJkX2luZm8pKSB7XG5kcml2ZXJzL3NwaS9zcGktYWx0ZXJhLWRmbC5jLTE3Ni1cdFx0ZGV2X2VycihkZXYsIFwmIzM0OyVzIGZhaWxlZCB0byBjcmVhdGUgU1BJIGRldmljZTogJXNcXG5cJiMzNDssXG4tLVxuZHJpdmVycy9zcGkvc3BpLWFsdGVyYS1wbGF0Zm9ybS5jPTM1PXN0YXRpYyBpbnQgYWx0ZXJhX3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvc3BpL3NwaS1hbHRlcmEtcGxhdGZvcm0uYy0xMTktXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBkYXRhLVx1MDAzZW51bV9kZXZpY2VzOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9zcGkvc3BpLWFsdGVyYS1wbGF0Zm9ybS5jOjEyMDpcdFx0XHRpZiAoIXNwaV9uZXdfZGV2aWNlKGhvc3QsIHBkYXRhLVx1MDAzZWRldmljZXMgJiM0MzsgaSkpXG5kcml2ZXJzL3NwaS9zcGktYWx0ZXJhLXBsYXRmb3JtLmMtMTIxLVx0XHRcdFx0ZGV2X3dhcm4oXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4tLVxuZHJpdmVycy9zcGkvc3BpLWJ1dHRlcmZseS5jPTE3Nj1zdGF0aWMgdm9pZCBidXR0ZXJmbHlfYXR0YWNoKHN0cnVjdCBwYXJwb3J0ICpwKVxuLS1cbmRyaXZlcnMvc3BpL3NwaS1idXR0ZXJmbHkuYy0yNjUtXHRwcC1cdTAwM2VpbmZvWzBdLmNvbnRyb2xsZXJfZGF0YSA9IHBwO1xuZHJpdmVycy9zcGkvc3BpLWJ1dHRlcmZseS5jOjI2NjpcdHBwLVx1MDAzZWRhdGFmbGFzaCA9IHNwaV9uZXdfZGV2aWNlKHBwLVx1MDAzZWJpdGJhbmcuY3RsciwgXHUwMDI2cHAtXHUwMDNlaW5mb1swXSk7XG5kcml2ZXJzL3NwaS9zcGktYnV0dGVyZmx5LmMtMjY3LVx0aWYgKHBwLVx1MDAzZWRhdGFmbGFzaClcbi0tXG5kcml2ZXJzL3NwaS9zcGktY2gzNDEuYz0xNDE9c3RhdGljIGludCBjaDM0MV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zixcbi0tXG5kcml2ZXJzL3NwaS9zcGktY2gzNDEuYy0yMDYtXG5kcml2ZXJzL3NwaS9zcGktY2gzNDEuYzoyMDc6XHRjaDM0MS1cdTAwM2VzcGlkZXYgPSBzcGlfbmV3X2RldmljZShjdHJsLCBcdTAwMjZjaGlwKTtcbmRyaXZlcnMvc3BpL3NwaS1jaDM0MS5jLTIwOC1cdGlmICghY2gzNDEtXHUwMDNlc3BpZGV2KSB7XG4tLVxuZHJpdmVycy9zcGkvc3BpLWNzNDJsNDMuYz0zMTI9c3RhdGljIGludCBjczQybDQzX3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvc3BpL3NwaS1jczQybDQzLmMtNDI2LVxuZHJpdmVycy9zcGkvc3BpLWNzNDJsNDMuYzo0Mjc6XHRcdGlmICghc3BpX25ld19kZXZpY2UocHJpdi1cdTAwM2VjdGxyLCBhbXBsX2luZm8pKVxuZHJpdmVycy9zcGkvc3BpLWNzNDJsNDMuYy00MjgtXHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHJpdi1cdTAwM2VkZXYsIC1FTk9ERVYsXG4tLVxuZHJpdmVycy9zcGkvc3BpLWNzNDJsNDMuYy00MzAtXG5kcml2ZXJzL3NwaS9zcGktY3M0Mmw0My5jOjQzMTpcdFx0aWYgKCFzcGlfbmV3X2RldmljZShwcml2LVx1MDAzZWN0bHIsIGFtcHJfaW5mbykpXG5kcml2ZXJzL3NwaS9zcGktY3M0Mmw0My5jLTQzMi1cdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwcml2LVx1MDAzZWRldiwgLUVOT0RFVixcbi0tXG5kcml2ZXJzL3NwaS9zcGktaW50ZWwuYz0xMzc1PXN0YXRpYyBpbnQgaW50ZWxfc3BpX3BvcHVsYXRlX2NoaXAoc3RydWN0IGludGVsX3NwaSAqaXNwaSlcbi0tXG5kcml2ZXJzL3NwaS9zcGktaW50ZWwuYy0xNDAxLVxuZHJpdmVycy9zcGkvc3BpLWludGVsLmM6MTQwMjpcdGlmICghc3BpX25ld19kZXZpY2UoaXNwaS1cdTAwM2Vob3N0LCBcdTAwMjZjaGlwKSlcbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jLTE0MDMtXHRcdHJldHVybiAtRU5PREVWO1xuLS1cbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jLTE0MzAtXG5kcml2ZXJzL3NwaS9zcGktaW50ZWwuYzoxNDMxOlx0aWYgKCFzcGlfbmV3X2RldmljZShpc3BpLVx1MDAzZWhvc3QsIFx1MDAyNmNoaXApKVxuZHJpdmVycy9zcGkvc3BpLWludGVsLmMtMTQzMi1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuZHJpdmVycy9zcGkvc3BpLWtzcGkyLmM9MzEwPXN0YXRpYyBpbnQga3NwaTJfcmVnaXN0ZXJfZGV2aWNlcyhzdHJ1Y3Qga3NwaTIgKmtzcGkpXG4tLVxuZHJpdmVycy9zcGkvc3BpLWtzcGkyLmMtMzE2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mga3NwaS1cdTAwM2VhdXhkZXYtXHUwMDNlaW5mb19zaXplOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9zcGkvc3BpLWtzcGkyLmM6MzE3Olx0XHRzdHJ1Y3Qgc3BpX2RldmljZSAqZGV2aWNlID0gc3BpX25ld19kZXZpY2Uoa3NwaS1cdTAwM2Vob3N0LCBcdTAwMjZpbmZvW2ldKTtcbmRyaXZlcnMvc3BpL3NwaS1rc3BpMi5jLTMxOC1cbi0tXG5kcml2ZXJzL3NwaS9zcGktbG03MGxscC5jPTE4OD1zdGF0aWMgdm9pZCBzcGlfbG03MGxscF9hdHRhY2goc3RydWN0IHBhcnBvcnQgKnApXG4tLVxuZHJpdmVycy9zcGkvc3BpLWxtNzBsbHAuYy0yNjYtXHRwcC1cdTAwM2VpbmZvLmNvbnRyb2xsZXJfZGF0YSA9IHBwO1xuZHJpdmVycy9zcGkvc3BpLWxtNzBsbHAuYzoyNjc6XHRwcC1cdTAwM2VzcGlkZXZfbG03MCA9IHNwaV9uZXdfZGV2aWNlKHBwLVx1MDAzZWJpdGJhbmcuY3RsciwgXHUwMDI2cHAtXHUwMDNlaW5mbyk7XG5kcml2ZXJzL3NwaS9zcGktbG03MGxscC5jLTI2OC1cdGlmIChwcC1cdTAwM2VzcGlkZXZfbG03MClcbi0tXG5kcml2ZXJzL3NwaS9zcGktbG03MGxscC5jLTI3MS1cdGVsc2Uge1xuZHJpdmVycy9zcGkvc3BpLWxtNzBsbHAuYzoyNzI6XHRcdGRldl93YXJuKFx1MDAyNnBkLVx1MDAzZWRldiwgXCYjMzQ7c3BpX25ld19kZXZpY2UgZmFpbGVkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvc3BpL3NwaS1sbTcwbGxwLmMtMjczLVx0XHRzdGF0dXMgPSAtRU5PREVWO1xuLS1cbmRyaXZlcnMvc3BpL3NwaS14aWxpbnguYz00MDI9c3RhdGljIGludCB4aWxpbnhfc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9zcGkvc3BpLXhpbGlueC5jLTUwOS1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGRhdGEtXHUwMDNlbnVtX2RldmljZXM7IGkmIzQzOyYjNDM7KVxuZHJpdmVycy9zcGkvc3BpLXhpbGlueC5jOjUxMDpcdFx0XHRzcGlfbmV3X2RldmljZShob3N0LCBwZGF0YS1cdTAwM2VkZXZpY2VzICYjNDM7IGkpO1xuZHJpdmVycy9zcGkvc3BpLXhpbGlueC5jLTUxMS1cdH1cbi0tXG5kcml2ZXJzL3NwaS9zcGkuYz03OTE9RVhQT1JUX1NZTUJPTF9HUEwoc3BpX2FkZF9kZXZpY2UpO1xuLS1cbmRyaXZlcnMvc3BpL3NwaS5jLTc5My0vKipcbmRyaXZlcnMvc3BpL3NwaS5jOjc5NDogKiBzcGlfbmV3X2RldmljZSAtIGluc3RhbnRpYXRlIG9uZSBuZXcgU1BJIGRldmljZVxuZHJpdmVycy9zcGkvc3BpLmMtNzk1LSAqIEBjdGxyOiBDb250cm9sbGVyIHRvIHdoaWNoIGRldmljZSBpcyBjb25uZWN0ZWRcbi0tXG5kcml2ZXJzL3NwaS9zcGkuYy04MDYtICovXG5kcml2ZXJzL3NwaS9zcGkuYzo4MDc6c3RydWN0IHNwaV9kZXZpY2UgKnNwaV9uZXdfZGV2aWNlKHN0cnVjdCBzcGlfY29udHJvbGxlciAqY3RscixcbmRyaXZlcnMvc3BpL3NwaS5jLTgwOC1cdFx0XHRcdCAgc3RydWN0IHNwaV9ib2FyZF9pbmZvICpjaGlwKVxuLS1cbmRyaXZlcnMvc3BpL3NwaS5jLTg2Mi19XG5kcml2ZXJzL3NwaS9zcGkuYzo4NjM6RVhQT1JUX1NZTUJPTF9HUEwoc3BpX25ld19kZXZpY2UpO1xuZHJpdmVycy9zcGkvc3BpLmMtODY0LVxuLS1cbmRyaXZlcnMvc3BpL3NwaS5jPTg5Mz1zdGF0aWMgdm9pZCBzcGlfbWF0Y2hfY29udHJvbGxlcl90b19ib2FyZGluZm8oc3RydWN0IHNwaV9jb250cm9sbGVyICpjdGxyLFxuLS1cbmRyaXZlcnMvc3BpL3NwaS5jLTkwMC1cbmRyaXZlcnMvc3BpL3NwaS5jOjkwMTpcdGRldiA9IHNwaV9uZXdfZGV2aWNlKGN0bHIsIGJpKTtcbmRyaXZlcnMvc3BpL3NwaS5jLTkwMi1cdGlmICghZGV2KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTYyNQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYGxhbjg2NXhgIERyaXZlciBhbmQgU3l6a2FsbGVyIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbGFuODY1eGAgZHJpdmVyIGFuZCB0aGUgc2l0dWF0aW9uIHdpdGggU3l6a2FsbGVyLCBhbmQgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O3ZlIGdvdC4gVW5saWtlIEkyQywgU1BJIGRldmljZXMgZG9uJiMzOTt0IGhhdmUgYSBjb252ZW5pZW50IHN5c2ZzIGludGVyZmFjZSBmb3IgZHluYW1pYyBjcmVhdGlvbi4gVGhleSYjMzk7cmUgdHlwaWNhbGx5IGJyb3VnaHQgdXAgYXQgYm9vdCB0aW1lIHRocm91Z2ggYm9hcmQgaW5mb3JtYXRpb24sIGRldmljZSB0cmVlIGNvbmZpZ3VyYXRpb25zLCBBQ1BJLCBvciBieSBiZWluZyBleHBsaWNpdGx5IGhhbmRsZWQgYnkgc3BlY2lmaWMgZHJpdmVycy4gVGhlIGBsYW44NjV4YCBpcyBhbiBTUEkgZGV2aWNlLCBzbyBpdCBmaXRzIHRoYXQgcGF0dGVybi4gVGhhdCBtZWFucywgd2l0aG91dCBzb21lIGN1c3RvbSBoYXJkd2FyZSBzZXR1cCBvciB0aGUgdXNlIG9mIGRldmljZSB0cmVlIChEVCkgb3ZlcmxheXMsIHdoaWNoIGFsbG93IGZvciBtb2RpZmljYXRpb25zIHRvIGEgRFQgYXQgcnVudGltZSwgeW91IGNhbiYjMzk7dCBqdXN0IGluc3RhbnRpYXRlIGl0IGZyb20gdXNlcnNwYWNlIGluIGEgc3RhbmRhcmQga2VybmVsLgoKTm93LCBoZXJlJiMzOTtzIHRoZSBraWNrZXI6IFN5emthbGxlciwgaW4gaXRzIFFFTVUgZW52aXJvbm1lbnQsIGRvZXNuJiMzOTt0IHV0aWxpemUgRFQgb3ZlcmxheXMsIGFzIGZhciBhcyBJIGtub3cuIFRoZXJlZm9yZSwgdGhlIGBsYW44NjV4X3Byb2JlYCBmdW5jdGlvbiwgd2hpY2ggaXMgdGhlIGVudHJ5IHBvaW50IGZvciBwcm9iaW5nIHRoZSBgbGFuODY1eGAgZGV2aWNlLCBpcyBpbmhlcmVudGx5IHVucmVhY2hhYmxlIHdpdGhpbiBhIFN5emthbGxlciB0ZXN0IGVudmlyb25tZW50LiBJdCBqdXN0IHdvbiYjMzk7dCBnZXQgY2FsbGVkLgoKR2l2ZW4gdGhhdCBgb2FfdGM2LmNgIHNlZW1zIHRvIGJlIHNvbGVseSBkZWRpY2F0ZWQgdG8gZnVuY3Rpb25hbGl0eSB0aWVkIHRvIHRoZSBgbGFuODY1eGAgZHJpdmVyLCBpdCBmb2xsb3dzIHRoYXQgdGhlIGNvZGUgd2l0aGluIGBvYV90YzYuY2AgaXMgYWxzbyB1bnJlYWNoYWJsZSBiZWNhdXNlIGl0cyBwcmltYXJ5IHVzZSBjYXNlIGlzIHdoZW4gYGxhbjg2NXhgIGlzIHJ1bm5pbmcuCgpJIHNob3VsZCBkb3VibGUgY2hlY2sgdG8gc2VlIGlmIGBvYV90YzZfaW5pdGAgaXMgdXNlZCBhbnl3aGVyZSBlbHNlIGluIHRoZSBrZXJuZWwsIGJ1dCBhcyBpdCBsb29rcyBsaWtlIGl0cyBkZWRpY2F0ZWQgdG8gdGhlIGBsYW44NjV4YCwgbXkgY3VycmVudCB0aGlua2luZyBpcyB0aGF0LCBpZiBgbGFuODY1eF9wcm9iZWAgaXNuJiMzOTt0IHJlYWNoZWQsIHRoZW4gYG9hX3RjNi5jYCBjYW5ub3QgYmUgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2FfdGM2X2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0PTQ1ND1UaGUgaW5jbHVkZS9saW51eC9vYV90YzYuaCBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0LTQ1NS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdDo0NTY6Li4gYzpmdW5jdGlvbjo6IHN0cnVjdCBvYV90YzYgKm9hX3RjNl9pbml0KHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIFxcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb2EtdGM2LWZyYW1ld29yay5yc3QtNDU3LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYz0zMzM9c3RhdGljIGludCBsYW44NjV4X3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jLTM0OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYzozNDk6XHRwcml2LVx1MDAzZXRjNiA9IG9hX3RjNl9pbml0KHNwaSwgbmV0ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYy0zNTAtXHRpZiAoIXByaXYtXHUwMDNldGM2KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmM9MTM5Mz1FWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfc3RhcnRfeG1pdCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMtMTM5NS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jOjEzOTY6ICogb2FfdGM2X2luaXQgLSBhbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIG9hX3RjNiBzdHJ1Y3R1cmUuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy0xMzk3LSAqIEBzcGk6IGRldmljZSB3aXRoIHdoaWNoIGRhdGEgd2lsbCBiZSBleGNoYW5nZWQuXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMtMTQwMi0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jOjE0MDM6c3RydWN0IG9hX3RjNiAqb2FfdGM2X2luaXQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTE0MDQte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTE1MDctfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmM6MTUwODpFWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfaW5pdCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy0xNTA5LVxuLS1cbmluY2x1ZGUvbGludXgvb2FfdGM2Lmg9MTM9c3RydWN0IG9hX3RjNjtcbmluY2x1ZGUvbGludXgvb2FfdGM2LmgtMTQtXG5pbmNsdWRlL2xpbnV4L29hX3RjNi5oOjE1OnN0cnVjdCBvYV90YzYgKm9hX3RjNl9pbml0KHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xuaW5jbHVkZS9saW51eC9vYV90YzYuaC0xNi12b2lkIG9hX3RjNl9leGl0KHN0cnVjdCBvYV90YzYgKnRjNik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTE2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZz1GYWxzZTogVW5yZWFjaGFibGUgQ29kZSBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIGF0IHRoaXMgcGF0Y2ggYW5kIEkmIzM5O20gcHJldHR5IGNvbmZpZGVudCBpbiBteSBhc3Nlc3NtZW50LiBUaGUgY29kZSBpcyBleGNsdXNpdmVseSBmb3IgdGhlIGBsYW44NjV4YCBkcml2ZXIsIHdoaWNoLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHNwZWNpZmljIHRvIHRoZSBNaWNyb2NoaXAgTEFOODY1MC8xIE1BQy1QSFkg4oCTIGFuIFNQSSBkZXZpY2UuIFRoZSBrZXkgaGVyZSBpcyB0aGF0IFNQSSBkZXZpY2VzIGNhbiYjMzk7dCBiZSBkeW5hbWljYWxseSBpbnN0YW50aWF0ZWQgaW4gc3l6a2FsbGVyLCBhbmQgdGhlcmUmIzM5O3Mgbm8gc29mdHdhcmUgZW11bGF0aW9uIGF2YWlsYWJsZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIE1BQy1QSFkuCgpJIGJyaWVmbHkgY29uc2lkZXJlZCBpZiBzeXprYWxsZXIgbWlnaHQgYmUgdXNpbmcgYHNwaWRldmAgdG8gc29tZWhvdyBpbmplY3QgZnVuY3Rpb25hbGl0eSwgYnV0IHRoYXQmIzM5O3MgZm9yICp1c2Vyc3BhY2UqIGFjdGluZyBhcyBhbiBTUEkgbWFzdGVyLCBub3QgZW11bGF0aW5nIHRoZSBkZXZpY2UgaXRzZWxmLiBUaGVuIEkgdGhvdWdodCBhYm91dCBgbWFjODAyMTFfaHdzaW1gLCB3aGljaCBlbXVsYXRlcyBXaS1GaSwgYnV0IHRoZXJlIGlzbiYjMzk7dCBhbiBlcXVpdmFsZW50IGZvciBTUEkgRXRoZXJuZXQgTUFDLVBIWXMuIEFuZCBgbmV0ZGV2c2ltYCBpcyBkZWZpbml0ZWx5IG5vdCB1c2luZyBgb2FfdGM2YC4KClRoZXJlZm9yZSwgdGhlIG1vZGlmaWNhdGlvbnMgdGhpcyBwYXRjaCBtYWtlcyBhcmUgaW4gY29kZSB0aGF0IGlzIGZ1bmRhbWVudGFsbHkgdW5yZWFjaGFibGUgd2l0aGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiBJdCYjMzk7cyB0aWVkIHRvIHZlcnkgc3BlY2lmaWMgU1BJIGhhcmR3YXJlLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgY2hlY2tlZCB0aGUgcHJvbXB0IGluc3RydWN0aW9ucyBhZ2Fpbi4gVGhleSBzcGVjaWZpY2FsbHkgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggaW52b2x2ZXMgY29kZSBwYXRocyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aXRoIHNvZnR3YXJlIGVtdWxhdGlvbi4gSXQgYWxzbyBjYWxscyBvdXQgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlLCB3aGljaCB0aGlzIGRlZmluaXRlbHkgaXMuIEl0IGFsbCBmaXRzIHBlcmZlY3RseS4KCkkmIzM5O3ZlIGFsc28gZG91YmxlLWNoZWNrZWQgYWxsIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMgZnJvbSBgb2FfdGM2YC4gVGhleSBhcmUgb25seSB1c2VkIGJ5IGBsYW44NjV4YC4gU28sIHVubGVzcyB0aGVyZSYjMzk7cyBzb21lIG9ic2N1cmUgaW5kaXJlY3QgcGF0aCBJJiMzOTttIG1pc3NpbmcsIHdoaWNoIEkmIzM5O20gY29uZmlkZW50IHRoZXJlIGlzbiYjMzk7dCwgdGhpcyBjb2RlIGlzIGNvbXBsZXRlbHkgaW5hY2Nlc3NpYmxlIHRvIG91ciBmdXp6aW5nIGVmZm9ydHMgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYV90YzZfc3RhcnRfeG1pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb2EtdGM2LWZyYW1ld29yay5yc3Q9NDg1PU1heGltdW0gb2YgMTI4IGNvbnNlY3V0aXZlIHJlZ2lzdGVycyBjYW4gYmUgcmVhZCBzdGFydGluZyBhdCBAYWRkcmVzcy5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdC00ODYtXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb2EtdGM2LWZyYW1ld29yay5yc3Q6NDg3Oi4uIGM6ZnVuY3Rpb246OiBuZXRkZXZfdHhfdCBvYV90YzZfc3RhcnRfeG1pdChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIFxcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb2EtdGM2LWZyYW1ld29yay5yc3QtNDg4LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmM9MjUxPXN0YXRpYyBuZXRkZXZfdHhfdCBsYW44NjV4X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jLTI1NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYzoyNTY6XHRyZXR1cm4gb2FfdGM2X3N0YXJ0X3htaXQocHJpdi1cdTAwM2V0YzYsIHNrYik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmMtMjU3LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYz0xMzUzPUVYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl96ZXJvX2FsaWduX3JlY2VpdmVfZnJhbWVfZW5hYmxlKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy0xMzU1LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmM6MTM1NjogKiBvYV90YzZfc3RhcnRfeG1pdCAtIGZ1bmN0aW9uIGZvciBzZW5kaW5nIHRoZSB0eCBza2Igd2hpY2ggY29uc2lzdHMgZXRoZXJuZXRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTEzNTctICogZnJhbWUuXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMtMTM2Ni0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jOjEzNjc6bmV0ZGV2X3R4X3Qgb2FfdGM2X3N0YXJ0X3htaXQoc3RydWN0IG9hX3RjNiAqdGM2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMtMTM2OC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMtMTM5Mi19XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYzoxMzkzOkVYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl9zdGFydF94bWl0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTEzOTQtXG4tLVxuaW5jbHVkZS9saW51eC9vYV90YzYuaD0yMT1pbnQgb2FfdGM2X3JlYWRfcmVnaXN0ZXJzKHN0cnVjdCBvYV90YzYgKnRjNiwgdTMyIGFkZHJlc3MsIHUzMiB2YWx1ZVtdLFxuaW5jbHVkZS9saW51eC9vYV90YzYuaC0yMi1cdFx0XHQgIHU4IGxlbmd0aCk7XG5pbmNsdWRlL2xpbnV4L29hX3RjNi5oOjIzOm5ldGRldl90eF90IG9hX3RjNl9zdGFydF94bWl0KHN0cnVjdCBvYV90YzYgKnRjNiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL2xpbnV4L29hX3RjNi5oLTI0LWludCBvYV90YzZfemVyb19hbGlnbl9yZWNlaXZlX2ZyYW1lX2VuYWJsZShzdHJ1Y3Qgb2FfdGM2ICp0YzYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDYxMgoJCQkJCQkJb3V0cHV0OiAxMDkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBc3Nlc3NtZW50IG9mIHRoZSBgV29ydGhGdXp6aW5nYCBQYXJhbWV0ZXIqKgoKUmlnaHQsIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhhdCBgV29ydGhGdXp6aW5nYCBwYXJhbWV0ZXIuIEJhc2VkIG9uIHdoYXQgSSYjMzk7dmUgc2VlbiwgaXQmIzM5O3MgcHJldHR5IGNsZWFyOiBpdCYjMzk7cyBvbmx5IHJlYWxseSB1c2VkLCBvciByZWxldmFudCwgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGBsYW44NjV4YCBkcml2ZXIuIEdpdmVuIHRoYXQgbGltaXRlZCBzY29wZSwgSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYGZhbHNlYC4gTm8gc2Vuc2UgaW4gZXhwZW5kaW5nIHJlc291cmNlcyBmdXp6aW5nIHNvbWV0aGluZyB0aGF0IGlzbiYjMzk7dCByZWFsbHkgcmVsZXZhbnQgb3V0c2lkZSB0aGF0IHNwZWNpZmljIG1vZHVsZS4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgYW5kIGVmZmljaWVudCBhcHByb2FjaCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPUEVOIEFsbGlhbmNlIDEwQkFTRS1UMXggTUFDLVBIWSBTZXJpYWwgSW50ZXJmYWNlIChvYV90YzYpIGZyYW1ld29yaywgd2hpY2ggaXMgY3VycmVudGx5IG9ubHkgdXNlZCBieSB0aGUgTWljcm9jaGlwIExBTjg2NXggU1BJIGRyaXZlci4gU2luY2UgU1BJIGRldmljZXMgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgY2Fubm90IGJlIGR5bmFtaWNhbGx5IGluc3RhbnRpYXRlZCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPUEVOIEFsbGlhbmNlIDEwQkFTRS1UMXggTUFDLVBIWSBTZXJpYWwgSW50ZXJmYWNlIChvYV90YzYpIGZyYW1ld29yaywgd2hpY2ggaXMgY3VycmVudGx5IG9ubHkgdXNlZCBieSB0aGUgTWljcm9jaGlwIExBTjg2NXggU1BJIGRyaXZlci4gU2luY2UgU1BJIGRldmljZXMgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgY2Fubm90IGJlIGR5bmFtaWNhbGx5IGluc3RhbnRpYXRlZCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAzOjI1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzoyNDozNS41MzcxNDY4MDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDgwNzA2NzU4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPUEVOIEFsbGlhbmNlIDEwQkFTRS1UMXggTUFDLVBIWSBTZXJpYWwgSW50ZXJmYWNlIChvYV90YzYpIGZyYW1ld29yaywgd2hpY2ggaXMgY3VycmVudGx5IG9ubHkgdXNlZCBieSB0aGUgTWljcm9jaGlwIExBTjg2NXggU1BJIGRyaXZlci4gU2luY2UgU1BJIGRldmljZXMgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgY2Fubm90IGJlIGR5bmFtaWNhbGx5IGluc3RhbnRpYXRlZCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAzOjI0OjM1LjUzNzE1MjI5OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY3MDU3OTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNmIxMmM3ZDgyOGRhZThhZWQxODU0MmVkY2UyMzk2NTJiMWQ5Mzc0Y1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwMzoyNDozNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jXFxuaW5kZXggMDcyN2Q1MzM0NWEzMy4uNmUyN2VkMzlhOTliZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jXFxuQEAgLTEyNyw3ICsxMjcsNyBAQCBzdHJ1Y3Qgb2FfdGM2IHtcXG4gXFx0dTE2IHNwaV9kYXRhX3R4X2J1Zl9vZmZzZXQ7XFxuIFxcdHUxNiB0eF9jcmVkaXRzO1xcbiBcXHR1OCByeF9jaHVua3NfYXZhaWxhYmxlO1xcbi1cXHRib29sIHJ4X2J1Zl9vdmVyZmxvdztcXG4rXFx0Ym9vbCB3YWl0X3VudGlsX3N0YXJ0X3ZhbGlkO1xcbiBcXHRib29sIGludF9mbGFnO1xcbiBcXHRib29sIGRpc2FibGVfdHJhZmZpYztcXG4gfTtcXG5AQCAtNDIzLDcgKzQyMyw3IEBAIHN0YXRpYyBpbnQgb2FfdGM2X21kaW9idXNfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZ251bSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgb2FfdGM2ICp0YzYgPSBidXMtXFx1MDAzZXByaXY7XFxuIFxcdHUzMiByZWd2YWw7XFxuLVxcdGJvb2wgcmV0O1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0cmV0ID0gb2FfdGM2X3JlYWRfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUEhZX1NURF9SRUdfQUREUl9CQVNFIHxcXG4gXFx0XFx0XFx0XFx0ICAgKHJlZ251bSBcXHUwMDI2IE9BX1RDNl9QSFlfU1REX1JFR19BRERSX01BU0spLFxcbkBAIC02NTIsNiArNjUyLDI2IEBAIHN0YXRpYyBpbnQgb2FfdGM2X2VuYWJsZV9kYXRhX3RyYW5zZmVyKHN0cnVjdCBvYV90YzYgKnRjNilcXG4gXFx0cmV0dXJuIG9hX3RjNl93cml0ZV9yZWdpc3Rlcih0YzYsIE9BX1RDNl9SRUdfQ09ORklHMCwgdmFsdWUpO1xcbiB9XFxuIFxcbisvKiBDYWxsZWQgd2hlbiBhIGZyYW1lIHRoYXQgaXMgbWVhbnQgdG8gYmUgdHJhbnNtaXR0ZWQsIGlzIGRyb3BwZWQuICovXFxuK3N0YXRpYyB2b2lkIG9hX3RjNl9kcm9wX3R4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0aWYgKHNrYikge1xcbitcXHRcXHR0YzYtXFx1MDAzZW5ldGRldi1cXHUwMDNlc3RhdHMudHhfZHJvcHBlZCsrO1xcbitcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqb2FfdGM2X2RldGFjaF93YWl0aW5nX3R4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYpXFxuK3tcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnRjNi1cXHUwMDNldHhfc2tiX2xvY2spO1xcbitcXHRza2IgPSB0YzYtXFx1MDAzZXdhaXRpbmdfdHhfc2tiO1xcbitcXHR0YzYtXFx1MDAzZXdhaXRpbmdfdHhfc2tiID0gTlVMTDtcXG4rXFxuK1xcdHJldHVybiBza2I7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIG9hX3RjNl9jbGVhbnVwX29uZ29pbmdfcnhfc2tiKHN0cnVjdCBvYV90YzYgKnRjNilcXG4ge1xcbiBcXHRpZiAodGM2LVxcdTAwM2VyeF9za2IpIHtcXG5AQCAtNjYzLDI5ICs2ODMsMzkgQEAgc3RhdGljIHZvaWQgb2FfdGM2X2NsZWFudXBfb25nb2luZ19yeF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2KVxcbiBcXG4gc3RhdGljIHZvaWQgb2FfdGM2X2NsZWFudXBfb25nb2luZ190eF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2KVxcbiB7XFxuLVxcdGlmICh0YzYtXFx1MDAzZW9uZ29pbmdfdHhfc2tiKSB7XFxuLVxcdFxcdHRjNi1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VzdGF0cy50eF9kcm9wcGVkKys7XFxuLVxcdFxcdGtmcmVlX3NrYih0YzYtXFx1MDAzZW9uZ29pbmdfdHhfc2tiKTtcXG4tXFx0XFx0dGM2LVxcdTAwM2VvbmdvaW5nX3R4X3NrYiA9IE5VTEw7XFxuLVxcdH1cXG4rXFx0b2FfdGM2X2Ryb3BfdHhfc2tiKHRjNiwgdGM2LVxcdTAwM2VvbmdvaW5nX3R4X3NrYik7XFxuK1xcdHRjNi1cXHUwMDNlb25nb2luZ190eF9za2IgPSBOVUxMO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBvYV90YzZfY2xlYW51cF93YWl0aW5nX3R4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYpXFxuIHtcXG4tXFx0aWYgKHRjNi1cXHUwMDNld2FpdGluZ190eF9za2IpIHtcXG4tXFx0XFx0dGM2LVxcdTAwM2VuZXRkZXYtXFx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQrKztcXG4tXFx0XFx0a2ZyZWVfc2tiKHRjNi1cXHUwMDNld2FpdGluZ190eF9za2IpO1xcbi1cXHRcXHR0YzYtXFx1MDAzZXdhaXRpbmdfdHhfc2tiID0gTlVMTDtcXG4tXFx0fVxcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ0YzYtXFx1MDAzZXR4X3NrYl9sb2NrKTtcXG4rXFx0c2tiID0gb2FfdGM2X2RldGFjaF93YWl0aW5nX3R4X3NrYih0YzYpO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dGM2LVxcdTAwM2V0eF9za2JfbG9jayk7XFxuK1xcbitcXHRvYV90YzZfZHJvcF90eF9za2IodGM2LCBza2IpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBvYV90YzZfZnJlZV9wZW5kaW5nX3NrYnMoc3RydWN0IG9hX3RjNiAqdGM2KVxcbitzdGF0aWMgdm9pZCBvYV90YzZfZnJlZV9vbmdvaW5nX3NrYnMoc3RydWN0IG9hX3RjNiAqdGM2KVxcbiB7XFxuIFxcdG9hX3RjNl9jbGVhbnVwX29uZ29pbmdfdHhfc2tiKHRjNik7XFxuIFxcdG9hX3RjNl9jbGVhbnVwX29uZ29pbmdfcnhfc2tiKHRjNik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG9hX3RjNl9mcmVlX3BlbmRpbmdfc2ticyhzdHJ1Y3Qgb2FfdGM2ICp0YzYpXFxuK3tcXG4rXFx0b2FfdGM2X2ZyZWVfb25nb2luZ19za2JzKHRjNik7XFxuIFxcdG9hX3RjNl9jbGVhbnVwX3dhaXRpbmdfdHhfc2tiKHRjNik7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIG9hX3RjNl9sb29rX2Zvcl9uZXdfZnJhbWUoc3RydWN0IG9hX3RjNiAqdGM2KVxcbit7XFxuK1xcdHRjNi1cXHUwMDNld2FpdF91bnRpbF9zdGFydF92YWxpZCA9IHRydWU7XFxuK1xcdG9hX3RjNl9jbGVhbnVwX29uZ29pbmdfcnhfc2tiKHRjNik7XFxuK31cXG4rXFxuIC8qIElmIHRoZSBmYWlsdXJlIGlzIGF0IFNQSSBpbnRlcmZhY2UgbGV2ZWwsIG1hc2tpbmcgYW5kIGNsZWFyaW5nXFxuICAqIHRoZSBpbnRlcnJ1cHQgb2YgdGhlIGRldmljZSB3b24ndCB3b3JrLiBTaW5jZSBTUEkgaW50ZXJydXB0IGlzXFxuICAqIGRpc2FibGVkLCBpdCBzaG91bGQgc3RvcCB0aGUgcmVwZWF0ZWQgaW50ZXJydXB0cy5cXG5AQCAtNjkzLDkgKzcyMywyMSBAQCBzdGF0aWMgdm9pZCBvYV90YzZfZnJlZV9wZW5kaW5nX3NrYnMoc3RydWN0IG9hX3RjNiAqdGM2KVxcbiBzdGF0aWMgdm9pZCBvYV90YzZfZGlzYWJsZV90cmFmZmljKHN0cnVjdCBvYV90YzYgKnRjNilcXG4ge1xcbiBcXHR1MzIgcmVndmFsID0gSU5UX01BU0swX0FMTF9JTlRFUlJVUFRTO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiBcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ0YzYtXFx1MDAzZXR4X3NrYl9sb2NrKTtcXG4gXFx0dGM2LVxcdTAwM2VkaXNhYmxlX3RyYWZmaWMgPSB0cnVlO1xcbi1cXHRvYV90YzZfZnJlZV9wZW5kaW5nX3NrYnModGM2KTtcXG4rXFx0c2tiID0gb2FfdGM2X2RldGFjaF93YWl0aW5nX3R4X3NrYih0YzYpO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dGM2LVxcdTAwM2V0eF9za2JfbG9jayk7XFxuK1xcbitcXHQvKiBkaXNhYmxlX3RyYWZmaWMsIHdoZW4gc2V0LCBpcyBhIHBvaW50IG9mIG5vIHJldHVybiB0byB3b3JraW5nXFxuK1xcdCAqIHN0YXRlLiBUWCBxdWV1ZXMgYXJlIGRpc2FibGVkLiBJbiBzb21lIGNhc2VzLCB1cHBlciBsYXllciBvclxcbitcXHQgKiB2ZW5kb3IgY29kZSBtYXkgaW5hZHZlcnRlbnRseSBlbmFibGUgdGhlIHF1ZXVlLiBJbnRlbnRpb24gb2ZcXG4rXFx0ICogdGhlIGRpc2FibGVfdHJhZmZpYyBmbGFnIGlzIHRvIHN0b3AgdHJhZmZpYyBmcm9tIGZsb3dpbmcuXFxuK1xcdCAqL1xcbitcXHRuZXRpZl90eF9kaXNhYmxlKHRjNi1cXHUwMDNlbmV0ZGV2KTtcXG4rXFx0b2FfdGM2X2Ryb3BfdHhfc2tiKHRjNiwgc2tiKTtcXG4rXFx0b2FfdGM2X2ZyZWVfb25nb2luZ19za2JzKHRjNik7XFxuIFxcdG9hX3RjNl93cml0ZV9yZWdpc3Rlcih0YzYsIE9BX1RDNl9SRUdfSU5UX01BU0swLCByZWd2YWwpO1xcbiBcXHRvYV90YzZfcmVhZF9yZWdpc3Rlcih0YzYsIE9BX1RDNl9SRUdfU1RBVFVTMCwgXFx1MDAyNnJlZ3ZhbCk7XFxuIFxcdG9hX3RjNl93cml0ZV9yZWdpc3Rlcih0YzYsIE9BX1RDNl9SRUdfU1RBVFVTMCwgcmVndmFsKTtcXG5AQCAtNzE0LDYgKzc1NiwxMyBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcm9jZXNzX2V4dGVuZGVkX3N0YXR1cyhzdHJ1Y3Qgb2FfdGM2ICp0YzYpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdH1cXG4gXFxuK1xcdC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBlYWNoIGNodW5rIHJlY2VpdmVkIGluIGEgZ2l2ZW4gU1BJXFxuK1xcdCAqIHRyYW5zYWN0aW9uLiBJbiBjYXNlLCBleHRlbmRlZCBzdGF0dXMgYml0IGlzIHNldCBpbiBtb3JlIHRoYW5cXG4rXFx0ICogb25lIGNodW5rLCBza2lwIHRoZSB3cml0ZSwgaWYgc3RhdHVzMCBpcyBhbHJlYWR5IGNsZWFyZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXZhbHVlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuIFxcdC8qIENsZWFyIHRoZSBlcnJvciBpbnRlcnJ1cHRzIHN0YXR1cyAqL1xcbiBcXHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUkVHX1NUQVRVUzAsIHZhbHVlKTtcXG4gXFx0aWYgKHJldCkge1xcbkBAIC03MjMsOCArNzcyLDcgQEAgc3RhdGljIGludCBvYV90YzZfcHJvY2Vzc19leHRlbmRlZF9zdGF0dXMoc3RydWN0IG9hX3RjNiAqdGM2KVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoRklFTERfR0VUKFNUQVRVUzBfUlhfQlVGRkVSX09WRVJGTE9XX0VSUk9SLCB2YWx1ZSkpIHtcXG4tXFx0XFx0dGM2LVxcdTAwM2VyeF9idWZfb3ZlcmZsb3cgPSB0cnVlO1xcbi1cXHRcXHRvYV90YzZfY2xlYW51cF9vbmdvaW5nX3J4X3NrYih0YzYpO1xcbitcXHRcXHRvYV90YzZfbG9va19mb3JfbmV3X2ZyYW1lKHRjNik7XFxuIFxcdFxcdG5ldF9lcnJfcmF0ZWxpbWl0ZWQoXFxcIiVzOiBSZWNlaXZlIGJ1ZmZlciBvdmVyZmxvdyBlcnJvclxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0ICAgIHRjNi1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VuYW1lKTtcXG4gXFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuQEAgLTc1MCw2ICs3OTgsOCBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcm9jZXNzX2V4dGVuZGVkX3N0YXR1cyhzdHJ1Y3Qgb2FfdGM2ICp0YzYpXFxuIFxcbiBzdGF0aWMgaW50IG9hX3RjNl9wcm9jZXNzX3J4X2NodW5rX2Zvb3RlcihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUzMiBmb290ZXIpXFxuIHtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbiBcXHQvKiBQcm9jZXNzIHJ4IGNodW5rIGZvb3RlciBmb3IgdGhlIGZvbGxvd2luZyxcXG4gXFx0ICogMS4gdHggY3JlZGl0c1xcbiBcXHQgKiAyLiBlcnJvcnMgaWYgYW55IGZyb20gTUFDLVBIWVxcbkBAIC03NjAsOSArODEwLDExIEBAIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3NfcnhfY2h1bmtfZm9vdGVyKHN0cnVjdCBvYV90YzYgKnRjNiwgdTMyIGZvb3RlcilcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBmb290ZXIpO1xcbiBcXG4gXFx0aWYgKEZJRUxEX0dFVChPQV9UQzZfREFUQV9GT09URVJfRVhURU5ERURfU1RTLCBmb290ZXIpKSB7XFxuLVxcdFxcdGludCByZXQgPSBvYV90YzZfcHJvY2Vzc19leHRlbmRlZF9zdGF0dXModGM2KTtcXG4tXFxuLVxcdFxcdGlmIChyZXQpXFxuK1xcdFxcdHJldCA9IG9hX3RjNl9wcm9jZXNzX2V4dGVuZGVkX3N0YXR1cyh0YzYpO1xcbitcXHRcXHQvKiBFQUdBSU4gZXJyb3IgaXMgcmVjb3ZlcmFibGUuIE1vdmUgb24gdG8gY2hlY2tcXG4rXFx0XFx0ICogSEVBREVSIGFuZCBTWU5DIGVycm9ycyBiZWZvcmUgcmV0dXJuaW5nLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVBR0FJTilcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG5AQCAtNzgwLDcgKzgzMiw3IEBAIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3NfcnhfY2h1bmtfZm9vdGVyKHN0cnVjdCBvYV90YzYgKnRjNiwgdTMyIGZvb3RlcilcXG4gXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBvYV90YzZfc3VibWl0X3J4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYpXFxuQEAgLTgwNSwxMyArODU3LDM1IEBAIHN0YXRpYyB2b2lkIG9hX3RjNl9zdWJtaXRfcnhfc2tiKHN0cnVjdCBvYV90YzYgKnRjNilcXG4gXFx0dGM2LVxcdTAwM2VyeF9za2IgPSBOVUxMO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBvYV90YzZfdXBkYXRlX3J4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpwYXlsb2FkLCB1OCBsZW5ndGgpXFxuKy8qIE9uIG92ZXJzdWJzY3JpYmVkIHRyYWZmaWMgY29uZGl0aW9uLCBwYXJ0aWN1bGFybHkgd2l0aCBvdmVyd2hlbG1pbmcgcnhcXG4rICogYnVmZmVyIG92ZXJmbG93IGVycm9ycywgdGhlcmUgY291bGQgYmUgZGF0YSBjaHVuayBsb3NzLiBJZiB0YWlsICsgbGVuZ3RoXFxuKyAqIGdvZXMgYmV5b25kIGVuZCBwb2ludGVyLCB0aGF0IGlzIGFuIGluZGljYXRpb24gdGhhdCB0aGUgZGF0YSBjaHVuayB3aXRoXFxuKyAqIGVuZF92YWxpZCBiaXQgaXMgbG9zdC4gVGltZSB0byBsb29rIGZvciBhIGRhdGEgY2h1bmsgd2l0aCBzdGFydF92YWxpZCBiaXQuXFxuKyAqXFxuKyAqIElmIHJ4X3NrYiBpcyBOVUxMLCBpdCBpcyB0aW1lIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIGRhdGEgY2h1bmsgd2l0aFxcbisgKiBzdGFydF9iaXQuXFxuKyAqL1xcbitzdGF0aWMgaW50IG9hX3RjNl91cGRhdGVfcnhfc2tiKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKnBheWxvYWQsIHU4IGxlbmd0aClcXG4ge1xcbitcXHRpZiAoIXRjNi1cXHUwMDNlcnhfc2tiIHx8XFxuK1xcdCAgICBza2JfdGFpbHJvb20odGM2LVxcdTAwM2VyeF9za2IpIFxcdTAwM2MgbGVuZ3RoKSB7XFxuK1xcdFxcdG9hX3RjNl9sb29rX2Zvcl9uZXdfZnJhbWUodGM2KTtcXG4rXFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuK1xcdH1cXG4rXFxuIFxcdG1lbWNweShza2JfcHV0KHRjNi1cXHUwMDNlcnhfc2tiLCBsZW5ndGgpLCBwYXlsb2FkLCBsZW5ndGgpO1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLyogT24gb3ZlcndoZWxtaW5nIHJ4IGJ1ZmZlciBvdmVyZmxvdyBlcnJvcnMsIGR1ZSB0byBkYXRhIGNodW5rIGxvc3MsIGl0IGlzXFxuKyAqIHBvc3NpYmxlIHRoYXQgd2UgZ2V0IHR3byBkYXRhIGNodW5rcyB3aXRoIHN0YXJ0X3ZhbGlkIGJpdCBzZXQsIHdpdGhvdXRcXG4rICogZW5kX3ZhbGlkIGJpdCBzZXQgaW4gYmV0d2Vlbi4gSW4gdGhpcyBjYXNlLCByeF9za2Igd291bGQgaGF2ZSBhIHZhbGlkXFxuKyAqIGJ1ZmZlciBwb2ludGVyLiBXZSBzaG91bGQgcmVsZWFzZSwgaWYgYSB2YWxpZCBwb2ludGVyIGlzIGZvdW5kIGJlZm9yZVxcbisgKiBhbGxvY2F0aW5nIGEgbmV3IG9uZS5cXG4rICovXFxuIHN0YXRpYyBpbnQgb2FfdGM2X2FsbG9jYXRlX3J4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYpXFxuIHtcXG4rXFx0b2FfdGM2X2NsZWFudXBfb25nb2luZ19yeF9za2IodGM2KTtcXG4gXFx0dGM2LVxcdTAwM2VyeF9za2IgPSBuZXRkZXZfYWxsb2Nfc2tiX2lwX2FsaWduKHRjNi1cXHUwMDNlbmV0ZGV2LCB0YzYtXFx1MDAzZW5ldGRldi1cXHUwMDNlbXR1ICtcXG4gXFx0XFx0XFx0XFx0XFx0XFx0RVRIX0hMRU4gKyBFVEhfRkNTX0xFTik7XFxuIFxcdGlmICghdGM2LVxcdTAwM2VyeF9za2IpIHtcXG5AQCAtODMxLDcgKzkwNSw5IEBAIHN0YXRpYyBpbnQgb2FfdGM2X3ByY3NfY29tcGxldGVfcnhfZnJhbWUoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqcGF5bG9hZCxcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdG9hX3RjNl91cGRhdGVfcnhfc2tiKHRjNiwgcGF5bG9hZCwgc2l6ZSk7XFxuK1xcdHJldCA9IG9hX3RjNl91cGRhdGVfcnhfc2tiKHRjNiwgcGF5bG9hZCwgc2l6ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRvYV90YzZfc3VibWl0X3J4X3NrYih0YzYpO1xcbiBcXG5AQCAtODQ2LDIyICs5MjIsMjQgQEAgc3RhdGljIGludCBvYV90YzZfcHJjc19yeF9mcmFtZV9zdGFydChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpwYXlsb2FkLCB1MTYgc2l6ZSlcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdG9hX3RjNl91cGRhdGVfcnhfc2tiKHRjNiwgcGF5bG9hZCwgc2l6ZSk7XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIG9hX3RjNl91cGRhdGVfcnhfc2tiKHRjNiwgcGF5bG9hZCwgc2l6ZSk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG9hX3RjNl9wcmNzX3J4X2ZyYW1lX2VuZChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpwYXlsb2FkLCB1MTYgc2l6ZSlcXG4rc3RhdGljIGludCBvYV90YzZfcHJjc19yeF9mcmFtZV9lbmQoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqcGF5bG9hZCwgdTE2IHNpemUpXFxuIHtcXG4tXFx0b2FfdGM2X3VwZGF0ZV9yeF9za2IodGM2LCBwYXlsb2FkLCBzaXplKTtcXG4rXFx0aW50IHJldDtcXG4gXFxuLVxcdG9hX3RjNl9zdWJtaXRfcnhfc2tiKHRjNik7XFxuK1xcdHJldCA9IG9hX3RjNl91cGRhdGVfcnhfc2tiKHRjNiwgcGF5bG9hZCwgc2l6ZSk7XFxuK1xcdGlmICghcmV0KVxcbitcXHRcXHRvYV90YzZfc3VibWl0X3J4X3NrYih0YzYpO1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBvYV90YzZfcHJjc19vbmdvaW5nX3J4X2ZyYW1lKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKnBheWxvYWQsXFxuLVxcdFxcdFxcdFxcdFxcdCB1MzIgZm9vdGVyKVxcbitzdGF0aWMgaW50IG9hX3RjNl9wcmNzX29uZ29pbmdfcnhfZnJhbWUoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqcGF5bG9hZCxcXG4rXFx0XFx0XFx0XFx0XFx0dTMyIGZvb3RlcilcXG4ge1xcbi1cXHRvYV90YzZfdXBkYXRlX3J4X3NrYih0YzYsIHBheWxvYWQsIE9BX1RDNl9DSFVOS19QQVlMT0FEX1NJWkUpO1xcbitcXHRyZXR1cm4gb2FfdGM2X3VwZGF0ZV9yeF9za2IodGM2LCBwYXlsb2FkLFxcbitcXHRcXHRcXHRcXHQgICAgT0FfVEM2X0NIVU5LX1BBWUxPQURfU0laRSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgb2FfdGM2X3ByY3NfcnhfY2h1bmtfcGF5bG9hZChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpkYXRhLFxcbkBAIC04NzYsMTAgKzk1NCwxMCBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcmNzX3J4X2NodW5rX3BheWxvYWQoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqZGF0YSxcXG4gXFx0dTE2IHNpemU7XFxuIFxcbiBcXHQvKiBSZXN0YXJ0IHRoZSBuZXcgcnggZnJhbWUgYWZ0ZXIgcmVjZWl2aW5nIHJ4IGJ1ZmZlciBvdmVyZmxvdyBlcnJvciAqL1xcbi1cXHRpZiAoc3RhcnRfdmFsaWQgXFx1MDAyNlxcdTAwMjYgdGM2LVxcdTAwM2VyeF9idWZfb3ZlcmZsb3cpXFxuLVxcdFxcdHRjNi1cXHUwMDNlcnhfYnVmX292ZXJmbG93ID0gZmFsc2U7XFxuK1xcdGlmIChzdGFydF92YWxpZCBcXHUwMDI2XFx1MDAyNiB0YzYtXFx1MDAzZXdhaXRfdW50aWxfc3RhcnRfdmFsaWQpXFxuK1xcdFxcdHRjNi1cXHUwMDNld2FpdF91bnRpbF9zdGFydF92YWxpZCA9IGZhbHNlO1xcbiBcXG4tXFx0aWYgKHRjNi1cXHUwMDNlcnhfYnVmX292ZXJmbG93KVxcbitcXHRpZiAodGM2LVxcdTAwM2V3YWl0X3VudGlsX3N0YXJ0X3ZhbGlkKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdC8qIFByb2Nlc3MgdGhlIGNodW5rIHdpdGggY29tcGxldGUgcnggZnJhbWUgKi9cXG5AQCAtOTAxLDggKzk3OSw3IEBAIHN0YXRpYyBpbnQgb2FfdGM2X3ByY3NfcnhfY2h1bmtfcGF5bG9hZChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpkYXRhLFxcbiBcXHQvKiBQcm9jZXNzIHRoZSBjaHVuayB3aXRoIG9ubHkgcnggZnJhbWUgZW5kICovXFxuIFxcdGlmIChlbmRfdmFsaWQgXFx1MDAyNlxcdTAwMjYgIXN0YXJ0X3ZhbGlkKSB7XFxuIFxcdFxcdHNpemUgPSBlbmRfYnl0ZV9vZmZzZXQgKyAxO1xcbi1cXHRcXHRvYV90YzZfcHJjc19yeF9mcmFtZV9lbmQodGM2LCBkYXRhLCBzaXplKTtcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdHJldHVybiBvYV90YzZfcHJjc19yeF9mcmFtZV9lbmQodGM2LCBkYXRhLCBzaXplKTtcXG4gXFx0fVxcbiBcXG4gXFx0LyogUHJvY2VzcyB0aGUgY2h1bmsgd2l0aCBwcmV2aW91cyByeCBmcmFtZSBlbmQgYW5kIG5leHQgcnggZnJhbWVcXG5AQCAtOTE2LDYgKzk5MywxNSBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcmNzX3J4X2NodW5rX3BheWxvYWQoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqZGF0YSxcXG4gXFx0XFx0aWYgKHRjNi1cXHUwMDNlcnhfc2tiKSB7XFxuIFxcdFxcdFxcdHNpemUgPSBlbmRfYnl0ZV9vZmZzZXQgKyAxO1xcbiBcXHRcXHRcXHRvYV90YzZfcHJjc19yeF9mcmFtZV9lbmQodGM2LCBkYXRhLCBzaXplKTtcXG4rXFxuK1xcdFxcdFxcdC8qIFJldHVybiB2YWx1ZSBmcm9tIG9hX3RjNl9wcmNzX3J4X2ZyYW1lX2VuZCBpcyBub3RcXG4rXFx0XFx0XFx0ICogY2hlY2tlZC4gSWYgaXQgcmV0dXJuZWQgYW4gZXJyb3IsIGl0IGlzIHRvIG1ha2VcXG4rXFx0XFx0XFx0ICogdGhlIGNvZGUgdG8gbG9vayBmb3IgbmV3IGZyYW1lLiBBdCB0aGlzIHN0YWdlLFxcbitcXHRcXHRcXHQgKiBjb2RlIGJlbG93IGlzIGdvaW5nIHRvIHByb2Nlc3MgYSBuZXcgZnJhbWUuIFNvLFxcbitcXHRcXHRcXHQgKiBlcnJvciBjb25kaXRpb24gaXMgc2V0IHRvIGZhbHNlLCBpbiBjYXNlIGl0IGlzXFxuK1xcdFxcdFxcdCAqIHNldCBiZWZvcmUgcHJvY2VlZGluZy5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHRjNi1cXHUwMDNld2FpdF91bnRpbF9zdGFydF92YWxpZCA9IGZhbHNlO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHNpemUgPSBPQV9UQzZfQ0hVTktfUEFZTE9BRF9TSVpFIC0gc3RhcnRfYnl0ZV9vZmZzZXQ7XFxuIFxcdFxcdHJldHVybiBvYV90YzZfcHJjc19yeF9mcmFtZV9zdGFydCh0YzYsXFxuQEAgLTkyNCw5ICsxMDEwLDcgQEAgc3RhdGljIGludCBvYV90YzZfcHJjc19yeF9jaHVua19wYXlsb2FkKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKmRhdGEsXFxuIFxcdH1cXG4gXFxuIFxcdC8qIFByb2Nlc3MgdGhlIGNodW5rIHdpdGggb25nb2luZyByeCBmcmFtZSBkYXRhICovXFxuLVxcdG9hX3RjNl9wcmNzX29uZ29pbmdfcnhfZnJhbWUodGM2LCBkYXRhLCBmb290ZXIpO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiBvYV90YzZfcHJjc19vbmdvaW5nX3J4X2ZyYW1lKHRjNiwgZGF0YSwgZm9vdGVyKTtcXG4gfVxcbiBcXG4gc3RhdGljIHUzMiBvYV90YzZfZ2V0X3J4X2NodW5rX2Zvb3RlcihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUxNiBmb290ZXJfb2Zmc2V0KVxcbkBAIC05NDIsOCArMTAyNiw5IEBAIHN0YXRpYyB1MzIgb2FfdGM2X2dldF9yeF9jaHVua19mb290ZXIoc3RydWN0IG9hX3RjNiAqdGM2LCB1MTYgZm9vdGVyX29mZnNldClcXG4gc3RhdGljIGludCBvYV90YzZfcHJvY2Vzc19zcGlfZGF0YV9yeF9idWYoc3RydWN0IG9hX3RjNiAqdGM2LCB1MTYgbGVuZ3RoKVxcbiB7XFxuIFxcdHUxNiBub19vZl9yeF9jaHVua3MgPSBsZW5ndGggLyBPQV9UQzZfQ0hVTktfU0laRTtcXG4rXFx0Ym9vbCByZXRyeSA9IGZhbHNlO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4gXFx0dTMyIGZvb3RlcjtcXG4tXFx0aW50IHJldDtcXG4gXFxuIFxcdC8qIEFsbCB0aGUgcnggY2h1bmtzIGluIHRoZSByZWNlaXZlIFNQSSBkYXRhIGJ1ZmZlciBhcmUgZXhhbWluZWQgaGVyZSAqL1xcbiBcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIG5vX29mX3J4X2NodW5rczsgaSsrKSB7XFxuQEAgLTk1Miw4ICsxMDM3LDExIEBAIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3Nfc3BpX2RhdGFfcnhfYnVmKHN0cnVjdCBvYV90YzYgKnRjNiwgdTE2IGxlbmd0aClcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgIE9BX1RDNl9DSFVOS19QQVlMT0FEX1NJWkUpO1xcbiBcXG4gXFx0XFx0cmV0ID0gb2FfdGM2X3Byb2Nlc3NfcnhfY2h1bmtfZm9vdGVyKHRjNiwgZm9vdGVyKTtcXG4tXFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRpZiAocmV0ICE9IC1FQUdBSU4pXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdFxcdHJldHJ5ID0gdHJ1ZTtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0LyogSWYgdGhlcmUgaXMgYSBkYXRhIHZhbGlkIGNodW5rcyB0aGVuIHByb2Nlc3MgaXQgZm9yIHRoZVxcbiBcXHRcXHQgKiBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gZGV0ZXJtaW5lIHRoZSB2YWxpZGl0eSBhbmQgdGhlIGxvY2F0aW9uXFxuQEAgLTk2NSwxMiArMTA1MywzNSBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcm9jZXNzX3NwaV9kYXRhX3J4X2J1ZihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUxNiBsZW5ndGgpXFxuIFxcbiBcXHRcXHRcXHRyZXQgPSBvYV90YzZfcHJjc19yeF9jaHVua19wYXlsb2FkKHRjNiwgcGF5bG9hZCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZm9vdGVyKTtcXG4tXFx0XFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRcXHRpZiAocmV0ICE9IC1FTk9NRU0gXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FQUdBSU4pXFxuK1xcdFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdFxcdFxcdHJldHJ5ID0gdHJ1ZTtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiAwO1xcbitcXHQvKiBOb3QgYmFpbGluZyBvdXQgb24gcmVjb3ZlcmFibGUgZXJyb3IgY29kZXMsIC1FQUdBSU4gYW5kXFxuK1xcdCAqIC1FTk9NRU0uIElmIHN1YnNlcXVlbnQgbG9vcCBpdGVyYXRpb25zLCBpZiBhbnksIHN1Y2NlZWRzLFxcbitcXHQgKiBlcnJvciBjb2RlIHdvdWxkIGJlIG92ZXJ3cml0dGVuLiByZXRyeSBmbGFnIGhlbHBzIHRvXFxuK1xcdCAqIG1ha2UgdGhlIGNhbGxlciB0byBjb250aW51ZSBhbmQgcmV0cnkuIFNpbmNlIHJlY292ZXJ5XFxuK1xcdCAqIGFjdGlvbiBmb3IgLUVOT01FTSBhbmQgLUVBR0FJTiBhcmUgc2FtZSwgd2UgYXJlIHJldHVybmluZ1xcbitcXHQgKiBvbmUgb2YgdGhlIGVycm9yIGNvZGVzLCB0aGF0IGlzIC1FQUdBSU4uXFxuK1xcdCAqXFxuK1xcdCAqIFN1Y2Nlc3NmdWwgcmVjb3ZlcnkgZGVwZW5kcyBvbiBob3cgc21hbGwgdGhlIGZyYW1lcyBhcmUsXFxuK1xcdCAqIGhvdyBtYW55IGNodW5rcywgYW1vbmcgdGhlIHJlY2VpdmVkIGNodW5rcyB0cmlnZ2VyZWQgdGhlXFxuK1xcdCAqIGVycm9yLCB3aGV0aGVyIGRhdGEgaXMgaW50YWN0IGV2ZW4gd2l0aCBlcnJvciBjb25kaXRpb25zLlxcbitcXHQgKiBBcyBhIHJlc3VsdCwgdGhlcmUgaXMgbm8gc2luZ2xlLCBiZXN0IG1ldGhvZCB0byByZWNvdmVyXFxuK1xcdCAqIG1vc3QgZGF0YSB3aGVuIGVycm9yIGNvbmRpdGlvbnMgaGl0LiBXZSBkbyBvdXIgYmVzdCBieVxcbitcXHQgKiBwcm9jZXNzaW5nIGFsbCB0aGUgY2h1bmtzIHdpdGggZ29vZCBcXFwiZm9vdGVyIGhlYWRlclxcXCIgYW5kXFxuK1xcdCAqIFxcXCJkYXRhIHZhbGlkXFxcIiBiaXQgc2V0LlxcbitcXHQgKi9cXG4rXFx0aWYgKHJldHJ5KSB7XFxuK1xcdFxcdHJldCA9IC1FQUdBSU47XFxuK1xcdFxcdG9hX3RjNl9sb29rX2Zvcl9uZXdfZnJhbWUodGM2KTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIF9fYmUzMiBvYV90YzZfcHJlcGFyZV9kYXRhX2hlYWRlcihib29sIGRhdGFfdmFsaWQsIGJvb2wgc3RhcnRfdmFsaWQsXFxuQEAgLTExMzIsMTIgKzEyNDMsOSBAQCBzdGF0aWMgaW50IG9hX3RjNl90cnlfc3BpX3RyYW5zZmVyKHN0cnVjdCBvYV90YzYgKnRjNilcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0cmV0ID0gb2FfdGM2X3Byb2Nlc3Nfc3BpX2RhdGFfcnhfYnVmKHRjNiwgc3BpX2xlbik7XFxuLVxcdFxcdGlmIChyZXQpIHtcXG4tXFx0XFx0XFx0aWYgKHJldCA9PSAtRUFHQUlOKVxcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdFxcdG9hX3RjNl9jbGVhbnVwX29uZ29pbmdfdHhfc2tiKHRjNik7XFxuLVxcdFxcdFxcdG9hX3RjNl9jbGVhbnVwX29uZ29pbmdfcnhfc2tiKHRjNik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FQUdBSU4pIHtcXG4rXFx0XFx0XFx0b2FfdGM2X2ZyZWVfb25nb2luZ19za2JzKHRjNik7XFxuIFxcdFxcdFxcdG5ldGRldl9lcnIodGM2LVxcdTAwM2VuZXRkZXYsIFxcXCJEZXZpY2UgZXJyb3I6ICVkXFxcXG5cXFwiLCByZXQpO1xcbiBcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRcXHR9XFxuQEAgLTExNTksMTUgKzEyNjcsMjAgQEAgc3RhdGljIGlycXJldHVybl90IG9hX3RjNl9tYWNwaHlfdGhyZWFkZWRfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpXFxuIFxcdCAqIG5vIG5lZWQgdG8gYXR0ZW1wdCBzcGkgdHJhbnNmZXIsIG9uY2UgaXQgZmFpbHMuIFBlbmRpbmcgc2tic1xcbiBcXHQgKiBhcmUgYWxyZWFkeSBmcmVlZC5cXG4gXFx0ICovXFxuLVxcdGlmICghdGM2LVxcdTAwM2VkaXNhYmxlX3RyYWZmaWMpIHtcXG4tXFx0XFx0d2hpbGUgKHRjNi1cXHUwMDNlaW50X2ZsYWcgfHxcXG4tXFx0XFx0ICAgICAgICh0YzYtXFx1MDAzZXdhaXRpbmdfdHhfc2tiIFxcdTAwMjZcXHUwMDI2IHRjNi1cXHUwMDNldHhfY3JlZGl0cykpIHtcXG4tXFx0XFx0XFx0cmV0ID0gb2FfdGM2X3RyeV9zcGlfdHJhbnNmZXIodGM2KTtcXG4tXFx0XFx0XFx0aWYgKHJldCkge1xcbi1cXHRcXHRcXHRcXHRkaXNhYmxlX2lycV9ub3N5bmModGM2LVxcdTAwM2VzcGktXFx1MDAzZWlycSk7XFxuLVxcdFxcdFxcdFxcdG9hX3RjNl9kaXNhYmxlX3RyYWZmaWModGM2KTtcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdFxcdH1cXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ0YzYtXFx1MDAzZXR4X3NrYl9sb2NrKTtcXG4rXFx0aWYgKHRjNi1cXHUwMDNlZGlzYWJsZV90cmFmZmljKSB7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0YzYtXFx1MDAzZXR4X3NrYl9sb2NrKTtcXG4rXFx0XFx0cmV0dXJuIElSUV9IQU5ETEVEO1xcbitcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0YzYtXFx1MDAzZXR4X3NrYl9sb2NrKTtcXG4rXFxuK1xcdHdoaWxlICh0YzYtXFx1MDAzZWludF9mbGFnIHx8XFxuK1xcdCAgICAgICAodGM2LVxcdTAwM2V3YWl0aW5nX3R4X3NrYiBcXHUwMDI2XFx1MDAyNiB0YzYtXFx1MDAzZXR4X2NyZWRpdHMpKSB7XFxuK1xcdFxcdHJldCA9IG9hX3RjNl90cnlfc3BpX3RyYW5zZmVyKHRjNik7XFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0ZGlzYWJsZV9pcnFfbm9zeW5jKHRjNi1cXHUwMDNlc3BpLVxcdTAwM2VpcnEpO1xcbitcXHRcXHRcXHRvYV90YzZfZGlzYWJsZV90cmFmZmljKHRjNik7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuQEAgLTEyNDUsMjMgKzEzNTgsMzAgQEAgRVhQT1JUX1NZTUJPTF9HUEwob2FfdGM2X3plcm9fYWxpZ25fcmVjZWl2ZV9mcmFtZV9lbmFibGUpO1xcbiAgKiBAdGM2OiBvYV90YzYgc3RydWN0LlxcbiAgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIGluIHdoaWNoIHRoZSBldGhlcm5ldCBmcmFtZSBpcyBzdG9yZWQuXFxuICAqXFxuLSAqIFJldHVybjogTkVUREVWX1RYX09LIGlmIHRoZSB0cmFuc21pdCBldGhlcm5ldCBmcmFtZSBza2IgYWRkZWQgaW4gdGhlIHR4X3NrYl9xXFxuLSAqIG90aGVyd2lzZSByZXR1cm5zIE5FVERFVl9UWF9CVVNZLlxcbisgKiBSZXR1cm46IE5FVERFVl9UWF9PSyBlaXRoZXIgb24gc3VjY2Vzc2Z1bCBxdWV1ZWluZyBvZiB0aGUgcGFja2V0IGZvclxcbisgKiB0cmFuc21pc3Npb24sIG9yIG9uIHBhY2tldCBnZXR0aW5nIGRyb3BwZWQuIFBhY2tldCBjYW4gYmUgZHJvcHBlZCBkdWUgdG9cXG4rICogZmFpbHVyZSBpbiBsaW5lYXJpemluZyB0aGUgYnVmZmVyIG9yIGRpc2FibGVfdHJhZmZpYyBpcyBzZXQgZHVlIHRvXFxuKyAqIGVhcmxpZXIgZmF0YWwgZXJyb3IuIFJldHVybnMgTkVUREVWX1RYX0JVU1kgd2hlbiB0aGVyZSBpcyBubyByb29tXFxuKyAqIHRvIHF1ZXVlIHRoZSBwYWNrZXQuXFxuICAqL1xcbiBuZXRkZXZfdHhfdCBvYV90YzZfc3RhcnRfeG1pdChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4tXFx0aWYgKHRjNi1cXHUwMDNlZGlzYWJsZV90cmFmZmljIHx8IHRjNi1cXHUwMDNld2FpdGluZ190eF9za2IpIHtcXG4tXFx0XFx0bmV0aWZfc3RvcF9xdWV1ZSh0YzYtXFx1MDAzZW5ldGRldik7XFxuLVxcdFxcdHJldHVybiBORVRERVZfVFhfQlVTWTtcXG4tXFx0fVxcbi1cXG4gXFx0aWYgKHNrYl9saW5lYXJpemUoc2tiKSkge1xcbi1cXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xcbi1cXHRcXHR0YzYtXFx1MDAzZW5ldGRldi1cXHUwMDNlc3RhdHMudHhfZHJvcHBlZCsrO1xcbitcXHRcXHRvYV90YzZfZHJvcF90eF9za2IodGM2LCBza2IpO1xcbiBcXHRcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbiBcXHR9XFxuIFxcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnRjNi1cXHUwMDNldHhfc2tiX2xvY2spO1xcbitcXHRpZiAodGM2LVxcdTAwM2V3YWl0aW5nX3R4X3NrYikge1xcbitcXHRcXHRuZXRpZl9zdG9wX3F1ZXVlKHRjNi1cXHUwMDNlbmV0ZGV2KTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRjNi1cXHUwMDNldHhfc2tiX2xvY2spO1xcbitcXHRcXHRyZXR1cm4gTkVUREVWX1RYX0JVU1k7XFxuK1xcdH1cXG4rXFx0aWYgKHRjNi1cXHUwMDNlZGlzYWJsZV90cmFmZmljKSB7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0YzYtXFx1MDAzZXR4X3NrYl9sb2NrKTtcXG4rXFx0XFx0b2FfdGM2X2Ryb3BfdHhfc2tiKHRjNiwgc2tiKTtcXG4rXFx0XFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4rXFx0fVxcbiBcXHR0YzYtXFx1MDAzZXdhaXRpbmdfdHhfc2tiID0gc2tiO1xcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dGM2LVxcdTAwM2V0eF9za2JfbG9jayk7XFxuIFxcbkBAIC0xMzkzLDggKzE1MTMsMTAgQEAgRVhQT1JUX1NZTUJPTF9HUEwob2FfdGM2X2luaXQpO1xcbiAgKi9cXG4gdm9pZCBvYV90YzZfZXhpdChzdHJ1Y3Qgb2FfdGM2ICp0YzYpXFxuIHtcXG4tXFx0dGM2LVxcdTAwM2VkaXNhYmxlX3RyYWZmaWMgPSB0cnVlO1xcbiBcXHRkaXNhYmxlX2lycSh0YzYtXFx1MDAzZXNwaS1cXHUwMDNlaXJxKTtcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ0YzYtXFx1MDAzZXR4X3NrYl9sb2NrKTtcXG4rXFx0dGM2LVxcdTAwM2VkaXNhYmxlX3RyYWZmaWMgPSB0cnVlO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dGM2LVxcdTAwM2V0eF9za2JfbG9jayk7XFxuIFxcdG9hX3RjNl9waHlfZXhpdCh0YzYpO1xcbiBcXHRvYV90YzZfZnJlZV9wZW5kaW5nX3NrYnModGM2KTtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzoyNDozNS45MDQ4ODE1MTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2NDQzOTMxNTkwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9QRU4gQWxsaWFuY2UgMTBCQVNFLVQxeCBNQUMtUEhZIFNlcmlhbCBJbnRlcmZhY2UgKG9hX3RjNikgZnJhbWV3b3JrLCB3aGljaCBpcyBjdXJyZW50bHkgb25seSB1c2VkIGJ5IHRoZSBNaWNyb2NoaXAgTEFOODY1eCBTUEkgZHJpdmVyLiBTaW5jZSBTUEkgZGV2aWNlcyByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBjYW5ub3QgYmUgZHluYW1pY2FsbHkgaW5zdGFudGlhdGVkIG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmIxMmM3ZDgyOGRhZThhZWQxODU0MmVkY2UyMzk2NTJiMWQ5Mzc0Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDAzOjI0OjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuY1xuaW5kZXggMDcyN2Q1MzM0NWEzMy4uNmUyN2VkMzlhOTliZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuY1xuQEAgLTEyNyw3ICsxMjcsNyBAQCBzdHJ1Y3Qgb2FfdGM2IHtcbiBcdHUxNiBzcGlfZGF0YV90eF9idWZfb2Zmc2V0O1xuIFx0dTE2IHR4X2NyZWRpdHM7XG4gXHR1OCByeF9jaHVua3NfYXZhaWxhYmxlO1xuLVx0Ym9vbCByeF9idWZfb3ZlcmZsb3c7XG4rXHRib29sIHdhaXRfdW50aWxfc3RhcnRfdmFsaWQ7XG4gXHRib29sIGludF9mbGFnO1xuIFx0Ym9vbCBkaXNhYmxlX3RyYWZmaWM7XG4gfTtcbkBAIC00MjMsNyArNDIzLDcgQEAgc3RhdGljIGludCBvYV90YzZfbWRpb2J1c19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnbnVtKVxuIHtcbiBcdHN0cnVjdCBvYV90YzYgKnRjNiA9IGJ1cy1cdTAwM2Vwcml2O1xuIFx0dTMyIHJlZ3ZhbDtcbi1cdGJvb2wgcmV0O1xuK1x0aW50IHJldDtcbiBcbiBcdHJldCA9IG9hX3RjNl9yZWFkX3JlZ2lzdGVyKHRjNiwgT0FfVEM2X1BIWV9TVERfUkVHX0FERFJfQkFTRSB8XG4gXHRcdFx0XHQgICAocmVnbnVtIFx1MDAyNiBPQV9UQzZfUEhZX1NURF9SRUdfQUREUl9NQVNLKSxcbkBAIC02NTIsNiArNjUyLDI2IEBAIHN0YXRpYyBpbnQgb2FfdGM2X2VuYWJsZV9kYXRhX3RyYW5zZmVyKHN0cnVjdCBvYV90YzYgKnRjNilcbiBcdHJldHVybiBvYV90YzZfd3JpdGVfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUkVHX0NPTkZJRzAsIHZhbHVlKTtcbiB9XG4gXG4rLyogQ2FsbGVkIHdoZW4gYSBmcmFtZSB0aGF0IGlzIG1lYW50IHRvIGJlIHRyYW5zbWl0dGVkLCBpcyBkcm9wcGVkLiAqL1xuK3N0YXRpYyB2b2lkIG9hX3RjNl9kcm9wX3R4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0aWYgKHNrYikge1xuK1x0XHR0YzYtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQrKztcbitcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHN0cnVjdCBza19idWZmICpvYV90YzZfZGV0YWNoX3dhaXRpbmdfdHhfc2tiKHN0cnVjdCBvYV90YzYgKnRjNilcbit7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ0YzYtXHUwMDNldHhfc2tiX2xvY2spO1xuK1x0c2tiID0gdGM2LVx1MDAzZXdhaXRpbmdfdHhfc2tiO1xuK1x0dGM2LVx1MDAzZXdhaXRpbmdfdHhfc2tiID0gTlVMTDtcbitcbitcdHJldHVybiBza2I7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIG9hX3RjNl9jbGVhbnVwX29uZ29pbmdfcnhfc2tiKHN0cnVjdCBvYV90YzYgKnRjNilcbiB7XG4gXHRpZiAodGM2LVx1MDAzZXJ4X3NrYikge1xuQEAgLTY2MywyOSArNjgzLDM5IEBAIHN0YXRpYyB2b2lkIG9hX3RjNl9jbGVhbnVwX29uZ29pbmdfcnhfc2tiKHN0cnVjdCBvYV90YzYgKnRjNilcbiBcbiBzdGF0aWMgdm9pZCBvYV90YzZfY2xlYW51cF9vbmdvaW5nX3R4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYpXG4ge1xuLVx0aWYgKHRjNi1cdTAwM2VvbmdvaW5nX3R4X3NrYikge1xuLVx0XHR0YzYtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQrKztcbi1cdFx0a2ZyZWVfc2tiKHRjNi1cdTAwM2VvbmdvaW5nX3R4X3NrYik7XG4tXHRcdHRjNi1cdTAwM2VvbmdvaW5nX3R4X3NrYiA9IE5VTEw7XG4tXHR9XG4rXHRvYV90YzZfZHJvcF90eF9za2IodGM2LCB0YzYtXHUwMDNlb25nb2luZ190eF9za2IpO1xuK1x0dGM2LVx1MDAzZW9uZ29pbmdfdHhfc2tiID0gTlVMTDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgb2FfdGM2X2NsZWFudXBfd2FpdGluZ190eF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2KVxuIHtcbi1cdGlmICh0YzYtXHUwMDNld2FpdGluZ190eF9za2IpIHtcbi1cdFx0dGM2LVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy50eF9kcm9wcGVkKys7XG4tXHRcdGtmcmVlX3NrYih0YzYtXHUwMDNld2FpdGluZ190eF9za2IpO1xuLVx0XHR0YzYtXHUwMDNld2FpdGluZ190eF9za2IgPSBOVUxMO1xuLVx0fVxuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcbitcdHNwaW5fbG9ja19iaChcdTAwMjZ0YzYtXHUwMDNldHhfc2tiX2xvY2spO1xuK1x0c2tiID0gb2FfdGM2X2RldGFjaF93YWl0aW5nX3R4X3NrYih0YzYpO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGM2LVx1MDAzZXR4X3NrYl9sb2NrKTtcbitcbitcdG9hX3RjNl9kcm9wX3R4X3NrYih0YzYsIHNrYik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG9hX3RjNl9mcmVlX3BlbmRpbmdfc2ticyhzdHJ1Y3Qgb2FfdGM2ICp0YzYpXG4rc3RhdGljIHZvaWQgb2FfdGM2X2ZyZWVfb25nb2luZ19za2JzKHN0cnVjdCBvYV90YzYgKnRjNilcbiB7XG4gXHRvYV90YzZfY2xlYW51cF9vbmdvaW5nX3R4X3NrYih0YzYpO1xuIFx0b2FfdGM2X2NsZWFudXBfb25nb2luZ19yeF9za2IodGM2KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgb2FfdGM2X2ZyZWVfcGVuZGluZ19za2JzKHN0cnVjdCBvYV90YzYgKnRjNilcbit7XG4rXHRvYV90YzZfZnJlZV9vbmdvaW5nX3NrYnModGM2KTtcbiBcdG9hX3RjNl9jbGVhbnVwX3dhaXRpbmdfdHhfc2tiKHRjNik7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG9hX3RjNl9sb29rX2Zvcl9uZXdfZnJhbWUoc3RydWN0IG9hX3RjNiAqdGM2KVxuK3tcbitcdHRjNi1cdTAwM2V3YWl0X3VudGlsX3N0YXJ0X3ZhbGlkID0gdHJ1ZTtcbitcdG9hX3RjNl9jbGVhbnVwX29uZ29pbmdfcnhfc2tiKHRjNik7XG4rfVxuK1xuIC8qIElmIHRoZSBmYWlsdXJlIGlzIGF0IFNQSSBpbnRlcmZhY2UgbGV2ZWwsIG1hc2tpbmcgYW5kIGNsZWFyaW5nXG4gICogdGhlIGludGVycnVwdCBvZiB0aGUgZGV2aWNlIHdvbid0IHdvcmsuIFNpbmNlIFNQSSBpbnRlcnJ1cHQgaXNcbiAgKiBkaXNhYmxlZCwgaXQgc2hvdWxkIHN0b3AgdGhlIHJlcGVhdGVkIGludGVycnVwdHMuXG5AQCAtNjkzLDkgKzcyMywyMSBAQCBzdGF0aWMgdm9pZCBvYV90YzZfZnJlZV9wZW5kaW5nX3NrYnMoc3RydWN0IG9hX3RjNiAqdGM2KVxuIHN0YXRpYyB2b2lkIG9hX3RjNl9kaXNhYmxlX3RyYWZmaWMoc3RydWN0IG9hX3RjNiAqdGM2KVxuIHtcbiBcdHUzMiByZWd2YWwgPSBJTlRfTUFTSzBfQUxMX0lOVEVSUlVQVFM7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFxuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnRjNi1cdTAwM2V0eF9za2JfbG9jayk7XG4gXHR0YzYtXHUwMDNlZGlzYWJsZV90cmFmZmljID0gdHJ1ZTtcbi1cdG9hX3RjNl9mcmVlX3BlbmRpbmdfc2ticyh0YzYpO1xuK1x0c2tiID0gb2FfdGM2X2RldGFjaF93YWl0aW5nX3R4X3NrYih0YzYpO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGM2LVx1MDAzZXR4X3NrYl9sb2NrKTtcbitcbitcdC8qIGRpc2FibGVfdHJhZmZpYywgd2hlbiBzZXQsIGlzIGEgcG9pbnQgb2Ygbm8gcmV0dXJuIHRvIHdvcmtpbmdcbitcdCAqIHN0YXRlLiBUWCBxdWV1ZXMgYXJlIGRpc2FibGVkLiBJbiBzb21lIGNhc2VzLCB1cHBlciBsYXllciBvclxuK1x0ICogdmVuZG9yIGNvZGUgbWF5IGluYWR2ZXJ0ZW50bHkgZW5hYmxlIHRoZSBxdWV1ZS4gSW50ZW50aW9uIG9mXG4rXHQgKiB0aGUgZGlzYWJsZV90cmFmZmljIGZsYWcgaXMgdG8gc3RvcCB0cmFmZmljIGZyb20gZmxvd2luZy5cbitcdCAqL1xuK1x0bmV0aWZfdHhfZGlzYWJsZSh0YzYtXHUwMDNlbmV0ZGV2KTtcbitcdG9hX3RjNl9kcm9wX3R4X3NrYih0YzYsIHNrYik7XG4rXHRvYV90YzZfZnJlZV9vbmdvaW5nX3NrYnModGM2KTtcbiBcdG9hX3RjNl93cml0ZV9yZWdpc3Rlcih0YzYsIE9BX1RDNl9SRUdfSU5UX01BU0swLCByZWd2YWwpO1xuIFx0b2FfdGM2X3JlYWRfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUkVHX1NUQVRVUzAsIFx1MDAyNnJlZ3ZhbCk7XG4gXHRvYV90YzZfd3JpdGVfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUkVHX1NUQVRVUzAsIHJlZ3ZhbCk7XG5AQCAtNzE0LDYgKzc1NiwxMyBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcm9jZXNzX2V4dGVuZGVkX3N0YXR1cyhzdHJ1Y3Qgb2FfdGM2ICp0YzYpXG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4rXHQvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgZWFjaCBjaHVuayByZWNlaXZlZCBpbiBhIGdpdmVuIFNQSVxuK1x0ICogdHJhbnNhY3Rpb24uIEluIGNhc2UsIGV4dGVuZGVkIHN0YXR1cyBiaXQgaXMgc2V0IGluIG1vcmUgdGhhblxuK1x0ICogb25lIGNodW5rLCBza2lwIHRoZSB3cml0ZSwgaWYgc3RhdHVzMCBpcyBhbHJlYWR5IGNsZWFyZWQuXG4rXHQgKi9cbitcdGlmICghdmFsdWUpXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0LyogQ2xlYXIgdGhlIGVycm9yIGludGVycnVwdHMgc3RhdHVzICovXG4gXHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUkVHX1NUQVRVUzAsIHZhbHVlKTtcbiBcdGlmIChyZXQpIHtcbkBAIC03MjMsOCArNzcyLDcgQEAgc3RhdGljIGludCBvYV90YzZfcHJvY2Vzc19leHRlbmRlZF9zdGF0dXMoc3RydWN0IG9hX3RjNiAqdGM2KVxuIFx0fVxuIFxuIFx0aWYgKEZJRUxEX0dFVChTVEFUVVMwX1JYX0JVRkZFUl9PVkVSRkxPV19FUlJPUiwgdmFsdWUpKSB7XG4tXHRcdHRjNi1cdTAwM2VyeF9idWZfb3ZlcmZsb3cgPSB0cnVlO1xuLVx0XHRvYV90YzZfY2xlYW51cF9vbmdvaW5nX3J4X3NrYih0YzYpO1xuK1x0XHRvYV90YzZfbG9va19mb3JfbmV3X2ZyYW1lKHRjNik7XG4gXHRcdG5ldF9lcnJfcmF0ZWxpbWl0ZWQoXCIlczogUmVjZWl2ZSBidWZmZXIgb3ZlcmZsb3cgZXJyb3JcXG5cIixcbiBcdFx0XHRcdCAgICB0YzYtXHUwMDNlbmV0ZGV2LVx1MDAzZW5hbWUpO1xuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbkBAIC03NTAsNiArNzk4LDggQEAgc3RhdGljIGludCBvYV90YzZfcHJvY2Vzc19leHRlbmRlZF9zdGF0dXMoc3RydWN0IG9hX3RjNiAqdGM2KVxuIFxuIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3NfcnhfY2h1bmtfZm9vdGVyKHN0cnVjdCBvYV90YzYgKnRjNiwgdTMyIGZvb3RlcilcbiB7XG4rXHRpbnQgcmV0ID0gMDtcbitcbiBcdC8qIFByb2Nlc3MgcnggY2h1bmsgZm9vdGVyIGZvciB0aGUgZm9sbG93aW5nLFxuIFx0ICogMS4gdHggY3JlZGl0c1xuIFx0ICogMi4gZXJyb3JzIGlmIGFueSBmcm9tIE1BQy1QSFlcbkBAIC03NjAsOSArODEwLDExIEBAIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3NfcnhfY2h1bmtfZm9vdGVyKHN0cnVjdCBvYV90YzYgKnRjNiwgdTMyIGZvb3RlcilcbiBcdFx0XHRcdFx0ICAgICBmb290ZXIpO1xuIFxuIFx0aWYgKEZJRUxEX0dFVChPQV9UQzZfREFUQV9GT09URVJfRVhURU5ERURfU1RTLCBmb290ZXIpKSB7XG4tXHRcdGludCByZXQgPSBvYV90YzZfcHJvY2Vzc19leHRlbmRlZF9zdGF0dXModGM2KTtcbi1cbi1cdFx0aWYgKHJldClcbitcdFx0cmV0ID0gb2FfdGM2X3Byb2Nlc3NfZXh0ZW5kZWRfc3RhdHVzKHRjNik7XG4rXHRcdC8qIEVBR0FJTiBlcnJvciBpcyByZWNvdmVyYWJsZS4gTW92ZSBvbiB0byBjaGVja1xuK1x0XHQgKiBIRUFERVIgYW5kIFNZTkMgZXJyb3JzIGJlZm9yZSByZXR1cm5pbmcuXG4rXHRcdCAqL1xuK1x0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVBR0FJTilcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuQEAgLTc4MCw3ICs4MzIsNyBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcm9jZXNzX3J4X2NodW5rX2Zvb3RlcihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUzMiBmb290ZXIpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFx0fVxuIFxuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBvYV90YzZfc3VibWl0X3J4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYpXG5AQCAtODA1LDEzICs4NTcsMzUgQEAgc3RhdGljIHZvaWQgb2FfdGM2X3N1Ym1pdF9yeF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2KVxuIFx0dGM2LVx1MDAzZXJ4X3NrYiA9IE5VTEw7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG9hX3RjNl91cGRhdGVfcnhfc2tiKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKnBheWxvYWQsIHU4IGxlbmd0aClcbisvKiBPbiBvdmVyc3Vic2NyaWJlZCB0cmFmZmljIGNvbmRpdGlvbiwgcGFydGljdWxhcmx5IHdpdGggb3ZlcndoZWxtaW5nIHJ4XG4rICogYnVmZmVyIG92ZXJmbG93IGVycm9ycywgdGhlcmUgY291bGQgYmUgZGF0YSBjaHVuayBsb3NzLiBJZiB0YWlsICsgbGVuZ3RoXG4rICogZ29lcyBiZXlvbmQgZW5kIHBvaW50ZXIsIHRoYXQgaXMgYW4gaW5kaWNhdGlvbiB0aGF0IHRoZSBkYXRhIGNodW5rIHdpdGhcbisgKiBlbmRfdmFsaWQgYml0IGlzIGxvc3QuIFRpbWUgdG8gbG9vayBmb3IgYSBkYXRhIGNodW5rIHdpdGggc3RhcnRfdmFsaWQgYml0LlxuKyAqXG4rICogSWYgcnhfc2tiIGlzIE5VTEwsIGl0IGlzIHRpbWUgdG8gc3RhcnQgbG9va2luZyBmb3IgZGF0YSBjaHVuayB3aXRoXG4rICogc3RhcnRfYml0LlxuKyAqL1xuK3N0YXRpYyBpbnQgb2FfdGM2X3VwZGF0ZV9yeF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqcGF5bG9hZCwgdTggbGVuZ3RoKVxuIHtcbitcdGlmICghdGM2LVx1MDAzZXJ4X3NrYiB8fFxuK1x0ICAgIHNrYl90YWlscm9vbSh0YzYtXHUwMDNlcnhfc2tiKSBcdTAwM2MgbGVuZ3RoKSB7XG4rXHRcdG9hX3RjNl9sb29rX2Zvcl9uZXdfZnJhbWUodGM2KTtcbitcdFx0cmV0dXJuIC1FQUdBSU47XG4rXHR9XG4rXG4gXHRtZW1jcHkoc2tiX3B1dCh0YzYtXHUwMDNlcnhfc2tiLCBsZW5ndGgpLCBwYXlsb2FkLCBsZW5ndGgpO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuKy8qIE9uIG92ZXJ3aGVsbWluZyByeCBidWZmZXIgb3ZlcmZsb3cgZXJyb3JzLCBkdWUgdG8gZGF0YSBjaHVuayBsb3NzLCBpdCBpc1xuKyAqIHBvc3NpYmxlIHRoYXQgd2UgZ2V0IHR3byBkYXRhIGNodW5rcyB3aXRoIHN0YXJ0X3ZhbGlkIGJpdCBzZXQsIHdpdGhvdXRcbisgKiBlbmRfdmFsaWQgYml0IHNldCBpbiBiZXR3ZWVuLiBJbiB0aGlzIGNhc2UsIHJ4X3NrYiB3b3VsZCBoYXZlIGEgdmFsaWRcbisgKiBidWZmZXIgcG9pbnRlci4gV2Ugc2hvdWxkIHJlbGVhc2UsIGlmIGEgdmFsaWQgcG9pbnRlciBpcyBmb3VuZCBiZWZvcmVcbisgKiBhbGxvY2F0aW5nIGEgbmV3IG9uZS5cbisgKi9cbiBzdGF0aWMgaW50IG9hX3RjNl9hbGxvY2F0ZV9yeF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2KVxuIHtcbitcdG9hX3RjNl9jbGVhbnVwX29uZ29pbmdfcnhfc2tiKHRjNik7XG4gXHR0YzYtXHUwMDNlcnhfc2tiID0gbmV0ZGV2X2FsbG9jX3NrYl9pcF9hbGlnbih0YzYtXHUwMDNlbmV0ZGV2LCB0YzYtXHUwMDNlbmV0ZGV2LVx1MDAzZW10dSArXG4gXHRcdFx0XHRcdFx0RVRIX0hMRU4gKyBFVEhfRkNTX0xFTik7XG4gXHRpZiAoIXRjNi1cdTAwM2VyeF9za2IpIHtcbkBAIC04MzEsNyArOTA1LDkgQEAgc3RhdGljIGludCBvYV90YzZfcHJjc19jb21wbGV0ZV9yeF9mcmFtZShzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpwYXlsb2FkLFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdG9hX3RjNl91cGRhdGVfcnhfc2tiKHRjNiwgcGF5bG9hZCwgc2l6ZSk7XG4rXHRyZXQgPSBvYV90YzZfdXBkYXRlX3J4X3NrYih0YzYsIHBheWxvYWQsIHNpemUpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbiBcbiBcdG9hX3RjNl9zdWJtaXRfcnhfc2tiKHRjNik7XG4gXG5AQCAtODQ2LDIyICs5MjIsMjQgQEAgc3RhdGljIGludCBvYV90YzZfcHJjc19yeF9mcmFtZV9zdGFydChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpwYXlsb2FkLCB1MTYgc2l6ZSlcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRvYV90YzZfdXBkYXRlX3J4X3NrYih0YzYsIHBheWxvYWQsIHNpemUpO1xuLVxuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gb2FfdGM2X3VwZGF0ZV9yeF9za2IodGM2LCBwYXlsb2FkLCBzaXplKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgb2FfdGM2X3ByY3NfcnhfZnJhbWVfZW5kKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKnBheWxvYWQsIHUxNiBzaXplKVxuK3N0YXRpYyBpbnQgb2FfdGM2X3ByY3NfcnhfZnJhbWVfZW5kKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKnBheWxvYWQsIHUxNiBzaXplKVxuIHtcbi1cdG9hX3RjNl91cGRhdGVfcnhfc2tiKHRjNiwgcGF5bG9hZCwgc2l6ZSk7XG4rXHRpbnQgcmV0O1xuIFxuLVx0b2FfdGM2X3N1Ym1pdF9yeF9za2IodGM2KTtcbitcdHJldCA9IG9hX3RjNl91cGRhdGVfcnhfc2tiKHRjNiwgcGF5bG9hZCwgc2l6ZSk7XG4rXHRpZiAoIXJldClcbitcdFx0b2FfdGM2X3N1Ym1pdF9yeF9za2IodGM2KTtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG9hX3RjNl9wcmNzX29uZ29pbmdfcnhfZnJhbWUoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqcGF5bG9hZCxcbi1cdFx0XHRcdFx0IHUzMiBmb290ZXIpXG4rc3RhdGljIGludCBvYV90YzZfcHJjc19vbmdvaW5nX3J4X2ZyYW1lKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKnBheWxvYWQsXG4rXHRcdFx0XHRcdHUzMiBmb290ZXIpXG4ge1xuLVx0b2FfdGM2X3VwZGF0ZV9yeF9za2IodGM2LCBwYXlsb2FkLCBPQV9UQzZfQ0hVTktfUEFZTE9BRF9TSVpFKTtcbitcdHJldHVybiBvYV90YzZfdXBkYXRlX3J4X3NrYih0YzYsIHBheWxvYWQsXG4rXHRcdFx0XHQgICAgT0FfVEM2X0NIVU5LX1BBWUxPQURfU0laRSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgb2FfdGM2X3ByY3NfcnhfY2h1bmtfcGF5bG9hZChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpkYXRhLFxuQEAgLTg3NiwxMCArOTU0LDEwIEBAIHN0YXRpYyBpbnQgb2FfdGM2X3ByY3NfcnhfY2h1bmtfcGF5bG9hZChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpkYXRhLFxuIFx0dTE2IHNpemU7XG4gXG4gXHQvKiBSZXN0YXJ0IHRoZSBuZXcgcnggZnJhbWUgYWZ0ZXIgcmVjZWl2aW5nIHJ4IGJ1ZmZlciBvdmVyZmxvdyBlcnJvciAqL1xuLVx0aWYgKHN0YXJ0X3ZhbGlkIFx1MDAyNlx1MDAyNiB0YzYtXHUwMDNlcnhfYnVmX292ZXJmbG93KVxuLVx0XHR0YzYtXHUwMDNlcnhfYnVmX292ZXJmbG93ID0gZmFsc2U7XG4rXHRpZiAoc3RhcnRfdmFsaWQgXHUwMDI2XHUwMDI2IHRjNi1cdTAwM2V3YWl0X3VudGlsX3N0YXJ0X3ZhbGlkKVxuK1x0XHR0YzYtXHUwMDNld2FpdF91bnRpbF9zdGFydF92YWxpZCA9IGZhbHNlO1xuIFxuLVx0aWYgKHRjNi1cdTAwM2VyeF9idWZfb3ZlcmZsb3cpXG4rXHRpZiAodGM2LVx1MDAzZXdhaXRfdW50aWxfc3RhcnRfdmFsaWQpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0LyogUHJvY2VzcyB0aGUgY2h1bmsgd2l0aCBjb21wbGV0ZSByeCBmcmFtZSAqL1xuQEAgLTkwMSw4ICs5NzksNyBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcmNzX3J4X2NodW5rX3BheWxvYWQoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqZGF0YSxcbiBcdC8qIFByb2Nlc3MgdGhlIGNodW5rIHdpdGggb25seSByeCBmcmFtZSBlbmQgKi9cbiBcdGlmIChlbmRfdmFsaWQgXHUwMDI2XHUwMDI2ICFzdGFydF92YWxpZCkge1xuIFx0XHRzaXplID0gZW5kX2J5dGVfb2Zmc2V0ICsgMTtcbi1cdFx0b2FfdGM2X3ByY3NfcnhfZnJhbWVfZW5kKHRjNiwgZGF0YSwgc2l6ZSk7XG4tXHRcdHJldHVybiAwO1xuK1x0XHRyZXR1cm4gb2FfdGM2X3ByY3NfcnhfZnJhbWVfZW5kKHRjNiwgZGF0YSwgc2l6ZSk7XG4gXHR9XG4gXG4gXHQvKiBQcm9jZXNzIHRoZSBjaHVuayB3aXRoIHByZXZpb3VzIHJ4IGZyYW1lIGVuZCBhbmQgbmV4dCByeCBmcmFtZVxuQEAgLTkxNiw2ICs5OTMsMTUgQEAgc3RhdGljIGludCBvYV90YzZfcHJjc19yeF9jaHVua19wYXlsb2FkKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKmRhdGEsXG4gXHRcdGlmICh0YzYtXHUwMDNlcnhfc2tiKSB7XG4gXHRcdFx0c2l6ZSA9IGVuZF9ieXRlX29mZnNldCArIDE7XG4gXHRcdFx0b2FfdGM2X3ByY3NfcnhfZnJhbWVfZW5kKHRjNiwgZGF0YSwgc2l6ZSk7XG4rXG4rXHRcdFx0LyogUmV0dXJuIHZhbHVlIGZyb20gb2FfdGM2X3ByY3NfcnhfZnJhbWVfZW5kIGlzIG5vdFxuK1x0XHRcdCAqIGNoZWNrZWQuIElmIGl0IHJldHVybmVkIGFuIGVycm9yLCBpdCBpcyB0byBtYWtlXG4rXHRcdFx0ICogdGhlIGNvZGUgdG8gbG9vayBmb3IgbmV3IGZyYW1lLiBBdCB0aGlzIHN0YWdlLFxuK1x0XHRcdCAqIGNvZGUgYmVsb3cgaXMgZ29pbmcgdG8gcHJvY2VzcyBhIG5ldyBmcmFtZS4gU28sXG4rXHRcdFx0ICogZXJyb3IgY29uZGl0aW9uIGlzIHNldCB0byBmYWxzZSwgaW4gY2FzZSBpdCBpc1xuK1x0XHRcdCAqIHNldCBiZWZvcmUgcHJvY2VlZGluZy5cbitcdFx0XHQgKi9cbitcdFx0XHR0YzYtXHUwMDNld2FpdF91bnRpbF9zdGFydF92YWxpZCA9IGZhbHNlO1xuIFx0XHR9XG4gXHRcdHNpemUgPSBPQV9UQzZfQ0hVTktfUEFZTE9BRF9TSVpFIC0gc3RhcnRfYnl0ZV9vZmZzZXQ7XG4gXHRcdHJldHVybiBvYV90YzZfcHJjc19yeF9mcmFtZV9zdGFydCh0YzYsXG5AQCAtOTI0LDkgKzEwMTAsNyBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcmNzX3J4X2NodW5rX3BheWxvYWQoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqZGF0YSxcbiBcdH1cbiBcbiBcdC8qIFByb2Nlc3MgdGhlIGNodW5rIHdpdGggb25nb2luZyByeCBmcmFtZSBkYXRhICovXG4tXHRvYV90YzZfcHJjc19vbmdvaW5nX3J4X2ZyYW1lKHRjNiwgZGF0YSwgZm9vdGVyKTtcbi1cbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIG9hX3RjNl9wcmNzX29uZ29pbmdfcnhfZnJhbWUodGM2LCBkYXRhLCBmb290ZXIpO1xuIH1cbiBcbiBzdGF0aWMgdTMyIG9hX3RjNl9nZXRfcnhfY2h1bmtfZm9vdGVyKHN0cnVjdCBvYV90YzYgKnRjNiwgdTE2IGZvb3Rlcl9vZmZzZXQpXG5AQCAtOTQyLDggKzEwMjYsOSBAQCBzdGF0aWMgdTMyIG9hX3RjNl9nZXRfcnhfY2h1bmtfZm9vdGVyKHN0cnVjdCBvYV90YzYgKnRjNiwgdTE2IGZvb3Rlcl9vZmZzZXQpXG4gc3RhdGljIGludCBvYV90YzZfcHJvY2Vzc19zcGlfZGF0YV9yeF9idWYoc3RydWN0IG9hX3RjNiAqdGM2LCB1MTYgbGVuZ3RoKVxuIHtcbiBcdHUxNiBub19vZl9yeF9jaHVua3MgPSBsZW5ndGggLyBPQV9UQzZfQ0hVTktfU0laRTtcbitcdGJvb2wgcmV0cnkgPSBmYWxzZTtcbitcdGludCByZXQgPSAwO1xuIFx0dTMyIGZvb3Rlcjtcbi1cdGludCByZXQ7XG4gXG4gXHQvKiBBbGwgdGhlIHJ4IGNodW5rcyBpbiB0aGUgcmVjZWl2ZSBTUEkgZGF0YSBidWZmZXIgYXJlIGV4YW1pbmVkIGhlcmUgKi9cbiBcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBub19vZl9yeF9jaHVua3M7IGkrKykge1xuQEAgLTk1Miw4ICsxMDM3LDExIEBAIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3Nfc3BpX2RhdGFfcnhfYnVmKHN0cnVjdCBvYV90YzYgKnRjNiwgdTE2IGxlbmd0aClcbiBcdFx0XHRcdFx0XHQgICAgT0FfVEM2X0NIVU5LX1BBWUxPQURfU0laRSk7XG4gXG4gXHRcdHJldCA9IG9hX3RjNl9wcm9jZXNzX3J4X2NodW5rX2Zvb3Rlcih0YzYsIGZvb3Rlcik7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGlmIChyZXQgIT0gLUVBR0FJTilcbitcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdFx0cmV0cnkgPSB0cnVlO1xuK1x0XHR9XG4gXG4gXHRcdC8qIElmIHRoZXJlIGlzIGEgZGF0YSB2YWxpZCBjaHVua3MgdGhlbiBwcm9jZXNzIGl0IGZvciB0aGVcbiBcdFx0ICogaW5mb3JtYXRpb24gbmVlZGVkIHRvIGRldGVybWluZSB0aGUgdmFsaWRpdHkgYW5kIHRoZSBsb2NhdGlvblxuQEAgLTk2NSwxMiArMTA1MywzNSBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcm9jZXNzX3NwaV9kYXRhX3J4X2J1ZihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUxNiBsZW5ndGgpXG4gXG4gXHRcdFx0cmV0ID0gb2FfdGM2X3ByY3NfcnhfY2h1bmtfcGF5bG9hZCh0YzYsIHBheWxvYWQsXG4gXHRcdFx0XHRcdFx0XHQgICBmb290ZXIpO1xuLVx0XHRcdGlmIChyZXQpXG4tXHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRcdGlmIChyZXQpIHtcbitcdFx0XHRcdGlmIChyZXQgIT0gLUVOT01FTSBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FQUdBSU4pXG4rXHRcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdFx0XHRyZXRyeSA9IHRydWU7XG4rXHRcdFx0fVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRyZXR1cm4gMDtcbitcdC8qIE5vdCBiYWlsaW5nIG91dCBvbiByZWNvdmVyYWJsZSBlcnJvciBjb2RlcywgLUVBR0FJTiBhbmRcbitcdCAqIC1FTk9NRU0uIElmIHN1YnNlcXVlbnQgbG9vcCBpdGVyYXRpb25zLCBpZiBhbnksIHN1Y2NlZWRzLFxuK1x0ICogZXJyb3IgY29kZSB3b3VsZCBiZSBvdmVyd3JpdHRlbi4gcmV0cnkgZmxhZyBoZWxwcyB0b1xuK1x0ICogbWFrZSB0aGUgY2FsbGVyIHRvIGNvbnRpbnVlIGFuZCByZXRyeS4gU2luY2UgcmVjb3ZlcnlcbitcdCAqIGFjdGlvbiBmb3IgLUVOT01FTSBhbmQgLUVBR0FJTiBhcmUgc2FtZSwgd2UgYXJlIHJldHVybmluZ1xuK1x0ICogb25lIG9mIHRoZSBlcnJvciBjb2RlcywgdGhhdCBpcyAtRUFHQUlOLlxuK1x0ICpcbitcdCAqIFN1Y2Nlc3NmdWwgcmVjb3ZlcnkgZGVwZW5kcyBvbiBob3cgc21hbGwgdGhlIGZyYW1lcyBhcmUsXG4rXHQgKiBob3cgbWFueSBjaHVua3MsIGFtb25nIHRoZSByZWNlaXZlZCBjaHVua3MgdHJpZ2dlcmVkIHRoZVxuK1x0ICogZXJyb3IsIHdoZXRoZXIgZGF0YSBpcyBpbnRhY3QgZXZlbiB3aXRoIGVycm9yIGNvbmRpdGlvbnMuXG4rXHQgKiBBcyBhIHJlc3VsdCwgdGhlcmUgaXMgbm8gc2luZ2xlLCBiZXN0IG1ldGhvZCB0byByZWNvdmVyXG4rXHQgKiBtb3N0IGRhdGEgd2hlbiBlcnJvciBjb25kaXRpb25zIGhpdC4gV2UgZG8gb3VyIGJlc3QgYnlcbitcdCAqIHByb2Nlc3NpbmcgYWxsIHRoZSBjaHVua3Mgd2l0aCBnb29kIFwiZm9vdGVyIGhlYWRlclwiIGFuZFxuK1x0ICogXCJkYXRhIHZhbGlkXCIgYml0IHNldC5cbitcdCAqL1xuK1x0aWYgKHJldHJ5KSB7XG4rXHRcdHJldCA9IC1FQUdBSU47XG4rXHRcdG9hX3RjNl9sb29rX2Zvcl9uZXdfZnJhbWUodGM2KTtcbitcdH1cbitcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBfX2JlMzIgb2FfdGM2X3ByZXBhcmVfZGF0YV9oZWFkZXIoYm9vbCBkYXRhX3ZhbGlkLCBib29sIHN0YXJ0X3ZhbGlkLFxuQEAgLTExMzIsMTIgKzEyNDMsOSBAQCBzdGF0aWMgaW50IG9hX3RjNl90cnlfc3BpX3RyYW5zZmVyKHN0cnVjdCBvYV90YzYgKnRjNilcbiBcdFx0fVxuIFxuIFx0XHRyZXQgPSBvYV90YzZfcHJvY2Vzc19zcGlfZGF0YV9yeF9idWYodGM2LCBzcGlfbGVuKTtcbi1cdFx0aWYgKHJldCkge1xuLVx0XHRcdGlmIChyZXQgPT0gLUVBR0FJTilcbi1cdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdG9hX3RjNl9jbGVhbnVwX29uZ29pbmdfdHhfc2tiKHRjNik7XG4tXHRcdFx0b2FfdGM2X2NsZWFudXBfb25nb2luZ19yeF9za2IodGM2KTtcbitcdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FQUdBSU4pIHtcbitcdFx0XHRvYV90YzZfZnJlZV9vbmdvaW5nX3NrYnModGM2KTtcbiBcdFx0XHRuZXRkZXZfZXJyKHRjNi1cdTAwM2VuZXRkZXYsIFwiRGV2aWNlIGVycm9yOiAlZFxcblwiLCByZXQpO1xuIFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbkBAIC0xMTU5LDE1ICsxMjY3LDIwIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBvYV90YzZfbWFjcGh5X3RocmVhZGVkX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKVxuIFx0ICogbm8gbmVlZCB0byBhdHRlbXB0IHNwaSB0cmFuc2Zlciwgb25jZSBpdCBmYWlscy4gUGVuZGluZyBza2JzXG4gXHQgKiBhcmUgYWxyZWFkeSBmcmVlZC5cbiBcdCAqL1xuLVx0aWYgKCF0YzYtXHUwMDNlZGlzYWJsZV90cmFmZmljKSB7XG4tXHRcdHdoaWxlICh0YzYtXHUwMDNlaW50X2ZsYWcgfHxcbi1cdFx0ICAgICAgICh0YzYtXHUwMDNld2FpdGluZ190eF9za2IgXHUwMDI2XHUwMDI2IHRjNi1cdTAwM2V0eF9jcmVkaXRzKSkge1xuLVx0XHRcdHJldCA9IG9hX3RjNl90cnlfc3BpX3RyYW5zZmVyKHRjNik7XG4tXHRcdFx0aWYgKHJldCkge1xuLVx0XHRcdFx0ZGlzYWJsZV9pcnFfbm9zeW5jKHRjNi1cdTAwM2VzcGktXHUwMDNlaXJxKTtcbi1cdFx0XHRcdG9hX3RjNl9kaXNhYmxlX3RyYWZmaWModGM2KTtcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbitcdHNwaW5fbG9ja19iaChcdTAwMjZ0YzYtXHUwMDNldHhfc2tiX2xvY2spO1xuK1x0aWYgKHRjNi1cdTAwM2VkaXNhYmxlX3RyYWZmaWMpIHtcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGM2LVx1MDAzZXR4X3NrYl9sb2NrKTtcbitcdFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuK1x0fVxuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGM2LVx1MDAzZXR4X3NrYl9sb2NrKTtcbitcbitcdHdoaWxlICh0YzYtXHUwMDNlaW50X2ZsYWcgfHxcbitcdCAgICAgICAodGM2LVx1MDAzZXdhaXRpbmdfdHhfc2tiIFx1MDAyNlx1MDAyNiB0YzYtXHUwMDNldHhfY3JlZGl0cykpIHtcbitcdFx0cmV0ID0gb2FfdGM2X3RyeV9zcGlfdHJhbnNmZXIodGM2KTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGRpc2FibGVfaXJxX25vc3luYyh0YzYtXHUwMDNlc3BpLVx1MDAzZWlycSk7XG4rXHRcdFx0b2FfdGM2X2Rpc2FibGVfdHJhZmZpYyh0YzYpO1xuK1x0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtMTI0NSwyMyArMTM1OCwzMCBAQCBFWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfemVyb19hbGlnbl9yZWNlaXZlX2ZyYW1lX2VuYWJsZSk7XG4gICogQHRjNjogb2FfdGM2IHN0cnVjdC5cbiAgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIGluIHdoaWNoIHRoZSBldGhlcm5ldCBmcmFtZSBpcyBzdG9yZWQuXG4gICpcbi0gKiBSZXR1cm46IE5FVERFVl9UWF9PSyBpZiB0aGUgdHJhbnNtaXQgZXRoZXJuZXQgZnJhbWUgc2tiIGFkZGVkIGluIHRoZSB0eF9za2JfcVxuLSAqIG90aGVyd2lzZSByZXR1cm5zIE5FVERFVl9UWF9CVVNZLlxuKyAqIFJldHVybjogTkVUREVWX1RYX09LIGVpdGhlciBvbiBzdWNjZXNzZnVsIHF1ZXVlaW5nIG9mIHRoZSBwYWNrZXQgZm9yXG4rICogdHJhbnNtaXNzaW9uLCBvciBvbiBwYWNrZXQgZ2V0dGluZyBkcm9wcGVkLiBQYWNrZXQgY2FuIGJlIGRyb3BwZWQgZHVlIHRvXG4rICogZmFpbHVyZSBpbiBsaW5lYXJpemluZyB0aGUgYnVmZmVyIG9yIGRpc2FibGVfdHJhZmZpYyBpcyBzZXQgZHVlIHRvXG4rICogZWFybGllciBmYXRhbCBlcnJvci4gUmV0dXJucyBORVRERVZfVFhfQlVTWSB3aGVuIHRoZXJlIGlzIG5vIHJvb21cbisgKiB0byBxdWV1ZSB0aGUgcGFja2V0LlxuICAqL1xuIG5ldGRldl90eF90IG9hX3RjNl9zdGFydF94bWl0KHN0cnVjdCBvYV90YzYgKnRjNiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRpZiAodGM2LVx1MDAzZWRpc2FibGVfdHJhZmZpYyB8fCB0YzYtXHUwMDNld2FpdGluZ190eF9za2IpIHtcbi1cdFx0bmV0aWZfc3RvcF9xdWV1ZSh0YzYtXHUwMDNlbmV0ZGV2KTtcbi1cdFx0cmV0dXJuIE5FVERFVl9UWF9CVVNZO1xuLVx0fVxuLVxuIFx0aWYgKHNrYl9saW5lYXJpemUoc2tiKSkge1xuLVx0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuLVx0XHR0YzYtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQrKztcbitcdFx0b2FfdGM2X2Ryb3BfdHhfc2tiKHRjNiwgc2tiKTtcbiBcdFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiBcdH1cbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZ0YzYtXHUwMDNldHhfc2tiX2xvY2spO1xuK1x0aWYgKHRjNi1cdTAwM2V3YWl0aW5nX3R4X3NrYikge1xuK1x0XHRuZXRpZl9zdG9wX3F1ZXVlKHRjNi1cdTAwM2VuZXRkZXYpO1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZ0YzYtXHUwMDNldHhfc2tiX2xvY2spO1xuK1x0XHRyZXR1cm4gTkVUREVWX1RYX0JVU1k7XG4rXHR9XG4rXHRpZiAodGM2LVx1MDAzZWRpc2FibGVfdHJhZmZpYykge1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZ0YzYtXHUwMDNldHhfc2tiX2xvY2spO1xuK1x0XHRvYV90YzZfZHJvcF90eF9za2IodGM2LCBza2IpO1xuK1x0XHRyZXR1cm4gTkVUREVWX1RYX09LO1xuK1x0fVxuIFx0dGM2LVx1MDAzZXdhaXRpbmdfdHhfc2tiID0gc2tiO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGM2LVx1MDAzZXR4X3NrYl9sb2NrKTtcbiBcbkBAIC0xMzkzLDggKzE1MTMsMTAgQEAgRVhQT1JUX1NZTUJPTF9HUEwob2FfdGM2X2luaXQpO1xuICAqL1xuIHZvaWQgb2FfdGM2X2V4aXQoc3RydWN0IG9hX3RjNiAqdGM2KVxuIHtcbi1cdHRjNi1cdTAwM2VkaXNhYmxlX3RyYWZmaWMgPSB0cnVlO1xuIFx0ZGlzYWJsZV9pcnEodGM2LVx1MDAzZXNwaS1cdTAwM2VpcnEpO1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnRjNi1cdTAwM2V0eF9za2JfbG9jayk7XG4rXHR0YzYtXHUwMDNlZGlzYWJsZV90cmFmZmljID0gdHJ1ZTtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRjNi1cdTAwM2V0eF9za2JfbG9jayk7XG4gXHRvYV90YzZfcGh5X2V4aXQodGM2KTtcbiBcdG9hX3RjNl9mcmVlX3BlbmRpbmdfc2ticyh0YzYpO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAzOjI0OjM1LjkwNDg4MzIzMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxNTYyMjgyMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgT1BFTiBBbGxpYW5jZSAxMEJBU0UtVDF4IE1BQy1QSFkgRHJpdmVyOiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggYWZmZWN0aW5nIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuY2AsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaGFuZGxlcyBFdGhlcm5ldCBmcmFtZXMgb3ZlciBTUEkgZm9yIHRoZSBPUEVOIEFsbGlhbmNlIDEwQkFTRS1UMXggTUFDLVBIWS4gIFRoZSBzaGVlciB2b2x1bWUgb2YgbW9kaWZpZWQgZnVuY3Rpb25zIOKAkyBhIHdob2xlIHJhZnQgb2YgdGhlbSDigJMgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgdGhpcyB3YXJyYW50cyBhIGNsb3NlciBsb29rIGZvciBmdXp6aW5nIHBvdGVudGlhbC4gSXQncyBhIGNvbXByZWhlbnNpdmUgc2V0IG9mIGNoYW5nZXMgdG91Y2hpbmcgdmFyaW91cyBhc3BlY3RzIGZyb20gdHJhbnNtaXQvcmVjZWl2ZSBidWZmZXJzIHRvIGludGVycnVwdCBoYW5kbGluZyBhbmQgdGhlIFNQSSB0cmFuc2ZlciBtZWNoYW5pc20gaXRzZWxmLiAgVGhlIGFkZGl0aW9uIG9mIGZ1bmN0aW9ucyBsaWtlIGBvYV90YzZfZHJvcF90eF9za2JgLCBgb2FfdGM2X2RldGFjaF93YWl0aW5nX3R4X3NrYmAsIGFuZCBzZXZlcmFsIFJYLXJlbGF0ZWQgYWRkaXRpb25zIGNlcnRhaW5seSBjYXRjaGVzIG15IGF0dGVudGlvbiwgZXNwZWNpYWxseSB0aGUgbnVtZXJvdXMgYHByY3NfKmAgZnVuY3Rpb25zLiBUaGVzZSBhcmUgYWxsIGhpZ2gtdmFsdWUgdGFyZ2V0cy5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMsIFwiQ2FuIHdlIGV2ZW4gKmdldCogdG8gdGhpcyBpbiBhIGZ1enplcj9cIiBUaGlzIGlzIGEgaGFyZHdhcmUgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIGEgTUFDLVBIWSBjb25uZWN0ZWQgdmlhIFNQSS4gVGhhdCByYWlzZXMgYSBzaWduaWZpY2FudCBxdWVzdGlvbjogY2FuIGl0IGJlIHJlYWNoZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBvciBhIGZ1enppbmcgY29udGV4dD8gU1BJIGRldmljZXMgYXJlIG9mdGVuIHBoeXNpY2FsLCBhbmQgaW50ZXJhY3Rpbmcgd2l0aCB0aGVtIGRpcmVjdGx5IGlzIHVzdWFsbHkgYSBuby1nbyBmb3IgZnV6emluZyB3aXRob3V0IGFuIGVtdWxhdG9yIG9yIHNvbWUgZm9ybSBvZiBpbmplY3Rpb24uIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGV0aGVyIHRoZXJlIGFyZSBlbXVsYXRlZCBTUEkgY29udHJvbGxlcnMgYXZhaWxhYmxlIHdpdGhpbiB0aGUgdGVzdGluZyBpbmZyYXN0cnVjdHVyZSBvciwgZXZlbiBiZXR0ZXIsIGlmIHRoZXJlJ3MgYSB3YXkgdG8gaW5qZWN0IFNQSSB0cmFmZmljIGRpcmVjdGx5LiBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgc3l6a2FsbGVyICptaWdodCogaGF2ZSBzb21lIFNQSSBzdXBwb3J0LCBidXQgSSBjYW4ndCBxdWl0ZSByZW1lbWJlciB0aGUgZGV0YWlscy5cblxuVGhlIHJlYWwga2V5IGlzIHJlYWNoYWJpbGl0eS4gIEkgbmVlZCB0byBhc2NlcnRhaW4gaWYgYG9hX3RjNi5jYCBpcyBhY3R1YWxseSAqcmVhY2hhYmxlKiBmcm9tIGEgdXNlci1zcGFjZSBwcm9jZXNzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGtlcm5lbCBjb2RlIGZvciBjYWxscyB0byBgb2FfdGM2X2luaXRgIG9yIGV2ZW4ganVzdCBhIGRpcmVjdCByZWZlcmVuY2UgdG8gXCJvYV90YzZcIiB0byBzZWUgd2hhdCBtb2R1bGUsIGRldmljZSwgb3Igb3RoZXIgY29tcG9uZW50IGFjdHVhbGx5IGxvYWRzIGFuZCB1c2VzIHRoaXMgZHJpdmVyLiAgVGhhdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBiZXN0IGFwcHJvYWNoIGZvciBmdXp6aW5nIHRoaXMgYW5kIGxldCBtZSBrbm93IGlmIGl0J3MgZXZlbiB3b3J0aCB0aGUgZWZmb3J0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzI1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6MjQ6NDQuMDYxMTEzODQ3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTkxMzI2MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2FfdGM2X2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0PTQ1ND1UaGUgaW5jbHVkZS9saW51eC9vYV90YzYuaCBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdC00NTUtXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0OjQ1NjouLiBjOmZ1bmN0aW9uOjogc3RydWN0IG9hX3RjNiAqb2FfdGM2X2luaXQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgXFxcXFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdC00NTctICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmM9MzMzPXN0YXRpYyBpbnQgbGFuODY1eF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jLTM0OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmM6MzQ5OlxcdHByaXYtXFx1MDAzZXRjNiA9IG9hX3RjNl9pbml0KHNwaSwgbmV0ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmMtMzUwLVxcdGlmICghcHJpdi1cXHUwMDNldGM2KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYz0xMzkzPUVYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl9zdGFydF94bWl0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTEzOTUtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmM6MTM5NjogKiBvYV90YzZfaW5pdCAtIGFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgb2FfdGM2IHN0cnVjdHVyZS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy0xMzk3LSAqIEBzcGk6IGRldmljZSB3aXRoIHdoaWNoIGRhdGEgd2lsbCBiZSBleGNoYW5nZWQuXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy0xNDAyLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jOjE0MDM6c3RydWN0IG9hX3RjNiAqb2FfdGM2X2luaXQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy0xNDA0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTE1MDctfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jOjE1MDg6RVhQT1JUX1NZTUJPTF9HUEwob2FfdGM2X2luaXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTE1MDktXFxuLS1cXG5pbmNsdWRlL2xpbnV4L29hX3RjNi5oPTEzPXN0cnVjdCBvYV90YzY7XFxuaW5jbHVkZS9saW51eC9vYV90YzYuaC0xNC1cXG5pbmNsdWRlL2xpbnV4L29hX3RjNi5oOjE1OnN0cnVjdCBvYV90YzYgKm9hX3RjNl9pbml0KHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xcbmluY2x1ZGUvbGludXgvb2FfdGM2LmgtMTYtdm9pZCBvYV90YzZfZXhpdChzdHJ1Y3Qgb2FfdGM2ICp0YzYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzoyNDo0NS44MjAyNTQ0NTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODcyMDk0Njg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQXNzZXNzaW5nIExBTjg2NXggRHJpdmVyJ3MgU3l6a2FsbGVyIENvbXBhdGliaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBsYW44NjV4YCBkcml2ZXIsIHdoaWNoIGlzIGEgTWljcm9jaGlwIExBTjg2NTAvMSBNQUMtUEhZIGRyaXZlci4gVGhlIGtleSBpc3N1ZSBoZXJlIGlzIHRoYXQgaXQgKnJlcXVpcmVzKiBhIHBoeXNpY2FsIFNQSSBkZXZpY2UuIE5vdywgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIEkgY2FuIGdldCB0aGlzIHdvcmtpbmcgd2l0aGluIHRoZSBjb25maW5lcyBvZiBzeXprYWxsZXIgZm9yIGZ1enppbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gSSBzb21laG93IGVtdWxhdGUgdGhpcyBTUEkgZGV2aWNlIHdpdGhpbiB0aGUgc3l6a2FsbGVyIGVudmlyb25tZW50P1xuXG5TeXprYWxsZXIgaXRzZWxmIGRvZXNuJ3Qgb2ZmZXIgYSBnZW5lcmljIFNQSSBlbXVsYXRvciwgd2hpY2ggaXMgYSBiaXQgb2YgYSByb2FkYmxvY2suIEkgcXVpY2tseSBzY2FubmVkIG15IG1lbnRhbCBsYW5kc2NhcGUgZm9yIHNvbWV0aGluZyBhbmFsb2dvdXMgdG8gYG1hYzgwMjExX2h3c2ltYCBmb3IgU1BJLCBhIHNvZnR3YXJlIHNpbXVsYXRpb24gb2YgaGFyZHdhcmUgaW4gdGhlIG5ldHdvcmsgcmVhbG0sIGJ1dCBub3RoaW5nIGp1bXBlZCBvdXQuIERhcm4uXG5cbkFscmlnaHQsIGxldCdzIHN0ZXAgYmFjayBhIGJpdC4gRG9lcyBzeXprYWxsZXIgb2ZmZXIgKmFueSogU1BJIGZ1enppbmcgc3VwcG9ydCwgcGVyaGFwcyB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIGBzcGlkZXZgIG9yIGEgc2ltaWxhciBjb25zdHJ1Y3Q/IE5vLCB0aGF0J3Mgbm90IGl0LiBgc3BpZGV2YCBpcyBhbGwgYWJvdXQgdXNlcnNwYWNlIGludGVyYWN0aW9uIHdpdGggU1BJLCBub3QgYWJvdXQgZW11bGF0aW5nIHRoZSB1bmRlcmx5aW5nIFNQSSBkZXZpY2UgaXRzZWxmLiBUaGF0J3MgYSBjbGFzc2ljIHVzZXItdG8ta2VybmVsIGludGVyZmFjZSwgbm90IGFuIFNQSSBkZXZpY2UgaW4gdGhlIGtlcm5lbC5cblxuU28sIGhlcmUncyB0aGUgY3J1eDogaWYgdGhpcyBkcml2ZXIgKmFic29sdXRlbHkqIG5lZWRzIGEgcGh5c2ljYWwgU1BJIGRldmljZSBsaWtlIHRoZSBMQU44NjV4LCBpdCdzIGdvaW5nIHRvIGJlIHRyaWNreSB0byByZWFjaCBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuIFVubGVzcyBRRU1VIHNwZWNpZmljYWxseSBlbXVsYXRlcyB0aGlzIHBhcnRpY3VsYXIgU1BJIGRldmljZSwgd2hpY2ggaXMgdW5saWtlbHkgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0LiBJIG1pZ2h0IG5lZWQgYSBzb2Z0d2FyZSBlbXVsYXRvciwgYSBzaGltIHRvIHByZXRlbmQgdG8gYmUgdGhlIGhhcmR3YXJlLCBvciBJIG1pZ2h0IGhhdmUgdG8gZ28gZnVsbC1vbiBoYXJkd2FyZS1pbi10aGUtbG9vcCwgd2hpY2ggaXMgZ29pbmcgdG8gYmUgcGFpbmZ1bCBhbmQgbWVzc3kuXG5cbk15IG5leHQgc3RlcCBpcyB0byBjaGVjayBpZiBgbGFuODY1eGAgY2FuIGV2ZW4gKnByb2JlKiBzdWNjZXNzZnVsbHkgaW4gUUVNVS4gVGhhdCdzIHRoZSBiYXNlbGluZSwgcmlnaHQ/IEl0J3MgYW4gU1BJIGRyaXZlciwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgU1BJIHN1YnN5c3RlbSBpcyB3b3JraW5nIGFzIGV4cGVjdGVkLiBMZXQncyBzZWUgaWYgSSBjYW4gZ2V0IGV2ZW4gYmFzaWMgcHJvYmluZyB3b3JraW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDExMSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzoyNDo1MS42OTIzNTIyMThaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMTkxNDE1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsYW44NjV4X2RyaXZlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmM9NDQwPU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGxhbjg2NXhfZHRfaWRzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmMtNDQxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYzo0NDI6c3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIGxhbjg2NXhfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYy00NDMtXFx0LmRyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYy00NTAtfTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmM6NDUxOm1vZHVsZV9zcGlfZHJpdmVyKGxhbjg2NXhfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmMtNDUyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzoyNDo1My4zMjQyNzA1NThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzQzMDc3NzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFNQSSBEcml2ZXIgU2NlbmFyaW8qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIFNQSSBkcml2ZXIgYW5kIGltbWVkaWF0ZWx5IHRoZSBzdGFuZGFyZCBjb25zaWRlcmF0aW9ucyBjb21lIHRvIG1pbmQuIEl0J3MgYW4gU1BJIGRyaXZlciwgc28gbmF0dXJhbGx5LCBpdHMgYmluZGluZyBpcyB0aWVkIHRvIGRldmljZXMgZGVmaW5lZCBpbiB0aGUgZGV2aWNlIHRyZWUgb3IgQUNQSS4gIEluIGEgdHlwaWNhbCBRRU1VIHNldHVwLCBhbmQgSSBrbm93IHRoaXMgZnJvbSBleHBlcmllbmNlLCB0aGUgcHJvYmUgZnVuY3Rpb24gZm9yIHRoaXMgZHJpdmVyIGlzIG5ldmVyIGdvaW5nIHRvIGJlIGNhbGxlZCB1bmxlc3Mgd2UgZXhwbGljaXRseSBhZGQgYSBub2RlIGluIHRoZSBkZXZpY2UgdHJlZSBmb3IgdGhpcyBzcGVjaWZpYyBTUEkgZGV2aWNlIGFuZCB0aGVuIHdpcmUgaXQgdXAgdG8gYW4gZW11bGF0ZWQgU1BJIGNvbnRyb2xsZXIgd2l0aGluIHRoZSBRRU1VIGVudmlyb25tZW50LiBFdmVuIGlmIHdlIGRvIHNvbWVob3cgbWFuYWdlIHRvIGdldCB0aGUgcHJvYmUgdG8gZXhlY3V0ZSwgYWxsIFNQSSBjb21tdW5pY2F0aW9uIHdvdWxkIGJlIGZ1dGlsZSB3aXRob3V0IGFuIGFjdHVhbCBwaWVjZSBvZiBoYXJkd2FyZSB0byByZXNwb25kLlxuXG5XYWl0IGEgc2Vjb25kLi4uIGFuZCB0aGlzIGlzIGFuIGltcG9ydGFudCBwb2ludC4uLiBzeXprYWxsZXIsIGFzIGZhciBhcyBJIHVuZGVyc3RhbmQsIGRvZXNuJ3QgZW11bGF0ZSBTUEkgZGV2aWNlcy4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLiBJZiBpdCBkb2Vzbid0LCB0aGF0IG1lYW5zIEkgbmVlZCB0byBhZGp1c3QgbXkgYXBwcm9hY2guIFRoZSBrZXkgbmV4dCBzdGVwIHRoZW4sIGlzIHRvIGZpZ3VyZSBvdXQgKndobyogZWxzZSBpcyB1c2luZyB0aGUgYG9hX3RjNl9pbml0YCBmdW5jdGlvbi4gVGhhdCdzIHRoZSBuZXh0IGF2ZW51ZSB0byBleHBsb3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA1OCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzoyNDo1Ny42NjczNTA5OTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3MTUyODkxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvYV90YzZfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb2EtdGM2LWZyYW1ld29yay5yc3Q9NDU0PVRoZSBpbmNsdWRlL2xpbnV4L29hX3RjNi5oIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0LTQ1NS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb2EtdGM2LWZyYW1ld29yay5yc3Q6NDU2Oi4uIGM6ZnVuY3Rpb246OiBzdHJ1Y3Qgb2FfdGM2ICpvYV90YzZfaW5pdChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBcXFxcXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0LTQ1Ny0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYz0zMzM9c3RhdGljIGludCBsYW44NjV4X3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmMtMzQ4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYzozNDk6XFx0cHJpdi1cXHUwMDNldGM2ID0gb2FfdGM2X2luaXQoc3BpLCBuZXRkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYy0zNTAtXFx0aWYgKCFwcml2LVxcdTAwM2V0YzYpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jPTEzOTM9RVhQT1JUX1NZTUJPTF9HUEwob2FfdGM2X3N0YXJ0X3htaXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMtMTM5NS0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYzoxMzk2OiAqIG9hX3RjNl9pbml0IC0gYWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyBvYV90YzYgc3RydWN0dXJlLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTEzOTctICogQHNwaTogZGV2aWNlIHdpdGggd2hpY2ggZGF0YSB3aWxsIGJlIGV4Y2hhbmdlZC5cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTE0MDItICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmM6MTQwMzpzdHJ1Y3Qgb2FfdGM2ICpvYV90YzZfaW5pdChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTE0MDQte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMtMTUwNy19XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmM6MTUwODpFWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfaW5pdCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMtMTUwOS1cXG4tLVxcbmluY2x1ZGUvbGludXgvb2FfdGM2Lmg9MTM9c3RydWN0IG9hX3RjNjtcXG5pbmNsdWRlL2xpbnV4L29hX3RjNi5oLTE0LVxcbmluY2x1ZGUvbGludXgvb2FfdGM2Lmg6MTU6c3RydWN0IG9hX3RjNiAqb2FfdGM2X2luaXQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XFxuaW5jbHVkZS9saW51eC9vYV90YzYuaC0xNi12b2lkIG9hX3RjNl9leGl0KHN0cnVjdCBvYV90YzYgKnRjNik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAzOjI0OjU5LjEzODg4Mzg4OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNDMzNzAzOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRnV6emluZyBXb3J0aGluZXNzKipcblxuT2theSwgc28gdGhpcyBjb2RlIHBhdGggaXMgZXhjbHVzaXZlbHkgdGllZCB0byB0aGUgYGxhbjg2NXhgIGRyaXZlci4gVGhhdCdzIGEgc3BlY2lmaWMgU1BJIGRyaXZlciBmb3IgYSBNQUMtUEhZLiBTaW5jZSB3ZSdyZSBub3QgZW11bGF0aW5nIHRoYXQgaGFyZHdhcmUg4oCTIG5laXRoZXIgaW4gR0NFIG5vciBRRU1VIOKAkyB0aG9zZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGFueSBvZiBteSB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cy4gTXkgaW5pdGlhbCBpbmNsaW5hdGlvbiBpcyB0aGF0IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLlxuXG5CdXQgaG9sZCBvbiwgbGV0IG1lIHF1aWNrbHkgdGhpbmsgdGhpcyB0aHJvdWdoLiBDYW4gc3l6a2FsbGVyIHNvbWVob3cgaW5qZWN0IFNQSSB0cmFmZmljPyBJIGtub3cgaXQgY2FuIGRvIFVTQiBhbmQgUENJICh0aHJvdWdoIGVtdWxhdGVkIGRldmljZXMgb3IgZGlyZWN0bHkgdmlhIHJhdyBQQ0kgY29uZmlnIHNwYWNlKSwgYnV0IFNQSSBpcyBkaWZmZXJlbnQuIFNQSSBuZWVkcyBhIG1hc3RlciBjb250cm9sbGVyLCBhbmQgdGhlIGBsYW44NjV4YCBkZXZpY2UgaXMgYSBzbGF2ZS4gV2l0aG91dCBib3RoIGFuIGVtdWxhdGVkIFNQSSBjb250cm9sbGVyICphbmQqIHRoZSBlbXVsYXRlZCBgbGFuODY1eGAgZGV2aWNlIGl0c2VsZiwgdGhlIGRyaXZlcidzIHByb2JlIGZ1bmN0aW9uIHdpbGwgbmV2ZXIgZXZlbiBnZXQgY2FsbGVkLlxuXG5FdmVuIGlmIEkgY291bGQgc29tZWhvdyBmb3JjZSB0aGUgU1BJIGRldmljZSBpbnN0YW50aWF0aW9uIOKAkyBtYXliZSB0aHJvdWdoIHN5c2ZzLCBjb25maWdmcyAoaWYgc3VwcG9ydGVkKSwgb3IgYSBkZXZpY2UgdHJlZSBvdmVybGF5IOKAkyB0aGUgU1BJIHRyYW5zZmVycyB3b3VsZCBpbmV2aXRhYmx5IGZhaWwgb3IgdGltZW91dC4gVGhlcmUncyBzaW1wbHkgbm8gaGFyZHdhcmUgcmVzcG9uZGluZyB0byB0aGUgU1BJIG1lc3NhZ2VzLiBUaGUgYG9hX3RjNmAgZnJhbWV3b3JrIGNvbW11bmljYXRlcyBvdmVyIFNQSSB1c2luZyBgc3BpX3N5bmNgIG9yIGBzcGlfYXN5bmNgLiBXaXRob3V0IGhhcmR3YXJlLCBgc3BpX3N5bmNgIGlzIGxpa2VseSB0byBlaXRoZXIgcmV0dXJuIGFuIGVycm9yIG9yIHNpbGVudGx5IHNlbmQgZGF0YSBpbnRvIHRoZSB2b2lkLCByZXR1cm5pbmcgZWl0aGVyIGFsbCB6ZXJvcyBvciBvbmVzLiBCdXQsIGFuZCB0aGlzIGlzIHRoZSBjcnV4IG9mIGl0LCB0byBldmVuICpnZXQqIHRvIHRoYXQgcG9pbnQsIHRoZSBgbGFuODY1eF9wcm9iZWAgZnVuY3Rpb24gaGFzIHRvIHN1Y2NlZWQuXG5cbkFscmlnaHQsIHRpbWUgdG8gZXhhbWluZSBgbGFuODY1eF9wcm9iZWAgY2xvc2VseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxMzgsIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6MjU6MDYuMjgyMjU2ODYxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzMsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzMzOlxcdHN0YXRpYyBpbnQgbGFuODY1eF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxcbiAzMzQ6XFx0e1xcbiAzMzU6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG4gMzM2OlxcdFxcdHN0cnVjdCBsYW44NjV4X3ByaXYgKnByaXY7XFxuIDMzNzpcXHRcXHRpbnQgcmV0O1xcbiAzMzg6XFx0XFxuIDMzOTpcXHRcXHRuZXRkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGxhbjg2NXhfcHJpdikpO1xcbiAzNDA6XFx0XFx0aWYgKCFuZXRkZXYpXFxuIDM0MTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMzQyOlxcdFxcbiAzNDM6XFx0XFx0cHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIDM0NDpcXHRcXHRwcml2LVxcdTAwM2VuZXRkZXYgPSBuZXRkZXY7XFxuIDM0NTpcXHRcXHRwcml2LVxcdTAwM2VzcGkgPSBzcGk7XFxuIDM0NjpcXHRcXHRzcGlfc2V0X2RydmRhdGEoc3BpLCBwcml2KTtcXG4gMzQ3OlxcdFxcdElOSVRfV09SSyhcXHUwMDI2cHJpdi1cXHUwMDNlbXVsdGljYXN0X3dvcmssIGxhbjg2NXhfbXVsdGljYXN0X3dvcmtfaGFuZGxlcik7XFxuIDM0ODpcXHRcXG4gMzQ5OlxcdFxcdHByaXYtXFx1MDAzZXRjNiA9IG9hX3RjNl9pbml0KHNwaSwgbmV0ZGV2KTtcXG4gMzUwOlxcdFxcdGlmICghcHJpdi1cXHUwMDNldGM2KSB7XFxuIDM1MTpcXHRcXHRcXHRyZXQgPSAtRU5PREVWO1xcbiAzNTI6XFx0XFx0XFx0Z290byBmcmVlX25ldGRldjtcXG4gMzUzOlxcdFxcdH1cXG4gMzU0OlxcdFxcbiAzNTU6XFx0XFx0LyogTEFOODY1eCBSZXYuQjAvQjEgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZyb20gQU4xNzYwXFxuIDM1NjpcXHRcXHQgKiBBcyBwZXIgdGhlIENvbmZpZ3VyYXRpb24gQXBwbGljYXRpb24gTm90ZSBBTjE3NjAgcHVibGlzaGVkIGluIHRoZVxcbiAzNTc6XFx0XFx0ICogbGluaywgaHR0cHM6Ly93d3cubWljcm9jaGlwLmNvbS9lbi11cy9hcHBsaWNhdGlvbi1ub3Rlcy9hbjE3NjBcXG4gMzU4OlxcdFxcdCAqIFJldmlzaW9uIEYgKERTNjAwMDE3NjBHIC0gSnVuZSAyMDI0KSwgY29uZmlndXJlIHRoZSBNQUMgdG8gc2V0IHRpbWVcXG4gMzU5OlxcdFxcdCAqIHN0YW1waW5nIGF0IHRoZSBlbmQgb2YgdGhlIFN0YXJ0IG9mIEZyYW1lIERlbGltaXRlciAoU0ZEKSBhbmQgc2V0IHRoZVxcbiAzNjA6XFx0XFx0ICogVGltZXIgSW5jcmVtZW50IHJlZyB0byA0MCBucyB0byBiZSB1c2VkIGFzIGEgMjUgTUh6IGludGVybmFsIGNsb2NrLlxcbiAzNjE6XFx0XFx0ICovXFxuIDM2MjpcXHRcXHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXIocHJpdi1cXHUwMDNldGM2LCBMQU44NjVYX1JFR19NQUNfVFNVX1RJTUVSX0lOQ1IsXFxuIDM2MzpcXHRcXHRcXHRcXHRcXHQgICAgTUFDX1RTVV9USU1FUl9JTkNSX0NPVU5UX05BTk9TRUNPTkRTKTtcXG4gMzY0OlxcdFxcdGlmIChyZXQpIHtcXG4gMzY1OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnNwaS1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIGNvbmZpZyBUU1UgVGltZXIgSW5jciByZWc6ICVkXFxcXG5cXFwiLFxcbiAzNjY6XFx0XFx0XFx0XFx0cmV0KTtcXG4gMzY3OlxcdFxcdFxcdGdvdG8gb2FfdGM2X2V4aXQ7XFxuIDM2ODpcXHRcXHR9XFxuIDM2OTpcXHRcXG4gMzcwOlxcdFxcdC8qIEFzIHBlciB0aGUgcG9pbnQgczMgaW4gdGhlIGJlbG93IGVycmF0YSwgU1BJIHJlY2VpdmUgRXRoZXJuZXQgZnJhbWVcXG4gMzcxOlxcdFxcdCAqIHRyYW5zZmVyIG1heSBoYWx0IHdoZW4gc3RhcnRpbmcgdGhlIG5leHQgZnJhbWUgaW4gdGhlIHNhbWUgZGF0YSBibG9ja1xcbiAzNzI6XFx0XFx0ICogKGNodW5rKSBhcyB0aGUgZW5kIG9mIGEgcHJldmlvdXMgZnJhbWUuIFRoZSBSRkEgZmllbGQgc2hvdWxkIGJlXFxuIDM3MzpcXHRcXHQgKiBjb25maWd1cmVkIHRvIDAxYiBvciAxMGIgZm9yIHByb3BlciBvcGVyYXRpb24uIEluIHRoZXNlIG1vZGVzLCBvbmx5XFxuIDM3NDpcXHRcXHQgKiBvbmUgcmVjZWl2ZSBFdGhlcm5ldCBmcmFtZSB3aWxsIGJlIHBsYWNlZCBpbiBhIHNpbmdsZSBkYXRhIGJsb2NrLlxcbiAzNzU6XFx0XFx0ICogV2hlbiB0aGUgUkZBIGZpZWxkIGlzIHdyaXR0ZW4gdG8gMDFiLCByZWNlaXZlZCBmcmFtZXMgd2lsbCBiZSBmb3JjZWRcXG4gMzc2OlxcdFxcdCAqIHRvIG9ubHkgc3RhcnQgaW4gdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGRhdGEgYmxvY2sgcGF5bG9hZCAoU1dPPTApLiBBc1xcbiAzNzc6XFx0XFx0ICogcmVjb21tZW5kZWQsIGVuYWJsZSB6ZXJvIGFsaWduIHJlY2VpdmUgZnJhbWUgZmVhdHVyZSBmb3IgcHJvcGVyXFxuIDM3ODpcXHRcXHQgKiBvcGVyYXRpb24uXFxuIDM3OTpcXHRcXHQgKlxcbiAzODA6XFx0XFx0ICogaHR0cHM6Ly93dzEubWljcm9jaGlwLmNvbS9kb3dubG9hZHMvYWVtRG9jdW1lbnRzL2RvY3VtZW50cy9BSVMvUHJvZHVjdERvY3VtZW50cy9FcnJhdGEvTEFOODY1MC0xLUVycmF0YS04MDAwMTA3NS5wZGZcXG4gMzgxOlxcdFxcdCAqL1xcbiAzODI6XFx0XFx0cmV0ID0gb2FfdGM2X3plcm9fYWxpZ25fcmVjZWl2ZV9mcmFtZV9lbmFibGUocHJpdi1cXHUwMDNldGM2KTtcXG4gMzgzOlxcdFxcdGlmIChyZXQpIHtcXG4gMzg0OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnNwaS1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHNldCBaQVJGRTogJWRcXFxcblxcXCIsIHJldCk7XFxuIDM4NTpcXHRcXHRcXHRnb3RvIG9hX3RjNl9leGl0O1xcbiAzODY6XFx0XFx0fVxcbiAzODc6XFx0XFxuIDM4ODpcXHRcXHQvKiBHZXQgdGhlIE1BQyBhZGRyZXNzIGZyb20gdGhlIFNQSSBkZXZpY2UgdHJlZSBub2RlICovXFxuIDM4OTpcXHRcXHRpZiAoZGV2aWNlX2dldF9ldGhkZXZfYWRkcmVzcyhcXHUwMDI2c3BpLVxcdTAwM2VkZXYsIG5ldGRldikpXFxuIDM5MDpcXHRcXHRcXHRldGhfaHdfYWRkcl9yYW5kb20obmV0ZGV2KTtcXG4gMzkxOlxcdFxcbiAzOTI6XFx0XFx0cmV0ID0gbGFuODY1eF9zZXRfaHdfbWFjYWRkcihwcml2LCBuZXRkZXYtXFx1MDAzZWRldl9hZGRyKTtcXG4gMzkzOlxcdFxcdGlmIChyZXQpIHtcXG4gMzk0OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnNwaS1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIGNvbmZpZ3VyZSBNQUM6ICVkXFxcXG5cXFwiLCByZXQpO1xcbiAzOTU6XFx0XFx0XFx0Z290byBvYV90YzZfZXhpdDtcXG4gMzk2OlxcdFxcdH1cXG4gMzk3OlxcdFxcbiAzOTg6XFx0XFx0bmV0ZGV2LVxcdTAwM2VpZl9wb3J0ID0gSUZfUE9SVF8xMEJBU0VUO1xcbiAzOTk6XFx0XFx0bmV0ZGV2LVxcdTAwM2VpcnEgPSBzcGktXFx1MDAzZWlycTtcXG4gNDAwOlxcdFxcdG5ldGRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZsYW44NjV4X25ldGRldl9vcHM7XFxuIDQwMTpcXHRcXHRuZXRkZXYtXFx1MDAzZWV0aHRvb2xfb3BzID0gXFx1MDAyNmxhbjg2NXhfZXRodG9vbF9vcHM7XFxuIDQwMjpcXHRcXG4gNDAzOlxcdFxcdHJldCA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpO1xcbiA0MDQ6XFx0XFx0aWYgKHJldCkge1xcbiA0MDU6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2c3BpLVxcdTAwM2VkZXYsIFxcXCJSZWdpc3RlciBuZXRkZXYgZmFpbGVkIChyZXQgPSAlZClcXFwiLCByZXQpO1xcbiA0MDY6XFx0XFx0XFx0Z290byBvYV90YzZfZXhpdDtcXG4gNDA3OlxcdFxcdH1cXG4gNDA4OlxcdFxcbiA0MDk6XFx0XFx0cmV0dXJuIDA7XFxuIDQxMDpcXHRcXG4gNDExOlxcdG9hX3RjNl9leGl0OlxcbiA0MTI6XFx0XFx0b2FfdGM2X2V4aXQocHJpdi1cXHUwMDNldGM2KTtcXG4gNDEzOlxcdGZyZWVfbmV0ZGV2OlxcbiA0MTQ6XFx0XFx0ZnJlZV9uZXRkZXYocHJpdi1cXHUwMDNlbmV0ZGV2KTtcXG4gNDE1OlxcdFxcdHJldHVybiByZXQ7XFxuIDQxNjpcXHR9XFxuIDQxNzpcXHRcXG4gNDE4OlxcdHN0YXRpYyB2b2lkIGxhbjg2NXhfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXFxuIDQxOTpcXHR7XFxuIDQyMDpcXHRcXHRzdHJ1Y3QgbGFuODY1eF9wcml2ICpwcml2ID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7XFxuIDQyMTpcXHRcXG4gNDIyOlxcdFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnByaXYtXFx1MDAzZW11bHRpY2FzdF93b3JrKTtcXG4gNDIzOlxcdFxcdHVucmVnaXN0ZXJfbmV0ZGV2KHByaXYtXFx1MDAzZW5ldGRldik7XFxuIDQyNDpcXHRcXHRvYV90YzZfZXhpdChwcml2LVxcdTAwM2V0YzYpO1xcbiA0MjU6XFx0XFx0ZnJlZV9uZXRkZXYocHJpdi1cXHUwMDNlbmV0ZGV2KTtcXG4gNDI2OlxcdH1cXG4gNDI3OlxcdFxcbiA0Mjg6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBzcGlfZGV2aWNlX2lkIGxhbjg2NXhfaWRzW10gPSB7XFxuIDQyOTpcXHRcXHR7IC5uYW1lID0gXFxcImxhbjg2NTBcXFwiIH0sXFxuIDQzMDpcXHRcXHR7IC5uYW1lID0gXFxcImxhbjg2NTFcXFwiIH0sXFxuIDQzMTpcXHRcXHR7fSxcXG4gNDMyOlxcdH07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAzOjI1OjA2LjI4MjM1NTgwMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTEyNjgxNzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTEFOODY1eCBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBgbGFuODY1eF9wcm9iZWAgZnVuY3Rpb24gaXMgY2FsbGluZyBgb2FfdGM2X2luaXRgLiAgVGhlbiwgcmlnaHQgYWZ0ZXIgdGhhdCwgd2UndmUgZ290IGEgY2FsbCB0byBgb2FfdGM2X3dyaXRlX3JlZ2lzdGVyYC4gIE15IGd1dCBmZWVsaW5nIGlzIHN0YXJ0aW5nIHRvIGtpY2sgaW4uLi4gIGlmIHdlJ3JlIG1pc3NpbmcgdGhlIHBoeXNpY2FsIGhhcmR3YXJlLCB0aGF0IGBvYV90YzZfd3JpdGVfcmVnaXN0ZXJgIGlzIHByb2JhYmx5IHdoZXJlIHRoaW5ncyBhcmUgZ29pbmcgdG8gZmFsbCBhcGFydC4gSXTigJlzIG1ha2luZyBTUEkgdHJhbnNmZXJzLCBhbmQgb2YgY291cnNlLCBpdOKAmXMgZ29pbmcgdG8gZXhwZWN0IHNvbWUgc29ydCBvZiB2YWxpZCByZXNwb25zZSBiYWNrLiBUaGF0J3MgdGhlIHR5cGljYWwgYmVoYXZpb3IuXG5cbkhvbGQgb24gYSBzZWNvbmQsIHRob3VnaC4gQmVmb3JlIEkganVtcCB0byBhbnkgY29uY2x1c2lvbnMsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBob3cgYG9hX3RjNl93cml0ZV9yZWdpc3RlcmAgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIEkgdGhpbmsgaXQgd2lsbCBmYWlsLiBMZXQncyBtYWtlIHN1cmUgSSdtIG5vdCBtYWtpbmcgYW55IGFzc3VtcHRpb25zIGhlcmUuIFRoZSBkZXRhaWxzIGFyZSBjcml0aWNhbCwgZXNwZWNpYWxseSB3aXRoIHRoaXMga2luZCBvZiBoYXJkd2FyZSBpbnRlcmFjdGlvbi4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgaGF2ZSBzb21lIGtpbmQgb2Ygc2FmZWd1YXJkIGJ1aWx0IGludG8gaXQuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDU4NSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6MjU6MTAuMTk1MDQ0OTkyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzIxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCtcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBPUEVOIEFsbGlhbmNlIDEwQkFTReKAkVQxeCBNQUPigJFQSFkgU2VyaWFsIEludGVyZmFjZSBmcmFtZXdvcmtcXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBBdXRob3I6IFBhcnRoaWJhbiBWZWVyYXNvb3JhbiBcXHUwMDNjcGFydGhpYmFuLnZlZXJhc29vcmFuQG1pY3JvY2hpcC5jb21cXHUwMDNlXFxuICAgNjpcXHQgKi9cXG4gICA3OlxcdFxcbiAgIDg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9wb2xsLmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaW50ZXJydXB0LmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbWRpby5oXFx1MDAzZVxcbiAgMTI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L29hX3RjNi5oXFx1MDAzZVxcbiAgMTQ6XFx0XFxuICAxNTpcXHQvKiBPUEVOIEFsbGlhbmNlIFRDNiByZWdpc3RlcnMgKi9cXG4gIDE2OlxcdC8qIFN0YW5kYXJkIENhcGFiaWxpdGllcyBSZWdpc3RlciAqL1xcbiAgMTc6XFx0I2RlZmluZSBPQV9UQzZfUkVHX1NURENBUFxcdFxcdFxcdDB4MDAwMlxcbiAgMTg6XFx0I2RlZmluZSBTVERDQVBfRElSRUNUX1BIWV9SRUdfQUNDRVNTXFx0XFx0QklUKDgpXFxuICAxOTpcXHRcXG4gIDIwOlxcdC8qIFJlc2V0IENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAqL1xcbiAgMjE6XFx0I2RlZmluZSBPQV9UQzZfUkVHX1JFU0VUXFx0XFx0XFx0MHgwMDAzXFxuICAyMjpcXHQjZGVmaW5lIFJFU0VUX1NXUkVTRVRcXHRcXHRcXHRcXHRCSVQoMClcXHQvKiBTb2Z0d2FyZSBSZXNldCAqL1xcbiAgMjM6XFx0XFxuICAyNDpcXHQvKiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICMwICovXFxuICAyNTpcXHQjZGVmaW5lIE9BX1RDNl9SRUdfQ09ORklHMFxcdFxcdFxcdDB4MDAwNFxcbiAgMjY6XFx0I2RlZmluZSBDT05GSUcwX1NZTkNcXHRcXHRcXHRcXHRCSVQoMTUpXFxuICAyNzpcXHQjZGVmaW5lIENPTkZJRzBfWkFSRkVfRU5BQkxFXFx0XFx0XFx0QklUKDEyKVxcbiAgMjg6XFx0XFxuICAyOTpcXHQvKiBTdGF0dXMgUmVnaXN0ZXIgIzAgKi9cXG4gIDMwOlxcdCNkZWZpbmUgT0FfVEM2X1JFR19TVEFUVVMwXFx0XFx0XFx0MHgwMDA4XFxuICAzMTpcXHQjZGVmaW5lIFNUQVRVUzBfUkVTRVRDXFx0XFx0XFx0XFx0QklUKDYpXFx0LyogUmVzZXQgQ29tcGxldGUgKi9cXG4gIDMyOlxcdCNkZWZpbmUgU1RBVFVTMF9IRUFERVJfRVJST1JcXHRcXHRcXHRCSVQoNSlcXG4gIDMzOlxcdCNkZWZpbmUgU1RBVFVTMF9MT1NTX09GX0ZSQU1FX0VSUk9SXFx0XFx0QklUKDQpXFxuICAzNDpcXHQjZGVmaW5lIFNUQVRVUzBfUlhfQlVGRkVSX09WRVJGTE9XX0VSUk9SXFx0QklUKDMpXFxuICAzNTpcXHQjZGVmaW5lIFNUQVRVUzBfVFhfUFJPVE9DT0xfRVJST1JcXHRcXHRCSVQoMClcXG4gIDM2OlxcdFxcbiAgMzc6XFx0LyogQnVmZmVyIFN0YXR1cyBSZWdpc3RlciAqL1xcbiAgMzg6XFx0I2RlZmluZSBPQV9UQzZfUkVHX0JVRkZFUl9TVEFUVVNcXHRcXHQweDAwMEJcXG4gIDM5OlxcdCNkZWZpbmUgQlVGRkVSX1NUQVRVU19UWF9DUkVESVRTX0FWQUlMQUJMRVxcdEdFTk1BU0soMTUsIDgpXFxuICA0MDpcXHQjZGVmaW5lIEJVRkZFUl9TVEFUVVNfUlhfQ0hVTktTX0FWQUlMQUJMRVxcdEdFTk1BU0soNywgMClcXG4gIDQxOlxcdFxcbiAgNDI6XFx0LyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgIzAgKi9cXG4gIDQzOlxcdCNkZWZpbmUgT0FfVEM2X1JFR19JTlRfTUFTSzBcXHRcXHRcXHQweDAwMENcXG4gIDQ0OlxcdCNkZWZpbmUgSU5UX01BU0swX0hFQURFUl9FUlJfTUFTS1xcdFxcdEJJVCg1KVxcbiAgNDU6XFx0I2RlZmluZSBJTlRfTUFTSzBfTE9TU19PRl9GUkFNRV9FUlJfTUFTS1xcdEJJVCg0KVxcbiAgNDY6XFx0I2RlZmluZSBJTlRfTUFTSzBfUlhfQlVGRkVSX09WRVJGTE9XX0VSUl9NQVNLXFx0QklUKDMpXFxuICA0NzpcXHQjZGVmaW5lIElOVF9NQVNLMF9UWF9QUk9UT0NPTF9FUlJfTUFTS1xcdFxcdEJJVCgwKVxcbiAgNDg6XFx0I2RlZmluZSBJTlRfTUFTSzBfQUxMX0lOVEVSUlVQVFMgICAgICAgICAgICAgICAgKEdFTk1BU0soNSwgMCkgfCBcXFxcXFxuICA0OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgR0VOTUFTSygxMiwgNykpXFxuICA1MDpcXHRcXG4gIDUxOlxcdC8qIFBIWSBDbGF1c2UgMjIgcmVnaXN0ZXJzIGJhc2UgYWRkcmVzcyBhbmQgbWFzayAqL1xcbiAgNTI6XFx0I2RlZmluZSBPQV9UQzZfUEhZX1NURF9SRUdfQUREUl9CQVNFXFx0XFx0MHhGRjAwXFxuICA1MzpcXHQjZGVmaW5lIE9BX1RDNl9QSFlfU1REX1JFR19BRERSX01BU0tcXHRcXHQweDFGXFxuICA1NDpcXHRcXG4gIDU1OlxcdC8qIENvbnRyb2wgY29tbWFuZCBoZWFkZXIgKi9cXG4gIDU2OlxcdCNkZWZpbmUgT0FfVEM2X0NUUkxfSEVBREVSX0RBVEFfTk9UX0NUUkxcXHRCSVQoMzEpXFxuICA1NzpcXHQjZGVmaW5lIE9BX1RDNl9DVFJMX0hFQURFUl9XUklURV9OT1RfUkVBRFxcdEJJVCgyOSlcXG4gIDU4OlxcdCNkZWZpbmUgT0FfVEM2X0NUUkxfSEVBREVSX01FTV9NQVBfU0VMRUNUT1JcXHRHRU5NQVNLKDI3LCAyNClcXG4gIDU5OlxcdCNkZWZpbmUgT0FfVEM2X0NUUkxfSEVBREVSX0FERFJcXHRcXHRcXHRHRU5NQVNLKDIzLCA4KVxcbiAgNjA6XFx0I2RlZmluZSBPQV9UQzZfQ1RSTF9IRUFERVJfTEVOR1RIXFx0XFx0R0VOTUFTSyg3LCAxKVxcbiAgNjE6XFx0I2RlZmluZSBPQV9UQzZfQ1RSTF9IRUFERVJfUEFSSVRZXFx0XFx0QklUKDApXFxuICA2MjpcXHRcXG4gIDYzOlxcdC8qIERhdGEgaGVhZGVyICovXFxuICA2NDpcXHQjZGVmaW5lIE9BX1RDNl9EQVRBX0hFQURFUl9EQVRBX05PVF9DVFJMXFx0QklUKDMxKVxcbiAgNjU6XFx0I2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfREFUQV9WQUxJRFxcdFxcdEJJVCgyMSlcXG4gIDY2OlxcdCNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX1NUQVJUX1ZBTElEXFx0XFx0QklUKDIwKVxcbiAgNjc6XFx0I2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfU1RBUlRfV09SRF9PRkZTRVRcXHRHRU5NQVNLKDE5LCAxNilcXG4gIDY4OlxcdCNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX0VORF9WQUxJRFxcdFxcdEJJVCgxNClcXG4gIDY5OlxcdCNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX0VORF9CWVRFX09GRlNFVFxcdEdFTk1BU0soMTMsIDgpXFxuICA3MDpcXHQjZGVmaW5lIE9BX1RDNl9EQVRBX0hFQURFUl9QQVJJVFlcXHRcXHRCSVQoMClcXG4gIDcxOlxcdFxcbiAgNzI6XFx0LyogRGF0YSBmb290ZXIgKi9cXG4gIDczOlxcdCNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX0VYVEVOREVEX1NUU1xcdFxcdEJJVCgzMSlcXG4gIDc0OlxcdCNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX1JYRF9IRUFERVJfQkFEXFx0QklUKDMwKVxcbiAgNzU6XFx0I2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfQ09ORklHX1NZTkNcXHRcXHRCSVQoMjkpXFxuICA3NjpcXHQjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9SWF9DSFVOS1NcXHRcXHRHRU5NQVNLKDI4LCAyNClcXG4gIDc3OlxcdCNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX0RBVEFfVkFMSURcXHRcXHRCSVQoMjEpXFxuICA3ODpcXHQjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9TVEFSVF9WQUxJRFxcdFxcdEJJVCgyMClcXG4gIDc5OlxcdCNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX1NUQVJUX1dPUkRfT0ZGU0VUXFx0R0VOTUFTSygxOSwgMTYpXFxuICA4MDpcXHQjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9FTkRfVkFMSURcXHRcXHRCSVQoMTQpXFxuICA4MTpcXHQjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9FTkRfQllURV9PRkZTRVRcXHRHRU5NQVNLKDEzLCA4KVxcbiAgODI6XFx0I2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfVFhfQ1JFRElUU1xcdFxcdEdFTk1BU0soNSwgMSlcXG4gIDgzOlxcdFxcbiAgODQ6XFx0LyogUEhZIOKAkyBDbGF1c2UgNDUgcmVnaXN0ZXJzIG1lbW9yeSBtYXAgc2VsZWN0b3IgKE1NUykgYXMgcGVyIHRhYmxlIDYgaW4gdGhlXFxuICA4NTpcXHQgKiBPUEVOIEFsbGlhbmNlIHNwZWNpZmljYXRpb24uXFxuICA4NjpcXHQgKi9cXG4gIDg3OlxcdCNkZWZpbmUgT0FfVEM2X1BIWV9DNDVfUENTX01NUzJcXHRcXHRcXHQyXFx0LyogTU1EIDMgKi9cXG4gIDg4OlxcdCNkZWZpbmUgT0FfVEM2X1BIWV9DNDVfUE1BX1BNRF9NTVMzXFx0XFx0M1xcdC8qIE1NRCAxICovXFxuICA4OTpcXHQjZGVmaW5lIE9BX1RDNl9QSFlfQzQ1X1ZTX1BMQ0FfTU1TNFxcdFxcdDRcXHQvKiBNTUQgMzEgKi9cXG4gIDkwOlxcdCNkZWZpbmUgT0FfVEM2X1BIWV9DNDVfQVVUT19ORUdfTU1TNVxcdFxcdDVcXHQvKiBNTUQgNyAqL1xcbiAgOTE6XFx0I2RlZmluZSBPQV9UQzZfUEhZX0M0NV9QT1dFUl9VTklUX01NUzZcXHRcXHQ2XFx0LyogTU1EIDEzICovXFxuICA5MjpcXHRcXG4gIDkzOlxcdCNkZWZpbmUgT0FfVEM2X0NUUkxfSEVBREVSX1NJWkVcXHRcXHRcXHQ0XFxuICA5NDpcXHQjZGVmaW5lIE9BX1RDNl9DVFJMX1JFR19WQUxVRV9TSVpFXFx0XFx0NFxcbiAgOTU6XFx0I2RlZmluZSBPQV9UQzZfQ1RSTF9JR05PUkVEX1NJWkVcXHRcXHQ0XFxuICA5NjpcXHQjZGVmaW5lIE9BX1RDNl9DVFJMX01BWF9SRUdJU1RFUlNcXHRcXHQxMjhcXG4gIDk3OlxcdCNkZWZpbmUgT0FfVEM2X0NUUkxfU1BJX0JVRl9TSVpFXFx0XFx0KE9BX1RDNl9DVFJMX0hFQURFUl9TSVpFICtcXFxcXFxuICA5ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQoT0FfVEM2X0NUUkxfTUFYX1JFR0lTVEVSUyAqXFxcXFxcbiAgOTk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0T0FfVEM2X0NUUkxfUkVHX1ZBTFVFX1NJWkUpICtcXFxcXFxuIDEwMDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRPQV9UQzZfQ1RSTF9JR05PUkVEX1NJWkUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAzOjI1OjEwLjE5NTE3OTQ5MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTc5NTg2Mjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIGBvYV90YzZgIFNQSSBEcml2ZXIgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgYG9hX3RjNmAgZnJhbWV3b3JrIGlzIGEgKnB1cmUqIFNQSSBkcml2ZXIsIHdoaWNoIGltbWVkaWF0ZWx5IG5hcnJvd3MgZG93biBpdHMgYmVoYXZpb3IuIFRoYXQncyBnb29kIHRvIGtub3cg4oCTIGl0J3MgZ29pbmcgdG8gYmUgZnVuZGFtZW50YWxseSByZWxpYW50IG9uIFNQSSBjb21tdW5pY2F0aW9uLCBubyBoaWRkZW4gY29tcGxleGl0aWVzLiBOb3csIGlmIEknbSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LCB3aXRob3V0IGFueSBhY3R1YWwgaGFyZHdhcmUgcHJlc2VudCwgYG9hX3RjNl9pbml0YCBpcyAqYm91bmQqIHRvIGhpdCBhIHNuYWcgcHJldHR5IGVhcmx5IG9uLiBUaGUgd2hvbGUgcG9pbnQgb2YgaW5pdGlhbGl6YXRpb24gaXMgdG8gZXN0YWJsaXNoIGEgY29ubmVjdGlvbiB0byBoYXJkd2FyZSwgYW5kIGEgY2hlY2sgbGlrZSBgb2FfdGM2X2NoZWNrX3N0YXR1c2AsIG9yIHNvbWV0aGluZyBlcXVpdmFsZW50LCBpcyBnb2luZyB0byBiZSB0aGUgc21va2luZyBndW4uIEl0J3MgZ29pbmcgdG8gdHJ5IHRvIHJlYWQgdGhvc2UgU1BJIHJlZ2lzdGVycywgYW5kIHRoZSBsYWNrIG9mIGEgcmVzcG9uc2UsIG9yIGFuIHVuZXhwZWN0ZWQgcmVzcG9uc2UsIHdpbGwgdHJpZ2dlciBhIGZhaWx1cmUuIFRoaXMgbGFjayBvZiBoYXJkd2FyZSBpcyBnb2luZyB0byBiZSB0aGUgY3JpdGljYWwgZmFjdG9yIGluIGRldGVybWluaW5nIGl0cyBzdWNjZXNzIG9yIGZhaWx1cmUuIEFscmlnaHQsIGxldCdzIGRpdmUgaW50byBgb2FfdGM2X2luaXRgIGFuZCBjb25maXJtIHRoaXMgYXNzdW1wdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwMzEsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAzOjI1OjEzLjc3NDc2ODE5N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTMxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MDA6XFx0ICogUmV0dXJuOiBwb2ludGVyIHJlZmVyZW5jZSB0byB0aGUgb2FfdGM2IHN0cnVjdHVyZSBpZiB0aGUgTUFDLVBIWVxcbjE0MDE6XFx0ICogaW5pdGlhbGl6YXRpb24gaXMgc3VjY2Vzc2Z1bCBvdGhlcndpc2UgTlVMTC5cXG4xNDAyOlxcdCAqL1xcbjE0MDM6XFx0c3RydWN0IG9hX3RjNiAqb2FfdGM2X2luaXQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4xNDA0OlxcdHtcXG4xNDA1OlxcdFxcdHN0cnVjdCBvYV90YzYgKnRjNjtcXG4xNDA2OlxcdFxcdGludCByZXQ7XFxuMTQwNzpcXHRcXG4xNDA4OlxcdFxcdHRjNiA9IGRldm1fa3phbGxvYyhcXHUwMDI2c3BpLVxcdTAwM2VkZXYsIHNpemVvZigqdGM2KSwgR0ZQX0tFUk5FTCk7XFxuMTQwOTpcXHRcXHRpZiAoIXRjNilcXG4xNDEwOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjE0MTE6XFx0XFxuMTQxMjpcXHRcXHR0YzYtXFx1MDAzZXNwaSA9IHNwaTtcXG4xNDEzOlxcdFxcdHRjNi1cXHUwMDNlbmV0ZGV2ID0gbmV0ZGV2O1xcbjE0MTQ6XFx0XFx0U0VUX05FVERFVl9ERVYobmV0ZGV2LCBcXHUwMDI2c3BpLVxcdTAwM2VkZXYpO1xcbjE0MTU6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2dGM2LVxcdTAwM2VzcGlfY3RybF9sb2NrKTtcXG4xNDE2OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZ0YzYtXFx1MDAzZXR4X3NrYl9sb2NrKTtcXG4xNDE3OlxcdFxcbjE0MTg6XFx0XFx0LyogU2V0IHRoZSBTUEkgY29udHJvbGxlciB0byBwdW1wIGF0IHJlYWx0aW1lIHByaW9yaXR5ICovXFxuMTQxOTpcXHRcXHR0YzYtXFx1MDAzZXNwaS1cXHUwMDNlcnQgPSB0cnVlO1xcbjE0MjA6XFx0XFx0aWYgKHNwaV9zZXR1cCh0YzYtXFx1MDAzZXNwaSkgXFx1MDAzYyAwKVxcbjE0MjE6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTQyMjpcXHRcXG4xNDIzOlxcdFxcdHRjNi1cXHUwMDNlc3BpX2N0cmxfdHhfYnVmID0gZGV2bV9remFsbG9jKFxcdTAwMjZ0YzYtXFx1MDAzZXNwaS1cXHUwMDNlZGV2LFxcbjE0MjQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIE9BX1RDNl9DVFJMX1NQSV9CVUZfU0laRSxcXG4xNDI1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBHRlBfS0VSTkVMKTtcXG4xNDI2OlxcdFxcdGlmICghdGM2LVxcdTAwM2VzcGlfY3RybF90eF9idWYpXFxuMTQyNzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xNDI4OlxcdFxcbjE0Mjk6XFx0XFx0dGM2LVxcdTAwM2VzcGlfY3RybF9yeF9idWYgPSBkZXZtX2t6YWxsb2MoXFx1MDAyNnRjNi1cXHUwMDNlc3BpLVxcdTAwM2VkZXYsXFxuMTQzMDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgT0FfVEM2X0NUUkxfU1BJX0JVRl9TSVpFLFxcbjE0MzE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIEdGUF9LRVJORUwpO1xcbjE0MzI6XFx0XFx0aWYgKCF0YzYtXFx1MDAzZXNwaV9jdHJsX3J4X2J1ZilcXG4xNDMzOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjE0MzQ6XFx0XFxuMTQzNTpcXHRcXHR0YzYtXFx1MDAzZXNwaV9kYXRhX3R4X2J1ZiA9IGRldm1fa3phbGxvYyhcXHUwMDI2dGM2LVxcdTAwM2VzcGktXFx1MDAzZWRldixcXG4xNDM2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBPQV9UQzZfU1BJX0RBVEFfQlVGX1NJWkUsXFxuMTQzNzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgR0ZQX0tFUk5FTCk7XFxuMTQzODpcXHRcXHRpZiAoIXRjNi1cXHUwMDNlc3BpX2RhdGFfdHhfYnVmKVxcbjE0Mzk6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTQ0MDpcXHRcXG4xNDQxOlxcdFxcdHRjNi1cXHUwMDNlc3BpX2RhdGFfcnhfYnVmID0gZGV2bV9remFsbG9jKFxcdTAwMjZ0YzYtXFx1MDAzZXNwaS1cXHUwMDNlZGV2LFxcbjE0NDI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIE9BX1RDNl9TUElfREFUQV9CVUZfU0laRSxcXG4xNDQzOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBHRlBfS0VSTkVMKTtcXG4xNDQ0OlxcdFxcdGlmICghdGM2LVxcdTAwM2VzcGlfZGF0YV9yeF9idWYpXFxuMTQ0NTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xNDQ2OlxcdFxcbjE0NDc6XFx0XFx0cmV0ID0gb2FfdGM2X3N3X3Jlc2V0X21hY3BoeSh0YzYpO1xcbjE0NDg6XFx0XFx0aWYgKHJldCkge1xcbjE0NDk6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2dGM2LVxcdTAwM2VzcGktXFx1MDAzZWRldixcXG4xNDUwOlxcdFxcdFxcdFxcdFxcXCJNQUMtUEhZIHNvZnR3YXJlIHJlc2V0IGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuMTQ1MTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xNDUyOlxcdFxcdH1cXG4xNDUzOlxcdFxcbjE0NTQ6XFx0XFx0cmV0ID0gb2FfdGM2X3VubWFza19tYWNwaHlfZXJyb3JfaW50ZXJydXB0cyh0YzYpO1xcbjE0NTU6XFx0XFx0aWYgKHJldCkge1xcbjE0NTY6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2dGM2LVxcdTAwM2VzcGktXFx1MDAzZWRldixcXG4xNDU3OlxcdFxcdFxcdFxcdFxcXCJNQUMtUEhZIGVycm9yIGludGVycnVwdHMgdW5tYXNrIGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuMTQ1ODpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xNDU5OlxcdFxcdH1cXG4xNDYwOlxcdFxcbjE0NjE6XFx0XFx0cmV0ID0gb2FfdGM2X3BoeV9pbml0KHRjNik7XFxuMTQ2MjpcXHRcXHRpZiAocmV0KSB7XFxuMTQ2MzpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZ0YzYtXFx1MDAzZXNwaS1cXHUwMDNlZGV2LFxcbjE0NjQ6XFx0XFx0XFx0XFx0XFxcIk1BQyBpbnRlcm5hbCBQSFkgaW5pdGlhbGl6YXRpb24gZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xNDY1OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjE0NjY6XFx0XFx0fVxcbjE0Njc6XFx0XFxuMTQ2ODpcXHRcXHRyZXQgPSBvYV90YzZfZW5hYmxlX2RhdGFfdHJhbnNmZXIodGM2KTtcXG4xNDY5OlxcdFxcdGlmIChyZXQpIHtcXG4xNDcwOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnRjNi1cXHUwMDNlc3BpLVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gZW5hYmxlIGRhdGEgdHJhbnNmZXI6ICVkXFxcXG5cXFwiLFxcbjE0NzE6XFx0XFx0XFx0XFx0cmV0KTtcXG4xNDcyOlxcdFxcdFxcdGdvdG8gcGh5X2V4aXQ7XFxuMTQ3MzpcXHRcXHR9XFxuMTQ3NDpcXHRcXG4xNDc1OlxcdFxcdHJldCA9IG9hX3RjNl91cGRhdGVfYnVmZmVyX3N0YXR1c19mcm9tX3JlZ2lzdGVyKHRjNik7XFxuMTQ3NjpcXHRcXHRpZiAocmV0KSB7XFxuMTQ3NzpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZ0YzYtXFx1MDAzZXNwaS1cXHUwMDNlZGV2LFxcbjE0Nzg6XFx0XFx0XFx0XFx0XFxcIkZhaWxlZCB0byB1cGRhdGUgYnVmZmVyIHN0YXR1czogJWRcXFxcblxcXCIsIHJldCk7XFxuMTQ3OTpcXHRcXHRcXHRnb3RvIHBoeV9leGl0O1xcbjE0ODA6XFx0XFx0fVxcbjE0ODE6XFx0XFxuMTQ4MjpcXHRcXHRyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKFxcdTAwMjZ0YzYtXFx1MDAzZXNwaS1cXHUwMDNlZGV2LCB0YzYtXFx1MDAzZXNwaS1cXHUwMDNlaXJxLFxcbjE0ODM6XFx0XFx0XFx0XFx0XFx0XFx0b2FfdGM2X21hY3BoeV9pc3IsXFxuMTQ4NDpcXHRcXHRcXHRcXHRcXHRcXHRvYV90YzZfbWFjcGh5X3RocmVhZGVkX2lycSxcXG4xNDg1OlxcdFxcdFxcdFxcdFxcdFxcdElSUUZfVFJJR0dFUl9MT1cgfCBJUlFGX09ORVNIT1QsXFxuMTQ4NjpcXHRcXHRcXHRcXHRcXHRcXHRkZXZfbmFtZShcXHUwMDI2dGM2LVxcdTAwM2VzcGktXFx1MDAzZWRldiksIHRjNik7XFxuMTQ4NzpcXHRcXHRpZiAocmV0KSB7XFxuMTQ4ODpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZ0YzYtXFx1MDAzZXNwaS1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlcXVlc3QgbWFjcGh5IGlzciAlZFxcXFxuXFxcIixcXG4xNDg5OlxcdFxcdFxcdFxcdHJldCk7XFxuMTQ5MDpcXHRcXHRcXHRnb3RvIHBoeV9leGl0O1xcbjE0OTE6XFx0XFx0fVxcbjE0OTI6XFx0XFxuMTQ5MzpcXHRcXHQvKiBvYV90YzZfc3dfcmVzZXRfbWFjcGh5KCkgZnVuY3Rpb24gcmVzZXRzIGFuZCBjbGVhcnMgdGhlIE1BQy1QSFkgcmVzZXRcXG4xNDk0OlxcdFxcdCAqIGNvbXBsZXRlIHN0YXR1cy4gSVJRIGlzIGFsc28gYXNzZXJ0ZWQgb24gcmVzZXQgY29tcGxldGlvbiBhbmQgaXQgaXNcXG4xNDk1OlxcdFxcdCAqIHJlbWFpbiBhc3NlcnRlZCB1bnRpbCBNQUMtUEhZIHJlY2VpdmVzIGEgZGF0YSBjaHVuay4gU28gcGVyZm9ybWluZyBhblxcbjE0OTY6XFx0XFx0ICogZW1wdHkgZGF0YSBjaHVuayB0cmFuc21pc3Npb24gd2lsbCBkZWFzc2VydCB0aGUgSVJRLiBSZWZlciBzZWN0aW9uXFxuMTQ5NzpcXHRcXHQgKiA3LjcgYW5kIDkuMi44LjggaW4gdGhlIE9QRU4gQWxsaWFuY2Ugc3BlY2lmaWNhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLlxcbjE0OTg6XFx0XFx0ICovXFxuMTQ5OTpcXHRcXHR0YzYtXFx1MDAzZWludF9mbGFnID0gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6MjU6MTMuNzc0OTIyNTU3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NDk1NjMwNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYGxhbjg2NXhfcHJvYmVgIFNjZW5hcmlvIGluIFN5emthbGxlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYG9hX3RjNl9zd19yZXNldF9tYWNwaHlgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgdG8gYmUgaGVhdmlseSByZWxpYW50IG9uIFNQSSB0cmFuc2ZlcnMuIFRoZSBjcml0aWNhbCBwYXRoIGhlcmUgbGVhZHMgdG8gYG9hX3RjNl9pbml0YCwgd2hpY2ggcmV0dXJucyBOVUxMIGlmIHRoZSBTUEkgdHJhbnNmZXJzIGZhaWwsIHVsdGltYXRlbHkgY2F1c2luZyBgbGFuODY1eF9wcm9iZWAgdG8gZmFpbC4gVGhlIGNvcmUgaXNzdWUgaXMgd2hldGhlciBvciBub3QgU3l6a2FsbGVyIGNhbiBtZWFuaW5nZnVsbHkgaW50ZXJhY3Qgd2l0aCBTUEkgZGV2aWNlcyB0byBnZXQgdG8gdGhhdCBwcm9iZSBmdW5jdGlvbi5cblxuTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCBnZW5lcmljIFNQSSBlbXVsYXRpb24gaXMgbGlrZWx5IG1pc3NpbmcgZnJvbSBTeXprYWxsZXIuIEkga25vdyBpdCBsZWFucyB0b3dhcmRzIHJlYWwgaGFyZHdhcmUgaW50ZXJhY3Rpb24uIFdoaWxlIGBzcGlkZXZgIGV4aXN0cyBhcyBhIGNoYXJhY3RlciBkZXZpY2UsIHRoYXTigJlzIGp1c3QgYSB1c2VyLXNwYWNlIGludGVyZmFjZSB0byBhICpkcml2ZXIqLCBub3QgYW4gZW11bGF0b3Igb2YgU1BJIGZ1bmN0aW9uYWxpdHkuIFNpbWlsYXJseSwgYHNwaS1sb29wYmFjay10ZXN0YCBpcywgd2VsbCwganVzdCBmb3IgdGVzdGluZyBhbmQgbm90IGEgcGF0aCB0byBnZXR0aW5nIHRoZSBgbGFuODY1eGAgZGV2aWNlIGluaXRpYWxpemVkLiBJIG5lZWQgdG8gZmluZCBhIHdheSB0byBtYWtlIFN5emthbGxlciBzZWUgdGhlIGBsYW44NjV4YCBhbmQgcmVhY2ggdGhhdCBjcnVjaWFsIHByb2JlIGZ1bmN0aW9uLlxuXG5DYW4gU3l6a2FsbGVyIGluamVjdCBEZXZpY2UgVHJlZSBub2Rlcz8gTm8sIHRoYXQncyBub3QgaXRzIHR5cGljYWwgYXBwcm9hY2gsIGV4Y2VwdCBtYXliZSB3aXRoIGNvbmZpZ2ZzIGZvciBjZXJ0YWluIHN1YnN5c3RlbXMsIGJ1dCBkZWZpbml0ZWx5IG5vdCBmb3IgU1BJIGNvbnRyb2xsZXJzLiBJIHN0YXJ0ZWQgd29uZGVyaW5nIGlmIEkgY291bGQgdXNlIHNvbWV0aGluZyBsaWtlIGBzeXpfZGV2bGlua2AsIGJ1dCBJIHF1aWNrbHkgZGlzbWlzc2VkIHRoYXQgbGluZSBvZiB0aGlua2luZyBhcyBpbmNvcnJlY3QuXG5cblRoZSBjb25jbHVzaW9uIHRoZW4gYmVjb21lcyBvYnZpb3VzOyBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQsIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUgb3IgYSBkZWNlbnQgZW11bGF0b3IsIEkgY2FuJ3QgcmVhY2ggYGxhbjg2NXhfcHJvYmVgLiBJJ20gZ29pbmcgdG8gbmVlZCB0byBpbnRyb2R1Y2UgYW4gU1BJIGNvbnRyb2xsZXIgaW50byB0aGUgc3lzdGVtLCBzb21ldGhpbmcgU3l6a2FsbGVyIGNhbiByZWNvZ25pemUuIFRoYXQncyB3aGVuIEkgaGFkIHRoZSBpZGVhIG9mIGEgc29mdHdhcmUgU1BJIGNvbnRyb2xsZXIuIE1heWJlIHNvbWV0aGluZyBsaWtlIGBzcGktbW9ja3VwYCBvciBgc3BpLWdwaW9gIGNvdWxkIHdvcmsgaWYgaXQgZXhpc3RzLiBIb3dldmVyLCBpdCBzZWVtcyB0aGVyZSdzIG5vIGBzcGktbW9ja3VwYCBpbiB0aGUga2VybmVsLiBgc3BpLWdwaW9gIGxvb2tzIHByb21pc2luZywgYnV0IEknZCBzdGlsbCBuZWVkIGEgd2F5IHRvIGluc3RhbnRpYXRlIHRoZSBgbGFuODY1eGAgU1BJIGRldmljZSBvbiBpdCwgZ2l2ZW4gdGhlIGxpbWl0ZWQgbmF0dXJlIG9mIFN5emthbGxlcidzIGRldmljZSBpbnN0YW50aWF0aW9uIGFiaWxpdGllcy5cblxuU28sIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBjcmVhdGUgdGhlIGBsYW44NjV4YCBkZXZpY2UgaXRzZWxmLiBJIHdpbGwgaGF2ZSB0byBzdGFydCBieSBjaGVja2luZyBpZiBJIGNhbiBjcmVhdGUgU1BJIGRldmljZXMgdmlhIHN5c2ZzLiBUaGlzIGlzIHdoZXJlIEknbGwgc3RhcnQgZGlnZ2luZyB0byBzZWUgaWYgSSBjYW4gZXZlbiBnZXQgdGhpcyBoYXJkd2FyZSBjb25uZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTc4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6MjU6MjAuNjI0NDg3ODQxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTcxMDg3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXdfZGV2aWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvc3BpL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3NwaS9zcGktYWx0ZXJhLWRmbC5jPTEyND1zdGF0aWMgaW50IGRmbF9zcGlfYWx0ZXJhX3Byb2JlKHN0cnVjdCBkZmxfZGV2aWNlICpkZmxfZGV2KVxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLWFsdGVyYS1kZmwuYy0xNzQtXFxuZHJpdmVycy9zcGkvc3BpLWFsdGVyYS1kZmwuYzoxNzU6XFx0aWYgKCFzcGlfbmV3X2RldmljZShob3N0LCBcXHUwMDI2Ym9hcmRfaW5mbykpIHtcXG5kcml2ZXJzL3NwaS9zcGktYWx0ZXJhLWRmbC5jLTE3Ni1cXHRcXHRkZXZfZXJyKGRldiwgXFxcIiVzIGZhaWxlZCB0byBjcmVhdGUgU1BJIGRldmljZTogJXNcXFxcblxcXCIsXFxuLS1cXG5kcml2ZXJzL3NwaS9zcGktYWx0ZXJhLXBsYXRmb3JtLmM9MzU9c3RhdGljIGludCBhbHRlcmFfc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3NwaS9zcGktYWx0ZXJhLXBsYXRmb3JtLmMtMTE5LVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwZGF0YS1cXHUwMDNlbnVtX2RldmljZXM7IGkrKykge1xcbmRyaXZlcnMvc3BpL3NwaS1hbHRlcmEtcGxhdGZvcm0uYzoxMjA6XFx0XFx0XFx0aWYgKCFzcGlfbmV3X2RldmljZShob3N0LCBwZGF0YS1cXHUwMDNlZGV2aWNlcyArIGkpKVxcbmRyaXZlcnMvc3BpL3NwaS1hbHRlcmEtcGxhdGZvcm0uYy0xMjEtXFx0XFx0XFx0XFx0ZGV2X3dhcm4oXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1idXR0ZXJmbHkuYz0xNzY9c3RhdGljIHZvaWQgYnV0dGVyZmx5X2F0dGFjaChzdHJ1Y3QgcGFycG9ydCAqcClcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1idXR0ZXJmbHkuYy0yNjUtXFx0cHAtXFx1MDAzZWluZm9bMF0uY29udHJvbGxlcl9kYXRhID0gcHA7XFxuZHJpdmVycy9zcGkvc3BpLWJ1dHRlcmZseS5jOjI2NjpcXHRwcC1cXHUwMDNlZGF0YWZsYXNoID0gc3BpX25ld19kZXZpY2UocHAtXFx1MDAzZWJpdGJhbmcuY3RsciwgXFx1MDAyNnBwLVxcdTAwM2VpbmZvWzBdKTtcXG5kcml2ZXJzL3NwaS9zcGktYnV0dGVyZmx5LmMtMjY3LVxcdGlmIChwcC1cXHUwMDNlZGF0YWZsYXNoKVxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLWNoMzQxLmM9MTQxPXN0YXRpYyBpbnQgY2gzNDFfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuLS1cXG5kcml2ZXJzL3NwaS9zcGktY2gzNDEuYy0yMDYtXFxuZHJpdmVycy9zcGkvc3BpLWNoMzQxLmM6MjA3OlxcdGNoMzQxLVxcdTAwM2VzcGlkZXYgPSBzcGlfbmV3X2RldmljZShjdHJsLCBcXHUwMDI2Y2hpcCk7XFxuZHJpdmVycy9zcGkvc3BpLWNoMzQxLmMtMjA4LVxcdGlmICghY2gzNDEtXFx1MDAzZXNwaWRldikge1xcbi0tXFxuZHJpdmVycy9zcGkvc3BpLWNzNDJsNDMuYz0zMTI9c3RhdGljIGludCBjczQybDQzX3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLWNzNDJsNDMuYy00MjYtXFxuZHJpdmVycy9zcGkvc3BpLWNzNDJsNDMuYzo0Mjc6XFx0XFx0aWYgKCFzcGlfbmV3X2RldmljZShwcml2LVxcdTAwM2VjdGxyLCBhbXBsX2luZm8pKVxcbmRyaXZlcnMvc3BpL3NwaS1jczQybDQzLmMtNDI4LVxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHByaXYtXFx1MDAzZWRldiwgLUVOT0RFVixcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1jczQybDQzLmMtNDMwLVxcbmRyaXZlcnMvc3BpL3NwaS1jczQybDQzLmM6NDMxOlxcdFxcdGlmICghc3BpX25ld19kZXZpY2UocHJpdi1cXHUwMDNlY3RsciwgYW1wcl9pbmZvKSlcXG5kcml2ZXJzL3NwaS9zcGktY3M0Mmw0My5jLTQzMi1cXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwcml2LVxcdTAwM2VkZXYsIC1FTk9ERVYsXFxuLS1cXG5kcml2ZXJzL3NwaS9zcGktaW50ZWwuYz0xMzc1PXN0YXRpYyBpbnQgaW50ZWxfc3BpX3BvcHVsYXRlX2NoaXAoc3RydWN0IGludGVsX3NwaSAqaXNwaSlcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jLTE0MDEtXFxuZHJpdmVycy9zcGkvc3BpLWludGVsLmM6MTQwMjpcXHRpZiAoIXNwaV9uZXdfZGV2aWNlKGlzcGktXFx1MDAzZWhvc3QsIFxcdTAwMjZjaGlwKSlcXG5kcml2ZXJzL3NwaS9zcGktaW50ZWwuYy0xNDAzLVxcdFxcdHJldHVybiAtRU5PREVWO1xcbi0tXFxuZHJpdmVycy9zcGkvc3BpLWludGVsLmMtMTQzMC1cXG5kcml2ZXJzL3NwaS9zcGktaW50ZWwuYzoxNDMxOlxcdGlmICghc3BpX25ld19kZXZpY2UoaXNwaS1cXHUwMDNlaG9zdCwgXFx1MDAyNmNoaXApKVxcbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jLTE0MzItXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5kcml2ZXJzL3NwaS9zcGkta3NwaTIuYz0zMTA9c3RhdGljIGludCBrc3BpMl9yZWdpc3Rlcl9kZXZpY2VzKHN0cnVjdCBrc3BpMiAqa3NwaSlcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1rc3BpMi5jLTMxNi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mga3NwaS1cXHUwMDNlYXV4ZGV2LVxcdTAwM2VpbmZvX3NpemU7IGkrKykge1xcbmRyaXZlcnMvc3BpL3NwaS1rc3BpMi5jOjMxNzpcXHRcXHRzdHJ1Y3Qgc3BpX2RldmljZSAqZGV2aWNlID0gc3BpX25ld19kZXZpY2Uoa3NwaS1cXHUwMDNlaG9zdCwgXFx1MDAyNmluZm9baV0pO1xcbmRyaXZlcnMvc3BpL3NwaS1rc3BpMi5jLTMxOC1cXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1sbTcwbGxwLmM9MTg4PXN0YXRpYyB2b2lkIHNwaV9sbTcwbGxwX2F0dGFjaChzdHJ1Y3QgcGFycG9ydCAqcClcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1sbTcwbGxwLmMtMjY2LVxcdHBwLVxcdTAwM2VpbmZvLmNvbnRyb2xsZXJfZGF0YSA9IHBwO1xcbmRyaXZlcnMvc3BpL3NwaS1sbTcwbGxwLmM6MjY3OlxcdHBwLVxcdTAwM2VzcGlkZXZfbG03MCA9IHNwaV9uZXdfZGV2aWNlKHBwLVxcdTAwM2ViaXRiYW5nLmN0bHIsIFxcdTAwMjZwcC1cXHUwMDNlaW5mbyk7XFxuZHJpdmVycy9zcGkvc3BpLWxtNzBsbHAuYy0yNjgtXFx0aWYgKHBwLVxcdTAwM2VzcGlkZXZfbG03MClcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1sbTcwbGxwLmMtMjcxLVxcdGVsc2Uge1xcbmRyaXZlcnMvc3BpL3NwaS1sbTcwbGxwLmM6MjcyOlxcdFxcdGRldl93YXJuKFxcdTAwMjZwZC1cXHUwMDNlZGV2LCBcXFwic3BpX25ld19kZXZpY2UgZmFpbGVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL3NwaS9zcGktbG03MGxscC5jLTI3My1cXHRcXHRzdGF0dXMgPSAtRU5PREVWO1xcbi0tXFxuZHJpdmVycy9zcGkvc3BpLXhpbGlueC5jPTQwMj1zdGF0aWMgaW50IHhpbGlueF9zcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS14aWxpbnguYy01MDktXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBkYXRhLVxcdTAwM2VudW1fZGV2aWNlczsgaSsrKVxcbmRyaXZlcnMvc3BpL3NwaS14aWxpbnguYzo1MTA6XFx0XFx0XFx0c3BpX25ld19kZXZpY2UoaG9zdCwgcGRhdGEtXFx1MDAzZWRldmljZXMgKyBpKTtcXG5kcml2ZXJzL3NwaS9zcGkteGlsaW54LmMtNTExLVxcdH1cXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS5jPTc5MT1FWFBPUlRfU1lNQk9MX0dQTChzcGlfYWRkX2RldmljZSk7XFxuLS1cXG5kcml2ZXJzL3NwaS9zcGkuYy03OTMtLyoqXFxuZHJpdmVycy9zcGkvc3BpLmM6Nzk0OiAqIHNwaV9uZXdfZGV2aWNlIC0gaW5zdGFudGlhdGUgb25lIG5ldyBTUEkgZGV2aWNlXFxuZHJpdmVycy9zcGkvc3BpLmMtNzk1LSAqIEBjdGxyOiBDb250cm9sbGVyIHRvIHdoaWNoIGRldmljZSBpcyBjb25uZWN0ZWRcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS5jLTgwNi0gKi9cXG5kcml2ZXJzL3NwaS9zcGkuYzo4MDc6c3RydWN0IHNwaV9kZXZpY2UgKnNwaV9uZXdfZGV2aWNlKHN0cnVjdCBzcGlfY29udHJvbGxlciAqY3RscixcXG5kcml2ZXJzL3NwaS9zcGkuYy04MDgtXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gKmNoaXApXFxuLS1cXG5kcml2ZXJzL3NwaS9zcGkuYy04NjItfVxcbmRyaXZlcnMvc3BpL3NwaS5jOjg2MzpFWFBPUlRfU1lNQk9MX0dQTChzcGlfbmV3X2RldmljZSk7XFxuZHJpdmVycy9zcGkvc3BpLmMtODY0LVxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLmM9ODkzPXN0YXRpYyB2b2lkIHNwaV9tYXRjaF9jb250cm9sbGVyX3RvX2JvYXJkaW5mbyhzdHJ1Y3Qgc3BpX2NvbnRyb2xsZXIgKmN0bHIsXFxuLS1cXG5kcml2ZXJzL3NwaS9zcGkuYy05MDAtXFxuZHJpdmVycy9zcGkvc3BpLmM6OTAxOlxcdGRldiA9IHNwaV9uZXdfZGV2aWNlKGN0bHIsIGJpKTtcXG5kcml2ZXJzL3NwaS9zcGkuYy05MDItXFx0aWYgKCFkZXYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAzOjI1OjIwLjY3MDIwMjQ5NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDI2OTQ5MTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgbGFuODY1eGAgRHJpdmVyIGFuZCBTeXprYWxsZXIgUmVhY2hhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbGFuODY1eGAgZHJpdmVyIGFuZCB0aGUgc2l0dWF0aW9uIHdpdGggU3l6a2FsbGVyLCBhbmQgaGVyZSdzIHdoYXQgSSd2ZSBnb3QuIFVubGlrZSBJMkMsIFNQSSBkZXZpY2VzIGRvbid0IGhhdmUgYSBjb252ZW5pZW50IHN5c2ZzIGludGVyZmFjZSBmb3IgZHluYW1pYyBjcmVhdGlvbi4gVGhleSdyZSB0eXBpY2FsbHkgYnJvdWdodCB1cCBhdCBib290IHRpbWUgdGhyb3VnaCBib2FyZCBpbmZvcm1hdGlvbiwgZGV2aWNlIHRyZWUgY29uZmlndXJhdGlvbnMsIEFDUEksIG9yIGJ5IGJlaW5nIGV4cGxpY2l0bHkgaGFuZGxlZCBieSBzcGVjaWZpYyBkcml2ZXJzLiBUaGUgYGxhbjg2NXhgIGlzIGFuIFNQSSBkZXZpY2UsIHNvIGl0IGZpdHMgdGhhdCBwYXR0ZXJuLiBUaGF0IG1lYW5zLCB3aXRob3V0IHNvbWUgY3VzdG9tIGhhcmR3YXJlIHNldHVwIG9yIHRoZSB1c2Ugb2YgZGV2aWNlIHRyZWUgKERUKSBvdmVybGF5cywgd2hpY2ggYWxsb3cgZm9yIG1vZGlmaWNhdGlvbnMgdG8gYSBEVCBhdCBydW50aW1lLCB5b3UgY2FuJ3QganVzdCBpbnN0YW50aWF0ZSBpdCBmcm9tIHVzZXJzcGFjZSBpbiBhIHN0YW5kYXJkIGtlcm5lbC5cblxuTm93LCBoZXJlJ3MgdGhlIGtpY2tlcjogU3l6a2FsbGVyLCBpbiBpdHMgUUVNVSBlbnZpcm9ubWVudCwgZG9lc24ndCB1dGlsaXplIERUIG92ZXJsYXlzLCBhcyBmYXIgYXMgSSBrbm93LiBUaGVyZWZvcmUsIHRoZSBgbGFuODY1eF9wcm9iZWAgZnVuY3Rpb24sIHdoaWNoIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgcHJvYmluZyB0aGUgYGxhbjg2NXhgIGRldmljZSwgaXMgaW5oZXJlbnRseSB1bnJlYWNoYWJsZSB3aXRoaW4gYSBTeXprYWxsZXIgdGVzdCBlbnZpcm9ubWVudC4gSXQganVzdCB3b24ndCBnZXQgY2FsbGVkLlxuXG5HaXZlbiB0aGF0IGBvYV90YzYuY2Agc2VlbXMgdG8gYmUgc29sZWx5IGRlZGljYXRlZCB0byBmdW5jdGlvbmFsaXR5IHRpZWQgdG8gdGhlIGBsYW44NjV4YCBkcml2ZXIsIGl0IGZvbGxvd3MgdGhhdCB0aGUgY29kZSB3aXRoaW4gYG9hX3RjNi5jYCBpcyBhbHNvIHVucmVhY2hhYmxlIGJlY2F1c2UgaXRzIHByaW1hcnkgdXNlIGNhc2UgaXMgd2hlbiBgbGFuODY1eGAgaXMgcnVubmluZy5cblxuSSBzaG91bGQgZG91YmxlIGNoZWNrIHRvIHNlZSBpZiBgb2FfdGM2X2luaXRgIGlzIHVzZWQgYW55d2hlcmUgZWxzZSBpbiB0aGUga2VybmVsLCBidXQgYXMgaXQgbG9va3MgbGlrZSBpdHMgZGVkaWNhdGVkIHRvIHRoZSBgbGFuODY1eGAsIG15IGN1cnJlbnQgdGhpbmtpbmcgaXMgdGhhdCwgaWYgYGxhbjg2NXhfcHJvYmVgIGlzbid0IHJlYWNoZWQsIHRoZW4gYG9hX3RjNi5jYCBjYW5ub3QgYmUgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE2MjUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6MjU6MjUuNjk3MTU0NjVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjI3MDk4MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2FfdGM2X2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0PTQ1ND1UaGUgaW5jbHVkZS9saW51eC9vYV90YzYuaCBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdC00NTUtXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0OjQ1NjouLiBjOmZ1bmN0aW9uOjogc3RydWN0IG9hX3RjNiAqb2FfdGM2X2luaXQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgXFxcXFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdC00NTctICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmM9MzMzPXN0YXRpYyBpbnQgbGFuODY1eF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jLTM0OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmM6MzQ5OlxcdHByaXYtXFx1MDAzZXRjNiA9IG9hX3RjNl9pbml0KHNwaSwgbmV0ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmMtMzUwLVxcdGlmICghcHJpdi1cXHUwMDNldGM2KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYz0xMzkzPUVYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl9zdGFydF94bWl0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTEzOTUtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmM6MTM5NjogKiBvYV90YzZfaW5pdCAtIGFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgb2FfdGM2IHN0cnVjdHVyZS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy0xMzk3LSAqIEBzcGk6IGRldmljZSB3aXRoIHdoaWNoIGRhdGEgd2lsbCBiZSBleGNoYW5nZWQuXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy0xNDAyLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jOjE0MDM6c3RydWN0IG9hX3RjNiAqb2FfdGM2X2luaXQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy0xNDA0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTE1MDctfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jOjE1MDg6RVhQT1JUX1NZTUJPTF9HUEwob2FfdGM2X2luaXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTE1MDktXFxuLS1cXG5pbmNsdWRlL2xpbnV4L29hX3RjNi5oPTEzPXN0cnVjdCBvYV90YzY7XFxuaW5jbHVkZS9saW51eC9vYV90YzYuaC0xNC1cXG5pbmNsdWRlL2xpbnV4L29hX3RjNi5oOjE1OnN0cnVjdCBvYV90YzYgKm9hX3RjNl9pbml0KHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xcbmluY2x1ZGUvbGludXgvb2FfdGM2LmgtMTYtdm9pZCBvYV90YzZfZXhpdChzdHJ1Y3Qgb2FfdGM2ICp0YzYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzoyNToyNy4yMTk4Njk5MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODM5ODMzNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZz1GYWxzZTogVW5yZWFjaGFibGUgQ29kZSBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGxvb2tlZCBhdCB0aGlzIHBhdGNoIGFuZCBJJ20gcHJldHR5IGNvbmZpZGVudCBpbiBteSBhc3Nlc3NtZW50LiBUaGUgY29kZSBpcyBleGNsdXNpdmVseSBmb3IgdGhlIGBsYW44NjV4YCBkcml2ZXIsIHdoaWNoLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHNwZWNpZmljIHRvIHRoZSBNaWNyb2NoaXAgTEFOODY1MC8xIE1BQy1QSFkg4oCTIGFuIFNQSSBkZXZpY2UuIFRoZSBrZXkgaGVyZSBpcyB0aGF0IFNQSSBkZXZpY2VzIGNhbid0IGJlIGR5bmFtaWNhbGx5IGluc3RhbnRpYXRlZCBpbiBzeXprYWxsZXIsIGFuZCB0aGVyZSdzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBhdmFpbGFibGUgZm9yIHRoaXMgcGFydGljdWxhciBNQUMtUEhZLlxuXG5JIGJyaWVmbHkgY29uc2lkZXJlZCBpZiBzeXprYWxsZXIgbWlnaHQgYmUgdXNpbmcgYHNwaWRldmAgdG8gc29tZWhvdyBpbmplY3QgZnVuY3Rpb25hbGl0eSwgYnV0IHRoYXQncyBmb3IgKnVzZXJzcGFjZSogYWN0aW5nIGFzIGFuIFNQSSBtYXN0ZXIsIG5vdCBlbXVsYXRpbmcgdGhlIGRldmljZSBpdHNlbGYuIFRoZW4gSSB0aG91Z2h0IGFib3V0IGBtYWM4MDIxMV9od3NpbWAsIHdoaWNoIGVtdWxhdGVzIFdpLUZpLCBidXQgdGhlcmUgaXNuJ3QgYW4gZXF1aXZhbGVudCBmb3IgU1BJIEV0aGVybmV0IE1BQy1QSFlzLiBBbmQgYG5ldGRldnNpbWAgaXMgZGVmaW5pdGVseSBub3QgdXNpbmcgYG9hX3RjNmAuXG5cblRoZXJlZm9yZSwgdGhlIG1vZGlmaWNhdGlvbnMgdGhpcyBwYXRjaCBtYWtlcyBhcmUgaW4gY29kZSB0aGF0IGlzIGZ1bmRhbWVudGFsbHkgdW5yZWFjaGFibGUgd2l0aGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiBJdCdzIHRpZWQgdG8gdmVyeSBzcGVjaWZpYyBTUEkgaGFyZHdhcmUuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIGNoZWNrZWQgdGhlIHByb21wdCBpbnN0cnVjdGlvbnMgYWdhaW4uIFRoZXkgc3BlY2lmaWNhbGx5IHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIGludm9sdmVzIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRpb24uIEl0IGFsc28gY2FsbHMgb3V0IHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSwgd2hpY2ggdGhpcyBkZWZpbml0ZWx5IGlzLiBJdCBhbGwgZml0cyBwZXJmZWN0bHkuXG5cbkkndmUgYWxzbyBkb3VibGUtY2hlY2tlZCBhbGwgdGhlIGV4cG9ydGVkIGZ1bmN0aW9ucyBmcm9tIGBvYV90YzZgLiBUaGV5IGFyZSBvbmx5IHVzZWQgYnkgYGxhbjg2NXhgLiBTbywgdW5sZXNzIHRoZXJlJ3Mgc29tZSBvYnNjdXJlIGluZGlyZWN0IHBhdGggSSdtIG1pc3NpbmcsIHdoaWNoIEknbSBjb25maWRlbnQgdGhlcmUgaXNuJ3QsIHRoaXMgY29kZSBpcyBjb21wbGV0ZWx5IGluYWNjZXNzaWJsZSB0byBvdXIgZnV6emluZyBlZmZvcnRzIGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5MTYsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6MjU6MzUuMDU5NzA2NjA5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzMzMjA1MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9hX3RjNl9zdGFydF94bWl0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdD00ODU9TWF4aW11bSBvZiAxMjggY29uc2VjdXRpdmUgcmVnaXN0ZXJzIGNhbiBiZSByZWFkIHN0YXJ0aW5nIGF0IEBhZGRyZXNzLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdC00ODYtXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0OjQ4NzouLiBjOmZ1bmN0aW9uOjogbmV0ZGV2X3R4X3Qgb2FfdGM2X3N0YXJ0X3htaXQoc3RydWN0IG9hX3RjNiAqdGM2LCBcXFxcXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0LTQ4OC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmM9MjUxPXN0YXRpYyBuZXRkZXZfdHhfdCBsYW44NjV4X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmMtMjU1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYzoyNTY6XFx0cmV0dXJuIG9hX3RjNl9zdGFydF94bWl0KHByaXYtXFx1MDAzZXRjNiwgc2tiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmMtMjU3LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jPTEzNTM9RVhQT1JUX1NZTUJPTF9HUEwob2FfdGM2X3plcm9fYWxpZ25fcmVjZWl2ZV9mcmFtZV9lbmFibGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMtMTM1NS0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYzoxMzU2OiAqIG9hX3RjNl9zdGFydF94bWl0IC0gZnVuY3Rpb24gZm9yIHNlbmRpbmcgdGhlIHR4IHNrYiB3aGljaCBjb25zaXN0cyBldGhlcm5ldFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTEzNTctICogZnJhbWUuXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy0xMzY2LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jOjEzNjc6bmV0ZGV2X3R4X3Qgb2FfdGM2X3N0YXJ0X3htaXQoc3RydWN0IG9hX3RjNiAqdGM2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTEzNjgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMtMTM5Mi19XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmM6MTM5MzpFWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfc3RhcnRfeG1pdCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMtMTM5NC1cXG4tLVxcbmluY2x1ZGUvbGludXgvb2FfdGM2Lmg9MjE9aW50IG9hX3RjNl9yZWFkX3JlZ2lzdGVycyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUzMiBhZGRyZXNzLCB1MzIgdmFsdWVbXSxcXG5pbmNsdWRlL2xpbnV4L29hX3RjNi5oLTIyLVxcdFxcdFxcdCAgdTggbGVuZ3RoKTtcXG5pbmNsdWRlL2xpbnV4L29hX3RjNi5oOjIzOm5ldGRldl90eF90IG9hX3RjNl9zdGFydF94bWl0KHN0cnVjdCBvYV90YzYgKnRjNiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9saW51eC9vYV90YzYuaC0yNC1pbnQgb2FfdGM2X3plcm9fYWxpZ25fcmVjZWl2ZV9mcmFtZV9lbmFibGUoc3RydWN0IG9hX3RjNiAqdGM2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6MjU6MzYuNzkyOTE2MTg4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTEyMzIxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFzc2Vzc21lbnQgb2YgdGhlIGBXb3J0aEZ1enppbmdgIFBhcmFtZXRlcioqXG5cblJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhhdCBgV29ydGhGdXp6aW5nYCBwYXJhbWV0ZXIuIEJhc2VkIG9uIHdoYXQgSSd2ZSBzZWVuLCBpdCdzIHByZXR0eSBjbGVhcjogaXQncyBvbmx5IHJlYWxseSB1c2VkLCBvciByZWxldmFudCwgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGBsYW44NjV4YCBkcml2ZXIuIEdpdmVuIHRoYXQgbGltaXRlZCBzY29wZSwgSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgLiBObyBzZW5zZSBpbiBleHBlbmRpbmcgcmVzb3VyY2VzIGZ1enppbmcgc29tZXRoaW5nIHRoYXQgaXNuJ3QgcmVhbGx5IHJlbGV2YW50IG91dHNpZGUgdGhhdCBzcGVjaWZpYyBtb2R1bGUuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIGFuZCBlZmZpY2llbnQgYXBwcm9hY2ggaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2MTIsIk91dHB1dFRva2VucyI6MTA5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6MjU6NDAuMzQ0MTUyNDc2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9QRU4gQWxsaWFuY2UgMTBCQVNFLVQxeCBNQUMtUEhZIFNlcmlhbCBJbnRlcmZhY2UgKG9hX3RjNikgZnJhbWV3b3JrLCB3aGljaCBpcyBjdXJyZW50bHkgb25seSB1c2VkIGJ5IHRoZSBNaWNyb2NoaXAgTEFOODY1eCBTUEkgZHJpdmVyLiBTaW5jZSBTUEkgZGV2aWNlcyByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBjYW5ub3QgYmUgZHluYW1pY2FsbHkgaW5zdGFudGlhdGVkIG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9QRU4gQWxsaWFuY2UgMTBCQVNFLVQxeCBNQUMtUEhZIFNlcmlhbCBJbnRlcmZhY2UgKG9hX3RjNikgZnJhbWV3b3JrLCB3aGljaCBpcyBjdXJyZW50bHkgb25seSB1c2VkIGJ5IHRoZSBNaWNyb2NoaXAgTEFOODY1eCBTUEkgZHJpdmVyLiBTaW5jZSBTUEkgZGV2aWNlcyByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBjYW5ub3QgYmUgZHluYW1pY2FsbHkgaW5zdGFudGlhdGVkIG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6MjU6NDAuMzQ0MTk5NzY2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5wrvt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 03:08:15 +0000 UTC FinishedAt: 2026-08-13 03:25:41 +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+CgkJCTx0ZD4yMDI2LzA4LzEzIDAzOjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9QRU4gQWxsaWFuY2UgMTBCQVNFLVQxeCBNQUMtUEhZIFNlcmlhbCBJbnRlcmZhY2UgKG9hX3RjNikgZnJhbWV3b3JrLCB3aGljaCBpcyBjdXJyZW50bHkgb25seSB1c2VkIGJ5IHRoZSBNaWNyb2NoaXAgTEFOODY1eCBTUEkgZHJpdmVyLiBTaW5jZSBTUEkgZGV2aWNlcyByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBjYW5ub3QgYmUgZHluYW1pY2FsbHkgaW5zdGFudGlhdGVkIG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMzoyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZiMTJjN2Q4MjhkYWU4YWVkMTg1NDJlZGNlMjM5NjUyYjFkOTM3NGNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwMzoyNDozNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jXG5pbmRleCAwNzI3ZDUzMzQ1YTMzLi42ZTI3ZWQzOWE5OWJkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jXG5AQCAtMTI3LDcgJiM0MzsxMjcsNyBAQCBzdHJ1Y3Qgb2FfdGM2IHtcbiBcdHUxNiBzcGlfZGF0YV90eF9idWZfb2Zmc2V0O1xuIFx0dTE2IHR4X2NyZWRpdHM7XG4gXHR1OCByeF9jaHVua3NfYXZhaWxhYmxlO1xuLVx0Ym9vbCByeF9idWZfb3ZlcmZsb3c7XG4mIzQzO1x0Ym9vbCB3YWl0X3VudGlsX3N0YXJ0X3ZhbGlkO1xuIFx0Ym9vbCBpbnRfZmxhZztcbiBcdGJvb2wgZGlzYWJsZV90cmFmZmljO1xuIH07XG5AQCAtNDIzLDcgJiM0Mzs0MjMsNyBAQCBzdGF0aWMgaW50IG9hX3RjNl9tZGlvYnVzX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWdudW0pXG4ge1xuIFx0c3RydWN0IG9hX3RjNiAqdGM2ID0gYnVzLVx1MDAzZXByaXY7XG4gXHR1MzIgcmVndmFsO1xuLVx0Ym9vbCByZXQ7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdHJldCA9IG9hX3RjNl9yZWFkX3JlZ2lzdGVyKHRjNiwgT0FfVEM2X1BIWV9TVERfUkVHX0FERFJfQkFTRSB8XG4gXHRcdFx0XHQgICAocmVnbnVtIFx1MDAyNiBPQV9UQzZfUEhZX1NURF9SRUdfQUREUl9NQVNLKSxcbkBAIC02NTIsNiAmIzQzOzY1MiwyNiBAQCBzdGF0aWMgaW50IG9hX3RjNl9lbmFibGVfZGF0YV90cmFuc2ZlcihzdHJ1Y3Qgb2FfdGM2ICp0YzYpXG4gXHRyZXR1cm4gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHRjNiwgT0FfVEM2X1JFR19DT05GSUcwLCB2YWx1ZSk7XG4gfVxuIFxuJiM0MzsvKiBDYWxsZWQgd2hlbiBhIGZyYW1lIHRoYXQgaXMgbWVhbnQgdG8gYmUgdHJhbnNtaXR0ZWQsIGlzIGRyb3BwZWQuICovXG4mIzQzO3N0YXRpYyB2b2lkIG9hX3RjNl9kcm9wX3R4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRpZiAoc2tiKSB7XG4mIzQzO1x0XHR0YzYtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuJiM0MztcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqb2FfdGM2X2RldGFjaF93YWl0aW5nX3R4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnRjNi1cdTAwM2V0eF9za2JfbG9jayk7XG4mIzQzO1x0c2tiID0gdGM2LVx1MDAzZXdhaXRpbmdfdHhfc2tiO1xuJiM0MztcdHRjNi1cdTAwM2V3YWl0aW5nX3R4X3NrYiA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdHJldHVybiBza2I7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgb2FfdGM2X2NsZWFudXBfb25nb2luZ19yeF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2KVxuIHtcbiBcdGlmICh0YzYtXHUwMDNlcnhfc2tiKSB7XG5AQCAtNjYzLDI5ICYjNDM7NjgzLDM5IEBAIHN0YXRpYyB2b2lkIG9hX3RjNl9jbGVhbnVwX29uZ29pbmdfcnhfc2tiKHN0cnVjdCBvYV90YzYgKnRjNilcbiBcbiBzdGF0aWMgdm9pZCBvYV90YzZfY2xlYW51cF9vbmdvaW5nX3R4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYpXG4ge1xuLVx0aWYgKHRjNi1cdTAwM2VvbmdvaW5nX3R4X3NrYikge1xuLVx0XHR0YzYtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuLVx0XHRrZnJlZV9za2IodGM2LVx1MDAzZW9uZ29pbmdfdHhfc2tiKTtcbi1cdFx0dGM2LVx1MDAzZW9uZ29pbmdfdHhfc2tiID0gTlVMTDtcbi1cdH1cbiYjNDM7XHRvYV90YzZfZHJvcF90eF9za2IodGM2LCB0YzYtXHUwMDNlb25nb2luZ190eF9za2IpO1xuJiM0MztcdHRjNi1cdTAwM2VvbmdvaW5nX3R4X3NrYiA9IE5VTEw7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG9hX3RjNl9jbGVhbnVwX3dhaXRpbmdfdHhfc2tiKHN0cnVjdCBvYV90YzYgKnRjNilcbiB7XG4tXHRpZiAodGM2LVx1MDAzZXdhaXRpbmdfdHhfc2tiKSB7XG4tXHRcdHRjNi1cdTAwM2VuZXRkZXYtXHUwMDNlc3RhdHMudHhfZHJvcHBlZCYjNDM7JiM0Mzs7XG4tXHRcdGtmcmVlX3NrYih0YzYtXHUwMDNld2FpdGluZ190eF9za2IpO1xuLVx0XHR0YzYtXHUwMDNld2FpdGluZ190eF9za2IgPSBOVUxMO1xuLVx0fVxuJiM0MztcdHN0cnVjdCBza19idWZmICpza2I7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZ0YzYtXHUwMDNldHhfc2tiX2xvY2spO1xuJiM0MztcdHNrYiA9IG9hX3RjNl9kZXRhY2hfd2FpdGluZ190eF9za2IodGM2KTtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZ0YzYtXHUwMDNldHhfc2tiX2xvY2spO1xuJiM0MztcbiYjNDM7XHRvYV90YzZfZHJvcF90eF9za2IodGM2LCBza2IpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBvYV90YzZfZnJlZV9wZW5kaW5nX3NrYnMoc3RydWN0IG9hX3RjNiAqdGM2KVxuJiM0MztzdGF0aWMgdm9pZCBvYV90YzZfZnJlZV9vbmdvaW5nX3NrYnMoc3RydWN0IG9hX3RjNiAqdGM2KVxuIHtcbiBcdG9hX3RjNl9jbGVhbnVwX29uZ29pbmdfdHhfc2tiKHRjNik7XG4gXHRvYV90YzZfY2xlYW51cF9vbmdvaW5nX3J4X3NrYih0YzYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBvYV90YzZfZnJlZV9wZW5kaW5nX3NrYnMoc3RydWN0IG9hX3RjNiAqdGM2KVxuJiM0Mzt7XG4mIzQzO1x0b2FfdGM2X2ZyZWVfb25nb2luZ19za2JzKHRjNik7XG4gXHRvYV90YzZfY2xlYW51cF93YWl0aW5nX3R4X3NrYih0YzYpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgb2FfdGM2X2xvb2tfZm9yX25ld19mcmFtZShzdHJ1Y3Qgb2FfdGM2ICp0YzYpXG4mIzQzO3tcbiYjNDM7XHR0YzYtXHUwMDNld2FpdF91bnRpbF9zdGFydF92YWxpZCA9IHRydWU7XG4mIzQzO1x0b2FfdGM2X2NsZWFudXBfb25nb2luZ19yeF9za2IodGM2KTtcbiYjNDM7fVxuJiM0MztcbiAvKiBJZiB0aGUgZmFpbHVyZSBpcyBhdCBTUEkgaW50ZXJmYWNlIGxldmVsLCBtYXNraW5nIGFuZCBjbGVhcmluZ1xuICAqIHRoZSBpbnRlcnJ1cHQgb2YgdGhlIGRldmljZSB3b24mIzM5O3Qgd29yay4gU2luY2UgU1BJIGludGVycnVwdCBpc1xuICAqIGRpc2FibGVkLCBpdCBzaG91bGQgc3RvcCB0aGUgcmVwZWF0ZWQgaW50ZXJydXB0cy5cbkBAIC02OTMsOSAmIzQzOzcyMywyMSBAQCBzdGF0aWMgdm9pZCBvYV90YzZfZnJlZV9wZW5kaW5nX3NrYnMoc3RydWN0IG9hX3RjNiAqdGM2KVxuIHN0YXRpYyB2b2lkIG9hX3RjNl9kaXNhYmxlX3RyYWZmaWMoc3RydWN0IG9hX3RjNiAqdGM2KVxuIHtcbiBcdHUzMiByZWd2YWwgPSBJTlRfTUFTSzBfQUxMX0lOVEVSUlVQVFM7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2dGM2LVx1MDAzZXR4X3NrYl9sb2NrKTtcbiBcdHRjNi1cdTAwM2VkaXNhYmxlX3RyYWZmaWMgPSB0cnVlO1xuLVx0b2FfdGM2X2ZyZWVfcGVuZGluZ19za2JzKHRjNik7XG4mIzQzO1x0c2tiID0gb2FfdGM2X2RldGFjaF93YWl0aW5nX3R4X3NrYih0YzYpO1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRjNi1cdTAwM2V0eF9za2JfbG9jayk7XG4mIzQzO1xuJiM0MztcdC8qIGRpc2FibGVfdHJhZmZpYywgd2hlbiBzZXQsIGlzIGEgcG9pbnQgb2Ygbm8gcmV0dXJuIHRvIHdvcmtpbmdcbiYjNDM7XHQgKiBzdGF0ZS4gVFggcXVldWVzIGFyZSBkaXNhYmxlZC4gSW4gc29tZSBjYXNlcywgdXBwZXIgbGF5ZXIgb3JcbiYjNDM7XHQgKiB2ZW5kb3IgY29kZSBtYXkgaW5hZHZlcnRlbnRseSBlbmFibGUgdGhlIHF1ZXVlLiBJbnRlbnRpb24gb2ZcbiYjNDM7XHQgKiB0aGUgZGlzYWJsZV90cmFmZmljIGZsYWcgaXMgdG8gc3RvcCB0cmFmZmljIGZyb20gZmxvd2luZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRuZXRpZl90eF9kaXNhYmxlKHRjNi1cdTAwM2VuZXRkZXYpO1xuJiM0MztcdG9hX3RjNl9kcm9wX3R4X3NrYih0YzYsIHNrYik7XG4mIzQzO1x0b2FfdGM2X2ZyZWVfb25nb2luZ19za2JzKHRjNik7XG4gXHRvYV90YzZfd3JpdGVfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUkVHX0lOVF9NQVNLMCwgcmVndmFsKTtcbiBcdG9hX3RjNl9yZWFkX3JlZ2lzdGVyKHRjNiwgT0FfVEM2X1JFR19TVEFUVVMwLCBcdTAwMjZyZWd2YWwpO1xuIFx0b2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHRjNiwgT0FfVEM2X1JFR19TVEFUVVMwLCByZWd2YWwpO1xuQEAgLTcxNCw2ICYjNDM7NzU2LDEzIEBAIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3NfZXh0ZW5kZWRfc3RhdHVzKHN0cnVjdCBvYV90YzYgKnRjNilcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbiYjNDM7XHQvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgZWFjaCBjaHVuayByZWNlaXZlZCBpbiBhIGdpdmVuIFNQSVxuJiM0MztcdCAqIHRyYW5zYWN0aW9uLiBJbiBjYXNlLCBleHRlbmRlZCBzdGF0dXMgYml0IGlzIHNldCBpbiBtb3JlIHRoYW5cbiYjNDM7XHQgKiBvbmUgY2h1bmssIHNraXAgdGhlIHdyaXRlLCBpZiBzdGF0dXMwIGlzIGFscmVhZHkgY2xlYXJlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXZhbHVlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuIFx0LyogQ2xlYXIgdGhlIGVycm9yIGludGVycnVwdHMgc3RhdHVzICovXG4gXHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUkVHX1NUQVRVUzAsIHZhbHVlKTtcbiBcdGlmIChyZXQpIHtcbkBAIC03MjMsOCAmIzQzOzc3Miw3IEBAIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3NfZXh0ZW5kZWRfc3RhdHVzKHN0cnVjdCBvYV90YzYgKnRjNilcbiBcdH1cbiBcbiBcdGlmIChGSUVMRF9HRVQoU1RBVFVTMF9SWF9CVUZGRVJfT1ZFUkZMT1dfRVJST1IsIHZhbHVlKSkge1xuLVx0XHR0YzYtXHUwMDNlcnhfYnVmX292ZXJmbG93ID0gdHJ1ZTtcbi1cdFx0b2FfdGM2X2NsZWFudXBfb25nb2luZ19yeF9za2IodGM2KTtcbiYjNDM7XHRcdG9hX3RjNl9sb29rX2Zvcl9uZXdfZnJhbWUodGM2KTtcbiBcdFx0bmV0X2Vycl9yYXRlbGltaXRlZChcJiMzNDslczogUmVjZWl2ZSBidWZmZXIgb3ZlcmZsb3cgZXJyb3JcXG5cJiMzNDssXG4gXHRcdFx0XHQgICAgdGM2LVx1MDAzZW5ldGRldi1cdTAwM2VuYW1lKTtcbiBcdFx0cmV0dXJuIC1FQUdBSU47XG5AQCAtNzUwLDYgJiM0Mzs3OTgsOCBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcm9jZXNzX2V4dGVuZGVkX3N0YXR1cyhzdHJ1Y3Qgb2FfdGM2ICp0YzYpXG4gXG4gc3RhdGljIGludCBvYV90YzZfcHJvY2Vzc19yeF9jaHVua19mb290ZXIoc3RydWN0IG9hX3RjNiAqdGM2LCB1MzIgZm9vdGVyKVxuIHtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4gXHQvKiBQcm9jZXNzIHJ4IGNodW5rIGZvb3RlciBmb3IgdGhlIGZvbGxvd2luZyxcbiBcdCAqIDEuIHR4IGNyZWRpdHNcbiBcdCAqIDIuIGVycm9ycyBpZiBhbnkgZnJvbSBNQUMtUEhZXG5AQCAtNzYwLDkgJiM0Mzs4MTAsMTEgQEAgc3RhdGljIGludCBvYV90YzZfcHJvY2Vzc19yeF9jaHVua19mb290ZXIoc3RydWN0IG9hX3RjNiAqdGM2LCB1MzIgZm9vdGVyKVxuIFx0XHRcdFx0XHQgICAgIGZvb3Rlcik7XG4gXG4gXHRpZiAoRklFTERfR0VUKE9BX1RDNl9EQVRBX0ZPT1RFUl9FWFRFTkRFRF9TVFMsIGZvb3RlcikpIHtcbi1cdFx0aW50IHJldCA9IG9hX3RjNl9wcm9jZXNzX2V4dGVuZGVkX3N0YXR1cyh0YzYpO1xuLVxuLVx0XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0ID0gb2FfdGM2X3Byb2Nlc3NfZXh0ZW5kZWRfc3RhdHVzKHRjNik7XG4mIzQzO1x0XHQvKiBFQUdBSU4gZXJyb3IgaXMgcmVjb3ZlcmFibGUuIE1vdmUgb24gdG8gY2hlY2tcbiYjNDM7XHRcdCAqIEhFQURFUiBhbmQgU1lOQyBlcnJvcnMgYmVmb3JlIHJldHVybmluZy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FQUdBSU4pXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbkBAIC03ODAsNyAmIzQzOzgzMiw3IEBAIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3NfcnhfY2h1bmtfZm9vdGVyKHN0cnVjdCBvYV90YzYgKnRjNiwgdTMyIGZvb3RlcilcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHR9XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBvYV90YzZfc3VibWl0X3J4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYpXG5AQCAtODA1LDEzICYjNDM7ODU3LDM1IEBAIHN0YXRpYyB2b2lkIG9hX3RjNl9zdWJtaXRfcnhfc2tiKHN0cnVjdCBvYV90YzYgKnRjNilcbiBcdHRjNi1cdTAwM2VyeF9za2IgPSBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBvYV90YzZfdXBkYXRlX3J4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpwYXlsb2FkLCB1OCBsZW5ndGgpXG4mIzQzOy8qIE9uIG92ZXJzdWJzY3JpYmVkIHRyYWZmaWMgY29uZGl0aW9uLCBwYXJ0aWN1bGFybHkgd2l0aCBvdmVyd2hlbG1pbmcgcnhcbiYjNDM7ICogYnVmZmVyIG92ZXJmbG93IGVycm9ycywgdGhlcmUgY291bGQgYmUgZGF0YSBjaHVuayBsb3NzLiBJZiB0YWlsICYjNDM7IGxlbmd0aFxuJiM0MzsgKiBnb2VzIGJleW9uZCBlbmQgcG9pbnRlciwgdGhhdCBpcyBhbiBpbmRpY2F0aW9uIHRoYXQgdGhlIGRhdGEgY2h1bmsgd2l0aFxuJiM0MzsgKiBlbmRfdmFsaWQgYml0IGlzIGxvc3QuIFRpbWUgdG8gbG9vayBmb3IgYSBkYXRhIGNodW5rIHdpdGggc3RhcnRfdmFsaWQgYml0LlxuJiM0MzsgKlxuJiM0MzsgKiBJZiByeF9za2IgaXMgTlVMTCwgaXQgaXMgdGltZSB0byBzdGFydCBsb29raW5nIGZvciBkYXRhIGNodW5rIHdpdGhcbiYjNDM7ICogc3RhcnRfYml0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBvYV90YzZfdXBkYXRlX3J4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpwYXlsb2FkLCB1OCBsZW5ndGgpXG4ge1xuJiM0MztcdGlmICghdGM2LVx1MDAzZXJ4X3NrYiB8fFxuJiM0MztcdCAgICBza2JfdGFpbHJvb20odGM2LVx1MDAzZXJ4X3NrYikgXHUwMDNjIGxlbmd0aCkge1xuJiM0MztcdFx0b2FfdGM2X2xvb2tfZm9yX25ld19mcmFtZSh0YzYpO1xuJiM0MztcdFx0cmV0dXJuIC1FQUdBSU47XG4mIzQzO1x0fVxuJiM0MztcbiBcdG1lbWNweShza2JfcHV0KHRjNi1cdTAwM2VyeF9za2IsIGxlbmd0aCksIHBheWxvYWQsIGxlbmd0aCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKiBPbiBvdmVyd2hlbG1pbmcgcnggYnVmZmVyIG92ZXJmbG93IGVycm9ycywgZHVlIHRvIGRhdGEgY2h1bmsgbG9zcywgaXQgaXNcbiYjNDM7ICogcG9zc2libGUgdGhhdCB3ZSBnZXQgdHdvIGRhdGEgY2h1bmtzIHdpdGggc3RhcnRfdmFsaWQgYml0IHNldCwgd2l0aG91dFxuJiM0MzsgKiBlbmRfdmFsaWQgYml0IHNldCBpbiBiZXR3ZWVuLiBJbiB0aGlzIGNhc2UsIHJ4X3NrYiB3b3VsZCBoYXZlIGEgdmFsaWRcbiYjNDM7ICogYnVmZmVyIHBvaW50ZXIuIFdlIHNob3VsZCByZWxlYXNlLCBpZiBhIHZhbGlkIHBvaW50ZXIgaXMgZm91bmQgYmVmb3JlXG4mIzQzOyAqIGFsbG9jYXRpbmcgYSBuZXcgb25lLlxuJiM0MzsgKi9cbiBzdGF0aWMgaW50IG9hX3RjNl9hbGxvY2F0ZV9yeF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2KVxuIHtcbiYjNDM7XHRvYV90YzZfY2xlYW51cF9vbmdvaW5nX3J4X3NrYih0YzYpO1xuIFx0dGM2LVx1MDAzZXJ4X3NrYiA9IG5ldGRldl9hbGxvY19za2JfaXBfYWxpZ24odGM2LVx1MDAzZW5ldGRldiwgdGM2LVx1MDAzZW5ldGRldi1cdTAwM2VtdHUgJiM0MztcbiBcdFx0XHRcdFx0XHRFVEhfSExFTiAmIzQzOyBFVEhfRkNTX0xFTik7XG4gXHRpZiAoIXRjNi1cdTAwM2VyeF9za2IpIHtcbkBAIC04MzEsNyAmIzQzOzkwNSw5IEBAIHN0YXRpYyBpbnQgb2FfdGM2X3ByY3NfY29tcGxldGVfcnhfZnJhbWUoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqcGF5bG9hZCxcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRvYV90YzZfdXBkYXRlX3J4X3NrYih0YzYsIHBheWxvYWQsIHNpemUpO1xuJiM0MztcdHJldCA9IG9hX3RjNl91cGRhdGVfcnhfc2tiKHRjNiwgcGF5bG9hZCwgc2l6ZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXG4gXHRvYV90YzZfc3VibWl0X3J4X3NrYih0YzYpO1xuIFxuQEAgLTg0NiwyMiAmIzQzOzkyMiwyNCBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcmNzX3J4X2ZyYW1lX3N0YXJ0KHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKnBheWxvYWQsIHUxNiBzaXplKVxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdG9hX3RjNl91cGRhdGVfcnhfc2tiKHRjNiwgcGF5bG9hZCwgc2l6ZSk7XG4tXG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gb2FfdGM2X3VwZGF0ZV9yeF9za2IodGM2LCBwYXlsb2FkLCBzaXplKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgb2FfdGM2X3ByY3NfcnhfZnJhbWVfZW5kKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKnBheWxvYWQsIHUxNiBzaXplKVxuJiM0MztzdGF0aWMgaW50IG9hX3RjNl9wcmNzX3J4X2ZyYW1lX2VuZChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpwYXlsb2FkLCB1MTYgc2l6ZSlcbiB7XG4tXHRvYV90YzZfdXBkYXRlX3J4X3NrYih0YzYsIHBheWxvYWQsIHNpemUpO1xuJiM0MztcdGludCByZXQ7XG4gXG4tXHRvYV90YzZfc3VibWl0X3J4X3NrYih0YzYpO1xuJiM0MztcdHJldCA9IG9hX3RjNl91cGRhdGVfcnhfc2tiKHRjNiwgcGF5bG9hZCwgc2l6ZSk7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHRvYV90YzZfc3VibWl0X3J4X3NrYih0YzYpO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG9hX3RjNl9wcmNzX29uZ29pbmdfcnhfZnJhbWUoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqcGF5bG9hZCxcbi1cdFx0XHRcdFx0IHUzMiBmb290ZXIpXG4mIzQzO3N0YXRpYyBpbnQgb2FfdGM2X3ByY3Nfb25nb2luZ19yeF9mcmFtZShzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpwYXlsb2FkLFxuJiM0MztcdFx0XHRcdFx0dTMyIGZvb3RlcilcbiB7XG4tXHRvYV90YzZfdXBkYXRlX3J4X3NrYih0YzYsIHBheWxvYWQsIE9BX1RDNl9DSFVOS19QQVlMT0FEX1NJWkUpO1xuJiM0MztcdHJldHVybiBvYV90YzZfdXBkYXRlX3J4X3NrYih0YzYsIHBheWxvYWQsXG4mIzQzO1x0XHRcdFx0ICAgIE9BX1RDNl9DSFVOS19QQVlMT0FEX1NJWkUpO1xuIH1cbiBcbiBzdGF0aWMgaW50IG9hX3RjNl9wcmNzX3J4X2NodW5rX3BheWxvYWQoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqZGF0YSxcbkBAIC04NzYsMTAgJiM0Mzs5NTQsMTAgQEAgc3RhdGljIGludCBvYV90YzZfcHJjc19yeF9jaHVua19wYXlsb2FkKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKmRhdGEsXG4gXHR1MTYgc2l6ZTtcbiBcbiBcdC8qIFJlc3RhcnQgdGhlIG5ldyByeCBmcmFtZSBhZnRlciByZWNlaXZpbmcgcnggYnVmZmVyIG92ZXJmbG93IGVycm9yICovXG4tXHRpZiAoc3RhcnRfdmFsaWQgXHUwMDI2XHUwMDI2IHRjNi1cdTAwM2VyeF9idWZfb3ZlcmZsb3cpXG4tXHRcdHRjNi1cdTAwM2VyeF9idWZfb3ZlcmZsb3cgPSBmYWxzZTtcbiYjNDM7XHRpZiAoc3RhcnRfdmFsaWQgXHUwMDI2XHUwMDI2IHRjNi1cdTAwM2V3YWl0X3VudGlsX3N0YXJ0X3ZhbGlkKVxuJiM0MztcdFx0dGM2LVx1MDAzZXdhaXRfdW50aWxfc3RhcnRfdmFsaWQgPSBmYWxzZTtcbiBcbi1cdGlmICh0YzYtXHUwMDNlcnhfYnVmX292ZXJmbG93KVxuJiM0MztcdGlmICh0YzYtXHUwMDNld2FpdF91bnRpbF9zdGFydF92YWxpZClcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHQvKiBQcm9jZXNzIHRoZSBjaHVuayB3aXRoIGNvbXBsZXRlIHJ4IGZyYW1lICovXG5AQCAtOTAxLDggJiM0Mzs5NzksNyBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcmNzX3J4X2NodW5rX3BheWxvYWQoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqZGF0YSxcbiBcdC8qIFByb2Nlc3MgdGhlIGNodW5rIHdpdGggb25seSByeCBmcmFtZSBlbmQgKi9cbiBcdGlmIChlbmRfdmFsaWQgXHUwMDI2XHUwMDI2ICFzdGFydF92YWxpZCkge1xuIFx0XHRzaXplID0gZW5kX2J5dGVfb2Zmc2V0ICYjNDM7IDE7XG4tXHRcdG9hX3RjNl9wcmNzX3J4X2ZyYW1lX2VuZCh0YzYsIGRhdGEsIHNpemUpO1xuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdHJldHVybiBvYV90YzZfcHJjc19yeF9mcmFtZV9lbmQodGM2LCBkYXRhLCBzaXplKTtcbiBcdH1cbiBcbiBcdC8qIFByb2Nlc3MgdGhlIGNodW5rIHdpdGggcHJldmlvdXMgcnggZnJhbWUgZW5kIGFuZCBuZXh0IHJ4IGZyYW1lXG5AQCAtOTE2LDYgJiM0Mzs5OTMsMTUgQEAgc3RhdGljIGludCBvYV90YzZfcHJjc19yeF9jaHVua19wYXlsb2FkKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKmRhdGEsXG4gXHRcdGlmICh0YzYtXHUwMDNlcnhfc2tiKSB7XG4gXHRcdFx0c2l6ZSA9IGVuZF9ieXRlX29mZnNldCAmIzQzOyAxO1xuIFx0XHRcdG9hX3RjNl9wcmNzX3J4X2ZyYW1lX2VuZCh0YzYsIGRhdGEsIHNpemUpO1xuJiM0MztcbiYjNDM7XHRcdFx0LyogUmV0dXJuIHZhbHVlIGZyb20gb2FfdGM2X3ByY3NfcnhfZnJhbWVfZW5kIGlzIG5vdFxuJiM0MztcdFx0XHQgKiBjaGVja2VkLiBJZiBpdCByZXR1cm5lZCBhbiBlcnJvciwgaXQgaXMgdG8gbWFrZVxuJiM0MztcdFx0XHQgKiB0aGUgY29kZSB0byBsb29rIGZvciBuZXcgZnJhbWUuIEF0IHRoaXMgc3RhZ2UsXG4mIzQzO1x0XHRcdCAqIGNvZGUgYmVsb3cgaXMgZ29pbmcgdG8gcHJvY2VzcyBhIG5ldyBmcmFtZS4gU28sXG4mIzQzO1x0XHRcdCAqIGVycm9yIGNvbmRpdGlvbiBpcyBzZXQgdG8gZmFsc2UsIGluIGNhc2UgaXQgaXNcbiYjNDM7XHRcdFx0ICogc2V0IGJlZm9yZSBwcm9jZWVkaW5nLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0dGM2LVx1MDAzZXdhaXRfdW50aWxfc3RhcnRfdmFsaWQgPSBmYWxzZTtcbiBcdFx0fVxuIFx0XHRzaXplID0gT0FfVEM2X0NIVU5LX1BBWUxPQURfU0laRSAtIHN0YXJ0X2J5dGVfb2Zmc2V0O1xuIFx0XHRyZXR1cm4gb2FfdGM2X3ByY3NfcnhfZnJhbWVfc3RhcnQodGM2LFxuQEAgLTkyNCw5ICYjNDM7MTAxMCw3IEBAIHN0YXRpYyBpbnQgb2FfdGM2X3ByY3NfcnhfY2h1bmtfcGF5bG9hZChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpkYXRhLFxuIFx0fVxuIFxuIFx0LyogUHJvY2VzcyB0aGUgY2h1bmsgd2l0aCBvbmdvaW5nIHJ4IGZyYW1lIGRhdGEgKi9cbi1cdG9hX3RjNl9wcmNzX29uZ29pbmdfcnhfZnJhbWUodGM2LCBkYXRhLCBmb290ZXIpO1xuLVxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIG9hX3RjNl9wcmNzX29uZ29pbmdfcnhfZnJhbWUodGM2LCBkYXRhLCBmb290ZXIpO1xuIH1cbiBcbiBzdGF0aWMgdTMyIG9hX3RjNl9nZXRfcnhfY2h1bmtfZm9vdGVyKHN0cnVjdCBvYV90YzYgKnRjNiwgdTE2IGZvb3Rlcl9vZmZzZXQpXG5AQCAtOTQyLDggJiM0MzsxMDI2LDkgQEAgc3RhdGljIHUzMiBvYV90YzZfZ2V0X3J4X2NodW5rX2Zvb3RlcihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUxNiBmb290ZXJfb2Zmc2V0KVxuIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3Nfc3BpX2RhdGFfcnhfYnVmKHN0cnVjdCBvYV90YzYgKnRjNiwgdTE2IGxlbmd0aClcbiB7XG4gXHR1MTYgbm9fb2ZfcnhfY2h1bmtzID0gbGVuZ3RoIC8gT0FfVEM2X0NIVU5LX1NJWkU7XG4mIzQzO1x0Ym9vbCByZXRyeSA9IGZhbHNlO1xuJiM0MztcdGludCByZXQgPSAwO1xuIFx0dTMyIGZvb3Rlcjtcbi1cdGludCByZXQ7XG4gXG4gXHQvKiBBbGwgdGhlIHJ4IGNodW5rcyBpbiB0aGUgcmVjZWl2ZSBTUEkgZGF0YSBidWZmZXIgYXJlIGV4YW1pbmVkIGhlcmUgKi9cbiBcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBub19vZl9yeF9jaHVua3M7IGkmIzQzOyYjNDM7KSB7XG5AQCAtOTUyLDggJiM0MzsxMDM3LDExIEBAIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3Nfc3BpX2RhdGFfcnhfYnVmKHN0cnVjdCBvYV90YzYgKnRjNiwgdTE2IGxlbmd0aClcbiBcdFx0XHRcdFx0XHQgICAgT0FfVEM2X0NIVU5LX1BBWUxPQURfU0laRSk7XG4gXG4gXHRcdHJldCA9IG9hX3RjNl9wcm9jZXNzX3J4X2NodW5rX2Zvb3Rlcih0YzYsIGZvb3Rlcik7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0aWYgKHJldCAhPSAtRUFHQUlOKVxuJiM0MztcdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRcdHJldHJ5ID0gdHJ1ZTtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0LyogSWYgdGhlcmUgaXMgYSBkYXRhIHZhbGlkIGNodW5rcyB0aGVuIHByb2Nlc3MgaXQgZm9yIHRoZVxuIFx0XHQgKiBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gZGV0ZXJtaW5lIHRoZSB2YWxpZGl0eSBhbmQgdGhlIGxvY2F0aW9uXG5AQCAtOTY1LDEyICYjNDM7MTA1MywzNSBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcm9jZXNzX3NwaV9kYXRhX3J4X2J1ZihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUxNiBsZW5ndGgpXG4gXG4gXHRcdFx0cmV0ID0gb2FfdGM2X3ByY3NfcnhfY2h1bmtfcGF5bG9hZCh0YzYsIHBheWxvYWQsXG4gXHRcdFx0XHRcdFx0XHQgICBmb290ZXIpO1xuLVx0XHRcdGlmIChyZXQpXG4tXHRcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdFx0aWYgKHJldCAhPSAtRU5PTUVNIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVBR0FJTilcbiYjNDM7XHRcdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRcdFx0cmV0cnkgPSB0cnVlO1xuJiM0MztcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbiBcbi1cdHJldHVybiAwO1xuJiM0MztcdC8qIE5vdCBiYWlsaW5nIG91dCBvbiByZWNvdmVyYWJsZSBlcnJvciBjb2RlcywgLUVBR0FJTiBhbmRcbiYjNDM7XHQgKiAtRU5PTUVNLiBJZiBzdWJzZXF1ZW50IGxvb3AgaXRlcmF0aW9ucywgaWYgYW55LCBzdWNjZWVkcyxcbiYjNDM7XHQgKiBlcnJvciBjb2RlIHdvdWxkIGJlIG92ZXJ3cml0dGVuLiByZXRyeSBmbGFnIGhlbHBzIHRvXG4mIzQzO1x0ICogbWFrZSB0aGUgY2FsbGVyIHRvIGNvbnRpbnVlIGFuZCByZXRyeS4gU2luY2UgcmVjb3ZlcnlcbiYjNDM7XHQgKiBhY3Rpb24gZm9yIC1FTk9NRU0gYW5kIC1FQUdBSU4gYXJlIHNhbWUsIHdlIGFyZSByZXR1cm5pbmdcbiYjNDM7XHQgKiBvbmUgb2YgdGhlIGVycm9yIGNvZGVzLCB0aGF0IGlzIC1FQUdBSU4uXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBTdWNjZXNzZnVsIHJlY292ZXJ5IGRlcGVuZHMgb24gaG93IHNtYWxsIHRoZSBmcmFtZXMgYXJlLFxuJiM0MztcdCAqIGhvdyBtYW55IGNodW5rcywgYW1vbmcgdGhlIHJlY2VpdmVkIGNodW5rcyB0cmlnZ2VyZWQgdGhlXG4mIzQzO1x0ICogZXJyb3IsIHdoZXRoZXIgZGF0YSBpcyBpbnRhY3QgZXZlbiB3aXRoIGVycm9yIGNvbmRpdGlvbnMuXG4mIzQzO1x0ICogQXMgYSByZXN1bHQsIHRoZXJlIGlzIG5vIHNpbmdsZSwgYmVzdCBtZXRob2QgdG8gcmVjb3ZlclxuJiM0MztcdCAqIG1vc3QgZGF0YSB3aGVuIGVycm9yIGNvbmRpdGlvbnMgaGl0LiBXZSBkbyBvdXIgYmVzdCBieVxuJiM0MztcdCAqIHByb2Nlc3NpbmcgYWxsIHRoZSBjaHVua3Mgd2l0aCBnb29kIFwmIzM0O2Zvb3RlciBoZWFkZXJcJiMzNDsgYW5kXG4mIzQzO1x0ICogXCYjMzQ7ZGF0YSB2YWxpZFwmIzM0OyBiaXQgc2V0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyZXRyeSkge1xuJiM0MztcdFx0cmV0ID0gLUVBR0FJTjtcbiYjNDM7XHRcdG9hX3RjNl9sb29rX2Zvcl9uZXdfZnJhbWUodGM2KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBfX2JlMzIgb2FfdGM2X3ByZXBhcmVfZGF0YV9oZWFkZXIoYm9vbCBkYXRhX3ZhbGlkLCBib29sIHN0YXJ0X3ZhbGlkLFxuQEAgLTExMzIsMTIgJiM0MzsxMjQzLDkgQEAgc3RhdGljIGludCBvYV90YzZfdHJ5X3NwaV90cmFuc2ZlcihzdHJ1Y3Qgb2FfdGM2ICp0YzYpXG4gXHRcdH1cbiBcbiBcdFx0cmV0ID0gb2FfdGM2X3Byb2Nlc3Nfc3BpX2RhdGFfcnhfYnVmKHRjNiwgc3BpX2xlbik7XG4tXHRcdGlmIChyZXQpIHtcbi1cdFx0XHRpZiAocmV0ID09IC1FQUdBSU4pXG4tXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRvYV90YzZfY2xlYW51cF9vbmdvaW5nX3R4X3NrYih0YzYpO1xuLVx0XHRcdG9hX3RjNl9jbGVhbnVwX29uZ29pbmdfcnhfc2tiKHRjNik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVBR0FJTikge1xuJiM0MztcdFx0XHRvYV90YzZfZnJlZV9vbmdvaW5nX3NrYnModGM2KTtcbiBcdFx0XHRuZXRkZXZfZXJyKHRjNi1cdTAwM2VuZXRkZXYsIFwmIzM0O0RldmljZSBlcnJvcjogJWRcXG5cJiMzNDssIHJldCk7XG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0fVxuQEAgLTExNTksMTUgJiM0MzsxMjY3LDIwIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBvYV90YzZfbWFjcGh5X3RocmVhZGVkX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKVxuIFx0ICogbm8gbmVlZCB0byBhdHRlbXB0IHNwaSB0cmFuc2Zlciwgb25jZSBpdCBmYWlscy4gUGVuZGluZyBza2JzXG4gXHQgKiBhcmUgYWxyZWFkeSBmcmVlZC5cbiBcdCAqL1xuLVx0aWYgKCF0YzYtXHUwMDNlZGlzYWJsZV90cmFmZmljKSB7XG4tXHRcdHdoaWxlICh0YzYtXHUwMDNlaW50X2ZsYWcgfHxcbi1cdFx0ICAgICAgICh0YzYtXHUwMDNld2FpdGluZ190eF9za2IgXHUwMDI2XHUwMDI2IHRjNi1cdTAwM2V0eF9jcmVkaXRzKSkge1xuLVx0XHRcdHJldCA9IG9hX3RjNl90cnlfc3BpX3RyYW5zZmVyKHRjNik7XG4tXHRcdFx0aWYgKHJldCkge1xuLVx0XHRcdFx0ZGlzYWJsZV9pcnFfbm9zeW5jKHRjNi1cdTAwM2VzcGktXHUwMDNlaXJxKTtcbi1cdFx0XHRcdG9hX3RjNl9kaXNhYmxlX3RyYWZmaWModGM2KTtcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2dGM2LVx1MDAzZXR4X3NrYl9sb2NrKTtcbiYjNDM7XHRpZiAodGM2LVx1MDAzZWRpc2FibGVfdHJhZmZpYykge1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGM2LVx1MDAzZXR4X3NrYl9sb2NrKTtcbiYjNDM7XHRcdHJldHVybiBJUlFfSEFORExFRDtcbiYjNDM7XHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGM2LVx1MDAzZXR4X3NrYl9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKHRjNi1cdTAwM2VpbnRfZmxhZyB8fFxuJiM0MztcdCAgICAgICAodGM2LVx1MDAzZXdhaXRpbmdfdHhfc2tiIFx1MDAyNlx1MDAyNiB0YzYtXHUwMDNldHhfY3JlZGl0cykpIHtcbiYjNDM7XHRcdHJldCA9IG9hX3RjNl90cnlfc3BpX3RyYW5zZmVyKHRjNik7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdGRpc2FibGVfaXJxX25vc3luYyh0YzYtXHUwMDNlc3BpLVx1MDAzZWlycSk7XG4mIzQzO1x0XHRcdG9hX3RjNl9kaXNhYmxlX3RyYWZmaWModGM2KTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC0xMjQ1LDIzICYjNDM7MTM1OCwzMCBAQCBFWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfemVyb19hbGlnbl9yZWNlaXZlX2ZyYW1lX2VuYWJsZSk7XG4gICogQHRjNjogb2FfdGM2IHN0cnVjdC5cbiAgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIGluIHdoaWNoIHRoZSBldGhlcm5ldCBmcmFtZSBpcyBzdG9yZWQuXG4gICpcbi0gKiBSZXR1cm46IE5FVERFVl9UWF9PSyBpZiB0aGUgdHJhbnNtaXQgZXRoZXJuZXQgZnJhbWUgc2tiIGFkZGVkIGluIHRoZSB0eF9za2JfcVxuLSAqIG90aGVyd2lzZSByZXR1cm5zIE5FVERFVl9UWF9CVVNZLlxuJiM0MzsgKiBSZXR1cm46IE5FVERFVl9UWF9PSyBlaXRoZXIgb24gc3VjY2Vzc2Z1bCBxdWV1ZWluZyBvZiB0aGUgcGFja2V0IGZvclxuJiM0MzsgKiB0cmFuc21pc3Npb24sIG9yIG9uIHBhY2tldCBnZXR0aW5nIGRyb3BwZWQuIFBhY2tldCBjYW4gYmUgZHJvcHBlZCBkdWUgdG9cbiYjNDM7ICogZmFpbHVyZSBpbiBsaW5lYXJpemluZyB0aGUgYnVmZmVyIG9yIGRpc2FibGVfdHJhZmZpYyBpcyBzZXQgZHVlIHRvXG4mIzQzOyAqIGVhcmxpZXIgZmF0YWwgZXJyb3IuIFJldHVybnMgTkVUREVWX1RYX0JVU1kgd2hlbiB0aGVyZSBpcyBubyByb29tXG4mIzQzOyAqIHRvIHF1ZXVlIHRoZSBwYWNrZXQuXG4gICovXG4gbmV0ZGV2X3R4X3Qgb2FfdGM2X3N0YXJ0X3htaXQoc3RydWN0IG9hX3RjNiAqdGM2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdGlmICh0YzYtXHUwMDNlZGlzYWJsZV90cmFmZmljIHx8IHRjNi1cdTAwM2V3YWl0aW5nX3R4X3NrYikge1xuLVx0XHRuZXRpZl9zdG9wX3F1ZXVlKHRjNi1cdTAwM2VuZXRkZXYpO1xuLVx0XHRyZXR1cm4gTkVUREVWX1RYX0JVU1k7XG4tXHR9XG4tXG4gXHRpZiAoc2tiX2xpbmVhcml6ZShza2IpKSB7XG4tXHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4tXHRcdHRjNi1cdTAwM2VuZXRkZXYtXHUwMDNlc3RhdHMudHhfZHJvcHBlZCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRvYV90YzZfZHJvcF90eF9za2IodGM2LCBza2IpO1xuIFx0XHRyZXR1cm4gTkVUREVWX1RYX09LO1xuIFx0fVxuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRjNi1cdTAwM2V0eF9za2JfbG9jayk7XG4mIzQzO1x0aWYgKHRjNi1cdTAwM2V3YWl0aW5nX3R4X3NrYikge1xuJiM0MztcdFx0bmV0aWZfc3RvcF9xdWV1ZSh0YzYtXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRjNi1cdTAwM2V0eF9za2JfbG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gTkVUREVWX1RYX0JVU1k7XG4mIzQzO1x0fVxuJiM0MztcdGlmICh0YzYtXHUwMDNlZGlzYWJsZV90cmFmZmljKSB7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZ0YzYtXHUwMDNldHhfc2tiX2xvY2spO1xuJiM0MztcdFx0b2FfdGM2X2Ryb3BfdHhfc2tiKHRjNiwgc2tiKTtcbiYjNDM7XHRcdHJldHVybiBORVRERVZfVFhfT0s7XG4mIzQzO1x0fVxuIFx0dGM2LVx1MDAzZXdhaXRpbmdfdHhfc2tiID0gc2tiO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGM2LVx1MDAzZXR4X3NrYl9sb2NrKTtcbiBcbkBAIC0xMzkzLDggJiM0MzsxNTEzLDEwIEBAIEVYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl9pbml0KTtcbiAgKi9cbiB2b2lkIG9hX3RjNl9leGl0KHN0cnVjdCBvYV90YzYgKnRjNilcbiB7XG4tXHR0YzYtXHUwMDNlZGlzYWJsZV90cmFmZmljID0gdHJ1ZTtcbiBcdGRpc2FibGVfaXJxKHRjNi1cdTAwM2VzcGktXHUwMDNlaXJxKTtcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2dGM2LVx1MDAzZXR4X3NrYl9sb2NrKTtcbiYjNDM7XHR0YzYtXHUwMDNlZGlzYWJsZV90cmFmZmljID0gdHJ1ZTtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZ0YzYtXHUwMDNldHhfc2tiX2xvY2spO1xuIFx0b2FfdGM2X3BoeV9leGl0KHRjNik7XG4gXHRvYV90YzZfZnJlZV9wZW5kaW5nX3NrYnModGM2KTtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPUEVOIEFsbGlhbmNlIDEwQkFTRS1UMXggTUFDLVBIWSBTZXJpYWwgSW50ZXJmYWNlIChvYV90YzYpIGZyYW1ld29yaywgd2hpY2ggaXMgY3VycmVudGx5IG9ubHkgdXNlZCBieSB0aGUgTWljcm9jaGlwIExBTjg2NXggU1BJIGRyaXZlci4gU2luY2UgU1BJIGRldmljZXMgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgY2Fubm90IGJlIGR5bmFtaWNhbGx5IGluc3RhbnRpYXRlZCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2YjEyYzdkODI4ZGFlOGFlZDE4NTQyZWRjZTIzOTY1MmIxZDkzNzRjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMDM6MjQ6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jCmluZGV4IDA3MjdkNTMzNDVhMzMuLjZlMjdlZDM5YTk5YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jCkBAIC0xMjcsNyAmIzQzOzEyNyw3IEBAIHN0cnVjdCBvYV90YzYgewogCXUxNiBzcGlfZGF0YV90eF9idWZfb2Zmc2V0OwogCXUxNiB0eF9jcmVkaXRzOwogCXU4IHJ4X2NodW5rc19hdmFpbGFibGU7Ci0JYm9vbCByeF9idWZfb3ZlcmZsb3c7CiYjNDM7CWJvb2wgd2FpdF91bnRpbF9zdGFydF92YWxpZDsKIAlib29sIGludF9mbGFnOwogCWJvb2wgZGlzYWJsZV90cmFmZmljOwogfTsKQEAgLTQyMyw3ICYjNDM7NDIzLDcgQEAgc3RhdGljIGludCBvYV90YzZfbWRpb2J1c19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnbnVtKQogewogCXN0cnVjdCBvYV90YzYgKnRjNiA9IGJ1cy0mZ3Q7cHJpdjsKIAl1MzIgcmVndmFsOwotCWJvb2wgcmV0OwomIzQzOwlpbnQgcmV0OwogCiAJcmV0ID0gb2FfdGM2X3JlYWRfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUEhZX1NURF9SRUdfQUREUl9CQVNFIHwKIAkJCQkgICAocmVnbnVtICZhbXA7IE9BX1RDNl9QSFlfU1REX1JFR19BRERSX01BU0spLApAQCAtNjUyLDYgJiM0Mzs2NTIsMjYgQEAgc3RhdGljIGludCBvYV90YzZfZW5hYmxlX2RhdGFfdHJhbnNmZXIoc3RydWN0IG9hX3RjNiAqdGM2KQogCXJldHVybiBvYV90YzZfd3JpdGVfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUkVHX0NPTkZJRzAsIHZhbHVlKTsKIH0KIAomIzQzOy8qIENhbGxlZCB3aGVuIGEgZnJhbWUgdGhhdCBpcyBtZWFudCB0byBiZSB0cmFuc21pdHRlZCwgaXMgZHJvcHBlZC4gKi8KJiM0MztzdGF0aWMgdm9pZCBvYV90YzZfZHJvcF90eF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJaWYgKHNrYikgewomIzQzOwkJdGM2LSZndDtuZXRkZXYtJmd0O3N0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7OwomIzQzOwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm9hX3RjNl9kZXRhY2hfd2FpdGluZ190eF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2KQomIzQzO3sKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNrYjsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3RjNi0mZ3Q7dHhfc2tiX2xvY2spOwomIzQzOwlza2IgPSB0YzYtJmd0O3dhaXRpbmdfdHhfc2tiOwomIzQzOwl0YzYtJmd0O3dhaXRpbmdfdHhfc2tiID0gTlVMTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHNrYjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBvYV90YzZfY2xlYW51cF9vbmdvaW5nX3J4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYpCiB7CiAJaWYgKHRjNi0mZ3Q7cnhfc2tiKSB7CkBAIC02NjMsMjkgJiM0Mzs2ODMsMzkgQEAgc3RhdGljIHZvaWQgb2FfdGM2X2NsZWFudXBfb25nb2luZ19yeF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2KQogCiBzdGF0aWMgdm9pZCBvYV90YzZfY2xlYW51cF9vbmdvaW5nX3R4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYpCiB7Ci0JaWYgKHRjNi0mZ3Q7b25nb2luZ190eF9za2IpIHsKLQkJdGM2LSZndDtuZXRkZXYtJmd0O3N0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7OwotCQlrZnJlZV9za2IodGM2LSZndDtvbmdvaW5nX3R4X3NrYik7Ci0JCXRjNi0mZ3Q7b25nb2luZ190eF9za2IgPSBOVUxMOwotCX0KJiM0MzsJb2FfdGM2X2Ryb3BfdHhfc2tiKHRjNiwgdGM2LSZndDtvbmdvaW5nX3R4X3NrYik7CiYjNDM7CXRjNi0mZ3Q7b25nb2luZ190eF9za2IgPSBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBvYV90YzZfY2xlYW51cF93YWl0aW5nX3R4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYpCiB7Ci0JaWYgKHRjNi0mZ3Q7d2FpdGluZ190eF9za2IpIHsKLQkJdGM2LSZndDtuZXRkZXYtJmd0O3N0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7OwotCQlrZnJlZV9za2IodGM2LSZndDt3YWl0aW5nX3R4X3NrYik7Ci0JCXRjNi0mZ3Q7d2FpdGluZ190eF9za2IgPSBOVUxMOwotCX0KJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNrYjsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7dGM2LSZndDt0eF9za2JfbG9jayk7CiYjNDM7CXNrYiA9IG9hX3RjNl9kZXRhY2hfd2FpdGluZ190eF9za2IodGM2KTsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDt0YzYtJmd0O3R4X3NrYl9sb2NrKTsKJiM0MzsKJiM0MzsJb2FfdGM2X2Ryb3BfdHhfc2tiKHRjNiwgc2tiKTsKIH0KIAotc3RhdGljIHZvaWQgb2FfdGM2X2ZyZWVfcGVuZGluZ19za2JzKHN0cnVjdCBvYV90YzYgKnRjNikKJiM0MztzdGF0aWMgdm9pZCBvYV90YzZfZnJlZV9vbmdvaW5nX3NrYnMoc3RydWN0IG9hX3RjNiAqdGM2KQogewogCW9hX3RjNl9jbGVhbnVwX29uZ29pbmdfdHhfc2tiKHRjNik7CiAJb2FfdGM2X2NsZWFudXBfb25nb2luZ19yeF9za2IodGM2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgb2FfdGM2X2ZyZWVfcGVuZGluZ19za2JzKHN0cnVjdCBvYV90YzYgKnRjNikKJiM0Mzt7CiYjNDM7CW9hX3RjNl9mcmVlX29uZ29pbmdfc2ticyh0YzYpOwogCW9hX3RjNl9jbGVhbnVwX3dhaXRpbmdfdHhfc2tiKHRjNik7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBvYV90YzZfbG9va19mb3JfbmV3X2ZyYW1lKHN0cnVjdCBvYV90YzYgKnRjNikKJiM0Mzt7CiYjNDM7CXRjNi0mZ3Q7d2FpdF91bnRpbF9zdGFydF92YWxpZCA9IHRydWU7CiYjNDM7CW9hX3RjNl9jbGVhbnVwX29uZ29pbmdfcnhfc2tiKHRjNik7CiYjNDM7fQomIzQzOwogLyogSWYgdGhlIGZhaWx1cmUgaXMgYXQgU1BJIGludGVyZmFjZSBsZXZlbCwgbWFza2luZyBhbmQgY2xlYXJpbmcKICAqIHRoZSBpbnRlcnJ1cHQgb2YgdGhlIGRldmljZSB3b24mIzM5O3Qgd29yay4gU2luY2UgU1BJIGludGVycnVwdCBpcwogICogZGlzYWJsZWQsIGl0IHNob3VsZCBzdG9wIHRoZSByZXBlYXRlZCBpbnRlcnJ1cHRzLgpAQCAtNjkzLDkgJiM0Mzs3MjMsMjEgQEAgc3RhdGljIHZvaWQgb2FfdGM2X2ZyZWVfcGVuZGluZ19za2JzKHN0cnVjdCBvYV90YzYgKnRjNikKIHN0YXRpYyB2b2lkIG9hX3RjNl9kaXNhYmxlX3RyYWZmaWMoc3RydWN0IG9hX3RjNiAqdGM2KQogewogCXUzMiByZWd2YWwgPSBJTlRfTUFTSzBfQUxMX0lOVEVSUlVQVFM7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiAKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7dGM2LSZndDt0eF9za2JfbG9jayk7CiAJdGM2LSZndDtkaXNhYmxlX3RyYWZmaWMgPSB0cnVlOwotCW9hX3RjNl9mcmVlX3BlbmRpbmdfc2ticyh0YzYpOwomIzQzOwlza2IgPSBvYV90YzZfZGV0YWNoX3dhaXRpbmdfdHhfc2tiKHRjNik7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7dGM2LSZndDt0eF9za2JfbG9jayk7CiYjNDM7CiYjNDM7CS8qIGRpc2FibGVfdHJhZmZpYywgd2hlbiBzZXQsIGlzIGEgcG9pbnQgb2Ygbm8gcmV0dXJuIHRvIHdvcmtpbmcKJiM0MzsJICogc3RhdGUuIFRYIHF1ZXVlcyBhcmUgZGlzYWJsZWQuIEluIHNvbWUgY2FzZXMsIHVwcGVyIGxheWVyIG9yCiYjNDM7CSAqIHZlbmRvciBjb2RlIG1heSBpbmFkdmVydGVudGx5IGVuYWJsZSB0aGUgcXVldWUuIEludGVudGlvbiBvZgomIzQzOwkgKiB0aGUgZGlzYWJsZV90cmFmZmljIGZsYWcgaXMgdG8gc3RvcCB0cmFmZmljIGZyb20gZmxvd2luZy4KJiM0MzsJICovCiYjNDM7CW5ldGlmX3R4X2Rpc2FibGUodGM2LSZndDtuZXRkZXYpOwomIzQzOwlvYV90YzZfZHJvcF90eF9za2IodGM2LCBza2IpOwomIzQzOwlvYV90YzZfZnJlZV9vbmdvaW5nX3NrYnModGM2KTsKIAlvYV90YzZfd3JpdGVfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUkVHX0lOVF9NQVNLMCwgcmVndmFsKTsKIAlvYV90YzZfcmVhZF9yZWdpc3Rlcih0YzYsIE9BX1RDNl9SRUdfU1RBVFVTMCwgJmFtcDtyZWd2YWwpOwogCW9hX3RjNl93cml0ZV9yZWdpc3Rlcih0YzYsIE9BX1RDNl9SRUdfU1RBVFVTMCwgcmVndmFsKTsKQEAgLTcxNCw2ICYjNDM7NzU2LDEzIEBAIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3NfZXh0ZW5kZWRfc3RhdHVzKHN0cnVjdCBvYV90YzYgKnRjNikKIAkJcmV0dXJuIHJldDsKIAl9CiAKJiM0MzsJLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGVhY2ggY2h1bmsgcmVjZWl2ZWQgaW4gYSBnaXZlbiBTUEkKJiM0MzsJICogdHJhbnNhY3Rpb24uIEluIGNhc2UsIGV4dGVuZGVkIHN0YXR1cyBiaXQgaXMgc2V0IGluIG1vcmUgdGhhbgomIzQzOwkgKiBvbmUgY2h1bmssIHNraXAgdGhlIHdyaXRlLCBpZiBzdGF0dXMwIGlzIGFscmVhZHkgY2xlYXJlZC4KJiM0MzsJICovCiYjNDM7CWlmICghdmFsdWUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAkvKiBDbGVhciB0aGUgZXJyb3IgaW50ZXJydXB0cyBzdGF0dXMgKi8KIAlyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUkVHX1NUQVRVUzAsIHZhbHVlKTsKIAlpZiAocmV0KSB7CkBAIC03MjMsOCAmIzQzOzc3Miw3IEBAIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3NfZXh0ZW5kZWRfc3RhdHVzKHN0cnVjdCBvYV90YzYgKnRjNikKIAl9CiAKIAlpZiAoRklFTERfR0VUKFNUQVRVUzBfUlhfQlVGRkVSX09WRVJGTE9XX0VSUk9SLCB2YWx1ZSkpIHsKLQkJdGM2LSZndDtyeF9idWZfb3ZlcmZsb3cgPSB0cnVlOwotCQlvYV90YzZfY2xlYW51cF9vbmdvaW5nX3J4X3NrYih0YzYpOwomIzQzOwkJb2FfdGM2X2xvb2tfZm9yX25ld19mcmFtZSh0YzYpOwogCQluZXRfZXJyX3JhdGVsaW1pdGVkKCYjMzQ7JXM6IFJlY2VpdmUgYnVmZmVyIG92ZXJmbG93IGVycm9yXG4mIzM0OywKIAkJCQkgICAgdGM2LSZndDtuZXRkZXYtJmd0O25hbWUpOwogCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTc1MCw2ICYjNDM7Nzk4LDggQEAgc3RhdGljIGludCBvYV90YzZfcHJvY2Vzc19leHRlbmRlZF9zdGF0dXMoc3RydWN0IG9hX3RjNiAqdGM2KQogCiBzdGF0aWMgaW50IG9hX3RjNl9wcm9jZXNzX3J4X2NodW5rX2Zvb3RlcihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUzMiBmb290ZXIpCiB7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwogCS8qIFByb2Nlc3MgcnggY2h1bmsgZm9vdGVyIGZvciB0aGUgZm9sbG93aW5nLAogCSAqIDEuIHR4IGNyZWRpdHMKIAkgKiAyLiBlcnJvcnMgaWYgYW55IGZyb20gTUFDLVBIWQpAQCAtNzYwLDkgJiM0Mzs4MTAsMTEgQEAgc3RhdGljIGludCBvYV90YzZfcHJvY2Vzc19yeF9jaHVua19mb290ZXIoc3RydWN0IG9hX3RjNiAqdGM2LCB1MzIgZm9vdGVyKQogCQkJCQkgICAgIGZvb3Rlcik7CiAKIAlpZiAoRklFTERfR0VUKE9BX1RDNl9EQVRBX0ZPT1RFUl9FWFRFTkRFRF9TVFMsIGZvb3RlcikpIHsKLQkJaW50IHJldCA9IG9hX3RjNl9wcm9jZXNzX2V4dGVuZGVkX3N0YXR1cyh0YzYpOwotCi0JCWlmIChyZXQpCiYjNDM7CQlyZXQgPSBvYV90YzZfcHJvY2Vzc19leHRlbmRlZF9zdGF0dXModGM2KTsKJiM0MzsJCS8qIEVBR0FJTiBlcnJvciBpcyByZWNvdmVyYWJsZS4gTW92ZSBvbiB0byBjaGVjawomIzQzOwkJICogSEVBREVSIGFuZCBTWU5DIGVycm9ycyBiZWZvcmUgcmV0dXJuaW5nLgomIzQzOwkJICovCiYjNDM7CQlpZiAocmV0ICZhbXA7JmFtcDsgcmV0ICE9IC1FQUdBSU4pCiAJCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtNzgwLDcgJiM0Mzs4MzIsNyBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcm9jZXNzX3J4X2NodW5rX2Zvb3RlcihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUzMiBmb290ZXIpCiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCXJldHVybiAwOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBvYV90YzZfc3VibWl0X3J4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYpCkBAIC04MDUsMTMgJiM0Mzs4NTcsMzUgQEAgc3RhdGljIHZvaWQgb2FfdGM2X3N1Ym1pdF9yeF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2KQogCXRjNi0mZ3Q7cnhfc2tiID0gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgb2FfdGM2X3VwZGF0ZV9yeF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqcGF5bG9hZCwgdTggbGVuZ3RoKQomIzQzOy8qIE9uIG92ZXJzdWJzY3JpYmVkIHRyYWZmaWMgY29uZGl0aW9uLCBwYXJ0aWN1bGFybHkgd2l0aCBvdmVyd2hlbG1pbmcgcngKJiM0MzsgKiBidWZmZXIgb3ZlcmZsb3cgZXJyb3JzLCB0aGVyZSBjb3VsZCBiZSBkYXRhIGNodW5rIGxvc3MuIElmIHRhaWwgJiM0MzsgbGVuZ3RoCiYjNDM7ICogZ29lcyBiZXlvbmQgZW5kIHBvaW50ZXIsIHRoYXQgaXMgYW4gaW5kaWNhdGlvbiB0aGF0IHRoZSBkYXRhIGNodW5rIHdpdGgKJiM0MzsgKiBlbmRfdmFsaWQgYml0IGlzIGxvc3QuIFRpbWUgdG8gbG9vayBmb3IgYSBkYXRhIGNodW5rIHdpdGggc3RhcnRfdmFsaWQgYml0LgomIzQzOyAqCiYjNDM7ICogSWYgcnhfc2tiIGlzIE5VTEwsIGl0IGlzIHRpbWUgdG8gc3RhcnQgbG9va2luZyBmb3IgZGF0YSBjaHVuayB3aXRoCiYjNDM7ICogc3RhcnRfYml0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgb2FfdGM2X3VwZGF0ZV9yeF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqcGF5bG9hZCwgdTggbGVuZ3RoKQogewomIzQzOwlpZiAoIXRjNi0mZ3Q7cnhfc2tiIHx8CiYjNDM7CSAgICBza2JfdGFpbHJvb20odGM2LSZndDtyeF9za2IpICZsdDsgbGVuZ3RoKSB7CiYjNDM7CQlvYV90YzZfbG9va19mb3JfbmV3X2ZyYW1lKHRjNik7CiYjNDM7CQlyZXR1cm4gLUVBR0FJTjsKJiM0MzsJfQomIzQzOwogCW1lbWNweShza2JfcHV0KHRjNi0mZ3Q7cnhfc2tiLCBsZW5ndGgpLCBwYXlsb2FkLCBsZW5ndGgpOwomIzQzOwlyZXR1cm4gMDsKIH0KIAomIzQzOy8qIE9uIG92ZXJ3aGVsbWluZyByeCBidWZmZXIgb3ZlcmZsb3cgZXJyb3JzLCBkdWUgdG8gZGF0YSBjaHVuayBsb3NzLCBpdCBpcwomIzQzOyAqIHBvc3NpYmxlIHRoYXQgd2UgZ2V0IHR3byBkYXRhIGNodW5rcyB3aXRoIHN0YXJ0X3ZhbGlkIGJpdCBzZXQsIHdpdGhvdXQKJiM0MzsgKiBlbmRfdmFsaWQgYml0IHNldCBpbiBiZXR3ZWVuLiBJbiB0aGlzIGNhc2UsIHJ4X3NrYiB3b3VsZCBoYXZlIGEgdmFsaWQKJiM0MzsgKiBidWZmZXIgcG9pbnRlci4gV2Ugc2hvdWxkIHJlbGVhc2UsIGlmIGEgdmFsaWQgcG9pbnRlciBpcyBmb3VuZCBiZWZvcmUKJiM0MzsgKiBhbGxvY2F0aW5nIGEgbmV3IG9uZS4KJiM0MzsgKi8KIHN0YXRpYyBpbnQgb2FfdGM2X2FsbG9jYXRlX3J4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYpCiB7CiYjNDM7CW9hX3RjNl9jbGVhbnVwX29uZ29pbmdfcnhfc2tiKHRjNik7CiAJdGM2LSZndDtyeF9za2IgPSBuZXRkZXZfYWxsb2Nfc2tiX2lwX2FsaWduKHRjNi0mZ3Q7bmV0ZGV2LCB0YzYtJmd0O25ldGRldi0mZ3Q7bXR1ICYjNDM7CiAJCQkJCQlFVEhfSExFTiAmIzQzOyBFVEhfRkNTX0xFTik7CiAJaWYgKCF0YzYtJmd0O3J4X3NrYikgewpAQCAtODMxLDcgJiM0Mzs5MDUsOSBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcmNzX2NvbXBsZXRlX3J4X2ZyYW1lKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKnBheWxvYWQsCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCW9hX3RjNl91cGRhdGVfcnhfc2tiKHRjNiwgcGF5bG9hZCwgc2l6ZSk7CiYjNDM7CXJldCA9IG9hX3RjNl91cGRhdGVfcnhfc2tiKHRjNiwgcGF5bG9hZCwgc2l6ZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwogCiAJb2FfdGM2X3N1Ym1pdF9yeF9za2IodGM2KTsKIApAQCAtODQ2LDIyICYjNDM7OTIyLDI0IEBAIHN0YXRpYyBpbnQgb2FfdGM2X3ByY3NfcnhfZnJhbWVfc3RhcnQoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqcGF5bG9hZCwgdTE2IHNpemUpCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCW9hX3RjNl91cGRhdGVfcnhfc2tiKHRjNiwgcGF5bG9hZCwgc2l6ZSk7Ci0KLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIG9hX3RjNl91cGRhdGVfcnhfc2tiKHRjNiwgcGF5bG9hZCwgc2l6ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIG9hX3RjNl9wcmNzX3J4X2ZyYW1lX2VuZChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpwYXlsb2FkLCB1MTYgc2l6ZSkKJiM0MztzdGF0aWMgaW50IG9hX3RjNl9wcmNzX3J4X2ZyYW1lX2VuZChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpwYXlsb2FkLCB1MTYgc2l6ZSkKIHsKLQlvYV90YzZfdXBkYXRlX3J4X3NrYih0YzYsIHBheWxvYWQsIHNpemUpOwomIzQzOwlpbnQgcmV0OwogCi0Jb2FfdGM2X3N1Ym1pdF9yeF9za2IodGM2KTsKJiM0MzsJcmV0ID0gb2FfdGM2X3VwZGF0ZV9yeF9za2IodGM2LCBwYXlsb2FkLCBzaXplKTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlvYV90YzZfc3VibWl0X3J4X3NrYih0YzYpOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBvYV90YzZfcHJjc19vbmdvaW5nX3J4X2ZyYW1lKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKnBheWxvYWQsCi0JCQkJCSB1MzIgZm9vdGVyKQomIzQzO3N0YXRpYyBpbnQgb2FfdGM2X3ByY3Nfb25nb2luZ19yeF9mcmFtZShzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpwYXlsb2FkLAomIzQzOwkJCQkJdTMyIGZvb3RlcikKIHsKLQlvYV90YzZfdXBkYXRlX3J4X3NrYih0YzYsIHBheWxvYWQsIE9BX1RDNl9DSFVOS19QQVlMT0FEX1NJWkUpOwomIzQzOwlyZXR1cm4gb2FfdGM2X3VwZGF0ZV9yeF9za2IodGM2LCBwYXlsb2FkLAomIzQzOwkJCQkgICAgT0FfVEM2X0NIVU5LX1BBWUxPQURfU0laRSk7CiB9CiAKIHN0YXRpYyBpbnQgb2FfdGM2X3ByY3NfcnhfY2h1bmtfcGF5bG9hZChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpkYXRhLApAQCAtODc2LDEwICYjNDM7OTU0LDEwIEBAIHN0YXRpYyBpbnQgb2FfdGM2X3ByY3NfcnhfY2h1bmtfcGF5bG9hZChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpkYXRhLAogCXUxNiBzaXplOwogCiAJLyogUmVzdGFydCB0aGUgbmV3IHJ4IGZyYW1lIGFmdGVyIHJlY2VpdmluZyByeCBidWZmZXIgb3ZlcmZsb3cgZXJyb3IgKi8KLQlpZiAoc3RhcnRfdmFsaWQgJmFtcDsmYW1wOyB0YzYtJmd0O3J4X2J1Zl9vdmVyZmxvdykKLQkJdGM2LSZndDtyeF9idWZfb3ZlcmZsb3cgPSBmYWxzZTsKJiM0MzsJaWYgKHN0YXJ0X3ZhbGlkICZhbXA7JmFtcDsgdGM2LSZndDt3YWl0X3VudGlsX3N0YXJ0X3ZhbGlkKQomIzQzOwkJdGM2LSZndDt3YWl0X3VudGlsX3N0YXJ0X3ZhbGlkID0gZmFsc2U7CiAKLQlpZiAodGM2LSZndDtyeF9idWZfb3ZlcmZsb3cpCiYjNDM7CWlmICh0YzYtJmd0O3dhaXRfdW50aWxfc3RhcnRfdmFsaWQpCiAJCXJldHVybiAwOwogCiAJLyogUHJvY2VzcyB0aGUgY2h1bmsgd2l0aCBjb21wbGV0ZSByeCBmcmFtZSAqLwpAQCAtOTAxLDggJiM0Mzs5NzksNyBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcmNzX3J4X2NodW5rX3BheWxvYWQoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqZGF0YSwKIAkvKiBQcm9jZXNzIHRoZSBjaHVuayB3aXRoIG9ubHkgcnggZnJhbWUgZW5kICovCiAJaWYgKGVuZF92YWxpZCAmYW1wOyZhbXA7ICFzdGFydF92YWxpZCkgewogCQlzaXplID0gZW5kX2J5dGVfb2Zmc2V0ICYjNDM7IDE7Ci0JCW9hX3RjNl9wcmNzX3J4X2ZyYW1lX2VuZCh0YzYsIGRhdGEsIHNpemUpOwotCQlyZXR1cm4gMDsKJiM0MzsJCXJldHVybiBvYV90YzZfcHJjc19yeF9mcmFtZV9lbmQodGM2LCBkYXRhLCBzaXplKTsKIAl9CiAKIAkvKiBQcm9jZXNzIHRoZSBjaHVuayB3aXRoIHByZXZpb3VzIHJ4IGZyYW1lIGVuZCBhbmQgbmV4dCByeCBmcmFtZQpAQCAtOTE2LDYgJiM0Mzs5OTMsMTUgQEAgc3RhdGljIGludCBvYV90YzZfcHJjc19yeF9jaHVua19wYXlsb2FkKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKmRhdGEsCiAJCWlmICh0YzYtJmd0O3J4X3NrYikgewogCQkJc2l6ZSA9IGVuZF9ieXRlX29mZnNldCAmIzQzOyAxOwogCQkJb2FfdGM2X3ByY3NfcnhfZnJhbWVfZW5kKHRjNiwgZGF0YSwgc2l6ZSk7CiYjNDM7CiYjNDM7CQkJLyogUmV0dXJuIHZhbHVlIGZyb20gb2FfdGM2X3ByY3NfcnhfZnJhbWVfZW5kIGlzIG5vdAomIzQzOwkJCSAqIGNoZWNrZWQuIElmIGl0IHJldHVybmVkIGFuIGVycm9yLCBpdCBpcyB0byBtYWtlCiYjNDM7CQkJICogdGhlIGNvZGUgdG8gbG9vayBmb3IgbmV3IGZyYW1lLiBBdCB0aGlzIHN0YWdlLAomIzQzOwkJCSAqIGNvZGUgYmVsb3cgaXMgZ29pbmcgdG8gcHJvY2VzcyBhIG5ldyBmcmFtZS4gU28sCiYjNDM7CQkJICogZXJyb3IgY29uZGl0aW9uIGlzIHNldCB0byBmYWxzZSwgaW4gY2FzZSBpdCBpcwomIzQzOwkJCSAqIHNldCBiZWZvcmUgcHJvY2VlZGluZy4KJiM0MzsJCQkgKi8KJiM0MzsJCQl0YzYtJmd0O3dhaXRfdW50aWxfc3RhcnRfdmFsaWQgPSBmYWxzZTsKIAkJfQogCQlzaXplID0gT0FfVEM2X0NIVU5LX1BBWUxPQURfU0laRSAtIHN0YXJ0X2J5dGVfb2Zmc2V0OwogCQlyZXR1cm4gb2FfdGM2X3ByY3NfcnhfZnJhbWVfc3RhcnQodGM2LApAQCAtOTI0LDkgJiM0MzsxMDEwLDcgQEAgc3RhdGljIGludCBvYV90YzZfcHJjc19yeF9jaHVua19wYXlsb2FkKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKmRhdGEsCiAJfQogCiAJLyogUHJvY2VzcyB0aGUgY2h1bmsgd2l0aCBvbmdvaW5nIHJ4IGZyYW1lIGRhdGEgKi8KLQlvYV90YzZfcHJjc19vbmdvaW5nX3J4X2ZyYW1lKHRjNiwgZGF0YSwgZm9vdGVyKTsKLQotCXJldHVybiAwOwomIzQzOwlyZXR1cm4gb2FfdGM2X3ByY3Nfb25nb2luZ19yeF9mcmFtZSh0YzYsIGRhdGEsIGZvb3Rlcik7CiB9CiAKIHN0YXRpYyB1MzIgb2FfdGM2X2dldF9yeF9jaHVua19mb290ZXIoc3RydWN0IG9hX3RjNiAqdGM2LCB1MTYgZm9vdGVyX29mZnNldCkKQEAgLTk0Miw4ICYjNDM7MTAyNiw5IEBAIHN0YXRpYyB1MzIgb2FfdGM2X2dldF9yeF9jaHVua19mb290ZXIoc3RydWN0IG9hX3RjNiAqdGM2LCB1MTYgZm9vdGVyX29mZnNldCkKIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3Nfc3BpX2RhdGFfcnhfYnVmKHN0cnVjdCBvYV90YzYgKnRjNiwgdTE2IGxlbmd0aCkKIHsKIAl1MTYgbm9fb2ZfcnhfY2h1bmtzID0gbGVuZ3RoIC8gT0FfVEM2X0NIVU5LX1NJWkU7CiYjNDM7CWJvb2wgcmV0cnkgPSBmYWxzZTsKJiM0MzsJaW50IHJldCA9IDA7CiAJdTMyIGZvb3RlcjsKLQlpbnQgcmV0OwogCiAJLyogQWxsIHRoZSByeCBjaHVua3MgaW4gdGhlIHJlY2VpdmUgU1BJIGRhdGEgYnVmZmVyIGFyZSBleGFtaW5lZCBoZXJlICovCiAJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBub19vZl9yeF9jaHVua3M7IGkmIzQzOyYjNDM7KSB7CkBAIC05NTIsOCAmIzQzOzEwMzcsMTEgQEAgc3RhdGljIGludCBvYV90YzZfcHJvY2Vzc19zcGlfZGF0YV9yeF9idWYoc3RydWN0IG9hX3RjNiAqdGM2LCB1MTYgbGVuZ3RoKQogCQkJCQkJICAgIE9BX1RDNl9DSFVOS19QQVlMT0FEX1NJWkUpOwogCiAJCXJldCA9IG9hX3RjNl9wcm9jZXNzX3J4X2NodW5rX2Zvb3Rlcih0YzYsIGZvb3Rlcik7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCWlmIChyZXQgIT0gLUVBR0FJTikKJiM0MzsJCQkJcmV0dXJuIHJldDsKJiM0MzsJCQlyZXRyeSA9IHRydWU7CiYjNDM7CQl9CiAKIAkJLyogSWYgdGhlcmUgaXMgYSBkYXRhIHZhbGlkIGNodW5rcyB0aGVuIHByb2Nlc3MgaXQgZm9yIHRoZQogCQkgKiBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gZGV0ZXJtaW5lIHRoZSB2YWxpZGl0eSBhbmQgdGhlIGxvY2F0aW9uCkBAIC05NjUsMTIgJiM0MzsxMDUzLDM1IEBAIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3Nfc3BpX2RhdGFfcnhfYnVmKHN0cnVjdCBvYV90YzYgKnRjNiwgdTE2IGxlbmd0aCkKIAogCQkJcmV0ID0gb2FfdGM2X3ByY3NfcnhfY2h1bmtfcGF5bG9hZCh0YzYsIHBheWxvYWQsCiAJCQkJCQkJICAgZm9vdGVyKTsKLQkJCWlmIChyZXQpCi0JCQkJcmV0dXJuIHJldDsKJiM0MzsJCQlpZiAocmV0KSB7CiYjNDM7CQkJCWlmIChyZXQgIT0gLUVOT01FTSAmYW1wOyZhbXA7IHJldCAhPSAtRUFHQUlOKQomIzQzOwkJCQkJcmV0dXJuIHJldDsKJiM0MzsJCQkJcmV0cnkgPSB0cnVlOwomIzQzOwkJCX0KIAkJfQogCX0KIAotCXJldHVybiAwOwomIzQzOwkvKiBOb3QgYmFpbGluZyBvdXQgb24gcmVjb3ZlcmFibGUgZXJyb3IgY29kZXMsIC1FQUdBSU4gYW5kCiYjNDM7CSAqIC1FTk9NRU0uIElmIHN1YnNlcXVlbnQgbG9vcCBpdGVyYXRpb25zLCBpZiBhbnksIHN1Y2NlZWRzLAomIzQzOwkgKiBlcnJvciBjb2RlIHdvdWxkIGJlIG92ZXJ3cml0dGVuLiByZXRyeSBmbGFnIGhlbHBzIHRvCiYjNDM7CSAqIG1ha2UgdGhlIGNhbGxlciB0byBjb250aW51ZSBhbmQgcmV0cnkuIFNpbmNlIHJlY292ZXJ5CiYjNDM7CSAqIGFjdGlvbiBmb3IgLUVOT01FTSBhbmQgLUVBR0FJTiBhcmUgc2FtZSwgd2UgYXJlIHJldHVybmluZwomIzQzOwkgKiBvbmUgb2YgdGhlIGVycm9yIGNvZGVzLCB0aGF0IGlzIC1FQUdBSU4uCiYjNDM7CSAqCiYjNDM7CSAqIFN1Y2Nlc3NmdWwgcmVjb3ZlcnkgZGVwZW5kcyBvbiBob3cgc21hbGwgdGhlIGZyYW1lcyBhcmUsCiYjNDM7CSAqIGhvdyBtYW55IGNodW5rcywgYW1vbmcgdGhlIHJlY2VpdmVkIGNodW5rcyB0cmlnZ2VyZWQgdGhlCiYjNDM7CSAqIGVycm9yLCB3aGV0aGVyIGRhdGEgaXMgaW50YWN0IGV2ZW4gd2l0aCBlcnJvciBjb25kaXRpb25zLgomIzQzOwkgKiBBcyBhIHJlc3VsdCwgdGhlcmUgaXMgbm8gc2luZ2xlLCBiZXN0IG1ldGhvZCB0byByZWNvdmVyCiYjNDM7CSAqIG1vc3QgZGF0YSB3aGVuIGVycm9yIGNvbmRpdGlvbnMgaGl0LiBXZSBkbyBvdXIgYmVzdCBieQomIzQzOwkgKiBwcm9jZXNzaW5nIGFsbCB0aGUgY2h1bmtzIHdpdGggZ29vZCAmIzM0O2Zvb3RlciBoZWFkZXImIzM0OyBhbmQKJiM0MzsJICogJiMzNDtkYXRhIHZhbGlkJiMzNDsgYml0IHNldC4KJiM0MzsJICovCiYjNDM7CWlmIChyZXRyeSkgewomIzQzOwkJcmV0ID0gLUVBR0FJTjsKJiM0MzsJCW9hX3RjNl9sb29rX2Zvcl9uZXdfZnJhbWUodGM2KTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgX19iZTMyIG9hX3RjNl9wcmVwYXJlX2RhdGFfaGVhZGVyKGJvb2wgZGF0YV92YWxpZCwgYm9vbCBzdGFydF92YWxpZCwKQEAgLTExMzIsMTIgJiM0MzsxMjQzLDkgQEAgc3RhdGljIGludCBvYV90YzZfdHJ5X3NwaV90cmFuc2ZlcihzdHJ1Y3Qgb2FfdGM2ICp0YzYpCiAJCX0KIAogCQlyZXQgPSBvYV90YzZfcHJvY2Vzc19zcGlfZGF0YV9yeF9idWYodGM2LCBzcGlfbGVuKTsKLQkJaWYgKHJldCkgewotCQkJaWYgKHJldCA9PSAtRUFHQUlOKQotCQkJCWNvbnRpbnVlOwogCi0JCQlvYV90YzZfY2xlYW51cF9vbmdvaW5nX3R4X3NrYih0YzYpOwotCQkJb2FfdGM2X2NsZWFudXBfb25nb2luZ19yeF9za2IodGM2KTsKJiM0MzsJCWlmIChyZXQgJmFtcDsmYW1wOyByZXQgIT0gLUVBR0FJTikgewomIzQzOwkJCW9hX3RjNl9mcmVlX29uZ29pbmdfc2ticyh0YzYpOwogCQkJbmV0ZGV2X2Vycih0YzYtJmd0O25ldGRldiwgJiMzNDtEZXZpY2UgZXJyb3I6ICVkXG4mIzM0OywgcmV0KTsKIAkJCXJldHVybiByZXQ7CiAJCX0KQEAgLTExNTksMTUgJiM0MzsxMjY3LDIwIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBvYV90YzZfbWFjcGh5X3RocmVhZGVkX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQogCSAqIG5vIG5lZWQgdG8gYXR0ZW1wdCBzcGkgdHJhbnNmZXIsIG9uY2UgaXQgZmFpbHMuIFBlbmRpbmcgc2ticwogCSAqIGFyZSBhbHJlYWR5IGZyZWVkLgogCSAqLwotCWlmICghdGM2LSZndDtkaXNhYmxlX3RyYWZmaWMpIHsKLQkJd2hpbGUgKHRjNi0mZ3Q7aW50X2ZsYWcgfHwKLQkJICAgICAgICh0YzYtJmd0O3dhaXRpbmdfdHhfc2tiICZhbXA7JmFtcDsgdGM2LSZndDt0eF9jcmVkaXRzKSkgewotCQkJcmV0ID0gb2FfdGM2X3RyeV9zcGlfdHJhbnNmZXIodGM2KTsKLQkJCWlmIChyZXQpIHsKLQkJCQlkaXNhYmxlX2lycV9ub3N5bmModGM2LSZndDtzcGktJmd0O2lycSk7Ci0JCQkJb2FfdGM2X2Rpc2FibGVfdHJhZmZpYyh0YzYpOwotCQkJCWJyZWFrOwotCQkJfQomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDt0YzYtJmd0O3R4X3NrYl9sb2NrKTsKJiM0MzsJaWYgKHRjNi0mZ3Q7ZGlzYWJsZV90cmFmZmljKSB7CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO3RjNi0mZ3Q7dHhfc2tiX2xvY2spOwomIzQzOwkJcmV0dXJuIElSUV9IQU5ETEVEOwomIzQzOwl9CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7dGM2LSZndDt0eF9za2JfbG9jayk7CiYjNDM7CiYjNDM7CXdoaWxlICh0YzYtJmd0O2ludF9mbGFnIHx8CiYjNDM7CSAgICAgICAodGM2LSZndDt3YWl0aW5nX3R4X3NrYiAmYW1wOyZhbXA7IHRjNi0mZ3Q7dHhfY3JlZGl0cykpIHsKJiM0MzsJCXJldCA9IG9hX3RjNl90cnlfc3BpX3RyYW5zZmVyKHRjNik7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJZGlzYWJsZV9pcnFfbm9zeW5jKHRjNi0mZ3Q7c3BpLSZndDtpcnEpOwomIzQzOwkJCW9hX3RjNl9kaXNhYmxlX3RyYWZmaWModGM2KTsKJiM0MzsJCQlicmVhazsKIAkJfQogCX0KIApAQCAtMTI0NSwyMyAmIzQzOzEzNTgsMzAgQEAgRVhQT1JUX1NZTUJPTF9HUEwob2FfdGM2X3plcm9fYWxpZ25fcmVjZWl2ZV9mcmFtZV9lbmFibGUpOwogICogQHRjNjogb2FfdGM2IHN0cnVjdC4KICAqIEBza2I6IHNvY2tldCBidWZmZXIgaW4gd2hpY2ggdGhlIGV0aGVybmV0IGZyYW1lIGlzIHN0b3JlZC4KICAqCi0gKiBSZXR1cm46IE5FVERFVl9UWF9PSyBpZiB0aGUgdHJhbnNtaXQgZXRoZXJuZXQgZnJhbWUgc2tiIGFkZGVkIGluIHRoZSB0eF9za2JfcQotICogb3RoZXJ3aXNlIHJldHVybnMgTkVUREVWX1RYX0JVU1kuCiYjNDM7ICogUmV0dXJuOiBORVRERVZfVFhfT0sgZWl0aGVyIG9uIHN1Y2Nlc3NmdWwgcXVldWVpbmcgb2YgdGhlIHBhY2tldCBmb3IKJiM0MzsgKiB0cmFuc21pc3Npb24sIG9yIG9uIHBhY2tldCBnZXR0aW5nIGRyb3BwZWQuIFBhY2tldCBjYW4gYmUgZHJvcHBlZCBkdWUgdG8KJiM0MzsgKiBmYWlsdXJlIGluIGxpbmVhcml6aW5nIHRoZSBidWZmZXIgb3IgZGlzYWJsZV90cmFmZmljIGlzIHNldCBkdWUgdG8KJiM0MzsgKiBlYXJsaWVyIGZhdGFsIGVycm9yLiBSZXR1cm5zIE5FVERFVl9UWF9CVVNZIHdoZW4gdGhlcmUgaXMgbm8gcm9vbQomIzQzOyAqIHRvIHF1ZXVlIHRoZSBwYWNrZXQuCiAgKi8KIG5ldGRldl90eF90IG9hX3RjNl9zdGFydF94bWl0KHN0cnVjdCBvYV90YzYgKnRjNiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpZiAodGM2LSZndDtkaXNhYmxlX3RyYWZmaWMgfHwgdGM2LSZndDt3YWl0aW5nX3R4X3NrYikgewotCQluZXRpZl9zdG9wX3F1ZXVlKHRjNi0mZ3Q7bmV0ZGV2KTsKLQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwotCX0KLQogCWlmIChza2JfbGluZWFyaXplKHNrYikpIHsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJdGM2LSZndDtuZXRkZXYtJmd0O3N0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7OwomIzQzOwkJb2FfdGM2X2Ryb3BfdHhfc2tiKHRjNiwgc2tiKTsKIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAlzcGluX2xvY2tfYmgoJmFtcDt0YzYtJmd0O3R4X3NrYl9sb2NrKTsKJiM0MzsJaWYgKHRjNi0mZ3Q7d2FpdGluZ190eF9za2IpIHsKJiM0MzsJCW5ldGlmX3N0b3BfcXVldWUodGM2LSZndDtuZXRkZXYpOwomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDt0YzYtJmd0O3R4X3NrYl9sb2NrKTsKJiM0MzsJCXJldHVybiBORVRERVZfVFhfQlVTWTsKJiM0MzsJfQomIzQzOwlpZiAodGM2LSZndDtkaXNhYmxlX3RyYWZmaWMpIHsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7dGM2LSZndDt0eF9za2JfbG9jayk7CiYjNDM7CQlvYV90YzZfZHJvcF90eF9za2IodGM2LCBza2IpOwomIzQzOwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKJiM0MzsJfQogCXRjNi0mZ3Q7d2FpdGluZ190eF9za2IgPSBza2I7CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDt0YzYtJmd0O3R4X3NrYl9sb2NrKTsKIApAQCAtMTM5Myw4ICYjNDM7MTUxMywxMCBAQCBFWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfaW5pdCk7CiAgKi8KIHZvaWQgb2FfdGM2X2V4aXQoc3RydWN0IG9hX3RjNiAqdGM2KQogewotCXRjNi0mZ3Q7ZGlzYWJsZV90cmFmZmljID0gdHJ1ZTsKIAlkaXNhYmxlX2lycSh0YzYtJmd0O3NwaS0mZ3Q7aXJxKTsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7dGM2LSZndDt0eF9za2JfbG9jayk7CiYjNDM7CXRjNi0mZ3Q7ZGlzYWJsZV90cmFmZmljID0gdHJ1ZTsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDt0YzYtJmd0O3R4X3NrYl9sb2NrKTsKIAlvYV90YzZfcGh5X2V4aXQodGM2KTsKIAlvYV90YzZfZnJlZV9wZW5kaW5nX3NrYnModGM2KTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMyNQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDYwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBPUEVOIEFsbGlhbmNlIDEwQkFTRS1UMXggTUFDLVBIWSBEcml2ZXI6IEEgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmNgLCB3aGljaCwgYXMgSSByZWNhbGwsIGhhbmRsZXMgRXRoZXJuZXQgZnJhbWVzIG92ZXIgU1BJIGZvciB0aGUgT1BFTiBBbGxpYW5jZSAxMEJBU0UtVDF4IE1BQy1QSFkuICBUaGUgc2hlZXIgdm9sdW1lIG9mIG1vZGlmaWVkIGZ1bmN0aW9ucyDigJMgYSB3aG9sZSByYWZ0IG9mIHRoZW0g4oCTIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIHRoaXMgd2FycmFudHMgYSBjbG9zZXIgbG9vayBmb3IgZnV6emluZyBwb3RlbnRpYWwuIEl0JiMzOTtzIGEgY29tcHJlaGVuc2l2ZSBzZXQgb2YgY2hhbmdlcyB0b3VjaGluZyB2YXJpb3VzIGFzcGVjdHMgZnJvbSB0cmFuc21pdC9yZWNlaXZlIGJ1ZmZlcnMgdG8gaW50ZXJydXB0IGhhbmRsaW5nIGFuZCB0aGUgU1BJIHRyYW5zZmVyIG1lY2hhbmlzbSBpdHNlbGYuICBUaGUgYWRkaXRpb24gb2YgZnVuY3Rpb25zIGxpa2UgYG9hX3RjNl9kcm9wX3R4X3NrYmAsIGBvYV90YzZfZGV0YWNoX3dhaXRpbmdfdHhfc2tiYCwgYW5kIHNldmVyYWwgUlgtcmVsYXRlZCBhZGRpdGlvbnMgY2VydGFpbmx5IGNhdGNoZXMgbXkgYXR0ZW50aW9uLCBlc3BlY2lhbGx5IHRoZSBudW1lcm91cyBgcHJjc18qYCBmdW5jdGlvbnMuIFRoZXNlIGFyZSBhbGwgaGlnaC12YWx1ZSB0YXJnZXRzLgoKTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMsICYjMzQ7Q2FuIHdlIGV2ZW4gKmdldCogdG8gdGhpcyBpbiBhIGZ1enplcj8mIzM0OyBUaGlzIGlzIGEgaGFyZHdhcmUgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIGEgTUFDLVBIWSBjb25uZWN0ZWQgdmlhIFNQSS4gVGhhdCByYWlzZXMgYSBzaWduaWZpY2FudCBxdWVzdGlvbjogY2FuIGl0IGJlIHJlYWNoZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBvciBhIGZ1enppbmcgY29udGV4dD8gU1BJIGRldmljZXMgYXJlIG9mdGVuIHBoeXNpY2FsLCBhbmQgaW50ZXJhY3Rpbmcgd2l0aCB0aGVtIGRpcmVjdGx5IGlzIHVzdWFsbHkgYSBuby1nbyBmb3IgZnV6emluZyB3aXRob3V0IGFuIGVtdWxhdG9yIG9yIHNvbWUgZm9ybSBvZiBpbmplY3Rpb24uIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGV0aGVyIHRoZXJlIGFyZSBlbXVsYXRlZCBTUEkgY29udHJvbGxlcnMgYXZhaWxhYmxlIHdpdGhpbiB0aGUgdGVzdGluZyBpbmZyYXN0cnVjdHVyZSBvciwgZXZlbiBiZXR0ZXIsIGlmIHRoZXJlJiMzOTtzIGEgd2F5IHRvIGluamVjdCBTUEkgdHJhZmZpYyBkaXJlY3RseS4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IHN5emthbGxlciAqbWlnaHQqIGhhdmUgc29tZSBTUEkgc3VwcG9ydCwgYnV0IEkgY2FuJiMzOTt0IHF1aXRlIHJlbWVtYmVyIHRoZSBkZXRhaWxzLgoKVGhlIHJlYWwga2V5IGlzIHJlYWNoYWJpbGl0eS4gIEkgbmVlZCB0byBhc2NlcnRhaW4gaWYgYG9hX3RjNi5jYCBpcyBhY3R1YWxseSAqcmVhY2hhYmxlKiBmcm9tIGEgdXNlci1zcGFjZSBwcm9jZXNzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBrZXJuZWwgY29kZSBmb3IgY2FsbHMgdG8gYG9hX3RjNl9pbml0YCBvciBldmVuIGp1c3QgYSBkaXJlY3QgcmVmZXJlbmNlIHRvICYjMzQ7b2FfdGM2JiMzNDsgdG8gc2VlIHdoYXQgbW9kdWxlLCBkZXZpY2UsIG9yIG90aGVyIGNvbXBvbmVudCBhY3R1YWxseSBsb2FkcyBhbmQgdXNlcyB0aGlzIGRyaXZlci4gIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgYmVzdCBhcHByb2FjaCBmb3IgZnV6emluZyB0aGlzIGFuZCBsZXQgbWUga25vdyBpZiBpdCYjMzk7cyBldmVuIHdvcnRoIHRoZSBlZmZvcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2FfdGM2X2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0PTQ1ND1UaGUgaW5jbHVkZS9saW51eC9vYV90YzYuaCBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0LTQ1NS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdDo0NTY6Li4gYzpmdW5jdGlvbjo6IHN0cnVjdCBvYV90YzYgKm9hX3RjNl9pbml0KHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIFxcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb2EtdGM2LWZyYW1ld29yay5yc3QtNDU3LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYz0zMzM9c3RhdGljIGludCBsYW44NjV4X3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jLTM0OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYzozNDk6XHRwcml2LVx1MDAzZXRjNiA9IG9hX3RjNl9pbml0KHNwaSwgbmV0ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYy0zNTAtXHRpZiAoIXByaXYtXHUwMDNldGM2KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmM9MTM5Mz1FWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfc3RhcnRfeG1pdCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMtMTM5NS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jOjEzOTY6ICogb2FfdGM2X2luaXQgLSBhbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIG9hX3RjNiBzdHJ1Y3R1cmUuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy0xMzk3LSAqIEBzcGk6IGRldmljZSB3aXRoIHdoaWNoIGRhdGEgd2lsbCBiZSBleGNoYW5nZWQuXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMtMTQwMi0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jOjE0MDM6c3RydWN0IG9hX3RjNiAqb2FfdGM2X2luaXQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTE0MDQte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTE1MDctfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmM6MTUwODpFWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfaW5pdCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy0xNTA5LVxuLS1cbmluY2x1ZGUvbGludXgvb2FfdGM2Lmg9MTM9c3RydWN0IG9hX3RjNjtcbmluY2x1ZGUvbGludXgvb2FfdGM2LmgtMTQtXG5pbmNsdWRlL2xpbnV4L29hX3RjNi5oOjE1OnN0cnVjdCBvYV90YzYgKm9hX3RjNl9pbml0KHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xuaW5jbHVkZS9saW51eC9vYV90YzYuaC0xNi12b2lkIG9hX3RjNl9leGl0KHN0cnVjdCBvYV90YzYgKnRjNik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMTEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkFzc2Vzc2luZyBMQU44NjV4IERyaXZlciYjMzk7cyBTeXprYWxsZXIgQ29tcGF0aWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbGFuODY1eGAgZHJpdmVyLCB3aGljaCBpcyBhIE1pY3JvY2hpcCBMQU44NjUwLzEgTUFDLVBIWSBkcml2ZXIuIFRoZSBrZXkgaXNzdWUgaGVyZSBpcyB0aGF0IGl0ICpyZXF1aXJlcyogYSBwaHlzaWNhbCBTUEkgZGV2aWNlLiBOb3csIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgSSBjYW4gZ2V0IHRoaXMgd29ya2luZyB3aXRoaW4gdGhlIGNvbmZpbmVzIG9mIHN5emthbGxlciBmb3IgZnV6emluZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiBJIHNvbWVob3cgZW11bGF0ZSB0aGlzIFNQSSBkZXZpY2Ugd2l0aGluIHRoZSBzeXprYWxsZXIgZW52aXJvbm1lbnQ/CgpTeXprYWxsZXIgaXRzZWxmIGRvZXNuJiMzOTt0IG9mZmVyIGEgZ2VuZXJpYyBTUEkgZW11bGF0b3IsIHdoaWNoIGlzIGEgYml0IG9mIGEgcm9hZGJsb2NrLiBJIHF1aWNrbHkgc2Nhbm5lZCBteSBtZW50YWwgbGFuZHNjYXBlIGZvciBzb21ldGhpbmcgYW5hbG9nb3VzIHRvIGBtYWM4MDIxMV9od3NpbWAgZm9yIFNQSSwgYSBzb2Z0d2FyZSBzaW11bGF0aW9uIG9mIGhhcmR3YXJlIGluIHRoZSBuZXR3b3JrIHJlYWxtLCBidXQgbm90aGluZyBqdW1wZWQgb3V0LiBEYXJuLgoKQWxyaWdodCwgbGV0JiMzOTtzIHN0ZXAgYmFjayBhIGJpdC4gRG9lcyBzeXprYWxsZXIgb2ZmZXIgKmFueSogU1BJIGZ1enppbmcgc3VwcG9ydCwgcGVyaGFwcyB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIGBzcGlkZXZgIG9yIGEgc2ltaWxhciBjb25zdHJ1Y3Q/IE5vLCB0aGF0JiMzOTtzIG5vdCBpdC4gYHNwaWRldmAgaXMgYWxsIGFib3V0IHVzZXJzcGFjZSBpbnRlcmFjdGlvbiB3aXRoIFNQSSwgbm90IGFib3V0IGVtdWxhdGluZyB0aGUgdW5kZXJseWluZyBTUEkgZGV2aWNlIGl0c2VsZi4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgdXNlci10by1rZXJuZWwgaW50ZXJmYWNlLCBub3QgYW4gU1BJIGRldmljZSBpbiB0aGUga2VybmVsLgoKU28sIGhlcmUmIzM5O3MgdGhlIGNydXg6IGlmIHRoaXMgZHJpdmVyICphYnNvbHV0ZWx5KiBuZWVkcyBhIHBoeXNpY2FsIFNQSSBkZXZpY2UgbGlrZSB0aGUgTEFOODY1eCwgaXQmIzM5O3MgZ29pbmcgdG8gYmUgdHJpY2t5IHRvIHJlYWNoIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gVW5sZXNzIFFFTVUgc3BlY2lmaWNhbGx5IGVtdWxhdGVzIHRoaXMgcGFydGljdWxhciBTUEkgZGV2aWNlLCB3aGljaCBpcyB1bmxpa2VseSB3aXRob3V0IHNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQuIEkgbWlnaHQgbmVlZCBhIHNvZnR3YXJlIGVtdWxhdG9yLCBhIHNoaW0gdG8gcHJldGVuZCB0byBiZSB0aGUgaGFyZHdhcmUsIG9yIEkgbWlnaHQgaGF2ZSB0byBnbyBmdWxsLW9uIGhhcmR3YXJlLWluLXRoZS1sb29wLCB3aGljaCBpcyBnb2luZyB0byBiZSBwYWluZnVsIGFuZCBtZXNzeS4KCk15IG5leHQgc3RlcCBpcyB0byBjaGVjayBpZiBgbGFuODY1eGAgY2FuIGV2ZW4gKnByb2JlKiBzdWNjZXNzZnVsbHkgaW4gUUVNVS4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUsIHJpZ2h0PyBJdCYjMzk7cyBhbiBTUEkgZHJpdmVyLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBTUEkgc3Vic3lzdGVtIGlzIHdvcmtpbmcgYXMgZXhwZWN0ZWQuIExldCYjMzk7cyBzZWUgaWYgSSBjYW4gZ2V0IGV2ZW4gYmFzaWMgcHJvYmluZyB3b3JraW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAzOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xhbjg2NXhfZHJpdmVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYz00NDA9TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbGFuODY1eF9kdF9pZHMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jLTQ0MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYzo0NDI6c3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIGxhbjg2NXhfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jLTQ0My1cdC5kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jLTQ1MC19O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jOjQ1MTptb2R1bGVfc3BpX2RyaXZlcihsYW44NjV4X2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmMtNDUyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAzOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDU4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFNQSSBEcml2ZXIgU2NlbmFyaW8qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgU1BJIGRyaXZlciBhbmQgaW1tZWRpYXRlbHkgdGhlIHN0YW5kYXJkIGNvbnNpZGVyYXRpb25zIGNvbWUgdG8gbWluZC4gSXQmIzM5O3MgYW4gU1BJIGRyaXZlciwgc28gbmF0dXJhbGx5LCBpdHMgYmluZGluZyBpcyB0aWVkIHRvIGRldmljZXMgZGVmaW5lZCBpbiB0aGUgZGV2aWNlIHRyZWUgb3IgQUNQSS4gIEluIGEgdHlwaWNhbCBRRU1VIHNldHVwLCBhbmQgSSBrbm93IHRoaXMgZnJvbSBleHBlcmllbmNlLCB0aGUgcHJvYmUgZnVuY3Rpb24gZm9yIHRoaXMgZHJpdmVyIGlzIG5ldmVyIGdvaW5nIHRvIGJlIGNhbGxlZCB1bmxlc3Mgd2UgZXhwbGljaXRseSBhZGQgYSBub2RlIGluIHRoZSBkZXZpY2UgdHJlZSBmb3IgdGhpcyBzcGVjaWZpYyBTUEkgZGV2aWNlIGFuZCB0aGVuIHdpcmUgaXQgdXAgdG8gYW4gZW11bGF0ZWQgU1BJIGNvbnRyb2xsZXIgd2l0aGluIHRoZSBRRU1VIGVudmlyb25tZW50LiBFdmVuIGlmIHdlIGRvIHNvbWVob3cgbWFuYWdlIHRvIGdldCB0aGUgcHJvYmUgdG8gZXhlY3V0ZSwgYWxsIFNQSSBjb21tdW5pY2F0aW9uIHdvdWxkIGJlIGZ1dGlsZSB3aXRob3V0IGFuIGFjdHVhbCBwaWVjZSBvZiBoYXJkd2FyZSB0byByZXNwb25kLgoKV2FpdCBhIHNlY29uZC4uLiBhbmQgdGhpcyBpcyBhbiBpbXBvcnRhbnQgcG9pbnQuLi4gc3l6a2FsbGVyLCBhcyBmYXIgYXMgSSB1bmRlcnN0YW5kLCBkb2VzbiYjMzk7dCBlbXVsYXRlIFNQSSBkZXZpY2VzLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIElmIGl0IGRvZXNuJiMzOTt0LCB0aGF0IG1lYW5zIEkgbmVlZCB0byBhZGp1c3QgbXkgYXBwcm9hY2guIFRoZSBrZXkgbmV4dCBzdGVwIHRoZW4sIGlzIHRvIGZpZ3VyZSBvdXQgKndobyogZWxzZSBpcyB1c2luZyB0aGUgYG9hX3RjNl9pbml0YCBmdW5jdGlvbi4gVGhhdCYjMzk7cyB0aGUgbmV4dCBhdmVudWUgdG8gZXhwbG9yZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYV90YzZfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb2EtdGM2LWZyYW1ld29yay5yc3Q9NDU0PVRoZSBpbmNsdWRlL2xpbnV4L29hX3RjNi5oIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb2EtdGM2LWZyYW1ld29yay5yc3QtNDU1LVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0OjQ1NjouLiBjOmZ1bmN0aW9uOjogc3RydWN0IG9hX3RjNiAqb2FfdGM2X2luaXQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgXFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdC00NTctICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jPTMzMz1zdGF0aWMgaW50IGxhbjg2NXhfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmMtMzQ4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jOjM0OTpcdHByaXYtXHUwMDNldGM2ID0gb2FfdGM2X2luaXQoc3BpLCBuZXRkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jLTM1MC1cdGlmICghcHJpdi1cdTAwM2V0YzYpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYz0xMzkzPUVYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl9zdGFydF94bWl0KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy0xMzk1LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmM6MTM5NjogKiBvYV90YzZfaW5pdCAtIGFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgb2FfdGM2IHN0cnVjdHVyZS5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTEzOTctICogQHNwaTogZGV2aWNlIHdpdGggd2hpY2ggZGF0YSB3aWxsIGJlIGV4Y2hhbmdlZC5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy0xNDAyLSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmM6MTQwMzpzdHJ1Y3Qgb2FfdGM2ICpvYV90YzZfaW5pdChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMtMTQwNC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMtMTUwNy19XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYzoxNTA4OkVYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl9pbml0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTE1MDktXG4tLVxuaW5jbHVkZS9saW51eC9vYV90YzYuaD0xMz1zdHJ1Y3Qgb2FfdGM2O1xuaW5jbHVkZS9saW51eC9vYV90YzYuaC0xNC1cbmluY2x1ZGUvbGludXgvb2FfdGM2Lmg6MTU6c3RydWN0IG9hX3RjNiAqb2FfdGM2X2luaXQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XG5pbmNsdWRlL2xpbnV4L29hX3RjNi5oLTE2LXZvaWQgb2FfdGM2X2V4aXQoc3RydWN0IG9hX3RjNiAqdGM2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjEzOAoJCQkJCQkJb3V0cHV0OiA1MgoJCQkJCQkJdGhvdWdodHM6IDMxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXp6aW5nIFdvcnRoaW5lc3MqKgoKT2theSwgc28gdGhpcyBjb2RlIHBhdGggaXMgZXhjbHVzaXZlbHkgdGllZCB0byB0aGUgYGxhbjg2NXhgIGRyaXZlci4gVGhhdCYjMzk7cyBhIHNwZWNpZmljIFNQSSBkcml2ZXIgZm9yIGEgTUFDLVBIWS4gU2luY2Ugd2UmIzM5O3JlIG5vdCBlbXVsYXRpbmcgdGhhdCBoYXJkd2FyZSDigJMgbmVpdGhlciBpbiBHQ0Ugbm9yIFFFTVUg4oCTIHRob3NlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gYW55IG9mIG15IHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzLiBNeSBpbml0aWFsIGluY2xpbmF0aW9uIGlzIHRoYXQgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuCgpCdXQgaG9sZCBvbiwgbGV0IG1lIHF1aWNrbHkgdGhpbmsgdGhpcyB0aHJvdWdoLiBDYW4gc3l6a2FsbGVyIHNvbWVob3cgaW5qZWN0IFNQSSB0cmFmZmljPyBJIGtub3cgaXQgY2FuIGRvIFVTQiBhbmQgUENJICh0aHJvdWdoIGVtdWxhdGVkIGRldmljZXMgb3IgZGlyZWN0bHkgdmlhIHJhdyBQQ0kgY29uZmlnIHNwYWNlKSwgYnV0IFNQSSBpcyBkaWZmZXJlbnQuIFNQSSBuZWVkcyBhIG1hc3RlciBjb250cm9sbGVyLCBhbmQgdGhlIGBsYW44NjV4YCBkZXZpY2UgaXMgYSBzbGF2ZS4gV2l0aG91dCBib3RoIGFuIGVtdWxhdGVkIFNQSSBjb250cm9sbGVyICphbmQqIHRoZSBlbXVsYXRlZCBgbGFuODY1eGAgZGV2aWNlIGl0c2VsZiwgdGhlIGRyaXZlciYjMzk7cyBwcm9iZSBmdW5jdGlvbiB3aWxsIG5ldmVyIGV2ZW4gZ2V0IGNhbGxlZC4KCkV2ZW4gaWYgSSBjb3VsZCBzb21laG93IGZvcmNlIHRoZSBTUEkgZGV2aWNlIGluc3RhbnRpYXRpb24g4oCTIG1heWJlIHRocm91Z2ggc3lzZnMsIGNvbmZpZ2ZzIChpZiBzdXBwb3J0ZWQpLCBvciBhIGRldmljZSB0cmVlIG92ZXJsYXkg4oCTIHRoZSBTUEkgdHJhbnNmZXJzIHdvdWxkIGluZXZpdGFibHkgZmFpbCBvciB0aW1lb3V0LiBUaGVyZSYjMzk7cyBzaW1wbHkgbm8gaGFyZHdhcmUgcmVzcG9uZGluZyB0byB0aGUgU1BJIG1lc3NhZ2VzLiBUaGUgYG9hX3RjNmAgZnJhbWV3b3JrIGNvbW11bmljYXRlcyBvdmVyIFNQSSB1c2luZyBgc3BpX3N5bmNgIG9yIGBzcGlfYXN5bmNgLiBXaXRob3V0IGhhcmR3YXJlLCBgc3BpX3N5bmNgIGlzIGxpa2VseSB0byBlaXRoZXIgcmV0dXJuIGFuIGVycm9yIG9yIHNpbGVudGx5IHNlbmQgZGF0YSBpbnRvIHRoZSB2b2lkLCByZXR1cm5pbmcgZWl0aGVyIGFsbCB6ZXJvcyBvciBvbmVzLiBCdXQsIGFuZCB0aGlzIGlzIHRoZSBjcnV4IG9mIGl0LCB0byBldmVuICpnZXQqIHRvIHRoYXQgcG9pbnQsIHRoZSBgbGFuODY1eF9wcm9iZWAgZnVuY3Rpb24gaGFzIHRvIHN1Y2NlZWQuCgpBbHJpZ2h0LCB0aW1lIHRvIGV4YW1pbmUgYGxhbjg2NXhfcHJvYmVgIGNsb3NlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzMzOlx0c3RhdGljIGludCBsYW44NjV4X3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXG4gMzM0Olx0e1xuIDMzNTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiAzMzY6XHRcdHN0cnVjdCBsYW44NjV4X3ByaXYgKnByaXY7XG4gMzM3Olx0XHRpbnQgcmV0O1xuIDMzODpcdFxuIDMzOTpcdFx0bmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBsYW44NjV4X3ByaXYpKTtcbiAzNDA6XHRcdGlmICghbmV0ZGV2KVxuIDM0MTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAzNDI6XHRcbiAzNDM6XHRcdHByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIDM0NDpcdFx0cHJpdi1cdTAwM2VuZXRkZXYgPSBuZXRkZXY7XG4gMzQ1Olx0XHRwcml2LVx1MDAzZXNwaSA9IHNwaTtcbiAzNDY6XHRcdHNwaV9zZXRfZHJ2ZGF0YShzcGksIHByaXYpO1xuIDM0NzpcdFx0SU5JVF9XT1JLKFx1MDAyNnByaXYtXHUwMDNlbXVsdGljYXN0X3dvcmssIGxhbjg2NXhfbXVsdGljYXN0X3dvcmtfaGFuZGxlcik7XG4gMzQ4Olx0XG4gMzQ5Olx0XHRwcml2LVx1MDAzZXRjNiA9IG9hX3RjNl9pbml0KHNwaSwgbmV0ZGV2KTtcbiAzNTA6XHRcdGlmICghcHJpdi1cdTAwM2V0YzYpIHtcbiAzNTE6XHRcdFx0cmV0ID0gLUVOT0RFVjtcbiAzNTI6XHRcdFx0Z290byBmcmVlX25ldGRldjtcbiAzNTM6XHRcdH1cbiAzNTQ6XHRcbiAzNTU6XHRcdC8qIExBTjg2NXggUmV2LkIwL0IxIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBmcm9tIEFOMTc2MFxuIDM1NjpcdFx0ICogQXMgcGVyIHRoZSBDb25maWd1cmF0aW9uIEFwcGxpY2F0aW9uIE5vdGUgQU4xNzYwIHB1Ymxpc2hlZCBpbiB0aGVcbiAzNTc6XHRcdCAqIGxpbmssIGh0dHBzOi8vd3d3Lm1pY3JvY2hpcC5jb20vZW4tdXMvYXBwbGljYXRpb24tbm90ZXMvYW4xNzYwXG4gMzU4Olx0XHQgKiBSZXZpc2lvbiBGIChEUzYwMDAxNzYwRyAtIEp1bmUgMjAyNCksIGNvbmZpZ3VyZSB0aGUgTUFDIHRvIHNldCB0aW1lXG4gMzU5Olx0XHQgKiBzdGFtcGluZyBhdCB0aGUgZW5kIG9mIHRoZSBTdGFydCBvZiBGcmFtZSBEZWxpbWl0ZXIgKFNGRCkgYW5kIHNldCB0aGVcbiAzNjA6XHRcdCAqIFRpbWVyIEluY3JlbWVudCByZWcgdG8gNDAgbnMgdG8gYmUgdXNlZCBhcyBhIDI1IE1IeiBpbnRlcm5hbCBjbG9jay5cbiAzNjE6XHRcdCAqL1xuIDM2MjpcdFx0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHByaXYtXHUwMDNldGM2LCBMQU44NjVYX1JFR19NQUNfVFNVX1RJTUVSX0lOQ1IsXG4gMzYzOlx0XHRcdFx0XHQgICAgTUFDX1RTVV9USU1FUl9JTkNSX0NPVU5UX05BTk9TRUNPTkRTKTtcbiAzNjQ6XHRcdGlmIChyZXQpIHtcbiAzNjU6XHRcdFx0ZGV2X2VycihcdTAwMjZzcGktXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gY29uZmlnIFRTVSBUaW1lciBJbmNyIHJlZzogJWRcXG5cJiMzNDssXG4gMzY2Olx0XHRcdFx0cmV0KTtcbiAzNjc6XHRcdFx0Z290byBvYV90YzZfZXhpdDtcbiAzNjg6XHRcdH1cbiAzNjk6XHRcbiAzNzA6XHRcdC8qIEFzIHBlciB0aGUgcG9pbnQgczMgaW4gdGhlIGJlbG93IGVycmF0YSwgU1BJIHJlY2VpdmUgRXRoZXJuZXQgZnJhbWVcbiAzNzE6XHRcdCAqIHRyYW5zZmVyIG1heSBoYWx0IHdoZW4gc3RhcnRpbmcgdGhlIG5leHQgZnJhbWUgaW4gdGhlIHNhbWUgZGF0YSBibG9ja1xuIDM3MjpcdFx0ICogKGNodW5rKSBhcyB0aGUgZW5kIG9mIGEgcHJldmlvdXMgZnJhbWUuIFRoZSBSRkEgZmllbGQgc2hvdWxkIGJlXG4gMzczOlx0XHQgKiBjb25maWd1cmVkIHRvIDAxYiBvciAxMGIgZm9yIHByb3BlciBvcGVyYXRpb24uIEluIHRoZXNlIG1vZGVzLCBvbmx5XG4gMzc0Olx0XHQgKiBvbmUgcmVjZWl2ZSBFdGhlcm5ldCBmcmFtZSB3aWxsIGJlIHBsYWNlZCBpbiBhIHNpbmdsZSBkYXRhIGJsb2NrLlxuIDM3NTpcdFx0ICogV2hlbiB0aGUgUkZBIGZpZWxkIGlzIHdyaXR0ZW4gdG8gMDFiLCByZWNlaXZlZCBmcmFtZXMgd2lsbCBiZSBmb3JjZWRcbiAzNzY6XHRcdCAqIHRvIG9ubHkgc3RhcnQgaW4gdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGRhdGEgYmxvY2sgcGF5bG9hZCAoU1dPPTApLiBBc1xuIDM3NzpcdFx0ICogcmVjb21tZW5kZWQsIGVuYWJsZSB6ZXJvIGFsaWduIHJlY2VpdmUgZnJhbWUgZmVhdHVyZSBmb3IgcHJvcGVyXG4gMzc4Olx0XHQgKiBvcGVyYXRpb24uXG4gMzc5Olx0XHQgKlxuIDM4MDpcdFx0ICogaHR0cHM6Ly93dzEubWljcm9jaGlwLmNvbS9kb3dubG9hZHMvYWVtRG9jdW1lbnRzL2RvY3VtZW50cy9BSVMvUHJvZHVjdERvY3VtZW50cy9FcnJhdGEvTEFOODY1MC0xLUVycmF0YS04MDAwMTA3NS5wZGZcbiAzODE6XHRcdCAqL1xuIDM4MjpcdFx0cmV0ID0gb2FfdGM2X3plcm9fYWxpZ25fcmVjZWl2ZV9mcmFtZV9lbmFibGUocHJpdi1cdTAwM2V0YzYpO1xuIDM4MzpcdFx0aWYgKHJldCkge1xuIDM4NDpcdFx0XHRkZXZfZXJyKFx1MDAyNnNwaS1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byBzZXQgWkFSRkU6ICVkXFxuXCYjMzQ7LCByZXQpO1xuIDM4NTpcdFx0XHRnb3RvIG9hX3RjNl9leGl0O1xuIDM4NjpcdFx0fVxuIDM4NzpcdFxuIDM4ODpcdFx0LyogR2V0IHRoZSBNQUMgYWRkcmVzcyBmcm9tIHRoZSBTUEkgZGV2aWNlIHRyZWUgbm9kZSAqL1xuIDM4OTpcdFx0aWYgKGRldmljZV9nZXRfZXRoZGV2X2FkZHJlc3MoXHUwMDI2c3BpLVx1MDAzZWRldiwgbmV0ZGV2KSlcbiAzOTA6XHRcdFx0ZXRoX2h3X2FkZHJfcmFuZG9tKG5ldGRldik7XG4gMzkxOlx0XG4gMzkyOlx0XHRyZXQgPSBsYW44NjV4X3NldF9od19tYWNhZGRyKHByaXYsIG5ldGRldi1cdTAwM2VkZXZfYWRkcik7XG4gMzkzOlx0XHRpZiAocmV0KSB7XG4gMzk0Olx0XHRcdGRldl9lcnIoXHUwMDI2c3BpLVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIGNvbmZpZ3VyZSBNQUM6ICVkXFxuXCYjMzQ7LCByZXQpO1xuIDM5NTpcdFx0XHRnb3RvIG9hX3RjNl9leGl0O1xuIDM5NjpcdFx0fVxuIDM5NzpcdFxuIDM5ODpcdFx0bmV0ZGV2LVx1MDAzZWlmX3BvcnQgPSBJRl9QT1JUXzEwQkFTRVQ7XG4gMzk5Olx0XHRuZXRkZXYtXHUwMDNlaXJxID0gc3BpLVx1MDAzZWlycTtcbiA0MDA6XHRcdG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2bGFuODY1eF9uZXRkZXZfb3BzO1xuIDQwMTpcdFx0bmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2bGFuODY1eF9ldGh0b29sX29wcztcbiA0MDI6XHRcbiA0MDM6XHRcdHJldCA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpO1xuIDQwNDpcdFx0aWYgKHJldCkge1xuIDQwNTpcdFx0XHRkZXZfZXJyKFx1MDAyNnNwaS1cdTAwM2VkZXYsIFwmIzM0O1JlZ2lzdGVyIG5ldGRldiBmYWlsZWQgKHJldCA9ICVkKVwmIzM0OywgcmV0KTtcbiA0MDY6XHRcdFx0Z290byBvYV90YzZfZXhpdDtcbiA0MDc6XHRcdH1cbiA0MDg6XHRcbiA0MDk6XHRcdHJldHVybiAwO1xuIDQxMDpcdFxuIDQxMTpcdG9hX3RjNl9leGl0OlxuIDQxMjpcdFx0b2FfdGM2X2V4aXQocHJpdi1cdTAwM2V0YzYpO1xuIDQxMzpcdGZyZWVfbmV0ZGV2OlxuIDQxNDpcdFx0ZnJlZV9uZXRkZXYocHJpdi1cdTAwM2VuZXRkZXYpO1xuIDQxNTpcdFx0cmV0dXJuIHJldDtcbiA0MTY6XHR9XG4gNDE3Olx0XG4gNDE4Olx0c3RhdGljIHZvaWQgbGFuODY1eF9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSlcbiA0MTk6XHR7XG4gNDIwOlx0XHRzdHJ1Y3QgbGFuODY1eF9wcml2ICpwcml2ID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7XG4gNDIxOlx0XG4gNDIyOlx0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnByaXYtXHUwMDNlbXVsdGljYXN0X3dvcmspO1xuIDQyMzpcdFx0dW5yZWdpc3Rlcl9uZXRkZXYocHJpdi1cdTAwM2VuZXRkZXYpO1xuIDQyNDpcdFx0b2FfdGM2X2V4aXQocHJpdi1cdTAwM2V0YzYpO1xuIDQyNTpcdFx0ZnJlZV9uZXRkZXYocHJpdi1cdTAwM2VuZXRkZXYpO1xuIDQyNjpcdH1cbiA0Mjc6XHRcbiA0Mjg6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9kZXZpY2VfaWQgbGFuODY1eF9pZHNbXSA9IHtcbiA0Mjk6XHRcdHsgLm5hbWUgPSBcJiMzNDtsYW44NjUwXCYjMzQ7IH0sXG4gNDMwOlx0XHR7IC5uYW1lID0gXCYjMzQ7bGFuODY1MVwmIzM0OyB9LFxuIDQzMTpcdFx0e30sXG4gNDMyOlx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1ODUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTEFOODY1eCBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgYGxhbjg2NXhfcHJvYmVgIGZ1bmN0aW9uIGlzIGNhbGxpbmcgYG9hX3RjNl9pbml0YC4gIFRoZW4sIHJpZ2h0IGFmdGVyIHRoYXQsIHdlJiMzOTt2ZSBnb3QgYSBjYWxsIHRvIGBvYV90YzZfd3JpdGVfcmVnaXN0ZXJgLiAgTXkgZ3V0IGZlZWxpbmcgaXMgc3RhcnRpbmcgdG8ga2ljayBpbi4uLiAgaWYgd2UmIzM5O3JlIG1pc3NpbmcgdGhlIHBoeXNpY2FsIGhhcmR3YXJlLCB0aGF0IGBvYV90YzZfd3JpdGVfcmVnaXN0ZXJgIGlzIHByb2JhYmx5IHdoZXJlIHRoaW5ncyBhcmUgZ29pbmcgdG8gZmFsbCBhcGFydC4gSXTigJlzIG1ha2luZyBTUEkgdHJhbnNmZXJzLCBhbmQgb2YgY291cnNlLCBpdOKAmXMgZ29pbmcgdG8gZXhwZWN0IHNvbWUgc29ydCBvZiB2YWxpZCByZXNwb25zZSBiYWNrLiBUaGF0JiMzOTtzIHRoZSB0eXBpY2FsIGJlaGF2aW9yLgoKSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLiBCZWZvcmUgSSBqdW1wIHRvIGFueSBjb25jbHVzaW9ucywgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGhvdyBgb2FfdGM2X3dyaXRlX3JlZ2lzdGVyYCBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogSSB0aGluayBpdCB3aWxsIGZhaWwuIExldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWFraW5nIGFueSBhc3N1bXB0aW9ucyBoZXJlLiBUaGUgZGV0YWlscyBhcmUgY3JpdGljYWwsIGVzcGVjaWFsbHkgd2l0aCB0aGlzIGtpbmQgb2YgaGFyZHdhcmUgaW50ZXJhY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgZnVuY3Rpb24gZG9lc24mIzM5O3QgaGF2ZSBzb21lIGtpbmQgb2Ygc2FmZWd1YXJkIGJ1aWx0IGludG8gaXQuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7XG4gICAyOlx0LypcbiAgIDM6XHQgKiBPUEVOIEFsbGlhbmNlIDEwQkFTReKAkVQxeCBNQUPigJFQSFkgU2VyaWFsIEludGVyZmFjZSBmcmFtZXdvcmtcbiAgIDQ6XHQgKlxuICAgNTpcdCAqIEF1dGhvcjogUGFydGhpYmFuIFZlZXJhc29vcmFuIFx1MDAzY3BhcnRoaWJhbi52ZWVyYXNvb3JhbkBtaWNyb2NoaXAuY29tXHUwMDNlXG4gICA2Olx0ICovXG4gICA3Olx0XG4gICA4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuICAgOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9sbC5oXHUwMDNlXG4gIDEwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbiAgMTE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvLmhcdTAwM2VcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L29hX3RjNi5oXHUwMDNlXG4gIDE0Olx0XG4gIDE1Olx0LyogT1BFTiBBbGxpYW5jZSBUQzYgcmVnaXN0ZXJzICovXG4gIDE2Olx0LyogU3RhbmRhcmQgQ2FwYWJpbGl0aWVzIFJlZ2lzdGVyICovXG4gIDE3Olx0I2RlZmluZSBPQV9UQzZfUkVHX1NURENBUFx0XHRcdDB4MDAwMlxuICAxODpcdCNkZWZpbmUgU1REQ0FQX0RJUkVDVF9QSFlfUkVHX0FDQ0VTU1x0XHRCSVQoOClcbiAgMTk6XHRcbiAgMjA6XHQvKiBSZXNldCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi9cbiAgMjE6XHQjZGVmaW5lIE9BX1RDNl9SRUdfUkVTRVRcdFx0XHQweDAwMDNcbiAgMjI6XHQjZGVmaW5lIFJFU0VUX1NXUkVTRVRcdFx0XHRcdEJJVCgwKVx0LyogU29mdHdhcmUgUmVzZXQgKi9cbiAgMjM6XHRcbiAgMjQ6XHQvKiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICMwICovXG4gIDI1Olx0I2RlZmluZSBPQV9UQzZfUkVHX0NPTkZJRzBcdFx0XHQweDAwMDRcbiAgMjY6XHQjZGVmaW5lIENPTkZJRzBfU1lOQ1x0XHRcdFx0QklUKDE1KVxuICAyNzpcdCNkZWZpbmUgQ09ORklHMF9aQVJGRV9FTkFCTEVcdFx0XHRCSVQoMTIpXG4gIDI4Olx0XG4gIDI5Olx0LyogU3RhdHVzIFJlZ2lzdGVyICMwICovXG4gIDMwOlx0I2RlZmluZSBPQV9UQzZfUkVHX1NUQVRVUzBcdFx0XHQweDAwMDhcbiAgMzE6XHQjZGVmaW5lIFNUQVRVUzBfUkVTRVRDXHRcdFx0XHRCSVQoNilcdC8qIFJlc2V0IENvbXBsZXRlICovXG4gIDMyOlx0I2RlZmluZSBTVEFUVVMwX0hFQURFUl9FUlJPUlx0XHRcdEJJVCg1KVxuICAzMzpcdCNkZWZpbmUgU1RBVFVTMF9MT1NTX09GX0ZSQU1FX0VSUk9SXHRcdEJJVCg0KVxuICAzNDpcdCNkZWZpbmUgU1RBVFVTMF9SWF9CVUZGRVJfT1ZFUkZMT1dfRVJST1JcdEJJVCgzKVxuICAzNTpcdCNkZWZpbmUgU1RBVFVTMF9UWF9QUk9UT0NPTF9FUlJPUlx0XHRCSVQoMClcbiAgMzY6XHRcbiAgMzc6XHQvKiBCdWZmZXIgU3RhdHVzIFJlZ2lzdGVyICovXG4gIDM4Olx0I2RlZmluZSBPQV9UQzZfUkVHX0JVRkZFUl9TVEFUVVNcdFx0MHgwMDBCXG4gIDM5Olx0I2RlZmluZSBCVUZGRVJfU1RBVFVTX1RYX0NSRURJVFNfQVZBSUxBQkxFXHRHRU5NQVNLKDE1LCA4KVxuICA0MDpcdCNkZWZpbmUgQlVGRkVSX1NUQVRVU19SWF9DSFVOS1NfQVZBSUxBQkxFXHRHRU5NQVNLKDcsIDApXG4gIDQxOlx0XG4gIDQyOlx0LyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgIzAgKi9cbiAgNDM6XHQjZGVmaW5lIE9BX1RDNl9SRUdfSU5UX01BU0swXHRcdFx0MHgwMDBDXG4gIDQ0Olx0I2RlZmluZSBJTlRfTUFTSzBfSEVBREVSX0VSUl9NQVNLXHRcdEJJVCg1KVxuICA0NTpcdCNkZWZpbmUgSU5UX01BU0swX0xPU1NfT0ZfRlJBTUVfRVJSX01BU0tcdEJJVCg0KVxuICA0NjpcdCNkZWZpbmUgSU5UX01BU0swX1JYX0JVRkZFUl9PVkVSRkxPV19FUlJfTUFTS1x0QklUKDMpXG4gIDQ3Olx0I2RlZmluZSBJTlRfTUFTSzBfVFhfUFJPVE9DT0xfRVJSX01BU0tcdFx0QklUKDApXG4gIDQ4Olx0I2RlZmluZSBJTlRfTUFTSzBfQUxMX0lOVEVSUlVQVFMgICAgICAgICAgICAgICAgKEdFTk1BU0soNSwgMCkgfCBcXFxuICA0OTpcdFx0XHRcdFx0XHRcdCBHRU5NQVNLKDEyLCA3KSlcbiAgNTA6XHRcbiAgNTE6XHQvKiBQSFkgQ2xhdXNlIDIyIHJlZ2lzdGVycyBiYXNlIGFkZHJlc3MgYW5kIG1hc2sgKi9cbiAgNTI6XHQjZGVmaW5lIE9BX1RDNl9QSFlfU1REX1JFR19BRERSX0JBU0VcdFx0MHhGRjAwXG4gIDUzOlx0I2RlZmluZSBPQV9UQzZfUEhZX1NURF9SRUdfQUREUl9NQVNLXHRcdDB4MUZcbiAgNTQ6XHRcbiAgNTU6XHQvKiBDb250cm9sIGNvbW1hbmQgaGVhZGVyICovXG4gIDU2Olx0I2RlZmluZSBPQV9UQzZfQ1RSTF9IRUFERVJfREFUQV9OT1RfQ1RSTFx0QklUKDMxKVxuICA1NzpcdCNkZWZpbmUgT0FfVEM2X0NUUkxfSEVBREVSX1dSSVRFX05PVF9SRUFEXHRCSVQoMjkpXG4gIDU4Olx0I2RlZmluZSBPQV9UQzZfQ1RSTF9IRUFERVJfTUVNX01BUF9TRUxFQ1RPUlx0R0VOTUFTSygyNywgMjQpXG4gIDU5Olx0I2RlZmluZSBPQV9UQzZfQ1RSTF9IRUFERVJfQUREUlx0XHRcdEdFTk1BU0soMjMsIDgpXG4gIDYwOlx0I2RlZmluZSBPQV9UQzZfQ1RSTF9IRUFERVJfTEVOR1RIXHRcdEdFTk1BU0soNywgMSlcbiAgNjE6XHQjZGVmaW5lIE9BX1RDNl9DVFJMX0hFQURFUl9QQVJJVFlcdFx0QklUKDApXG4gIDYyOlx0XG4gIDYzOlx0LyogRGF0YSBoZWFkZXIgKi9cbiAgNjQ6XHQjZGVmaW5lIE9BX1RDNl9EQVRBX0hFQURFUl9EQVRBX05PVF9DVFJMXHRCSVQoMzEpXG4gIDY1Olx0I2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfREFUQV9WQUxJRFx0XHRCSVQoMjEpXG4gIDY2Olx0I2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfU1RBUlRfVkFMSURcdFx0QklUKDIwKVxuICA2NzpcdCNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX1NUQVJUX1dPUkRfT0ZGU0VUXHRHRU5NQVNLKDE5LCAxNilcbiAgNjg6XHQjZGVmaW5lIE9BX1RDNl9EQVRBX0hFQURFUl9FTkRfVkFMSURcdFx0QklUKDE0KVxuICA2OTpcdCNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX0VORF9CWVRFX09GRlNFVFx0R0VOTUFTSygxMywgOClcbiAgNzA6XHQjZGVmaW5lIE9BX1RDNl9EQVRBX0hFQURFUl9QQVJJVFlcdFx0QklUKDApXG4gIDcxOlx0XG4gIDcyOlx0LyogRGF0YSBmb290ZXIgKi9cbiAgNzM6XHQjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9FWFRFTkRFRF9TVFNcdFx0QklUKDMxKVxuICA3NDpcdCNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX1JYRF9IRUFERVJfQkFEXHRCSVQoMzApXG4gIDc1Olx0I2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfQ09ORklHX1NZTkNcdFx0QklUKDI5KVxuICA3NjpcdCNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX1JYX0NIVU5LU1x0XHRHRU5NQVNLKDI4LCAyNClcbiAgNzc6XHQjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9EQVRBX1ZBTElEXHRcdEJJVCgyMSlcbiAgNzg6XHQjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9TVEFSVF9WQUxJRFx0XHRCSVQoMjApXG4gIDc5Olx0I2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfU1RBUlRfV09SRF9PRkZTRVRcdEdFTk1BU0soMTksIDE2KVxuICA4MDpcdCNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX0VORF9WQUxJRFx0XHRCSVQoMTQpXG4gIDgxOlx0I2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfRU5EX0JZVEVfT0ZGU0VUXHRHRU5NQVNLKDEzLCA4KVxuICA4MjpcdCNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX1RYX0NSRURJVFNcdFx0R0VOTUFTSyg1LCAxKVxuICA4MzpcdFxuICA4NDpcdC8qIFBIWSDigJMgQ2xhdXNlIDQ1IHJlZ2lzdGVycyBtZW1vcnkgbWFwIHNlbGVjdG9yIChNTVMpIGFzIHBlciB0YWJsZSA2IGluIHRoZVxuICA4NTpcdCAqIE9QRU4gQWxsaWFuY2Ugc3BlY2lmaWNhdGlvbi5cbiAgODY6XHQgKi9cbiAgODc6XHQjZGVmaW5lIE9BX1RDNl9QSFlfQzQ1X1BDU19NTVMyXHRcdFx0Mlx0LyogTU1EIDMgKi9cbiAgODg6XHQjZGVmaW5lIE9BX1RDNl9QSFlfQzQ1X1BNQV9QTURfTU1TM1x0XHQzXHQvKiBNTUQgMSAqL1xuICA4OTpcdCNkZWZpbmUgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0XHRcdDRcdC8qIE1NRCAzMSAqL1xuICA5MDpcdCNkZWZpbmUgT0FfVEM2X1BIWV9DNDVfQVVUT19ORUdfTU1TNVx0XHQ1XHQvKiBNTUQgNyAqL1xuICA5MTpcdCNkZWZpbmUgT0FfVEM2X1BIWV9DNDVfUE9XRVJfVU5JVF9NTVM2XHRcdDZcdC8qIE1NRCAxMyAqL1xuICA5MjpcdFxuICA5MzpcdCNkZWZpbmUgT0FfVEM2X0NUUkxfSEVBREVSX1NJWkVcdFx0XHQ0XG4gIDk0Olx0I2RlZmluZSBPQV9UQzZfQ1RSTF9SRUdfVkFMVUVfU0laRVx0XHQ0XG4gIDk1Olx0I2RlZmluZSBPQV9UQzZfQ1RSTF9JR05PUkVEX1NJWkVcdFx0NFxuICA5NjpcdCNkZWZpbmUgT0FfVEM2X0NUUkxfTUFYX1JFR0lTVEVSU1x0XHQxMjhcbiAgOTc6XHQjZGVmaW5lIE9BX1RDNl9DVFJMX1NQSV9CVUZfU0laRVx0XHQoT0FfVEM2X0NUUkxfSEVBREVSX1NJWkUgJiM0MztcXFxuICA5ODpcdFx0XHRcdFx0XHRcdChPQV9UQzZfQ1RSTF9NQVhfUkVHSVNURVJTICpcXFxuICA5OTpcdFx0XHRcdFx0XHRcdE9BX1RDNl9DVFJMX1JFR19WQUxVRV9TSVpFKSAmIzQzO1xcXG4gMTAwOlx0XHRcdFx0XHRcdFx0T0FfVEM2X0NUUkxfSUdOT1JFRF9TSVpFKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzAzMQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgYG9hX3RjNmAgU1BJIERyaXZlciBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyB0aGUgYG9hX3RjNmAgZnJhbWV3b3JrIGlzIGEgKnB1cmUqIFNQSSBkcml2ZXIsIHdoaWNoIGltbWVkaWF0ZWx5IG5hcnJvd3MgZG93biBpdHMgYmVoYXZpb3IuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93IOKAkyBpdCYjMzk7cyBnb2luZyB0byBiZSBmdW5kYW1lbnRhbGx5IHJlbGlhbnQgb24gU1BJIGNvbW11bmljYXRpb24sIG5vIGhpZGRlbiBjb21wbGV4aXRpZXMuIE5vdywgaWYgSSYjMzk7bSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LCB3aXRob3V0IGFueSBhY3R1YWwgaGFyZHdhcmUgcHJlc2VudCwgYG9hX3RjNl9pbml0YCBpcyAqYm91bmQqIHRvIGhpdCBhIHNuYWcgcHJldHR5IGVhcmx5IG9uLiBUaGUgd2hvbGUgcG9pbnQgb2YgaW5pdGlhbGl6YXRpb24gaXMgdG8gZXN0YWJsaXNoIGEgY29ubmVjdGlvbiB0byBoYXJkd2FyZSwgYW5kIGEgY2hlY2sgbGlrZSBgb2FfdGM2X2NoZWNrX3N0YXR1c2AsIG9yIHNvbWV0aGluZyBlcXVpdmFsZW50LCBpcyBnb2luZyB0byBiZSB0aGUgc21va2luZyBndW4uIEl0JiMzOTtzIGdvaW5nIHRvIHRyeSB0byByZWFkIHRob3NlIFNQSSByZWdpc3RlcnMsIGFuZCB0aGUgbGFjayBvZiBhIHJlc3BvbnNlLCBvciBhbiB1bmV4cGVjdGVkIHJlc3BvbnNlLCB3aWxsIHRyaWdnZXIgYSBmYWlsdXJlLiBUaGlzIGxhY2sgb2YgaGFyZHdhcmUgaXMgZ29pbmcgdG8gYmUgdGhlIGNyaXRpY2FsIGZhY3RvciBpbiBkZXRlcm1pbmluZyBpdHMgc3VjY2VzcyBvciBmYWlsdXJlLiBBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBvYV90YzZfaW5pdGAgYW5kIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQwMDpcdCAqIFJldHVybjogcG9pbnRlciByZWZlcmVuY2UgdG8gdGhlIG9hX3RjNiBzdHJ1Y3R1cmUgaWYgdGhlIE1BQy1QSFlcbjE0MDE6XHQgKiBpbml0aWFsaXphdGlvbiBpcyBzdWNjZXNzZnVsIG90aGVyd2lzZSBOVUxMLlxuMTQwMjpcdCAqL1xuMTQwMzpcdHN0cnVjdCBvYV90YzYgKm9hX3RjNl9pbml0KHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4xNDA0Olx0e1xuMTQwNTpcdFx0c3RydWN0IG9hX3RjNiAqdGM2O1xuMTQwNjpcdFx0aW50IHJldDtcbjE0MDc6XHRcbjE0MDg6XHRcdHRjNiA9IGRldm1fa3phbGxvYyhcdTAwMjZzcGktXHUwMDNlZGV2LCBzaXplb2YoKnRjNiksIEdGUF9LRVJORUwpO1xuMTQwOTpcdFx0aWYgKCF0YzYpXG4xNDEwOlx0XHRcdHJldHVybiBOVUxMO1xuMTQxMTpcdFxuMTQxMjpcdFx0dGM2LVx1MDAzZXNwaSA9IHNwaTtcbjE0MTM6XHRcdHRjNi1cdTAwM2VuZXRkZXYgPSBuZXRkZXY7XG4xNDE0Olx0XHRTRVRfTkVUREVWX0RFVihuZXRkZXYsIFx1MDAyNnNwaS1cdTAwM2VkZXYpO1xuMTQxNTpcdFx0bXV0ZXhfaW5pdChcdTAwMjZ0YzYtXHUwMDNlc3BpX2N0cmxfbG9jayk7XG4xNDE2Olx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZ0YzYtXHUwMDNldHhfc2tiX2xvY2spO1xuMTQxNzpcdFxuMTQxODpcdFx0LyogU2V0IHRoZSBTUEkgY29udHJvbGxlciB0byBwdW1wIGF0IHJlYWx0aW1lIHByaW9yaXR5ICovXG4xNDE5Olx0XHR0YzYtXHUwMDNlc3BpLVx1MDAzZXJ0ID0gdHJ1ZTtcbjE0MjA6XHRcdGlmIChzcGlfc2V0dXAodGM2LVx1MDAzZXNwaSkgXHUwMDNjIDApXG4xNDIxOlx0XHRcdHJldHVybiBOVUxMO1xuMTQyMjpcdFxuMTQyMzpcdFx0dGM2LVx1MDAzZXNwaV9jdHJsX3R4X2J1ZiA9IGRldm1fa3phbGxvYyhcdTAwMjZ0YzYtXHUwMDNlc3BpLVx1MDAzZWRldixcbjE0MjQ6XHRcdFx0XHRcdFx0ICAgIE9BX1RDNl9DVFJMX1NQSV9CVUZfU0laRSxcbjE0MjU6XHRcdFx0XHRcdFx0ICAgIEdGUF9LRVJORUwpO1xuMTQyNjpcdFx0aWYgKCF0YzYtXHUwMDNlc3BpX2N0cmxfdHhfYnVmKVxuMTQyNzpcdFx0XHRyZXR1cm4gTlVMTDtcbjE0Mjg6XHRcbjE0Mjk6XHRcdHRjNi1cdTAwM2VzcGlfY3RybF9yeF9idWYgPSBkZXZtX2t6YWxsb2MoXHUwMDI2dGM2LVx1MDAzZXNwaS1cdTAwM2VkZXYsXG4xNDMwOlx0XHRcdFx0XHRcdCAgICBPQV9UQzZfQ1RSTF9TUElfQlVGX1NJWkUsXG4xNDMxOlx0XHRcdFx0XHRcdCAgICBHRlBfS0VSTkVMKTtcbjE0MzI6XHRcdGlmICghdGM2LVx1MDAzZXNwaV9jdHJsX3J4X2J1ZilcbjE0MzM6XHRcdFx0cmV0dXJuIE5VTEw7XG4xNDM0Olx0XG4xNDM1Olx0XHR0YzYtXHUwMDNlc3BpX2RhdGFfdHhfYnVmID0gZGV2bV9remFsbG9jKFx1MDAyNnRjNi1cdTAwM2VzcGktXHUwMDNlZGV2LFxuMTQzNjpcdFx0XHRcdFx0XHQgICAgT0FfVEM2X1NQSV9EQVRBX0JVRl9TSVpFLFxuMTQzNzpcdFx0XHRcdFx0XHQgICAgR0ZQX0tFUk5FTCk7XG4xNDM4Olx0XHRpZiAoIXRjNi1cdTAwM2VzcGlfZGF0YV90eF9idWYpXG4xNDM5Olx0XHRcdHJldHVybiBOVUxMO1xuMTQ0MDpcdFxuMTQ0MTpcdFx0dGM2LVx1MDAzZXNwaV9kYXRhX3J4X2J1ZiA9IGRldm1fa3phbGxvYyhcdTAwMjZ0YzYtXHUwMDNlc3BpLVx1MDAzZWRldixcbjE0NDI6XHRcdFx0XHRcdFx0ICAgIE9BX1RDNl9TUElfREFUQV9CVUZfU0laRSxcbjE0NDM6XHRcdFx0XHRcdFx0ICAgIEdGUF9LRVJORUwpO1xuMTQ0NDpcdFx0aWYgKCF0YzYtXHUwMDNlc3BpX2RhdGFfcnhfYnVmKVxuMTQ0NTpcdFx0XHRyZXR1cm4gTlVMTDtcbjE0NDY6XHRcbjE0NDc6XHRcdHJldCA9IG9hX3RjNl9zd19yZXNldF9tYWNwaHkodGM2KTtcbjE0NDg6XHRcdGlmIChyZXQpIHtcbjE0NDk6XHRcdFx0ZGV2X2VycihcdTAwMjZ0YzYtXHUwMDNlc3BpLVx1MDAzZWRldixcbjE0NTA6XHRcdFx0XHRcJiMzNDtNQUMtUEhZIHNvZnR3YXJlIHJlc2V0IGZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG4xNDUxOlx0XHRcdHJldHVybiBOVUxMO1xuMTQ1MjpcdFx0fVxuMTQ1MzpcdFxuMTQ1NDpcdFx0cmV0ID0gb2FfdGM2X3VubWFza19tYWNwaHlfZXJyb3JfaW50ZXJydXB0cyh0YzYpO1xuMTQ1NTpcdFx0aWYgKHJldCkge1xuMTQ1NjpcdFx0XHRkZXZfZXJyKFx1MDAyNnRjNi1cdTAwM2VzcGktXHUwMDNlZGV2LFxuMTQ1NzpcdFx0XHRcdFwmIzM0O01BQy1QSFkgZXJyb3IgaW50ZXJydXB0cyB1bm1hc2sgZmFpbGVkOiAlZFxcblwmIzM0OywgcmV0KTtcbjE0NTg6XHRcdFx0cmV0dXJuIE5VTEw7XG4xNDU5Olx0XHR9XG4xNDYwOlx0XG4xNDYxOlx0XHRyZXQgPSBvYV90YzZfcGh5X2luaXQodGM2KTtcbjE0NjI6XHRcdGlmIChyZXQpIHtcbjE0NjM6XHRcdFx0ZGV2X2VycihcdTAwMjZ0YzYtXHUwMDNlc3BpLVx1MDAzZWRldixcbjE0NjQ6XHRcdFx0XHRcJiMzNDtNQUMgaW50ZXJuYWwgUEhZIGluaXRpYWxpemF0aW9uIGZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG4xNDY1Olx0XHRcdHJldHVybiBOVUxMO1xuMTQ2NjpcdFx0fVxuMTQ2NzpcdFxuMTQ2ODpcdFx0cmV0ID0gb2FfdGM2X2VuYWJsZV9kYXRhX3RyYW5zZmVyKHRjNik7XG4xNDY5Olx0XHRpZiAocmV0KSB7XG4xNDcwOlx0XHRcdGRldl9lcnIoXHUwMDI2dGM2LVx1MDAzZXNwaS1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byBlbmFibGUgZGF0YSB0cmFuc2ZlcjogJWRcXG5cJiMzNDssXG4xNDcxOlx0XHRcdFx0cmV0KTtcbjE0NzI6XHRcdFx0Z290byBwaHlfZXhpdDtcbjE0NzM6XHRcdH1cbjE0NzQ6XHRcbjE0NzU6XHRcdHJldCA9IG9hX3RjNl91cGRhdGVfYnVmZmVyX3N0YXR1c19mcm9tX3JlZ2lzdGVyKHRjNik7XG4xNDc2Olx0XHRpZiAocmV0KSB7XG4xNDc3Olx0XHRcdGRldl9lcnIoXHUwMDI2dGM2LVx1MDAzZXNwaS1cdTAwM2VkZXYsXG4xNDc4Olx0XHRcdFx0XCYjMzQ7RmFpbGVkIHRvIHVwZGF0ZSBidWZmZXIgc3RhdHVzOiAlZFxcblwmIzM0OywgcmV0KTtcbjE0Nzk6XHRcdFx0Z290byBwaHlfZXhpdDtcbjE0ODA6XHRcdH1cbjE0ODE6XHRcbjE0ODI6XHRcdHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoXHUwMDI2dGM2LVx1MDAzZXNwaS1cdTAwM2VkZXYsIHRjNi1cdTAwM2VzcGktXHUwMDNlaXJxLFxuMTQ4MzpcdFx0XHRcdFx0XHRvYV90YzZfbWFjcGh5X2lzcixcbjE0ODQ6XHRcdFx0XHRcdFx0b2FfdGM2X21hY3BoeV90aHJlYWRlZF9pcnEsXG4xNDg1Olx0XHRcdFx0XHRcdElSUUZfVFJJR0dFUl9MT1cgfCBJUlFGX09ORVNIT1QsXG4xNDg2Olx0XHRcdFx0XHRcdGRldl9uYW1lKFx1MDAyNnRjNi1cdTAwM2VzcGktXHUwMDNlZGV2KSwgdGM2KTtcbjE0ODc6XHRcdGlmIChyZXQpIHtcbjE0ODg6XHRcdFx0ZGV2X2VycihcdTAwMjZ0YzYtXHUwMDNlc3BpLVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHJlcXVlc3QgbWFjcGh5IGlzciAlZFxcblwmIzM0OyxcbjE0ODk6XHRcdFx0XHRyZXQpO1xuMTQ5MDpcdFx0XHRnb3RvIHBoeV9leGl0O1xuMTQ5MTpcdFx0fVxuMTQ5MjpcdFxuMTQ5MzpcdFx0Lyogb2FfdGM2X3N3X3Jlc2V0X21hY3BoeSgpIGZ1bmN0aW9uIHJlc2V0cyBhbmQgY2xlYXJzIHRoZSBNQUMtUEhZIHJlc2V0XG4xNDk0Olx0XHQgKiBjb21wbGV0ZSBzdGF0dXMuIElSUSBpcyBhbHNvIGFzc2VydGVkIG9uIHJlc2V0IGNvbXBsZXRpb24gYW5kIGl0IGlzXG4xNDk1Olx0XHQgKiByZW1haW4gYXNzZXJ0ZWQgdW50aWwgTUFDLVBIWSByZWNlaXZlcyBhIGRhdGEgY2h1bmsuIFNvIHBlcmZvcm1pbmcgYW5cbjE0OTY6XHRcdCAqIGVtcHR5IGRhdGEgY2h1bmsgdHJhbnNtaXNzaW9uIHdpbGwgZGVhc3NlcnQgdGhlIElSUS4gUmVmZXIgc2VjdGlvblxuMTQ5NzpcdFx0ICogNy43IGFuZCA5LjIuOC44IGluIHRoZSBPUEVOIEFsbGlhbmNlIHNwZWNpZmljYXRpb24gZm9yIG1vcmUgZGV0YWlscy5cbjE0OTg6XHRcdCAqL1xuMTQ5OTpcdFx0dGM2LVx1MDAzZWludF9mbGFnID0gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5NzgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYGxhbjg2NXhfcHJvYmVgIFNjZW5hcmlvIGluIFN5emthbGxlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgb2FfdGM2X3N3X3Jlc2V0X21hY3BoeWAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyB0byBiZSBoZWF2aWx5IHJlbGlhbnQgb24gU1BJIHRyYW5zZmVycy4gVGhlIGNyaXRpY2FsIHBhdGggaGVyZSBsZWFkcyB0byBgb2FfdGM2X2luaXRgLCB3aGljaCByZXR1cm5zIE5VTEwgaWYgdGhlIFNQSSB0cmFuc2ZlcnMgZmFpbCwgdWx0aW1hdGVseSBjYXVzaW5nIGBsYW44NjV4X3Byb2JlYCB0byBmYWlsLiBUaGUgY29yZSBpc3N1ZSBpcyB3aGV0aGVyIG9yIG5vdCBTeXprYWxsZXIgY2FuIG1lYW5pbmdmdWxseSBpbnRlcmFjdCB3aXRoIFNQSSBkZXZpY2VzIHRvIGdldCB0byB0aGF0IHByb2JlIGZ1bmN0aW9uLgoKTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCBnZW5lcmljIFNQSSBlbXVsYXRpb24gaXMgbGlrZWx5IG1pc3NpbmcgZnJvbSBTeXprYWxsZXIuIEkga25vdyBpdCBsZWFucyB0b3dhcmRzIHJlYWwgaGFyZHdhcmUgaW50ZXJhY3Rpb24uIFdoaWxlIGBzcGlkZXZgIGV4aXN0cyBhcyBhIGNoYXJhY3RlciBkZXZpY2UsIHRoYXTigJlzIGp1c3QgYSB1c2VyLXNwYWNlIGludGVyZmFjZSB0byBhICpkcml2ZXIqLCBub3QgYW4gZW11bGF0b3Igb2YgU1BJIGZ1bmN0aW9uYWxpdHkuIFNpbWlsYXJseSwgYHNwaS1sb29wYmFjay10ZXN0YCBpcywgd2VsbCwganVzdCBmb3IgdGVzdGluZyBhbmQgbm90IGEgcGF0aCB0byBnZXR0aW5nIHRoZSBgbGFuODY1eGAgZGV2aWNlIGluaXRpYWxpemVkLiBJIG5lZWQgdG8gZmluZCBhIHdheSB0byBtYWtlIFN5emthbGxlciBzZWUgdGhlIGBsYW44NjV4YCBhbmQgcmVhY2ggdGhhdCBjcnVjaWFsIHByb2JlIGZ1bmN0aW9uLgoKQ2FuIFN5emthbGxlciBpbmplY3QgRGV2aWNlIFRyZWUgbm9kZXM/IE5vLCB0aGF0JiMzOTtzIG5vdCBpdHMgdHlwaWNhbCBhcHByb2FjaCwgZXhjZXB0IG1heWJlIHdpdGggY29uZmlnZnMgZm9yIGNlcnRhaW4gc3Vic3lzdGVtcywgYnV0IGRlZmluaXRlbHkgbm90IGZvciBTUEkgY29udHJvbGxlcnMuIEkgc3RhcnRlZCB3b25kZXJpbmcgaWYgSSBjb3VsZCB1c2Ugc29tZXRoaW5nIGxpa2UgYHN5el9kZXZsaW5rYCwgYnV0IEkgcXVpY2tseSBkaXNtaXNzZWQgdGhhdCBsaW5lIG9mIHRoaW5raW5nIGFzIGluY29ycmVjdC4KClRoZSBjb25jbHVzaW9uIHRoZW4gYmVjb21lcyBvYnZpb3VzOyBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQsIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUgb3IgYSBkZWNlbnQgZW11bGF0b3IsIEkgY2FuJiMzOTt0IHJlYWNoIGBsYW44NjV4X3Byb2JlYC4gSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIGludHJvZHVjZSBhbiBTUEkgY29udHJvbGxlciBpbnRvIHRoZSBzeXN0ZW0sIHNvbWV0aGluZyBTeXprYWxsZXIgY2FuIHJlY29nbml6ZS4gVGhhdCYjMzk7cyB3aGVuIEkgaGFkIHRoZSBpZGVhIG9mIGEgc29mdHdhcmUgU1BJIGNvbnRyb2xsZXIuIE1heWJlIHNvbWV0aGluZyBsaWtlIGBzcGktbW9ja3VwYCBvciBgc3BpLWdwaW9gIGNvdWxkIHdvcmsgaWYgaXQgZXhpc3RzLiBIb3dldmVyLCBpdCBzZWVtcyB0aGVyZSYjMzk7cyBubyBgc3BpLW1vY2t1cGAgaW4gdGhlIGtlcm5lbC4gYHNwaS1ncGlvYCBsb29rcyBwcm9taXNpbmcsIGJ1dCBJJiMzOTtkIHN0aWxsIG5lZWQgYSB3YXkgdG8gaW5zdGFudGlhdGUgdGhlIGBsYW44NjV4YCBTUEkgZGV2aWNlIG9uIGl0LCBnaXZlbiB0aGUgbGltaXRlZCBuYXR1cmUgb2YgU3l6a2FsbGVyJiMzOTtzIGRldmljZSBpbnN0YW50aWF0aW9uIGFiaWxpdGllcy4KClNvLCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gY3JlYXRlIHRoZSBgbGFuODY1eGAgZGV2aWNlIGl0c2VsZi4gSSB3aWxsIGhhdmUgdG8gc3RhcnQgYnkgY2hlY2tpbmcgaWYgSSBjYW4gY3JlYXRlIFNQSSBkZXZpY2VzIHZpYSBzeXNmcy4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBzdGFydCBkaWdnaW5nIHRvIHNlZSBpZiBJIGNhbiBldmVuIGdldCB0aGlzIGhhcmR3YXJlIGNvbm5lY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV3X2RldmljZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvc3BpLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3NwaS9zcGktYWx0ZXJhLWRmbC5jPTEyND1zdGF0aWMgaW50IGRmbF9zcGlfYWx0ZXJhX3Byb2JlKHN0cnVjdCBkZmxfZGV2aWNlICpkZmxfZGV2KVxuLS1cbmRyaXZlcnMvc3BpL3NwaS1hbHRlcmEtZGZsLmMtMTc0LVxuZHJpdmVycy9zcGkvc3BpLWFsdGVyYS1kZmwuYzoxNzU6XHRpZiAoIXNwaV9uZXdfZGV2aWNlKGhvc3QsIFx1MDAyNmJvYXJkX2luZm8pKSB7XG5kcml2ZXJzL3NwaS9zcGktYWx0ZXJhLWRmbC5jLTE3Ni1cdFx0ZGV2X2VycihkZXYsIFwmIzM0OyVzIGZhaWxlZCB0byBjcmVhdGUgU1BJIGRldmljZTogJXNcXG5cJiMzNDssXG4tLVxuZHJpdmVycy9zcGkvc3BpLWFsdGVyYS1wbGF0Zm9ybS5jPTM1PXN0YXRpYyBpbnQgYWx0ZXJhX3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvc3BpL3NwaS1hbHRlcmEtcGxhdGZvcm0uYy0xMTktXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBkYXRhLVx1MDAzZW51bV9kZXZpY2VzOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9zcGkvc3BpLWFsdGVyYS1wbGF0Zm9ybS5jOjEyMDpcdFx0XHRpZiAoIXNwaV9uZXdfZGV2aWNlKGhvc3QsIHBkYXRhLVx1MDAzZWRldmljZXMgJiM0MzsgaSkpXG5kcml2ZXJzL3NwaS9zcGktYWx0ZXJhLXBsYXRmb3JtLmMtMTIxLVx0XHRcdFx0ZGV2X3dhcm4oXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4tLVxuZHJpdmVycy9zcGkvc3BpLWJ1dHRlcmZseS5jPTE3Nj1zdGF0aWMgdm9pZCBidXR0ZXJmbHlfYXR0YWNoKHN0cnVjdCBwYXJwb3J0ICpwKVxuLS1cbmRyaXZlcnMvc3BpL3NwaS1idXR0ZXJmbHkuYy0yNjUtXHRwcC1cdTAwM2VpbmZvWzBdLmNvbnRyb2xsZXJfZGF0YSA9IHBwO1xuZHJpdmVycy9zcGkvc3BpLWJ1dHRlcmZseS5jOjI2NjpcdHBwLVx1MDAzZWRhdGFmbGFzaCA9IHNwaV9uZXdfZGV2aWNlKHBwLVx1MDAzZWJpdGJhbmcuY3RsciwgXHUwMDI2cHAtXHUwMDNlaW5mb1swXSk7XG5kcml2ZXJzL3NwaS9zcGktYnV0dGVyZmx5LmMtMjY3LVx0aWYgKHBwLVx1MDAzZWRhdGFmbGFzaClcbi0tXG5kcml2ZXJzL3NwaS9zcGktY2gzNDEuYz0xNDE9c3RhdGljIGludCBjaDM0MV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zixcbi0tXG5kcml2ZXJzL3NwaS9zcGktY2gzNDEuYy0yMDYtXG5kcml2ZXJzL3NwaS9zcGktY2gzNDEuYzoyMDc6XHRjaDM0MS1cdTAwM2VzcGlkZXYgPSBzcGlfbmV3X2RldmljZShjdHJsLCBcdTAwMjZjaGlwKTtcbmRyaXZlcnMvc3BpL3NwaS1jaDM0MS5jLTIwOC1cdGlmICghY2gzNDEtXHUwMDNlc3BpZGV2KSB7XG4tLVxuZHJpdmVycy9zcGkvc3BpLWNzNDJsNDMuYz0zMTI9c3RhdGljIGludCBjczQybDQzX3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvc3BpL3NwaS1jczQybDQzLmMtNDI2LVxuZHJpdmVycy9zcGkvc3BpLWNzNDJsNDMuYzo0Mjc6XHRcdGlmICghc3BpX25ld19kZXZpY2UocHJpdi1cdTAwM2VjdGxyLCBhbXBsX2luZm8pKVxuZHJpdmVycy9zcGkvc3BpLWNzNDJsNDMuYy00MjgtXHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHJpdi1cdTAwM2VkZXYsIC1FTk9ERVYsXG4tLVxuZHJpdmVycy9zcGkvc3BpLWNzNDJsNDMuYy00MzAtXG5kcml2ZXJzL3NwaS9zcGktY3M0Mmw0My5jOjQzMTpcdFx0aWYgKCFzcGlfbmV3X2RldmljZShwcml2LVx1MDAzZWN0bHIsIGFtcHJfaW5mbykpXG5kcml2ZXJzL3NwaS9zcGktY3M0Mmw0My5jLTQzMi1cdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwcml2LVx1MDAzZWRldiwgLUVOT0RFVixcbi0tXG5kcml2ZXJzL3NwaS9zcGktaW50ZWwuYz0xMzc1PXN0YXRpYyBpbnQgaW50ZWxfc3BpX3BvcHVsYXRlX2NoaXAoc3RydWN0IGludGVsX3NwaSAqaXNwaSlcbi0tXG5kcml2ZXJzL3NwaS9zcGktaW50ZWwuYy0xNDAxLVxuZHJpdmVycy9zcGkvc3BpLWludGVsLmM6MTQwMjpcdGlmICghc3BpX25ld19kZXZpY2UoaXNwaS1cdTAwM2Vob3N0LCBcdTAwMjZjaGlwKSlcbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jLTE0MDMtXHRcdHJldHVybiAtRU5PREVWO1xuLS1cbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jLTE0MzAtXG5kcml2ZXJzL3NwaS9zcGktaW50ZWwuYzoxNDMxOlx0aWYgKCFzcGlfbmV3X2RldmljZShpc3BpLVx1MDAzZWhvc3QsIFx1MDAyNmNoaXApKVxuZHJpdmVycy9zcGkvc3BpLWludGVsLmMtMTQzMi1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuZHJpdmVycy9zcGkvc3BpLWtzcGkyLmM9MzEwPXN0YXRpYyBpbnQga3NwaTJfcmVnaXN0ZXJfZGV2aWNlcyhzdHJ1Y3Qga3NwaTIgKmtzcGkpXG4tLVxuZHJpdmVycy9zcGkvc3BpLWtzcGkyLmMtMzE2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mga3NwaS1cdTAwM2VhdXhkZXYtXHUwMDNlaW5mb19zaXplOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9zcGkvc3BpLWtzcGkyLmM6MzE3Olx0XHRzdHJ1Y3Qgc3BpX2RldmljZSAqZGV2aWNlID0gc3BpX25ld19kZXZpY2Uoa3NwaS1cdTAwM2Vob3N0LCBcdTAwMjZpbmZvW2ldKTtcbmRyaXZlcnMvc3BpL3NwaS1rc3BpMi5jLTMxOC1cbi0tXG5kcml2ZXJzL3NwaS9zcGktbG03MGxscC5jPTE4OD1zdGF0aWMgdm9pZCBzcGlfbG03MGxscF9hdHRhY2goc3RydWN0IHBhcnBvcnQgKnApXG4tLVxuZHJpdmVycy9zcGkvc3BpLWxtNzBsbHAuYy0yNjYtXHRwcC1cdTAwM2VpbmZvLmNvbnRyb2xsZXJfZGF0YSA9IHBwO1xuZHJpdmVycy9zcGkvc3BpLWxtNzBsbHAuYzoyNjc6XHRwcC1cdTAwM2VzcGlkZXZfbG03MCA9IHNwaV9uZXdfZGV2aWNlKHBwLVx1MDAzZWJpdGJhbmcuY3RsciwgXHUwMDI2cHAtXHUwMDNlaW5mbyk7XG5kcml2ZXJzL3NwaS9zcGktbG03MGxscC5jLTI2OC1cdGlmIChwcC1cdTAwM2VzcGlkZXZfbG03MClcbi0tXG5kcml2ZXJzL3NwaS9zcGktbG03MGxscC5jLTI3MS1cdGVsc2Uge1xuZHJpdmVycy9zcGkvc3BpLWxtNzBsbHAuYzoyNzI6XHRcdGRldl93YXJuKFx1MDAyNnBkLVx1MDAzZWRldiwgXCYjMzQ7c3BpX25ld19kZXZpY2UgZmFpbGVkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvc3BpL3NwaS1sbTcwbGxwLmMtMjczLVx0XHRzdGF0dXMgPSAtRU5PREVWO1xuLS1cbmRyaXZlcnMvc3BpL3NwaS14aWxpbnguYz00MDI9c3RhdGljIGludCB4aWxpbnhfc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9zcGkvc3BpLXhpbGlueC5jLTUwOS1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGRhdGEtXHUwMDNlbnVtX2RldmljZXM7IGkmIzQzOyYjNDM7KVxuZHJpdmVycy9zcGkvc3BpLXhpbGlueC5jOjUxMDpcdFx0XHRzcGlfbmV3X2RldmljZShob3N0LCBwZGF0YS1cdTAwM2VkZXZpY2VzICYjNDM7IGkpO1xuZHJpdmVycy9zcGkvc3BpLXhpbGlueC5jLTUxMS1cdH1cbi0tXG5kcml2ZXJzL3NwaS9zcGkuYz03OTE9RVhQT1JUX1NZTUJPTF9HUEwoc3BpX2FkZF9kZXZpY2UpO1xuLS1cbmRyaXZlcnMvc3BpL3NwaS5jLTc5My0vKipcbmRyaXZlcnMvc3BpL3NwaS5jOjc5NDogKiBzcGlfbmV3X2RldmljZSAtIGluc3RhbnRpYXRlIG9uZSBuZXcgU1BJIGRldmljZVxuZHJpdmVycy9zcGkvc3BpLmMtNzk1LSAqIEBjdGxyOiBDb250cm9sbGVyIHRvIHdoaWNoIGRldmljZSBpcyBjb25uZWN0ZWRcbi0tXG5kcml2ZXJzL3NwaS9zcGkuYy04MDYtICovXG5kcml2ZXJzL3NwaS9zcGkuYzo4MDc6c3RydWN0IHNwaV9kZXZpY2UgKnNwaV9uZXdfZGV2aWNlKHN0cnVjdCBzcGlfY29udHJvbGxlciAqY3RscixcbmRyaXZlcnMvc3BpL3NwaS5jLTgwOC1cdFx0XHRcdCAgc3RydWN0IHNwaV9ib2FyZF9pbmZvICpjaGlwKVxuLS1cbmRyaXZlcnMvc3BpL3NwaS5jLTg2Mi19XG5kcml2ZXJzL3NwaS9zcGkuYzo4NjM6RVhQT1JUX1NZTUJPTF9HUEwoc3BpX25ld19kZXZpY2UpO1xuZHJpdmVycy9zcGkvc3BpLmMtODY0LVxuLS1cbmRyaXZlcnMvc3BpL3NwaS5jPTg5Mz1zdGF0aWMgdm9pZCBzcGlfbWF0Y2hfY29udHJvbGxlcl90b19ib2FyZGluZm8oc3RydWN0IHNwaV9jb250cm9sbGVyICpjdGxyLFxuLS1cbmRyaXZlcnMvc3BpL3NwaS5jLTkwMC1cbmRyaXZlcnMvc3BpL3NwaS5jOjkwMTpcdGRldiA9IHNwaV9uZXdfZGV2aWNlKGN0bHIsIGJpKTtcbmRyaXZlcnMvc3BpL3NwaS5jLTkwMi1cdGlmICghZGV2KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTYyNQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYGxhbjg2NXhgIERyaXZlciBhbmQgU3l6a2FsbGVyIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbGFuODY1eGAgZHJpdmVyIGFuZCB0aGUgc2l0dWF0aW9uIHdpdGggU3l6a2FsbGVyLCBhbmQgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O3ZlIGdvdC4gVW5saWtlIEkyQywgU1BJIGRldmljZXMgZG9uJiMzOTt0IGhhdmUgYSBjb252ZW5pZW50IHN5c2ZzIGludGVyZmFjZSBmb3IgZHluYW1pYyBjcmVhdGlvbi4gVGhleSYjMzk7cmUgdHlwaWNhbGx5IGJyb3VnaHQgdXAgYXQgYm9vdCB0aW1lIHRocm91Z2ggYm9hcmQgaW5mb3JtYXRpb24sIGRldmljZSB0cmVlIGNvbmZpZ3VyYXRpb25zLCBBQ1BJLCBvciBieSBiZWluZyBleHBsaWNpdGx5IGhhbmRsZWQgYnkgc3BlY2lmaWMgZHJpdmVycy4gVGhlIGBsYW44NjV4YCBpcyBhbiBTUEkgZGV2aWNlLCBzbyBpdCBmaXRzIHRoYXQgcGF0dGVybi4gVGhhdCBtZWFucywgd2l0aG91dCBzb21lIGN1c3RvbSBoYXJkd2FyZSBzZXR1cCBvciB0aGUgdXNlIG9mIGRldmljZSB0cmVlIChEVCkgb3ZlcmxheXMsIHdoaWNoIGFsbG93IGZvciBtb2RpZmljYXRpb25zIHRvIGEgRFQgYXQgcnVudGltZSwgeW91IGNhbiYjMzk7dCBqdXN0IGluc3RhbnRpYXRlIGl0IGZyb20gdXNlcnNwYWNlIGluIGEgc3RhbmRhcmQga2VybmVsLgoKTm93LCBoZXJlJiMzOTtzIHRoZSBraWNrZXI6IFN5emthbGxlciwgaW4gaXRzIFFFTVUgZW52aXJvbm1lbnQsIGRvZXNuJiMzOTt0IHV0aWxpemUgRFQgb3ZlcmxheXMsIGFzIGZhciBhcyBJIGtub3cuIFRoZXJlZm9yZSwgdGhlIGBsYW44NjV4X3Byb2JlYCBmdW5jdGlvbiwgd2hpY2ggaXMgdGhlIGVudHJ5IHBvaW50IGZvciBwcm9iaW5nIHRoZSBgbGFuODY1eGAgZGV2aWNlLCBpcyBpbmhlcmVudGx5IHVucmVhY2hhYmxlIHdpdGhpbiBhIFN5emthbGxlciB0ZXN0IGVudmlyb25tZW50LiBJdCBqdXN0IHdvbiYjMzk7dCBnZXQgY2FsbGVkLgoKR2l2ZW4gdGhhdCBgb2FfdGM2LmNgIHNlZW1zIHRvIGJlIHNvbGVseSBkZWRpY2F0ZWQgdG8gZnVuY3Rpb25hbGl0eSB0aWVkIHRvIHRoZSBgbGFuODY1eGAgZHJpdmVyLCBpdCBmb2xsb3dzIHRoYXQgdGhlIGNvZGUgd2l0aGluIGBvYV90YzYuY2AgaXMgYWxzbyB1bnJlYWNoYWJsZSBiZWNhdXNlIGl0cyBwcmltYXJ5IHVzZSBjYXNlIGlzIHdoZW4gYGxhbjg2NXhgIGlzIHJ1bm5pbmcuCgpJIHNob3VsZCBkb3VibGUgY2hlY2sgdG8gc2VlIGlmIGBvYV90YzZfaW5pdGAgaXMgdXNlZCBhbnl3aGVyZSBlbHNlIGluIHRoZSBrZXJuZWwsIGJ1dCBhcyBpdCBsb29rcyBsaWtlIGl0cyBkZWRpY2F0ZWQgdG8gdGhlIGBsYW44NjV4YCwgbXkgY3VycmVudCB0aGlua2luZyBpcyB0aGF0LCBpZiBgbGFuODY1eF9wcm9iZWAgaXNuJiMzOTt0IHJlYWNoZWQsIHRoZW4gYG9hX3RjNi5jYCBjYW5ub3QgYmUgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2FfdGM2X2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0PTQ1ND1UaGUgaW5jbHVkZS9saW51eC9vYV90YzYuaCBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0LTQ1NS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdDo0NTY6Li4gYzpmdW5jdGlvbjo6IHN0cnVjdCBvYV90YzYgKm9hX3RjNl9pbml0KHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIFxcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb2EtdGM2LWZyYW1ld29yay5yc3QtNDU3LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYz0zMzM9c3RhdGljIGludCBsYW44NjV4X3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jLTM0OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYzozNDk6XHRwcml2LVx1MDAzZXRjNiA9IG9hX3RjNl9pbml0KHNwaSwgbmV0ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYy0zNTAtXHRpZiAoIXByaXYtXHUwMDNldGM2KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmM9MTM5Mz1FWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfc3RhcnRfeG1pdCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMtMTM5NS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jOjEzOTY6ICogb2FfdGM2X2luaXQgLSBhbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIG9hX3RjNiBzdHJ1Y3R1cmUuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy0xMzk3LSAqIEBzcGk6IGRldmljZSB3aXRoIHdoaWNoIGRhdGEgd2lsbCBiZSBleGNoYW5nZWQuXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMtMTQwMi0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jOjE0MDM6c3RydWN0IG9hX3RjNiAqb2FfdGM2X2luaXQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTE0MDQte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTE1MDctfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmM6MTUwODpFWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfaW5pdCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy0xNTA5LVxuLS1cbmluY2x1ZGUvbGludXgvb2FfdGM2Lmg9MTM9c3RydWN0IG9hX3RjNjtcbmluY2x1ZGUvbGludXgvb2FfdGM2LmgtMTQtXG5pbmNsdWRlL2xpbnV4L29hX3RjNi5oOjE1OnN0cnVjdCBvYV90YzYgKm9hX3RjNl9pbml0KHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xuaW5jbHVkZS9saW51eC9vYV90YzYuaC0xNi12b2lkIG9hX3RjNl9leGl0KHN0cnVjdCBvYV90YzYgKnRjNik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTE2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZz1GYWxzZTogVW5yZWFjaGFibGUgQ29kZSBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIGF0IHRoaXMgcGF0Y2ggYW5kIEkmIzM5O20gcHJldHR5IGNvbmZpZGVudCBpbiBteSBhc3Nlc3NtZW50LiBUaGUgY29kZSBpcyBleGNsdXNpdmVseSBmb3IgdGhlIGBsYW44NjV4YCBkcml2ZXIsIHdoaWNoLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHNwZWNpZmljIHRvIHRoZSBNaWNyb2NoaXAgTEFOODY1MC8xIE1BQy1QSFkg4oCTIGFuIFNQSSBkZXZpY2UuIFRoZSBrZXkgaGVyZSBpcyB0aGF0IFNQSSBkZXZpY2VzIGNhbiYjMzk7dCBiZSBkeW5hbWljYWxseSBpbnN0YW50aWF0ZWQgaW4gc3l6a2FsbGVyLCBhbmQgdGhlcmUmIzM5O3Mgbm8gc29mdHdhcmUgZW11bGF0aW9uIGF2YWlsYWJsZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIE1BQy1QSFkuCgpJIGJyaWVmbHkgY29uc2lkZXJlZCBpZiBzeXprYWxsZXIgbWlnaHQgYmUgdXNpbmcgYHNwaWRldmAgdG8gc29tZWhvdyBpbmplY3QgZnVuY3Rpb25hbGl0eSwgYnV0IHRoYXQmIzM5O3MgZm9yICp1c2Vyc3BhY2UqIGFjdGluZyBhcyBhbiBTUEkgbWFzdGVyLCBub3QgZW11bGF0aW5nIHRoZSBkZXZpY2UgaXRzZWxmLiBUaGVuIEkgdGhvdWdodCBhYm91dCBgbWFjODAyMTFfaHdzaW1gLCB3aGljaCBlbXVsYXRlcyBXaS1GaSwgYnV0IHRoZXJlIGlzbiYjMzk7dCBhbiBlcXVpdmFsZW50IGZvciBTUEkgRXRoZXJuZXQgTUFDLVBIWXMuIEFuZCBgbmV0ZGV2c2ltYCBpcyBkZWZpbml0ZWx5IG5vdCB1c2luZyBgb2FfdGM2YC4KClRoZXJlZm9yZSwgdGhlIG1vZGlmaWNhdGlvbnMgdGhpcyBwYXRjaCBtYWtlcyBhcmUgaW4gY29kZSB0aGF0IGlzIGZ1bmRhbWVudGFsbHkgdW5yZWFjaGFibGUgd2l0aGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiBJdCYjMzk7cyB0aWVkIHRvIHZlcnkgc3BlY2lmaWMgU1BJIGhhcmR3YXJlLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgY2hlY2tlZCB0aGUgcHJvbXB0IGluc3RydWN0aW9ucyBhZ2Fpbi4gVGhleSBzcGVjaWZpY2FsbHkgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggaW52b2x2ZXMgY29kZSBwYXRocyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aXRoIHNvZnR3YXJlIGVtdWxhdGlvbi4gSXQgYWxzbyBjYWxscyBvdXQgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlLCB3aGljaCB0aGlzIGRlZmluaXRlbHkgaXMuIEl0IGFsbCBmaXRzIHBlcmZlY3RseS4KCkkmIzM5O3ZlIGFsc28gZG91YmxlLWNoZWNrZWQgYWxsIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMgZnJvbSBgb2FfdGM2YC4gVGhleSBhcmUgb25seSB1c2VkIGJ5IGBsYW44NjV4YC4gU28sIHVubGVzcyB0aGVyZSYjMzk7cyBzb21lIG9ic2N1cmUgaW5kaXJlY3QgcGF0aCBJJiMzOTttIG1pc3NpbmcsIHdoaWNoIEkmIzM5O20gY29uZmlkZW50IHRoZXJlIGlzbiYjMzk7dCwgdGhpcyBjb2RlIGlzIGNvbXBsZXRlbHkgaW5hY2Nlc3NpYmxlIHRvIG91ciBmdXp6aW5nIGVmZm9ydHMgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYV90YzZfc3RhcnRfeG1pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb2EtdGM2LWZyYW1ld29yay5yc3Q9NDg1PU1heGltdW0gb2YgMTI4IGNvbnNlY3V0aXZlIHJlZ2lzdGVycyBjYW4gYmUgcmVhZCBzdGFydGluZyBhdCBAYWRkcmVzcy5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdC00ODYtXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb2EtdGM2LWZyYW1ld29yay5yc3Q6NDg3Oi4uIGM6ZnVuY3Rpb246OiBuZXRkZXZfdHhfdCBvYV90YzZfc3RhcnRfeG1pdChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIFxcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb2EtdGM2LWZyYW1ld29yay5yc3QtNDg4LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmM9MjUxPXN0YXRpYyBuZXRkZXZfdHhfdCBsYW44NjV4X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jLTI1NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYzoyNTY6XHRyZXR1cm4gb2FfdGM2X3N0YXJ0X3htaXQocHJpdi1cdTAwM2V0YzYsIHNrYik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmMtMjU3LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYz0xMzUzPUVYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl96ZXJvX2FsaWduX3JlY2VpdmVfZnJhbWVfZW5hYmxlKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy0xMzU1LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmM6MTM1NjogKiBvYV90YzZfc3RhcnRfeG1pdCAtIGZ1bmN0aW9uIGZvciBzZW5kaW5nIHRoZSB0eCBza2Igd2hpY2ggY29uc2lzdHMgZXRoZXJuZXRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTEzNTctICogZnJhbWUuXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMtMTM2Ni0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jOjEzNjc6bmV0ZGV2X3R4X3Qgb2FfdGM2X3N0YXJ0X3htaXQoc3RydWN0IG9hX3RjNiAqdGM2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMtMTM2OC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMtMTM5Mi19XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYzoxMzkzOkVYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl9zdGFydF94bWl0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTEzOTQtXG4tLVxuaW5jbHVkZS9saW51eC9vYV90YzYuaD0yMT1pbnQgb2FfdGM2X3JlYWRfcmVnaXN0ZXJzKHN0cnVjdCBvYV90YzYgKnRjNiwgdTMyIGFkZHJlc3MsIHUzMiB2YWx1ZVtdLFxuaW5jbHVkZS9saW51eC9vYV90YzYuaC0yMi1cdFx0XHQgIHU4IGxlbmd0aCk7XG5pbmNsdWRlL2xpbnV4L29hX3RjNi5oOjIzOm5ldGRldl90eF90IG9hX3RjNl9zdGFydF94bWl0KHN0cnVjdCBvYV90YzYgKnRjNiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL2xpbnV4L29hX3RjNi5oLTI0LWludCBvYV90YzZfemVyb19hbGlnbl9yZWNlaXZlX2ZyYW1lX2VuYWJsZShzdHJ1Y3Qgb2FfdGM2ICp0YzYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDYxMgoJCQkJCQkJb3V0cHV0OiAxMDkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBc3Nlc3NtZW50IG9mIHRoZSBgV29ydGhGdXp6aW5nYCBQYXJhbWV0ZXIqKgoKUmlnaHQsIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhhdCBgV29ydGhGdXp6aW5nYCBwYXJhbWV0ZXIuIEJhc2VkIG9uIHdoYXQgSSYjMzk7dmUgc2VlbiwgaXQmIzM5O3MgcHJldHR5IGNsZWFyOiBpdCYjMzk7cyBvbmx5IHJlYWxseSB1c2VkLCBvciByZWxldmFudCwgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGBsYW44NjV4YCBkcml2ZXIuIEdpdmVuIHRoYXQgbGltaXRlZCBzY29wZSwgSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYGZhbHNlYC4gTm8gc2Vuc2UgaW4gZXhwZW5kaW5nIHJlc291cmNlcyBmdXp6aW5nIHNvbWV0aGluZyB0aGF0IGlzbiYjMzk7dCByZWFsbHkgcmVsZXZhbnQgb3V0c2lkZSB0aGF0IHNwZWNpZmljIG1vZHVsZS4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgYW5kIGVmZmljaWVudCBhcHByb2FjaCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPUEVOIEFsbGlhbmNlIDEwQkFTRS1UMXggTUFDLVBIWSBTZXJpYWwgSW50ZXJmYWNlIChvYV90YzYpIGZyYW1ld29yaywgd2hpY2ggaXMgY3VycmVudGx5IG9ubHkgdXNlZCBieSB0aGUgTWljcm9jaGlwIExBTjg2NXggU1BJIGRyaXZlci4gU2luY2UgU1BJIGRldmljZXMgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgY2Fubm90IGJlIGR5bmFtaWNhbGx5IGluc3RhbnRpYXRlZCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPUEVOIEFsbGlhbmNlIDEwQkFTRS1UMXggTUFDLVBIWSBTZXJpYWwgSW50ZXJmYWNlIChvYV90YzYpIGZyYW1ld29yaywgd2hpY2ggaXMgY3VycmVudGx5IG9ubHkgdXNlZCBieSB0aGUgTWljcm9jaGlwIExBTjg2NXggU1BJIGRyaXZlci4gU2luY2UgU1BJIGRldmljZXMgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgY2Fubm90IGJlIGR5bmFtaWNhbGx5IGluc3RhbnRpYXRlZCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAzOjI1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzoyNDozNS41MzcxNDY4MDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDgwNzA2NzU4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPUEVOIEFsbGlhbmNlIDEwQkFTRS1UMXggTUFDLVBIWSBTZXJpYWwgSW50ZXJmYWNlIChvYV90YzYpIGZyYW1ld29yaywgd2hpY2ggaXMgY3VycmVudGx5IG9ubHkgdXNlZCBieSB0aGUgTWljcm9jaGlwIExBTjg2NXggU1BJIGRyaXZlci4gU2luY2UgU1BJIGRldmljZXMgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgY2Fubm90IGJlIGR5bmFtaWNhbGx5IGluc3RhbnRpYXRlZCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAzOjI0OjM1LjUzNzE1MjI5OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY3MDU3OTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNmIxMmM3ZDgyOGRhZThhZWQxODU0MmVkY2UyMzk2NTJiMWQ5Mzc0Y1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwMzoyNDozNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jXFxuaW5kZXggMDcyN2Q1MzM0NWEzMy4uNmUyN2VkMzlhOTliZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jXFxuQEAgLTEyNyw3ICsxMjcsNyBAQCBzdHJ1Y3Qgb2FfdGM2IHtcXG4gXFx0dTE2IHNwaV9kYXRhX3R4X2J1Zl9vZmZzZXQ7XFxuIFxcdHUxNiB0eF9jcmVkaXRzO1xcbiBcXHR1OCByeF9jaHVua3NfYXZhaWxhYmxlO1xcbi1cXHRib29sIHJ4X2J1Zl9vdmVyZmxvdztcXG4rXFx0Ym9vbCB3YWl0X3VudGlsX3N0YXJ0X3ZhbGlkO1xcbiBcXHRib29sIGludF9mbGFnO1xcbiBcXHRib29sIGRpc2FibGVfdHJhZmZpYztcXG4gfTtcXG5AQCAtNDIzLDcgKzQyMyw3IEBAIHN0YXRpYyBpbnQgb2FfdGM2X21kaW9idXNfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZ251bSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgb2FfdGM2ICp0YzYgPSBidXMtXFx1MDAzZXByaXY7XFxuIFxcdHUzMiByZWd2YWw7XFxuLVxcdGJvb2wgcmV0O1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0cmV0ID0gb2FfdGM2X3JlYWRfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUEhZX1NURF9SRUdfQUREUl9CQVNFIHxcXG4gXFx0XFx0XFx0XFx0ICAgKHJlZ251bSBcXHUwMDI2IE9BX1RDNl9QSFlfU1REX1JFR19BRERSX01BU0spLFxcbkBAIC02NTIsNiArNjUyLDI2IEBAIHN0YXRpYyBpbnQgb2FfdGM2X2VuYWJsZV9kYXRhX3RyYW5zZmVyKHN0cnVjdCBvYV90YzYgKnRjNilcXG4gXFx0cmV0dXJuIG9hX3RjNl93cml0ZV9yZWdpc3Rlcih0YzYsIE9BX1RDNl9SRUdfQ09ORklHMCwgdmFsdWUpO1xcbiB9XFxuIFxcbisvKiBDYWxsZWQgd2hlbiBhIGZyYW1lIHRoYXQgaXMgbWVhbnQgdG8gYmUgdHJhbnNtaXR0ZWQsIGlzIGRyb3BwZWQuICovXFxuK3N0YXRpYyB2b2lkIG9hX3RjNl9kcm9wX3R4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0aWYgKHNrYikge1xcbitcXHRcXHR0YzYtXFx1MDAzZW5ldGRldi1cXHUwMDNlc3RhdHMudHhfZHJvcHBlZCsrO1xcbitcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqb2FfdGM2X2RldGFjaF93YWl0aW5nX3R4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYpXFxuK3tcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnRjNi1cXHUwMDNldHhfc2tiX2xvY2spO1xcbitcXHRza2IgPSB0YzYtXFx1MDAzZXdhaXRpbmdfdHhfc2tiO1xcbitcXHR0YzYtXFx1MDAzZXdhaXRpbmdfdHhfc2tiID0gTlVMTDtcXG4rXFxuK1xcdHJldHVybiBza2I7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIG9hX3RjNl9jbGVhbnVwX29uZ29pbmdfcnhfc2tiKHN0cnVjdCBvYV90YzYgKnRjNilcXG4ge1xcbiBcXHRpZiAodGM2LVxcdTAwM2VyeF9za2IpIHtcXG5AQCAtNjYzLDI5ICs2ODMsMzkgQEAgc3RhdGljIHZvaWQgb2FfdGM2X2NsZWFudXBfb25nb2luZ19yeF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2KVxcbiBcXG4gc3RhdGljIHZvaWQgb2FfdGM2X2NsZWFudXBfb25nb2luZ190eF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2KVxcbiB7XFxuLVxcdGlmICh0YzYtXFx1MDAzZW9uZ29pbmdfdHhfc2tiKSB7XFxuLVxcdFxcdHRjNi1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VzdGF0cy50eF9kcm9wcGVkKys7XFxuLVxcdFxcdGtmcmVlX3NrYih0YzYtXFx1MDAzZW9uZ29pbmdfdHhfc2tiKTtcXG4tXFx0XFx0dGM2LVxcdTAwM2VvbmdvaW5nX3R4X3NrYiA9IE5VTEw7XFxuLVxcdH1cXG4rXFx0b2FfdGM2X2Ryb3BfdHhfc2tiKHRjNiwgdGM2LVxcdTAwM2VvbmdvaW5nX3R4X3NrYik7XFxuK1xcdHRjNi1cXHUwMDNlb25nb2luZ190eF9za2IgPSBOVUxMO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBvYV90YzZfY2xlYW51cF93YWl0aW5nX3R4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYpXFxuIHtcXG4tXFx0aWYgKHRjNi1cXHUwMDNld2FpdGluZ190eF9za2IpIHtcXG4tXFx0XFx0dGM2LVxcdTAwM2VuZXRkZXYtXFx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQrKztcXG4tXFx0XFx0a2ZyZWVfc2tiKHRjNi1cXHUwMDNld2FpdGluZ190eF9za2IpO1xcbi1cXHRcXHR0YzYtXFx1MDAzZXdhaXRpbmdfdHhfc2tiID0gTlVMTDtcXG4tXFx0fVxcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ0YzYtXFx1MDAzZXR4X3NrYl9sb2NrKTtcXG4rXFx0c2tiID0gb2FfdGM2X2RldGFjaF93YWl0aW5nX3R4X3NrYih0YzYpO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dGM2LVxcdTAwM2V0eF9za2JfbG9jayk7XFxuK1xcbitcXHRvYV90YzZfZHJvcF90eF9za2IodGM2LCBza2IpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBvYV90YzZfZnJlZV9wZW5kaW5nX3NrYnMoc3RydWN0IG9hX3RjNiAqdGM2KVxcbitzdGF0aWMgdm9pZCBvYV90YzZfZnJlZV9vbmdvaW5nX3NrYnMoc3RydWN0IG9hX3RjNiAqdGM2KVxcbiB7XFxuIFxcdG9hX3RjNl9jbGVhbnVwX29uZ29pbmdfdHhfc2tiKHRjNik7XFxuIFxcdG9hX3RjNl9jbGVhbnVwX29uZ29pbmdfcnhfc2tiKHRjNik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG9hX3RjNl9mcmVlX3BlbmRpbmdfc2ticyhzdHJ1Y3Qgb2FfdGM2ICp0YzYpXFxuK3tcXG4rXFx0b2FfdGM2X2ZyZWVfb25nb2luZ19za2JzKHRjNik7XFxuIFxcdG9hX3RjNl9jbGVhbnVwX3dhaXRpbmdfdHhfc2tiKHRjNik7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIG9hX3RjNl9sb29rX2Zvcl9uZXdfZnJhbWUoc3RydWN0IG9hX3RjNiAqdGM2KVxcbit7XFxuK1xcdHRjNi1cXHUwMDNld2FpdF91bnRpbF9zdGFydF92YWxpZCA9IHRydWU7XFxuK1xcdG9hX3RjNl9jbGVhbnVwX29uZ29pbmdfcnhfc2tiKHRjNik7XFxuK31cXG4rXFxuIC8qIElmIHRoZSBmYWlsdXJlIGlzIGF0IFNQSSBpbnRlcmZhY2UgbGV2ZWwsIG1hc2tpbmcgYW5kIGNsZWFyaW5nXFxuICAqIHRoZSBpbnRlcnJ1cHQgb2YgdGhlIGRldmljZSB3b24ndCB3b3JrLiBTaW5jZSBTUEkgaW50ZXJydXB0IGlzXFxuICAqIGRpc2FibGVkLCBpdCBzaG91bGQgc3RvcCB0aGUgcmVwZWF0ZWQgaW50ZXJydXB0cy5cXG5AQCAtNjkzLDkgKzcyMywyMSBAQCBzdGF0aWMgdm9pZCBvYV90YzZfZnJlZV9wZW5kaW5nX3NrYnMoc3RydWN0IG9hX3RjNiAqdGM2KVxcbiBzdGF0aWMgdm9pZCBvYV90YzZfZGlzYWJsZV90cmFmZmljKHN0cnVjdCBvYV90YzYgKnRjNilcXG4ge1xcbiBcXHR1MzIgcmVndmFsID0gSU5UX01BU0swX0FMTF9JTlRFUlJVUFRTO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiBcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ0YzYtXFx1MDAzZXR4X3NrYl9sb2NrKTtcXG4gXFx0dGM2LVxcdTAwM2VkaXNhYmxlX3RyYWZmaWMgPSB0cnVlO1xcbi1cXHRvYV90YzZfZnJlZV9wZW5kaW5nX3NrYnModGM2KTtcXG4rXFx0c2tiID0gb2FfdGM2X2RldGFjaF93YWl0aW5nX3R4X3NrYih0YzYpO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dGM2LVxcdTAwM2V0eF9za2JfbG9jayk7XFxuK1xcbitcXHQvKiBkaXNhYmxlX3RyYWZmaWMsIHdoZW4gc2V0LCBpcyBhIHBvaW50IG9mIG5vIHJldHVybiB0byB3b3JraW5nXFxuK1xcdCAqIHN0YXRlLiBUWCBxdWV1ZXMgYXJlIGRpc2FibGVkLiBJbiBzb21lIGNhc2VzLCB1cHBlciBsYXllciBvclxcbitcXHQgKiB2ZW5kb3IgY29kZSBtYXkgaW5hZHZlcnRlbnRseSBlbmFibGUgdGhlIHF1ZXVlLiBJbnRlbnRpb24gb2ZcXG4rXFx0ICogdGhlIGRpc2FibGVfdHJhZmZpYyBmbGFnIGlzIHRvIHN0b3AgdHJhZmZpYyBmcm9tIGZsb3dpbmcuXFxuK1xcdCAqL1xcbitcXHRuZXRpZl90eF9kaXNhYmxlKHRjNi1cXHUwMDNlbmV0ZGV2KTtcXG4rXFx0b2FfdGM2X2Ryb3BfdHhfc2tiKHRjNiwgc2tiKTtcXG4rXFx0b2FfdGM2X2ZyZWVfb25nb2luZ19za2JzKHRjNik7XFxuIFxcdG9hX3RjNl93cml0ZV9yZWdpc3Rlcih0YzYsIE9BX1RDNl9SRUdfSU5UX01BU0swLCByZWd2YWwpO1xcbiBcXHRvYV90YzZfcmVhZF9yZWdpc3Rlcih0YzYsIE9BX1RDNl9SRUdfU1RBVFVTMCwgXFx1MDAyNnJlZ3ZhbCk7XFxuIFxcdG9hX3RjNl93cml0ZV9yZWdpc3Rlcih0YzYsIE9BX1RDNl9SRUdfU1RBVFVTMCwgcmVndmFsKTtcXG5AQCAtNzE0LDYgKzc1NiwxMyBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcm9jZXNzX2V4dGVuZGVkX3N0YXR1cyhzdHJ1Y3Qgb2FfdGM2ICp0YzYpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdH1cXG4gXFxuK1xcdC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBlYWNoIGNodW5rIHJlY2VpdmVkIGluIGEgZ2l2ZW4gU1BJXFxuK1xcdCAqIHRyYW5zYWN0aW9uLiBJbiBjYXNlLCBleHRlbmRlZCBzdGF0dXMgYml0IGlzIHNldCBpbiBtb3JlIHRoYW5cXG4rXFx0ICogb25lIGNodW5rLCBza2lwIHRoZSB3cml0ZSwgaWYgc3RhdHVzMCBpcyBhbHJlYWR5IGNsZWFyZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXZhbHVlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuIFxcdC8qIENsZWFyIHRoZSBlcnJvciBpbnRlcnJ1cHRzIHN0YXR1cyAqL1xcbiBcXHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUkVHX1NUQVRVUzAsIHZhbHVlKTtcXG4gXFx0aWYgKHJldCkge1xcbkBAIC03MjMsOCArNzcyLDcgQEAgc3RhdGljIGludCBvYV90YzZfcHJvY2Vzc19leHRlbmRlZF9zdGF0dXMoc3RydWN0IG9hX3RjNiAqdGM2KVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoRklFTERfR0VUKFNUQVRVUzBfUlhfQlVGRkVSX09WRVJGTE9XX0VSUk9SLCB2YWx1ZSkpIHtcXG4tXFx0XFx0dGM2LVxcdTAwM2VyeF9idWZfb3ZlcmZsb3cgPSB0cnVlO1xcbi1cXHRcXHRvYV90YzZfY2xlYW51cF9vbmdvaW5nX3J4X3NrYih0YzYpO1xcbitcXHRcXHRvYV90YzZfbG9va19mb3JfbmV3X2ZyYW1lKHRjNik7XFxuIFxcdFxcdG5ldF9lcnJfcmF0ZWxpbWl0ZWQoXFxcIiVzOiBSZWNlaXZlIGJ1ZmZlciBvdmVyZmxvdyBlcnJvclxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0ICAgIHRjNi1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VuYW1lKTtcXG4gXFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuQEAgLTc1MCw2ICs3OTgsOCBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcm9jZXNzX2V4dGVuZGVkX3N0YXR1cyhzdHJ1Y3Qgb2FfdGM2ICp0YzYpXFxuIFxcbiBzdGF0aWMgaW50IG9hX3RjNl9wcm9jZXNzX3J4X2NodW5rX2Zvb3RlcihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUzMiBmb290ZXIpXFxuIHtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbiBcXHQvKiBQcm9jZXNzIHJ4IGNodW5rIGZvb3RlciBmb3IgdGhlIGZvbGxvd2luZyxcXG4gXFx0ICogMS4gdHggY3JlZGl0c1xcbiBcXHQgKiAyLiBlcnJvcnMgaWYgYW55IGZyb20gTUFDLVBIWVxcbkBAIC03NjAsOSArODEwLDExIEBAIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3NfcnhfY2h1bmtfZm9vdGVyKHN0cnVjdCBvYV90YzYgKnRjNiwgdTMyIGZvb3RlcilcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBmb290ZXIpO1xcbiBcXG4gXFx0aWYgKEZJRUxEX0dFVChPQV9UQzZfREFUQV9GT09URVJfRVhURU5ERURfU1RTLCBmb290ZXIpKSB7XFxuLVxcdFxcdGludCByZXQgPSBvYV90YzZfcHJvY2Vzc19leHRlbmRlZF9zdGF0dXModGM2KTtcXG4tXFxuLVxcdFxcdGlmIChyZXQpXFxuK1xcdFxcdHJldCA9IG9hX3RjNl9wcm9jZXNzX2V4dGVuZGVkX3N0YXR1cyh0YzYpO1xcbitcXHRcXHQvKiBFQUdBSU4gZXJyb3IgaXMgcmVjb3ZlcmFibGUuIE1vdmUgb24gdG8gY2hlY2tcXG4rXFx0XFx0ICogSEVBREVSIGFuZCBTWU5DIGVycm9ycyBiZWZvcmUgcmV0dXJuaW5nLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVBR0FJTilcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG5AQCAtNzgwLDcgKzgzMiw3IEBAIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3NfcnhfY2h1bmtfZm9vdGVyKHN0cnVjdCBvYV90YzYgKnRjNiwgdTMyIGZvb3RlcilcXG4gXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBvYV90YzZfc3VibWl0X3J4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYpXFxuQEAgLTgwNSwxMyArODU3LDM1IEBAIHN0YXRpYyB2b2lkIG9hX3RjNl9zdWJtaXRfcnhfc2tiKHN0cnVjdCBvYV90YzYgKnRjNilcXG4gXFx0dGM2LVxcdTAwM2VyeF9za2IgPSBOVUxMO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBvYV90YzZfdXBkYXRlX3J4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpwYXlsb2FkLCB1OCBsZW5ndGgpXFxuKy8qIE9uIG92ZXJzdWJzY3JpYmVkIHRyYWZmaWMgY29uZGl0aW9uLCBwYXJ0aWN1bGFybHkgd2l0aCBvdmVyd2hlbG1pbmcgcnhcXG4rICogYnVmZmVyIG92ZXJmbG93IGVycm9ycywgdGhlcmUgY291bGQgYmUgZGF0YSBjaHVuayBsb3NzLiBJZiB0YWlsICsgbGVuZ3RoXFxuKyAqIGdvZXMgYmV5b25kIGVuZCBwb2ludGVyLCB0aGF0IGlzIGFuIGluZGljYXRpb24gdGhhdCB0aGUgZGF0YSBjaHVuayB3aXRoXFxuKyAqIGVuZF92YWxpZCBiaXQgaXMgbG9zdC4gVGltZSB0byBsb29rIGZvciBhIGRhdGEgY2h1bmsgd2l0aCBzdGFydF92YWxpZCBiaXQuXFxuKyAqXFxuKyAqIElmIHJ4X3NrYiBpcyBOVUxMLCBpdCBpcyB0aW1lIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIGRhdGEgY2h1bmsgd2l0aFxcbisgKiBzdGFydF9iaXQuXFxuKyAqL1xcbitzdGF0aWMgaW50IG9hX3RjNl91cGRhdGVfcnhfc2tiKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKnBheWxvYWQsIHU4IGxlbmd0aClcXG4ge1xcbitcXHRpZiAoIXRjNi1cXHUwMDNlcnhfc2tiIHx8XFxuK1xcdCAgICBza2JfdGFpbHJvb20odGM2LVxcdTAwM2VyeF9za2IpIFxcdTAwM2MgbGVuZ3RoKSB7XFxuK1xcdFxcdG9hX3RjNl9sb29rX2Zvcl9uZXdfZnJhbWUodGM2KTtcXG4rXFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuK1xcdH1cXG4rXFxuIFxcdG1lbWNweShza2JfcHV0KHRjNi1cXHUwMDNlcnhfc2tiLCBsZW5ndGgpLCBwYXlsb2FkLCBsZW5ndGgpO1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLyogT24gb3ZlcndoZWxtaW5nIHJ4IGJ1ZmZlciBvdmVyZmxvdyBlcnJvcnMsIGR1ZSB0byBkYXRhIGNodW5rIGxvc3MsIGl0IGlzXFxuKyAqIHBvc3NpYmxlIHRoYXQgd2UgZ2V0IHR3byBkYXRhIGNodW5rcyB3aXRoIHN0YXJ0X3ZhbGlkIGJpdCBzZXQsIHdpdGhvdXRcXG4rICogZW5kX3ZhbGlkIGJpdCBzZXQgaW4gYmV0d2Vlbi4gSW4gdGhpcyBjYXNlLCByeF9za2Igd291bGQgaGF2ZSBhIHZhbGlkXFxuKyAqIGJ1ZmZlciBwb2ludGVyLiBXZSBzaG91bGQgcmVsZWFzZSwgaWYgYSB2YWxpZCBwb2ludGVyIGlzIGZvdW5kIGJlZm9yZVxcbisgKiBhbGxvY2F0aW5nIGEgbmV3IG9uZS5cXG4rICovXFxuIHN0YXRpYyBpbnQgb2FfdGM2X2FsbG9jYXRlX3J4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYpXFxuIHtcXG4rXFx0b2FfdGM2X2NsZWFudXBfb25nb2luZ19yeF9za2IodGM2KTtcXG4gXFx0dGM2LVxcdTAwM2VyeF9za2IgPSBuZXRkZXZfYWxsb2Nfc2tiX2lwX2FsaWduKHRjNi1cXHUwMDNlbmV0ZGV2LCB0YzYtXFx1MDAzZW5ldGRldi1cXHUwMDNlbXR1ICtcXG4gXFx0XFx0XFx0XFx0XFx0XFx0RVRIX0hMRU4gKyBFVEhfRkNTX0xFTik7XFxuIFxcdGlmICghdGM2LVxcdTAwM2VyeF9za2IpIHtcXG5AQCAtODMxLDcgKzkwNSw5IEBAIHN0YXRpYyBpbnQgb2FfdGM2X3ByY3NfY29tcGxldGVfcnhfZnJhbWUoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqcGF5bG9hZCxcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdG9hX3RjNl91cGRhdGVfcnhfc2tiKHRjNiwgcGF5bG9hZCwgc2l6ZSk7XFxuK1xcdHJldCA9IG9hX3RjNl91cGRhdGVfcnhfc2tiKHRjNiwgcGF5bG9hZCwgc2l6ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRvYV90YzZfc3VibWl0X3J4X3NrYih0YzYpO1xcbiBcXG5AQCAtODQ2LDIyICs5MjIsMjQgQEAgc3RhdGljIGludCBvYV90YzZfcHJjc19yeF9mcmFtZV9zdGFydChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpwYXlsb2FkLCB1MTYgc2l6ZSlcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdG9hX3RjNl91cGRhdGVfcnhfc2tiKHRjNiwgcGF5bG9hZCwgc2l6ZSk7XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIG9hX3RjNl91cGRhdGVfcnhfc2tiKHRjNiwgcGF5bG9hZCwgc2l6ZSk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG9hX3RjNl9wcmNzX3J4X2ZyYW1lX2VuZChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpwYXlsb2FkLCB1MTYgc2l6ZSlcXG4rc3RhdGljIGludCBvYV90YzZfcHJjc19yeF9mcmFtZV9lbmQoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqcGF5bG9hZCwgdTE2IHNpemUpXFxuIHtcXG4tXFx0b2FfdGM2X3VwZGF0ZV9yeF9za2IodGM2LCBwYXlsb2FkLCBzaXplKTtcXG4rXFx0aW50IHJldDtcXG4gXFxuLVxcdG9hX3RjNl9zdWJtaXRfcnhfc2tiKHRjNik7XFxuK1xcdHJldCA9IG9hX3RjNl91cGRhdGVfcnhfc2tiKHRjNiwgcGF5bG9hZCwgc2l6ZSk7XFxuK1xcdGlmICghcmV0KVxcbitcXHRcXHRvYV90YzZfc3VibWl0X3J4X3NrYih0YzYpO1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBvYV90YzZfcHJjc19vbmdvaW5nX3J4X2ZyYW1lKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKnBheWxvYWQsXFxuLVxcdFxcdFxcdFxcdFxcdCB1MzIgZm9vdGVyKVxcbitzdGF0aWMgaW50IG9hX3RjNl9wcmNzX29uZ29pbmdfcnhfZnJhbWUoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqcGF5bG9hZCxcXG4rXFx0XFx0XFx0XFx0XFx0dTMyIGZvb3RlcilcXG4ge1xcbi1cXHRvYV90YzZfdXBkYXRlX3J4X3NrYih0YzYsIHBheWxvYWQsIE9BX1RDNl9DSFVOS19QQVlMT0FEX1NJWkUpO1xcbitcXHRyZXR1cm4gb2FfdGM2X3VwZGF0ZV9yeF9za2IodGM2LCBwYXlsb2FkLFxcbitcXHRcXHRcXHRcXHQgICAgT0FfVEM2X0NIVU5LX1BBWUxPQURfU0laRSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgb2FfdGM2X3ByY3NfcnhfY2h1bmtfcGF5bG9hZChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpkYXRhLFxcbkBAIC04NzYsMTAgKzk1NCwxMCBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcmNzX3J4X2NodW5rX3BheWxvYWQoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqZGF0YSxcXG4gXFx0dTE2IHNpemU7XFxuIFxcbiBcXHQvKiBSZXN0YXJ0IHRoZSBuZXcgcnggZnJhbWUgYWZ0ZXIgcmVjZWl2aW5nIHJ4IGJ1ZmZlciBvdmVyZmxvdyBlcnJvciAqL1xcbi1cXHRpZiAoc3RhcnRfdmFsaWQgXFx1MDAyNlxcdTAwMjYgdGM2LVxcdTAwM2VyeF9idWZfb3ZlcmZsb3cpXFxuLVxcdFxcdHRjNi1cXHUwMDNlcnhfYnVmX292ZXJmbG93ID0gZmFsc2U7XFxuK1xcdGlmIChzdGFydF92YWxpZCBcXHUwMDI2XFx1MDAyNiB0YzYtXFx1MDAzZXdhaXRfdW50aWxfc3RhcnRfdmFsaWQpXFxuK1xcdFxcdHRjNi1cXHUwMDNld2FpdF91bnRpbF9zdGFydF92YWxpZCA9IGZhbHNlO1xcbiBcXG4tXFx0aWYgKHRjNi1cXHUwMDNlcnhfYnVmX292ZXJmbG93KVxcbitcXHRpZiAodGM2LVxcdTAwM2V3YWl0X3VudGlsX3N0YXJ0X3ZhbGlkKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdC8qIFByb2Nlc3MgdGhlIGNodW5rIHdpdGggY29tcGxldGUgcnggZnJhbWUgKi9cXG5AQCAtOTAxLDggKzk3OSw3IEBAIHN0YXRpYyBpbnQgb2FfdGM2X3ByY3NfcnhfY2h1bmtfcGF5bG9hZChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpkYXRhLFxcbiBcXHQvKiBQcm9jZXNzIHRoZSBjaHVuayB3aXRoIG9ubHkgcnggZnJhbWUgZW5kICovXFxuIFxcdGlmIChlbmRfdmFsaWQgXFx1MDAyNlxcdTAwMjYgIXN0YXJ0X3ZhbGlkKSB7XFxuIFxcdFxcdHNpemUgPSBlbmRfYnl0ZV9vZmZzZXQgKyAxO1xcbi1cXHRcXHRvYV90YzZfcHJjc19yeF9mcmFtZV9lbmQodGM2LCBkYXRhLCBzaXplKTtcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdHJldHVybiBvYV90YzZfcHJjc19yeF9mcmFtZV9lbmQodGM2LCBkYXRhLCBzaXplKTtcXG4gXFx0fVxcbiBcXG4gXFx0LyogUHJvY2VzcyB0aGUgY2h1bmsgd2l0aCBwcmV2aW91cyByeCBmcmFtZSBlbmQgYW5kIG5leHQgcnggZnJhbWVcXG5AQCAtOTE2LDYgKzk5MywxNSBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcmNzX3J4X2NodW5rX3BheWxvYWQoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqZGF0YSxcXG4gXFx0XFx0aWYgKHRjNi1cXHUwMDNlcnhfc2tiKSB7XFxuIFxcdFxcdFxcdHNpemUgPSBlbmRfYnl0ZV9vZmZzZXQgKyAxO1xcbiBcXHRcXHRcXHRvYV90YzZfcHJjc19yeF9mcmFtZV9lbmQodGM2LCBkYXRhLCBzaXplKTtcXG4rXFxuK1xcdFxcdFxcdC8qIFJldHVybiB2YWx1ZSBmcm9tIG9hX3RjNl9wcmNzX3J4X2ZyYW1lX2VuZCBpcyBub3RcXG4rXFx0XFx0XFx0ICogY2hlY2tlZC4gSWYgaXQgcmV0dXJuZWQgYW4gZXJyb3IsIGl0IGlzIHRvIG1ha2VcXG4rXFx0XFx0XFx0ICogdGhlIGNvZGUgdG8gbG9vayBmb3IgbmV3IGZyYW1lLiBBdCB0aGlzIHN0YWdlLFxcbitcXHRcXHRcXHQgKiBjb2RlIGJlbG93IGlzIGdvaW5nIHRvIHByb2Nlc3MgYSBuZXcgZnJhbWUuIFNvLFxcbitcXHRcXHRcXHQgKiBlcnJvciBjb25kaXRpb24gaXMgc2V0IHRvIGZhbHNlLCBpbiBjYXNlIGl0IGlzXFxuK1xcdFxcdFxcdCAqIHNldCBiZWZvcmUgcHJvY2VlZGluZy5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHRjNi1cXHUwMDNld2FpdF91bnRpbF9zdGFydF92YWxpZCA9IGZhbHNlO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHNpemUgPSBPQV9UQzZfQ0hVTktfUEFZTE9BRF9TSVpFIC0gc3RhcnRfYnl0ZV9vZmZzZXQ7XFxuIFxcdFxcdHJldHVybiBvYV90YzZfcHJjc19yeF9mcmFtZV9zdGFydCh0YzYsXFxuQEAgLTkyNCw5ICsxMDEwLDcgQEAgc3RhdGljIGludCBvYV90YzZfcHJjc19yeF9jaHVua19wYXlsb2FkKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKmRhdGEsXFxuIFxcdH1cXG4gXFxuIFxcdC8qIFByb2Nlc3MgdGhlIGNodW5rIHdpdGggb25nb2luZyByeCBmcmFtZSBkYXRhICovXFxuLVxcdG9hX3RjNl9wcmNzX29uZ29pbmdfcnhfZnJhbWUodGM2LCBkYXRhLCBmb290ZXIpO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiBvYV90YzZfcHJjc19vbmdvaW5nX3J4X2ZyYW1lKHRjNiwgZGF0YSwgZm9vdGVyKTtcXG4gfVxcbiBcXG4gc3RhdGljIHUzMiBvYV90YzZfZ2V0X3J4X2NodW5rX2Zvb3RlcihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUxNiBmb290ZXJfb2Zmc2V0KVxcbkBAIC05NDIsOCArMTAyNiw5IEBAIHN0YXRpYyB1MzIgb2FfdGM2X2dldF9yeF9jaHVua19mb290ZXIoc3RydWN0IG9hX3RjNiAqdGM2LCB1MTYgZm9vdGVyX29mZnNldClcXG4gc3RhdGljIGludCBvYV90YzZfcHJvY2Vzc19zcGlfZGF0YV9yeF9idWYoc3RydWN0IG9hX3RjNiAqdGM2LCB1MTYgbGVuZ3RoKVxcbiB7XFxuIFxcdHUxNiBub19vZl9yeF9jaHVua3MgPSBsZW5ndGggLyBPQV9UQzZfQ0hVTktfU0laRTtcXG4rXFx0Ym9vbCByZXRyeSA9IGZhbHNlO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4gXFx0dTMyIGZvb3RlcjtcXG4tXFx0aW50IHJldDtcXG4gXFxuIFxcdC8qIEFsbCB0aGUgcnggY2h1bmtzIGluIHRoZSByZWNlaXZlIFNQSSBkYXRhIGJ1ZmZlciBhcmUgZXhhbWluZWQgaGVyZSAqL1xcbiBcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIG5vX29mX3J4X2NodW5rczsgaSsrKSB7XFxuQEAgLTk1Miw4ICsxMDM3LDExIEBAIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3Nfc3BpX2RhdGFfcnhfYnVmKHN0cnVjdCBvYV90YzYgKnRjNiwgdTE2IGxlbmd0aClcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgIE9BX1RDNl9DSFVOS19QQVlMT0FEX1NJWkUpO1xcbiBcXG4gXFx0XFx0cmV0ID0gb2FfdGM2X3Byb2Nlc3NfcnhfY2h1bmtfZm9vdGVyKHRjNiwgZm9vdGVyKTtcXG4tXFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRpZiAocmV0ICE9IC1FQUdBSU4pXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdFxcdHJldHJ5ID0gdHJ1ZTtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0LyogSWYgdGhlcmUgaXMgYSBkYXRhIHZhbGlkIGNodW5rcyB0aGVuIHByb2Nlc3MgaXQgZm9yIHRoZVxcbiBcXHRcXHQgKiBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gZGV0ZXJtaW5lIHRoZSB2YWxpZGl0eSBhbmQgdGhlIGxvY2F0aW9uXFxuQEAgLTk2NSwxMiArMTA1MywzNSBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcm9jZXNzX3NwaV9kYXRhX3J4X2J1ZihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUxNiBsZW5ndGgpXFxuIFxcbiBcXHRcXHRcXHRyZXQgPSBvYV90YzZfcHJjc19yeF9jaHVua19wYXlsb2FkKHRjNiwgcGF5bG9hZCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZm9vdGVyKTtcXG4tXFx0XFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRcXHRpZiAocmV0ICE9IC1FTk9NRU0gXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FQUdBSU4pXFxuK1xcdFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdFxcdFxcdHJldHJ5ID0gdHJ1ZTtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiAwO1xcbitcXHQvKiBOb3QgYmFpbGluZyBvdXQgb24gcmVjb3ZlcmFibGUgZXJyb3IgY29kZXMsIC1FQUdBSU4gYW5kXFxuK1xcdCAqIC1FTk9NRU0uIElmIHN1YnNlcXVlbnQgbG9vcCBpdGVyYXRpb25zLCBpZiBhbnksIHN1Y2NlZWRzLFxcbitcXHQgKiBlcnJvciBjb2RlIHdvdWxkIGJlIG92ZXJ3cml0dGVuLiByZXRyeSBmbGFnIGhlbHBzIHRvXFxuK1xcdCAqIG1ha2UgdGhlIGNhbGxlciB0byBjb250aW51ZSBhbmQgcmV0cnkuIFNpbmNlIHJlY292ZXJ5XFxuK1xcdCAqIGFjdGlvbiBmb3IgLUVOT01FTSBhbmQgLUVBR0FJTiBhcmUgc2FtZSwgd2UgYXJlIHJldHVybmluZ1xcbitcXHQgKiBvbmUgb2YgdGhlIGVycm9yIGNvZGVzLCB0aGF0IGlzIC1FQUdBSU4uXFxuK1xcdCAqXFxuK1xcdCAqIFN1Y2Nlc3NmdWwgcmVjb3ZlcnkgZGVwZW5kcyBvbiBob3cgc21hbGwgdGhlIGZyYW1lcyBhcmUsXFxuK1xcdCAqIGhvdyBtYW55IGNodW5rcywgYW1vbmcgdGhlIHJlY2VpdmVkIGNodW5rcyB0cmlnZ2VyZWQgdGhlXFxuK1xcdCAqIGVycm9yLCB3aGV0aGVyIGRhdGEgaXMgaW50YWN0IGV2ZW4gd2l0aCBlcnJvciBjb25kaXRpb25zLlxcbitcXHQgKiBBcyBhIHJlc3VsdCwgdGhlcmUgaXMgbm8gc2luZ2xlLCBiZXN0IG1ldGhvZCB0byByZWNvdmVyXFxuK1xcdCAqIG1vc3QgZGF0YSB3aGVuIGVycm9yIGNvbmRpdGlvbnMgaGl0LiBXZSBkbyBvdXIgYmVzdCBieVxcbitcXHQgKiBwcm9jZXNzaW5nIGFsbCB0aGUgY2h1bmtzIHdpdGggZ29vZCBcXFwiZm9vdGVyIGhlYWRlclxcXCIgYW5kXFxuK1xcdCAqIFxcXCJkYXRhIHZhbGlkXFxcIiBiaXQgc2V0LlxcbitcXHQgKi9cXG4rXFx0aWYgKHJldHJ5KSB7XFxuK1xcdFxcdHJldCA9IC1FQUdBSU47XFxuK1xcdFxcdG9hX3RjNl9sb29rX2Zvcl9uZXdfZnJhbWUodGM2KTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIF9fYmUzMiBvYV90YzZfcHJlcGFyZV9kYXRhX2hlYWRlcihib29sIGRhdGFfdmFsaWQsIGJvb2wgc3RhcnRfdmFsaWQsXFxuQEAgLTExMzIsMTIgKzEyNDMsOSBAQCBzdGF0aWMgaW50IG9hX3RjNl90cnlfc3BpX3RyYW5zZmVyKHN0cnVjdCBvYV90YzYgKnRjNilcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0cmV0ID0gb2FfdGM2X3Byb2Nlc3Nfc3BpX2RhdGFfcnhfYnVmKHRjNiwgc3BpX2xlbik7XFxuLVxcdFxcdGlmIChyZXQpIHtcXG4tXFx0XFx0XFx0aWYgKHJldCA9PSAtRUFHQUlOKVxcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdFxcdG9hX3RjNl9jbGVhbnVwX29uZ29pbmdfdHhfc2tiKHRjNik7XFxuLVxcdFxcdFxcdG9hX3RjNl9jbGVhbnVwX29uZ29pbmdfcnhfc2tiKHRjNik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FQUdBSU4pIHtcXG4rXFx0XFx0XFx0b2FfdGM2X2ZyZWVfb25nb2luZ19za2JzKHRjNik7XFxuIFxcdFxcdFxcdG5ldGRldl9lcnIodGM2LVxcdTAwM2VuZXRkZXYsIFxcXCJEZXZpY2UgZXJyb3I6ICVkXFxcXG5cXFwiLCByZXQpO1xcbiBcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRcXHR9XFxuQEAgLTExNTksMTUgKzEyNjcsMjAgQEAgc3RhdGljIGlycXJldHVybl90IG9hX3RjNl9tYWNwaHlfdGhyZWFkZWRfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpXFxuIFxcdCAqIG5vIG5lZWQgdG8gYXR0ZW1wdCBzcGkgdHJhbnNmZXIsIG9uY2UgaXQgZmFpbHMuIFBlbmRpbmcgc2tic1xcbiBcXHQgKiBhcmUgYWxyZWFkeSBmcmVlZC5cXG4gXFx0ICovXFxuLVxcdGlmICghdGM2LVxcdTAwM2VkaXNhYmxlX3RyYWZmaWMpIHtcXG4tXFx0XFx0d2hpbGUgKHRjNi1cXHUwMDNlaW50X2ZsYWcgfHxcXG4tXFx0XFx0ICAgICAgICh0YzYtXFx1MDAzZXdhaXRpbmdfdHhfc2tiIFxcdTAwMjZcXHUwMDI2IHRjNi1cXHUwMDNldHhfY3JlZGl0cykpIHtcXG4tXFx0XFx0XFx0cmV0ID0gb2FfdGM2X3RyeV9zcGlfdHJhbnNmZXIodGM2KTtcXG4tXFx0XFx0XFx0aWYgKHJldCkge1xcbi1cXHRcXHRcXHRcXHRkaXNhYmxlX2lycV9ub3N5bmModGM2LVxcdTAwM2VzcGktXFx1MDAzZWlycSk7XFxuLVxcdFxcdFxcdFxcdG9hX3RjNl9kaXNhYmxlX3RyYWZmaWModGM2KTtcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdFxcdH1cXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ0YzYtXFx1MDAzZXR4X3NrYl9sb2NrKTtcXG4rXFx0aWYgKHRjNi1cXHUwMDNlZGlzYWJsZV90cmFmZmljKSB7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0YzYtXFx1MDAzZXR4X3NrYl9sb2NrKTtcXG4rXFx0XFx0cmV0dXJuIElSUV9IQU5ETEVEO1xcbitcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0YzYtXFx1MDAzZXR4X3NrYl9sb2NrKTtcXG4rXFxuK1xcdHdoaWxlICh0YzYtXFx1MDAzZWludF9mbGFnIHx8XFxuK1xcdCAgICAgICAodGM2LVxcdTAwM2V3YWl0aW5nX3R4X3NrYiBcXHUwMDI2XFx1MDAyNiB0YzYtXFx1MDAzZXR4X2NyZWRpdHMpKSB7XFxuK1xcdFxcdHJldCA9IG9hX3RjNl90cnlfc3BpX3RyYW5zZmVyKHRjNik7XFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0ZGlzYWJsZV9pcnFfbm9zeW5jKHRjNi1cXHUwMDNlc3BpLVxcdTAwM2VpcnEpO1xcbitcXHRcXHRcXHRvYV90YzZfZGlzYWJsZV90cmFmZmljKHRjNik7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuQEAgLTEyNDUsMjMgKzEzNTgsMzAgQEAgRVhQT1JUX1NZTUJPTF9HUEwob2FfdGM2X3plcm9fYWxpZ25fcmVjZWl2ZV9mcmFtZV9lbmFibGUpO1xcbiAgKiBAdGM2OiBvYV90YzYgc3RydWN0LlxcbiAgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIGluIHdoaWNoIHRoZSBldGhlcm5ldCBmcmFtZSBpcyBzdG9yZWQuXFxuICAqXFxuLSAqIFJldHVybjogTkVUREVWX1RYX09LIGlmIHRoZSB0cmFuc21pdCBldGhlcm5ldCBmcmFtZSBza2IgYWRkZWQgaW4gdGhlIHR4X3NrYl9xXFxuLSAqIG90aGVyd2lzZSByZXR1cm5zIE5FVERFVl9UWF9CVVNZLlxcbisgKiBSZXR1cm46IE5FVERFVl9UWF9PSyBlaXRoZXIgb24gc3VjY2Vzc2Z1bCBxdWV1ZWluZyBvZiB0aGUgcGFja2V0IGZvclxcbisgKiB0cmFuc21pc3Npb24sIG9yIG9uIHBhY2tldCBnZXR0aW5nIGRyb3BwZWQuIFBhY2tldCBjYW4gYmUgZHJvcHBlZCBkdWUgdG9cXG4rICogZmFpbHVyZSBpbiBsaW5lYXJpemluZyB0aGUgYnVmZmVyIG9yIGRpc2FibGVfdHJhZmZpYyBpcyBzZXQgZHVlIHRvXFxuKyAqIGVhcmxpZXIgZmF0YWwgZXJyb3IuIFJldHVybnMgTkVUREVWX1RYX0JVU1kgd2hlbiB0aGVyZSBpcyBubyByb29tXFxuKyAqIHRvIHF1ZXVlIHRoZSBwYWNrZXQuXFxuICAqL1xcbiBuZXRkZXZfdHhfdCBvYV90YzZfc3RhcnRfeG1pdChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4tXFx0aWYgKHRjNi1cXHUwMDNlZGlzYWJsZV90cmFmZmljIHx8IHRjNi1cXHUwMDNld2FpdGluZ190eF9za2IpIHtcXG4tXFx0XFx0bmV0aWZfc3RvcF9xdWV1ZSh0YzYtXFx1MDAzZW5ldGRldik7XFxuLVxcdFxcdHJldHVybiBORVRERVZfVFhfQlVTWTtcXG4tXFx0fVxcbi1cXG4gXFx0aWYgKHNrYl9saW5lYXJpemUoc2tiKSkge1xcbi1cXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xcbi1cXHRcXHR0YzYtXFx1MDAzZW5ldGRldi1cXHUwMDNlc3RhdHMudHhfZHJvcHBlZCsrO1xcbitcXHRcXHRvYV90YzZfZHJvcF90eF9za2IodGM2LCBza2IpO1xcbiBcXHRcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbiBcXHR9XFxuIFxcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnRjNi1cXHUwMDNldHhfc2tiX2xvY2spO1xcbitcXHRpZiAodGM2LVxcdTAwM2V3YWl0aW5nX3R4X3NrYikge1xcbitcXHRcXHRuZXRpZl9zdG9wX3F1ZXVlKHRjNi1cXHUwMDNlbmV0ZGV2KTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRjNi1cXHUwMDNldHhfc2tiX2xvY2spO1xcbitcXHRcXHRyZXR1cm4gTkVUREVWX1RYX0JVU1k7XFxuK1xcdH1cXG4rXFx0aWYgKHRjNi1cXHUwMDNlZGlzYWJsZV90cmFmZmljKSB7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0YzYtXFx1MDAzZXR4X3NrYl9sb2NrKTtcXG4rXFx0XFx0b2FfdGM2X2Ryb3BfdHhfc2tiKHRjNiwgc2tiKTtcXG4rXFx0XFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4rXFx0fVxcbiBcXHR0YzYtXFx1MDAzZXdhaXRpbmdfdHhfc2tiID0gc2tiO1xcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dGM2LVxcdTAwM2V0eF9za2JfbG9jayk7XFxuIFxcbkBAIC0xMzkzLDggKzE1MTMsMTAgQEAgRVhQT1JUX1NZTUJPTF9HUEwob2FfdGM2X2luaXQpO1xcbiAgKi9cXG4gdm9pZCBvYV90YzZfZXhpdChzdHJ1Y3Qgb2FfdGM2ICp0YzYpXFxuIHtcXG4tXFx0dGM2LVxcdTAwM2VkaXNhYmxlX3RyYWZmaWMgPSB0cnVlO1xcbiBcXHRkaXNhYmxlX2lycSh0YzYtXFx1MDAzZXNwaS1cXHUwMDNlaXJxKTtcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ0YzYtXFx1MDAzZXR4X3NrYl9sb2NrKTtcXG4rXFx0dGM2LVxcdTAwM2VkaXNhYmxlX3RyYWZmaWMgPSB0cnVlO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dGM2LVxcdTAwM2V0eF9za2JfbG9jayk7XFxuIFxcdG9hX3RjNl9waHlfZXhpdCh0YzYpO1xcbiBcXHRvYV90YzZfZnJlZV9wZW5kaW5nX3NrYnModGM2KTtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzoyNDozNS45MDQ4ODE1MTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2NDQzOTMxNTkwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9QRU4gQWxsaWFuY2UgMTBCQVNFLVQxeCBNQUMtUEhZIFNlcmlhbCBJbnRlcmZhY2UgKG9hX3RjNikgZnJhbWV3b3JrLCB3aGljaCBpcyBjdXJyZW50bHkgb25seSB1c2VkIGJ5IHRoZSBNaWNyb2NoaXAgTEFOODY1eCBTUEkgZHJpdmVyLiBTaW5jZSBTUEkgZGV2aWNlcyByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBjYW5ub3QgYmUgZHluYW1pY2FsbHkgaW5zdGFudGlhdGVkIG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmIxMmM3ZDgyOGRhZThhZWQxODU0MmVkY2UyMzk2NTJiMWQ5Mzc0Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDAzOjI0OjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuY1xuaW5kZXggMDcyN2Q1MzM0NWEzMy4uNmUyN2VkMzlhOTliZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuY1xuQEAgLTEyNyw3ICsxMjcsNyBAQCBzdHJ1Y3Qgb2FfdGM2IHtcbiBcdHUxNiBzcGlfZGF0YV90eF9idWZfb2Zmc2V0O1xuIFx0dTE2IHR4X2NyZWRpdHM7XG4gXHR1OCByeF9jaHVua3NfYXZhaWxhYmxlO1xuLVx0Ym9vbCByeF9idWZfb3ZlcmZsb3c7XG4rXHRib29sIHdhaXRfdW50aWxfc3RhcnRfdmFsaWQ7XG4gXHRib29sIGludF9mbGFnO1xuIFx0Ym9vbCBkaXNhYmxlX3RyYWZmaWM7XG4gfTtcbkBAIC00MjMsNyArNDIzLDcgQEAgc3RhdGljIGludCBvYV90YzZfbWRpb2J1c19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnbnVtKVxuIHtcbiBcdHN0cnVjdCBvYV90YzYgKnRjNiA9IGJ1cy1cdTAwM2Vwcml2O1xuIFx0dTMyIHJlZ3ZhbDtcbi1cdGJvb2wgcmV0O1xuK1x0aW50IHJldDtcbiBcbiBcdHJldCA9IG9hX3RjNl9yZWFkX3JlZ2lzdGVyKHRjNiwgT0FfVEM2X1BIWV9TVERfUkVHX0FERFJfQkFTRSB8XG4gXHRcdFx0XHQgICAocmVnbnVtIFx1MDAyNiBPQV9UQzZfUEhZX1NURF9SRUdfQUREUl9NQVNLKSxcbkBAIC02NTIsNiArNjUyLDI2IEBAIHN0YXRpYyBpbnQgb2FfdGM2X2VuYWJsZV9kYXRhX3RyYW5zZmVyKHN0cnVjdCBvYV90YzYgKnRjNilcbiBcdHJldHVybiBvYV90YzZfd3JpdGVfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUkVHX0NPTkZJRzAsIHZhbHVlKTtcbiB9XG4gXG4rLyogQ2FsbGVkIHdoZW4gYSBmcmFtZSB0aGF0IGlzIG1lYW50IHRvIGJlIHRyYW5zbWl0dGVkLCBpcyBkcm9wcGVkLiAqL1xuK3N0YXRpYyB2b2lkIG9hX3RjNl9kcm9wX3R4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0aWYgKHNrYikge1xuK1x0XHR0YzYtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQrKztcbitcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHN0cnVjdCBza19idWZmICpvYV90YzZfZGV0YWNoX3dhaXRpbmdfdHhfc2tiKHN0cnVjdCBvYV90YzYgKnRjNilcbit7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ0YzYtXHUwMDNldHhfc2tiX2xvY2spO1xuK1x0c2tiID0gdGM2LVx1MDAzZXdhaXRpbmdfdHhfc2tiO1xuK1x0dGM2LVx1MDAzZXdhaXRpbmdfdHhfc2tiID0gTlVMTDtcbitcbitcdHJldHVybiBza2I7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIG9hX3RjNl9jbGVhbnVwX29uZ29pbmdfcnhfc2tiKHN0cnVjdCBvYV90YzYgKnRjNilcbiB7XG4gXHRpZiAodGM2LVx1MDAzZXJ4X3NrYikge1xuQEAgLTY2MywyOSArNjgzLDM5IEBAIHN0YXRpYyB2b2lkIG9hX3RjNl9jbGVhbnVwX29uZ29pbmdfcnhfc2tiKHN0cnVjdCBvYV90YzYgKnRjNilcbiBcbiBzdGF0aWMgdm9pZCBvYV90YzZfY2xlYW51cF9vbmdvaW5nX3R4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYpXG4ge1xuLVx0aWYgKHRjNi1cdTAwM2VvbmdvaW5nX3R4X3NrYikge1xuLVx0XHR0YzYtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQrKztcbi1cdFx0a2ZyZWVfc2tiKHRjNi1cdTAwM2VvbmdvaW5nX3R4X3NrYik7XG4tXHRcdHRjNi1cdTAwM2VvbmdvaW5nX3R4X3NrYiA9IE5VTEw7XG4tXHR9XG4rXHRvYV90YzZfZHJvcF90eF9za2IodGM2LCB0YzYtXHUwMDNlb25nb2luZ190eF9za2IpO1xuK1x0dGM2LVx1MDAzZW9uZ29pbmdfdHhfc2tiID0gTlVMTDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgb2FfdGM2X2NsZWFudXBfd2FpdGluZ190eF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2KVxuIHtcbi1cdGlmICh0YzYtXHUwMDNld2FpdGluZ190eF9za2IpIHtcbi1cdFx0dGM2LVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy50eF9kcm9wcGVkKys7XG4tXHRcdGtmcmVlX3NrYih0YzYtXHUwMDNld2FpdGluZ190eF9za2IpO1xuLVx0XHR0YzYtXHUwMDNld2FpdGluZ190eF9za2IgPSBOVUxMO1xuLVx0fVxuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcbitcdHNwaW5fbG9ja19iaChcdTAwMjZ0YzYtXHUwMDNldHhfc2tiX2xvY2spO1xuK1x0c2tiID0gb2FfdGM2X2RldGFjaF93YWl0aW5nX3R4X3NrYih0YzYpO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGM2LVx1MDAzZXR4X3NrYl9sb2NrKTtcbitcbitcdG9hX3RjNl9kcm9wX3R4X3NrYih0YzYsIHNrYik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG9hX3RjNl9mcmVlX3BlbmRpbmdfc2ticyhzdHJ1Y3Qgb2FfdGM2ICp0YzYpXG4rc3RhdGljIHZvaWQgb2FfdGM2X2ZyZWVfb25nb2luZ19za2JzKHN0cnVjdCBvYV90YzYgKnRjNilcbiB7XG4gXHRvYV90YzZfY2xlYW51cF9vbmdvaW5nX3R4X3NrYih0YzYpO1xuIFx0b2FfdGM2X2NsZWFudXBfb25nb2luZ19yeF9za2IodGM2KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgb2FfdGM2X2ZyZWVfcGVuZGluZ19za2JzKHN0cnVjdCBvYV90YzYgKnRjNilcbit7XG4rXHRvYV90YzZfZnJlZV9vbmdvaW5nX3NrYnModGM2KTtcbiBcdG9hX3RjNl9jbGVhbnVwX3dhaXRpbmdfdHhfc2tiKHRjNik7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG9hX3RjNl9sb29rX2Zvcl9uZXdfZnJhbWUoc3RydWN0IG9hX3RjNiAqdGM2KVxuK3tcbitcdHRjNi1cdTAwM2V3YWl0X3VudGlsX3N0YXJ0X3ZhbGlkID0gdHJ1ZTtcbitcdG9hX3RjNl9jbGVhbnVwX29uZ29pbmdfcnhfc2tiKHRjNik7XG4rfVxuK1xuIC8qIElmIHRoZSBmYWlsdXJlIGlzIGF0IFNQSSBpbnRlcmZhY2UgbGV2ZWwsIG1hc2tpbmcgYW5kIGNsZWFyaW5nXG4gICogdGhlIGludGVycnVwdCBvZiB0aGUgZGV2aWNlIHdvbid0IHdvcmsuIFNpbmNlIFNQSSBpbnRlcnJ1cHQgaXNcbiAgKiBkaXNhYmxlZCwgaXQgc2hvdWxkIHN0b3AgdGhlIHJlcGVhdGVkIGludGVycnVwdHMuXG5AQCAtNjkzLDkgKzcyMywyMSBAQCBzdGF0aWMgdm9pZCBvYV90YzZfZnJlZV9wZW5kaW5nX3NrYnMoc3RydWN0IG9hX3RjNiAqdGM2KVxuIHN0YXRpYyB2b2lkIG9hX3RjNl9kaXNhYmxlX3RyYWZmaWMoc3RydWN0IG9hX3RjNiAqdGM2KVxuIHtcbiBcdHUzMiByZWd2YWwgPSBJTlRfTUFTSzBfQUxMX0lOVEVSUlVQVFM7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFxuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnRjNi1cdTAwM2V0eF9za2JfbG9jayk7XG4gXHR0YzYtXHUwMDNlZGlzYWJsZV90cmFmZmljID0gdHJ1ZTtcbi1cdG9hX3RjNl9mcmVlX3BlbmRpbmdfc2ticyh0YzYpO1xuK1x0c2tiID0gb2FfdGM2X2RldGFjaF93YWl0aW5nX3R4X3NrYih0YzYpO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGM2LVx1MDAzZXR4X3NrYl9sb2NrKTtcbitcbitcdC8qIGRpc2FibGVfdHJhZmZpYywgd2hlbiBzZXQsIGlzIGEgcG9pbnQgb2Ygbm8gcmV0dXJuIHRvIHdvcmtpbmdcbitcdCAqIHN0YXRlLiBUWCBxdWV1ZXMgYXJlIGRpc2FibGVkLiBJbiBzb21lIGNhc2VzLCB1cHBlciBsYXllciBvclxuK1x0ICogdmVuZG9yIGNvZGUgbWF5IGluYWR2ZXJ0ZW50bHkgZW5hYmxlIHRoZSBxdWV1ZS4gSW50ZW50aW9uIG9mXG4rXHQgKiB0aGUgZGlzYWJsZV90cmFmZmljIGZsYWcgaXMgdG8gc3RvcCB0cmFmZmljIGZyb20gZmxvd2luZy5cbitcdCAqL1xuK1x0bmV0aWZfdHhfZGlzYWJsZSh0YzYtXHUwMDNlbmV0ZGV2KTtcbitcdG9hX3RjNl9kcm9wX3R4X3NrYih0YzYsIHNrYik7XG4rXHRvYV90YzZfZnJlZV9vbmdvaW5nX3NrYnModGM2KTtcbiBcdG9hX3RjNl93cml0ZV9yZWdpc3Rlcih0YzYsIE9BX1RDNl9SRUdfSU5UX01BU0swLCByZWd2YWwpO1xuIFx0b2FfdGM2X3JlYWRfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUkVHX1NUQVRVUzAsIFx1MDAyNnJlZ3ZhbCk7XG4gXHRvYV90YzZfd3JpdGVfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUkVHX1NUQVRVUzAsIHJlZ3ZhbCk7XG5AQCAtNzE0LDYgKzc1NiwxMyBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcm9jZXNzX2V4dGVuZGVkX3N0YXR1cyhzdHJ1Y3Qgb2FfdGM2ICp0YzYpXG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4rXHQvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgZWFjaCBjaHVuayByZWNlaXZlZCBpbiBhIGdpdmVuIFNQSVxuK1x0ICogdHJhbnNhY3Rpb24uIEluIGNhc2UsIGV4dGVuZGVkIHN0YXR1cyBiaXQgaXMgc2V0IGluIG1vcmUgdGhhblxuK1x0ICogb25lIGNodW5rLCBza2lwIHRoZSB3cml0ZSwgaWYgc3RhdHVzMCBpcyBhbHJlYWR5IGNsZWFyZWQuXG4rXHQgKi9cbitcdGlmICghdmFsdWUpXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0LyogQ2xlYXIgdGhlIGVycm9yIGludGVycnVwdHMgc3RhdHVzICovXG4gXHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUkVHX1NUQVRVUzAsIHZhbHVlKTtcbiBcdGlmIChyZXQpIHtcbkBAIC03MjMsOCArNzcyLDcgQEAgc3RhdGljIGludCBvYV90YzZfcHJvY2Vzc19leHRlbmRlZF9zdGF0dXMoc3RydWN0IG9hX3RjNiAqdGM2KVxuIFx0fVxuIFxuIFx0aWYgKEZJRUxEX0dFVChTVEFUVVMwX1JYX0JVRkZFUl9PVkVSRkxPV19FUlJPUiwgdmFsdWUpKSB7XG4tXHRcdHRjNi1cdTAwM2VyeF9idWZfb3ZlcmZsb3cgPSB0cnVlO1xuLVx0XHRvYV90YzZfY2xlYW51cF9vbmdvaW5nX3J4X3NrYih0YzYpO1xuK1x0XHRvYV90YzZfbG9va19mb3JfbmV3X2ZyYW1lKHRjNik7XG4gXHRcdG5ldF9lcnJfcmF0ZWxpbWl0ZWQoXCIlczogUmVjZWl2ZSBidWZmZXIgb3ZlcmZsb3cgZXJyb3JcXG5cIixcbiBcdFx0XHRcdCAgICB0YzYtXHUwMDNlbmV0ZGV2LVx1MDAzZW5hbWUpO1xuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbkBAIC03NTAsNiArNzk4LDggQEAgc3RhdGljIGludCBvYV90YzZfcHJvY2Vzc19leHRlbmRlZF9zdGF0dXMoc3RydWN0IG9hX3RjNiAqdGM2KVxuIFxuIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3NfcnhfY2h1bmtfZm9vdGVyKHN0cnVjdCBvYV90YzYgKnRjNiwgdTMyIGZvb3RlcilcbiB7XG4rXHRpbnQgcmV0ID0gMDtcbitcbiBcdC8qIFByb2Nlc3MgcnggY2h1bmsgZm9vdGVyIGZvciB0aGUgZm9sbG93aW5nLFxuIFx0ICogMS4gdHggY3JlZGl0c1xuIFx0ICogMi4gZXJyb3JzIGlmIGFueSBmcm9tIE1BQy1QSFlcbkBAIC03NjAsOSArODEwLDExIEBAIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3NfcnhfY2h1bmtfZm9vdGVyKHN0cnVjdCBvYV90YzYgKnRjNiwgdTMyIGZvb3RlcilcbiBcdFx0XHRcdFx0ICAgICBmb290ZXIpO1xuIFxuIFx0aWYgKEZJRUxEX0dFVChPQV9UQzZfREFUQV9GT09URVJfRVhURU5ERURfU1RTLCBmb290ZXIpKSB7XG4tXHRcdGludCByZXQgPSBvYV90YzZfcHJvY2Vzc19leHRlbmRlZF9zdGF0dXModGM2KTtcbi1cbi1cdFx0aWYgKHJldClcbitcdFx0cmV0ID0gb2FfdGM2X3Byb2Nlc3NfZXh0ZW5kZWRfc3RhdHVzKHRjNik7XG4rXHRcdC8qIEVBR0FJTiBlcnJvciBpcyByZWNvdmVyYWJsZS4gTW92ZSBvbiB0byBjaGVja1xuK1x0XHQgKiBIRUFERVIgYW5kIFNZTkMgZXJyb3JzIGJlZm9yZSByZXR1cm5pbmcuXG4rXHRcdCAqL1xuK1x0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVBR0FJTilcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuQEAgLTc4MCw3ICs4MzIsNyBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcm9jZXNzX3J4X2NodW5rX2Zvb3RlcihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUzMiBmb290ZXIpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFx0fVxuIFxuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBvYV90YzZfc3VibWl0X3J4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYpXG5AQCAtODA1LDEzICs4NTcsMzUgQEAgc3RhdGljIHZvaWQgb2FfdGM2X3N1Ym1pdF9yeF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2KVxuIFx0dGM2LVx1MDAzZXJ4X3NrYiA9IE5VTEw7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG9hX3RjNl91cGRhdGVfcnhfc2tiKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKnBheWxvYWQsIHU4IGxlbmd0aClcbisvKiBPbiBvdmVyc3Vic2NyaWJlZCB0cmFmZmljIGNvbmRpdGlvbiwgcGFydGljdWxhcmx5IHdpdGggb3ZlcndoZWxtaW5nIHJ4XG4rICogYnVmZmVyIG92ZXJmbG93IGVycm9ycywgdGhlcmUgY291bGQgYmUgZGF0YSBjaHVuayBsb3NzLiBJZiB0YWlsICsgbGVuZ3RoXG4rICogZ29lcyBiZXlvbmQgZW5kIHBvaW50ZXIsIHRoYXQgaXMgYW4gaW5kaWNhdGlvbiB0aGF0IHRoZSBkYXRhIGNodW5rIHdpdGhcbisgKiBlbmRfdmFsaWQgYml0IGlzIGxvc3QuIFRpbWUgdG8gbG9vayBmb3IgYSBkYXRhIGNodW5rIHdpdGggc3RhcnRfdmFsaWQgYml0LlxuKyAqXG4rICogSWYgcnhfc2tiIGlzIE5VTEwsIGl0IGlzIHRpbWUgdG8gc3RhcnQgbG9va2luZyBmb3IgZGF0YSBjaHVuayB3aXRoXG4rICogc3RhcnRfYml0LlxuKyAqL1xuK3N0YXRpYyBpbnQgb2FfdGM2X3VwZGF0ZV9yeF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqcGF5bG9hZCwgdTggbGVuZ3RoKVxuIHtcbitcdGlmICghdGM2LVx1MDAzZXJ4X3NrYiB8fFxuK1x0ICAgIHNrYl90YWlscm9vbSh0YzYtXHUwMDNlcnhfc2tiKSBcdTAwM2MgbGVuZ3RoKSB7XG4rXHRcdG9hX3RjNl9sb29rX2Zvcl9uZXdfZnJhbWUodGM2KTtcbitcdFx0cmV0dXJuIC1FQUdBSU47XG4rXHR9XG4rXG4gXHRtZW1jcHkoc2tiX3B1dCh0YzYtXHUwMDNlcnhfc2tiLCBsZW5ndGgpLCBwYXlsb2FkLCBsZW5ndGgpO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuKy8qIE9uIG92ZXJ3aGVsbWluZyByeCBidWZmZXIgb3ZlcmZsb3cgZXJyb3JzLCBkdWUgdG8gZGF0YSBjaHVuayBsb3NzLCBpdCBpc1xuKyAqIHBvc3NpYmxlIHRoYXQgd2UgZ2V0IHR3byBkYXRhIGNodW5rcyB3aXRoIHN0YXJ0X3ZhbGlkIGJpdCBzZXQsIHdpdGhvdXRcbisgKiBlbmRfdmFsaWQgYml0IHNldCBpbiBiZXR3ZWVuLiBJbiB0aGlzIGNhc2UsIHJ4X3NrYiB3b3VsZCBoYXZlIGEgdmFsaWRcbisgKiBidWZmZXIgcG9pbnRlci4gV2Ugc2hvdWxkIHJlbGVhc2UsIGlmIGEgdmFsaWQgcG9pbnRlciBpcyBmb3VuZCBiZWZvcmVcbisgKiBhbGxvY2F0aW5nIGEgbmV3IG9uZS5cbisgKi9cbiBzdGF0aWMgaW50IG9hX3RjNl9hbGxvY2F0ZV9yeF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2KVxuIHtcbitcdG9hX3RjNl9jbGVhbnVwX29uZ29pbmdfcnhfc2tiKHRjNik7XG4gXHR0YzYtXHUwMDNlcnhfc2tiID0gbmV0ZGV2X2FsbG9jX3NrYl9pcF9hbGlnbih0YzYtXHUwMDNlbmV0ZGV2LCB0YzYtXHUwMDNlbmV0ZGV2LVx1MDAzZW10dSArXG4gXHRcdFx0XHRcdFx0RVRIX0hMRU4gKyBFVEhfRkNTX0xFTik7XG4gXHRpZiAoIXRjNi1cdTAwM2VyeF9za2IpIHtcbkBAIC04MzEsNyArOTA1LDkgQEAgc3RhdGljIGludCBvYV90YzZfcHJjc19jb21wbGV0ZV9yeF9mcmFtZShzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpwYXlsb2FkLFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdG9hX3RjNl91cGRhdGVfcnhfc2tiKHRjNiwgcGF5bG9hZCwgc2l6ZSk7XG4rXHRyZXQgPSBvYV90YzZfdXBkYXRlX3J4X3NrYih0YzYsIHBheWxvYWQsIHNpemUpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbiBcbiBcdG9hX3RjNl9zdWJtaXRfcnhfc2tiKHRjNik7XG4gXG5AQCAtODQ2LDIyICs5MjIsMjQgQEAgc3RhdGljIGludCBvYV90YzZfcHJjc19yeF9mcmFtZV9zdGFydChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpwYXlsb2FkLCB1MTYgc2l6ZSlcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRvYV90YzZfdXBkYXRlX3J4X3NrYih0YzYsIHBheWxvYWQsIHNpemUpO1xuLVxuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gb2FfdGM2X3VwZGF0ZV9yeF9za2IodGM2LCBwYXlsb2FkLCBzaXplKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgb2FfdGM2X3ByY3NfcnhfZnJhbWVfZW5kKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKnBheWxvYWQsIHUxNiBzaXplKVxuK3N0YXRpYyBpbnQgb2FfdGM2X3ByY3NfcnhfZnJhbWVfZW5kKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKnBheWxvYWQsIHUxNiBzaXplKVxuIHtcbi1cdG9hX3RjNl91cGRhdGVfcnhfc2tiKHRjNiwgcGF5bG9hZCwgc2l6ZSk7XG4rXHRpbnQgcmV0O1xuIFxuLVx0b2FfdGM2X3N1Ym1pdF9yeF9za2IodGM2KTtcbitcdHJldCA9IG9hX3RjNl91cGRhdGVfcnhfc2tiKHRjNiwgcGF5bG9hZCwgc2l6ZSk7XG4rXHRpZiAoIXJldClcbitcdFx0b2FfdGM2X3N1Ym1pdF9yeF9za2IodGM2KTtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG9hX3RjNl9wcmNzX29uZ29pbmdfcnhfZnJhbWUoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqcGF5bG9hZCxcbi1cdFx0XHRcdFx0IHUzMiBmb290ZXIpXG4rc3RhdGljIGludCBvYV90YzZfcHJjc19vbmdvaW5nX3J4X2ZyYW1lKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKnBheWxvYWQsXG4rXHRcdFx0XHRcdHUzMiBmb290ZXIpXG4ge1xuLVx0b2FfdGM2X3VwZGF0ZV9yeF9za2IodGM2LCBwYXlsb2FkLCBPQV9UQzZfQ0hVTktfUEFZTE9BRF9TSVpFKTtcbitcdHJldHVybiBvYV90YzZfdXBkYXRlX3J4X3NrYih0YzYsIHBheWxvYWQsXG4rXHRcdFx0XHQgICAgT0FfVEM2X0NIVU5LX1BBWUxPQURfU0laRSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgb2FfdGM2X3ByY3NfcnhfY2h1bmtfcGF5bG9hZChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpkYXRhLFxuQEAgLTg3NiwxMCArOTU0LDEwIEBAIHN0YXRpYyBpbnQgb2FfdGM2X3ByY3NfcnhfY2h1bmtfcGF5bG9hZChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpkYXRhLFxuIFx0dTE2IHNpemU7XG4gXG4gXHQvKiBSZXN0YXJ0IHRoZSBuZXcgcnggZnJhbWUgYWZ0ZXIgcmVjZWl2aW5nIHJ4IGJ1ZmZlciBvdmVyZmxvdyBlcnJvciAqL1xuLVx0aWYgKHN0YXJ0X3ZhbGlkIFx1MDAyNlx1MDAyNiB0YzYtXHUwMDNlcnhfYnVmX292ZXJmbG93KVxuLVx0XHR0YzYtXHUwMDNlcnhfYnVmX292ZXJmbG93ID0gZmFsc2U7XG4rXHRpZiAoc3RhcnRfdmFsaWQgXHUwMDI2XHUwMDI2IHRjNi1cdTAwM2V3YWl0X3VudGlsX3N0YXJ0X3ZhbGlkKVxuK1x0XHR0YzYtXHUwMDNld2FpdF91bnRpbF9zdGFydF92YWxpZCA9IGZhbHNlO1xuIFxuLVx0aWYgKHRjNi1cdTAwM2VyeF9idWZfb3ZlcmZsb3cpXG4rXHRpZiAodGM2LVx1MDAzZXdhaXRfdW50aWxfc3RhcnRfdmFsaWQpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0LyogUHJvY2VzcyB0aGUgY2h1bmsgd2l0aCBjb21wbGV0ZSByeCBmcmFtZSAqL1xuQEAgLTkwMSw4ICs5NzksNyBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcmNzX3J4X2NodW5rX3BheWxvYWQoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqZGF0YSxcbiBcdC8qIFByb2Nlc3MgdGhlIGNodW5rIHdpdGggb25seSByeCBmcmFtZSBlbmQgKi9cbiBcdGlmIChlbmRfdmFsaWQgXHUwMDI2XHUwMDI2ICFzdGFydF92YWxpZCkge1xuIFx0XHRzaXplID0gZW5kX2J5dGVfb2Zmc2V0ICsgMTtcbi1cdFx0b2FfdGM2X3ByY3NfcnhfZnJhbWVfZW5kKHRjNiwgZGF0YSwgc2l6ZSk7XG4tXHRcdHJldHVybiAwO1xuK1x0XHRyZXR1cm4gb2FfdGM2X3ByY3NfcnhfZnJhbWVfZW5kKHRjNiwgZGF0YSwgc2l6ZSk7XG4gXHR9XG4gXG4gXHQvKiBQcm9jZXNzIHRoZSBjaHVuayB3aXRoIHByZXZpb3VzIHJ4IGZyYW1lIGVuZCBhbmQgbmV4dCByeCBmcmFtZVxuQEAgLTkxNiw2ICs5OTMsMTUgQEAgc3RhdGljIGludCBvYV90YzZfcHJjc19yeF9jaHVua19wYXlsb2FkKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKmRhdGEsXG4gXHRcdGlmICh0YzYtXHUwMDNlcnhfc2tiKSB7XG4gXHRcdFx0c2l6ZSA9IGVuZF9ieXRlX29mZnNldCArIDE7XG4gXHRcdFx0b2FfdGM2X3ByY3NfcnhfZnJhbWVfZW5kKHRjNiwgZGF0YSwgc2l6ZSk7XG4rXG4rXHRcdFx0LyogUmV0dXJuIHZhbHVlIGZyb20gb2FfdGM2X3ByY3NfcnhfZnJhbWVfZW5kIGlzIG5vdFxuK1x0XHRcdCAqIGNoZWNrZWQuIElmIGl0IHJldHVybmVkIGFuIGVycm9yLCBpdCBpcyB0byBtYWtlXG4rXHRcdFx0ICogdGhlIGNvZGUgdG8gbG9vayBmb3IgbmV3IGZyYW1lLiBBdCB0aGlzIHN0YWdlLFxuK1x0XHRcdCAqIGNvZGUgYmVsb3cgaXMgZ29pbmcgdG8gcHJvY2VzcyBhIG5ldyBmcmFtZS4gU28sXG4rXHRcdFx0ICogZXJyb3IgY29uZGl0aW9uIGlzIHNldCB0byBmYWxzZSwgaW4gY2FzZSBpdCBpc1xuK1x0XHRcdCAqIHNldCBiZWZvcmUgcHJvY2VlZGluZy5cbitcdFx0XHQgKi9cbitcdFx0XHR0YzYtXHUwMDNld2FpdF91bnRpbF9zdGFydF92YWxpZCA9IGZhbHNlO1xuIFx0XHR9XG4gXHRcdHNpemUgPSBPQV9UQzZfQ0hVTktfUEFZTE9BRF9TSVpFIC0gc3RhcnRfYnl0ZV9vZmZzZXQ7XG4gXHRcdHJldHVybiBvYV90YzZfcHJjc19yeF9mcmFtZV9zdGFydCh0YzYsXG5AQCAtOTI0LDkgKzEwMTAsNyBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcmNzX3J4X2NodW5rX3BheWxvYWQoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqZGF0YSxcbiBcdH1cbiBcbiBcdC8qIFByb2Nlc3MgdGhlIGNodW5rIHdpdGggb25nb2luZyByeCBmcmFtZSBkYXRhICovXG4tXHRvYV90YzZfcHJjc19vbmdvaW5nX3J4X2ZyYW1lKHRjNiwgZGF0YSwgZm9vdGVyKTtcbi1cbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIG9hX3RjNl9wcmNzX29uZ29pbmdfcnhfZnJhbWUodGM2LCBkYXRhLCBmb290ZXIpO1xuIH1cbiBcbiBzdGF0aWMgdTMyIG9hX3RjNl9nZXRfcnhfY2h1bmtfZm9vdGVyKHN0cnVjdCBvYV90YzYgKnRjNiwgdTE2IGZvb3Rlcl9vZmZzZXQpXG5AQCAtOTQyLDggKzEwMjYsOSBAQCBzdGF0aWMgdTMyIG9hX3RjNl9nZXRfcnhfY2h1bmtfZm9vdGVyKHN0cnVjdCBvYV90YzYgKnRjNiwgdTE2IGZvb3Rlcl9vZmZzZXQpXG4gc3RhdGljIGludCBvYV90YzZfcHJvY2Vzc19zcGlfZGF0YV9yeF9idWYoc3RydWN0IG9hX3RjNiAqdGM2LCB1MTYgbGVuZ3RoKVxuIHtcbiBcdHUxNiBub19vZl9yeF9jaHVua3MgPSBsZW5ndGggLyBPQV9UQzZfQ0hVTktfU0laRTtcbitcdGJvb2wgcmV0cnkgPSBmYWxzZTtcbitcdGludCByZXQgPSAwO1xuIFx0dTMyIGZvb3Rlcjtcbi1cdGludCByZXQ7XG4gXG4gXHQvKiBBbGwgdGhlIHJ4IGNodW5rcyBpbiB0aGUgcmVjZWl2ZSBTUEkgZGF0YSBidWZmZXIgYXJlIGV4YW1pbmVkIGhlcmUgKi9cbiBcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBub19vZl9yeF9jaHVua3M7IGkrKykge1xuQEAgLTk1Miw4ICsxMDM3LDExIEBAIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3Nfc3BpX2RhdGFfcnhfYnVmKHN0cnVjdCBvYV90YzYgKnRjNiwgdTE2IGxlbmd0aClcbiBcdFx0XHRcdFx0XHQgICAgT0FfVEM2X0NIVU5LX1BBWUxPQURfU0laRSk7XG4gXG4gXHRcdHJldCA9IG9hX3RjNl9wcm9jZXNzX3J4X2NodW5rX2Zvb3Rlcih0YzYsIGZvb3Rlcik7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGlmIChyZXQgIT0gLUVBR0FJTilcbitcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdFx0cmV0cnkgPSB0cnVlO1xuK1x0XHR9XG4gXG4gXHRcdC8qIElmIHRoZXJlIGlzIGEgZGF0YSB2YWxpZCBjaHVua3MgdGhlbiBwcm9jZXNzIGl0IGZvciB0aGVcbiBcdFx0ICogaW5mb3JtYXRpb24gbmVlZGVkIHRvIGRldGVybWluZSB0aGUgdmFsaWRpdHkgYW5kIHRoZSBsb2NhdGlvblxuQEAgLTk2NSwxMiArMTA1MywzNSBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcm9jZXNzX3NwaV9kYXRhX3J4X2J1ZihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUxNiBsZW5ndGgpXG4gXG4gXHRcdFx0cmV0ID0gb2FfdGM2X3ByY3NfcnhfY2h1bmtfcGF5bG9hZCh0YzYsIHBheWxvYWQsXG4gXHRcdFx0XHRcdFx0XHQgICBmb290ZXIpO1xuLVx0XHRcdGlmIChyZXQpXG4tXHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRcdGlmIChyZXQpIHtcbitcdFx0XHRcdGlmIChyZXQgIT0gLUVOT01FTSBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FQUdBSU4pXG4rXHRcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdFx0XHRyZXRyeSA9IHRydWU7XG4rXHRcdFx0fVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRyZXR1cm4gMDtcbitcdC8qIE5vdCBiYWlsaW5nIG91dCBvbiByZWNvdmVyYWJsZSBlcnJvciBjb2RlcywgLUVBR0FJTiBhbmRcbitcdCAqIC1FTk9NRU0uIElmIHN1YnNlcXVlbnQgbG9vcCBpdGVyYXRpb25zLCBpZiBhbnksIHN1Y2NlZWRzLFxuK1x0ICogZXJyb3IgY29kZSB3b3VsZCBiZSBvdmVyd3JpdHRlbi4gcmV0cnkgZmxhZyBoZWxwcyB0b1xuK1x0ICogbWFrZSB0aGUgY2FsbGVyIHRvIGNvbnRpbnVlIGFuZCByZXRyeS4gU2luY2UgcmVjb3ZlcnlcbitcdCAqIGFjdGlvbiBmb3IgLUVOT01FTSBhbmQgLUVBR0FJTiBhcmUgc2FtZSwgd2UgYXJlIHJldHVybmluZ1xuK1x0ICogb25lIG9mIHRoZSBlcnJvciBjb2RlcywgdGhhdCBpcyAtRUFHQUlOLlxuK1x0ICpcbitcdCAqIFN1Y2Nlc3NmdWwgcmVjb3ZlcnkgZGVwZW5kcyBvbiBob3cgc21hbGwgdGhlIGZyYW1lcyBhcmUsXG4rXHQgKiBob3cgbWFueSBjaHVua3MsIGFtb25nIHRoZSByZWNlaXZlZCBjaHVua3MgdHJpZ2dlcmVkIHRoZVxuK1x0ICogZXJyb3IsIHdoZXRoZXIgZGF0YSBpcyBpbnRhY3QgZXZlbiB3aXRoIGVycm9yIGNvbmRpdGlvbnMuXG4rXHQgKiBBcyBhIHJlc3VsdCwgdGhlcmUgaXMgbm8gc2luZ2xlLCBiZXN0IG1ldGhvZCB0byByZWNvdmVyXG4rXHQgKiBtb3N0IGRhdGEgd2hlbiBlcnJvciBjb25kaXRpb25zIGhpdC4gV2UgZG8gb3VyIGJlc3QgYnlcbitcdCAqIHByb2Nlc3NpbmcgYWxsIHRoZSBjaHVua3Mgd2l0aCBnb29kIFwiZm9vdGVyIGhlYWRlclwiIGFuZFxuK1x0ICogXCJkYXRhIHZhbGlkXCIgYml0IHNldC5cbitcdCAqL1xuK1x0aWYgKHJldHJ5KSB7XG4rXHRcdHJldCA9IC1FQUdBSU47XG4rXHRcdG9hX3RjNl9sb29rX2Zvcl9uZXdfZnJhbWUodGM2KTtcbitcdH1cbitcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBfX2JlMzIgb2FfdGM2X3ByZXBhcmVfZGF0YV9oZWFkZXIoYm9vbCBkYXRhX3ZhbGlkLCBib29sIHN0YXJ0X3ZhbGlkLFxuQEAgLTExMzIsMTIgKzEyNDMsOSBAQCBzdGF0aWMgaW50IG9hX3RjNl90cnlfc3BpX3RyYW5zZmVyKHN0cnVjdCBvYV90YzYgKnRjNilcbiBcdFx0fVxuIFxuIFx0XHRyZXQgPSBvYV90YzZfcHJvY2Vzc19zcGlfZGF0YV9yeF9idWYodGM2LCBzcGlfbGVuKTtcbi1cdFx0aWYgKHJldCkge1xuLVx0XHRcdGlmIChyZXQgPT0gLUVBR0FJTilcbi1cdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdG9hX3RjNl9jbGVhbnVwX29uZ29pbmdfdHhfc2tiKHRjNik7XG4tXHRcdFx0b2FfdGM2X2NsZWFudXBfb25nb2luZ19yeF9za2IodGM2KTtcbitcdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FQUdBSU4pIHtcbitcdFx0XHRvYV90YzZfZnJlZV9vbmdvaW5nX3NrYnModGM2KTtcbiBcdFx0XHRuZXRkZXZfZXJyKHRjNi1cdTAwM2VuZXRkZXYsIFwiRGV2aWNlIGVycm9yOiAlZFxcblwiLCByZXQpO1xuIFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbkBAIC0xMTU5LDE1ICsxMjY3LDIwIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBvYV90YzZfbWFjcGh5X3RocmVhZGVkX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKVxuIFx0ICogbm8gbmVlZCB0byBhdHRlbXB0IHNwaSB0cmFuc2Zlciwgb25jZSBpdCBmYWlscy4gUGVuZGluZyBza2JzXG4gXHQgKiBhcmUgYWxyZWFkeSBmcmVlZC5cbiBcdCAqL1xuLVx0aWYgKCF0YzYtXHUwMDNlZGlzYWJsZV90cmFmZmljKSB7XG4tXHRcdHdoaWxlICh0YzYtXHUwMDNlaW50X2ZsYWcgfHxcbi1cdFx0ICAgICAgICh0YzYtXHUwMDNld2FpdGluZ190eF9za2IgXHUwMDI2XHUwMDI2IHRjNi1cdTAwM2V0eF9jcmVkaXRzKSkge1xuLVx0XHRcdHJldCA9IG9hX3RjNl90cnlfc3BpX3RyYW5zZmVyKHRjNik7XG4tXHRcdFx0aWYgKHJldCkge1xuLVx0XHRcdFx0ZGlzYWJsZV9pcnFfbm9zeW5jKHRjNi1cdTAwM2VzcGktXHUwMDNlaXJxKTtcbi1cdFx0XHRcdG9hX3RjNl9kaXNhYmxlX3RyYWZmaWModGM2KTtcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbitcdHNwaW5fbG9ja19iaChcdTAwMjZ0YzYtXHUwMDNldHhfc2tiX2xvY2spO1xuK1x0aWYgKHRjNi1cdTAwM2VkaXNhYmxlX3RyYWZmaWMpIHtcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGM2LVx1MDAzZXR4X3NrYl9sb2NrKTtcbitcdFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuK1x0fVxuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGM2LVx1MDAzZXR4X3NrYl9sb2NrKTtcbitcbitcdHdoaWxlICh0YzYtXHUwMDNlaW50X2ZsYWcgfHxcbitcdCAgICAgICAodGM2LVx1MDAzZXdhaXRpbmdfdHhfc2tiIFx1MDAyNlx1MDAyNiB0YzYtXHUwMDNldHhfY3JlZGl0cykpIHtcbitcdFx0cmV0ID0gb2FfdGM2X3RyeV9zcGlfdHJhbnNmZXIodGM2KTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGRpc2FibGVfaXJxX25vc3luYyh0YzYtXHUwMDNlc3BpLVx1MDAzZWlycSk7XG4rXHRcdFx0b2FfdGM2X2Rpc2FibGVfdHJhZmZpYyh0YzYpO1xuK1x0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtMTI0NSwyMyArMTM1OCwzMCBAQCBFWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfemVyb19hbGlnbl9yZWNlaXZlX2ZyYW1lX2VuYWJsZSk7XG4gICogQHRjNjogb2FfdGM2IHN0cnVjdC5cbiAgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIGluIHdoaWNoIHRoZSBldGhlcm5ldCBmcmFtZSBpcyBzdG9yZWQuXG4gICpcbi0gKiBSZXR1cm46IE5FVERFVl9UWF9PSyBpZiB0aGUgdHJhbnNtaXQgZXRoZXJuZXQgZnJhbWUgc2tiIGFkZGVkIGluIHRoZSB0eF9za2JfcVxuLSAqIG90aGVyd2lzZSByZXR1cm5zIE5FVERFVl9UWF9CVVNZLlxuKyAqIFJldHVybjogTkVUREVWX1RYX09LIGVpdGhlciBvbiBzdWNjZXNzZnVsIHF1ZXVlaW5nIG9mIHRoZSBwYWNrZXQgZm9yXG4rICogdHJhbnNtaXNzaW9uLCBvciBvbiBwYWNrZXQgZ2V0dGluZyBkcm9wcGVkLiBQYWNrZXQgY2FuIGJlIGRyb3BwZWQgZHVlIHRvXG4rICogZmFpbHVyZSBpbiBsaW5lYXJpemluZyB0aGUgYnVmZmVyIG9yIGRpc2FibGVfdHJhZmZpYyBpcyBzZXQgZHVlIHRvXG4rICogZWFybGllciBmYXRhbCBlcnJvci4gUmV0dXJucyBORVRERVZfVFhfQlVTWSB3aGVuIHRoZXJlIGlzIG5vIHJvb21cbisgKiB0byBxdWV1ZSB0aGUgcGFja2V0LlxuICAqL1xuIG5ldGRldl90eF90IG9hX3RjNl9zdGFydF94bWl0KHN0cnVjdCBvYV90YzYgKnRjNiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRpZiAodGM2LVx1MDAzZWRpc2FibGVfdHJhZmZpYyB8fCB0YzYtXHUwMDNld2FpdGluZ190eF9za2IpIHtcbi1cdFx0bmV0aWZfc3RvcF9xdWV1ZSh0YzYtXHUwMDNlbmV0ZGV2KTtcbi1cdFx0cmV0dXJuIE5FVERFVl9UWF9CVVNZO1xuLVx0fVxuLVxuIFx0aWYgKHNrYl9saW5lYXJpemUoc2tiKSkge1xuLVx0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuLVx0XHR0YzYtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQrKztcbitcdFx0b2FfdGM2X2Ryb3BfdHhfc2tiKHRjNiwgc2tiKTtcbiBcdFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiBcdH1cbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZ0YzYtXHUwMDNldHhfc2tiX2xvY2spO1xuK1x0aWYgKHRjNi1cdTAwM2V3YWl0aW5nX3R4X3NrYikge1xuK1x0XHRuZXRpZl9zdG9wX3F1ZXVlKHRjNi1cdTAwM2VuZXRkZXYpO1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZ0YzYtXHUwMDNldHhfc2tiX2xvY2spO1xuK1x0XHRyZXR1cm4gTkVUREVWX1RYX0JVU1k7XG4rXHR9XG4rXHRpZiAodGM2LVx1MDAzZWRpc2FibGVfdHJhZmZpYykge1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZ0YzYtXHUwMDNldHhfc2tiX2xvY2spO1xuK1x0XHRvYV90YzZfZHJvcF90eF9za2IodGM2LCBza2IpO1xuK1x0XHRyZXR1cm4gTkVUREVWX1RYX09LO1xuK1x0fVxuIFx0dGM2LVx1MDAzZXdhaXRpbmdfdHhfc2tiID0gc2tiO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGM2LVx1MDAzZXR4X3NrYl9sb2NrKTtcbiBcbkBAIC0xMzkzLDggKzE1MTMsMTAgQEAgRVhQT1JUX1NZTUJPTF9HUEwob2FfdGM2X2luaXQpO1xuICAqL1xuIHZvaWQgb2FfdGM2X2V4aXQoc3RydWN0IG9hX3RjNiAqdGM2KVxuIHtcbi1cdHRjNi1cdTAwM2VkaXNhYmxlX3RyYWZmaWMgPSB0cnVlO1xuIFx0ZGlzYWJsZV9pcnEodGM2LVx1MDAzZXNwaS1cdTAwM2VpcnEpO1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnRjNi1cdTAwM2V0eF9za2JfbG9jayk7XG4rXHR0YzYtXHUwMDNlZGlzYWJsZV90cmFmZmljID0gdHJ1ZTtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRjNi1cdTAwM2V0eF9za2JfbG9jayk7XG4gXHRvYV90YzZfcGh5X2V4aXQodGM2KTtcbiBcdG9hX3RjNl9mcmVlX3BlbmRpbmdfc2ticyh0YzYpO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAzOjI0OjM1LjkwNDg4MzIzMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxNTYyMjgyMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgT1BFTiBBbGxpYW5jZSAxMEJBU0UtVDF4IE1BQy1QSFkgRHJpdmVyOiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggYWZmZWN0aW5nIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuY2AsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaGFuZGxlcyBFdGhlcm5ldCBmcmFtZXMgb3ZlciBTUEkgZm9yIHRoZSBPUEVOIEFsbGlhbmNlIDEwQkFTRS1UMXggTUFDLVBIWS4gIFRoZSBzaGVlciB2b2x1bWUgb2YgbW9kaWZpZWQgZnVuY3Rpb25zIOKAkyBhIHdob2xlIHJhZnQgb2YgdGhlbSDigJMgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgdGhpcyB3YXJyYW50cyBhIGNsb3NlciBsb29rIGZvciBmdXp6aW5nIHBvdGVudGlhbC4gSXQncyBhIGNvbXByZWhlbnNpdmUgc2V0IG9mIGNoYW5nZXMgdG91Y2hpbmcgdmFyaW91cyBhc3BlY3RzIGZyb20gdHJhbnNtaXQvcmVjZWl2ZSBidWZmZXJzIHRvIGludGVycnVwdCBoYW5kbGluZyBhbmQgdGhlIFNQSSB0cmFuc2ZlciBtZWNoYW5pc20gaXRzZWxmLiAgVGhlIGFkZGl0aW9uIG9mIGZ1bmN0aW9ucyBsaWtlIGBvYV90YzZfZHJvcF90eF9za2JgLCBgb2FfdGM2X2RldGFjaF93YWl0aW5nX3R4X3NrYmAsIGFuZCBzZXZlcmFsIFJYLXJlbGF0ZWQgYWRkaXRpb25zIGNlcnRhaW5seSBjYXRjaGVzIG15IGF0dGVudGlvbiwgZXNwZWNpYWxseSB0aGUgbnVtZXJvdXMgYHByY3NfKmAgZnVuY3Rpb25zLiBUaGVzZSBhcmUgYWxsIGhpZ2gtdmFsdWUgdGFyZ2V0cy5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMsIFwiQ2FuIHdlIGV2ZW4gKmdldCogdG8gdGhpcyBpbiBhIGZ1enplcj9cIiBUaGlzIGlzIGEgaGFyZHdhcmUgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIGEgTUFDLVBIWSBjb25uZWN0ZWQgdmlhIFNQSS4gVGhhdCByYWlzZXMgYSBzaWduaWZpY2FudCBxdWVzdGlvbjogY2FuIGl0IGJlIHJlYWNoZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBvciBhIGZ1enppbmcgY29udGV4dD8gU1BJIGRldmljZXMgYXJlIG9mdGVuIHBoeXNpY2FsLCBhbmQgaW50ZXJhY3Rpbmcgd2l0aCB0aGVtIGRpcmVjdGx5IGlzIHVzdWFsbHkgYSBuby1nbyBmb3IgZnV6emluZyB3aXRob3V0IGFuIGVtdWxhdG9yIG9yIHNvbWUgZm9ybSBvZiBpbmplY3Rpb24uIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGV0aGVyIHRoZXJlIGFyZSBlbXVsYXRlZCBTUEkgY29udHJvbGxlcnMgYXZhaWxhYmxlIHdpdGhpbiB0aGUgdGVzdGluZyBpbmZyYXN0cnVjdHVyZSBvciwgZXZlbiBiZXR0ZXIsIGlmIHRoZXJlJ3MgYSB3YXkgdG8gaW5qZWN0IFNQSSB0cmFmZmljIGRpcmVjdGx5LiBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgc3l6a2FsbGVyICptaWdodCogaGF2ZSBzb21lIFNQSSBzdXBwb3J0LCBidXQgSSBjYW4ndCBxdWl0ZSByZW1lbWJlciB0aGUgZGV0YWlscy5cblxuVGhlIHJlYWwga2V5IGlzIHJlYWNoYWJpbGl0eS4gIEkgbmVlZCB0byBhc2NlcnRhaW4gaWYgYG9hX3RjNi5jYCBpcyBhY3R1YWxseSAqcmVhY2hhYmxlKiBmcm9tIGEgdXNlci1zcGFjZSBwcm9jZXNzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGtlcm5lbCBjb2RlIGZvciBjYWxscyB0byBgb2FfdGM2X2luaXRgIG9yIGV2ZW4ganVzdCBhIGRpcmVjdCByZWZlcmVuY2UgdG8gXCJvYV90YzZcIiB0byBzZWUgd2hhdCBtb2R1bGUsIGRldmljZSwgb3Igb3RoZXIgY29tcG9uZW50IGFjdHVhbGx5IGxvYWRzIGFuZCB1c2VzIHRoaXMgZHJpdmVyLiAgVGhhdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBiZXN0IGFwcHJvYWNoIGZvciBmdXp6aW5nIHRoaXMgYW5kIGxldCBtZSBrbm93IGlmIGl0J3MgZXZlbiB3b3J0aCB0aGUgZWZmb3J0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzI1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6MjQ6NDQuMDYxMTEzODQ3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTkxMzI2MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2FfdGM2X2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0PTQ1ND1UaGUgaW5jbHVkZS9saW51eC9vYV90YzYuaCBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdC00NTUtXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0OjQ1NjouLiBjOmZ1bmN0aW9uOjogc3RydWN0IG9hX3RjNiAqb2FfdGM2X2luaXQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgXFxcXFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdC00NTctICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmM9MzMzPXN0YXRpYyBpbnQgbGFuODY1eF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jLTM0OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmM6MzQ5OlxcdHByaXYtXFx1MDAzZXRjNiA9IG9hX3RjNl9pbml0KHNwaSwgbmV0ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmMtMzUwLVxcdGlmICghcHJpdi1cXHUwMDNldGM2KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYz0xMzkzPUVYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl9zdGFydF94bWl0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTEzOTUtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmM6MTM5NjogKiBvYV90YzZfaW5pdCAtIGFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgb2FfdGM2IHN0cnVjdHVyZS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy0xMzk3LSAqIEBzcGk6IGRldmljZSB3aXRoIHdoaWNoIGRhdGEgd2lsbCBiZSBleGNoYW5nZWQuXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy0xNDAyLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jOjE0MDM6c3RydWN0IG9hX3RjNiAqb2FfdGM2X2luaXQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy0xNDA0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTE1MDctfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jOjE1MDg6RVhQT1JUX1NZTUJPTF9HUEwob2FfdGM2X2luaXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTE1MDktXFxuLS1cXG5pbmNsdWRlL2xpbnV4L29hX3RjNi5oPTEzPXN0cnVjdCBvYV90YzY7XFxuaW5jbHVkZS9saW51eC9vYV90YzYuaC0xNC1cXG5pbmNsdWRlL2xpbnV4L29hX3RjNi5oOjE1OnN0cnVjdCBvYV90YzYgKm9hX3RjNl9pbml0KHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xcbmluY2x1ZGUvbGludXgvb2FfdGM2LmgtMTYtdm9pZCBvYV90YzZfZXhpdChzdHJ1Y3Qgb2FfdGM2ICp0YzYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzoyNDo0NS44MjAyNTQ0NTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODcyMDk0Njg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQXNzZXNzaW5nIExBTjg2NXggRHJpdmVyJ3MgU3l6a2FsbGVyIENvbXBhdGliaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBsYW44NjV4YCBkcml2ZXIsIHdoaWNoIGlzIGEgTWljcm9jaGlwIExBTjg2NTAvMSBNQUMtUEhZIGRyaXZlci4gVGhlIGtleSBpc3N1ZSBoZXJlIGlzIHRoYXQgaXQgKnJlcXVpcmVzKiBhIHBoeXNpY2FsIFNQSSBkZXZpY2UuIE5vdywgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIEkgY2FuIGdldCB0aGlzIHdvcmtpbmcgd2l0aGluIHRoZSBjb25maW5lcyBvZiBzeXprYWxsZXIgZm9yIGZ1enppbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gSSBzb21laG93IGVtdWxhdGUgdGhpcyBTUEkgZGV2aWNlIHdpdGhpbiB0aGUgc3l6a2FsbGVyIGVudmlyb25tZW50P1xuXG5TeXprYWxsZXIgaXRzZWxmIGRvZXNuJ3Qgb2ZmZXIgYSBnZW5lcmljIFNQSSBlbXVsYXRvciwgd2hpY2ggaXMgYSBiaXQgb2YgYSByb2FkYmxvY2suIEkgcXVpY2tseSBzY2FubmVkIG15IG1lbnRhbCBsYW5kc2NhcGUgZm9yIHNvbWV0aGluZyBhbmFsb2dvdXMgdG8gYG1hYzgwMjExX2h3c2ltYCBmb3IgU1BJLCBhIHNvZnR3YXJlIHNpbXVsYXRpb24gb2YgaGFyZHdhcmUgaW4gdGhlIG5ldHdvcmsgcmVhbG0sIGJ1dCBub3RoaW5nIGp1bXBlZCBvdXQuIERhcm4uXG5cbkFscmlnaHQsIGxldCdzIHN0ZXAgYmFjayBhIGJpdC4gRG9lcyBzeXprYWxsZXIgb2ZmZXIgKmFueSogU1BJIGZ1enppbmcgc3VwcG9ydCwgcGVyaGFwcyB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIGBzcGlkZXZgIG9yIGEgc2ltaWxhciBjb25zdHJ1Y3Q/IE5vLCB0aGF0J3Mgbm90IGl0LiBgc3BpZGV2YCBpcyBhbGwgYWJvdXQgdXNlcnNwYWNlIGludGVyYWN0aW9uIHdpdGggU1BJLCBub3QgYWJvdXQgZW11bGF0aW5nIHRoZSB1bmRlcmx5aW5nIFNQSSBkZXZpY2UgaXRzZWxmLiBUaGF0J3MgYSBjbGFzc2ljIHVzZXItdG8ta2VybmVsIGludGVyZmFjZSwgbm90IGFuIFNQSSBkZXZpY2UgaW4gdGhlIGtlcm5lbC5cblxuU28sIGhlcmUncyB0aGUgY3J1eDogaWYgdGhpcyBkcml2ZXIgKmFic29sdXRlbHkqIG5lZWRzIGEgcGh5c2ljYWwgU1BJIGRldmljZSBsaWtlIHRoZSBMQU44NjV4LCBpdCdzIGdvaW5nIHRvIGJlIHRyaWNreSB0byByZWFjaCBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuIFVubGVzcyBRRU1VIHNwZWNpZmljYWxseSBlbXVsYXRlcyB0aGlzIHBhcnRpY3VsYXIgU1BJIGRldmljZSwgd2hpY2ggaXMgdW5saWtlbHkgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0LiBJIG1pZ2h0IG5lZWQgYSBzb2Z0d2FyZSBlbXVsYXRvciwgYSBzaGltIHRvIHByZXRlbmQgdG8gYmUgdGhlIGhhcmR3YXJlLCBvciBJIG1pZ2h0IGhhdmUgdG8gZ28gZnVsbC1vbiBoYXJkd2FyZS1pbi10aGUtbG9vcCwgd2hpY2ggaXMgZ29pbmcgdG8gYmUgcGFpbmZ1bCBhbmQgbWVzc3kuXG5cbk15IG5leHQgc3RlcCBpcyB0byBjaGVjayBpZiBgbGFuODY1eGAgY2FuIGV2ZW4gKnByb2JlKiBzdWNjZXNzZnVsbHkgaW4gUUVNVS4gVGhhdCdzIHRoZSBiYXNlbGluZSwgcmlnaHQ/IEl0J3MgYW4gU1BJIGRyaXZlciwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgU1BJIHN1YnN5c3RlbSBpcyB3b3JraW5nIGFzIGV4cGVjdGVkLiBMZXQncyBzZWUgaWYgSSBjYW4gZ2V0IGV2ZW4gYmFzaWMgcHJvYmluZyB3b3JraW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDExMSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzoyNDo1MS42OTIzNTIyMThaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMTkxNDE1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsYW44NjV4X2RyaXZlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmM9NDQwPU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGxhbjg2NXhfZHRfaWRzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmMtNDQxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYzo0NDI6c3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIGxhbjg2NXhfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYy00NDMtXFx0LmRyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYy00NTAtfTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmM6NDUxOm1vZHVsZV9zcGlfZHJpdmVyKGxhbjg2NXhfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmMtNDUyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzoyNDo1My4zMjQyNzA1NThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzQzMDc3NzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFNQSSBEcml2ZXIgU2NlbmFyaW8qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIFNQSSBkcml2ZXIgYW5kIGltbWVkaWF0ZWx5IHRoZSBzdGFuZGFyZCBjb25zaWRlcmF0aW9ucyBjb21lIHRvIG1pbmQuIEl0J3MgYW4gU1BJIGRyaXZlciwgc28gbmF0dXJhbGx5LCBpdHMgYmluZGluZyBpcyB0aWVkIHRvIGRldmljZXMgZGVmaW5lZCBpbiB0aGUgZGV2aWNlIHRyZWUgb3IgQUNQSS4gIEluIGEgdHlwaWNhbCBRRU1VIHNldHVwLCBhbmQgSSBrbm93IHRoaXMgZnJvbSBleHBlcmllbmNlLCB0aGUgcHJvYmUgZnVuY3Rpb24gZm9yIHRoaXMgZHJpdmVyIGlzIG5ldmVyIGdvaW5nIHRvIGJlIGNhbGxlZCB1bmxlc3Mgd2UgZXhwbGljaXRseSBhZGQgYSBub2RlIGluIHRoZSBkZXZpY2UgdHJlZSBmb3IgdGhpcyBzcGVjaWZpYyBTUEkgZGV2aWNlIGFuZCB0aGVuIHdpcmUgaXQgdXAgdG8gYW4gZW11bGF0ZWQgU1BJIGNvbnRyb2xsZXIgd2l0aGluIHRoZSBRRU1VIGVudmlyb25tZW50LiBFdmVuIGlmIHdlIGRvIHNvbWVob3cgbWFuYWdlIHRvIGdldCB0aGUgcHJvYmUgdG8gZXhlY3V0ZSwgYWxsIFNQSSBjb21tdW5pY2F0aW9uIHdvdWxkIGJlIGZ1dGlsZSB3aXRob3V0IGFuIGFjdHVhbCBwaWVjZSBvZiBoYXJkd2FyZSB0byByZXNwb25kLlxuXG5XYWl0IGEgc2Vjb25kLi4uIGFuZCB0aGlzIGlzIGFuIGltcG9ydGFudCBwb2ludC4uLiBzeXprYWxsZXIsIGFzIGZhciBhcyBJIHVuZGVyc3RhbmQsIGRvZXNuJ3QgZW11bGF0ZSBTUEkgZGV2aWNlcy4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLiBJZiBpdCBkb2Vzbid0LCB0aGF0IG1lYW5zIEkgbmVlZCB0byBhZGp1c3QgbXkgYXBwcm9hY2guIFRoZSBrZXkgbmV4dCBzdGVwIHRoZW4sIGlzIHRvIGZpZ3VyZSBvdXQgKndobyogZWxzZSBpcyB1c2luZyB0aGUgYG9hX3RjNl9pbml0YCBmdW5jdGlvbi4gVGhhdCdzIHRoZSBuZXh0IGF2ZW51ZSB0byBleHBsb3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA1OCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzoyNDo1Ny42NjczNTA5OTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3MTUyODkxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvYV90YzZfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb2EtdGM2LWZyYW1ld29yay5yc3Q9NDU0PVRoZSBpbmNsdWRlL2xpbnV4L29hX3RjNi5oIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0LTQ1NS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb2EtdGM2LWZyYW1ld29yay5yc3Q6NDU2Oi4uIGM6ZnVuY3Rpb246OiBzdHJ1Y3Qgb2FfdGM2ICpvYV90YzZfaW5pdChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBcXFxcXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0LTQ1Ny0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYz0zMzM9c3RhdGljIGludCBsYW44NjV4X3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmMtMzQ4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYzozNDk6XFx0cHJpdi1cXHUwMDNldGM2ID0gb2FfdGM2X2luaXQoc3BpLCBuZXRkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYy0zNTAtXFx0aWYgKCFwcml2LVxcdTAwM2V0YzYpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jPTEzOTM9RVhQT1JUX1NZTUJPTF9HUEwob2FfdGM2X3N0YXJ0X3htaXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMtMTM5NS0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYzoxMzk2OiAqIG9hX3RjNl9pbml0IC0gYWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyBvYV90YzYgc3RydWN0dXJlLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTEzOTctICogQHNwaTogZGV2aWNlIHdpdGggd2hpY2ggZGF0YSB3aWxsIGJlIGV4Y2hhbmdlZC5cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTE0MDItICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmM6MTQwMzpzdHJ1Y3Qgb2FfdGM2ICpvYV90YzZfaW5pdChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTE0MDQte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMtMTUwNy19XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmM6MTUwODpFWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfaW5pdCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMtMTUwOS1cXG4tLVxcbmluY2x1ZGUvbGludXgvb2FfdGM2Lmg9MTM9c3RydWN0IG9hX3RjNjtcXG5pbmNsdWRlL2xpbnV4L29hX3RjNi5oLTE0LVxcbmluY2x1ZGUvbGludXgvb2FfdGM2Lmg6MTU6c3RydWN0IG9hX3RjNiAqb2FfdGM2X2luaXQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XFxuaW5jbHVkZS9saW51eC9vYV90YzYuaC0xNi12b2lkIG9hX3RjNl9leGl0KHN0cnVjdCBvYV90YzYgKnRjNik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAzOjI0OjU5LjEzODg4Mzg4OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNDMzNzAzOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRnV6emluZyBXb3J0aGluZXNzKipcblxuT2theSwgc28gdGhpcyBjb2RlIHBhdGggaXMgZXhjbHVzaXZlbHkgdGllZCB0byB0aGUgYGxhbjg2NXhgIGRyaXZlci4gVGhhdCdzIGEgc3BlY2lmaWMgU1BJIGRyaXZlciBmb3IgYSBNQUMtUEhZLiBTaW5jZSB3ZSdyZSBub3QgZW11bGF0aW5nIHRoYXQgaGFyZHdhcmUg4oCTIG5laXRoZXIgaW4gR0NFIG5vciBRRU1VIOKAkyB0aG9zZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGFueSBvZiBteSB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cy4gTXkgaW5pdGlhbCBpbmNsaW5hdGlvbiBpcyB0aGF0IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLlxuXG5CdXQgaG9sZCBvbiwgbGV0IG1lIHF1aWNrbHkgdGhpbmsgdGhpcyB0aHJvdWdoLiBDYW4gc3l6a2FsbGVyIHNvbWVob3cgaW5qZWN0IFNQSSB0cmFmZmljPyBJIGtub3cgaXQgY2FuIGRvIFVTQiBhbmQgUENJICh0aHJvdWdoIGVtdWxhdGVkIGRldmljZXMgb3IgZGlyZWN0bHkgdmlhIHJhdyBQQ0kgY29uZmlnIHNwYWNlKSwgYnV0IFNQSSBpcyBkaWZmZXJlbnQuIFNQSSBuZWVkcyBhIG1hc3RlciBjb250cm9sbGVyLCBhbmQgdGhlIGBsYW44NjV4YCBkZXZpY2UgaXMgYSBzbGF2ZS4gV2l0aG91dCBib3RoIGFuIGVtdWxhdGVkIFNQSSBjb250cm9sbGVyICphbmQqIHRoZSBlbXVsYXRlZCBgbGFuODY1eGAgZGV2aWNlIGl0c2VsZiwgdGhlIGRyaXZlcidzIHByb2JlIGZ1bmN0aW9uIHdpbGwgbmV2ZXIgZXZlbiBnZXQgY2FsbGVkLlxuXG5FdmVuIGlmIEkgY291bGQgc29tZWhvdyBmb3JjZSB0aGUgU1BJIGRldmljZSBpbnN0YW50aWF0aW9uIOKAkyBtYXliZSB0aHJvdWdoIHN5c2ZzLCBjb25maWdmcyAoaWYgc3VwcG9ydGVkKSwgb3IgYSBkZXZpY2UgdHJlZSBvdmVybGF5IOKAkyB0aGUgU1BJIHRyYW5zZmVycyB3b3VsZCBpbmV2aXRhYmx5IGZhaWwgb3IgdGltZW91dC4gVGhlcmUncyBzaW1wbHkgbm8gaGFyZHdhcmUgcmVzcG9uZGluZyB0byB0aGUgU1BJIG1lc3NhZ2VzLiBUaGUgYG9hX3RjNmAgZnJhbWV3b3JrIGNvbW11bmljYXRlcyBvdmVyIFNQSSB1c2luZyBgc3BpX3N5bmNgIG9yIGBzcGlfYXN5bmNgLiBXaXRob3V0IGhhcmR3YXJlLCBgc3BpX3N5bmNgIGlzIGxpa2VseSB0byBlaXRoZXIgcmV0dXJuIGFuIGVycm9yIG9yIHNpbGVudGx5IHNlbmQgZGF0YSBpbnRvIHRoZSB2b2lkLCByZXR1cm5pbmcgZWl0aGVyIGFsbCB6ZXJvcyBvciBvbmVzLiBCdXQsIGFuZCB0aGlzIGlzIHRoZSBjcnV4IG9mIGl0LCB0byBldmVuICpnZXQqIHRvIHRoYXQgcG9pbnQsIHRoZSBgbGFuODY1eF9wcm9iZWAgZnVuY3Rpb24gaGFzIHRvIHN1Y2NlZWQuXG5cbkFscmlnaHQsIHRpbWUgdG8gZXhhbWluZSBgbGFuODY1eF9wcm9iZWAgY2xvc2VseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxMzgsIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6MjU6MDYuMjgyMjU2ODYxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzMsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzMzOlxcdHN0YXRpYyBpbnQgbGFuODY1eF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxcbiAzMzQ6XFx0e1xcbiAzMzU6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG4gMzM2OlxcdFxcdHN0cnVjdCBsYW44NjV4X3ByaXYgKnByaXY7XFxuIDMzNzpcXHRcXHRpbnQgcmV0O1xcbiAzMzg6XFx0XFxuIDMzOTpcXHRcXHRuZXRkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGxhbjg2NXhfcHJpdikpO1xcbiAzNDA6XFx0XFx0aWYgKCFuZXRkZXYpXFxuIDM0MTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMzQyOlxcdFxcbiAzNDM6XFx0XFx0cHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIDM0NDpcXHRcXHRwcml2LVxcdTAwM2VuZXRkZXYgPSBuZXRkZXY7XFxuIDM0NTpcXHRcXHRwcml2LVxcdTAwM2VzcGkgPSBzcGk7XFxuIDM0NjpcXHRcXHRzcGlfc2V0X2RydmRhdGEoc3BpLCBwcml2KTtcXG4gMzQ3OlxcdFxcdElOSVRfV09SSyhcXHUwMDI2cHJpdi1cXHUwMDNlbXVsdGljYXN0X3dvcmssIGxhbjg2NXhfbXVsdGljYXN0X3dvcmtfaGFuZGxlcik7XFxuIDM0ODpcXHRcXG4gMzQ5OlxcdFxcdHByaXYtXFx1MDAzZXRjNiA9IG9hX3RjNl9pbml0KHNwaSwgbmV0ZGV2KTtcXG4gMzUwOlxcdFxcdGlmICghcHJpdi1cXHUwMDNldGM2KSB7XFxuIDM1MTpcXHRcXHRcXHRyZXQgPSAtRU5PREVWO1xcbiAzNTI6XFx0XFx0XFx0Z290byBmcmVlX25ldGRldjtcXG4gMzUzOlxcdFxcdH1cXG4gMzU0OlxcdFxcbiAzNTU6XFx0XFx0LyogTEFOODY1eCBSZXYuQjAvQjEgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZyb20gQU4xNzYwXFxuIDM1NjpcXHRcXHQgKiBBcyBwZXIgdGhlIENvbmZpZ3VyYXRpb24gQXBwbGljYXRpb24gTm90ZSBBTjE3NjAgcHVibGlzaGVkIGluIHRoZVxcbiAzNTc6XFx0XFx0ICogbGluaywgaHR0cHM6Ly93d3cubWljcm9jaGlwLmNvbS9lbi11cy9hcHBsaWNhdGlvbi1ub3Rlcy9hbjE3NjBcXG4gMzU4OlxcdFxcdCAqIFJldmlzaW9uIEYgKERTNjAwMDE3NjBHIC0gSnVuZSAyMDI0KSwgY29uZmlndXJlIHRoZSBNQUMgdG8gc2V0IHRpbWVcXG4gMzU5OlxcdFxcdCAqIHN0YW1waW5nIGF0IHRoZSBlbmQgb2YgdGhlIFN0YXJ0IG9mIEZyYW1lIERlbGltaXRlciAoU0ZEKSBhbmQgc2V0IHRoZVxcbiAzNjA6XFx0XFx0ICogVGltZXIgSW5jcmVtZW50IHJlZyB0byA0MCBucyB0byBiZSB1c2VkIGFzIGEgMjUgTUh6IGludGVybmFsIGNsb2NrLlxcbiAzNjE6XFx0XFx0ICovXFxuIDM2MjpcXHRcXHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXIocHJpdi1cXHUwMDNldGM2LCBMQU44NjVYX1JFR19NQUNfVFNVX1RJTUVSX0lOQ1IsXFxuIDM2MzpcXHRcXHRcXHRcXHRcXHQgICAgTUFDX1RTVV9USU1FUl9JTkNSX0NPVU5UX05BTk9TRUNPTkRTKTtcXG4gMzY0OlxcdFxcdGlmIChyZXQpIHtcXG4gMzY1OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnNwaS1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIGNvbmZpZyBUU1UgVGltZXIgSW5jciByZWc6ICVkXFxcXG5cXFwiLFxcbiAzNjY6XFx0XFx0XFx0XFx0cmV0KTtcXG4gMzY3OlxcdFxcdFxcdGdvdG8gb2FfdGM2X2V4aXQ7XFxuIDM2ODpcXHRcXHR9XFxuIDM2OTpcXHRcXG4gMzcwOlxcdFxcdC8qIEFzIHBlciB0aGUgcG9pbnQgczMgaW4gdGhlIGJlbG93IGVycmF0YSwgU1BJIHJlY2VpdmUgRXRoZXJuZXQgZnJhbWVcXG4gMzcxOlxcdFxcdCAqIHRyYW5zZmVyIG1heSBoYWx0IHdoZW4gc3RhcnRpbmcgdGhlIG5leHQgZnJhbWUgaW4gdGhlIHNhbWUgZGF0YSBibG9ja1xcbiAzNzI6XFx0XFx0ICogKGNodW5rKSBhcyB0aGUgZW5kIG9mIGEgcHJldmlvdXMgZnJhbWUuIFRoZSBSRkEgZmllbGQgc2hvdWxkIGJlXFxuIDM3MzpcXHRcXHQgKiBjb25maWd1cmVkIHRvIDAxYiBvciAxMGIgZm9yIHByb3BlciBvcGVyYXRpb24uIEluIHRoZXNlIG1vZGVzLCBvbmx5XFxuIDM3NDpcXHRcXHQgKiBvbmUgcmVjZWl2ZSBFdGhlcm5ldCBmcmFtZSB3aWxsIGJlIHBsYWNlZCBpbiBhIHNpbmdsZSBkYXRhIGJsb2NrLlxcbiAzNzU6XFx0XFx0ICogV2hlbiB0aGUgUkZBIGZpZWxkIGlzIHdyaXR0ZW4gdG8gMDFiLCByZWNlaXZlZCBmcmFtZXMgd2lsbCBiZSBmb3JjZWRcXG4gMzc2OlxcdFxcdCAqIHRvIG9ubHkgc3RhcnQgaW4gdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGRhdGEgYmxvY2sgcGF5bG9hZCAoU1dPPTApLiBBc1xcbiAzNzc6XFx0XFx0ICogcmVjb21tZW5kZWQsIGVuYWJsZSB6ZXJvIGFsaWduIHJlY2VpdmUgZnJhbWUgZmVhdHVyZSBmb3IgcHJvcGVyXFxuIDM3ODpcXHRcXHQgKiBvcGVyYXRpb24uXFxuIDM3OTpcXHRcXHQgKlxcbiAzODA6XFx0XFx0ICogaHR0cHM6Ly93dzEubWljcm9jaGlwLmNvbS9kb3dubG9hZHMvYWVtRG9jdW1lbnRzL2RvY3VtZW50cy9BSVMvUHJvZHVjdERvY3VtZW50cy9FcnJhdGEvTEFOODY1MC0xLUVycmF0YS04MDAwMTA3NS5wZGZcXG4gMzgxOlxcdFxcdCAqL1xcbiAzODI6XFx0XFx0cmV0ID0gb2FfdGM2X3plcm9fYWxpZ25fcmVjZWl2ZV9mcmFtZV9lbmFibGUocHJpdi1cXHUwMDNldGM2KTtcXG4gMzgzOlxcdFxcdGlmIChyZXQpIHtcXG4gMzg0OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnNwaS1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHNldCBaQVJGRTogJWRcXFxcblxcXCIsIHJldCk7XFxuIDM4NTpcXHRcXHRcXHRnb3RvIG9hX3RjNl9leGl0O1xcbiAzODY6XFx0XFx0fVxcbiAzODc6XFx0XFxuIDM4ODpcXHRcXHQvKiBHZXQgdGhlIE1BQyBhZGRyZXNzIGZyb20gdGhlIFNQSSBkZXZpY2UgdHJlZSBub2RlICovXFxuIDM4OTpcXHRcXHRpZiAoZGV2aWNlX2dldF9ldGhkZXZfYWRkcmVzcyhcXHUwMDI2c3BpLVxcdTAwM2VkZXYsIG5ldGRldikpXFxuIDM5MDpcXHRcXHRcXHRldGhfaHdfYWRkcl9yYW5kb20obmV0ZGV2KTtcXG4gMzkxOlxcdFxcbiAzOTI6XFx0XFx0cmV0ID0gbGFuODY1eF9zZXRfaHdfbWFjYWRkcihwcml2LCBuZXRkZXYtXFx1MDAzZWRldl9hZGRyKTtcXG4gMzkzOlxcdFxcdGlmIChyZXQpIHtcXG4gMzk0OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnNwaS1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIGNvbmZpZ3VyZSBNQUM6ICVkXFxcXG5cXFwiLCByZXQpO1xcbiAzOTU6XFx0XFx0XFx0Z290byBvYV90YzZfZXhpdDtcXG4gMzk2OlxcdFxcdH1cXG4gMzk3OlxcdFxcbiAzOTg6XFx0XFx0bmV0ZGV2LVxcdTAwM2VpZl9wb3J0ID0gSUZfUE9SVF8xMEJBU0VUO1xcbiAzOTk6XFx0XFx0bmV0ZGV2LVxcdTAwM2VpcnEgPSBzcGktXFx1MDAzZWlycTtcXG4gNDAwOlxcdFxcdG5ldGRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZsYW44NjV4X25ldGRldl9vcHM7XFxuIDQwMTpcXHRcXHRuZXRkZXYtXFx1MDAzZWV0aHRvb2xfb3BzID0gXFx1MDAyNmxhbjg2NXhfZXRodG9vbF9vcHM7XFxuIDQwMjpcXHRcXG4gNDAzOlxcdFxcdHJldCA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpO1xcbiA0MDQ6XFx0XFx0aWYgKHJldCkge1xcbiA0MDU6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2c3BpLVxcdTAwM2VkZXYsIFxcXCJSZWdpc3RlciBuZXRkZXYgZmFpbGVkIChyZXQgPSAlZClcXFwiLCByZXQpO1xcbiA0MDY6XFx0XFx0XFx0Z290byBvYV90YzZfZXhpdDtcXG4gNDA3OlxcdFxcdH1cXG4gNDA4OlxcdFxcbiA0MDk6XFx0XFx0cmV0dXJuIDA7XFxuIDQxMDpcXHRcXG4gNDExOlxcdG9hX3RjNl9leGl0OlxcbiA0MTI6XFx0XFx0b2FfdGM2X2V4aXQocHJpdi1cXHUwMDNldGM2KTtcXG4gNDEzOlxcdGZyZWVfbmV0ZGV2OlxcbiA0MTQ6XFx0XFx0ZnJlZV9uZXRkZXYocHJpdi1cXHUwMDNlbmV0ZGV2KTtcXG4gNDE1OlxcdFxcdHJldHVybiByZXQ7XFxuIDQxNjpcXHR9XFxuIDQxNzpcXHRcXG4gNDE4OlxcdHN0YXRpYyB2b2lkIGxhbjg2NXhfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXFxuIDQxOTpcXHR7XFxuIDQyMDpcXHRcXHRzdHJ1Y3QgbGFuODY1eF9wcml2ICpwcml2ID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7XFxuIDQyMTpcXHRcXG4gNDIyOlxcdFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnByaXYtXFx1MDAzZW11bHRpY2FzdF93b3JrKTtcXG4gNDIzOlxcdFxcdHVucmVnaXN0ZXJfbmV0ZGV2KHByaXYtXFx1MDAzZW5ldGRldik7XFxuIDQyNDpcXHRcXHRvYV90YzZfZXhpdChwcml2LVxcdTAwM2V0YzYpO1xcbiA0MjU6XFx0XFx0ZnJlZV9uZXRkZXYocHJpdi1cXHUwMDNlbmV0ZGV2KTtcXG4gNDI2OlxcdH1cXG4gNDI3OlxcdFxcbiA0Mjg6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBzcGlfZGV2aWNlX2lkIGxhbjg2NXhfaWRzW10gPSB7XFxuIDQyOTpcXHRcXHR7IC5uYW1lID0gXFxcImxhbjg2NTBcXFwiIH0sXFxuIDQzMDpcXHRcXHR7IC5uYW1lID0gXFxcImxhbjg2NTFcXFwiIH0sXFxuIDQzMTpcXHRcXHR7fSxcXG4gNDMyOlxcdH07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAzOjI1OjA2LjI4MjM1NTgwMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTEyNjgxNzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTEFOODY1eCBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBgbGFuODY1eF9wcm9iZWAgZnVuY3Rpb24gaXMgY2FsbGluZyBgb2FfdGM2X2luaXRgLiAgVGhlbiwgcmlnaHQgYWZ0ZXIgdGhhdCwgd2UndmUgZ290IGEgY2FsbCB0byBgb2FfdGM2X3dyaXRlX3JlZ2lzdGVyYC4gIE15IGd1dCBmZWVsaW5nIGlzIHN0YXJ0aW5nIHRvIGtpY2sgaW4uLi4gIGlmIHdlJ3JlIG1pc3NpbmcgdGhlIHBoeXNpY2FsIGhhcmR3YXJlLCB0aGF0IGBvYV90YzZfd3JpdGVfcmVnaXN0ZXJgIGlzIHByb2JhYmx5IHdoZXJlIHRoaW5ncyBhcmUgZ29pbmcgdG8gZmFsbCBhcGFydC4gSXTigJlzIG1ha2luZyBTUEkgdHJhbnNmZXJzLCBhbmQgb2YgY291cnNlLCBpdOKAmXMgZ29pbmcgdG8gZXhwZWN0IHNvbWUgc29ydCBvZiB2YWxpZCByZXNwb25zZSBiYWNrLiBUaGF0J3MgdGhlIHR5cGljYWwgYmVoYXZpb3IuXG5cbkhvbGQgb24gYSBzZWNvbmQsIHRob3VnaC4gQmVmb3JlIEkganVtcCB0byBhbnkgY29uY2x1c2lvbnMsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBob3cgYG9hX3RjNl93cml0ZV9yZWdpc3RlcmAgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIEkgdGhpbmsgaXQgd2lsbCBmYWlsLiBMZXQncyBtYWtlIHN1cmUgSSdtIG5vdCBtYWtpbmcgYW55IGFzc3VtcHRpb25zIGhlcmUuIFRoZSBkZXRhaWxzIGFyZSBjcml0aWNhbCwgZXNwZWNpYWxseSB3aXRoIHRoaXMga2luZCBvZiBoYXJkd2FyZSBpbnRlcmFjdGlvbi4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgaGF2ZSBzb21lIGtpbmQgb2Ygc2FmZWd1YXJkIGJ1aWx0IGludG8gaXQuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDU4NSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6MjU6MTAuMTk1MDQ0OTkyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzIxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCtcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBPUEVOIEFsbGlhbmNlIDEwQkFTReKAkVQxeCBNQUPigJFQSFkgU2VyaWFsIEludGVyZmFjZSBmcmFtZXdvcmtcXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBBdXRob3I6IFBhcnRoaWJhbiBWZWVyYXNvb3JhbiBcXHUwMDNjcGFydGhpYmFuLnZlZXJhc29vcmFuQG1pY3JvY2hpcC5jb21cXHUwMDNlXFxuICAgNjpcXHQgKi9cXG4gICA3OlxcdFxcbiAgIDg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9wb2xsLmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaW50ZXJydXB0LmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbWRpby5oXFx1MDAzZVxcbiAgMTI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L29hX3RjNi5oXFx1MDAzZVxcbiAgMTQ6XFx0XFxuICAxNTpcXHQvKiBPUEVOIEFsbGlhbmNlIFRDNiByZWdpc3RlcnMgKi9cXG4gIDE2OlxcdC8qIFN0YW5kYXJkIENhcGFiaWxpdGllcyBSZWdpc3RlciAqL1xcbiAgMTc6XFx0I2RlZmluZSBPQV9UQzZfUkVHX1NURENBUFxcdFxcdFxcdDB4MDAwMlxcbiAgMTg6XFx0I2RlZmluZSBTVERDQVBfRElSRUNUX1BIWV9SRUdfQUNDRVNTXFx0XFx0QklUKDgpXFxuICAxOTpcXHRcXG4gIDIwOlxcdC8qIFJlc2V0IENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAqL1xcbiAgMjE6XFx0I2RlZmluZSBPQV9UQzZfUkVHX1JFU0VUXFx0XFx0XFx0MHgwMDAzXFxuICAyMjpcXHQjZGVmaW5lIFJFU0VUX1NXUkVTRVRcXHRcXHRcXHRcXHRCSVQoMClcXHQvKiBTb2Z0d2FyZSBSZXNldCAqL1xcbiAgMjM6XFx0XFxuICAyNDpcXHQvKiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICMwICovXFxuICAyNTpcXHQjZGVmaW5lIE9BX1RDNl9SRUdfQ09ORklHMFxcdFxcdFxcdDB4MDAwNFxcbiAgMjY6XFx0I2RlZmluZSBDT05GSUcwX1NZTkNcXHRcXHRcXHRcXHRCSVQoMTUpXFxuICAyNzpcXHQjZGVmaW5lIENPTkZJRzBfWkFSRkVfRU5BQkxFXFx0XFx0XFx0QklUKDEyKVxcbiAgMjg6XFx0XFxuICAyOTpcXHQvKiBTdGF0dXMgUmVnaXN0ZXIgIzAgKi9cXG4gIDMwOlxcdCNkZWZpbmUgT0FfVEM2X1JFR19TVEFUVVMwXFx0XFx0XFx0MHgwMDA4XFxuICAzMTpcXHQjZGVmaW5lIFNUQVRVUzBfUkVTRVRDXFx0XFx0XFx0XFx0QklUKDYpXFx0LyogUmVzZXQgQ29tcGxldGUgKi9cXG4gIDMyOlxcdCNkZWZpbmUgU1RBVFVTMF9IRUFERVJfRVJST1JcXHRcXHRcXHRCSVQoNSlcXG4gIDMzOlxcdCNkZWZpbmUgU1RBVFVTMF9MT1NTX09GX0ZSQU1FX0VSUk9SXFx0XFx0QklUKDQpXFxuICAzNDpcXHQjZGVmaW5lIFNUQVRVUzBfUlhfQlVGRkVSX09WRVJGTE9XX0VSUk9SXFx0QklUKDMpXFxuICAzNTpcXHQjZGVmaW5lIFNUQVRVUzBfVFhfUFJPVE9DT0xfRVJST1JcXHRcXHRCSVQoMClcXG4gIDM2OlxcdFxcbiAgMzc6XFx0LyogQnVmZmVyIFN0YXR1cyBSZWdpc3RlciAqL1xcbiAgMzg6XFx0I2RlZmluZSBPQV9UQzZfUkVHX0JVRkZFUl9TVEFUVVNcXHRcXHQweDAwMEJcXG4gIDM5OlxcdCNkZWZpbmUgQlVGRkVSX1NUQVRVU19UWF9DUkVESVRTX0FWQUlMQUJMRVxcdEdFTk1BU0soMTUsIDgpXFxuICA0MDpcXHQjZGVmaW5lIEJVRkZFUl9TVEFUVVNfUlhfQ0hVTktTX0FWQUlMQUJMRVxcdEdFTk1BU0soNywgMClcXG4gIDQxOlxcdFxcbiAgNDI6XFx0LyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgIzAgKi9cXG4gIDQzOlxcdCNkZWZpbmUgT0FfVEM2X1JFR19JTlRfTUFTSzBcXHRcXHRcXHQweDAwMENcXG4gIDQ0OlxcdCNkZWZpbmUgSU5UX01BU0swX0hFQURFUl9FUlJfTUFTS1xcdFxcdEJJVCg1KVxcbiAgNDU6XFx0I2RlZmluZSBJTlRfTUFTSzBfTE9TU19PRl9GUkFNRV9FUlJfTUFTS1xcdEJJVCg0KVxcbiAgNDY6XFx0I2RlZmluZSBJTlRfTUFTSzBfUlhfQlVGRkVSX09WRVJGTE9XX0VSUl9NQVNLXFx0QklUKDMpXFxuICA0NzpcXHQjZGVmaW5lIElOVF9NQVNLMF9UWF9QUk9UT0NPTF9FUlJfTUFTS1xcdFxcdEJJVCgwKVxcbiAgNDg6XFx0I2RlZmluZSBJTlRfTUFTSzBfQUxMX0lOVEVSUlVQVFMgICAgICAgICAgICAgICAgKEdFTk1BU0soNSwgMCkgfCBcXFxcXFxuICA0OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgR0VOTUFTSygxMiwgNykpXFxuICA1MDpcXHRcXG4gIDUxOlxcdC8qIFBIWSBDbGF1c2UgMjIgcmVnaXN0ZXJzIGJhc2UgYWRkcmVzcyBhbmQgbWFzayAqL1xcbiAgNTI6XFx0I2RlZmluZSBPQV9UQzZfUEhZX1NURF9SRUdfQUREUl9CQVNFXFx0XFx0MHhGRjAwXFxuICA1MzpcXHQjZGVmaW5lIE9BX1RDNl9QSFlfU1REX1JFR19BRERSX01BU0tcXHRcXHQweDFGXFxuICA1NDpcXHRcXG4gIDU1OlxcdC8qIENvbnRyb2wgY29tbWFuZCBoZWFkZXIgKi9cXG4gIDU2OlxcdCNkZWZpbmUgT0FfVEM2X0NUUkxfSEVBREVSX0RBVEFfTk9UX0NUUkxcXHRCSVQoMzEpXFxuICA1NzpcXHQjZGVmaW5lIE9BX1RDNl9DVFJMX0hFQURFUl9XUklURV9OT1RfUkVBRFxcdEJJVCgyOSlcXG4gIDU4OlxcdCNkZWZpbmUgT0FfVEM2X0NUUkxfSEVBREVSX01FTV9NQVBfU0VMRUNUT1JcXHRHRU5NQVNLKDI3LCAyNClcXG4gIDU5OlxcdCNkZWZpbmUgT0FfVEM2X0NUUkxfSEVBREVSX0FERFJcXHRcXHRcXHRHRU5NQVNLKDIzLCA4KVxcbiAgNjA6XFx0I2RlZmluZSBPQV9UQzZfQ1RSTF9IRUFERVJfTEVOR1RIXFx0XFx0R0VOTUFTSyg3LCAxKVxcbiAgNjE6XFx0I2RlZmluZSBPQV9UQzZfQ1RSTF9IRUFERVJfUEFSSVRZXFx0XFx0QklUKDApXFxuICA2MjpcXHRcXG4gIDYzOlxcdC8qIERhdGEgaGVhZGVyICovXFxuICA2NDpcXHQjZGVmaW5lIE9BX1RDNl9EQVRBX0hFQURFUl9EQVRBX05PVF9DVFJMXFx0QklUKDMxKVxcbiAgNjU6XFx0I2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfREFUQV9WQUxJRFxcdFxcdEJJVCgyMSlcXG4gIDY2OlxcdCNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX1NUQVJUX1ZBTElEXFx0XFx0QklUKDIwKVxcbiAgNjc6XFx0I2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfU1RBUlRfV09SRF9PRkZTRVRcXHRHRU5NQVNLKDE5LCAxNilcXG4gIDY4OlxcdCNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX0VORF9WQUxJRFxcdFxcdEJJVCgxNClcXG4gIDY5OlxcdCNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX0VORF9CWVRFX09GRlNFVFxcdEdFTk1BU0soMTMsIDgpXFxuICA3MDpcXHQjZGVmaW5lIE9BX1RDNl9EQVRBX0hFQURFUl9QQVJJVFlcXHRcXHRCSVQoMClcXG4gIDcxOlxcdFxcbiAgNzI6XFx0LyogRGF0YSBmb290ZXIgKi9cXG4gIDczOlxcdCNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX0VYVEVOREVEX1NUU1xcdFxcdEJJVCgzMSlcXG4gIDc0OlxcdCNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX1JYRF9IRUFERVJfQkFEXFx0QklUKDMwKVxcbiAgNzU6XFx0I2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfQ09ORklHX1NZTkNcXHRcXHRCSVQoMjkpXFxuICA3NjpcXHQjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9SWF9DSFVOS1NcXHRcXHRHRU5NQVNLKDI4LCAyNClcXG4gIDc3OlxcdCNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX0RBVEFfVkFMSURcXHRcXHRCSVQoMjEpXFxuICA3ODpcXHQjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9TVEFSVF9WQUxJRFxcdFxcdEJJVCgyMClcXG4gIDc5OlxcdCNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX1NUQVJUX1dPUkRfT0ZGU0VUXFx0R0VOTUFTSygxOSwgMTYpXFxuICA4MDpcXHQjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9FTkRfVkFMSURcXHRcXHRCSVQoMTQpXFxuICA4MTpcXHQjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9FTkRfQllURV9PRkZTRVRcXHRHRU5NQVNLKDEzLCA4KVxcbiAgODI6XFx0I2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfVFhfQ1JFRElUU1xcdFxcdEdFTk1BU0soNSwgMSlcXG4gIDgzOlxcdFxcbiAgODQ6XFx0LyogUEhZIOKAkyBDbGF1c2UgNDUgcmVnaXN0ZXJzIG1lbW9yeSBtYXAgc2VsZWN0b3IgKE1NUykgYXMgcGVyIHRhYmxlIDYgaW4gdGhlXFxuICA4NTpcXHQgKiBPUEVOIEFsbGlhbmNlIHNwZWNpZmljYXRpb24uXFxuICA4NjpcXHQgKi9cXG4gIDg3OlxcdCNkZWZpbmUgT0FfVEM2X1BIWV9DNDVfUENTX01NUzJcXHRcXHRcXHQyXFx0LyogTU1EIDMgKi9cXG4gIDg4OlxcdCNkZWZpbmUgT0FfVEM2X1BIWV9DNDVfUE1BX1BNRF9NTVMzXFx0XFx0M1xcdC8qIE1NRCAxICovXFxuICA4OTpcXHQjZGVmaW5lIE9BX1RDNl9QSFlfQzQ1X1ZTX1BMQ0FfTU1TNFxcdFxcdDRcXHQvKiBNTUQgMzEgKi9cXG4gIDkwOlxcdCNkZWZpbmUgT0FfVEM2X1BIWV9DNDVfQVVUT19ORUdfTU1TNVxcdFxcdDVcXHQvKiBNTUQgNyAqL1xcbiAgOTE6XFx0I2RlZmluZSBPQV9UQzZfUEhZX0M0NV9QT1dFUl9VTklUX01NUzZcXHRcXHQ2XFx0LyogTU1EIDEzICovXFxuICA5MjpcXHRcXG4gIDkzOlxcdCNkZWZpbmUgT0FfVEM2X0NUUkxfSEVBREVSX1NJWkVcXHRcXHRcXHQ0XFxuICA5NDpcXHQjZGVmaW5lIE9BX1RDNl9DVFJMX1JFR19WQUxVRV9TSVpFXFx0XFx0NFxcbiAgOTU6XFx0I2RlZmluZSBPQV9UQzZfQ1RSTF9JR05PUkVEX1NJWkVcXHRcXHQ0XFxuICA5NjpcXHQjZGVmaW5lIE9BX1RDNl9DVFJMX01BWF9SRUdJU1RFUlNcXHRcXHQxMjhcXG4gIDk3OlxcdCNkZWZpbmUgT0FfVEM2X0NUUkxfU1BJX0JVRl9TSVpFXFx0XFx0KE9BX1RDNl9DVFJMX0hFQURFUl9TSVpFICtcXFxcXFxuICA5ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQoT0FfVEM2X0NUUkxfTUFYX1JFR0lTVEVSUyAqXFxcXFxcbiAgOTk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0T0FfVEM2X0NUUkxfUkVHX1ZBTFVFX1NJWkUpICtcXFxcXFxuIDEwMDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRPQV9UQzZfQ1RSTF9JR05PUkVEX1NJWkUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAzOjI1OjEwLjE5NTE3OTQ5MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTc5NTg2Mjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIGBvYV90YzZgIFNQSSBEcml2ZXIgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgYG9hX3RjNmAgZnJhbWV3b3JrIGlzIGEgKnB1cmUqIFNQSSBkcml2ZXIsIHdoaWNoIGltbWVkaWF0ZWx5IG5hcnJvd3MgZG93biBpdHMgYmVoYXZpb3IuIFRoYXQncyBnb29kIHRvIGtub3cg4oCTIGl0J3MgZ29pbmcgdG8gYmUgZnVuZGFtZW50YWxseSByZWxpYW50IG9uIFNQSSBjb21tdW5pY2F0aW9uLCBubyBoaWRkZW4gY29tcGxleGl0aWVzLiBOb3csIGlmIEknbSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LCB3aXRob3V0IGFueSBhY3R1YWwgaGFyZHdhcmUgcHJlc2VudCwgYG9hX3RjNl9pbml0YCBpcyAqYm91bmQqIHRvIGhpdCBhIHNuYWcgcHJldHR5IGVhcmx5IG9uLiBUaGUgd2hvbGUgcG9pbnQgb2YgaW5pdGlhbGl6YXRpb24gaXMgdG8gZXN0YWJsaXNoIGEgY29ubmVjdGlvbiB0byBoYXJkd2FyZSwgYW5kIGEgY2hlY2sgbGlrZSBgb2FfdGM2X2NoZWNrX3N0YXR1c2AsIG9yIHNvbWV0aGluZyBlcXVpdmFsZW50LCBpcyBnb2luZyB0byBiZSB0aGUgc21va2luZyBndW4uIEl0J3MgZ29pbmcgdG8gdHJ5IHRvIHJlYWQgdGhvc2UgU1BJIHJlZ2lzdGVycywgYW5kIHRoZSBsYWNrIG9mIGEgcmVzcG9uc2UsIG9yIGFuIHVuZXhwZWN0ZWQgcmVzcG9uc2UsIHdpbGwgdHJpZ2dlciBhIGZhaWx1cmUuIFRoaXMgbGFjayBvZiBoYXJkd2FyZSBpcyBnb2luZyB0byBiZSB0aGUgY3JpdGljYWwgZmFjdG9yIGluIGRldGVybWluaW5nIGl0cyBzdWNjZXNzIG9yIGZhaWx1cmUuIEFscmlnaHQsIGxldCdzIGRpdmUgaW50byBgb2FfdGM2X2luaXRgIGFuZCBjb25maXJtIHRoaXMgYXNzdW1wdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwMzEsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAzOjI1OjEzLjc3NDc2ODE5N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTMxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MDA6XFx0ICogUmV0dXJuOiBwb2ludGVyIHJlZmVyZW5jZSB0byB0aGUgb2FfdGM2IHN0cnVjdHVyZSBpZiB0aGUgTUFDLVBIWVxcbjE0MDE6XFx0ICogaW5pdGlhbGl6YXRpb24gaXMgc3VjY2Vzc2Z1bCBvdGhlcndpc2UgTlVMTC5cXG4xNDAyOlxcdCAqL1xcbjE0MDM6XFx0c3RydWN0IG9hX3RjNiAqb2FfdGM2X2luaXQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4xNDA0OlxcdHtcXG4xNDA1OlxcdFxcdHN0cnVjdCBvYV90YzYgKnRjNjtcXG4xNDA2OlxcdFxcdGludCByZXQ7XFxuMTQwNzpcXHRcXG4xNDA4OlxcdFxcdHRjNiA9IGRldm1fa3phbGxvYyhcXHUwMDI2c3BpLVxcdTAwM2VkZXYsIHNpemVvZigqdGM2KSwgR0ZQX0tFUk5FTCk7XFxuMTQwOTpcXHRcXHRpZiAoIXRjNilcXG4xNDEwOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjE0MTE6XFx0XFxuMTQxMjpcXHRcXHR0YzYtXFx1MDAzZXNwaSA9IHNwaTtcXG4xNDEzOlxcdFxcdHRjNi1cXHUwMDNlbmV0ZGV2ID0gbmV0ZGV2O1xcbjE0MTQ6XFx0XFx0U0VUX05FVERFVl9ERVYobmV0ZGV2LCBcXHUwMDI2c3BpLVxcdTAwM2VkZXYpO1xcbjE0MTU6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2dGM2LVxcdTAwM2VzcGlfY3RybF9sb2NrKTtcXG4xNDE2OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZ0YzYtXFx1MDAzZXR4X3NrYl9sb2NrKTtcXG4xNDE3OlxcdFxcbjE0MTg6XFx0XFx0LyogU2V0IHRoZSBTUEkgY29udHJvbGxlciB0byBwdW1wIGF0IHJlYWx0aW1lIHByaW9yaXR5ICovXFxuMTQxOTpcXHRcXHR0YzYtXFx1MDAzZXNwaS1cXHUwMDNlcnQgPSB0cnVlO1xcbjE0MjA6XFx0XFx0aWYgKHNwaV9zZXR1cCh0YzYtXFx1MDAzZXNwaSkgXFx1MDAzYyAwKVxcbjE0MjE6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTQyMjpcXHRcXG4xNDIzOlxcdFxcdHRjNi1cXHUwMDNlc3BpX2N0cmxfdHhfYnVmID0gZGV2bV9remFsbG9jKFxcdTAwMjZ0YzYtXFx1MDAzZXNwaS1cXHUwMDNlZGV2LFxcbjE0MjQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIE9BX1RDNl9DVFJMX1NQSV9CVUZfU0laRSxcXG4xNDI1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBHRlBfS0VSTkVMKTtcXG4xNDI2OlxcdFxcdGlmICghdGM2LVxcdTAwM2VzcGlfY3RybF90eF9idWYpXFxuMTQyNzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xNDI4OlxcdFxcbjE0Mjk6XFx0XFx0dGM2LVxcdTAwM2VzcGlfY3RybF9yeF9idWYgPSBkZXZtX2t6YWxsb2MoXFx1MDAyNnRjNi1cXHUwMDNlc3BpLVxcdTAwM2VkZXYsXFxuMTQzMDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgT0FfVEM2X0NUUkxfU1BJX0JVRl9TSVpFLFxcbjE0MzE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIEdGUF9LRVJORUwpO1xcbjE0MzI6XFx0XFx0aWYgKCF0YzYtXFx1MDAzZXNwaV9jdHJsX3J4X2J1ZilcXG4xNDMzOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjE0MzQ6XFx0XFxuMTQzNTpcXHRcXHR0YzYtXFx1MDAzZXNwaV9kYXRhX3R4X2J1ZiA9IGRldm1fa3phbGxvYyhcXHUwMDI2dGM2LVxcdTAwM2VzcGktXFx1MDAzZWRldixcXG4xNDM2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBPQV9UQzZfU1BJX0RBVEFfQlVGX1NJWkUsXFxuMTQzNzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgR0ZQX0tFUk5FTCk7XFxuMTQzODpcXHRcXHRpZiAoIXRjNi1cXHUwMDNlc3BpX2RhdGFfdHhfYnVmKVxcbjE0Mzk6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTQ0MDpcXHRcXG4xNDQxOlxcdFxcdHRjNi1cXHUwMDNlc3BpX2RhdGFfcnhfYnVmID0gZGV2bV9remFsbG9jKFxcdTAwMjZ0YzYtXFx1MDAzZXNwaS1cXHUwMDNlZGV2LFxcbjE0NDI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIE9BX1RDNl9TUElfREFUQV9CVUZfU0laRSxcXG4xNDQzOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBHRlBfS0VSTkVMKTtcXG4xNDQ0OlxcdFxcdGlmICghdGM2LVxcdTAwM2VzcGlfZGF0YV9yeF9idWYpXFxuMTQ0NTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xNDQ2OlxcdFxcbjE0NDc6XFx0XFx0cmV0ID0gb2FfdGM2X3N3X3Jlc2V0X21hY3BoeSh0YzYpO1xcbjE0NDg6XFx0XFx0aWYgKHJldCkge1xcbjE0NDk6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2dGM2LVxcdTAwM2VzcGktXFx1MDAzZWRldixcXG4xNDUwOlxcdFxcdFxcdFxcdFxcXCJNQUMtUEhZIHNvZnR3YXJlIHJlc2V0IGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuMTQ1MTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xNDUyOlxcdFxcdH1cXG4xNDUzOlxcdFxcbjE0NTQ6XFx0XFx0cmV0ID0gb2FfdGM2X3VubWFza19tYWNwaHlfZXJyb3JfaW50ZXJydXB0cyh0YzYpO1xcbjE0NTU6XFx0XFx0aWYgKHJldCkge1xcbjE0NTY6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2dGM2LVxcdTAwM2VzcGktXFx1MDAzZWRldixcXG4xNDU3OlxcdFxcdFxcdFxcdFxcXCJNQUMtUEhZIGVycm9yIGludGVycnVwdHMgdW5tYXNrIGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuMTQ1ODpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xNDU5OlxcdFxcdH1cXG4xNDYwOlxcdFxcbjE0NjE6XFx0XFx0cmV0ID0gb2FfdGM2X3BoeV9pbml0KHRjNik7XFxuMTQ2MjpcXHRcXHRpZiAocmV0KSB7XFxuMTQ2MzpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZ0YzYtXFx1MDAzZXNwaS1cXHUwMDNlZGV2LFxcbjE0NjQ6XFx0XFx0XFx0XFx0XFxcIk1BQyBpbnRlcm5hbCBQSFkgaW5pdGlhbGl6YXRpb24gZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xNDY1OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjE0NjY6XFx0XFx0fVxcbjE0Njc6XFx0XFxuMTQ2ODpcXHRcXHRyZXQgPSBvYV90YzZfZW5hYmxlX2RhdGFfdHJhbnNmZXIodGM2KTtcXG4xNDY5OlxcdFxcdGlmIChyZXQpIHtcXG4xNDcwOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnRjNi1cXHUwMDNlc3BpLVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gZW5hYmxlIGRhdGEgdHJhbnNmZXI6ICVkXFxcXG5cXFwiLFxcbjE0NzE6XFx0XFx0XFx0XFx0cmV0KTtcXG4xNDcyOlxcdFxcdFxcdGdvdG8gcGh5X2V4aXQ7XFxuMTQ3MzpcXHRcXHR9XFxuMTQ3NDpcXHRcXG4xNDc1OlxcdFxcdHJldCA9IG9hX3RjNl91cGRhdGVfYnVmZmVyX3N0YXR1c19mcm9tX3JlZ2lzdGVyKHRjNik7XFxuMTQ3NjpcXHRcXHRpZiAocmV0KSB7XFxuMTQ3NzpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZ0YzYtXFx1MDAzZXNwaS1cXHUwMDNlZGV2LFxcbjE0Nzg6XFx0XFx0XFx0XFx0XFxcIkZhaWxlZCB0byB1cGRhdGUgYnVmZmVyIHN0YXR1czogJWRcXFxcblxcXCIsIHJldCk7XFxuMTQ3OTpcXHRcXHRcXHRnb3RvIHBoeV9leGl0O1xcbjE0ODA6XFx0XFx0fVxcbjE0ODE6XFx0XFxuMTQ4MjpcXHRcXHRyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKFxcdTAwMjZ0YzYtXFx1MDAzZXNwaS1cXHUwMDNlZGV2LCB0YzYtXFx1MDAzZXNwaS1cXHUwMDNlaXJxLFxcbjE0ODM6XFx0XFx0XFx0XFx0XFx0XFx0b2FfdGM2X21hY3BoeV9pc3IsXFxuMTQ4NDpcXHRcXHRcXHRcXHRcXHRcXHRvYV90YzZfbWFjcGh5X3RocmVhZGVkX2lycSxcXG4xNDg1OlxcdFxcdFxcdFxcdFxcdFxcdElSUUZfVFJJR0dFUl9MT1cgfCBJUlFGX09ORVNIT1QsXFxuMTQ4NjpcXHRcXHRcXHRcXHRcXHRcXHRkZXZfbmFtZShcXHUwMDI2dGM2LVxcdTAwM2VzcGktXFx1MDAzZWRldiksIHRjNik7XFxuMTQ4NzpcXHRcXHRpZiAocmV0KSB7XFxuMTQ4ODpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZ0YzYtXFx1MDAzZXNwaS1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlcXVlc3QgbWFjcGh5IGlzciAlZFxcXFxuXFxcIixcXG4xNDg5OlxcdFxcdFxcdFxcdHJldCk7XFxuMTQ5MDpcXHRcXHRcXHRnb3RvIHBoeV9leGl0O1xcbjE0OTE6XFx0XFx0fVxcbjE0OTI6XFx0XFxuMTQ5MzpcXHRcXHQvKiBvYV90YzZfc3dfcmVzZXRfbWFjcGh5KCkgZnVuY3Rpb24gcmVzZXRzIGFuZCBjbGVhcnMgdGhlIE1BQy1QSFkgcmVzZXRcXG4xNDk0OlxcdFxcdCAqIGNvbXBsZXRlIHN0YXR1cy4gSVJRIGlzIGFsc28gYXNzZXJ0ZWQgb24gcmVzZXQgY29tcGxldGlvbiBhbmQgaXQgaXNcXG4xNDk1OlxcdFxcdCAqIHJlbWFpbiBhc3NlcnRlZCB1bnRpbCBNQUMtUEhZIHJlY2VpdmVzIGEgZGF0YSBjaHVuay4gU28gcGVyZm9ybWluZyBhblxcbjE0OTY6XFx0XFx0ICogZW1wdHkgZGF0YSBjaHVuayB0cmFuc21pc3Npb24gd2lsbCBkZWFzc2VydCB0aGUgSVJRLiBSZWZlciBzZWN0aW9uXFxuMTQ5NzpcXHRcXHQgKiA3LjcgYW5kIDkuMi44LjggaW4gdGhlIE9QRU4gQWxsaWFuY2Ugc3BlY2lmaWNhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLlxcbjE0OTg6XFx0XFx0ICovXFxuMTQ5OTpcXHRcXHR0YzYtXFx1MDAzZWludF9mbGFnID0gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6MjU6MTMuNzc0OTIyNTU3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NDk1NjMwNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYGxhbjg2NXhfcHJvYmVgIFNjZW5hcmlvIGluIFN5emthbGxlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYG9hX3RjNl9zd19yZXNldF9tYWNwaHlgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgdG8gYmUgaGVhdmlseSByZWxpYW50IG9uIFNQSSB0cmFuc2ZlcnMuIFRoZSBjcml0aWNhbCBwYXRoIGhlcmUgbGVhZHMgdG8gYG9hX3RjNl9pbml0YCwgd2hpY2ggcmV0dXJucyBOVUxMIGlmIHRoZSBTUEkgdHJhbnNmZXJzIGZhaWwsIHVsdGltYXRlbHkgY2F1c2luZyBgbGFuODY1eF9wcm9iZWAgdG8gZmFpbC4gVGhlIGNvcmUgaXNzdWUgaXMgd2hldGhlciBvciBub3QgU3l6a2FsbGVyIGNhbiBtZWFuaW5nZnVsbHkgaW50ZXJhY3Qgd2l0aCBTUEkgZGV2aWNlcyB0byBnZXQgdG8gdGhhdCBwcm9iZSBmdW5jdGlvbi5cblxuTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCBnZW5lcmljIFNQSSBlbXVsYXRpb24gaXMgbGlrZWx5IG1pc3NpbmcgZnJvbSBTeXprYWxsZXIuIEkga25vdyBpdCBsZWFucyB0b3dhcmRzIHJlYWwgaGFyZHdhcmUgaW50ZXJhY3Rpb24uIFdoaWxlIGBzcGlkZXZgIGV4aXN0cyBhcyBhIGNoYXJhY3RlciBkZXZpY2UsIHRoYXTigJlzIGp1c3QgYSB1c2VyLXNwYWNlIGludGVyZmFjZSB0byBhICpkcml2ZXIqLCBub3QgYW4gZW11bGF0b3Igb2YgU1BJIGZ1bmN0aW9uYWxpdHkuIFNpbWlsYXJseSwgYHNwaS1sb29wYmFjay10ZXN0YCBpcywgd2VsbCwganVzdCBmb3IgdGVzdGluZyBhbmQgbm90IGEgcGF0aCB0byBnZXR0aW5nIHRoZSBgbGFuODY1eGAgZGV2aWNlIGluaXRpYWxpemVkLiBJIG5lZWQgdG8gZmluZCBhIHdheSB0byBtYWtlIFN5emthbGxlciBzZWUgdGhlIGBsYW44NjV4YCBhbmQgcmVhY2ggdGhhdCBjcnVjaWFsIHByb2JlIGZ1bmN0aW9uLlxuXG5DYW4gU3l6a2FsbGVyIGluamVjdCBEZXZpY2UgVHJlZSBub2Rlcz8gTm8sIHRoYXQncyBub3QgaXRzIHR5cGljYWwgYXBwcm9hY2gsIGV4Y2VwdCBtYXliZSB3aXRoIGNvbmZpZ2ZzIGZvciBjZXJ0YWluIHN1YnN5c3RlbXMsIGJ1dCBkZWZpbml0ZWx5IG5vdCBmb3IgU1BJIGNvbnRyb2xsZXJzLiBJIHN0YXJ0ZWQgd29uZGVyaW5nIGlmIEkgY291bGQgdXNlIHNvbWV0aGluZyBsaWtlIGBzeXpfZGV2bGlua2AsIGJ1dCBJIHF1aWNrbHkgZGlzbWlzc2VkIHRoYXQgbGluZSBvZiB0aGlua2luZyBhcyBpbmNvcnJlY3QuXG5cblRoZSBjb25jbHVzaW9uIHRoZW4gYmVjb21lcyBvYnZpb3VzOyBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQsIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUgb3IgYSBkZWNlbnQgZW11bGF0b3IsIEkgY2FuJ3QgcmVhY2ggYGxhbjg2NXhfcHJvYmVgLiBJJ20gZ29pbmcgdG8gbmVlZCB0byBpbnRyb2R1Y2UgYW4gU1BJIGNvbnRyb2xsZXIgaW50byB0aGUgc3lzdGVtLCBzb21ldGhpbmcgU3l6a2FsbGVyIGNhbiByZWNvZ25pemUuIFRoYXQncyB3aGVuIEkgaGFkIHRoZSBpZGVhIG9mIGEgc29mdHdhcmUgU1BJIGNvbnRyb2xsZXIuIE1heWJlIHNvbWV0aGluZyBsaWtlIGBzcGktbW9ja3VwYCBvciBgc3BpLWdwaW9gIGNvdWxkIHdvcmsgaWYgaXQgZXhpc3RzLiBIb3dldmVyLCBpdCBzZWVtcyB0aGVyZSdzIG5vIGBzcGktbW9ja3VwYCBpbiB0aGUga2VybmVsLiBgc3BpLWdwaW9gIGxvb2tzIHByb21pc2luZywgYnV0IEknZCBzdGlsbCBuZWVkIGEgd2F5IHRvIGluc3RhbnRpYXRlIHRoZSBgbGFuODY1eGAgU1BJIGRldmljZSBvbiBpdCwgZ2l2ZW4gdGhlIGxpbWl0ZWQgbmF0dXJlIG9mIFN5emthbGxlcidzIGRldmljZSBpbnN0YW50aWF0aW9uIGFiaWxpdGllcy5cblxuU28sIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBjcmVhdGUgdGhlIGBsYW44NjV4YCBkZXZpY2UgaXRzZWxmLiBJIHdpbGwgaGF2ZSB0byBzdGFydCBieSBjaGVja2luZyBpZiBJIGNhbiBjcmVhdGUgU1BJIGRldmljZXMgdmlhIHN5c2ZzLiBUaGlzIGlzIHdoZXJlIEknbGwgc3RhcnQgZGlnZ2luZyB0byBzZWUgaWYgSSBjYW4gZXZlbiBnZXQgdGhpcyBoYXJkd2FyZSBjb25uZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTc4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6MjU6MjAuNjI0NDg3ODQxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTcxMDg3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXdfZGV2aWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvc3BpL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3NwaS9zcGktYWx0ZXJhLWRmbC5jPTEyND1zdGF0aWMgaW50IGRmbF9zcGlfYWx0ZXJhX3Byb2JlKHN0cnVjdCBkZmxfZGV2aWNlICpkZmxfZGV2KVxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLWFsdGVyYS1kZmwuYy0xNzQtXFxuZHJpdmVycy9zcGkvc3BpLWFsdGVyYS1kZmwuYzoxNzU6XFx0aWYgKCFzcGlfbmV3X2RldmljZShob3N0LCBcXHUwMDI2Ym9hcmRfaW5mbykpIHtcXG5kcml2ZXJzL3NwaS9zcGktYWx0ZXJhLWRmbC5jLTE3Ni1cXHRcXHRkZXZfZXJyKGRldiwgXFxcIiVzIGZhaWxlZCB0byBjcmVhdGUgU1BJIGRldmljZTogJXNcXFxcblxcXCIsXFxuLS1cXG5kcml2ZXJzL3NwaS9zcGktYWx0ZXJhLXBsYXRmb3JtLmM9MzU9c3RhdGljIGludCBhbHRlcmFfc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3NwaS9zcGktYWx0ZXJhLXBsYXRmb3JtLmMtMTE5LVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwZGF0YS1cXHUwMDNlbnVtX2RldmljZXM7IGkrKykge1xcbmRyaXZlcnMvc3BpL3NwaS1hbHRlcmEtcGxhdGZvcm0uYzoxMjA6XFx0XFx0XFx0aWYgKCFzcGlfbmV3X2RldmljZShob3N0LCBwZGF0YS1cXHUwMDNlZGV2aWNlcyArIGkpKVxcbmRyaXZlcnMvc3BpL3NwaS1hbHRlcmEtcGxhdGZvcm0uYy0xMjEtXFx0XFx0XFx0XFx0ZGV2X3dhcm4oXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1idXR0ZXJmbHkuYz0xNzY9c3RhdGljIHZvaWQgYnV0dGVyZmx5X2F0dGFjaChzdHJ1Y3QgcGFycG9ydCAqcClcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1idXR0ZXJmbHkuYy0yNjUtXFx0cHAtXFx1MDAzZWluZm9bMF0uY29udHJvbGxlcl9kYXRhID0gcHA7XFxuZHJpdmVycy9zcGkvc3BpLWJ1dHRlcmZseS5jOjI2NjpcXHRwcC1cXHUwMDNlZGF0YWZsYXNoID0gc3BpX25ld19kZXZpY2UocHAtXFx1MDAzZWJpdGJhbmcuY3RsciwgXFx1MDAyNnBwLVxcdTAwM2VpbmZvWzBdKTtcXG5kcml2ZXJzL3NwaS9zcGktYnV0dGVyZmx5LmMtMjY3LVxcdGlmIChwcC1cXHUwMDNlZGF0YWZsYXNoKVxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLWNoMzQxLmM9MTQxPXN0YXRpYyBpbnQgY2gzNDFfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuLS1cXG5kcml2ZXJzL3NwaS9zcGktY2gzNDEuYy0yMDYtXFxuZHJpdmVycy9zcGkvc3BpLWNoMzQxLmM6MjA3OlxcdGNoMzQxLVxcdTAwM2VzcGlkZXYgPSBzcGlfbmV3X2RldmljZShjdHJsLCBcXHUwMDI2Y2hpcCk7XFxuZHJpdmVycy9zcGkvc3BpLWNoMzQxLmMtMjA4LVxcdGlmICghY2gzNDEtXFx1MDAzZXNwaWRldikge1xcbi0tXFxuZHJpdmVycy9zcGkvc3BpLWNzNDJsNDMuYz0zMTI9c3RhdGljIGludCBjczQybDQzX3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLWNzNDJsNDMuYy00MjYtXFxuZHJpdmVycy9zcGkvc3BpLWNzNDJsNDMuYzo0Mjc6XFx0XFx0aWYgKCFzcGlfbmV3X2RldmljZShwcml2LVxcdTAwM2VjdGxyLCBhbXBsX2luZm8pKVxcbmRyaXZlcnMvc3BpL3NwaS1jczQybDQzLmMtNDI4LVxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHByaXYtXFx1MDAzZWRldiwgLUVOT0RFVixcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1jczQybDQzLmMtNDMwLVxcbmRyaXZlcnMvc3BpL3NwaS1jczQybDQzLmM6NDMxOlxcdFxcdGlmICghc3BpX25ld19kZXZpY2UocHJpdi1cXHUwMDNlY3RsciwgYW1wcl9pbmZvKSlcXG5kcml2ZXJzL3NwaS9zcGktY3M0Mmw0My5jLTQzMi1cXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwcml2LVxcdTAwM2VkZXYsIC1FTk9ERVYsXFxuLS1cXG5kcml2ZXJzL3NwaS9zcGktaW50ZWwuYz0xMzc1PXN0YXRpYyBpbnQgaW50ZWxfc3BpX3BvcHVsYXRlX2NoaXAoc3RydWN0IGludGVsX3NwaSAqaXNwaSlcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jLTE0MDEtXFxuZHJpdmVycy9zcGkvc3BpLWludGVsLmM6MTQwMjpcXHRpZiAoIXNwaV9uZXdfZGV2aWNlKGlzcGktXFx1MDAzZWhvc3QsIFxcdTAwMjZjaGlwKSlcXG5kcml2ZXJzL3NwaS9zcGktaW50ZWwuYy0xNDAzLVxcdFxcdHJldHVybiAtRU5PREVWO1xcbi0tXFxuZHJpdmVycy9zcGkvc3BpLWludGVsLmMtMTQzMC1cXG5kcml2ZXJzL3NwaS9zcGktaW50ZWwuYzoxNDMxOlxcdGlmICghc3BpX25ld19kZXZpY2UoaXNwaS1cXHUwMDNlaG9zdCwgXFx1MDAyNmNoaXApKVxcbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jLTE0MzItXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5kcml2ZXJzL3NwaS9zcGkta3NwaTIuYz0zMTA9c3RhdGljIGludCBrc3BpMl9yZWdpc3Rlcl9kZXZpY2VzKHN0cnVjdCBrc3BpMiAqa3NwaSlcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1rc3BpMi5jLTMxNi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mga3NwaS1cXHUwMDNlYXV4ZGV2LVxcdTAwM2VpbmZvX3NpemU7IGkrKykge1xcbmRyaXZlcnMvc3BpL3NwaS1rc3BpMi5jOjMxNzpcXHRcXHRzdHJ1Y3Qgc3BpX2RldmljZSAqZGV2aWNlID0gc3BpX25ld19kZXZpY2Uoa3NwaS1cXHUwMDNlaG9zdCwgXFx1MDAyNmluZm9baV0pO1xcbmRyaXZlcnMvc3BpL3NwaS1rc3BpMi5jLTMxOC1cXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1sbTcwbGxwLmM9MTg4PXN0YXRpYyB2b2lkIHNwaV9sbTcwbGxwX2F0dGFjaChzdHJ1Y3QgcGFycG9ydCAqcClcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1sbTcwbGxwLmMtMjY2LVxcdHBwLVxcdTAwM2VpbmZvLmNvbnRyb2xsZXJfZGF0YSA9IHBwO1xcbmRyaXZlcnMvc3BpL3NwaS1sbTcwbGxwLmM6MjY3OlxcdHBwLVxcdTAwM2VzcGlkZXZfbG03MCA9IHNwaV9uZXdfZGV2aWNlKHBwLVxcdTAwM2ViaXRiYW5nLmN0bHIsIFxcdTAwMjZwcC1cXHUwMDNlaW5mbyk7XFxuZHJpdmVycy9zcGkvc3BpLWxtNzBsbHAuYy0yNjgtXFx0aWYgKHBwLVxcdTAwM2VzcGlkZXZfbG03MClcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1sbTcwbGxwLmMtMjcxLVxcdGVsc2Uge1xcbmRyaXZlcnMvc3BpL3NwaS1sbTcwbGxwLmM6MjcyOlxcdFxcdGRldl93YXJuKFxcdTAwMjZwZC1cXHUwMDNlZGV2LCBcXFwic3BpX25ld19kZXZpY2UgZmFpbGVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL3NwaS9zcGktbG03MGxscC5jLTI3My1cXHRcXHRzdGF0dXMgPSAtRU5PREVWO1xcbi0tXFxuZHJpdmVycy9zcGkvc3BpLXhpbGlueC5jPTQwMj1zdGF0aWMgaW50IHhpbGlueF9zcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS14aWxpbnguYy01MDktXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBkYXRhLVxcdTAwM2VudW1fZGV2aWNlczsgaSsrKVxcbmRyaXZlcnMvc3BpL3NwaS14aWxpbnguYzo1MTA6XFx0XFx0XFx0c3BpX25ld19kZXZpY2UoaG9zdCwgcGRhdGEtXFx1MDAzZWRldmljZXMgKyBpKTtcXG5kcml2ZXJzL3NwaS9zcGkteGlsaW54LmMtNTExLVxcdH1cXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS5jPTc5MT1FWFBPUlRfU1lNQk9MX0dQTChzcGlfYWRkX2RldmljZSk7XFxuLS1cXG5kcml2ZXJzL3NwaS9zcGkuYy03OTMtLyoqXFxuZHJpdmVycy9zcGkvc3BpLmM6Nzk0OiAqIHNwaV9uZXdfZGV2aWNlIC0gaW5zdGFudGlhdGUgb25lIG5ldyBTUEkgZGV2aWNlXFxuZHJpdmVycy9zcGkvc3BpLmMtNzk1LSAqIEBjdGxyOiBDb250cm9sbGVyIHRvIHdoaWNoIGRldmljZSBpcyBjb25uZWN0ZWRcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS5jLTgwNi0gKi9cXG5kcml2ZXJzL3NwaS9zcGkuYzo4MDc6c3RydWN0IHNwaV9kZXZpY2UgKnNwaV9uZXdfZGV2aWNlKHN0cnVjdCBzcGlfY29udHJvbGxlciAqY3RscixcXG5kcml2ZXJzL3NwaS9zcGkuYy04MDgtXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gKmNoaXApXFxuLS1cXG5kcml2ZXJzL3NwaS9zcGkuYy04NjItfVxcbmRyaXZlcnMvc3BpL3NwaS5jOjg2MzpFWFBPUlRfU1lNQk9MX0dQTChzcGlfbmV3X2RldmljZSk7XFxuZHJpdmVycy9zcGkvc3BpLmMtODY0LVxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLmM9ODkzPXN0YXRpYyB2b2lkIHNwaV9tYXRjaF9jb250cm9sbGVyX3RvX2JvYXJkaW5mbyhzdHJ1Y3Qgc3BpX2NvbnRyb2xsZXIgKmN0bHIsXFxuLS1cXG5kcml2ZXJzL3NwaS9zcGkuYy05MDAtXFxuZHJpdmVycy9zcGkvc3BpLmM6OTAxOlxcdGRldiA9IHNwaV9uZXdfZGV2aWNlKGN0bHIsIGJpKTtcXG5kcml2ZXJzL3NwaS9zcGkuYy05MDItXFx0aWYgKCFkZXYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAzOjI1OjIwLjY3MDIwMjQ5NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDI2OTQ5MTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgbGFuODY1eGAgRHJpdmVyIGFuZCBTeXprYWxsZXIgUmVhY2hhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbGFuODY1eGAgZHJpdmVyIGFuZCB0aGUgc2l0dWF0aW9uIHdpdGggU3l6a2FsbGVyLCBhbmQgaGVyZSdzIHdoYXQgSSd2ZSBnb3QuIFVubGlrZSBJMkMsIFNQSSBkZXZpY2VzIGRvbid0IGhhdmUgYSBjb252ZW5pZW50IHN5c2ZzIGludGVyZmFjZSBmb3IgZHluYW1pYyBjcmVhdGlvbi4gVGhleSdyZSB0eXBpY2FsbHkgYnJvdWdodCB1cCBhdCBib290IHRpbWUgdGhyb3VnaCBib2FyZCBpbmZvcm1hdGlvbiwgZGV2aWNlIHRyZWUgY29uZmlndXJhdGlvbnMsIEFDUEksIG9yIGJ5IGJlaW5nIGV4cGxpY2l0bHkgaGFuZGxlZCBieSBzcGVjaWZpYyBkcml2ZXJzLiBUaGUgYGxhbjg2NXhgIGlzIGFuIFNQSSBkZXZpY2UsIHNvIGl0IGZpdHMgdGhhdCBwYXR0ZXJuLiBUaGF0IG1lYW5zLCB3aXRob3V0IHNvbWUgY3VzdG9tIGhhcmR3YXJlIHNldHVwIG9yIHRoZSB1c2Ugb2YgZGV2aWNlIHRyZWUgKERUKSBvdmVybGF5cywgd2hpY2ggYWxsb3cgZm9yIG1vZGlmaWNhdGlvbnMgdG8gYSBEVCBhdCBydW50aW1lLCB5b3UgY2FuJ3QganVzdCBpbnN0YW50aWF0ZSBpdCBmcm9tIHVzZXJzcGFjZSBpbiBhIHN0YW5kYXJkIGtlcm5lbC5cblxuTm93LCBoZXJlJ3MgdGhlIGtpY2tlcjogU3l6a2FsbGVyLCBpbiBpdHMgUUVNVSBlbnZpcm9ubWVudCwgZG9lc24ndCB1dGlsaXplIERUIG92ZXJsYXlzLCBhcyBmYXIgYXMgSSBrbm93LiBUaGVyZWZvcmUsIHRoZSBgbGFuODY1eF9wcm9iZWAgZnVuY3Rpb24sIHdoaWNoIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgcHJvYmluZyB0aGUgYGxhbjg2NXhgIGRldmljZSwgaXMgaW5oZXJlbnRseSB1bnJlYWNoYWJsZSB3aXRoaW4gYSBTeXprYWxsZXIgdGVzdCBlbnZpcm9ubWVudC4gSXQganVzdCB3b24ndCBnZXQgY2FsbGVkLlxuXG5HaXZlbiB0aGF0IGBvYV90YzYuY2Agc2VlbXMgdG8gYmUgc29sZWx5IGRlZGljYXRlZCB0byBmdW5jdGlvbmFsaXR5IHRpZWQgdG8gdGhlIGBsYW44NjV4YCBkcml2ZXIsIGl0IGZvbGxvd3MgdGhhdCB0aGUgY29kZSB3aXRoaW4gYG9hX3RjNi5jYCBpcyBhbHNvIHVucmVhY2hhYmxlIGJlY2F1c2UgaXRzIHByaW1hcnkgdXNlIGNhc2UgaXMgd2hlbiBgbGFuODY1eGAgaXMgcnVubmluZy5cblxuSSBzaG91bGQgZG91YmxlIGNoZWNrIHRvIHNlZSBpZiBgb2FfdGM2X2luaXRgIGlzIHVzZWQgYW55d2hlcmUgZWxzZSBpbiB0aGUga2VybmVsLCBidXQgYXMgaXQgbG9va3MgbGlrZSBpdHMgZGVkaWNhdGVkIHRvIHRoZSBgbGFuODY1eGAsIG15IGN1cnJlbnQgdGhpbmtpbmcgaXMgdGhhdCwgaWYgYGxhbjg2NXhfcHJvYmVgIGlzbid0IHJlYWNoZWQsIHRoZW4gYG9hX3RjNi5jYCBjYW5ub3QgYmUgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE2MjUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6MjU6MjUuNjk3MTU0NjVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjI3MDk4MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2FfdGM2X2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0PTQ1ND1UaGUgaW5jbHVkZS9saW51eC9vYV90YzYuaCBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdC00NTUtXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0OjQ1NjouLiBjOmZ1bmN0aW9uOjogc3RydWN0IG9hX3RjNiAqb2FfdGM2X2luaXQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgXFxcXFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdC00NTctICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmM9MzMzPXN0YXRpYyBpbnQgbGFuODY1eF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jLTM0OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmM6MzQ5OlxcdHByaXYtXFx1MDAzZXRjNiA9IG9hX3RjNl9pbml0KHNwaSwgbmV0ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmMtMzUwLVxcdGlmICghcHJpdi1cXHUwMDNldGM2KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYz0xMzkzPUVYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl9zdGFydF94bWl0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTEzOTUtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmM6MTM5NjogKiBvYV90YzZfaW5pdCAtIGFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgb2FfdGM2IHN0cnVjdHVyZS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy0xMzk3LSAqIEBzcGk6IGRldmljZSB3aXRoIHdoaWNoIGRhdGEgd2lsbCBiZSBleGNoYW5nZWQuXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy0xNDAyLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jOjE0MDM6c3RydWN0IG9hX3RjNiAqb2FfdGM2X2luaXQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy0xNDA0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTE1MDctfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jOjE1MDg6RVhQT1JUX1NZTUJPTF9HUEwob2FfdGM2X2luaXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTE1MDktXFxuLS1cXG5pbmNsdWRlL2xpbnV4L29hX3RjNi5oPTEzPXN0cnVjdCBvYV90YzY7XFxuaW5jbHVkZS9saW51eC9vYV90YzYuaC0xNC1cXG5pbmNsdWRlL2xpbnV4L29hX3RjNi5oOjE1OnN0cnVjdCBvYV90YzYgKm9hX3RjNl9pbml0KHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xcbmluY2x1ZGUvbGludXgvb2FfdGM2LmgtMTYtdm9pZCBvYV90YzZfZXhpdChzdHJ1Y3Qgb2FfdGM2ICp0YzYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMzoyNToyNy4yMTk4Njk5MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODM5ODMzNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZz1GYWxzZTogVW5yZWFjaGFibGUgQ29kZSBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGxvb2tlZCBhdCB0aGlzIHBhdGNoIGFuZCBJJ20gcHJldHR5IGNvbmZpZGVudCBpbiBteSBhc3Nlc3NtZW50LiBUaGUgY29kZSBpcyBleGNsdXNpdmVseSBmb3IgdGhlIGBsYW44NjV4YCBkcml2ZXIsIHdoaWNoLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHNwZWNpZmljIHRvIHRoZSBNaWNyb2NoaXAgTEFOODY1MC8xIE1BQy1QSFkg4oCTIGFuIFNQSSBkZXZpY2UuIFRoZSBrZXkgaGVyZSBpcyB0aGF0IFNQSSBkZXZpY2VzIGNhbid0IGJlIGR5bmFtaWNhbGx5IGluc3RhbnRpYXRlZCBpbiBzeXprYWxsZXIsIGFuZCB0aGVyZSdzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBhdmFpbGFibGUgZm9yIHRoaXMgcGFydGljdWxhciBNQUMtUEhZLlxuXG5JIGJyaWVmbHkgY29uc2lkZXJlZCBpZiBzeXprYWxsZXIgbWlnaHQgYmUgdXNpbmcgYHNwaWRldmAgdG8gc29tZWhvdyBpbmplY3QgZnVuY3Rpb25hbGl0eSwgYnV0IHRoYXQncyBmb3IgKnVzZXJzcGFjZSogYWN0aW5nIGFzIGFuIFNQSSBtYXN0ZXIsIG5vdCBlbXVsYXRpbmcgdGhlIGRldmljZSBpdHNlbGYuIFRoZW4gSSB0aG91Z2h0IGFib3V0IGBtYWM4MDIxMV9od3NpbWAsIHdoaWNoIGVtdWxhdGVzIFdpLUZpLCBidXQgdGhlcmUgaXNuJ3QgYW4gZXF1aXZhbGVudCBmb3IgU1BJIEV0aGVybmV0IE1BQy1QSFlzLiBBbmQgYG5ldGRldnNpbWAgaXMgZGVmaW5pdGVseSBub3QgdXNpbmcgYG9hX3RjNmAuXG5cblRoZXJlZm9yZSwgdGhlIG1vZGlmaWNhdGlvbnMgdGhpcyBwYXRjaCBtYWtlcyBhcmUgaW4gY29kZSB0aGF0IGlzIGZ1bmRhbWVudGFsbHkgdW5yZWFjaGFibGUgd2l0aGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiBJdCdzIHRpZWQgdG8gdmVyeSBzcGVjaWZpYyBTUEkgaGFyZHdhcmUuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIGNoZWNrZWQgdGhlIHByb21wdCBpbnN0cnVjdGlvbnMgYWdhaW4uIFRoZXkgc3BlY2lmaWNhbGx5IHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIGludm9sdmVzIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRpb24uIEl0IGFsc28gY2FsbHMgb3V0IHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSwgd2hpY2ggdGhpcyBkZWZpbml0ZWx5IGlzLiBJdCBhbGwgZml0cyBwZXJmZWN0bHkuXG5cbkkndmUgYWxzbyBkb3VibGUtY2hlY2tlZCBhbGwgdGhlIGV4cG9ydGVkIGZ1bmN0aW9ucyBmcm9tIGBvYV90YzZgLiBUaGV5IGFyZSBvbmx5IHVzZWQgYnkgYGxhbjg2NXhgLiBTbywgdW5sZXNzIHRoZXJlJ3Mgc29tZSBvYnNjdXJlIGluZGlyZWN0IHBhdGggSSdtIG1pc3NpbmcsIHdoaWNoIEknbSBjb25maWRlbnQgdGhlcmUgaXNuJ3QsIHRoaXMgY29kZSBpcyBjb21wbGV0ZWx5IGluYWNjZXNzaWJsZSB0byBvdXIgZnV6emluZyBlZmZvcnRzIGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5MTYsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6MjU6MzUuMDU5NzA2NjA5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzMzMjA1MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9hX3RjNl9zdGFydF94bWl0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdD00ODU9TWF4aW11bSBvZiAxMjggY29uc2VjdXRpdmUgcmVnaXN0ZXJzIGNhbiBiZSByZWFkIHN0YXJ0aW5nIGF0IEBhZGRyZXNzLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdC00ODYtXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0OjQ4NzouLiBjOmZ1bmN0aW9uOjogbmV0ZGV2X3R4X3Qgb2FfdGM2X3N0YXJ0X3htaXQoc3RydWN0IG9hX3RjNiAqdGM2LCBcXFxcXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0LTQ4OC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmM9MjUxPXN0YXRpYyBuZXRkZXZfdHhfdCBsYW44NjV4X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmMtMjU1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYzoyNTY6XFx0cmV0dXJuIG9hX3RjNl9zdGFydF94bWl0KHByaXYtXFx1MDAzZXRjNiwgc2tiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmMtMjU3LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jPTEzNTM9RVhQT1JUX1NZTUJPTF9HUEwob2FfdGM2X3plcm9fYWxpZ25fcmVjZWl2ZV9mcmFtZV9lbmFibGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMtMTM1NS0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYzoxMzU2OiAqIG9hX3RjNl9zdGFydF94bWl0IC0gZnVuY3Rpb24gZm9yIHNlbmRpbmcgdGhlIHR4IHNrYiB3aGljaCBjb25zaXN0cyBldGhlcm5ldFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTEzNTctICogZnJhbWUuXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy0xMzY2LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jOjEzNjc6bmV0ZGV2X3R4X3Qgb2FfdGM2X3N0YXJ0X3htaXQoc3RydWN0IG9hX3RjNiAqdGM2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jLTEzNjgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMtMTM5Mi19XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmM6MTM5MzpFWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfc3RhcnRfeG1pdCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMtMTM5NC1cXG4tLVxcbmluY2x1ZGUvbGludXgvb2FfdGM2Lmg9MjE9aW50IG9hX3RjNl9yZWFkX3JlZ2lzdGVycyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUzMiBhZGRyZXNzLCB1MzIgdmFsdWVbXSxcXG5pbmNsdWRlL2xpbnV4L29hX3RjNi5oLTIyLVxcdFxcdFxcdCAgdTggbGVuZ3RoKTtcXG5pbmNsdWRlL2xpbnV4L29hX3RjNi5oOjIzOm5ldGRldl90eF90IG9hX3RjNl9zdGFydF94bWl0KHN0cnVjdCBvYV90YzYgKnRjNiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9saW51eC9vYV90YzYuaC0yNC1pbnQgb2FfdGM2X3plcm9fYWxpZ25fcmVjZWl2ZV9mcmFtZV9lbmFibGUoc3RydWN0IG9hX3RjNiAqdGM2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6MjU6MzYuNzkyOTE2MTg4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTEyMzIxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFzc2Vzc21lbnQgb2YgdGhlIGBXb3J0aEZ1enppbmdgIFBhcmFtZXRlcioqXG5cblJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhhdCBgV29ydGhGdXp6aW5nYCBwYXJhbWV0ZXIuIEJhc2VkIG9uIHdoYXQgSSd2ZSBzZWVuLCBpdCdzIHByZXR0eSBjbGVhcjogaXQncyBvbmx5IHJlYWxseSB1c2VkLCBvciByZWxldmFudCwgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGBsYW44NjV4YCBkcml2ZXIuIEdpdmVuIHRoYXQgbGltaXRlZCBzY29wZSwgSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgLiBObyBzZW5zZSBpbiBleHBlbmRpbmcgcmVzb3VyY2VzIGZ1enppbmcgc29tZXRoaW5nIHRoYXQgaXNuJ3QgcmVhbGx5IHJlbGV2YW50IG91dHNpZGUgdGhhdCBzcGVjaWZpYyBtb2R1bGUuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIGFuZCBlZmZpY2llbnQgYXBwcm9hY2ggaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2MTIsIk91dHB1dFRva2VucyI6MTA5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6MjU6NDAuMzQ0MTUyNDc2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9QRU4gQWxsaWFuY2UgMTBCQVNFLVQxeCBNQUMtUEhZIFNlcmlhbCBJbnRlcmZhY2UgKG9hX3RjNikgZnJhbWV3b3JrLCB3aGljaCBpcyBjdXJyZW50bHkgb25seSB1c2VkIGJ5IHRoZSBNaWNyb2NoaXAgTEFOODY1eCBTUEkgZHJpdmVyLiBTaW5jZSBTUEkgZGV2aWNlcyByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBjYW5ub3QgYmUgZHluYW1pY2FsbHkgaW5zdGFudGlhdGVkIG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9QRU4gQWxsaWFuY2UgMTBCQVNFLVQxeCBNQUMtUEhZIFNlcmlhbCBJbnRlcmZhY2UgKG9hX3RjNikgZnJhbWV3b3JrLCB3aGljaCBpcyBjdXJyZW50bHkgb25seSB1c2VkIGJ5IHRoZSBNaWNyb2NoaXAgTEFOODY1eCBTUEkgZHJpdmVyLiBTaW5jZSBTUEkgZGV2aWNlcyByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBjYW5ub3QgYmUgZHluYW1pY2FsbHkgaW5zdGFudGlhdGVkIG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDM6MjU6NDAuMzQ0MTk5NzY2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5wrvt[1] Phase: Running StartedAt: 2026-08-13 03:25:51 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wrvt[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-13 03:25:51 +0000 UTC FinishedAt: 2026-08-13 03:25:55 +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,}