Name: series-workflowhzpzh Phase: Failed StartedAt: 2026-09-15 06:47:01 +0000 UTC FinishedAt: 2026-09-15 07:11:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzpzh[0] Phase: Succeeded StartedAt: 2026-09-15 06:47:01 +0000 UTC FinishedAt: 2026-09-15 07:11:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzpzh[0].run-triage Phase: Succeeded StartedAt: 2026-09-15 06:47:01 +0000 UTC FinishedAt: 2026-09-15 07:11:25 +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+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgbW9kaWZpZWQgY29kZSBpcyBjb25maW5lZCB0byB0aGUgVGV4YXMgSW5zdHJ1bWVudHMgSUNTU0cgUFJVIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvKSwgd2hpY2ggZGVwZW5kcyBvbiBDT05GSUdfQVJDSF9LMyAoYW4gQVJNNjQtc3BlY2lmaWMgU29DIGFyY2hpdGVjdHVyZSkuIFRoaXMgZHJpdmVyIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiB0aGUgdGFyZ2V0IGFtZDY0IGFyY2hpdGVjdHVyZSBhbmQgYWRkaXRpb25hbGx5IHJlcXVpcmVzIHBoeXNpY2FsIFRJIEszIFBSVS1JQ1NTRyBTb0MgaGFyZHdhcmUgYW5kIGZpcm13YXJlIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlNWY0ZmY1NmQxNDk3MDFmNjU0ZDA3NDFmNTgxNDU1MjUzMTE0ZmVhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDc6MTA6MjEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9NYWtlZmlsZVxuaW5kZXggZjQyNzZjOWE3NzYyMC4uZDE5YmNkMjVjOWQwNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9NYWtlZmlsZVxuQEAgLTQ2LDYgJiM0Mzs0Niw3IEBAIGljc3NnLXkgOj0gaWNzc2cvaWNzc2dfY29tbW9uLm8gXFxcbiBcdCAgIGljc3NnL2ljc3NnX2NvbmZpZy5vIFxcXG4gXHQgICBpY3NzZy9pY3NzZ19taWlfY2ZnLm8gXFxcbiBcdCAgIGljc3NnL2ljc3NnX3N0YXRzLm8gXFxcbi1cdCAgIGljc3NnL2ljc3NnX2V0aHRvb2wub1xuJiM0MztcdCAgIGljc3NnL2ljc3NnX2V0aHRvb2wubyBcXFxuJiM0MztcdCAgIGljc3NnL2ljc3NnX3Fvcy5vXG4gXG4gb2JqLSQoQ09ORklHX1RJX0lDU1NfSUVQKSAmIzQzOz0gaWNzc2cvaWNzc19pZXAub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfY29tbW9uLmNcbmluZGV4IDRhN2QxYTZmNDcwYjEuLmQ1OWVlZjYxZTcwMTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfY29tbW9uLmNcbkBAIC0xNzU0LDYgJiM0MzsxNzU0LDcgQEAgdm9pZCBwcnVldGhfbmV0ZGV2X2V4aXQoc3RydWN0IHBydWV0aCAqcHJ1ZXRoLFxuIFxuIFx0bmV0aWZfbmFwaV9kZWwoXHUwMDI2ZW1hYy1cdTAwM2VuYXBpX3J4KTtcbiBcbiYjNDM7XHRtdXRleF9kZXN0cm95KFx1MDAyNmVtYWMtXHUwMDNlcW9zLmlldC5mcGVfbG9jayk7XG4gXHRwcnVzc19yZWxlYXNlX21lbV9yZWdpb24ocHJ1ZXRoLVx1MDAzZXBydXNzLCBcdTAwMjZlbWFjLVx1MDAzZWRyYW0pO1xuIFx0ZnJlZV9uZXRkZXYoZW1hYy1cdTAwM2VuZGV2KTtcbiBcdHBydWV0aC1cdTAwM2VlbWFjW21hY10gPSBOVUxMO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2NvbmZpZy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfY29uZmlnLmhcbmluZGV4IDYwZDY5NzQ0ZmZhZTIuLjFhYzIwMmY4NTVlZDQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19jb25maWcuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfY29uZmlnLmhcbkBAIC0zMjMsMTMgJiM0MzszMjMsNCBAQCBzdHJ1Y3QgcHJ1ZXRoX2ZkYl9zbG90IHtcbiBcdHU4IGZpZDtcbiBcdHU4IGZpZF9jMjtcbiB9IF9fcGFja2VkO1xuLVxuLWVudW0gaWNzc2dfaWV0ZnBlX3ZlcmlmeV9zdGF0ZXMge1xuLVx0SUNTU0dfSUVURlBFX1NUQVRFX1VOS05PV04gPSAwLFxuLVx0SUNTU0dfSUVURlBFX1NUQVRFX0lOSVRJQUwsXG4tXHRJQ1NTR19JRVRGUEVfU1RBVEVfVkVSSUZZSU5HLFxuLVx0SUNTU0dfSUVURlBFX1NUQVRFX1NVQ0NFRURFRCxcbi1cdElDU1NHX0lFVEZQRV9TVEFURV9GQUlMRUQsXG4tXHRJQ1NTR19JRVRGUEVfU1RBVEVfRElTQUJMRURcbi19O1xuICNlbmRpZiAvKiBfX05FVF9USV9JQ1NTR19DT05GSUdfSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2V0aHRvb2wuY1xuaW5kZXggYjcxNWFmMjFkMjNhYy4uZGMyNTM2MWFmZTk4OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2V0aHRvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfZXRodG9vbC5jXG5AQCAtNzQsNyAmIzQzOzc0LDggQEAgc3RhdGljIGludCBlbWFjX2dldF9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgc3RyaW5nc2V0KVxuIFx0XHRpZiAoZW1hYy1cdTAwM2VwcnVldGgtXHUwMDNlcGFfc3RhdHMpXG4gXHRcdFx0cmV0dXJuIElDU1NHX05VTV9FVEhUT09MX1NUQVRTO1xuIFx0XHRlbHNlXG4tXHRcdFx0cmV0dXJuIElDU1NHX05VTV9FVEhUT09MX1NUQVRTIC0gSUNTU0dfTlVNX1BBX1NUQVRTO1xuJiM0MztcdFx0XHRyZXR1cm4gSUNTU0dfTlVNX0VUSFRPT0xfU1RBVFMgLVxuJiM0MztcdFx0XHQgICAgICAgKElDU1NHX05VTV9QQV9TVEFUUyAtIElDU1NHX05VTV9QQV9TVEFOREFSRF9TVEFUUyk7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG5AQCAtOTMsNyAmIzQzOzk0LDggQEAgc3RhdGljIHZvaWQgZW1hY19nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIHN0cmluZ3NldCwgdTggKmRhdGEpXG4gXHRcdFx0XHRldGh0b29sX3B1dHMoXHUwMDI2cCwgaWNzc2dfYWxsX21paWdfc3RhdHNbaV0ubmFtZSk7XG4gXHRcdGlmIChlbWFjLVx1MDAzZXBydWV0aC1cdTAwM2VwYV9zdGF0cylcbiBcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGljc3NnX2FsbF9wYV9zdGF0cyk7IGkmIzQzOyYjNDM7KVxuLVx0XHRcdFx0ZXRodG9vbF9wdXRzKFx1MDAyNnAsIGljc3NnX2FsbF9wYV9zdGF0c1tpXS5uYW1lKTtcbiYjNDM7XHRcdFx0XHRpZiAoIWljc3NnX2FsbF9wYV9zdGF0c1tpXS5zdGFuZGFyZF9zdGF0cylcbiYjNDM7XHRcdFx0XHRcdGV0aHRvb2xfcHV0cyhcdTAwMjZwLCBpY3NzZ19hbGxfcGFfc3RhdHNbaV0ubmFtZSk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG5AQCAtMTE0LDcgJiM0MzsxMTYsOCBAQCBzdGF0aWMgdm9pZCBlbWFjX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFxuIFx0aWYgKGVtYWMtXHUwMDNlcHJ1ZXRoLVx1MDAzZXBhX3N0YXRzKVxuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGljc3NnX2FsbF9wYV9zdGF0cyk7IGkmIzQzOyYjNDM7KVxuLVx0XHRcdCooZGF0YSYjNDM7JiM0MzspID0gZW1hYy1cdTAwM2VwYV9zdGF0c1tpXTtcbiYjNDM7XHRcdFx0aWYgKCFpY3NzZ19hbGxfcGFfc3RhdHNbaV0uc3RhbmRhcmRfc3RhdHMpXG4mIzQzO1x0XHRcdFx0KihkYXRhJiM0MzsmIzQzOykgPSBlbWFjLVx1MDAzZXBhX3N0YXRzW2ldO1xuIH1cbiBcbiBzdGF0aWMgaW50IGVtYWNfZ2V0X3RzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG5AQCAtMjk0LDYgJiM0MzsyOTcsMTI2IEBAIHN0YXRpYyBpbnQgZW1hY19zZXRfcGVyX3F1ZXVlX2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgcXVldWUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgZW1hY19nZXRfbW0oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBldGh0b29sX21tX3N0YXRlICpzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYyA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcdHN0cnVjdCBwcnVldGhfcW9zX2lldCAqaWV0ID0gXHUwMDI2ZW1hYy1cdTAwM2Vxb3MuaWV0O1xuJiM0MztcdGVudW0gaWNzc2dfaWV0ZnBlX3ZlcmlmeV9zdGF0ZXMgdmVyaWZ5X3N0YXR1cztcbiYjNDM7XG4mIzQzO1x0aWYgKGVtYWMtXHUwMDNlaXNfc3IxKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmlldC1cdTAwM2VmcGVfbG9jayk7XG4mIzQzO1x0c3RhdGUtXHUwMDNldHhfZW5hYmxlZCA9IGlldC1cdTAwM2VmcGVfZW5hYmxlZDtcbiYjNDM7XHRzdGF0ZS1cdTAwM2V0eF9taW5fZnJhZ19zaXplID0gaWV0LVx1MDAzZXR4X21pbl9mcmFnX3NpemU7XG4mIzQzO1x0c3RhdGUtXHUwMDNldmVyaWZ5X2VuYWJsZWQgPSBpZXQtXHUwMDNlbWFjX3ZlcmlmeV9jb25maWd1cmU7XG4mIzQzO1x0c3RhdGUtXHUwMDNldmVyaWZ5X3RpbWUgPSBpZXQtXHUwMDNldmVyaWZ5X3RpbWVfbXM7XG4mIzQzO1x0c3RhdGUtXHUwMDNldHhfYWN0aXZlID0gaWV0LVx1MDAzZWZwZV9hY3RpdmU7XG4mIzQzO1x0dmVyaWZ5X3N0YXR1cyA9IGlldC1cdTAwM2V2ZXJpZnlfc3RhdHVzO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZpZXQtXHUwMDNlZnBlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRzdGF0ZS1cdTAwM2VyeF9taW5fZnJhZ19zaXplID0gRVRIX1pMRU47XG4mIzQzO1x0c3RhdGUtXHUwMDNlcG1hY19lbmFibGVkID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoICh2ZXJpZnlfc3RhdHVzKSB7XG4mIzQzO1x0Y2FzZSBJQ1NTR19JRVRGUEVfU1RBVEVfRElTQUJMRUQ6XG4mIzQzO1x0XHRzdGF0ZS1cdTAwM2V2ZXJpZnlfc3RhdHVzID0gRVRIVE9PTF9NTV9WRVJJRllfU1RBVFVTX0RJU0FCTEVEO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBJQ1NTR19JRVRGUEVfU1RBVEVfSU5JVElBTDpcbiYjNDM7XHRcdHN0YXRlLVx1MDAzZXZlcmlmeV9zdGF0dXMgPSBFVEhUT09MX01NX1ZFUklGWV9TVEFUVVNfSU5JVElBTDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgSUNTU0dfSUVURlBFX1NUQVRFX1ZFUklGWUlORzpcbiYjNDM7XHRcdHN0YXRlLVx1MDAzZXZlcmlmeV9zdGF0dXMgPSBFVEhUT09MX01NX1ZFUklGWV9TVEFUVVNfVkVSSUZZSU5HO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBJQ1NTR19JRVRGUEVfU1RBVEVfU1VDQ0VFREVEOlxuJiM0MztcdFx0c3RhdGUtXHUwMDNldmVyaWZ5X3N0YXR1cyA9IEVUSFRPT0xfTU1fVkVSSUZZX1NUQVRVU19TVUNDRUVERUQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIElDU1NHX0lFVEZQRV9TVEFURV9GQUlMRUQ6XG4mIzQzO1x0XHRzdGF0ZS1cdTAwM2V2ZXJpZnlfc3RhdHVzID0gRVRIVE9PTF9NTV9WRVJJRllfU1RBVFVTX0ZBSUxFRDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRzdGF0ZS1cdTAwM2V2ZXJpZnlfc3RhdHVzID0gRVRIVE9PTF9NTV9WRVJJRllfU1RBVFVTX1VOS05PV047XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIDgwMi4zLTIwMTggY2xhdXNlIDMwLjE0LjEuNiwgc2F5cyB0aGF0IHRoZSBhTUFDTWVyZ2VWZXJpZnlUaW1lXG4mIzQzO1x0ICogdmFyaWFibGUgaGFzIGEgcmFuZ2UgYmV0d2VlbiAxIGFuZCAxMjggbXMgaW5jbHVzaXZlLiBMaW1pdCB0byB0aGF0LlxuJiM0MztcdCAqL1xuJiM0MztcdHN0YXRlLVx1MDAzZW1heF92ZXJpZnlfdGltZSA9IEVUSFRPT0xfTU1fTUFYX1ZFUklGWV9USU1FX01TO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBlbWFjX3NldF9tbShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGV0aHRvb2xfbW1fY2ZnICpjZmcsXG4mIzQzO1x0XHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBydWV0aF9lbWFjICplbWFjID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1x0c3RydWN0IHBydWV0aF9xb3NfaWV0ICppZXQgPSBcdTAwMjZlbWFjLVx1MDAzZXFvcy5pZXQ7XG4mIzQzO1x0dTMyIG9sZF92ZXJpZnlfdGltZV9tcywgb2xkX3R4X21pbl9mcmFnX3NpemU7XG4mIzQzO1x0Ym9vbCBvbGRfZnBlX2VuYWJsZWQsIG9sZF9tYWNfdmVyaWZ5X2NvbmZpZ3VyZTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoZW1hYy1cdTAwM2Vpc19zcjEpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGlmICghY2ZnLVx1MDAzZXBtYWNfZW5hYmxlZCkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7cHJlZW1wdGlibGUgTUFDIGlzIGFsd2F5cyBlbmFibGVkXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2aWV0LVx1MDAzZWZwZV9sb2NrKTtcbiYjNDM7XHRvbGRfdmVyaWZ5X3RpbWVfbXMgPSBpZXQtXHUwMDNldmVyaWZ5X3RpbWVfbXM7XG4mIzQzO1x0b2xkX3R4X21pbl9mcmFnX3NpemUgPSBpZXQtXHUwMDNldHhfbWluX2ZyYWdfc2l6ZTtcbiYjNDM7XHRvbGRfZnBlX2VuYWJsZWQgPSBpZXQtXHUwMDNlZnBlX2VuYWJsZWQ7XG4mIzQzO1x0b2xkX21hY192ZXJpZnlfY29uZmlndXJlID0gaWV0LVx1MDAzZW1hY192ZXJpZnlfY29uZmlndXJlO1xuJiM0MztcbiYjNDM7XHRpZXQtXHUwMDNldmVyaWZ5X3RpbWVfbXMgPSBjZmctXHUwMDNldmVyaWZ5X3RpbWU7XG4mIzQzO1x0aWV0LVx1MDAzZXR4X21pbl9mcmFnX3NpemUgPSBjZmctXHUwMDNldHhfbWluX2ZyYWdfc2l6ZTtcbiYjNDM7XHRpZXQtXHUwMDNlZnBlX2VuYWJsZWQgPSBjZmctXHUwMDNldHhfZW5hYmxlZDtcbiYjNDM7XHRpZXQtXHUwMDNlbWFjX3ZlcmlmeV9jb25maWd1cmUgPSBjZmctXHUwMDNldmVyaWZ5X2VuYWJsZWQ7XG4mIzQzO1x0ZXJyID0gaWNzc2dfY29uZmlnX2lldGZwZShuZGV2LCBjZmctXHUwMDNldHhfZW5hYmxlZCk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0LyogaWNzc2dfY29uZmlnX2lldGZwZSYjMzk7cyBmYWxsYmFjayBwYXRoIGFscmVhZHkgY2xlYXJlZCBmcGVfYWN0aXZlLlxuJiM0MztcdFx0ICogUmVzdG9yZSBhbGwgY29uZmlnIGZpZWxkcyBzbyBnZXRfbW0oKSByZXBvcnRzIHRoZSBjb25maWd1cmF0aW9uXG4mIzQzO1x0XHQgKiB0aGF0IGlzIGFjdHVhbGx5IHJlZmxlY3RlZCBpbiBoYXJkd2FyZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWV0LVx1MDAzZXZlcmlmeV90aW1lX21zID0gb2xkX3ZlcmlmeV90aW1lX21zO1xuJiM0MztcdFx0aWV0LVx1MDAzZXR4X21pbl9mcmFnX3NpemUgPSBvbGRfdHhfbWluX2ZyYWdfc2l6ZTtcbiYjNDM7XHRcdGlldC1cdTAwM2VmcGVfZW5hYmxlZCA9IG9sZF9mcGVfZW5hYmxlZDtcbiYjNDM7XHRcdGlldC1cdTAwM2VtYWNfdmVyaWZ5X2NvbmZpZ3VyZSA9IG9sZF9tYWNfdmVyaWZ5X2NvbmZpZ3VyZTtcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmlldC1cdTAwM2VmcGVfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGVtYWNfZ2V0X21tX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgZXRodG9vbF9tbV9zdGF0cyAqcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYyA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAoZW1hYy1cdTAwM2Vpc19zcjEpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmICghZW1hYy1cdTAwM2VwcnVldGgtXHUwMDNlcGFfc3RhdHMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGVtYWNfdXBkYXRlX2hhcmR3YXJlX3N0YXRzKGVtYWMpO1xuJiM0MztcbiYjNDM7XHQvKiBIb2xkIHN0YXRzX2xvY2sgdG8gcHJldmVudCBpY3NzZ19zdGF0c193b3JrX2hhbmRsZXIgZnJvbSB1cGRhdGluZ1xuJiM0MztcdCAqIHBhX3N0YXRzW10gYmV0d2VlbiByZWFkcywgd2hpY2ggY291bGQgeWllbGQgYSB0b3JuIHU2NCB2YWx1ZSBvblxuJiM0MztcdCAqIDMyLWJpdCBhcmNoaXRlY3R1cmVzLlxuJiM0MztcdCAqL1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZlbWFjLVx1MDAzZXBydWV0aC1cdTAwM2VzdGF0c19sb2NrKTtcbiYjNDM7XHQvKiBNQUNNZXJnZUhvbGRDb3VudCBzdGF0cyBpcyBub3QgdHJhY2tlZCBieSB0aGUgZmlybXdhcmUgKi9cbiYjNDM7XHRzLVx1MDAzZU1BQ01lcmdlRnJhbWVBc3NPa0NvdW50ID0gZW1hY19nZXRfc3RhdF9ieV9uYW1lKGVtYWMsIFwmIzM0O0ZXX1BSRUVNUFRfQVNTRU1CTFlfT0tcJiMzNDspO1xuJiM0MztcdHMtXHUwMDNlTUFDTWVyZ2VGcmFtZUFzc0Vycm9yQ291bnQgPSBlbWFjX2dldF9zdGF0X2J5X25hbWUoZW1hYywgXCYjMzQ7RldfUFJFRU1QVF9BU1NFTUJMWV9FUlJcJiMzNDspO1xuJiM0MztcdHMtXHUwMDNlTUFDTWVyZ2VGcmFnQ291bnRSeCA9IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShlbWFjLCBcJiMzNDtGV19QUkVFTVBUX0ZSQUdfQ05UX1JYXCYjMzQ7KTtcbiYjNDM7XHRzLVx1MDAzZU1BQ01lcmdlRnJhZ0NvdW50VHggPSBlbWFjX2dldF9zdGF0X2J5X25hbWUoZW1hYywgXCYjMzQ7RldfUFJFRU1QVF9GUkFHX0NOVF9UWFwmIzM0Oyk7XG4mIzQzO1x0cy1cdTAwM2VNQUNNZXJnZUZyYW1lU21kRXJyb3JDb3VudCA9IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShlbWFjLCBcJiMzNDtGV19QUkVFTVBUX0JBRF9GUkFHXCYjMzQ7KTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZlbWFjLVx1MDAzZXBydWV0aC1cdTAwM2VzdGF0c19sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaWNzc2dfZXRodG9vbF9vcHMgPSB7XG4gXHQuZ2V0X2RydmluZm8gPSBlbWFjX2dldF9kcnZpbmZvLFxuIFx0LmdldF9tc2dsZXZlbCA9IGVtYWNfZ2V0X21zZ2xldmVsLFxuQEAgLTMxNyw1ICYjNDM7NDQwLDggQEAgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGljc3NnX2V0aHRvb2xfb3BzID0ge1xuIFx0LnNldF9lZWUgPSBlbWFjX3NldF9lZWUsXG4gXHQubndheV9yZXNldCA9IGVtYWNfbndheV9yZXNldCxcbiBcdC5nZXRfcm1vbl9zdGF0cyA9IGVtYWNfZ2V0X3Jtb25fc3RhdHMsXG4mIzQzO1x0LmdldF9tbSA9IGVtYWNfZ2V0X21tLFxuJiM0MztcdC5zZXRfbW0gPSBlbWFjX3NldF9tbSxcbiYjNDM7XHQuZ2V0X21tX3N0YXRzID0gZW1hY19nZXRfbW1fc3RhdHMsXG4gfTtcbiBFWFBPUlRfU1lNQk9MX0dQTChpY3NzZ19ldGh0b29sX29wcyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguY1xuaW5kZXggNTkxYmU1YzgwNTZiNC4uMjgzYmUyN2EyNDBlOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguY1xuQEAgLTM1NywxMSAmIzQzOzM1NywxMSBAQCBzdGF0aWMgdm9pZCBlbWFjX2FkanVzdF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0XHR9XG4gXHRcdGlmICghZW1hYy1cdTAwM2VsaW5rKSB7XG4gXHRcdFx0bmV3X3N0YXRlID0gdHJ1ZTtcbi1cdFx0XHRlbWFjLVx1MDAzZWxpbmsgPSAxO1xuJiM0MztcdFx0XHRXUklURV9PTkNFKGVtYWMtXHUwMDNlbGluaywgMSk7XG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAoZW1hYy1cdTAwM2VsaW5rKSB7XG4gXHRcdG5ld19zdGF0ZSA9IHRydWU7XG4tXHRcdGVtYWMtXHUwMDNlbGluayA9IDA7XG4mIzQzO1x0XHRXUklURV9PTkNFKGVtYWMtXHUwMDNlbGluaywgMCk7XG4gXG4gXHRcdC8qIGYvdyBzaG91bGQgc3VwcG9ydCAxMDAgXHUwMDI2IDEwMDAgKi9cbiBcdFx0ZW1hYy1cdTAwM2VzcGVlZCA9IFNQRUVEXzEwMDA7XG5AQCAtMzkyLDYgJiM0MzszOTIsOCBAQCBzdGF0aWMgdm9pZCBlbWFjX2FkanVzdF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGljc3NnX3NldF9wb3J0X3N0YXRlKGVtYWMsIElDU1NHX0VNQUNfUE9SVF9ESVNBQkxFKTtcbiBcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGljc3NnX3Fvc19saW5rX3N0YXRlX3VwZGF0ZShuZGV2KTtcbiBcdH1cbiBcbiBcdGlmIChlbWFjLVx1MDAzZWxpbmspIHtcbkBAIC0xNjUyLDYgJiM0MzsxNjU0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlbWFjX25ldGRldl9vcHMgPSB7XG4gXHQubmRvX2h3dHN0YW1wX2dldCA9IGljc3NnX25kb19nZXRfdHNfY29uZmlnLFxuIFx0Lm5kb19od3RzdGFtcF9zZXQgPSBpY3NzZ19uZG9fc2V0X3RzX2NvbmZpZyxcbiBcdC5uZG9feHNrX3dha2V1cCA9IHBydWV0aF94c2tfd2FrZXVwLFxuJiM0MztcdC5uZG9fc2V0dXBfdGMgPSBpY3NzZ19xb3NfbmRvX3NldHVwX3RjLFxuIH07XG4gXG4gc3RhdGljIGludCBwcnVldGhfbmV0ZGV2X2luaXQoc3RydWN0IHBydWV0aCAqcHJ1ZXRoLFxuQEAgLTE2ODYsNiAmIzQzOzE2ODksOCBAQCBzdGF0aWMgaW50IHBydWV0aF9uZXRkZXZfaW5pdChzdHJ1Y3QgcHJ1ZXRoICpwcnVldGgsXG4gXG4gXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZlbWFjLVx1MDAzZXN0YXRzX3dvcmssIGljc3NnX3N0YXRzX3dvcmtfaGFuZGxlcik7XG4gXG4mIzQzO1x0aWNzc2dfcW9zX2luaXQobmRldik7XG4mIzQzO1xuIFx0cmV0ID0gcHJ1c3NfcmVxdWVzdF9tZW1fcmVnaW9uKHBydWV0aC1cdTAwM2VwcnVzcyxcbiBcdFx0XHRcdCAgICAgICBwb3J0ID09IFBSVUVUSF9QT1JUX01JSTAgP1xuIFx0XHRcdFx0ICAgICAgIFBSVVNTX01FTV9EUkFNMCA6IFBSVVNTX01FTV9EUkFNMSxcbkBAIC0xNzkzLDYgJiM0MzsxNzk4LDcgQEAgc3RhdGljIGludCBwcnVldGhfbmV0ZGV2X2luaXQoc3RydWN0IHBydWV0aCAqcHJ1ZXRoLFxuIGZyZWU6XG4gXHRwcnVzc19yZWxlYXNlX21lbV9yZWdpb24ocHJ1ZXRoLVx1MDAzZXBydXNzLCBcdTAwMjZlbWFjLVx1MDAzZWRyYW0pO1xuIGZyZWVfbmRldjpcbiYjNDM7XHRtdXRleF9kZXN0cm95KFx1MDAyNmVtYWMtXHUwMDNlcW9zLmlldC5mcGVfbG9jayk7XG4gXHRlbWFjLVx1MDAzZW5kZXYgPSBOVUxMO1xuIFx0cHJ1ZXRoLVx1MDAzZWVtYWNbbWFjXSA9IE5VTEw7XG4gXHRmcmVlX25ldGRldihuZGV2KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5oXG5pbmRleCBkZjkzZDE1YzViNzg2Li5hZDkwNjE0MDgwNTBlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5oXG5AQCAtNDQsMTAgJiM0Mzs0NCwxMiBAQFxuICNpbmNsdWRlIFwmIzM0O2ljc3NnX2NvbmZpZy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aWNzc19pZXAuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2ljc3NnX3N3aXRjaF9tYXAuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtpY3NzZ19xb3MuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtpY3NzZ19zdGF0cy5oXCYjMzQ7XG4gXG4tI2RlZmluZSBQUlVFVEhfTUFYX01UVSAgICAgICAgICAoMjAwMCAtIEVUSF9ITEVOIC0gRVRIX0ZDU19MRU4pXG4tI2RlZmluZSBQUlVFVEhfTUlOX1BLVF9TSVpFICAgICAoVkxBTl9FVEhfWkxFTilcbi0jZGVmaW5lIFBSVUVUSF9NQVhfUEtUX1NJWkUgICAgIChQUlVFVEhfTUFYX01UVSAmIzQzOyBFVEhfSExFTiAmIzQzOyBFVEhfRkNTX0xFTilcbiYjNDM7I2RlZmluZSBQUlVFVEhfTUFYX01UVVx0XHQoMjAwMCAtIEVUSF9ITEVOIC0gRVRIX0ZDU19MRU4pXG4mIzQzOyNkZWZpbmUgUFJVRVRIX01JTl9QS1RfU0laRVx0KFZMQU5fRVRIX1pMRU4pXG4mIzQzOyNkZWZpbmUgUFJVRVRIX01BWF9QS1RfU0laRVx0KFBSVUVUSF9NQVhfTVRVICYjNDM7IEVUSF9ITEVOICYjNDM7IEVUSF9GQ1NfTEVOKVxuIFxuICNkZWZpbmUgSUNTU19TTElDRTBcdDBcbiAjZGVmaW5lIElDU1NfU0xJQ0UxXHQxXG5AQCAtNTcsMTIgJiM0Mzs1OSwxNiBAQFxuIFxuICNkZWZpbmUgSUNTU0dfTUFYX1JGTE9XU1x0OFx0LyogcGVyIHNsaWNlICovXG4gXG4tI2RlZmluZSBJQ1NTR19OVU1fUEFfU1RBVFNcdDMyXG4tI2RlZmluZSBJQ1NTR19OVU1fTUlJR19TVEFUU1x0NjBcbiYjNDM7I2RlZmluZSBJQ1NTR19OVU1fUEFfU1RBVFNcdEFSUkFZX1NJWkUoaWNzc2dfYWxsX3BhX3N0YXRzKVxuJiM0MzsjZGVmaW5lIElDU1NHX05VTV9NSUlHX1NUQVRTXHRBUlJBWV9TSVpFKGljc3NnX2FsbF9taWlnX3N0YXRzKVxuIC8qIE51bWJlciBvZiBJQ1NTRyByZWxhdGVkIHN0YXRzICovXG4gI2RlZmluZSBJQ1NTR19OVU1fU1RBVFMgKElDU1NHX05VTV9NSUlHX1NUQVRTICYjNDM7IElDU1NHX05VTV9QQV9TVEFUUylcbiYjNDM7LyogTUlJRyBzdGF0cyB3aXRoIHN0YW5kYXJkIHVBUEkgZXF1aXZhbGVudHMgKGV4Y2x1ZGVkIGZyb20gZXRodG9vbCAtUykgKi9cbiAjZGVmaW5lIElDU1NHX05VTV9TVEFOREFSRF9TVEFUUyAzMVxuLSNkZWZpbmUgSUNTU0dfTlVNX0VUSFRPT0xfU1RBVFMgKElDU1NHX05VTV9TVEFUUyAtIElDU1NHX05VTV9TVEFOREFSRF9TVEFUUylcbiYjNDM7LyogUEEgc3RhdHMgd2l0aCBzdGFuZGFyZCB1QVBJIGVxdWl2YWxlbnRzLCBleHBvc2VkIHZpYSBnZXRfbW1fc3RhdHMgb25seSAqL1xuJiM0MzsjZGVmaW5lIElDU1NHX05VTV9QQV9TVEFOREFSRF9TVEFUUyA1XG4mIzQzOyNkZWZpbmUgSUNTU0dfTlVNX0VUSFRPT0xfU1RBVFMgKElDU1NHX05VTV9TVEFUUyAtIElDU1NHX05VTV9TVEFOREFSRF9TVEFUUyAtIFxcXG4mIzQzO1x0XHRcdFx0IElDU1NHX05VTV9QQV9TVEFOREFSRF9TVEFUUylcbiBcbiAjZGVmaW5lIElFUF9ERUZBVUxUX0NZQ0xFX1RJTUVfTlNcdDEwMDAwMDBcdC8qIDEgbXMgKi9cbiBcbkBAIC0yNTQsNiAmIzQzOzI2MCw3IEBAIHN0cnVjdCBwcnVldGhfZW1hYyB7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nO1xuIFx0c3RydWN0IHhkcF9hdHRhY2htZW50X2luZm8geGRwaTtcbiBcdGludCB4c2tfcWlkO1xuJiM0MztcdHN0cnVjdCBwcnVldGhfcW9zIHFvcztcbiB9O1xuIFxuIC8qIFRoZSBidWYgaW5jbHVkZXMgaGVhZHJvb20gY29tcGF0aWJsZSB3aXRoIGJvdGggc2tiIGFuZCB4ZHBmICovXG5AQCAtNDU4LDcgJiM0Mzs0NjUsNyBAQCBpbnQgZW1hY19mZGJfZmxvd19pZF91cGRhdGVkKHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYyk7XG4gXG4gdm9pZCBpY3NzZ19zdGF0c193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiB2b2lkIGVtYWNfdXBkYXRlX2hhcmR3YXJlX3N0YXRzKHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYyk7XG4taW50IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMsIGNoYXIgKnN0YXRfbmFtZSk7XG4mIzQzO3U2NCBlbWFjX2dldF9zdGF0X2J5X25hbWUoc3RydWN0IHBydWV0aF9lbWFjICplbWFjLCBjaGFyICpzdGF0X25hbWUpO1xuIFxuIC8qIENvbW1vbiBmdW5jdGlvbnMgKi9cbiB2b2lkIHBydWV0aF9jbGVhbnVwX3J4X2NobnMoc3RydWN0IHBydWV0aF9lbWFjICplbWFjLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3Fvcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcW9zLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yN2E5NTNkOTgxNTM4XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19xb3MuY1xuQEAgLTAsMCAmIzQzOzEsMzA1IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIFRleGFzIEluc3RydW1lbnRzIElDU1NHIFBSVUVUSCBRb1Mgc3VibW9kdWxlXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyMyBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS9cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtpY3NzZ19wcnVldGguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtpY3NzZ19zd2l0Y2hfbWFwLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGljc3NnX2lldF9zZXRfcHJlZW1wdF9tYXNrKHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYylcbiYjNDM7e1xuJiM0MztcdHZvaWQgX19pb21lbSAqY29uZmlnID0gZW1hYy1cdTAwM2VkcmFtLnZhICYjNDM7IElDU1NHX0NPTkZJR19PRkZTRVQ7XG4mIzQzO1x0c3RydWN0IHBydWV0aF9xb3NfbXFwcmlvICpwX21xcHJpbyA9IFx1MDAyNmVtYWMtXHUwMDNlcW9zLm1xcHJpbztcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZwX21xcHJpby1cdTAwM2Vxb3B0O1xuJiM0MztcdHN0cnVjdCBwcnVldGhfcW9zX2lldCAqaWV0ID0gXHUwMDI2ZW1hYy1cdTAwM2Vxb3MuaWV0O1xuJiM0MztcdGludCBwcmVtcHRfbWFzayA9IDAsIGk7XG4mIzQzO1x0dTggdGMsIG51bV90YztcbiYjNDM7XG4mIzQzO1x0aWYgKCFpZXQtXHUwMDNlcHJlZW1wdGlibGVfdGNzKVxuJiM0MztcdFx0Z290byByZXNldF9odztcbiYjNDM7XG4mIzQzO1x0aWYgKGlldC1cdTAwM2VmcGVfYWN0aXZlKSB7XG4mIzQzO1x0XHQvKiBSZXNldCBhbGwgUV9NQVAgZW50cmllcyBmaXJzdCB0byBjbGVhciBhbnkgc3RhbGUgcHJlZW1wdGlibGVcbiYjNDM7XHRcdCAqIGVudHJpZXMgZnJvbSBhIHByaW9yIHdpZGVyIFRDIG1hcHBpbmcuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElDU1NHX01BWF9UQ19RVUVVRVM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHR3cml0ZWIoMCwgY29uZmlnICYjNDM7IEVYUFJFU1NfUFJFX0VNUFRJVkVfUV9NQVAgJiM0MzsgaSk7XG4mIzQzO1xuJiM0MztcdFx0LyogQ29uZmlndXJlIHF1ZXVlcyBmb3IgdXNlciByZXF1ZXN0ZWQgcHJlZW1wdGlibGUgdGMgbWFwICovXG4mIzQzO1x0XHRudW1fdGMgPSBwX21xcHJpby1cdTAwM2Vxb3B0Lm51bV90YztcbiYjNDM7XHRcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0LyogY2hlY2sgaWYgdGhlIHRjIGlzIHByZWVtcHRpdmUgb3Igbm90ICovXG4mIzQzO1x0XHRcdGlmIChpZXQtXHUwMDNlcHJlZW1wdGlibGVfdGNzIFx1MDAyNiBCSVQodGMpKSB7XG4mIzQzO1x0XHRcdFx0LyogU2V0IHRoZSBxdWV1ZXMgYXMgcHJlZW1wdGl2ZSBxdWV1ZXMgKi9cbiYjNDM7XHRcdFx0XHRmb3IgKGkgPSBxb3B0LVx1MDAzZW9mZnNldFt0Y107IGkgXHUwMDNjIHFvcHQtXHUwMDNlb2Zmc2V0W3RjXSAmIzQzOyBxb3B0LVx1MDAzZWNvdW50W3RjXTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0XHRcdHdyaXRlYihCSVQoNCksXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgY29uZmlnICYjNDM7IEVYUFJFU1NfUFJFX0VNUFRJVkVfUV9NQVAgJiM0MzsgaSk7XG4mIzQzO1x0XHRcdFx0fVxuJiM0MztcdFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRcdC8qIEFjY3VtdWxhdGUgZXhwcmVzcyBxdWV1ZSBiaXRzIGZvciB0aGUgbWFzayAqL1xuJiM0MztcdFx0XHRcdGZvciAoaSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTsgaSBcdTAwM2MgcW9wdC1cdTAwM2VvZmZzZXRbdGNdICYjNDM7IHFvcHQtXHUwMDNlY291bnRbdGNdOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0XHRcdHByZW1wdF9tYXNrIHw9IEJJVChpKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdFx0d3JpdGViKHByZW1wdF9tYXNrLCBjb25maWcgJiM0MzsgRVhQUkVTU19QUkVfRU1QVElWRV9RX01BU0spO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO3Jlc2V0X2h3OlxuJiM0MztcdC8qIFJlc2V0IHRvIGRlZmF1bHQ6IGFsbCBxdWV1ZXMgYXMgZXhwcmVzcyAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElDU1NHX01BWF9UQ19RVUVVRVM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0d3JpdGViKDAsIGNvbmZpZyAmIzQzOyBFWFBSRVNTX1BSRV9FTVBUSVZFX1FfTUFQICYjNDM7IGkpO1xuJiM0MztcdHdyaXRlYihJQ1NTR19FWFBSRVNTX1FfTUFTS19BTEwsIGNvbmZpZyAmIzQzOyBFWFBSRVNTX1BSRV9FTVBUSVZFX1FfTUFTSyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaWNzc2dfaWV0X3ZlcmlmeV93YWl0KHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYylcbiYjNDM7e1xuJiM0MztcdHZvaWQgX19pb21lbSAqY29uZmlnID0gZW1hYy1cdTAwM2VkcmFtLnZhICYjNDM7IElDU1NHX0NPTkZJR19PRkZTRVQ7XG4mIzQzO1x0c3RydWN0IHBydWV0aF9xb3NfaWV0ICppZXQgPSBcdTAwMjZlbWFjLVx1MDAzZXFvcy5pZXQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBkZWxheV91cywgdGltZW91dF91cztcbiYjNDM7XHR1MzIgc3RhdHVzO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGRlbGF5X3VzID0gaWV0LVx1MDAzZXZlcmlmeV90aW1lX21zICogMTAwMDtcbiYjNDM7XHR0aW1lb3V0X3VzID0gZGVsYXlfdXMgKiBJQ1NTR19JRVRfVkVSSUZZX0FUVEVNUFRTO1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWFkYl9wb2xsX3RpbWVvdXQoY29uZmlnICYjNDM7IFBSRV9FTVBUSU9OX1ZFUklGWV9TVEFUVVMsXG4mIzQzO1x0XHRcdFx0IHN0YXR1cyxcbiYjNDM7XHRcdFx0XHQgc3RhdHVzID09IElDU1NHX0lFVEZQRV9TVEFURV9TVUNDRUVERUQgfHxcbiYjNDM7XHRcdFx0XHQgc3RhdHVzID09IElDU1NHX0lFVEZQRV9TVEFURV9GQUlMRUQsXG4mIzQzO1x0XHRcdFx0IGRlbGF5X3VzLFxuJiM0MztcdFx0XHRcdCB0aW1lb3V0X3VzKTtcbiYjNDM7XG4mIzQzO1x0aWV0LVx1MDAzZXZlcmlmeV9zdGF0dXMgPSBzdGF0dXM7XG4mIzQzO1x0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHN0YXR1cyA9PSBJQ1NTR19JRVRGUEVfU1RBVEVfRkFJTEVEKVxuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogRGlyZWN0IHN5bmNocm9ub3VzIGNvbmZpZ3VyYXRpb24gb2YgSUVUIEZQRS5cbiYjNDM7ICogQ2FsbGVyIG11c3QgaG9sZCBpZXQtXHUwMDNlZnBlX2xvY2suXG4mIzQzOyAqL1xuJiM0MztpbnQgaWNzc2dfY29uZmlnX2lldGZwZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgYm9vbCBlbmFibGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XHR2b2lkIF9faW9tZW0gKmNvbmZpZyA9IGVtYWMtXHUwMDNlZHJhbS52YSAmIzQzOyBJQ1NTR19DT05GSUdfT0ZGU0VUO1xuJiM0MztcdHN0cnVjdCBwcnVldGhfcW9zX2lldCAqaWV0ID0gXHUwMDI2ZW1hYy1cdTAwM2Vxb3MuaWV0O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0dTggdmFsO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmlldC1cdTAwM2VmcGVfbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmICghUkVBRF9PTkNFKGVtYWMtXHUwMDNlbGluaykpIHtcbiYjNDM7XHRcdG5ldGRldl9kYmcobmRldiwgXCYjMzQ7Y2Fubm90IGNoYW5nZSBJRVQvRlBFIHN0YXRlIHdoZW4gaW50ZXJmYWNlIGlzIGRvd25cXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBVcGRhdGUgRlBFIFR4IGVuYWJsZSBiaXQgKFBSRV9FTVBUSU9OX0VOQUJMRV9UWCkgaWZcbiYjNDM7XHQgKiBmcGVfZW5hYmxlZCBpcyBzZXQgdG8gZW5hYmxlIE1NIGluIFR4IGRpcmVjdGlvblxuJiM0MztcdCAqL1xuJiM0MztcdHdyaXRlYihlbmFibGUgPyAxIDogMCwgY29uZmlnICYjNDM7IFBSRV9FTVBUSU9OX0VOQUJMRV9UWCk7XG4mIzQzO1x0d3JpdGV3KGlldC1cdTAwM2V0eF9taW5fZnJhZ19zaXplICYjNDM7IEVUSF9GQ1NfTEVOLFxuJiM0MztcdCAgICAgICBjb25maWcgJiM0MzsgUFJFX0VNUFRJT05fQUREX0ZSQUdfU0laRV9MT0NBTCk7XG4mIzQzO1xuJiM0MztcdC8qIElmIEZQRSBpcyB0byBiZSBlbmFibGVkLCBmaXJzdCBjb25maWd1cmUgTUFDIFZlcmlmeSBzdGF0ZVxuJiM0MztcdCAqIG1hY2hpbmUgaW4gZmlybXdhcmUgYXMgZmlybXdhcmUga2lja3MgdGhlIFZlcmlmeSBwcm9jZXNzXG4mIzQzO1x0ICogYXMgc29vbiBhcyBJQ1NTR19FTUFDX1BPUlRfUFJFTVBUX1RYX0VOQUJMRSBjb21tYW5kIGlzXG4mIzQzO1x0ICogcmVjZWl2ZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGVuYWJsZSBcdTAwMjZcdTAwMjYgaWV0LVx1MDAzZW1hY192ZXJpZnlfY29uZmlndXJlKSB7XG4mIzQzO1x0XHR3cml0ZWIoMSwgY29uZmlnICYjNDM7IFBSRV9FTVBUSU9OX0VOQUJMRV9WRVJJRlkpO1xuJiM0MztcdFx0d3JpdGVsKGlldC1cdTAwM2V2ZXJpZnlfdGltZV9tcywgY29uZmlnICYjNDM7IFBSRV9FTVBUSU9OX1ZFUklGWV9USU1FKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0d3JpdGViKDAsIGNvbmZpZyAmIzQzOyBQUkVfRU1QVElPTl9FTkFCTEVfVkVSSUZZKTtcbiYjNDM7XHRcdGlldC1cdTAwM2V2ZXJpZnlfc3RhdHVzID0gSUNTU0dfSUVURlBFX1NUQVRFX0RJU0FCTEVEO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogU2VuZCBjb21tYW5kIHRvIGVuYWJsZSBGUEUgVHggc2lkZS4gUnggaXMgYWx3YXlzIGVuYWJsZWQgKi9cbiYjNDM7XHRyZXQgPSBpY3NzZ19zZXRfcG9ydF9zdGF0ZShlbWFjLFxuJiM0MztcdFx0XHRcdCAgIGVuYWJsZSA/IElDU1NHX0VNQUNfUE9SVF9QUkVNUFRfVFhfRU5BQkxFIDpcbiYjNDM7XHRcdFx0XHRcdCAgICBJQ1NTR19FTUFDX1BPUlRfUFJFTVBUX1RYX0RJU0FCTEUpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmRldiwgXCYjMzQ7VFggcHJlZW1wdCAlcyBjb21tYW5kIGZhaWxlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgc3RyX2VuYWJsZV9kaXNhYmxlKGVuYWJsZSkpO1xuJiM0MztcdFx0Z290byBmYWxsYmFjaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChlbmFibGUgXHUwMDI2XHUwMDI2IGlldC1cdTAwM2VtYWNfdmVyaWZ5X2NvbmZpZ3VyZSkge1xuJiM0MztcdFx0cmV0ID0gaWNzc2dfaWV0X3ZlcmlmeV93YWl0KGVtYWMpO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKG5kZXYsIFwmIzM0O01BQyBNZXJnZSB2ZXJpZmljYXRpb24gZmFpbGVkOiAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBpZXQtXHUwMDNldmVyaWZ5X3N0YXR1cyA9PSBJQ1NTR19JRVRGUEVfU1RBVEVfRkFJTEVEID9cbiYjNDM7XHRcdFx0XHQgICBcJiMzNDtsaW5rIHBhcnRuZXIgcmVqZWN0ZWRcJiMzNDsgOiBcJiMzNDt0aW1lb3V0XCYjMzQ7KTtcbiYjNDM7XHRcdFx0Z290byBkaXNhYmxlX3R4O1xuJiM0MztcdFx0fVxuJiM0MztcdH0gZWxzZSBpZiAoZW5hYmxlKSB7XG4mIzQzO1x0XHQvKiBHaXZlIGZpcm13YXJlIHNvbWUgdGltZSB0byB1cGRhdGVcbiYjNDM7XHRcdCAqIFBSRV9FTVBUSU9OX0FDVElWRV9UWCBzdGF0ZVxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHR1c2xlZXBfcmFuZ2UoMTAwLCAyMDApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGVuYWJsZSkge1xuJiM0MztcdFx0dmFsID0gcmVhZGIoY29uZmlnICYjNDM7IFBSRV9FTVBUSU9OX0FDVElWRV9UWCk7XG4mIzQzO1x0XHRpZiAodmFsICE9IDEpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O0Zpcm13YXJlIGZhaWxzIHRvIGFjdGl2YXRlIElFVC9GUEVcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXQgPSAtRUlPO1xuJiM0MztcdFx0XHRnb3RvIGRpc2FibGVfdHg7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZXQtXHUwMDNlZnBlX2FjdGl2ZSA9IHRydWU7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlldC1cdTAwM2VmcGVfYWN0aXZlID0gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpY3NzZ19pZXRfc2V0X3ByZWVtcHRfbWFzayhlbWFjKTtcbiYjNDM7XHRuZXRkZXZfZGJnKG5kZXYsIFwmIzM0O0lFVCBGUEUgJXMgc3VjY2Vzc2Z1bGx5XFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgc3RyX2VuYWJsZV9kaXNhYmxlKGVuYWJsZSkpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZGlzYWJsZV90eDpcbiYjNDM7XHRpY3NzZ19zZXRfcG9ydF9zdGF0ZShlbWFjLCBJQ1NTR19FTUFDX1BPUlRfUFJFTVBUX1RYX0RJU0FCTEUpO1xuJiM0MztmYWxsYmFjazpcbiYjNDM7XHR3cml0ZWIoMCwgY29uZmlnICYjNDM7IFBSRV9FTVBUSU9OX0VOQUJMRV9UWCk7XG4mIzQzO1x0d3JpdGViKDAsIGNvbmZpZyAmIzQzOyBQUkVfRU1QVElPTl9FTkFCTEVfVkVSSUZZKTtcbiYjNDM7XHRpZXQtXHUwMDNldmVyaWZ5X3N0YXR1cyA9IElDU1NHX0lFVEZQRV9TVEFURV9ESVNBQkxFRDtcbiYjNDM7XHRpZXQtXHUwMDNlZnBlX2FjdGl2ZSA9IGZhbHNlO1xuJiM0MztcdGljc3NnX2lldF9zZXRfcHJlZW1wdF9tYXNrKGVtYWMpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgaWNzc2dfcW9zX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgcHJ1ZXRoX3Fvc19pZXQgKmlldCA9IFx1MDAyNmVtYWMtXHUwMDNlcW9zLmlldDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZpZXQtXHUwMDNlZnBlX2xvY2spO1xuJiM0MztcdC8qIFNldCBkZWZhdWx0IHZhbHVlcyB0byBwcmV2ZW50IGdhcmJhZ2UgdmFsdWVzIGR1cmluZyAuZ2V0X21tKCkgKi9cbiYjNDM7XHRpZXQtXHUwMDNldmVyaWZ5X3RpbWVfbXMgPSBJQ1NTR19JRVRfTUFYX1ZFUklGWV9USU1FO1xuJiM0MztcdGlldC1cdTAwM2V0eF9taW5fZnJhZ19zaXplID0gRVRIX1pMRU47XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoaWNzc2dfcW9zX2luaXQpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBpY3NzZ19pZXRfY2hhbmdlX3ByZWVtcHRpYmxlX3RjcyhzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcHJ1ZXRoX3Fvc19pZXQgKmlldCA9IFx1MDAyNmVtYWMtXHUwMDNlcW9zLmlldDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmlldC1cdTAwM2VmcGVfbG9jayk7XG4mIzQzO1x0aWYgKCFpZXQtXHUwMDNlZnBlX2VuYWJsZWQgXHUwMDI2XHUwMDI2ICFpZXQtXHUwMDNlcHJlZW1wdGlibGVfdGNzKSB7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2aWV0LVx1MDAzZWZwZV9sb2NrKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XHRyZXQgPSBpY3NzZ19jb25maWdfaWV0ZnBlKGVtYWMtXHUwMDNlbmRldiwgaWV0LVx1MDAzZWZwZV9lbmFibGVkKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2aWV0LVx1MDAzZWZwZV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBlbWFjX3RjX3F1ZXJ5X2NhcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHZvaWQgKnR5cGVfZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0Y19xdWVyeV9jYXBzX2Jhc2UgKmJhc2UgPSB0eXBlX2RhdGE7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoYmFzZS1cdTAwM2V0eXBlKSB7XG4mIzQzO1x0Y2FzZSBUQ19TRVRVUF9RRElTQ19NUVBSSU86IHtcbiYjNDM7XHRcdHN0cnVjdCB0Y19tcXByaW9fY2FwcyAqY2FwcyA9IGJhc2UtXHUwMDNlY2FwcztcbiYjNDM7XG4mIzQzO1x0XHRjYXBzLVx1MDAzZXZhbGlkYXRlX3F1ZXVlX2NvdW50cyA9IHRydWU7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZW1hY190Y19zZXR1cF9tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHZvaWQgKnR5cGVfZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYyA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcdHN0cnVjdCBwcnVldGhfcW9zX21xcHJpbyAqcF9tcXByaW8gPSBcdTAwMjZlbWFjLVx1MDAzZXFvcy5tcXByaW87XG4mIzQzO1x0c3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbyA9IHR5cGVfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgcHJ1ZXRoX3Fvc19pZXQgKmlldCA9IFx1MDAyNmVtYWMtXHUwMDNlcW9zLmlldDtcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbiYjNDM7XHRpbnQgdGMsIG9mZnNldCwgY291bnQ7XG4mIzQzO1xuJiM0MztcdC8qIFZhbGlkYXRlIHBhcmFtZXRlcnMgKi9cbiYjNDM7XHRpZiAocW9wdC1cdTAwM2VudW1fdGMgXHUwMDNlIElDU1NHX01BWF9UQ19RVUVVRVMpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmRldiwgXCYjMzQ7TnVtYmVyIG9mIHRyYWZmaWMgY2xhc3NlcyAoJXUpIGV4Y2VlZHMgaGFyZHdhcmUgbGltaXRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIHFvcHQtXHUwMDNlbnVtX3RjKTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX1NIQVBFUikge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZGV2LCBcJiMzNDt0cmFmZmljIHNoYXBpbmcgaXMgbm90IHN1cHBvcnRlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiAoVENfTVFQUklPX0ZfTUlOX1JBVEUgfCBUQ19NUVBSSU9fRl9NQVhfUkFURSkpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmRldiwgXCYjMzQ7cGVyLXF1ZXVlIHJhdGUgbGltaXRpbmcgaXMgbm90IHN1cHBvcnRlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXFvcHQtXHUwMDNlbnVtX3RjKSB7XG4mIzQzO1x0XHRuZXRkZXZfcmVzZXRfdGMobmRldik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdG5ldGRldl9zZXRfbnVtX3RjKG5kZXYsIHFvcHQtXHUwMDNlbnVtX3RjKTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0Y291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbiYjNDM7XHRcdFx0b2Zmc2V0ID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdO1xuJiM0MztcdFx0XHRuZXRkZXZfc2V0X3RjX3F1ZXVlKG5kZXYsIHRjLCBjb3VudCwgb2Zmc2V0KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2aWV0LVx1MDAzZWZwZV9sb2NrKTtcbiYjNDM7XHRpZiAoIXFvcHQtXHUwMDNlbnVtX3RjKSB7XG4mIzQzO1x0XHRpZXQtXHUwMDNlcHJlZW1wdGlibGVfdGNzID0gMDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0bWVtY3B5KFx1MDAyNnBfbXFwcmlvLVx1MDAzZXFvcHQsIHFvcHQsIHNpemVvZigqcW9wdCkpO1xuJiM0MztcdFx0aWV0LVx1MDAzZXByZWVtcHRpYmxlX3RjcyA9IG1xcHJpby1cdTAwM2VwcmVlbXB0aWJsZV90Y3M7XG4mIzQzO1x0fVxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZpZXQtXHUwMDNlZnBlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRuZXRkZXZfZGJnKG5kZXYsIFwmIzM0O2Rldi1cdTAwM2VudW1fdGMgJXUgZGV2LVx1MDAzZXJlYWxfbnVtX3R4X3F1ZXVlcyAldVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIG5kZXYtXHUwMDNlbnVtX3RjLCBuZGV2LVx1MDAzZXJlYWxfbnVtX3R4X3F1ZXVlcyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBpY3NzZ19pZXRfY2hhbmdlX3ByZWVtcHRpYmxlX3RjcyhlbWFjKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IGljc3NnX3Fvc19uZG9fc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxuJiM0MztcdFx0XHQgICB2b2lkICp0eXBlX2RhdGEpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKHR5cGUpIHtcbiYjNDM7XHRjYXNlIFRDX1FVRVJZX0NBUFM6XG4mIzQzO1x0XHRyZXR1cm4gZW1hY190Y19xdWVyeV9jYXBzKG5kZXYsIHR5cGVfZGF0YSk7XG4mIzQzO1x0Y2FzZSBUQ19TRVRVUF9RRElTQ19NUVBSSU86XG4mIzQzO1x0XHRyZXR1cm4gZW1hY190Y19zZXR1cF9tcXByaW8obmRldiwgdHlwZV9kYXRhKTtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChpY3NzZ19xb3NfbmRvX3NldHVwX3RjKTtcbiYjNDM7XG4mIzQzO3ZvaWQgaWNzc2dfcW9zX2xpbmtfc3RhdGVfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBydWV0aF9lbWFjICplbWFjID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1x0c3RydWN0IHBydWV0aF9xb3NfaWV0ICppZXQgPSBcdTAwMjZlbWFjLVx1MDAzZXFvcy5pZXQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFSRUFEX09OQ0UoZW1hYy1cdTAwM2VsaW5rKSkge1xuJiM0MztcdFx0LyogQ2xlYXIgRlBFIGFjdGl2ZSBzdGF0ZSBvbiBsaW5rLWRvd24gc28gZ2V0X21tKCkgcmVwb3J0c1xuJiM0MztcdFx0ICogYWNjdXJhdGUgdHhfYWN0aXZlIGFuZCB2ZXJpZnlfc3RhdHVzIHdoaWxlIGxpbmsgaXMgZG93bi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0bXV0ZXhfbG9jayhcdTAwMjZpZXQtXHUwMDNlZnBlX2xvY2spO1xuJiM0MztcdFx0aWV0LVx1MDAzZWZwZV9hY3RpdmUgPSBmYWxzZTtcbiYjNDM7XHRcdGlldC1cdTAwM2V2ZXJpZnlfc3RhdHVzID0gSUNTU0dfSUVURlBFX1NUQVRFX0RJU0FCTEVEO1xuJiM0MztcdFx0aWNzc2dfaWV0X3NldF9wcmVlbXB0X21hc2soZW1hYyk7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2aWV0LVx1MDAzZWZwZV9sb2NrKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGljc3NnX2lldF9jaGFuZ2VfcHJlZW1wdGlibGVfdGNzKGVtYWMpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRuZXRkZXZfZGJnKG5kZXYsIFwmIzM0O0lFVCBGUEUgJXMgZmFpbGVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBzdHJfZW5hYmxlX2Rpc2FibGUoaWV0LVx1MDAzZWZwZV9lbmFibGVkKSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoaWNzc2dfcW9zX2xpbmtfc3RhdGVfdXBkYXRlKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19xb3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3Fvcy5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTgyNmNlNGJjZmQ5NlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcW9zLmhcbkBAIC0wLDAgJiM0MzsxLDY4IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4mIzQzOy8qIENvcHlyaWdodCAoQykgMjAyMyBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS9cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9fTkVUX1RJX0lDU1NHX1FPU19IXG4mIzQzOyNkZWZpbmUgX19ORVRfVElfSUNTU0dfUU9TX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2F0b21pYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBJQ1NTR19NQVhfVENfUVVFVUVTXHRcdFx0OFxuJiM0MzsjZGVmaW5lIElDU1NHX0VYUFJFU1NfUV9NQVNLX0FMTFx0XHQweEZGXG4mIzQzOyNkZWZpbmUgSUNTU0dfSUVUX01BWF9WRVJJRllfVElNRVx0XHQxMjhcbiYjNDM7I2RlZmluZSBJQ1NTR19JRVRfTUlOX1ZFUklGWV9USU1FXHRcdDFcbiYjNDM7I2RlZmluZSBJQ1NTR19JRVRfVkVSSUZZX0FUVEVNUFRTXHRcdDNcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBlbnVtIGljc3NnX2lldGZwZV92ZXJpZnlfc3RhdGVzIC0gc3RhdHVzIG9mIE1NIFZlcmlmeSByZXR1cm5lZCBieSBmaXJtd2FyZVxuJiM0MzsgKiBASUNTU0dfSUVURlBFX1NUQVRFX1VOS05PV046XG4mIzQzOyAqXHR2ZXJpZmljYXRpb24gc3RhdHVzIGlzIHVua25vd25cbiYjNDM7ICogQElDU1NHX0lFVEZQRV9TVEFURV9JTklUSUFMOlxuJiM0MzsgKlx0RmlybXdhcmUgcmV0dXJucyB0aGlzIGlmIHZlcmlmeSBzdGF0ZSBkaWFncmFtIGlzIGlkbGVcbiYjNDM7ICogQElDU1NHX0lFVEZQRV9TVEFURV9WRVJJRllJTkc6XG4mIzQzOyAqXHRGaXJtd2FyZSByZXR1cm5zIHRoaXMgaWYgdmVyaWZpY2F0aW9uIGlzIG9uZ29pbmdcbiYjNDM7ICogQElDU1NHX0lFVEZQRV9TVEFURV9TVUNDRUVERUQ6XG4mIzQzOyAqXHRGaXJtd2FyZSByZXR1cm5zIHRoaXMgaWYgdmVyaWZ5IHN0YXRlIGRpYWdyYW0gY29tcGxldGVzIHZlcmlmaWNhdGlvblxuJiM0MzsgKiBASUNTU0dfSUVURlBFX1NUQVRFX0ZBSUxFRDpcbiYjNDM7ICpcdEZpcm13YXJlIHJldHVybnMgdGhpcyBpZiB2ZXJpZnkgc3RhdGUgZGlhZ3JhbSBmYWlscyBkdXJpbmcgdmVyaWZpY2F0aW9uXG4mIzQzOyAqIEBJQ1NTR19JRVRGUEVfU1RBVEVfRElTQUJMRUQ6XG4mIzQzOyAqXHR2ZXJpZmljYXRpb24gaXMgZGlzYWJsZWQgYnkgdGhlIGRyaXZlclxuJiM0MzsgKi9cbiYjNDM7ZW51bSBpY3NzZ19pZXRmcGVfdmVyaWZ5X3N0YXRlcyB7XG4mIzQzO1x0SUNTU0dfSUVURlBFX1NUQVRFX1VOS05PV04gPSAwLFxuJiM0MztcdElDU1NHX0lFVEZQRV9TVEFURV9JTklUSUFMLFxuJiM0MztcdElDU1NHX0lFVEZQRV9TVEFURV9WRVJJRllJTkcsXG4mIzQzO1x0SUNTU0dfSUVURlBFX1NUQVRFX1NVQ0NFRURFRCxcbiYjNDM7XHRJQ1NTR19JRVRGUEVfU1RBVEVfRkFJTEVELFxuJiM0MztcdElDU1NHX0lFVEZQRV9TVEFURV9ESVNBQkxFRFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHBydWV0aF9xb3NfbXFwcmlvIHtcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgcW9wdDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBwcnVldGhfcW9zX2lldCB7XG4mIzQzO1x0Ym9vbCBmcGVfZW5hYmxlZDtcbiYjNDM7XHRib29sIG1hY192ZXJpZnlfY29uZmlndXJlO1xuJiM0MztcdHUzMiB0eF9taW5fZnJhZ19zaXplO1xuJiM0MztcdHUzMiB2ZXJpZnlfdGltZV9tcztcbiYjNDM7XHRib29sIGZwZV9hY3RpdmU7XG4mIzQzO1x0ZW51bSBpY3NzZ19pZXRmcGVfdmVyaWZ5X3N0YXRlcyB2ZXJpZnlfc3RhdHVzO1xuJiM0MztcdC8qIGZwZSBtdXRleCBwcm90ZWN0cyBhbGwgRlBFIG9wZXJhdGlvbnMgZm9yIHN5bmNocm9uaXphdGlvbiAqL1xuJiM0MztcdHN0cnVjdCBtdXRleCBmcGVfbG9jaztcbiYjNDM7XHR1OCBwcmVlbXB0aWJsZV90Y3M7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcHJ1ZXRoX3FvcyB7XG4mIzQzO1x0c3RydWN0IHBydWV0aF9xb3NfaWV0IGlldDtcbiYjNDM7XHRzdHJ1Y3QgcHJ1ZXRoX3Fvc19tcXByaW8gbXFwcmlvO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7dm9pZCBpY3NzZ19xb3NfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4mIzQzO3ZvaWQgaWNzc2dfcW9zX2xpbmtfc3RhdGVfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbiYjNDM7aW50IGljc3NnX3Fvc19uZG9fc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxuJiM0MztcdFx0XHQgICB2b2lkICp0eXBlX2RhdGEpO1xuJiM0MztpbnQgaWNzc2dfY29uZmlnX2lldGZwZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgYm9vbCBlbmFibGUpO1xuJiM0MzsjZW5kaWYgLyogX19ORVRfVElfSUNTU0dfUU9TX0ggKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zdGF0cy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfc3RhdHMuY1xuaW5kZXggNzE1OWJhYTAxNTVjZi4uY2ZkYjZmNWRjNWRhMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3N0YXRzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3N0YXRzLmNcbkBAIC03NCw3ICYjNDM7NzQsNyBAQCB2b2lkIGljc3NnX3N0YXRzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGljc3NnX3N0YXRzX3dvcmtfaGFuZGxlcik7XG4gXG4taW50IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMsIGNoYXIgKnN0YXRfbmFtZSlcbiYjNDM7dTY0IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMsIGNoYXIgKnN0YXRfbmFtZSlcbiB7XG4gXHRpbnQgaTtcbiBcbkBAIC05MSw1ICYjNDM7OTEsNSBAQCBpbnQgZW1hY19nZXRfc3RhdF9ieV9uYW1lKHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYywgY2hhciAqc3RhdF9uYW1lKVxuIFx0fVxuIFxuIFx0bmV0ZGV2X2VycihlbWFjLVx1MDAzZW5kZXYsIFwmIzM0O0ludmFsaWQgc3RhdHMgJXNcXG5cJiMzNDssIHN0YXRfbmFtZSk7XG4tXHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfc3RhdHMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3N0YXRzLmhcbmluZGV4IDVlYzBiMzhlMGM2N2QuLmI4NmRhOGRhMjNhMTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zdGF0cy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zdGF0cy5oXG5AQCAtOCw4ICYjNDM7OCw2IEBAXG4gI2lmbmRlZiBfX05FVF9USV9JQ1NTR19TVEFUU19IXG4gI2RlZmluZSBfX05FVF9USV9JQ1NTR19TVEFUU19IXG4gXG4tI2luY2x1ZGUgXCYjMzQ7aWNzc2dfcHJ1ZXRoLmhcJiMzNDtcbi1cbiAjZGVmaW5lIFNUQVRTX1RJTUVfTElNSVRfMUdfTVMgICAgMjUwMDAgICAgLyogMjUgc2Vjb25kcyBAIDFHICovXG4gXG4gc3RydWN0IG1paWdfc3RhdHNfcmVncyB7XG5AQCAtMTU1LDUwICYjNDM7MTUzLDYwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNzc2dfbWlpZ19zdGF0cyBpY3NzZ19hbGxfbWlpZ19zdGF0c1tdID0ge1xuIFx0SUNTU0dfTUlJR19TVEFUUyh0eF9ieXRlcywgdHJ1ZSksXG4gfTtcbiBcbi0jZGVmaW5lIElDU1NHX1BBX1NUQVRTKGZpZWxkKVx0XFxcbi17XHRcdFx0XHRcXFxuLVx0I2ZpZWxkLFx0XHRcdFxcXG4tXHRmaWVsZCxcdFx0XHRcXFxuJiM0MzsjZGVmaW5lIElDU1NHX1BBX1NUQVRTKGZpZWxkLCBzdGQpXHRcXFxuJiM0Mzt7XHRcdFx0XHRcdFxcXG4mIzQzO1x0I2ZpZWxkLFx0XHRcdFx0XFxcbiYjNDM7XHRmaWVsZCxcdFx0XHRcdFxcXG4mIzQzO1x0c3RkLFx0XHRcdFx0XFxcbiB9XG4gXG4gc3RydWN0IGljc3NnX3BhX3N0YXRzIHtcbiBcdGNoYXIgbmFtZVtFVEhfR1NUUklOR19MRU5dO1xuIFx0dTMyIG9mZnNldDtcbiYjNDM7XHRib29sIHN0YW5kYXJkX3N0YXRzO1xuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpY3NzZ19wYV9zdGF0cyBpY3NzZ19hbGxfcGFfc3RhdHNbXSA9IHtcbi1cdElDU1NHX1BBX1NUQVRTKEZXX1JUVV9QS1RfRFJPUCksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19RMF9PVkVSRkxPVyksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19RMV9PVkVSRkxPVyksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19RMl9PVkVSRkxPVyksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19RM19PVkVSRkxPVyksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19RNF9PVkVSRkxPVyksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19RNV9PVkVSRkxPVyksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19RNl9PVkVSRkxPVyksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19RN19PVkVSRkxPVyksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19EUk9QUEVEX1BLVCksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19SWF9FUlJPUiksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19SWF9EU19JTlZBTElEKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX1RYX0RST1BQRURfUEFDS0VUKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX1RYX1RTX0RST1BQRURfUEFDS0VUKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX0lORl9QT1JUX0RJU0FCTEVEKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX0lORl9TQVYpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfSU5GX1NBX0RMKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX0lORl9QT1JUX0JMT0NLRUQpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfVEFHR0VEKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX0lORl9EUk9QX1BSSU9UQUdHRUQpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfTk9UQUcpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfTk9UTUVNQkVSKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX1JYX0VPRl9TSE9SVF9GUk1FUlIpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfUlhfQjBfRFJPUF9FQVJMWV9FT0YpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfVFhfSlVNQk9fRlJNX0NVVE9GRiksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19SWF9FWFBfRlJBR19RX0RST1ApLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfUlhfRklGT19PVkVSUlVOKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX0NVVF9USFJfUEtUKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX0hPU1RfUlhfUEtUX0NOVCksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19IT1NUX1RYX1BLVF9DTlQpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfSE9TVF9FR1JFU1NfUV9QUkVfT1ZFUkZMT1cpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfSE9TVF9FR1JFU1NfUV9FWFBfT1ZFUkZMT1cpLFxuJiM0MztcdElDU1NHX1BBX1NUQVRTKEZXX1JUVV9QS1RfRFJPUCwgZmFsc2UpLFxuJiM0MztcdElDU1NHX1BBX1NUQVRTKEZXX1EwX09WRVJGTE9XLCBmYWxzZSksXG4mIzQzO1x0SUNTU0dfUEFfU1RBVFMoRldfUTFfT1ZFUkZMT1csIGZhbHNlKSxcbiYjNDM7XHRJQ1NTR19QQV9TVEFUUyhGV19RMl9PVkVSRkxPVywgZmFsc2UpLFxuJiM0MztcdElDU1NHX1BBX1NUQVRTKEZXX1EzX09WRVJGTE9XLCBmYWxzZSksXG4mIzQzO1x0SUNTU0dfUEFfU1RBVFMoRldfUTRfT1ZFUkZMT1csIGZhbHNlKSxcbiYjNDM7XHRJQ1NTR19QQV9TVEFUUyhGV19RNV9PVkVSRkxPVywgZmFsc2UpLFxuJiM0MztcdElDU1NHX1BBX1NUQVRTKEZXX1E2X09WRVJGTE9XLCBmYWxzZSksXG4mIzQzO1x0SUNTU0dfUEFfU1RBVFMoRldfUTdfT1ZFUkZMT1csIGZhbHNlKSxcbiYjNDM7XHRJQ1NTR19QQV9TVEFUUyhGV19EUk9QUEVEX1BLVCwgZmFsc2UpLFxuJiM0MztcdElDU1NHX1BBX1NUQVRTKEZXX1JYX0VSUk9SLCBmYWxzZSksXG4mIzQzO1x0SUNTU0dfUEFfU1RBVFMoRldfUlhfRFNfSU5WQUxJRCwgZmFsc2UpLFxuJiM0MztcdElDU1NHX1BBX1NUQVRTKEZXX1RYX0RST1BQRURfUEFDS0VULCBmYWxzZSksXG4mIzQzO1x0SUNTU0dfUEFfU1RBVFMoRldfVFhfVFNfRFJPUFBFRF9QQUNLRVQsIGZhbHNlKSxcbiYjNDM7XHRJQ1NTR19QQV9TVEFUUyhGV19JTkZfUE9SVF9ESVNBQkxFRCwgZmFsc2UpLFxuJiM0MztcdElDU1NHX1BBX1NUQVRTKEZXX0lORl9TQVYsIGZhbHNlKSxcbiYjNDM7XHRJQ1NTR19QQV9TVEFUUyhGV19JTkZfU0FfREwsIGZhbHNlKSxcbiYjNDM7XHRJQ1NTR19QQV9TVEFUUyhGV19JTkZfUE9SVF9CTE9DS0VELCBmYWxzZSksXG4mIzQzO1x0SUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfVEFHR0VELCBmYWxzZSksXG4mIzQzO1x0SUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfUFJJT1RBR0dFRCwgZmFsc2UpLFxuJiM0MztcdElDU1NHX1BBX1NUQVRTKEZXX0lORl9EUk9QX05PVEFHLCBmYWxzZSksXG4mIzQzO1x0SUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfTk9UTUVNQkVSLCBmYWxzZSksXG4mIzQzO1x0LyogTUFDIE1lcmdlIGNvdW50ZXJzOiBleHBvc2VkIHZpYSAuZ2V0X21tX3N0YXRzIHN0YW5kYXJkIHVBUEksXG4mIzQzO1x0ICogbm90IGR1cGxpY2F0ZWQgaW4gdGhlIHByaXZhdGUgZXRodG9vbCAtUyB0YWJsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRJQ1NTR19QQV9TVEFUUyhGV19QUkVFTVBUX0JBRF9GUkFHLCB0cnVlKSxcbiYjNDM7XHRJQ1NTR19QQV9TVEFUUyhGV19QUkVFTVBUX0FTU0VNQkxZX0VSUiwgdHJ1ZSksXG4mIzQzO1x0SUNTU0dfUEFfU1RBVFMoRldfUFJFRU1QVF9GUkFHX0NOVF9UWCwgdHJ1ZSksXG4mIzQzO1x0SUNTU0dfUEFfU1RBVFMoRldfUFJFRU1QVF9BU1NFTUJMWV9PSywgdHJ1ZSksXG4mIzQzO1x0SUNTU0dfUEFfU1RBVFMoRldfUFJFRU1QVF9GUkFHX0NOVF9SWCwgdHJ1ZSksXG4mIzQzO1x0SUNTU0dfUEFfU1RBVFMoRldfUlhfRU9GX1NIT1JUX0ZSTUVSUiwgZmFsc2UpLFxuJiM0MztcdElDU1NHX1BBX1NUQVRTKEZXX1JYX0IwX0RST1BfRUFSTFlfRU9GLCBmYWxzZSksXG4mIzQzO1x0SUNTU0dfUEFfU1RBVFMoRldfVFhfSlVNQk9fRlJNX0NVVE9GRiwgZmFsc2UpLFxuJiM0MztcdElDU1NHX1BBX1NUQVRTKEZXX1JYX0VYUF9GUkFHX1FfRFJPUCwgZmFsc2UpLFxuJiM0MztcdElDU1NHX1BBX1NUQVRTKEZXX1JYX0ZJRk9fT1ZFUlJVTiwgZmFsc2UpLFxuJiM0MztcdElDU1NHX1BBX1NUQVRTKEZXX0NVVF9USFJfUEtULCBmYWxzZSksXG4mIzQzO1x0SUNTU0dfUEFfU1RBVFMoRldfSE9TVF9SWF9QS1RfQ05ULCBmYWxzZSksXG4mIzQzO1x0SUNTU0dfUEFfU1RBVFMoRldfSE9TVF9UWF9QS1RfQ05ULCBmYWxzZSksXG4mIzQzO1x0SUNTU0dfUEFfU1RBVFMoRldfSE9TVF9FR1JFU1NfUV9QUkVfT1ZFUkZMT1csIGZhbHNlKSxcbiYjNDM7XHRJQ1NTR19QQV9TVEFUUyhGV19IT1NUX0VHUkVTU19RX0VYUF9PVkVSRkxPVywgZmFsc2UpLFxuIH07XG4gXG4gI2VuZGlmIC8qIF9fTkVUX1RJX0lDU1NHX1NUQVRTX0ggKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zd2l0Y2hfbWFwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zd2l0Y2hfbWFwLmhcbmluZGV4IDdlMDUzYjhhZjNlY2UuLjg1NWZkNGVkMGIzZjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zd2l0Y2hfbWFwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3N3aXRjaF9tYXAuaFxuQEAgLTI1Niw2ICYjNDM7MjU2LDExIEBAXG4gI2RlZmluZSBGV19JTkZfRFJPUF9QUklPVEFHR0VEXHRcdDB4MDE0OFxuICNkZWZpbmUgRldfSU5GX0RST1BfTk9UQUdcdFx0MHgwMTUwXG4gI2RlZmluZSBGV19JTkZfRFJPUF9OT1RNRU1CRVJcdFx0MHgwMTU4XG4mIzQzOyNkZWZpbmUgRldfUFJFRU1QVF9CQURfRlJBR1x0XHQweDAxNjBcbiYjNDM7I2RlZmluZSBGV19QUkVFTVBUX0FTU0VNQkxZX0VSUlx0XHQweDAxNjhcbiYjNDM7I2RlZmluZSBGV19QUkVFTVBUX0ZSQUdfQ05UX1RYXHRcdDB4MDE3MFxuJiM0MzsjZGVmaW5lIEZXX1BSRUVNUFRfQVNTRU1CTFlfT0tcdFx0MHgwMTc4XG4mIzQzOyNkZWZpbmUgRldfUFJFRU1QVF9GUkFHX0NOVF9SWFx0XHQweDAxODBcbiAjZGVmaW5lIEZXX1JYX0VPRl9TSE9SVF9GUk1FUlJcdFx0MHgwMTg4XG4gI2RlZmluZSBGV19SWF9CMF9EUk9QX0VBUkxZX0VPRlx0XHQweDAxOTBcbiAjZGVmaW5lIEZXX1RYX0pVTUJPX0ZSTV9DVVRPRkZcdFx0MHgwMTk4XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgbW9kaWZpZWQgY29kZSBpcyBjb25maW5lZCB0byB0aGUgVGV4YXMgSW5zdHJ1bWVudHMgSUNTU0cgUFJVIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvKSwgd2hpY2ggZGVwZW5kcyBvbiBDT05GSUdfQVJDSF9LMyAoYW4gQVJNNjQtc3BlY2lmaWMgU29DIGFyY2hpdGVjdHVyZSkuIFRoaXMgZHJpdmVyIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiB0aGUgdGFyZ2V0IGFtZDY0IGFyY2hpdGVjdHVyZSBhbmQgYWRkaXRpb25hbGx5IHJlcXVpcmVzIHBoeXNpY2FsIFRJIEszIFBSVS1JQ1NTRyBTb0MgaGFyZHdhcmUgYW5kIGZpcm13YXJlIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlNWY0ZmY1NmQxNDk3MDFmNjU0ZDA3NDFmNTgxNDU1MjUzMTE0ZmVhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMTUgMDc6MTA6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL01ha2VmaWxlCmluZGV4IGY0Mjc2YzlhNzc2MjAuLmQxOWJjZDI1YzlkMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL01ha2VmaWxlCkBAIC00Niw2ICYjNDM7NDYsNyBAQCBpY3NzZy15IDo9IGljc3NnL2ljc3NnX2NvbW1vbi5vIFwKIAkgICBpY3NzZy9pY3NzZ19jb25maWcubyBcCiAJICAgaWNzc2cvaWNzc2dfbWlpX2NmZy5vIFwKIAkgICBpY3NzZy9pY3NzZ19zdGF0cy5vIFwKLQkgICBpY3NzZy9pY3NzZ19ldGh0b29sLm8KJiM0MzsJICAgaWNzc2cvaWNzc2dfZXRodG9vbC5vIFwKJiM0MzsJICAgaWNzc2cvaWNzc2dfcW9zLm8KIAogb2JqLSQoQ09ORklHX1RJX0lDU1NfSUVQKSAmIzQzOz0gaWNzc2cvaWNzc19pZXAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19jb21tb24uYwppbmRleCA0YTdkMWE2ZjQ3MGIxLi5kNTllZWY2MWU3MDEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19jb21tb24uYwpAQCAtMTc1NCw2ICYjNDM7MTc1NCw3IEBAIHZvaWQgcHJ1ZXRoX25ldGRldl9leGl0KHN0cnVjdCBwcnVldGggKnBydWV0aCwKIAogCW5ldGlmX25hcGlfZGVsKCZhbXA7ZW1hYy0mZ3Q7bmFwaV9yeCk7CiAKJiM0MzsJbXV0ZXhfZGVzdHJveSgmYW1wO2VtYWMtJmd0O3Fvcy5pZXQuZnBlX2xvY2spOwogCXBydXNzX3JlbGVhc2VfbWVtX3JlZ2lvbihwcnVldGgtJmd0O3BydXNzLCAmYW1wO2VtYWMtJmd0O2RyYW0pOwogCWZyZWVfbmV0ZGV2KGVtYWMtJmd0O25kZXYpOwogCXBydWV0aC0mZ3Q7ZW1hY1ttYWNdID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2NvbmZpZy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfY29uZmlnLmgKaW5kZXggNjBkNjk3NDRmZmFlMi4uMWFjMjAyZjg1NWVkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfY29uZmlnLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfY29uZmlnLmgKQEAgLTMyMywxMyAmIzQzOzMyMyw0IEBAIHN0cnVjdCBwcnVldGhfZmRiX3Nsb3QgewogCXU4IGZpZDsKIAl1OCBmaWRfYzI7CiB9IF9fcGFja2VkOwotCi1lbnVtIGljc3NnX2lldGZwZV92ZXJpZnlfc3RhdGVzIHsKLQlJQ1NTR19JRVRGUEVfU1RBVEVfVU5LTk9XTiA9IDAsCi0JSUNTU0dfSUVURlBFX1NUQVRFX0lOSVRJQUwsCi0JSUNTU0dfSUVURlBFX1NUQVRFX1ZFUklGWUlORywKLQlJQ1NTR19JRVRGUEVfU1RBVEVfU1VDQ0VFREVELAotCUlDU1NHX0lFVEZQRV9TVEFURV9GQUlMRUQsCi0JSUNTU0dfSUVURlBFX1NUQVRFX0RJU0FCTEVECi19OwogI2VuZGlmIC8qIF9fTkVUX1RJX0lDU1NHX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19ldGh0b29sLmMKaW5kZXggYjcxNWFmMjFkMjNhYy4uZGMyNTM2MWFmZTk4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2V0aHRvb2wuYwpAQCAtNzQsNyAmIzQzOzc0LDggQEAgc3RhdGljIGludCBlbWFjX2dldF9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgc3RyaW5nc2V0KQogCQlpZiAoZW1hYy0mZ3Q7cHJ1ZXRoLSZndDtwYV9zdGF0cykKIAkJCXJldHVybiBJQ1NTR19OVU1fRVRIVE9PTF9TVEFUUzsKIAkJZWxzZQotCQkJcmV0dXJuIElDU1NHX05VTV9FVEhUT09MX1NUQVRTIC0gSUNTU0dfTlVNX1BBX1NUQVRTOwomIzQzOwkJCXJldHVybiBJQ1NTR19OVU1fRVRIVE9PTF9TVEFUUyAtCiYjNDM7CQkJICAgICAgIChJQ1NTR19OVU1fUEFfU1RBVFMgLSBJQ1NTR19OVU1fUEFfU1RBTkRBUkRfU1RBVFMpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CkBAIC05Myw3ICYjNDM7OTQsOCBAQCBzdGF0aWMgdm9pZCBlbWFjX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqZGF0YSkKIAkJCQlldGh0b29sX3B1dHMoJmFtcDtwLCBpY3NzZ19hbGxfbWlpZ19zdGF0c1tpXS5uYW1lKTsKIAkJaWYgKGVtYWMtJmd0O3BydWV0aC0mZ3Q7cGFfc3RhdHMpCiAJCQlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShpY3NzZ19hbGxfcGFfc3RhdHMpOyBpJiM0MzsmIzQzOykKLQkJCQlldGh0b29sX3B1dHMoJmFtcDtwLCBpY3NzZ19hbGxfcGFfc3RhdHNbaV0ubmFtZSk7CiYjNDM7CQkJCWlmICghaWNzc2dfYWxsX3BhX3N0YXRzW2ldLnN0YW5kYXJkX3N0YXRzKQomIzQzOwkJCQkJZXRodG9vbF9wdXRzKCZhbXA7cCwgaWNzc2dfYWxsX3BhX3N0YXRzW2ldLm5hbWUpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTExNCw3ICYjNDM7MTE2LDggQEAgc3RhdGljIHZvaWQgZW1hY19nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAogCWlmIChlbWFjLSZndDtwcnVldGgtJmd0O3BhX3N0YXRzKQogCQlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShpY3NzZ19hbGxfcGFfc3RhdHMpOyBpJiM0MzsmIzQzOykKLQkJCSooZGF0YSYjNDM7JiM0MzspID0gZW1hYy0mZ3Q7cGFfc3RhdHNbaV07CiYjNDM7CQkJaWYgKCFpY3NzZ19hbGxfcGFfc3RhdHNbaV0uc3RhbmRhcmRfc3RhdHMpCiYjNDM7CQkJCSooZGF0YSYjNDM7JiM0MzspID0gZW1hYy0mZ3Q7cGFfc3RhdHNbaV07CiB9CiAKIHN0YXRpYyBpbnQgZW1hY19nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKQEAgLTI5NCw2ICYjNDM7Mjk3LDEyNiBAQCBzdGF0aWMgaW50IGVtYWNfc2V0X3Blcl9xdWV1ZV9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIHF1ZXVlLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBlbWFjX2dldF9tbShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGV0aHRvb2xfbW1fc3RhdGUgKnN0YXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IHBydWV0aF9lbWFjICplbWFjID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CXN0cnVjdCBwcnVldGhfcW9zX2lldCAqaWV0ID0gJmFtcDtlbWFjLSZndDtxb3MuaWV0OwomIzQzOwllbnVtIGljc3NnX2lldGZwZV92ZXJpZnlfc3RhdGVzIHZlcmlmeV9zdGF0dXM7CiYjNDM7CiYjNDM7CWlmIChlbWFjLSZndDtpc19zcjEpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtpZXQtJmd0O2ZwZV9sb2NrKTsKJiM0MzsJc3RhdGUtJmd0O3R4X2VuYWJsZWQgPSBpZXQtJmd0O2ZwZV9lbmFibGVkOwomIzQzOwlzdGF0ZS0mZ3Q7dHhfbWluX2ZyYWdfc2l6ZSA9IGlldC0mZ3Q7dHhfbWluX2ZyYWdfc2l6ZTsKJiM0MzsJc3RhdGUtJmd0O3ZlcmlmeV9lbmFibGVkID0gaWV0LSZndDttYWNfdmVyaWZ5X2NvbmZpZ3VyZTsKJiM0MzsJc3RhdGUtJmd0O3ZlcmlmeV90aW1lID0gaWV0LSZndDt2ZXJpZnlfdGltZV9tczsKJiM0MzsJc3RhdGUtJmd0O3R4X2FjdGl2ZSA9IGlldC0mZ3Q7ZnBlX2FjdGl2ZTsKJiM0MzsJdmVyaWZ5X3N0YXR1cyA9IGlldC0mZ3Q7dmVyaWZ5X3N0YXR1czsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7aWV0LSZndDtmcGVfbG9jayk7CiYjNDM7CiYjNDM7CXN0YXRlLSZndDtyeF9taW5fZnJhZ19zaXplID0gRVRIX1pMRU47CiYjNDM7CXN0YXRlLSZndDtwbWFjX2VuYWJsZWQgPSB0cnVlOwomIzQzOwomIzQzOwlzd2l0Y2ggKHZlcmlmeV9zdGF0dXMpIHsKJiM0MzsJY2FzZSBJQ1NTR19JRVRGUEVfU1RBVEVfRElTQUJMRUQ6CiYjNDM7CQlzdGF0ZS0mZ3Q7dmVyaWZ5X3N0YXR1cyA9IEVUSFRPT0xfTU1fVkVSSUZZX1NUQVRVU19ESVNBQkxFRDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIElDU1NHX0lFVEZQRV9TVEFURV9JTklUSUFMOgomIzQzOwkJc3RhdGUtJmd0O3ZlcmlmeV9zdGF0dXMgPSBFVEhUT09MX01NX1ZFUklGWV9TVEFUVVNfSU5JVElBTDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIElDU1NHX0lFVEZQRV9TVEFURV9WRVJJRllJTkc6CiYjNDM7CQlzdGF0ZS0mZ3Q7dmVyaWZ5X3N0YXR1cyA9IEVUSFRPT0xfTU1fVkVSSUZZX1NUQVRVU19WRVJJRllJTkc7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBJQ1NTR19JRVRGUEVfU1RBVEVfU1VDQ0VFREVEOgomIzQzOwkJc3RhdGUtJmd0O3ZlcmlmeV9zdGF0dXMgPSBFVEhUT09MX01NX1ZFUklGWV9TVEFUVVNfU1VDQ0VFREVEOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgSUNTU0dfSUVURlBFX1NUQVRFX0ZBSUxFRDoKJiM0MzsJCXN0YXRlLSZndDt2ZXJpZnlfc3RhdHVzID0gRVRIVE9PTF9NTV9WRVJJRllfU1RBVFVTX0ZBSUxFRDsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJc3RhdGUtJmd0O3ZlcmlmeV9zdGF0dXMgPSBFVEhUT09MX01NX1ZFUklGWV9TVEFUVVNfVU5LTk9XTjsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIDgwMi4zLTIwMTggY2xhdXNlIDMwLjE0LjEuNiwgc2F5cyB0aGF0IHRoZSBhTUFDTWVyZ2VWZXJpZnlUaW1lCiYjNDM7CSAqIHZhcmlhYmxlIGhhcyBhIHJhbmdlIGJldHdlZW4gMSBhbmQgMTI4IG1zIGluY2x1c2l2ZS4gTGltaXQgdG8gdGhhdC4KJiM0MzsJICovCiYjNDM7CXN0YXRlLSZndDttYXhfdmVyaWZ5X3RpbWUgPSBFVEhUT09MX01NX01BWF9WRVJJRllfVElNRV9NUzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZW1hY19zZXRfbW0oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBldGh0b29sX21tX2NmZyAqY2ZnLAomIzQzOwkJICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYyA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwlzdHJ1Y3QgcHJ1ZXRoX3Fvc19pZXQgKmlldCA9ICZhbXA7ZW1hYy0mZ3Q7cW9zLmlldDsKJiM0MzsJdTMyIG9sZF92ZXJpZnlfdGltZV9tcywgb2xkX3R4X21pbl9mcmFnX3NpemU7CiYjNDM7CWJvb2wgb2xkX2ZwZV9lbmFibGVkLCBvbGRfbWFjX3ZlcmlmeV9jb25maWd1cmU7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmIChlbWFjLSZndDtpc19zcjEpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWlmICghY2ZnLSZndDtwbWFjX2VuYWJsZWQpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICYjMzQ7cHJlZW1wdGlibGUgTUFDIGlzIGFsd2F5cyBlbmFibGVkJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtpZXQtJmd0O2ZwZV9sb2NrKTsKJiM0MzsJb2xkX3ZlcmlmeV90aW1lX21zID0gaWV0LSZndDt2ZXJpZnlfdGltZV9tczsKJiM0MzsJb2xkX3R4X21pbl9mcmFnX3NpemUgPSBpZXQtJmd0O3R4X21pbl9mcmFnX3NpemU7CiYjNDM7CW9sZF9mcGVfZW5hYmxlZCA9IGlldC0mZ3Q7ZnBlX2VuYWJsZWQ7CiYjNDM7CW9sZF9tYWNfdmVyaWZ5X2NvbmZpZ3VyZSA9IGlldC0mZ3Q7bWFjX3ZlcmlmeV9jb25maWd1cmU7CiYjNDM7CiYjNDM7CWlldC0mZ3Q7dmVyaWZ5X3RpbWVfbXMgPSBjZmctJmd0O3ZlcmlmeV90aW1lOwomIzQzOwlpZXQtJmd0O3R4X21pbl9mcmFnX3NpemUgPSBjZmctJmd0O3R4X21pbl9mcmFnX3NpemU7CiYjNDM7CWlldC0mZ3Q7ZnBlX2VuYWJsZWQgPSBjZmctJmd0O3R4X2VuYWJsZWQ7CiYjNDM7CWlldC0mZ3Q7bWFjX3ZlcmlmeV9jb25maWd1cmUgPSBjZmctJmd0O3ZlcmlmeV9lbmFibGVkOwomIzQzOwllcnIgPSBpY3NzZ19jb25maWdfaWV0ZnBlKG5kZXYsIGNmZy0mZ3Q7dHhfZW5hYmxlZCk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCS8qIGljc3NnX2NvbmZpZ19pZXRmcGUmIzM5O3MgZmFsbGJhY2sgcGF0aCBhbHJlYWR5IGNsZWFyZWQgZnBlX2FjdGl2ZS4KJiM0MzsJCSAqIFJlc3RvcmUgYWxsIGNvbmZpZyBmaWVsZHMgc28gZ2V0X21tKCkgcmVwb3J0cyB0aGUgY29uZmlndXJhdGlvbgomIzQzOwkJICogdGhhdCBpcyBhY3R1YWxseSByZWZsZWN0ZWQgaW4gaGFyZHdhcmUuCiYjNDM7CQkgKi8KJiM0MzsJCWlldC0mZ3Q7dmVyaWZ5X3RpbWVfbXMgPSBvbGRfdmVyaWZ5X3RpbWVfbXM7CiYjNDM7CQlpZXQtJmd0O3R4X21pbl9mcmFnX3NpemUgPSBvbGRfdHhfbWluX2ZyYWdfc2l6ZTsKJiM0MzsJCWlldC0mZ3Q7ZnBlX2VuYWJsZWQgPSBvbGRfZnBlX2VuYWJsZWQ7CiYjNDM7CQlpZXQtJmd0O21hY192ZXJpZnlfY29uZmlndXJlID0gb2xkX21hY192ZXJpZnlfY29uZmlndXJlOwomIzQzOwl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2lldC0mZ3Q7ZnBlX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBlbWFjX2dldF9tbV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgZXRodG9vbF9tbV9zdGF0cyAqcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYyA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwomIzQzOwlpZiAoZW1hYy0mZ3Q7aXNfc3IxKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoIWVtYWMtJmd0O3BydWV0aC0mZ3Q7cGFfc3RhdHMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWVtYWNfdXBkYXRlX2hhcmR3YXJlX3N0YXRzKGVtYWMpOwomIzQzOwomIzQzOwkvKiBIb2xkIHN0YXRzX2xvY2sgdG8gcHJldmVudCBpY3NzZ19zdGF0c193b3JrX2hhbmRsZXIgZnJvbSB1cGRhdGluZwomIzQzOwkgKiBwYV9zdGF0c1tdIGJldHdlZW4gcmVhZHMsIHdoaWNoIGNvdWxkIHlpZWxkIGEgdG9ybiB1NjQgdmFsdWUgb24KJiM0MzsJICogMzItYml0IGFyY2hpdGVjdHVyZXMuCiYjNDM7CSAqLwomIzQzOwlzcGluX2xvY2soJmFtcDtlbWFjLSZndDtwcnVldGgtJmd0O3N0YXRzX2xvY2spOwomIzQzOwkvKiBNQUNNZXJnZUhvbGRDb3VudCBzdGF0cyBpcyBub3QgdHJhY2tlZCBieSB0aGUgZmlybXdhcmUgKi8KJiM0MzsJcy0mZ3Q7TUFDTWVyZ2VGcmFtZUFzc09rQ291bnQgPSBlbWFjX2dldF9zdGF0X2J5X25hbWUoZW1hYywgJiMzNDtGV19QUkVFTVBUX0FTU0VNQkxZX09LJiMzNDspOwomIzQzOwlzLSZndDtNQUNNZXJnZUZyYW1lQXNzRXJyb3JDb3VudCA9IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShlbWFjLCAmIzM0O0ZXX1BSRUVNUFRfQVNTRU1CTFlfRVJSJiMzNDspOwomIzQzOwlzLSZndDtNQUNNZXJnZUZyYWdDb3VudFJ4ID0gZW1hY19nZXRfc3RhdF9ieV9uYW1lKGVtYWMsICYjMzQ7RldfUFJFRU1QVF9GUkFHX0NOVF9SWCYjMzQ7KTsKJiM0MzsJcy0mZ3Q7TUFDTWVyZ2VGcmFnQ291bnRUeCA9IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShlbWFjLCAmIzM0O0ZXX1BSRUVNUFRfRlJBR19DTlRfVFgmIzM0Oyk7CiYjNDM7CXMtJmd0O01BQ01lcmdlRnJhbWVTbWRFcnJvckNvdW50ID0gZW1hY19nZXRfc3RhdF9ieV9uYW1lKGVtYWMsICYjMzQ7RldfUFJFRU1QVF9CQURfRlJBRyYjMzQ7KTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtlbWFjLSZndDtwcnVldGgtJmd0O3N0YXRzX2xvY2spOwomIzQzO30KJiM0MzsKIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpY3NzZ19ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8gPSBlbWFjX2dldF9kcnZpbmZvLAogCS5nZXRfbXNnbGV2ZWwgPSBlbWFjX2dldF9tc2dsZXZlbCwKQEAgLTMxNyw1ICYjNDM7NDQwLDggQEAgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGljc3NnX2V0aHRvb2xfb3BzID0gewogCS5zZXRfZWVlID0gZW1hY19zZXRfZWVlLAogCS5ud2F5X3Jlc2V0ID0gZW1hY19ud2F5X3Jlc2V0LAogCS5nZXRfcm1vbl9zdGF0cyA9IGVtYWNfZ2V0X3Jtb25fc3RhdHMsCiYjNDM7CS5nZXRfbW0gPSBlbWFjX2dldF9tbSwKJiM0MzsJLnNldF9tbSA9IGVtYWNfc2V0X21tLAomIzQzOwkuZ2V0X21tX3N0YXRzID0gZW1hY19nZXRfbW1fc3RhdHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoaWNzc2dfZXRodG9vbF9vcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguYwppbmRleCA1OTFiZTVjODA1NmI0Li4yODNiZTI3YTI0MGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguYwpAQCAtMzU3LDExICYjNDM7MzU3LDExIEBAIHN0YXRpYyB2b2lkIGVtYWNfYWRqdXN0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAJCX0KIAkJaWYgKCFlbWFjLSZndDtsaW5rKSB7CiAJCQluZXdfc3RhdGUgPSB0cnVlOwotCQkJZW1hYy0mZ3Q7bGluayA9IDE7CiYjNDM7CQkJV1JJVEVfT05DRShlbWFjLSZndDtsaW5rLCAxKTsKIAkJfQogCX0gZWxzZSBpZiAoZW1hYy0mZ3Q7bGluaykgewogCQluZXdfc3RhdGUgPSB0cnVlOwotCQllbWFjLSZndDtsaW5rID0gMDsKJiM0MzsJCVdSSVRFX09OQ0UoZW1hYy0mZ3Q7bGluaywgMCk7CiAKIAkJLyogZi93IHNob3VsZCBzdXBwb3J0IDEwMCAmYW1wOyAxMDAwICovCiAJCWVtYWMtJmd0O3NwZWVkID0gU1BFRURfMTAwMDsKQEAgLTM5Miw2ICYjNDM7MzkyLDggQEAgc3RhdGljIHZvaWQgZW1hY19hZGp1c3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIAkJfSBlbHNlIHsKIAkJCWljc3NnX3NldF9wb3J0X3N0YXRlKGVtYWMsIElDU1NHX0VNQUNfUE9SVF9ESVNBQkxFKTsKIAkJfQomIzQzOwomIzQzOwkJaWNzc2dfcW9zX2xpbmtfc3RhdGVfdXBkYXRlKG5kZXYpOwogCX0KIAogCWlmIChlbWFjLSZndDtsaW5rKSB7CkBAIC0xNjUyLDYgJiM0MzsxNjU0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlbWFjX25ldGRldl9vcHMgPSB7CiAJLm5kb19od3RzdGFtcF9nZXQgPSBpY3NzZ19uZG9fZ2V0X3RzX2NvbmZpZywKIAkubmRvX2h3dHN0YW1wX3NldCA9IGljc3NnX25kb19zZXRfdHNfY29uZmlnLAogCS5uZG9feHNrX3dha2V1cCA9IHBydWV0aF94c2tfd2FrZXVwLAomIzQzOwkubmRvX3NldHVwX3RjID0gaWNzc2dfcW9zX25kb19zZXR1cF90YywKIH07CiAKIHN0YXRpYyBpbnQgcHJ1ZXRoX25ldGRldl9pbml0KHN0cnVjdCBwcnVldGggKnBydWV0aCwKQEAgLTE2ODYsNiAmIzQzOzE2ODksOCBAQCBzdGF0aWMgaW50IHBydWV0aF9uZXRkZXZfaW5pdChzdHJ1Y3QgcHJ1ZXRoICpwcnVldGgsCiAKIAlJTklUX0RFTEFZRURfV09SSygmYW1wO2VtYWMtJmd0O3N0YXRzX3dvcmssIGljc3NnX3N0YXRzX3dvcmtfaGFuZGxlcik7CiAKJiM0MzsJaWNzc2dfcW9zX2luaXQobmRldik7CiYjNDM7CiAJcmV0ID0gcHJ1c3NfcmVxdWVzdF9tZW1fcmVnaW9uKHBydWV0aC0mZ3Q7cHJ1c3MsCiAJCQkJICAgICAgIHBvcnQgPT0gUFJVRVRIX1BPUlRfTUlJMCA/CiAJCQkJICAgICAgIFBSVVNTX01FTV9EUkFNMCA6IFBSVVNTX01FTV9EUkFNMSwKQEAgLTE3OTMsNiAmIzQzOzE3OTgsNyBAQCBzdGF0aWMgaW50IHBydWV0aF9uZXRkZXZfaW5pdChzdHJ1Y3QgcHJ1ZXRoICpwcnVldGgsCiBmcmVlOgogCXBydXNzX3JlbGVhc2VfbWVtX3JlZ2lvbihwcnVldGgtJmd0O3BydXNzLCAmYW1wO2VtYWMtJmd0O2RyYW0pOwogZnJlZV9uZGV2OgomIzQzOwltdXRleF9kZXN0cm95KCZhbXA7ZW1hYy0mZ3Q7cW9zLmlldC5mcGVfbG9jayk7CiAJZW1hYy0mZ3Q7bmRldiA9IE5VTEw7CiAJcHJ1ZXRoLSZndDtlbWFjW21hY10gPSBOVUxMOwogCWZyZWVfbmV0ZGV2KG5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguaAppbmRleCBkZjkzZDE1YzViNzg2Li5hZDkwNjE0MDgwNTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguaApAQCAtNDQsMTAgJiM0Mzs0NCwxMiBAQAogI2luY2x1ZGUgJiMzNDtpY3NzZ19jb25maWcuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2ljc3NfaWVwLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtpY3NzZ19zd2l0Y2hfbWFwLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7aWNzc2dfcW9zLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7aWNzc2dfc3RhdHMuaCYjMzQ7CiAKLSNkZWZpbmUgUFJVRVRIX01BWF9NVFUgICAgICAgICAgKDIwMDAgLSBFVEhfSExFTiAtIEVUSF9GQ1NfTEVOKQotI2RlZmluZSBQUlVFVEhfTUlOX1BLVF9TSVpFICAgICAoVkxBTl9FVEhfWkxFTikKLSNkZWZpbmUgUFJVRVRIX01BWF9QS1RfU0laRSAgICAgKFBSVUVUSF9NQVhfTVRVICYjNDM7IEVUSF9ITEVOICYjNDM7IEVUSF9GQ1NfTEVOKQomIzQzOyNkZWZpbmUgUFJVRVRIX01BWF9NVFUJCSgyMDAwIC0gRVRIX0hMRU4gLSBFVEhfRkNTX0xFTikKJiM0MzsjZGVmaW5lIFBSVUVUSF9NSU5fUEtUX1NJWkUJKFZMQU5fRVRIX1pMRU4pCiYjNDM7I2RlZmluZSBQUlVFVEhfTUFYX1BLVF9TSVpFCShQUlVFVEhfTUFYX01UVSAmIzQzOyBFVEhfSExFTiAmIzQzOyBFVEhfRkNTX0xFTikKIAogI2RlZmluZSBJQ1NTX1NMSUNFMAkwCiAjZGVmaW5lIElDU1NfU0xJQ0UxCTEKQEAgLTU3LDEyICYjNDM7NTksMTYgQEAKIAogI2RlZmluZSBJQ1NTR19NQVhfUkZMT1dTCTgJLyogcGVyIHNsaWNlICovCiAKLSNkZWZpbmUgSUNTU0dfTlVNX1BBX1NUQVRTCTMyCi0jZGVmaW5lIElDU1NHX05VTV9NSUlHX1NUQVRTCTYwCiYjNDM7I2RlZmluZSBJQ1NTR19OVU1fUEFfU1RBVFMJQVJSQVlfU0laRShpY3NzZ19hbGxfcGFfc3RhdHMpCiYjNDM7I2RlZmluZSBJQ1NTR19OVU1fTUlJR19TVEFUUwlBUlJBWV9TSVpFKGljc3NnX2FsbF9taWlnX3N0YXRzKQogLyogTnVtYmVyIG9mIElDU1NHIHJlbGF0ZWQgc3RhdHMgKi8KICNkZWZpbmUgSUNTU0dfTlVNX1NUQVRTIChJQ1NTR19OVU1fTUlJR19TVEFUUyAmIzQzOyBJQ1NTR19OVU1fUEFfU1RBVFMpCiYjNDM7LyogTUlJRyBzdGF0cyB3aXRoIHN0YW5kYXJkIHVBUEkgZXF1aXZhbGVudHMgKGV4Y2x1ZGVkIGZyb20gZXRodG9vbCAtUykgKi8KICNkZWZpbmUgSUNTU0dfTlVNX1NUQU5EQVJEX1NUQVRTIDMxCi0jZGVmaW5lIElDU1NHX05VTV9FVEhUT09MX1NUQVRTIChJQ1NTR19OVU1fU1RBVFMgLSBJQ1NTR19OVU1fU1RBTkRBUkRfU1RBVFMpCiYjNDM7LyogUEEgc3RhdHMgd2l0aCBzdGFuZGFyZCB1QVBJIGVxdWl2YWxlbnRzLCBleHBvc2VkIHZpYSBnZXRfbW1fc3RhdHMgb25seSAqLwomIzQzOyNkZWZpbmUgSUNTU0dfTlVNX1BBX1NUQU5EQVJEX1NUQVRTIDUKJiM0MzsjZGVmaW5lIElDU1NHX05VTV9FVEhUT09MX1NUQVRTIChJQ1NTR19OVU1fU1RBVFMgLSBJQ1NTR19OVU1fU1RBTkRBUkRfU1RBVFMgLSBcCiYjNDM7CQkJCSBJQ1NTR19OVU1fUEFfU1RBTkRBUkRfU1RBVFMpCiAKICNkZWZpbmUgSUVQX0RFRkFVTFRfQ1lDTEVfVElNRV9OUwkxMDAwMDAwCS8qIDEgbXMgKi8KIApAQCAtMjU0LDYgJiM0MzsyNjAsNyBAQCBzdHJ1Y3QgcHJ1ZXRoX2VtYWMgewogCXN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2c7CiAJc3RydWN0IHhkcF9hdHRhY2htZW50X2luZm8geGRwaTsKIAlpbnQgeHNrX3FpZDsKJiM0MzsJc3RydWN0IHBydWV0aF9xb3MgcW9zOwogfTsKIAogLyogVGhlIGJ1ZiBpbmNsdWRlcyBoZWFkcm9vbSBjb21wYXRpYmxlIHdpdGggYm90aCBza2IgYW5kIHhkcGYgKi8KQEAgLTQ1OCw3ICYjNDM7NDY1LDcgQEAgaW50IGVtYWNfZmRiX2Zsb3dfaWRfdXBkYXRlZChzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMpOwogCiB2b2lkIGljc3NnX3N0YXRzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogdm9pZCBlbWFjX3VwZGF0ZV9oYXJkd2FyZV9zdGF0cyhzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMpOwotaW50IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMsIGNoYXIgKnN0YXRfbmFtZSk7CiYjNDM7dTY0IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMsIGNoYXIgKnN0YXRfbmFtZSk7CiAKIC8qIENvbW1vbiBmdW5jdGlvbnMgKi8KIHZvaWQgcHJ1ZXRoX2NsZWFudXBfcnhfY2hucyhzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3Fvcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjI3YTk1M2Q5ODE1MzgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19xb3MuYwpAQCAtMCwwICYjNDM7MSwzMDUgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIFRleGFzIEluc3RydW1lbnRzIElDU1NHIFBSVUVUSCBRb1Mgc3VibW9kdWxlCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDIzIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLwomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7aWNzc2dfcHJ1ZXRoLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7aWNzc2dfc3dpdGNoX21hcC5oJiMzNDsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpY3NzZ19pZXRfc2V0X3ByZWVtcHRfbWFzayhzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMpCiYjNDM7ewomIzQzOwl2b2lkIF9faW9tZW0gKmNvbmZpZyA9IGVtYWMtJmd0O2RyYW0udmEgJiM0MzsgSUNTU0dfQ09ORklHX09GRlNFVDsKJiM0MzsJc3RydWN0IHBydWV0aF9xb3NfbXFwcmlvICpwX21xcHJpbyA9ICZhbXA7ZW1hYy0mZ3Q7cW9zLm1xcHJpbzsKJiM0MzsJc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gJmFtcDtwX21xcHJpby0mZ3Q7cW9wdDsKJiM0MzsJc3RydWN0IHBydWV0aF9xb3NfaWV0ICppZXQgPSAmYW1wO2VtYWMtJmd0O3Fvcy5pZXQ7CiYjNDM7CWludCBwcmVtcHRfbWFzayA9IDAsIGk7CiYjNDM7CXU4IHRjLCBudW1fdGM7CiYjNDM7CiYjNDM7CWlmICghaWV0LSZndDtwcmVlbXB0aWJsZV90Y3MpCiYjNDM7CQlnb3RvIHJlc2V0X2h3OwomIzQzOwomIzQzOwlpZiAoaWV0LSZndDtmcGVfYWN0aXZlKSB7CiYjNDM7CQkvKiBSZXNldCBhbGwgUV9NQVAgZW50cmllcyBmaXJzdCB0byBjbGVhciBhbnkgc3RhbGUgcHJlZW1wdGlibGUKJiM0MzsJCSAqIGVudHJpZXMgZnJvbSBhIHByaW9yIHdpZGVyIFRDIG1hcHBpbmcuCiYjNDM7CQkgKi8KJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBJQ1NTR19NQVhfVENfUVVFVUVTOyBpJiM0MzsmIzQzOykKJiM0MzsJCQl3cml0ZWIoMCwgY29uZmlnICYjNDM7IEVYUFJFU1NfUFJFX0VNUFRJVkVfUV9NQVAgJiM0MzsgaSk7CiYjNDM7CiYjNDM7CQkvKiBDb25maWd1cmUgcXVldWVzIGZvciB1c2VyIHJlcXVlc3RlZCBwcmVlbXB0aWJsZSB0YyBtYXAgKi8KJiM0MzsJCW51bV90YyA9IHBfbXFwcmlvLSZndDtxb3B0Lm51bV90YzsKJiM0MzsJCWZvciAodGMgPSAwOyB0YyAmbHQ7IG51bV90YzsgdGMmIzQzOyYjNDM7KSB7CiYjNDM7CQkJLyogY2hlY2sgaWYgdGhlIHRjIGlzIHByZWVtcHRpdmUgb3Igbm90ICovCiYjNDM7CQkJaWYgKGlldC0mZ3Q7cHJlZW1wdGlibGVfdGNzICZhbXA7IEJJVCh0YykpIHsKJiM0MzsJCQkJLyogU2V0IHRoZSBxdWV1ZXMgYXMgcHJlZW1wdGl2ZSBxdWV1ZXMgKi8KJiM0MzsJCQkJZm9yIChpID0gcW9wdC0mZ3Q7b2Zmc2V0W3RjXTsgaSAmbHQ7IHFvcHQtJmd0O29mZnNldFt0Y10gJiM0MzsgcW9wdC0mZ3Q7Y291bnRbdGNdOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCQkJd3JpdGViKEJJVCg0KSwKJiM0MzsJCQkJCSAgICAgICBjb25maWcgJiM0MzsgRVhQUkVTU19QUkVfRU1QVElWRV9RX01BUCAmIzQzOyBpKTsKJiM0MzsJCQkJfQomIzQzOwkJCX0gZWxzZSB7CiYjNDM7CQkJCS8qIEFjY3VtdWxhdGUgZXhwcmVzcyBxdWV1ZSBiaXRzIGZvciB0aGUgbWFzayAqLwomIzQzOwkJCQlmb3IgKGkgPSBxb3B0LSZndDtvZmZzZXRbdGNdOyBpICZsdDsgcW9wdC0mZ3Q7b2Zmc2V0W3RjXSAmIzQzOyBxb3B0LSZndDtjb3VudFt0Y107IGkmIzQzOyYjNDM7KQomIzQzOwkJCQkJcHJlbXB0X21hc2sgfD0gQklUKGkpOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJCXdyaXRlYihwcmVtcHRfbWFzaywgY29uZmlnICYjNDM7IEVYUFJFU1NfUFJFX0VNUFRJVkVfUV9NQVNLKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzO3Jlc2V0X2h3OgomIzQzOwkvKiBSZXNldCB0byBkZWZhdWx0OiBhbGwgcXVldWVzIGFzIGV4cHJlc3MgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IElDU1NHX01BWF9UQ19RVUVVRVM7IGkmIzQzOyYjNDM7KQomIzQzOwkJd3JpdGViKDAsIGNvbmZpZyAmIzQzOyBFWFBSRVNTX1BSRV9FTVBUSVZFX1FfTUFQICYjNDM7IGkpOwomIzQzOwl3cml0ZWIoSUNTU0dfRVhQUkVTU19RX01BU0tfQUxMLCBjb25maWcgJiM0MzsgRVhQUkVTU19QUkVfRU1QVElWRV9RX01BU0spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGljc3NnX2lldF92ZXJpZnlfd2FpdChzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMpCiYjNDM7ewomIzQzOwl2b2lkIF9faW9tZW0gKmNvbmZpZyA9IGVtYWMtJmd0O2RyYW0udmEgJiM0MzsgSUNTU0dfQ09ORklHX09GRlNFVDsKJiM0MzsJc3RydWN0IHBydWV0aF9xb3NfaWV0ICppZXQgPSAmYW1wO2VtYWMtJmd0O3Fvcy5pZXQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZGVsYXlfdXMsIHRpbWVvdXRfdXM7CiYjNDM7CXUzMiBzdGF0dXM7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWRlbGF5X3VzID0gaWV0LSZndDt2ZXJpZnlfdGltZV9tcyAqIDEwMDA7CiYjNDM7CXRpbWVvdXRfdXMgPSBkZWxheV91cyAqIElDU1NHX0lFVF9WRVJJRllfQVRURU1QVFM7CiYjNDM7CiYjNDM7CXJldCA9IHJlYWRiX3BvbGxfdGltZW91dChjb25maWcgJiM0MzsgUFJFX0VNUFRJT05fVkVSSUZZX1NUQVRVUywKJiM0MzsJCQkJIHN0YXR1cywKJiM0MzsJCQkJIHN0YXR1cyA9PSBJQ1NTR19JRVRGUEVfU1RBVEVfU1VDQ0VFREVEIHx8CiYjNDM7CQkJCSBzdGF0dXMgPT0gSUNTU0dfSUVURlBFX1NUQVRFX0ZBSUxFRCwKJiM0MzsJCQkJIGRlbGF5X3VzLAomIzQzOwkJCQkgdGltZW91dF91cyk7CiYjNDM7CiYjNDM7CWlldC0mZ3Q7dmVyaWZ5X3N0YXR1cyA9IHN0YXR1czsKJiM0MzsJaWYgKCFyZXQgJmFtcDsmYW1wOyBzdGF0dXMgPT0gSUNTU0dfSUVURlBFX1NUQVRFX0ZBSUxFRCkKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKiBEaXJlY3Qgc3luY2hyb25vdXMgY29uZmlndXJhdGlvbiBvZiBJRVQgRlBFLgomIzQzOyAqIENhbGxlciBtdXN0IGhvbGQgaWV0LSZndDtmcGVfbG9jay4KJiM0MzsgKi8KJiM0MztpbnQgaWNzc2dfY29uZmlnX2lldGZwZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgYm9vbCBlbmFibGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsJdm9pZCBfX2lvbWVtICpjb25maWcgPSBlbWFjLSZndDtkcmFtLnZhICYjNDM7IElDU1NHX0NPTkZJR19PRkZTRVQ7CiYjNDM7CXN0cnVjdCBwcnVldGhfcW9zX2lldCAqaWV0ID0gJmFtcDtlbWFjLSZndDtxb3MuaWV0OwomIzQzOwlpbnQgcmV0OwomIzQzOwl1OCB2YWw7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtpZXQtJmd0O2ZwZV9sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKCFSRUFEX09OQ0UoZW1hYy0mZ3Q7bGluaykpIHsKJiM0MzsJCW5ldGRldl9kYmcobmRldiwgJiMzNDtjYW5ub3QgY2hhbmdlIElFVC9GUEUgc3RhdGUgd2hlbiBpbnRlcmZhY2UgaXMgZG93blxuJiMzNDspOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogVXBkYXRlIEZQRSBUeCBlbmFibGUgYml0IChQUkVfRU1QVElPTl9FTkFCTEVfVFgpIGlmCiYjNDM7CSAqIGZwZV9lbmFibGVkIGlzIHNldCB0byBlbmFibGUgTU0gaW4gVHggZGlyZWN0aW9uCiYjNDM7CSAqLwomIzQzOwl3cml0ZWIoZW5hYmxlID8gMSA6IDAsIGNvbmZpZyAmIzQzOyBQUkVfRU1QVElPTl9FTkFCTEVfVFgpOwomIzQzOwl3cml0ZXcoaWV0LSZndDt0eF9taW5fZnJhZ19zaXplICYjNDM7IEVUSF9GQ1NfTEVOLAomIzQzOwkgICAgICAgY29uZmlnICYjNDM7IFBSRV9FTVBUSU9OX0FERF9GUkFHX1NJWkVfTE9DQUwpOwomIzQzOwomIzQzOwkvKiBJZiBGUEUgaXMgdG8gYmUgZW5hYmxlZCwgZmlyc3QgY29uZmlndXJlIE1BQyBWZXJpZnkgc3RhdGUKJiM0MzsJICogbWFjaGluZSBpbiBmaXJtd2FyZSBhcyBmaXJtd2FyZSBraWNrcyB0aGUgVmVyaWZ5IHByb2Nlc3MKJiM0MzsJICogYXMgc29vbiBhcyBJQ1NTR19FTUFDX1BPUlRfUFJFTVBUX1RYX0VOQUJMRSBjb21tYW5kIGlzCiYjNDM7CSAqIHJlY2VpdmVkLgomIzQzOwkgKi8KJiM0MzsJaWYgKGVuYWJsZSAmYW1wOyZhbXA7IGlldC0mZ3Q7bWFjX3ZlcmlmeV9jb25maWd1cmUpIHsKJiM0MzsJCXdyaXRlYigxLCBjb25maWcgJiM0MzsgUFJFX0VNUFRJT05fRU5BQkxFX1ZFUklGWSk7CiYjNDM7CQl3cml0ZWwoaWV0LSZndDt2ZXJpZnlfdGltZV9tcywgY29uZmlnICYjNDM7IFBSRV9FTVBUSU9OX1ZFUklGWV9USU1FKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXdyaXRlYigwLCBjb25maWcgJiM0MzsgUFJFX0VNUFRJT05fRU5BQkxFX1ZFUklGWSk7CiYjNDM7CQlpZXQtJmd0O3ZlcmlmeV9zdGF0dXMgPSBJQ1NTR19JRVRGUEVfU1RBVEVfRElTQUJMRUQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogU2VuZCBjb21tYW5kIHRvIGVuYWJsZSBGUEUgVHggc2lkZS4gUnggaXMgYWx3YXlzIGVuYWJsZWQgKi8KJiM0MzsJcmV0ID0gaWNzc2dfc2V0X3BvcnRfc3RhdGUoZW1hYywKJiM0MzsJCQkJICAgZW5hYmxlID8gSUNTU0dfRU1BQ19QT1JUX1BSRU1QVF9UWF9FTkFCTEUgOgomIzQzOwkJCQkJICAgIElDU1NHX0VNQUNfUE9SVF9QUkVNUFRfVFhfRElTQUJMRSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCW5ldGRldl9lcnIobmRldiwgJiMzNDtUWCBwcmVlbXB0ICVzIGNvbW1hbmQgZmFpbGVkXG4mIzM0OywKJiM0MzsJCQkgICBzdHJfZW5hYmxlX2Rpc2FibGUoZW5hYmxlKSk7CiYjNDM7CQlnb3RvIGZhbGxiYWNrOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChlbmFibGUgJmFtcDsmYW1wOyBpZXQtJmd0O21hY192ZXJpZnlfY29uZmlndXJlKSB7CiYjNDM7CQlyZXQgPSBpY3NzZ19pZXRfdmVyaWZ5X3dhaXQoZW1hYyk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJbmV0ZGV2X2VycihuZGV2LCAmIzM0O01BQyBNZXJnZSB2ZXJpZmljYXRpb24gZmFpbGVkOiAlc1xuJiMzNDssCiYjNDM7CQkJCSAgIGlldC0mZ3Q7dmVyaWZ5X3N0YXR1cyA9PSBJQ1NTR19JRVRGUEVfU1RBVEVfRkFJTEVEID8KJiM0MzsJCQkJICAgJiMzNDtsaW5rIHBhcnRuZXIgcmVqZWN0ZWQmIzM0OyA6ICYjMzQ7dGltZW91dCYjMzQ7KTsKJiM0MzsJCQlnb3RvIGRpc2FibGVfdHg7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSBpZiAoZW5hYmxlKSB7CiYjNDM7CQkvKiBHaXZlIGZpcm13YXJlIHNvbWUgdGltZSB0byB1cGRhdGUKJiM0MzsJCSAqIFBSRV9FTVBUSU9OX0FDVElWRV9UWCBzdGF0ZQomIzQzOwkJICovCiYjNDM7CQl1c2xlZXBfcmFuZ2UoMTAwLCAyMDApOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChlbmFibGUpIHsKJiM0MzsJCXZhbCA9IHJlYWRiKGNvbmZpZyAmIzQzOyBQUkVfRU1QVElPTl9BQ1RJVkVfVFgpOwomIzQzOwkJaWYgKHZhbCAhPSAxKSB7CiYjNDM7CQkJbmV0ZGV2X2VycihuZGV2LAomIzQzOwkJCQkgICAmIzM0O0Zpcm13YXJlIGZhaWxzIHRvIGFjdGl2YXRlIElFVC9GUEVcbiYjMzQ7KTsKJiM0MzsJCQlyZXQgPSAtRUlPOwomIzQzOwkJCWdvdG8gZGlzYWJsZV90eDsKJiM0MzsJCX0KJiM0MzsJCWlldC0mZ3Q7ZnBlX2FjdGl2ZSA9IHRydWU7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpZXQtJmd0O2ZwZV9hY3RpdmUgPSBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpY3NzZ19pZXRfc2V0X3ByZWVtcHRfbWFzayhlbWFjKTsKJiM0MzsJbmV0ZGV2X2RiZyhuZGV2LCAmIzM0O0lFVCBGUEUgJXMgc3VjY2Vzc2Z1bGx5XG4mIzM0OywKJiM0MzsJCSAgIHN0cl9lbmFibGVfZGlzYWJsZShlbmFibGUpKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZGlzYWJsZV90eDoKJiM0MzsJaWNzc2dfc2V0X3BvcnRfc3RhdGUoZW1hYywgSUNTU0dfRU1BQ19QT1JUX1BSRU1QVF9UWF9ESVNBQkxFKTsKJiM0MztmYWxsYmFjazoKJiM0MzsJd3JpdGViKDAsIGNvbmZpZyAmIzQzOyBQUkVfRU1QVElPTl9FTkFCTEVfVFgpOwomIzQzOwl3cml0ZWIoMCwgY29uZmlnICYjNDM7IFBSRV9FTVBUSU9OX0VOQUJMRV9WRVJJRlkpOwomIzQzOwlpZXQtJmd0O3ZlcmlmeV9zdGF0dXMgPSBJQ1NTR19JRVRGUEVfU1RBVEVfRElTQUJMRUQ7CiYjNDM7CWlldC0mZ3Q7ZnBlX2FjdGl2ZSA9IGZhbHNlOwomIzQzOwlpY3NzZ19pZXRfc2V0X3ByZWVtcHRfbWFzayhlbWFjKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBpY3NzZ19xb3NfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYyA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwlzdHJ1Y3QgcHJ1ZXRoX3Fvc19pZXQgKmlldCA9ICZhbXA7ZW1hYy0mZ3Q7cW9zLmlldDsKJiM0MzsKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO2lldC0mZ3Q7ZnBlX2xvY2spOwomIzQzOwkvKiBTZXQgZGVmYXVsdCB2YWx1ZXMgdG8gcHJldmVudCBnYXJiYWdlIHZhbHVlcyBkdXJpbmcgLmdldF9tbSgpICovCiYjNDM7CWlldC0mZ3Q7dmVyaWZ5X3RpbWVfbXMgPSBJQ1NTR19JRVRfTUFYX1ZFUklGWV9USU1FOwomIzQzOwlpZXQtJmd0O3R4X21pbl9mcmFnX3NpemUgPSBFVEhfWkxFTjsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoaWNzc2dfcW9zX2luaXQpOwomIzQzOwomIzQzO3N0YXRpYyBpbnQgaWNzc2dfaWV0X2NoYW5nZV9wcmVlbXB0aWJsZV90Y3Moc3RydWN0IHBydWV0aF9lbWFjICplbWFjKQomIzQzO3sKJiM0MzsJc3RydWN0IHBydWV0aF9xb3NfaWV0ICppZXQgPSAmYW1wO2VtYWMtJmd0O3Fvcy5pZXQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtpZXQtJmd0O2ZwZV9sb2NrKTsKJiM0MzsJaWYgKCFpZXQtJmd0O2ZwZV9lbmFibGVkICZhbXA7JmFtcDsgIWlldC0mZ3Q7cHJlZW1wdGlibGVfdGNzKSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtpZXQtJmd0O2ZwZV9sb2NrKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CXJldCA9IGljc3NnX2NvbmZpZ19pZXRmcGUoZW1hYy0mZ3Q7bmRldiwgaWV0LSZndDtmcGVfZW5hYmxlZCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2lldC0mZ3Q7ZnBlX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVtYWNfdGNfcXVlcnlfY2FwcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdm9pZCAqdHlwZV9kYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSA9IHR5cGVfZGF0YTsKJiM0MzsKJiM0MzsJc3dpdGNoIChiYXNlLSZndDt0eXBlKSB7CiYjNDM7CWNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOiB7CiYjNDM7CQlzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHMgPSBiYXNlLSZndDtjYXBzOwomIzQzOwomIzQzOwkJY2Fwcy0mZ3Q7dmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBlbWFjX3RjX3NldHVwX21xcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdm9pZCAqdHlwZV9kYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHBydWV0aF9lbWFjICplbWFjID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CXN0cnVjdCBwcnVldGhfcW9zX21xcHJpbyAqcF9tcXByaW8gPSAmYW1wO2VtYWMtJmd0O3Fvcy5tcXByaW87CiYjNDM7CXN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8gPSB0eXBlX2RhdGE7CiYjNDM7CXN0cnVjdCBwcnVldGhfcW9zX2lldCAqaWV0ID0gJmFtcDtlbWFjLSZndDtxb3MuaWV0OwomIzQzOwlzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSAmYW1wO21xcHJpby0mZ3Q7cW9wdDsKJiM0MzsJaW50IHRjLCBvZmZzZXQsIGNvdW50OwomIzQzOwomIzQzOwkvKiBWYWxpZGF0ZSBwYXJhbWV0ZXJzICovCiYjNDM7CWlmIChxb3B0LSZndDtudW1fdGMgJmd0OyBJQ1NTR19NQVhfVENfUVVFVUVTKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5kZXYsICYjMzQ7TnVtYmVyIG9mIHRyYWZmaWMgY2xhc3NlcyAoJXUpIGV4Y2VlZHMgaGFyZHdhcmUgbGltaXRcbiYjMzQ7LAomIzQzOwkJCSAgIHFvcHQtJmd0O251bV90Yyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfU0hBUEVSKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5kZXYsICYjMzQ7dHJhZmZpYyBzaGFwaW5nIGlzIG5vdCBzdXBwb3J0ZWRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyAoVENfTVFQUklPX0ZfTUlOX1JBVEUgfCBUQ19NUVBSSU9fRl9NQVhfUkFURSkpIHsKJiM0MzsJCW5ldGRldl9lcnIobmRldiwgJiMzNDtwZXItcXVldWUgcmF0ZSBsaW1pdGluZyBpcyBub3Qgc3VwcG9ydGVkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFxb3B0LSZndDtudW1fdGMpIHsKJiM0MzsJCW5ldGRldl9yZXNldF90YyhuZGV2KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCW5ldGRldl9zZXRfbnVtX3RjKG5kZXYsIHFvcHQtJmd0O251bV90Yyk7CiYjNDM7CiYjNDM7CQlmb3IgKHRjID0gMDsgdGMgJmx0OyBxb3B0LSZndDtudW1fdGM7IHRjJiM0MzsmIzQzOykgewomIzQzOwkJCWNvdW50ID0gcW9wdC0mZ3Q7Y291bnRbdGNdOwomIzQzOwkJCW9mZnNldCA9IHFvcHQtJmd0O29mZnNldFt0Y107CiYjNDM7CQkJbmV0ZGV2X3NldF90Y19xdWV1ZShuZGV2LCB0YywgY291bnQsIG9mZnNldCk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2lldC0mZ3Q7ZnBlX2xvY2spOwomIzQzOwlpZiAoIXFvcHQtJmd0O251bV90YykgewomIzQzOwkJaWV0LSZndDtwcmVlbXB0aWJsZV90Y3MgPSAwOwomIzQzOwl9IGVsc2UgewomIzQzOwkJbWVtY3B5KCZhbXA7cF9tcXByaW8tJmd0O3FvcHQsIHFvcHQsIHNpemVvZigqcW9wdCkpOwomIzQzOwkJaWV0LSZndDtwcmVlbXB0aWJsZV90Y3MgPSBtcXByaW8tJmd0O3ByZWVtcHRpYmxlX3RjczsKJiM0MzsJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDtpZXQtJmd0O2ZwZV9sb2NrKTsKJiM0MzsKJiM0MzsJbmV0ZGV2X2RiZyhuZGV2LCAmIzM0O2Rldi0mZ3Q7bnVtX3RjICV1IGRldi0mZ3Q7cmVhbF9udW1fdHhfcXVldWVzICV1XG4mIzM0OywKJiM0MzsJCSAgIG5kZXYtJmd0O251bV90YywgbmRldi0mZ3Q7cmVhbF9udW1fdHhfcXVldWVzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGljc3NnX2lldF9jaGFuZ2VfcHJlZW1wdGlibGVfdGNzKGVtYWMpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgaWNzc2dfcW9zX25kb19zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsCiYjNDM7CQkJICAgdm9pZCAqdHlwZV9kYXRhKQomIzQzO3sKJiM0MzsJc3dpdGNoICh0eXBlKSB7CiYjNDM7CWNhc2UgVENfUVVFUllfQ0FQUzoKJiM0MzsJCXJldHVybiBlbWFjX3RjX3F1ZXJ5X2NhcHMobmRldiwgdHlwZV9kYXRhKTsKJiM0MzsJY2FzZSBUQ19TRVRVUF9RRElTQ19NUVBSSU86CiYjNDM7CQlyZXR1cm4gZW1hY190Y19zZXR1cF9tcXByaW8obmRldiwgdHlwZV9kYXRhKTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChpY3NzZ19xb3NfbmRvX3NldHVwX3RjKTsKJiM0MzsKJiM0Mzt2b2lkIGljc3NnX3Fvc19saW5rX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYyA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwlzdHJ1Y3QgcHJ1ZXRoX3Fvc19pZXQgKmlldCA9ICZhbXA7ZW1hYy0mZ3Q7cW9zLmlldDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFSRUFEX09OQ0UoZW1hYy0mZ3Q7bGluaykpIHsKJiM0MzsJCS8qIENsZWFyIEZQRSBhY3RpdmUgc3RhdGUgb24gbGluay1kb3duIHNvIGdldF9tbSgpIHJlcG9ydHMKJiM0MzsJCSAqIGFjY3VyYXRlIHR4X2FjdGl2ZSBhbmQgdmVyaWZ5X3N0YXR1cyB3aGlsZSBsaW5rIGlzIGRvd24uCiYjNDM7CQkgKi8KJiM0MzsJCW11dGV4X2xvY2soJmFtcDtpZXQtJmd0O2ZwZV9sb2NrKTsKJiM0MzsJCWlldC0mZ3Q7ZnBlX2FjdGl2ZSA9IGZhbHNlOwomIzQzOwkJaWV0LSZndDt2ZXJpZnlfc3RhdHVzID0gSUNTU0dfSUVURlBFX1NUQVRFX0RJU0FCTEVEOwomIzQzOwkJaWNzc2dfaWV0X3NldF9wcmVlbXB0X21hc2soZW1hYyk7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtpZXQtJmd0O2ZwZV9sb2NrKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBpY3NzZ19pZXRfY2hhbmdlX3ByZWVtcHRpYmxlX3RjcyhlbWFjKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCW5ldGRldl9kYmcobmRldiwgJiMzNDtJRVQgRlBFICVzIGZhaWxlZFxuJiMzNDssCiYjNDM7CQkJICAgc3RyX2VuYWJsZV9kaXNhYmxlKGlldC0mZ3Q7ZnBlX2VuYWJsZWQpKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoaWNzc2dfcW9zX2xpbmtfc3RhdGVfdXBkYXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3Fvcy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uZTgyNmNlNGJjZmQ5NgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3Fvcy5oCkBAIC0wLDAgJiM0MzsxLDY4IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsvKiBDb3B5cmlnaHQgKEMpIDIwMjMgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfX05FVF9USV9JQ1NTR19RT1NfSAomIzQzOyNkZWZpbmUgX19ORVRfVElfSUNTU0dfUU9TX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYXRvbWljLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25ldGRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvcGt0X3NjaGVkLmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBJQ1NTR19NQVhfVENfUVVFVUVTCQkJOAomIzQzOyNkZWZpbmUgSUNTU0dfRVhQUkVTU19RX01BU0tfQUxMCQkweEZGCiYjNDM7I2RlZmluZSBJQ1NTR19JRVRfTUFYX1ZFUklGWV9USU1FCQkxMjgKJiM0MzsjZGVmaW5lIElDU1NHX0lFVF9NSU5fVkVSSUZZX1RJTUUJCTEKJiM0MzsjZGVmaW5lIElDU1NHX0lFVF9WRVJJRllfQVRURU1QVFMJCTMKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBlbnVtIGljc3NnX2lldGZwZV92ZXJpZnlfc3RhdGVzIC0gc3RhdHVzIG9mIE1NIFZlcmlmeSByZXR1cm5lZCBieSBmaXJtd2FyZQomIzQzOyAqIEBJQ1NTR19JRVRGUEVfU1RBVEVfVU5LTk9XTjoKJiM0MzsgKgl2ZXJpZmljYXRpb24gc3RhdHVzIGlzIHVua25vd24KJiM0MzsgKiBASUNTU0dfSUVURlBFX1NUQVRFX0lOSVRJQUw6CiYjNDM7ICoJRmlybXdhcmUgcmV0dXJucyB0aGlzIGlmIHZlcmlmeSBzdGF0ZSBkaWFncmFtIGlzIGlkbGUKJiM0MzsgKiBASUNTU0dfSUVURlBFX1NUQVRFX1ZFUklGWUlORzoKJiM0MzsgKglGaXJtd2FyZSByZXR1cm5zIHRoaXMgaWYgdmVyaWZpY2F0aW9uIGlzIG9uZ29pbmcKJiM0MzsgKiBASUNTU0dfSUVURlBFX1NUQVRFX1NVQ0NFRURFRDoKJiM0MzsgKglGaXJtd2FyZSByZXR1cm5zIHRoaXMgaWYgdmVyaWZ5IHN0YXRlIGRpYWdyYW0gY29tcGxldGVzIHZlcmlmaWNhdGlvbgomIzQzOyAqIEBJQ1NTR19JRVRGUEVfU1RBVEVfRkFJTEVEOgomIzQzOyAqCUZpcm13YXJlIHJldHVybnMgdGhpcyBpZiB2ZXJpZnkgc3RhdGUgZGlhZ3JhbSBmYWlscyBkdXJpbmcgdmVyaWZpY2F0aW9uCiYjNDM7ICogQElDU1NHX0lFVEZQRV9TVEFURV9ESVNBQkxFRDoKJiM0MzsgKgl2ZXJpZmljYXRpb24gaXMgZGlzYWJsZWQgYnkgdGhlIGRyaXZlcgomIzQzOyAqLwomIzQzO2VudW0gaWNzc2dfaWV0ZnBlX3ZlcmlmeV9zdGF0ZXMgewomIzQzOwlJQ1NTR19JRVRGUEVfU1RBVEVfVU5LTk9XTiA9IDAsCiYjNDM7CUlDU1NHX0lFVEZQRV9TVEFURV9JTklUSUFMLAomIzQzOwlJQ1NTR19JRVRGUEVfU1RBVEVfVkVSSUZZSU5HLAomIzQzOwlJQ1NTR19JRVRGUEVfU1RBVEVfU1VDQ0VFREVELAomIzQzOwlJQ1NTR19JRVRGUEVfU1RBVEVfRkFJTEVELAomIzQzOwlJQ1NTR19JRVRGUEVfU1RBVEVfRElTQUJMRUQKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBwcnVldGhfcW9zX21xcHJpbyB7CiYjNDM7CXN0cnVjdCB0Y19tcXByaW9fcW9wdCBxb3B0OwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHBydWV0aF9xb3NfaWV0IHsKJiM0MzsJYm9vbCBmcGVfZW5hYmxlZDsKJiM0MzsJYm9vbCBtYWNfdmVyaWZ5X2NvbmZpZ3VyZTsKJiM0MzsJdTMyIHR4X21pbl9mcmFnX3NpemU7CiYjNDM7CXUzMiB2ZXJpZnlfdGltZV9tczsKJiM0MzsJYm9vbCBmcGVfYWN0aXZlOwomIzQzOwllbnVtIGljc3NnX2lldGZwZV92ZXJpZnlfc3RhdGVzIHZlcmlmeV9zdGF0dXM7CiYjNDM7CS8qIGZwZSBtdXRleCBwcm90ZWN0cyBhbGwgRlBFIG9wZXJhdGlvbnMgZm9yIHN5bmNocm9uaXphdGlvbiAqLwomIzQzOwlzdHJ1Y3QgbXV0ZXggZnBlX2xvY2s7CiYjNDM7CXU4IHByZWVtcHRpYmxlX3RjczsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBwcnVldGhfcW9zIHsKJiM0MzsJc3RydWN0IHBydWV0aF9xb3NfaWV0IGlldDsKJiM0MzsJc3RydWN0IHBydWV0aF9xb3NfbXFwcmlvIG1xcHJpbzsKJiM0Mzt9OwomIzQzOwomIzQzO3ZvaWQgaWNzc2dfcW9zX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOwomIzQzO3ZvaWQgaWNzc2dfcW9zX2xpbmtfc3RhdGVfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKJiM0MztpbnQgaWNzc2dfcW9zX25kb19zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsCiYjNDM7CQkJICAgdm9pZCAqdHlwZV9kYXRhKTsKJiM0MztpbnQgaWNzc2dfY29uZmlnX2lldGZwZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgYm9vbCBlbmFibGUpOwomIzQzOyNlbmRpZiAvKiBfX05FVF9USV9JQ1NTR19RT1NfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfc3RhdHMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3N0YXRzLmMKaW5kZXggNzE1OWJhYTAxNTVjZi4uY2ZkYjZmNWRjNWRhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfc3RhdHMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zdGF0cy5jCkBAIC03NCw3ICYjNDM7NzQsNyBAQCB2b2lkIGljc3NnX3N0YXRzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpY3NzZ19zdGF0c193b3JrX2hhbmRsZXIpOwogCi1pbnQgZW1hY19nZXRfc3RhdF9ieV9uYW1lKHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYywgY2hhciAqc3RhdF9uYW1lKQomIzQzO3U2NCBlbWFjX2dldF9zdGF0X2J5X25hbWUoc3RydWN0IHBydWV0aF9lbWFjICplbWFjLCBjaGFyICpzdGF0X25hbWUpCiB7CiAJaW50IGk7CiAKQEAgLTkxLDUgJiM0Mzs5MSw1IEBAIGludCBlbWFjX2dldF9zdGF0X2J5X25hbWUoc3RydWN0IHBydWV0aF9lbWFjICplbWFjLCBjaGFyICpzdGF0X25hbWUpCiAJfQogCiAJbmV0ZGV2X2VycihlbWFjLSZndDtuZGV2LCAmIzM0O0ludmFsaWQgc3RhdHMgJXNcbiYjMzQ7LCBzdGF0X25hbWUpOwotCXJldHVybiAtRUlOVkFMOwomIzQzOwlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3N0YXRzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zdGF0cy5oCmluZGV4IDVlYzBiMzhlMGM2N2QuLmI4NmRhOGRhMjNhMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3N0YXRzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfc3RhdHMuaApAQCAtOCw4ICYjNDM7OCw2IEBACiAjaWZuZGVmIF9fTkVUX1RJX0lDU1NHX1NUQVRTX0gKICNkZWZpbmUgX19ORVRfVElfSUNTU0dfU1RBVFNfSAogCi0jaW5jbHVkZSAmIzM0O2ljc3NnX3BydWV0aC5oJiMzNDsKLQogI2RlZmluZSBTVEFUU19USU1FX0xJTUlUXzFHX01TICAgIDI1MDAwICAgIC8qIDI1IHNlY29uZHMgQCAxRyAqLwogCiBzdHJ1Y3QgbWlpZ19zdGF0c19yZWdzIHsKQEAgLTE1NSw1MCAmIzQzOzE1Myw2MCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGljc3NnX21paWdfc3RhdHMgaWNzc2dfYWxsX21paWdfc3RhdHNbXSA9IHsKIAlJQ1NTR19NSUlHX1NUQVRTKHR4X2J5dGVzLCB0cnVlKSwKIH07CiAKLSNkZWZpbmUgSUNTU0dfUEFfU1RBVFMoZmllbGQpCVwKLXsJCQkJXAotCSNmaWVsZCwJCQlcCi0JZmllbGQsCQkJXAomIzQzOyNkZWZpbmUgSUNTU0dfUEFfU1RBVFMoZmllbGQsIHN0ZCkJXAomIzQzO3sJCQkJCVwKJiM0MzsJI2ZpZWxkLAkJCQlcCiYjNDM7CWZpZWxkLAkJCQlcCiYjNDM7CXN0ZCwJCQkJXAogfQogCiBzdHJ1Y3QgaWNzc2dfcGFfc3RhdHMgewogCWNoYXIgbmFtZVtFVEhfR1NUUklOR19MRU5dOwogCXUzMiBvZmZzZXQ7CiYjNDM7CWJvb2wgc3RhbmRhcmRfc3RhdHM7CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGljc3NnX3BhX3N0YXRzIGljc3NnX2FsbF9wYV9zdGF0c1tdID0gewotCUlDU1NHX1BBX1NUQVRTKEZXX1JUVV9QS1RfRFJPUCksCi0JSUNTU0dfUEFfU1RBVFMoRldfUTBfT1ZFUkZMT1cpLAotCUlDU1NHX1BBX1NUQVRTKEZXX1ExX09WRVJGTE9XKSwKLQlJQ1NTR19QQV9TVEFUUyhGV19RMl9PVkVSRkxPVyksCi0JSUNTU0dfUEFfU1RBVFMoRldfUTNfT1ZFUkZMT1cpLAotCUlDU1NHX1BBX1NUQVRTKEZXX1E0X09WRVJGTE9XKSwKLQlJQ1NTR19QQV9TVEFUUyhGV19RNV9PVkVSRkxPVyksCi0JSUNTU0dfUEFfU1RBVFMoRldfUTZfT1ZFUkZMT1cpLAotCUlDU1NHX1BBX1NUQVRTKEZXX1E3X09WRVJGTE9XKSwKLQlJQ1NTR19QQV9TVEFUUyhGV19EUk9QUEVEX1BLVCksCi0JSUNTU0dfUEFfU1RBVFMoRldfUlhfRVJST1IpLAotCUlDU1NHX1BBX1NUQVRTKEZXX1JYX0RTX0lOVkFMSUQpLAotCUlDU1NHX1BBX1NUQVRTKEZXX1RYX0RST1BQRURfUEFDS0VUKSwKLQlJQ1NTR19QQV9TVEFUUyhGV19UWF9UU19EUk9QUEVEX1BBQ0tFVCksCi0JSUNTU0dfUEFfU1RBVFMoRldfSU5GX1BPUlRfRElTQUJMRUQpLAotCUlDU1NHX1BBX1NUQVRTKEZXX0lORl9TQVYpLAotCUlDU1NHX1BBX1NUQVRTKEZXX0lORl9TQV9ETCksCi0JSUNTU0dfUEFfU1RBVFMoRldfSU5GX1BPUlRfQkxPQ0tFRCksCi0JSUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfVEFHR0VEKSwKLQlJQ1NTR19QQV9TVEFUUyhGV19JTkZfRFJPUF9QUklPVEFHR0VEKSwKLQlJQ1NTR19QQV9TVEFUUyhGV19JTkZfRFJPUF9OT1RBRyksCi0JSUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfTk9UTUVNQkVSKSwKLQlJQ1NTR19QQV9TVEFUUyhGV19SWF9FT0ZfU0hPUlRfRlJNRVJSKSwKLQlJQ1NTR19QQV9TVEFUUyhGV19SWF9CMF9EUk9QX0VBUkxZX0VPRiksCi0JSUNTU0dfUEFfU1RBVFMoRldfVFhfSlVNQk9fRlJNX0NVVE9GRiksCi0JSUNTU0dfUEFfU1RBVFMoRldfUlhfRVhQX0ZSQUdfUV9EUk9QKSwKLQlJQ1NTR19QQV9TVEFUUyhGV19SWF9GSUZPX09WRVJSVU4pLAotCUlDU1NHX1BBX1NUQVRTKEZXX0NVVF9USFJfUEtUKSwKLQlJQ1NTR19QQV9TVEFUUyhGV19IT1NUX1JYX1BLVF9DTlQpLAotCUlDU1NHX1BBX1NUQVRTKEZXX0hPU1RfVFhfUEtUX0NOVCksCi0JSUNTU0dfUEFfU1RBVFMoRldfSE9TVF9FR1JFU1NfUV9QUkVfT1ZFUkZMT1cpLAotCUlDU1NHX1BBX1NUQVRTKEZXX0hPU1RfRUdSRVNTX1FfRVhQX09WRVJGTE9XKSwKJiM0MzsJSUNTU0dfUEFfU1RBVFMoRldfUlRVX1BLVF9EUk9QLCBmYWxzZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX1EwX09WRVJGTE9XLCBmYWxzZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX1ExX09WRVJGTE9XLCBmYWxzZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX1EyX09WRVJGTE9XLCBmYWxzZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX1EzX09WRVJGTE9XLCBmYWxzZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX1E0X09WRVJGTE9XLCBmYWxzZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX1E1X09WRVJGTE9XLCBmYWxzZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX1E2X09WRVJGTE9XLCBmYWxzZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX1E3X09WRVJGTE9XLCBmYWxzZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX0RST1BQRURfUEtULCBmYWxzZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX1JYX0VSUk9SLCBmYWxzZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX1JYX0RTX0lOVkFMSUQsIGZhbHNlKSwKJiM0MzsJSUNTU0dfUEFfU1RBVFMoRldfVFhfRFJPUFBFRF9QQUNLRVQsIGZhbHNlKSwKJiM0MzsJSUNTU0dfUEFfU1RBVFMoRldfVFhfVFNfRFJPUFBFRF9QQUNLRVQsIGZhbHNlKSwKJiM0MzsJSUNTU0dfUEFfU1RBVFMoRldfSU5GX1BPUlRfRElTQUJMRUQsIGZhbHNlKSwKJiM0MzsJSUNTU0dfUEFfU1RBVFMoRldfSU5GX1NBViwgZmFsc2UpLAomIzQzOwlJQ1NTR19QQV9TVEFUUyhGV19JTkZfU0FfREwsIGZhbHNlKSwKJiM0MzsJSUNTU0dfUEFfU1RBVFMoRldfSU5GX1BPUlRfQkxPQ0tFRCwgZmFsc2UpLAomIzQzOwlJQ1NTR19QQV9TVEFUUyhGV19JTkZfRFJPUF9UQUdHRUQsIGZhbHNlKSwKJiM0MzsJSUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfUFJJT1RBR0dFRCwgZmFsc2UpLAomIzQzOwlJQ1NTR19QQV9TVEFUUyhGV19JTkZfRFJPUF9OT1RBRywgZmFsc2UpLAomIzQzOwlJQ1NTR19QQV9TVEFUUyhGV19JTkZfRFJPUF9OT1RNRU1CRVIsIGZhbHNlKSwKJiM0MzsJLyogTUFDIE1lcmdlIGNvdW50ZXJzOiBleHBvc2VkIHZpYSAuZ2V0X21tX3N0YXRzIHN0YW5kYXJkIHVBUEksCiYjNDM7CSAqIG5vdCBkdXBsaWNhdGVkIGluIHRoZSBwcml2YXRlIGV0aHRvb2wgLVMgdGFibGUuCiYjNDM7CSAqLwomIzQzOwlJQ1NTR19QQV9TVEFUUyhGV19QUkVFTVBUX0JBRF9GUkFHLCB0cnVlKSwKJiM0MzsJSUNTU0dfUEFfU1RBVFMoRldfUFJFRU1QVF9BU1NFTUJMWV9FUlIsIHRydWUpLAomIzQzOwlJQ1NTR19QQV9TVEFUUyhGV19QUkVFTVBUX0ZSQUdfQ05UX1RYLCB0cnVlKSwKJiM0MzsJSUNTU0dfUEFfU1RBVFMoRldfUFJFRU1QVF9BU1NFTUJMWV9PSywgdHJ1ZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX1BSRUVNUFRfRlJBR19DTlRfUlgsIHRydWUpLAomIzQzOwlJQ1NTR19QQV9TVEFUUyhGV19SWF9FT0ZfU0hPUlRfRlJNRVJSLCBmYWxzZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX1JYX0IwX0RST1BfRUFSTFlfRU9GLCBmYWxzZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX1RYX0pVTUJPX0ZSTV9DVVRPRkYsIGZhbHNlKSwKJiM0MzsJSUNTU0dfUEFfU1RBVFMoRldfUlhfRVhQX0ZSQUdfUV9EUk9QLCBmYWxzZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX1JYX0ZJRk9fT1ZFUlJVTiwgZmFsc2UpLAomIzQzOwlJQ1NTR19QQV9TVEFUUyhGV19DVVRfVEhSX1BLVCwgZmFsc2UpLAomIzQzOwlJQ1NTR19QQV9TVEFUUyhGV19IT1NUX1JYX1BLVF9DTlQsIGZhbHNlKSwKJiM0MzsJSUNTU0dfUEFfU1RBVFMoRldfSE9TVF9UWF9QS1RfQ05ULCBmYWxzZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX0hPU1RfRUdSRVNTX1FfUFJFX09WRVJGTE9XLCBmYWxzZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX0hPU1RfRUdSRVNTX1FfRVhQX09WRVJGTE9XLCBmYWxzZSksCiB9OwogCiAjZW5kaWYgLyogX19ORVRfVElfSUNTU0dfU1RBVFNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfc3dpdGNoX21hcC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfc3dpdGNoX21hcC5oCmluZGV4IDdlMDUzYjhhZjNlY2UuLjg1NWZkNGVkMGIzZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3N3aXRjaF9tYXAuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zd2l0Y2hfbWFwLmgKQEAgLTI1Niw2ICYjNDM7MjU2LDExIEBACiAjZGVmaW5lIEZXX0lORl9EUk9QX1BSSU9UQUdHRUQJCTB4MDE0OAogI2RlZmluZSBGV19JTkZfRFJPUF9OT1RBRwkJMHgwMTUwCiAjZGVmaW5lIEZXX0lORl9EUk9QX05PVE1FTUJFUgkJMHgwMTU4CiYjNDM7I2RlZmluZSBGV19QUkVFTVBUX0JBRF9GUkFHCQkweDAxNjAKJiM0MzsjZGVmaW5lIEZXX1BSRUVNUFRfQVNTRU1CTFlfRVJSCQkweDAxNjgKJiM0MzsjZGVmaW5lIEZXX1BSRUVNUFRfRlJBR19DTlRfVFgJCTB4MDE3MAomIzQzOyNkZWZpbmUgRldfUFJFRU1QVF9BU1NFTUJMWV9PSwkJMHgwMTc4CiYjNDM7I2RlZmluZSBGV19QUkVFTVBUX0ZSQUdfQ05UX1JYCQkweDAxODAKICNkZWZpbmUgRldfUlhfRU9GX1NIT1JUX0ZSTUVSUgkJMHgwMTg4CiAjZGVmaW5lIEZXX1JYX0IwX0RST1BfRUFSTFlfRU9GCQkweDAxOTAKICNkZWZpbmUgRldfVFhfSlVNQk9fRlJNX0NVVE9GRgkJMHgwMTk4CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTA1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgSUNTU0cgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIGRpZ2dpbmcgaW50byB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gbXkgZXhwZXJ0aXNlIGluIHRoaXMgYXJlYS4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBoaXR0aW5nIHRoZSBgTWFrZWZpbGVgLCBjb21tb24gY29kZSwgdGhlIGNvbmZpZyBoZWFkZXIsIGFuZCB0aGVuIGEgc2xldyBvZiBmaWxlcyByZWxhdGVkIHRvIGV0aHRvb2wsIFBSVSBFdGhlcm5ldCAod2hpY2ggaXMgKnZlcnkqIGludGVyZXN0aW5nKSwgUW9TLCBzdGF0aXN0aWNzLCBhbmQgc3dpdGNoIG1hcHBpbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1JpZ2h0LCBsZXQmIzM5O3Mgc2VlIHdoYXQgVEkmIzM5O3MgSUNTU0cgaXMgYWxsIGFib3V0LiYjMzQ7IElzIGl0IGEgY29tbW9ubHkgdXNlZCBvciB3ZWxsLXVuZGVyc3Rvb2QgYmxvY2s/IENhbiBJIHJlcHJvZHVjZSB0aGlzIGluIG15IGxhYj8KClRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LCB0aGF0IGlzIGdvb2QsIHNvIEkgd2lsbCBoYXZlIHRvIGVuc3VyZSB0aGF0IG15IGVudmlyb25tZW50IGlzIGFtZDY0IGNvbXBhdGlibGUuIFRoaXMgbWVhbnMgSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMg4oCTIGxpa2UgUUVNVSBvciBzeXprYWxsZXIg4oCTIHRvIHNlZSBpZiBJIGNhbiBldmVuICphY2Nlc3MqIHRoZSByZWxldmFudCBoYXJkd2FyZSBvciBlbXVsYXRlIGl0IGZvciB0ZXN0aW5nIGFuZCBkZWJ1Z2dpbmcuCgpSaWdodCwgSUNTU0cuLi4gbGV0JiMzOTtzIGpvZyBteSBtZW1vcnkuIEFoLCB5ZXMhICYjMzQ7VGV4YXMgSW5zdHJ1bWVudHMgSUNTU0cgUFJVRVRILiYjMzQ7IFRoYXQmIzM5O3MgdGhlIFBSVSBFdGhlcm5ldCBHaWdhYml0IHN1YnN5c3RlbSBvbiBUSSBTaXRhcmEgYW5kIEphY2ludG8gU29DcywgbGlrZSB0aGUgQU02NTR4IG9yIEFNNjR4LiBOb3csIGl0JiMzOTtzIGJlY29taW5nIG1vcmUgY2xlYXIuIE5leHQgc3RlcCB3aWxsIGJlIGRpZ2dpbmcgaW50byB0aGUgS2NvbmZpZyB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VElfSUNTU0dfUFJVRVRIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZz0xNjk9Y29uZmlnIFRMQU5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTE4NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6MTg2OmNvbmZpZyBUSV9JQ1NTR19QUlVFVEhcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctMTg3LVx0dHJpc3RhdGUgXCYjMzQ7VEkgR2lnYWJpdCBQUlUgRXRoZXJuZXQgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0yMDMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnOjIwNDpjb25maWcgVElfSUNTU0dfUFJVRVRIX1NSMVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0yMDUtXHR0cmlzdGF0ZSBcJiMzNDtUSSBHaWdhYml0IFBSVSBTUjEuMCBFdGhlcm5ldCBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9NYWtlZmlsZT0zNT1vYmotJChDT05GSUdfVElfSzNfQU02NV9DUFRTKSAmIzQzOz0gYW02NS1jcHRzLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL01ha2VmaWxlLTM2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvTWFrZWZpbGU6Mzc6b2JqLSQoQ09ORklHX1RJX0lDU1NHX1BSVUVUSCkgJiM0Mzs9IGljc3NnLXBydWV0aC5vIGljc3NnLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL01ha2VmaWxlLTM4LWljc3NnLXBydWV0aC15IDo9IGljc3NnL2ljc3NnX3BydWV0aC5vIGljc3NnL2ljc3NnX3N3aXRjaGRldi5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9NYWtlZmlsZS0zOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL01ha2VmaWxlOjQwOm9iai0kKENPTkZJR19USV9JQ1NTR19QUlVFVEhfU1IxKSAmIzQzOz0gaWNzc2ctcHJ1ZXRoLXNyMS5vIGljc3NnLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL01ha2VmaWxlLTQxLWljc3NnLXBydWV0aC1zcjEteSA6PSBpY3NzZy9pY3NzZ19wcnVldGhfc3IxLm9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguaC03LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmg6ODojaWZuZGVmIF9fTkVUX1RJX0lDU1NHX1BSVUVUSF9IXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguaDo5OiNkZWZpbmUgX19ORVRfVElfSUNTU0dfUFJVRVRIX0hcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5oLTEwLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5oPTUyOT1zdGF0aWMgaW5saW5lIGJvb2wgcHJ1ZXRoX3hkcF9pc19lbmFibGVkKHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguaC01MzMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguaDo1MzQ6I2VuZGlmIC8qIF9fTkVUX1RJX0lDU1NHX1BSVUVUSF9IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5NDkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgdGhlIFRJIEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIFRJIEV0aGVybmV0IGRyaXZlciBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgYXQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWdgLCBhcm91bmQgbGluZSAxODYuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBzb21ldGhpbmcgaW50ZXJlc3RpbmcgaXMgaGFwcGVuaW5nIHRoZXJlLCBsaWtlbHkgcmVsYXRlZCB0byBhIGZlYXR1cmUgZ2F0ZSwgZGVwZW5kZW5jeSBjaGVjaywgb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0JiMzOTtzIGNhdXNpbmcgbWUgc29tZSBoZWFkLXNjcmF0Y2hpbmcuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3IgdGhlIGNvbmRpdGlvbiB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgc29tZSBmdW5jdGlvbmFsaXR5LCBwZXJoYXBzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSB2YXJpYW50LCBwb3dlciBtYW5hZ2VtZW50IGZlYXR1cmUsIG9yIGEgZGVidWcgc2V0dGluZy4gVGhlIGxpbmUgbnVtYmVyIHN1Z2dlc3RzIGl0IGNvdWxkIGJlIGEgZGVwZW5kZW5jeSBvbiBhbm90aGVyIGNvbXBvbmVudC4gQWx0ZXJuYXRpdmVseSwgaXQgY291bGQgYmUgYSBjb21wbGV4IG5lc3RlZCBgaWZgIHN0cnVjdHVyZSBjb250cm9sbGluZyBtdWx0aXBsZSBvcHRpb25zLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24uIEkmIzM5O20gZXhwZWN0aW5nIHRvIGVpdGhlciBmaW5kIHRoZSByb290IG9mIGFuIGlzc3VlLCBvciBzaW1wbHkgdW5kZXJzdGFuZCBob3cgYSBwYXJ0aWN1bGFyIGZlYXR1cmUgaXMgZW5hYmxlZCBpbiB0aGlzIGRyaXZlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE4MDpcdFxuIDE4MTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXG4gMTgyOlx0XHQgIHdpbGwgYmUgY2FsbGVkIHRsYW4uXG4gMTgzOlx0XG4gMTg0Olx0XHQgIFBsZWFzZSBlbWFpbCBmZWVkYmFjayB0byBcdTAwM2N0b3JiZW4ubWF0aGlhc2VuQGNvbXBhcS5jb21cdTAwM2UuXG4gMTg1Olx0XG4gMTg2Olx0Y29uZmlnIFRJX0lDU1NHX1BSVUVUSFxuIDE4NzpcdFx0dHJpc3RhdGUgXCYjMzQ7VEkgR2lnYWJpdCBQUlUgRXRoZXJuZXQgZHJpdmVyXCYjMzQ7XG4gMTg4Olx0XHRzZWxlY3QgUEhZTElCXG4gMTg5Olx0XHRzZWxlY3QgVElfSUNTU19JRVBcbiAxOTA6XHRcdHNlbGVjdCBUSV9LM19DUFBJX0RFU0NfUE9PTFxuIDE5MTpcdFx0ZGVwZW5kcyBvbiBQUlVfUkVNT1RFUFJPQ1xuIDE5MjpcdFx0ZGVwZW5kcyBvbiBORVRfU1dJVENIREVWXG4gMTkzOlx0XHRkZXBlbmRzIG9uIEFSQ0hfSzMgXHUwMDI2XHUwMDI2IE9GIFx1MDAyNlx1MDAyNiBUSV9LM19VRE1BX0dMVUVfTEFZRVJcbiAxOTQ6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAxOTU6XHRcdGRlcGVuZHMgb24gSFNSIHx8ICFIU1JcbiAxOTY6XHRcdGhlbHBcbiAxOTc6XHRcdCAgU3VwcG9ydCBkdWFsIEdpZ2FiaXQgRXRoZXJuZXQgcG9ydHMgb3ZlciB0aGUgSUNTU0cgUFJVIFN1YnN5c3RlbS5cbiAxOTg6XHRcdCAgVGhpcyBzdWJzeXN0ZW0gaXMgYXZhaWxhYmxlIHN0YXJ0aW5nIHdpdGggdGhlIEFNNjUgcGxhdGZvcm0uXG4gMTk5Olx0XG4gMjAwOlx0XHQgIFRoaXMgZHJpdmVyIHJlcXVpcmVzIGZpcm13YXJlIGJpbmFyaWVzIHdoaWNoIHdpbGwgcnVuIG9uIHRoZSBQUlVzXG4gMjAxOlx0XHQgIHRvIHN1cHBvcnQgdGhlIEV0aGVybmV0IG9wZXJhdGlvbi4gQ3VycmVudGx5LCBpdCBzdXBwb3J0cyBFdGhlcm5ldFxuIDIwMjpcdFx0ICB3aXRoIDFHIGFuZCAxMDBNIGxpbmsgc3BlZWQuXG4gMjAzOlx0XG4gMjA0Olx0Y29uZmlnIFRJX0lDU1NHX1BSVUVUSF9TUjFcbiAyMDU6XHRcdHRyaXN0YXRlIFwmIzM0O1RJIEdpZ2FiaXQgUFJVIFNSMS4wIEV0aGVybmV0IGRyaXZlclwmIzM0O1xuIDIwNjpcdFx0c2VsZWN0IFBIWUxJQlxuIDIwNzpcdFx0c2VsZWN0IFRJX0lDU1NfSUVQXG4gMjA4Olx0XHRzZWxlY3QgVElfSzNfQ1BQSV9ERVNDX1BPT0xcbiAyMDk6XHRcdHNlbGVjdCBQQUdFX1BPT0xcbiAyMTA6XHRcdGRlcGVuZHMgb24gUFJVX1JFTU9URVBST0NcbiAyMTE6XHRcdGRlcGVuZHMgb24gTkVUX1NXSVRDSERFVlxuIDIxMjpcdFx0ZGVwZW5kcyBvbiBBUkNIX0szIFx1MDAyNlx1MDAyNiBPRiBcdTAwMjZcdTAwMjYgVElfSzNfVURNQV9HTFVFX0xBWUVSXG4gMjEzOlx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gMjE0Olx0XHRoZWxwXG4gMjE1Olx0XHQgIFN1cHBvcnQgZHVhbCBHaWdhYml0IEV0aGVybmV0IHBvcnRzIG92ZXIgdGhlIElDU1NHIFBSVSBTdWJzeXN0ZW0uXG4gMjE2Olx0XHQgIFRoaXMgc3Vic3lzdGVtIGlzIGF2YWlsYWJsZSBvbiB0aGUgQU02NSBTUjEuMCBwbGF0Zm9ybS5cbiAyMTc6XHRcbiAyMTg6XHRcdCAgVGhpcyBkcml2ZXIgcmVxdWlyZXMgZmlybXdhcmUgYmluYXJpZXMgd2hpY2ggd2lsbCBydW4gb24gdGhlIFBSVXNcbiAyMTk6XHRcdCAgdG8gc3VwcG9ydCB0aGUgRXRoZXJuZXQgb3BlcmF0aW9uLiBDdXJyZW50bHksIGl0IHN1cHBvcnRzIEV0aGVybmV0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NzMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIGhlcmUgd2UgZ28uIEkgc2VlIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24sIGBjb25maWcgVElfSUNTU0dfUFJVRVRIYCwgYW5kIGltbWVkaWF0ZWx5IG15IGV4cGVydCBleWUgc2NhbnMgZm9yIHRoZSBkZXBlbmRlbmNpZXMuIGBkZXBlbmRzIG9uIEFSQ0hfSzMgJmFtcDsmYW1wOyBPRiAmYW1wOyZhbXA7IFRJX0szX1VETUFfR0xVRV9MQVlFUmAgYW5kIGBkZXBlbmRzIG9uIFBSVV9SRU1PVEVQUk9DYC4gQWgsIGBBUkNIX0szYC4uLnRoYXQmIzM5O3MgdGhlIGtleS4gSSByZWNvZ25pemUgbW9zdCBvZiB0aG9zZSBidXQgSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBgQVJDSF9LM2Agc2lnbmlmaWVzIGluIHRoaXMgY29udGV4dC4gSXQgYWx3YXlzIGhlbHBzIHRvIGtub3cgdGhlIGFyY2hpdGVjdHVyZSBiZWZvcmUgSSBtYWtlIGFueSBkZWNpc2lvbnMgYWJvdXQgaXRzIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyB0cmFjZSB0aGlzIGFuZCBzZWUgZXhhY3RseSB3aGVyZSBgQVJDSF9LM2AgaXMgZGVmaW5lZCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGViYXNlIGFuZCBnZXQgc29tZSBjbGFyaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBUkNIX0szJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvS2NvbmZpZy5wbGF0Zm9ybXM9MTQzPWNvbmZpZyBBUkNIX0VYWU5PU1xuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy5wbGF0Zm9ybXMtMTU1LVxuYXJjaC9hcm02NC9LY29uZmlnLnBsYXRmb3JtczoxNTY6Y29uZmlnIEFSQ0hfSzNcbmFyY2gvYXJtNjQvS2NvbmZpZy5wbGF0Zm9ybXMtMTU3LVx0Ym9vbCBcJiMzNDtUZXhhcyBJbnN0cnVtZW50cyBJbmMuIEszIG11bHRpY29yZSBTb0MgYXJjaGl0ZWN0dXJlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyMzYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1OTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBBUkNIX0szYCBhbmQgYFRJX0lDU1NHX1BSVUVUSGAgTW9kdWxlcyBmb3IgRnV6emluZyBFbGlnaWJpbGl0eSoqCgpPa2F5LCBzbyBgQVJDSF9LM2AgaXMgY2xlYXJseSBhbiBBUk02NCBzcGVjaWZpYyBTb0MgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgZnJvbSBUZXhhcyBJbnN0cnVtZW50cy4gSSBjb25maXJtZWQgdGhpcyBieSBmaW5kaW5nIGl0IGRlZmluZWQgaW4gYGFyY2gvYXJtNjQvS2NvbmZpZy5wbGF0Zm9ybXNgLiBNeSB0YXJnZXQgYXJjaGl0ZWN0dXJlLCBob3dldmVyLCBpcyBhbWQ2NC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlc2UgbW9kdWxlcyBhcmUgZXZlbiByZW1vdGVseSBidWlsZGFibGUgb3IgcmVsZXZhbnQgdG8gYW4gYW1kNjQgZW52aXJvbm1lbnQuCgpUaGUgbmVnYXRpdmUgY3JpdGVyaWEgc3RhdGUgSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjb2RlIGZhbGxzIGludG8gc2V2ZXJhbCBjYXRlZ29yaWVzLCBpbmNsdWRpbmcgJiMzNDtDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUmIzM0OyBhbmQgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuJiMzNDsKCkxldCYjMzk7cyBzZWUgaWYgZWl0aGVyIGBBUkNIX0szYCBvciBgVElfSUNTU0dfUFJVRVRIYCBjYW4gYmUgZW5hYmxlZCBvciBldmVuIGNvbXBpbGVkIG9uIGFtZDY0LiBJdCYjMzk7cyBxdWlja2x5IGFwcGFyZW50IHRoYXQgYEFSQ0hfSzNgIGlzIHN0cmljdGx5IHRpZWQgdG8gYGFyY2gvYXJtNjRgIHRocm91Z2ggdGhlIGBLY29uZmlnLnBsYXRmb3Jtc2AgZmlsZS4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0b3IuCgpOb3cgZm9yIGBUSV9JQ1NTR19QUlVFVEhgLiBJIGxvb2tlZCBhdCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZ2AgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlJiMzOTtzIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gQXMgZXhwZWN0ZWQsIGBUSV9JQ1NTR19QUlVFVEhgIGRlcGVuZHMgb24gYEFSQ0hfSzNgIGFuZCBzZXZlcmFsIG90aGVyIEFSTTY0IGFuZCBUSS1zcGVjaWZpYyBkZXBlbmRlbmNpZXMuIEltcG9ydGFudGx5LCBJIGRpZCAqbm90KiBmaW5kIGB8fCBDT01QSUxFX1RFU1RgLCB3aGljaCB3b3VsZCBoYXZlIHByb3ZpZGVkIGEgcGF0aCBmb3IgYnVpbGRpbmcgdGhpcyBkcml2ZXIgZm9yIHRlc3RpbmcgcHVycG9zZXMgZXZlbiBpZiB0aGUgaGFyZHdhcmUgaXNuJiMzOTt0IHByZXNlbnQuCgpGdXJ0aGVybW9yZSwgdGhpcyBkcml2ZXIgaXMgZXhwbGljaXRseSBhIHBsYXRmb3JtIGRyaXZlciBmb3IgYSBUSSBLMyBTb0MgUFJVIEV0aGVybmV0IGNvbnRyb2xsZXIuIEl0JiMzOTtzIGRlc2lnbmVkIHRvIGludGVyZmFjZSB3aXRoIHRoZSBQcm9ncmFtbWFibGUgUmVhbC1UaW1lIFVuaXQgKFBSVSkgaGFyZHdhcmUgcHJlc2VudCBvbiBUSSBLMyBTb0NzLiBUbyBiZSBleHRyYSBjZXJ0YWluLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXRzIHByb2JlIGZ1bmN0aW9uIGlzIHRpZWQgdG8gYSBwbGF0Zm9ybSBkZXZpY2UsIGxpa2VseSB3aXRoaW4gdGhlIGBpY3NzZ19wcnVldGguY2AgZHJpdmVyIHNvdXJjZSBpdHNlbGYuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGl0JiMzOTtzIHRpZ2h0bHkgY291cGxlZCB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4gU2luY2UgdGhpcyBpcyBhbiBFdGhlcm5ldCBjb250cm9sbGVyLCBpdCBuZWVkcyB0byBiZSBjb25uZWN0ZWQsIGFuZCB0aGF0IGlzbiYjMzk7dCBjb25uZWN0ZWQgdG8gYSByZWd1bGFyIGFtZDY0IHN5c3RlbS4KClRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGNvZGUgaXMgZXhjbHVzaXZlIHRvIHRoZSBBUk02NCBhcmNoaXRlY3R1cmUgYW5kIHNwZWNpZmljIGhhcmR3YXJlLCBhbmQgbm90IGJ1aWxkYWJsZSwgSSYjMzk7bSBjb25maWRlbnQgaW4gY29uY2x1ZGluZyB0aGF0IGl0JiMzOTtzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiBteSBhbWQ2NCBlbnZpcm9ubWVudC4gSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfcGxhdGZvcm1fZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc19pZXAuYz0xMDk1PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGljc3NfaWVwX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzX2llcC5jLTExMDEtfTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NfaWVwLmM6MTEwMjptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGljc3NfaWVwX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzX2llcC5jLTExMDMtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmM9MjU4Mj1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwcnVldGhfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5jLTI1OTAtfTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5jOjI1OTE6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihwcnVldGhfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5jLTI1OTItXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoX3NyMS5jPTEyMjg9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcHJ1ZXRoX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGhfc3IxLmMtMTIzNi19O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoX3NyMS5jOjEyMzc6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihwcnVldGhfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aF9zcjEuYy0xMjM4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTgyOAoJCQkJCQkJb3V0cHV0OiAxMjEKCQkJCQkJCXRob3VnaHRzOiA1NjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBXb3J0aEZ1enppbmcgZm9yIFRJX0lDU1NHX1BSVUVUSCoqCgpPa2F5LCBhZnRlciBleGFtaW5pbmcgdGhlIGNvZGUgYW5kIHRoZSBjb250ZXh0LCBJJiMzOTt2ZSBkZXRlcm1pbmVkIHRoYXQgYFRJX0lDU1NHX1BSVUVUSGAgaXMgZGVmaW5pdGVseSBub3Qgd29ydGggZnV6emluZyBpbiBvdXIgY3VycmVudCBzZXR1cC4gSGVyZSYjMzk7cyBteSByZWFzb25pbmcsIGFuZCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOgoKRmlyc3QsIHRoaXMgaXMgYSB2ZXJ5IHNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciwgdGhlIGBwcnVldGhfZHJpdmVyYCwgZGVzaWduZWQgZm9yIHRoZSBUSSBLMyBTb0MmIzM5O3MgUFJVIGV0aGVybmV0IHN1YnN5c3RlbS4gVGhpcyBtZWFucyBpdCBpbnRyaW5zaWNhbGx5IGRlcGVuZHMgb24gVEkmIzM5O3MgcHJvcHJpZXRhcnkgaGFyZHdhcmUg4oCTIHRoZSBQUlUtSUNTU0cgc3Vic3lzdGVtLCB0aGUgcmVtb3RlcHJvYyBmcmFtZXdvcmsgZm9yIHRoZSBQUlVzLCBhbmQgdGhlIEszIFVETUEgZ2x1ZSBsb2dpYy4gVGhpcyBpcyBub3Qgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVtdWxhdGVkIHJlbGlhYmx5LCBvciBldmVuIGF0IGFsbCwgaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LCBvciBhbnkgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gUUVNVSBzaW1wbHkgZG9lc24mIzM5O3Qgc2ltdWxhdGUgdGhlIFBSVS1JQ1NTRyBvciBLMyBVRE1BIGhhcmR3YXJlIGNvbXBvbmVudHMuCgpTZWNvbmRseSwgYW5kIHRoaXMgaXMgdGhlIGNsaW5jaGVyLCB0aGUgZHJpdmVyIGhhcyBhIGJ1aWx0LWluIGRlcGVuZGVuY3kgb24gYEFSQ0hfSzNgLiBUaGlzIGlzIGFuIGFyY2hpdGVjdHVyZSBvcHRpb24gZm91bmQgaW4gdGhlIGBhcm02NC9LY29uZmlnLnBsYXRmb3Jtc2AgZmlsZS4gU2luY2Ugd2UmIzM5O3JlIHRhcmdldGluZyB0aGUgYGFtZDY0YCBhcmNoaXRlY3R1cmUsIHRoaXMgZHJpdmVyIGlzICpzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUqIG9uIHRoZSB0YXJnZXQuIEl0JiMzOTtzIGltcG9zc2libGUgdG8gZXZlbiBjb21waWxlIGl0IGluIGZvciB0aGUgYGFtZDY0YCBhcmNoaXRlY3R1cmUsIG1ha2luZyBhbnkgZnV6emluZyBlZmZvcnRzIGNvbXBsZXRlbHkgZnV0aWxlLgoKTG9va2luZyBhdCB0aGUgaW5zdHJ1Y3Rpb25zIGluIFNlY3Rpb24gMiwgdGhpcyBjbGVhcmx5IGZhbGxzIHVuZGVyIHR3byBvZiB0aGUgJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgY2F0ZWdvcmllczogJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUmIzM0OyBhbmQgJiMzNDtDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuJiMzNDsgVGhlIGFyY2hpdGVjdHVyZSBleGNsdXNpdml0eSBpcyBvYnZpb3VzIGR1ZSB0byB0aGUgYEFSQ0hfSzNgIGRlcGVuZGVuY3kuIFRoZSBoYXJkd2FyZSB1bnJlYWNoYWJpbGl0eSBpcyBldmlkZW50IGJlY2F1c2Ugd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBwbGF0Zm9ybS1zcGVjaWZpYyBkcml2ZXIgdGhhdCBuZWVkcyBzcGVjaWFsaXplZCBUSSBoYXJkd2FyZSB0aGF0JiMzOTtzIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIG91ciB0YXJnZXQgUUVNVSBpbnN0YW5jZXMuCgpUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmcgPSBmYWxzZWAsIG5vIGBFbmFibGVDb25maWdzYCBhcmUgbmVlZGVkLCBhbmQgbm8gYEZvY3VzU3ltYm9sc2AgYXJlIHJlbGV2YW50LiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIG1vZGlmaWVkIGNvZGUgaXMgY29uZmluZWQgdG8gdGhlIFRleGFzIEluc3RydW1lbnRzIElDU1NHIFBSVSBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnLyksIHdoaWNoIGRlcGVuZHMgb24gQ09ORklHX0FSQ0hfSzMgKGFuIEFSTTY0LXNwZWNpZmljIFNvQyBhcmNoaXRlY3R1cmUpLiBUaGlzIGRyaXZlciBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgb24gdGhlIHRhcmdldCBhbWQ2NCBhcmNoaXRlY3R1cmUgYW5kIGFkZGl0aW9uYWxseSByZXF1aXJlcyBwaHlzaWNhbCBUSSBLMyBQUlUtSUNTU0cgU29DIGhhcmR3YXJlIGFuZCBmaXJtd2FyZSB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBtb2RpZmllZCBjb2RlIGlzIGNvbmZpbmVkIHRvIHRoZSBUZXhhcyBJbnN0cnVtZW50cyBJQ1NTRyBQUlUgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy8pLCB3aGljaCBkZXBlbmRzIG9uIENPTkZJR19BUkNIX0szIChhbiBBUk02NC1zcGVjaWZpYyBTb0MgYXJjaGl0ZWN0dXJlKS4gVGhpcyBkcml2ZXIgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIG9uIHRoZSB0YXJnZXQgYW1kNjQgYXJjaGl0ZWN0dXJlIGFuZCBhZGRpdGlvbmFsbHkgcmVxdWlyZXMgcGh5c2ljYWwgVEkgSzMgUFJVLUlDU1NHIFNvQyBoYXJkd2FyZSBhbmQgZmlybXdhcmUgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjEwOjIyLjUyMTEzNzk5OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMDgxMTI2NDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgbW9kaWZpZWQgY29kZSBpcyBjb25maW5lZCB0byB0aGUgVGV4YXMgSW5zdHJ1bWVudHMgSUNTU0cgUFJVIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvKSwgd2hpY2ggZGVwZW5kcyBvbiBDT05GSUdfQVJDSF9LMyAoYW4gQVJNNjQtc3BlY2lmaWMgU29DIGFyY2hpdGVjdHVyZSkuIFRoaXMgZHJpdmVyIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiB0aGUgdGFyZ2V0IGFtZDY0IGFyY2hpdGVjdHVyZSBhbmQgYWRkaXRpb25hbGx5IHJlcXVpcmVzIHBoeXNpY2FsIFRJIEszIFBSVS1JQ1NTRyBTb0MgaGFyZHdhcmUgYW5kIGZpcm13YXJlIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjEwOjIyLjUyMTE0NjA4OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYxMTAxMTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTVmNGZmNTZkMTQ5NzAxZjY1NGQwNzQxZjU4MTQ1NTI1MzExNGZlYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxNSAwNzoxMDoyMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL01ha2VmaWxlXFxuaW5kZXggZjQyNzZjOWE3NzYyMC4uZDE5YmNkMjVjOWQwNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL01ha2VmaWxlXFxuQEAgLTQ2LDYgKzQ2LDcgQEAgaWNzc2cteSA6PSBpY3NzZy9pY3NzZ19jb21tb24ubyBcXFxcXFxuIFxcdCAgIGljc3NnL2ljc3NnX2NvbmZpZy5vIFxcXFxcXG4gXFx0ICAgaWNzc2cvaWNzc2dfbWlpX2NmZy5vIFxcXFxcXG4gXFx0ICAgaWNzc2cvaWNzc2dfc3RhdHMubyBcXFxcXFxuLVxcdCAgIGljc3NnL2ljc3NnX2V0aHRvb2wub1xcbitcXHQgICBpY3NzZy9pY3NzZ19ldGh0b29sLm8gXFxcXFxcbitcXHQgICBpY3NzZy9pY3NzZ19xb3Mub1xcbiBcXG4gb2JqLSQoQ09ORklHX1RJX0lDU1NfSUVQKSArPSBpY3NzZy9pY3NzX2llcC5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfY29tbW9uLmNcXG5pbmRleCA0YTdkMWE2ZjQ3MGIxLi5kNTllZWY2MWU3MDEyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2NvbW1vbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfY29tbW9uLmNcXG5AQCAtMTc1NCw2ICsxNzU0LDcgQEAgdm9pZCBwcnVldGhfbmV0ZGV2X2V4aXQoc3RydWN0IHBydWV0aCAqcHJ1ZXRoLFxcbiBcXG4gXFx0bmV0aWZfbmFwaV9kZWwoXFx1MDAyNmVtYWMtXFx1MDAzZW5hcGlfcngpO1xcbiBcXG4rXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2ZW1hYy1cXHUwMDNlcW9zLmlldC5mcGVfbG9jayk7XFxuIFxcdHBydXNzX3JlbGVhc2VfbWVtX3JlZ2lvbihwcnVldGgtXFx1MDAzZXBydXNzLCBcXHUwMDI2ZW1hYy1cXHUwMDNlZHJhbSk7XFxuIFxcdGZyZWVfbmV0ZGV2KGVtYWMtXFx1MDAzZW5kZXYpO1xcbiBcXHRwcnVldGgtXFx1MDAzZWVtYWNbbWFjXSA9IE5VTEw7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2NvbmZpZy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfY29uZmlnLmhcXG5pbmRleCA2MGQ2OTc0NGZmYWUyLi4xYWMyMDJmODU1ZWQ0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2NvbmZpZy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfY29uZmlnLmhcXG5AQCAtMzIzLDEzICszMjMsNCBAQCBzdHJ1Y3QgcHJ1ZXRoX2ZkYl9zbG90IHtcXG4gXFx0dTggZmlkO1xcbiBcXHR1OCBmaWRfYzI7XFxuIH0gX19wYWNrZWQ7XFxuLVxcbi1lbnVtIGljc3NnX2lldGZwZV92ZXJpZnlfc3RhdGVzIHtcXG4tXFx0SUNTU0dfSUVURlBFX1NUQVRFX1VOS05PV04gPSAwLFxcbi1cXHRJQ1NTR19JRVRGUEVfU1RBVEVfSU5JVElBTCxcXG4tXFx0SUNTU0dfSUVURlBFX1NUQVRFX1ZFUklGWUlORyxcXG4tXFx0SUNTU0dfSUVURlBFX1NUQVRFX1NVQ0NFRURFRCxcXG4tXFx0SUNTU0dfSUVURlBFX1NUQVRFX0ZBSUxFRCxcXG4tXFx0SUNTU0dfSUVURlBFX1NUQVRFX0RJU0FCTEVEXFxuLX07XFxuICNlbmRpZiAvKiBfX05FVF9USV9JQ1NTR19DT05GSUdfSCAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19ldGh0b29sLmNcXG5pbmRleCBiNzE1YWYyMWQyM2FjLi5kYzI1MzYxYWZlOTg5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2V0aHRvb2wuY1xcbkBAIC03NCw3ICs3NCw4IEBAIHN0YXRpYyBpbnQgZW1hY19nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IHN0cmluZ3NldClcXG4gXFx0XFx0aWYgKGVtYWMtXFx1MDAzZXBydWV0aC1cXHUwMDNlcGFfc3RhdHMpXFxuIFxcdFxcdFxcdHJldHVybiBJQ1NTR19OVU1fRVRIVE9PTF9TVEFUUztcXG4gXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRyZXR1cm4gSUNTU0dfTlVNX0VUSFRPT0xfU1RBVFMgLSBJQ1NTR19OVU1fUEFfU1RBVFM7XFxuK1xcdFxcdFxcdHJldHVybiBJQ1NTR19OVU1fRVRIVE9PTF9TVEFUUyAtXFxuK1xcdFxcdFxcdCAgICAgICAoSUNTU0dfTlVNX1BBX1NUQVRTIC0gSUNTU0dfTlVNX1BBX1NUQU5EQVJEX1NUQVRTKTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXHR9XFxuQEAgLTkzLDcgKzk0LDggQEAgc3RhdGljIHZvaWQgZW1hY19nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIHN0cmluZ3NldCwgdTggKmRhdGEpXFxuIFxcdFxcdFxcdFxcdGV0aHRvb2xfcHV0cyhcXHUwMDI2cCwgaWNzc2dfYWxsX21paWdfc3RhdHNbaV0ubmFtZSk7XFxuIFxcdFxcdGlmIChlbWFjLVxcdTAwM2VwcnVldGgtXFx1MDAzZXBhX3N0YXRzKVxcbiBcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShpY3NzZ19hbGxfcGFfc3RhdHMpOyBpKyspXFxuLVxcdFxcdFxcdFxcdGV0aHRvb2xfcHV0cyhcXHUwMDI2cCwgaWNzc2dfYWxsX3BhX3N0YXRzW2ldLm5hbWUpO1xcbitcXHRcXHRcXHRcXHRpZiAoIWljc3NnX2FsbF9wYV9zdGF0c1tpXS5zdGFuZGFyZF9zdGF0cylcXG4rXFx0XFx0XFx0XFx0XFx0ZXRodG9vbF9wdXRzKFxcdTAwMjZwLCBpY3NzZ19hbGxfcGFfc3RhdHNbaV0ubmFtZSk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRicmVhaztcXG5AQCAtMTE0LDcgKzExNiw4IEBAIHN0YXRpYyB2b2lkIGVtYWNfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuIFxcbiBcXHRpZiAoZW1hYy1cXHUwMDNlcHJ1ZXRoLVxcdTAwM2VwYV9zdGF0cylcXG4gXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoaWNzc2dfYWxsX3BhX3N0YXRzKTsgaSsrKVxcbi1cXHRcXHRcXHQqKGRhdGErKykgPSBlbWFjLVxcdTAwM2VwYV9zdGF0c1tpXTtcXG4rXFx0XFx0XFx0aWYgKCFpY3NzZ19hbGxfcGFfc3RhdHNbaV0uc3RhbmRhcmRfc3RhdHMpXFxuK1xcdFxcdFxcdFxcdCooZGF0YSsrKSA9IGVtYWMtXFx1MDAzZXBhX3N0YXRzW2ldO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGVtYWNfZ2V0X3RzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuQEAgLTI5NCw2ICsyOTcsMTI2IEBAIHN0YXRpYyBpbnQgZW1hY19zZXRfcGVyX3F1ZXVlX2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgcXVldWUsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGVtYWNfZ2V0X21tKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgZXRodG9vbF9tbV9zdGF0ZSAqc3RhdGUpXFxuK3tcXG4rXFx0c3RydWN0IHBydWV0aF9lbWFjICplbWFjID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcdHN0cnVjdCBwcnVldGhfcW9zX2lldCAqaWV0ID0gXFx1MDAyNmVtYWMtXFx1MDAzZXFvcy5pZXQ7XFxuK1xcdGVudW0gaWNzc2dfaWV0ZnBlX3ZlcmlmeV9zdGF0ZXMgdmVyaWZ5X3N0YXR1cztcXG4rXFxuK1xcdGlmIChlbWFjLVxcdTAwM2Vpc19zcjEpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmlldC1cXHUwMDNlZnBlX2xvY2spO1xcbitcXHRzdGF0ZS1cXHUwMDNldHhfZW5hYmxlZCA9IGlldC1cXHUwMDNlZnBlX2VuYWJsZWQ7XFxuK1xcdHN0YXRlLVxcdTAwM2V0eF9taW5fZnJhZ19zaXplID0gaWV0LVxcdTAwM2V0eF9taW5fZnJhZ19zaXplO1xcbitcXHRzdGF0ZS1cXHUwMDNldmVyaWZ5X2VuYWJsZWQgPSBpZXQtXFx1MDAzZW1hY192ZXJpZnlfY29uZmlndXJlO1xcbitcXHRzdGF0ZS1cXHUwMDNldmVyaWZ5X3RpbWUgPSBpZXQtXFx1MDAzZXZlcmlmeV90aW1lX21zO1xcbitcXHRzdGF0ZS1cXHUwMDNldHhfYWN0aXZlID0gaWV0LVxcdTAwM2VmcGVfYWN0aXZlO1xcbitcXHR2ZXJpZnlfc3RhdHVzID0gaWV0LVxcdTAwM2V2ZXJpZnlfc3RhdHVzO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmlldC1cXHUwMDNlZnBlX2xvY2spO1xcbitcXG4rXFx0c3RhdGUtXFx1MDAzZXJ4X21pbl9mcmFnX3NpemUgPSBFVEhfWkxFTjtcXG4rXFx0c3RhdGUtXFx1MDAzZXBtYWNfZW5hYmxlZCA9IHRydWU7XFxuK1xcbitcXHRzd2l0Y2ggKHZlcmlmeV9zdGF0dXMpIHtcXG4rXFx0Y2FzZSBJQ1NTR19JRVRGUEVfU1RBVEVfRElTQUJMRUQ6XFxuK1xcdFxcdHN0YXRlLVxcdTAwM2V2ZXJpZnlfc3RhdHVzID0gRVRIVE9PTF9NTV9WRVJJRllfU1RBVFVTX0RJU0FCTEVEO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBJQ1NTR19JRVRGUEVfU1RBVEVfSU5JVElBTDpcXG4rXFx0XFx0c3RhdGUtXFx1MDAzZXZlcmlmeV9zdGF0dXMgPSBFVEhUT09MX01NX1ZFUklGWV9TVEFUVVNfSU5JVElBTDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgSUNTU0dfSUVURlBFX1NUQVRFX1ZFUklGWUlORzpcXG4rXFx0XFx0c3RhdGUtXFx1MDAzZXZlcmlmeV9zdGF0dXMgPSBFVEhUT09MX01NX1ZFUklGWV9TVEFUVVNfVkVSSUZZSU5HO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBJQ1NTR19JRVRGUEVfU1RBVEVfU1VDQ0VFREVEOlxcbitcXHRcXHRzdGF0ZS1cXHUwMDNldmVyaWZ5X3N0YXR1cyA9IEVUSFRPT0xfTU1fVkVSSUZZX1NUQVRVU19TVUNDRUVERUQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIElDU1NHX0lFVEZQRV9TVEFURV9GQUlMRUQ6XFxuK1xcdFxcdHN0YXRlLVxcdTAwM2V2ZXJpZnlfc3RhdHVzID0gRVRIVE9PTF9NTV9WRVJJRllfU1RBVFVTX0ZBSUxFRDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHN0YXRlLVxcdTAwM2V2ZXJpZnlfc3RhdHVzID0gRVRIVE9PTF9NTV9WRVJJRllfU1RBVFVTX1VOS05PV047XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHQvKiA4MDIuMy0yMDE4IGNsYXVzZSAzMC4xNC4xLjYsIHNheXMgdGhhdCB0aGUgYU1BQ01lcmdlVmVyaWZ5VGltZVxcbitcXHQgKiB2YXJpYWJsZSBoYXMgYSByYW5nZSBiZXR3ZWVuIDEgYW5kIDEyOCBtcyBpbmNsdXNpdmUuIExpbWl0IHRvIHRoYXQuXFxuK1xcdCAqL1xcbitcXHRzdGF0ZS1cXHUwMDNlbWF4X3ZlcmlmeV90aW1lID0gRVRIVE9PTF9NTV9NQVhfVkVSSUZZX1RJTUVfTVM7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBlbWFjX3NldF9tbShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGV0aHRvb2xfbW1fY2ZnICpjZmcsXFxuK1xcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0c3RydWN0IHBydWV0aF9lbWFjICplbWFjID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcdHN0cnVjdCBwcnVldGhfcW9zX2lldCAqaWV0ID0gXFx1MDAyNmVtYWMtXFx1MDAzZXFvcy5pZXQ7XFxuK1xcdHUzMiBvbGRfdmVyaWZ5X3RpbWVfbXMsIG9sZF90eF9taW5fZnJhZ19zaXplO1xcbitcXHRib29sIG9sZF9mcGVfZW5hYmxlZCwgb2xkX21hY192ZXJpZnlfY29uZmlndXJlO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0aWYgKGVtYWMtXFx1MDAzZWlzX3NyMSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0aWYgKCFjZmctXFx1MDAzZXBtYWNfZW5hYmxlZCkge1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwicHJlZW1wdGlibGUgTUFDIGlzIGFsd2F5cyBlbmFibGVkXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2aWV0LVxcdTAwM2VmcGVfbG9jayk7XFxuK1xcdG9sZF92ZXJpZnlfdGltZV9tcyA9IGlldC1cXHUwMDNldmVyaWZ5X3RpbWVfbXM7XFxuK1xcdG9sZF90eF9taW5fZnJhZ19zaXplID0gaWV0LVxcdTAwM2V0eF9taW5fZnJhZ19zaXplO1xcbitcXHRvbGRfZnBlX2VuYWJsZWQgPSBpZXQtXFx1MDAzZWZwZV9lbmFibGVkO1xcbitcXHRvbGRfbWFjX3ZlcmlmeV9jb25maWd1cmUgPSBpZXQtXFx1MDAzZW1hY192ZXJpZnlfY29uZmlndXJlO1xcbitcXG4rXFx0aWV0LVxcdTAwM2V2ZXJpZnlfdGltZV9tcyA9IGNmZy1cXHUwMDNldmVyaWZ5X3RpbWU7XFxuK1xcdGlldC1cXHUwMDNldHhfbWluX2ZyYWdfc2l6ZSA9IGNmZy1cXHUwMDNldHhfbWluX2ZyYWdfc2l6ZTtcXG4rXFx0aWV0LVxcdTAwM2VmcGVfZW5hYmxlZCA9IGNmZy1cXHUwMDNldHhfZW5hYmxlZDtcXG4rXFx0aWV0LVxcdTAwM2VtYWNfdmVyaWZ5X2NvbmZpZ3VyZSA9IGNmZy1cXHUwMDNldmVyaWZ5X2VuYWJsZWQ7XFxuK1xcdGVyciA9IGljc3NnX2NvbmZpZ19pZXRmcGUobmRldiwgY2ZnLVxcdTAwM2V0eF9lbmFibGVkKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHQvKiBpY3NzZ19jb25maWdfaWV0ZnBlJ3MgZmFsbGJhY2sgcGF0aCBhbHJlYWR5IGNsZWFyZWQgZnBlX2FjdGl2ZS5cXG4rXFx0XFx0ICogUmVzdG9yZSBhbGwgY29uZmlnIGZpZWxkcyBzbyBnZXRfbW0oKSByZXBvcnRzIHRoZSBjb25maWd1cmF0aW9uXFxuK1xcdFxcdCAqIHRoYXQgaXMgYWN0dWFsbHkgcmVmbGVjdGVkIGluIGhhcmR3YXJlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWV0LVxcdTAwM2V2ZXJpZnlfdGltZV9tcyA9IG9sZF92ZXJpZnlfdGltZV9tcztcXG4rXFx0XFx0aWV0LVxcdTAwM2V0eF9taW5fZnJhZ19zaXplID0gb2xkX3R4X21pbl9mcmFnX3NpemU7XFxuK1xcdFxcdGlldC1cXHUwMDNlZnBlX2VuYWJsZWQgPSBvbGRfZnBlX2VuYWJsZWQ7XFxuK1xcdFxcdGlldC1cXHUwMDNlbWFjX3ZlcmlmeV9jb25maWd1cmUgPSBvbGRfbWFjX3ZlcmlmeV9jb25maWd1cmU7XFxuK1xcdH1cXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpZXQtXFx1MDAzZWZwZV9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVtYWNfZ2V0X21tX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZXRodG9vbF9tbV9zdGF0cyAqcylcXG4re1xcbitcXHRzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFxuK1xcdGlmIChlbWFjLVxcdTAwM2Vpc19zcjEpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmICghZW1hYy1cXHUwMDNlcHJ1ZXRoLVxcdTAwM2VwYV9zdGF0cylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZW1hY191cGRhdGVfaGFyZHdhcmVfc3RhdHMoZW1hYyk7XFxuK1xcbitcXHQvKiBIb2xkIHN0YXRzX2xvY2sgdG8gcHJldmVudCBpY3NzZ19zdGF0c193b3JrX2hhbmRsZXIgZnJvbSB1cGRhdGluZ1xcbitcXHQgKiBwYV9zdGF0c1tdIGJldHdlZW4gcmVhZHMsIHdoaWNoIGNvdWxkIHlpZWxkIGEgdG9ybiB1NjQgdmFsdWUgb25cXG4rXFx0ICogMzItYml0IGFyY2hpdGVjdHVyZXMuXFxuK1xcdCAqL1xcbitcXHRzcGluX2xvY2soXFx1MDAyNmVtYWMtXFx1MDAzZXBydWV0aC1cXHUwMDNlc3RhdHNfbG9jayk7XFxuK1xcdC8qIE1BQ01lcmdlSG9sZENvdW50IHN0YXRzIGlzIG5vdCB0cmFja2VkIGJ5IHRoZSBmaXJtd2FyZSAqL1xcbitcXHRzLVxcdTAwM2VNQUNNZXJnZUZyYW1lQXNzT2tDb3VudCA9IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShlbWFjLCBcXFwiRldfUFJFRU1QVF9BU1NFTUJMWV9PS1xcXCIpO1xcbitcXHRzLVxcdTAwM2VNQUNNZXJnZUZyYW1lQXNzRXJyb3JDb3VudCA9IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShlbWFjLCBcXFwiRldfUFJFRU1QVF9BU1NFTUJMWV9FUlJcXFwiKTtcXG4rXFx0cy1cXHUwMDNlTUFDTWVyZ2VGcmFnQ291bnRSeCA9IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShlbWFjLCBcXFwiRldfUFJFRU1QVF9GUkFHX0NOVF9SWFxcXCIpO1xcbitcXHRzLVxcdTAwM2VNQUNNZXJnZUZyYWdDb3VudFR4ID0gZW1hY19nZXRfc3RhdF9ieV9uYW1lKGVtYWMsIFxcXCJGV19QUkVFTVBUX0ZSQUdfQ05UX1RYXFxcIik7XFxuK1xcdHMtXFx1MDAzZU1BQ01lcmdlRnJhbWVTbWRFcnJvckNvdW50ID0gZW1hY19nZXRfc3RhdF9ieV9uYW1lKGVtYWMsIFxcXCJGV19QUkVFTVBUX0JBRF9GUkFHXFxcIik7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZlbWFjLVxcdTAwM2VwcnVldGgtXFx1MDAzZXN0YXRzX2xvY2spO1xcbit9XFxuK1xcbiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaWNzc2dfZXRodG9vbF9vcHMgPSB7XFxuIFxcdC5nZXRfZHJ2aW5mbyA9IGVtYWNfZ2V0X2RydmluZm8sXFxuIFxcdC5nZXRfbXNnbGV2ZWwgPSBlbWFjX2dldF9tc2dsZXZlbCxcXG5AQCAtMzE3LDUgKzQ0MCw4IEBAIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpY3NzZ19ldGh0b29sX29wcyA9IHtcXG4gXFx0LnNldF9lZWUgPSBlbWFjX3NldF9lZWUsXFxuIFxcdC5ud2F5X3Jlc2V0ID0gZW1hY19ud2F5X3Jlc2V0LFxcbiBcXHQuZ2V0X3Jtb25fc3RhdHMgPSBlbWFjX2dldF9ybW9uX3N0YXRzLFxcbitcXHQuZ2V0X21tID0gZW1hY19nZXRfbW0sXFxuK1xcdC5zZXRfbW0gPSBlbWFjX3NldF9tbSxcXG4rXFx0LmdldF9tbV9zdGF0cyA9IGVtYWNfZ2V0X21tX3N0YXRzLFxcbiB9O1xcbiBFWFBPUlRfU1lNQk9MX0dQTChpY3NzZ19ldGh0b29sX29wcyk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmNcXG5pbmRleCA1OTFiZTVjODA1NmI0Li4yODNiZTI3YTI0MGU5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmNcXG5AQCAtMzU3LDExICszNTcsMTEgQEAgc3RhdGljIHZvaWQgZW1hY19hZGp1c3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAoIWVtYWMtXFx1MDAzZWxpbmspIHtcXG4gXFx0XFx0XFx0bmV3X3N0YXRlID0gdHJ1ZTtcXG4tXFx0XFx0XFx0ZW1hYy1cXHUwMDNlbGluayA9IDE7XFxuK1xcdFxcdFxcdFdSSVRFX09OQ0UoZW1hYy1cXHUwMDNlbGluaywgMSk7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIGlmIChlbWFjLVxcdTAwM2VsaW5rKSB7XFxuIFxcdFxcdG5ld19zdGF0ZSA9IHRydWU7XFxuLVxcdFxcdGVtYWMtXFx1MDAzZWxpbmsgPSAwO1xcbitcXHRcXHRXUklURV9PTkNFKGVtYWMtXFx1MDAzZWxpbmssIDApO1xcbiBcXG4gXFx0XFx0LyogZi93IHNob3VsZCBzdXBwb3J0IDEwMCBcXHUwMDI2IDEwMDAgKi9cXG4gXFx0XFx0ZW1hYy1cXHUwMDNlc3BlZWQgPSBTUEVFRF8xMDAwO1xcbkBAIC0zOTIsNiArMzkyLDggQEAgc3RhdGljIHZvaWQgZW1hY19hZGp1c3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0aWNzc2dfc2V0X3BvcnRfc3RhdGUoZW1hYywgSUNTU0dfRU1BQ19QT1JUX0RJU0FCTEUpO1xcbiBcXHRcXHR9XFxuK1xcbitcXHRcXHRpY3NzZ19xb3NfbGlua19zdGF0ZV91cGRhdGUobmRldik7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChlbWFjLVxcdTAwM2VsaW5rKSB7XFxuQEAgLTE2NTIsNiArMTY1NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZW1hY19uZXRkZXZfb3BzID0ge1xcbiBcXHQubmRvX2h3dHN0YW1wX2dldCA9IGljc3NnX25kb19nZXRfdHNfY29uZmlnLFxcbiBcXHQubmRvX2h3dHN0YW1wX3NldCA9IGljc3NnX25kb19zZXRfdHNfY29uZmlnLFxcbiBcXHQubmRvX3hza193YWtldXAgPSBwcnVldGhfeHNrX3dha2V1cCxcXG4rXFx0Lm5kb19zZXR1cF90YyA9IGljc3NnX3Fvc19uZG9fc2V0dXBfdGMsXFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IHBydWV0aF9uZXRkZXZfaW5pdChzdHJ1Y3QgcHJ1ZXRoICpwcnVldGgsXFxuQEAgLTE2ODYsNiArMTY4OSw4IEBAIHN0YXRpYyBpbnQgcHJ1ZXRoX25ldGRldl9pbml0KHN0cnVjdCBwcnVldGggKnBydWV0aCxcXG4gXFxuIFxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZlbWFjLVxcdTAwM2VzdGF0c193b3JrLCBpY3NzZ19zdGF0c193b3JrX2hhbmRsZXIpO1xcbiBcXG4rXFx0aWNzc2dfcW9zX2luaXQobmRldik7XFxuK1xcbiBcXHRyZXQgPSBwcnVzc19yZXF1ZXN0X21lbV9yZWdpb24ocHJ1ZXRoLVxcdTAwM2VwcnVzcyxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHBvcnQgPT0gUFJVRVRIX1BPUlRfTUlJMCA/XFxuIFxcdFxcdFxcdFxcdCAgICAgICBQUlVTU19NRU1fRFJBTTAgOiBQUlVTU19NRU1fRFJBTTEsXFxuQEAgLTE3OTMsNiArMTc5OCw3IEBAIHN0YXRpYyBpbnQgcHJ1ZXRoX25ldGRldl9pbml0KHN0cnVjdCBwcnVldGggKnBydWV0aCxcXG4gZnJlZTpcXG4gXFx0cHJ1c3NfcmVsZWFzZV9tZW1fcmVnaW9uKHBydWV0aC1cXHUwMDNlcHJ1c3MsIFxcdTAwMjZlbWFjLVxcdTAwM2VkcmFtKTtcXG4gZnJlZV9uZGV2OlxcbitcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZlbWFjLVxcdTAwM2Vxb3MuaWV0LmZwZV9sb2NrKTtcXG4gXFx0ZW1hYy1cXHUwMDNlbmRldiA9IE5VTEw7XFxuIFxcdHBydWV0aC1cXHUwMDNlZW1hY1ttYWNdID0gTlVMTDtcXG4gXFx0ZnJlZV9uZXRkZXYobmRldik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmhcXG5pbmRleCBkZjkzZDE1YzViNzg2Li5hZDkwNjE0MDgwNTBlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmhcXG5AQCAtNDQsMTAgKzQ0LDEyIEBAXFxuICNpbmNsdWRlIFxcXCJpY3NzZ19jb25maWcuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImljc3NfaWVwLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJpY3NzZ19zd2l0Y2hfbWFwLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJpY3NzZ19xb3MuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImljc3NnX3N0YXRzLmhcXFwiXFxuIFxcbi0jZGVmaW5lIFBSVUVUSF9NQVhfTVRVICAgICAgICAgICgyMDAwIC0gRVRIX0hMRU4gLSBFVEhfRkNTX0xFTilcXG4tI2RlZmluZSBQUlVFVEhfTUlOX1BLVF9TSVpFICAgICAoVkxBTl9FVEhfWkxFTilcXG4tI2RlZmluZSBQUlVFVEhfTUFYX1BLVF9TSVpFICAgICAoUFJVRVRIX01BWF9NVFUgKyBFVEhfSExFTiArIEVUSF9GQ1NfTEVOKVxcbisjZGVmaW5lIFBSVUVUSF9NQVhfTVRVXFx0XFx0KDIwMDAgLSBFVEhfSExFTiAtIEVUSF9GQ1NfTEVOKVxcbisjZGVmaW5lIFBSVUVUSF9NSU5fUEtUX1NJWkVcXHQoVkxBTl9FVEhfWkxFTilcXG4rI2RlZmluZSBQUlVFVEhfTUFYX1BLVF9TSVpFXFx0KFBSVUVUSF9NQVhfTVRVICsgRVRIX0hMRU4gKyBFVEhfRkNTX0xFTilcXG4gXFxuICNkZWZpbmUgSUNTU19TTElDRTBcXHQwXFxuICNkZWZpbmUgSUNTU19TTElDRTFcXHQxXFxuQEAgLTU3LDEyICs1OSwxNiBAQFxcbiBcXG4gI2RlZmluZSBJQ1NTR19NQVhfUkZMT1dTXFx0OFxcdC8qIHBlciBzbGljZSAqL1xcbiBcXG4tI2RlZmluZSBJQ1NTR19OVU1fUEFfU1RBVFNcXHQzMlxcbi0jZGVmaW5lIElDU1NHX05VTV9NSUlHX1NUQVRTXFx0NjBcXG4rI2RlZmluZSBJQ1NTR19OVU1fUEFfU1RBVFNcXHRBUlJBWV9TSVpFKGljc3NnX2FsbF9wYV9zdGF0cylcXG4rI2RlZmluZSBJQ1NTR19OVU1fTUlJR19TVEFUU1xcdEFSUkFZX1NJWkUoaWNzc2dfYWxsX21paWdfc3RhdHMpXFxuIC8qIE51bWJlciBvZiBJQ1NTRyByZWxhdGVkIHN0YXRzICovXFxuICNkZWZpbmUgSUNTU0dfTlVNX1NUQVRTIChJQ1NTR19OVU1fTUlJR19TVEFUUyArIElDU1NHX05VTV9QQV9TVEFUUylcXG4rLyogTUlJRyBzdGF0cyB3aXRoIHN0YW5kYXJkIHVBUEkgZXF1aXZhbGVudHMgKGV4Y2x1ZGVkIGZyb20gZXRodG9vbCAtUykgKi9cXG4gI2RlZmluZSBJQ1NTR19OVU1fU1RBTkRBUkRfU1RBVFMgMzFcXG4tI2RlZmluZSBJQ1NTR19OVU1fRVRIVE9PTF9TVEFUUyAoSUNTU0dfTlVNX1NUQVRTIC0gSUNTU0dfTlVNX1NUQU5EQVJEX1NUQVRTKVxcbisvKiBQQSBzdGF0cyB3aXRoIHN0YW5kYXJkIHVBUEkgZXF1aXZhbGVudHMsIGV4cG9zZWQgdmlhIGdldF9tbV9zdGF0cyBvbmx5ICovXFxuKyNkZWZpbmUgSUNTU0dfTlVNX1BBX1NUQU5EQVJEX1NUQVRTIDVcXG4rI2RlZmluZSBJQ1NTR19OVU1fRVRIVE9PTF9TVEFUUyAoSUNTU0dfTlVNX1NUQVRTIC0gSUNTU0dfTlVNX1NUQU5EQVJEX1NUQVRTIC0gXFxcXFxcbitcXHRcXHRcXHRcXHQgSUNTU0dfTlVNX1BBX1NUQU5EQVJEX1NUQVRTKVxcbiBcXG4gI2RlZmluZSBJRVBfREVGQVVMVF9DWUNMRV9USU1FX05TXFx0MTAwMDAwMFxcdC8qIDEgbXMgKi9cXG4gXFxuQEAgLTI1NCw2ICsyNjAsNyBAQCBzdHJ1Y3QgcHJ1ZXRoX2VtYWMge1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nO1xcbiBcXHRzdHJ1Y3QgeGRwX2F0dGFjaG1lbnRfaW5mbyB4ZHBpO1xcbiBcXHRpbnQgeHNrX3FpZDtcXG4rXFx0c3RydWN0IHBydWV0aF9xb3MgcW9zO1xcbiB9O1xcbiBcXG4gLyogVGhlIGJ1ZiBpbmNsdWRlcyBoZWFkcm9vbSBjb21wYXRpYmxlIHdpdGggYm90aCBza2IgYW5kIHhkcGYgKi9cXG5AQCAtNDU4LDcgKzQ2NSw3IEBAIGludCBlbWFjX2ZkYl9mbG93X2lkX3VwZGF0ZWQoc3RydWN0IHBydWV0aF9lbWFjICplbWFjKTtcXG4gXFxuIHZvaWQgaWNzc2dfc3RhdHNfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuIHZvaWQgZW1hY191cGRhdGVfaGFyZHdhcmVfc3RhdHMoc3RydWN0IHBydWV0aF9lbWFjICplbWFjKTtcXG4taW50IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMsIGNoYXIgKnN0YXRfbmFtZSk7XFxuK3U2NCBlbWFjX2dldF9zdGF0X2J5X25hbWUoc3RydWN0IHBydWV0aF9lbWFjICplbWFjLCBjaGFyICpzdGF0X25hbWUpO1xcbiBcXG4gLyogQ29tbW9uIGZ1bmN0aW9ucyAqL1xcbiB2b2lkIHBydWV0aF9jbGVhbnVwX3J4X2NobnMoc3RydWN0IHBydWV0aF9lbWFjICplbWFjLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3Fvcy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yN2E5NTNkOTgxNTM4XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3Fvcy5jXFxuQEAgLTAsMCArMSwzMDUgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogVGV4YXMgSW5zdHJ1bWVudHMgSUNTU0cgUFJVRVRIIFFvUyBzdWJtb2R1bGVcXG4rICogQ29weXJpZ2h0IChDKSAyMDIzIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tL1xcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcXCJpY3NzZ19wcnVldGguaFxcXCJcXG4rI2luY2x1ZGUgXFxcImljc3NnX3N3aXRjaF9tYXAuaFxcXCJcXG4rXFxuK3N0YXRpYyB2b2lkIGljc3NnX2lldF9zZXRfcHJlZW1wdF9tYXNrKHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYylcXG4re1xcbitcXHR2b2lkIF9faW9tZW0gKmNvbmZpZyA9IGVtYWMtXFx1MDAzZWRyYW0udmEgKyBJQ1NTR19DT05GSUdfT0ZGU0VUO1xcbitcXHRzdHJ1Y3QgcHJ1ZXRoX3Fvc19tcXByaW8gKnBfbXFwcmlvID0gXFx1MDAyNmVtYWMtXFx1MDAzZXFvcy5tcXByaW87XFxuK1xcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFxcdTAwMjZwX21xcHJpby1cXHUwMDNlcW9wdDtcXG4rXFx0c3RydWN0IHBydWV0aF9xb3NfaWV0ICppZXQgPSBcXHUwMDI2ZW1hYy1cXHUwMDNlcW9zLmlldDtcXG4rXFx0aW50IHByZW1wdF9tYXNrID0gMCwgaTtcXG4rXFx0dTggdGMsIG51bV90YztcXG4rXFxuK1xcdGlmICghaWV0LVxcdTAwM2VwcmVlbXB0aWJsZV90Y3MpXFxuK1xcdFxcdGdvdG8gcmVzZXRfaHc7XFxuK1xcbitcXHRpZiAoaWV0LVxcdTAwM2VmcGVfYWN0aXZlKSB7XFxuK1xcdFxcdC8qIFJlc2V0IGFsbCBRX01BUCBlbnRyaWVzIGZpcnN0IHRvIGNsZWFyIGFueSBzdGFsZSBwcmVlbXB0aWJsZVxcbitcXHRcXHQgKiBlbnRyaWVzIGZyb20gYSBwcmlvciB3aWRlciBUQyBtYXBwaW5nLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElDU1NHX01BWF9UQ19RVUVVRVM7IGkrKylcXG4rXFx0XFx0XFx0d3JpdGViKDAsIGNvbmZpZyArIEVYUFJFU1NfUFJFX0VNUFRJVkVfUV9NQVAgKyBpKTtcXG4rXFxuK1xcdFxcdC8qIENvbmZpZ3VyZSBxdWV1ZXMgZm9yIHVzZXIgcmVxdWVzdGVkIHByZWVtcHRpYmxlIHRjIG1hcCAqL1xcbitcXHRcXHRudW1fdGMgPSBwX21xcHJpby1cXHUwMDNlcW9wdC5udW1fdGM7XFxuK1xcdFxcdGZvciAodGMgPSAwOyB0YyBcXHUwMDNjIG51bV90YzsgdGMrKykge1xcbitcXHRcXHRcXHQvKiBjaGVjayBpZiB0aGUgdGMgaXMgcHJlZW1wdGl2ZSBvciBub3QgKi9cXG4rXFx0XFx0XFx0aWYgKGlldC1cXHUwMDNlcHJlZW1wdGlibGVfdGNzIFxcdTAwMjYgQklUKHRjKSkge1xcbitcXHRcXHRcXHRcXHQvKiBTZXQgdGhlIHF1ZXVlcyBhcyBwcmVlbXB0aXZlIHF1ZXVlcyAqL1xcbitcXHRcXHRcXHRcXHRmb3IgKGkgPSBxb3B0LVxcdTAwM2VvZmZzZXRbdGNdOyBpIFxcdTAwM2MgcW9wdC1cXHUwMDNlb2Zmc2V0W3RjXSArIHFvcHQtXFx1MDAzZWNvdW50W3RjXTsgaSsrKSB7XFxuK1xcdFxcdFxcdFxcdFxcdHdyaXRlYihCSVQoNCksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBjb25maWcgKyBFWFBSRVNTX1BSRV9FTVBUSVZFX1FfTUFQICsgaSk7XFxuK1xcdFxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0XFx0LyogQWNjdW11bGF0ZSBleHByZXNzIHF1ZXVlIGJpdHMgZm9yIHRoZSBtYXNrICovXFxuK1xcdFxcdFxcdFxcdGZvciAoaSA9IHFvcHQtXFx1MDAzZW9mZnNldFt0Y107IGkgXFx1MDAzYyBxb3B0LVxcdTAwM2VvZmZzZXRbdGNdICsgcW9wdC1cXHUwMDNlY291bnRbdGNdOyBpKyspXFxuK1xcdFxcdFxcdFxcdFxcdHByZW1wdF9tYXNrIHw9IEJJVChpKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdFxcdHdyaXRlYihwcmVtcHRfbWFzaywgY29uZmlnICsgRVhQUkVTU19QUkVfRU1QVElWRV9RX01BU0spO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK3Jlc2V0X2h3OlxcbitcXHQvKiBSZXNldCB0byBkZWZhdWx0OiBhbGwgcXVldWVzIGFzIGV4cHJlc3MgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElDU1NHX01BWF9UQ19RVUVVRVM7IGkrKylcXG4rXFx0XFx0d3JpdGViKDAsIGNvbmZpZyArIEVYUFJFU1NfUFJFX0VNUFRJVkVfUV9NQVAgKyBpKTtcXG4rXFx0d3JpdGViKElDU1NHX0VYUFJFU1NfUV9NQVNLX0FMTCwgY29uZmlnICsgRVhQUkVTU19QUkVfRU1QVElWRV9RX01BU0spO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGljc3NnX2lldF92ZXJpZnlfd2FpdChzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMpXFxuK3tcXG4rXFx0dm9pZCBfX2lvbWVtICpjb25maWcgPSBlbWFjLVxcdTAwM2VkcmFtLnZhICsgSUNTU0dfQ09ORklHX09GRlNFVDtcXG4rXFx0c3RydWN0IHBydWV0aF9xb3NfaWV0ICppZXQgPSBcXHUwMDI2ZW1hYy1cXHUwMDNlcW9zLmlldDtcXG4rXFx0dW5zaWduZWQgbG9uZyBkZWxheV91cywgdGltZW91dF91cztcXG4rXFx0dTMyIHN0YXR1cztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGRlbGF5X3VzID0gaWV0LVxcdTAwM2V2ZXJpZnlfdGltZV9tcyAqIDEwMDA7XFxuK1xcdHRpbWVvdXRfdXMgPSBkZWxheV91cyAqIElDU1NHX0lFVF9WRVJJRllfQVRURU1QVFM7XFxuK1xcbitcXHRyZXQgPSByZWFkYl9wb2xsX3RpbWVvdXQoY29uZmlnICsgUFJFX0VNUFRJT05fVkVSSUZZX1NUQVRVUyxcXG4rXFx0XFx0XFx0XFx0IHN0YXR1cyxcXG4rXFx0XFx0XFx0XFx0IHN0YXR1cyA9PSBJQ1NTR19JRVRGUEVfU1RBVEVfU1VDQ0VFREVEIHx8XFxuK1xcdFxcdFxcdFxcdCBzdGF0dXMgPT0gSUNTU0dfSUVURlBFX1NUQVRFX0ZBSUxFRCxcXG4rXFx0XFx0XFx0XFx0IGRlbGF5X3VzLFxcbitcXHRcXHRcXHRcXHQgdGltZW91dF91cyk7XFxuK1xcbitcXHRpZXQtXFx1MDAzZXZlcmlmeV9zdGF0dXMgPSBzdGF0dXM7XFxuK1xcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IHN0YXR1cyA9PSBJQ1NTR19JRVRGUEVfU1RBVEVfRkFJTEVEKVxcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyogRGlyZWN0IHN5bmNocm9ub3VzIGNvbmZpZ3VyYXRpb24gb2YgSUVUIEZQRS5cXG4rICogQ2FsbGVyIG11c3QgaG9sZCBpZXQtXFx1MDAzZWZwZV9sb2NrLlxcbisgKi9cXG4raW50IGljc3NnX2NvbmZpZ19pZXRmcGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGJvb2wgZW5hYmxlKVxcbit7XFxuK1xcdHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYyA9IG5ldGRldl9wcml2KG5kZXYpO1xcbitcXHR2b2lkIF9faW9tZW0gKmNvbmZpZyA9IGVtYWMtXFx1MDAzZWRyYW0udmEgKyBJQ1NTR19DT05GSUdfT0ZGU0VUO1xcbitcXHRzdHJ1Y3QgcHJ1ZXRoX3Fvc19pZXQgKmlldCA9IFxcdTAwMjZlbWFjLVxcdTAwM2Vxb3MuaWV0O1xcbitcXHRpbnQgcmV0O1xcbitcXHR1OCB2YWw7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZpZXQtXFx1MDAzZWZwZV9sb2NrKTtcXG4rXFxuK1xcdGlmICghUkVBRF9PTkNFKGVtYWMtXFx1MDAzZWxpbmspKSB7XFxuK1xcdFxcdG5ldGRldl9kYmcobmRldiwgXFxcImNhbm5vdCBjaGFuZ2UgSUVUL0ZQRSBzdGF0ZSB3aGVuIGludGVyZmFjZSBpcyBkb3duXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFVwZGF0ZSBGUEUgVHggZW5hYmxlIGJpdCAoUFJFX0VNUFRJT05fRU5BQkxFX1RYKSBpZlxcbitcXHQgKiBmcGVfZW5hYmxlZCBpcyBzZXQgdG8gZW5hYmxlIE1NIGluIFR4IGRpcmVjdGlvblxcbitcXHQgKi9cXG4rXFx0d3JpdGViKGVuYWJsZSA/IDEgOiAwLCBjb25maWcgKyBQUkVfRU1QVElPTl9FTkFCTEVfVFgpO1xcbitcXHR3cml0ZXcoaWV0LVxcdTAwM2V0eF9taW5fZnJhZ19zaXplICsgRVRIX0ZDU19MRU4sXFxuK1xcdCAgICAgICBjb25maWcgKyBQUkVfRU1QVElPTl9BRERfRlJBR19TSVpFX0xPQ0FMKTtcXG4rXFxuK1xcdC8qIElmIEZQRSBpcyB0byBiZSBlbmFibGVkLCBmaXJzdCBjb25maWd1cmUgTUFDIFZlcmlmeSBzdGF0ZVxcbitcXHQgKiBtYWNoaW5lIGluIGZpcm13YXJlIGFzIGZpcm13YXJlIGtpY2tzIHRoZSBWZXJpZnkgcHJvY2Vzc1xcbitcXHQgKiBhcyBzb29uIGFzIElDU1NHX0VNQUNfUE9SVF9QUkVNUFRfVFhfRU5BQkxFIGNvbW1hbmQgaXNcXG4rXFx0ICogcmVjZWl2ZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAoZW5hYmxlIFxcdTAwMjZcXHUwMDI2IGlldC1cXHUwMDNlbWFjX3ZlcmlmeV9jb25maWd1cmUpIHtcXG4rXFx0XFx0d3JpdGViKDEsIGNvbmZpZyArIFBSRV9FTVBUSU9OX0VOQUJMRV9WRVJJRlkpO1xcbitcXHRcXHR3cml0ZWwoaWV0LVxcdTAwM2V2ZXJpZnlfdGltZV9tcywgY29uZmlnICsgUFJFX0VNUFRJT05fVkVSSUZZX1RJTUUpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHR3cml0ZWIoMCwgY29uZmlnICsgUFJFX0VNUFRJT05fRU5BQkxFX1ZFUklGWSk7XFxuK1xcdFxcdGlldC1cXHUwMDNldmVyaWZ5X3N0YXR1cyA9IElDU1NHX0lFVEZQRV9TVEFURV9ESVNBQkxFRDtcXG4rXFx0fVxcbitcXG4rXFx0LyogU2VuZCBjb21tYW5kIHRvIGVuYWJsZSBGUEUgVHggc2lkZS4gUnggaXMgYWx3YXlzIGVuYWJsZWQgKi9cXG4rXFx0cmV0ID0gaWNzc2dfc2V0X3BvcnRfc3RhdGUoZW1hYyxcXG4rXFx0XFx0XFx0XFx0ICAgZW5hYmxlID8gSUNTU0dfRU1BQ19QT1JUX1BSRU1QVF9UWF9FTkFCTEUgOlxcbitcXHRcXHRcXHRcXHRcXHQgICAgSUNTU0dfRU1BQ19QT1JUX1BSRU1QVF9UWF9ESVNBQkxFKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5kZXYsIFxcXCJUWCBwcmVlbXB0ICVzIGNvbW1hbmQgZmFpbGVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBzdHJfZW5hYmxlX2Rpc2FibGUoZW5hYmxlKSk7XFxuK1xcdFxcdGdvdG8gZmFsbGJhY2s7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChlbmFibGUgXFx1MDAyNlxcdTAwMjYgaWV0LVxcdTAwM2VtYWNfdmVyaWZ5X2NvbmZpZ3VyZSkge1xcbitcXHRcXHRyZXQgPSBpY3NzZ19pZXRfdmVyaWZ5X3dhaXQoZW1hYyk7XFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0bmV0ZGV2X2VycihuZGV2LCBcXFwiTUFDIE1lcmdlIHZlcmlmaWNhdGlvbiBmYWlsZWQ6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBpZXQtXFx1MDAzZXZlcmlmeV9zdGF0dXMgPT0gSUNTU0dfSUVURlBFX1NUQVRFX0ZBSUxFRCA/XFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJsaW5rIHBhcnRuZXIgcmVqZWN0ZWRcXFwiIDogXFxcInRpbWVvdXRcXFwiKTtcXG4rXFx0XFx0XFx0Z290byBkaXNhYmxlX3R4O1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSBpZiAoZW5hYmxlKSB7XFxuK1xcdFxcdC8qIEdpdmUgZmlybXdhcmUgc29tZSB0aW1lIHRvIHVwZGF0ZVxcbitcXHRcXHQgKiBQUkVfRU1QVElPTl9BQ1RJVkVfVFggc3RhdGVcXG4rXFx0XFx0ICovXFxuK1xcdFxcdHVzbGVlcF9yYW5nZSgxMDAsIDIwMCk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChlbmFibGUpIHtcXG4rXFx0XFx0dmFsID0gcmVhZGIoY29uZmlnICsgUFJFX0VNUFRJT05fQUNUSVZFX1RYKTtcXG4rXFx0XFx0aWYgKHZhbCAhPSAxKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIkZpcm13YXJlIGZhaWxzIHRvIGFjdGl2YXRlIElFVC9GUEVcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXQgPSAtRUlPO1xcbitcXHRcXHRcXHRnb3RvIGRpc2FibGVfdHg7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWV0LVxcdTAwM2VmcGVfYWN0aXZlID0gdHJ1ZTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aWV0LVxcdTAwM2VmcGVfYWN0aXZlID0gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdGljc3NnX2lldF9zZXRfcHJlZW1wdF9tYXNrKGVtYWMpO1xcbitcXHRuZXRkZXZfZGJnKG5kZXYsIFxcXCJJRVQgRlBFICVzIHN1Y2Nlc3NmdWxseVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgc3RyX2VuYWJsZV9kaXNhYmxlKGVuYWJsZSkpO1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Rpc2FibGVfdHg6XFxuK1xcdGljc3NnX3NldF9wb3J0X3N0YXRlKGVtYWMsIElDU1NHX0VNQUNfUE9SVF9QUkVNUFRfVFhfRElTQUJMRSk7XFxuK2ZhbGxiYWNrOlxcbitcXHR3cml0ZWIoMCwgY29uZmlnICsgUFJFX0VNUFRJT05fRU5BQkxFX1RYKTtcXG4rXFx0d3JpdGViKDAsIGNvbmZpZyArIFBSRV9FTVBUSU9OX0VOQUJMRV9WRVJJRlkpO1xcbitcXHRpZXQtXFx1MDAzZXZlcmlmeV9zdGF0dXMgPSBJQ1NTR19JRVRGUEVfU1RBVEVfRElTQUJMRUQ7XFxuK1xcdGlldC1cXHUwMDNlZnBlX2FjdGl2ZSA9IGZhbHNlO1xcbitcXHRpY3NzZ19pZXRfc2V0X3ByZWVtcHRfbWFzayhlbWFjKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rdm9pZCBpY3NzZ19xb3NfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFx0c3RydWN0IHBydWV0aF9xb3NfaWV0ICppZXQgPSBcXHUwMDI2ZW1hYy1cXHUwMDNlcW9zLmlldDtcXG4rXFxuK1xcdG11dGV4X2luaXQoXFx1MDAyNmlldC1cXHUwMDNlZnBlX2xvY2spO1xcbitcXHQvKiBTZXQgZGVmYXVsdCB2YWx1ZXMgdG8gcHJldmVudCBnYXJiYWdlIHZhbHVlcyBkdXJpbmcgLmdldF9tbSgpICovXFxuK1xcdGlldC1cXHUwMDNldmVyaWZ5X3RpbWVfbXMgPSBJQ1NTR19JRVRfTUFYX1ZFUklGWV9USU1FO1xcbitcXHRpZXQtXFx1MDAzZXR4X21pbl9mcmFnX3NpemUgPSBFVEhfWkxFTjtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChpY3NzZ19xb3NfaW5pdCk7XFxuK1xcbitzdGF0aWMgaW50IGljc3NnX2lldF9jaGFuZ2VfcHJlZW1wdGlibGVfdGNzKHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYylcXG4re1xcbitcXHRzdHJ1Y3QgcHJ1ZXRoX3Fvc19pZXQgKmlldCA9IFxcdTAwMjZlbWFjLVxcdTAwM2Vxb3MuaWV0O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2aWV0LVxcdTAwM2VmcGVfbG9jayk7XFxuK1xcdGlmICghaWV0LVxcdTAwM2VmcGVfZW5hYmxlZCBcXHUwMDI2XFx1MDAyNiAhaWV0LVxcdTAwM2VwcmVlbXB0aWJsZV90Y3MpIHtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpZXQtXFx1MDAzZWZwZV9sb2NrKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFx0cmV0ID0gaWNzc2dfY29uZmlnX2lldGZwZShlbWFjLVxcdTAwM2VuZGV2LCBpZXQtXFx1MDAzZWZwZV9lbmFibGVkKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpZXQtXFx1MDAzZWZwZV9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZW1hY190Y19xdWVyeV9jYXBzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB2b2lkICp0eXBlX2RhdGEpXFxuK3tcXG4rXFx0c3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSA9IHR5cGVfZGF0YTtcXG4rXFxuK1xcdHN3aXRjaCAoYmFzZS1cXHUwMDNldHlwZSkge1xcbitcXHRjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzoge1xcbitcXHRcXHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHMgPSBiYXNlLVxcdTAwM2VjYXBzO1xcbitcXG4rXFx0XFx0Y2Fwcy1cXHUwMDNldmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZW1hY190Y19zZXR1cF9tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHZvaWQgKnR5cGVfZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFx0c3RydWN0IHBydWV0aF9xb3NfbXFwcmlvICpwX21xcHJpbyA9IFxcdTAwMjZlbWFjLVxcdTAwM2Vxb3MubXFwcmlvO1xcbitcXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvID0gdHlwZV9kYXRhO1xcbitcXHRzdHJ1Y3QgcHJ1ZXRoX3Fvc19pZXQgKmlldCA9IFxcdTAwMjZlbWFjLVxcdTAwM2Vxb3MuaWV0O1xcbitcXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcXHUwMDI2bXFwcmlvLVxcdTAwM2Vxb3B0O1xcbitcXHRpbnQgdGMsIG9mZnNldCwgY291bnQ7XFxuK1xcbitcXHQvKiBWYWxpZGF0ZSBwYXJhbWV0ZXJzICovXFxuK1xcdGlmIChxb3B0LVxcdTAwM2VudW1fdGMgXFx1MDAzZSBJQ1NTR19NQVhfVENfUVVFVUVTKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmRldiwgXFxcIk51bWJlciBvZiB0cmFmZmljIGNsYXNzZXMgKCV1KSBleGNlZWRzIGhhcmR3YXJlIGxpbWl0XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBxb3B0LVxcdTAwM2VudW1fdGMpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfU0hBUEVSKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmRldiwgXFxcInRyYWZmaWMgc2hhcGluZyBpcyBub3Qgc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IChUQ19NUVBSSU9fRl9NSU5fUkFURSB8IFRDX01RUFJJT19GX01BWF9SQVRFKSkge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5kZXYsIFxcXCJwZXItcXVldWUgcmF0ZSBsaW1pdGluZyBpcyBub3Qgc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIXFvcHQtXFx1MDAzZW51bV90Yykge1xcbitcXHRcXHRuZXRkZXZfcmVzZXRfdGMobmRldik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdG5ldGRldl9zZXRfbnVtX3RjKG5kZXYsIHFvcHQtXFx1MDAzZW51bV90Yyk7XFxuK1xcbitcXHRcXHRmb3IgKHRjID0gMDsgdGMgXFx1MDAzYyBxb3B0LVxcdTAwM2VudW1fdGM7IHRjKyspIHtcXG4rXFx0XFx0XFx0Y291bnQgPSBxb3B0LVxcdTAwM2Vjb3VudFt0Y107XFxuK1xcdFxcdFxcdG9mZnNldCA9IHFvcHQtXFx1MDAzZW9mZnNldFt0Y107XFxuK1xcdFxcdFxcdG5ldGRldl9zZXRfdGNfcXVldWUobmRldiwgdGMsIGNvdW50LCBvZmZzZXQpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmlldC1cXHUwMDNlZnBlX2xvY2spO1xcbitcXHRpZiAoIXFvcHQtXFx1MDAzZW51bV90Yykge1xcbitcXHRcXHRpZXQtXFx1MDAzZXByZWVtcHRpYmxlX3RjcyA9IDA7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdG1lbWNweShcXHUwMDI2cF9tcXByaW8tXFx1MDAzZXFvcHQsIHFvcHQsIHNpemVvZigqcW9wdCkpO1xcbitcXHRcXHRpZXQtXFx1MDAzZXByZWVtcHRpYmxlX3RjcyA9IG1xcHJpby1cXHUwMDNlcHJlZW1wdGlibGVfdGNzO1xcbitcXHR9XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2aWV0LVxcdTAwM2VmcGVfbG9jayk7XFxuK1xcbitcXHRuZXRkZXZfZGJnKG5kZXYsIFxcXCJkZXYtXFx1MDAzZW51bV90YyAldSBkZXYtXFx1MDAzZXJlYWxfbnVtX3R4X3F1ZXVlcyAldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgbmRldi1cXHUwMDNlbnVtX3RjLCBuZGV2LVxcdTAwM2VyZWFsX251bV90eF9xdWV1ZXMpO1xcbitcXG4rXFx0cmV0dXJuIGljc3NnX2lldF9jaGFuZ2VfcHJlZW1wdGlibGVfdGNzKGVtYWMpO1xcbit9XFxuK1xcbitpbnQgaWNzc2dfcW9zX25kb19zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXFxuK1xcdFxcdFxcdCAgIHZvaWQgKnR5cGVfZGF0YSlcXG4re1xcbitcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBUQ19RVUVSWV9DQVBTOlxcbitcXHRcXHRyZXR1cm4gZW1hY190Y19xdWVyeV9jYXBzKG5kZXYsIHR5cGVfZGF0YSk7XFxuK1xcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOlxcbitcXHRcXHRyZXR1cm4gZW1hY190Y19zZXR1cF9tcXByaW8obmRldiwgdHlwZV9kYXRhKTtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoaWNzc2dfcW9zX25kb19zZXR1cF90Yyk7XFxuK1xcbit2b2lkIGljc3NnX3Fvc19saW5rX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFx0c3RydWN0IHBydWV0aF9xb3NfaWV0ICppZXQgPSBcXHUwMDI2ZW1hYy1cXHUwMDNlcW9zLmlldDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghUkVBRF9PTkNFKGVtYWMtXFx1MDAzZWxpbmspKSB7XFxuK1xcdFxcdC8qIENsZWFyIEZQRSBhY3RpdmUgc3RhdGUgb24gbGluay1kb3duIHNvIGdldF9tbSgpIHJlcG9ydHNcXG4rXFx0XFx0ICogYWNjdXJhdGUgdHhfYWN0aXZlIGFuZCB2ZXJpZnlfc3RhdHVzIHdoaWxlIGxpbmsgaXMgZG93bi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG11dGV4X2xvY2soXFx1MDAyNmlldC1cXHUwMDNlZnBlX2xvY2spO1xcbitcXHRcXHRpZXQtXFx1MDAzZWZwZV9hY3RpdmUgPSBmYWxzZTtcXG4rXFx0XFx0aWV0LVxcdTAwM2V2ZXJpZnlfc3RhdHVzID0gSUNTU0dfSUVURlBFX1NUQVRFX0RJU0FCTEVEO1xcbitcXHRcXHRpY3NzZ19pZXRfc2V0X3ByZWVtcHRfbWFzayhlbWFjKTtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpZXQtXFx1MDAzZWZwZV9sb2NrKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBpY3NzZ19pZXRfY2hhbmdlX3ByZWVtcHRpYmxlX3RjcyhlbWFjKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0bmV0ZGV2X2RiZyhuZGV2LCBcXFwiSUVUIEZQRSAlcyBmYWlsZWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIHN0cl9lbmFibGVfZGlzYWJsZShpZXQtXFx1MDAzZWZwZV9lbmFibGVkKSk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoaWNzc2dfcW9zX2xpbmtfc3RhdGVfdXBkYXRlKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcW9zLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19xb3MuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTgyNmNlNGJjZmQ5Nlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19xb3MuaFxcbkBAIC0wLDAgKzEsNjggQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rLyogQ29weXJpZ2h0IChDKSAyMDIzIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tL1xcbisgKi9cXG4rXFxuKyNpZm5kZWYgX19ORVRfVElfSUNTU0dfUU9TX0hcXG4rI2RlZmluZSBfX05FVF9USV9JQ1NTR19RT1NfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2F0b21pYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X3NjaGVkLmhcXHUwMDNlXFxuK1xcbisjZGVmaW5lIElDU1NHX01BWF9UQ19RVUVVRVNcXHRcXHRcXHQ4XFxuKyNkZWZpbmUgSUNTU0dfRVhQUkVTU19RX01BU0tfQUxMXFx0XFx0MHhGRlxcbisjZGVmaW5lIElDU1NHX0lFVF9NQVhfVkVSSUZZX1RJTUVcXHRcXHQxMjhcXG4rI2RlZmluZSBJQ1NTR19JRVRfTUlOX1ZFUklGWV9USU1FXFx0XFx0MVxcbisjZGVmaW5lIElDU1NHX0lFVF9WRVJJRllfQVRURU1QVFNcXHRcXHQzXFxuK1xcbisvKipcXG4rICogZW51bSBpY3NzZ19pZXRmcGVfdmVyaWZ5X3N0YXRlcyAtIHN0YXR1cyBvZiBNTSBWZXJpZnkgcmV0dXJuZWQgYnkgZmlybXdhcmVcXG4rICogQElDU1NHX0lFVEZQRV9TVEFURV9VTktOT1dOOlxcbisgKlxcdHZlcmlmaWNhdGlvbiBzdGF0dXMgaXMgdW5rbm93blxcbisgKiBASUNTU0dfSUVURlBFX1NUQVRFX0lOSVRJQUw6XFxuKyAqXFx0RmlybXdhcmUgcmV0dXJucyB0aGlzIGlmIHZlcmlmeSBzdGF0ZSBkaWFncmFtIGlzIGlkbGVcXG4rICogQElDU1NHX0lFVEZQRV9TVEFURV9WRVJJRllJTkc6XFxuKyAqXFx0RmlybXdhcmUgcmV0dXJucyB0aGlzIGlmIHZlcmlmaWNhdGlvbiBpcyBvbmdvaW5nXFxuKyAqIEBJQ1NTR19JRVRGUEVfU1RBVEVfU1VDQ0VFREVEOlxcbisgKlxcdEZpcm13YXJlIHJldHVybnMgdGhpcyBpZiB2ZXJpZnkgc3RhdGUgZGlhZ3JhbSBjb21wbGV0ZXMgdmVyaWZpY2F0aW9uXFxuKyAqIEBJQ1NTR19JRVRGUEVfU1RBVEVfRkFJTEVEOlxcbisgKlxcdEZpcm13YXJlIHJldHVybnMgdGhpcyBpZiB2ZXJpZnkgc3RhdGUgZGlhZ3JhbSBmYWlscyBkdXJpbmcgdmVyaWZpY2F0aW9uXFxuKyAqIEBJQ1NTR19JRVRGUEVfU1RBVEVfRElTQUJMRUQ6XFxuKyAqXFx0dmVyaWZpY2F0aW9uIGlzIGRpc2FibGVkIGJ5IHRoZSBkcml2ZXJcXG4rICovXFxuK2VudW0gaWNzc2dfaWV0ZnBlX3ZlcmlmeV9zdGF0ZXMge1xcbitcXHRJQ1NTR19JRVRGUEVfU1RBVEVfVU5LTk9XTiA9IDAsXFxuK1xcdElDU1NHX0lFVEZQRV9TVEFURV9JTklUSUFMLFxcbitcXHRJQ1NTR19JRVRGUEVfU1RBVEVfVkVSSUZZSU5HLFxcbitcXHRJQ1NTR19JRVRGUEVfU1RBVEVfU1VDQ0VFREVELFxcbitcXHRJQ1NTR19JRVRGUEVfU1RBVEVfRkFJTEVELFxcbitcXHRJQ1NTR19JRVRGUEVfU1RBVEVfRElTQUJMRURcXG4rfTtcXG4rXFxuK3N0cnVjdCBwcnVldGhfcW9zX21xcHJpbyB7XFxuK1xcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCBxb3B0O1xcbit9O1xcbitcXG4rc3RydWN0IHBydWV0aF9xb3NfaWV0IHtcXG4rXFx0Ym9vbCBmcGVfZW5hYmxlZDtcXG4rXFx0Ym9vbCBtYWNfdmVyaWZ5X2NvbmZpZ3VyZTtcXG4rXFx0dTMyIHR4X21pbl9mcmFnX3NpemU7XFxuK1xcdHUzMiB2ZXJpZnlfdGltZV9tcztcXG4rXFx0Ym9vbCBmcGVfYWN0aXZlO1xcbitcXHRlbnVtIGljc3NnX2lldGZwZV92ZXJpZnlfc3RhdGVzIHZlcmlmeV9zdGF0dXM7XFxuK1xcdC8qIGZwZSBtdXRleCBwcm90ZWN0cyBhbGwgRlBFIG9wZXJhdGlvbnMgZm9yIHN5bmNocm9uaXphdGlvbiAqL1xcbitcXHRzdHJ1Y3QgbXV0ZXggZnBlX2xvY2s7XFxuK1xcdHU4IHByZWVtcHRpYmxlX3RjcztcXG4rfTtcXG4rXFxuK3N0cnVjdCBwcnVldGhfcW9zIHtcXG4rXFx0c3RydWN0IHBydWV0aF9xb3NfaWV0IGlldDtcXG4rXFx0c3RydWN0IHBydWV0aF9xb3NfbXFwcmlvIG1xcHJpbztcXG4rfTtcXG4rXFxuK3ZvaWQgaWNzc2dfcW9zX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbit2b2lkIGljc3NnX3Fvc19saW5rX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XFxuK2ludCBpY3NzZ19xb3NfbmRvX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcXG4rXFx0XFx0XFx0ICAgdm9pZCAqdHlwZV9kYXRhKTtcXG4raW50IGljc3NnX2NvbmZpZ19pZXRmcGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGJvb2wgZW5hYmxlKTtcXG4rI2VuZGlmIC8qIF9fTkVUX1RJX0lDU1NHX1FPU19IICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3N0YXRzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zdGF0cy5jXFxuaW5kZXggNzE1OWJhYTAxNTVjZi4uY2ZkYjZmNWRjNWRhMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zdGF0cy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfc3RhdHMuY1xcbkBAIC03NCw3ICs3NCw3IEBAIHZvaWQgaWNzc2dfc3RhdHNfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChpY3NzZ19zdGF0c193b3JrX2hhbmRsZXIpO1xcbiBcXG4taW50IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMsIGNoYXIgKnN0YXRfbmFtZSlcXG4rdTY0IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMsIGNoYXIgKnN0YXRfbmFtZSlcXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFxuQEAgLTkxLDUgKzkxLDUgQEAgaW50IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMsIGNoYXIgKnN0YXRfbmFtZSlcXG4gXFx0fVxcbiBcXG4gXFx0bmV0ZGV2X2VycihlbWFjLVxcdTAwM2VuZGV2LCBcXFwiSW52YWxpZCBzdGF0cyAlc1xcXFxuXFxcIiwgc3RhdF9uYW1lKTtcXG4tXFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3N0YXRzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zdGF0cy5oXFxuaW5kZXggNWVjMGIzOGUwYzY3ZC4uYjg2ZGE4ZGEyM2ExOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zdGF0cy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfc3RhdHMuaFxcbkBAIC04LDggKzgsNiBAQFxcbiAjaWZuZGVmIF9fTkVUX1RJX0lDU1NHX1NUQVRTX0hcXG4gI2RlZmluZSBfX05FVF9USV9JQ1NTR19TVEFUU19IXFxuIFxcbi0jaW5jbHVkZSBcXFwiaWNzc2dfcHJ1ZXRoLmhcXFwiXFxuLVxcbiAjZGVmaW5lIFNUQVRTX1RJTUVfTElNSVRfMUdfTVMgICAgMjUwMDAgICAgLyogMjUgc2Vjb25kcyBAIDFHICovXFxuIFxcbiBzdHJ1Y3QgbWlpZ19zdGF0c19yZWdzIHtcXG5AQCAtMTU1LDUwICsxNTMsNjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpY3NzZ19taWlnX3N0YXRzIGljc3NnX2FsbF9taWlnX3N0YXRzW10gPSB7XFxuIFxcdElDU1NHX01JSUdfU1RBVFModHhfYnl0ZXMsIHRydWUpLFxcbiB9O1xcbiBcXG4tI2RlZmluZSBJQ1NTR19QQV9TVEFUUyhmaWVsZClcXHRcXFxcXFxuLXtcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdCNmaWVsZCxcXHRcXHRcXHRcXFxcXFxuLVxcdGZpZWxkLFxcdFxcdFxcdFxcXFxcXG4rI2RlZmluZSBJQ1NTR19QQV9TVEFUUyhmaWVsZCwgc3RkKVxcdFxcXFxcXG4re1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0I2ZpZWxkLFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZmllbGQsXFx0XFx0XFx0XFx0XFxcXFxcbitcXHRzdGQsXFx0XFx0XFx0XFx0XFxcXFxcbiB9XFxuIFxcbiBzdHJ1Y3QgaWNzc2dfcGFfc3RhdHMge1xcbiBcXHRjaGFyIG5hbWVbRVRIX0dTVFJJTkdfTEVOXTtcXG4gXFx0dTMyIG9mZnNldDtcXG4rXFx0Ym9vbCBzdGFuZGFyZF9zdGF0cztcXG4gfTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNzc2dfcGFfc3RhdHMgaWNzc2dfYWxsX3BhX3N0YXRzW10gPSB7XFxuLVxcdElDU1NHX1BBX1NUQVRTKEZXX1JUVV9QS1RfRFJPUCksXFxuLVxcdElDU1NHX1BBX1NUQVRTKEZXX1EwX09WRVJGTE9XKSxcXG4tXFx0SUNTU0dfUEFfU1RBVFMoRldfUTFfT1ZFUkZMT1cpLFxcbi1cXHRJQ1NTR19QQV9TVEFUUyhGV19RMl9PVkVSRkxPVyksXFxuLVxcdElDU1NHX1BBX1NUQVRTKEZXX1EzX09WRVJGTE9XKSxcXG4tXFx0SUNTU0dfUEFfU1RBVFMoRldfUTRfT1ZFUkZMT1cpLFxcbi1cXHRJQ1NTR19QQV9TVEFUUyhGV19RNV9PVkVSRkxPVyksXFxuLVxcdElDU1NHX1BBX1NUQVRTKEZXX1E2X09WRVJGTE9XKSxcXG4tXFx0SUNTU0dfUEFfU1RBVFMoRldfUTdfT1ZFUkZMT1cpLFxcbi1cXHRJQ1NTR19QQV9TVEFUUyhGV19EUk9QUEVEX1BLVCksXFxuLVxcdElDU1NHX1BBX1NUQVRTKEZXX1JYX0VSUk9SKSxcXG4tXFx0SUNTU0dfUEFfU1RBVFMoRldfUlhfRFNfSU5WQUxJRCksXFxuLVxcdElDU1NHX1BBX1NUQVRTKEZXX1RYX0RST1BQRURfUEFDS0VUKSxcXG4tXFx0SUNTU0dfUEFfU1RBVFMoRldfVFhfVFNfRFJPUFBFRF9QQUNLRVQpLFxcbi1cXHRJQ1NTR19QQV9TVEFUUyhGV19JTkZfUE9SVF9ESVNBQkxFRCksXFxuLVxcdElDU1NHX1BBX1NUQVRTKEZXX0lORl9TQVYpLFxcbi1cXHRJQ1NTR19QQV9TVEFUUyhGV19JTkZfU0FfREwpLFxcbi1cXHRJQ1NTR19QQV9TVEFUUyhGV19JTkZfUE9SVF9CTE9DS0VEKSxcXG4tXFx0SUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfVEFHR0VEKSxcXG4tXFx0SUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfUFJJT1RBR0dFRCksXFxuLVxcdElDU1NHX1BBX1NUQVRTKEZXX0lORl9EUk9QX05PVEFHKSxcXG4tXFx0SUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfTk9UTUVNQkVSKSxcXG4tXFx0SUNTU0dfUEFfU1RBVFMoRldfUlhfRU9GX1NIT1JUX0ZSTUVSUiksXFxuLVxcdElDU1NHX1BBX1NUQVRTKEZXX1JYX0IwX0RST1BfRUFSTFlfRU9GKSxcXG4tXFx0SUNTU0dfUEFfU1RBVFMoRldfVFhfSlVNQk9fRlJNX0NVVE9GRiksXFxuLVxcdElDU1NHX1BBX1NUQVRTKEZXX1JYX0VYUF9GUkFHX1FfRFJPUCksXFxuLVxcdElDU1NHX1BBX1NUQVRTKEZXX1JYX0ZJRk9fT1ZFUlJVTiksXFxuLVxcdElDU1NHX1BBX1NUQVRTKEZXX0NVVF9USFJfUEtUKSxcXG4tXFx0SUNTU0dfUEFfU1RBVFMoRldfSE9TVF9SWF9QS1RfQ05UKSxcXG4tXFx0SUNTU0dfUEFfU1RBVFMoRldfSE9TVF9UWF9QS1RfQ05UKSxcXG4tXFx0SUNTU0dfUEFfU1RBVFMoRldfSE9TVF9FR1JFU1NfUV9QUkVfT1ZFUkZMT1cpLFxcbi1cXHRJQ1NTR19QQV9TVEFUUyhGV19IT1NUX0VHUkVTU19RX0VYUF9PVkVSRkxPVyksXFxuK1xcdElDU1NHX1BBX1NUQVRTKEZXX1JUVV9QS1RfRFJPUCwgZmFsc2UpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19RMF9PVkVSRkxPVywgZmFsc2UpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19RMV9PVkVSRkxPVywgZmFsc2UpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19RMl9PVkVSRkxPVywgZmFsc2UpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19RM19PVkVSRkxPVywgZmFsc2UpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19RNF9PVkVSRkxPVywgZmFsc2UpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19RNV9PVkVSRkxPVywgZmFsc2UpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19RNl9PVkVSRkxPVywgZmFsc2UpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19RN19PVkVSRkxPVywgZmFsc2UpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19EUk9QUEVEX1BLVCwgZmFsc2UpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19SWF9FUlJPUiwgZmFsc2UpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19SWF9EU19JTlZBTElELCBmYWxzZSksXFxuK1xcdElDU1NHX1BBX1NUQVRTKEZXX1RYX0RST1BQRURfUEFDS0VULCBmYWxzZSksXFxuK1xcdElDU1NHX1BBX1NUQVRTKEZXX1RYX1RTX0RST1BQRURfUEFDS0VULCBmYWxzZSksXFxuK1xcdElDU1NHX1BBX1NUQVRTKEZXX0lORl9QT1JUX0RJU0FCTEVELCBmYWxzZSksXFxuK1xcdElDU1NHX1BBX1NUQVRTKEZXX0lORl9TQVYsIGZhbHNlKSxcXG4rXFx0SUNTU0dfUEFfU1RBVFMoRldfSU5GX1NBX0RMLCBmYWxzZSksXFxuK1xcdElDU1NHX1BBX1NUQVRTKEZXX0lORl9QT1JUX0JMT0NLRUQsIGZhbHNlKSxcXG4rXFx0SUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfVEFHR0VELCBmYWxzZSksXFxuK1xcdElDU1NHX1BBX1NUQVRTKEZXX0lORl9EUk9QX1BSSU9UQUdHRUQsIGZhbHNlKSxcXG4rXFx0SUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfTk9UQUcsIGZhbHNlKSxcXG4rXFx0SUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfTk9UTUVNQkVSLCBmYWxzZSksXFxuK1xcdC8qIE1BQyBNZXJnZSBjb3VudGVyczogZXhwb3NlZCB2aWEgLmdldF9tbV9zdGF0cyBzdGFuZGFyZCB1QVBJLFxcbitcXHQgKiBub3QgZHVwbGljYXRlZCBpbiB0aGUgcHJpdmF0ZSBldGh0b29sIC1TIHRhYmxlLlxcbitcXHQgKi9cXG4rXFx0SUNTU0dfUEFfU1RBVFMoRldfUFJFRU1QVF9CQURfRlJBRywgdHJ1ZSksXFxuK1xcdElDU1NHX1BBX1NUQVRTKEZXX1BSRUVNUFRfQVNTRU1CTFlfRVJSLCB0cnVlKSxcXG4rXFx0SUNTU0dfUEFfU1RBVFMoRldfUFJFRU1QVF9GUkFHX0NOVF9UWCwgdHJ1ZSksXFxuK1xcdElDU1NHX1BBX1NUQVRTKEZXX1BSRUVNUFRfQVNTRU1CTFlfT0ssIHRydWUpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19QUkVFTVBUX0ZSQUdfQ05UX1JYLCB0cnVlKSxcXG4rXFx0SUNTU0dfUEFfU1RBVFMoRldfUlhfRU9GX1NIT1JUX0ZSTUVSUiwgZmFsc2UpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19SWF9CMF9EUk9QX0VBUkxZX0VPRiwgZmFsc2UpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19UWF9KVU1CT19GUk1fQ1VUT0ZGLCBmYWxzZSksXFxuK1xcdElDU1NHX1BBX1NUQVRTKEZXX1JYX0VYUF9GUkFHX1FfRFJPUCwgZmFsc2UpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19SWF9GSUZPX09WRVJSVU4sIGZhbHNlKSxcXG4rXFx0SUNTU0dfUEFfU1RBVFMoRldfQ1VUX1RIUl9QS1QsIGZhbHNlKSxcXG4rXFx0SUNTU0dfUEFfU1RBVFMoRldfSE9TVF9SWF9QS1RfQ05ULCBmYWxzZSksXFxuK1xcdElDU1NHX1BBX1NUQVRTKEZXX0hPU1RfVFhfUEtUX0NOVCwgZmFsc2UpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19IT1NUX0VHUkVTU19RX1BSRV9PVkVSRkxPVywgZmFsc2UpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19IT1NUX0VHUkVTU19RX0VYUF9PVkVSRkxPVywgZmFsc2UpLFxcbiB9O1xcbiBcXG4gI2VuZGlmIC8qIF9fTkVUX1RJX0lDU1NHX1NUQVRTX0ggKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfc3dpdGNoX21hcC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfc3dpdGNoX21hcC5oXFxuaW5kZXggN2UwNTNiOGFmM2VjZS4uODU1ZmQ0ZWQwYjNmNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zd2l0Y2hfbWFwLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zd2l0Y2hfbWFwLmhcXG5AQCAtMjU2LDYgKzI1NiwxMSBAQFxcbiAjZGVmaW5lIEZXX0lORl9EUk9QX1BSSU9UQUdHRURcXHRcXHQweDAxNDhcXG4gI2RlZmluZSBGV19JTkZfRFJPUF9OT1RBR1xcdFxcdDB4MDE1MFxcbiAjZGVmaW5lIEZXX0lORl9EUk9QX05PVE1FTUJFUlxcdFxcdDB4MDE1OFxcbisjZGVmaW5lIEZXX1BSRUVNUFRfQkFEX0ZSQUdcXHRcXHQweDAxNjBcXG4rI2RlZmluZSBGV19QUkVFTVBUX0FTU0VNQkxZX0VSUlxcdFxcdDB4MDE2OFxcbisjZGVmaW5lIEZXX1BSRUVNUFRfRlJBR19DTlRfVFhcXHRcXHQweDAxNzBcXG4rI2RlZmluZSBGV19QUkVFTVBUX0FTU0VNQkxZX09LXFx0XFx0MHgwMTc4XFxuKyNkZWZpbmUgRldfUFJFRU1QVF9GUkFHX0NOVF9SWFxcdFxcdDB4MDE4MFxcbiAjZGVmaW5lIEZXX1JYX0VPRl9TSE9SVF9GUk1FUlJcXHRcXHQweDAxODhcXG4gI2RlZmluZSBGV19SWF9CMF9EUk9QX0VBUkxZX0VPRlxcdFxcdDB4MDE5MFxcbiAjZGVmaW5lIEZXX1RYX0pVTUJPX0ZSTV9DVVRPRkZcXHRcXHQweDAxOThcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MTA6MjMuMTgzNjY2MDk4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1MTQxODU3NjQyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgbW9kaWZpZWQgY29kZSBpcyBjb25maW5lZCB0byB0aGUgVGV4YXMgSW5zdHJ1bWVudHMgSUNTU0cgUFJVIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvKSwgd2hpY2ggZGVwZW5kcyBvbiBDT05GSUdfQVJDSF9LMyAoYW4gQVJNNjQtc3BlY2lmaWMgU29DIGFyY2hpdGVjdHVyZSkuIFRoaXMgZHJpdmVyIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiB0aGUgdGFyZ2V0IGFtZDY0IGFyY2hpdGVjdHVyZSBhbmQgYWRkaXRpb25hbGx5IHJlcXVpcmVzIHBoeXNpY2FsIFRJIEszIFBSVS1JQ1NTRyBTb0MgaGFyZHdhcmUgYW5kIGZpcm13YXJlIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTVmNGZmNTZkMTQ5NzAxZjY1NGQwNzQxZjU4MTQ1NTI1MzExNGZlYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDE1IDA3OjEwOjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9NYWtlZmlsZVxuaW5kZXggZjQyNzZjOWE3NzYyMC4uZDE5YmNkMjVjOWQwNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9NYWtlZmlsZVxuQEAgLTQ2LDYgKzQ2LDcgQEAgaWNzc2cteSA6PSBpY3NzZy9pY3NzZ19jb21tb24ubyBcXFxuIFx0ICAgaWNzc2cvaWNzc2dfY29uZmlnLm8gXFxcbiBcdCAgIGljc3NnL2ljc3NnX21paV9jZmcubyBcXFxuIFx0ICAgaWNzc2cvaWNzc2dfc3RhdHMubyBcXFxuLVx0ICAgaWNzc2cvaWNzc2dfZXRodG9vbC5vXG4rXHQgICBpY3NzZy9pY3NzZ19ldGh0b29sLm8gXFxcbitcdCAgIGljc3NnL2ljc3NnX3Fvcy5vXG4gXG4gb2JqLSQoQ09ORklHX1RJX0lDU1NfSUVQKSArPSBpY3NzZy9pY3NzX2llcC5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19jb21tb24uY1xuaW5kZXggNGE3ZDFhNmY0NzBiMS4uZDU5ZWVmNjFlNzAxMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2NvbW1vbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19jb21tb24uY1xuQEAgLTE3NTQsNiArMTc1NCw3IEBAIHZvaWQgcHJ1ZXRoX25ldGRldl9leGl0KHN0cnVjdCBwcnVldGggKnBydWV0aCxcbiBcbiBcdG5ldGlmX25hcGlfZGVsKFx1MDAyNmVtYWMtXHUwMDNlbmFwaV9yeCk7XG4gXG4rXHRtdXRleF9kZXN0cm95KFx1MDAyNmVtYWMtXHUwMDNlcW9zLmlldC5mcGVfbG9jayk7XG4gXHRwcnVzc19yZWxlYXNlX21lbV9yZWdpb24ocHJ1ZXRoLVx1MDAzZXBydXNzLCBcdTAwMjZlbWFjLVx1MDAzZWRyYW0pO1xuIFx0ZnJlZV9uZXRkZXYoZW1hYy1cdTAwM2VuZGV2KTtcbiBcdHBydWV0aC1cdTAwM2VlbWFjW21hY10gPSBOVUxMO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2NvbmZpZy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfY29uZmlnLmhcbmluZGV4IDYwZDY5NzQ0ZmZhZTIuLjFhYzIwMmY4NTVlZDQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19jb25maWcuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfY29uZmlnLmhcbkBAIC0zMjMsMTMgKzMyMyw0IEBAIHN0cnVjdCBwcnVldGhfZmRiX3Nsb3Qge1xuIFx0dTggZmlkO1xuIFx0dTggZmlkX2MyO1xuIH0gX19wYWNrZWQ7XG4tXG4tZW51bSBpY3NzZ19pZXRmcGVfdmVyaWZ5X3N0YXRlcyB7XG4tXHRJQ1NTR19JRVRGUEVfU1RBVEVfVU5LTk9XTiA9IDAsXG4tXHRJQ1NTR19JRVRGUEVfU1RBVEVfSU5JVElBTCxcbi1cdElDU1NHX0lFVEZQRV9TVEFURV9WRVJJRllJTkcsXG4tXHRJQ1NTR19JRVRGUEVfU1RBVEVfU1VDQ0VFREVELFxuLVx0SUNTU0dfSUVURlBFX1NUQVRFX0ZBSUxFRCxcbi1cdElDU1NHX0lFVEZQRV9TVEFURV9ESVNBQkxFRFxuLX07XG4gI2VuZGlmIC8qIF9fTkVUX1RJX0lDU1NHX0NPTkZJR19IICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfZXRodG9vbC5jXG5pbmRleCBiNzE1YWYyMWQyM2FjLi5kYzI1MzYxYWZlOTg5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfZXRodG9vbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19ldGh0b29sLmNcbkBAIC03NCw3ICs3NCw4IEBAIHN0YXRpYyBpbnQgZW1hY19nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IHN0cmluZ3NldClcbiBcdFx0aWYgKGVtYWMtXHUwMDNlcHJ1ZXRoLVx1MDAzZXBhX3N0YXRzKVxuIFx0XHRcdHJldHVybiBJQ1NTR19OVU1fRVRIVE9PTF9TVEFUUztcbiBcdFx0ZWxzZVxuLVx0XHRcdHJldHVybiBJQ1NTR19OVU1fRVRIVE9PTF9TVEFUUyAtIElDU1NHX05VTV9QQV9TVEFUUztcbitcdFx0XHRyZXR1cm4gSUNTU0dfTlVNX0VUSFRPT0xfU1RBVFMgLVxuK1x0XHRcdCAgICAgICAoSUNTU0dfTlVNX1BBX1NUQVRTIC0gSUNTU0dfTlVNX1BBX1NUQU5EQVJEX1NUQVRTKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbkBAIC05Myw3ICs5NCw4IEBAIHN0YXRpYyB2b2lkIGVtYWNfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBzdHJpbmdzZXQsIHU4ICpkYXRhKVxuIFx0XHRcdFx0ZXRodG9vbF9wdXRzKFx1MDAyNnAsIGljc3NnX2FsbF9taWlnX3N0YXRzW2ldLm5hbWUpO1xuIFx0XHRpZiAoZW1hYy1cdTAwM2VwcnVldGgtXHUwMDNlcGFfc3RhdHMpXG4gXHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShpY3NzZ19hbGxfcGFfc3RhdHMpOyBpKyspXG4tXHRcdFx0XHRldGh0b29sX3B1dHMoXHUwMDI2cCwgaWNzc2dfYWxsX3BhX3N0YXRzW2ldLm5hbWUpO1xuK1x0XHRcdFx0aWYgKCFpY3NzZ19hbGxfcGFfc3RhdHNbaV0uc3RhbmRhcmRfc3RhdHMpXG4rXHRcdFx0XHRcdGV0aHRvb2xfcHV0cyhcdTAwMjZwLCBpY3NzZ19hbGxfcGFfc3RhdHNbaV0ubmFtZSk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG5AQCAtMTE0LDcgKzExNiw4IEBAIHN0YXRpYyB2b2lkIGVtYWNfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXG4gXHRpZiAoZW1hYy1cdTAwM2VwcnVldGgtXHUwMDNlcGFfc3RhdHMpXG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoaWNzc2dfYWxsX3BhX3N0YXRzKTsgaSsrKVxuLVx0XHRcdCooZGF0YSsrKSA9IGVtYWMtXHUwMDNlcGFfc3RhdHNbaV07XG4rXHRcdFx0aWYgKCFpY3NzZ19hbGxfcGFfc3RhdHNbaV0uc3RhbmRhcmRfc3RhdHMpXG4rXHRcdFx0XHQqKGRhdGErKykgPSBlbWFjLVx1MDAzZXBhX3N0YXRzW2ldO1xuIH1cbiBcbiBzdGF0aWMgaW50IGVtYWNfZ2V0X3RzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG5AQCAtMjk0LDYgKzI5NywxMjYgQEAgc3RhdGljIGludCBlbWFjX3NldF9wZXJfcXVldWVfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBxdWV1ZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IGVtYWNfZ2V0X21tKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgZXRodG9vbF9tbV9zdGF0ZSAqc3RhdGUpXG4re1xuK1x0c3RydWN0IHBydWV0aF9lbWFjICplbWFjID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXHRzdHJ1Y3QgcHJ1ZXRoX3Fvc19pZXQgKmlldCA9IFx1MDAyNmVtYWMtXHUwMDNlcW9zLmlldDtcbitcdGVudW0gaWNzc2dfaWV0ZnBlX3ZlcmlmeV9zdGF0ZXMgdmVyaWZ5X3N0YXR1cztcbitcbitcdGlmIChlbWFjLVx1MDAzZWlzX3NyMSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZpZXQtXHUwMDNlZnBlX2xvY2spO1xuK1x0c3RhdGUtXHUwMDNldHhfZW5hYmxlZCA9IGlldC1cdTAwM2VmcGVfZW5hYmxlZDtcbitcdHN0YXRlLVx1MDAzZXR4X21pbl9mcmFnX3NpemUgPSBpZXQtXHUwMDNldHhfbWluX2ZyYWdfc2l6ZTtcbitcdHN0YXRlLVx1MDAzZXZlcmlmeV9lbmFibGVkID0gaWV0LVx1MDAzZW1hY192ZXJpZnlfY29uZmlndXJlO1xuK1x0c3RhdGUtXHUwMDNldmVyaWZ5X3RpbWUgPSBpZXQtXHUwMDNldmVyaWZ5X3RpbWVfbXM7XG4rXHRzdGF0ZS1cdTAwM2V0eF9hY3RpdmUgPSBpZXQtXHUwMDNlZnBlX2FjdGl2ZTtcbitcdHZlcmlmeV9zdGF0dXMgPSBpZXQtXHUwMDNldmVyaWZ5X3N0YXR1cztcbitcdG11dGV4X3VubG9jayhcdTAwMjZpZXQtXHUwMDNlZnBlX2xvY2spO1xuK1xuK1x0c3RhdGUtXHUwMDNlcnhfbWluX2ZyYWdfc2l6ZSA9IEVUSF9aTEVOO1xuK1x0c3RhdGUtXHUwMDNlcG1hY19lbmFibGVkID0gdHJ1ZTtcbitcbitcdHN3aXRjaCAodmVyaWZ5X3N0YXR1cykge1xuK1x0Y2FzZSBJQ1NTR19JRVRGUEVfU1RBVEVfRElTQUJMRUQ6XG4rXHRcdHN0YXRlLVx1MDAzZXZlcmlmeV9zdGF0dXMgPSBFVEhUT09MX01NX1ZFUklGWV9TVEFUVVNfRElTQUJMRUQ7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBJQ1NTR19JRVRGUEVfU1RBVEVfSU5JVElBTDpcbitcdFx0c3RhdGUtXHUwMDNldmVyaWZ5X3N0YXR1cyA9IEVUSFRPT0xfTU1fVkVSSUZZX1NUQVRVU19JTklUSUFMO1xuK1x0XHRicmVhaztcbitcdGNhc2UgSUNTU0dfSUVURlBFX1NUQVRFX1ZFUklGWUlORzpcbitcdFx0c3RhdGUtXHUwMDNldmVyaWZ5X3N0YXR1cyA9IEVUSFRPT0xfTU1fVkVSSUZZX1NUQVRVU19WRVJJRllJTkc7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBJQ1NTR19JRVRGUEVfU1RBVEVfU1VDQ0VFREVEOlxuK1x0XHRzdGF0ZS1cdTAwM2V2ZXJpZnlfc3RhdHVzID0gRVRIVE9PTF9NTV9WRVJJRllfU1RBVFVTX1NVQ0NFRURFRDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIElDU1NHX0lFVEZQRV9TVEFURV9GQUlMRUQ6XG4rXHRcdHN0YXRlLVx1MDAzZXZlcmlmeV9zdGF0dXMgPSBFVEhUT09MX01NX1ZFUklGWV9TVEFUVVNfRkFJTEVEO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHN0YXRlLVx1MDAzZXZlcmlmeV9zdGF0dXMgPSBFVEhUT09MX01NX1ZFUklGWV9TVEFUVVNfVU5LTk9XTjtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHQvKiA4MDIuMy0yMDE4IGNsYXVzZSAzMC4xNC4xLjYsIHNheXMgdGhhdCB0aGUgYU1BQ01lcmdlVmVyaWZ5VGltZVxuK1x0ICogdmFyaWFibGUgaGFzIGEgcmFuZ2UgYmV0d2VlbiAxIGFuZCAxMjggbXMgaW5jbHVzaXZlLiBMaW1pdCB0byB0aGF0LlxuK1x0ICovXG4rXHRzdGF0ZS1cdTAwM2VtYXhfdmVyaWZ5X3RpbWUgPSBFVEhUT09MX01NX01BWF9WRVJJRllfVElNRV9NUztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGVtYWNfc2V0X21tKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgZXRodG9vbF9tbV9jZmcgKmNmZyxcbitcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcdHN0cnVjdCBwcnVldGhfcW9zX2lldCAqaWV0ID0gXHUwMDI2ZW1hYy1cdTAwM2Vxb3MuaWV0O1xuK1x0dTMyIG9sZF92ZXJpZnlfdGltZV9tcywgb2xkX3R4X21pbl9mcmFnX3NpemU7XG4rXHRib29sIG9sZF9mcGVfZW5hYmxlZCwgb2xkX21hY192ZXJpZnlfY29uZmlndXJlO1xuK1x0aW50IGVycjtcbitcbitcdGlmIChlbWFjLVx1MDAzZWlzX3NyMSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0aWYgKCFjZmctXHUwMDNlcG1hY19lbmFibGVkKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwicHJlZW1wdGlibGUgTUFDIGlzIGFsd2F5cyBlbmFibGVkXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmlldC1cdTAwM2VmcGVfbG9jayk7XG4rXHRvbGRfdmVyaWZ5X3RpbWVfbXMgPSBpZXQtXHUwMDNldmVyaWZ5X3RpbWVfbXM7XG4rXHRvbGRfdHhfbWluX2ZyYWdfc2l6ZSA9IGlldC1cdTAwM2V0eF9taW5fZnJhZ19zaXplO1xuK1x0b2xkX2ZwZV9lbmFibGVkID0gaWV0LVx1MDAzZWZwZV9lbmFibGVkO1xuK1x0b2xkX21hY192ZXJpZnlfY29uZmlndXJlID0gaWV0LVx1MDAzZW1hY192ZXJpZnlfY29uZmlndXJlO1xuK1xuK1x0aWV0LVx1MDAzZXZlcmlmeV90aW1lX21zID0gY2ZnLVx1MDAzZXZlcmlmeV90aW1lO1xuK1x0aWV0LVx1MDAzZXR4X21pbl9mcmFnX3NpemUgPSBjZmctXHUwMDNldHhfbWluX2ZyYWdfc2l6ZTtcbitcdGlldC1cdTAwM2VmcGVfZW5hYmxlZCA9IGNmZy1cdTAwM2V0eF9lbmFibGVkO1xuK1x0aWV0LVx1MDAzZW1hY192ZXJpZnlfY29uZmlndXJlID0gY2ZnLVx1MDAzZXZlcmlmeV9lbmFibGVkO1xuK1x0ZXJyID0gaWNzc2dfY29uZmlnX2lldGZwZShuZGV2LCBjZmctXHUwMDNldHhfZW5hYmxlZCk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdC8qIGljc3NnX2NvbmZpZ19pZXRmcGUncyBmYWxsYmFjayBwYXRoIGFscmVhZHkgY2xlYXJlZCBmcGVfYWN0aXZlLlxuK1x0XHQgKiBSZXN0b3JlIGFsbCBjb25maWcgZmllbGRzIHNvIGdldF9tbSgpIHJlcG9ydHMgdGhlIGNvbmZpZ3VyYXRpb25cbitcdFx0ICogdGhhdCBpcyBhY3R1YWxseSByZWZsZWN0ZWQgaW4gaGFyZHdhcmUuXG4rXHRcdCAqL1xuK1x0XHRpZXQtXHUwMDNldmVyaWZ5X3RpbWVfbXMgPSBvbGRfdmVyaWZ5X3RpbWVfbXM7XG4rXHRcdGlldC1cdTAwM2V0eF9taW5fZnJhZ19zaXplID0gb2xkX3R4X21pbl9mcmFnX3NpemU7XG4rXHRcdGlldC1cdTAwM2VmcGVfZW5hYmxlZCA9IG9sZF9mcGVfZW5hYmxlZDtcbitcdFx0aWV0LVx1MDAzZW1hY192ZXJpZnlfY29uZmlndXJlID0gb2xkX21hY192ZXJpZnlfY29uZmlndXJlO1xuK1x0fVxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmlldC1cdTAwM2VmcGVfbG9jayk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgdm9pZCBlbWFjX2dldF9tbV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbitcdFx0XHQgICAgICBzdHJ1Y3QgZXRodG9vbF9tbV9zdGF0cyAqcylcbit7XG4rXHRzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcbitcdGlmIChlbWFjLVx1MDAzZWlzX3NyMSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKCFlbWFjLVx1MDAzZXBydWV0aC1cdTAwM2VwYV9zdGF0cylcbitcdFx0cmV0dXJuO1xuK1xuK1x0ZW1hY191cGRhdGVfaGFyZHdhcmVfc3RhdHMoZW1hYyk7XG4rXG4rXHQvKiBIb2xkIHN0YXRzX2xvY2sgdG8gcHJldmVudCBpY3NzZ19zdGF0c193b3JrX2hhbmRsZXIgZnJvbSB1cGRhdGluZ1xuK1x0ICogcGFfc3RhdHNbXSBiZXR3ZWVuIHJlYWRzLCB3aGljaCBjb3VsZCB5aWVsZCBhIHRvcm4gdTY0IHZhbHVlIG9uXG4rXHQgKiAzMi1iaXQgYXJjaGl0ZWN0dXJlcy5cbitcdCAqL1xuK1x0c3Bpbl9sb2NrKFx1MDAyNmVtYWMtXHUwMDNlcHJ1ZXRoLVx1MDAzZXN0YXRzX2xvY2spO1xuK1x0LyogTUFDTWVyZ2VIb2xkQ291bnQgc3RhdHMgaXMgbm90IHRyYWNrZWQgYnkgdGhlIGZpcm13YXJlICovXG4rXHRzLVx1MDAzZU1BQ01lcmdlRnJhbWVBc3NPa0NvdW50ID0gZW1hY19nZXRfc3RhdF9ieV9uYW1lKGVtYWMsIFwiRldfUFJFRU1QVF9BU1NFTUJMWV9PS1wiKTtcbitcdHMtXHUwMDNlTUFDTWVyZ2VGcmFtZUFzc0Vycm9yQ291bnQgPSBlbWFjX2dldF9zdGF0X2J5X25hbWUoZW1hYywgXCJGV19QUkVFTVBUX0FTU0VNQkxZX0VSUlwiKTtcbitcdHMtXHUwMDNlTUFDTWVyZ2VGcmFnQ291bnRSeCA9IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShlbWFjLCBcIkZXX1BSRUVNUFRfRlJBR19DTlRfUlhcIik7XG4rXHRzLVx1MDAzZU1BQ01lcmdlRnJhZ0NvdW50VHggPSBlbWFjX2dldF9zdGF0X2J5X25hbWUoZW1hYywgXCJGV19QUkVFTVBUX0ZSQUdfQ05UX1RYXCIpO1xuK1x0cy1cdTAwM2VNQUNNZXJnZUZyYW1lU21kRXJyb3JDb3VudCA9IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShlbWFjLCBcIkZXX1BSRUVNUFRfQkFEX0ZSQUdcIik7XG4rXHRzcGluX3VubG9jayhcdTAwMjZlbWFjLVx1MDAzZXBydWV0aC1cdTAwM2VzdGF0c19sb2NrKTtcbit9XG4rXG4gY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGljc3NnX2V0aHRvb2xfb3BzID0ge1xuIFx0LmdldF9kcnZpbmZvID0gZW1hY19nZXRfZHJ2aW5mbyxcbiBcdC5nZXRfbXNnbGV2ZWwgPSBlbWFjX2dldF9tc2dsZXZlbCxcbkBAIC0zMTcsNSArNDQwLDggQEAgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGljc3NnX2V0aHRvb2xfb3BzID0ge1xuIFx0LnNldF9lZWUgPSBlbWFjX3NldF9lZWUsXG4gXHQubndheV9yZXNldCA9IGVtYWNfbndheV9yZXNldCxcbiBcdC5nZXRfcm1vbl9zdGF0cyA9IGVtYWNfZ2V0X3Jtb25fc3RhdHMsXG4rXHQuZ2V0X21tID0gZW1hY19nZXRfbW0sXG4rXHQuc2V0X21tID0gZW1hY19zZXRfbW0sXG4rXHQuZ2V0X21tX3N0YXRzID0gZW1hY19nZXRfbW1fc3RhdHMsXG4gfTtcbiBFWFBPUlRfU1lNQk9MX0dQTChpY3NzZ19ldGh0b29sX29wcyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguY1xuaW5kZXggNTkxYmU1YzgwNTZiNC4uMjgzYmUyN2EyNDBlOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguY1xuQEAgLTM1NywxMSArMzU3LDExIEBAIHN0YXRpYyB2b2lkIGVtYWNfYWRqdXN0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRcdH1cbiBcdFx0aWYgKCFlbWFjLVx1MDAzZWxpbmspIHtcbiBcdFx0XHRuZXdfc3RhdGUgPSB0cnVlO1xuLVx0XHRcdGVtYWMtXHUwMDNlbGluayA9IDE7XG4rXHRcdFx0V1JJVEVfT05DRShlbWFjLVx1MDAzZWxpbmssIDEpO1xuIFx0XHR9XG4gXHR9IGVsc2UgaWYgKGVtYWMtXHUwMDNlbGluaykge1xuIFx0XHRuZXdfc3RhdGUgPSB0cnVlO1xuLVx0XHRlbWFjLVx1MDAzZWxpbmsgPSAwO1xuK1x0XHRXUklURV9PTkNFKGVtYWMtXHUwMDNlbGluaywgMCk7XG4gXG4gXHRcdC8qIGYvdyBzaG91bGQgc3VwcG9ydCAxMDAgXHUwMDI2IDEwMDAgKi9cbiBcdFx0ZW1hYy1cdTAwM2VzcGVlZCA9IFNQRUVEXzEwMDA7XG5AQCAtMzkyLDYgKzM5Miw4IEBAIHN0YXRpYyB2b2lkIGVtYWNfYWRqdXN0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0aWNzc2dfc2V0X3BvcnRfc3RhdGUoZW1hYywgSUNTU0dfRU1BQ19QT1JUX0RJU0FCTEUpO1xuIFx0XHR9XG4rXG4rXHRcdGljc3NnX3Fvc19saW5rX3N0YXRlX3VwZGF0ZShuZGV2KTtcbiBcdH1cbiBcbiBcdGlmIChlbWFjLVx1MDAzZWxpbmspIHtcbkBAIC0xNjUyLDYgKzE2NTQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVtYWNfbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9faHd0c3RhbXBfZ2V0ID0gaWNzc2dfbmRvX2dldF90c19jb25maWcsXG4gXHQubmRvX2h3dHN0YW1wX3NldCA9IGljc3NnX25kb19zZXRfdHNfY29uZmlnLFxuIFx0Lm5kb194c2tfd2FrZXVwID0gcHJ1ZXRoX3hza193YWtldXAsXG4rXHQubmRvX3NldHVwX3RjID0gaWNzc2dfcW9zX25kb19zZXR1cF90YyxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgcHJ1ZXRoX25ldGRldl9pbml0KHN0cnVjdCBwcnVldGggKnBydWV0aCxcbkBAIC0xNjg2LDYgKzE2ODksOCBAQCBzdGF0aWMgaW50IHBydWV0aF9uZXRkZXZfaW5pdChzdHJ1Y3QgcHJ1ZXRoICpwcnVldGgsXG4gXG4gXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZlbWFjLVx1MDAzZXN0YXRzX3dvcmssIGljc3NnX3N0YXRzX3dvcmtfaGFuZGxlcik7XG4gXG4rXHRpY3NzZ19xb3NfaW5pdChuZGV2KTtcbitcbiBcdHJldCA9IHBydXNzX3JlcXVlc3RfbWVtX3JlZ2lvbihwcnVldGgtXHUwMDNlcHJ1c3MsXG4gXHRcdFx0XHQgICAgICAgcG9ydCA9PSBQUlVFVEhfUE9SVF9NSUkwID9cbiBcdFx0XHRcdCAgICAgICBQUlVTU19NRU1fRFJBTTAgOiBQUlVTU19NRU1fRFJBTTEsXG5AQCAtMTc5Myw2ICsxNzk4LDcgQEAgc3RhdGljIGludCBwcnVldGhfbmV0ZGV2X2luaXQoc3RydWN0IHBydWV0aCAqcHJ1ZXRoLFxuIGZyZWU6XG4gXHRwcnVzc19yZWxlYXNlX21lbV9yZWdpb24ocHJ1ZXRoLVx1MDAzZXBydXNzLCBcdTAwMjZlbWFjLVx1MDAzZWRyYW0pO1xuIGZyZWVfbmRldjpcbitcdG11dGV4X2Rlc3Ryb3koXHUwMDI2ZW1hYy1cdTAwM2Vxb3MuaWV0LmZwZV9sb2NrKTtcbiBcdGVtYWMtXHUwMDNlbmRldiA9IE5VTEw7XG4gXHRwcnVldGgtXHUwMDNlZW1hY1ttYWNdID0gTlVMTDtcbiBcdGZyZWVfbmV0ZGV2KG5kZXYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmhcbmluZGV4IGRmOTNkMTVjNWI3ODYuLmFkOTA2MTQwODA1MGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmhcbkBAIC00NCwxMCArNDQsMTIgQEBcbiAjaW5jbHVkZSBcImljc3NnX2NvbmZpZy5oXCJcbiAjaW5jbHVkZSBcImljc3NfaWVwLmhcIlxuICNpbmNsdWRlIFwiaWNzc2dfc3dpdGNoX21hcC5oXCJcbisjaW5jbHVkZSBcImljc3NnX3Fvcy5oXCJcbisjaW5jbHVkZSBcImljc3NnX3N0YXRzLmhcIlxuIFxuLSNkZWZpbmUgUFJVRVRIX01BWF9NVFUgICAgICAgICAgKDIwMDAgLSBFVEhfSExFTiAtIEVUSF9GQ1NfTEVOKVxuLSNkZWZpbmUgUFJVRVRIX01JTl9QS1RfU0laRSAgICAgKFZMQU5fRVRIX1pMRU4pXG4tI2RlZmluZSBQUlVFVEhfTUFYX1BLVF9TSVpFICAgICAoUFJVRVRIX01BWF9NVFUgKyBFVEhfSExFTiArIEVUSF9GQ1NfTEVOKVxuKyNkZWZpbmUgUFJVRVRIX01BWF9NVFVcdFx0KDIwMDAgLSBFVEhfSExFTiAtIEVUSF9GQ1NfTEVOKVxuKyNkZWZpbmUgUFJVRVRIX01JTl9QS1RfU0laRVx0KFZMQU5fRVRIX1pMRU4pXG4rI2RlZmluZSBQUlVFVEhfTUFYX1BLVF9TSVpFXHQoUFJVRVRIX01BWF9NVFUgKyBFVEhfSExFTiArIEVUSF9GQ1NfTEVOKVxuIFxuICNkZWZpbmUgSUNTU19TTElDRTBcdDBcbiAjZGVmaW5lIElDU1NfU0xJQ0UxXHQxXG5AQCAtNTcsMTIgKzU5LDE2IEBAXG4gXG4gI2RlZmluZSBJQ1NTR19NQVhfUkZMT1dTXHQ4XHQvKiBwZXIgc2xpY2UgKi9cbiBcbi0jZGVmaW5lIElDU1NHX05VTV9QQV9TVEFUU1x0MzJcbi0jZGVmaW5lIElDU1NHX05VTV9NSUlHX1NUQVRTXHQ2MFxuKyNkZWZpbmUgSUNTU0dfTlVNX1BBX1NUQVRTXHRBUlJBWV9TSVpFKGljc3NnX2FsbF9wYV9zdGF0cylcbisjZGVmaW5lIElDU1NHX05VTV9NSUlHX1NUQVRTXHRBUlJBWV9TSVpFKGljc3NnX2FsbF9taWlnX3N0YXRzKVxuIC8qIE51bWJlciBvZiBJQ1NTRyByZWxhdGVkIHN0YXRzICovXG4gI2RlZmluZSBJQ1NTR19OVU1fU1RBVFMgKElDU1NHX05VTV9NSUlHX1NUQVRTICsgSUNTU0dfTlVNX1BBX1NUQVRTKVxuKy8qIE1JSUcgc3RhdHMgd2l0aCBzdGFuZGFyZCB1QVBJIGVxdWl2YWxlbnRzIChleGNsdWRlZCBmcm9tIGV0aHRvb2wgLVMpICovXG4gI2RlZmluZSBJQ1NTR19OVU1fU1RBTkRBUkRfU1RBVFMgMzFcbi0jZGVmaW5lIElDU1NHX05VTV9FVEhUT09MX1NUQVRTIChJQ1NTR19OVU1fU1RBVFMgLSBJQ1NTR19OVU1fU1RBTkRBUkRfU1RBVFMpXG4rLyogUEEgc3RhdHMgd2l0aCBzdGFuZGFyZCB1QVBJIGVxdWl2YWxlbnRzLCBleHBvc2VkIHZpYSBnZXRfbW1fc3RhdHMgb25seSAqL1xuKyNkZWZpbmUgSUNTU0dfTlVNX1BBX1NUQU5EQVJEX1NUQVRTIDVcbisjZGVmaW5lIElDU1NHX05VTV9FVEhUT09MX1NUQVRTIChJQ1NTR19OVU1fU1RBVFMgLSBJQ1NTR19OVU1fU1RBTkRBUkRfU1RBVFMgLSBcXFxuK1x0XHRcdFx0IElDU1NHX05VTV9QQV9TVEFOREFSRF9TVEFUUylcbiBcbiAjZGVmaW5lIElFUF9ERUZBVUxUX0NZQ0xFX1RJTUVfTlNcdDEwMDAwMDBcdC8qIDEgbXMgKi9cbiBcbkBAIC0yNTQsNiArMjYwLDcgQEAgc3RydWN0IHBydWV0aF9lbWFjIHtcbiBcdHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2c7XG4gXHRzdHJ1Y3QgeGRwX2F0dGFjaG1lbnRfaW5mbyB4ZHBpO1xuIFx0aW50IHhza19xaWQ7XG4rXHRzdHJ1Y3QgcHJ1ZXRoX3FvcyBxb3M7XG4gfTtcbiBcbiAvKiBUaGUgYnVmIGluY2x1ZGVzIGhlYWRyb29tIGNvbXBhdGlibGUgd2l0aCBib3RoIHNrYiBhbmQgeGRwZiAqL1xuQEAgLTQ1OCw3ICs0NjUsNyBAQCBpbnQgZW1hY19mZGJfZmxvd19pZF91cGRhdGVkKHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYyk7XG4gXG4gdm9pZCBpY3NzZ19zdGF0c193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiB2b2lkIGVtYWNfdXBkYXRlX2hhcmR3YXJlX3N0YXRzKHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYyk7XG4taW50IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMsIGNoYXIgKnN0YXRfbmFtZSk7XG4rdTY0IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMsIGNoYXIgKnN0YXRfbmFtZSk7XG4gXG4gLyogQ29tbW9uIGZ1bmN0aW9ucyAqL1xuIHZvaWQgcHJ1ZXRoX2NsZWFudXBfcnhfY2hucyhzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcW9zLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19xb3MuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjI3YTk1M2Q5ODE1Mzhcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3Fvcy5jXG5AQCAtMCwwICsxLDMwNSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogVGV4YXMgSW5zdHJ1bWVudHMgSUNTU0cgUFJVRVRIIFFvUyBzdWJtb2R1bGVcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjMgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vXG4rICovXG4rXG4rI2luY2x1ZGUgXCJpY3NzZ19wcnVldGguaFwiXG4rI2luY2x1ZGUgXCJpY3NzZ19zd2l0Y2hfbWFwLmhcIlxuK1xuK3N0YXRpYyB2b2lkIGljc3NnX2lldF9zZXRfcHJlZW1wdF9tYXNrKHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYylcbit7XG4rXHR2b2lkIF9faW9tZW0gKmNvbmZpZyA9IGVtYWMtXHUwMDNlZHJhbS52YSArIElDU1NHX0NPTkZJR19PRkZTRVQ7XG4rXHRzdHJ1Y3QgcHJ1ZXRoX3Fvc19tcXByaW8gKnBfbXFwcmlvID0gXHUwMDI2ZW1hYy1cdTAwM2Vxb3MubXFwcmlvO1xuK1x0c3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXHUwMDI2cF9tcXByaW8tXHUwMDNlcW9wdDtcbitcdHN0cnVjdCBwcnVldGhfcW9zX2lldCAqaWV0ID0gXHUwMDI2ZW1hYy1cdTAwM2Vxb3MuaWV0O1xuK1x0aW50IHByZW1wdF9tYXNrID0gMCwgaTtcbitcdHU4IHRjLCBudW1fdGM7XG4rXG4rXHRpZiAoIWlldC1cdTAwM2VwcmVlbXB0aWJsZV90Y3MpXG4rXHRcdGdvdG8gcmVzZXRfaHc7XG4rXG4rXHRpZiAoaWV0LVx1MDAzZWZwZV9hY3RpdmUpIHtcbitcdFx0LyogUmVzZXQgYWxsIFFfTUFQIGVudHJpZXMgZmlyc3QgdG8gY2xlYXIgYW55IHN0YWxlIHByZWVtcHRpYmxlXG4rXHRcdCAqIGVudHJpZXMgZnJvbSBhIHByaW9yIHdpZGVyIFRDIG1hcHBpbmcuXG4rXHRcdCAqL1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJQ1NTR19NQVhfVENfUVVFVUVTOyBpKyspXG4rXHRcdFx0d3JpdGViKDAsIGNvbmZpZyArIEVYUFJFU1NfUFJFX0VNUFRJVkVfUV9NQVAgKyBpKTtcbitcbitcdFx0LyogQ29uZmlndXJlIHF1ZXVlcyBmb3IgdXNlciByZXF1ZXN0ZWQgcHJlZW1wdGlibGUgdGMgbWFwICovXG4rXHRcdG51bV90YyA9IHBfbXFwcmlvLVx1MDAzZXFvcHQubnVtX3RjO1xuK1x0XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIG51bV90YzsgdGMrKykge1xuK1x0XHRcdC8qIGNoZWNrIGlmIHRoZSB0YyBpcyBwcmVlbXB0aXZlIG9yIG5vdCAqL1xuK1x0XHRcdGlmIChpZXQtXHUwMDNlcHJlZW1wdGlibGVfdGNzIFx1MDAyNiBCSVQodGMpKSB7XG4rXHRcdFx0XHQvKiBTZXQgdGhlIHF1ZXVlcyBhcyBwcmVlbXB0aXZlIHF1ZXVlcyAqL1xuK1x0XHRcdFx0Zm9yIChpID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdOyBpIFx1MDAzYyBxb3B0LVx1MDAzZW9mZnNldFt0Y10gKyBxb3B0LVx1MDAzZWNvdW50W3RjXTsgaSsrKSB7XG4rXHRcdFx0XHRcdHdyaXRlYihCSVQoNCksXG4rXHRcdFx0XHRcdCAgICAgICBjb25maWcgKyBFWFBSRVNTX1BSRV9FTVBUSVZFX1FfTUFQICsgaSk7XG4rXHRcdFx0XHR9XG4rXHRcdFx0fSBlbHNlIHtcbitcdFx0XHRcdC8qIEFjY3VtdWxhdGUgZXhwcmVzcyBxdWV1ZSBiaXRzIGZvciB0aGUgbWFzayAqL1xuK1x0XHRcdFx0Zm9yIChpID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdOyBpIFx1MDAzYyBxb3B0LVx1MDAzZW9mZnNldFt0Y10gKyBxb3B0LVx1MDAzZWNvdW50W3RjXTsgaSsrKVxuK1x0XHRcdFx0XHRwcmVtcHRfbWFzayB8PSBCSVQoaSk7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHRcdHdyaXRlYihwcmVtcHRfbWFzaywgY29uZmlnICsgRVhQUkVTU19QUkVfRU1QVElWRV9RX01BU0spO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rcmVzZXRfaHc6XG4rXHQvKiBSZXNldCB0byBkZWZhdWx0OiBhbGwgcXVldWVzIGFzIGV4cHJlc3MgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElDU1NHX01BWF9UQ19RVUVVRVM7IGkrKylcbitcdFx0d3JpdGViKDAsIGNvbmZpZyArIEVYUFJFU1NfUFJFX0VNUFRJVkVfUV9NQVAgKyBpKTtcbitcdHdyaXRlYihJQ1NTR19FWFBSRVNTX1FfTUFTS19BTEwsIGNvbmZpZyArIEVYUFJFU1NfUFJFX0VNUFRJVkVfUV9NQVNLKTtcbit9XG4rXG4rc3RhdGljIGludCBpY3NzZ19pZXRfdmVyaWZ5X3dhaXQoc3RydWN0IHBydWV0aF9lbWFjICplbWFjKVxuK3tcbitcdHZvaWQgX19pb21lbSAqY29uZmlnID0gZW1hYy1cdTAwM2VkcmFtLnZhICsgSUNTU0dfQ09ORklHX09GRlNFVDtcbitcdHN0cnVjdCBwcnVldGhfcW9zX2lldCAqaWV0ID0gXHUwMDI2ZW1hYy1cdTAwM2Vxb3MuaWV0O1xuK1x0dW5zaWduZWQgbG9uZyBkZWxheV91cywgdGltZW91dF91cztcbitcdHUzMiBzdGF0dXM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0ZGVsYXlfdXMgPSBpZXQtXHUwMDNldmVyaWZ5X3RpbWVfbXMgKiAxMDAwO1xuK1x0dGltZW91dF91cyA9IGRlbGF5X3VzICogSUNTU0dfSUVUX1ZFUklGWV9BVFRFTVBUUztcbitcbitcdHJldCA9IHJlYWRiX3BvbGxfdGltZW91dChjb25maWcgKyBQUkVfRU1QVElPTl9WRVJJRllfU1RBVFVTLFxuK1x0XHRcdFx0IHN0YXR1cyxcbitcdFx0XHRcdCBzdGF0dXMgPT0gSUNTU0dfSUVURlBFX1NUQVRFX1NVQ0NFRURFRCB8fFxuK1x0XHRcdFx0IHN0YXR1cyA9PSBJQ1NTR19JRVRGUEVfU1RBVEVfRkFJTEVELFxuK1x0XHRcdFx0IGRlbGF5X3VzLFxuK1x0XHRcdFx0IHRpbWVvdXRfdXMpO1xuK1xuK1x0aWV0LVx1MDAzZXZlcmlmeV9zdGF0dXMgPSBzdGF0dXM7XG4rXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgc3RhdHVzID09IElDU1NHX0lFVEZQRV9TVEFURV9GQUlMRUQpXG4rXHRcdHJldHVybiAtRUlPO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyogRGlyZWN0IHN5bmNocm9ub3VzIGNvbmZpZ3VyYXRpb24gb2YgSUVUIEZQRS5cbisgKiBDYWxsZXIgbXVzdCBob2xkIGlldC1cdTAwM2VmcGVfbG9jay5cbisgKi9cbitpbnQgaWNzc2dfY29uZmlnX2lldGZwZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgYm9vbCBlbmFibGUpXG4re1xuK1x0c3RydWN0IHBydWV0aF9lbWFjICplbWFjID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXHR2b2lkIF9faW9tZW0gKmNvbmZpZyA9IGVtYWMtXHUwMDNlZHJhbS52YSArIElDU1NHX0NPTkZJR19PRkZTRVQ7XG4rXHRzdHJ1Y3QgcHJ1ZXRoX3Fvc19pZXQgKmlldCA9IFx1MDAyNmVtYWMtXHUwMDNlcW9zLmlldDtcbitcdGludCByZXQ7XG4rXHR1OCB2YWw7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmlldC1cdTAwM2VmcGVfbG9jayk7XG4rXG4rXHRpZiAoIVJFQURfT05DRShlbWFjLVx1MDAzZWxpbmspKSB7XG4rXHRcdG5ldGRldl9kYmcobmRldiwgXCJjYW5ub3QgY2hhbmdlIElFVC9GUEUgc3RhdGUgd2hlbiBpbnRlcmZhY2UgaXMgZG93blxcblwiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHQvKiBVcGRhdGUgRlBFIFR4IGVuYWJsZSBiaXQgKFBSRV9FTVBUSU9OX0VOQUJMRV9UWCkgaWZcbitcdCAqIGZwZV9lbmFibGVkIGlzIHNldCB0byBlbmFibGUgTU0gaW4gVHggZGlyZWN0aW9uXG4rXHQgKi9cbitcdHdyaXRlYihlbmFibGUgPyAxIDogMCwgY29uZmlnICsgUFJFX0VNUFRJT05fRU5BQkxFX1RYKTtcbitcdHdyaXRldyhpZXQtXHUwMDNldHhfbWluX2ZyYWdfc2l6ZSArIEVUSF9GQ1NfTEVOLFxuK1x0ICAgICAgIGNvbmZpZyArIFBSRV9FTVBUSU9OX0FERF9GUkFHX1NJWkVfTE9DQUwpO1xuK1xuK1x0LyogSWYgRlBFIGlzIHRvIGJlIGVuYWJsZWQsIGZpcnN0IGNvbmZpZ3VyZSBNQUMgVmVyaWZ5IHN0YXRlXG4rXHQgKiBtYWNoaW5lIGluIGZpcm13YXJlIGFzIGZpcm13YXJlIGtpY2tzIHRoZSBWZXJpZnkgcHJvY2Vzc1xuK1x0ICogYXMgc29vbiBhcyBJQ1NTR19FTUFDX1BPUlRfUFJFTVBUX1RYX0VOQUJMRSBjb21tYW5kIGlzXG4rXHQgKiByZWNlaXZlZC5cbitcdCAqL1xuK1x0aWYgKGVuYWJsZSBcdTAwMjZcdTAwMjYgaWV0LVx1MDAzZW1hY192ZXJpZnlfY29uZmlndXJlKSB7XG4rXHRcdHdyaXRlYigxLCBjb25maWcgKyBQUkVfRU1QVElPTl9FTkFCTEVfVkVSSUZZKTtcbitcdFx0d3JpdGVsKGlldC1cdTAwM2V2ZXJpZnlfdGltZV9tcywgY29uZmlnICsgUFJFX0VNUFRJT05fVkVSSUZZX1RJTUUpO1xuK1x0fSBlbHNlIHtcbitcdFx0d3JpdGViKDAsIGNvbmZpZyArIFBSRV9FTVBUSU9OX0VOQUJMRV9WRVJJRlkpO1xuK1x0XHRpZXQtXHUwMDNldmVyaWZ5X3N0YXR1cyA9IElDU1NHX0lFVEZQRV9TVEFURV9ESVNBQkxFRDtcbitcdH1cbitcbitcdC8qIFNlbmQgY29tbWFuZCB0byBlbmFibGUgRlBFIFR4IHNpZGUuIFJ4IGlzIGFsd2F5cyBlbmFibGVkICovXG4rXHRyZXQgPSBpY3NzZ19zZXRfcG9ydF9zdGF0ZShlbWFjLFxuK1x0XHRcdFx0ICAgZW5hYmxlID8gSUNTU0dfRU1BQ19QT1JUX1BSRU1QVF9UWF9FTkFCTEUgOlxuK1x0XHRcdFx0XHQgICAgSUNTU0dfRU1BQ19QT1JUX1BSRU1QVF9UWF9ESVNBQkxFKTtcbitcdGlmIChyZXQpIHtcbitcdFx0bmV0ZGV2X2VycihuZGV2LCBcIlRYIHByZWVtcHQgJXMgY29tbWFuZCBmYWlsZWRcXG5cIixcbitcdFx0XHQgICBzdHJfZW5hYmxlX2Rpc2FibGUoZW5hYmxlKSk7XG4rXHRcdGdvdG8gZmFsbGJhY2s7XG4rXHR9XG4rXG4rXHRpZiAoZW5hYmxlIFx1MDAyNlx1MDAyNiBpZXQtXHUwMDNlbWFjX3ZlcmlmeV9jb25maWd1cmUpIHtcbitcdFx0cmV0ID0gaWNzc2dfaWV0X3ZlcmlmeV93YWl0KGVtYWMpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZGV2LCBcIk1BQyBNZXJnZSB2ZXJpZmljYXRpb24gZmFpbGVkOiAlc1xcblwiLFxuK1x0XHRcdFx0ICAgaWV0LVx1MDAzZXZlcmlmeV9zdGF0dXMgPT0gSUNTU0dfSUVURlBFX1NUQVRFX0ZBSUxFRCA/XG4rXHRcdFx0XHQgICBcImxpbmsgcGFydG5lciByZWplY3RlZFwiIDogXCJ0aW1lb3V0XCIpO1xuK1x0XHRcdGdvdG8gZGlzYWJsZV90eDtcbitcdFx0fVxuK1x0fSBlbHNlIGlmIChlbmFibGUpIHtcbitcdFx0LyogR2l2ZSBmaXJtd2FyZSBzb21lIHRpbWUgdG8gdXBkYXRlXG4rXHRcdCAqIFBSRV9FTVBUSU9OX0FDVElWRV9UWCBzdGF0ZVxuK1x0XHQgKi9cbitcdFx0dXNsZWVwX3JhbmdlKDEwMCwgMjAwKTtcbitcdH1cbitcbitcdGlmIChlbmFibGUpIHtcbitcdFx0dmFsID0gcmVhZGIoY29uZmlnICsgUFJFX0VNUFRJT05fQUNUSVZFX1RYKTtcbitcdFx0aWYgKHZhbCAhPSAxKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZGV2LFxuK1x0XHRcdFx0ICAgXCJGaXJtd2FyZSBmYWlscyB0byBhY3RpdmF0ZSBJRVQvRlBFXFxuXCIpO1xuK1x0XHRcdHJldCA9IC1FSU87XG4rXHRcdFx0Z290byBkaXNhYmxlX3R4O1xuK1x0XHR9XG4rXHRcdGlldC1cdTAwM2VmcGVfYWN0aXZlID0gdHJ1ZTtcbitcdH0gZWxzZSB7XG4rXHRcdGlldC1cdTAwM2VmcGVfYWN0aXZlID0gZmFsc2U7XG4rXHR9XG4rXG4rXHRpY3NzZ19pZXRfc2V0X3ByZWVtcHRfbWFzayhlbWFjKTtcbitcdG5ldGRldl9kYmcobmRldiwgXCJJRVQgRlBFICVzIHN1Y2Nlc3NmdWxseVxcblwiLFxuK1x0XHQgICBzdHJfZW5hYmxlX2Rpc2FibGUoZW5hYmxlKSk7XG4rXHRyZXR1cm4gMDtcbitcbitkaXNhYmxlX3R4OlxuK1x0aWNzc2dfc2V0X3BvcnRfc3RhdGUoZW1hYywgSUNTU0dfRU1BQ19QT1JUX1BSRU1QVF9UWF9ESVNBQkxFKTtcbitmYWxsYmFjazpcbitcdHdyaXRlYigwLCBjb25maWcgKyBQUkVfRU1QVElPTl9FTkFCTEVfVFgpO1xuK1x0d3JpdGViKDAsIGNvbmZpZyArIFBSRV9FTVBUSU9OX0VOQUJMRV9WRVJJRlkpO1xuK1x0aWV0LVx1MDAzZXZlcmlmeV9zdGF0dXMgPSBJQ1NTR19JRVRGUEVfU1RBVEVfRElTQUJMRUQ7XG4rXHRpZXQtXHUwMDNlZnBlX2FjdGl2ZSA9IGZhbHNlO1xuK1x0aWNzc2dfaWV0X3NldF9wcmVlbXB0X21hc2soZW1hYyk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbit2b2lkIGljc3NnX3Fvc19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuK3tcbitcdHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYyA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1x0c3RydWN0IHBydWV0aF9xb3NfaWV0ICppZXQgPSBcdTAwMjZlbWFjLVx1MDAzZXFvcy5pZXQ7XG4rXG4rXHRtdXRleF9pbml0KFx1MDAyNmlldC1cdTAwM2VmcGVfbG9jayk7XG4rXHQvKiBTZXQgZGVmYXVsdCB2YWx1ZXMgdG8gcHJldmVudCBnYXJiYWdlIHZhbHVlcyBkdXJpbmcgLmdldF9tbSgpICovXG4rXHRpZXQtXHUwMDNldmVyaWZ5X3RpbWVfbXMgPSBJQ1NTR19JRVRfTUFYX1ZFUklGWV9USU1FO1xuK1x0aWV0LVx1MDAzZXR4X21pbl9mcmFnX3NpemUgPSBFVEhfWkxFTjtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoaWNzc2dfcW9zX2luaXQpO1xuK1xuK3N0YXRpYyBpbnQgaWNzc2dfaWV0X2NoYW5nZV9wcmVlbXB0aWJsZV90Y3Moc3RydWN0IHBydWV0aF9lbWFjICplbWFjKVxuK3tcbitcdHN0cnVjdCBwcnVldGhfcW9zX2lldCAqaWV0ID0gXHUwMDI2ZW1hYy1cdTAwM2Vxb3MuaWV0O1xuK1x0aW50IHJldDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2aWV0LVx1MDAzZWZwZV9sb2NrKTtcbitcdGlmICghaWV0LVx1MDAzZWZwZV9lbmFibGVkIFx1MDAyNlx1MDAyNiAhaWV0LVx1MDAzZXByZWVtcHRpYmxlX3Rjcykge1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2aWV0LVx1MDAzZWZwZV9sb2NrKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXHRyZXQgPSBpY3NzZ19jb25maWdfaWV0ZnBlKGVtYWMtXHUwMDNlbmRldiwgaWV0LVx1MDAzZWZwZV9lbmFibGVkKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZpZXQtXHUwMDNlZnBlX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBlbWFjX3RjX3F1ZXJ5X2NhcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHZvaWQgKnR5cGVfZGF0YSlcbit7XG4rXHRzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlID0gdHlwZV9kYXRhO1xuK1xuK1x0c3dpdGNoIChiYXNlLVx1MDAzZXR5cGUpIHtcbitcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOiB7XG4rXHRcdHN0cnVjdCB0Y19tcXByaW9fY2FwcyAqY2FwcyA9IGJhc2UtXHUwMDNlY2FwcztcbitcbitcdFx0Y2Fwcy1cdTAwM2V2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludCBlbWFjX3RjX3NldHVwX21xcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdm9pZCAqdHlwZV9kYXRhKVxuK3tcbitcdHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYyA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1x0c3RydWN0IHBydWV0aF9xb3NfbXFwcmlvICpwX21xcHJpbyA9IFx1MDAyNmVtYWMtXHUwMDNlcW9zLm1xcHJpbztcbitcdHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8gPSB0eXBlX2RhdGE7XG4rXHRzdHJ1Y3QgcHJ1ZXRoX3Fvc19pZXQgKmlldCA9IFx1MDAyNmVtYWMtXHUwMDNlcW9zLmlldDtcbitcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuK1x0aW50IHRjLCBvZmZzZXQsIGNvdW50O1xuK1xuK1x0LyogVmFsaWRhdGUgcGFyYW1ldGVycyAqL1xuK1x0aWYgKHFvcHQtXHUwMDNlbnVtX3RjIFx1MDAzZSBJQ1NTR19NQVhfVENfUVVFVUVTKSB7XG4rXHRcdG5ldGRldl9lcnIobmRldiwgXCJOdW1iZXIgb2YgdHJhZmZpYyBjbGFzc2VzICgldSkgZXhjZWVkcyBoYXJkd2FyZSBsaW1pdFxcblwiLFxuK1x0XHRcdCAgIHFvcHQtXHUwMDNlbnVtX3RjKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfU0hBUEVSKSB7XG4rXHRcdG5ldGRldl9lcnIobmRldiwgXCJ0cmFmZmljIHNoYXBpbmcgaXMgbm90IHN1cHBvcnRlZFxcblwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgKFRDX01RUFJJT19GX01JTl9SQVRFIHwgVENfTVFQUklPX0ZfTUFYX1JBVEUpKSB7XG4rXHRcdG5ldGRldl9lcnIobmRldiwgXCJwZXItcXVldWUgcmF0ZSBsaW1pdGluZyBpcyBub3Qgc3VwcG9ydGVkXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAoIXFvcHQtXHUwMDNlbnVtX3RjKSB7XG4rXHRcdG5ldGRldl9yZXNldF90YyhuZGV2KTtcbitcdH0gZWxzZSB7XG4rXHRcdG5ldGRldl9zZXRfbnVtX3RjKG5kZXYsIHFvcHQtXHUwMDNlbnVtX3RjKTtcbitcbitcdFx0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMrKykge1xuK1x0XHRcdGNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4rXHRcdFx0b2Zmc2V0ID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdO1xuK1x0XHRcdG5ldGRldl9zZXRfdGNfcXVldWUobmRldiwgdGMsIGNvdW50LCBvZmZzZXQpO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmlldC1cdTAwM2VmcGVfbG9jayk7XG4rXHRpZiAoIXFvcHQtXHUwMDNlbnVtX3RjKSB7XG4rXHRcdGlldC1cdTAwM2VwcmVlbXB0aWJsZV90Y3MgPSAwO1xuK1x0fSBlbHNlIHtcbitcdFx0bWVtY3B5KFx1MDAyNnBfbXFwcmlvLVx1MDAzZXFvcHQsIHFvcHQsIHNpemVvZigqcW9wdCkpO1xuK1x0XHRpZXQtXHUwMDNlcHJlZW1wdGlibGVfdGNzID0gbXFwcmlvLVx1MDAzZXByZWVtcHRpYmxlX3RjcztcbitcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZpZXQtXHUwMDNlZnBlX2xvY2spO1xuK1xuK1x0bmV0ZGV2X2RiZyhuZGV2LCBcImRldi1cdTAwM2VudW1fdGMgJXUgZGV2LVx1MDAzZXJlYWxfbnVtX3R4X3F1ZXVlcyAldVxcblwiLFxuK1x0XHQgICBuZGV2LVx1MDAzZW51bV90YywgbmRldi1cdTAwM2VyZWFsX251bV90eF9xdWV1ZXMpO1xuK1xuK1x0cmV0dXJuIGljc3NnX2lldF9jaGFuZ2VfcHJlZW1wdGlibGVfdGNzKGVtYWMpO1xuK31cbitcbitpbnQgaWNzc2dfcW9zX25kb19zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG4rXHRcdFx0ICAgdm9pZCAqdHlwZV9kYXRhKVxuK3tcbitcdHN3aXRjaCAodHlwZSkge1xuK1x0Y2FzZSBUQ19RVUVSWV9DQVBTOlxuK1x0XHRyZXR1cm4gZW1hY190Y19xdWVyeV9jYXBzKG5kZXYsIHR5cGVfZGF0YSk7XG4rXHRjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzpcbitcdFx0cmV0dXJuIGVtYWNfdGNfc2V0dXBfbXFwcmlvKG5kZXYsIHR5cGVfZGF0YSk7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGljc3NnX3Fvc19uZG9fc2V0dXBfdGMpO1xuK1xuK3ZvaWQgaWNzc2dfcW9zX2xpbmtfc3RhdGVfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuK3tcbitcdHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYyA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1x0c3RydWN0IHBydWV0aF9xb3NfaWV0ICppZXQgPSBcdTAwMjZlbWFjLVx1MDAzZXFvcy5pZXQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFSRUFEX09OQ0UoZW1hYy1cdTAwM2VsaW5rKSkge1xuK1x0XHQvKiBDbGVhciBGUEUgYWN0aXZlIHN0YXRlIG9uIGxpbmstZG93biBzbyBnZXRfbW0oKSByZXBvcnRzXG4rXHRcdCAqIGFjY3VyYXRlIHR4X2FjdGl2ZSBhbmQgdmVyaWZ5X3N0YXR1cyB3aGlsZSBsaW5rIGlzIGRvd24uXG4rXHRcdCAqL1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNmlldC1cdTAwM2VmcGVfbG9jayk7XG4rXHRcdGlldC1cdTAwM2VmcGVfYWN0aXZlID0gZmFsc2U7XG4rXHRcdGlldC1cdTAwM2V2ZXJpZnlfc3RhdHVzID0gSUNTU0dfSUVURlBFX1NUQVRFX0RJU0FCTEVEO1xuK1x0XHRpY3NzZ19pZXRfc2V0X3ByZWVtcHRfbWFzayhlbWFjKTtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmlldC1cdTAwM2VmcGVfbG9jayk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHJldCA9IGljc3NnX2lldF9jaGFuZ2VfcHJlZW1wdGlibGVfdGNzKGVtYWMpO1xuK1x0aWYgKHJldClcbitcdFx0bmV0ZGV2X2RiZyhuZGV2LCBcIklFVCBGUEUgJXMgZmFpbGVkXFxuXCIsXG4rXHRcdFx0ICAgc3RyX2VuYWJsZV9kaXNhYmxlKGlldC1cdTAwM2VmcGVfZW5hYmxlZCkpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChpY3NzZ19xb3NfbGlua19zdGF0ZV91cGRhdGUpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3Fvcy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcW9zLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lODI2Y2U0YmNmZDk2XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19xb3MuaFxuQEAgLTAsMCArMSw2OCBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rLyogQ29weXJpZ2h0IChDKSAyMDIzIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tL1xuKyAqL1xuK1xuKyNpZm5kZWYgX19ORVRfVElfSUNTU0dfUU9TX0hcbisjZGVmaW5lIF9fTkVUX1RJX0lDU1NHX1FPU19IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYXRvbWljLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxuK1xuKyNkZWZpbmUgSUNTU0dfTUFYX1RDX1FVRVVFU1x0XHRcdDhcbisjZGVmaW5lIElDU1NHX0VYUFJFU1NfUV9NQVNLX0FMTFx0XHQweEZGXG4rI2RlZmluZSBJQ1NTR19JRVRfTUFYX1ZFUklGWV9USU1FXHRcdDEyOFxuKyNkZWZpbmUgSUNTU0dfSUVUX01JTl9WRVJJRllfVElNRVx0XHQxXG4rI2RlZmluZSBJQ1NTR19JRVRfVkVSSUZZX0FUVEVNUFRTXHRcdDNcbitcbisvKipcbisgKiBlbnVtIGljc3NnX2lldGZwZV92ZXJpZnlfc3RhdGVzIC0gc3RhdHVzIG9mIE1NIFZlcmlmeSByZXR1cm5lZCBieSBmaXJtd2FyZVxuKyAqIEBJQ1NTR19JRVRGUEVfU1RBVEVfVU5LTk9XTjpcbisgKlx0dmVyaWZpY2F0aW9uIHN0YXR1cyBpcyB1bmtub3duXG4rICogQElDU1NHX0lFVEZQRV9TVEFURV9JTklUSUFMOlxuKyAqXHRGaXJtd2FyZSByZXR1cm5zIHRoaXMgaWYgdmVyaWZ5IHN0YXRlIGRpYWdyYW0gaXMgaWRsZVxuKyAqIEBJQ1NTR19JRVRGUEVfU1RBVEVfVkVSSUZZSU5HOlxuKyAqXHRGaXJtd2FyZSByZXR1cm5zIHRoaXMgaWYgdmVyaWZpY2F0aW9uIGlzIG9uZ29pbmdcbisgKiBASUNTU0dfSUVURlBFX1NUQVRFX1NVQ0NFRURFRDpcbisgKlx0RmlybXdhcmUgcmV0dXJucyB0aGlzIGlmIHZlcmlmeSBzdGF0ZSBkaWFncmFtIGNvbXBsZXRlcyB2ZXJpZmljYXRpb25cbisgKiBASUNTU0dfSUVURlBFX1NUQVRFX0ZBSUxFRDpcbisgKlx0RmlybXdhcmUgcmV0dXJucyB0aGlzIGlmIHZlcmlmeSBzdGF0ZSBkaWFncmFtIGZhaWxzIGR1cmluZyB2ZXJpZmljYXRpb25cbisgKiBASUNTU0dfSUVURlBFX1NUQVRFX0RJU0FCTEVEOlxuKyAqXHR2ZXJpZmljYXRpb24gaXMgZGlzYWJsZWQgYnkgdGhlIGRyaXZlclxuKyAqL1xuK2VudW0gaWNzc2dfaWV0ZnBlX3ZlcmlmeV9zdGF0ZXMge1xuK1x0SUNTU0dfSUVURlBFX1NUQVRFX1VOS05PV04gPSAwLFxuK1x0SUNTU0dfSUVURlBFX1NUQVRFX0lOSVRJQUwsXG4rXHRJQ1NTR19JRVRGUEVfU1RBVEVfVkVSSUZZSU5HLFxuK1x0SUNTU0dfSUVURlBFX1NUQVRFX1NVQ0NFRURFRCxcbitcdElDU1NHX0lFVEZQRV9TVEFURV9GQUlMRUQsXG4rXHRJQ1NTR19JRVRGUEVfU1RBVEVfRElTQUJMRURcbit9O1xuK1xuK3N0cnVjdCBwcnVldGhfcW9zX21xcHJpbyB7XG4rXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgcW9wdDtcbit9O1xuK1xuK3N0cnVjdCBwcnVldGhfcW9zX2lldCB7XG4rXHRib29sIGZwZV9lbmFibGVkO1xuK1x0Ym9vbCBtYWNfdmVyaWZ5X2NvbmZpZ3VyZTtcbitcdHUzMiB0eF9taW5fZnJhZ19zaXplO1xuK1x0dTMyIHZlcmlmeV90aW1lX21zO1xuK1x0Ym9vbCBmcGVfYWN0aXZlO1xuK1x0ZW51bSBpY3NzZ19pZXRmcGVfdmVyaWZ5X3N0YXRlcyB2ZXJpZnlfc3RhdHVzO1xuK1x0LyogZnBlIG11dGV4IHByb3RlY3RzIGFsbCBGUEUgb3BlcmF0aW9ucyBmb3Igc3luY2hyb25pemF0aW9uICovXG4rXHRzdHJ1Y3QgbXV0ZXggZnBlX2xvY2s7XG4rXHR1OCBwcmVlbXB0aWJsZV90Y3M7XG4rfTtcbitcbitzdHJ1Y3QgcHJ1ZXRoX3FvcyB7XG4rXHRzdHJ1Y3QgcHJ1ZXRoX3Fvc19pZXQgaWV0O1xuK1x0c3RydWN0IHBydWV0aF9xb3NfbXFwcmlvIG1xcHJpbztcbit9O1xuK1xuK3ZvaWQgaWNzc2dfcW9zX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuK3ZvaWQgaWNzc2dfcW9zX2xpbmtfc3RhdGVfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbitpbnQgaWNzc2dfcW9zX25kb19zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG4rXHRcdFx0ICAgdm9pZCAqdHlwZV9kYXRhKTtcbitpbnQgaWNzc2dfY29uZmlnX2lldGZwZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgYm9vbCBlbmFibGUpO1xuKyNlbmRpZiAvKiBfX05FVF9USV9JQ1NTR19RT1NfSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3N0YXRzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zdGF0cy5jXG5pbmRleCA3MTU5YmFhMDE1NWNmLi5jZmRiNmY1ZGM1ZGExIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfc3RhdHMuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfc3RhdHMuY1xuQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBpY3NzZ19zdGF0c193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChpY3NzZ19zdGF0c193b3JrX2hhbmRsZXIpO1xuIFxuLWludCBlbWFjX2dldF9zdGF0X2J5X25hbWUoc3RydWN0IHBydWV0aF9lbWFjICplbWFjLCBjaGFyICpzdGF0X25hbWUpXG4rdTY0IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMsIGNoYXIgKnN0YXRfbmFtZSlcbiB7XG4gXHRpbnQgaTtcbiBcbkBAIC05MSw1ICs5MSw1IEBAIGludCBlbWFjX2dldF9zdGF0X2J5X25hbWUoc3RydWN0IHBydWV0aF9lbWFjICplbWFjLCBjaGFyICpzdGF0X25hbWUpXG4gXHR9XG4gXG4gXHRuZXRkZXZfZXJyKGVtYWMtXHUwMDNlbmRldiwgXCJJbnZhbGlkIHN0YXRzICVzXFxuXCIsIHN0YXRfbmFtZSk7XG4tXHRyZXR1cm4gLUVJTlZBTDtcbitcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zdGF0cy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfc3RhdHMuaFxuaW5kZXggNWVjMGIzOGUwYzY3ZC4uYjg2ZGE4ZGEyM2ExOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3N0YXRzLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3N0YXRzLmhcbkBAIC04LDggKzgsNiBAQFxuICNpZm5kZWYgX19ORVRfVElfSUNTU0dfU1RBVFNfSFxuICNkZWZpbmUgX19ORVRfVElfSUNTU0dfU1RBVFNfSFxuIFxuLSNpbmNsdWRlIFwiaWNzc2dfcHJ1ZXRoLmhcIlxuLVxuICNkZWZpbmUgU1RBVFNfVElNRV9MSU1JVF8xR19NUyAgICAyNTAwMCAgICAvKiAyNSBzZWNvbmRzIEAgMUcgKi9cbiBcbiBzdHJ1Y3QgbWlpZ19zdGF0c19yZWdzIHtcbkBAIC0xNTUsNTAgKzE1Myw2MCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGljc3NnX21paWdfc3RhdHMgaWNzc2dfYWxsX21paWdfc3RhdHNbXSA9IHtcbiBcdElDU1NHX01JSUdfU1RBVFModHhfYnl0ZXMsIHRydWUpLFxuIH07XG4gXG4tI2RlZmluZSBJQ1NTR19QQV9TVEFUUyhmaWVsZClcdFxcXG4te1x0XHRcdFx0XFxcbi1cdCNmaWVsZCxcdFx0XHRcXFxuLVx0ZmllbGQsXHRcdFx0XFxcbisjZGVmaW5lIElDU1NHX1BBX1NUQVRTKGZpZWxkLCBzdGQpXHRcXFxuK3tcdFx0XHRcdFx0XFxcbitcdCNmaWVsZCxcdFx0XHRcdFxcXG4rXHRmaWVsZCxcdFx0XHRcdFxcXG4rXHRzdGQsXHRcdFx0XHRcXFxuIH1cbiBcbiBzdHJ1Y3QgaWNzc2dfcGFfc3RhdHMge1xuIFx0Y2hhciBuYW1lW0VUSF9HU1RSSU5HX0xFTl07XG4gXHR1MzIgb2Zmc2V0O1xuK1x0Ym9vbCBzdGFuZGFyZF9zdGF0cztcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNzc2dfcGFfc3RhdHMgaWNzc2dfYWxsX3BhX3N0YXRzW10gPSB7XG4tXHRJQ1NTR19QQV9TVEFUUyhGV19SVFVfUEtUX0RST1ApLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfUTBfT1ZFUkZMT1cpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfUTFfT1ZFUkZMT1cpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfUTJfT1ZFUkZMT1cpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfUTNfT1ZFUkZMT1cpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfUTRfT1ZFUkZMT1cpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfUTVfT1ZFUkZMT1cpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfUTZfT1ZFUkZMT1cpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfUTdfT1ZFUkZMT1cpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfRFJPUFBFRF9QS1QpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfUlhfRVJST1IpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfUlhfRFNfSU5WQUxJRCksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19UWF9EUk9QUEVEX1BBQ0tFVCksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19UWF9UU19EUk9QUEVEX1BBQ0tFVCksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19JTkZfUE9SVF9ESVNBQkxFRCksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19JTkZfU0FWKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX0lORl9TQV9ETCksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19JTkZfUE9SVF9CTE9DS0VEKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX0lORl9EUk9QX1RBR0dFRCksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19JTkZfRFJPUF9QUklPVEFHR0VEKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX0lORl9EUk9QX05PVEFHKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX0lORl9EUk9QX05PVE1FTUJFUiksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19SWF9FT0ZfU0hPUlRfRlJNRVJSKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX1JYX0IwX0RST1BfRUFSTFlfRU9GKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX1RYX0pVTUJPX0ZSTV9DVVRPRkYpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfUlhfRVhQX0ZSQUdfUV9EUk9QKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX1JYX0ZJRk9fT1ZFUlJVTiksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19DVVRfVEhSX1BLVCksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19IT1NUX1JYX1BLVF9DTlQpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfSE9TVF9UWF9QS1RfQ05UKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX0hPU1RfRUdSRVNTX1FfUFJFX09WRVJGTE9XKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX0hPU1RfRUdSRVNTX1FfRVhQX09WRVJGTE9XKSxcbitcdElDU1NHX1BBX1NUQVRTKEZXX1JUVV9QS1RfRFJPUCwgZmFsc2UpLFxuK1x0SUNTU0dfUEFfU1RBVFMoRldfUTBfT1ZFUkZMT1csIGZhbHNlKSxcbitcdElDU1NHX1BBX1NUQVRTKEZXX1ExX09WRVJGTE9XLCBmYWxzZSksXG4rXHRJQ1NTR19QQV9TVEFUUyhGV19RMl9PVkVSRkxPVywgZmFsc2UpLFxuK1x0SUNTU0dfUEFfU1RBVFMoRldfUTNfT1ZFUkZMT1csIGZhbHNlKSxcbitcdElDU1NHX1BBX1NUQVRTKEZXX1E0X09WRVJGTE9XLCBmYWxzZSksXG4rXHRJQ1NTR19QQV9TVEFUUyhGV19RNV9PVkVSRkxPVywgZmFsc2UpLFxuK1x0SUNTU0dfUEFfU1RBVFMoRldfUTZfT1ZFUkZMT1csIGZhbHNlKSxcbitcdElDU1NHX1BBX1NUQVRTKEZXX1E3X09WRVJGTE9XLCBmYWxzZSksXG4rXHRJQ1NTR19QQV9TVEFUUyhGV19EUk9QUEVEX1BLVCwgZmFsc2UpLFxuK1x0SUNTU0dfUEFfU1RBVFMoRldfUlhfRVJST1IsIGZhbHNlKSxcbitcdElDU1NHX1BBX1NUQVRTKEZXX1JYX0RTX0lOVkFMSUQsIGZhbHNlKSxcbitcdElDU1NHX1BBX1NUQVRTKEZXX1RYX0RST1BQRURfUEFDS0VULCBmYWxzZSksXG4rXHRJQ1NTR19QQV9TVEFUUyhGV19UWF9UU19EUk9QUEVEX1BBQ0tFVCwgZmFsc2UpLFxuK1x0SUNTU0dfUEFfU1RBVFMoRldfSU5GX1BPUlRfRElTQUJMRUQsIGZhbHNlKSxcbitcdElDU1NHX1BBX1NUQVRTKEZXX0lORl9TQVYsIGZhbHNlKSxcbitcdElDU1NHX1BBX1NUQVRTKEZXX0lORl9TQV9ETCwgZmFsc2UpLFxuK1x0SUNTU0dfUEFfU1RBVFMoRldfSU5GX1BPUlRfQkxPQ0tFRCwgZmFsc2UpLFxuK1x0SUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfVEFHR0VELCBmYWxzZSksXG4rXHRJQ1NTR19QQV9TVEFUUyhGV19JTkZfRFJPUF9QUklPVEFHR0VELCBmYWxzZSksXG4rXHRJQ1NTR19QQV9TVEFUUyhGV19JTkZfRFJPUF9OT1RBRywgZmFsc2UpLFxuK1x0SUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfTk9UTUVNQkVSLCBmYWxzZSksXG4rXHQvKiBNQUMgTWVyZ2UgY291bnRlcnM6IGV4cG9zZWQgdmlhIC5nZXRfbW1fc3RhdHMgc3RhbmRhcmQgdUFQSSxcbitcdCAqIG5vdCBkdXBsaWNhdGVkIGluIHRoZSBwcml2YXRlIGV0aHRvb2wgLVMgdGFibGUuXG4rXHQgKi9cbitcdElDU1NHX1BBX1NUQVRTKEZXX1BSRUVNUFRfQkFEX0ZSQUcsIHRydWUpLFxuK1x0SUNTU0dfUEFfU1RBVFMoRldfUFJFRU1QVF9BU1NFTUJMWV9FUlIsIHRydWUpLFxuK1x0SUNTU0dfUEFfU1RBVFMoRldfUFJFRU1QVF9GUkFHX0NOVF9UWCwgdHJ1ZSksXG4rXHRJQ1NTR19QQV9TVEFUUyhGV19QUkVFTVBUX0FTU0VNQkxZX09LLCB0cnVlKSxcbitcdElDU1NHX1BBX1NUQVRTKEZXX1BSRUVNUFRfRlJBR19DTlRfUlgsIHRydWUpLFxuK1x0SUNTU0dfUEFfU1RBVFMoRldfUlhfRU9GX1NIT1JUX0ZSTUVSUiwgZmFsc2UpLFxuK1x0SUNTU0dfUEFfU1RBVFMoRldfUlhfQjBfRFJPUF9FQVJMWV9FT0YsIGZhbHNlKSxcbitcdElDU1NHX1BBX1NUQVRTKEZXX1RYX0pVTUJPX0ZSTV9DVVRPRkYsIGZhbHNlKSxcbitcdElDU1NHX1BBX1NUQVRTKEZXX1JYX0VYUF9GUkFHX1FfRFJPUCwgZmFsc2UpLFxuK1x0SUNTU0dfUEFfU1RBVFMoRldfUlhfRklGT19PVkVSUlVOLCBmYWxzZSksXG4rXHRJQ1NTR19QQV9TVEFUUyhGV19DVVRfVEhSX1BLVCwgZmFsc2UpLFxuK1x0SUNTU0dfUEFfU1RBVFMoRldfSE9TVF9SWF9QS1RfQ05ULCBmYWxzZSksXG4rXHRJQ1NTR19QQV9TVEFUUyhGV19IT1NUX1RYX1BLVF9DTlQsIGZhbHNlKSxcbitcdElDU1NHX1BBX1NUQVRTKEZXX0hPU1RfRUdSRVNTX1FfUFJFX09WRVJGTE9XLCBmYWxzZSksXG4rXHRJQ1NTR19QQV9TVEFUUyhGV19IT1NUX0VHUkVTU19RX0VYUF9PVkVSRkxPVywgZmFsc2UpLFxuIH07XG4gXG4gI2VuZGlmIC8qIF9fTkVUX1RJX0lDU1NHX1NUQVRTX0ggKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zd2l0Y2hfbWFwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zd2l0Y2hfbWFwLmhcbmluZGV4IDdlMDUzYjhhZjNlY2UuLjg1NWZkNGVkMGIzZjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zd2l0Y2hfbWFwLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3N3aXRjaF9tYXAuaFxuQEAgLTI1Niw2ICsyNTYsMTEgQEBcbiAjZGVmaW5lIEZXX0lORl9EUk9QX1BSSU9UQUdHRURcdFx0MHgwMTQ4XG4gI2RlZmluZSBGV19JTkZfRFJPUF9OT1RBR1x0XHQweDAxNTBcbiAjZGVmaW5lIEZXX0lORl9EUk9QX05PVE1FTUJFUlx0XHQweDAxNThcbisjZGVmaW5lIEZXX1BSRUVNUFRfQkFEX0ZSQUdcdFx0MHgwMTYwXG4rI2RlZmluZSBGV19QUkVFTVBUX0FTU0VNQkxZX0VSUlx0XHQweDAxNjhcbisjZGVmaW5lIEZXX1BSRUVNUFRfRlJBR19DTlRfVFhcdFx0MHgwMTcwXG4rI2RlZmluZSBGV19QUkVFTVBUX0FTU0VNQkxZX09LXHRcdDB4MDE3OFxuKyNkZWZpbmUgRldfUFJFRU1QVF9GUkFHX0NOVF9SWFx0XHQweDAxODBcbiAjZGVmaW5lIEZXX1JYX0VPRl9TSE9SVF9GUk1FUlJcdFx0MHgwMTg4XG4gI2RlZmluZSBGV19SWF9CMF9EUk9QX0VBUkxZX0VPRlx0XHQweDAxOTBcbiAjZGVmaW5lIEZXX1RYX0pVTUJPX0ZSTV9DVVRPRkZcdFx0MHgwMTk4XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzoxMDoyMy4xODM2NjkwOThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTcwNzg0Mjc3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIElDU1NHIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIGRpZ2dpbmcgaW50byB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2AgZGlyZWN0b3J5LiBUaGF0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiBteSBleHBlcnRpc2UgaW4gdGhpcyBhcmVhLiBTcGVjaWZpY2FsbHksIGl0J3MgaGl0dGluZyB0aGUgYE1ha2VmaWxlYCwgY29tbW9uIGNvZGUsIHRoZSBjb25maWcgaGVhZGVyLCBhbmQgdGhlbiBhIHNsZXcgb2YgZmlsZXMgcmVsYXRlZCB0byBldGh0b29sLCBQUlUgRXRoZXJuZXQgKHdoaWNoIGlzICp2ZXJ5KiBpbnRlcmVzdGluZyksIFFvUywgc3RhdGlzdGljcywgYW5kIHN3aXRjaCBtYXBwaW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJSaWdodCwgbGV0J3Mgc2VlIHdoYXQgVEkncyBJQ1NTRyBpcyBhbGwgYWJvdXQuXCIgSXMgaXQgYSBjb21tb25seSB1c2VkIG9yIHdlbGwtdW5kZXJzdG9vZCBibG9jaz8gQ2FuIEkgcmVwcm9kdWNlIHRoaXMgaW4gbXkgbGFiP1xuXG5UaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NCwgdGhhdCBpcyBnb29kLCBzbyBJIHdpbGwgaGF2ZSB0byBlbnN1cmUgdGhhdCBteSBlbnZpcm9ubWVudCBpcyBhbWQ2NCBjb21wYXRpYmxlLiBUaGlzIG1lYW5zIEknbGwgbmVlZCB0byB0aGluayBhYm91dCBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMg4oCTIGxpa2UgUUVNVSBvciBzeXprYWxsZXIg4oCTIHRvIHNlZSBpZiBJIGNhbiBldmVuICphY2Nlc3MqIHRoZSByZWxldmFudCBoYXJkd2FyZSBvciBlbXVsYXRlIGl0IGZvciB0ZXN0aW5nIGFuZCBkZWJ1Z2dpbmcuXG5cblJpZ2h0LCBJQ1NTRy4uLiBsZXQncyBqb2cgbXkgbWVtb3J5LiBBaCwgeWVzISBcIlRleGFzIEluc3RydW1lbnRzIElDU1NHIFBSVUVUSC5cIiBUaGF0J3MgdGhlIFBSVSBFdGhlcm5ldCBHaWdhYml0IHN1YnN5c3RlbSBvbiBUSSBTaXRhcmEgYW5kIEphY2ludG8gU29DcywgbGlrZSB0aGUgQU02NTR4IG9yIEFNNjR4LiBOb3csIGl0J3MgYmVjb21pbmcgbW9yZSBjbGVhci4gTmV4dCBzdGVwIHdpbGwgYmUgZGlnZ2luZyBpbnRvIHRoZSBLY29uZmlnIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1MDUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzoxMDozOC44OTE1MTQ2MDJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg2NTAzNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVElfSUNTU0dfUFJVRVRIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3RpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9MTY5PWNvbmZpZyBUTEFOXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTE4NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnOjE4Njpjb25maWcgVElfSUNTU0dfUFJVRVRIXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0xODctXFx0dHJpc3RhdGUgXFxcIlRJIEdpZ2FiaXQgUFJVIEV0aGVybmV0IGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctMjAzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6MjA0OmNvbmZpZyBUSV9JQ1NTR19QUlVFVEhfU1IxXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0yMDUtXFx0dHJpc3RhdGUgXFxcIlRJIEdpZ2FiaXQgUFJVIFNSMS4wIEV0aGVybmV0IGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL01ha2VmaWxlPTM1PW9iai0kKENPTkZJR19USV9LM19BTTY1X0NQVFMpICs9IGFtNjUtY3B0cy5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvTWFrZWZpbGUtMzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvTWFrZWZpbGU6Mzc6b2JqLSQoQ09ORklHX1RJX0lDU1NHX1BSVUVUSCkgKz0gaWNzc2ctcHJ1ZXRoLm8gaWNzc2cub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL01ha2VmaWxlLTM4LWljc3NnLXBydWV0aC15IDo9IGljc3NnL2ljc3NnX3BydWV0aC5vIGljc3NnL2ljc3NnX3N3aXRjaGRldi5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvTWFrZWZpbGUtMzktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvTWFrZWZpbGU6NDA6b2JqLSQoQ09ORklHX1RJX0lDU1NHX1BSVUVUSF9TUjEpICs9IGljc3NnLXBydWV0aC1zcjEubyBpY3NzZy5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvTWFrZWZpbGUtNDEtaWNzc2ctcHJ1ZXRoLXNyMS15IDo9IGljc3NnL2ljc3NnX3BydWV0aF9zcjEub1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmgtNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguaDo4OiNpZm5kZWYgX19ORVRfVElfSUNTU0dfUFJVRVRIX0hcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguaDo5OiNkZWZpbmUgX19ORVRfVElfSUNTU0dfUFJVRVRIX0hcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguaC0xMC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5oPTUyOT1zdGF0aWMgaW5saW5lIGJvb2wgcHJ1ZXRoX3hkcF9pc19lbmFibGVkKHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5oLTUzMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguaDo1MzQ6I2VuZGlmIC8qIF9fTkVUX1RJX0lDU1NHX1BSVUVUSF9IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjEwOjM4Ljk2MDE3MjIwMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI4NTQ5MDM1MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyB0aGUgVEkgRXRoZXJuZXQgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIFRJIEV0aGVybmV0IGRyaXZlciBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgYXQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWdgLCBhcm91bmQgbGluZSAxODYuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBzb21ldGhpbmcgaW50ZXJlc3RpbmcgaXMgaGFwcGVuaW5nIHRoZXJlLCBsaWtlbHkgcmVsYXRlZCB0byBhIGZlYXR1cmUgZ2F0ZSwgZGVwZW5kZW5jeSBjaGVjaywgb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0J3MgY2F1c2luZyBtZSBzb21lIGhlYWQtc2NyYXRjaGluZy4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIHRoZSBjb25kaXRpb24gdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIHNvbWUgZnVuY3Rpb25hbGl0eSwgcGVyaGFwcyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgdmFyaWFudCwgcG93ZXIgbWFuYWdlbWVudCBmZWF0dXJlLCBvciBhIGRlYnVnIHNldHRpbmcuIFRoZSBsaW5lIG51bWJlciBzdWdnZXN0cyBpdCBjb3VsZCBiZSBhIGRlcGVuZGVuY3kgb24gYW5vdGhlciBjb21wb25lbnQuIEFsdGVybmF0aXZlbHksIGl0IGNvdWxkIGJlIGEgY29tcGxleCBuZXN0ZWQgYGlmYCBzdHJ1Y3R1cmUgY29udHJvbGxpbmcgbXVsdGlwbGUgb3B0aW9ucy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24uIEknbSBleHBlY3RpbmcgdG8gZWl0aGVyIGZpbmQgdGhlIHJvb3Qgb2YgYW4gaXNzdWUsIG9yIHNpbXBseSB1bmRlcnN0YW5kIGhvdyBhIHBhcnRpY3VsYXIgZmVhdHVyZSBpcyBlbmFibGVkIGluIHRoaXMgZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk0OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjEwOjQxLjgxNTA3ODY5OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4MDpcXHRcXG4gMTgxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxcbiAxODI6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCB0bGFuLlxcbiAxODM6XFx0XFxuIDE4NDpcXHRcXHQgIFBsZWFzZSBlbWFpbCBmZWVkYmFjayB0byBcXHUwMDNjdG9yYmVuLm1hdGhpYXNlbkBjb21wYXEuY29tXFx1MDAzZS5cXG4gMTg1OlxcdFxcbiAxODY6XFx0Y29uZmlnIFRJX0lDU1NHX1BSVUVUSFxcbiAxODc6XFx0XFx0dHJpc3RhdGUgXFxcIlRJIEdpZ2FiaXQgUFJVIEV0aGVybmV0IGRyaXZlclxcXCJcXG4gMTg4OlxcdFxcdHNlbGVjdCBQSFlMSUJcXG4gMTg5OlxcdFxcdHNlbGVjdCBUSV9JQ1NTX0lFUFxcbiAxOTA6XFx0XFx0c2VsZWN0IFRJX0szX0NQUElfREVTQ19QT09MXFxuIDE5MTpcXHRcXHRkZXBlbmRzIG9uIFBSVV9SRU1PVEVQUk9DXFxuIDE5MjpcXHRcXHRkZXBlbmRzIG9uIE5FVF9TV0lUQ0hERVZcXG4gMTkzOlxcdFxcdGRlcGVuZHMgb24gQVJDSF9LMyBcXHUwMDI2XFx1MDAyNiBPRiBcXHUwMDI2XFx1MDAyNiBUSV9LM19VRE1BX0dMVUVfTEFZRVJcXG4gMTk0OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gMTk1OlxcdFxcdGRlcGVuZHMgb24gSFNSIHx8ICFIU1JcXG4gMTk2OlxcdFxcdGhlbHBcXG4gMTk3OlxcdFxcdCAgU3VwcG9ydCBkdWFsIEdpZ2FiaXQgRXRoZXJuZXQgcG9ydHMgb3ZlciB0aGUgSUNTU0cgUFJVIFN1YnN5c3RlbS5cXG4gMTk4OlxcdFxcdCAgVGhpcyBzdWJzeXN0ZW0gaXMgYXZhaWxhYmxlIHN0YXJ0aW5nIHdpdGggdGhlIEFNNjUgcGxhdGZvcm0uXFxuIDE5OTpcXHRcXG4gMjAwOlxcdFxcdCAgVGhpcyBkcml2ZXIgcmVxdWlyZXMgZmlybXdhcmUgYmluYXJpZXMgd2hpY2ggd2lsbCBydW4gb24gdGhlIFBSVXNcXG4gMjAxOlxcdFxcdCAgdG8gc3VwcG9ydCB0aGUgRXRoZXJuZXQgb3BlcmF0aW9uLiBDdXJyZW50bHksIGl0IHN1cHBvcnRzIEV0aGVybmV0XFxuIDIwMjpcXHRcXHQgIHdpdGggMUcgYW5kIDEwME0gbGluayBzcGVlZC5cXG4gMjAzOlxcdFxcbiAyMDQ6XFx0Y29uZmlnIFRJX0lDU1NHX1BSVUVUSF9TUjFcXG4gMjA1OlxcdFxcdHRyaXN0YXRlIFxcXCJUSSBHaWdhYml0IFBSVSBTUjEuMCBFdGhlcm5ldCBkcml2ZXJcXFwiXFxuIDIwNjpcXHRcXHRzZWxlY3QgUEhZTElCXFxuIDIwNzpcXHRcXHRzZWxlY3QgVElfSUNTU19JRVBcXG4gMjA4OlxcdFxcdHNlbGVjdCBUSV9LM19DUFBJX0RFU0NfUE9PTFxcbiAyMDk6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTFxcbiAyMTA6XFx0XFx0ZGVwZW5kcyBvbiBQUlVfUkVNT1RFUFJPQ1xcbiAyMTE6XFx0XFx0ZGVwZW5kcyBvbiBORVRfU1dJVENIREVWXFxuIDIxMjpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfSzMgXFx1MDAyNlxcdTAwMjYgT0YgXFx1MDAyNlxcdTAwMjYgVElfSzNfVURNQV9HTFVFX0xBWUVSXFxuIDIxMzpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuIDIxNDpcXHRcXHRoZWxwXFxuIDIxNTpcXHRcXHQgIFN1cHBvcnQgZHVhbCBHaWdhYml0IEV0aGVybmV0IHBvcnRzIG92ZXIgdGhlIElDU1NHIFBSVSBTdWJzeXN0ZW0uXFxuIDIxNjpcXHRcXHQgIFRoaXMgc3Vic3lzdGVtIGlzIGF2YWlsYWJsZSBvbiB0aGUgQU02NSBTUjEuMCBwbGF0Zm9ybS5cXG4gMjE3OlxcdFxcbiAyMTg6XFx0XFx0ICBUaGlzIGRyaXZlciByZXF1aXJlcyBmaXJtd2FyZSBiaW5hcmllcyB3aGljaCB3aWxsIHJ1biBvbiB0aGUgUFJVc1xcbiAyMTk6XFx0XFx0ICB0byBzdXBwb3J0IHRoZSBFdGhlcm5ldCBvcGVyYXRpb24uIEN1cnJlbnRseSwgaXQgc3VwcG9ydHMgRXRoZXJuZXRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MTA6NDEuODE1MjE0NzA4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTA1MzQ3MzQwMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGhlcmUgd2UgZ28uIEkgc2VlIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24sIGBjb25maWcgVElfSUNTU0dfUFJVRVRIYCwgYW5kIGltbWVkaWF0ZWx5IG15IGV4cGVydCBleWUgc2NhbnMgZm9yIHRoZSBkZXBlbmRlbmNpZXMuIGBkZXBlbmRzIG9uIEFSQ0hfSzMgXHUwMDI2XHUwMDI2IE9GIFx1MDAyNlx1MDAyNiBUSV9LM19VRE1BX0dMVUVfTEFZRVJgIGFuZCBgZGVwZW5kcyBvbiBQUlVfUkVNT1RFUFJPQ2AuIEFoLCBgQVJDSF9LM2AuLi50aGF0J3MgdGhlIGtleS4gSSByZWNvZ25pemUgbW9zdCBvZiB0aG9zZSBidXQgSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBgQVJDSF9LM2Agc2lnbmlmaWVzIGluIHRoaXMgY29udGV4dC4gSXQgYWx3YXlzIGhlbHBzIHRvIGtub3cgdGhlIGFyY2hpdGVjdHVyZSBiZWZvcmUgSSBtYWtlIGFueSBkZWNpc2lvbnMgYWJvdXQgaXRzIGNvbmZpZ3VyYXRpb24uIExldCdzIHRyYWNlIHRoaXMgYW5kIHNlZSBleGFjdGx5IHdoZXJlIGBBUkNIX0szYCBpcyBkZWZpbmVkIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZWJhc2UgYW5kIGdldCBzb21lIGNsYXJpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODczLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzoxMDo1Mi4zNDk5NTA3NzlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwMDA1MzA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVJDSF9LM1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L0tjb25maWcucGxhdGZvcm1zPTE0Mz1jb25maWcgQVJDSF9FWFlOT1NcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy5wbGF0Zm9ybXMtMTU1LVxcbmFyY2gvYXJtNjQvS2NvbmZpZy5wbGF0Zm9ybXM6MTU2OmNvbmZpZyBBUkNIX0szXFxuYXJjaC9hcm02NC9LY29uZmlnLnBsYXRmb3Jtcy0xNTctXFx0Ym9vbCBcXFwiVGV4YXMgSW5zdHJ1bWVudHMgSW5jLiBLMyBtdWx0aWNvcmUgU29DIGFyY2hpdGVjdHVyZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MTA6NTQuOTUwMDEwNzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2MjI4Mzk5Mjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgQVJDSF9LM2AgYW5kIGBUSV9JQ1NTR19QUlVFVEhgIE1vZHVsZXMgZm9yIEZ1enppbmcgRWxpZ2liaWxpdHkqKlxuXG5Pa2F5LCBzbyBgQVJDSF9LM2AgaXMgY2xlYXJseSBhbiBBUk02NCBzcGVjaWZpYyBTb0MgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgZnJvbSBUZXhhcyBJbnN0cnVtZW50cy4gSSBjb25maXJtZWQgdGhpcyBieSBmaW5kaW5nIGl0IGRlZmluZWQgaW4gYGFyY2gvYXJtNjQvS2NvbmZpZy5wbGF0Zm9ybXNgLiBNeSB0YXJnZXQgYXJjaGl0ZWN0dXJlLCBob3dldmVyLCBpcyBhbWQ2NC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlc2UgbW9kdWxlcyBhcmUgZXZlbiByZW1vdGVseSBidWlsZGFibGUgb3IgcmVsZXZhbnQgdG8gYW4gYW1kNjQgZW52aXJvbm1lbnQuXG5cblRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBzdGF0ZSBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNvZGUgZmFsbHMgaW50byBzZXZlcmFsIGNhdGVnb3JpZXMsIGluY2x1ZGluZyBcIkNvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZVwiIGFuZCBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS5cIlxuXG5MZXQncyBzZWUgaWYgZWl0aGVyIGBBUkNIX0szYCBvciBgVElfSUNTU0dfUFJVRVRIYCBjYW4gYmUgZW5hYmxlZCBvciBldmVuIGNvbXBpbGVkIG9uIGFtZDY0LiBJdCdzIHF1aWNrbHkgYXBwYXJlbnQgdGhhdCBgQVJDSF9LM2AgaXMgc3RyaWN0bHkgdGllZCB0byBgYXJjaC9hcm02NGAgdGhyb3VnaCB0aGUgYEtjb25maWcucGxhdGZvcm1zYCBmaWxlLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdG9yLlxuXG5Ob3cgZm9yIGBUSV9JQ1NTR19QUlVFVEhgLiBJIGxvb2tlZCBhdCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZ2AgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlJ3MgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBBcyBleHBlY3RlZCwgYFRJX0lDU1NHX1BSVUVUSGAgZGVwZW5kcyBvbiBgQVJDSF9LM2AgYW5kIHNldmVyYWwgb3RoZXIgQVJNNjQgYW5kIFRJLXNwZWNpZmljIGRlcGVuZGVuY2llcy4gSW1wb3J0YW50bHksIEkgZGlkICpub3QqIGZpbmQgYHx8IENPTVBJTEVfVEVTVGAsIHdoaWNoIHdvdWxkIGhhdmUgcHJvdmlkZWQgYSBwYXRoIGZvciBidWlsZGluZyB0aGlzIGRyaXZlciBmb3IgdGVzdGluZyBwdXJwb3NlcyBldmVuIGlmIHRoZSBoYXJkd2FyZSBpc24ndCBwcmVzZW50LlxuXG5GdXJ0aGVybW9yZSwgdGhpcyBkcml2ZXIgaXMgZXhwbGljaXRseSBhIHBsYXRmb3JtIGRyaXZlciBmb3IgYSBUSSBLMyBTb0MgUFJVIEV0aGVybmV0IGNvbnRyb2xsZXIuIEl0J3MgZGVzaWduZWQgdG8gaW50ZXJmYWNlIHdpdGggdGhlIFByb2dyYW1tYWJsZSBSZWFsLVRpbWUgVW5pdCAoUFJVKSBoYXJkd2FyZSBwcmVzZW50IG9uIFRJIEszIFNvQ3MuIFRvIGJlIGV4dHJhIGNlcnRhaW4sIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBpdHMgcHJvYmUgZnVuY3Rpb24gaXMgdGllZCB0byBhIHBsYXRmb3JtIGRldmljZSwgbGlrZWx5IHdpdGhpbiB0aGUgYGljc3NnX3BydWV0aC5jYCBkcml2ZXIgc291cmNlIGl0c2VsZi4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBpdCdzIHRpZ2h0bHkgY291cGxlZCB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4gU2luY2UgdGhpcyBpcyBhbiBFdGhlcm5ldCBjb250cm9sbGVyLCBpdCBuZWVkcyB0byBiZSBjb25uZWN0ZWQsIGFuZCB0aGF0IGlzbid0IGNvbm5lY3RlZCB0byBhIHJlZ3VsYXIgYW1kNjQgc3lzdGVtLlxuXG5UaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBjb2RlIGlzIGV4Y2x1c2l2ZSB0byB0aGUgQVJNNjQgYXJjaGl0ZWN0dXJlIGFuZCBzcGVjaWZpYyBoYXJkd2FyZSwgYW5kIG5vdCBidWlsZGFibGUsIEknbSBjb25maWRlbnQgaW4gY29uY2x1ZGluZyB0aGF0IGl0J3Mgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIG15IGFtZDY0IGVudmlyb25tZW50LiBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjM2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjExOjAxLjE3ODQxNDA0N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYxNDE0MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX3BsYXRmb3JtX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzX2llcC5jPTEwOTU9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaWNzc19pZXBfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc19pZXAuYy0xMTAxLX07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc19pZXAuYzoxMTAyOm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoaWNzc19pZXBfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzX2llcC5jLTExMDMtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguYz0yNTgyPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBydWV0aF9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguYy0yNTkwLX07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmM6MjU5MTptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHBydWV0aF9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5jLTI1OTItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGhfc3IxLmM9MTIyOD1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwcnVldGhfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoX3NyMS5jLTEyMzYtfTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGhfc3IxLmM6MTIzNzptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHBydWV0aF9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aF9zcjEuYy0xMjM4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzoxMTowMS4yNTQ1NjIxMzZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTMzNDc2MzY0MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBXb3J0aEZ1enppbmcgZm9yIFRJX0lDU1NHX1BSVUVUSCoqXG5cbk9rYXksIGFmdGVyIGV4YW1pbmluZyB0aGUgY29kZSBhbmQgdGhlIGNvbnRleHQsIEkndmUgZGV0ZXJtaW5lZCB0aGF0IGBUSV9JQ1NTR19QUlVFVEhgIGlzIGRlZmluaXRlbHkgbm90IHdvcnRoIGZ1enppbmcgaW4gb3VyIGN1cnJlbnQgc2V0dXAuIEhlcmUncyBteSByZWFzb25pbmcsIGFuZCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6XG5cbkZpcnN0LCB0aGlzIGlzIGEgdmVyeSBzcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIsIHRoZSBgcHJ1ZXRoX2RyaXZlcmAsIGRlc2lnbmVkIGZvciB0aGUgVEkgSzMgU29DJ3MgUFJVIGV0aGVybmV0IHN1YnN5c3RlbS4gVGhpcyBtZWFucyBpdCBpbnRyaW5zaWNhbGx5IGRlcGVuZHMgb24gVEkncyBwcm9wcmlldGFyeSBoYXJkd2FyZSDigJMgdGhlIFBSVS1JQ1NTRyBzdWJzeXN0ZW0sIHRoZSByZW1vdGVwcm9jIGZyYW1ld29yayBmb3IgdGhlIFBSVXMsIGFuZCB0aGUgSzMgVURNQSBnbHVlIGxvZ2ljLiBUaGlzIGlzIG5vdCBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZW11bGF0ZWQgcmVsaWFibHksIG9yIGV2ZW4gYXQgYWxsLCBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQsIG9yIGFueSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LiBRRU1VIHNpbXBseSBkb2Vzbid0IHNpbXVsYXRlIHRoZSBQUlUtSUNTU0cgb3IgSzMgVURNQSBoYXJkd2FyZSBjb21wb25lbnRzLlxuXG5TZWNvbmRseSwgYW5kIHRoaXMgaXMgdGhlIGNsaW5jaGVyLCB0aGUgZHJpdmVyIGhhcyBhIGJ1aWx0LWluIGRlcGVuZGVuY3kgb24gYEFSQ0hfSzNgLiBUaGlzIGlzIGFuIGFyY2hpdGVjdHVyZSBvcHRpb24gZm91bmQgaW4gdGhlIGBhcm02NC9LY29uZmlnLnBsYXRmb3Jtc2AgZmlsZS4gU2luY2Ugd2UncmUgdGFyZ2V0aW5nIHRoZSBgYW1kNjRgIGFyY2hpdGVjdHVyZSwgdGhpcyBkcml2ZXIgaXMgKnN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSogb24gdGhlIHRhcmdldC4gSXQncyBpbXBvc3NpYmxlIHRvIGV2ZW4gY29tcGlsZSBpdCBpbiBmb3IgdGhlIGBhbWQ2NGAgYXJjaGl0ZWN0dXJlLCBtYWtpbmcgYW55IGZ1enppbmcgZWZmb3J0cyBjb21wbGV0ZWx5IGZ1dGlsZS5cblxuTG9va2luZyBhdCB0aGUgaW5zdHJ1Y3Rpb25zIGluIFNlY3Rpb24gMiwgdGhpcyBjbGVhcmx5IGZhbGxzIHVuZGVyIHR3byBvZiB0aGUgXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlXCIgY2F0ZWdvcmllczogXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiBhbmQgXCJDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXCIgVGhlIGFyY2hpdGVjdHVyZSBleGNsdXNpdml0eSBpcyBvYnZpb3VzIGR1ZSB0byB0aGUgYEFSQ0hfSzNgIGRlcGVuZGVuY3kuIFRoZSBoYXJkd2FyZSB1bnJlYWNoYWJpbGl0eSBpcyBldmlkZW50IGJlY2F1c2Ugd2UncmUgdGFsa2luZyBhYm91dCBhIHBsYXRmb3JtLXNwZWNpZmljIGRyaXZlciB0aGF0IG5lZWRzIHNwZWNpYWxpemVkIFRJIGhhcmR3YXJlIHRoYXQncyBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiBvdXIgdGFyZ2V0IFFFTVUgaW5zdGFuY2VzLlxuXG5UaGVyZWZvcmUsIGBXb3J0aEZ1enppbmcgPSBmYWxzZWAsIG5vIGBFbmFibGVDb25maWdzYCBhcmUgbmVlZGVkLCBhbmQgbm8gYEZvY3VzU3ltYm9sc2AgYXJlIHJlbGV2YW50LiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODI4LCJPdXRwdXRUb2tlbnMiOjEyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzoxMToxNC42MDIyMDM1ODVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBtb2RpZmllZCBjb2RlIGlzIGNvbmZpbmVkIHRvIHRoZSBUZXhhcyBJbnN0cnVtZW50cyBJQ1NTRyBQUlUgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy8pLCB3aGljaCBkZXBlbmRzIG9uIENPTkZJR19BUkNIX0szIChhbiBBUk02NC1zcGVjaWZpYyBTb0MgYXJjaGl0ZWN0dXJlKS4gVGhpcyBkcml2ZXIgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIG9uIHRoZSB0YXJnZXQgYW1kNjQgYXJjaGl0ZWN0dXJlIGFuZCBhZGRpdGlvbmFsbHkgcmVxdWlyZXMgcGh5c2ljYWwgVEkgSzMgUFJVLUlDU1NHIFNvQyBoYXJkd2FyZSBhbmQgZmlybXdhcmUgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgbW9kaWZpZWQgY29kZSBpcyBjb25maW5lZCB0byB0aGUgVGV4YXMgSW5zdHJ1bWVudHMgSUNTU0cgUFJVIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvKSwgd2hpY2ggZGVwZW5kcyBvbiBDT05GSUdfQVJDSF9LMyAoYW4gQVJNNjQtc3BlY2lmaWMgU29DIGFyY2hpdGVjdHVyZSkuIFRoaXMgZHJpdmVyIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiB0aGUgdGFyZ2V0IGFtZDY0IGFyY2hpdGVjdHVyZSBhbmQgYWRkaXRpb25hbGx5IHJlcXVpcmVzIHBoeXNpY2FsIFRJIEszIFBSVS1JQ1NTRyBTb0MgaGFyZHdhcmUgYW5kIGZpcm13YXJlIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjExOjE0LjYwMjI0NjIzNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowhzpzh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-15 06:47:01 +0000 UTC FinishedAt: 2026-09-15 07:11:15 +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+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgbW9kaWZpZWQgY29kZSBpcyBjb25maW5lZCB0byB0aGUgVGV4YXMgSW5zdHJ1bWVudHMgSUNTU0cgUFJVIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvKSwgd2hpY2ggZGVwZW5kcyBvbiBDT05GSUdfQVJDSF9LMyAoYW4gQVJNNjQtc3BlY2lmaWMgU29DIGFyY2hpdGVjdHVyZSkuIFRoaXMgZHJpdmVyIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiB0aGUgdGFyZ2V0IGFtZDY0IGFyY2hpdGVjdHVyZSBhbmQgYWRkaXRpb25hbGx5IHJlcXVpcmVzIHBoeXNpY2FsIFRJIEszIFBSVS1JQ1NTRyBTb0MgaGFyZHdhcmUgYW5kIGZpcm13YXJlIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlNWY0ZmY1NmQxNDk3MDFmNjU0ZDA3NDFmNTgxNDU1MjUzMTE0ZmVhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDc6MTA6MjEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9NYWtlZmlsZVxuaW5kZXggZjQyNzZjOWE3NzYyMC4uZDE5YmNkMjVjOWQwNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9NYWtlZmlsZVxuQEAgLTQ2LDYgJiM0Mzs0Niw3IEBAIGljc3NnLXkgOj0gaWNzc2cvaWNzc2dfY29tbW9uLm8gXFxcbiBcdCAgIGljc3NnL2ljc3NnX2NvbmZpZy5vIFxcXG4gXHQgICBpY3NzZy9pY3NzZ19taWlfY2ZnLm8gXFxcbiBcdCAgIGljc3NnL2ljc3NnX3N0YXRzLm8gXFxcbi1cdCAgIGljc3NnL2ljc3NnX2V0aHRvb2wub1xuJiM0MztcdCAgIGljc3NnL2ljc3NnX2V0aHRvb2wubyBcXFxuJiM0MztcdCAgIGljc3NnL2ljc3NnX3Fvcy5vXG4gXG4gb2JqLSQoQ09ORklHX1RJX0lDU1NfSUVQKSAmIzQzOz0gaWNzc2cvaWNzc19pZXAub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfY29tbW9uLmNcbmluZGV4IDRhN2QxYTZmNDcwYjEuLmQ1OWVlZjYxZTcwMTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfY29tbW9uLmNcbkBAIC0xNzU0LDYgJiM0MzsxNzU0LDcgQEAgdm9pZCBwcnVldGhfbmV0ZGV2X2V4aXQoc3RydWN0IHBydWV0aCAqcHJ1ZXRoLFxuIFxuIFx0bmV0aWZfbmFwaV9kZWwoXHUwMDI2ZW1hYy1cdTAwM2VuYXBpX3J4KTtcbiBcbiYjNDM7XHRtdXRleF9kZXN0cm95KFx1MDAyNmVtYWMtXHUwMDNlcW9zLmlldC5mcGVfbG9jayk7XG4gXHRwcnVzc19yZWxlYXNlX21lbV9yZWdpb24ocHJ1ZXRoLVx1MDAzZXBydXNzLCBcdTAwMjZlbWFjLVx1MDAzZWRyYW0pO1xuIFx0ZnJlZV9uZXRkZXYoZW1hYy1cdTAwM2VuZGV2KTtcbiBcdHBydWV0aC1cdTAwM2VlbWFjW21hY10gPSBOVUxMO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2NvbmZpZy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfY29uZmlnLmhcbmluZGV4IDYwZDY5NzQ0ZmZhZTIuLjFhYzIwMmY4NTVlZDQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19jb25maWcuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfY29uZmlnLmhcbkBAIC0zMjMsMTMgJiM0MzszMjMsNCBAQCBzdHJ1Y3QgcHJ1ZXRoX2ZkYl9zbG90IHtcbiBcdHU4IGZpZDtcbiBcdHU4IGZpZF9jMjtcbiB9IF9fcGFja2VkO1xuLVxuLWVudW0gaWNzc2dfaWV0ZnBlX3ZlcmlmeV9zdGF0ZXMge1xuLVx0SUNTU0dfSUVURlBFX1NUQVRFX1VOS05PV04gPSAwLFxuLVx0SUNTU0dfSUVURlBFX1NUQVRFX0lOSVRJQUwsXG4tXHRJQ1NTR19JRVRGUEVfU1RBVEVfVkVSSUZZSU5HLFxuLVx0SUNTU0dfSUVURlBFX1NUQVRFX1NVQ0NFRURFRCxcbi1cdElDU1NHX0lFVEZQRV9TVEFURV9GQUlMRUQsXG4tXHRJQ1NTR19JRVRGUEVfU1RBVEVfRElTQUJMRURcbi19O1xuICNlbmRpZiAvKiBfX05FVF9USV9JQ1NTR19DT05GSUdfSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2V0aHRvb2wuY1xuaW5kZXggYjcxNWFmMjFkMjNhYy4uZGMyNTM2MWFmZTk4OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2V0aHRvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfZXRodG9vbC5jXG5AQCAtNzQsNyAmIzQzOzc0LDggQEAgc3RhdGljIGludCBlbWFjX2dldF9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgc3RyaW5nc2V0KVxuIFx0XHRpZiAoZW1hYy1cdTAwM2VwcnVldGgtXHUwMDNlcGFfc3RhdHMpXG4gXHRcdFx0cmV0dXJuIElDU1NHX05VTV9FVEhUT09MX1NUQVRTO1xuIFx0XHRlbHNlXG4tXHRcdFx0cmV0dXJuIElDU1NHX05VTV9FVEhUT09MX1NUQVRTIC0gSUNTU0dfTlVNX1BBX1NUQVRTO1xuJiM0MztcdFx0XHRyZXR1cm4gSUNTU0dfTlVNX0VUSFRPT0xfU1RBVFMgLVxuJiM0MztcdFx0XHQgICAgICAgKElDU1NHX05VTV9QQV9TVEFUUyAtIElDU1NHX05VTV9QQV9TVEFOREFSRF9TVEFUUyk7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG5AQCAtOTMsNyAmIzQzOzk0LDggQEAgc3RhdGljIHZvaWQgZW1hY19nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIHN0cmluZ3NldCwgdTggKmRhdGEpXG4gXHRcdFx0XHRldGh0b29sX3B1dHMoXHUwMDI2cCwgaWNzc2dfYWxsX21paWdfc3RhdHNbaV0ubmFtZSk7XG4gXHRcdGlmIChlbWFjLVx1MDAzZXBydWV0aC1cdTAwM2VwYV9zdGF0cylcbiBcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGljc3NnX2FsbF9wYV9zdGF0cyk7IGkmIzQzOyYjNDM7KVxuLVx0XHRcdFx0ZXRodG9vbF9wdXRzKFx1MDAyNnAsIGljc3NnX2FsbF9wYV9zdGF0c1tpXS5uYW1lKTtcbiYjNDM7XHRcdFx0XHRpZiAoIWljc3NnX2FsbF9wYV9zdGF0c1tpXS5zdGFuZGFyZF9zdGF0cylcbiYjNDM7XHRcdFx0XHRcdGV0aHRvb2xfcHV0cyhcdTAwMjZwLCBpY3NzZ19hbGxfcGFfc3RhdHNbaV0ubmFtZSk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG5AQCAtMTE0LDcgJiM0MzsxMTYsOCBAQCBzdGF0aWMgdm9pZCBlbWFjX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFxuIFx0aWYgKGVtYWMtXHUwMDNlcHJ1ZXRoLVx1MDAzZXBhX3N0YXRzKVxuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGljc3NnX2FsbF9wYV9zdGF0cyk7IGkmIzQzOyYjNDM7KVxuLVx0XHRcdCooZGF0YSYjNDM7JiM0MzspID0gZW1hYy1cdTAwM2VwYV9zdGF0c1tpXTtcbiYjNDM7XHRcdFx0aWYgKCFpY3NzZ19hbGxfcGFfc3RhdHNbaV0uc3RhbmRhcmRfc3RhdHMpXG4mIzQzO1x0XHRcdFx0KihkYXRhJiM0MzsmIzQzOykgPSBlbWFjLVx1MDAzZXBhX3N0YXRzW2ldO1xuIH1cbiBcbiBzdGF0aWMgaW50IGVtYWNfZ2V0X3RzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG5AQCAtMjk0LDYgJiM0MzsyOTcsMTI2IEBAIHN0YXRpYyBpbnQgZW1hY19zZXRfcGVyX3F1ZXVlX2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgcXVldWUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgZW1hY19nZXRfbW0oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBldGh0b29sX21tX3N0YXRlICpzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYyA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcdHN0cnVjdCBwcnVldGhfcW9zX2lldCAqaWV0ID0gXHUwMDI2ZW1hYy1cdTAwM2Vxb3MuaWV0O1xuJiM0MztcdGVudW0gaWNzc2dfaWV0ZnBlX3ZlcmlmeV9zdGF0ZXMgdmVyaWZ5X3N0YXR1cztcbiYjNDM7XG4mIzQzO1x0aWYgKGVtYWMtXHUwMDNlaXNfc3IxKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmlldC1cdTAwM2VmcGVfbG9jayk7XG4mIzQzO1x0c3RhdGUtXHUwMDNldHhfZW5hYmxlZCA9IGlldC1cdTAwM2VmcGVfZW5hYmxlZDtcbiYjNDM7XHRzdGF0ZS1cdTAwM2V0eF9taW5fZnJhZ19zaXplID0gaWV0LVx1MDAzZXR4X21pbl9mcmFnX3NpemU7XG4mIzQzO1x0c3RhdGUtXHUwMDNldmVyaWZ5X2VuYWJsZWQgPSBpZXQtXHUwMDNlbWFjX3ZlcmlmeV9jb25maWd1cmU7XG4mIzQzO1x0c3RhdGUtXHUwMDNldmVyaWZ5X3RpbWUgPSBpZXQtXHUwMDNldmVyaWZ5X3RpbWVfbXM7XG4mIzQzO1x0c3RhdGUtXHUwMDNldHhfYWN0aXZlID0gaWV0LVx1MDAzZWZwZV9hY3RpdmU7XG4mIzQzO1x0dmVyaWZ5X3N0YXR1cyA9IGlldC1cdTAwM2V2ZXJpZnlfc3RhdHVzO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZpZXQtXHUwMDNlZnBlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRzdGF0ZS1cdTAwM2VyeF9taW5fZnJhZ19zaXplID0gRVRIX1pMRU47XG4mIzQzO1x0c3RhdGUtXHUwMDNlcG1hY19lbmFibGVkID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoICh2ZXJpZnlfc3RhdHVzKSB7XG4mIzQzO1x0Y2FzZSBJQ1NTR19JRVRGUEVfU1RBVEVfRElTQUJMRUQ6XG4mIzQzO1x0XHRzdGF0ZS1cdTAwM2V2ZXJpZnlfc3RhdHVzID0gRVRIVE9PTF9NTV9WRVJJRllfU1RBVFVTX0RJU0FCTEVEO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBJQ1NTR19JRVRGUEVfU1RBVEVfSU5JVElBTDpcbiYjNDM7XHRcdHN0YXRlLVx1MDAzZXZlcmlmeV9zdGF0dXMgPSBFVEhUT09MX01NX1ZFUklGWV9TVEFUVVNfSU5JVElBTDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgSUNTU0dfSUVURlBFX1NUQVRFX1ZFUklGWUlORzpcbiYjNDM7XHRcdHN0YXRlLVx1MDAzZXZlcmlmeV9zdGF0dXMgPSBFVEhUT09MX01NX1ZFUklGWV9TVEFUVVNfVkVSSUZZSU5HO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBJQ1NTR19JRVRGUEVfU1RBVEVfU1VDQ0VFREVEOlxuJiM0MztcdFx0c3RhdGUtXHUwMDNldmVyaWZ5X3N0YXR1cyA9IEVUSFRPT0xfTU1fVkVSSUZZX1NUQVRVU19TVUNDRUVERUQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIElDU1NHX0lFVEZQRV9TVEFURV9GQUlMRUQ6XG4mIzQzO1x0XHRzdGF0ZS1cdTAwM2V2ZXJpZnlfc3RhdHVzID0gRVRIVE9PTF9NTV9WRVJJRllfU1RBVFVTX0ZBSUxFRDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRzdGF0ZS1cdTAwM2V2ZXJpZnlfc3RhdHVzID0gRVRIVE9PTF9NTV9WRVJJRllfU1RBVFVTX1VOS05PV047XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIDgwMi4zLTIwMTggY2xhdXNlIDMwLjE0LjEuNiwgc2F5cyB0aGF0IHRoZSBhTUFDTWVyZ2VWZXJpZnlUaW1lXG4mIzQzO1x0ICogdmFyaWFibGUgaGFzIGEgcmFuZ2UgYmV0d2VlbiAxIGFuZCAxMjggbXMgaW5jbHVzaXZlLiBMaW1pdCB0byB0aGF0LlxuJiM0MztcdCAqL1xuJiM0MztcdHN0YXRlLVx1MDAzZW1heF92ZXJpZnlfdGltZSA9IEVUSFRPT0xfTU1fTUFYX1ZFUklGWV9USU1FX01TO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBlbWFjX3NldF9tbShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGV0aHRvb2xfbW1fY2ZnICpjZmcsXG4mIzQzO1x0XHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBydWV0aF9lbWFjICplbWFjID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1x0c3RydWN0IHBydWV0aF9xb3NfaWV0ICppZXQgPSBcdTAwMjZlbWFjLVx1MDAzZXFvcy5pZXQ7XG4mIzQzO1x0dTMyIG9sZF92ZXJpZnlfdGltZV9tcywgb2xkX3R4X21pbl9mcmFnX3NpemU7XG4mIzQzO1x0Ym9vbCBvbGRfZnBlX2VuYWJsZWQsIG9sZF9tYWNfdmVyaWZ5X2NvbmZpZ3VyZTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoZW1hYy1cdTAwM2Vpc19zcjEpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGlmICghY2ZnLVx1MDAzZXBtYWNfZW5hYmxlZCkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7cHJlZW1wdGlibGUgTUFDIGlzIGFsd2F5cyBlbmFibGVkXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2aWV0LVx1MDAzZWZwZV9sb2NrKTtcbiYjNDM7XHRvbGRfdmVyaWZ5X3RpbWVfbXMgPSBpZXQtXHUwMDNldmVyaWZ5X3RpbWVfbXM7XG4mIzQzO1x0b2xkX3R4X21pbl9mcmFnX3NpemUgPSBpZXQtXHUwMDNldHhfbWluX2ZyYWdfc2l6ZTtcbiYjNDM7XHRvbGRfZnBlX2VuYWJsZWQgPSBpZXQtXHUwMDNlZnBlX2VuYWJsZWQ7XG4mIzQzO1x0b2xkX21hY192ZXJpZnlfY29uZmlndXJlID0gaWV0LVx1MDAzZW1hY192ZXJpZnlfY29uZmlndXJlO1xuJiM0MztcbiYjNDM7XHRpZXQtXHUwMDNldmVyaWZ5X3RpbWVfbXMgPSBjZmctXHUwMDNldmVyaWZ5X3RpbWU7XG4mIzQzO1x0aWV0LVx1MDAzZXR4X21pbl9mcmFnX3NpemUgPSBjZmctXHUwMDNldHhfbWluX2ZyYWdfc2l6ZTtcbiYjNDM7XHRpZXQtXHUwMDNlZnBlX2VuYWJsZWQgPSBjZmctXHUwMDNldHhfZW5hYmxlZDtcbiYjNDM7XHRpZXQtXHUwMDNlbWFjX3ZlcmlmeV9jb25maWd1cmUgPSBjZmctXHUwMDNldmVyaWZ5X2VuYWJsZWQ7XG4mIzQzO1x0ZXJyID0gaWNzc2dfY29uZmlnX2lldGZwZShuZGV2LCBjZmctXHUwMDNldHhfZW5hYmxlZCk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0LyogaWNzc2dfY29uZmlnX2lldGZwZSYjMzk7cyBmYWxsYmFjayBwYXRoIGFscmVhZHkgY2xlYXJlZCBmcGVfYWN0aXZlLlxuJiM0MztcdFx0ICogUmVzdG9yZSBhbGwgY29uZmlnIGZpZWxkcyBzbyBnZXRfbW0oKSByZXBvcnRzIHRoZSBjb25maWd1cmF0aW9uXG4mIzQzO1x0XHQgKiB0aGF0IGlzIGFjdHVhbGx5IHJlZmxlY3RlZCBpbiBoYXJkd2FyZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWV0LVx1MDAzZXZlcmlmeV90aW1lX21zID0gb2xkX3ZlcmlmeV90aW1lX21zO1xuJiM0MztcdFx0aWV0LVx1MDAzZXR4X21pbl9mcmFnX3NpemUgPSBvbGRfdHhfbWluX2ZyYWdfc2l6ZTtcbiYjNDM7XHRcdGlldC1cdTAwM2VmcGVfZW5hYmxlZCA9IG9sZF9mcGVfZW5hYmxlZDtcbiYjNDM7XHRcdGlldC1cdTAwM2VtYWNfdmVyaWZ5X2NvbmZpZ3VyZSA9IG9sZF9tYWNfdmVyaWZ5X2NvbmZpZ3VyZTtcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmlldC1cdTAwM2VmcGVfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGVtYWNfZ2V0X21tX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgZXRodG9vbF9tbV9zdGF0cyAqcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYyA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAoZW1hYy1cdTAwM2Vpc19zcjEpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmICghZW1hYy1cdTAwM2VwcnVldGgtXHUwMDNlcGFfc3RhdHMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGVtYWNfdXBkYXRlX2hhcmR3YXJlX3N0YXRzKGVtYWMpO1xuJiM0MztcbiYjNDM7XHQvKiBIb2xkIHN0YXRzX2xvY2sgdG8gcHJldmVudCBpY3NzZ19zdGF0c193b3JrX2hhbmRsZXIgZnJvbSB1cGRhdGluZ1xuJiM0MztcdCAqIHBhX3N0YXRzW10gYmV0d2VlbiByZWFkcywgd2hpY2ggY291bGQgeWllbGQgYSB0b3JuIHU2NCB2YWx1ZSBvblxuJiM0MztcdCAqIDMyLWJpdCBhcmNoaXRlY3R1cmVzLlxuJiM0MztcdCAqL1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZlbWFjLVx1MDAzZXBydWV0aC1cdTAwM2VzdGF0c19sb2NrKTtcbiYjNDM7XHQvKiBNQUNNZXJnZUhvbGRDb3VudCBzdGF0cyBpcyBub3QgdHJhY2tlZCBieSB0aGUgZmlybXdhcmUgKi9cbiYjNDM7XHRzLVx1MDAzZU1BQ01lcmdlRnJhbWVBc3NPa0NvdW50ID0gZW1hY19nZXRfc3RhdF9ieV9uYW1lKGVtYWMsIFwmIzM0O0ZXX1BSRUVNUFRfQVNTRU1CTFlfT0tcJiMzNDspO1xuJiM0MztcdHMtXHUwMDNlTUFDTWVyZ2VGcmFtZUFzc0Vycm9yQ291bnQgPSBlbWFjX2dldF9zdGF0X2J5X25hbWUoZW1hYywgXCYjMzQ7RldfUFJFRU1QVF9BU1NFTUJMWV9FUlJcJiMzNDspO1xuJiM0MztcdHMtXHUwMDNlTUFDTWVyZ2VGcmFnQ291bnRSeCA9IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShlbWFjLCBcJiMzNDtGV19QUkVFTVBUX0ZSQUdfQ05UX1JYXCYjMzQ7KTtcbiYjNDM7XHRzLVx1MDAzZU1BQ01lcmdlRnJhZ0NvdW50VHggPSBlbWFjX2dldF9zdGF0X2J5X25hbWUoZW1hYywgXCYjMzQ7RldfUFJFRU1QVF9GUkFHX0NOVF9UWFwmIzM0Oyk7XG4mIzQzO1x0cy1cdTAwM2VNQUNNZXJnZUZyYW1lU21kRXJyb3JDb3VudCA9IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShlbWFjLCBcJiMzNDtGV19QUkVFTVBUX0JBRF9GUkFHXCYjMzQ7KTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZlbWFjLVx1MDAzZXBydWV0aC1cdTAwM2VzdGF0c19sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaWNzc2dfZXRodG9vbF9vcHMgPSB7XG4gXHQuZ2V0X2RydmluZm8gPSBlbWFjX2dldF9kcnZpbmZvLFxuIFx0LmdldF9tc2dsZXZlbCA9IGVtYWNfZ2V0X21zZ2xldmVsLFxuQEAgLTMxNyw1ICYjNDM7NDQwLDggQEAgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGljc3NnX2V0aHRvb2xfb3BzID0ge1xuIFx0LnNldF9lZWUgPSBlbWFjX3NldF9lZWUsXG4gXHQubndheV9yZXNldCA9IGVtYWNfbndheV9yZXNldCxcbiBcdC5nZXRfcm1vbl9zdGF0cyA9IGVtYWNfZ2V0X3Jtb25fc3RhdHMsXG4mIzQzO1x0LmdldF9tbSA9IGVtYWNfZ2V0X21tLFxuJiM0MztcdC5zZXRfbW0gPSBlbWFjX3NldF9tbSxcbiYjNDM7XHQuZ2V0X21tX3N0YXRzID0gZW1hY19nZXRfbW1fc3RhdHMsXG4gfTtcbiBFWFBPUlRfU1lNQk9MX0dQTChpY3NzZ19ldGh0b29sX29wcyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguY1xuaW5kZXggNTkxYmU1YzgwNTZiNC4uMjgzYmUyN2EyNDBlOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguY1xuQEAgLTM1NywxMSAmIzQzOzM1NywxMSBAQCBzdGF0aWMgdm9pZCBlbWFjX2FkanVzdF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0XHR9XG4gXHRcdGlmICghZW1hYy1cdTAwM2VsaW5rKSB7XG4gXHRcdFx0bmV3X3N0YXRlID0gdHJ1ZTtcbi1cdFx0XHRlbWFjLVx1MDAzZWxpbmsgPSAxO1xuJiM0MztcdFx0XHRXUklURV9PTkNFKGVtYWMtXHUwMDNlbGluaywgMSk7XG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAoZW1hYy1cdTAwM2VsaW5rKSB7XG4gXHRcdG5ld19zdGF0ZSA9IHRydWU7XG4tXHRcdGVtYWMtXHUwMDNlbGluayA9IDA7XG4mIzQzO1x0XHRXUklURV9PTkNFKGVtYWMtXHUwMDNlbGluaywgMCk7XG4gXG4gXHRcdC8qIGYvdyBzaG91bGQgc3VwcG9ydCAxMDAgXHUwMDI2IDEwMDAgKi9cbiBcdFx0ZW1hYy1cdTAwM2VzcGVlZCA9IFNQRUVEXzEwMDA7XG5AQCAtMzkyLDYgJiM0MzszOTIsOCBAQCBzdGF0aWMgdm9pZCBlbWFjX2FkanVzdF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGljc3NnX3NldF9wb3J0X3N0YXRlKGVtYWMsIElDU1NHX0VNQUNfUE9SVF9ESVNBQkxFKTtcbiBcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGljc3NnX3Fvc19saW5rX3N0YXRlX3VwZGF0ZShuZGV2KTtcbiBcdH1cbiBcbiBcdGlmIChlbWFjLVx1MDAzZWxpbmspIHtcbkBAIC0xNjUyLDYgJiM0MzsxNjU0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlbWFjX25ldGRldl9vcHMgPSB7XG4gXHQubmRvX2h3dHN0YW1wX2dldCA9IGljc3NnX25kb19nZXRfdHNfY29uZmlnLFxuIFx0Lm5kb19od3RzdGFtcF9zZXQgPSBpY3NzZ19uZG9fc2V0X3RzX2NvbmZpZyxcbiBcdC5uZG9feHNrX3dha2V1cCA9IHBydWV0aF94c2tfd2FrZXVwLFxuJiM0MztcdC5uZG9fc2V0dXBfdGMgPSBpY3NzZ19xb3NfbmRvX3NldHVwX3RjLFxuIH07XG4gXG4gc3RhdGljIGludCBwcnVldGhfbmV0ZGV2X2luaXQoc3RydWN0IHBydWV0aCAqcHJ1ZXRoLFxuQEAgLTE2ODYsNiAmIzQzOzE2ODksOCBAQCBzdGF0aWMgaW50IHBydWV0aF9uZXRkZXZfaW5pdChzdHJ1Y3QgcHJ1ZXRoICpwcnVldGgsXG4gXG4gXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZlbWFjLVx1MDAzZXN0YXRzX3dvcmssIGljc3NnX3N0YXRzX3dvcmtfaGFuZGxlcik7XG4gXG4mIzQzO1x0aWNzc2dfcW9zX2luaXQobmRldik7XG4mIzQzO1xuIFx0cmV0ID0gcHJ1c3NfcmVxdWVzdF9tZW1fcmVnaW9uKHBydWV0aC1cdTAwM2VwcnVzcyxcbiBcdFx0XHRcdCAgICAgICBwb3J0ID09IFBSVUVUSF9QT1JUX01JSTAgP1xuIFx0XHRcdFx0ICAgICAgIFBSVVNTX01FTV9EUkFNMCA6IFBSVVNTX01FTV9EUkFNMSxcbkBAIC0xNzkzLDYgJiM0MzsxNzk4LDcgQEAgc3RhdGljIGludCBwcnVldGhfbmV0ZGV2X2luaXQoc3RydWN0IHBydWV0aCAqcHJ1ZXRoLFxuIGZyZWU6XG4gXHRwcnVzc19yZWxlYXNlX21lbV9yZWdpb24ocHJ1ZXRoLVx1MDAzZXBydXNzLCBcdTAwMjZlbWFjLVx1MDAzZWRyYW0pO1xuIGZyZWVfbmRldjpcbiYjNDM7XHRtdXRleF9kZXN0cm95KFx1MDAyNmVtYWMtXHUwMDNlcW9zLmlldC5mcGVfbG9jayk7XG4gXHRlbWFjLVx1MDAzZW5kZXYgPSBOVUxMO1xuIFx0cHJ1ZXRoLVx1MDAzZWVtYWNbbWFjXSA9IE5VTEw7XG4gXHRmcmVlX25ldGRldihuZGV2KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5oXG5pbmRleCBkZjkzZDE1YzViNzg2Li5hZDkwNjE0MDgwNTBlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5oXG5AQCAtNDQsMTAgJiM0Mzs0NCwxMiBAQFxuICNpbmNsdWRlIFwmIzM0O2ljc3NnX2NvbmZpZy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aWNzc19pZXAuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2ljc3NnX3N3aXRjaF9tYXAuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtpY3NzZ19xb3MuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtpY3NzZ19zdGF0cy5oXCYjMzQ7XG4gXG4tI2RlZmluZSBQUlVFVEhfTUFYX01UVSAgICAgICAgICAoMjAwMCAtIEVUSF9ITEVOIC0gRVRIX0ZDU19MRU4pXG4tI2RlZmluZSBQUlVFVEhfTUlOX1BLVF9TSVpFICAgICAoVkxBTl9FVEhfWkxFTilcbi0jZGVmaW5lIFBSVUVUSF9NQVhfUEtUX1NJWkUgICAgIChQUlVFVEhfTUFYX01UVSAmIzQzOyBFVEhfSExFTiAmIzQzOyBFVEhfRkNTX0xFTilcbiYjNDM7I2RlZmluZSBQUlVFVEhfTUFYX01UVVx0XHQoMjAwMCAtIEVUSF9ITEVOIC0gRVRIX0ZDU19MRU4pXG4mIzQzOyNkZWZpbmUgUFJVRVRIX01JTl9QS1RfU0laRVx0KFZMQU5fRVRIX1pMRU4pXG4mIzQzOyNkZWZpbmUgUFJVRVRIX01BWF9QS1RfU0laRVx0KFBSVUVUSF9NQVhfTVRVICYjNDM7IEVUSF9ITEVOICYjNDM7IEVUSF9GQ1NfTEVOKVxuIFxuICNkZWZpbmUgSUNTU19TTElDRTBcdDBcbiAjZGVmaW5lIElDU1NfU0xJQ0UxXHQxXG5AQCAtNTcsMTIgJiM0Mzs1OSwxNiBAQFxuIFxuICNkZWZpbmUgSUNTU0dfTUFYX1JGTE9XU1x0OFx0LyogcGVyIHNsaWNlICovXG4gXG4tI2RlZmluZSBJQ1NTR19OVU1fUEFfU1RBVFNcdDMyXG4tI2RlZmluZSBJQ1NTR19OVU1fTUlJR19TVEFUU1x0NjBcbiYjNDM7I2RlZmluZSBJQ1NTR19OVU1fUEFfU1RBVFNcdEFSUkFZX1NJWkUoaWNzc2dfYWxsX3BhX3N0YXRzKVxuJiM0MzsjZGVmaW5lIElDU1NHX05VTV9NSUlHX1NUQVRTXHRBUlJBWV9TSVpFKGljc3NnX2FsbF9taWlnX3N0YXRzKVxuIC8qIE51bWJlciBvZiBJQ1NTRyByZWxhdGVkIHN0YXRzICovXG4gI2RlZmluZSBJQ1NTR19OVU1fU1RBVFMgKElDU1NHX05VTV9NSUlHX1NUQVRTICYjNDM7IElDU1NHX05VTV9QQV9TVEFUUylcbiYjNDM7LyogTUlJRyBzdGF0cyB3aXRoIHN0YW5kYXJkIHVBUEkgZXF1aXZhbGVudHMgKGV4Y2x1ZGVkIGZyb20gZXRodG9vbCAtUykgKi9cbiAjZGVmaW5lIElDU1NHX05VTV9TVEFOREFSRF9TVEFUUyAzMVxuLSNkZWZpbmUgSUNTU0dfTlVNX0VUSFRPT0xfU1RBVFMgKElDU1NHX05VTV9TVEFUUyAtIElDU1NHX05VTV9TVEFOREFSRF9TVEFUUylcbiYjNDM7LyogUEEgc3RhdHMgd2l0aCBzdGFuZGFyZCB1QVBJIGVxdWl2YWxlbnRzLCBleHBvc2VkIHZpYSBnZXRfbW1fc3RhdHMgb25seSAqL1xuJiM0MzsjZGVmaW5lIElDU1NHX05VTV9QQV9TVEFOREFSRF9TVEFUUyA1XG4mIzQzOyNkZWZpbmUgSUNTU0dfTlVNX0VUSFRPT0xfU1RBVFMgKElDU1NHX05VTV9TVEFUUyAtIElDU1NHX05VTV9TVEFOREFSRF9TVEFUUyAtIFxcXG4mIzQzO1x0XHRcdFx0IElDU1NHX05VTV9QQV9TVEFOREFSRF9TVEFUUylcbiBcbiAjZGVmaW5lIElFUF9ERUZBVUxUX0NZQ0xFX1RJTUVfTlNcdDEwMDAwMDBcdC8qIDEgbXMgKi9cbiBcbkBAIC0yNTQsNiAmIzQzOzI2MCw3IEBAIHN0cnVjdCBwcnVldGhfZW1hYyB7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nO1xuIFx0c3RydWN0IHhkcF9hdHRhY2htZW50X2luZm8geGRwaTtcbiBcdGludCB4c2tfcWlkO1xuJiM0MztcdHN0cnVjdCBwcnVldGhfcW9zIHFvcztcbiB9O1xuIFxuIC8qIFRoZSBidWYgaW5jbHVkZXMgaGVhZHJvb20gY29tcGF0aWJsZSB3aXRoIGJvdGggc2tiIGFuZCB4ZHBmICovXG5AQCAtNDU4LDcgJiM0Mzs0NjUsNyBAQCBpbnQgZW1hY19mZGJfZmxvd19pZF91cGRhdGVkKHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYyk7XG4gXG4gdm9pZCBpY3NzZ19zdGF0c193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiB2b2lkIGVtYWNfdXBkYXRlX2hhcmR3YXJlX3N0YXRzKHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYyk7XG4taW50IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMsIGNoYXIgKnN0YXRfbmFtZSk7XG4mIzQzO3U2NCBlbWFjX2dldF9zdGF0X2J5X25hbWUoc3RydWN0IHBydWV0aF9lbWFjICplbWFjLCBjaGFyICpzdGF0X25hbWUpO1xuIFxuIC8qIENvbW1vbiBmdW5jdGlvbnMgKi9cbiB2b2lkIHBydWV0aF9jbGVhbnVwX3J4X2NobnMoc3RydWN0IHBydWV0aF9lbWFjICplbWFjLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3Fvcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcW9zLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yN2E5NTNkOTgxNTM4XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19xb3MuY1xuQEAgLTAsMCAmIzQzOzEsMzA1IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIFRleGFzIEluc3RydW1lbnRzIElDU1NHIFBSVUVUSCBRb1Mgc3VibW9kdWxlXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyMyBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS9cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtpY3NzZ19wcnVldGguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtpY3NzZ19zd2l0Y2hfbWFwLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGljc3NnX2lldF9zZXRfcHJlZW1wdF9tYXNrKHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYylcbiYjNDM7e1xuJiM0MztcdHZvaWQgX19pb21lbSAqY29uZmlnID0gZW1hYy1cdTAwM2VkcmFtLnZhICYjNDM7IElDU1NHX0NPTkZJR19PRkZTRVQ7XG4mIzQzO1x0c3RydWN0IHBydWV0aF9xb3NfbXFwcmlvICpwX21xcHJpbyA9IFx1MDAyNmVtYWMtXHUwMDNlcW9zLm1xcHJpbztcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZwX21xcHJpby1cdTAwM2Vxb3B0O1xuJiM0MztcdHN0cnVjdCBwcnVldGhfcW9zX2lldCAqaWV0ID0gXHUwMDI2ZW1hYy1cdTAwM2Vxb3MuaWV0O1xuJiM0MztcdGludCBwcmVtcHRfbWFzayA9IDAsIGk7XG4mIzQzO1x0dTggdGMsIG51bV90YztcbiYjNDM7XG4mIzQzO1x0aWYgKCFpZXQtXHUwMDNlcHJlZW1wdGlibGVfdGNzKVxuJiM0MztcdFx0Z290byByZXNldF9odztcbiYjNDM7XG4mIzQzO1x0aWYgKGlldC1cdTAwM2VmcGVfYWN0aXZlKSB7XG4mIzQzO1x0XHQvKiBSZXNldCBhbGwgUV9NQVAgZW50cmllcyBmaXJzdCB0byBjbGVhciBhbnkgc3RhbGUgcHJlZW1wdGlibGVcbiYjNDM7XHRcdCAqIGVudHJpZXMgZnJvbSBhIHByaW9yIHdpZGVyIFRDIG1hcHBpbmcuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElDU1NHX01BWF9UQ19RVUVVRVM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHR3cml0ZWIoMCwgY29uZmlnICYjNDM7IEVYUFJFU1NfUFJFX0VNUFRJVkVfUV9NQVAgJiM0MzsgaSk7XG4mIzQzO1xuJiM0MztcdFx0LyogQ29uZmlndXJlIHF1ZXVlcyBmb3IgdXNlciByZXF1ZXN0ZWQgcHJlZW1wdGlibGUgdGMgbWFwICovXG4mIzQzO1x0XHRudW1fdGMgPSBwX21xcHJpby1cdTAwM2Vxb3B0Lm51bV90YztcbiYjNDM7XHRcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0LyogY2hlY2sgaWYgdGhlIHRjIGlzIHByZWVtcHRpdmUgb3Igbm90ICovXG4mIzQzO1x0XHRcdGlmIChpZXQtXHUwMDNlcHJlZW1wdGlibGVfdGNzIFx1MDAyNiBCSVQodGMpKSB7XG4mIzQzO1x0XHRcdFx0LyogU2V0IHRoZSBxdWV1ZXMgYXMgcHJlZW1wdGl2ZSBxdWV1ZXMgKi9cbiYjNDM7XHRcdFx0XHRmb3IgKGkgPSBxb3B0LVx1MDAzZW9mZnNldFt0Y107IGkgXHUwMDNjIHFvcHQtXHUwMDNlb2Zmc2V0W3RjXSAmIzQzOyBxb3B0LVx1MDAzZWNvdW50W3RjXTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0XHRcdHdyaXRlYihCSVQoNCksXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgY29uZmlnICYjNDM7IEVYUFJFU1NfUFJFX0VNUFRJVkVfUV9NQVAgJiM0MzsgaSk7XG4mIzQzO1x0XHRcdFx0fVxuJiM0MztcdFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRcdC8qIEFjY3VtdWxhdGUgZXhwcmVzcyBxdWV1ZSBiaXRzIGZvciB0aGUgbWFzayAqL1xuJiM0MztcdFx0XHRcdGZvciAoaSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTsgaSBcdTAwM2MgcW9wdC1cdTAwM2VvZmZzZXRbdGNdICYjNDM7IHFvcHQtXHUwMDNlY291bnRbdGNdOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0XHRcdHByZW1wdF9tYXNrIHw9IEJJVChpKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdFx0d3JpdGViKHByZW1wdF9tYXNrLCBjb25maWcgJiM0MzsgRVhQUkVTU19QUkVfRU1QVElWRV9RX01BU0spO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO3Jlc2V0X2h3OlxuJiM0MztcdC8qIFJlc2V0IHRvIGRlZmF1bHQ6IGFsbCBxdWV1ZXMgYXMgZXhwcmVzcyAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElDU1NHX01BWF9UQ19RVUVVRVM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0d3JpdGViKDAsIGNvbmZpZyAmIzQzOyBFWFBSRVNTX1BSRV9FTVBUSVZFX1FfTUFQICYjNDM7IGkpO1xuJiM0MztcdHdyaXRlYihJQ1NTR19FWFBSRVNTX1FfTUFTS19BTEwsIGNvbmZpZyAmIzQzOyBFWFBSRVNTX1BSRV9FTVBUSVZFX1FfTUFTSyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaWNzc2dfaWV0X3ZlcmlmeV93YWl0KHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYylcbiYjNDM7e1xuJiM0MztcdHZvaWQgX19pb21lbSAqY29uZmlnID0gZW1hYy1cdTAwM2VkcmFtLnZhICYjNDM7IElDU1NHX0NPTkZJR19PRkZTRVQ7XG4mIzQzO1x0c3RydWN0IHBydWV0aF9xb3NfaWV0ICppZXQgPSBcdTAwMjZlbWFjLVx1MDAzZXFvcy5pZXQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBkZWxheV91cywgdGltZW91dF91cztcbiYjNDM7XHR1MzIgc3RhdHVzO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGRlbGF5X3VzID0gaWV0LVx1MDAzZXZlcmlmeV90aW1lX21zICogMTAwMDtcbiYjNDM7XHR0aW1lb3V0X3VzID0gZGVsYXlfdXMgKiBJQ1NTR19JRVRfVkVSSUZZX0FUVEVNUFRTO1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWFkYl9wb2xsX3RpbWVvdXQoY29uZmlnICYjNDM7IFBSRV9FTVBUSU9OX1ZFUklGWV9TVEFUVVMsXG4mIzQzO1x0XHRcdFx0IHN0YXR1cyxcbiYjNDM7XHRcdFx0XHQgc3RhdHVzID09IElDU1NHX0lFVEZQRV9TVEFURV9TVUNDRUVERUQgfHxcbiYjNDM7XHRcdFx0XHQgc3RhdHVzID09IElDU1NHX0lFVEZQRV9TVEFURV9GQUlMRUQsXG4mIzQzO1x0XHRcdFx0IGRlbGF5X3VzLFxuJiM0MztcdFx0XHRcdCB0aW1lb3V0X3VzKTtcbiYjNDM7XG4mIzQzO1x0aWV0LVx1MDAzZXZlcmlmeV9zdGF0dXMgPSBzdGF0dXM7XG4mIzQzO1x0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHN0YXR1cyA9PSBJQ1NTR19JRVRGUEVfU1RBVEVfRkFJTEVEKVxuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogRGlyZWN0IHN5bmNocm9ub3VzIGNvbmZpZ3VyYXRpb24gb2YgSUVUIEZQRS5cbiYjNDM7ICogQ2FsbGVyIG11c3QgaG9sZCBpZXQtXHUwMDNlZnBlX2xvY2suXG4mIzQzOyAqL1xuJiM0MztpbnQgaWNzc2dfY29uZmlnX2lldGZwZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgYm9vbCBlbmFibGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XHR2b2lkIF9faW9tZW0gKmNvbmZpZyA9IGVtYWMtXHUwMDNlZHJhbS52YSAmIzQzOyBJQ1NTR19DT05GSUdfT0ZGU0VUO1xuJiM0MztcdHN0cnVjdCBwcnVldGhfcW9zX2lldCAqaWV0ID0gXHUwMDI2ZW1hYy1cdTAwM2Vxb3MuaWV0O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0dTggdmFsO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmlldC1cdTAwM2VmcGVfbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmICghUkVBRF9PTkNFKGVtYWMtXHUwMDNlbGluaykpIHtcbiYjNDM7XHRcdG5ldGRldl9kYmcobmRldiwgXCYjMzQ7Y2Fubm90IGNoYW5nZSBJRVQvRlBFIHN0YXRlIHdoZW4gaW50ZXJmYWNlIGlzIGRvd25cXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBVcGRhdGUgRlBFIFR4IGVuYWJsZSBiaXQgKFBSRV9FTVBUSU9OX0VOQUJMRV9UWCkgaWZcbiYjNDM7XHQgKiBmcGVfZW5hYmxlZCBpcyBzZXQgdG8gZW5hYmxlIE1NIGluIFR4IGRpcmVjdGlvblxuJiM0MztcdCAqL1xuJiM0MztcdHdyaXRlYihlbmFibGUgPyAxIDogMCwgY29uZmlnICYjNDM7IFBSRV9FTVBUSU9OX0VOQUJMRV9UWCk7XG4mIzQzO1x0d3JpdGV3KGlldC1cdTAwM2V0eF9taW5fZnJhZ19zaXplICYjNDM7IEVUSF9GQ1NfTEVOLFxuJiM0MztcdCAgICAgICBjb25maWcgJiM0MzsgUFJFX0VNUFRJT05fQUREX0ZSQUdfU0laRV9MT0NBTCk7XG4mIzQzO1xuJiM0MztcdC8qIElmIEZQRSBpcyB0byBiZSBlbmFibGVkLCBmaXJzdCBjb25maWd1cmUgTUFDIFZlcmlmeSBzdGF0ZVxuJiM0MztcdCAqIG1hY2hpbmUgaW4gZmlybXdhcmUgYXMgZmlybXdhcmUga2lja3MgdGhlIFZlcmlmeSBwcm9jZXNzXG4mIzQzO1x0ICogYXMgc29vbiBhcyBJQ1NTR19FTUFDX1BPUlRfUFJFTVBUX1RYX0VOQUJMRSBjb21tYW5kIGlzXG4mIzQzO1x0ICogcmVjZWl2ZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGVuYWJsZSBcdTAwMjZcdTAwMjYgaWV0LVx1MDAzZW1hY192ZXJpZnlfY29uZmlndXJlKSB7XG4mIzQzO1x0XHR3cml0ZWIoMSwgY29uZmlnICYjNDM7IFBSRV9FTVBUSU9OX0VOQUJMRV9WRVJJRlkpO1xuJiM0MztcdFx0d3JpdGVsKGlldC1cdTAwM2V2ZXJpZnlfdGltZV9tcywgY29uZmlnICYjNDM7IFBSRV9FTVBUSU9OX1ZFUklGWV9USU1FKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0d3JpdGViKDAsIGNvbmZpZyAmIzQzOyBQUkVfRU1QVElPTl9FTkFCTEVfVkVSSUZZKTtcbiYjNDM7XHRcdGlldC1cdTAwM2V2ZXJpZnlfc3RhdHVzID0gSUNTU0dfSUVURlBFX1NUQVRFX0RJU0FCTEVEO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogU2VuZCBjb21tYW5kIHRvIGVuYWJsZSBGUEUgVHggc2lkZS4gUnggaXMgYWx3YXlzIGVuYWJsZWQgKi9cbiYjNDM7XHRyZXQgPSBpY3NzZ19zZXRfcG9ydF9zdGF0ZShlbWFjLFxuJiM0MztcdFx0XHRcdCAgIGVuYWJsZSA/IElDU1NHX0VNQUNfUE9SVF9QUkVNUFRfVFhfRU5BQkxFIDpcbiYjNDM7XHRcdFx0XHRcdCAgICBJQ1NTR19FTUFDX1BPUlRfUFJFTVBUX1RYX0RJU0FCTEUpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmRldiwgXCYjMzQ7VFggcHJlZW1wdCAlcyBjb21tYW5kIGZhaWxlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgc3RyX2VuYWJsZV9kaXNhYmxlKGVuYWJsZSkpO1xuJiM0MztcdFx0Z290byBmYWxsYmFjaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChlbmFibGUgXHUwMDI2XHUwMDI2IGlldC1cdTAwM2VtYWNfdmVyaWZ5X2NvbmZpZ3VyZSkge1xuJiM0MztcdFx0cmV0ID0gaWNzc2dfaWV0X3ZlcmlmeV93YWl0KGVtYWMpO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKG5kZXYsIFwmIzM0O01BQyBNZXJnZSB2ZXJpZmljYXRpb24gZmFpbGVkOiAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBpZXQtXHUwMDNldmVyaWZ5X3N0YXR1cyA9PSBJQ1NTR19JRVRGUEVfU1RBVEVfRkFJTEVEID9cbiYjNDM7XHRcdFx0XHQgICBcJiMzNDtsaW5rIHBhcnRuZXIgcmVqZWN0ZWRcJiMzNDsgOiBcJiMzNDt0aW1lb3V0XCYjMzQ7KTtcbiYjNDM7XHRcdFx0Z290byBkaXNhYmxlX3R4O1xuJiM0MztcdFx0fVxuJiM0MztcdH0gZWxzZSBpZiAoZW5hYmxlKSB7XG4mIzQzO1x0XHQvKiBHaXZlIGZpcm13YXJlIHNvbWUgdGltZSB0byB1cGRhdGVcbiYjNDM7XHRcdCAqIFBSRV9FTVBUSU9OX0FDVElWRV9UWCBzdGF0ZVxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHR1c2xlZXBfcmFuZ2UoMTAwLCAyMDApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGVuYWJsZSkge1xuJiM0MztcdFx0dmFsID0gcmVhZGIoY29uZmlnICYjNDM7IFBSRV9FTVBUSU9OX0FDVElWRV9UWCk7XG4mIzQzO1x0XHRpZiAodmFsICE9IDEpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O0Zpcm13YXJlIGZhaWxzIHRvIGFjdGl2YXRlIElFVC9GUEVcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXQgPSAtRUlPO1xuJiM0MztcdFx0XHRnb3RvIGRpc2FibGVfdHg7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZXQtXHUwMDNlZnBlX2FjdGl2ZSA9IHRydWU7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlldC1cdTAwM2VmcGVfYWN0aXZlID0gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpY3NzZ19pZXRfc2V0X3ByZWVtcHRfbWFzayhlbWFjKTtcbiYjNDM7XHRuZXRkZXZfZGJnKG5kZXYsIFwmIzM0O0lFVCBGUEUgJXMgc3VjY2Vzc2Z1bGx5XFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgc3RyX2VuYWJsZV9kaXNhYmxlKGVuYWJsZSkpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZGlzYWJsZV90eDpcbiYjNDM7XHRpY3NzZ19zZXRfcG9ydF9zdGF0ZShlbWFjLCBJQ1NTR19FTUFDX1BPUlRfUFJFTVBUX1RYX0RJU0FCTEUpO1xuJiM0MztmYWxsYmFjazpcbiYjNDM7XHR3cml0ZWIoMCwgY29uZmlnICYjNDM7IFBSRV9FTVBUSU9OX0VOQUJMRV9UWCk7XG4mIzQzO1x0d3JpdGViKDAsIGNvbmZpZyAmIzQzOyBQUkVfRU1QVElPTl9FTkFCTEVfVkVSSUZZKTtcbiYjNDM7XHRpZXQtXHUwMDNldmVyaWZ5X3N0YXR1cyA9IElDU1NHX0lFVEZQRV9TVEFURV9ESVNBQkxFRDtcbiYjNDM7XHRpZXQtXHUwMDNlZnBlX2FjdGl2ZSA9IGZhbHNlO1xuJiM0MztcdGljc3NnX2lldF9zZXRfcHJlZW1wdF9tYXNrKGVtYWMpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgaWNzc2dfcW9zX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgcHJ1ZXRoX3Fvc19pZXQgKmlldCA9IFx1MDAyNmVtYWMtXHUwMDNlcW9zLmlldDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZpZXQtXHUwMDNlZnBlX2xvY2spO1xuJiM0MztcdC8qIFNldCBkZWZhdWx0IHZhbHVlcyB0byBwcmV2ZW50IGdhcmJhZ2UgdmFsdWVzIGR1cmluZyAuZ2V0X21tKCkgKi9cbiYjNDM7XHRpZXQtXHUwMDNldmVyaWZ5X3RpbWVfbXMgPSBJQ1NTR19JRVRfTUFYX1ZFUklGWV9USU1FO1xuJiM0MztcdGlldC1cdTAwM2V0eF9taW5fZnJhZ19zaXplID0gRVRIX1pMRU47XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoaWNzc2dfcW9zX2luaXQpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBpY3NzZ19pZXRfY2hhbmdlX3ByZWVtcHRpYmxlX3RjcyhzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcHJ1ZXRoX3Fvc19pZXQgKmlldCA9IFx1MDAyNmVtYWMtXHUwMDNlcW9zLmlldDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmlldC1cdTAwM2VmcGVfbG9jayk7XG4mIzQzO1x0aWYgKCFpZXQtXHUwMDNlZnBlX2VuYWJsZWQgXHUwMDI2XHUwMDI2ICFpZXQtXHUwMDNlcHJlZW1wdGlibGVfdGNzKSB7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2aWV0LVx1MDAzZWZwZV9sb2NrKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XHRyZXQgPSBpY3NzZ19jb25maWdfaWV0ZnBlKGVtYWMtXHUwMDNlbmRldiwgaWV0LVx1MDAzZWZwZV9lbmFibGVkKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2aWV0LVx1MDAzZWZwZV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBlbWFjX3RjX3F1ZXJ5X2NhcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHZvaWQgKnR5cGVfZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0Y19xdWVyeV9jYXBzX2Jhc2UgKmJhc2UgPSB0eXBlX2RhdGE7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoYmFzZS1cdTAwM2V0eXBlKSB7XG4mIzQzO1x0Y2FzZSBUQ19TRVRVUF9RRElTQ19NUVBSSU86IHtcbiYjNDM7XHRcdHN0cnVjdCB0Y19tcXByaW9fY2FwcyAqY2FwcyA9IGJhc2UtXHUwMDNlY2FwcztcbiYjNDM7XG4mIzQzO1x0XHRjYXBzLVx1MDAzZXZhbGlkYXRlX3F1ZXVlX2NvdW50cyA9IHRydWU7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZW1hY190Y19zZXR1cF9tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHZvaWQgKnR5cGVfZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYyA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcdHN0cnVjdCBwcnVldGhfcW9zX21xcHJpbyAqcF9tcXByaW8gPSBcdTAwMjZlbWFjLVx1MDAzZXFvcy5tcXByaW87XG4mIzQzO1x0c3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbyA9IHR5cGVfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgcHJ1ZXRoX3Fvc19pZXQgKmlldCA9IFx1MDAyNmVtYWMtXHUwMDNlcW9zLmlldDtcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbiYjNDM7XHRpbnQgdGMsIG9mZnNldCwgY291bnQ7XG4mIzQzO1xuJiM0MztcdC8qIFZhbGlkYXRlIHBhcmFtZXRlcnMgKi9cbiYjNDM7XHRpZiAocW9wdC1cdTAwM2VudW1fdGMgXHUwMDNlIElDU1NHX01BWF9UQ19RVUVVRVMpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmRldiwgXCYjMzQ7TnVtYmVyIG9mIHRyYWZmaWMgY2xhc3NlcyAoJXUpIGV4Y2VlZHMgaGFyZHdhcmUgbGltaXRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIHFvcHQtXHUwMDNlbnVtX3RjKTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX1NIQVBFUikge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZGV2LCBcJiMzNDt0cmFmZmljIHNoYXBpbmcgaXMgbm90IHN1cHBvcnRlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiAoVENfTVFQUklPX0ZfTUlOX1JBVEUgfCBUQ19NUVBSSU9fRl9NQVhfUkFURSkpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmRldiwgXCYjMzQ7cGVyLXF1ZXVlIHJhdGUgbGltaXRpbmcgaXMgbm90IHN1cHBvcnRlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXFvcHQtXHUwMDNlbnVtX3RjKSB7XG4mIzQzO1x0XHRuZXRkZXZfcmVzZXRfdGMobmRldik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdG5ldGRldl9zZXRfbnVtX3RjKG5kZXYsIHFvcHQtXHUwMDNlbnVtX3RjKTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0Y291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbiYjNDM7XHRcdFx0b2Zmc2V0ID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdO1xuJiM0MztcdFx0XHRuZXRkZXZfc2V0X3RjX3F1ZXVlKG5kZXYsIHRjLCBjb3VudCwgb2Zmc2V0KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2aWV0LVx1MDAzZWZwZV9sb2NrKTtcbiYjNDM7XHRpZiAoIXFvcHQtXHUwMDNlbnVtX3RjKSB7XG4mIzQzO1x0XHRpZXQtXHUwMDNlcHJlZW1wdGlibGVfdGNzID0gMDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0bWVtY3B5KFx1MDAyNnBfbXFwcmlvLVx1MDAzZXFvcHQsIHFvcHQsIHNpemVvZigqcW9wdCkpO1xuJiM0MztcdFx0aWV0LVx1MDAzZXByZWVtcHRpYmxlX3RjcyA9IG1xcHJpby1cdTAwM2VwcmVlbXB0aWJsZV90Y3M7XG4mIzQzO1x0fVxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZpZXQtXHUwMDNlZnBlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRuZXRkZXZfZGJnKG5kZXYsIFwmIzM0O2Rldi1cdTAwM2VudW1fdGMgJXUgZGV2LVx1MDAzZXJlYWxfbnVtX3R4X3F1ZXVlcyAldVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIG5kZXYtXHUwMDNlbnVtX3RjLCBuZGV2LVx1MDAzZXJlYWxfbnVtX3R4X3F1ZXVlcyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBpY3NzZ19pZXRfY2hhbmdlX3ByZWVtcHRpYmxlX3RjcyhlbWFjKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IGljc3NnX3Fvc19uZG9fc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxuJiM0MztcdFx0XHQgICB2b2lkICp0eXBlX2RhdGEpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKHR5cGUpIHtcbiYjNDM7XHRjYXNlIFRDX1FVRVJZX0NBUFM6XG4mIzQzO1x0XHRyZXR1cm4gZW1hY190Y19xdWVyeV9jYXBzKG5kZXYsIHR5cGVfZGF0YSk7XG4mIzQzO1x0Y2FzZSBUQ19TRVRVUF9RRElTQ19NUVBSSU86XG4mIzQzO1x0XHRyZXR1cm4gZW1hY190Y19zZXR1cF9tcXByaW8obmRldiwgdHlwZV9kYXRhKTtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChpY3NzZ19xb3NfbmRvX3NldHVwX3RjKTtcbiYjNDM7XG4mIzQzO3ZvaWQgaWNzc2dfcW9zX2xpbmtfc3RhdGVfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBydWV0aF9lbWFjICplbWFjID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1x0c3RydWN0IHBydWV0aF9xb3NfaWV0ICppZXQgPSBcdTAwMjZlbWFjLVx1MDAzZXFvcy5pZXQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFSRUFEX09OQ0UoZW1hYy1cdTAwM2VsaW5rKSkge1xuJiM0MztcdFx0LyogQ2xlYXIgRlBFIGFjdGl2ZSBzdGF0ZSBvbiBsaW5rLWRvd24gc28gZ2V0X21tKCkgcmVwb3J0c1xuJiM0MztcdFx0ICogYWNjdXJhdGUgdHhfYWN0aXZlIGFuZCB2ZXJpZnlfc3RhdHVzIHdoaWxlIGxpbmsgaXMgZG93bi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0bXV0ZXhfbG9jayhcdTAwMjZpZXQtXHUwMDNlZnBlX2xvY2spO1xuJiM0MztcdFx0aWV0LVx1MDAzZWZwZV9hY3RpdmUgPSBmYWxzZTtcbiYjNDM7XHRcdGlldC1cdTAwM2V2ZXJpZnlfc3RhdHVzID0gSUNTU0dfSUVURlBFX1NUQVRFX0RJU0FCTEVEO1xuJiM0MztcdFx0aWNzc2dfaWV0X3NldF9wcmVlbXB0X21hc2soZW1hYyk7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2aWV0LVx1MDAzZWZwZV9sb2NrKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGljc3NnX2lldF9jaGFuZ2VfcHJlZW1wdGlibGVfdGNzKGVtYWMpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRuZXRkZXZfZGJnKG5kZXYsIFwmIzM0O0lFVCBGUEUgJXMgZmFpbGVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBzdHJfZW5hYmxlX2Rpc2FibGUoaWV0LVx1MDAzZWZwZV9lbmFibGVkKSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoaWNzc2dfcW9zX2xpbmtfc3RhdGVfdXBkYXRlKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19xb3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3Fvcy5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTgyNmNlNGJjZmQ5NlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcW9zLmhcbkBAIC0wLDAgJiM0MzsxLDY4IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4mIzQzOy8qIENvcHlyaWdodCAoQykgMjAyMyBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS9cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9fTkVUX1RJX0lDU1NHX1FPU19IXG4mIzQzOyNkZWZpbmUgX19ORVRfVElfSUNTU0dfUU9TX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2F0b21pYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBJQ1NTR19NQVhfVENfUVVFVUVTXHRcdFx0OFxuJiM0MzsjZGVmaW5lIElDU1NHX0VYUFJFU1NfUV9NQVNLX0FMTFx0XHQweEZGXG4mIzQzOyNkZWZpbmUgSUNTU0dfSUVUX01BWF9WRVJJRllfVElNRVx0XHQxMjhcbiYjNDM7I2RlZmluZSBJQ1NTR19JRVRfTUlOX1ZFUklGWV9USU1FXHRcdDFcbiYjNDM7I2RlZmluZSBJQ1NTR19JRVRfVkVSSUZZX0FUVEVNUFRTXHRcdDNcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBlbnVtIGljc3NnX2lldGZwZV92ZXJpZnlfc3RhdGVzIC0gc3RhdHVzIG9mIE1NIFZlcmlmeSByZXR1cm5lZCBieSBmaXJtd2FyZVxuJiM0MzsgKiBASUNTU0dfSUVURlBFX1NUQVRFX1VOS05PV046XG4mIzQzOyAqXHR2ZXJpZmljYXRpb24gc3RhdHVzIGlzIHVua25vd25cbiYjNDM7ICogQElDU1NHX0lFVEZQRV9TVEFURV9JTklUSUFMOlxuJiM0MzsgKlx0RmlybXdhcmUgcmV0dXJucyB0aGlzIGlmIHZlcmlmeSBzdGF0ZSBkaWFncmFtIGlzIGlkbGVcbiYjNDM7ICogQElDU1NHX0lFVEZQRV9TVEFURV9WRVJJRllJTkc6XG4mIzQzOyAqXHRGaXJtd2FyZSByZXR1cm5zIHRoaXMgaWYgdmVyaWZpY2F0aW9uIGlzIG9uZ29pbmdcbiYjNDM7ICogQElDU1NHX0lFVEZQRV9TVEFURV9TVUNDRUVERUQ6XG4mIzQzOyAqXHRGaXJtd2FyZSByZXR1cm5zIHRoaXMgaWYgdmVyaWZ5IHN0YXRlIGRpYWdyYW0gY29tcGxldGVzIHZlcmlmaWNhdGlvblxuJiM0MzsgKiBASUNTU0dfSUVURlBFX1NUQVRFX0ZBSUxFRDpcbiYjNDM7ICpcdEZpcm13YXJlIHJldHVybnMgdGhpcyBpZiB2ZXJpZnkgc3RhdGUgZGlhZ3JhbSBmYWlscyBkdXJpbmcgdmVyaWZpY2F0aW9uXG4mIzQzOyAqIEBJQ1NTR19JRVRGUEVfU1RBVEVfRElTQUJMRUQ6XG4mIzQzOyAqXHR2ZXJpZmljYXRpb24gaXMgZGlzYWJsZWQgYnkgdGhlIGRyaXZlclxuJiM0MzsgKi9cbiYjNDM7ZW51bSBpY3NzZ19pZXRmcGVfdmVyaWZ5X3N0YXRlcyB7XG4mIzQzO1x0SUNTU0dfSUVURlBFX1NUQVRFX1VOS05PV04gPSAwLFxuJiM0MztcdElDU1NHX0lFVEZQRV9TVEFURV9JTklUSUFMLFxuJiM0MztcdElDU1NHX0lFVEZQRV9TVEFURV9WRVJJRllJTkcsXG4mIzQzO1x0SUNTU0dfSUVURlBFX1NUQVRFX1NVQ0NFRURFRCxcbiYjNDM7XHRJQ1NTR19JRVRGUEVfU1RBVEVfRkFJTEVELFxuJiM0MztcdElDU1NHX0lFVEZQRV9TVEFURV9ESVNBQkxFRFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHBydWV0aF9xb3NfbXFwcmlvIHtcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgcW9wdDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBwcnVldGhfcW9zX2lldCB7XG4mIzQzO1x0Ym9vbCBmcGVfZW5hYmxlZDtcbiYjNDM7XHRib29sIG1hY192ZXJpZnlfY29uZmlndXJlO1xuJiM0MztcdHUzMiB0eF9taW5fZnJhZ19zaXplO1xuJiM0MztcdHUzMiB2ZXJpZnlfdGltZV9tcztcbiYjNDM7XHRib29sIGZwZV9hY3RpdmU7XG4mIzQzO1x0ZW51bSBpY3NzZ19pZXRmcGVfdmVyaWZ5X3N0YXRlcyB2ZXJpZnlfc3RhdHVzO1xuJiM0MztcdC8qIGZwZSBtdXRleCBwcm90ZWN0cyBhbGwgRlBFIG9wZXJhdGlvbnMgZm9yIHN5bmNocm9uaXphdGlvbiAqL1xuJiM0MztcdHN0cnVjdCBtdXRleCBmcGVfbG9jaztcbiYjNDM7XHR1OCBwcmVlbXB0aWJsZV90Y3M7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcHJ1ZXRoX3FvcyB7XG4mIzQzO1x0c3RydWN0IHBydWV0aF9xb3NfaWV0IGlldDtcbiYjNDM7XHRzdHJ1Y3QgcHJ1ZXRoX3Fvc19tcXByaW8gbXFwcmlvO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7dm9pZCBpY3NzZ19xb3NfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4mIzQzO3ZvaWQgaWNzc2dfcW9zX2xpbmtfc3RhdGVfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbiYjNDM7aW50IGljc3NnX3Fvc19uZG9fc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxuJiM0MztcdFx0XHQgICB2b2lkICp0eXBlX2RhdGEpO1xuJiM0MztpbnQgaWNzc2dfY29uZmlnX2lldGZwZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgYm9vbCBlbmFibGUpO1xuJiM0MzsjZW5kaWYgLyogX19ORVRfVElfSUNTU0dfUU9TX0ggKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zdGF0cy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfc3RhdHMuY1xuaW5kZXggNzE1OWJhYTAxNTVjZi4uY2ZkYjZmNWRjNWRhMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3N0YXRzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3N0YXRzLmNcbkBAIC03NCw3ICYjNDM7NzQsNyBAQCB2b2lkIGljc3NnX3N0YXRzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGljc3NnX3N0YXRzX3dvcmtfaGFuZGxlcik7XG4gXG4taW50IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMsIGNoYXIgKnN0YXRfbmFtZSlcbiYjNDM7dTY0IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMsIGNoYXIgKnN0YXRfbmFtZSlcbiB7XG4gXHRpbnQgaTtcbiBcbkBAIC05MSw1ICYjNDM7OTEsNSBAQCBpbnQgZW1hY19nZXRfc3RhdF9ieV9uYW1lKHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYywgY2hhciAqc3RhdF9uYW1lKVxuIFx0fVxuIFxuIFx0bmV0ZGV2X2VycihlbWFjLVx1MDAzZW5kZXYsIFwmIzM0O0ludmFsaWQgc3RhdHMgJXNcXG5cJiMzNDssIHN0YXRfbmFtZSk7XG4tXHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfc3RhdHMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3N0YXRzLmhcbmluZGV4IDVlYzBiMzhlMGM2N2QuLmI4NmRhOGRhMjNhMTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zdGF0cy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zdGF0cy5oXG5AQCAtOCw4ICYjNDM7OCw2IEBAXG4gI2lmbmRlZiBfX05FVF9USV9JQ1NTR19TVEFUU19IXG4gI2RlZmluZSBfX05FVF9USV9JQ1NTR19TVEFUU19IXG4gXG4tI2luY2x1ZGUgXCYjMzQ7aWNzc2dfcHJ1ZXRoLmhcJiMzNDtcbi1cbiAjZGVmaW5lIFNUQVRTX1RJTUVfTElNSVRfMUdfTVMgICAgMjUwMDAgICAgLyogMjUgc2Vjb25kcyBAIDFHICovXG4gXG4gc3RydWN0IG1paWdfc3RhdHNfcmVncyB7XG5AQCAtMTU1LDUwICYjNDM7MTUzLDYwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNzc2dfbWlpZ19zdGF0cyBpY3NzZ19hbGxfbWlpZ19zdGF0c1tdID0ge1xuIFx0SUNTU0dfTUlJR19TVEFUUyh0eF9ieXRlcywgdHJ1ZSksXG4gfTtcbiBcbi0jZGVmaW5lIElDU1NHX1BBX1NUQVRTKGZpZWxkKVx0XFxcbi17XHRcdFx0XHRcXFxuLVx0I2ZpZWxkLFx0XHRcdFxcXG4tXHRmaWVsZCxcdFx0XHRcXFxuJiM0MzsjZGVmaW5lIElDU1NHX1BBX1NUQVRTKGZpZWxkLCBzdGQpXHRcXFxuJiM0Mzt7XHRcdFx0XHRcdFxcXG4mIzQzO1x0I2ZpZWxkLFx0XHRcdFx0XFxcbiYjNDM7XHRmaWVsZCxcdFx0XHRcdFxcXG4mIzQzO1x0c3RkLFx0XHRcdFx0XFxcbiB9XG4gXG4gc3RydWN0IGljc3NnX3BhX3N0YXRzIHtcbiBcdGNoYXIgbmFtZVtFVEhfR1NUUklOR19MRU5dO1xuIFx0dTMyIG9mZnNldDtcbiYjNDM7XHRib29sIHN0YW5kYXJkX3N0YXRzO1xuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpY3NzZ19wYV9zdGF0cyBpY3NzZ19hbGxfcGFfc3RhdHNbXSA9IHtcbi1cdElDU1NHX1BBX1NUQVRTKEZXX1JUVV9QS1RfRFJPUCksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19RMF9PVkVSRkxPVyksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19RMV9PVkVSRkxPVyksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19RMl9PVkVSRkxPVyksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19RM19PVkVSRkxPVyksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19RNF9PVkVSRkxPVyksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19RNV9PVkVSRkxPVyksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19RNl9PVkVSRkxPVyksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19RN19PVkVSRkxPVyksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19EUk9QUEVEX1BLVCksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19SWF9FUlJPUiksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19SWF9EU19JTlZBTElEKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX1RYX0RST1BQRURfUEFDS0VUKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX1RYX1RTX0RST1BQRURfUEFDS0VUKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX0lORl9QT1JUX0RJU0FCTEVEKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX0lORl9TQVYpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfSU5GX1NBX0RMKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX0lORl9QT1JUX0JMT0NLRUQpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfVEFHR0VEKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX0lORl9EUk9QX1BSSU9UQUdHRUQpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfTk9UQUcpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfTk9UTUVNQkVSKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX1JYX0VPRl9TSE9SVF9GUk1FUlIpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfUlhfQjBfRFJPUF9FQVJMWV9FT0YpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfVFhfSlVNQk9fRlJNX0NVVE9GRiksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19SWF9FWFBfRlJBR19RX0RST1ApLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfUlhfRklGT19PVkVSUlVOKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX0NVVF9USFJfUEtUKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX0hPU1RfUlhfUEtUX0NOVCksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19IT1NUX1RYX1BLVF9DTlQpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfSE9TVF9FR1JFU1NfUV9QUkVfT1ZFUkZMT1cpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfSE9TVF9FR1JFU1NfUV9FWFBfT1ZFUkZMT1cpLFxuJiM0MztcdElDU1NHX1BBX1NUQVRTKEZXX1JUVV9QS1RfRFJPUCwgZmFsc2UpLFxuJiM0MztcdElDU1NHX1BBX1NUQVRTKEZXX1EwX09WRVJGTE9XLCBmYWxzZSksXG4mIzQzO1x0SUNTU0dfUEFfU1RBVFMoRldfUTFfT1ZFUkZMT1csIGZhbHNlKSxcbiYjNDM7XHRJQ1NTR19QQV9TVEFUUyhGV19RMl9PVkVSRkxPVywgZmFsc2UpLFxuJiM0MztcdElDU1NHX1BBX1NUQVRTKEZXX1EzX09WRVJGTE9XLCBmYWxzZSksXG4mIzQzO1x0SUNTU0dfUEFfU1RBVFMoRldfUTRfT1ZFUkZMT1csIGZhbHNlKSxcbiYjNDM7XHRJQ1NTR19QQV9TVEFUUyhGV19RNV9PVkVSRkxPVywgZmFsc2UpLFxuJiM0MztcdElDU1NHX1BBX1NUQVRTKEZXX1E2X09WRVJGTE9XLCBmYWxzZSksXG4mIzQzO1x0SUNTU0dfUEFfU1RBVFMoRldfUTdfT1ZFUkZMT1csIGZhbHNlKSxcbiYjNDM7XHRJQ1NTR19QQV9TVEFUUyhGV19EUk9QUEVEX1BLVCwgZmFsc2UpLFxuJiM0MztcdElDU1NHX1BBX1NUQVRTKEZXX1JYX0VSUk9SLCBmYWxzZSksXG4mIzQzO1x0SUNTU0dfUEFfU1RBVFMoRldfUlhfRFNfSU5WQUxJRCwgZmFsc2UpLFxuJiM0MztcdElDU1NHX1BBX1NUQVRTKEZXX1RYX0RST1BQRURfUEFDS0VULCBmYWxzZSksXG4mIzQzO1x0SUNTU0dfUEFfU1RBVFMoRldfVFhfVFNfRFJPUFBFRF9QQUNLRVQsIGZhbHNlKSxcbiYjNDM7XHRJQ1NTR19QQV9TVEFUUyhGV19JTkZfUE9SVF9ESVNBQkxFRCwgZmFsc2UpLFxuJiM0MztcdElDU1NHX1BBX1NUQVRTKEZXX0lORl9TQVYsIGZhbHNlKSxcbiYjNDM7XHRJQ1NTR19QQV9TVEFUUyhGV19JTkZfU0FfREwsIGZhbHNlKSxcbiYjNDM7XHRJQ1NTR19QQV9TVEFUUyhGV19JTkZfUE9SVF9CTE9DS0VELCBmYWxzZSksXG4mIzQzO1x0SUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfVEFHR0VELCBmYWxzZSksXG4mIzQzO1x0SUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfUFJJT1RBR0dFRCwgZmFsc2UpLFxuJiM0MztcdElDU1NHX1BBX1NUQVRTKEZXX0lORl9EUk9QX05PVEFHLCBmYWxzZSksXG4mIzQzO1x0SUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfTk9UTUVNQkVSLCBmYWxzZSksXG4mIzQzO1x0LyogTUFDIE1lcmdlIGNvdW50ZXJzOiBleHBvc2VkIHZpYSAuZ2V0X21tX3N0YXRzIHN0YW5kYXJkIHVBUEksXG4mIzQzO1x0ICogbm90IGR1cGxpY2F0ZWQgaW4gdGhlIHByaXZhdGUgZXRodG9vbCAtUyB0YWJsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRJQ1NTR19QQV9TVEFUUyhGV19QUkVFTVBUX0JBRF9GUkFHLCB0cnVlKSxcbiYjNDM7XHRJQ1NTR19QQV9TVEFUUyhGV19QUkVFTVBUX0FTU0VNQkxZX0VSUiwgdHJ1ZSksXG4mIzQzO1x0SUNTU0dfUEFfU1RBVFMoRldfUFJFRU1QVF9GUkFHX0NOVF9UWCwgdHJ1ZSksXG4mIzQzO1x0SUNTU0dfUEFfU1RBVFMoRldfUFJFRU1QVF9BU1NFTUJMWV9PSywgdHJ1ZSksXG4mIzQzO1x0SUNTU0dfUEFfU1RBVFMoRldfUFJFRU1QVF9GUkFHX0NOVF9SWCwgdHJ1ZSksXG4mIzQzO1x0SUNTU0dfUEFfU1RBVFMoRldfUlhfRU9GX1NIT1JUX0ZSTUVSUiwgZmFsc2UpLFxuJiM0MztcdElDU1NHX1BBX1NUQVRTKEZXX1JYX0IwX0RST1BfRUFSTFlfRU9GLCBmYWxzZSksXG4mIzQzO1x0SUNTU0dfUEFfU1RBVFMoRldfVFhfSlVNQk9fRlJNX0NVVE9GRiwgZmFsc2UpLFxuJiM0MztcdElDU1NHX1BBX1NUQVRTKEZXX1JYX0VYUF9GUkFHX1FfRFJPUCwgZmFsc2UpLFxuJiM0MztcdElDU1NHX1BBX1NUQVRTKEZXX1JYX0ZJRk9fT1ZFUlJVTiwgZmFsc2UpLFxuJiM0MztcdElDU1NHX1BBX1NUQVRTKEZXX0NVVF9USFJfUEtULCBmYWxzZSksXG4mIzQzO1x0SUNTU0dfUEFfU1RBVFMoRldfSE9TVF9SWF9QS1RfQ05ULCBmYWxzZSksXG4mIzQzO1x0SUNTU0dfUEFfU1RBVFMoRldfSE9TVF9UWF9QS1RfQ05ULCBmYWxzZSksXG4mIzQzO1x0SUNTU0dfUEFfU1RBVFMoRldfSE9TVF9FR1JFU1NfUV9QUkVfT1ZFUkZMT1csIGZhbHNlKSxcbiYjNDM7XHRJQ1NTR19QQV9TVEFUUyhGV19IT1NUX0VHUkVTU19RX0VYUF9PVkVSRkxPVywgZmFsc2UpLFxuIH07XG4gXG4gI2VuZGlmIC8qIF9fTkVUX1RJX0lDU1NHX1NUQVRTX0ggKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zd2l0Y2hfbWFwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zd2l0Y2hfbWFwLmhcbmluZGV4IDdlMDUzYjhhZjNlY2UuLjg1NWZkNGVkMGIzZjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zd2l0Y2hfbWFwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3N3aXRjaF9tYXAuaFxuQEAgLTI1Niw2ICYjNDM7MjU2LDExIEBAXG4gI2RlZmluZSBGV19JTkZfRFJPUF9QUklPVEFHR0VEXHRcdDB4MDE0OFxuICNkZWZpbmUgRldfSU5GX0RST1BfTk9UQUdcdFx0MHgwMTUwXG4gI2RlZmluZSBGV19JTkZfRFJPUF9OT1RNRU1CRVJcdFx0MHgwMTU4XG4mIzQzOyNkZWZpbmUgRldfUFJFRU1QVF9CQURfRlJBR1x0XHQweDAxNjBcbiYjNDM7I2RlZmluZSBGV19QUkVFTVBUX0FTU0VNQkxZX0VSUlx0XHQweDAxNjhcbiYjNDM7I2RlZmluZSBGV19QUkVFTVBUX0ZSQUdfQ05UX1RYXHRcdDB4MDE3MFxuJiM0MzsjZGVmaW5lIEZXX1BSRUVNUFRfQVNTRU1CTFlfT0tcdFx0MHgwMTc4XG4mIzQzOyNkZWZpbmUgRldfUFJFRU1QVF9GUkFHX0NOVF9SWFx0XHQweDAxODBcbiAjZGVmaW5lIEZXX1JYX0VPRl9TSE9SVF9GUk1FUlJcdFx0MHgwMTg4XG4gI2RlZmluZSBGV19SWF9CMF9EUk9QX0VBUkxZX0VPRlx0XHQweDAxOTBcbiAjZGVmaW5lIEZXX1RYX0pVTUJPX0ZSTV9DVVRPRkZcdFx0MHgwMTk4XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgbW9kaWZpZWQgY29kZSBpcyBjb25maW5lZCB0byB0aGUgVGV4YXMgSW5zdHJ1bWVudHMgSUNTU0cgUFJVIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvKSwgd2hpY2ggZGVwZW5kcyBvbiBDT05GSUdfQVJDSF9LMyAoYW4gQVJNNjQtc3BlY2lmaWMgU29DIGFyY2hpdGVjdHVyZSkuIFRoaXMgZHJpdmVyIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiB0aGUgdGFyZ2V0IGFtZDY0IGFyY2hpdGVjdHVyZSBhbmQgYWRkaXRpb25hbGx5IHJlcXVpcmVzIHBoeXNpY2FsIFRJIEszIFBSVS1JQ1NTRyBTb0MgaGFyZHdhcmUgYW5kIGZpcm13YXJlIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlNWY0ZmY1NmQxNDk3MDFmNjU0ZDA3NDFmNTgxNDU1MjUzMTE0ZmVhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMTUgMDc6MTA6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL01ha2VmaWxlCmluZGV4IGY0Mjc2YzlhNzc2MjAuLmQxOWJjZDI1YzlkMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL01ha2VmaWxlCkBAIC00Niw2ICYjNDM7NDYsNyBAQCBpY3NzZy15IDo9IGljc3NnL2ljc3NnX2NvbW1vbi5vIFwKIAkgICBpY3NzZy9pY3NzZ19jb25maWcubyBcCiAJICAgaWNzc2cvaWNzc2dfbWlpX2NmZy5vIFwKIAkgICBpY3NzZy9pY3NzZ19zdGF0cy5vIFwKLQkgICBpY3NzZy9pY3NzZ19ldGh0b29sLm8KJiM0MzsJICAgaWNzc2cvaWNzc2dfZXRodG9vbC5vIFwKJiM0MzsJICAgaWNzc2cvaWNzc2dfcW9zLm8KIAogb2JqLSQoQ09ORklHX1RJX0lDU1NfSUVQKSAmIzQzOz0gaWNzc2cvaWNzc19pZXAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19jb21tb24uYwppbmRleCA0YTdkMWE2ZjQ3MGIxLi5kNTllZWY2MWU3MDEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19jb21tb24uYwpAQCAtMTc1NCw2ICYjNDM7MTc1NCw3IEBAIHZvaWQgcHJ1ZXRoX25ldGRldl9leGl0KHN0cnVjdCBwcnVldGggKnBydWV0aCwKIAogCW5ldGlmX25hcGlfZGVsKCZhbXA7ZW1hYy0mZ3Q7bmFwaV9yeCk7CiAKJiM0MzsJbXV0ZXhfZGVzdHJveSgmYW1wO2VtYWMtJmd0O3Fvcy5pZXQuZnBlX2xvY2spOwogCXBydXNzX3JlbGVhc2VfbWVtX3JlZ2lvbihwcnVldGgtJmd0O3BydXNzLCAmYW1wO2VtYWMtJmd0O2RyYW0pOwogCWZyZWVfbmV0ZGV2KGVtYWMtJmd0O25kZXYpOwogCXBydWV0aC0mZ3Q7ZW1hY1ttYWNdID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2NvbmZpZy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfY29uZmlnLmgKaW5kZXggNjBkNjk3NDRmZmFlMi4uMWFjMjAyZjg1NWVkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfY29uZmlnLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfY29uZmlnLmgKQEAgLTMyMywxMyAmIzQzOzMyMyw0IEBAIHN0cnVjdCBwcnVldGhfZmRiX3Nsb3QgewogCXU4IGZpZDsKIAl1OCBmaWRfYzI7CiB9IF9fcGFja2VkOwotCi1lbnVtIGljc3NnX2lldGZwZV92ZXJpZnlfc3RhdGVzIHsKLQlJQ1NTR19JRVRGUEVfU1RBVEVfVU5LTk9XTiA9IDAsCi0JSUNTU0dfSUVURlBFX1NUQVRFX0lOSVRJQUwsCi0JSUNTU0dfSUVURlBFX1NUQVRFX1ZFUklGWUlORywKLQlJQ1NTR19JRVRGUEVfU1RBVEVfU1VDQ0VFREVELAotCUlDU1NHX0lFVEZQRV9TVEFURV9GQUlMRUQsCi0JSUNTU0dfSUVURlBFX1NUQVRFX0RJU0FCTEVECi19OwogI2VuZGlmIC8qIF9fTkVUX1RJX0lDU1NHX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19ldGh0b29sLmMKaW5kZXggYjcxNWFmMjFkMjNhYy4uZGMyNTM2MWFmZTk4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2V0aHRvb2wuYwpAQCAtNzQsNyAmIzQzOzc0LDggQEAgc3RhdGljIGludCBlbWFjX2dldF9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgc3RyaW5nc2V0KQogCQlpZiAoZW1hYy0mZ3Q7cHJ1ZXRoLSZndDtwYV9zdGF0cykKIAkJCXJldHVybiBJQ1NTR19OVU1fRVRIVE9PTF9TVEFUUzsKIAkJZWxzZQotCQkJcmV0dXJuIElDU1NHX05VTV9FVEhUT09MX1NUQVRTIC0gSUNTU0dfTlVNX1BBX1NUQVRTOwomIzQzOwkJCXJldHVybiBJQ1NTR19OVU1fRVRIVE9PTF9TVEFUUyAtCiYjNDM7CQkJICAgICAgIChJQ1NTR19OVU1fUEFfU1RBVFMgLSBJQ1NTR19OVU1fUEFfU1RBTkRBUkRfU1RBVFMpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CkBAIC05Myw3ICYjNDM7OTQsOCBAQCBzdGF0aWMgdm9pZCBlbWFjX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqZGF0YSkKIAkJCQlldGh0b29sX3B1dHMoJmFtcDtwLCBpY3NzZ19hbGxfbWlpZ19zdGF0c1tpXS5uYW1lKTsKIAkJaWYgKGVtYWMtJmd0O3BydWV0aC0mZ3Q7cGFfc3RhdHMpCiAJCQlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShpY3NzZ19hbGxfcGFfc3RhdHMpOyBpJiM0MzsmIzQzOykKLQkJCQlldGh0b29sX3B1dHMoJmFtcDtwLCBpY3NzZ19hbGxfcGFfc3RhdHNbaV0ubmFtZSk7CiYjNDM7CQkJCWlmICghaWNzc2dfYWxsX3BhX3N0YXRzW2ldLnN0YW5kYXJkX3N0YXRzKQomIzQzOwkJCQkJZXRodG9vbF9wdXRzKCZhbXA7cCwgaWNzc2dfYWxsX3BhX3N0YXRzW2ldLm5hbWUpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTExNCw3ICYjNDM7MTE2LDggQEAgc3RhdGljIHZvaWQgZW1hY19nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAogCWlmIChlbWFjLSZndDtwcnVldGgtJmd0O3BhX3N0YXRzKQogCQlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShpY3NzZ19hbGxfcGFfc3RhdHMpOyBpJiM0MzsmIzQzOykKLQkJCSooZGF0YSYjNDM7JiM0MzspID0gZW1hYy0mZ3Q7cGFfc3RhdHNbaV07CiYjNDM7CQkJaWYgKCFpY3NzZ19hbGxfcGFfc3RhdHNbaV0uc3RhbmRhcmRfc3RhdHMpCiYjNDM7CQkJCSooZGF0YSYjNDM7JiM0MzspID0gZW1hYy0mZ3Q7cGFfc3RhdHNbaV07CiB9CiAKIHN0YXRpYyBpbnQgZW1hY19nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKQEAgLTI5NCw2ICYjNDM7Mjk3LDEyNiBAQCBzdGF0aWMgaW50IGVtYWNfc2V0X3Blcl9xdWV1ZV9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIHF1ZXVlLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBlbWFjX2dldF9tbShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGV0aHRvb2xfbW1fc3RhdGUgKnN0YXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IHBydWV0aF9lbWFjICplbWFjID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CXN0cnVjdCBwcnVldGhfcW9zX2lldCAqaWV0ID0gJmFtcDtlbWFjLSZndDtxb3MuaWV0OwomIzQzOwllbnVtIGljc3NnX2lldGZwZV92ZXJpZnlfc3RhdGVzIHZlcmlmeV9zdGF0dXM7CiYjNDM7CiYjNDM7CWlmIChlbWFjLSZndDtpc19zcjEpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtpZXQtJmd0O2ZwZV9sb2NrKTsKJiM0MzsJc3RhdGUtJmd0O3R4X2VuYWJsZWQgPSBpZXQtJmd0O2ZwZV9lbmFibGVkOwomIzQzOwlzdGF0ZS0mZ3Q7dHhfbWluX2ZyYWdfc2l6ZSA9IGlldC0mZ3Q7dHhfbWluX2ZyYWdfc2l6ZTsKJiM0MzsJc3RhdGUtJmd0O3ZlcmlmeV9lbmFibGVkID0gaWV0LSZndDttYWNfdmVyaWZ5X2NvbmZpZ3VyZTsKJiM0MzsJc3RhdGUtJmd0O3ZlcmlmeV90aW1lID0gaWV0LSZndDt2ZXJpZnlfdGltZV9tczsKJiM0MzsJc3RhdGUtJmd0O3R4X2FjdGl2ZSA9IGlldC0mZ3Q7ZnBlX2FjdGl2ZTsKJiM0MzsJdmVyaWZ5X3N0YXR1cyA9IGlldC0mZ3Q7dmVyaWZ5X3N0YXR1czsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7aWV0LSZndDtmcGVfbG9jayk7CiYjNDM7CiYjNDM7CXN0YXRlLSZndDtyeF9taW5fZnJhZ19zaXplID0gRVRIX1pMRU47CiYjNDM7CXN0YXRlLSZndDtwbWFjX2VuYWJsZWQgPSB0cnVlOwomIzQzOwomIzQzOwlzd2l0Y2ggKHZlcmlmeV9zdGF0dXMpIHsKJiM0MzsJY2FzZSBJQ1NTR19JRVRGUEVfU1RBVEVfRElTQUJMRUQ6CiYjNDM7CQlzdGF0ZS0mZ3Q7dmVyaWZ5X3N0YXR1cyA9IEVUSFRPT0xfTU1fVkVSSUZZX1NUQVRVU19ESVNBQkxFRDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIElDU1NHX0lFVEZQRV9TVEFURV9JTklUSUFMOgomIzQzOwkJc3RhdGUtJmd0O3ZlcmlmeV9zdGF0dXMgPSBFVEhUT09MX01NX1ZFUklGWV9TVEFUVVNfSU5JVElBTDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIElDU1NHX0lFVEZQRV9TVEFURV9WRVJJRllJTkc6CiYjNDM7CQlzdGF0ZS0mZ3Q7dmVyaWZ5X3N0YXR1cyA9IEVUSFRPT0xfTU1fVkVSSUZZX1NUQVRVU19WRVJJRllJTkc7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBJQ1NTR19JRVRGUEVfU1RBVEVfU1VDQ0VFREVEOgomIzQzOwkJc3RhdGUtJmd0O3ZlcmlmeV9zdGF0dXMgPSBFVEhUT09MX01NX1ZFUklGWV9TVEFUVVNfU1VDQ0VFREVEOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgSUNTU0dfSUVURlBFX1NUQVRFX0ZBSUxFRDoKJiM0MzsJCXN0YXRlLSZndDt2ZXJpZnlfc3RhdHVzID0gRVRIVE9PTF9NTV9WRVJJRllfU1RBVFVTX0ZBSUxFRDsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJc3RhdGUtJmd0O3ZlcmlmeV9zdGF0dXMgPSBFVEhUT09MX01NX1ZFUklGWV9TVEFUVVNfVU5LTk9XTjsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIDgwMi4zLTIwMTggY2xhdXNlIDMwLjE0LjEuNiwgc2F5cyB0aGF0IHRoZSBhTUFDTWVyZ2VWZXJpZnlUaW1lCiYjNDM7CSAqIHZhcmlhYmxlIGhhcyBhIHJhbmdlIGJldHdlZW4gMSBhbmQgMTI4IG1zIGluY2x1c2l2ZS4gTGltaXQgdG8gdGhhdC4KJiM0MzsJICovCiYjNDM7CXN0YXRlLSZndDttYXhfdmVyaWZ5X3RpbWUgPSBFVEhUT09MX01NX01BWF9WRVJJRllfVElNRV9NUzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZW1hY19zZXRfbW0oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBldGh0b29sX21tX2NmZyAqY2ZnLAomIzQzOwkJICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYyA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwlzdHJ1Y3QgcHJ1ZXRoX3Fvc19pZXQgKmlldCA9ICZhbXA7ZW1hYy0mZ3Q7cW9zLmlldDsKJiM0MzsJdTMyIG9sZF92ZXJpZnlfdGltZV9tcywgb2xkX3R4X21pbl9mcmFnX3NpemU7CiYjNDM7CWJvb2wgb2xkX2ZwZV9lbmFibGVkLCBvbGRfbWFjX3ZlcmlmeV9jb25maWd1cmU7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmIChlbWFjLSZndDtpc19zcjEpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWlmICghY2ZnLSZndDtwbWFjX2VuYWJsZWQpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICYjMzQ7cHJlZW1wdGlibGUgTUFDIGlzIGFsd2F5cyBlbmFibGVkJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtpZXQtJmd0O2ZwZV9sb2NrKTsKJiM0MzsJb2xkX3ZlcmlmeV90aW1lX21zID0gaWV0LSZndDt2ZXJpZnlfdGltZV9tczsKJiM0MzsJb2xkX3R4X21pbl9mcmFnX3NpemUgPSBpZXQtJmd0O3R4X21pbl9mcmFnX3NpemU7CiYjNDM7CW9sZF9mcGVfZW5hYmxlZCA9IGlldC0mZ3Q7ZnBlX2VuYWJsZWQ7CiYjNDM7CW9sZF9tYWNfdmVyaWZ5X2NvbmZpZ3VyZSA9IGlldC0mZ3Q7bWFjX3ZlcmlmeV9jb25maWd1cmU7CiYjNDM7CiYjNDM7CWlldC0mZ3Q7dmVyaWZ5X3RpbWVfbXMgPSBjZmctJmd0O3ZlcmlmeV90aW1lOwomIzQzOwlpZXQtJmd0O3R4X21pbl9mcmFnX3NpemUgPSBjZmctJmd0O3R4X21pbl9mcmFnX3NpemU7CiYjNDM7CWlldC0mZ3Q7ZnBlX2VuYWJsZWQgPSBjZmctJmd0O3R4X2VuYWJsZWQ7CiYjNDM7CWlldC0mZ3Q7bWFjX3ZlcmlmeV9jb25maWd1cmUgPSBjZmctJmd0O3ZlcmlmeV9lbmFibGVkOwomIzQzOwllcnIgPSBpY3NzZ19jb25maWdfaWV0ZnBlKG5kZXYsIGNmZy0mZ3Q7dHhfZW5hYmxlZCk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCS8qIGljc3NnX2NvbmZpZ19pZXRmcGUmIzM5O3MgZmFsbGJhY2sgcGF0aCBhbHJlYWR5IGNsZWFyZWQgZnBlX2FjdGl2ZS4KJiM0MzsJCSAqIFJlc3RvcmUgYWxsIGNvbmZpZyBmaWVsZHMgc28gZ2V0X21tKCkgcmVwb3J0cyB0aGUgY29uZmlndXJhdGlvbgomIzQzOwkJICogdGhhdCBpcyBhY3R1YWxseSByZWZsZWN0ZWQgaW4gaGFyZHdhcmUuCiYjNDM7CQkgKi8KJiM0MzsJCWlldC0mZ3Q7dmVyaWZ5X3RpbWVfbXMgPSBvbGRfdmVyaWZ5X3RpbWVfbXM7CiYjNDM7CQlpZXQtJmd0O3R4X21pbl9mcmFnX3NpemUgPSBvbGRfdHhfbWluX2ZyYWdfc2l6ZTsKJiM0MzsJCWlldC0mZ3Q7ZnBlX2VuYWJsZWQgPSBvbGRfZnBlX2VuYWJsZWQ7CiYjNDM7CQlpZXQtJmd0O21hY192ZXJpZnlfY29uZmlndXJlID0gb2xkX21hY192ZXJpZnlfY29uZmlndXJlOwomIzQzOwl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2lldC0mZ3Q7ZnBlX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBlbWFjX2dldF9tbV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgZXRodG9vbF9tbV9zdGF0cyAqcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYyA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwomIzQzOwlpZiAoZW1hYy0mZ3Q7aXNfc3IxKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoIWVtYWMtJmd0O3BydWV0aC0mZ3Q7cGFfc3RhdHMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWVtYWNfdXBkYXRlX2hhcmR3YXJlX3N0YXRzKGVtYWMpOwomIzQzOwomIzQzOwkvKiBIb2xkIHN0YXRzX2xvY2sgdG8gcHJldmVudCBpY3NzZ19zdGF0c193b3JrX2hhbmRsZXIgZnJvbSB1cGRhdGluZwomIzQzOwkgKiBwYV9zdGF0c1tdIGJldHdlZW4gcmVhZHMsIHdoaWNoIGNvdWxkIHlpZWxkIGEgdG9ybiB1NjQgdmFsdWUgb24KJiM0MzsJICogMzItYml0IGFyY2hpdGVjdHVyZXMuCiYjNDM7CSAqLwomIzQzOwlzcGluX2xvY2soJmFtcDtlbWFjLSZndDtwcnVldGgtJmd0O3N0YXRzX2xvY2spOwomIzQzOwkvKiBNQUNNZXJnZUhvbGRDb3VudCBzdGF0cyBpcyBub3QgdHJhY2tlZCBieSB0aGUgZmlybXdhcmUgKi8KJiM0MzsJcy0mZ3Q7TUFDTWVyZ2VGcmFtZUFzc09rQ291bnQgPSBlbWFjX2dldF9zdGF0X2J5X25hbWUoZW1hYywgJiMzNDtGV19QUkVFTVBUX0FTU0VNQkxZX09LJiMzNDspOwomIzQzOwlzLSZndDtNQUNNZXJnZUZyYW1lQXNzRXJyb3JDb3VudCA9IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShlbWFjLCAmIzM0O0ZXX1BSRUVNUFRfQVNTRU1CTFlfRVJSJiMzNDspOwomIzQzOwlzLSZndDtNQUNNZXJnZUZyYWdDb3VudFJ4ID0gZW1hY19nZXRfc3RhdF9ieV9uYW1lKGVtYWMsICYjMzQ7RldfUFJFRU1QVF9GUkFHX0NOVF9SWCYjMzQ7KTsKJiM0MzsJcy0mZ3Q7TUFDTWVyZ2VGcmFnQ291bnRUeCA9IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShlbWFjLCAmIzM0O0ZXX1BSRUVNUFRfRlJBR19DTlRfVFgmIzM0Oyk7CiYjNDM7CXMtJmd0O01BQ01lcmdlRnJhbWVTbWRFcnJvckNvdW50ID0gZW1hY19nZXRfc3RhdF9ieV9uYW1lKGVtYWMsICYjMzQ7RldfUFJFRU1QVF9CQURfRlJBRyYjMzQ7KTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtlbWFjLSZndDtwcnVldGgtJmd0O3N0YXRzX2xvY2spOwomIzQzO30KJiM0MzsKIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpY3NzZ19ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8gPSBlbWFjX2dldF9kcnZpbmZvLAogCS5nZXRfbXNnbGV2ZWwgPSBlbWFjX2dldF9tc2dsZXZlbCwKQEAgLTMxNyw1ICYjNDM7NDQwLDggQEAgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGljc3NnX2V0aHRvb2xfb3BzID0gewogCS5zZXRfZWVlID0gZW1hY19zZXRfZWVlLAogCS5ud2F5X3Jlc2V0ID0gZW1hY19ud2F5X3Jlc2V0LAogCS5nZXRfcm1vbl9zdGF0cyA9IGVtYWNfZ2V0X3Jtb25fc3RhdHMsCiYjNDM7CS5nZXRfbW0gPSBlbWFjX2dldF9tbSwKJiM0MzsJLnNldF9tbSA9IGVtYWNfc2V0X21tLAomIzQzOwkuZ2V0X21tX3N0YXRzID0gZW1hY19nZXRfbW1fc3RhdHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoaWNzc2dfZXRodG9vbF9vcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguYwppbmRleCA1OTFiZTVjODA1NmI0Li4yODNiZTI3YTI0MGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguYwpAQCAtMzU3LDExICYjNDM7MzU3LDExIEBAIHN0YXRpYyB2b2lkIGVtYWNfYWRqdXN0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAJCX0KIAkJaWYgKCFlbWFjLSZndDtsaW5rKSB7CiAJCQluZXdfc3RhdGUgPSB0cnVlOwotCQkJZW1hYy0mZ3Q7bGluayA9IDE7CiYjNDM7CQkJV1JJVEVfT05DRShlbWFjLSZndDtsaW5rLCAxKTsKIAkJfQogCX0gZWxzZSBpZiAoZW1hYy0mZ3Q7bGluaykgewogCQluZXdfc3RhdGUgPSB0cnVlOwotCQllbWFjLSZndDtsaW5rID0gMDsKJiM0MzsJCVdSSVRFX09OQ0UoZW1hYy0mZ3Q7bGluaywgMCk7CiAKIAkJLyogZi93IHNob3VsZCBzdXBwb3J0IDEwMCAmYW1wOyAxMDAwICovCiAJCWVtYWMtJmd0O3NwZWVkID0gU1BFRURfMTAwMDsKQEAgLTM5Miw2ICYjNDM7MzkyLDggQEAgc3RhdGljIHZvaWQgZW1hY19hZGp1c3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIAkJfSBlbHNlIHsKIAkJCWljc3NnX3NldF9wb3J0X3N0YXRlKGVtYWMsIElDU1NHX0VNQUNfUE9SVF9ESVNBQkxFKTsKIAkJfQomIzQzOwomIzQzOwkJaWNzc2dfcW9zX2xpbmtfc3RhdGVfdXBkYXRlKG5kZXYpOwogCX0KIAogCWlmIChlbWFjLSZndDtsaW5rKSB7CkBAIC0xNjUyLDYgJiM0MzsxNjU0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlbWFjX25ldGRldl9vcHMgPSB7CiAJLm5kb19od3RzdGFtcF9nZXQgPSBpY3NzZ19uZG9fZ2V0X3RzX2NvbmZpZywKIAkubmRvX2h3dHN0YW1wX3NldCA9IGljc3NnX25kb19zZXRfdHNfY29uZmlnLAogCS5uZG9feHNrX3dha2V1cCA9IHBydWV0aF94c2tfd2FrZXVwLAomIzQzOwkubmRvX3NldHVwX3RjID0gaWNzc2dfcW9zX25kb19zZXR1cF90YywKIH07CiAKIHN0YXRpYyBpbnQgcHJ1ZXRoX25ldGRldl9pbml0KHN0cnVjdCBwcnVldGggKnBydWV0aCwKQEAgLTE2ODYsNiAmIzQzOzE2ODksOCBAQCBzdGF0aWMgaW50IHBydWV0aF9uZXRkZXZfaW5pdChzdHJ1Y3QgcHJ1ZXRoICpwcnVldGgsCiAKIAlJTklUX0RFTEFZRURfV09SSygmYW1wO2VtYWMtJmd0O3N0YXRzX3dvcmssIGljc3NnX3N0YXRzX3dvcmtfaGFuZGxlcik7CiAKJiM0MzsJaWNzc2dfcW9zX2luaXQobmRldik7CiYjNDM7CiAJcmV0ID0gcHJ1c3NfcmVxdWVzdF9tZW1fcmVnaW9uKHBydWV0aC0mZ3Q7cHJ1c3MsCiAJCQkJICAgICAgIHBvcnQgPT0gUFJVRVRIX1BPUlRfTUlJMCA/CiAJCQkJICAgICAgIFBSVVNTX01FTV9EUkFNMCA6IFBSVVNTX01FTV9EUkFNMSwKQEAgLTE3OTMsNiAmIzQzOzE3OTgsNyBAQCBzdGF0aWMgaW50IHBydWV0aF9uZXRkZXZfaW5pdChzdHJ1Y3QgcHJ1ZXRoICpwcnVldGgsCiBmcmVlOgogCXBydXNzX3JlbGVhc2VfbWVtX3JlZ2lvbihwcnVldGgtJmd0O3BydXNzLCAmYW1wO2VtYWMtJmd0O2RyYW0pOwogZnJlZV9uZGV2OgomIzQzOwltdXRleF9kZXN0cm95KCZhbXA7ZW1hYy0mZ3Q7cW9zLmlldC5mcGVfbG9jayk7CiAJZW1hYy0mZ3Q7bmRldiA9IE5VTEw7CiAJcHJ1ZXRoLSZndDtlbWFjW21hY10gPSBOVUxMOwogCWZyZWVfbmV0ZGV2KG5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguaAppbmRleCBkZjkzZDE1YzViNzg2Li5hZDkwNjE0MDgwNTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguaApAQCAtNDQsMTAgJiM0Mzs0NCwxMiBAQAogI2luY2x1ZGUgJiMzNDtpY3NzZ19jb25maWcuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2ljc3NfaWVwLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtpY3NzZ19zd2l0Y2hfbWFwLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7aWNzc2dfcW9zLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7aWNzc2dfc3RhdHMuaCYjMzQ7CiAKLSNkZWZpbmUgUFJVRVRIX01BWF9NVFUgICAgICAgICAgKDIwMDAgLSBFVEhfSExFTiAtIEVUSF9GQ1NfTEVOKQotI2RlZmluZSBQUlVFVEhfTUlOX1BLVF9TSVpFICAgICAoVkxBTl9FVEhfWkxFTikKLSNkZWZpbmUgUFJVRVRIX01BWF9QS1RfU0laRSAgICAgKFBSVUVUSF9NQVhfTVRVICYjNDM7IEVUSF9ITEVOICYjNDM7IEVUSF9GQ1NfTEVOKQomIzQzOyNkZWZpbmUgUFJVRVRIX01BWF9NVFUJCSgyMDAwIC0gRVRIX0hMRU4gLSBFVEhfRkNTX0xFTikKJiM0MzsjZGVmaW5lIFBSVUVUSF9NSU5fUEtUX1NJWkUJKFZMQU5fRVRIX1pMRU4pCiYjNDM7I2RlZmluZSBQUlVFVEhfTUFYX1BLVF9TSVpFCShQUlVFVEhfTUFYX01UVSAmIzQzOyBFVEhfSExFTiAmIzQzOyBFVEhfRkNTX0xFTikKIAogI2RlZmluZSBJQ1NTX1NMSUNFMAkwCiAjZGVmaW5lIElDU1NfU0xJQ0UxCTEKQEAgLTU3LDEyICYjNDM7NTksMTYgQEAKIAogI2RlZmluZSBJQ1NTR19NQVhfUkZMT1dTCTgJLyogcGVyIHNsaWNlICovCiAKLSNkZWZpbmUgSUNTU0dfTlVNX1BBX1NUQVRTCTMyCi0jZGVmaW5lIElDU1NHX05VTV9NSUlHX1NUQVRTCTYwCiYjNDM7I2RlZmluZSBJQ1NTR19OVU1fUEFfU1RBVFMJQVJSQVlfU0laRShpY3NzZ19hbGxfcGFfc3RhdHMpCiYjNDM7I2RlZmluZSBJQ1NTR19OVU1fTUlJR19TVEFUUwlBUlJBWV9TSVpFKGljc3NnX2FsbF9taWlnX3N0YXRzKQogLyogTnVtYmVyIG9mIElDU1NHIHJlbGF0ZWQgc3RhdHMgKi8KICNkZWZpbmUgSUNTU0dfTlVNX1NUQVRTIChJQ1NTR19OVU1fTUlJR19TVEFUUyAmIzQzOyBJQ1NTR19OVU1fUEFfU1RBVFMpCiYjNDM7LyogTUlJRyBzdGF0cyB3aXRoIHN0YW5kYXJkIHVBUEkgZXF1aXZhbGVudHMgKGV4Y2x1ZGVkIGZyb20gZXRodG9vbCAtUykgKi8KICNkZWZpbmUgSUNTU0dfTlVNX1NUQU5EQVJEX1NUQVRTIDMxCi0jZGVmaW5lIElDU1NHX05VTV9FVEhUT09MX1NUQVRTIChJQ1NTR19OVU1fU1RBVFMgLSBJQ1NTR19OVU1fU1RBTkRBUkRfU1RBVFMpCiYjNDM7LyogUEEgc3RhdHMgd2l0aCBzdGFuZGFyZCB1QVBJIGVxdWl2YWxlbnRzLCBleHBvc2VkIHZpYSBnZXRfbW1fc3RhdHMgb25seSAqLwomIzQzOyNkZWZpbmUgSUNTU0dfTlVNX1BBX1NUQU5EQVJEX1NUQVRTIDUKJiM0MzsjZGVmaW5lIElDU1NHX05VTV9FVEhUT09MX1NUQVRTIChJQ1NTR19OVU1fU1RBVFMgLSBJQ1NTR19OVU1fU1RBTkRBUkRfU1RBVFMgLSBcCiYjNDM7CQkJCSBJQ1NTR19OVU1fUEFfU1RBTkRBUkRfU1RBVFMpCiAKICNkZWZpbmUgSUVQX0RFRkFVTFRfQ1lDTEVfVElNRV9OUwkxMDAwMDAwCS8qIDEgbXMgKi8KIApAQCAtMjU0LDYgJiM0MzsyNjAsNyBAQCBzdHJ1Y3QgcHJ1ZXRoX2VtYWMgewogCXN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2c7CiAJc3RydWN0IHhkcF9hdHRhY2htZW50X2luZm8geGRwaTsKIAlpbnQgeHNrX3FpZDsKJiM0MzsJc3RydWN0IHBydWV0aF9xb3MgcW9zOwogfTsKIAogLyogVGhlIGJ1ZiBpbmNsdWRlcyBoZWFkcm9vbSBjb21wYXRpYmxlIHdpdGggYm90aCBza2IgYW5kIHhkcGYgKi8KQEAgLTQ1OCw3ICYjNDM7NDY1LDcgQEAgaW50IGVtYWNfZmRiX2Zsb3dfaWRfdXBkYXRlZChzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMpOwogCiB2b2lkIGljc3NnX3N0YXRzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogdm9pZCBlbWFjX3VwZGF0ZV9oYXJkd2FyZV9zdGF0cyhzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMpOwotaW50IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMsIGNoYXIgKnN0YXRfbmFtZSk7CiYjNDM7dTY0IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMsIGNoYXIgKnN0YXRfbmFtZSk7CiAKIC8qIENvbW1vbiBmdW5jdGlvbnMgKi8KIHZvaWQgcHJ1ZXRoX2NsZWFudXBfcnhfY2hucyhzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3Fvcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjI3YTk1M2Q5ODE1MzgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19xb3MuYwpAQCAtMCwwICYjNDM7MSwzMDUgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIFRleGFzIEluc3RydW1lbnRzIElDU1NHIFBSVUVUSCBRb1Mgc3VibW9kdWxlCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDIzIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLwomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7aWNzc2dfcHJ1ZXRoLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7aWNzc2dfc3dpdGNoX21hcC5oJiMzNDsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpY3NzZ19pZXRfc2V0X3ByZWVtcHRfbWFzayhzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMpCiYjNDM7ewomIzQzOwl2b2lkIF9faW9tZW0gKmNvbmZpZyA9IGVtYWMtJmd0O2RyYW0udmEgJiM0MzsgSUNTU0dfQ09ORklHX09GRlNFVDsKJiM0MzsJc3RydWN0IHBydWV0aF9xb3NfbXFwcmlvICpwX21xcHJpbyA9ICZhbXA7ZW1hYy0mZ3Q7cW9zLm1xcHJpbzsKJiM0MzsJc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gJmFtcDtwX21xcHJpby0mZ3Q7cW9wdDsKJiM0MzsJc3RydWN0IHBydWV0aF9xb3NfaWV0ICppZXQgPSAmYW1wO2VtYWMtJmd0O3Fvcy5pZXQ7CiYjNDM7CWludCBwcmVtcHRfbWFzayA9IDAsIGk7CiYjNDM7CXU4IHRjLCBudW1fdGM7CiYjNDM7CiYjNDM7CWlmICghaWV0LSZndDtwcmVlbXB0aWJsZV90Y3MpCiYjNDM7CQlnb3RvIHJlc2V0X2h3OwomIzQzOwomIzQzOwlpZiAoaWV0LSZndDtmcGVfYWN0aXZlKSB7CiYjNDM7CQkvKiBSZXNldCBhbGwgUV9NQVAgZW50cmllcyBmaXJzdCB0byBjbGVhciBhbnkgc3RhbGUgcHJlZW1wdGlibGUKJiM0MzsJCSAqIGVudHJpZXMgZnJvbSBhIHByaW9yIHdpZGVyIFRDIG1hcHBpbmcuCiYjNDM7CQkgKi8KJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBJQ1NTR19NQVhfVENfUVVFVUVTOyBpJiM0MzsmIzQzOykKJiM0MzsJCQl3cml0ZWIoMCwgY29uZmlnICYjNDM7IEVYUFJFU1NfUFJFX0VNUFRJVkVfUV9NQVAgJiM0MzsgaSk7CiYjNDM7CiYjNDM7CQkvKiBDb25maWd1cmUgcXVldWVzIGZvciB1c2VyIHJlcXVlc3RlZCBwcmVlbXB0aWJsZSB0YyBtYXAgKi8KJiM0MzsJCW51bV90YyA9IHBfbXFwcmlvLSZndDtxb3B0Lm51bV90YzsKJiM0MzsJCWZvciAodGMgPSAwOyB0YyAmbHQ7IG51bV90YzsgdGMmIzQzOyYjNDM7KSB7CiYjNDM7CQkJLyogY2hlY2sgaWYgdGhlIHRjIGlzIHByZWVtcHRpdmUgb3Igbm90ICovCiYjNDM7CQkJaWYgKGlldC0mZ3Q7cHJlZW1wdGlibGVfdGNzICZhbXA7IEJJVCh0YykpIHsKJiM0MzsJCQkJLyogU2V0IHRoZSBxdWV1ZXMgYXMgcHJlZW1wdGl2ZSBxdWV1ZXMgKi8KJiM0MzsJCQkJZm9yIChpID0gcW9wdC0mZ3Q7b2Zmc2V0W3RjXTsgaSAmbHQ7IHFvcHQtJmd0O29mZnNldFt0Y10gJiM0MzsgcW9wdC0mZ3Q7Y291bnRbdGNdOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCQkJd3JpdGViKEJJVCg0KSwKJiM0MzsJCQkJCSAgICAgICBjb25maWcgJiM0MzsgRVhQUkVTU19QUkVfRU1QVElWRV9RX01BUCAmIzQzOyBpKTsKJiM0MzsJCQkJfQomIzQzOwkJCX0gZWxzZSB7CiYjNDM7CQkJCS8qIEFjY3VtdWxhdGUgZXhwcmVzcyBxdWV1ZSBiaXRzIGZvciB0aGUgbWFzayAqLwomIzQzOwkJCQlmb3IgKGkgPSBxb3B0LSZndDtvZmZzZXRbdGNdOyBpICZsdDsgcW9wdC0mZ3Q7b2Zmc2V0W3RjXSAmIzQzOyBxb3B0LSZndDtjb3VudFt0Y107IGkmIzQzOyYjNDM7KQomIzQzOwkJCQkJcHJlbXB0X21hc2sgfD0gQklUKGkpOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJCXdyaXRlYihwcmVtcHRfbWFzaywgY29uZmlnICYjNDM7IEVYUFJFU1NfUFJFX0VNUFRJVkVfUV9NQVNLKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzO3Jlc2V0X2h3OgomIzQzOwkvKiBSZXNldCB0byBkZWZhdWx0OiBhbGwgcXVldWVzIGFzIGV4cHJlc3MgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IElDU1NHX01BWF9UQ19RVUVVRVM7IGkmIzQzOyYjNDM7KQomIzQzOwkJd3JpdGViKDAsIGNvbmZpZyAmIzQzOyBFWFBSRVNTX1BSRV9FTVBUSVZFX1FfTUFQICYjNDM7IGkpOwomIzQzOwl3cml0ZWIoSUNTU0dfRVhQUkVTU19RX01BU0tfQUxMLCBjb25maWcgJiM0MzsgRVhQUkVTU19QUkVfRU1QVElWRV9RX01BU0spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGljc3NnX2lldF92ZXJpZnlfd2FpdChzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMpCiYjNDM7ewomIzQzOwl2b2lkIF9faW9tZW0gKmNvbmZpZyA9IGVtYWMtJmd0O2RyYW0udmEgJiM0MzsgSUNTU0dfQ09ORklHX09GRlNFVDsKJiM0MzsJc3RydWN0IHBydWV0aF9xb3NfaWV0ICppZXQgPSAmYW1wO2VtYWMtJmd0O3Fvcy5pZXQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZGVsYXlfdXMsIHRpbWVvdXRfdXM7CiYjNDM7CXUzMiBzdGF0dXM7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWRlbGF5X3VzID0gaWV0LSZndDt2ZXJpZnlfdGltZV9tcyAqIDEwMDA7CiYjNDM7CXRpbWVvdXRfdXMgPSBkZWxheV91cyAqIElDU1NHX0lFVF9WRVJJRllfQVRURU1QVFM7CiYjNDM7CiYjNDM7CXJldCA9IHJlYWRiX3BvbGxfdGltZW91dChjb25maWcgJiM0MzsgUFJFX0VNUFRJT05fVkVSSUZZX1NUQVRVUywKJiM0MzsJCQkJIHN0YXR1cywKJiM0MzsJCQkJIHN0YXR1cyA9PSBJQ1NTR19JRVRGUEVfU1RBVEVfU1VDQ0VFREVEIHx8CiYjNDM7CQkJCSBzdGF0dXMgPT0gSUNTU0dfSUVURlBFX1NUQVRFX0ZBSUxFRCwKJiM0MzsJCQkJIGRlbGF5X3VzLAomIzQzOwkJCQkgdGltZW91dF91cyk7CiYjNDM7CiYjNDM7CWlldC0mZ3Q7dmVyaWZ5X3N0YXR1cyA9IHN0YXR1czsKJiM0MzsJaWYgKCFyZXQgJmFtcDsmYW1wOyBzdGF0dXMgPT0gSUNTU0dfSUVURlBFX1NUQVRFX0ZBSUxFRCkKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKiBEaXJlY3Qgc3luY2hyb25vdXMgY29uZmlndXJhdGlvbiBvZiBJRVQgRlBFLgomIzQzOyAqIENhbGxlciBtdXN0IGhvbGQgaWV0LSZndDtmcGVfbG9jay4KJiM0MzsgKi8KJiM0MztpbnQgaWNzc2dfY29uZmlnX2lldGZwZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgYm9vbCBlbmFibGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsJdm9pZCBfX2lvbWVtICpjb25maWcgPSBlbWFjLSZndDtkcmFtLnZhICYjNDM7IElDU1NHX0NPTkZJR19PRkZTRVQ7CiYjNDM7CXN0cnVjdCBwcnVldGhfcW9zX2lldCAqaWV0ID0gJmFtcDtlbWFjLSZndDtxb3MuaWV0OwomIzQzOwlpbnQgcmV0OwomIzQzOwl1OCB2YWw7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtpZXQtJmd0O2ZwZV9sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKCFSRUFEX09OQ0UoZW1hYy0mZ3Q7bGluaykpIHsKJiM0MzsJCW5ldGRldl9kYmcobmRldiwgJiMzNDtjYW5ub3QgY2hhbmdlIElFVC9GUEUgc3RhdGUgd2hlbiBpbnRlcmZhY2UgaXMgZG93blxuJiMzNDspOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogVXBkYXRlIEZQRSBUeCBlbmFibGUgYml0IChQUkVfRU1QVElPTl9FTkFCTEVfVFgpIGlmCiYjNDM7CSAqIGZwZV9lbmFibGVkIGlzIHNldCB0byBlbmFibGUgTU0gaW4gVHggZGlyZWN0aW9uCiYjNDM7CSAqLwomIzQzOwl3cml0ZWIoZW5hYmxlID8gMSA6IDAsIGNvbmZpZyAmIzQzOyBQUkVfRU1QVElPTl9FTkFCTEVfVFgpOwomIzQzOwl3cml0ZXcoaWV0LSZndDt0eF9taW5fZnJhZ19zaXplICYjNDM7IEVUSF9GQ1NfTEVOLAomIzQzOwkgICAgICAgY29uZmlnICYjNDM7IFBSRV9FTVBUSU9OX0FERF9GUkFHX1NJWkVfTE9DQUwpOwomIzQzOwomIzQzOwkvKiBJZiBGUEUgaXMgdG8gYmUgZW5hYmxlZCwgZmlyc3QgY29uZmlndXJlIE1BQyBWZXJpZnkgc3RhdGUKJiM0MzsJICogbWFjaGluZSBpbiBmaXJtd2FyZSBhcyBmaXJtd2FyZSBraWNrcyB0aGUgVmVyaWZ5IHByb2Nlc3MKJiM0MzsJICogYXMgc29vbiBhcyBJQ1NTR19FTUFDX1BPUlRfUFJFTVBUX1RYX0VOQUJMRSBjb21tYW5kIGlzCiYjNDM7CSAqIHJlY2VpdmVkLgomIzQzOwkgKi8KJiM0MzsJaWYgKGVuYWJsZSAmYW1wOyZhbXA7IGlldC0mZ3Q7bWFjX3ZlcmlmeV9jb25maWd1cmUpIHsKJiM0MzsJCXdyaXRlYigxLCBjb25maWcgJiM0MzsgUFJFX0VNUFRJT05fRU5BQkxFX1ZFUklGWSk7CiYjNDM7CQl3cml0ZWwoaWV0LSZndDt2ZXJpZnlfdGltZV9tcywgY29uZmlnICYjNDM7IFBSRV9FTVBUSU9OX1ZFUklGWV9USU1FKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXdyaXRlYigwLCBjb25maWcgJiM0MzsgUFJFX0VNUFRJT05fRU5BQkxFX1ZFUklGWSk7CiYjNDM7CQlpZXQtJmd0O3ZlcmlmeV9zdGF0dXMgPSBJQ1NTR19JRVRGUEVfU1RBVEVfRElTQUJMRUQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogU2VuZCBjb21tYW5kIHRvIGVuYWJsZSBGUEUgVHggc2lkZS4gUnggaXMgYWx3YXlzIGVuYWJsZWQgKi8KJiM0MzsJcmV0ID0gaWNzc2dfc2V0X3BvcnRfc3RhdGUoZW1hYywKJiM0MzsJCQkJICAgZW5hYmxlID8gSUNTU0dfRU1BQ19QT1JUX1BSRU1QVF9UWF9FTkFCTEUgOgomIzQzOwkJCQkJICAgIElDU1NHX0VNQUNfUE9SVF9QUkVNUFRfVFhfRElTQUJMRSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCW5ldGRldl9lcnIobmRldiwgJiMzNDtUWCBwcmVlbXB0ICVzIGNvbW1hbmQgZmFpbGVkXG4mIzM0OywKJiM0MzsJCQkgICBzdHJfZW5hYmxlX2Rpc2FibGUoZW5hYmxlKSk7CiYjNDM7CQlnb3RvIGZhbGxiYWNrOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChlbmFibGUgJmFtcDsmYW1wOyBpZXQtJmd0O21hY192ZXJpZnlfY29uZmlndXJlKSB7CiYjNDM7CQlyZXQgPSBpY3NzZ19pZXRfdmVyaWZ5X3dhaXQoZW1hYyk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJbmV0ZGV2X2VycihuZGV2LCAmIzM0O01BQyBNZXJnZSB2ZXJpZmljYXRpb24gZmFpbGVkOiAlc1xuJiMzNDssCiYjNDM7CQkJCSAgIGlldC0mZ3Q7dmVyaWZ5X3N0YXR1cyA9PSBJQ1NTR19JRVRGUEVfU1RBVEVfRkFJTEVEID8KJiM0MzsJCQkJICAgJiMzNDtsaW5rIHBhcnRuZXIgcmVqZWN0ZWQmIzM0OyA6ICYjMzQ7dGltZW91dCYjMzQ7KTsKJiM0MzsJCQlnb3RvIGRpc2FibGVfdHg7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSBpZiAoZW5hYmxlKSB7CiYjNDM7CQkvKiBHaXZlIGZpcm13YXJlIHNvbWUgdGltZSB0byB1cGRhdGUKJiM0MzsJCSAqIFBSRV9FTVBUSU9OX0FDVElWRV9UWCBzdGF0ZQomIzQzOwkJICovCiYjNDM7CQl1c2xlZXBfcmFuZ2UoMTAwLCAyMDApOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChlbmFibGUpIHsKJiM0MzsJCXZhbCA9IHJlYWRiKGNvbmZpZyAmIzQzOyBQUkVfRU1QVElPTl9BQ1RJVkVfVFgpOwomIzQzOwkJaWYgKHZhbCAhPSAxKSB7CiYjNDM7CQkJbmV0ZGV2X2VycihuZGV2LAomIzQzOwkJCQkgICAmIzM0O0Zpcm13YXJlIGZhaWxzIHRvIGFjdGl2YXRlIElFVC9GUEVcbiYjMzQ7KTsKJiM0MzsJCQlyZXQgPSAtRUlPOwomIzQzOwkJCWdvdG8gZGlzYWJsZV90eDsKJiM0MzsJCX0KJiM0MzsJCWlldC0mZ3Q7ZnBlX2FjdGl2ZSA9IHRydWU7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpZXQtJmd0O2ZwZV9hY3RpdmUgPSBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpY3NzZ19pZXRfc2V0X3ByZWVtcHRfbWFzayhlbWFjKTsKJiM0MzsJbmV0ZGV2X2RiZyhuZGV2LCAmIzM0O0lFVCBGUEUgJXMgc3VjY2Vzc2Z1bGx5XG4mIzM0OywKJiM0MzsJCSAgIHN0cl9lbmFibGVfZGlzYWJsZShlbmFibGUpKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZGlzYWJsZV90eDoKJiM0MzsJaWNzc2dfc2V0X3BvcnRfc3RhdGUoZW1hYywgSUNTU0dfRU1BQ19QT1JUX1BSRU1QVF9UWF9ESVNBQkxFKTsKJiM0MztmYWxsYmFjazoKJiM0MzsJd3JpdGViKDAsIGNvbmZpZyAmIzQzOyBQUkVfRU1QVElPTl9FTkFCTEVfVFgpOwomIzQzOwl3cml0ZWIoMCwgY29uZmlnICYjNDM7IFBSRV9FTVBUSU9OX0VOQUJMRV9WRVJJRlkpOwomIzQzOwlpZXQtJmd0O3ZlcmlmeV9zdGF0dXMgPSBJQ1NTR19JRVRGUEVfU1RBVEVfRElTQUJMRUQ7CiYjNDM7CWlldC0mZ3Q7ZnBlX2FjdGl2ZSA9IGZhbHNlOwomIzQzOwlpY3NzZ19pZXRfc2V0X3ByZWVtcHRfbWFzayhlbWFjKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBpY3NzZ19xb3NfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYyA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwlzdHJ1Y3QgcHJ1ZXRoX3Fvc19pZXQgKmlldCA9ICZhbXA7ZW1hYy0mZ3Q7cW9zLmlldDsKJiM0MzsKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO2lldC0mZ3Q7ZnBlX2xvY2spOwomIzQzOwkvKiBTZXQgZGVmYXVsdCB2YWx1ZXMgdG8gcHJldmVudCBnYXJiYWdlIHZhbHVlcyBkdXJpbmcgLmdldF9tbSgpICovCiYjNDM7CWlldC0mZ3Q7dmVyaWZ5X3RpbWVfbXMgPSBJQ1NTR19JRVRfTUFYX1ZFUklGWV9USU1FOwomIzQzOwlpZXQtJmd0O3R4X21pbl9mcmFnX3NpemUgPSBFVEhfWkxFTjsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoaWNzc2dfcW9zX2luaXQpOwomIzQzOwomIzQzO3N0YXRpYyBpbnQgaWNzc2dfaWV0X2NoYW5nZV9wcmVlbXB0aWJsZV90Y3Moc3RydWN0IHBydWV0aF9lbWFjICplbWFjKQomIzQzO3sKJiM0MzsJc3RydWN0IHBydWV0aF9xb3NfaWV0ICppZXQgPSAmYW1wO2VtYWMtJmd0O3Fvcy5pZXQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtpZXQtJmd0O2ZwZV9sb2NrKTsKJiM0MzsJaWYgKCFpZXQtJmd0O2ZwZV9lbmFibGVkICZhbXA7JmFtcDsgIWlldC0mZ3Q7cHJlZW1wdGlibGVfdGNzKSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtpZXQtJmd0O2ZwZV9sb2NrKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CXJldCA9IGljc3NnX2NvbmZpZ19pZXRmcGUoZW1hYy0mZ3Q7bmRldiwgaWV0LSZndDtmcGVfZW5hYmxlZCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2lldC0mZ3Q7ZnBlX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVtYWNfdGNfcXVlcnlfY2FwcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdm9pZCAqdHlwZV9kYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSA9IHR5cGVfZGF0YTsKJiM0MzsKJiM0MzsJc3dpdGNoIChiYXNlLSZndDt0eXBlKSB7CiYjNDM7CWNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOiB7CiYjNDM7CQlzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHMgPSBiYXNlLSZndDtjYXBzOwomIzQzOwomIzQzOwkJY2Fwcy0mZ3Q7dmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBlbWFjX3RjX3NldHVwX21xcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdm9pZCAqdHlwZV9kYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHBydWV0aF9lbWFjICplbWFjID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CXN0cnVjdCBwcnVldGhfcW9zX21xcHJpbyAqcF9tcXByaW8gPSAmYW1wO2VtYWMtJmd0O3Fvcy5tcXByaW87CiYjNDM7CXN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8gPSB0eXBlX2RhdGE7CiYjNDM7CXN0cnVjdCBwcnVldGhfcW9zX2lldCAqaWV0ID0gJmFtcDtlbWFjLSZndDtxb3MuaWV0OwomIzQzOwlzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSAmYW1wO21xcHJpby0mZ3Q7cW9wdDsKJiM0MzsJaW50IHRjLCBvZmZzZXQsIGNvdW50OwomIzQzOwomIzQzOwkvKiBWYWxpZGF0ZSBwYXJhbWV0ZXJzICovCiYjNDM7CWlmIChxb3B0LSZndDtudW1fdGMgJmd0OyBJQ1NTR19NQVhfVENfUVVFVUVTKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5kZXYsICYjMzQ7TnVtYmVyIG9mIHRyYWZmaWMgY2xhc3NlcyAoJXUpIGV4Y2VlZHMgaGFyZHdhcmUgbGltaXRcbiYjMzQ7LAomIzQzOwkJCSAgIHFvcHQtJmd0O251bV90Yyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfU0hBUEVSKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5kZXYsICYjMzQ7dHJhZmZpYyBzaGFwaW5nIGlzIG5vdCBzdXBwb3J0ZWRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyAoVENfTVFQUklPX0ZfTUlOX1JBVEUgfCBUQ19NUVBSSU9fRl9NQVhfUkFURSkpIHsKJiM0MzsJCW5ldGRldl9lcnIobmRldiwgJiMzNDtwZXItcXVldWUgcmF0ZSBsaW1pdGluZyBpcyBub3Qgc3VwcG9ydGVkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFxb3B0LSZndDtudW1fdGMpIHsKJiM0MzsJCW5ldGRldl9yZXNldF90YyhuZGV2KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCW5ldGRldl9zZXRfbnVtX3RjKG5kZXYsIHFvcHQtJmd0O251bV90Yyk7CiYjNDM7CiYjNDM7CQlmb3IgKHRjID0gMDsgdGMgJmx0OyBxb3B0LSZndDtudW1fdGM7IHRjJiM0MzsmIzQzOykgewomIzQzOwkJCWNvdW50ID0gcW9wdC0mZ3Q7Y291bnRbdGNdOwomIzQzOwkJCW9mZnNldCA9IHFvcHQtJmd0O29mZnNldFt0Y107CiYjNDM7CQkJbmV0ZGV2X3NldF90Y19xdWV1ZShuZGV2LCB0YywgY291bnQsIG9mZnNldCk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2lldC0mZ3Q7ZnBlX2xvY2spOwomIzQzOwlpZiAoIXFvcHQtJmd0O251bV90YykgewomIzQzOwkJaWV0LSZndDtwcmVlbXB0aWJsZV90Y3MgPSAwOwomIzQzOwl9IGVsc2UgewomIzQzOwkJbWVtY3B5KCZhbXA7cF9tcXByaW8tJmd0O3FvcHQsIHFvcHQsIHNpemVvZigqcW9wdCkpOwomIzQzOwkJaWV0LSZndDtwcmVlbXB0aWJsZV90Y3MgPSBtcXByaW8tJmd0O3ByZWVtcHRpYmxlX3RjczsKJiM0MzsJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDtpZXQtJmd0O2ZwZV9sb2NrKTsKJiM0MzsKJiM0MzsJbmV0ZGV2X2RiZyhuZGV2LCAmIzM0O2Rldi0mZ3Q7bnVtX3RjICV1IGRldi0mZ3Q7cmVhbF9udW1fdHhfcXVldWVzICV1XG4mIzM0OywKJiM0MzsJCSAgIG5kZXYtJmd0O251bV90YywgbmRldi0mZ3Q7cmVhbF9udW1fdHhfcXVldWVzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGljc3NnX2lldF9jaGFuZ2VfcHJlZW1wdGlibGVfdGNzKGVtYWMpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgaWNzc2dfcW9zX25kb19zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsCiYjNDM7CQkJICAgdm9pZCAqdHlwZV9kYXRhKQomIzQzO3sKJiM0MzsJc3dpdGNoICh0eXBlKSB7CiYjNDM7CWNhc2UgVENfUVVFUllfQ0FQUzoKJiM0MzsJCXJldHVybiBlbWFjX3RjX3F1ZXJ5X2NhcHMobmRldiwgdHlwZV9kYXRhKTsKJiM0MzsJY2FzZSBUQ19TRVRVUF9RRElTQ19NUVBSSU86CiYjNDM7CQlyZXR1cm4gZW1hY190Y19zZXR1cF9tcXByaW8obmRldiwgdHlwZV9kYXRhKTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChpY3NzZ19xb3NfbmRvX3NldHVwX3RjKTsKJiM0MzsKJiM0Mzt2b2lkIGljc3NnX3Fvc19saW5rX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYyA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwlzdHJ1Y3QgcHJ1ZXRoX3Fvc19pZXQgKmlldCA9ICZhbXA7ZW1hYy0mZ3Q7cW9zLmlldDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFSRUFEX09OQ0UoZW1hYy0mZ3Q7bGluaykpIHsKJiM0MzsJCS8qIENsZWFyIEZQRSBhY3RpdmUgc3RhdGUgb24gbGluay1kb3duIHNvIGdldF9tbSgpIHJlcG9ydHMKJiM0MzsJCSAqIGFjY3VyYXRlIHR4X2FjdGl2ZSBhbmQgdmVyaWZ5X3N0YXR1cyB3aGlsZSBsaW5rIGlzIGRvd24uCiYjNDM7CQkgKi8KJiM0MzsJCW11dGV4X2xvY2soJmFtcDtpZXQtJmd0O2ZwZV9sb2NrKTsKJiM0MzsJCWlldC0mZ3Q7ZnBlX2FjdGl2ZSA9IGZhbHNlOwomIzQzOwkJaWV0LSZndDt2ZXJpZnlfc3RhdHVzID0gSUNTU0dfSUVURlBFX1NUQVRFX0RJU0FCTEVEOwomIzQzOwkJaWNzc2dfaWV0X3NldF9wcmVlbXB0X21hc2soZW1hYyk7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtpZXQtJmd0O2ZwZV9sb2NrKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBpY3NzZ19pZXRfY2hhbmdlX3ByZWVtcHRpYmxlX3RjcyhlbWFjKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCW5ldGRldl9kYmcobmRldiwgJiMzNDtJRVQgRlBFICVzIGZhaWxlZFxuJiMzNDssCiYjNDM7CQkJICAgc3RyX2VuYWJsZV9kaXNhYmxlKGlldC0mZ3Q7ZnBlX2VuYWJsZWQpKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoaWNzc2dfcW9zX2xpbmtfc3RhdGVfdXBkYXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3Fvcy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uZTgyNmNlNGJjZmQ5NgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3Fvcy5oCkBAIC0wLDAgJiM0MzsxLDY4IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsvKiBDb3B5cmlnaHQgKEMpIDIwMjMgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfX05FVF9USV9JQ1NTR19RT1NfSAomIzQzOyNkZWZpbmUgX19ORVRfVElfSUNTU0dfUU9TX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYXRvbWljLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25ldGRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvcGt0X3NjaGVkLmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBJQ1NTR19NQVhfVENfUVVFVUVTCQkJOAomIzQzOyNkZWZpbmUgSUNTU0dfRVhQUkVTU19RX01BU0tfQUxMCQkweEZGCiYjNDM7I2RlZmluZSBJQ1NTR19JRVRfTUFYX1ZFUklGWV9USU1FCQkxMjgKJiM0MzsjZGVmaW5lIElDU1NHX0lFVF9NSU5fVkVSSUZZX1RJTUUJCTEKJiM0MzsjZGVmaW5lIElDU1NHX0lFVF9WRVJJRllfQVRURU1QVFMJCTMKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBlbnVtIGljc3NnX2lldGZwZV92ZXJpZnlfc3RhdGVzIC0gc3RhdHVzIG9mIE1NIFZlcmlmeSByZXR1cm5lZCBieSBmaXJtd2FyZQomIzQzOyAqIEBJQ1NTR19JRVRGUEVfU1RBVEVfVU5LTk9XTjoKJiM0MzsgKgl2ZXJpZmljYXRpb24gc3RhdHVzIGlzIHVua25vd24KJiM0MzsgKiBASUNTU0dfSUVURlBFX1NUQVRFX0lOSVRJQUw6CiYjNDM7ICoJRmlybXdhcmUgcmV0dXJucyB0aGlzIGlmIHZlcmlmeSBzdGF0ZSBkaWFncmFtIGlzIGlkbGUKJiM0MzsgKiBASUNTU0dfSUVURlBFX1NUQVRFX1ZFUklGWUlORzoKJiM0MzsgKglGaXJtd2FyZSByZXR1cm5zIHRoaXMgaWYgdmVyaWZpY2F0aW9uIGlzIG9uZ29pbmcKJiM0MzsgKiBASUNTU0dfSUVURlBFX1NUQVRFX1NVQ0NFRURFRDoKJiM0MzsgKglGaXJtd2FyZSByZXR1cm5zIHRoaXMgaWYgdmVyaWZ5IHN0YXRlIGRpYWdyYW0gY29tcGxldGVzIHZlcmlmaWNhdGlvbgomIzQzOyAqIEBJQ1NTR19JRVRGUEVfU1RBVEVfRkFJTEVEOgomIzQzOyAqCUZpcm13YXJlIHJldHVybnMgdGhpcyBpZiB2ZXJpZnkgc3RhdGUgZGlhZ3JhbSBmYWlscyBkdXJpbmcgdmVyaWZpY2F0aW9uCiYjNDM7ICogQElDU1NHX0lFVEZQRV9TVEFURV9ESVNBQkxFRDoKJiM0MzsgKgl2ZXJpZmljYXRpb24gaXMgZGlzYWJsZWQgYnkgdGhlIGRyaXZlcgomIzQzOyAqLwomIzQzO2VudW0gaWNzc2dfaWV0ZnBlX3ZlcmlmeV9zdGF0ZXMgewomIzQzOwlJQ1NTR19JRVRGUEVfU1RBVEVfVU5LTk9XTiA9IDAsCiYjNDM7CUlDU1NHX0lFVEZQRV9TVEFURV9JTklUSUFMLAomIzQzOwlJQ1NTR19JRVRGUEVfU1RBVEVfVkVSSUZZSU5HLAomIzQzOwlJQ1NTR19JRVRGUEVfU1RBVEVfU1VDQ0VFREVELAomIzQzOwlJQ1NTR19JRVRGUEVfU1RBVEVfRkFJTEVELAomIzQzOwlJQ1NTR19JRVRGUEVfU1RBVEVfRElTQUJMRUQKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBwcnVldGhfcW9zX21xcHJpbyB7CiYjNDM7CXN0cnVjdCB0Y19tcXByaW9fcW9wdCBxb3B0OwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHBydWV0aF9xb3NfaWV0IHsKJiM0MzsJYm9vbCBmcGVfZW5hYmxlZDsKJiM0MzsJYm9vbCBtYWNfdmVyaWZ5X2NvbmZpZ3VyZTsKJiM0MzsJdTMyIHR4X21pbl9mcmFnX3NpemU7CiYjNDM7CXUzMiB2ZXJpZnlfdGltZV9tczsKJiM0MzsJYm9vbCBmcGVfYWN0aXZlOwomIzQzOwllbnVtIGljc3NnX2lldGZwZV92ZXJpZnlfc3RhdGVzIHZlcmlmeV9zdGF0dXM7CiYjNDM7CS8qIGZwZSBtdXRleCBwcm90ZWN0cyBhbGwgRlBFIG9wZXJhdGlvbnMgZm9yIHN5bmNocm9uaXphdGlvbiAqLwomIzQzOwlzdHJ1Y3QgbXV0ZXggZnBlX2xvY2s7CiYjNDM7CXU4IHByZWVtcHRpYmxlX3RjczsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBwcnVldGhfcW9zIHsKJiM0MzsJc3RydWN0IHBydWV0aF9xb3NfaWV0IGlldDsKJiM0MzsJc3RydWN0IHBydWV0aF9xb3NfbXFwcmlvIG1xcHJpbzsKJiM0Mzt9OwomIzQzOwomIzQzO3ZvaWQgaWNzc2dfcW9zX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOwomIzQzO3ZvaWQgaWNzc2dfcW9zX2xpbmtfc3RhdGVfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKJiM0MztpbnQgaWNzc2dfcW9zX25kb19zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsCiYjNDM7CQkJICAgdm9pZCAqdHlwZV9kYXRhKTsKJiM0MztpbnQgaWNzc2dfY29uZmlnX2lldGZwZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgYm9vbCBlbmFibGUpOwomIzQzOyNlbmRpZiAvKiBfX05FVF9USV9JQ1NTR19RT1NfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfc3RhdHMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3N0YXRzLmMKaW5kZXggNzE1OWJhYTAxNTVjZi4uY2ZkYjZmNWRjNWRhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfc3RhdHMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zdGF0cy5jCkBAIC03NCw3ICYjNDM7NzQsNyBAQCB2b2lkIGljc3NnX3N0YXRzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpY3NzZ19zdGF0c193b3JrX2hhbmRsZXIpOwogCi1pbnQgZW1hY19nZXRfc3RhdF9ieV9uYW1lKHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYywgY2hhciAqc3RhdF9uYW1lKQomIzQzO3U2NCBlbWFjX2dldF9zdGF0X2J5X25hbWUoc3RydWN0IHBydWV0aF9lbWFjICplbWFjLCBjaGFyICpzdGF0X25hbWUpCiB7CiAJaW50IGk7CiAKQEAgLTkxLDUgJiM0Mzs5MSw1IEBAIGludCBlbWFjX2dldF9zdGF0X2J5X25hbWUoc3RydWN0IHBydWV0aF9lbWFjICplbWFjLCBjaGFyICpzdGF0X25hbWUpCiAJfQogCiAJbmV0ZGV2X2VycihlbWFjLSZndDtuZGV2LCAmIzM0O0ludmFsaWQgc3RhdHMgJXNcbiYjMzQ7LCBzdGF0X25hbWUpOwotCXJldHVybiAtRUlOVkFMOwomIzQzOwlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3N0YXRzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zdGF0cy5oCmluZGV4IDVlYzBiMzhlMGM2N2QuLmI4NmRhOGRhMjNhMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3N0YXRzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfc3RhdHMuaApAQCAtOCw4ICYjNDM7OCw2IEBACiAjaWZuZGVmIF9fTkVUX1RJX0lDU1NHX1NUQVRTX0gKICNkZWZpbmUgX19ORVRfVElfSUNTU0dfU1RBVFNfSAogCi0jaW5jbHVkZSAmIzM0O2ljc3NnX3BydWV0aC5oJiMzNDsKLQogI2RlZmluZSBTVEFUU19USU1FX0xJTUlUXzFHX01TICAgIDI1MDAwICAgIC8qIDI1IHNlY29uZHMgQCAxRyAqLwogCiBzdHJ1Y3QgbWlpZ19zdGF0c19yZWdzIHsKQEAgLTE1NSw1MCAmIzQzOzE1Myw2MCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGljc3NnX21paWdfc3RhdHMgaWNzc2dfYWxsX21paWdfc3RhdHNbXSA9IHsKIAlJQ1NTR19NSUlHX1NUQVRTKHR4X2J5dGVzLCB0cnVlKSwKIH07CiAKLSNkZWZpbmUgSUNTU0dfUEFfU1RBVFMoZmllbGQpCVwKLXsJCQkJXAotCSNmaWVsZCwJCQlcCi0JZmllbGQsCQkJXAomIzQzOyNkZWZpbmUgSUNTU0dfUEFfU1RBVFMoZmllbGQsIHN0ZCkJXAomIzQzO3sJCQkJCVwKJiM0MzsJI2ZpZWxkLAkJCQlcCiYjNDM7CWZpZWxkLAkJCQlcCiYjNDM7CXN0ZCwJCQkJXAogfQogCiBzdHJ1Y3QgaWNzc2dfcGFfc3RhdHMgewogCWNoYXIgbmFtZVtFVEhfR1NUUklOR19MRU5dOwogCXUzMiBvZmZzZXQ7CiYjNDM7CWJvb2wgc3RhbmRhcmRfc3RhdHM7CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGljc3NnX3BhX3N0YXRzIGljc3NnX2FsbF9wYV9zdGF0c1tdID0gewotCUlDU1NHX1BBX1NUQVRTKEZXX1JUVV9QS1RfRFJPUCksCi0JSUNTU0dfUEFfU1RBVFMoRldfUTBfT1ZFUkZMT1cpLAotCUlDU1NHX1BBX1NUQVRTKEZXX1ExX09WRVJGTE9XKSwKLQlJQ1NTR19QQV9TVEFUUyhGV19RMl9PVkVSRkxPVyksCi0JSUNTU0dfUEFfU1RBVFMoRldfUTNfT1ZFUkZMT1cpLAotCUlDU1NHX1BBX1NUQVRTKEZXX1E0X09WRVJGTE9XKSwKLQlJQ1NTR19QQV9TVEFUUyhGV19RNV9PVkVSRkxPVyksCi0JSUNTU0dfUEFfU1RBVFMoRldfUTZfT1ZFUkZMT1cpLAotCUlDU1NHX1BBX1NUQVRTKEZXX1E3X09WRVJGTE9XKSwKLQlJQ1NTR19QQV9TVEFUUyhGV19EUk9QUEVEX1BLVCksCi0JSUNTU0dfUEFfU1RBVFMoRldfUlhfRVJST1IpLAotCUlDU1NHX1BBX1NUQVRTKEZXX1JYX0RTX0lOVkFMSUQpLAotCUlDU1NHX1BBX1NUQVRTKEZXX1RYX0RST1BQRURfUEFDS0VUKSwKLQlJQ1NTR19QQV9TVEFUUyhGV19UWF9UU19EUk9QUEVEX1BBQ0tFVCksCi0JSUNTU0dfUEFfU1RBVFMoRldfSU5GX1BPUlRfRElTQUJMRUQpLAotCUlDU1NHX1BBX1NUQVRTKEZXX0lORl9TQVYpLAotCUlDU1NHX1BBX1NUQVRTKEZXX0lORl9TQV9ETCksCi0JSUNTU0dfUEFfU1RBVFMoRldfSU5GX1BPUlRfQkxPQ0tFRCksCi0JSUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfVEFHR0VEKSwKLQlJQ1NTR19QQV9TVEFUUyhGV19JTkZfRFJPUF9QUklPVEFHR0VEKSwKLQlJQ1NTR19QQV9TVEFUUyhGV19JTkZfRFJPUF9OT1RBRyksCi0JSUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfTk9UTUVNQkVSKSwKLQlJQ1NTR19QQV9TVEFUUyhGV19SWF9FT0ZfU0hPUlRfRlJNRVJSKSwKLQlJQ1NTR19QQV9TVEFUUyhGV19SWF9CMF9EUk9QX0VBUkxZX0VPRiksCi0JSUNTU0dfUEFfU1RBVFMoRldfVFhfSlVNQk9fRlJNX0NVVE9GRiksCi0JSUNTU0dfUEFfU1RBVFMoRldfUlhfRVhQX0ZSQUdfUV9EUk9QKSwKLQlJQ1NTR19QQV9TVEFUUyhGV19SWF9GSUZPX09WRVJSVU4pLAotCUlDU1NHX1BBX1NUQVRTKEZXX0NVVF9USFJfUEtUKSwKLQlJQ1NTR19QQV9TVEFUUyhGV19IT1NUX1JYX1BLVF9DTlQpLAotCUlDU1NHX1BBX1NUQVRTKEZXX0hPU1RfVFhfUEtUX0NOVCksCi0JSUNTU0dfUEFfU1RBVFMoRldfSE9TVF9FR1JFU1NfUV9QUkVfT1ZFUkZMT1cpLAotCUlDU1NHX1BBX1NUQVRTKEZXX0hPU1RfRUdSRVNTX1FfRVhQX09WRVJGTE9XKSwKJiM0MzsJSUNTU0dfUEFfU1RBVFMoRldfUlRVX1BLVF9EUk9QLCBmYWxzZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX1EwX09WRVJGTE9XLCBmYWxzZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX1ExX09WRVJGTE9XLCBmYWxzZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX1EyX09WRVJGTE9XLCBmYWxzZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX1EzX09WRVJGTE9XLCBmYWxzZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX1E0X09WRVJGTE9XLCBmYWxzZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX1E1X09WRVJGTE9XLCBmYWxzZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX1E2X09WRVJGTE9XLCBmYWxzZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX1E3X09WRVJGTE9XLCBmYWxzZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX0RST1BQRURfUEtULCBmYWxzZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX1JYX0VSUk9SLCBmYWxzZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX1JYX0RTX0lOVkFMSUQsIGZhbHNlKSwKJiM0MzsJSUNTU0dfUEFfU1RBVFMoRldfVFhfRFJPUFBFRF9QQUNLRVQsIGZhbHNlKSwKJiM0MzsJSUNTU0dfUEFfU1RBVFMoRldfVFhfVFNfRFJPUFBFRF9QQUNLRVQsIGZhbHNlKSwKJiM0MzsJSUNTU0dfUEFfU1RBVFMoRldfSU5GX1BPUlRfRElTQUJMRUQsIGZhbHNlKSwKJiM0MzsJSUNTU0dfUEFfU1RBVFMoRldfSU5GX1NBViwgZmFsc2UpLAomIzQzOwlJQ1NTR19QQV9TVEFUUyhGV19JTkZfU0FfREwsIGZhbHNlKSwKJiM0MzsJSUNTU0dfUEFfU1RBVFMoRldfSU5GX1BPUlRfQkxPQ0tFRCwgZmFsc2UpLAomIzQzOwlJQ1NTR19QQV9TVEFUUyhGV19JTkZfRFJPUF9UQUdHRUQsIGZhbHNlKSwKJiM0MzsJSUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfUFJJT1RBR0dFRCwgZmFsc2UpLAomIzQzOwlJQ1NTR19QQV9TVEFUUyhGV19JTkZfRFJPUF9OT1RBRywgZmFsc2UpLAomIzQzOwlJQ1NTR19QQV9TVEFUUyhGV19JTkZfRFJPUF9OT1RNRU1CRVIsIGZhbHNlKSwKJiM0MzsJLyogTUFDIE1lcmdlIGNvdW50ZXJzOiBleHBvc2VkIHZpYSAuZ2V0X21tX3N0YXRzIHN0YW5kYXJkIHVBUEksCiYjNDM7CSAqIG5vdCBkdXBsaWNhdGVkIGluIHRoZSBwcml2YXRlIGV0aHRvb2wgLVMgdGFibGUuCiYjNDM7CSAqLwomIzQzOwlJQ1NTR19QQV9TVEFUUyhGV19QUkVFTVBUX0JBRF9GUkFHLCB0cnVlKSwKJiM0MzsJSUNTU0dfUEFfU1RBVFMoRldfUFJFRU1QVF9BU1NFTUJMWV9FUlIsIHRydWUpLAomIzQzOwlJQ1NTR19QQV9TVEFUUyhGV19QUkVFTVBUX0ZSQUdfQ05UX1RYLCB0cnVlKSwKJiM0MzsJSUNTU0dfUEFfU1RBVFMoRldfUFJFRU1QVF9BU1NFTUJMWV9PSywgdHJ1ZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX1BSRUVNUFRfRlJBR19DTlRfUlgsIHRydWUpLAomIzQzOwlJQ1NTR19QQV9TVEFUUyhGV19SWF9FT0ZfU0hPUlRfRlJNRVJSLCBmYWxzZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX1JYX0IwX0RST1BfRUFSTFlfRU9GLCBmYWxzZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX1RYX0pVTUJPX0ZSTV9DVVRPRkYsIGZhbHNlKSwKJiM0MzsJSUNTU0dfUEFfU1RBVFMoRldfUlhfRVhQX0ZSQUdfUV9EUk9QLCBmYWxzZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX1JYX0ZJRk9fT1ZFUlJVTiwgZmFsc2UpLAomIzQzOwlJQ1NTR19QQV9TVEFUUyhGV19DVVRfVEhSX1BLVCwgZmFsc2UpLAomIzQzOwlJQ1NTR19QQV9TVEFUUyhGV19IT1NUX1JYX1BLVF9DTlQsIGZhbHNlKSwKJiM0MzsJSUNTU0dfUEFfU1RBVFMoRldfSE9TVF9UWF9QS1RfQ05ULCBmYWxzZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX0hPU1RfRUdSRVNTX1FfUFJFX09WRVJGTE9XLCBmYWxzZSksCiYjNDM7CUlDU1NHX1BBX1NUQVRTKEZXX0hPU1RfRUdSRVNTX1FfRVhQX09WRVJGTE9XLCBmYWxzZSksCiB9OwogCiAjZW5kaWYgLyogX19ORVRfVElfSUNTU0dfU1RBVFNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfc3dpdGNoX21hcC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfc3dpdGNoX21hcC5oCmluZGV4IDdlMDUzYjhhZjNlY2UuLjg1NWZkNGVkMGIzZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3N3aXRjaF9tYXAuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zd2l0Y2hfbWFwLmgKQEAgLTI1Niw2ICYjNDM7MjU2LDExIEBACiAjZGVmaW5lIEZXX0lORl9EUk9QX1BSSU9UQUdHRUQJCTB4MDE0OAogI2RlZmluZSBGV19JTkZfRFJPUF9OT1RBRwkJMHgwMTUwCiAjZGVmaW5lIEZXX0lORl9EUk9QX05PVE1FTUJFUgkJMHgwMTU4CiYjNDM7I2RlZmluZSBGV19QUkVFTVBUX0JBRF9GUkFHCQkweDAxNjAKJiM0MzsjZGVmaW5lIEZXX1BSRUVNUFRfQVNTRU1CTFlfRVJSCQkweDAxNjgKJiM0MzsjZGVmaW5lIEZXX1BSRUVNUFRfRlJBR19DTlRfVFgJCTB4MDE3MAomIzQzOyNkZWZpbmUgRldfUFJFRU1QVF9BU1NFTUJMWV9PSwkJMHgwMTc4CiYjNDM7I2RlZmluZSBGV19QUkVFTVBUX0ZSQUdfQ05UX1JYCQkweDAxODAKICNkZWZpbmUgRldfUlhfRU9GX1NIT1JUX0ZSTUVSUgkJMHgwMTg4CiAjZGVmaW5lIEZXX1JYX0IwX0RST1BfRUFSTFlfRU9GCQkweDAxOTAKICNkZWZpbmUgRldfVFhfSlVNQk9fRlJNX0NVVE9GRgkJMHgwMTk4CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTA1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgSUNTU0cgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIGRpZ2dpbmcgaW50byB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gbXkgZXhwZXJ0aXNlIGluIHRoaXMgYXJlYS4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBoaXR0aW5nIHRoZSBgTWFrZWZpbGVgLCBjb21tb24gY29kZSwgdGhlIGNvbmZpZyBoZWFkZXIsIGFuZCB0aGVuIGEgc2xldyBvZiBmaWxlcyByZWxhdGVkIHRvIGV0aHRvb2wsIFBSVSBFdGhlcm5ldCAod2hpY2ggaXMgKnZlcnkqIGludGVyZXN0aW5nKSwgUW9TLCBzdGF0aXN0aWNzLCBhbmQgc3dpdGNoIG1hcHBpbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1JpZ2h0LCBsZXQmIzM5O3Mgc2VlIHdoYXQgVEkmIzM5O3MgSUNTU0cgaXMgYWxsIGFib3V0LiYjMzQ7IElzIGl0IGEgY29tbW9ubHkgdXNlZCBvciB3ZWxsLXVuZGVyc3Rvb2QgYmxvY2s/IENhbiBJIHJlcHJvZHVjZSB0aGlzIGluIG15IGxhYj8KClRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LCB0aGF0IGlzIGdvb2QsIHNvIEkgd2lsbCBoYXZlIHRvIGVuc3VyZSB0aGF0IG15IGVudmlyb25tZW50IGlzIGFtZDY0IGNvbXBhdGlibGUuIFRoaXMgbWVhbnMgSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMg4oCTIGxpa2UgUUVNVSBvciBzeXprYWxsZXIg4oCTIHRvIHNlZSBpZiBJIGNhbiBldmVuICphY2Nlc3MqIHRoZSByZWxldmFudCBoYXJkd2FyZSBvciBlbXVsYXRlIGl0IGZvciB0ZXN0aW5nIGFuZCBkZWJ1Z2dpbmcuCgpSaWdodCwgSUNTU0cuLi4gbGV0JiMzOTtzIGpvZyBteSBtZW1vcnkuIEFoLCB5ZXMhICYjMzQ7VGV4YXMgSW5zdHJ1bWVudHMgSUNTU0cgUFJVRVRILiYjMzQ7IFRoYXQmIzM5O3MgdGhlIFBSVSBFdGhlcm5ldCBHaWdhYml0IHN1YnN5c3RlbSBvbiBUSSBTaXRhcmEgYW5kIEphY2ludG8gU29DcywgbGlrZSB0aGUgQU02NTR4IG9yIEFNNjR4LiBOb3csIGl0JiMzOTtzIGJlY29taW5nIG1vcmUgY2xlYXIuIE5leHQgc3RlcCB3aWxsIGJlIGRpZ2dpbmcgaW50byB0aGUgS2NvbmZpZyB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VElfSUNTU0dfUFJVRVRIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZz0xNjk9Y29uZmlnIFRMQU5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTE4NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6MTg2OmNvbmZpZyBUSV9JQ1NTR19QUlVFVEhcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctMTg3LVx0dHJpc3RhdGUgXCYjMzQ7VEkgR2lnYWJpdCBQUlUgRXRoZXJuZXQgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0yMDMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnOjIwNDpjb25maWcgVElfSUNTU0dfUFJVRVRIX1NSMVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0yMDUtXHR0cmlzdGF0ZSBcJiMzNDtUSSBHaWdhYml0IFBSVSBTUjEuMCBFdGhlcm5ldCBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9NYWtlZmlsZT0zNT1vYmotJChDT05GSUdfVElfSzNfQU02NV9DUFRTKSAmIzQzOz0gYW02NS1jcHRzLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL01ha2VmaWxlLTM2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvTWFrZWZpbGU6Mzc6b2JqLSQoQ09ORklHX1RJX0lDU1NHX1BSVUVUSCkgJiM0Mzs9IGljc3NnLXBydWV0aC5vIGljc3NnLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL01ha2VmaWxlLTM4LWljc3NnLXBydWV0aC15IDo9IGljc3NnL2ljc3NnX3BydWV0aC5vIGljc3NnL2ljc3NnX3N3aXRjaGRldi5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9NYWtlZmlsZS0zOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL01ha2VmaWxlOjQwOm9iai0kKENPTkZJR19USV9JQ1NTR19QUlVFVEhfU1IxKSAmIzQzOz0gaWNzc2ctcHJ1ZXRoLXNyMS5vIGljc3NnLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL01ha2VmaWxlLTQxLWljc3NnLXBydWV0aC1zcjEteSA6PSBpY3NzZy9pY3NzZ19wcnVldGhfc3IxLm9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguaC03LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmg6ODojaWZuZGVmIF9fTkVUX1RJX0lDU1NHX1BSVUVUSF9IXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguaDo5OiNkZWZpbmUgX19ORVRfVElfSUNTU0dfUFJVRVRIX0hcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5oLTEwLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5oPTUyOT1zdGF0aWMgaW5saW5lIGJvb2wgcHJ1ZXRoX3hkcF9pc19lbmFibGVkKHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguaC01MzMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguaDo1MzQ6I2VuZGlmIC8qIF9fTkVUX1RJX0lDU1NHX1BSVUVUSF9IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5NDkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgdGhlIFRJIEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIFRJIEV0aGVybmV0IGRyaXZlciBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgYXQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWdgLCBhcm91bmQgbGluZSAxODYuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBzb21ldGhpbmcgaW50ZXJlc3RpbmcgaXMgaGFwcGVuaW5nIHRoZXJlLCBsaWtlbHkgcmVsYXRlZCB0byBhIGZlYXR1cmUgZ2F0ZSwgZGVwZW5kZW5jeSBjaGVjaywgb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0JiMzOTtzIGNhdXNpbmcgbWUgc29tZSBoZWFkLXNjcmF0Y2hpbmcuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3IgdGhlIGNvbmRpdGlvbiB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgc29tZSBmdW5jdGlvbmFsaXR5LCBwZXJoYXBzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSB2YXJpYW50LCBwb3dlciBtYW5hZ2VtZW50IGZlYXR1cmUsIG9yIGEgZGVidWcgc2V0dGluZy4gVGhlIGxpbmUgbnVtYmVyIHN1Z2dlc3RzIGl0IGNvdWxkIGJlIGEgZGVwZW5kZW5jeSBvbiBhbm90aGVyIGNvbXBvbmVudC4gQWx0ZXJuYXRpdmVseSwgaXQgY291bGQgYmUgYSBjb21wbGV4IG5lc3RlZCBgaWZgIHN0cnVjdHVyZSBjb250cm9sbGluZyBtdWx0aXBsZSBvcHRpb25zLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24uIEkmIzM5O20gZXhwZWN0aW5nIHRvIGVpdGhlciBmaW5kIHRoZSByb290IG9mIGFuIGlzc3VlLCBvciBzaW1wbHkgdW5kZXJzdGFuZCBob3cgYSBwYXJ0aWN1bGFyIGZlYXR1cmUgaXMgZW5hYmxlZCBpbiB0aGlzIGRyaXZlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE4MDpcdFxuIDE4MTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXG4gMTgyOlx0XHQgIHdpbGwgYmUgY2FsbGVkIHRsYW4uXG4gMTgzOlx0XG4gMTg0Olx0XHQgIFBsZWFzZSBlbWFpbCBmZWVkYmFjayB0byBcdTAwM2N0b3JiZW4ubWF0aGlhc2VuQGNvbXBhcS5jb21cdTAwM2UuXG4gMTg1Olx0XG4gMTg2Olx0Y29uZmlnIFRJX0lDU1NHX1BSVUVUSFxuIDE4NzpcdFx0dHJpc3RhdGUgXCYjMzQ7VEkgR2lnYWJpdCBQUlUgRXRoZXJuZXQgZHJpdmVyXCYjMzQ7XG4gMTg4Olx0XHRzZWxlY3QgUEhZTElCXG4gMTg5Olx0XHRzZWxlY3QgVElfSUNTU19JRVBcbiAxOTA6XHRcdHNlbGVjdCBUSV9LM19DUFBJX0RFU0NfUE9PTFxuIDE5MTpcdFx0ZGVwZW5kcyBvbiBQUlVfUkVNT1RFUFJPQ1xuIDE5MjpcdFx0ZGVwZW5kcyBvbiBORVRfU1dJVENIREVWXG4gMTkzOlx0XHRkZXBlbmRzIG9uIEFSQ0hfSzMgXHUwMDI2XHUwMDI2IE9GIFx1MDAyNlx1MDAyNiBUSV9LM19VRE1BX0dMVUVfTEFZRVJcbiAxOTQ6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAxOTU6XHRcdGRlcGVuZHMgb24gSFNSIHx8ICFIU1JcbiAxOTY6XHRcdGhlbHBcbiAxOTc6XHRcdCAgU3VwcG9ydCBkdWFsIEdpZ2FiaXQgRXRoZXJuZXQgcG9ydHMgb3ZlciB0aGUgSUNTU0cgUFJVIFN1YnN5c3RlbS5cbiAxOTg6XHRcdCAgVGhpcyBzdWJzeXN0ZW0gaXMgYXZhaWxhYmxlIHN0YXJ0aW5nIHdpdGggdGhlIEFNNjUgcGxhdGZvcm0uXG4gMTk5Olx0XG4gMjAwOlx0XHQgIFRoaXMgZHJpdmVyIHJlcXVpcmVzIGZpcm13YXJlIGJpbmFyaWVzIHdoaWNoIHdpbGwgcnVuIG9uIHRoZSBQUlVzXG4gMjAxOlx0XHQgIHRvIHN1cHBvcnQgdGhlIEV0aGVybmV0IG9wZXJhdGlvbi4gQ3VycmVudGx5LCBpdCBzdXBwb3J0cyBFdGhlcm5ldFxuIDIwMjpcdFx0ICB3aXRoIDFHIGFuZCAxMDBNIGxpbmsgc3BlZWQuXG4gMjAzOlx0XG4gMjA0Olx0Y29uZmlnIFRJX0lDU1NHX1BSVUVUSF9TUjFcbiAyMDU6XHRcdHRyaXN0YXRlIFwmIzM0O1RJIEdpZ2FiaXQgUFJVIFNSMS4wIEV0aGVybmV0IGRyaXZlclwmIzM0O1xuIDIwNjpcdFx0c2VsZWN0IFBIWUxJQlxuIDIwNzpcdFx0c2VsZWN0IFRJX0lDU1NfSUVQXG4gMjA4Olx0XHRzZWxlY3QgVElfSzNfQ1BQSV9ERVNDX1BPT0xcbiAyMDk6XHRcdHNlbGVjdCBQQUdFX1BPT0xcbiAyMTA6XHRcdGRlcGVuZHMgb24gUFJVX1JFTU9URVBST0NcbiAyMTE6XHRcdGRlcGVuZHMgb24gTkVUX1NXSVRDSERFVlxuIDIxMjpcdFx0ZGVwZW5kcyBvbiBBUkNIX0szIFx1MDAyNlx1MDAyNiBPRiBcdTAwMjZcdTAwMjYgVElfSzNfVURNQV9HTFVFX0xBWUVSXG4gMjEzOlx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gMjE0Olx0XHRoZWxwXG4gMjE1Olx0XHQgIFN1cHBvcnQgZHVhbCBHaWdhYml0IEV0aGVybmV0IHBvcnRzIG92ZXIgdGhlIElDU1NHIFBSVSBTdWJzeXN0ZW0uXG4gMjE2Olx0XHQgIFRoaXMgc3Vic3lzdGVtIGlzIGF2YWlsYWJsZSBvbiB0aGUgQU02NSBTUjEuMCBwbGF0Zm9ybS5cbiAyMTc6XHRcbiAyMTg6XHRcdCAgVGhpcyBkcml2ZXIgcmVxdWlyZXMgZmlybXdhcmUgYmluYXJpZXMgd2hpY2ggd2lsbCBydW4gb24gdGhlIFBSVXNcbiAyMTk6XHRcdCAgdG8gc3VwcG9ydCB0aGUgRXRoZXJuZXQgb3BlcmF0aW9uLiBDdXJyZW50bHksIGl0IHN1cHBvcnRzIEV0aGVybmV0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NzMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIGhlcmUgd2UgZ28uIEkgc2VlIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24sIGBjb25maWcgVElfSUNTU0dfUFJVRVRIYCwgYW5kIGltbWVkaWF0ZWx5IG15IGV4cGVydCBleWUgc2NhbnMgZm9yIHRoZSBkZXBlbmRlbmNpZXMuIGBkZXBlbmRzIG9uIEFSQ0hfSzMgJmFtcDsmYW1wOyBPRiAmYW1wOyZhbXA7IFRJX0szX1VETUFfR0xVRV9MQVlFUmAgYW5kIGBkZXBlbmRzIG9uIFBSVV9SRU1PVEVQUk9DYC4gQWgsIGBBUkNIX0szYC4uLnRoYXQmIzM5O3MgdGhlIGtleS4gSSByZWNvZ25pemUgbW9zdCBvZiB0aG9zZSBidXQgSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBgQVJDSF9LM2Agc2lnbmlmaWVzIGluIHRoaXMgY29udGV4dC4gSXQgYWx3YXlzIGhlbHBzIHRvIGtub3cgdGhlIGFyY2hpdGVjdHVyZSBiZWZvcmUgSSBtYWtlIGFueSBkZWNpc2lvbnMgYWJvdXQgaXRzIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyB0cmFjZSB0aGlzIGFuZCBzZWUgZXhhY3RseSB3aGVyZSBgQVJDSF9LM2AgaXMgZGVmaW5lZCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGViYXNlIGFuZCBnZXQgc29tZSBjbGFyaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBUkNIX0szJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvS2NvbmZpZy5wbGF0Zm9ybXM9MTQzPWNvbmZpZyBBUkNIX0VYWU5PU1xuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy5wbGF0Zm9ybXMtMTU1LVxuYXJjaC9hcm02NC9LY29uZmlnLnBsYXRmb3JtczoxNTY6Y29uZmlnIEFSQ0hfSzNcbmFyY2gvYXJtNjQvS2NvbmZpZy5wbGF0Zm9ybXMtMTU3LVx0Ym9vbCBcJiMzNDtUZXhhcyBJbnN0cnVtZW50cyBJbmMuIEszIG11bHRpY29yZSBTb0MgYXJjaGl0ZWN0dXJlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyMzYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1OTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBBUkNIX0szYCBhbmQgYFRJX0lDU1NHX1BSVUVUSGAgTW9kdWxlcyBmb3IgRnV6emluZyBFbGlnaWJpbGl0eSoqCgpPa2F5LCBzbyBgQVJDSF9LM2AgaXMgY2xlYXJseSBhbiBBUk02NCBzcGVjaWZpYyBTb0MgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgZnJvbSBUZXhhcyBJbnN0cnVtZW50cy4gSSBjb25maXJtZWQgdGhpcyBieSBmaW5kaW5nIGl0IGRlZmluZWQgaW4gYGFyY2gvYXJtNjQvS2NvbmZpZy5wbGF0Zm9ybXNgLiBNeSB0YXJnZXQgYXJjaGl0ZWN0dXJlLCBob3dldmVyLCBpcyBhbWQ2NC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlc2UgbW9kdWxlcyBhcmUgZXZlbiByZW1vdGVseSBidWlsZGFibGUgb3IgcmVsZXZhbnQgdG8gYW4gYW1kNjQgZW52aXJvbm1lbnQuCgpUaGUgbmVnYXRpdmUgY3JpdGVyaWEgc3RhdGUgSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjb2RlIGZhbGxzIGludG8gc2V2ZXJhbCBjYXRlZ29yaWVzLCBpbmNsdWRpbmcgJiMzNDtDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUmIzM0OyBhbmQgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuJiMzNDsKCkxldCYjMzk7cyBzZWUgaWYgZWl0aGVyIGBBUkNIX0szYCBvciBgVElfSUNTU0dfUFJVRVRIYCBjYW4gYmUgZW5hYmxlZCBvciBldmVuIGNvbXBpbGVkIG9uIGFtZDY0LiBJdCYjMzk7cyBxdWlja2x5IGFwcGFyZW50IHRoYXQgYEFSQ0hfSzNgIGlzIHN0cmljdGx5IHRpZWQgdG8gYGFyY2gvYXJtNjRgIHRocm91Z2ggdGhlIGBLY29uZmlnLnBsYXRmb3Jtc2AgZmlsZS4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0b3IuCgpOb3cgZm9yIGBUSV9JQ1NTR19QUlVFVEhgLiBJIGxvb2tlZCBhdCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZ2AgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlJiMzOTtzIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gQXMgZXhwZWN0ZWQsIGBUSV9JQ1NTR19QUlVFVEhgIGRlcGVuZHMgb24gYEFSQ0hfSzNgIGFuZCBzZXZlcmFsIG90aGVyIEFSTTY0IGFuZCBUSS1zcGVjaWZpYyBkZXBlbmRlbmNpZXMuIEltcG9ydGFudGx5LCBJIGRpZCAqbm90KiBmaW5kIGB8fCBDT01QSUxFX1RFU1RgLCB3aGljaCB3b3VsZCBoYXZlIHByb3ZpZGVkIGEgcGF0aCBmb3IgYnVpbGRpbmcgdGhpcyBkcml2ZXIgZm9yIHRlc3RpbmcgcHVycG9zZXMgZXZlbiBpZiB0aGUgaGFyZHdhcmUgaXNuJiMzOTt0IHByZXNlbnQuCgpGdXJ0aGVybW9yZSwgdGhpcyBkcml2ZXIgaXMgZXhwbGljaXRseSBhIHBsYXRmb3JtIGRyaXZlciBmb3IgYSBUSSBLMyBTb0MgUFJVIEV0aGVybmV0IGNvbnRyb2xsZXIuIEl0JiMzOTtzIGRlc2lnbmVkIHRvIGludGVyZmFjZSB3aXRoIHRoZSBQcm9ncmFtbWFibGUgUmVhbC1UaW1lIFVuaXQgKFBSVSkgaGFyZHdhcmUgcHJlc2VudCBvbiBUSSBLMyBTb0NzLiBUbyBiZSBleHRyYSBjZXJ0YWluLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXRzIHByb2JlIGZ1bmN0aW9uIGlzIHRpZWQgdG8gYSBwbGF0Zm9ybSBkZXZpY2UsIGxpa2VseSB3aXRoaW4gdGhlIGBpY3NzZ19wcnVldGguY2AgZHJpdmVyIHNvdXJjZSBpdHNlbGYuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGl0JiMzOTtzIHRpZ2h0bHkgY291cGxlZCB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4gU2luY2UgdGhpcyBpcyBhbiBFdGhlcm5ldCBjb250cm9sbGVyLCBpdCBuZWVkcyB0byBiZSBjb25uZWN0ZWQsIGFuZCB0aGF0IGlzbiYjMzk7dCBjb25uZWN0ZWQgdG8gYSByZWd1bGFyIGFtZDY0IHN5c3RlbS4KClRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGNvZGUgaXMgZXhjbHVzaXZlIHRvIHRoZSBBUk02NCBhcmNoaXRlY3R1cmUgYW5kIHNwZWNpZmljIGhhcmR3YXJlLCBhbmQgbm90IGJ1aWxkYWJsZSwgSSYjMzk7bSBjb25maWRlbnQgaW4gY29uY2x1ZGluZyB0aGF0IGl0JiMzOTtzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiBteSBhbWQ2NCBlbnZpcm9ubWVudC4gSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfcGxhdGZvcm1fZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc19pZXAuYz0xMDk1PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGljc3NfaWVwX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzX2llcC5jLTExMDEtfTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NfaWVwLmM6MTEwMjptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGljc3NfaWVwX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzX2llcC5jLTExMDMtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmM9MjU4Mj1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwcnVldGhfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5jLTI1OTAtfTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5jOjI1OTE6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihwcnVldGhfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5jLTI1OTItXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoX3NyMS5jPTEyMjg9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcHJ1ZXRoX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGhfc3IxLmMtMTIzNi19O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoX3NyMS5jOjEyMzc6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihwcnVldGhfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aF9zcjEuYy0xMjM4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTgyOAoJCQkJCQkJb3V0cHV0OiAxMjEKCQkJCQkJCXRob3VnaHRzOiA1NjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBXb3J0aEZ1enppbmcgZm9yIFRJX0lDU1NHX1BSVUVUSCoqCgpPa2F5LCBhZnRlciBleGFtaW5pbmcgdGhlIGNvZGUgYW5kIHRoZSBjb250ZXh0LCBJJiMzOTt2ZSBkZXRlcm1pbmVkIHRoYXQgYFRJX0lDU1NHX1BSVUVUSGAgaXMgZGVmaW5pdGVseSBub3Qgd29ydGggZnV6emluZyBpbiBvdXIgY3VycmVudCBzZXR1cC4gSGVyZSYjMzk7cyBteSByZWFzb25pbmcsIGFuZCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOgoKRmlyc3QsIHRoaXMgaXMgYSB2ZXJ5IHNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciwgdGhlIGBwcnVldGhfZHJpdmVyYCwgZGVzaWduZWQgZm9yIHRoZSBUSSBLMyBTb0MmIzM5O3MgUFJVIGV0aGVybmV0IHN1YnN5c3RlbS4gVGhpcyBtZWFucyBpdCBpbnRyaW5zaWNhbGx5IGRlcGVuZHMgb24gVEkmIzM5O3MgcHJvcHJpZXRhcnkgaGFyZHdhcmUg4oCTIHRoZSBQUlUtSUNTU0cgc3Vic3lzdGVtLCB0aGUgcmVtb3RlcHJvYyBmcmFtZXdvcmsgZm9yIHRoZSBQUlVzLCBhbmQgdGhlIEszIFVETUEgZ2x1ZSBsb2dpYy4gVGhpcyBpcyBub3Qgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVtdWxhdGVkIHJlbGlhYmx5LCBvciBldmVuIGF0IGFsbCwgaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LCBvciBhbnkgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gUUVNVSBzaW1wbHkgZG9lc24mIzM5O3Qgc2ltdWxhdGUgdGhlIFBSVS1JQ1NTRyBvciBLMyBVRE1BIGhhcmR3YXJlIGNvbXBvbmVudHMuCgpTZWNvbmRseSwgYW5kIHRoaXMgaXMgdGhlIGNsaW5jaGVyLCB0aGUgZHJpdmVyIGhhcyBhIGJ1aWx0LWluIGRlcGVuZGVuY3kgb24gYEFSQ0hfSzNgLiBUaGlzIGlzIGFuIGFyY2hpdGVjdHVyZSBvcHRpb24gZm91bmQgaW4gdGhlIGBhcm02NC9LY29uZmlnLnBsYXRmb3Jtc2AgZmlsZS4gU2luY2Ugd2UmIzM5O3JlIHRhcmdldGluZyB0aGUgYGFtZDY0YCBhcmNoaXRlY3R1cmUsIHRoaXMgZHJpdmVyIGlzICpzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUqIG9uIHRoZSB0YXJnZXQuIEl0JiMzOTtzIGltcG9zc2libGUgdG8gZXZlbiBjb21waWxlIGl0IGluIGZvciB0aGUgYGFtZDY0YCBhcmNoaXRlY3R1cmUsIG1ha2luZyBhbnkgZnV6emluZyBlZmZvcnRzIGNvbXBsZXRlbHkgZnV0aWxlLgoKTG9va2luZyBhdCB0aGUgaW5zdHJ1Y3Rpb25zIGluIFNlY3Rpb24gMiwgdGhpcyBjbGVhcmx5IGZhbGxzIHVuZGVyIHR3byBvZiB0aGUgJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgY2F0ZWdvcmllczogJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUmIzM0OyBhbmQgJiMzNDtDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuJiMzNDsgVGhlIGFyY2hpdGVjdHVyZSBleGNsdXNpdml0eSBpcyBvYnZpb3VzIGR1ZSB0byB0aGUgYEFSQ0hfSzNgIGRlcGVuZGVuY3kuIFRoZSBoYXJkd2FyZSB1bnJlYWNoYWJpbGl0eSBpcyBldmlkZW50IGJlY2F1c2Ugd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBwbGF0Zm9ybS1zcGVjaWZpYyBkcml2ZXIgdGhhdCBuZWVkcyBzcGVjaWFsaXplZCBUSSBoYXJkd2FyZSB0aGF0JiMzOTtzIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIG91ciB0YXJnZXQgUUVNVSBpbnN0YW5jZXMuCgpUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmcgPSBmYWxzZWAsIG5vIGBFbmFibGVDb25maWdzYCBhcmUgbmVlZGVkLCBhbmQgbm8gYEZvY3VzU3ltYm9sc2AgYXJlIHJlbGV2YW50LiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIG1vZGlmaWVkIGNvZGUgaXMgY29uZmluZWQgdG8gdGhlIFRleGFzIEluc3RydW1lbnRzIElDU1NHIFBSVSBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnLyksIHdoaWNoIGRlcGVuZHMgb24gQ09ORklHX0FSQ0hfSzMgKGFuIEFSTTY0LXNwZWNpZmljIFNvQyBhcmNoaXRlY3R1cmUpLiBUaGlzIGRyaXZlciBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgb24gdGhlIHRhcmdldCBhbWQ2NCBhcmNoaXRlY3R1cmUgYW5kIGFkZGl0aW9uYWxseSByZXF1aXJlcyBwaHlzaWNhbCBUSSBLMyBQUlUtSUNTU0cgU29DIGhhcmR3YXJlIGFuZCBmaXJtd2FyZSB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBtb2RpZmllZCBjb2RlIGlzIGNvbmZpbmVkIHRvIHRoZSBUZXhhcyBJbnN0cnVtZW50cyBJQ1NTRyBQUlUgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy8pLCB3aGljaCBkZXBlbmRzIG9uIENPTkZJR19BUkNIX0szIChhbiBBUk02NC1zcGVjaWZpYyBTb0MgYXJjaGl0ZWN0dXJlKS4gVGhpcyBkcml2ZXIgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIG9uIHRoZSB0YXJnZXQgYW1kNjQgYXJjaGl0ZWN0dXJlIGFuZCBhZGRpdGlvbmFsbHkgcmVxdWlyZXMgcGh5c2ljYWwgVEkgSzMgUFJVLUlDU1NHIFNvQyBoYXJkd2FyZSBhbmQgZmlybXdhcmUgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjEwOjIyLjUyMTEzNzk5OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMDgxMTI2NDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgbW9kaWZpZWQgY29kZSBpcyBjb25maW5lZCB0byB0aGUgVGV4YXMgSW5zdHJ1bWVudHMgSUNTU0cgUFJVIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvKSwgd2hpY2ggZGVwZW5kcyBvbiBDT05GSUdfQVJDSF9LMyAoYW4gQVJNNjQtc3BlY2lmaWMgU29DIGFyY2hpdGVjdHVyZSkuIFRoaXMgZHJpdmVyIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiB0aGUgdGFyZ2V0IGFtZDY0IGFyY2hpdGVjdHVyZSBhbmQgYWRkaXRpb25hbGx5IHJlcXVpcmVzIHBoeXNpY2FsIFRJIEszIFBSVS1JQ1NTRyBTb0MgaGFyZHdhcmUgYW5kIGZpcm13YXJlIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjEwOjIyLjUyMTE0NjA4OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYxMTAxMTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTVmNGZmNTZkMTQ5NzAxZjY1NGQwNzQxZjU4MTQ1NTI1MzExNGZlYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxNSAwNzoxMDoyMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL01ha2VmaWxlXFxuaW5kZXggZjQyNzZjOWE3NzYyMC4uZDE5YmNkMjVjOWQwNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL01ha2VmaWxlXFxuQEAgLTQ2LDYgKzQ2LDcgQEAgaWNzc2cteSA6PSBpY3NzZy9pY3NzZ19jb21tb24ubyBcXFxcXFxuIFxcdCAgIGljc3NnL2ljc3NnX2NvbmZpZy5vIFxcXFxcXG4gXFx0ICAgaWNzc2cvaWNzc2dfbWlpX2NmZy5vIFxcXFxcXG4gXFx0ICAgaWNzc2cvaWNzc2dfc3RhdHMubyBcXFxcXFxuLVxcdCAgIGljc3NnL2ljc3NnX2V0aHRvb2wub1xcbitcXHQgICBpY3NzZy9pY3NzZ19ldGh0b29sLm8gXFxcXFxcbitcXHQgICBpY3NzZy9pY3NzZ19xb3Mub1xcbiBcXG4gb2JqLSQoQ09ORklHX1RJX0lDU1NfSUVQKSArPSBpY3NzZy9pY3NzX2llcC5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfY29tbW9uLmNcXG5pbmRleCA0YTdkMWE2ZjQ3MGIxLi5kNTllZWY2MWU3MDEyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2NvbW1vbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfY29tbW9uLmNcXG5AQCAtMTc1NCw2ICsxNzU0LDcgQEAgdm9pZCBwcnVldGhfbmV0ZGV2X2V4aXQoc3RydWN0IHBydWV0aCAqcHJ1ZXRoLFxcbiBcXG4gXFx0bmV0aWZfbmFwaV9kZWwoXFx1MDAyNmVtYWMtXFx1MDAzZW5hcGlfcngpO1xcbiBcXG4rXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2ZW1hYy1cXHUwMDNlcW9zLmlldC5mcGVfbG9jayk7XFxuIFxcdHBydXNzX3JlbGVhc2VfbWVtX3JlZ2lvbihwcnVldGgtXFx1MDAzZXBydXNzLCBcXHUwMDI2ZW1hYy1cXHUwMDNlZHJhbSk7XFxuIFxcdGZyZWVfbmV0ZGV2KGVtYWMtXFx1MDAzZW5kZXYpO1xcbiBcXHRwcnVldGgtXFx1MDAzZWVtYWNbbWFjXSA9IE5VTEw7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2NvbmZpZy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfY29uZmlnLmhcXG5pbmRleCA2MGQ2OTc0NGZmYWUyLi4xYWMyMDJmODU1ZWQ0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2NvbmZpZy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfY29uZmlnLmhcXG5AQCAtMzIzLDEzICszMjMsNCBAQCBzdHJ1Y3QgcHJ1ZXRoX2ZkYl9zbG90IHtcXG4gXFx0dTggZmlkO1xcbiBcXHR1OCBmaWRfYzI7XFxuIH0gX19wYWNrZWQ7XFxuLVxcbi1lbnVtIGljc3NnX2lldGZwZV92ZXJpZnlfc3RhdGVzIHtcXG4tXFx0SUNTU0dfSUVURlBFX1NUQVRFX1VOS05PV04gPSAwLFxcbi1cXHRJQ1NTR19JRVRGUEVfU1RBVEVfSU5JVElBTCxcXG4tXFx0SUNTU0dfSUVURlBFX1NUQVRFX1ZFUklGWUlORyxcXG4tXFx0SUNTU0dfSUVURlBFX1NUQVRFX1NVQ0NFRURFRCxcXG4tXFx0SUNTU0dfSUVURlBFX1NUQVRFX0ZBSUxFRCxcXG4tXFx0SUNTU0dfSUVURlBFX1NUQVRFX0RJU0FCTEVEXFxuLX07XFxuICNlbmRpZiAvKiBfX05FVF9USV9JQ1NTR19DT05GSUdfSCAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19ldGh0b29sLmNcXG5pbmRleCBiNzE1YWYyMWQyM2FjLi5kYzI1MzYxYWZlOTg5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2V0aHRvb2wuY1xcbkBAIC03NCw3ICs3NCw4IEBAIHN0YXRpYyBpbnQgZW1hY19nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IHN0cmluZ3NldClcXG4gXFx0XFx0aWYgKGVtYWMtXFx1MDAzZXBydWV0aC1cXHUwMDNlcGFfc3RhdHMpXFxuIFxcdFxcdFxcdHJldHVybiBJQ1NTR19OVU1fRVRIVE9PTF9TVEFUUztcXG4gXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRyZXR1cm4gSUNTU0dfTlVNX0VUSFRPT0xfU1RBVFMgLSBJQ1NTR19OVU1fUEFfU1RBVFM7XFxuK1xcdFxcdFxcdHJldHVybiBJQ1NTR19OVU1fRVRIVE9PTF9TVEFUUyAtXFxuK1xcdFxcdFxcdCAgICAgICAoSUNTU0dfTlVNX1BBX1NUQVRTIC0gSUNTU0dfTlVNX1BBX1NUQU5EQVJEX1NUQVRTKTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXHR9XFxuQEAgLTkzLDcgKzk0LDggQEAgc3RhdGljIHZvaWQgZW1hY19nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIHN0cmluZ3NldCwgdTggKmRhdGEpXFxuIFxcdFxcdFxcdFxcdGV0aHRvb2xfcHV0cyhcXHUwMDI2cCwgaWNzc2dfYWxsX21paWdfc3RhdHNbaV0ubmFtZSk7XFxuIFxcdFxcdGlmIChlbWFjLVxcdTAwM2VwcnVldGgtXFx1MDAzZXBhX3N0YXRzKVxcbiBcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShpY3NzZ19hbGxfcGFfc3RhdHMpOyBpKyspXFxuLVxcdFxcdFxcdFxcdGV0aHRvb2xfcHV0cyhcXHUwMDI2cCwgaWNzc2dfYWxsX3BhX3N0YXRzW2ldLm5hbWUpO1xcbitcXHRcXHRcXHRcXHRpZiAoIWljc3NnX2FsbF9wYV9zdGF0c1tpXS5zdGFuZGFyZF9zdGF0cylcXG4rXFx0XFx0XFx0XFx0XFx0ZXRodG9vbF9wdXRzKFxcdTAwMjZwLCBpY3NzZ19hbGxfcGFfc3RhdHNbaV0ubmFtZSk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRicmVhaztcXG5AQCAtMTE0LDcgKzExNiw4IEBAIHN0YXRpYyB2b2lkIGVtYWNfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuIFxcbiBcXHRpZiAoZW1hYy1cXHUwMDNlcHJ1ZXRoLVxcdTAwM2VwYV9zdGF0cylcXG4gXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoaWNzc2dfYWxsX3BhX3N0YXRzKTsgaSsrKVxcbi1cXHRcXHRcXHQqKGRhdGErKykgPSBlbWFjLVxcdTAwM2VwYV9zdGF0c1tpXTtcXG4rXFx0XFx0XFx0aWYgKCFpY3NzZ19hbGxfcGFfc3RhdHNbaV0uc3RhbmRhcmRfc3RhdHMpXFxuK1xcdFxcdFxcdFxcdCooZGF0YSsrKSA9IGVtYWMtXFx1MDAzZXBhX3N0YXRzW2ldO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGVtYWNfZ2V0X3RzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuQEAgLTI5NCw2ICsyOTcsMTI2IEBAIHN0YXRpYyBpbnQgZW1hY19zZXRfcGVyX3F1ZXVlX2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgcXVldWUsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGVtYWNfZ2V0X21tKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgZXRodG9vbF9tbV9zdGF0ZSAqc3RhdGUpXFxuK3tcXG4rXFx0c3RydWN0IHBydWV0aF9lbWFjICplbWFjID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcdHN0cnVjdCBwcnVldGhfcW9zX2lldCAqaWV0ID0gXFx1MDAyNmVtYWMtXFx1MDAzZXFvcy5pZXQ7XFxuK1xcdGVudW0gaWNzc2dfaWV0ZnBlX3ZlcmlmeV9zdGF0ZXMgdmVyaWZ5X3N0YXR1cztcXG4rXFxuK1xcdGlmIChlbWFjLVxcdTAwM2Vpc19zcjEpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmlldC1cXHUwMDNlZnBlX2xvY2spO1xcbitcXHRzdGF0ZS1cXHUwMDNldHhfZW5hYmxlZCA9IGlldC1cXHUwMDNlZnBlX2VuYWJsZWQ7XFxuK1xcdHN0YXRlLVxcdTAwM2V0eF9taW5fZnJhZ19zaXplID0gaWV0LVxcdTAwM2V0eF9taW5fZnJhZ19zaXplO1xcbitcXHRzdGF0ZS1cXHUwMDNldmVyaWZ5X2VuYWJsZWQgPSBpZXQtXFx1MDAzZW1hY192ZXJpZnlfY29uZmlndXJlO1xcbitcXHRzdGF0ZS1cXHUwMDNldmVyaWZ5X3RpbWUgPSBpZXQtXFx1MDAzZXZlcmlmeV90aW1lX21zO1xcbitcXHRzdGF0ZS1cXHUwMDNldHhfYWN0aXZlID0gaWV0LVxcdTAwM2VmcGVfYWN0aXZlO1xcbitcXHR2ZXJpZnlfc3RhdHVzID0gaWV0LVxcdTAwM2V2ZXJpZnlfc3RhdHVzO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmlldC1cXHUwMDNlZnBlX2xvY2spO1xcbitcXG4rXFx0c3RhdGUtXFx1MDAzZXJ4X21pbl9mcmFnX3NpemUgPSBFVEhfWkxFTjtcXG4rXFx0c3RhdGUtXFx1MDAzZXBtYWNfZW5hYmxlZCA9IHRydWU7XFxuK1xcbitcXHRzd2l0Y2ggKHZlcmlmeV9zdGF0dXMpIHtcXG4rXFx0Y2FzZSBJQ1NTR19JRVRGUEVfU1RBVEVfRElTQUJMRUQ6XFxuK1xcdFxcdHN0YXRlLVxcdTAwM2V2ZXJpZnlfc3RhdHVzID0gRVRIVE9PTF9NTV9WRVJJRllfU1RBVFVTX0RJU0FCTEVEO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBJQ1NTR19JRVRGUEVfU1RBVEVfSU5JVElBTDpcXG4rXFx0XFx0c3RhdGUtXFx1MDAzZXZlcmlmeV9zdGF0dXMgPSBFVEhUT09MX01NX1ZFUklGWV9TVEFUVVNfSU5JVElBTDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgSUNTU0dfSUVURlBFX1NUQVRFX1ZFUklGWUlORzpcXG4rXFx0XFx0c3RhdGUtXFx1MDAzZXZlcmlmeV9zdGF0dXMgPSBFVEhUT09MX01NX1ZFUklGWV9TVEFUVVNfVkVSSUZZSU5HO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBJQ1NTR19JRVRGUEVfU1RBVEVfU1VDQ0VFREVEOlxcbitcXHRcXHRzdGF0ZS1cXHUwMDNldmVyaWZ5X3N0YXR1cyA9IEVUSFRPT0xfTU1fVkVSSUZZX1NUQVRVU19TVUNDRUVERUQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIElDU1NHX0lFVEZQRV9TVEFURV9GQUlMRUQ6XFxuK1xcdFxcdHN0YXRlLVxcdTAwM2V2ZXJpZnlfc3RhdHVzID0gRVRIVE9PTF9NTV9WRVJJRllfU1RBVFVTX0ZBSUxFRDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHN0YXRlLVxcdTAwM2V2ZXJpZnlfc3RhdHVzID0gRVRIVE9PTF9NTV9WRVJJRllfU1RBVFVTX1VOS05PV047XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHQvKiA4MDIuMy0yMDE4IGNsYXVzZSAzMC4xNC4xLjYsIHNheXMgdGhhdCB0aGUgYU1BQ01lcmdlVmVyaWZ5VGltZVxcbitcXHQgKiB2YXJpYWJsZSBoYXMgYSByYW5nZSBiZXR3ZWVuIDEgYW5kIDEyOCBtcyBpbmNsdXNpdmUuIExpbWl0IHRvIHRoYXQuXFxuK1xcdCAqL1xcbitcXHRzdGF0ZS1cXHUwMDNlbWF4X3ZlcmlmeV90aW1lID0gRVRIVE9PTF9NTV9NQVhfVkVSSUZZX1RJTUVfTVM7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBlbWFjX3NldF9tbShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGV0aHRvb2xfbW1fY2ZnICpjZmcsXFxuK1xcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0c3RydWN0IHBydWV0aF9lbWFjICplbWFjID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcdHN0cnVjdCBwcnVldGhfcW9zX2lldCAqaWV0ID0gXFx1MDAyNmVtYWMtXFx1MDAzZXFvcy5pZXQ7XFxuK1xcdHUzMiBvbGRfdmVyaWZ5X3RpbWVfbXMsIG9sZF90eF9taW5fZnJhZ19zaXplO1xcbitcXHRib29sIG9sZF9mcGVfZW5hYmxlZCwgb2xkX21hY192ZXJpZnlfY29uZmlndXJlO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0aWYgKGVtYWMtXFx1MDAzZWlzX3NyMSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0aWYgKCFjZmctXFx1MDAzZXBtYWNfZW5hYmxlZCkge1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwicHJlZW1wdGlibGUgTUFDIGlzIGFsd2F5cyBlbmFibGVkXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2aWV0LVxcdTAwM2VmcGVfbG9jayk7XFxuK1xcdG9sZF92ZXJpZnlfdGltZV9tcyA9IGlldC1cXHUwMDNldmVyaWZ5X3RpbWVfbXM7XFxuK1xcdG9sZF90eF9taW5fZnJhZ19zaXplID0gaWV0LVxcdTAwM2V0eF9taW5fZnJhZ19zaXplO1xcbitcXHRvbGRfZnBlX2VuYWJsZWQgPSBpZXQtXFx1MDAzZWZwZV9lbmFibGVkO1xcbitcXHRvbGRfbWFjX3ZlcmlmeV9jb25maWd1cmUgPSBpZXQtXFx1MDAzZW1hY192ZXJpZnlfY29uZmlndXJlO1xcbitcXG4rXFx0aWV0LVxcdTAwM2V2ZXJpZnlfdGltZV9tcyA9IGNmZy1cXHUwMDNldmVyaWZ5X3RpbWU7XFxuK1xcdGlldC1cXHUwMDNldHhfbWluX2ZyYWdfc2l6ZSA9IGNmZy1cXHUwMDNldHhfbWluX2ZyYWdfc2l6ZTtcXG4rXFx0aWV0LVxcdTAwM2VmcGVfZW5hYmxlZCA9IGNmZy1cXHUwMDNldHhfZW5hYmxlZDtcXG4rXFx0aWV0LVxcdTAwM2VtYWNfdmVyaWZ5X2NvbmZpZ3VyZSA9IGNmZy1cXHUwMDNldmVyaWZ5X2VuYWJsZWQ7XFxuK1xcdGVyciA9IGljc3NnX2NvbmZpZ19pZXRmcGUobmRldiwgY2ZnLVxcdTAwM2V0eF9lbmFibGVkKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHQvKiBpY3NzZ19jb25maWdfaWV0ZnBlJ3MgZmFsbGJhY2sgcGF0aCBhbHJlYWR5IGNsZWFyZWQgZnBlX2FjdGl2ZS5cXG4rXFx0XFx0ICogUmVzdG9yZSBhbGwgY29uZmlnIGZpZWxkcyBzbyBnZXRfbW0oKSByZXBvcnRzIHRoZSBjb25maWd1cmF0aW9uXFxuK1xcdFxcdCAqIHRoYXQgaXMgYWN0dWFsbHkgcmVmbGVjdGVkIGluIGhhcmR3YXJlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWV0LVxcdTAwM2V2ZXJpZnlfdGltZV9tcyA9IG9sZF92ZXJpZnlfdGltZV9tcztcXG4rXFx0XFx0aWV0LVxcdTAwM2V0eF9taW5fZnJhZ19zaXplID0gb2xkX3R4X21pbl9mcmFnX3NpemU7XFxuK1xcdFxcdGlldC1cXHUwMDNlZnBlX2VuYWJsZWQgPSBvbGRfZnBlX2VuYWJsZWQ7XFxuK1xcdFxcdGlldC1cXHUwMDNlbWFjX3ZlcmlmeV9jb25maWd1cmUgPSBvbGRfbWFjX3ZlcmlmeV9jb25maWd1cmU7XFxuK1xcdH1cXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpZXQtXFx1MDAzZWZwZV9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVtYWNfZ2V0X21tX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZXRodG9vbF9tbV9zdGF0cyAqcylcXG4re1xcbitcXHRzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFxuK1xcdGlmIChlbWFjLVxcdTAwM2Vpc19zcjEpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmICghZW1hYy1cXHUwMDNlcHJ1ZXRoLVxcdTAwM2VwYV9zdGF0cylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZW1hY191cGRhdGVfaGFyZHdhcmVfc3RhdHMoZW1hYyk7XFxuK1xcbitcXHQvKiBIb2xkIHN0YXRzX2xvY2sgdG8gcHJldmVudCBpY3NzZ19zdGF0c193b3JrX2hhbmRsZXIgZnJvbSB1cGRhdGluZ1xcbitcXHQgKiBwYV9zdGF0c1tdIGJldHdlZW4gcmVhZHMsIHdoaWNoIGNvdWxkIHlpZWxkIGEgdG9ybiB1NjQgdmFsdWUgb25cXG4rXFx0ICogMzItYml0IGFyY2hpdGVjdHVyZXMuXFxuK1xcdCAqL1xcbitcXHRzcGluX2xvY2soXFx1MDAyNmVtYWMtXFx1MDAzZXBydWV0aC1cXHUwMDNlc3RhdHNfbG9jayk7XFxuK1xcdC8qIE1BQ01lcmdlSG9sZENvdW50IHN0YXRzIGlzIG5vdCB0cmFja2VkIGJ5IHRoZSBmaXJtd2FyZSAqL1xcbitcXHRzLVxcdTAwM2VNQUNNZXJnZUZyYW1lQXNzT2tDb3VudCA9IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShlbWFjLCBcXFwiRldfUFJFRU1QVF9BU1NFTUJMWV9PS1xcXCIpO1xcbitcXHRzLVxcdTAwM2VNQUNNZXJnZUZyYW1lQXNzRXJyb3JDb3VudCA9IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShlbWFjLCBcXFwiRldfUFJFRU1QVF9BU1NFTUJMWV9FUlJcXFwiKTtcXG4rXFx0cy1cXHUwMDNlTUFDTWVyZ2VGcmFnQ291bnRSeCA9IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShlbWFjLCBcXFwiRldfUFJFRU1QVF9GUkFHX0NOVF9SWFxcXCIpO1xcbitcXHRzLVxcdTAwM2VNQUNNZXJnZUZyYWdDb3VudFR4ID0gZW1hY19nZXRfc3RhdF9ieV9uYW1lKGVtYWMsIFxcXCJGV19QUkVFTVBUX0ZSQUdfQ05UX1RYXFxcIik7XFxuK1xcdHMtXFx1MDAzZU1BQ01lcmdlRnJhbWVTbWRFcnJvckNvdW50ID0gZW1hY19nZXRfc3RhdF9ieV9uYW1lKGVtYWMsIFxcXCJGV19QUkVFTVBUX0JBRF9GUkFHXFxcIik7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZlbWFjLVxcdTAwM2VwcnVldGgtXFx1MDAzZXN0YXRzX2xvY2spO1xcbit9XFxuK1xcbiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaWNzc2dfZXRodG9vbF9vcHMgPSB7XFxuIFxcdC5nZXRfZHJ2aW5mbyA9IGVtYWNfZ2V0X2RydmluZm8sXFxuIFxcdC5nZXRfbXNnbGV2ZWwgPSBlbWFjX2dldF9tc2dsZXZlbCxcXG5AQCAtMzE3LDUgKzQ0MCw4IEBAIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpY3NzZ19ldGh0b29sX29wcyA9IHtcXG4gXFx0LnNldF9lZWUgPSBlbWFjX3NldF9lZWUsXFxuIFxcdC5ud2F5X3Jlc2V0ID0gZW1hY19ud2F5X3Jlc2V0LFxcbiBcXHQuZ2V0X3Jtb25fc3RhdHMgPSBlbWFjX2dldF9ybW9uX3N0YXRzLFxcbitcXHQuZ2V0X21tID0gZW1hY19nZXRfbW0sXFxuK1xcdC5zZXRfbW0gPSBlbWFjX3NldF9tbSxcXG4rXFx0LmdldF9tbV9zdGF0cyA9IGVtYWNfZ2V0X21tX3N0YXRzLFxcbiB9O1xcbiBFWFBPUlRfU1lNQk9MX0dQTChpY3NzZ19ldGh0b29sX29wcyk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmNcXG5pbmRleCA1OTFiZTVjODA1NmI0Li4yODNiZTI3YTI0MGU5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmNcXG5AQCAtMzU3LDExICszNTcsMTEgQEAgc3RhdGljIHZvaWQgZW1hY19hZGp1c3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAoIWVtYWMtXFx1MDAzZWxpbmspIHtcXG4gXFx0XFx0XFx0bmV3X3N0YXRlID0gdHJ1ZTtcXG4tXFx0XFx0XFx0ZW1hYy1cXHUwMDNlbGluayA9IDE7XFxuK1xcdFxcdFxcdFdSSVRFX09OQ0UoZW1hYy1cXHUwMDNlbGluaywgMSk7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIGlmIChlbWFjLVxcdTAwM2VsaW5rKSB7XFxuIFxcdFxcdG5ld19zdGF0ZSA9IHRydWU7XFxuLVxcdFxcdGVtYWMtXFx1MDAzZWxpbmsgPSAwO1xcbitcXHRcXHRXUklURV9PTkNFKGVtYWMtXFx1MDAzZWxpbmssIDApO1xcbiBcXG4gXFx0XFx0LyogZi93IHNob3VsZCBzdXBwb3J0IDEwMCBcXHUwMDI2IDEwMDAgKi9cXG4gXFx0XFx0ZW1hYy1cXHUwMDNlc3BlZWQgPSBTUEVFRF8xMDAwO1xcbkBAIC0zOTIsNiArMzkyLDggQEAgc3RhdGljIHZvaWQgZW1hY19hZGp1c3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0aWNzc2dfc2V0X3BvcnRfc3RhdGUoZW1hYywgSUNTU0dfRU1BQ19QT1JUX0RJU0FCTEUpO1xcbiBcXHRcXHR9XFxuK1xcbitcXHRcXHRpY3NzZ19xb3NfbGlua19zdGF0ZV91cGRhdGUobmRldik7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChlbWFjLVxcdTAwM2VsaW5rKSB7XFxuQEAgLTE2NTIsNiArMTY1NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZW1hY19uZXRkZXZfb3BzID0ge1xcbiBcXHQubmRvX2h3dHN0YW1wX2dldCA9IGljc3NnX25kb19nZXRfdHNfY29uZmlnLFxcbiBcXHQubmRvX2h3dHN0YW1wX3NldCA9IGljc3NnX25kb19zZXRfdHNfY29uZmlnLFxcbiBcXHQubmRvX3hza193YWtldXAgPSBwcnVldGhfeHNrX3dha2V1cCxcXG4rXFx0Lm5kb19zZXR1cF90YyA9IGljc3NnX3Fvc19uZG9fc2V0dXBfdGMsXFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IHBydWV0aF9uZXRkZXZfaW5pdChzdHJ1Y3QgcHJ1ZXRoICpwcnVldGgsXFxuQEAgLTE2ODYsNiArMTY4OSw4IEBAIHN0YXRpYyBpbnQgcHJ1ZXRoX25ldGRldl9pbml0KHN0cnVjdCBwcnVldGggKnBydWV0aCxcXG4gXFxuIFxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZlbWFjLVxcdTAwM2VzdGF0c193b3JrLCBpY3NzZ19zdGF0c193b3JrX2hhbmRsZXIpO1xcbiBcXG4rXFx0aWNzc2dfcW9zX2luaXQobmRldik7XFxuK1xcbiBcXHRyZXQgPSBwcnVzc19yZXF1ZXN0X21lbV9yZWdpb24ocHJ1ZXRoLVxcdTAwM2VwcnVzcyxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHBvcnQgPT0gUFJVRVRIX1BPUlRfTUlJMCA/XFxuIFxcdFxcdFxcdFxcdCAgICAgICBQUlVTU19NRU1fRFJBTTAgOiBQUlVTU19NRU1fRFJBTTEsXFxuQEAgLTE3OTMsNiArMTc5OCw3IEBAIHN0YXRpYyBpbnQgcHJ1ZXRoX25ldGRldl9pbml0KHN0cnVjdCBwcnVldGggKnBydWV0aCxcXG4gZnJlZTpcXG4gXFx0cHJ1c3NfcmVsZWFzZV9tZW1fcmVnaW9uKHBydWV0aC1cXHUwMDNlcHJ1c3MsIFxcdTAwMjZlbWFjLVxcdTAwM2VkcmFtKTtcXG4gZnJlZV9uZGV2OlxcbitcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZlbWFjLVxcdTAwM2Vxb3MuaWV0LmZwZV9sb2NrKTtcXG4gXFx0ZW1hYy1cXHUwMDNlbmRldiA9IE5VTEw7XFxuIFxcdHBydWV0aC1cXHUwMDNlZW1hY1ttYWNdID0gTlVMTDtcXG4gXFx0ZnJlZV9uZXRkZXYobmRldik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmhcXG5pbmRleCBkZjkzZDE1YzViNzg2Li5hZDkwNjE0MDgwNTBlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmhcXG5AQCAtNDQsMTAgKzQ0LDEyIEBAXFxuICNpbmNsdWRlIFxcXCJpY3NzZ19jb25maWcuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImljc3NfaWVwLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJpY3NzZ19zd2l0Y2hfbWFwLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJpY3NzZ19xb3MuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImljc3NnX3N0YXRzLmhcXFwiXFxuIFxcbi0jZGVmaW5lIFBSVUVUSF9NQVhfTVRVICAgICAgICAgICgyMDAwIC0gRVRIX0hMRU4gLSBFVEhfRkNTX0xFTilcXG4tI2RlZmluZSBQUlVFVEhfTUlOX1BLVF9TSVpFICAgICAoVkxBTl9FVEhfWkxFTilcXG4tI2RlZmluZSBQUlVFVEhfTUFYX1BLVF9TSVpFICAgICAoUFJVRVRIX01BWF9NVFUgKyBFVEhfSExFTiArIEVUSF9GQ1NfTEVOKVxcbisjZGVmaW5lIFBSVUVUSF9NQVhfTVRVXFx0XFx0KDIwMDAgLSBFVEhfSExFTiAtIEVUSF9GQ1NfTEVOKVxcbisjZGVmaW5lIFBSVUVUSF9NSU5fUEtUX1NJWkVcXHQoVkxBTl9FVEhfWkxFTilcXG4rI2RlZmluZSBQUlVFVEhfTUFYX1BLVF9TSVpFXFx0KFBSVUVUSF9NQVhfTVRVICsgRVRIX0hMRU4gKyBFVEhfRkNTX0xFTilcXG4gXFxuICNkZWZpbmUgSUNTU19TTElDRTBcXHQwXFxuICNkZWZpbmUgSUNTU19TTElDRTFcXHQxXFxuQEAgLTU3LDEyICs1OSwxNiBAQFxcbiBcXG4gI2RlZmluZSBJQ1NTR19NQVhfUkZMT1dTXFx0OFxcdC8qIHBlciBzbGljZSAqL1xcbiBcXG4tI2RlZmluZSBJQ1NTR19OVU1fUEFfU1RBVFNcXHQzMlxcbi0jZGVmaW5lIElDU1NHX05VTV9NSUlHX1NUQVRTXFx0NjBcXG4rI2RlZmluZSBJQ1NTR19OVU1fUEFfU1RBVFNcXHRBUlJBWV9TSVpFKGljc3NnX2FsbF9wYV9zdGF0cylcXG4rI2RlZmluZSBJQ1NTR19OVU1fTUlJR19TVEFUU1xcdEFSUkFZX1NJWkUoaWNzc2dfYWxsX21paWdfc3RhdHMpXFxuIC8qIE51bWJlciBvZiBJQ1NTRyByZWxhdGVkIHN0YXRzICovXFxuICNkZWZpbmUgSUNTU0dfTlVNX1NUQVRTIChJQ1NTR19OVU1fTUlJR19TVEFUUyArIElDU1NHX05VTV9QQV9TVEFUUylcXG4rLyogTUlJRyBzdGF0cyB3aXRoIHN0YW5kYXJkIHVBUEkgZXF1aXZhbGVudHMgKGV4Y2x1ZGVkIGZyb20gZXRodG9vbCAtUykgKi9cXG4gI2RlZmluZSBJQ1NTR19OVU1fU1RBTkRBUkRfU1RBVFMgMzFcXG4tI2RlZmluZSBJQ1NTR19OVU1fRVRIVE9PTF9TVEFUUyAoSUNTU0dfTlVNX1NUQVRTIC0gSUNTU0dfTlVNX1NUQU5EQVJEX1NUQVRTKVxcbisvKiBQQSBzdGF0cyB3aXRoIHN0YW5kYXJkIHVBUEkgZXF1aXZhbGVudHMsIGV4cG9zZWQgdmlhIGdldF9tbV9zdGF0cyBvbmx5ICovXFxuKyNkZWZpbmUgSUNTU0dfTlVNX1BBX1NUQU5EQVJEX1NUQVRTIDVcXG4rI2RlZmluZSBJQ1NTR19OVU1fRVRIVE9PTF9TVEFUUyAoSUNTU0dfTlVNX1NUQVRTIC0gSUNTU0dfTlVNX1NUQU5EQVJEX1NUQVRTIC0gXFxcXFxcbitcXHRcXHRcXHRcXHQgSUNTU0dfTlVNX1BBX1NUQU5EQVJEX1NUQVRTKVxcbiBcXG4gI2RlZmluZSBJRVBfREVGQVVMVF9DWUNMRV9USU1FX05TXFx0MTAwMDAwMFxcdC8qIDEgbXMgKi9cXG4gXFxuQEAgLTI1NCw2ICsyNjAsNyBAQCBzdHJ1Y3QgcHJ1ZXRoX2VtYWMge1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nO1xcbiBcXHRzdHJ1Y3QgeGRwX2F0dGFjaG1lbnRfaW5mbyB4ZHBpO1xcbiBcXHRpbnQgeHNrX3FpZDtcXG4rXFx0c3RydWN0IHBydWV0aF9xb3MgcW9zO1xcbiB9O1xcbiBcXG4gLyogVGhlIGJ1ZiBpbmNsdWRlcyBoZWFkcm9vbSBjb21wYXRpYmxlIHdpdGggYm90aCBza2IgYW5kIHhkcGYgKi9cXG5AQCAtNDU4LDcgKzQ2NSw3IEBAIGludCBlbWFjX2ZkYl9mbG93X2lkX3VwZGF0ZWQoc3RydWN0IHBydWV0aF9lbWFjICplbWFjKTtcXG4gXFxuIHZvaWQgaWNzc2dfc3RhdHNfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuIHZvaWQgZW1hY191cGRhdGVfaGFyZHdhcmVfc3RhdHMoc3RydWN0IHBydWV0aF9lbWFjICplbWFjKTtcXG4taW50IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMsIGNoYXIgKnN0YXRfbmFtZSk7XFxuK3U2NCBlbWFjX2dldF9zdGF0X2J5X25hbWUoc3RydWN0IHBydWV0aF9lbWFjICplbWFjLCBjaGFyICpzdGF0X25hbWUpO1xcbiBcXG4gLyogQ29tbW9uIGZ1bmN0aW9ucyAqL1xcbiB2b2lkIHBydWV0aF9jbGVhbnVwX3J4X2NobnMoc3RydWN0IHBydWV0aF9lbWFjICplbWFjLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3Fvcy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yN2E5NTNkOTgxNTM4XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3Fvcy5jXFxuQEAgLTAsMCArMSwzMDUgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogVGV4YXMgSW5zdHJ1bWVudHMgSUNTU0cgUFJVRVRIIFFvUyBzdWJtb2R1bGVcXG4rICogQ29weXJpZ2h0IChDKSAyMDIzIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tL1xcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcXCJpY3NzZ19wcnVldGguaFxcXCJcXG4rI2luY2x1ZGUgXFxcImljc3NnX3N3aXRjaF9tYXAuaFxcXCJcXG4rXFxuK3N0YXRpYyB2b2lkIGljc3NnX2lldF9zZXRfcHJlZW1wdF9tYXNrKHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYylcXG4re1xcbitcXHR2b2lkIF9faW9tZW0gKmNvbmZpZyA9IGVtYWMtXFx1MDAzZWRyYW0udmEgKyBJQ1NTR19DT05GSUdfT0ZGU0VUO1xcbitcXHRzdHJ1Y3QgcHJ1ZXRoX3Fvc19tcXByaW8gKnBfbXFwcmlvID0gXFx1MDAyNmVtYWMtXFx1MDAzZXFvcy5tcXByaW87XFxuK1xcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFxcdTAwMjZwX21xcHJpby1cXHUwMDNlcW9wdDtcXG4rXFx0c3RydWN0IHBydWV0aF9xb3NfaWV0ICppZXQgPSBcXHUwMDI2ZW1hYy1cXHUwMDNlcW9zLmlldDtcXG4rXFx0aW50IHByZW1wdF9tYXNrID0gMCwgaTtcXG4rXFx0dTggdGMsIG51bV90YztcXG4rXFxuK1xcdGlmICghaWV0LVxcdTAwM2VwcmVlbXB0aWJsZV90Y3MpXFxuK1xcdFxcdGdvdG8gcmVzZXRfaHc7XFxuK1xcbitcXHRpZiAoaWV0LVxcdTAwM2VmcGVfYWN0aXZlKSB7XFxuK1xcdFxcdC8qIFJlc2V0IGFsbCBRX01BUCBlbnRyaWVzIGZpcnN0IHRvIGNsZWFyIGFueSBzdGFsZSBwcmVlbXB0aWJsZVxcbitcXHRcXHQgKiBlbnRyaWVzIGZyb20gYSBwcmlvciB3aWRlciBUQyBtYXBwaW5nLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElDU1NHX01BWF9UQ19RVUVVRVM7IGkrKylcXG4rXFx0XFx0XFx0d3JpdGViKDAsIGNvbmZpZyArIEVYUFJFU1NfUFJFX0VNUFRJVkVfUV9NQVAgKyBpKTtcXG4rXFxuK1xcdFxcdC8qIENvbmZpZ3VyZSBxdWV1ZXMgZm9yIHVzZXIgcmVxdWVzdGVkIHByZWVtcHRpYmxlIHRjIG1hcCAqL1xcbitcXHRcXHRudW1fdGMgPSBwX21xcHJpby1cXHUwMDNlcW9wdC5udW1fdGM7XFxuK1xcdFxcdGZvciAodGMgPSAwOyB0YyBcXHUwMDNjIG51bV90YzsgdGMrKykge1xcbitcXHRcXHRcXHQvKiBjaGVjayBpZiB0aGUgdGMgaXMgcHJlZW1wdGl2ZSBvciBub3QgKi9cXG4rXFx0XFx0XFx0aWYgKGlldC1cXHUwMDNlcHJlZW1wdGlibGVfdGNzIFxcdTAwMjYgQklUKHRjKSkge1xcbitcXHRcXHRcXHRcXHQvKiBTZXQgdGhlIHF1ZXVlcyBhcyBwcmVlbXB0aXZlIHF1ZXVlcyAqL1xcbitcXHRcXHRcXHRcXHRmb3IgKGkgPSBxb3B0LVxcdTAwM2VvZmZzZXRbdGNdOyBpIFxcdTAwM2MgcW9wdC1cXHUwMDNlb2Zmc2V0W3RjXSArIHFvcHQtXFx1MDAzZWNvdW50W3RjXTsgaSsrKSB7XFxuK1xcdFxcdFxcdFxcdFxcdHdyaXRlYihCSVQoNCksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBjb25maWcgKyBFWFBSRVNTX1BSRV9FTVBUSVZFX1FfTUFQICsgaSk7XFxuK1xcdFxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0XFx0LyogQWNjdW11bGF0ZSBleHByZXNzIHF1ZXVlIGJpdHMgZm9yIHRoZSBtYXNrICovXFxuK1xcdFxcdFxcdFxcdGZvciAoaSA9IHFvcHQtXFx1MDAzZW9mZnNldFt0Y107IGkgXFx1MDAzYyBxb3B0LVxcdTAwM2VvZmZzZXRbdGNdICsgcW9wdC1cXHUwMDNlY291bnRbdGNdOyBpKyspXFxuK1xcdFxcdFxcdFxcdFxcdHByZW1wdF9tYXNrIHw9IEJJVChpKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdFxcdHdyaXRlYihwcmVtcHRfbWFzaywgY29uZmlnICsgRVhQUkVTU19QUkVfRU1QVElWRV9RX01BU0spO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK3Jlc2V0X2h3OlxcbitcXHQvKiBSZXNldCB0byBkZWZhdWx0OiBhbGwgcXVldWVzIGFzIGV4cHJlc3MgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElDU1NHX01BWF9UQ19RVUVVRVM7IGkrKylcXG4rXFx0XFx0d3JpdGViKDAsIGNvbmZpZyArIEVYUFJFU1NfUFJFX0VNUFRJVkVfUV9NQVAgKyBpKTtcXG4rXFx0d3JpdGViKElDU1NHX0VYUFJFU1NfUV9NQVNLX0FMTCwgY29uZmlnICsgRVhQUkVTU19QUkVfRU1QVElWRV9RX01BU0spO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGljc3NnX2lldF92ZXJpZnlfd2FpdChzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMpXFxuK3tcXG4rXFx0dm9pZCBfX2lvbWVtICpjb25maWcgPSBlbWFjLVxcdTAwM2VkcmFtLnZhICsgSUNTU0dfQ09ORklHX09GRlNFVDtcXG4rXFx0c3RydWN0IHBydWV0aF9xb3NfaWV0ICppZXQgPSBcXHUwMDI2ZW1hYy1cXHUwMDNlcW9zLmlldDtcXG4rXFx0dW5zaWduZWQgbG9uZyBkZWxheV91cywgdGltZW91dF91cztcXG4rXFx0dTMyIHN0YXR1cztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGRlbGF5X3VzID0gaWV0LVxcdTAwM2V2ZXJpZnlfdGltZV9tcyAqIDEwMDA7XFxuK1xcdHRpbWVvdXRfdXMgPSBkZWxheV91cyAqIElDU1NHX0lFVF9WRVJJRllfQVRURU1QVFM7XFxuK1xcbitcXHRyZXQgPSByZWFkYl9wb2xsX3RpbWVvdXQoY29uZmlnICsgUFJFX0VNUFRJT05fVkVSSUZZX1NUQVRVUyxcXG4rXFx0XFx0XFx0XFx0IHN0YXR1cyxcXG4rXFx0XFx0XFx0XFx0IHN0YXR1cyA9PSBJQ1NTR19JRVRGUEVfU1RBVEVfU1VDQ0VFREVEIHx8XFxuK1xcdFxcdFxcdFxcdCBzdGF0dXMgPT0gSUNTU0dfSUVURlBFX1NUQVRFX0ZBSUxFRCxcXG4rXFx0XFx0XFx0XFx0IGRlbGF5X3VzLFxcbitcXHRcXHRcXHRcXHQgdGltZW91dF91cyk7XFxuK1xcbitcXHRpZXQtXFx1MDAzZXZlcmlmeV9zdGF0dXMgPSBzdGF0dXM7XFxuK1xcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IHN0YXR1cyA9PSBJQ1NTR19JRVRGUEVfU1RBVEVfRkFJTEVEKVxcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyogRGlyZWN0IHN5bmNocm9ub3VzIGNvbmZpZ3VyYXRpb24gb2YgSUVUIEZQRS5cXG4rICogQ2FsbGVyIG11c3QgaG9sZCBpZXQtXFx1MDAzZWZwZV9sb2NrLlxcbisgKi9cXG4raW50IGljc3NnX2NvbmZpZ19pZXRmcGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGJvb2wgZW5hYmxlKVxcbit7XFxuK1xcdHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYyA9IG5ldGRldl9wcml2KG5kZXYpO1xcbitcXHR2b2lkIF9faW9tZW0gKmNvbmZpZyA9IGVtYWMtXFx1MDAzZWRyYW0udmEgKyBJQ1NTR19DT05GSUdfT0ZGU0VUO1xcbitcXHRzdHJ1Y3QgcHJ1ZXRoX3Fvc19pZXQgKmlldCA9IFxcdTAwMjZlbWFjLVxcdTAwM2Vxb3MuaWV0O1xcbitcXHRpbnQgcmV0O1xcbitcXHR1OCB2YWw7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZpZXQtXFx1MDAzZWZwZV9sb2NrKTtcXG4rXFxuK1xcdGlmICghUkVBRF9PTkNFKGVtYWMtXFx1MDAzZWxpbmspKSB7XFxuK1xcdFxcdG5ldGRldl9kYmcobmRldiwgXFxcImNhbm5vdCBjaGFuZ2UgSUVUL0ZQRSBzdGF0ZSB3aGVuIGludGVyZmFjZSBpcyBkb3duXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFVwZGF0ZSBGUEUgVHggZW5hYmxlIGJpdCAoUFJFX0VNUFRJT05fRU5BQkxFX1RYKSBpZlxcbitcXHQgKiBmcGVfZW5hYmxlZCBpcyBzZXQgdG8gZW5hYmxlIE1NIGluIFR4IGRpcmVjdGlvblxcbitcXHQgKi9cXG4rXFx0d3JpdGViKGVuYWJsZSA/IDEgOiAwLCBjb25maWcgKyBQUkVfRU1QVElPTl9FTkFCTEVfVFgpO1xcbitcXHR3cml0ZXcoaWV0LVxcdTAwM2V0eF9taW5fZnJhZ19zaXplICsgRVRIX0ZDU19MRU4sXFxuK1xcdCAgICAgICBjb25maWcgKyBQUkVfRU1QVElPTl9BRERfRlJBR19TSVpFX0xPQ0FMKTtcXG4rXFxuK1xcdC8qIElmIEZQRSBpcyB0byBiZSBlbmFibGVkLCBmaXJzdCBjb25maWd1cmUgTUFDIFZlcmlmeSBzdGF0ZVxcbitcXHQgKiBtYWNoaW5lIGluIGZpcm13YXJlIGFzIGZpcm13YXJlIGtpY2tzIHRoZSBWZXJpZnkgcHJvY2Vzc1xcbitcXHQgKiBhcyBzb29uIGFzIElDU1NHX0VNQUNfUE9SVF9QUkVNUFRfVFhfRU5BQkxFIGNvbW1hbmQgaXNcXG4rXFx0ICogcmVjZWl2ZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAoZW5hYmxlIFxcdTAwMjZcXHUwMDI2IGlldC1cXHUwMDNlbWFjX3ZlcmlmeV9jb25maWd1cmUpIHtcXG4rXFx0XFx0d3JpdGViKDEsIGNvbmZpZyArIFBSRV9FTVBUSU9OX0VOQUJMRV9WRVJJRlkpO1xcbitcXHRcXHR3cml0ZWwoaWV0LVxcdTAwM2V2ZXJpZnlfdGltZV9tcywgY29uZmlnICsgUFJFX0VNUFRJT05fVkVSSUZZX1RJTUUpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHR3cml0ZWIoMCwgY29uZmlnICsgUFJFX0VNUFRJT05fRU5BQkxFX1ZFUklGWSk7XFxuK1xcdFxcdGlldC1cXHUwMDNldmVyaWZ5X3N0YXR1cyA9IElDU1NHX0lFVEZQRV9TVEFURV9ESVNBQkxFRDtcXG4rXFx0fVxcbitcXG4rXFx0LyogU2VuZCBjb21tYW5kIHRvIGVuYWJsZSBGUEUgVHggc2lkZS4gUnggaXMgYWx3YXlzIGVuYWJsZWQgKi9cXG4rXFx0cmV0ID0gaWNzc2dfc2V0X3BvcnRfc3RhdGUoZW1hYyxcXG4rXFx0XFx0XFx0XFx0ICAgZW5hYmxlID8gSUNTU0dfRU1BQ19QT1JUX1BSRU1QVF9UWF9FTkFCTEUgOlxcbitcXHRcXHRcXHRcXHRcXHQgICAgSUNTU0dfRU1BQ19QT1JUX1BSRU1QVF9UWF9ESVNBQkxFKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5kZXYsIFxcXCJUWCBwcmVlbXB0ICVzIGNvbW1hbmQgZmFpbGVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBzdHJfZW5hYmxlX2Rpc2FibGUoZW5hYmxlKSk7XFxuK1xcdFxcdGdvdG8gZmFsbGJhY2s7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChlbmFibGUgXFx1MDAyNlxcdTAwMjYgaWV0LVxcdTAwM2VtYWNfdmVyaWZ5X2NvbmZpZ3VyZSkge1xcbitcXHRcXHRyZXQgPSBpY3NzZ19pZXRfdmVyaWZ5X3dhaXQoZW1hYyk7XFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0bmV0ZGV2X2VycihuZGV2LCBcXFwiTUFDIE1lcmdlIHZlcmlmaWNhdGlvbiBmYWlsZWQ6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBpZXQtXFx1MDAzZXZlcmlmeV9zdGF0dXMgPT0gSUNTU0dfSUVURlBFX1NUQVRFX0ZBSUxFRCA/XFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJsaW5rIHBhcnRuZXIgcmVqZWN0ZWRcXFwiIDogXFxcInRpbWVvdXRcXFwiKTtcXG4rXFx0XFx0XFx0Z290byBkaXNhYmxlX3R4O1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSBpZiAoZW5hYmxlKSB7XFxuK1xcdFxcdC8qIEdpdmUgZmlybXdhcmUgc29tZSB0aW1lIHRvIHVwZGF0ZVxcbitcXHRcXHQgKiBQUkVfRU1QVElPTl9BQ1RJVkVfVFggc3RhdGVcXG4rXFx0XFx0ICovXFxuK1xcdFxcdHVzbGVlcF9yYW5nZSgxMDAsIDIwMCk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChlbmFibGUpIHtcXG4rXFx0XFx0dmFsID0gcmVhZGIoY29uZmlnICsgUFJFX0VNUFRJT05fQUNUSVZFX1RYKTtcXG4rXFx0XFx0aWYgKHZhbCAhPSAxKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIkZpcm13YXJlIGZhaWxzIHRvIGFjdGl2YXRlIElFVC9GUEVcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXQgPSAtRUlPO1xcbitcXHRcXHRcXHRnb3RvIGRpc2FibGVfdHg7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWV0LVxcdTAwM2VmcGVfYWN0aXZlID0gdHJ1ZTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aWV0LVxcdTAwM2VmcGVfYWN0aXZlID0gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdGljc3NnX2lldF9zZXRfcHJlZW1wdF9tYXNrKGVtYWMpO1xcbitcXHRuZXRkZXZfZGJnKG5kZXYsIFxcXCJJRVQgRlBFICVzIHN1Y2Nlc3NmdWxseVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgc3RyX2VuYWJsZV9kaXNhYmxlKGVuYWJsZSkpO1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Rpc2FibGVfdHg6XFxuK1xcdGljc3NnX3NldF9wb3J0X3N0YXRlKGVtYWMsIElDU1NHX0VNQUNfUE9SVF9QUkVNUFRfVFhfRElTQUJMRSk7XFxuK2ZhbGxiYWNrOlxcbitcXHR3cml0ZWIoMCwgY29uZmlnICsgUFJFX0VNUFRJT05fRU5BQkxFX1RYKTtcXG4rXFx0d3JpdGViKDAsIGNvbmZpZyArIFBSRV9FTVBUSU9OX0VOQUJMRV9WRVJJRlkpO1xcbitcXHRpZXQtXFx1MDAzZXZlcmlmeV9zdGF0dXMgPSBJQ1NTR19JRVRGUEVfU1RBVEVfRElTQUJMRUQ7XFxuK1xcdGlldC1cXHUwMDNlZnBlX2FjdGl2ZSA9IGZhbHNlO1xcbitcXHRpY3NzZ19pZXRfc2V0X3ByZWVtcHRfbWFzayhlbWFjKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rdm9pZCBpY3NzZ19xb3NfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFx0c3RydWN0IHBydWV0aF9xb3NfaWV0ICppZXQgPSBcXHUwMDI2ZW1hYy1cXHUwMDNlcW9zLmlldDtcXG4rXFxuK1xcdG11dGV4X2luaXQoXFx1MDAyNmlldC1cXHUwMDNlZnBlX2xvY2spO1xcbitcXHQvKiBTZXQgZGVmYXVsdCB2YWx1ZXMgdG8gcHJldmVudCBnYXJiYWdlIHZhbHVlcyBkdXJpbmcgLmdldF9tbSgpICovXFxuK1xcdGlldC1cXHUwMDNldmVyaWZ5X3RpbWVfbXMgPSBJQ1NTR19JRVRfTUFYX1ZFUklGWV9USU1FO1xcbitcXHRpZXQtXFx1MDAzZXR4X21pbl9mcmFnX3NpemUgPSBFVEhfWkxFTjtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChpY3NzZ19xb3NfaW5pdCk7XFxuK1xcbitzdGF0aWMgaW50IGljc3NnX2lldF9jaGFuZ2VfcHJlZW1wdGlibGVfdGNzKHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYylcXG4re1xcbitcXHRzdHJ1Y3QgcHJ1ZXRoX3Fvc19pZXQgKmlldCA9IFxcdTAwMjZlbWFjLVxcdTAwM2Vxb3MuaWV0O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2aWV0LVxcdTAwM2VmcGVfbG9jayk7XFxuK1xcdGlmICghaWV0LVxcdTAwM2VmcGVfZW5hYmxlZCBcXHUwMDI2XFx1MDAyNiAhaWV0LVxcdTAwM2VwcmVlbXB0aWJsZV90Y3MpIHtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpZXQtXFx1MDAzZWZwZV9sb2NrKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFx0cmV0ID0gaWNzc2dfY29uZmlnX2lldGZwZShlbWFjLVxcdTAwM2VuZGV2LCBpZXQtXFx1MDAzZWZwZV9lbmFibGVkKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpZXQtXFx1MDAzZWZwZV9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZW1hY190Y19xdWVyeV9jYXBzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB2b2lkICp0eXBlX2RhdGEpXFxuK3tcXG4rXFx0c3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSA9IHR5cGVfZGF0YTtcXG4rXFxuK1xcdHN3aXRjaCAoYmFzZS1cXHUwMDNldHlwZSkge1xcbitcXHRjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzoge1xcbitcXHRcXHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHMgPSBiYXNlLVxcdTAwM2VjYXBzO1xcbitcXG4rXFx0XFx0Y2Fwcy1cXHUwMDNldmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZW1hY190Y19zZXR1cF9tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHZvaWQgKnR5cGVfZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFx0c3RydWN0IHBydWV0aF9xb3NfbXFwcmlvICpwX21xcHJpbyA9IFxcdTAwMjZlbWFjLVxcdTAwM2Vxb3MubXFwcmlvO1xcbitcXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvID0gdHlwZV9kYXRhO1xcbitcXHRzdHJ1Y3QgcHJ1ZXRoX3Fvc19pZXQgKmlldCA9IFxcdTAwMjZlbWFjLVxcdTAwM2Vxb3MuaWV0O1xcbitcXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcXHUwMDI2bXFwcmlvLVxcdTAwM2Vxb3B0O1xcbitcXHRpbnQgdGMsIG9mZnNldCwgY291bnQ7XFxuK1xcbitcXHQvKiBWYWxpZGF0ZSBwYXJhbWV0ZXJzICovXFxuK1xcdGlmIChxb3B0LVxcdTAwM2VudW1fdGMgXFx1MDAzZSBJQ1NTR19NQVhfVENfUVVFVUVTKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmRldiwgXFxcIk51bWJlciBvZiB0cmFmZmljIGNsYXNzZXMgKCV1KSBleGNlZWRzIGhhcmR3YXJlIGxpbWl0XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBxb3B0LVxcdTAwM2VudW1fdGMpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfU0hBUEVSKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmRldiwgXFxcInRyYWZmaWMgc2hhcGluZyBpcyBub3Qgc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IChUQ19NUVBSSU9fRl9NSU5fUkFURSB8IFRDX01RUFJJT19GX01BWF9SQVRFKSkge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5kZXYsIFxcXCJwZXItcXVldWUgcmF0ZSBsaW1pdGluZyBpcyBub3Qgc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIXFvcHQtXFx1MDAzZW51bV90Yykge1xcbitcXHRcXHRuZXRkZXZfcmVzZXRfdGMobmRldik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdG5ldGRldl9zZXRfbnVtX3RjKG5kZXYsIHFvcHQtXFx1MDAzZW51bV90Yyk7XFxuK1xcbitcXHRcXHRmb3IgKHRjID0gMDsgdGMgXFx1MDAzYyBxb3B0LVxcdTAwM2VudW1fdGM7IHRjKyspIHtcXG4rXFx0XFx0XFx0Y291bnQgPSBxb3B0LVxcdTAwM2Vjb3VudFt0Y107XFxuK1xcdFxcdFxcdG9mZnNldCA9IHFvcHQtXFx1MDAzZW9mZnNldFt0Y107XFxuK1xcdFxcdFxcdG5ldGRldl9zZXRfdGNfcXVldWUobmRldiwgdGMsIGNvdW50LCBvZmZzZXQpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmlldC1cXHUwMDNlZnBlX2xvY2spO1xcbitcXHRpZiAoIXFvcHQtXFx1MDAzZW51bV90Yykge1xcbitcXHRcXHRpZXQtXFx1MDAzZXByZWVtcHRpYmxlX3RjcyA9IDA7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdG1lbWNweShcXHUwMDI2cF9tcXByaW8tXFx1MDAzZXFvcHQsIHFvcHQsIHNpemVvZigqcW9wdCkpO1xcbitcXHRcXHRpZXQtXFx1MDAzZXByZWVtcHRpYmxlX3RjcyA9IG1xcHJpby1cXHUwMDNlcHJlZW1wdGlibGVfdGNzO1xcbitcXHR9XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2aWV0LVxcdTAwM2VmcGVfbG9jayk7XFxuK1xcbitcXHRuZXRkZXZfZGJnKG5kZXYsIFxcXCJkZXYtXFx1MDAzZW51bV90YyAldSBkZXYtXFx1MDAzZXJlYWxfbnVtX3R4X3F1ZXVlcyAldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgbmRldi1cXHUwMDNlbnVtX3RjLCBuZGV2LVxcdTAwM2VyZWFsX251bV90eF9xdWV1ZXMpO1xcbitcXG4rXFx0cmV0dXJuIGljc3NnX2lldF9jaGFuZ2VfcHJlZW1wdGlibGVfdGNzKGVtYWMpO1xcbit9XFxuK1xcbitpbnQgaWNzc2dfcW9zX25kb19zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXFxuK1xcdFxcdFxcdCAgIHZvaWQgKnR5cGVfZGF0YSlcXG4re1xcbitcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBUQ19RVUVSWV9DQVBTOlxcbitcXHRcXHRyZXR1cm4gZW1hY190Y19xdWVyeV9jYXBzKG5kZXYsIHR5cGVfZGF0YSk7XFxuK1xcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOlxcbitcXHRcXHRyZXR1cm4gZW1hY190Y19zZXR1cF9tcXByaW8obmRldiwgdHlwZV9kYXRhKTtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoaWNzc2dfcW9zX25kb19zZXR1cF90Yyk7XFxuK1xcbit2b2lkIGljc3NnX3Fvc19saW5rX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFx0c3RydWN0IHBydWV0aF9xb3NfaWV0ICppZXQgPSBcXHUwMDI2ZW1hYy1cXHUwMDNlcW9zLmlldDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghUkVBRF9PTkNFKGVtYWMtXFx1MDAzZWxpbmspKSB7XFxuK1xcdFxcdC8qIENsZWFyIEZQRSBhY3RpdmUgc3RhdGUgb24gbGluay1kb3duIHNvIGdldF9tbSgpIHJlcG9ydHNcXG4rXFx0XFx0ICogYWNjdXJhdGUgdHhfYWN0aXZlIGFuZCB2ZXJpZnlfc3RhdHVzIHdoaWxlIGxpbmsgaXMgZG93bi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG11dGV4X2xvY2soXFx1MDAyNmlldC1cXHUwMDNlZnBlX2xvY2spO1xcbitcXHRcXHRpZXQtXFx1MDAzZWZwZV9hY3RpdmUgPSBmYWxzZTtcXG4rXFx0XFx0aWV0LVxcdTAwM2V2ZXJpZnlfc3RhdHVzID0gSUNTU0dfSUVURlBFX1NUQVRFX0RJU0FCTEVEO1xcbitcXHRcXHRpY3NzZ19pZXRfc2V0X3ByZWVtcHRfbWFzayhlbWFjKTtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpZXQtXFx1MDAzZWZwZV9sb2NrKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBpY3NzZ19pZXRfY2hhbmdlX3ByZWVtcHRpYmxlX3RjcyhlbWFjKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0bmV0ZGV2X2RiZyhuZGV2LCBcXFwiSUVUIEZQRSAlcyBmYWlsZWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIHN0cl9lbmFibGVfZGlzYWJsZShpZXQtXFx1MDAzZWZwZV9lbmFibGVkKSk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoaWNzc2dfcW9zX2xpbmtfc3RhdGVfdXBkYXRlKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcW9zLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19xb3MuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTgyNmNlNGJjZmQ5Nlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19xb3MuaFxcbkBAIC0wLDAgKzEsNjggQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rLyogQ29weXJpZ2h0IChDKSAyMDIzIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tL1xcbisgKi9cXG4rXFxuKyNpZm5kZWYgX19ORVRfVElfSUNTU0dfUU9TX0hcXG4rI2RlZmluZSBfX05FVF9USV9JQ1NTR19RT1NfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2F0b21pYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X3NjaGVkLmhcXHUwMDNlXFxuK1xcbisjZGVmaW5lIElDU1NHX01BWF9UQ19RVUVVRVNcXHRcXHRcXHQ4XFxuKyNkZWZpbmUgSUNTU0dfRVhQUkVTU19RX01BU0tfQUxMXFx0XFx0MHhGRlxcbisjZGVmaW5lIElDU1NHX0lFVF9NQVhfVkVSSUZZX1RJTUVcXHRcXHQxMjhcXG4rI2RlZmluZSBJQ1NTR19JRVRfTUlOX1ZFUklGWV9USU1FXFx0XFx0MVxcbisjZGVmaW5lIElDU1NHX0lFVF9WRVJJRllfQVRURU1QVFNcXHRcXHQzXFxuK1xcbisvKipcXG4rICogZW51bSBpY3NzZ19pZXRmcGVfdmVyaWZ5X3N0YXRlcyAtIHN0YXR1cyBvZiBNTSBWZXJpZnkgcmV0dXJuZWQgYnkgZmlybXdhcmVcXG4rICogQElDU1NHX0lFVEZQRV9TVEFURV9VTktOT1dOOlxcbisgKlxcdHZlcmlmaWNhdGlvbiBzdGF0dXMgaXMgdW5rbm93blxcbisgKiBASUNTU0dfSUVURlBFX1NUQVRFX0lOSVRJQUw6XFxuKyAqXFx0RmlybXdhcmUgcmV0dXJucyB0aGlzIGlmIHZlcmlmeSBzdGF0ZSBkaWFncmFtIGlzIGlkbGVcXG4rICogQElDU1NHX0lFVEZQRV9TVEFURV9WRVJJRllJTkc6XFxuKyAqXFx0RmlybXdhcmUgcmV0dXJucyB0aGlzIGlmIHZlcmlmaWNhdGlvbiBpcyBvbmdvaW5nXFxuKyAqIEBJQ1NTR19JRVRGUEVfU1RBVEVfU1VDQ0VFREVEOlxcbisgKlxcdEZpcm13YXJlIHJldHVybnMgdGhpcyBpZiB2ZXJpZnkgc3RhdGUgZGlhZ3JhbSBjb21wbGV0ZXMgdmVyaWZpY2F0aW9uXFxuKyAqIEBJQ1NTR19JRVRGUEVfU1RBVEVfRkFJTEVEOlxcbisgKlxcdEZpcm13YXJlIHJldHVybnMgdGhpcyBpZiB2ZXJpZnkgc3RhdGUgZGlhZ3JhbSBmYWlscyBkdXJpbmcgdmVyaWZpY2F0aW9uXFxuKyAqIEBJQ1NTR19JRVRGUEVfU1RBVEVfRElTQUJMRUQ6XFxuKyAqXFx0dmVyaWZpY2F0aW9uIGlzIGRpc2FibGVkIGJ5IHRoZSBkcml2ZXJcXG4rICovXFxuK2VudW0gaWNzc2dfaWV0ZnBlX3ZlcmlmeV9zdGF0ZXMge1xcbitcXHRJQ1NTR19JRVRGUEVfU1RBVEVfVU5LTk9XTiA9IDAsXFxuK1xcdElDU1NHX0lFVEZQRV9TVEFURV9JTklUSUFMLFxcbitcXHRJQ1NTR19JRVRGUEVfU1RBVEVfVkVSSUZZSU5HLFxcbitcXHRJQ1NTR19JRVRGUEVfU1RBVEVfU1VDQ0VFREVELFxcbitcXHRJQ1NTR19JRVRGUEVfU1RBVEVfRkFJTEVELFxcbitcXHRJQ1NTR19JRVRGUEVfU1RBVEVfRElTQUJMRURcXG4rfTtcXG4rXFxuK3N0cnVjdCBwcnVldGhfcW9zX21xcHJpbyB7XFxuK1xcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCBxb3B0O1xcbit9O1xcbitcXG4rc3RydWN0IHBydWV0aF9xb3NfaWV0IHtcXG4rXFx0Ym9vbCBmcGVfZW5hYmxlZDtcXG4rXFx0Ym9vbCBtYWNfdmVyaWZ5X2NvbmZpZ3VyZTtcXG4rXFx0dTMyIHR4X21pbl9mcmFnX3NpemU7XFxuK1xcdHUzMiB2ZXJpZnlfdGltZV9tcztcXG4rXFx0Ym9vbCBmcGVfYWN0aXZlO1xcbitcXHRlbnVtIGljc3NnX2lldGZwZV92ZXJpZnlfc3RhdGVzIHZlcmlmeV9zdGF0dXM7XFxuK1xcdC8qIGZwZSBtdXRleCBwcm90ZWN0cyBhbGwgRlBFIG9wZXJhdGlvbnMgZm9yIHN5bmNocm9uaXphdGlvbiAqL1xcbitcXHRzdHJ1Y3QgbXV0ZXggZnBlX2xvY2s7XFxuK1xcdHU4IHByZWVtcHRpYmxlX3RjcztcXG4rfTtcXG4rXFxuK3N0cnVjdCBwcnVldGhfcW9zIHtcXG4rXFx0c3RydWN0IHBydWV0aF9xb3NfaWV0IGlldDtcXG4rXFx0c3RydWN0IHBydWV0aF9xb3NfbXFwcmlvIG1xcHJpbztcXG4rfTtcXG4rXFxuK3ZvaWQgaWNzc2dfcW9zX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbit2b2lkIGljc3NnX3Fvc19saW5rX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XFxuK2ludCBpY3NzZ19xb3NfbmRvX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcXG4rXFx0XFx0XFx0ICAgdm9pZCAqdHlwZV9kYXRhKTtcXG4raW50IGljc3NnX2NvbmZpZ19pZXRmcGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGJvb2wgZW5hYmxlKTtcXG4rI2VuZGlmIC8qIF9fTkVUX1RJX0lDU1NHX1FPU19IICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3N0YXRzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zdGF0cy5jXFxuaW5kZXggNzE1OWJhYTAxNTVjZi4uY2ZkYjZmNWRjNWRhMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zdGF0cy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfc3RhdHMuY1xcbkBAIC03NCw3ICs3NCw3IEBAIHZvaWQgaWNzc2dfc3RhdHNfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChpY3NzZ19zdGF0c193b3JrX2hhbmRsZXIpO1xcbiBcXG4taW50IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMsIGNoYXIgKnN0YXRfbmFtZSlcXG4rdTY0IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMsIGNoYXIgKnN0YXRfbmFtZSlcXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFxuQEAgLTkxLDUgKzkxLDUgQEAgaW50IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMsIGNoYXIgKnN0YXRfbmFtZSlcXG4gXFx0fVxcbiBcXG4gXFx0bmV0ZGV2X2VycihlbWFjLVxcdTAwM2VuZGV2LCBcXFwiSW52YWxpZCBzdGF0cyAlc1xcXFxuXFxcIiwgc3RhdF9uYW1lKTtcXG4tXFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3N0YXRzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zdGF0cy5oXFxuaW5kZXggNWVjMGIzOGUwYzY3ZC4uYjg2ZGE4ZGEyM2ExOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zdGF0cy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfc3RhdHMuaFxcbkBAIC04LDggKzgsNiBAQFxcbiAjaWZuZGVmIF9fTkVUX1RJX0lDU1NHX1NUQVRTX0hcXG4gI2RlZmluZSBfX05FVF9USV9JQ1NTR19TVEFUU19IXFxuIFxcbi0jaW5jbHVkZSBcXFwiaWNzc2dfcHJ1ZXRoLmhcXFwiXFxuLVxcbiAjZGVmaW5lIFNUQVRTX1RJTUVfTElNSVRfMUdfTVMgICAgMjUwMDAgICAgLyogMjUgc2Vjb25kcyBAIDFHICovXFxuIFxcbiBzdHJ1Y3QgbWlpZ19zdGF0c19yZWdzIHtcXG5AQCAtMTU1LDUwICsxNTMsNjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpY3NzZ19taWlnX3N0YXRzIGljc3NnX2FsbF9taWlnX3N0YXRzW10gPSB7XFxuIFxcdElDU1NHX01JSUdfU1RBVFModHhfYnl0ZXMsIHRydWUpLFxcbiB9O1xcbiBcXG4tI2RlZmluZSBJQ1NTR19QQV9TVEFUUyhmaWVsZClcXHRcXFxcXFxuLXtcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdCNmaWVsZCxcXHRcXHRcXHRcXFxcXFxuLVxcdGZpZWxkLFxcdFxcdFxcdFxcXFxcXG4rI2RlZmluZSBJQ1NTR19QQV9TVEFUUyhmaWVsZCwgc3RkKVxcdFxcXFxcXG4re1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0I2ZpZWxkLFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZmllbGQsXFx0XFx0XFx0XFx0XFxcXFxcbitcXHRzdGQsXFx0XFx0XFx0XFx0XFxcXFxcbiB9XFxuIFxcbiBzdHJ1Y3QgaWNzc2dfcGFfc3RhdHMge1xcbiBcXHRjaGFyIG5hbWVbRVRIX0dTVFJJTkdfTEVOXTtcXG4gXFx0dTMyIG9mZnNldDtcXG4rXFx0Ym9vbCBzdGFuZGFyZF9zdGF0cztcXG4gfTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNzc2dfcGFfc3RhdHMgaWNzc2dfYWxsX3BhX3N0YXRzW10gPSB7XFxuLVxcdElDU1NHX1BBX1NUQVRTKEZXX1JUVV9QS1RfRFJPUCksXFxuLVxcdElDU1NHX1BBX1NUQVRTKEZXX1EwX09WRVJGTE9XKSxcXG4tXFx0SUNTU0dfUEFfU1RBVFMoRldfUTFfT1ZFUkZMT1cpLFxcbi1cXHRJQ1NTR19QQV9TVEFUUyhGV19RMl9PVkVSRkxPVyksXFxuLVxcdElDU1NHX1BBX1NUQVRTKEZXX1EzX09WRVJGTE9XKSxcXG4tXFx0SUNTU0dfUEFfU1RBVFMoRldfUTRfT1ZFUkZMT1cpLFxcbi1cXHRJQ1NTR19QQV9TVEFUUyhGV19RNV9PVkVSRkxPVyksXFxuLVxcdElDU1NHX1BBX1NUQVRTKEZXX1E2X09WRVJGTE9XKSxcXG4tXFx0SUNTU0dfUEFfU1RBVFMoRldfUTdfT1ZFUkZMT1cpLFxcbi1cXHRJQ1NTR19QQV9TVEFUUyhGV19EUk9QUEVEX1BLVCksXFxuLVxcdElDU1NHX1BBX1NUQVRTKEZXX1JYX0VSUk9SKSxcXG4tXFx0SUNTU0dfUEFfU1RBVFMoRldfUlhfRFNfSU5WQUxJRCksXFxuLVxcdElDU1NHX1BBX1NUQVRTKEZXX1RYX0RST1BQRURfUEFDS0VUKSxcXG4tXFx0SUNTU0dfUEFfU1RBVFMoRldfVFhfVFNfRFJPUFBFRF9QQUNLRVQpLFxcbi1cXHRJQ1NTR19QQV9TVEFUUyhGV19JTkZfUE9SVF9ESVNBQkxFRCksXFxuLVxcdElDU1NHX1BBX1NUQVRTKEZXX0lORl9TQVYpLFxcbi1cXHRJQ1NTR19QQV9TVEFUUyhGV19JTkZfU0FfREwpLFxcbi1cXHRJQ1NTR19QQV9TVEFUUyhGV19JTkZfUE9SVF9CTE9DS0VEKSxcXG4tXFx0SUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfVEFHR0VEKSxcXG4tXFx0SUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfUFJJT1RBR0dFRCksXFxuLVxcdElDU1NHX1BBX1NUQVRTKEZXX0lORl9EUk9QX05PVEFHKSxcXG4tXFx0SUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfTk9UTUVNQkVSKSxcXG4tXFx0SUNTU0dfUEFfU1RBVFMoRldfUlhfRU9GX1NIT1JUX0ZSTUVSUiksXFxuLVxcdElDU1NHX1BBX1NUQVRTKEZXX1JYX0IwX0RST1BfRUFSTFlfRU9GKSxcXG4tXFx0SUNTU0dfUEFfU1RBVFMoRldfVFhfSlVNQk9fRlJNX0NVVE9GRiksXFxuLVxcdElDU1NHX1BBX1NUQVRTKEZXX1JYX0VYUF9GUkFHX1FfRFJPUCksXFxuLVxcdElDU1NHX1BBX1NUQVRTKEZXX1JYX0ZJRk9fT1ZFUlJVTiksXFxuLVxcdElDU1NHX1BBX1NUQVRTKEZXX0NVVF9USFJfUEtUKSxcXG4tXFx0SUNTU0dfUEFfU1RBVFMoRldfSE9TVF9SWF9QS1RfQ05UKSxcXG4tXFx0SUNTU0dfUEFfU1RBVFMoRldfSE9TVF9UWF9QS1RfQ05UKSxcXG4tXFx0SUNTU0dfUEFfU1RBVFMoRldfSE9TVF9FR1JFU1NfUV9QUkVfT1ZFUkZMT1cpLFxcbi1cXHRJQ1NTR19QQV9TVEFUUyhGV19IT1NUX0VHUkVTU19RX0VYUF9PVkVSRkxPVyksXFxuK1xcdElDU1NHX1BBX1NUQVRTKEZXX1JUVV9QS1RfRFJPUCwgZmFsc2UpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19RMF9PVkVSRkxPVywgZmFsc2UpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19RMV9PVkVSRkxPVywgZmFsc2UpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19RMl9PVkVSRkxPVywgZmFsc2UpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19RM19PVkVSRkxPVywgZmFsc2UpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19RNF9PVkVSRkxPVywgZmFsc2UpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19RNV9PVkVSRkxPVywgZmFsc2UpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19RNl9PVkVSRkxPVywgZmFsc2UpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19RN19PVkVSRkxPVywgZmFsc2UpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19EUk9QUEVEX1BLVCwgZmFsc2UpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19SWF9FUlJPUiwgZmFsc2UpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19SWF9EU19JTlZBTElELCBmYWxzZSksXFxuK1xcdElDU1NHX1BBX1NUQVRTKEZXX1RYX0RST1BQRURfUEFDS0VULCBmYWxzZSksXFxuK1xcdElDU1NHX1BBX1NUQVRTKEZXX1RYX1RTX0RST1BQRURfUEFDS0VULCBmYWxzZSksXFxuK1xcdElDU1NHX1BBX1NUQVRTKEZXX0lORl9QT1JUX0RJU0FCTEVELCBmYWxzZSksXFxuK1xcdElDU1NHX1BBX1NUQVRTKEZXX0lORl9TQVYsIGZhbHNlKSxcXG4rXFx0SUNTU0dfUEFfU1RBVFMoRldfSU5GX1NBX0RMLCBmYWxzZSksXFxuK1xcdElDU1NHX1BBX1NUQVRTKEZXX0lORl9QT1JUX0JMT0NLRUQsIGZhbHNlKSxcXG4rXFx0SUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfVEFHR0VELCBmYWxzZSksXFxuK1xcdElDU1NHX1BBX1NUQVRTKEZXX0lORl9EUk9QX1BSSU9UQUdHRUQsIGZhbHNlKSxcXG4rXFx0SUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfTk9UQUcsIGZhbHNlKSxcXG4rXFx0SUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfTk9UTUVNQkVSLCBmYWxzZSksXFxuK1xcdC8qIE1BQyBNZXJnZSBjb3VudGVyczogZXhwb3NlZCB2aWEgLmdldF9tbV9zdGF0cyBzdGFuZGFyZCB1QVBJLFxcbitcXHQgKiBub3QgZHVwbGljYXRlZCBpbiB0aGUgcHJpdmF0ZSBldGh0b29sIC1TIHRhYmxlLlxcbitcXHQgKi9cXG4rXFx0SUNTU0dfUEFfU1RBVFMoRldfUFJFRU1QVF9CQURfRlJBRywgdHJ1ZSksXFxuK1xcdElDU1NHX1BBX1NUQVRTKEZXX1BSRUVNUFRfQVNTRU1CTFlfRVJSLCB0cnVlKSxcXG4rXFx0SUNTU0dfUEFfU1RBVFMoRldfUFJFRU1QVF9GUkFHX0NOVF9UWCwgdHJ1ZSksXFxuK1xcdElDU1NHX1BBX1NUQVRTKEZXX1BSRUVNUFRfQVNTRU1CTFlfT0ssIHRydWUpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19QUkVFTVBUX0ZSQUdfQ05UX1JYLCB0cnVlKSxcXG4rXFx0SUNTU0dfUEFfU1RBVFMoRldfUlhfRU9GX1NIT1JUX0ZSTUVSUiwgZmFsc2UpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19SWF9CMF9EUk9QX0VBUkxZX0VPRiwgZmFsc2UpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19UWF9KVU1CT19GUk1fQ1VUT0ZGLCBmYWxzZSksXFxuK1xcdElDU1NHX1BBX1NUQVRTKEZXX1JYX0VYUF9GUkFHX1FfRFJPUCwgZmFsc2UpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19SWF9GSUZPX09WRVJSVU4sIGZhbHNlKSxcXG4rXFx0SUNTU0dfUEFfU1RBVFMoRldfQ1VUX1RIUl9QS1QsIGZhbHNlKSxcXG4rXFx0SUNTU0dfUEFfU1RBVFMoRldfSE9TVF9SWF9QS1RfQ05ULCBmYWxzZSksXFxuK1xcdElDU1NHX1BBX1NUQVRTKEZXX0hPU1RfVFhfUEtUX0NOVCwgZmFsc2UpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19IT1NUX0VHUkVTU19RX1BSRV9PVkVSRkxPVywgZmFsc2UpLFxcbitcXHRJQ1NTR19QQV9TVEFUUyhGV19IT1NUX0VHUkVTU19RX0VYUF9PVkVSRkxPVywgZmFsc2UpLFxcbiB9O1xcbiBcXG4gI2VuZGlmIC8qIF9fTkVUX1RJX0lDU1NHX1NUQVRTX0ggKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfc3dpdGNoX21hcC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfc3dpdGNoX21hcC5oXFxuaW5kZXggN2UwNTNiOGFmM2VjZS4uODU1ZmQ0ZWQwYjNmNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zd2l0Y2hfbWFwLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zd2l0Y2hfbWFwLmhcXG5AQCAtMjU2LDYgKzI1NiwxMSBAQFxcbiAjZGVmaW5lIEZXX0lORl9EUk9QX1BSSU9UQUdHRURcXHRcXHQweDAxNDhcXG4gI2RlZmluZSBGV19JTkZfRFJPUF9OT1RBR1xcdFxcdDB4MDE1MFxcbiAjZGVmaW5lIEZXX0lORl9EUk9QX05PVE1FTUJFUlxcdFxcdDB4MDE1OFxcbisjZGVmaW5lIEZXX1BSRUVNUFRfQkFEX0ZSQUdcXHRcXHQweDAxNjBcXG4rI2RlZmluZSBGV19QUkVFTVBUX0FTU0VNQkxZX0VSUlxcdFxcdDB4MDE2OFxcbisjZGVmaW5lIEZXX1BSRUVNUFRfRlJBR19DTlRfVFhcXHRcXHQweDAxNzBcXG4rI2RlZmluZSBGV19QUkVFTVBUX0FTU0VNQkxZX09LXFx0XFx0MHgwMTc4XFxuKyNkZWZpbmUgRldfUFJFRU1QVF9GUkFHX0NOVF9SWFxcdFxcdDB4MDE4MFxcbiAjZGVmaW5lIEZXX1JYX0VPRl9TSE9SVF9GUk1FUlJcXHRcXHQweDAxODhcXG4gI2RlZmluZSBGV19SWF9CMF9EUk9QX0VBUkxZX0VPRlxcdFxcdDB4MDE5MFxcbiAjZGVmaW5lIEZXX1RYX0pVTUJPX0ZSTV9DVVRPRkZcXHRcXHQweDAxOThcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MTA6MjMuMTgzNjY2MDk4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1MTQxODU3NjQyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgbW9kaWZpZWQgY29kZSBpcyBjb25maW5lZCB0byB0aGUgVGV4YXMgSW5zdHJ1bWVudHMgSUNTU0cgUFJVIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvKSwgd2hpY2ggZGVwZW5kcyBvbiBDT05GSUdfQVJDSF9LMyAoYW4gQVJNNjQtc3BlY2lmaWMgU29DIGFyY2hpdGVjdHVyZSkuIFRoaXMgZHJpdmVyIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiB0aGUgdGFyZ2V0IGFtZDY0IGFyY2hpdGVjdHVyZSBhbmQgYWRkaXRpb25hbGx5IHJlcXVpcmVzIHBoeXNpY2FsIFRJIEszIFBSVS1JQ1NTRyBTb0MgaGFyZHdhcmUgYW5kIGZpcm13YXJlIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTVmNGZmNTZkMTQ5NzAxZjY1NGQwNzQxZjU4MTQ1NTI1MzExNGZlYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDE1IDA3OjEwOjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9NYWtlZmlsZVxuaW5kZXggZjQyNzZjOWE3NzYyMC4uZDE5YmNkMjVjOWQwNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9NYWtlZmlsZVxuQEAgLTQ2LDYgKzQ2LDcgQEAgaWNzc2cteSA6PSBpY3NzZy9pY3NzZ19jb21tb24ubyBcXFxuIFx0ICAgaWNzc2cvaWNzc2dfY29uZmlnLm8gXFxcbiBcdCAgIGljc3NnL2ljc3NnX21paV9jZmcubyBcXFxuIFx0ICAgaWNzc2cvaWNzc2dfc3RhdHMubyBcXFxuLVx0ICAgaWNzc2cvaWNzc2dfZXRodG9vbC5vXG4rXHQgICBpY3NzZy9pY3NzZ19ldGh0b29sLm8gXFxcbitcdCAgIGljc3NnL2ljc3NnX3Fvcy5vXG4gXG4gb2JqLSQoQ09ORklHX1RJX0lDU1NfSUVQKSArPSBpY3NzZy9pY3NzX2llcC5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19jb21tb24uY1xuaW5kZXggNGE3ZDFhNmY0NzBiMS4uZDU5ZWVmNjFlNzAxMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2NvbW1vbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19jb21tb24uY1xuQEAgLTE3NTQsNiArMTc1NCw3IEBAIHZvaWQgcHJ1ZXRoX25ldGRldl9leGl0KHN0cnVjdCBwcnVldGggKnBydWV0aCxcbiBcbiBcdG5ldGlmX25hcGlfZGVsKFx1MDAyNmVtYWMtXHUwMDNlbmFwaV9yeCk7XG4gXG4rXHRtdXRleF9kZXN0cm95KFx1MDAyNmVtYWMtXHUwMDNlcW9zLmlldC5mcGVfbG9jayk7XG4gXHRwcnVzc19yZWxlYXNlX21lbV9yZWdpb24ocHJ1ZXRoLVx1MDAzZXBydXNzLCBcdTAwMjZlbWFjLVx1MDAzZWRyYW0pO1xuIFx0ZnJlZV9uZXRkZXYoZW1hYy1cdTAwM2VuZGV2KTtcbiBcdHBydWV0aC1cdTAwM2VlbWFjW21hY10gPSBOVUxMO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2NvbmZpZy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfY29uZmlnLmhcbmluZGV4IDYwZDY5NzQ0ZmZhZTIuLjFhYzIwMmY4NTVlZDQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19jb25maWcuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfY29uZmlnLmhcbkBAIC0zMjMsMTMgKzMyMyw0IEBAIHN0cnVjdCBwcnVldGhfZmRiX3Nsb3Qge1xuIFx0dTggZmlkO1xuIFx0dTggZmlkX2MyO1xuIH0gX19wYWNrZWQ7XG4tXG4tZW51bSBpY3NzZ19pZXRmcGVfdmVyaWZ5X3N0YXRlcyB7XG4tXHRJQ1NTR19JRVRGUEVfU1RBVEVfVU5LTk9XTiA9IDAsXG4tXHRJQ1NTR19JRVRGUEVfU1RBVEVfSU5JVElBTCxcbi1cdElDU1NHX0lFVEZQRV9TVEFURV9WRVJJRllJTkcsXG4tXHRJQ1NTR19JRVRGUEVfU1RBVEVfU1VDQ0VFREVELFxuLVx0SUNTU0dfSUVURlBFX1NUQVRFX0ZBSUxFRCxcbi1cdElDU1NHX0lFVEZQRV9TVEFURV9ESVNBQkxFRFxuLX07XG4gI2VuZGlmIC8qIF9fTkVUX1RJX0lDU1NHX0NPTkZJR19IICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfZXRodG9vbC5jXG5pbmRleCBiNzE1YWYyMWQyM2FjLi5kYzI1MzYxYWZlOTg5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfZXRodG9vbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19ldGh0b29sLmNcbkBAIC03NCw3ICs3NCw4IEBAIHN0YXRpYyBpbnQgZW1hY19nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IHN0cmluZ3NldClcbiBcdFx0aWYgKGVtYWMtXHUwMDNlcHJ1ZXRoLVx1MDAzZXBhX3N0YXRzKVxuIFx0XHRcdHJldHVybiBJQ1NTR19OVU1fRVRIVE9PTF9TVEFUUztcbiBcdFx0ZWxzZVxuLVx0XHRcdHJldHVybiBJQ1NTR19OVU1fRVRIVE9PTF9TVEFUUyAtIElDU1NHX05VTV9QQV9TVEFUUztcbitcdFx0XHRyZXR1cm4gSUNTU0dfTlVNX0VUSFRPT0xfU1RBVFMgLVxuK1x0XHRcdCAgICAgICAoSUNTU0dfTlVNX1BBX1NUQVRTIC0gSUNTU0dfTlVNX1BBX1NUQU5EQVJEX1NUQVRTKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbkBAIC05Myw3ICs5NCw4IEBAIHN0YXRpYyB2b2lkIGVtYWNfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBzdHJpbmdzZXQsIHU4ICpkYXRhKVxuIFx0XHRcdFx0ZXRodG9vbF9wdXRzKFx1MDAyNnAsIGljc3NnX2FsbF9taWlnX3N0YXRzW2ldLm5hbWUpO1xuIFx0XHRpZiAoZW1hYy1cdTAwM2VwcnVldGgtXHUwMDNlcGFfc3RhdHMpXG4gXHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShpY3NzZ19hbGxfcGFfc3RhdHMpOyBpKyspXG4tXHRcdFx0XHRldGh0b29sX3B1dHMoXHUwMDI2cCwgaWNzc2dfYWxsX3BhX3N0YXRzW2ldLm5hbWUpO1xuK1x0XHRcdFx0aWYgKCFpY3NzZ19hbGxfcGFfc3RhdHNbaV0uc3RhbmRhcmRfc3RhdHMpXG4rXHRcdFx0XHRcdGV0aHRvb2xfcHV0cyhcdTAwMjZwLCBpY3NzZ19hbGxfcGFfc3RhdHNbaV0ubmFtZSk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG5AQCAtMTE0LDcgKzExNiw4IEBAIHN0YXRpYyB2b2lkIGVtYWNfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXG4gXHRpZiAoZW1hYy1cdTAwM2VwcnVldGgtXHUwMDNlcGFfc3RhdHMpXG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoaWNzc2dfYWxsX3BhX3N0YXRzKTsgaSsrKVxuLVx0XHRcdCooZGF0YSsrKSA9IGVtYWMtXHUwMDNlcGFfc3RhdHNbaV07XG4rXHRcdFx0aWYgKCFpY3NzZ19hbGxfcGFfc3RhdHNbaV0uc3RhbmRhcmRfc3RhdHMpXG4rXHRcdFx0XHQqKGRhdGErKykgPSBlbWFjLVx1MDAzZXBhX3N0YXRzW2ldO1xuIH1cbiBcbiBzdGF0aWMgaW50IGVtYWNfZ2V0X3RzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG5AQCAtMjk0LDYgKzI5NywxMjYgQEAgc3RhdGljIGludCBlbWFjX3NldF9wZXJfcXVldWVfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBxdWV1ZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IGVtYWNfZ2V0X21tKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgZXRodG9vbF9tbV9zdGF0ZSAqc3RhdGUpXG4re1xuK1x0c3RydWN0IHBydWV0aF9lbWFjICplbWFjID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXHRzdHJ1Y3QgcHJ1ZXRoX3Fvc19pZXQgKmlldCA9IFx1MDAyNmVtYWMtXHUwMDNlcW9zLmlldDtcbitcdGVudW0gaWNzc2dfaWV0ZnBlX3ZlcmlmeV9zdGF0ZXMgdmVyaWZ5X3N0YXR1cztcbitcbitcdGlmIChlbWFjLVx1MDAzZWlzX3NyMSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZpZXQtXHUwMDNlZnBlX2xvY2spO1xuK1x0c3RhdGUtXHUwMDNldHhfZW5hYmxlZCA9IGlldC1cdTAwM2VmcGVfZW5hYmxlZDtcbitcdHN0YXRlLVx1MDAzZXR4X21pbl9mcmFnX3NpemUgPSBpZXQtXHUwMDNldHhfbWluX2ZyYWdfc2l6ZTtcbitcdHN0YXRlLVx1MDAzZXZlcmlmeV9lbmFibGVkID0gaWV0LVx1MDAzZW1hY192ZXJpZnlfY29uZmlndXJlO1xuK1x0c3RhdGUtXHUwMDNldmVyaWZ5X3RpbWUgPSBpZXQtXHUwMDNldmVyaWZ5X3RpbWVfbXM7XG4rXHRzdGF0ZS1cdTAwM2V0eF9hY3RpdmUgPSBpZXQtXHUwMDNlZnBlX2FjdGl2ZTtcbitcdHZlcmlmeV9zdGF0dXMgPSBpZXQtXHUwMDNldmVyaWZ5X3N0YXR1cztcbitcdG11dGV4X3VubG9jayhcdTAwMjZpZXQtXHUwMDNlZnBlX2xvY2spO1xuK1xuK1x0c3RhdGUtXHUwMDNlcnhfbWluX2ZyYWdfc2l6ZSA9IEVUSF9aTEVOO1xuK1x0c3RhdGUtXHUwMDNlcG1hY19lbmFibGVkID0gdHJ1ZTtcbitcbitcdHN3aXRjaCAodmVyaWZ5X3N0YXR1cykge1xuK1x0Y2FzZSBJQ1NTR19JRVRGUEVfU1RBVEVfRElTQUJMRUQ6XG4rXHRcdHN0YXRlLVx1MDAzZXZlcmlmeV9zdGF0dXMgPSBFVEhUT09MX01NX1ZFUklGWV9TVEFUVVNfRElTQUJMRUQ7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBJQ1NTR19JRVRGUEVfU1RBVEVfSU5JVElBTDpcbitcdFx0c3RhdGUtXHUwMDNldmVyaWZ5X3N0YXR1cyA9IEVUSFRPT0xfTU1fVkVSSUZZX1NUQVRVU19JTklUSUFMO1xuK1x0XHRicmVhaztcbitcdGNhc2UgSUNTU0dfSUVURlBFX1NUQVRFX1ZFUklGWUlORzpcbitcdFx0c3RhdGUtXHUwMDNldmVyaWZ5X3N0YXR1cyA9IEVUSFRPT0xfTU1fVkVSSUZZX1NUQVRVU19WRVJJRllJTkc7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBJQ1NTR19JRVRGUEVfU1RBVEVfU1VDQ0VFREVEOlxuK1x0XHRzdGF0ZS1cdTAwM2V2ZXJpZnlfc3RhdHVzID0gRVRIVE9PTF9NTV9WRVJJRllfU1RBVFVTX1NVQ0NFRURFRDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIElDU1NHX0lFVEZQRV9TVEFURV9GQUlMRUQ6XG4rXHRcdHN0YXRlLVx1MDAzZXZlcmlmeV9zdGF0dXMgPSBFVEhUT09MX01NX1ZFUklGWV9TVEFUVVNfRkFJTEVEO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHN0YXRlLVx1MDAzZXZlcmlmeV9zdGF0dXMgPSBFVEhUT09MX01NX1ZFUklGWV9TVEFUVVNfVU5LTk9XTjtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHQvKiA4MDIuMy0yMDE4IGNsYXVzZSAzMC4xNC4xLjYsIHNheXMgdGhhdCB0aGUgYU1BQ01lcmdlVmVyaWZ5VGltZVxuK1x0ICogdmFyaWFibGUgaGFzIGEgcmFuZ2UgYmV0d2VlbiAxIGFuZCAxMjggbXMgaW5jbHVzaXZlLiBMaW1pdCB0byB0aGF0LlxuK1x0ICovXG4rXHRzdGF0ZS1cdTAwM2VtYXhfdmVyaWZ5X3RpbWUgPSBFVEhUT09MX01NX01BWF9WRVJJRllfVElNRV9NUztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGVtYWNfc2V0X21tKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgZXRodG9vbF9tbV9jZmcgKmNmZyxcbitcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcdHN0cnVjdCBwcnVldGhfcW9zX2lldCAqaWV0ID0gXHUwMDI2ZW1hYy1cdTAwM2Vxb3MuaWV0O1xuK1x0dTMyIG9sZF92ZXJpZnlfdGltZV9tcywgb2xkX3R4X21pbl9mcmFnX3NpemU7XG4rXHRib29sIG9sZF9mcGVfZW5hYmxlZCwgb2xkX21hY192ZXJpZnlfY29uZmlndXJlO1xuK1x0aW50IGVycjtcbitcbitcdGlmIChlbWFjLVx1MDAzZWlzX3NyMSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0aWYgKCFjZmctXHUwMDNlcG1hY19lbmFibGVkKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwicHJlZW1wdGlibGUgTUFDIGlzIGFsd2F5cyBlbmFibGVkXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmlldC1cdTAwM2VmcGVfbG9jayk7XG4rXHRvbGRfdmVyaWZ5X3RpbWVfbXMgPSBpZXQtXHUwMDNldmVyaWZ5X3RpbWVfbXM7XG4rXHRvbGRfdHhfbWluX2ZyYWdfc2l6ZSA9IGlldC1cdTAwM2V0eF9taW5fZnJhZ19zaXplO1xuK1x0b2xkX2ZwZV9lbmFibGVkID0gaWV0LVx1MDAzZWZwZV9lbmFibGVkO1xuK1x0b2xkX21hY192ZXJpZnlfY29uZmlndXJlID0gaWV0LVx1MDAzZW1hY192ZXJpZnlfY29uZmlndXJlO1xuK1xuK1x0aWV0LVx1MDAzZXZlcmlmeV90aW1lX21zID0gY2ZnLVx1MDAzZXZlcmlmeV90aW1lO1xuK1x0aWV0LVx1MDAzZXR4X21pbl9mcmFnX3NpemUgPSBjZmctXHUwMDNldHhfbWluX2ZyYWdfc2l6ZTtcbitcdGlldC1cdTAwM2VmcGVfZW5hYmxlZCA9IGNmZy1cdTAwM2V0eF9lbmFibGVkO1xuK1x0aWV0LVx1MDAzZW1hY192ZXJpZnlfY29uZmlndXJlID0gY2ZnLVx1MDAzZXZlcmlmeV9lbmFibGVkO1xuK1x0ZXJyID0gaWNzc2dfY29uZmlnX2lldGZwZShuZGV2LCBjZmctXHUwMDNldHhfZW5hYmxlZCk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdC8qIGljc3NnX2NvbmZpZ19pZXRmcGUncyBmYWxsYmFjayBwYXRoIGFscmVhZHkgY2xlYXJlZCBmcGVfYWN0aXZlLlxuK1x0XHQgKiBSZXN0b3JlIGFsbCBjb25maWcgZmllbGRzIHNvIGdldF9tbSgpIHJlcG9ydHMgdGhlIGNvbmZpZ3VyYXRpb25cbitcdFx0ICogdGhhdCBpcyBhY3R1YWxseSByZWZsZWN0ZWQgaW4gaGFyZHdhcmUuXG4rXHRcdCAqL1xuK1x0XHRpZXQtXHUwMDNldmVyaWZ5X3RpbWVfbXMgPSBvbGRfdmVyaWZ5X3RpbWVfbXM7XG4rXHRcdGlldC1cdTAwM2V0eF9taW5fZnJhZ19zaXplID0gb2xkX3R4X21pbl9mcmFnX3NpemU7XG4rXHRcdGlldC1cdTAwM2VmcGVfZW5hYmxlZCA9IG9sZF9mcGVfZW5hYmxlZDtcbitcdFx0aWV0LVx1MDAzZW1hY192ZXJpZnlfY29uZmlndXJlID0gb2xkX21hY192ZXJpZnlfY29uZmlndXJlO1xuK1x0fVxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmlldC1cdTAwM2VmcGVfbG9jayk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgdm9pZCBlbWFjX2dldF9tbV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbitcdFx0XHQgICAgICBzdHJ1Y3QgZXRodG9vbF9tbV9zdGF0cyAqcylcbit7XG4rXHRzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcbitcdGlmIChlbWFjLVx1MDAzZWlzX3NyMSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKCFlbWFjLVx1MDAzZXBydWV0aC1cdTAwM2VwYV9zdGF0cylcbitcdFx0cmV0dXJuO1xuK1xuK1x0ZW1hY191cGRhdGVfaGFyZHdhcmVfc3RhdHMoZW1hYyk7XG4rXG4rXHQvKiBIb2xkIHN0YXRzX2xvY2sgdG8gcHJldmVudCBpY3NzZ19zdGF0c193b3JrX2hhbmRsZXIgZnJvbSB1cGRhdGluZ1xuK1x0ICogcGFfc3RhdHNbXSBiZXR3ZWVuIHJlYWRzLCB3aGljaCBjb3VsZCB5aWVsZCBhIHRvcm4gdTY0IHZhbHVlIG9uXG4rXHQgKiAzMi1iaXQgYXJjaGl0ZWN0dXJlcy5cbitcdCAqL1xuK1x0c3Bpbl9sb2NrKFx1MDAyNmVtYWMtXHUwMDNlcHJ1ZXRoLVx1MDAzZXN0YXRzX2xvY2spO1xuK1x0LyogTUFDTWVyZ2VIb2xkQ291bnQgc3RhdHMgaXMgbm90IHRyYWNrZWQgYnkgdGhlIGZpcm13YXJlICovXG4rXHRzLVx1MDAzZU1BQ01lcmdlRnJhbWVBc3NPa0NvdW50ID0gZW1hY19nZXRfc3RhdF9ieV9uYW1lKGVtYWMsIFwiRldfUFJFRU1QVF9BU1NFTUJMWV9PS1wiKTtcbitcdHMtXHUwMDNlTUFDTWVyZ2VGcmFtZUFzc0Vycm9yQ291bnQgPSBlbWFjX2dldF9zdGF0X2J5X25hbWUoZW1hYywgXCJGV19QUkVFTVBUX0FTU0VNQkxZX0VSUlwiKTtcbitcdHMtXHUwMDNlTUFDTWVyZ2VGcmFnQ291bnRSeCA9IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShlbWFjLCBcIkZXX1BSRUVNUFRfRlJBR19DTlRfUlhcIik7XG4rXHRzLVx1MDAzZU1BQ01lcmdlRnJhZ0NvdW50VHggPSBlbWFjX2dldF9zdGF0X2J5X25hbWUoZW1hYywgXCJGV19QUkVFTVBUX0ZSQUdfQ05UX1RYXCIpO1xuK1x0cy1cdTAwM2VNQUNNZXJnZUZyYW1lU21kRXJyb3JDb3VudCA9IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShlbWFjLCBcIkZXX1BSRUVNUFRfQkFEX0ZSQUdcIik7XG4rXHRzcGluX3VubG9jayhcdTAwMjZlbWFjLVx1MDAzZXBydWV0aC1cdTAwM2VzdGF0c19sb2NrKTtcbit9XG4rXG4gY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGljc3NnX2V0aHRvb2xfb3BzID0ge1xuIFx0LmdldF9kcnZpbmZvID0gZW1hY19nZXRfZHJ2aW5mbyxcbiBcdC5nZXRfbXNnbGV2ZWwgPSBlbWFjX2dldF9tc2dsZXZlbCxcbkBAIC0zMTcsNSArNDQwLDggQEAgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGljc3NnX2V0aHRvb2xfb3BzID0ge1xuIFx0LnNldF9lZWUgPSBlbWFjX3NldF9lZWUsXG4gXHQubndheV9yZXNldCA9IGVtYWNfbndheV9yZXNldCxcbiBcdC5nZXRfcm1vbl9zdGF0cyA9IGVtYWNfZ2V0X3Jtb25fc3RhdHMsXG4rXHQuZ2V0X21tID0gZW1hY19nZXRfbW0sXG4rXHQuc2V0X21tID0gZW1hY19zZXRfbW0sXG4rXHQuZ2V0X21tX3N0YXRzID0gZW1hY19nZXRfbW1fc3RhdHMsXG4gfTtcbiBFWFBPUlRfU1lNQk9MX0dQTChpY3NzZ19ldGh0b29sX29wcyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguY1xuaW5kZXggNTkxYmU1YzgwNTZiNC4uMjgzYmUyN2EyNDBlOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguY1xuQEAgLTM1NywxMSArMzU3LDExIEBAIHN0YXRpYyB2b2lkIGVtYWNfYWRqdXN0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRcdH1cbiBcdFx0aWYgKCFlbWFjLVx1MDAzZWxpbmspIHtcbiBcdFx0XHRuZXdfc3RhdGUgPSB0cnVlO1xuLVx0XHRcdGVtYWMtXHUwMDNlbGluayA9IDE7XG4rXHRcdFx0V1JJVEVfT05DRShlbWFjLVx1MDAzZWxpbmssIDEpO1xuIFx0XHR9XG4gXHR9IGVsc2UgaWYgKGVtYWMtXHUwMDNlbGluaykge1xuIFx0XHRuZXdfc3RhdGUgPSB0cnVlO1xuLVx0XHRlbWFjLVx1MDAzZWxpbmsgPSAwO1xuK1x0XHRXUklURV9PTkNFKGVtYWMtXHUwMDNlbGluaywgMCk7XG4gXG4gXHRcdC8qIGYvdyBzaG91bGQgc3VwcG9ydCAxMDAgXHUwMDI2IDEwMDAgKi9cbiBcdFx0ZW1hYy1cdTAwM2VzcGVlZCA9IFNQRUVEXzEwMDA7XG5AQCAtMzkyLDYgKzM5Miw4IEBAIHN0YXRpYyB2b2lkIGVtYWNfYWRqdXN0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0aWNzc2dfc2V0X3BvcnRfc3RhdGUoZW1hYywgSUNTU0dfRU1BQ19QT1JUX0RJU0FCTEUpO1xuIFx0XHR9XG4rXG4rXHRcdGljc3NnX3Fvc19saW5rX3N0YXRlX3VwZGF0ZShuZGV2KTtcbiBcdH1cbiBcbiBcdGlmIChlbWFjLVx1MDAzZWxpbmspIHtcbkBAIC0xNjUyLDYgKzE2NTQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVtYWNfbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9faHd0c3RhbXBfZ2V0ID0gaWNzc2dfbmRvX2dldF90c19jb25maWcsXG4gXHQubmRvX2h3dHN0YW1wX3NldCA9IGljc3NnX25kb19zZXRfdHNfY29uZmlnLFxuIFx0Lm5kb194c2tfd2FrZXVwID0gcHJ1ZXRoX3hza193YWtldXAsXG4rXHQubmRvX3NldHVwX3RjID0gaWNzc2dfcW9zX25kb19zZXR1cF90YyxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgcHJ1ZXRoX25ldGRldl9pbml0KHN0cnVjdCBwcnVldGggKnBydWV0aCxcbkBAIC0xNjg2LDYgKzE2ODksOCBAQCBzdGF0aWMgaW50IHBydWV0aF9uZXRkZXZfaW5pdChzdHJ1Y3QgcHJ1ZXRoICpwcnVldGgsXG4gXG4gXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZlbWFjLVx1MDAzZXN0YXRzX3dvcmssIGljc3NnX3N0YXRzX3dvcmtfaGFuZGxlcik7XG4gXG4rXHRpY3NzZ19xb3NfaW5pdChuZGV2KTtcbitcbiBcdHJldCA9IHBydXNzX3JlcXVlc3RfbWVtX3JlZ2lvbihwcnVldGgtXHUwMDNlcHJ1c3MsXG4gXHRcdFx0XHQgICAgICAgcG9ydCA9PSBQUlVFVEhfUE9SVF9NSUkwID9cbiBcdFx0XHRcdCAgICAgICBQUlVTU19NRU1fRFJBTTAgOiBQUlVTU19NRU1fRFJBTTEsXG5AQCAtMTc5Myw2ICsxNzk4LDcgQEAgc3RhdGljIGludCBwcnVldGhfbmV0ZGV2X2luaXQoc3RydWN0IHBydWV0aCAqcHJ1ZXRoLFxuIGZyZWU6XG4gXHRwcnVzc19yZWxlYXNlX21lbV9yZWdpb24ocHJ1ZXRoLVx1MDAzZXBydXNzLCBcdTAwMjZlbWFjLVx1MDAzZWRyYW0pO1xuIGZyZWVfbmRldjpcbitcdG11dGV4X2Rlc3Ryb3koXHUwMDI2ZW1hYy1cdTAwM2Vxb3MuaWV0LmZwZV9sb2NrKTtcbiBcdGVtYWMtXHUwMDNlbmRldiA9IE5VTEw7XG4gXHRwcnVldGgtXHUwMDNlZW1hY1ttYWNdID0gTlVMTDtcbiBcdGZyZWVfbmV0ZGV2KG5kZXYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmhcbmluZGV4IGRmOTNkMTVjNWI3ODYuLmFkOTA2MTQwODA1MGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmhcbkBAIC00NCwxMCArNDQsMTIgQEBcbiAjaW5jbHVkZSBcImljc3NnX2NvbmZpZy5oXCJcbiAjaW5jbHVkZSBcImljc3NfaWVwLmhcIlxuICNpbmNsdWRlIFwiaWNzc2dfc3dpdGNoX21hcC5oXCJcbisjaW5jbHVkZSBcImljc3NnX3Fvcy5oXCJcbisjaW5jbHVkZSBcImljc3NnX3N0YXRzLmhcIlxuIFxuLSNkZWZpbmUgUFJVRVRIX01BWF9NVFUgICAgICAgICAgKDIwMDAgLSBFVEhfSExFTiAtIEVUSF9GQ1NfTEVOKVxuLSNkZWZpbmUgUFJVRVRIX01JTl9QS1RfU0laRSAgICAgKFZMQU5fRVRIX1pMRU4pXG4tI2RlZmluZSBQUlVFVEhfTUFYX1BLVF9TSVpFICAgICAoUFJVRVRIX01BWF9NVFUgKyBFVEhfSExFTiArIEVUSF9GQ1NfTEVOKVxuKyNkZWZpbmUgUFJVRVRIX01BWF9NVFVcdFx0KDIwMDAgLSBFVEhfSExFTiAtIEVUSF9GQ1NfTEVOKVxuKyNkZWZpbmUgUFJVRVRIX01JTl9QS1RfU0laRVx0KFZMQU5fRVRIX1pMRU4pXG4rI2RlZmluZSBQUlVFVEhfTUFYX1BLVF9TSVpFXHQoUFJVRVRIX01BWF9NVFUgKyBFVEhfSExFTiArIEVUSF9GQ1NfTEVOKVxuIFxuICNkZWZpbmUgSUNTU19TTElDRTBcdDBcbiAjZGVmaW5lIElDU1NfU0xJQ0UxXHQxXG5AQCAtNTcsMTIgKzU5LDE2IEBAXG4gXG4gI2RlZmluZSBJQ1NTR19NQVhfUkZMT1dTXHQ4XHQvKiBwZXIgc2xpY2UgKi9cbiBcbi0jZGVmaW5lIElDU1NHX05VTV9QQV9TVEFUU1x0MzJcbi0jZGVmaW5lIElDU1NHX05VTV9NSUlHX1NUQVRTXHQ2MFxuKyNkZWZpbmUgSUNTU0dfTlVNX1BBX1NUQVRTXHRBUlJBWV9TSVpFKGljc3NnX2FsbF9wYV9zdGF0cylcbisjZGVmaW5lIElDU1NHX05VTV9NSUlHX1NUQVRTXHRBUlJBWV9TSVpFKGljc3NnX2FsbF9taWlnX3N0YXRzKVxuIC8qIE51bWJlciBvZiBJQ1NTRyByZWxhdGVkIHN0YXRzICovXG4gI2RlZmluZSBJQ1NTR19OVU1fU1RBVFMgKElDU1NHX05VTV9NSUlHX1NUQVRTICsgSUNTU0dfTlVNX1BBX1NUQVRTKVxuKy8qIE1JSUcgc3RhdHMgd2l0aCBzdGFuZGFyZCB1QVBJIGVxdWl2YWxlbnRzIChleGNsdWRlZCBmcm9tIGV0aHRvb2wgLVMpICovXG4gI2RlZmluZSBJQ1NTR19OVU1fU1RBTkRBUkRfU1RBVFMgMzFcbi0jZGVmaW5lIElDU1NHX05VTV9FVEhUT09MX1NUQVRTIChJQ1NTR19OVU1fU1RBVFMgLSBJQ1NTR19OVU1fU1RBTkRBUkRfU1RBVFMpXG4rLyogUEEgc3RhdHMgd2l0aCBzdGFuZGFyZCB1QVBJIGVxdWl2YWxlbnRzLCBleHBvc2VkIHZpYSBnZXRfbW1fc3RhdHMgb25seSAqL1xuKyNkZWZpbmUgSUNTU0dfTlVNX1BBX1NUQU5EQVJEX1NUQVRTIDVcbisjZGVmaW5lIElDU1NHX05VTV9FVEhUT09MX1NUQVRTIChJQ1NTR19OVU1fU1RBVFMgLSBJQ1NTR19OVU1fU1RBTkRBUkRfU1RBVFMgLSBcXFxuK1x0XHRcdFx0IElDU1NHX05VTV9QQV9TVEFOREFSRF9TVEFUUylcbiBcbiAjZGVmaW5lIElFUF9ERUZBVUxUX0NZQ0xFX1RJTUVfTlNcdDEwMDAwMDBcdC8qIDEgbXMgKi9cbiBcbkBAIC0yNTQsNiArMjYwLDcgQEAgc3RydWN0IHBydWV0aF9lbWFjIHtcbiBcdHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2c7XG4gXHRzdHJ1Y3QgeGRwX2F0dGFjaG1lbnRfaW5mbyB4ZHBpO1xuIFx0aW50IHhza19xaWQ7XG4rXHRzdHJ1Y3QgcHJ1ZXRoX3FvcyBxb3M7XG4gfTtcbiBcbiAvKiBUaGUgYnVmIGluY2x1ZGVzIGhlYWRyb29tIGNvbXBhdGlibGUgd2l0aCBib3RoIHNrYiBhbmQgeGRwZiAqL1xuQEAgLTQ1OCw3ICs0NjUsNyBAQCBpbnQgZW1hY19mZGJfZmxvd19pZF91cGRhdGVkKHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYyk7XG4gXG4gdm9pZCBpY3NzZ19zdGF0c193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiB2b2lkIGVtYWNfdXBkYXRlX2hhcmR3YXJlX3N0YXRzKHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYyk7XG4taW50IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMsIGNoYXIgKnN0YXRfbmFtZSk7XG4rdTY0IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMsIGNoYXIgKnN0YXRfbmFtZSk7XG4gXG4gLyogQ29tbW9uIGZ1bmN0aW9ucyAqL1xuIHZvaWQgcHJ1ZXRoX2NsZWFudXBfcnhfY2hucyhzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcW9zLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19xb3MuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjI3YTk1M2Q5ODE1Mzhcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3Fvcy5jXG5AQCAtMCwwICsxLDMwNSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogVGV4YXMgSW5zdHJ1bWVudHMgSUNTU0cgUFJVRVRIIFFvUyBzdWJtb2R1bGVcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjMgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vXG4rICovXG4rXG4rI2luY2x1ZGUgXCJpY3NzZ19wcnVldGguaFwiXG4rI2luY2x1ZGUgXCJpY3NzZ19zd2l0Y2hfbWFwLmhcIlxuK1xuK3N0YXRpYyB2b2lkIGljc3NnX2lldF9zZXRfcHJlZW1wdF9tYXNrKHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYylcbit7XG4rXHR2b2lkIF9faW9tZW0gKmNvbmZpZyA9IGVtYWMtXHUwMDNlZHJhbS52YSArIElDU1NHX0NPTkZJR19PRkZTRVQ7XG4rXHRzdHJ1Y3QgcHJ1ZXRoX3Fvc19tcXByaW8gKnBfbXFwcmlvID0gXHUwMDI2ZW1hYy1cdTAwM2Vxb3MubXFwcmlvO1xuK1x0c3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXHUwMDI2cF9tcXByaW8tXHUwMDNlcW9wdDtcbitcdHN0cnVjdCBwcnVldGhfcW9zX2lldCAqaWV0ID0gXHUwMDI2ZW1hYy1cdTAwM2Vxb3MuaWV0O1xuK1x0aW50IHByZW1wdF9tYXNrID0gMCwgaTtcbitcdHU4IHRjLCBudW1fdGM7XG4rXG4rXHRpZiAoIWlldC1cdTAwM2VwcmVlbXB0aWJsZV90Y3MpXG4rXHRcdGdvdG8gcmVzZXRfaHc7XG4rXG4rXHRpZiAoaWV0LVx1MDAzZWZwZV9hY3RpdmUpIHtcbitcdFx0LyogUmVzZXQgYWxsIFFfTUFQIGVudHJpZXMgZmlyc3QgdG8gY2xlYXIgYW55IHN0YWxlIHByZWVtcHRpYmxlXG4rXHRcdCAqIGVudHJpZXMgZnJvbSBhIHByaW9yIHdpZGVyIFRDIG1hcHBpbmcuXG4rXHRcdCAqL1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJQ1NTR19NQVhfVENfUVVFVUVTOyBpKyspXG4rXHRcdFx0d3JpdGViKDAsIGNvbmZpZyArIEVYUFJFU1NfUFJFX0VNUFRJVkVfUV9NQVAgKyBpKTtcbitcbitcdFx0LyogQ29uZmlndXJlIHF1ZXVlcyBmb3IgdXNlciByZXF1ZXN0ZWQgcHJlZW1wdGlibGUgdGMgbWFwICovXG4rXHRcdG51bV90YyA9IHBfbXFwcmlvLVx1MDAzZXFvcHQubnVtX3RjO1xuK1x0XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIG51bV90YzsgdGMrKykge1xuK1x0XHRcdC8qIGNoZWNrIGlmIHRoZSB0YyBpcyBwcmVlbXB0aXZlIG9yIG5vdCAqL1xuK1x0XHRcdGlmIChpZXQtXHUwMDNlcHJlZW1wdGlibGVfdGNzIFx1MDAyNiBCSVQodGMpKSB7XG4rXHRcdFx0XHQvKiBTZXQgdGhlIHF1ZXVlcyBhcyBwcmVlbXB0aXZlIHF1ZXVlcyAqL1xuK1x0XHRcdFx0Zm9yIChpID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdOyBpIFx1MDAzYyBxb3B0LVx1MDAzZW9mZnNldFt0Y10gKyBxb3B0LVx1MDAzZWNvdW50W3RjXTsgaSsrKSB7XG4rXHRcdFx0XHRcdHdyaXRlYihCSVQoNCksXG4rXHRcdFx0XHRcdCAgICAgICBjb25maWcgKyBFWFBSRVNTX1BSRV9FTVBUSVZFX1FfTUFQICsgaSk7XG4rXHRcdFx0XHR9XG4rXHRcdFx0fSBlbHNlIHtcbitcdFx0XHRcdC8qIEFjY3VtdWxhdGUgZXhwcmVzcyBxdWV1ZSBiaXRzIGZvciB0aGUgbWFzayAqL1xuK1x0XHRcdFx0Zm9yIChpID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdOyBpIFx1MDAzYyBxb3B0LVx1MDAzZW9mZnNldFt0Y10gKyBxb3B0LVx1MDAzZWNvdW50W3RjXTsgaSsrKVxuK1x0XHRcdFx0XHRwcmVtcHRfbWFzayB8PSBCSVQoaSk7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHRcdHdyaXRlYihwcmVtcHRfbWFzaywgY29uZmlnICsgRVhQUkVTU19QUkVfRU1QVElWRV9RX01BU0spO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rcmVzZXRfaHc6XG4rXHQvKiBSZXNldCB0byBkZWZhdWx0OiBhbGwgcXVldWVzIGFzIGV4cHJlc3MgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElDU1NHX01BWF9UQ19RVUVVRVM7IGkrKylcbitcdFx0d3JpdGViKDAsIGNvbmZpZyArIEVYUFJFU1NfUFJFX0VNUFRJVkVfUV9NQVAgKyBpKTtcbitcdHdyaXRlYihJQ1NTR19FWFBSRVNTX1FfTUFTS19BTEwsIGNvbmZpZyArIEVYUFJFU1NfUFJFX0VNUFRJVkVfUV9NQVNLKTtcbit9XG4rXG4rc3RhdGljIGludCBpY3NzZ19pZXRfdmVyaWZ5X3dhaXQoc3RydWN0IHBydWV0aF9lbWFjICplbWFjKVxuK3tcbitcdHZvaWQgX19pb21lbSAqY29uZmlnID0gZW1hYy1cdTAwM2VkcmFtLnZhICsgSUNTU0dfQ09ORklHX09GRlNFVDtcbitcdHN0cnVjdCBwcnVldGhfcW9zX2lldCAqaWV0ID0gXHUwMDI2ZW1hYy1cdTAwM2Vxb3MuaWV0O1xuK1x0dW5zaWduZWQgbG9uZyBkZWxheV91cywgdGltZW91dF91cztcbitcdHUzMiBzdGF0dXM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0ZGVsYXlfdXMgPSBpZXQtXHUwMDNldmVyaWZ5X3RpbWVfbXMgKiAxMDAwO1xuK1x0dGltZW91dF91cyA9IGRlbGF5X3VzICogSUNTU0dfSUVUX1ZFUklGWV9BVFRFTVBUUztcbitcbitcdHJldCA9IHJlYWRiX3BvbGxfdGltZW91dChjb25maWcgKyBQUkVfRU1QVElPTl9WRVJJRllfU1RBVFVTLFxuK1x0XHRcdFx0IHN0YXR1cyxcbitcdFx0XHRcdCBzdGF0dXMgPT0gSUNTU0dfSUVURlBFX1NUQVRFX1NVQ0NFRURFRCB8fFxuK1x0XHRcdFx0IHN0YXR1cyA9PSBJQ1NTR19JRVRGUEVfU1RBVEVfRkFJTEVELFxuK1x0XHRcdFx0IGRlbGF5X3VzLFxuK1x0XHRcdFx0IHRpbWVvdXRfdXMpO1xuK1xuK1x0aWV0LVx1MDAzZXZlcmlmeV9zdGF0dXMgPSBzdGF0dXM7XG4rXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgc3RhdHVzID09IElDU1NHX0lFVEZQRV9TVEFURV9GQUlMRUQpXG4rXHRcdHJldHVybiAtRUlPO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyogRGlyZWN0IHN5bmNocm9ub3VzIGNvbmZpZ3VyYXRpb24gb2YgSUVUIEZQRS5cbisgKiBDYWxsZXIgbXVzdCBob2xkIGlldC1cdTAwM2VmcGVfbG9jay5cbisgKi9cbitpbnQgaWNzc2dfY29uZmlnX2lldGZwZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgYm9vbCBlbmFibGUpXG4re1xuK1x0c3RydWN0IHBydWV0aF9lbWFjICplbWFjID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXHR2b2lkIF9faW9tZW0gKmNvbmZpZyA9IGVtYWMtXHUwMDNlZHJhbS52YSArIElDU1NHX0NPTkZJR19PRkZTRVQ7XG4rXHRzdHJ1Y3QgcHJ1ZXRoX3Fvc19pZXQgKmlldCA9IFx1MDAyNmVtYWMtXHUwMDNlcW9zLmlldDtcbitcdGludCByZXQ7XG4rXHR1OCB2YWw7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmlldC1cdTAwM2VmcGVfbG9jayk7XG4rXG4rXHRpZiAoIVJFQURfT05DRShlbWFjLVx1MDAzZWxpbmspKSB7XG4rXHRcdG5ldGRldl9kYmcobmRldiwgXCJjYW5ub3QgY2hhbmdlIElFVC9GUEUgc3RhdGUgd2hlbiBpbnRlcmZhY2UgaXMgZG93blxcblwiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHQvKiBVcGRhdGUgRlBFIFR4IGVuYWJsZSBiaXQgKFBSRV9FTVBUSU9OX0VOQUJMRV9UWCkgaWZcbitcdCAqIGZwZV9lbmFibGVkIGlzIHNldCB0byBlbmFibGUgTU0gaW4gVHggZGlyZWN0aW9uXG4rXHQgKi9cbitcdHdyaXRlYihlbmFibGUgPyAxIDogMCwgY29uZmlnICsgUFJFX0VNUFRJT05fRU5BQkxFX1RYKTtcbitcdHdyaXRldyhpZXQtXHUwMDNldHhfbWluX2ZyYWdfc2l6ZSArIEVUSF9GQ1NfTEVOLFxuK1x0ICAgICAgIGNvbmZpZyArIFBSRV9FTVBUSU9OX0FERF9GUkFHX1NJWkVfTE9DQUwpO1xuK1xuK1x0LyogSWYgRlBFIGlzIHRvIGJlIGVuYWJsZWQsIGZpcnN0IGNvbmZpZ3VyZSBNQUMgVmVyaWZ5IHN0YXRlXG4rXHQgKiBtYWNoaW5lIGluIGZpcm13YXJlIGFzIGZpcm13YXJlIGtpY2tzIHRoZSBWZXJpZnkgcHJvY2Vzc1xuK1x0ICogYXMgc29vbiBhcyBJQ1NTR19FTUFDX1BPUlRfUFJFTVBUX1RYX0VOQUJMRSBjb21tYW5kIGlzXG4rXHQgKiByZWNlaXZlZC5cbitcdCAqL1xuK1x0aWYgKGVuYWJsZSBcdTAwMjZcdTAwMjYgaWV0LVx1MDAzZW1hY192ZXJpZnlfY29uZmlndXJlKSB7XG4rXHRcdHdyaXRlYigxLCBjb25maWcgKyBQUkVfRU1QVElPTl9FTkFCTEVfVkVSSUZZKTtcbitcdFx0d3JpdGVsKGlldC1cdTAwM2V2ZXJpZnlfdGltZV9tcywgY29uZmlnICsgUFJFX0VNUFRJT05fVkVSSUZZX1RJTUUpO1xuK1x0fSBlbHNlIHtcbitcdFx0d3JpdGViKDAsIGNvbmZpZyArIFBSRV9FTVBUSU9OX0VOQUJMRV9WRVJJRlkpO1xuK1x0XHRpZXQtXHUwMDNldmVyaWZ5X3N0YXR1cyA9IElDU1NHX0lFVEZQRV9TVEFURV9ESVNBQkxFRDtcbitcdH1cbitcbitcdC8qIFNlbmQgY29tbWFuZCB0byBlbmFibGUgRlBFIFR4IHNpZGUuIFJ4IGlzIGFsd2F5cyBlbmFibGVkICovXG4rXHRyZXQgPSBpY3NzZ19zZXRfcG9ydF9zdGF0ZShlbWFjLFxuK1x0XHRcdFx0ICAgZW5hYmxlID8gSUNTU0dfRU1BQ19QT1JUX1BSRU1QVF9UWF9FTkFCTEUgOlxuK1x0XHRcdFx0XHQgICAgSUNTU0dfRU1BQ19QT1JUX1BSRU1QVF9UWF9ESVNBQkxFKTtcbitcdGlmIChyZXQpIHtcbitcdFx0bmV0ZGV2X2VycihuZGV2LCBcIlRYIHByZWVtcHQgJXMgY29tbWFuZCBmYWlsZWRcXG5cIixcbitcdFx0XHQgICBzdHJfZW5hYmxlX2Rpc2FibGUoZW5hYmxlKSk7XG4rXHRcdGdvdG8gZmFsbGJhY2s7XG4rXHR9XG4rXG4rXHRpZiAoZW5hYmxlIFx1MDAyNlx1MDAyNiBpZXQtXHUwMDNlbWFjX3ZlcmlmeV9jb25maWd1cmUpIHtcbitcdFx0cmV0ID0gaWNzc2dfaWV0X3ZlcmlmeV93YWl0KGVtYWMpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZGV2LCBcIk1BQyBNZXJnZSB2ZXJpZmljYXRpb24gZmFpbGVkOiAlc1xcblwiLFxuK1x0XHRcdFx0ICAgaWV0LVx1MDAzZXZlcmlmeV9zdGF0dXMgPT0gSUNTU0dfSUVURlBFX1NUQVRFX0ZBSUxFRCA/XG4rXHRcdFx0XHQgICBcImxpbmsgcGFydG5lciByZWplY3RlZFwiIDogXCJ0aW1lb3V0XCIpO1xuK1x0XHRcdGdvdG8gZGlzYWJsZV90eDtcbitcdFx0fVxuK1x0fSBlbHNlIGlmIChlbmFibGUpIHtcbitcdFx0LyogR2l2ZSBmaXJtd2FyZSBzb21lIHRpbWUgdG8gdXBkYXRlXG4rXHRcdCAqIFBSRV9FTVBUSU9OX0FDVElWRV9UWCBzdGF0ZVxuK1x0XHQgKi9cbitcdFx0dXNsZWVwX3JhbmdlKDEwMCwgMjAwKTtcbitcdH1cbitcbitcdGlmIChlbmFibGUpIHtcbitcdFx0dmFsID0gcmVhZGIoY29uZmlnICsgUFJFX0VNUFRJT05fQUNUSVZFX1RYKTtcbitcdFx0aWYgKHZhbCAhPSAxKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZGV2LFxuK1x0XHRcdFx0ICAgXCJGaXJtd2FyZSBmYWlscyB0byBhY3RpdmF0ZSBJRVQvRlBFXFxuXCIpO1xuK1x0XHRcdHJldCA9IC1FSU87XG4rXHRcdFx0Z290byBkaXNhYmxlX3R4O1xuK1x0XHR9XG4rXHRcdGlldC1cdTAwM2VmcGVfYWN0aXZlID0gdHJ1ZTtcbitcdH0gZWxzZSB7XG4rXHRcdGlldC1cdTAwM2VmcGVfYWN0aXZlID0gZmFsc2U7XG4rXHR9XG4rXG4rXHRpY3NzZ19pZXRfc2V0X3ByZWVtcHRfbWFzayhlbWFjKTtcbitcdG5ldGRldl9kYmcobmRldiwgXCJJRVQgRlBFICVzIHN1Y2Nlc3NmdWxseVxcblwiLFxuK1x0XHQgICBzdHJfZW5hYmxlX2Rpc2FibGUoZW5hYmxlKSk7XG4rXHRyZXR1cm4gMDtcbitcbitkaXNhYmxlX3R4OlxuK1x0aWNzc2dfc2V0X3BvcnRfc3RhdGUoZW1hYywgSUNTU0dfRU1BQ19QT1JUX1BSRU1QVF9UWF9ESVNBQkxFKTtcbitmYWxsYmFjazpcbitcdHdyaXRlYigwLCBjb25maWcgKyBQUkVfRU1QVElPTl9FTkFCTEVfVFgpO1xuK1x0d3JpdGViKDAsIGNvbmZpZyArIFBSRV9FTVBUSU9OX0VOQUJMRV9WRVJJRlkpO1xuK1x0aWV0LVx1MDAzZXZlcmlmeV9zdGF0dXMgPSBJQ1NTR19JRVRGUEVfU1RBVEVfRElTQUJMRUQ7XG4rXHRpZXQtXHUwMDNlZnBlX2FjdGl2ZSA9IGZhbHNlO1xuK1x0aWNzc2dfaWV0X3NldF9wcmVlbXB0X21hc2soZW1hYyk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbit2b2lkIGljc3NnX3Fvc19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuK3tcbitcdHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYyA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1x0c3RydWN0IHBydWV0aF9xb3NfaWV0ICppZXQgPSBcdTAwMjZlbWFjLVx1MDAzZXFvcy5pZXQ7XG4rXG4rXHRtdXRleF9pbml0KFx1MDAyNmlldC1cdTAwM2VmcGVfbG9jayk7XG4rXHQvKiBTZXQgZGVmYXVsdCB2YWx1ZXMgdG8gcHJldmVudCBnYXJiYWdlIHZhbHVlcyBkdXJpbmcgLmdldF9tbSgpICovXG4rXHRpZXQtXHUwMDNldmVyaWZ5X3RpbWVfbXMgPSBJQ1NTR19JRVRfTUFYX1ZFUklGWV9USU1FO1xuK1x0aWV0LVx1MDAzZXR4X21pbl9mcmFnX3NpemUgPSBFVEhfWkxFTjtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoaWNzc2dfcW9zX2luaXQpO1xuK1xuK3N0YXRpYyBpbnQgaWNzc2dfaWV0X2NoYW5nZV9wcmVlbXB0aWJsZV90Y3Moc3RydWN0IHBydWV0aF9lbWFjICplbWFjKVxuK3tcbitcdHN0cnVjdCBwcnVldGhfcW9zX2lldCAqaWV0ID0gXHUwMDI2ZW1hYy1cdTAwM2Vxb3MuaWV0O1xuK1x0aW50IHJldDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2aWV0LVx1MDAzZWZwZV9sb2NrKTtcbitcdGlmICghaWV0LVx1MDAzZWZwZV9lbmFibGVkIFx1MDAyNlx1MDAyNiAhaWV0LVx1MDAzZXByZWVtcHRpYmxlX3Rjcykge1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2aWV0LVx1MDAzZWZwZV9sb2NrKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXHRyZXQgPSBpY3NzZ19jb25maWdfaWV0ZnBlKGVtYWMtXHUwMDNlbmRldiwgaWV0LVx1MDAzZWZwZV9lbmFibGVkKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZpZXQtXHUwMDNlZnBlX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBlbWFjX3RjX3F1ZXJ5X2NhcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHZvaWQgKnR5cGVfZGF0YSlcbit7XG4rXHRzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlID0gdHlwZV9kYXRhO1xuK1xuK1x0c3dpdGNoIChiYXNlLVx1MDAzZXR5cGUpIHtcbitcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOiB7XG4rXHRcdHN0cnVjdCB0Y19tcXByaW9fY2FwcyAqY2FwcyA9IGJhc2UtXHUwMDNlY2FwcztcbitcbitcdFx0Y2Fwcy1cdTAwM2V2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludCBlbWFjX3RjX3NldHVwX21xcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdm9pZCAqdHlwZV9kYXRhKVxuK3tcbitcdHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYyA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1x0c3RydWN0IHBydWV0aF9xb3NfbXFwcmlvICpwX21xcHJpbyA9IFx1MDAyNmVtYWMtXHUwMDNlcW9zLm1xcHJpbztcbitcdHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8gPSB0eXBlX2RhdGE7XG4rXHRzdHJ1Y3QgcHJ1ZXRoX3Fvc19pZXQgKmlldCA9IFx1MDAyNmVtYWMtXHUwMDNlcW9zLmlldDtcbitcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuK1x0aW50IHRjLCBvZmZzZXQsIGNvdW50O1xuK1xuK1x0LyogVmFsaWRhdGUgcGFyYW1ldGVycyAqL1xuK1x0aWYgKHFvcHQtXHUwMDNlbnVtX3RjIFx1MDAzZSBJQ1NTR19NQVhfVENfUVVFVUVTKSB7XG4rXHRcdG5ldGRldl9lcnIobmRldiwgXCJOdW1iZXIgb2YgdHJhZmZpYyBjbGFzc2VzICgldSkgZXhjZWVkcyBoYXJkd2FyZSBsaW1pdFxcblwiLFxuK1x0XHRcdCAgIHFvcHQtXHUwMDNlbnVtX3RjKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfU0hBUEVSKSB7XG4rXHRcdG5ldGRldl9lcnIobmRldiwgXCJ0cmFmZmljIHNoYXBpbmcgaXMgbm90IHN1cHBvcnRlZFxcblwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgKFRDX01RUFJJT19GX01JTl9SQVRFIHwgVENfTVFQUklPX0ZfTUFYX1JBVEUpKSB7XG4rXHRcdG5ldGRldl9lcnIobmRldiwgXCJwZXItcXVldWUgcmF0ZSBsaW1pdGluZyBpcyBub3Qgc3VwcG9ydGVkXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAoIXFvcHQtXHUwMDNlbnVtX3RjKSB7XG4rXHRcdG5ldGRldl9yZXNldF90YyhuZGV2KTtcbitcdH0gZWxzZSB7XG4rXHRcdG5ldGRldl9zZXRfbnVtX3RjKG5kZXYsIHFvcHQtXHUwMDNlbnVtX3RjKTtcbitcbitcdFx0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMrKykge1xuK1x0XHRcdGNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4rXHRcdFx0b2Zmc2V0ID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdO1xuK1x0XHRcdG5ldGRldl9zZXRfdGNfcXVldWUobmRldiwgdGMsIGNvdW50LCBvZmZzZXQpO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmlldC1cdTAwM2VmcGVfbG9jayk7XG4rXHRpZiAoIXFvcHQtXHUwMDNlbnVtX3RjKSB7XG4rXHRcdGlldC1cdTAwM2VwcmVlbXB0aWJsZV90Y3MgPSAwO1xuK1x0fSBlbHNlIHtcbitcdFx0bWVtY3B5KFx1MDAyNnBfbXFwcmlvLVx1MDAzZXFvcHQsIHFvcHQsIHNpemVvZigqcW9wdCkpO1xuK1x0XHRpZXQtXHUwMDNlcHJlZW1wdGlibGVfdGNzID0gbXFwcmlvLVx1MDAzZXByZWVtcHRpYmxlX3RjcztcbitcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZpZXQtXHUwMDNlZnBlX2xvY2spO1xuK1xuK1x0bmV0ZGV2X2RiZyhuZGV2LCBcImRldi1cdTAwM2VudW1fdGMgJXUgZGV2LVx1MDAzZXJlYWxfbnVtX3R4X3F1ZXVlcyAldVxcblwiLFxuK1x0XHQgICBuZGV2LVx1MDAzZW51bV90YywgbmRldi1cdTAwM2VyZWFsX251bV90eF9xdWV1ZXMpO1xuK1xuK1x0cmV0dXJuIGljc3NnX2lldF9jaGFuZ2VfcHJlZW1wdGlibGVfdGNzKGVtYWMpO1xuK31cbitcbitpbnQgaWNzc2dfcW9zX25kb19zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG4rXHRcdFx0ICAgdm9pZCAqdHlwZV9kYXRhKVxuK3tcbitcdHN3aXRjaCAodHlwZSkge1xuK1x0Y2FzZSBUQ19RVUVSWV9DQVBTOlxuK1x0XHRyZXR1cm4gZW1hY190Y19xdWVyeV9jYXBzKG5kZXYsIHR5cGVfZGF0YSk7XG4rXHRjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzpcbitcdFx0cmV0dXJuIGVtYWNfdGNfc2V0dXBfbXFwcmlvKG5kZXYsIHR5cGVfZGF0YSk7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGljc3NnX3Fvc19uZG9fc2V0dXBfdGMpO1xuK1xuK3ZvaWQgaWNzc2dfcW9zX2xpbmtfc3RhdGVfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuK3tcbitcdHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYyA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1x0c3RydWN0IHBydWV0aF9xb3NfaWV0ICppZXQgPSBcdTAwMjZlbWFjLVx1MDAzZXFvcy5pZXQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFSRUFEX09OQ0UoZW1hYy1cdTAwM2VsaW5rKSkge1xuK1x0XHQvKiBDbGVhciBGUEUgYWN0aXZlIHN0YXRlIG9uIGxpbmstZG93biBzbyBnZXRfbW0oKSByZXBvcnRzXG4rXHRcdCAqIGFjY3VyYXRlIHR4X2FjdGl2ZSBhbmQgdmVyaWZ5X3N0YXR1cyB3aGlsZSBsaW5rIGlzIGRvd24uXG4rXHRcdCAqL1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNmlldC1cdTAwM2VmcGVfbG9jayk7XG4rXHRcdGlldC1cdTAwM2VmcGVfYWN0aXZlID0gZmFsc2U7XG4rXHRcdGlldC1cdTAwM2V2ZXJpZnlfc3RhdHVzID0gSUNTU0dfSUVURlBFX1NUQVRFX0RJU0FCTEVEO1xuK1x0XHRpY3NzZ19pZXRfc2V0X3ByZWVtcHRfbWFzayhlbWFjKTtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmlldC1cdTAwM2VmcGVfbG9jayk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHJldCA9IGljc3NnX2lldF9jaGFuZ2VfcHJlZW1wdGlibGVfdGNzKGVtYWMpO1xuK1x0aWYgKHJldClcbitcdFx0bmV0ZGV2X2RiZyhuZGV2LCBcIklFVCBGUEUgJXMgZmFpbGVkXFxuXCIsXG4rXHRcdFx0ICAgc3RyX2VuYWJsZV9kaXNhYmxlKGlldC1cdTAwM2VmcGVfZW5hYmxlZCkpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChpY3NzZ19xb3NfbGlua19zdGF0ZV91cGRhdGUpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3Fvcy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcW9zLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lODI2Y2U0YmNmZDk2XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19xb3MuaFxuQEAgLTAsMCArMSw2OCBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rLyogQ29weXJpZ2h0IChDKSAyMDIzIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tL1xuKyAqL1xuK1xuKyNpZm5kZWYgX19ORVRfVElfSUNTU0dfUU9TX0hcbisjZGVmaW5lIF9fTkVUX1RJX0lDU1NHX1FPU19IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYXRvbWljLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxuK1xuKyNkZWZpbmUgSUNTU0dfTUFYX1RDX1FVRVVFU1x0XHRcdDhcbisjZGVmaW5lIElDU1NHX0VYUFJFU1NfUV9NQVNLX0FMTFx0XHQweEZGXG4rI2RlZmluZSBJQ1NTR19JRVRfTUFYX1ZFUklGWV9USU1FXHRcdDEyOFxuKyNkZWZpbmUgSUNTU0dfSUVUX01JTl9WRVJJRllfVElNRVx0XHQxXG4rI2RlZmluZSBJQ1NTR19JRVRfVkVSSUZZX0FUVEVNUFRTXHRcdDNcbitcbisvKipcbisgKiBlbnVtIGljc3NnX2lldGZwZV92ZXJpZnlfc3RhdGVzIC0gc3RhdHVzIG9mIE1NIFZlcmlmeSByZXR1cm5lZCBieSBmaXJtd2FyZVxuKyAqIEBJQ1NTR19JRVRGUEVfU1RBVEVfVU5LTk9XTjpcbisgKlx0dmVyaWZpY2F0aW9uIHN0YXR1cyBpcyB1bmtub3duXG4rICogQElDU1NHX0lFVEZQRV9TVEFURV9JTklUSUFMOlxuKyAqXHRGaXJtd2FyZSByZXR1cm5zIHRoaXMgaWYgdmVyaWZ5IHN0YXRlIGRpYWdyYW0gaXMgaWRsZVxuKyAqIEBJQ1NTR19JRVRGUEVfU1RBVEVfVkVSSUZZSU5HOlxuKyAqXHRGaXJtd2FyZSByZXR1cm5zIHRoaXMgaWYgdmVyaWZpY2F0aW9uIGlzIG9uZ29pbmdcbisgKiBASUNTU0dfSUVURlBFX1NUQVRFX1NVQ0NFRURFRDpcbisgKlx0RmlybXdhcmUgcmV0dXJucyB0aGlzIGlmIHZlcmlmeSBzdGF0ZSBkaWFncmFtIGNvbXBsZXRlcyB2ZXJpZmljYXRpb25cbisgKiBASUNTU0dfSUVURlBFX1NUQVRFX0ZBSUxFRDpcbisgKlx0RmlybXdhcmUgcmV0dXJucyB0aGlzIGlmIHZlcmlmeSBzdGF0ZSBkaWFncmFtIGZhaWxzIGR1cmluZyB2ZXJpZmljYXRpb25cbisgKiBASUNTU0dfSUVURlBFX1NUQVRFX0RJU0FCTEVEOlxuKyAqXHR2ZXJpZmljYXRpb24gaXMgZGlzYWJsZWQgYnkgdGhlIGRyaXZlclxuKyAqL1xuK2VudW0gaWNzc2dfaWV0ZnBlX3ZlcmlmeV9zdGF0ZXMge1xuK1x0SUNTU0dfSUVURlBFX1NUQVRFX1VOS05PV04gPSAwLFxuK1x0SUNTU0dfSUVURlBFX1NUQVRFX0lOSVRJQUwsXG4rXHRJQ1NTR19JRVRGUEVfU1RBVEVfVkVSSUZZSU5HLFxuK1x0SUNTU0dfSUVURlBFX1NUQVRFX1NVQ0NFRURFRCxcbitcdElDU1NHX0lFVEZQRV9TVEFURV9GQUlMRUQsXG4rXHRJQ1NTR19JRVRGUEVfU1RBVEVfRElTQUJMRURcbit9O1xuK1xuK3N0cnVjdCBwcnVldGhfcW9zX21xcHJpbyB7XG4rXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgcW9wdDtcbit9O1xuK1xuK3N0cnVjdCBwcnVldGhfcW9zX2lldCB7XG4rXHRib29sIGZwZV9lbmFibGVkO1xuK1x0Ym9vbCBtYWNfdmVyaWZ5X2NvbmZpZ3VyZTtcbitcdHUzMiB0eF9taW5fZnJhZ19zaXplO1xuK1x0dTMyIHZlcmlmeV90aW1lX21zO1xuK1x0Ym9vbCBmcGVfYWN0aXZlO1xuK1x0ZW51bSBpY3NzZ19pZXRmcGVfdmVyaWZ5X3N0YXRlcyB2ZXJpZnlfc3RhdHVzO1xuK1x0LyogZnBlIG11dGV4IHByb3RlY3RzIGFsbCBGUEUgb3BlcmF0aW9ucyBmb3Igc3luY2hyb25pemF0aW9uICovXG4rXHRzdHJ1Y3QgbXV0ZXggZnBlX2xvY2s7XG4rXHR1OCBwcmVlbXB0aWJsZV90Y3M7XG4rfTtcbitcbitzdHJ1Y3QgcHJ1ZXRoX3FvcyB7XG4rXHRzdHJ1Y3QgcHJ1ZXRoX3Fvc19pZXQgaWV0O1xuK1x0c3RydWN0IHBydWV0aF9xb3NfbXFwcmlvIG1xcHJpbztcbit9O1xuK1xuK3ZvaWQgaWNzc2dfcW9zX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuK3ZvaWQgaWNzc2dfcW9zX2xpbmtfc3RhdGVfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbitpbnQgaWNzc2dfcW9zX25kb19zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG4rXHRcdFx0ICAgdm9pZCAqdHlwZV9kYXRhKTtcbitpbnQgaWNzc2dfY29uZmlnX2lldGZwZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgYm9vbCBlbmFibGUpO1xuKyNlbmRpZiAvKiBfX05FVF9USV9JQ1NTR19RT1NfSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3N0YXRzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zdGF0cy5jXG5pbmRleCA3MTU5YmFhMDE1NWNmLi5jZmRiNmY1ZGM1ZGExIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfc3RhdHMuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfc3RhdHMuY1xuQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBpY3NzZ19zdGF0c193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChpY3NzZ19zdGF0c193b3JrX2hhbmRsZXIpO1xuIFxuLWludCBlbWFjX2dldF9zdGF0X2J5X25hbWUoc3RydWN0IHBydWV0aF9lbWFjICplbWFjLCBjaGFyICpzdGF0X25hbWUpXG4rdTY0IGVtYWNfZ2V0X3N0YXRfYnlfbmFtZShzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMsIGNoYXIgKnN0YXRfbmFtZSlcbiB7XG4gXHRpbnQgaTtcbiBcbkBAIC05MSw1ICs5MSw1IEBAIGludCBlbWFjX2dldF9zdGF0X2J5X25hbWUoc3RydWN0IHBydWV0aF9lbWFjICplbWFjLCBjaGFyICpzdGF0X25hbWUpXG4gXHR9XG4gXG4gXHRuZXRkZXZfZXJyKGVtYWMtXHUwMDNlbmRldiwgXCJJbnZhbGlkIHN0YXRzICVzXFxuXCIsIHN0YXRfbmFtZSk7XG4tXHRyZXR1cm4gLUVJTlZBTDtcbitcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zdGF0cy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfc3RhdHMuaFxuaW5kZXggNWVjMGIzOGUwYzY3ZC4uYjg2ZGE4ZGEyM2ExOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3N0YXRzLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3N0YXRzLmhcbkBAIC04LDggKzgsNiBAQFxuICNpZm5kZWYgX19ORVRfVElfSUNTU0dfU1RBVFNfSFxuICNkZWZpbmUgX19ORVRfVElfSUNTU0dfU1RBVFNfSFxuIFxuLSNpbmNsdWRlIFwiaWNzc2dfcHJ1ZXRoLmhcIlxuLVxuICNkZWZpbmUgU1RBVFNfVElNRV9MSU1JVF8xR19NUyAgICAyNTAwMCAgICAvKiAyNSBzZWNvbmRzIEAgMUcgKi9cbiBcbiBzdHJ1Y3QgbWlpZ19zdGF0c19yZWdzIHtcbkBAIC0xNTUsNTAgKzE1Myw2MCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGljc3NnX21paWdfc3RhdHMgaWNzc2dfYWxsX21paWdfc3RhdHNbXSA9IHtcbiBcdElDU1NHX01JSUdfU1RBVFModHhfYnl0ZXMsIHRydWUpLFxuIH07XG4gXG4tI2RlZmluZSBJQ1NTR19QQV9TVEFUUyhmaWVsZClcdFxcXG4te1x0XHRcdFx0XFxcbi1cdCNmaWVsZCxcdFx0XHRcXFxuLVx0ZmllbGQsXHRcdFx0XFxcbisjZGVmaW5lIElDU1NHX1BBX1NUQVRTKGZpZWxkLCBzdGQpXHRcXFxuK3tcdFx0XHRcdFx0XFxcbitcdCNmaWVsZCxcdFx0XHRcdFxcXG4rXHRmaWVsZCxcdFx0XHRcdFxcXG4rXHRzdGQsXHRcdFx0XHRcXFxuIH1cbiBcbiBzdHJ1Y3QgaWNzc2dfcGFfc3RhdHMge1xuIFx0Y2hhciBuYW1lW0VUSF9HU1RSSU5HX0xFTl07XG4gXHR1MzIgb2Zmc2V0O1xuK1x0Ym9vbCBzdGFuZGFyZF9zdGF0cztcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNzc2dfcGFfc3RhdHMgaWNzc2dfYWxsX3BhX3N0YXRzW10gPSB7XG4tXHRJQ1NTR19QQV9TVEFUUyhGV19SVFVfUEtUX0RST1ApLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfUTBfT1ZFUkZMT1cpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfUTFfT1ZFUkZMT1cpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfUTJfT1ZFUkZMT1cpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfUTNfT1ZFUkZMT1cpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfUTRfT1ZFUkZMT1cpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfUTVfT1ZFUkZMT1cpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfUTZfT1ZFUkZMT1cpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfUTdfT1ZFUkZMT1cpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfRFJPUFBFRF9QS1QpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfUlhfRVJST1IpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfUlhfRFNfSU5WQUxJRCksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19UWF9EUk9QUEVEX1BBQ0tFVCksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19UWF9UU19EUk9QUEVEX1BBQ0tFVCksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19JTkZfUE9SVF9ESVNBQkxFRCksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19JTkZfU0FWKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX0lORl9TQV9ETCksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19JTkZfUE9SVF9CTE9DS0VEKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX0lORl9EUk9QX1RBR0dFRCksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19JTkZfRFJPUF9QUklPVEFHR0VEKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX0lORl9EUk9QX05PVEFHKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX0lORl9EUk9QX05PVE1FTUJFUiksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19SWF9FT0ZfU0hPUlRfRlJNRVJSKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX1JYX0IwX0RST1BfRUFSTFlfRU9GKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX1RYX0pVTUJPX0ZSTV9DVVRPRkYpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfUlhfRVhQX0ZSQUdfUV9EUk9QKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX1JYX0ZJRk9fT1ZFUlJVTiksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19DVVRfVEhSX1BLVCksXG4tXHRJQ1NTR19QQV9TVEFUUyhGV19IT1NUX1JYX1BLVF9DTlQpLFxuLVx0SUNTU0dfUEFfU1RBVFMoRldfSE9TVF9UWF9QS1RfQ05UKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX0hPU1RfRUdSRVNTX1FfUFJFX09WRVJGTE9XKSxcbi1cdElDU1NHX1BBX1NUQVRTKEZXX0hPU1RfRUdSRVNTX1FfRVhQX09WRVJGTE9XKSxcbitcdElDU1NHX1BBX1NUQVRTKEZXX1JUVV9QS1RfRFJPUCwgZmFsc2UpLFxuK1x0SUNTU0dfUEFfU1RBVFMoRldfUTBfT1ZFUkZMT1csIGZhbHNlKSxcbitcdElDU1NHX1BBX1NUQVRTKEZXX1ExX09WRVJGTE9XLCBmYWxzZSksXG4rXHRJQ1NTR19QQV9TVEFUUyhGV19RMl9PVkVSRkxPVywgZmFsc2UpLFxuK1x0SUNTU0dfUEFfU1RBVFMoRldfUTNfT1ZFUkZMT1csIGZhbHNlKSxcbitcdElDU1NHX1BBX1NUQVRTKEZXX1E0X09WRVJGTE9XLCBmYWxzZSksXG4rXHRJQ1NTR19QQV9TVEFUUyhGV19RNV9PVkVSRkxPVywgZmFsc2UpLFxuK1x0SUNTU0dfUEFfU1RBVFMoRldfUTZfT1ZFUkZMT1csIGZhbHNlKSxcbitcdElDU1NHX1BBX1NUQVRTKEZXX1E3X09WRVJGTE9XLCBmYWxzZSksXG4rXHRJQ1NTR19QQV9TVEFUUyhGV19EUk9QUEVEX1BLVCwgZmFsc2UpLFxuK1x0SUNTU0dfUEFfU1RBVFMoRldfUlhfRVJST1IsIGZhbHNlKSxcbitcdElDU1NHX1BBX1NUQVRTKEZXX1JYX0RTX0lOVkFMSUQsIGZhbHNlKSxcbitcdElDU1NHX1BBX1NUQVRTKEZXX1RYX0RST1BQRURfUEFDS0VULCBmYWxzZSksXG4rXHRJQ1NTR19QQV9TVEFUUyhGV19UWF9UU19EUk9QUEVEX1BBQ0tFVCwgZmFsc2UpLFxuK1x0SUNTU0dfUEFfU1RBVFMoRldfSU5GX1BPUlRfRElTQUJMRUQsIGZhbHNlKSxcbitcdElDU1NHX1BBX1NUQVRTKEZXX0lORl9TQVYsIGZhbHNlKSxcbitcdElDU1NHX1BBX1NUQVRTKEZXX0lORl9TQV9ETCwgZmFsc2UpLFxuK1x0SUNTU0dfUEFfU1RBVFMoRldfSU5GX1BPUlRfQkxPQ0tFRCwgZmFsc2UpLFxuK1x0SUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfVEFHR0VELCBmYWxzZSksXG4rXHRJQ1NTR19QQV9TVEFUUyhGV19JTkZfRFJPUF9QUklPVEFHR0VELCBmYWxzZSksXG4rXHRJQ1NTR19QQV9TVEFUUyhGV19JTkZfRFJPUF9OT1RBRywgZmFsc2UpLFxuK1x0SUNTU0dfUEFfU1RBVFMoRldfSU5GX0RST1BfTk9UTUVNQkVSLCBmYWxzZSksXG4rXHQvKiBNQUMgTWVyZ2UgY291bnRlcnM6IGV4cG9zZWQgdmlhIC5nZXRfbW1fc3RhdHMgc3RhbmRhcmQgdUFQSSxcbitcdCAqIG5vdCBkdXBsaWNhdGVkIGluIHRoZSBwcml2YXRlIGV0aHRvb2wgLVMgdGFibGUuXG4rXHQgKi9cbitcdElDU1NHX1BBX1NUQVRTKEZXX1BSRUVNUFRfQkFEX0ZSQUcsIHRydWUpLFxuK1x0SUNTU0dfUEFfU1RBVFMoRldfUFJFRU1QVF9BU1NFTUJMWV9FUlIsIHRydWUpLFxuK1x0SUNTU0dfUEFfU1RBVFMoRldfUFJFRU1QVF9GUkFHX0NOVF9UWCwgdHJ1ZSksXG4rXHRJQ1NTR19QQV9TVEFUUyhGV19QUkVFTVBUX0FTU0VNQkxZX09LLCB0cnVlKSxcbitcdElDU1NHX1BBX1NUQVRTKEZXX1BSRUVNUFRfRlJBR19DTlRfUlgsIHRydWUpLFxuK1x0SUNTU0dfUEFfU1RBVFMoRldfUlhfRU9GX1NIT1JUX0ZSTUVSUiwgZmFsc2UpLFxuK1x0SUNTU0dfUEFfU1RBVFMoRldfUlhfQjBfRFJPUF9FQVJMWV9FT0YsIGZhbHNlKSxcbitcdElDU1NHX1BBX1NUQVRTKEZXX1RYX0pVTUJPX0ZSTV9DVVRPRkYsIGZhbHNlKSxcbitcdElDU1NHX1BBX1NUQVRTKEZXX1JYX0VYUF9GUkFHX1FfRFJPUCwgZmFsc2UpLFxuK1x0SUNTU0dfUEFfU1RBVFMoRldfUlhfRklGT19PVkVSUlVOLCBmYWxzZSksXG4rXHRJQ1NTR19QQV9TVEFUUyhGV19DVVRfVEhSX1BLVCwgZmFsc2UpLFxuK1x0SUNTU0dfUEFfU1RBVFMoRldfSE9TVF9SWF9QS1RfQ05ULCBmYWxzZSksXG4rXHRJQ1NTR19QQV9TVEFUUyhGV19IT1NUX1RYX1BLVF9DTlQsIGZhbHNlKSxcbitcdElDU1NHX1BBX1NUQVRTKEZXX0hPU1RfRUdSRVNTX1FfUFJFX09WRVJGTE9XLCBmYWxzZSksXG4rXHRJQ1NTR19QQV9TVEFUUyhGV19IT1NUX0VHUkVTU19RX0VYUF9PVkVSRkxPVywgZmFsc2UpLFxuIH07XG4gXG4gI2VuZGlmIC8qIF9fTkVUX1RJX0lDU1NHX1NUQVRTX0ggKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zd2l0Y2hfbWFwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zd2l0Y2hfbWFwLmhcbmluZGV4IDdlMDUzYjhhZjNlY2UuLjg1NWZkNGVkMGIzZjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19zd2l0Y2hfbWFwLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3N3aXRjaF9tYXAuaFxuQEAgLTI1Niw2ICsyNTYsMTEgQEBcbiAjZGVmaW5lIEZXX0lORl9EUk9QX1BSSU9UQUdHRURcdFx0MHgwMTQ4XG4gI2RlZmluZSBGV19JTkZfRFJPUF9OT1RBR1x0XHQweDAxNTBcbiAjZGVmaW5lIEZXX0lORl9EUk9QX05PVE1FTUJFUlx0XHQweDAxNThcbisjZGVmaW5lIEZXX1BSRUVNUFRfQkFEX0ZSQUdcdFx0MHgwMTYwXG4rI2RlZmluZSBGV19QUkVFTVBUX0FTU0VNQkxZX0VSUlx0XHQweDAxNjhcbisjZGVmaW5lIEZXX1BSRUVNUFRfRlJBR19DTlRfVFhcdFx0MHgwMTcwXG4rI2RlZmluZSBGV19QUkVFTVBUX0FTU0VNQkxZX09LXHRcdDB4MDE3OFxuKyNkZWZpbmUgRldfUFJFRU1QVF9GUkFHX0NOVF9SWFx0XHQweDAxODBcbiAjZGVmaW5lIEZXX1JYX0VPRl9TSE9SVF9GUk1FUlJcdFx0MHgwMTg4XG4gI2RlZmluZSBGV19SWF9CMF9EUk9QX0VBUkxZX0VPRlx0XHQweDAxOTBcbiAjZGVmaW5lIEZXX1RYX0pVTUJPX0ZSTV9DVVRPRkZcdFx0MHgwMTk4XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzoxMDoyMy4xODM2NjkwOThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTcwNzg0Mjc3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIElDU1NHIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIGRpZ2dpbmcgaW50byB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2AgZGlyZWN0b3J5LiBUaGF0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiBteSBleHBlcnRpc2UgaW4gdGhpcyBhcmVhLiBTcGVjaWZpY2FsbHksIGl0J3MgaGl0dGluZyB0aGUgYE1ha2VmaWxlYCwgY29tbW9uIGNvZGUsIHRoZSBjb25maWcgaGVhZGVyLCBhbmQgdGhlbiBhIHNsZXcgb2YgZmlsZXMgcmVsYXRlZCB0byBldGh0b29sLCBQUlUgRXRoZXJuZXQgKHdoaWNoIGlzICp2ZXJ5KiBpbnRlcmVzdGluZyksIFFvUywgc3RhdGlzdGljcywgYW5kIHN3aXRjaCBtYXBwaW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJSaWdodCwgbGV0J3Mgc2VlIHdoYXQgVEkncyBJQ1NTRyBpcyBhbGwgYWJvdXQuXCIgSXMgaXQgYSBjb21tb25seSB1c2VkIG9yIHdlbGwtdW5kZXJzdG9vZCBibG9jaz8gQ2FuIEkgcmVwcm9kdWNlIHRoaXMgaW4gbXkgbGFiP1xuXG5UaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NCwgdGhhdCBpcyBnb29kLCBzbyBJIHdpbGwgaGF2ZSB0byBlbnN1cmUgdGhhdCBteSBlbnZpcm9ubWVudCBpcyBhbWQ2NCBjb21wYXRpYmxlLiBUaGlzIG1lYW5zIEknbGwgbmVlZCB0byB0aGluayBhYm91dCBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMg4oCTIGxpa2UgUUVNVSBvciBzeXprYWxsZXIg4oCTIHRvIHNlZSBpZiBJIGNhbiBldmVuICphY2Nlc3MqIHRoZSByZWxldmFudCBoYXJkd2FyZSBvciBlbXVsYXRlIGl0IGZvciB0ZXN0aW5nIGFuZCBkZWJ1Z2dpbmcuXG5cblJpZ2h0LCBJQ1NTRy4uLiBsZXQncyBqb2cgbXkgbWVtb3J5LiBBaCwgeWVzISBcIlRleGFzIEluc3RydW1lbnRzIElDU1NHIFBSVUVUSC5cIiBUaGF0J3MgdGhlIFBSVSBFdGhlcm5ldCBHaWdhYml0IHN1YnN5c3RlbSBvbiBUSSBTaXRhcmEgYW5kIEphY2ludG8gU29DcywgbGlrZSB0aGUgQU02NTR4IG9yIEFNNjR4LiBOb3csIGl0J3MgYmVjb21pbmcgbW9yZSBjbGVhci4gTmV4dCBzdGVwIHdpbGwgYmUgZGlnZ2luZyBpbnRvIHRoZSBLY29uZmlnIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1MDUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzoxMDozOC44OTE1MTQ2MDJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg2NTAzNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVElfSUNTU0dfUFJVRVRIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3RpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9MTY5PWNvbmZpZyBUTEFOXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTE4NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnOjE4Njpjb25maWcgVElfSUNTU0dfUFJVRVRIXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0xODctXFx0dHJpc3RhdGUgXFxcIlRJIEdpZ2FiaXQgUFJVIEV0aGVybmV0IGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctMjAzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6MjA0OmNvbmZpZyBUSV9JQ1NTR19QUlVFVEhfU1IxXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0yMDUtXFx0dHJpc3RhdGUgXFxcIlRJIEdpZ2FiaXQgUFJVIFNSMS4wIEV0aGVybmV0IGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL01ha2VmaWxlPTM1PW9iai0kKENPTkZJR19USV9LM19BTTY1X0NQVFMpICs9IGFtNjUtY3B0cy5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvTWFrZWZpbGUtMzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvTWFrZWZpbGU6Mzc6b2JqLSQoQ09ORklHX1RJX0lDU1NHX1BSVUVUSCkgKz0gaWNzc2ctcHJ1ZXRoLm8gaWNzc2cub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL01ha2VmaWxlLTM4LWljc3NnLXBydWV0aC15IDo9IGljc3NnL2ljc3NnX3BydWV0aC5vIGljc3NnL2ljc3NnX3N3aXRjaGRldi5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvTWFrZWZpbGUtMzktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvTWFrZWZpbGU6NDA6b2JqLSQoQ09ORklHX1RJX0lDU1NHX1BSVUVUSF9TUjEpICs9IGljc3NnLXBydWV0aC1zcjEubyBpY3NzZy5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvTWFrZWZpbGUtNDEtaWNzc2ctcHJ1ZXRoLXNyMS15IDo9IGljc3NnL2ljc3NnX3BydWV0aF9zcjEub1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmgtNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguaDo4OiNpZm5kZWYgX19ORVRfVElfSUNTU0dfUFJVRVRIX0hcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguaDo5OiNkZWZpbmUgX19ORVRfVElfSUNTU0dfUFJVRVRIX0hcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguaC0xMC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5oPTUyOT1zdGF0aWMgaW5saW5lIGJvb2wgcHJ1ZXRoX3hkcF9pc19lbmFibGVkKHN0cnVjdCBwcnVldGhfZW1hYyAqZW1hYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5oLTUzMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguaDo1MzQ6I2VuZGlmIC8qIF9fTkVUX1RJX0lDU1NHX1BSVUVUSF9IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjEwOjM4Ljk2MDE3MjIwMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI4NTQ5MDM1MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyB0aGUgVEkgRXRoZXJuZXQgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIFRJIEV0aGVybmV0IGRyaXZlciBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgYXQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWdgLCBhcm91bmQgbGluZSAxODYuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBzb21ldGhpbmcgaW50ZXJlc3RpbmcgaXMgaGFwcGVuaW5nIHRoZXJlLCBsaWtlbHkgcmVsYXRlZCB0byBhIGZlYXR1cmUgZ2F0ZSwgZGVwZW5kZW5jeSBjaGVjaywgb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0J3MgY2F1c2luZyBtZSBzb21lIGhlYWQtc2NyYXRjaGluZy4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIHRoZSBjb25kaXRpb24gdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIHNvbWUgZnVuY3Rpb25hbGl0eSwgcGVyaGFwcyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgdmFyaWFudCwgcG93ZXIgbWFuYWdlbWVudCBmZWF0dXJlLCBvciBhIGRlYnVnIHNldHRpbmcuIFRoZSBsaW5lIG51bWJlciBzdWdnZXN0cyBpdCBjb3VsZCBiZSBhIGRlcGVuZGVuY3kgb24gYW5vdGhlciBjb21wb25lbnQuIEFsdGVybmF0aXZlbHksIGl0IGNvdWxkIGJlIGEgY29tcGxleCBuZXN0ZWQgYGlmYCBzdHJ1Y3R1cmUgY29udHJvbGxpbmcgbXVsdGlwbGUgb3B0aW9ucy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24uIEknbSBleHBlY3RpbmcgdG8gZWl0aGVyIGZpbmQgdGhlIHJvb3Qgb2YgYW4gaXNzdWUsIG9yIHNpbXBseSB1bmRlcnN0YW5kIGhvdyBhIHBhcnRpY3VsYXIgZmVhdHVyZSBpcyBlbmFibGVkIGluIHRoaXMgZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk0OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjEwOjQxLjgxNTA3ODY5OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4MDpcXHRcXG4gMTgxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxcbiAxODI6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCB0bGFuLlxcbiAxODM6XFx0XFxuIDE4NDpcXHRcXHQgIFBsZWFzZSBlbWFpbCBmZWVkYmFjayB0byBcXHUwMDNjdG9yYmVuLm1hdGhpYXNlbkBjb21wYXEuY29tXFx1MDAzZS5cXG4gMTg1OlxcdFxcbiAxODY6XFx0Y29uZmlnIFRJX0lDU1NHX1BSVUVUSFxcbiAxODc6XFx0XFx0dHJpc3RhdGUgXFxcIlRJIEdpZ2FiaXQgUFJVIEV0aGVybmV0IGRyaXZlclxcXCJcXG4gMTg4OlxcdFxcdHNlbGVjdCBQSFlMSUJcXG4gMTg5OlxcdFxcdHNlbGVjdCBUSV9JQ1NTX0lFUFxcbiAxOTA6XFx0XFx0c2VsZWN0IFRJX0szX0NQUElfREVTQ19QT09MXFxuIDE5MTpcXHRcXHRkZXBlbmRzIG9uIFBSVV9SRU1PVEVQUk9DXFxuIDE5MjpcXHRcXHRkZXBlbmRzIG9uIE5FVF9TV0lUQ0hERVZcXG4gMTkzOlxcdFxcdGRlcGVuZHMgb24gQVJDSF9LMyBcXHUwMDI2XFx1MDAyNiBPRiBcXHUwMDI2XFx1MDAyNiBUSV9LM19VRE1BX0dMVUVfTEFZRVJcXG4gMTk0OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gMTk1OlxcdFxcdGRlcGVuZHMgb24gSFNSIHx8ICFIU1JcXG4gMTk2OlxcdFxcdGhlbHBcXG4gMTk3OlxcdFxcdCAgU3VwcG9ydCBkdWFsIEdpZ2FiaXQgRXRoZXJuZXQgcG9ydHMgb3ZlciB0aGUgSUNTU0cgUFJVIFN1YnN5c3RlbS5cXG4gMTk4OlxcdFxcdCAgVGhpcyBzdWJzeXN0ZW0gaXMgYXZhaWxhYmxlIHN0YXJ0aW5nIHdpdGggdGhlIEFNNjUgcGxhdGZvcm0uXFxuIDE5OTpcXHRcXG4gMjAwOlxcdFxcdCAgVGhpcyBkcml2ZXIgcmVxdWlyZXMgZmlybXdhcmUgYmluYXJpZXMgd2hpY2ggd2lsbCBydW4gb24gdGhlIFBSVXNcXG4gMjAxOlxcdFxcdCAgdG8gc3VwcG9ydCB0aGUgRXRoZXJuZXQgb3BlcmF0aW9uLiBDdXJyZW50bHksIGl0IHN1cHBvcnRzIEV0aGVybmV0XFxuIDIwMjpcXHRcXHQgIHdpdGggMUcgYW5kIDEwME0gbGluayBzcGVlZC5cXG4gMjAzOlxcdFxcbiAyMDQ6XFx0Y29uZmlnIFRJX0lDU1NHX1BSVUVUSF9TUjFcXG4gMjA1OlxcdFxcdHRyaXN0YXRlIFxcXCJUSSBHaWdhYml0IFBSVSBTUjEuMCBFdGhlcm5ldCBkcml2ZXJcXFwiXFxuIDIwNjpcXHRcXHRzZWxlY3QgUEhZTElCXFxuIDIwNzpcXHRcXHRzZWxlY3QgVElfSUNTU19JRVBcXG4gMjA4OlxcdFxcdHNlbGVjdCBUSV9LM19DUFBJX0RFU0NfUE9PTFxcbiAyMDk6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTFxcbiAyMTA6XFx0XFx0ZGVwZW5kcyBvbiBQUlVfUkVNT1RFUFJPQ1xcbiAyMTE6XFx0XFx0ZGVwZW5kcyBvbiBORVRfU1dJVENIREVWXFxuIDIxMjpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfSzMgXFx1MDAyNlxcdTAwMjYgT0YgXFx1MDAyNlxcdTAwMjYgVElfSzNfVURNQV9HTFVFX0xBWUVSXFxuIDIxMzpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuIDIxNDpcXHRcXHRoZWxwXFxuIDIxNTpcXHRcXHQgIFN1cHBvcnQgZHVhbCBHaWdhYml0IEV0aGVybmV0IHBvcnRzIG92ZXIgdGhlIElDU1NHIFBSVSBTdWJzeXN0ZW0uXFxuIDIxNjpcXHRcXHQgIFRoaXMgc3Vic3lzdGVtIGlzIGF2YWlsYWJsZSBvbiB0aGUgQU02NSBTUjEuMCBwbGF0Zm9ybS5cXG4gMjE3OlxcdFxcbiAyMTg6XFx0XFx0ICBUaGlzIGRyaXZlciByZXF1aXJlcyBmaXJtd2FyZSBiaW5hcmllcyB3aGljaCB3aWxsIHJ1biBvbiB0aGUgUFJVc1xcbiAyMTk6XFx0XFx0ICB0byBzdXBwb3J0IHRoZSBFdGhlcm5ldCBvcGVyYXRpb24uIEN1cnJlbnRseSwgaXQgc3VwcG9ydHMgRXRoZXJuZXRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MTA6NDEuODE1MjE0NzA4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTA1MzQ3MzQwMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGhlcmUgd2UgZ28uIEkgc2VlIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24sIGBjb25maWcgVElfSUNTU0dfUFJVRVRIYCwgYW5kIGltbWVkaWF0ZWx5IG15IGV4cGVydCBleWUgc2NhbnMgZm9yIHRoZSBkZXBlbmRlbmNpZXMuIGBkZXBlbmRzIG9uIEFSQ0hfSzMgXHUwMDI2XHUwMDI2IE9GIFx1MDAyNlx1MDAyNiBUSV9LM19VRE1BX0dMVUVfTEFZRVJgIGFuZCBgZGVwZW5kcyBvbiBQUlVfUkVNT1RFUFJPQ2AuIEFoLCBgQVJDSF9LM2AuLi50aGF0J3MgdGhlIGtleS4gSSByZWNvZ25pemUgbW9zdCBvZiB0aG9zZSBidXQgSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBgQVJDSF9LM2Agc2lnbmlmaWVzIGluIHRoaXMgY29udGV4dC4gSXQgYWx3YXlzIGhlbHBzIHRvIGtub3cgdGhlIGFyY2hpdGVjdHVyZSBiZWZvcmUgSSBtYWtlIGFueSBkZWNpc2lvbnMgYWJvdXQgaXRzIGNvbmZpZ3VyYXRpb24uIExldCdzIHRyYWNlIHRoaXMgYW5kIHNlZSBleGFjdGx5IHdoZXJlIGBBUkNIX0szYCBpcyBkZWZpbmVkIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZWJhc2UgYW5kIGdldCBzb21lIGNsYXJpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODczLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzoxMDo1Mi4zNDk5NTA3NzlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwMDA1MzA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVJDSF9LM1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L0tjb25maWcucGxhdGZvcm1zPTE0Mz1jb25maWcgQVJDSF9FWFlOT1NcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy5wbGF0Zm9ybXMtMTU1LVxcbmFyY2gvYXJtNjQvS2NvbmZpZy5wbGF0Zm9ybXM6MTU2OmNvbmZpZyBBUkNIX0szXFxuYXJjaC9hcm02NC9LY29uZmlnLnBsYXRmb3Jtcy0xNTctXFx0Ym9vbCBcXFwiVGV4YXMgSW5zdHJ1bWVudHMgSW5jLiBLMyBtdWx0aWNvcmUgU29DIGFyY2hpdGVjdHVyZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MTA6NTQuOTUwMDEwNzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2MjI4Mzk5Mjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgQVJDSF9LM2AgYW5kIGBUSV9JQ1NTR19QUlVFVEhgIE1vZHVsZXMgZm9yIEZ1enppbmcgRWxpZ2liaWxpdHkqKlxuXG5Pa2F5LCBzbyBgQVJDSF9LM2AgaXMgY2xlYXJseSBhbiBBUk02NCBzcGVjaWZpYyBTb0MgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgZnJvbSBUZXhhcyBJbnN0cnVtZW50cy4gSSBjb25maXJtZWQgdGhpcyBieSBmaW5kaW5nIGl0IGRlZmluZWQgaW4gYGFyY2gvYXJtNjQvS2NvbmZpZy5wbGF0Zm9ybXNgLiBNeSB0YXJnZXQgYXJjaGl0ZWN0dXJlLCBob3dldmVyLCBpcyBhbWQ2NC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlc2UgbW9kdWxlcyBhcmUgZXZlbiByZW1vdGVseSBidWlsZGFibGUgb3IgcmVsZXZhbnQgdG8gYW4gYW1kNjQgZW52aXJvbm1lbnQuXG5cblRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBzdGF0ZSBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNvZGUgZmFsbHMgaW50byBzZXZlcmFsIGNhdGVnb3JpZXMsIGluY2x1ZGluZyBcIkNvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZVwiIGFuZCBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS5cIlxuXG5MZXQncyBzZWUgaWYgZWl0aGVyIGBBUkNIX0szYCBvciBgVElfSUNTU0dfUFJVRVRIYCBjYW4gYmUgZW5hYmxlZCBvciBldmVuIGNvbXBpbGVkIG9uIGFtZDY0LiBJdCdzIHF1aWNrbHkgYXBwYXJlbnQgdGhhdCBgQVJDSF9LM2AgaXMgc3RyaWN0bHkgdGllZCB0byBgYXJjaC9hcm02NGAgdGhyb3VnaCB0aGUgYEtjb25maWcucGxhdGZvcm1zYCBmaWxlLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdG9yLlxuXG5Ob3cgZm9yIGBUSV9JQ1NTR19QUlVFVEhgLiBJIGxvb2tlZCBhdCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZ2AgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlJ3MgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBBcyBleHBlY3RlZCwgYFRJX0lDU1NHX1BSVUVUSGAgZGVwZW5kcyBvbiBgQVJDSF9LM2AgYW5kIHNldmVyYWwgb3RoZXIgQVJNNjQgYW5kIFRJLXNwZWNpZmljIGRlcGVuZGVuY2llcy4gSW1wb3J0YW50bHksIEkgZGlkICpub3QqIGZpbmQgYHx8IENPTVBJTEVfVEVTVGAsIHdoaWNoIHdvdWxkIGhhdmUgcHJvdmlkZWQgYSBwYXRoIGZvciBidWlsZGluZyB0aGlzIGRyaXZlciBmb3IgdGVzdGluZyBwdXJwb3NlcyBldmVuIGlmIHRoZSBoYXJkd2FyZSBpc24ndCBwcmVzZW50LlxuXG5GdXJ0aGVybW9yZSwgdGhpcyBkcml2ZXIgaXMgZXhwbGljaXRseSBhIHBsYXRmb3JtIGRyaXZlciBmb3IgYSBUSSBLMyBTb0MgUFJVIEV0aGVybmV0IGNvbnRyb2xsZXIuIEl0J3MgZGVzaWduZWQgdG8gaW50ZXJmYWNlIHdpdGggdGhlIFByb2dyYW1tYWJsZSBSZWFsLVRpbWUgVW5pdCAoUFJVKSBoYXJkd2FyZSBwcmVzZW50IG9uIFRJIEszIFNvQ3MuIFRvIGJlIGV4dHJhIGNlcnRhaW4sIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBpdHMgcHJvYmUgZnVuY3Rpb24gaXMgdGllZCB0byBhIHBsYXRmb3JtIGRldmljZSwgbGlrZWx5IHdpdGhpbiB0aGUgYGljc3NnX3BydWV0aC5jYCBkcml2ZXIgc291cmNlIGl0c2VsZi4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBpdCdzIHRpZ2h0bHkgY291cGxlZCB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4gU2luY2UgdGhpcyBpcyBhbiBFdGhlcm5ldCBjb250cm9sbGVyLCBpdCBuZWVkcyB0byBiZSBjb25uZWN0ZWQsIGFuZCB0aGF0IGlzbid0IGNvbm5lY3RlZCB0byBhIHJlZ3VsYXIgYW1kNjQgc3lzdGVtLlxuXG5UaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBjb2RlIGlzIGV4Y2x1c2l2ZSB0byB0aGUgQVJNNjQgYXJjaGl0ZWN0dXJlIGFuZCBzcGVjaWZpYyBoYXJkd2FyZSwgYW5kIG5vdCBidWlsZGFibGUsIEknbSBjb25maWRlbnQgaW4gY29uY2x1ZGluZyB0aGF0IGl0J3Mgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIG15IGFtZDY0IGVudmlyb25tZW50LiBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjM2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjExOjAxLjE3ODQxNDA0N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYxNDE0MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX3BsYXRmb3JtX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzX2llcC5jPTEwOTU9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaWNzc19pZXBfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc19pZXAuYy0xMTAxLX07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc19pZXAuYzoxMTAyOm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoaWNzc19pZXBfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzX2llcC5jLTExMDMtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguYz0yNTgyPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBydWV0aF9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguYy0yNTkwLX07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmM6MjU5MTptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHBydWV0aF9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5jLTI1OTItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGhfc3IxLmM9MTIyOD1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwcnVldGhfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoX3NyMS5jLTEyMzYtfTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGhfc3IxLmM6MTIzNzptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHBydWV0aF9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aF9zcjEuYy0xMjM4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzoxMTowMS4yNTQ1NjIxMzZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTMzNDc2MzY0MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBXb3J0aEZ1enppbmcgZm9yIFRJX0lDU1NHX1BSVUVUSCoqXG5cbk9rYXksIGFmdGVyIGV4YW1pbmluZyB0aGUgY29kZSBhbmQgdGhlIGNvbnRleHQsIEkndmUgZGV0ZXJtaW5lZCB0aGF0IGBUSV9JQ1NTR19QUlVFVEhgIGlzIGRlZmluaXRlbHkgbm90IHdvcnRoIGZ1enppbmcgaW4gb3VyIGN1cnJlbnQgc2V0dXAuIEhlcmUncyBteSByZWFzb25pbmcsIGFuZCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6XG5cbkZpcnN0LCB0aGlzIGlzIGEgdmVyeSBzcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIsIHRoZSBgcHJ1ZXRoX2RyaXZlcmAsIGRlc2lnbmVkIGZvciB0aGUgVEkgSzMgU29DJ3MgUFJVIGV0aGVybmV0IHN1YnN5c3RlbS4gVGhpcyBtZWFucyBpdCBpbnRyaW5zaWNhbGx5IGRlcGVuZHMgb24gVEkncyBwcm9wcmlldGFyeSBoYXJkd2FyZSDigJMgdGhlIFBSVS1JQ1NTRyBzdWJzeXN0ZW0sIHRoZSByZW1vdGVwcm9jIGZyYW1ld29yayBmb3IgdGhlIFBSVXMsIGFuZCB0aGUgSzMgVURNQSBnbHVlIGxvZ2ljLiBUaGlzIGlzIG5vdCBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZW11bGF0ZWQgcmVsaWFibHksIG9yIGV2ZW4gYXQgYWxsLCBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQsIG9yIGFueSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LiBRRU1VIHNpbXBseSBkb2Vzbid0IHNpbXVsYXRlIHRoZSBQUlUtSUNTU0cgb3IgSzMgVURNQSBoYXJkd2FyZSBjb21wb25lbnRzLlxuXG5TZWNvbmRseSwgYW5kIHRoaXMgaXMgdGhlIGNsaW5jaGVyLCB0aGUgZHJpdmVyIGhhcyBhIGJ1aWx0LWluIGRlcGVuZGVuY3kgb24gYEFSQ0hfSzNgLiBUaGlzIGlzIGFuIGFyY2hpdGVjdHVyZSBvcHRpb24gZm91bmQgaW4gdGhlIGBhcm02NC9LY29uZmlnLnBsYXRmb3Jtc2AgZmlsZS4gU2luY2Ugd2UncmUgdGFyZ2V0aW5nIHRoZSBgYW1kNjRgIGFyY2hpdGVjdHVyZSwgdGhpcyBkcml2ZXIgaXMgKnN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSogb24gdGhlIHRhcmdldC4gSXQncyBpbXBvc3NpYmxlIHRvIGV2ZW4gY29tcGlsZSBpdCBpbiBmb3IgdGhlIGBhbWQ2NGAgYXJjaGl0ZWN0dXJlLCBtYWtpbmcgYW55IGZ1enppbmcgZWZmb3J0cyBjb21wbGV0ZWx5IGZ1dGlsZS5cblxuTG9va2luZyBhdCB0aGUgaW5zdHJ1Y3Rpb25zIGluIFNlY3Rpb24gMiwgdGhpcyBjbGVhcmx5IGZhbGxzIHVuZGVyIHR3byBvZiB0aGUgXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlXCIgY2F0ZWdvcmllczogXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiBhbmQgXCJDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXCIgVGhlIGFyY2hpdGVjdHVyZSBleGNsdXNpdml0eSBpcyBvYnZpb3VzIGR1ZSB0byB0aGUgYEFSQ0hfSzNgIGRlcGVuZGVuY3kuIFRoZSBoYXJkd2FyZSB1bnJlYWNoYWJpbGl0eSBpcyBldmlkZW50IGJlY2F1c2Ugd2UncmUgdGFsa2luZyBhYm91dCBhIHBsYXRmb3JtLXNwZWNpZmljIGRyaXZlciB0aGF0IG5lZWRzIHNwZWNpYWxpemVkIFRJIGhhcmR3YXJlIHRoYXQncyBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiBvdXIgdGFyZ2V0IFFFTVUgaW5zdGFuY2VzLlxuXG5UaGVyZWZvcmUsIGBXb3J0aEZ1enppbmcgPSBmYWxzZWAsIG5vIGBFbmFibGVDb25maWdzYCBhcmUgbmVlZGVkLCBhbmQgbm8gYEZvY3VzU3ltYm9sc2AgYXJlIHJlbGV2YW50LiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODI4LCJPdXRwdXRUb2tlbnMiOjEyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzoxMToxNC42MDIyMDM1ODVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBtb2RpZmllZCBjb2RlIGlzIGNvbmZpbmVkIHRvIHRoZSBUZXhhcyBJbnN0cnVtZW50cyBJQ1NTRyBQUlUgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy8pLCB3aGljaCBkZXBlbmRzIG9uIENPTkZJR19BUkNIX0szIChhbiBBUk02NC1zcGVjaWZpYyBTb0MgYXJjaGl0ZWN0dXJlKS4gVGhpcyBkcml2ZXIgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIG9uIHRoZSB0YXJnZXQgYW1kNjQgYXJjaGl0ZWN0dXJlIGFuZCBhZGRpdGlvbmFsbHkgcmVxdWlyZXMgcGh5c2ljYWwgVEkgSzMgUFJVLUlDU1NHIFNvQyBoYXJkd2FyZSBhbmQgZmlybXdhcmUgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgbW9kaWZpZWQgY29kZSBpcyBjb25maW5lZCB0byB0aGUgVGV4YXMgSW5zdHJ1bWVudHMgSUNTU0cgUFJVIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvKSwgd2hpY2ggZGVwZW5kcyBvbiBDT05GSUdfQVJDSF9LMyAoYW4gQVJNNjQtc3BlY2lmaWMgU29DIGFyY2hpdGVjdHVyZSkuIFRoaXMgZHJpdmVyIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiB0aGUgdGFyZ2V0IGFtZDY0IGFyY2hpdGVjdHVyZSBhbmQgYWRkaXRpb25hbGx5IHJlcXVpcmVzIHBoeXNpY2FsIFRJIEszIFBSVS1JQ1NTRyBTb0MgaGFyZHdhcmUgYW5kIGZpcm13YXJlIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjExOjE0LjYwMjI0NjIzNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowhzpzh[1] Phase: Running StartedAt: 2026-09-15 07:11:25 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzpzh[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-15 07:11:25 +0000 UTC FinishedAt: 2026-09-15 07:11:31 +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,}