Name: series-workflowf8wc9 Phase: Failed StartedAt: 2026-07-01 22:17:36 +0000 UTC FinishedAt: 2026-07-01 22:30:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf8wc9[0] Phase: Succeeded StartedAt: 2026-07-01 22:17:36 +0000 UTC FinishedAt: 2026-07-01 22:29:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf8wc9[0].run-triage Phase: Succeeded StartedAt: 2026-07-01 22:17:36 +0000 UTC FinishedAt: 2026-07-01 22:29:52 +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+CgkJCTx0ZD4yMDI2LzA3LzAxIDIyOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIsIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUENJIGRyaXZlci4gVGhlIG1vZGlmaWVkIGNvZGUgKGV0aHRvb2wgb3BzIGFuZCBSWCBidWZmZXIgYWxsb2NhdGlvbiBsb2dpYykgaXMgb25seSByZWFjaGFibGUgaWYgdGhlIE1BTkEgUENJIGRldmljZSBpcyBwcmVzZW50IGFuZCBwcm9iZWQuIFNpbmNlIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzIChsaWtlIEdDRSBvciBRRU1VKSBkbyBub3QgZW11bGF0ZSB0aGlzIHNwZWNpZmljIGhhcmR3YXJlLCB0aGUgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjI6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2NWNlNmI1NjZmZjNlMmE0ZTNjNmZmZGMwZmFiN2U2NDU1MDVkNzYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAyMjoyOToyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcbmluZGV4IDI2YWVmMjFjNmMyYzg5Li40YmQ4M2M3ODJlYTM3ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXG5AQCAtNzU1LDYgJiM0Mzs3NTUsMjUgQEAgc3RhdGljIHZvaWQgKm1hbmFfZ2V0X3J4YnVmX3ByZShzdHJ1Y3QgbWFuYV9yeHEgKnJ4cSwgZG1hX2FkZHJfdCAqZGEpXG4gXHRyZXR1cm4gdmE7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbFxuJiM0MzttYW5hX3VzZV9zaW5nbGVfcnhidWZfcGVyX3BhZ2Uoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsIHUzMiBtdHUpXG4mIzQzO3tcbiYjNDM7XHQvKiBPbiBzb21lIHBsYXRmb3JtcyB3aXRoIDRLIFBBR0VfU0laRSwgcGFnZV9wb29sIGZyYWdtZW50IGFsbG9jYXRpb25cbiYjNDM7XHQgKiBpbiB0aGUgUlggcmVmaWxsIHBhdGggKH4ya0IgYnVmZmVyKSBjYW4gY2F1c2Ugc2lnbmlmaWNhbnQgdGhyb3VnaHB1dFxuJiM0MztcdCAqIHJlZ3Jlc3Npb24gdW5kZXIgaGlnaCBjb25uZWN0aW9uIGNvdW50cy4gQWxsb3cgdXNlciB0byBmb3JjZSBvbmUgUlhcbiYjNDM7XHQgKiBidWZmZXIgcGVyIHBhZ2UgdmlhIGV0aHRvb2wgcHJpdmF0ZSBmbGFnIHRvIGJ5cGFzcyB0aGUgZnJhZ21lbnRcbiYjNDM7XHQgKiBwYXRoLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChhcGMtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgQklUKE1BTkFfUFJJVl9GTEFHX1VTRV9GVUxMX1BBR0VfUlhCVUYpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdC8qIEZvciB4ZHAgYW5kIGp1bWJvIGZyYW1lcyBtYWtlIHN1cmUgb25seSBvbmUgcGFja2V0IGZpdHMgcGVyIHBhZ2UuICovXG4mIzQzO1x0aWYgKG10dSAmIzQzOyBNQU5BX1JYQlVGX1BBRCBcdTAwM2UgUEFHRV9TSVpFIC8gMiB8fCBtYW5hX3hkcF9nZXQoYXBjKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gLyogR2V0IFJYIGJ1ZmZlciYjMzk7cyBkYXRhIHNpemUsIGFsbG9jIHNpemUsIFhEUCBoZWFkcm9vbSBiYXNlZCBvbiBNVFUgKi9cbiBzdGF0aWMgdm9pZCBtYW5hX2dldF9yeGJ1Zl9jZmcoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXG4gXHRcdFx0ICAgICAgIGludCBtdHUsIHUzMiAqZGF0YXNpemUsIHUzMiAqYWxsb2Nfc2l6ZSxcbkBAIC03NjUsOCAmIzQzOzc4NCw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfZ2V0X3J4YnVmX2NmZyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcbiBcdC8qIENhbGN1bGF0ZSBkYXRhc2l6ZSBmaXJzdCAoY29uc2lzdGVudCBhY3Jvc3MgYWxsIGNhc2VzKSAqL1xuIFx0KmRhdGFzaXplID0gbXR1ICYjNDM7IEVUSF9ITEVOO1xuIFxuLVx0LyogRm9yIHhkcCBhbmQganVtYm8gZnJhbWVzIG1ha2Ugc3VyZSBvbmx5IG9uZSBwYWNrZXQgZml0cyBwZXIgcGFnZSAqL1xuLVx0aWYgKG10dSAmIzQzOyBNQU5BX1JYQlVGX1BBRCBcdTAwM2UgUEFHRV9TSVpFIC8gMiB8fCBtYW5hX3hkcF9nZXQoYXBjKSkge1xuJiM0MztcdGlmIChtYW5hX3VzZV9zaW5nbGVfcnhidWZfcGVyX3BhZ2UoYXBjLCBtdHUpKSB7XG4gXHRcdGlmIChtYW5hX3hkcF9nZXQoYXBjKSkge1xuIFx0XHRcdCpoZWFkcm9vbSA9IFhEUF9QQUNLRVRfSEVBRFJPT007XG4gXHRcdFx0KmFsbG9jX3NpemUgPSBQQUdFX1NJWkU7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2V0aHRvb2wuY1xuaW5kZXggOTRlNjU4ZDA3YTI3ZTguLjNjNDk4YTIyMjk2NTgwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9ldGh0b29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZXRodG9vbC5jXG5AQCAtMTMzLDU4ICYjNDM7MTMzLDk0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWFuYV9zdGF0c19kZXNjIG1hbmFfcGh5X3N0YXRzW10gPSB7XG4gXHR7IFwmIzM0O2hjX3RjN190eF9wYXVzZV9waHlcJiMzNDssIG9mZnNldG9mKHN0cnVjdCBtYW5hX2V0aHRvb2xfcGh5X3N0YXRzLCB0eF9wYXVzZV90YzdfcGh5KSB9LFxuIH07XG4gXG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyIG1hbmFfcHJpdl9mbGFnc1tNQU5BX1BSSVZfRkxBR19NQVhdW0VUSF9HU1RSSU5HX0xFTl0gPSB7XG4mIzQzO1x0W01BTkFfUFJJVl9GTEFHX1VTRV9GVUxMX1BBR0VfUlhCVUZdID0gXCYjMzQ7ZnVsbC1wYWdlLXJ4XCYjMzQ7XG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBpbnQgbWFuYV9nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IHN0cmluZ3NldClcbiB7XG4gXHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFx0dW5zaWduZWQgaW50IG51bV9xdWV1ZXMgPSBhcGMtXHUwMDNlbnVtX3F1ZXVlcztcbiBcbi1cdGlmIChzdHJpbmdzZXQgIT0gRVRIX1NTX1NUQVRTKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRzd2l0Y2ggKHN0cmluZ3NldCkge1xuJiM0MztcdGNhc2UgRVRIX1NTX1NUQVRTOlxuJiM0MztcdFx0cmV0dXJuIEFSUkFZX1NJWkUobWFuYV9ldGhfc3RhdHMpICYjNDM7XG4mIzQzO1x0XHQgICAgICAgQVJSQVlfU0laRShtYW5hX3BoeV9zdGF0cykgJiM0MztcbiYjNDM7XHRcdCAgICAgICBBUlJBWV9TSVpFKG1hbmFfaGNfc3RhdHMpICAmIzQzO1xuJiM0MztcdFx0ICAgICAgIG51bV9xdWV1ZXMgKiAoTUFOQV9TVEFUU19SWF9DT1VOVCAmIzQzOyBNQU5BX1NUQVRTX1RYX0NPVU5UKTtcbiYjNDM7XG4mIzQzO1x0Y2FzZSBFVEhfU1NfUFJJVl9GTEFHUzpcbiYjNDM7XHRcdHJldHVybiBNQU5BX1BSSVZfRkxBR19NQVg7XG4gXG4tXHRyZXR1cm4gQVJSQVlfU0laRShtYW5hX2V0aF9zdGF0cykgJiM0MzsgQVJSQVlfU0laRShtYW5hX3BoeV9zdGF0cykgJiM0MzsgQVJSQVlfU0laRShtYW5hX2hjX3N0YXRzKSAmIzQzO1xuLVx0XHRcdG51bV9xdWV1ZXMgKiAoTUFOQV9TVEFUU19SWF9DT1VOVCAmIzQzOyBNQU5BX1NUQVRTX1RYX0NPVU5UKTtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBtYW5hX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqZGF0YSlcbiYjNDM7c3RhdGljIHZvaWQgbWFuYV9nZXRfc3RyaW5nc19zdGF0cyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgdTggKipkYXRhKVxuIHtcbi1cdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXHR1bnNpZ25lZCBpbnQgbnVtX3F1ZXVlcyA9IGFwYy1cdTAwM2VudW1fcXVldWVzO1xuIFx0aW50IGksIGo7XG4gXG4tXHRpZiAoc3RyaW5nc2V0ICE9IEVUSF9TU19TVEFUUylcbi1cdFx0cmV0dXJuO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShtYW5hX2V0aF9zdGF0cyk7IGkmIzQzOyYjNDM7KVxuLVx0XHRldGh0b29sX3B1dHMoXHUwMDI2ZGF0YSwgbWFuYV9ldGhfc3RhdHNbaV0ubmFtZSk7XG4mIzQzO1x0XHRldGh0b29sX3B1dHMoZGF0YSwgbWFuYV9ldGhfc3RhdHNbaV0ubmFtZSk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG1hbmFfaGNfc3RhdHMpOyBpJiM0MzsmIzQzOylcbi1cdFx0ZXRodG9vbF9wdXRzKFx1MDAyNmRhdGEsIG1hbmFfaGNfc3RhdHNbaV0ubmFtZSk7XG4mIzQzO1x0XHRldGh0b29sX3B1dHMoZGF0YSwgbWFuYV9oY19zdGF0c1tpXS5uYW1lKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobWFuYV9waHlfc3RhdHMpOyBpJiM0MzsmIzQzOylcbi1cdFx0ZXRodG9vbF9wdXRzKFx1MDAyNmRhdGEsIG1hbmFfcGh5X3N0YXRzW2ldLm5hbWUpO1xuJiM0MztcdFx0ZXRodG9vbF9wdXRzKGRhdGEsIG1hbmFfcGh5X3N0YXRzW2ldLm5hbWUpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0ZXRodG9vbF9zcHJpbnRmKFx1MDAyNmRhdGEsIFwmIzM0O3J4XyVkX3BhY2tldHNcJiMzNDssIGkpO1xuLVx0XHRldGh0b29sX3NwcmludGYoXHUwMDI2ZGF0YSwgXCYjMzQ7cnhfJWRfYnl0ZXNcJiMzNDssIGkpO1xuLVx0XHRldGh0b29sX3NwcmludGYoXHUwMDI2ZGF0YSwgXCYjMzQ7cnhfJWRfeGRwX2Ryb3BcJiMzNDssIGkpO1xuLVx0XHRldGh0b29sX3NwcmludGYoXHUwMDI2ZGF0YSwgXCYjMzQ7cnhfJWRfeGRwX3R4XCYjMzQ7LCBpKTtcbi1cdFx0ZXRodG9vbF9zcHJpbnRmKFx1MDAyNmRhdGEsIFwmIzM0O3J4XyVkX3hkcF9yZWRpcmVjdFwmIzM0OywgaSk7XG4tXHRcdGV0aHRvb2xfc3ByaW50ZihcdTAwMjZkYXRhLCBcJiMzNDtyeF8lZF9wa3RfbGVuMF9lcnJcJiMzNDssIGkpO1xuJiM0MztcdFx0ZXRodG9vbF9zcHJpbnRmKGRhdGEsIFwmIzM0O3J4XyVkX3BhY2tldHNcJiMzNDssIGkpO1xuJiM0MztcdFx0ZXRodG9vbF9zcHJpbnRmKGRhdGEsIFwmIzM0O3J4XyVkX2J5dGVzXCYjMzQ7LCBpKTtcbiYjNDM7XHRcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcJiMzNDtyeF8lZF94ZHBfZHJvcFwmIzM0OywgaSk7XG4mIzQzO1x0XHRldGh0b29sX3NwcmludGYoZGF0YSwgXCYjMzQ7cnhfJWRfeGRwX3R4XCYjMzQ7LCBpKTtcbiYjNDM7XHRcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcJiMzNDtyeF8lZF94ZHBfcmVkaXJlY3RcJiMzNDssIGkpO1xuJiM0MztcdFx0ZXRodG9vbF9zcHJpbnRmKGRhdGEsIFwmIzM0O3J4XyVkX3BrdF9sZW4wX2VyclwmIzM0OywgaSk7XG4gXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIE1BTkFfUlhDT01QX09PQl9OVU1fUFBJIC0gMTsgaiYjNDM7JiM0MzspXG4tXHRcdFx0ZXRodG9vbF9zcHJpbnRmKFx1MDAyNmRhdGEsIFwmIzM0O3J4XyVkX2NvYWxlc2NlZF9jcWVfJWRcJiMzNDssIGksIGogJiM0MzsgMik7XG4mIzQzO1x0XHRcdGV0aHRvb2xfc3ByaW50ZihkYXRhLFxuJiM0MztcdFx0XHRcdFx0XCYjMzQ7cnhfJWRfY29hbGVzY2VkX2NxZV8lZFwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdGksXG4mIzQzO1x0XHRcdFx0XHRqICYjNDM7IDIpO1xuIFx0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0ZXRodG9vbF9zcHJpbnRmKFx1MDAyNmRhdGEsIFwmIzM0O3R4XyVkX3BhY2tldHNcJiMzNDssIGkpO1xuLVx0XHRldGh0b29sX3NwcmludGYoXHUwMDI2ZGF0YSwgXCYjMzQ7dHhfJWRfYnl0ZXNcJiMzNDssIGkpO1xuLVx0XHRldGh0b29sX3NwcmludGYoXHUwMDI2ZGF0YSwgXCYjMzQ7dHhfJWRfeGRwX3htaXRcJiMzNDssIGkpO1xuLVx0XHRldGh0b29sX3NwcmludGYoXHUwMDI2ZGF0YSwgXCYjMzQ7dHhfJWRfdHNvX3BhY2tldHNcJiMzNDssIGkpO1xuLVx0XHRldGh0b29sX3NwcmludGYoXHUwMDI2ZGF0YSwgXCYjMzQ7dHhfJWRfdHNvX2J5dGVzXCYjMzQ7LCBpKTtcbi1cdFx0ZXRodG9vbF9zcHJpbnRmKFx1MDAyNmRhdGEsIFwmIzM0O3R4XyVkX3Rzb19pbm5lcl9wYWNrZXRzXCYjMzQ7LCBpKTtcbi1cdFx0ZXRodG9vbF9zcHJpbnRmKFx1MDAyNmRhdGEsIFwmIzM0O3R4XyVkX3Rzb19pbm5lcl9ieXRlc1wmIzM0OywgaSk7XG4tXHRcdGV0aHRvb2xfc3ByaW50ZihcdTAwMjZkYXRhLCBcJiMzNDt0eF8lZF9sb25nX3BrdF9mbXRcJiMzNDssIGkpO1xuLVx0XHRldGh0b29sX3NwcmludGYoXHUwMDI2ZGF0YSwgXCYjMzQ7dHhfJWRfc2hvcnRfcGt0X2ZtdFwmIzM0OywgaSk7XG4tXHRcdGV0aHRvb2xfc3ByaW50ZihcdTAwMjZkYXRhLCBcJiMzNDt0eF8lZF9jc3VtX3BhcnRpYWxcJiMzNDssIGkpO1xuLVx0XHRldGh0b29sX3NwcmludGYoXHUwMDI2ZGF0YSwgXCYjMzQ7dHhfJWRfbWFuYV9tYXBfZXJyXCYjMzQ7LCBpKTtcbiYjNDM7XHRcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcJiMzNDt0eF8lZF9wYWNrZXRzXCYjMzQ7LCBpKTtcbiYjNDM7XHRcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcJiMzNDt0eF8lZF9ieXRlc1wmIzM0OywgaSk7XG4mIzQzO1x0XHRldGh0b29sX3NwcmludGYoZGF0YSwgXCYjMzQ7dHhfJWRfeGRwX3htaXRcJiMzNDssIGkpO1xuJiM0MztcdFx0ZXRodG9vbF9zcHJpbnRmKGRhdGEsIFwmIzM0O3R4XyVkX3Rzb19wYWNrZXRzXCYjMzQ7LCBpKTtcbiYjNDM7XHRcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcJiMzNDt0eF8lZF90c29fYnl0ZXNcJiMzNDssIGkpO1xuJiM0MztcdFx0ZXRodG9vbF9zcHJpbnRmKGRhdGEsIFwmIzM0O3R4XyVkX3Rzb19pbm5lcl9wYWNrZXRzXCYjMzQ7LCBpKTtcbiYjNDM7XHRcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcJiMzNDt0eF8lZF90c29faW5uZXJfYnl0ZXNcJiMzNDssIGkpO1xuJiM0MztcdFx0ZXRodG9vbF9zcHJpbnRmKGRhdGEsIFwmIzM0O3R4XyVkX2xvbmdfcGt0X2ZtdFwmIzM0OywgaSk7XG4mIzQzO1x0XHRldGh0b29sX3NwcmludGYoZGF0YSwgXCYjMzQ7dHhfJWRfc2hvcnRfcGt0X2ZtdFwmIzM0OywgaSk7XG4mIzQzO1x0XHRldGh0b29sX3NwcmludGYoZGF0YSwgXCYjMzQ7dHhfJWRfY3N1bV9wYXJ0aWFsXCYjMzQ7LCBpKTtcbiYjNDM7XHRcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcJiMzNDt0eF8lZF9tYW5hX21hcF9lcnJcJiMzNDssIGkpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWFuYV9nZXRfc3RyaW5nc19wcml2X2ZsYWdzKHU4ICoqZGF0YSlcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNQU5BX1BSSVZfRkxBR19NQVg7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0ZXRodG9vbF9wdXRzKGRhdGEsIG1hbmFfcHJpdl9mbGFnc1tpXSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1hbmFfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBzdHJpbmdzZXQsIHU4ICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChzdHJpbmdzZXQpIHtcbiYjNDM7XHRjYXNlIEVUSF9TU19TVEFUUzpcbiYjNDM7XHRcdG1hbmFfZ2V0X3N0cmluZ3Nfc3RhdHMoYXBjLCBcdTAwMjZkYXRhKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgRVRIX1NTX1BSSVZfRkxBR1M6XG4mIzQzO1x0XHRtYW5hX2dldF9zdHJpbmdzX3ByaXZfZmxhZ3MoXHUwMDI2ZGF0YSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0YnJlYWs7XG4gXHR9XG4gfVxuIFxuQEAgLTU5NCw2ICYjNDM7NjMwLDg4IEBAIHN0YXRpYyBpbnQgbWFuYV9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB1MzIgbWFuYV9nZXRfcHJpdl9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBhcGMtXHUwMDNlcHJpdl9mbGFncztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBtYW5hX3NldF9wcml2X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgcHJpdl9mbGFncylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1x0dTMyIGNoYW5nZWQgPSBhcGMtXHUwMDNlcHJpdl9mbGFncyBeIHByaXZfZmxhZ3M7XG4mIzQzO1x0dTMyIG9sZF9wcml2X2ZsYWdzID0gYXBjLVx1MDAzZXByaXZfZmxhZ3M7XG4mIzQzO1x0Ym9vbCBzY2hlZHVsZV9wb3J0X3Jlc2V0ID0gZmFsc2U7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICghY2hhbmdlZClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBSZWplY3QgdW5rbm93biBiaXRzICovXG4mIzQzO1x0aWYgKHByaXZfZmxhZ3MgXHUwMDI2IH5HRU5NQVNLKE1BTkFfUFJJVl9GTEFHX01BWCAtIDEsIDApKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChjaGFuZ2VkIFx1MDAyNiBCSVQoTUFOQV9QUklWX0ZMQUdfVVNFX0ZVTExfUEFHRV9SWEJVRikpIHtcbiYjNDM7XHRcdGFwYy1cdTAwM2Vwcml2X2ZsYWdzID0gcHJpdl9mbGFncztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWFwYy1cdTAwM2Vwb3J0X2lzX3VwKSB7XG4mIzQzO1x0XHRcdC8qIFBvcnQgaXMgZG93biwgZmxhZyB1cGRhdGVkIHRvIGFwcGx5IG9uIG5leHQgdXBcbiYjNDM7XHRcdFx0ICogc28ganVzdCByZXR1cm4uXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKiBQcmUtYWxsb2NhdGUgYnVmZmVycyB0byBwcmV2ZW50IGZhaWx1cmUgaW4gbWFuYV9hdHRhY2hcbiYjNDM7XHRcdCAqIGxhdGVyXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGVyciA9IG1hbmFfcHJlX2FsbG9jX3J4YnVmcyhhcGMsIG5kZXYtXHUwMDNlbXR1LCBhcGMtXHUwMDNlbnVtX3F1ZXVlcyk7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDtJbnN1ZmZpY2llbnQgbWVtb3J5IGZvciBuZXcgYWxsb2NhdGlvbnNcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRhcGMtXHUwMDNlcHJpdl9mbGFncyA9IG9sZF9wcml2X2ZsYWdzO1xuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGVyciA9IG1hbmFfZGV0YWNoKG5kZXYsIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZGV2LCBcJiMzNDttYW5hX2RldGFjaCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuJiM0MztcdFx0XHRhcGMtXHUwMDNlcHJpdl9mbGFncyA9IG9sZF9wcml2X2ZsYWdzO1xuJiM0MztcbiYjNDM7XHRcdFx0LyogUG9ydCBpcyBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFJlc3RvcmVcbiYjNDM7XHRcdFx0ICogJiMzOTtwb3J0X2lzX3VwJiMzOTsgc28gdGhhdCBxdWV1ZSByZXNldCB3b3JrIGhhbmRsZXJcbiYjNDM7XHRcdFx0ICogY2FuIHByb3Blcmx5IGRldGFjaCBhbmQgcmUtYXR0YWNoLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0YXBjLVx1MDAzZXBvcnRfaXNfdXAgPSB0cnVlO1xuJiM0MztcdFx0XHRzY2hlZHVsZV9wb3J0X3Jlc2V0ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gbWFuYV9hdHRhY2gobmRldik7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmRldiwgXCYjMzQ7bWFuYV9hdHRhY2ggZmFpbGVkOiAlZFxcblwmIzM0OywgZXJyKTtcbiYjNDM7XHRcdFx0YXBjLVx1MDAzZXByaXZfZmxhZ3MgPSBvbGRfcHJpdl9mbGFncztcbiYjNDM7XG4mIzQzO1x0XHRcdC8qIFJlc3RvcmUgJiMzOTtwb3J0X2lzX3VwJiMzOTsgc28gdGhlIHJlc2V0IHdvcmsgaGFuZGxlclxuJiM0MztcdFx0XHQgKiBjYW4gcHJvcGVybHkgZGV0YWNoL2F0dGFjaC4gV2l0aG91dCB0aGlzLFxuJiM0MztcdFx0XHQgKiB0aGUgaGFuZGxlciBzZWVzIHBvcnRfaXNfdXA9ZmFsc2UgYW5kIHNraXBzXG4mIzQzO1x0XHRcdCAqIHF1ZXVlIGFsbG9jYXRpb24sIGxlYXZpbmcgdGhlIHBvcnQgZGVhZC5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGFwYy1cdTAwM2Vwb3J0X2lzX3VwID0gdHJ1ZTtcbiYjNDM7XHRcdFx0c2NoZWR1bGVfcG9ydF9yZXNldCA9IHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdG1hbmFfcHJlX2RlYWxsb2NfcnhidWZzKGFwYyk7XG4mIzQzO1xuJiM0MztcdGlmIChzY2hlZHVsZV9wb3J0X3Jlc2V0KVxuJiM0MztcdFx0cXVldWVfd29yayhhcGMtXHUwMDNlYWMtXHUwMDNlcGVyX3BvcnRfcXVldWVfcmVzZXRfd3EsXG4mIzQzO1x0XHRcdCAgIFx1MDAyNmFwYy1cdTAwM2VxdWV1ZV9yZXNldF93b3JrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbWFuYV9ldGh0b29sX29wcyA9IHtcbiBcdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9SWF9DUUVfRlJBTUVTLFxuIFx0Lm9wX25lZWRzX3J0bmxcdFx0PSBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTIHxcbkBAIC02MTQsNCAmIzQzOzczMiw2IEBAIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBtYW5hX2V0aHRvb2xfb3BzID0ge1xuIFx0LnNldF9yaW5ncGFyYW0gICAgICAgICAgPSBtYW5hX3NldF9yaW5ncGFyYW0sXG4gXHQuZ2V0X2xpbmtfa3NldHRpbmdzXHQ9IG1hbmFfZ2V0X2xpbmtfa3NldHRpbmdzLFxuIFx0LmdldF9saW5rXHRcdD0gZXRodG9vbF9vcF9nZXRfbGluayxcbiYjNDM7XHQuZ2V0X3ByaXZfZmxhZ3NcdFx0PSBtYW5hX2dldF9wcml2X2ZsYWdzLFxuJiM0MztcdC5zZXRfcHJpdl9mbGFnc1x0XHQ9IG1hbmFfc2V0X3ByaXZfZmxhZ3MsXG4gfTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYW5hL21hbmEuaCBiL2luY2x1ZGUvbmV0L21hbmEvbWFuYS5oXG5pbmRleCAxM2M4N2JhZjAxOGVlMS4uOGRjNDk2ZjA1OTM4YmYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9tYW5hL21hbmEuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbWFuYS9tYW5hLmhcbkBAIC0zMCw2ICYjNDM7MzAsMTIgQEAgZW51bSBUUklfU1RBVEUge1xuIFx0VFJJX1NUQVRFX1RSVUUgPSAxXG4gfTtcbiBcbiYjNDM7LyogTUFOQSBldGh0b29sIHByaXZhdGUgZmxhZyBiaXQgcG9zaXRpb25zICovXG4mIzQzO2VudW0gbWFuYV9wcml2X2ZsYWdfYml0cyB7XG4mIzQzO1x0TUFOQV9QUklWX0ZMQUdfVVNFX0ZVTExfUEFHRV9SWEJVRiA9IDAsXG4mIzQzO1x0TUFOQV9QUklWX0ZMQUdfTUFYLFxuJiM0Mzt9O1xuJiM0MztcbiAvKiBOdW1iZXIgb2YgZW50cmllcyBmb3IgaGFyZHdhcmUgaW5kaXJlY3Rpb24gdGFibGUgbXVzdCBiZSBpbiBwb3dlciBvZiAyICovXG4gI2RlZmluZSBNQU5BX0lORElSRUNUX1RBQkxFX01BWF9TSVpFIDUxMlxuICNkZWZpbmUgTUFOQV9JTkRJUkVDVF9UQUJMRV9ERUZfU0laRSA2NFxuQEAgLTUzMiw2ICYjNDM7NTM4LDggQEAgc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0IHtcbiBcdHUzMiByeGJwcmVfaGVhZHJvb207XG4gXHR1MzIgcnhicHJlX2ZyYWdfY291bnQ7XG4gXG4mIzQzO1x0dTMyIHByaXZfZmxhZ3M7XG4mIzQzO1xuIFx0c3RydWN0IGJwZl9wcm9nICpicGZfcHJvZztcbiBcbiBcdC8qIENyZWF0ZSBudW1fcXVldWVzIEVRcywgU1FzLCBTUS1DUXMsIFJRcyBhbmQgUlEtQ1FzLCByZXNwZWN0aXZlbHkuICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjI6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlciwgd2hpY2ggaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBQQ0kgZHJpdmVyLiBUaGUgbW9kaWZpZWQgY29kZSAoZXRodG9vbCBvcHMgYW5kIFJYIGJ1ZmZlciBhbGxvY2F0aW9uIGxvZ2ljKSBpcyBvbmx5IHJlYWNoYWJsZSBpZiB0aGUgTUFOQSBQQ0kgZGV2aWNlIGlzIHByZXNlbnQgYW5kIHByb2JlZC4gU2luY2Ugc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMgKGxpa2UgR0NFIG9yIFFFTVUpIGRvIG5vdCBlbXVsYXRlIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUsIHRoZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjVjZTZiNTY2ZmYzZTJhNGUzYzZmZmRjMGZhYjdlNjQ1NTA1ZDc2MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDEgMjI6Mjk6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMKaW5kZXggMjZhZWYyMWM2YzJjODkuLjRiZDgzYzc4MmVhMzdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jCkBAIC03NTUsNiAmIzQzOzc1NSwyNSBAQCBzdGF0aWMgdm9pZCAqbWFuYV9nZXRfcnhidWZfcHJlKHN0cnVjdCBtYW5hX3J4cSAqcnhxLCBkbWFfYWRkcl90ICpkYSkKIAlyZXR1cm4gdmE7CiB9CiAKJiM0MztzdGF0aWMgYm9vbAomIzQzO21hbmFfdXNlX3NpbmdsZV9yeGJ1Zl9wZXJfcGFnZShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgdTMyIG10dSkKJiM0Mzt7CiYjNDM7CS8qIE9uIHNvbWUgcGxhdGZvcm1zIHdpdGggNEsgUEFHRV9TSVpFLCBwYWdlX3Bvb2wgZnJhZ21lbnQgYWxsb2NhdGlvbgomIzQzOwkgKiBpbiB0aGUgUlggcmVmaWxsIHBhdGggKH4ya0IgYnVmZmVyKSBjYW4gY2F1c2Ugc2lnbmlmaWNhbnQgdGhyb3VnaHB1dAomIzQzOwkgKiByZWdyZXNzaW9uIHVuZGVyIGhpZ2ggY29ubmVjdGlvbiBjb3VudHMuIEFsbG93IHVzZXIgdG8gZm9yY2Ugb25lIFJYCiYjNDM7CSAqIGJ1ZmZlciBwZXIgcGFnZSB2aWEgZXRodG9vbCBwcml2YXRlIGZsYWcgdG8gYnlwYXNzIHRoZSBmcmFnbWVudAomIzQzOwkgKiBwYXRoLgomIzQzOwkgKi8KJiM0MzsJaWYgKGFwYy0mZ3Q7cHJpdl9mbGFncyAmYW1wOyBCSVQoTUFOQV9QUklWX0ZMQUdfVVNFX0ZVTExfUEFHRV9SWEJVRikpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJLyogRm9yIHhkcCBhbmQganVtYm8gZnJhbWVzIG1ha2Ugc3VyZSBvbmx5IG9uZSBwYWNrZXQgZml0cyBwZXIgcGFnZS4gKi8KJiM0MzsJaWYgKG10dSAmIzQzOyBNQU5BX1JYQlVGX1BBRCAmZ3Q7IFBBR0VfU0laRSAvIDIgfHwgbWFuYV94ZHBfZ2V0KGFwYykpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKIC8qIEdldCBSWCBidWZmZXImIzM5O3MgZGF0YSBzaXplLCBhbGxvYyBzaXplLCBYRFAgaGVhZHJvb20gYmFzZWQgb24gTVRVICovCiBzdGF0aWMgdm9pZCBtYW5hX2dldF9yeGJ1Zl9jZmcoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsCiAJCQkgICAgICAgaW50IG10dSwgdTMyICpkYXRhc2l6ZSwgdTMyICphbGxvY19zaXplLApAQCAtNzY1LDggJiM0Mzs3ODQsNyBAQCBzdGF0aWMgdm9pZCBtYW5hX2dldF9yeGJ1Zl9jZmcoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsCiAJLyogQ2FsY3VsYXRlIGRhdGFzaXplIGZpcnN0IChjb25zaXN0ZW50IGFjcm9zcyBhbGwgY2FzZXMpICovCiAJKmRhdGFzaXplID0gbXR1ICYjNDM7IEVUSF9ITEVOOwogCi0JLyogRm9yIHhkcCBhbmQganVtYm8gZnJhbWVzIG1ha2Ugc3VyZSBvbmx5IG9uZSBwYWNrZXQgZml0cyBwZXIgcGFnZSAqLwotCWlmIChtdHUgJiM0MzsgTUFOQV9SWEJVRl9QQUQgJmd0OyBQQUdFX1NJWkUgLyAyIHx8IG1hbmFfeGRwX2dldChhcGMpKSB7CiYjNDM7CWlmIChtYW5hX3VzZV9zaW5nbGVfcnhidWZfcGVyX3BhZ2UoYXBjLCBtdHUpKSB7CiAJCWlmIChtYW5hX3hkcF9nZXQoYXBjKSkgewogCQkJKmhlYWRyb29tID0gWERQX1BBQ0tFVF9IRUFEUk9PTTsKIAkJCSphbGxvY19zaXplID0gUEFHRV9TSVpFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2V0aHRvb2wuYwppbmRleCA5NGU2NThkMDdhMjdlOC4uM2M0OThhMjIyOTY1ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZXRodG9vbC5jCkBAIC0xMzMsNTggJiM0MzsxMzMsOTQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtYW5hX3N0YXRzX2Rlc2MgbWFuYV9waHlfc3RhdHNbXSA9IHsKIAl7ICYjMzQ7aGNfdGM3X3R4X3BhdXNlX3BoeSYjMzQ7LCBvZmZzZXRvZihzdHJ1Y3QgbWFuYV9ldGh0b29sX3BoeV9zdGF0cywgdHhfcGF1c2VfdGM3X3BoeSkgfSwKIH07CiAKJiM0MztzdGF0aWMgY29uc3QgY2hhciBtYW5hX3ByaXZfZmxhZ3NbTUFOQV9QUklWX0ZMQUdfTUFYXVtFVEhfR1NUUklOR19MRU5dID0gewomIzQzOwlbTUFOQV9QUklWX0ZMQUdfVVNFX0ZVTExfUEFHRV9SWEJVRl0gPSAmIzM0O2Z1bGwtcGFnZS1yeCYjMzQ7CiYjNDM7fTsKJiM0MzsKIHN0YXRpYyBpbnQgbWFuYV9nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IHN0cmluZ3NldCkKIHsKIAlzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyA9IG5ldGRldl9wcml2KG5kZXYpOwogCXVuc2lnbmVkIGludCBudW1fcXVldWVzID0gYXBjLSZndDtudW1fcXVldWVzOwogCi0JaWYgKHN0cmluZ3NldCAhPSBFVEhfU1NfU1RBVFMpCi0JCXJldHVybiAtRUlOVkFMOwomIzQzOwlzd2l0Y2ggKHN0cmluZ3NldCkgewomIzQzOwljYXNlIEVUSF9TU19TVEFUUzoKJiM0MzsJCXJldHVybiBBUlJBWV9TSVpFKG1hbmFfZXRoX3N0YXRzKSAmIzQzOwomIzQzOwkJICAgICAgIEFSUkFZX1NJWkUobWFuYV9waHlfc3RhdHMpICYjNDM7CiYjNDM7CQkgICAgICAgQVJSQVlfU0laRShtYW5hX2hjX3N0YXRzKSAgJiM0MzsKJiM0MzsJCSAgICAgICBudW1fcXVldWVzICogKE1BTkFfU1RBVFNfUlhfQ09VTlQgJiM0MzsgTUFOQV9TVEFUU19UWF9DT1VOVCk7CiYjNDM7CiYjNDM7CWNhc2UgRVRIX1NTX1BSSVZfRkxBR1M6CiYjNDM7CQlyZXR1cm4gTUFOQV9QUklWX0ZMQUdfTUFYOwogCi0JcmV0dXJuIEFSUkFZX1NJWkUobWFuYV9ldGhfc3RhdHMpICYjNDM7IEFSUkFZX1NJWkUobWFuYV9waHlfc3RhdHMpICYjNDM7IEFSUkFZX1NJWkUobWFuYV9oY19zdGF0cykgJiM0MzsKLQkJCW51bV9xdWV1ZXMgKiAoTUFOQV9TVEFUU19SWF9DT1VOVCAmIzQzOyBNQU5BX1NUQVRTX1RYX0NPVU5UKTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiB9CiAKLXN0YXRpYyB2b2lkIG1hbmFfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBzdHJpbmdzZXQsIHU4ICpkYXRhKQomIzQzO3N0YXRpYyB2b2lkIG1hbmFfZ2V0X3N0cmluZ3Nfc3RhdHMoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsIHU4ICoqZGF0YSkKIHsKLQlzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyA9IG5ldGRldl9wcml2KG5kZXYpOwogCXVuc2lnbmVkIGludCBudW1fcXVldWVzID0gYXBjLSZndDtudW1fcXVldWVzOwogCWludCBpLCBqOwogCi0JaWYgKHN0cmluZ3NldCAhPSBFVEhfU1NfU1RBVFMpCi0JCXJldHVybjsKIAlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShtYW5hX2V0aF9zdGF0cyk7IGkmIzQzOyYjNDM7KQotCQlldGh0b29sX3B1dHMoJmFtcDtkYXRhLCBtYW5hX2V0aF9zdGF0c1tpXS5uYW1lKTsKJiM0MzsJCWV0aHRvb2xfcHV0cyhkYXRhLCBtYW5hX2V0aF9zdGF0c1tpXS5uYW1lKTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKG1hbmFfaGNfc3RhdHMpOyBpJiM0MzsmIzQzOykKLQkJZXRodG9vbF9wdXRzKCZhbXA7ZGF0YSwgbWFuYV9oY19zdGF0c1tpXS5uYW1lKTsKJiM0MzsJCWV0aHRvb2xfcHV0cyhkYXRhLCBtYW5hX2hjX3N0YXRzW2ldLm5hbWUpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUobWFuYV9waHlfc3RhdHMpOyBpJiM0MzsmIzQzOykKLQkJZXRodG9vbF9wdXRzKCZhbXA7ZGF0YSwgbWFuYV9waHlfc3RhdHNbaV0ubmFtZSk7CiYjNDM7CQlldGh0b29sX3B1dHMoZGF0YSwgbWFuYV9waHlfc3RhdHNbaV0ubmFtZSk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKLQkJZXRodG9vbF9zcHJpbnRmKCZhbXA7ZGF0YSwgJiMzNDtyeF8lZF9wYWNrZXRzJiMzNDssIGkpOwotCQlldGh0b29sX3NwcmludGYoJmFtcDtkYXRhLCAmIzM0O3J4XyVkX2J5dGVzJiMzNDssIGkpOwotCQlldGh0b29sX3NwcmludGYoJmFtcDtkYXRhLCAmIzM0O3J4XyVkX3hkcF9kcm9wJiMzNDssIGkpOwotCQlldGh0b29sX3NwcmludGYoJmFtcDtkYXRhLCAmIzM0O3J4XyVkX3hkcF90eCYjMzQ7LCBpKTsKLQkJZXRodG9vbF9zcHJpbnRmKCZhbXA7ZGF0YSwgJiMzNDtyeF8lZF94ZHBfcmVkaXJlY3QmIzM0OywgaSk7Ci0JCWV0aHRvb2xfc3ByaW50ZigmYW1wO2RhdGEsICYjMzQ7cnhfJWRfcGt0X2xlbjBfZXJyJiMzNDssIGkpOwomIzQzOwkJZXRodG9vbF9zcHJpbnRmKGRhdGEsICYjMzQ7cnhfJWRfcGFja2V0cyYjMzQ7LCBpKTsKJiM0MzsJCWV0aHRvb2xfc3ByaW50ZihkYXRhLCAmIzM0O3J4XyVkX2J5dGVzJiMzNDssIGkpOwomIzQzOwkJZXRodG9vbF9zcHJpbnRmKGRhdGEsICYjMzQ7cnhfJWRfeGRwX2Ryb3AmIzM0OywgaSk7CiYjNDM7CQlldGh0b29sX3NwcmludGYoZGF0YSwgJiMzNDtyeF8lZF94ZHBfdHgmIzM0OywgaSk7CiYjNDM7CQlldGh0b29sX3NwcmludGYoZGF0YSwgJiMzNDtyeF8lZF94ZHBfcmVkaXJlY3QmIzM0OywgaSk7CiYjNDM7CQlldGh0b29sX3NwcmludGYoZGF0YSwgJiMzNDtyeF8lZF9wa3RfbGVuMF9lcnImIzM0OywgaSk7CiAJCWZvciAoaiA9IDA7IGogJmx0OyBNQU5BX1JYQ09NUF9PT0JfTlVNX1BQSSAtIDE7IGomIzQzOyYjNDM7KQotCQkJZXRodG9vbF9zcHJpbnRmKCZhbXA7ZGF0YSwgJiMzNDtyeF8lZF9jb2FsZXNjZWRfY3FlXyVkJiMzNDssIGksIGogJiM0MzsgMik7CiYjNDM7CQkJZXRodG9vbF9zcHJpbnRmKGRhdGEsCiYjNDM7CQkJCQkmIzM0O3J4XyVkX2NvYWxlc2NlZF9jcWVfJWQmIzM0OywKJiM0MzsJCQkJCWksCiYjNDM7CQkJCQlqICYjNDM7IDIpOwogCX0KIAogCWZvciAoaSA9IDA7IGkgJmx0OyBudW1fcXVldWVzOyBpJiM0MzsmIzQzOykgewotCQlldGh0b29sX3NwcmludGYoJmFtcDtkYXRhLCAmIzM0O3R4XyVkX3BhY2tldHMmIzM0OywgaSk7Ci0JCWV0aHRvb2xfc3ByaW50ZigmYW1wO2RhdGEsICYjMzQ7dHhfJWRfYnl0ZXMmIzM0OywgaSk7Ci0JCWV0aHRvb2xfc3ByaW50ZigmYW1wO2RhdGEsICYjMzQ7dHhfJWRfeGRwX3htaXQmIzM0OywgaSk7Ci0JCWV0aHRvb2xfc3ByaW50ZigmYW1wO2RhdGEsICYjMzQ7dHhfJWRfdHNvX3BhY2tldHMmIzM0OywgaSk7Ci0JCWV0aHRvb2xfc3ByaW50ZigmYW1wO2RhdGEsICYjMzQ7dHhfJWRfdHNvX2J5dGVzJiMzNDssIGkpOwotCQlldGh0b29sX3NwcmludGYoJmFtcDtkYXRhLCAmIzM0O3R4XyVkX3Rzb19pbm5lcl9wYWNrZXRzJiMzNDssIGkpOwotCQlldGh0b29sX3NwcmludGYoJmFtcDtkYXRhLCAmIzM0O3R4XyVkX3Rzb19pbm5lcl9ieXRlcyYjMzQ7LCBpKTsKLQkJZXRodG9vbF9zcHJpbnRmKCZhbXA7ZGF0YSwgJiMzNDt0eF8lZF9sb25nX3BrdF9mbXQmIzM0OywgaSk7Ci0JCWV0aHRvb2xfc3ByaW50ZigmYW1wO2RhdGEsICYjMzQ7dHhfJWRfc2hvcnRfcGt0X2ZtdCYjMzQ7LCBpKTsKLQkJZXRodG9vbF9zcHJpbnRmKCZhbXA7ZGF0YSwgJiMzNDt0eF8lZF9jc3VtX3BhcnRpYWwmIzM0OywgaSk7Ci0JCWV0aHRvb2xfc3ByaW50ZigmYW1wO2RhdGEsICYjMzQ7dHhfJWRfbWFuYV9tYXBfZXJyJiMzNDssIGkpOwomIzQzOwkJZXRodG9vbF9zcHJpbnRmKGRhdGEsICYjMzQ7dHhfJWRfcGFja2V0cyYjMzQ7LCBpKTsKJiM0MzsJCWV0aHRvb2xfc3ByaW50ZihkYXRhLCAmIzM0O3R4XyVkX2J5dGVzJiMzNDssIGkpOwomIzQzOwkJZXRodG9vbF9zcHJpbnRmKGRhdGEsICYjMzQ7dHhfJWRfeGRwX3htaXQmIzM0OywgaSk7CiYjNDM7CQlldGh0b29sX3NwcmludGYoZGF0YSwgJiMzNDt0eF8lZF90c29fcGFja2V0cyYjMzQ7LCBpKTsKJiM0MzsJCWV0aHRvb2xfc3ByaW50ZihkYXRhLCAmIzM0O3R4XyVkX3Rzb19ieXRlcyYjMzQ7LCBpKTsKJiM0MzsJCWV0aHRvb2xfc3ByaW50ZihkYXRhLCAmIzM0O3R4XyVkX3Rzb19pbm5lcl9wYWNrZXRzJiMzNDssIGkpOwomIzQzOwkJZXRodG9vbF9zcHJpbnRmKGRhdGEsICYjMzQ7dHhfJWRfdHNvX2lubmVyX2J5dGVzJiMzNDssIGkpOwomIzQzOwkJZXRodG9vbF9zcHJpbnRmKGRhdGEsICYjMzQ7dHhfJWRfbG9uZ19wa3RfZm10JiMzNDssIGkpOwomIzQzOwkJZXRodG9vbF9zcHJpbnRmKGRhdGEsICYjMzQ7dHhfJWRfc2hvcnRfcGt0X2ZtdCYjMzQ7LCBpKTsKJiM0MzsJCWV0aHRvb2xfc3ByaW50ZihkYXRhLCAmIzM0O3R4XyVkX2NzdW1fcGFydGlhbCYjMzQ7LCBpKTsKJiM0MzsJCWV0aHRvb2xfc3ByaW50ZihkYXRhLCAmIzM0O3R4XyVkX21hbmFfbWFwX2VyciYjMzQ7LCBpKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtYW5hX2dldF9zdHJpbmdzX3ByaXZfZmxhZ3ModTggKipkYXRhKQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBNQU5BX1BSSVZfRkxBR19NQVg7IGkmIzQzOyYjNDM7KQomIzQzOwkJZXRodG9vbF9wdXRzKGRhdGEsIG1hbmFfcHJpdl9mbGFnc1tpXSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1hbmFfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBzdHJpbmdzZXQsIHU4ICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsKJiM0MzsJc3dpdGNoIChzdHJpbmdzZXQpIHsKJiM0MzsJY2FzZSBFVEhfU1NfU1RBVFM6CiYjNDM7CQltYW5hX2dldF9zdHJpbmdzX3N0YXRzKGFwYywgJmFtcDtkYXRhKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEVUSF9TU19QUklWX0ZMQUdTOgomIzQzOwkJbWFuYV9nZXRfc3RyaW5nc19wcml2X2ZsYWdzKCZhbXA7ZGF0YSk7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWJyZWFrOwogCX0KIH0KIApAQCAtNTk0LDYgJiM0Mzs2MzAsODggQEAgc3RhdGljIGludCBtYW5hX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyB1MzIgbWFuYV9nZXRfcHJpdl9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CiYjNDM7CXJldHVybiBhcGMtJmd0O3ByaXZfZmxhZ3M7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbWFuYV9zZXRfcHJpdl9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIHByaXZfZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwl1MzIgY2hhbmdlZCA9IGFwYy0mZ3Q7cHJpdl9mbGFncyBeIHByaXZfZmxhZ3M7CiYjNDM7CXUzMiBvbGRfcHJpdl9mbGFncyA9IGFwYy0mZ3Q7cHJpdl9mbGFnczsKJiM0MzsJYm9vbCBzY2hlZHVsZV9wb3J0X3Jlc2V0ID0gZmFsc2U7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwlpZiAoIWNoYW5nZWQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogUmVqZWN0IHVua25vd24gYml0cyAqLwomIzQzOwlpZiAocHJpdl9mbGFncyAmYW1wOyB+R0VOTUFTSyhNQU5BX1BSSVZfRkxBR19NQVggLSAxLCAwKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoY2hhbmdlZCAmYW1wOyBCSVQoTUFOQV9QUklWX0ZMQUdfVVNFX0ZVTExfUEFHRV9SWEJVRikpIHsKJiM0MzsJCWFwYy0mZ3Q7cHJpdl9mbGFncyA9IHByaXZfZmxhZ3M7CiYjNDM7CiYjNDM7CQlpZiAoIWFwYy0mZ3Q7cG9ydF9pc191cCkgewomIzQzOwkJCS8qIFBvcnQgaXMgZG93biwgZmxhZyB1cGRhdGVkIHRvIGFwcGx5IG9uIG5leHQgdXAKJiM0MzsJCQkgKiBzbyBqdXN0IHJldHVybi4KJiM0MzsJCQkgKi8KJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qIFByZS1hbGxvY2F0ZSBidWZmZXJzIHRvIHByZXZlbnQgZmFpbHVyZSBpbiBtYW5hX2F0dGFjaAomIzQzOwkJICogbGF0ZXIKJiM0MzsJCSAqLwomIzQzOwkJZXJyID0gbWFuYV9wcmVfYWxsb2NfcnhidWZzKGFwYywgbmRldi0mZ3Q7bXR1LCBhcGMtJmd0O251bV9xdWV1ZXMpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCW5ldGRldl9lcnIobmRldiwKJiM0MzsJCQkJICAgJiMzNDtJbnN1ZmZpY2llbnQgbWVtb3J5IGZvciBuZXcgYWxsb2NhdGlvbnNcbiYjMzQ7KTsKJiM0MzsJCQlhcGMtJmd0O3ByaXZfZmxhZ3MgPSBvbGRfcHJpdl9mbGFnczsKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZXJyID0gbWFuYV9kZXRhY2gobmRldiwgZmFsc2UpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCW5ldGRldl9lcnIobmRldiwgJiMzNDttYW5hX2RldGFjaCBmYWlsZWQ6ICVkXG4mIzM0OywgZXJyKTsKJiM0MzsJCQlhcGMtJmd0O3ByaXZfZmxhZ3MgPSBvbGRfcHJpdl9mbGFnczsKJiM0MzsKJiM0MzsJCQkvKiBQb3J0IGlzIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gUmVzdG9yZQomIzQzOwkJCSAqICYjMzk7cG9ydF9pc191cCYjMzk7IHNvIHRoYXQgcXVldWUgcmVzZXQgd29yayBoYW5kbGVyCiYjNDM7CQkJICogY2FuIHByb3Blcmx5IGRldGFjaCBhbmQgcmUtYXR0YWNoLgomIzQzOwkJCSAqLwomIzQzOwkJCWFwYy0mZ3Q7cG9ydF9pc191cCA9IHRydWU7CiYjNDM7CQkJc2NoZWR1bGVfcG9ydF9yZXNldCA9IHRydWU7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQllcnIgPSBtYW5hX2F0dGFjaChuZGV2KTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQluZXRkZXZfZXJyKG5kZXYsICYjMzQ7bWFuYV9hdHRhY2ggZmFpbGVkOiAlZFxuJiMzNDssIGVycik7CiYjNDM7CQkJYXBjLSZndDtwcml2X2ZsYWdzID0gb2xkX3ByaXZfZmxhZ3M7CiYjNDM7CiYjNDM7CQkJLyogUmVzdG9yZSAmIzM5O3BvcnRfaXNfdXAmIzM5OyBzbyB0aGUgcmVzZXQgd29yayBoYW5kbGVyCiYjNDM7CQkJICogY2FuIHByb3Blcmx5IGRldGFjaC9hdHRhY2guIFdpdGhvdXQgdGhpcywKJiM0MzsJCQkgKiB0aGUgaGFuZGxlciBzZWVzIHBvcnRfaXNfdXA9ZmFsc2UgYW5kIHNraXBzCiYjNDM7CQkJICogcXVldWUgYWxsb2NhdGlvbiwgbGVhdmluZyB0aGUgcG9ydCBkZWFkLgomIzQzOwkJCSAqLwomIzQzOwkJCWFwYy0mZ3Q7cG9ydF9pc191cCA9IHRydWU7CiYjNDM7CQkJc2NoZWR1bGVfcG9ydF9yZXNldCA9IHRydWU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MztvdXQ6CiYjNDM7CW1hbmFfcHJlX2RlYWxsb2NfcnhidWZzKGFwYyk7CiYjNDM7CiYjNDM7CWlmIChzY2hlZHVsZV9wb3J0X3Jlc2V0KQomIzQzOwkJcXVldWVfd29yayhhcGMtJmd0O2FjLSZndDtwZXJfcG9ydF9xdWV1ZV9yZXNldF93cSwKJiM0MzsJCQkgICAmYW1wO2FwYy0mZ3Q7cXVldWVfcmVzZXRfd29yayk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwogY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG1hbmFfZXRodG9vbF9vcHMgPSB7CiAJLnN1cHBvcnRlZF9jb2FsZXNjZV9wYXJhbXMgPSBFVEhUT09MX0NPQUxFU0NFX1JYX0NRRV9GUkFNRVMsCiAJLm9wX25lZWRzX3J0bmwJCT0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8CkBAIC02MTQsNCAmIzQzOzczMiw2IEBAIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBtYW5hX2V0aHRvb2xfb3BzID0gewogCS5zZXRfcmluZ3BhcmFtICAgICAgICAgID0gbWFuYV9zZXRfcmluZ3BhcmFtLAogCS5nZXRfbGlua19rc2V0dGluZ3MJPSBtYW5hX2dldF9saW5rX2tzZXR0aW5ncywKIAkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKJiM0MzsJLmdldF9wcml2X2ZsYWdzCQk9IG1hbmFfZ2V0X3ByaXZfZmxhZ3MsCiYjNDM7CS5zZXRfcHJpdl9mbGFncwkJPSBtYW5hX3NldF9wcml2X2ZsYWdzLAogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hbmEvbWFuYS5oIGIvaW5jbHVkZS9uZXQvbWFuYS9tYW5hLmgKaW5kZXggMTNjODdiYWYwMThlZTEuLjhkYzQ5NmYwNTkzOGJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tYW5hL21hbmEuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9tYW5hL21hbmEuaApAQCAtMzAsNiAmIzQzOzMwLDEyIEBAIGVudW0gVFJJX1NUQVRFIHsKIAlUUklfU1RBVEVfVFJVRSA9IDEKIH07CiAKJiM0MzsvKiBNQU5BIGV0aHRvb2wgcHJpdmF0ZSBmbGFnIGJpdCBwb3NpdGlvbnMgKi8KJiM0MztlbnVtIG1hbmFfcHJpdl9mbGFnX2JpdHMgewomIzQzOwlNQU5BX1BSSVZfRkxBR19VU0VfRlVMTF9QQUdFX1JYQlVGID0gMCwKJiM0MzsJTUFOQV9QUklWX0ZMQUdfTUFYLAomIzQzO307CiYjNDM7CiAvKiBOdW1iZXIgb2YgZW50cmllcyBmb3IgaGFyZHdhcmUgaW5kaXJlY3Rpb24gdGFibGUgbXVzdCBiZSBpbiBwb3dlciBvZiAyICovCiAjZGVmaW5lIE1BTkFfSU5ESVJFQ1RfVEFCTEVfTUFYX1NJWkUgNTEyCiAjZGVmaW5lIE1BTkFfSU5ESVJFQ1RfVEFCTEVfREVGX1NJWkUgNjQKQEAgLTUzMiw2ICYjNDM7NTM4LDggQEAgc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0IHsKIAl1MzIgcnhicHJlX2hlYWRyb29tOwogCXUzMiByeGJwcmVfZnJhZ19jb3VudDsKIAomIzQzOwl1MzIgcHJpdl9mbGFnczsKJiM0MzsKIAlzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nOwogCiAJLyogQ3JlYXRlIG51bV9xdWV1ZXMgRVFzLCBTUXMsIFNRLUNRcywgUlFzIGFuZCBSUS1DUXMsIHJlc3BlY3RpdmVseS4gKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc0NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyB0aGUgYGZ1bGwtcGFnZS1yeGAgUGF0Y2g6IEEgVmlydHVhbGl6YXRpb24gQ29udW5kcnVtKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCDigJMgYSBuZXcgYGV0aHRvb2xgIHByaXZhdGUgZmxhZywgYGZ1bGwtcGFnZS1yeGAsIGZvciB0aGUgTWljcm9zb2Z0IE1BTkEgZXRoZXJuZXQgZHJpdmVyLiBJdCYjMzk7cyBzdXBwb3NlZCB0byBmb3JjZSB0aGUgZHJpdmVyIHRvIHVzZSBhIGZ1bGwgcGFnZSBmb3IgZWFjaCBSWCBidWZmZXIsIHNraXBwaW5nIHRoZSBmcmFnbWVudCBwYXRoLiBUaGUgY29kZSYjMzk7cyBzcHJlYWQgYWNyb3NzIGBtYW5hX2VuLmNgLCBgbWFuYV9ldGh0b29sLmNgLCBhbmQgYG1hbmEuaGAuIEZpbmUsIHN0YW5kYXJkIHN0dWZmLiBOb3cgdGhlIHF1ZXN0aW9uIGlzLCBob3cgZG8gd2UgKnRlc3QqIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gVGhpcyBkcml2ZXImIzM5O3MgZm9yIHRoZSBBenVyZSBOZXR3b3JrIEFkYXB0ZXIsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBQQ0kgZGV2aWNlLgoKVGhlIHJlYWwgY2hhbGxlbmdlIGlzIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgbGlrZSB0aGlzLCB1bmxlc3Mgd2UgYXJlIHRhbGtpbmcgYWJvdXQgc29tZXRoaW5nIG1vcmUgYW1lbmFibGUgdG8gZW11bGF0aW9uIHN1Y2ggYXMgVVNCLCB2aXJ0aW8sIHZldGgsIG9yIG1hYzgwMjExX2h3c2ltLiBUaGVzZSB0aGluZ3MgYXJlIHJhcmVseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgc3l6a2FsbGVyIFZNcyB1bmxlc3MgdGhlcmUmIzM5O3MgYW4gZW11bGF0b3IuIFNwZWNpZmljYWxseSwgdW5sZXNzIGl0JiMzOTtzIHJ1bm5pbmcgb24gQXp1cmUgVk1zLCB0aGlzIGlzIGdvaW5nIHRvIGJlIGRpZmZpY3VsdC4gU3l6a2FsbGVyIHJ1bnMgb24gR0NFIG9yIFFFTVUsIHNvIGNhbiBRRU1VIGVtdWxhdGUgYSBNQU5BIGRldmljZT8gSGlnaGx5IHVubGlrZWx5LgoKQ2FuIHdlIGV2ZW4gcmVhY2ggYG1hbmFfc2V0X3ByaXZfZmxhZ3NgIHdpdGhvdXQgYSByZWFsIE1BTkEgZGV2aWNlPyBUaGUgYGV0aHRvb2xgIG9wZXJhdGlvbnMgYXJlIHJlZ2lzdGVyZWQgd2hlbiB0aGUgbmV0d29yayBkZXZpY2UgaXMgcmVnaXN0ZXJlZCwgYW5kIHRoYXQgbmV0ZGV2IHJlZ2lzdHJhdGlvbiBoYXBwZW5zIGluIHRoZSBwcm9iZSBmdW5jdGlvbiBvZiB0aGUgUENJIGRyaXZlci4gSWYgbm8gTUFOQSBQQ0kgZGV2aWNlIGlzIHByZXNlbnQsIHRoZSBwcm9iZSBmdW5jdGlvbiBpcyBuZXZlciBjYWxsZWQsIHRoZSBuZXRkZXYgaXMgbmV2ZXIgY3JlYXRlZCwgYW5kIHRob3NlIGBldGh0b29sYCBvcGVyYXRpb25zIGFyZSB1bnJlYWNoYWJsZS4gU28gdGhlIGFuc3dlciBpcyAmIzM0O25vJiMzNDsuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gc2VlIGlmICphbnkqIGtpbmQgb2Ygc29mdHdhcmUgZW11bGF0aW9uIGV4aXN0cyBmb3IgdGhlIE1BTkEgZGV2aWNlLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBkcml2ZXIgZGlyZWN0b3J5OiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvYC4gSSB3aWxsIHNlYXJjaCBmb3Igc29tZXRoaW5nIGxpa2UgYG1hbmFfcHJvYmVgIG9yIGEgc2ltaWxhciBpZGVudGlmaWVyLiBUaGlzIGlzIGNyaXRpY2FsOiBpZiB0aGVyZSBpcyBubyBlbXVsYXRpb24gYXZhaWxhYmxlLCByZWFjaGluZyB0aGlzIHBhdGNoIGZvciB0ZXN0aW5nIG1heSBiZSBkaWZmaWN1bHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFuYV9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYz0xNzc9c3RhdGljIGludCBtYW5hX2dkX3F1ZXJ5X21heF9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjU5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6MjYwOlx0LyogQ2FwIHRvIHRoZSBzYW1lIGxpbWl0IHVzZWQgYnkgbWFuYV9wcm9iZSgpIGZvciBwb3J0IGluc3RhbnRpYXRpb24sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNjEtXHQgKiBzbyBNU0ktWCBhbmQgcXVldWUgYnVkZ2V0aW5nIG1hdGNoZXMgdGhlIGFjdHVhbCBwb3J0IGNvdW50LlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jPTIyNTA9c3RhdGljIGludCBtYW5hX2dkX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTIzMDUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzoyMzA2Olx0ZXJyID0gbWFuYV9wcm9iZShcdTAwMjZnYy1cdTAwM2VtYW5hLCBmYWxzZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yMzA3LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yMzQ0LVx0ICogSGFyZHdhcmUgY291bGQgYmUgaW4gcmVjb3ZlcnkgbW9kZSBhbmQgdGhlIEhXQyByZXR1cm5zIFRJTUVET1VUIG9yXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzoyMzQ1Olx0ICogRVBST1RPIGZyb20gbWFuYV9nZF9zZXR1cCgpLCBtYW5hX3Byb2JlKCkgb3IgbWFuYV9yZG1hX3Byb2JlKCksIG9yXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yMzQ2LVx0ICogd2UgcmVjZWl2ZWQgYSBoYXJkd2FyZSByZXNldCBldmVudCBvdmVyIEhXQyBpbnRlcnJ1cHQuIEluIHRoaXMgY2FzZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYz0yNDA4PWludCBtYW5hX2dkX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNDE2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6MjQxNzpcdGVyciA9IG1hbmFfcHJvYmUoXHUwMDI2Z2MtXHUwMDNlbWFuYSwgdHJ1ZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNDE4LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM9MzQ4Nz1pbnQgbWFuYV9kZXRhY2goc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGJvb2wgZnJvbV9jbG9zZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMzUyMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzozNTI0OnN0YXRpYyBpbnQgbWFuYV9wcm9iZV9wb3J0KHN0cnVjdCBtYW5hX2NvbnRleHQgKmFjLCBpbnQgcG9ydF9pZHgsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMzUyNS1cdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqKm5kZXZfc3RvcmFnZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM9Mzc1ND1zdGF0aWMgdm9pZCBtYW5hX2dmX3N0YXRzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTM3NzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM6Mzc3NzppbnQgbWFuYV9wcm9iZShzdHJ1Y3QgZ2RtYV9kZXYgKmdkLCBib29sIHJlc3VtaW5nKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTM3Nzgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0zODUxLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhYy1cdTAwM2VudW1fcG9ydHM7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM6Mzg1MjpcdFx0XHRlcnIgPSBtYW5hX3Byb2JlX3BvcnQoYWMsIGksIFx1MDAyNmFjLVx1MDAzZXBvcnRzW2ldKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0zODUzLVx0XHRcdC8qIExvZyB0aGUgcG9ydCBmb3Igd2hpY2ggdGhlIHByb2JlIGZhaWxlZCwgc3RvcCBwcm9iaW5nXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUzNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNQU5BIERyaXZlciBSZWFjaGFiaWxpdHkgQW5hbHlzaXMqKgoKT2theSwgc28gdGhlIE1BTkEgZHJpdmVyLCB0aGF0JiMzOTtzIHRoZSBQQ0kgZHJpdmVyIGZvciB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlci4gU3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gQnV0IGhlcmUmIzM5O3MgdGhlIGtpY2tlcjogaXQgcmVsaWVzIG9uIHNwZWNpZmljIFBDSSBoYXJkd2FyZS4gSXQgbmVlZHMgdGhhdCBwaHlzaWNhbCBwcmVzZW5jZSB0byBkbyBpdHMgcHJvYmluZyBhbmQgcmVnaXN0ZXIgdGhlIG5ldHdvcmsgZGV2aWNlLgoKTm93LCBteSBpbml0aWFsIHRob3VnaHQgaXMsIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIEkmIzM5O20gcmlnaHQsIHRoYXQgdGhpcyBjb2RlIGlzICpuZXZlciogaGl0IGluIGEgc3RhbmRhcmQgU3l6a2FsbGVyIHNldHVwLiBXZSYjMzk7cmUgZWl0aGVyIHJ1bm5pbmcgaW4gR0NFIG9yIFFFTVUsIGFuZCB0aG9zZSBlbnZpcm9ubWVudHMsIGJ5IGRlZmF1bHQsIGRvbiYjMzk7dCBoYXZlIHRoaXMgcGFydGljdWxhciBwaWVjZSBvZiBQQ0kgaGFyZHdhcmUgdW5sZXNzIHdlJiMzOTt2ZSBnb25lIHRvIHRoZSB0cm91YmxlIG9mIGRvaW5nIFBDSSBwYXNzdGhyb3VnaCBvciBzZXQgdXAgc29tZSBzcGVjaWZpYyBlbXVsYXRvciwgd2hpY2gsIGxldCYjMzk7cyBiZSBob25lc3QsIGlzbiYjMzk7dCB0aGUgbm9ybS4gVGhlIHVzdWFsIGZ1enppbmcgc2V0dXAsIGZvciBzcGVlZCBhbmQgc2ltcGxpY2l0eSwgYXZvaWRzIHRoaXMgbGV2ZWwgb2YgY29uZmlndXJhdGlvbi4KClRoZXJlZm9yZSwgdW5kZXIgdGhlc2UgY29uZGl0aW9ucywgV29ydGhGdXp6aW5nIGhhcyBnb3QgdG8gYmUgZmFsc2UuIE5vIGNoYW5jZSBvZiByZWFjaGluZyB0aGF0IGNvZGUuCgpMZXQgbWUganVzdCBkbyBhIHF1aWNrIHNjYW4gdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlcmUgaXNuJiMzOTt0IHNvbWUgb2JzY3VyZSBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoZSBNQU5BIGRyaXZlciBvdXQgdGhlcmUsIGp1c3QgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaC4gSXQmIzM5O3MgYWx3YXlzIHdvcnRoIGRvdWJsZS1jaGVja2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYW5hX2dkX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jPTIyNDU9c3RhdGljIGJvb2wgbWFuYV9pc19wZih1bnNpZ25lZCBzaG9ydCBkZXZfaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjI0OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jOjIyNTA6c3RhdGljIGludCBtYW5hX2dkX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjI1MS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9MjQ1ND1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFuYV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjQ1Ni1cdC5pZF90YWJsZVx0PSBtYW5hX2lkX3RhYmxlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6MjQ1NzpcdC5wcm9iZVx0XHQ9IG1hbmFfZ2RfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNDU4LVx0LnJlbW92ZVx0XHQ9IG1hbmFfZ2RfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMTkKCQkJCQkJCW91dHB1dDogMTE0CgkJCQkJCQl0aG91Z2h0czogMTczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUENJIERyaXZlciBhbmQgaXRzIExpbWl0YXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIFBDSSBkcml2ZXIgc3RydWN0dXJlLCBgbWFuYV9kcml2ZXJgLCBhbmQgaXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgdGhlIHVzdWFsIHN1c3BlY3RzOiBgbmFtZWAsIGBpZF90YWJsZWAsIGBwcm9iZWAsIGFuZCBgcmVtb3ZlYCBtZXRob2RzLiBOb3RoaW5nIGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhcyB1bnVzdWFsLiBCdXQsIGJhc2VkIG9uIHRoZSBjb2RlIEkmIzM5O20gc2VlaW5nLCB0aGVyZSYjMzk7cyBhIGNyaXRpY2FsIGRlcGVuZGVuY3kgaGVyZS4gV2l0aG91dCB0aGUgYWN0dWFsIHBoeXNpY2FsIGhhcmR3YXJlIHByZXNlbnQsIHRoYXQgY3J1Y2lhbCBgbWFuYV9nZF9wcm9iZWAgZnVuY3Rpb24gd2lsbCBuZXZlciBnZXQgZXhlY3V0ZWQuIEFuZCBpZiBgbWFuYV9nZF9wcm9iZWAgaXNuJiMzOTt0IGNhbGxlZCwgdGhlbiBgbWFuYV9wcm9iZWAgZG9lc24mIzM5O3QgcnVuLCBhbmQgbmVpdGhlciBkb2VzIGBtYW5hX3Byb2JlX3BvcnRgLCBsZWFkaW5nIHRvIGByZWdpc3Rlcl9uZXRkZXZgIGJlaW5nIHNraXBwZWQuIFRoYXQgd2hvbGUgY2hhaW4gaXMgYmxvY2tlZC4KClRoZSBpbXBsaWNhdGlvbiBpcyBjbGVhcjogaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBsaWtlIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBvciBRRU1VLCB0aGlzIGRyaXZlciYjMzk7cyBmdW5jdGlvbmFsaXR5IGlzIGZ1bmRhbWVudGFsbHkgdW5yZWFjaGFibGUuIE5vIGhhcmR3YXJlLCBubyBwcm9iaW5nLCBubyBkZXZpY2UgcmVnaXN0cmF0aW9uLCBubyBuZXR3b3JrIGludGVyZmFjZS4gVGhlIGV0aHRvb2wgb3BlcmF0aW9ucywgY3J1Y2lhbCBmb3IgYW55IHNvcnQgb2YgbWVhbmluZ2Z1bCBpbnRlcmFjdGlvbiwgYXJlIGVmZmVjdGl2ZWx5IGxvY2tlZCBhd2F5LgoKR2l2ZW4gdGhlc2UgY29uc3RyYWludHMsIHRoZXJlJiMzOTtzIG5vIHdheSB0aGlzIGRyaXZlciBjYW4gYmUgZWZmZWN0aXZlbHkgZnV6emVkIGluIGEgdmlydHVhbGl6ZWQgY29udGV4dC4gSSYjMzk7bGwgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlciwgd2hpY2ggaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBQQ0kgZHJpdmVyLiBUaGUgbW9kaWZpZWQgY29kZSAoZXRodG9vbCBvcHMgYW5kIFJYIGJ1ZmZlciBhbGxvY2F0aW9uIGxvZ2ljKSBpcyBvbmx5IHJlYWNoYWJsZSBpZiB0aGUgTUFOQSBQQ0kgZGV2aWNlIGlzIHByZXNlbnQgYW5kIHByb2JlZC4gU2luY2Ugc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMgKGxpa2UgR0NFIG9yIFFFTVUpIGRvIG5vdCBlbXVsYXRlIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUsIHRoZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlciwgd2hpY2ggaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBQQ0kgZHJpdmVyLiBUaGUgbW9kaWZpZWQgY29kZSAoZXRodG9vbCBvcHMgYW5kIFJYIGJ1ZmZlciBhbGxvY2F0aW9uIGxvZ2ljKSBpcyBvbmx5IHJlYWNoYWJsZSBpZiB0aGUgTUFOQSBQQ0kgZGV2aWNlIGlzIHByZXNlbnQgYW5kIHByb2JlZC4gU2luY2Ugc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMgKGxpa2UgR0NFIG9yIFFFTVUpIGRvIG5vdCBlbXVsYXRlIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUsIHRoZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIyOjI5OjIyLjY0NzIxNDc4NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTA0MTAxMDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyLCB3aGljaCBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBDSSBkcml2ZXIuIFRoZSBtb2RpZmllZCBjb2RlIChldGh0b29sIG9wcyBhbmQgUlggYnVmZmVyIGFsbG9jYXRpb24gbG9naWMpIGlzIG9ubHkgcmVhY2hhYmxlIGlmIHRoZSBNQU5BIFBDSSBkZXZpY2UgaXMgcHJlc2VudCBhbmQgcHJvYmVkLiBTaW5jZSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cyAobGlrZSBHQ0Ugb3IgUUVNVSkgZG8gbm90IGVtdWxhdGUgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSwgdGhlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMjoyOToyMi42NDcyMjM0MTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MDM0NjgwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY1Y2U2YjU2NmZmM2UyYTRlM2M2ZmZkYzBmYWI3ZTY0NTUwNWQ3NjFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMSAyMjoyOToyMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcXG5pbmRleCAyNmFlZjIxYzZjMmM4OS4uNGJkODNjNzgyZWEzN2UgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXFxuQEAgLTc1NSw2ICs3NTUsMjUgQEAgc3RhdGljIHZvaWQgKm1hbmFfZ2V0X3J4YnVmX3ByZShzdHJ1Y3QgbWFuYV9yeHEgKnJ4cSwgZG1hX2FkZHJfdCAqZGEpXFxuIFxcdHJldHVybiB2YTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2xcXG4rbWFuYV91c2Vfc2luZ2xlX3J4YnVmX3Blcl9wYWdlKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLCB1MzIgbXR1KVxcbit7XFxuK1xcdC8qIE9uIHNvbWUgcGxhdGZvcm1zIHdpdGggNEsgUEFHRV9TSVpFLCBwYWdlX3Bvb2wgZnJhZ21lbnQgYWxsb2NhdGlvblxcbitcXHQgKiBpbiB0aGUgUlggcmVmaWxsIHBhdGggKH4ya0IgYnVmZmVyKSBjYW4gY2F1c2Ugc2lnbmlmaWNhbnQgdGhyb3VnaHB1dFxcbitcXHQgKiByZWdyZXNzaW9uIHVuZGVyIGhpZ2ggY29ubmVjdGlvbiBjb3VudHMuIEFsbG93IHVzZXIgdG8gZm9yY2Ugb25lIFJYXFxuK1xcdCAqIGJ1ZmZlciBwZXIgcGFnZSB2aWEgZXRodG9vbCBwcml2YXRlIGZsYWcgdG8gYnlwYXNzIHRoZSBmcmFnbWVudFxcbitcXHQgKiBwYXRoLlxcbitcXHQgKi9cXG4rXFx0aWYgKGFwYy1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2IEJJVChNQU5BX1BSSVZfRkxBR19VU0VfRlVMTF9QQUdFX1JYQlVGKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHQvKiBGb3IgeGRwIGFuZCBqdW1ibyBmcmFtZXMgbWFrZSBzdXJlIG9ubHkgb25lIHBhY2tldCBmaXRzIHBlciBwYWdlLiAqL1xcbitcXHRpZiAobXR1ICsgTUFOQV9SWEJVRl9QQUQgXFx1MDAzZSBQQUdFX1NJWkUgLyAyIHx8IG1hbmFfeGRwX2dldChhcGMpKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4gLyogR2V0IFJYIGJ1ZmZlcidzIGRhdGEgc2l6ZSwgYWxsb2Mgc2l6ZSwgWERQIGhlYWRyb29tIGJhc2VkIG9uIE1UVSAqL1xcbiBzdGF0aWMgdm9pZCBtYW5hX2dldF9yeGJ1Zl9jZmcoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXFxuIFxcdFxcdFxcdCAgICAgICBpbnQgbXR1LCB1MzIgKmRhdGFzaXplLCB1MzIgKmFsbG9jX3NpemUsXFxuQEAgLTc2NSw4ICs3ODQsNyBAQCBzdGF0aWMgdm9pZCBtYW5hX2dldF9yeGJ1Zl9jZmcoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXFxuIFxcdC8qIENhbGN1bGF0ZSBkYXRhc2l6ZSBmaXJzdCAoY29uc2lzdGVudCBhY3Jvc3MgYWxsIGNhc2VzKSAqL1xcbiBcXHQqZGF0YXNpemUgPSBtdHUgKyBFVEhfSExFTjtcXG4gXFxuLVxcdC8qIEZvciB4ZHAgYW5kIGp1bWJvIGZyYW1lcyBtYWtlIHN1cmUgb25seSBvbmUgcGFja2V0IGZpdHMgcGVyIHBhZ2UgKi9cXG4tXFx0aWYgKG10dSArIE1BTkFfUlhCVUZfUEFEIFxcdTAwM2UgUEFHRV9TSVpFIC8gMiB8fCBtYW5hX3hkcF9nZXQoYXBjKSkge1xcbitcXHRpZiAobWFuYV91c2Vfc2luZ2xlX3J4YnVmX3Blcl9wYWdlKGFwYywgbXR1KSkge1xcbiBcXHRcXHRpZiAobWFuYV94ZHBfZ2V0KGFwYykpIHtcXG4gXFx0XFx0XFx0KmhlYWRyb29tID0gWERQX1BBQ0tFVF9IRUFEUk9PTTtcXG4gXFx0XFx0XFx0KmFsbG9jX3NpemUgPSBQQUdFX1NJWkU7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9ldGh0b29sLmNcXG5pbmRleCA5NGU2NThkMDdhMjdlOC4uM2M0OThhMjIyOTY1ODAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9ldGh0b29sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2V0aHRvb2wuY1xcbkBAIC0xMzMsNTggKzEzMyw5NCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1hbmFfc3RhdHNfZGVzYyBtYW5hX3BoeV9zdGF0c1tdID0ge1xcbiBcXHR7IFxcXCJoY190YzdfdHhfcGF1c2VfcGh5XFxcIiwgb2Zmc2V0b2Yoc3RydWN0IG1hbmFfZXRodG9vbF9waHlfc3RhdHMsIHR4X3BhdXNlX3RjN19waHkpIH0sXFxuIH07XFxuIFxcbitzdGF0aWMgY29uc3QgY2hhciBtYW5hX3ByaXZfZmxhZ3NbTUFOQV9QUklWX0ZMQUdfTUFYXVtFVEhfR1NUUklOR19MRU5dID0ge1xcbitcXHRbTUFOQV9QUklWX0ZMQUdfVVNFX0ZVTExfUEFHRV9SWEJVRl0gPSBcXFwiZnVsbC1wYWdlLXJ4XFxcIlxcbit9O1xcbitcXG4gc3RhdGljIGludCBtYW5hX2dldF9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgc3RyaW5nc2V0KVxcbiB7XFxuIFxcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjID0gbmV0ZGV2X3ByaXYobmRldik7XFxuIFxcdHVuc2lnbmVkIGludCBudW1fcXVldWVzID0gYXBjLVxcdTAwM2VudW1fcXVldWVzO1xcbiBcXG4tXFx0aWYgKHN0cmluZ3NldCAhPSBFVEhfU1NfU1RBVFMpXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRzd2l0Y2ggKHN0cmluZ3NldCkge1xcbitcXHRjYXNlIEVUSF9TU19TVEFUUzpcXG4rXFx0XFx0cmV0dXJuIEFSUkFZX1NJWkUobWFuYV9ldGhfc3RhdHMpICtcXG4rXFx0XFx0ICAgICAgIEFSUkFZX1NJWkUobWFuYV9waHlfc3RhdHMpICtcXG4rXFx0XFx0ICAgICAgIEFSUkFZX1NJWkUobWFuYV9oY19zdGF0cykgICtcXG4rXFx0XFx0ICAgICAgIG51bV9xdWV1ZXMgKiAoTUFOQV9TVEFUU19SWF9DT1VOVCArIE1BTkFfU1RBVFNfVFhfQ09VTlQpO1xcbitcXG4rXFx0Y2FzZSBFVEhfU1NfUFJJVl9GTEFHUzpcXG4rXFx0XFx0cmV0dXJuIE1BTkFfUFJJVl9GTEFHX01BWDtcXG4gXFxuLVxcdHJldHVybiBBUlJBWV9TSVpFKG1hbmFfZXRoX3N0YXRzKSArIEFSUkFZX1NJWkUobWFuYV9waHlfc3RhdHMpICsgQVJSQVlfU0laRShtYW5hX2hjX3N0YXRzKSArXFxuLVxcdFxcdFxcdG51bV9xdWV1ZXMgKiAoTUFOQV9TVEFUU19SWF9DT1VOVCArIE1BTkFfU1RBVFNfVFhfQ09VTlQpO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBtYW5hX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqZGF0YSlcXG4rc3RhdGljIHZvaWQgbWFuYV9nZXRfc3RyaW5nc19zdGF0cyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgdTggKipkYXRhKVxcbiB7XFxuLVxcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjID0gbmV0ZGV2X3ByaXYobmRldik7XFxuIFxcdHVuc2lnbmVkIGludCBudW1fcXVldWVzID0gYXBjLVxcdTAwM2VudW1fcXVldWVzO1xcbiBcXHRpbnQgaSwgajtcXG4gXFxuLVxcdGlmIChzdHJpbmdzZXQgIT0gRVRIX1NTX1NUQVRTKVxcbi1cXHRcXHRyZXR1cm47XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG1hbmFfZXRoX3N0YXRzKTsgaSsrKVxcbi1cXHRcXHRldGh0b29sX3B1dHMoXFx1MDAyNmRhdGEsIG1hbmFfZXRoX3N0YXRzW2ldLm5hbWUpO1xcbitcXHRcXHRldGh0b29sX3B1dHMoZGF0YSwgbWFuYV9ldGhfc3RhdHNbaV0ubmFtZSk7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShtYW5hX2hjX3N0YXRzKTsgaSsrKVxcbi1cXHRcXHRldGh0b29sX3B1dHMoXFx1MDAyNmRhdGEsIG1hbmFfaGNfc3RhdHNbaV0ubmFtZSk7XFxuK1xcdFxcdGV0aHRvb2xfcHV0cyhkYXRhLCBtYW5hX2hjX3N0YXRzW2ldLm5hbWUpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUobWFuYV9waHlfc3RhdHMpOyBpKyspXFxuLVxcdFxcdGV0aHRvb2xfcHV0cyhcXHUwMDI2ZGF0YSwgbWFuYV9waHlfc3RhdHNbaV0ubmFtZSk7XFxuK1xcdFxcdGV0aHRvb2xfcHV0cyhkYXRhLCBtYW5hX3BoeV9zdGF0c1tpXS5uYW1lKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fcXVldWVzOyBpKyspIHtcXG4tXFx0XFx0ZXRodG9vbF9zcHJpbnRmKFxcdTAwMjZkYXRhLCBcXFwicnhfJWRfcGFja2V0c1xcXCIsIGkpO1xcbi1cXHRcXHRldGh0b29sX3NwcmludGYoXFx1MDAyNmRhdGEsIFxcXCJyeF8lZF9ieXRlc1xcXCIsIGkpO1xcbi1cXHRcXHRldGh0b29sX3NwcmludGYoXFx1MDAyNmRhdGEsIFxcXCJyeF8lZF94ZHBfZHJvcFxcXCIsIGkpO1xcbi1cXHRcXHRldGh0b29sX3NwcmludGYoXFx1MDAyNmRhdGEsIFxcXCJyeF8lZF94ZHBfdHhcXFwiLCBpKTtcXG4tXFx0XFx0ZXRodG9vbF9zcHJpbnRmKFxcdTAwMjZkYXRhLCBcXFwicnhfJWRfeGRwX3JlZGlyZWN0XFxcIiwgaSk7XFxuLVxcdFxcdGV0aHRvb2xfc3ByaW50ZihcXHUwMDI2ZGF0YSwgXFxcInJ4XyVkX3BrdF9sZW4wX2VyclxcXCIsIGkpO1xcbitcXHRcXHRldGh0b29sX3NwcmludGYoZGF0YSwgXFxcInJ4XyVkX3BhY2tldHNcXFwiLCBpKTtcXG4rXFx0XFx0ZXRodG9vbF9zcHJpbnRmKGRhdGEsIFxcXCJyeF8lZF9ieXRlc1xcXCIsIGkpO1xcbitcXHRcXHRldGh0b29sX3NwcmludGYoZGF0YSwgXFxcInJ4XyVkX3hkcF9kcm9wXFxcIiwgaSk7XFxuK1xcdFxcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcXFwicnhfJWRfeGRwX3R4XFxcIiwgaSk7XFxuK1xcdFxcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcXFwicnhfJWRfeGRwX3JlZGlyZWN0XFxcIiwgaSk7XFxuK1xcdFxcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcXFwicnhfJWRfcGt0X2xlbjBfZXJyXFxcIiwgaSk7XFxuIFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBNQU5BX1JYQ09NUF9PT0JfTlVNX1BQSSAtIDE7IGorKylcXG4tXFx0XFx0XFx0ZXRodG9vbF9zcHJpbnRmKFxcdTAwMjZkYXRhLCBcXFwicnhfJWRfY29hbGVzY2VkX2NxZV8lZFxcXCIsIGksIGogKyAyKTtcXG4rXFx0XFx0XFx0ZXRodG9vbF9zcHJpbnRmKGRhdGEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcXCJyeF8lZF9jb2FsZXNjZWRfY3FlXyVkXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0aSxcXG4rXFx0XFx0XFx0XFx0XFx0aiArIDIpO1xcbiBcXHR9XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX3F1ZXVlczsgaSsrKSB7XFxuLVxcdFxcdGV0aHRvb2xfc3ByaW50ZihcXHUwMDI2ZGF0YSwgXFxcInR4XyVkX3BhY2tldHNcXFwiLCBpKTtcXG4tXFx0XFx0ZXRodG9vbF9zcHJpbnRmKFxcdTAwMjZkYXRhLCBcXFwidHhfJWRfYnl0ZXNcXFwiLCBpKTtcXG4tXFx0XFx0ZXRodG9vbF9zcHJpbnRmKFxcdTAwMjZkYXRhLCBcXFwidHhfJWRfeGRwX3htaXRcXFwiLCBpKTtcXG4tXFx0XFx0ZXRodG9vbF9zcHJpbnRmKFxcdTAwMjZkYXRhLCBcXFwidHhfJWRfdHNvX3BhY2tldHNcXFwiLCBpKTtcXG4tXFx0XFx0ZXRodG9vbF9zcHJpbnRmKFxcdTAwMjZkYXRhLCBcXFwidHhfJWRfdHNvX2J5dGVzXFxcIiwgaSk7XFxuLVxcdFxcdGV0aHRvb2xfc3ByaW50ZihcXHUwMDI2ZGF0YSwgXFxcInR4XyVkX3Rzb19pbm5lcl9wYWNrZXRzXFxcIiwgaSk7XFxuLVxcdFxcdGV0aHRvb2xfc3ByaW50ZihcXHUwMDI2ZGF0YSwgXFxcInR4XyVkX3Rzb19pbm5lcl9ieXRlc1xcXCIsIGkpO1xcbi1cXHRcXHRldGh0b29sX3NwcmludGYoXFx1MDAyNmRhdGEsIFxcXCJ0eF8lZF9sb25nX3BrdF9mbXRcXFwiLCBpKTtcXG4tXFx0XFx0ZXRodG9vbF9zcHJpbnRmKFxcdTAwMjZkYXRhLCBcXFwidHhfJWRfc2hvcnRfcGt0X2ZtdFxcXCIsIGkpO1xcbi1cXHRcXHRldGh0b29sX3NwcmludGYoXFx1MDAyNmRhdGEsIFxcXCJ0eF8lZF9jc3VtX3BhcnRpYWxcXFwiLCBpKTtcXG4tXFx0XFx0ZXRodG9vbF9zcHJpbnRmKFxcdTAwMjZkYXRhLCBcXFwidHhfJWRfbWFuYV9tYXBfZXJyXFxcIiwgaSk7XFxuK1xcdFxcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcXFwidHhfJWRfcGFja2V0c1xcXCIsIGkpO1xcbitcXHRcXHRldGh0b29sX3NwcmludGYoZGF0YSwgXFxcInR4XyVkX2J5dGVzXFxcIiwgaSk7XFxuK1xcdFxcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcXFwidHhfJWRfeGRwX3htaXRcXFwiLCBpKTtcXG4rXFx0XFx0ZXRodG9vbF9zcHJpbnRmKGRhdGEsIFxcXCJ0eF8lZF90c29fcGFja2V0c1xcXCIsIGkpO1xcbitcXHRcXHRldGh0b29sX3NwcmludGYoZGF0YSwgXFxcInR4XyVkX3Rzb19ieXRlc1xcXCIsIGkpO1xcbitcXHRcXHRldGh0b29sX3NwcmludGYoZGF0YSwgXFxcInR4XyVkX3Rzb19pbm5lcl9wYWNrZXRzXFxcIiwgaSk7XFxuK1xcdFxcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcXFwidHhfJWRfdHNvX2lubmVyX2J5dGVzXFxcIiwgaSk7XFxuK1xcdFxcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcXFwidHhfJWRfbG9uZ19wa3RfZm10XFxcIiwgaSk7XFxuK1xcdFxcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcXFwidHhfJWRfc2hvcnRfcGt0X2ZtdFxcXCIsIGkpO1xcbitcXHRcXHRldGh0b29sX3NwcmludGYoZGF0YSwgXFxcInR4XyVkX2NzdW1fcGFydGlhbFxcXCIsIGkpO1xcbitcXHRcXHRldGh0b29sX3NwcmludGYoZGF0YSwgXFxcInR4XyVkX21hbmFfbWFwX2VyclxcXCIsIGkpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1hbmFfZ2V0X3N0cmluZ3NfcHJpdl9mbGFncyh1OCAqKmRhdGEpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUFOQV9QUklWX0ZMQUdfTUFYOyBpKyspXFxuK1xcdFxcdGV0aHRvb2xfcHV0cyhkYXRhLCBtYW5hX3ByaXZfZmxhZ3NbaV0pO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtYW5hX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyA9IG5ldGRldl9wcml2KG5kZXYpO1xcbitcXG4rXFx0c3dpdGNoIChzdHJpbmdzZXQpIHtcXG4rXFx0Y2FzZSBFVEhfU1NfU1RBVFM6XFxuK1xcdFxcdG1hbmFfZ2V0X3N0cmluZ3Nfc3RhdHMoYXBjLCBcXHUwMDI2ZGF0YSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEVUSF9TU19QUklWX0ZMQUdTOlxcbitcXHRcXHRtYW5hX2dldF9zdHJpbmdzX3ByaXZfZmxhZ3MoXFx1MDAyNmRhdGEpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtNTk0LDYgKzYzMCw4OCBAQCBzdGF0aWMgaW50IG1hbmFfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHUzMiBtYW5hX2dldF9wcml2X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcbitcXHRyZXR1cm4gYXBjLVxcdTAwM2Vwcml2X2ZsYWdzO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG1hbmFfc2V0X3ByaXZfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBwcml2X2ZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcdHUzMiBjaGFuZ2VkID0gYXBjLVxcdTAwM2Vwcml2X2ZsYWdzIF4gcHJpdl9mbGFncztcXG4rXFx0dTMyIG9sZF9wcml2X2ZsYWdzID0gYXBjLVxcdTAwM2Vwcml2X2ZsYWdzO1xcbitcXHRib29sIHNjaGVkdWxlX3BvcnRfcmVzZXQgPSBmYWxzZTtcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHRpZiAoIWNoYW5nZWQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LyogUmVqZWN0IHVua25vd24gYml0cyAqL1xcbitcXHRpZiAocHJpdl9mbGFncyBcXHUwMDI2IH5HRU5NQVNLKE1BTkFfUFJJVl9GTEFHX01BWCAtIDEsIDApKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChjaGFuZ2VkIFxcdTAwMjYgQklUKE1BTkFfUFJJVl9GTEFHX1VTRV9GVUxMX1BBR0VfUlhCVUYpKSB7XFxuK1xcdFxcdGFwYy1cXHUwMDNlcHJpdl9mbGFncyA9IHByaXZfZmxhZ3M7XFxuK1xcbitcXHRcXHRpZiAoIWFwYy1cXHUwMDNlcG9ydF9pc191cCkge1xcbitcXHRcXHRcXHQvKiBQb3J0IGlzIGRvd24sIGZsYWcgdXBkYXRlZCB0byBhcHBseSBvbiBuZXh0IHVwXFxuK1xcdFxcdFxcdCAqIHNvIGp1c3QgcmV0dXJuLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIFByZS1hbGxvY2F0ZSBidWZmZXJzIHRvIHByZXZlbnQgZmFpbHVyZSBpbiBtYW5hX2F0dGFjaFxcbitcXHRcXHQgKiBsYXRlclxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZXJyID0gbWFuYV9wcmVfYWxsb2NfcnhidWZzKGFwYywgbmRldi1cXHUwMDNlbXR1LCBhcGMtXFx1MDAzZW51bV9xdWV1ZXMpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIkluc3VmZmljaWVudCBtZW1vcnkgZm9yIG5ldyBhbGxvY2F0aW9uc1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGFwYy1cXHUwMDNlcHJpdl9mbGFncyA9IG9sZF9wcml2X2ZsYWdzO1xcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRlcnIgPSBtYW5hX2RldGFjaChuZGV2LCBmYWxzZSk7XFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0bmV0ZGV2X2VycihuZGV2LCBcXFwibWFuYV9kZXRhY2ggZmFpbGVkOiAlZFxcXFxuXFxcIiwgZXJyKTtcXG4rXFx0XFx0XFx0YXBjLVxcdTAwM2Vwcml2X2ZsYWdzID0gb2xkX3ByaXZfZmxhZ3M7XFxuK1xcbitcXHRcXHRcXHQvKiBQb3J0IGlzIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gUmVzdG9yZVxcbitcXHRcXHRcXHQgKiAncG9ydF9pc191cCcgc28gdGhhdCBxdWV1ZSByZXNldCB3b3JrIGhhbmRsZXJcXG4rXFx0XFx0XFx0ICogY2FuIHByb3Blcmx5IGRldGFjaCBhbmQgcmUtYXR0YWNoLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0YXBjLVxcdTAwM2Vwb3J0X2lzX3VwID0gdHJ1ZTtcXG4rXFx0XFx0XFx0c2NoZWR1bGVfcG9ydF9yZXNldCA9IHRydWU7XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRlcnIgPSBtYW5hX2F0dGFjaChuZGV2KTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5kZXYsIFxcXCJtYW5hX2F0dGFjaCBmYWlsZWQ6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbitcXHRcXHRcXHRhcGMtXFx1MDAzZXByaXZfZmxhZ3MgPSBvbGRfcHJpdl9mbGFncztcXG4rXFxuK1xcdFxcdFxcdC8qIFJlc3RvcmUgJ3BvcnRfaXNfdXAnIHNvIHRoZSByZXNldCB3b3JrIGhhbmRsZXJcXG4rXFx0XFx0XFx0ICogY2FuIHByb3Blcmx5IGRldGFjaC9hdHRhY2guIFdpdGhvdXQgdGhpcyxcXG4rXFx0XFx0XFx0ICogdGhlIGhhbmRsZXIgc2VlcyBwb3J0X2lzX3VwPWZhbHNlIGFuZCBza2lwc1xcbitcXHRcXHRcXHQgKiBxdWV1ZSBhbGxvY2F0aW9uLCBsZWF2aW5nIHRoZSBwb3J0IGRlYWQuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRhcGMtXFx1MDAzZXBvcnRfaXNfdXAgPSB0cnVlO1xcbitcXHRcXHRcXHRzY2hlZHVsZV9wb3J0X3Jlc2V0ID0gdHJ1ZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitvdXQ6XFxuK1xcdG1hbmFfcHJlX2RlYWxsb2NfcnhidWZzKGFwYyk7XFxuK1xcbitcXHRpZiAoc2NoZWR1bGVfcG9ydF9yZXNldClcXG4rXFx0XFx0cXVldWVfd29yayhhcGMtXFx1MDAzZWFjLVxcdTAwM2VwZXJfcG9ydF9xdWV1ZV9yZXNldF93cSxcXG4rXFx0XFx0XFx0ICAgXFx1MDAyNmFwYy1cXHUwMDNlcXVldWVfcmVzZXRfd29yayk7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbWFuYV9ldGh0b29sX29wcyA9IHtcXG4gXFx0LnN1cHBvcnRlZF9jb2FsZXNjZV9wYXJhbXMgPSBFVEhUT09MX0NPQUxFU0NFX1JYX0NRRV9GUkFNRVMsXFxuIFxcdC5vcF9uZWVkc19ydG5sXFx0XFx0PSBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTIHxcXG5AQCAtNjE0LDQgKzczMiw2IEBAIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBtYW5hX2V0aHRvb2xfb3BzID0ge1xcbiBcXHQuc2V0X3JpbmdwYXJhbSAgICAgICAgICA9IG1hbmFfc2V0X3JpbmdwYXJhbSxcXG4gXFx0LmdldF9saW5rX2tzZXR0aW5nc1xcdD0gbWFuYV9nZXRfbGlua19rc2V0dGluZ3MsXFxuIFxcdC5nZXRfbGlua1xcdFxcdD0gZXRodG9vbF9vcF9nZXRfbGluayxcXG4rXFx0LmdldF9wcml2X2ZsYWdzXFx0XFx0PSBtYW5hX2dldF9wcml2X2ZsYWdzLFxcbitcXHQuc2V0X3ByaXZfZmxhZ3NcXHRcXHQ9IG1hbmFfc2V0X3ByaXZfZmxhZ3MsXFxuIH07XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hbmEvbWFuYS5oIGIvaW5jbHVkZS9uZXQvbWFuYS9tYW5hLmhcXG5pbmRleCAxM2M4N2JhZjAxOGVlMS4uOGRjNDk2ZjA1OTM4YmYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbWFuYS9tYW5hLmhcXG4rKysgYi9pbmNsdWRlL25ldC9tYW5hL21hbmEuaFxcbkBAIC0zMCw2ICszMCwxMiBAQCBlbnVtIFRSSV9TVEFURSB7XFxuIFxcdFRSSV9TVEFURV9UUlVFID0gMVxcbiB9O1xcbiBcXG4rLyogTUFOQSBldGh0b29sIHByaXZhdGUgZmxhZyBiaXQgcG9zaXRpb25zICovXFxuK2VudW0gbWFuYV9wcml2X2ZsYWdfYml0cyB7XFxuK1xcdE1BTkFfUFJJVl9GTEFHX1VTRV9GVUxMX1BBR0VfUlhCVUYgPSAwLFxcbitcXHRNQU5BX1BSSVZfRkxBR19NQVgsXFxuK307XFxuK1xcbiAvKiBOdW1iZXIgb2YgZW50cmllcyBmb3IgaGFyZHdhcmUgaW5kaXJlY3Rpb24gdGFibGUgbXVzdCBiZSBpbiBwb3dlciBvZiAyICovXFxuICNkZWZpbmUgTUFOQV9JTkRJUkVDVF9UQUJMRV9NQVhfU0laRSA1MTJcXG4gI2RlZmluZSBNQU5BX0lORElSRUNUX1RBQkxFX0RFRl9TSVpFIDY0XFxuQEAgLTUzMiw2ICs1MzgsOCBAQCBzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQge1xcbiBcXHR1MzIgcnhicHJlX2hlYWRyb29tO1xcbiBcXHR1MzIgcnhicHJlX2ZyYWdfY291bnQ7XFxuIFxcbitcXHR1MzIgcHJpdl9mbGFncztcXG4rXFxuIFxcdHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2c7XFxuIFxcbiBcXHQvKiBDcmVhdGUgbnVtX3F1ZXVlcyBFUXMsIFNRcywgU1EtQ1FzLCBSUXMgYW5kIFJRLUNRcywgcmVzcGVjdGl2ZWx5LiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMjoyOToyMy40ODg1OTEzNzdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MDYyNzE0NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyLCB3aGljaCBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBDSSBkcml2ZXIuIFRoZSBtb2RpZmllZCBjb2RlIChldGh0b29sIG9wcyBhbmQgUlggYnVmZmVyIGFsbG9jYXRpb24gbG9naWMpIGlzIG9ubHkgcmVhY2hhYmxlIGlmIHRoZSBNQU5BIFBDSSBkZXZpY2UgaXMgcHJlc2VudCBhbmQgcHJvYmVkLiBTaW5jZSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cyAobGlrZSBHQ0Ugb3IgUUVNVSkgZG8gbm90IGVtdWxhdGUgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSwgdGhlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY1Y2U2YjU2NmZmM2UyYTRlM2M2ZmZkYzBmYWI3ZTY0NTUwNWQ3NjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxIDIyOjI5OjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXG5pbmRleCAyNmFlZjIxYzZjMmM4OS4uNGJkODNjNzgyZWEzN2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY1xuQEAgLTc1NSw2ICs3NTUsMjUgQEAgc3RhdGljIHZvaWQgKm1hbmFfZ2V0X3J4YnVmX3ByZShzdHJ1Y3QgbWFuYV9yeHEgKnJ4cSwgZG1hX2FkZHJfdCAqZGEpXG4gXHRyZXR1cm4gdmE7XG4gfVxuIFxuK3N0YXRpYyBib29sXG4rbWFuYV91c2Vfc2luZ2xlX3J4YnVmX3Blcl9wYWdlKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLCB1MzIgbXR1KVxuK3tcbitcdC8qIE9uIHNvbWUgcGxhdGZvcm1zIHdpdGggNEsgUEFHRV9TSVpFLCBwYWdlX3Bvb2wgZnJhZ21lbnQgYWxsb2NhdGlvblxuK1x0ICogaW4gdGhlIFJYIHJlZmlsbCBwYXRoICh+MmtCIGJ1ZmZlcikgY2FuIGNhdXNlIHNpZ25pZmljYW50IHRocm91Z2hwdXRcbitcdCAqIHJlZ3Jlc3Npb24gdW5kZXIgaGlnaCBjb25uZWN0aW9uIGNvdW50cy4gQWxsb3cgdXNlciB0byBmb3JjZSBvbmUgUlhcbitcdCAqIGJ1ZmZlciBwZXIgcGFnZSB2aWEgZXRodG9vbCBwcml2YXRlIGZsYWcgdG8gYnlwYXNzIHRoZSBmcmFnbWVudFxuK1x0ICogcGF0aC5cbitcdCAqL1xuK1x0aWYgKGFwYy1cdTAwM2Vwcml2X2ZsYWdzIFx1MDAyNiBCSVQoTUFOQV9QUklWX0ZMQUdfVVNFX0ZVTExfUEFHRV9SWEJVRikpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0LyogRm9yIHhkcCBhbmQganVtYm8gZnJhbWVzIG1ha2Ugc3VyZSBvbmx5IG9uZSBwYWNrZXQgZml0cyBwZXIgcGFnZS4gKi9cbitcdGlmIChtdHUgKyBNQU5BX1JYQlVGX1BBRCBcdTAwM2UgUEFHRV9TSVpFIC8gMiB8fCBtYW5hX3hkcF9nZXQoYXBjKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIC8qIEdldCBSWCBidWZmZXIncyBkYXRhIHNpemUsIGFsbG9jIHNpemUsIFhEUCBoZWFkcm9vbSBiYXNlZCBvbiBNVFUgKi9cbiBzdGF0aWMgdm9pZCBtYW5hX2dldF9yeGJ1Zl9jZmcoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXG4gXHRcdFx0ICAgICAgIGludCBtdHUsIHUzMiAqZGF0YXNpemUsIHUzMiAqYWxsb2Nfc2l6ZSxcbkBAIC03NjUsOCArNzg0LDcgQEAgc3RhdGljIHZvaWQgbWFuYV9nZXRfcnhidWZfY2ZnKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuIFx0LyogQ2FsY3VsYXRlIGRhdGFzaXplIGZpcnN0IChjb25zaXN0ZW50IGFjcm9zcyBhbGwgY2FzZXMpICovXG4gXHQqZGF0YXNpemUgPSBtdHUgKyBFVEhfSExFTjtcbiBcbi1cdC8qIEZvciB4ZHAgYW5kIGp1bWJvIGZyYW1lcyBtYWtlIHN1cmUgb25seSBvbmUgcGFja2V0IGZpdHMgcGVyIHBhZ2UgKi9cbi1cdGlmIChtdHUgKyBNQU5BX1JYQlVGX1BBRCBcdTAwM2UgUEFHRV9TSVpFIC8gMiB8fCBtYW5hX3hkcF9nZXQoYXBjKSkge1xuK1x0aWYgKG1hbmFfdXNlX3NpbmdsZV9yeGJ1Zl9wZXJfcGFnZShhcGMsIG10dSkpIHtcbiBcdFx0aWYgKG1hbmFfeGRwX2dldChhcGMpKSB7XG4gXHRcdFx0KmhlYWRyb29tID0gWERQX1BBQ0tFVF9IRUFEUk9PTTtcbiBcdFx0XHQqYWxsb2Nfc2l6ZSA9IFBBR0VfU0laRTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZXRodG9vbC5jXG5pbmRleCA5NGU2NThkMDdhMjdlOC4uM2M0OThhMjIyOTY1ODAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2V0aHRvb2wuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9ldGh0b29sLmNcbkBAIC0xMzMsNTggKzEzMyw5NCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1hbmFfc3RhdHNfZGVzYyBtYW5hX3BoeV9zdGF0c1tdID0ge1xuIFx0eyBcImhjX3RjN190eF9wYXVzZV9waHlcIiwgb2Zmc2V0b2Yoc3RydWN0IG1hbmFfZXRodG9vbF9waHlfc3RhdHMsIHR4X3BhdXNlX3RjN19waHkpIH0sXG4gfTtcbiBcbitzdGF0aWMgY29uc3QgY2hhciBtYW5hX3ByaXZfZmxhZ3NbTUFOQV9QUklWX0ZMQUdfTUFYXVtFVEhfR1NUUklOR19MRU5dID0ge1xuK1x0W01BTkFfUFJJVl9GTEFHX1VTRV9GVUxMX1BBR0VfUlhCVUZdID0gXCJmdWxsLXBhZ2UtcnhcIlxuK307XG4rXG4gc3RhdGljIGludCBtYW5hX2dldF9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgc3RyaW5nc2V0KVxuIHtcbiBcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXHR1bnNpZ25lZCBpbnQgbnVtX3F1ZXVlcyA9IGFwYy1cdTAwM2VudW1fcXVldWVzO1xuIFxuLVx0aWYgKHN0cmluZ3NldCAhPSBFVEhfU1NfU1RBVFMpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0c3dpdGNoIChzdHJpbmdzZXQpIHtcbitcdGNhc2UgRVRIX1NTX1NUQVRTOlxuK1x0XHRyZXR1cm4gQVJSQVlfU0laRShtYW5hX2V0aF9zdGF0cykgK1xuK1x0XHQgICAgICAgQVJSQVlfU0laRShtYW5hX3BoeV9zdGF0cykgK1xuK1x0XHQgICAgICAgQVJSQVlfU0laRShtYW5hX2hjX3N0YXRzKSAgK1xuK1x0XHQgICAgICAgbnVtX3F1ZXVlcyAqIChNQU5BX1NUQVRTX1JYX0NPVU5UICsgTUFOQV9TVEFUU19UWF9DT1VOVCk7XG4rXG4rXHRjYXNlIEVUSF9TU19QUklWX0ZMQUdTOlxuK1x0XHRyZXR1cm4gTUFOQV9QUklWX0ZMQUdfTUFYO1xuIFxuLVx0cmV0dXJuIEFSUkFZX1NJWkUobWFuYV9ldGhfc3RhdHMpICsgQVJSQVlfU0laRShtYW5hX3BoeV9zdGF0cykgKyBBUlJBWV9TSVpFKG1hbmFfaGNfc3RhdHMpICtcbi1cdFx0XHRudW1fcXVldWVzICogKE1BTkFfU1RBVFNfUlhfQ09VTlQgKyBNQU5BX1NUQVRTX1RYX0NPVU5UKTtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBtYW5hX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqZGF0YSlcbitzdGF0aWMgdm9pZCBtYW5hX2dldF9zdHJpbmdzX3N0YXRzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLCB1OCAqKmRhdGEpXG4ge1xuLVx0c3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcdHVuc2lnbmVkIGludCBudW1fcXVldWVzID0gYXBjLVx1MDAzZW51bV9xdWV1ZXM7XG4gXHRpbnQgaSwgajtcbiBcbi1cdGlmIChzdHJpbmdzZXQgIT0gRVRIX1NTX1NUQVRTKVxuLVx0XHRyZXR1cm47XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG1hbmFfZXRoX3N0YXRzKTsgaSsrKVxuLVx0XHRldGh0b29sX3B1dHMoXHUwMDI2ZGF0YSwgbWFuYV9ldGhfc3RhdHNbaV0ubmFtZSk7XG4rXHRcdGV0aHRvb2xfcHV0cyhkYXRhLCBtYW5hX2V0aF9zdGF0c1tpXS5uYW1lKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobWFuYV9oY19zdGF0cyk7IGkrKylcbi1cdFx0ZXRodG9vbF9wdXRzKFx1MDAyNmRhdGEsIG1hbmFfaGNfc3RhdHNbaV0ubmFtZSk7XG4rXHRcdGV0aHRvb2xfcHV0cyhkYXRhLCBtYW5hX2hjX3N0YXRzW2ldLm5hbWUpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShtYW5hX3BoeV9zdGF0cyk7IGkrKylcbi1cdFx0ZXRodG9vbF9wdXRzKFx1MDAyNmRhdGEsIG1hbmFfcGh5X3N0YXRzW2ldLm5hbWUpO1xuK1x0XHRldGh0b29sX3B1dHMoZGF0YSwgbWFuYV9waHlfc3RhdHNbaV0ubmFtZSk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fcXVldWVzOyBpKyspIHtcbi1cdFx0ZXRodG9vbF9zcHJpbnRmKFx1MDAyNmRhdGEsIFwicnhfJWRfcGFja2V0c1wiLCBpKTtcbi1cdFx0ZXRodG9vbF9zcHJpbnRmKFx1MDAyNmRhdGEsIFwicnhfJWRfYnl0ZXNcIiwgaSk7XG4tXHRcdGV0aHRvb2xfc3ByaW50ZihcdTAwMjZkYXRhLCBcInJ4XyVkX3hkcF9kcm9wXCIsIGkpO1xuLVx0XHRldGh0b29sX3NwcmludGYoXHUwMDI2ZGF0YSwgXCJyeF8lZF94ZHBfdHhcIiwgaSk7XG4tXHRcdGV0aHRvb2xfc3ByaW50ZihcdTAwMjZkYXRhLCBcInJ4XyVkX3hkcF9yZWRpcmVjdFwiLCBpKTtcbi1cdFx0ZXRodG9vbF9zcHJpbnRmKFx1MDAyNmRhdGEsIFwicnhfJWRfcGt0X2xlbjBfZXJyXCIsIGkpO1xuK1x0XHRldGh0b29sX3NwcmludGYoZGF0YSwgXCJyeF8lZF9wYWNrZXRzXCIsIGkpO1xuK1x0XHRldGh0b29sX3NwcmludGYoZGF0YSwgXCJyeF8lZF9ieXRlc1wiLCBpKTtcbitcdFx0ZXRodG9vbF9zcHJpbnRmKGRhdGEsIFwicnhfJWRfeGRwX2Ryb3BcIiwgaSk7XG4rXHRcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcInJ4XyVkX3hkcF90eFwiLCBpKTtcbitcdFx0ZXRodG9vbF9zcHJpbnRmKGRhdGEsIFwicnhfJWRfeGRwX3JlZGlyZWN0XCIsIGkpO1xuK1x0XHRldGh0b29sX3NwcmludGYoZGF0YSwgXCJyeF8lZF9wa3RfbGVuMF9lcnJcIiwgaSk7XG4gXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIE1BTkFfUlhDT01QX09PQl9OVU1fUFBJIC0gMTsgaisrKVxuLVx0XHRcdGV0aHRvb2xfc3ByaW50ZihcdTAwMjZkYXRhLCBcInJ4XyVkX2NvYWxlc2NlZF9jcWVfJWRcIiwgaSwgaiArIDIpO1xuK1x0XHRcdGV0aHRvb2xfc3ByaW50ZihkYXRhLFxuK1x0XHRcdFx0XHRcInJ4XyVkX2NvYWxlc2NlZF9jcWVfJWRcIixcbitcdFx0XHRcdFx0aSxcbitcdFx0XHRcdFx0aiArIDIpO1xuIFx0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3F1ZXVlczsgaSsrKSB7XG4tXHRcdGV0aHRvb2xfc3ByaW50ZihcdTAwMjZkYXRhLCBcInR4XyVkX3BhY2tldHNcIiwgaSk7XG4tXHRcdGV0aHRvb2xfc3ByaW50ZihcdTAwMjZkYXRhLCBcInR4XyVkX2J5dGVzXCIsIGkpO1xuLVx0XHRldGh0b29sX3NwcmludGYoXHUwMDI2ZGF0YSwgXCJ0eF8lZF94ZHBfeG1pdFwiLCBpKTtcbi1cdFx0ZXRodG9vbF9zcHJpbnRmKFx1MDAyNmRhdGEsIFwidHhfJWRfdHNvX3BhY2tldHNcIiwgaSk7XG4tXHRcdGV0aHRvb2xfc3ByaW50ZihcdTAwMjZkYXRhLCBcInR4XyVkX3Rzb19ieXRlc1wiLCBpKTtcbi1cdFx0ZXRodG9vbF9zcHJpbnRmKFx1MDAyNmRhdGEsIFwidHhfJWRfdHNvX2lubmVyX3BhY2tldHNcIiwgaSk7XG4tXHRcdGV0aHRvb2xfc3ByaW50ZihcdTAwMjZkYXRhLCBcInR4XyVkX3Rzb19pbm5lcl9ieXRlc1wiLCBpKTtcbi1cdFx0ZXRodG9vbF9zcHJpbnRmKFx1MDAyNmRhdGEsIFwidHhfJWRfbG9uZ19wa3RfZm10XCIsIGkpO1xuLVx0XHRldGh0b29sX3NwcmludGYoXHUwMDI2ZGF0YSwgXCJ0eF8lZF9zaG9ydF9wa3RfZm10XCIsIGkpO1xuLVx0XHRldGh0b29sX3NwcmludGYoXHUwMDI2ZGF0YSwgXCJ0eF8lZF9jc3VtX3BhcnRpYWxcIiwgaSk7XG4tXHRcdGV0aHRvb2xfc3ByaW50ZihcdTAwMjZkYXRhLCBcInR4XyVkX21hbmFfbWFwX2VyclwiLCBpKTtcbitcdFx0ZXRodG9vbF9zcHJpbnRmKGRhdGEsIFwidHhfJWRfcGFja2V0c1wiLCBpKTtcbitcdFx0ZXRodG9vbF9zcHJpbnRmKGRhdGEsIFwidHhfJWRfYnl0ZXNcIiwgaSk7XG4rXHRcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcInR4XyVkX3hkcF94bWl0XCIsIGkpO1xuK1x0XHRldGh0b29sX3NwcmludGYoZGF0YSwgXCJ0eF8lZF90c29fcGFja2V0c1wiLCBpKTtcbitcdFx0ZXRodG9vbF9zcHJpbnRmKGRhdGEsIFwidHhfJWRfdHNvX2J5dGVzXCIsIGkpO1xuK1x0XHRldGh0b29sX3NwcmludGYoZGF0YSwgXCJ0eF8lZF90c29faW5uZXJfcGFja2V0c1wiLCBpKTtcbitcdFx0ZXRodG9vbF9zcHJpbnRmKGRhdGEsIFwidHhfJWRfdHNvX2lubmVyX2J5dGVzXCIsIGkpO1xuK1x0XHRldGh0b29sX3NwcmludGYoZGF0YSwgXCJ0eF8lZF9sb25nX3BrdF9mbXRcIiwgaSk7XG4rXHRcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcInR4XyVkX3Nob3J0X3BrdF9mbXRcIiwgaSk7XG4rXHRcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcInR4XyVkX2NzdW1fcGFydGlhbFwiLCBpKTtcbitcdFx0ZXRodG9vbF9zcHJpbnRmKGRhdGEsIFwidHhfJWRfbWFuYV9tYXBfZXJyXCIsIGkpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBtYW5hX2dldF9zdHJpbmdzX3ByaXZfZmxhZ3ModTggKipkYXRhKVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFOQV9QUklWX0ZMQUdfTUFYOyBpKyspXG4rXHRcdGV0aHRvb2xfcHV0cyhkYXRhLCBtYW5hX3ByaXZfZmxhZ3NbaV0pO1xuK31cbitcbitzdGF0aWMgdm9pZCBtYW5hX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1xuK1x0c3dpdGNoIChzdHJpbmdzZXQpIHtcbitcdGNhc2UgRVRIX1NTX1NUQVRTOlxuK1x0XHRtYW5hX2dldF9zdHJpbmdzX3N0YXRzKGFwYywgXHUwMDI2ZGF0YSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBFVEhfU1NfUFJJVl9GTEFHUzpcbitcdFx0bWFuYV9nZXRfc3RyaW5nc19wcml2X2ZsYWdzKFx1MDAyNmRhdGEpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdGJyZWFrO1xuIFx0fVxuIH1cbiBcbkBAIC01OTQsNiArNjMwLDg4IEBAIHN0YXRpYyBpbnQgbWFuYV9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHUzMiBtYW5hX2dldF9wcml2X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuK3tcbitcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXG4rXHRyZXR1cm4gYXBjLVx1MDAzZXByaXZfZmxhZ3M7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbWFuYV9zZXRfcHJpdl9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIHByaXZfZmxhZ3MpXG4re1xuK1x0c3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcdHUzMiBjaGFuZ2VkID0gYXBjLVx1MDAzZXByaXZfZmxhZ3MgXiBwcml2X2ZsYWdzO1xuK1x0dTMyIG9sZF9wcml2X2ZsYWdzID0gYXBjLVx1MDAzZXByaXZfZmxhZ3M7XG4rXHRib29sIHNjaGVkdWxlX3BvcnRfcmVzZXQgPSBmYWxzZTtcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0aWYgKCFjaGFuZ2VkKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIFJlamVjdCB1bmtub3duIGJpdHMgKi9cbitcdGlmIChwcml2X2ZsYWdzIFx1MDAyNiB+R0VOTUFTSyhNQU5BX1BSSVZfRkxBR19NQVggLSAxLCAwKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoY2hhbmdlZCBcdTAwMjYgQklUKE1BTkFfUFJJVl9GTEFHX1VTRV9GVUxMX1BBR0VfUlhCVUYpKSB7XG4rXHRcdGFwYy1cdTAwM2Vwcml2X2ZsYWdzID0gcHJpdl9mbGFncztcbitcbitcdFx0aWYgKCFhcGMtXHUwMDNlcG9ydF9pc191cCkge1xuK1x0XHRcdC8qIFBvcnQgaXMgZG93biwgZmxhZyB1cGRhdGVkIHRvIGFwcGx5IG9uIG5leHQgdXBcbitcdFx0XHQgKiBzbyBqdXN0IHJldHVybi5cbitcdFx0XHQgKi9cbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuK1xuK1x0XHQvKiBQcmUtYWxsb2NhdGUgYnVmZmVycyB0byBwcmV2ZW50IGZhaWx1cmUgaW4gbWFuYV9hdHRhY2hcbitcdFx0ICogbGF0ZXJcbitcdFx0ICovXG4rXHRcdGVyciA9IG1hbmFfcHJlX2FsbG9jX3J4YnVmcyhhcGMsIG5kZXYtXHUwMDNlbXR1LCBhcGMtXHUwMDNlbnVtX3F1ZXVlcyk7XG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHRuZXRkZXZfZXJyKG5kZXYsXG4rXHRcdFx0XHQgICBcIkluc3VmZmljaWVudCBtZW1vcnkgZm9yIG5ldyBhbGxvY2F0aW9uc1xcblwiKTtcbitcdFx0XHRhcGMtXHUwMDNlcHJpdl9mbGFncyA9IG9sZF9wcml2X2ZsYWdzO1xuK1x0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcbitcdFx0ZXJyID0gbWFuYV9kZXRhY2gobmRldiwgZmFsc2UpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZGV2LCBcIm1hbmFfZGV0YWNoIGZhaWxlZDogJWRcXG5cIiwgZXJyKTtcbitcdFx0XHRhcGMtXHUwMDNlcHJpdl9mbGFncyA9IG9sZF9wcml2X2ZsYWdzO1xuK1xuK1x0XHRcdC8qIFBvcnQgaXMgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBSZXN0b3JlXG4rXHRcdFx0ICogJ3BvcnRfaXNfdXAnIHNvIHRoYXQgcXVldWUgcmVzZXQgd29yayBoYW5kbGVyXG4rXHRcdFx0ICogY2FuIHByb3Blcmx5IGRldGFjaCBhbmQgcmUtYXR0YWNoLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGFwYy1cdTAwM2Vwb3J0X2lzX3VwID0gdHJ1ZTtcbitcdFx0XHRzY2hlZHVsZV9wb3J0X3Jlc2V0ID0gdHJ1ZTtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1xuK1x0XHRlcnIgPSBtYW5hX2F0dGFjaChuZGV2KTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdG5ldGRldl9lcnIobmRldiwgXCJtYW5hX2F0dGFjaCBmYWlsZWQ6ICVkXFxuXCIsIGVycik7XG4rXHRcdFx0YXBjLVx1MDAzZXByaXZfZmxhZ3MgPSBvbGRfcHJpdl9mbGFncztcbitcbitcdFx0XHQvKiBSZXN0b3JlICdwb3J0X2lzX3VwJyBzbyB0aGUgcmVzZXQgd29yayBoYW5kbGVyXG4rXHRcdFx0ICogY2FuIHByb3Blcmx5IGRldGFjaC9hdHRhY2guIFdpdGhvdXQgdGhpcyxcbitcdFx0XHQgKiB0aGUgaGFuZGxlciBzZWVzIHBvcnRfaXNfdXA9ZmFsc2UgYW5kIHNraXBzXG4rXHRcdFx0ICogcXVldWUgYWxsb2NhdGlvbiwgbGVhdmluZyB0aGUgcG9ydCBkZWFkLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGFwYy1cdTAwM2Vwb3J0X2lzX3VwID0gdHJ1ZTtcbitcdFx0XHRzY2hlZHVsZV9wb3J0X3Jlc2V0ID0gdHJ1ZTtcbitcdFx0fVxuK1x0fVxuK1xuK291dDpcbitcdG1hbmFfcHJlX2RlYWxsb2NfcnhidWZzKGFwYyk7XG4rXG4rXHRpZiAoc2NoZWR1bGVfcG9ydF9yZXNldClcbitcdFx0cXVldWVfd29yayhhcGMtXHUwMDNlYWMtXHUwMDNlcGVyX3BvcnRfcXVldWVfcmVzZXRfd3EsXG4rXHRcdFx0ICAgXHUwMDI2YXBjLVx1MDAzZXF1ZXVlX3Jlc2V0X3dvcmspO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG1hbmFfZXRodG9vbF9vcHMgPSB7XG4gXHQuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfUlhfQ1FFX0ZSQU1FUyxcbiBcdC5vcF9uZWVkc19ydG5sXHRcdD0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XG5AQCAtNjE0LDQgKzczMiw2IEBAIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBtYW5hX2V0aHRvb2xfb3BzID0ge1xuIFx0LnNldF9yaW5ncGFyYW0gICAgICAgICAgPSBtYW5hX3NldF9yaW5ncGFyYW0sXG4gXHQuZ2V0X2xpbmtfa3NldHRpbmdzXHQ9IG1hbmFfZ2V0X2xpbmtfa3NldHRpbmdzLFxuIFx0LmdldF9saW5rXHRcdD0gZXRodG9vbF9vcF9nZXRfbGluayxcbitcdC5nZXRfcHJpdl9mbGFnc1x0XHQ9IG1hbmFfZ2V0X3ByaXZfZmxhZ3MsXG4rXHQuc2V0X3ByaXZfZmxhZ3NcdFx0PSBtYW5hX3NldF9wcml2X2ZsYWdzLFxuIH07XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFuYS9tYW5hLmggYi9pbmNsdWRlL25ldC9tYW5hL21hbmEuaFxuaW5kZXggMTNjODdiYWYwMThlZTEuLjhkYzQ5NmYwNTkzOGJmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbWFuYS9tYW5hLmhcbisrKyBiL2luY2x1ZGUvbmV0L21hbmEvbWFuYS5oXG5AQCAtMzAsNiArMzAsMTIgQEAgZW51bSBUUklfU1RBVEUge1xuIFx0VFJJX1NUQVRFX1RSVUUgPSAxXG4gfTtcbiBcbisvKiBNQU5BIGV0aHRvb2wgcHJpdmF0ZSBmbGFnIGJpdCBwb3NpdGlvbnMgKi9cbitlbnVtIG1hbmFfcHJpdl9mbGFnX2JpdHMge1xuK1x0TUFOQV9QUklWX0ZMQUdfVVNFX0ZVTExfUEFHRV9SWEJVRiA9IDAsXG4rXHRNQU5BX1BSSVZfRkxBR19NQVgsXG4rfTtcbitcbiAvKiBOdW1iZXIgb2YgZW50cmllcyBmb3IgaGFyZHdhcmUgaW5kaXJlY3Rpb24gdGFibGUgbXVzdCBiZSBpbiBwb3dlciBvZiAyICovXG4gI2RlZmluZSBNQU5BX0lORElSRUNUX1RBQkxFX01BWF9TSVpFIDUxMlxuICNkZWZpbmUgTUFOQV9JTkRJUkVDVF9UQUJMRV9ERUZfU0laRSA2NFxuQEAgLTUzMiw2ICs1MzgsOCBAQCBzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQge1xuIFx0dTMyIHJ4YnByZV9oZWFkcm9vbTtcbiBcdHUzMiByeGJwcmVfZnJhZ19jb3VudDtcbiBcbitcdHUzMiBwcml2X2ZsYWdzO1xuK1xuIFx0c3RydWN0IGJwZl9wcm9nICpicGZfcHJvZztcbiBcbiBcdC8qIENyZWF0ZSBudW1fcXVldWVzIEVRcywgU1FzLCBTUS1DUXMsIFJRcyBhbmQgUlEtQ1FzLCByZXNwZWN0aXZlbHkuICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMjoyOToyMy40ODg1OTM0MzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Njg1MzY3NzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIHRoZSBgZnVsbC1wYWdlLXJ4YCBQYXRjaDogQSBWaXJ0dWFsaXphdGlvbiBDb251bmRydW0qKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgdGhpcyBwYXRjaCDigJMgYSBuZXcgYGV0aHRvb2xgIHByaXZhdGUgZmxhZywgYGZ1bGwtcGFnZS1yeGAsIGZvciB0aGUgTWljcm9zb2Z0IE1BTkEgZXRoZXJuZXQgZHJpdmVyLiBJdCdzIHN1cHBvc2VkIHRvIGZvcmNlIHRoZSBkcml2ZXIgdG8gdXNlIGEgZnVsbCBwYWdlIGZvciBlYWNoIFJYIGJ1ZmZlciwgc2tpcHBpbmcgdGhlIGZyYWdtZW50IHBhdGguIFRoZSBjb2RlJ3Mgc3ByZWFkIGFjcm9zcyBgbWFuYV9lbi5jYCwgYG1hbmFfZXRodG9vbC5jYCwgYW5kIGBtYW5hLmhgLiBGaW5lLCBzdGFuZGFyZCBzdHVmZi4gTm93IHRoZSBxdWVzdGlvbiBpcywgaG93IGRvIHdlICp0ZXN0KiB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFRoaXMgZHJpdmVyJ3MgZm9yIHRoZSBBenVyZSBOZXR3b3JrIEFkYXB0ZXIsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIFBDSSBkZXZpY2UuXG5cblRoZSByZWFsIGNoYWxsZW5nZSBpcyBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzIGxpa2UgdGhpcywgdW5sZXNzIHdlIGFyZSB0YWxraW5nIGFib3V0IHNvbWV0aGluZyBtb3JlIGFtZW5hYmxlIHRvIGVtdWxhdGlvbiBzdWNoIGFzIFVTQiwgdmlydGlvLCB2ZXRoLCBvciBtYWM4MDIxMV9od3NpbS4gVGhlc2UgdGhpbmdzIGFyZSByYXJlbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHN5emthbGxlciBWTXMgdW5sZXNzIHRoZXJlJ3MgYW4gZW11bGF0b3IuIFNwZWNpZmljYWxseSwgdW5sZXNzIGl0J3MgcnVubmluZyBvbiBBenVyZSBWTXMsIHRoaXMgaXMgZ29pbmcgdG8gYmUgZGlmZmljdWx0LiBTeXprYWxsZXIgcnVucyBvbiBHQ0Ugb3IgUUVNVSwgc28gY2FuIFFFTVUgZW11bGF0ZSBhIE1BTkEgZGV2aWNlPyBIaWdobHkgdW5saWtlbHkuXG5cbkNhbiB3ZSBldmVuIHJlYWNoIGBtYW5hX3NldF9wcml2X2ZsYWdzYCB3aXRob3V0IGEgcmVhbCBNQU5BIGRldmljZT8gVGhlIGBldGh0b29sYCBvcGVyYXRpb25zIGFyZSByZWdpc3RlcmVkIHdoZW4gdGhlIG5ldHdvcmsgZGV2aWNlIGlzIHJlZ2lzdGVyZWQsIGFuZCB0aGF0IG5ldGRldiByZWdpc3RyYXRpb24gaGFwcGVucyBpbiB0aGUgcHJvYmUgZnVuY3Rpb24gb2YgdGhlIFBDSSBkcml2ZXIuIElmIG5vIE1BTkEgUENJIGRldmljZSBpcyBwcmVzZW50LCB0aGUgcHJvYmUgZnVuY3Rpb24gaXMgbmV2ZXIgY2FsbGVkLCB0aGUgbmV0ZGV2IGlzIG5ldmVyIGNyZWF0ZWQsIGFuZCB0aG9zZSBgZXRodG9vbGAgb3BlcmF0aW9ucyBhcmUgdW5yZWFjaGFibGUuIFNvIHRoZSBhbnN3ZXIgaXMgXCJub1wiLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gc2VlIGlmICphbnkqIGtpbmQgb2Ygc29mdHdhcmUgZW11bGF0aW9uIGV4aXN0cyBmb3IgdGhlIE1BTkEgZGV2aWNlLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBkcml2ZXIgZGlyZWN0b3J5OiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvYC4gSSB3aWxsIHNlYXJjaCBmb3Igc29tZXRoaW5nIGxpa2UgYG1hbmFfcHJvYmVgIG9yIGEgc2ltaWxhciBpZGVudGlmaWVyLiBUaGlzIGlzIGNyaXRpY2FsOiBpZiB0aGVyZSBpcyBubyBlbXVsYXRpb24gYXZhaWxhYmxlLCByZWFjaGluZyB0aGlzIHBhdGNoIGZvciB0ZXN0aW5nIG1heSBiZSBkaWZmaWN1bHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NDUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMjoyOTozMC4xNzM5NjI2NTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwMjczNzY0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYW5hX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYz0xNzc9c3RhdGljIGludCBtYW5hX2dkX3F1ZXJ5X21heF9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6MjYwOlxcdC8qIENhcCB0byB0aGUgc2FtZSBsaW1pdCB1c2VkIGJ5IG1hbmFfcHJvYmUoKSBmb3IgcG9ydCBpbnN0YW50aWF0aW9uLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTI2MS1cXHQgKiBzbyBNU0ktWCBhbmQgcXVldWUgYnVkZ2V0aW5nIG1hdGNoZXMgdGhlIGFjdHVhbCBwb3J0IGNvdW50Llxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9MjI1MD1zdGF0aWMgaW50IG1hbmFfZ2RfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yMzA1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jOjIzMDY6XFx0ZXJyID0gbWFuYV9wcm9iZShcXHUwMDI2Z2MtXFx1MDAzZW1hbmEsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yMzA3LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yMzQ0LVxcdCAqIEhhcmR3YXJlIGNvdWxkIGJlIGluIHJlY292ZXJ5IG1vZGUgYW5kIHRoZSBIV0MgcmV0dXJucyBUSU1FRE9VVCBvclxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jOjIzNDU6XFx0ICogRVBST1RPIGZyb20gbWFuYV9nZF9zZXR1cCgpLCBtYW5hX3Byb2JlKCkgb3IgbWFuYV9yZG1hX3Byb2JlKCksIG9yXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjM0Ni1cXHQgKiB3ZSByZWNlaXZlZCBhIGhhcmR3YXJlIHJlc2V0IGV2ZW50IG92ZXIgSFdDIGludGVycnVwdC4gSW4gdGhpcyBjYXNlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9MjQwOD1pbnQgbWFuYV9nZF9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNDE2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jOjI0MTc6XFx0ZXJyID0gbWFuYV9wcm9iZShcXHUwMDI2Z2MtXFx1MDAzZW1hbmEsIHRydWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTI0MTgtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYz0zNDg3PWludCBtYW5hX2RldGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgYm9vbCBmcm9tX2Nsb3NlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTM1MjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jOjM1MjQ6c3RhdGljIGludCBtYW5hX3Byb2JlX3BvcnQoc3RydWN0IG1hbmFfY29udGV4dCAqYWMsIGludCBwb3J0X2lkeCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMzUyNS1cXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqKm5kZXZfc3RvcmFnZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYz0zNzU0PXN0YXRpYyB2b2lkIG1hbmFfZ2Zfc3RhdHNfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0zNzc2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzozNzc3OmludCBtYW5hX3Byb2JlKHN0cnVjdCBnZG1hX2RldiAqZ2QsIGJvb2wgcmVzdW1pbmcpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTM3Nzgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTM4NTEtXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFjLVxcdTAwM2VudW1fcG9ydHM7IGkrKykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzozODUyOlxcdFxcdFxcdGVyciA9IG1hbmFfcHJvYmVfcG9ydChhYywgaSwgXFx1MDAyNmFjLVxcdTAwM2Vwb3J0c1tpXSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTM4NTMtXFx0XFx0XFx0LyogTG9nIHRoZSBwb3J0IGZvciB3aGljaCB0aGUgcHJvYmUgZmFpbGVkLCBzdG9wIHByb2JpbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjI6Mjk6MzEuOTc2NzA0NzEyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI2MzQ1ODU0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNQU5BIERyaXZlciBSZWFjaGFiaWxpdHkgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGUgTUFOQSBkcml2ZXIsIHRoYXQncyB0aGUgUENJIGRyaXZlciBmb3IgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIuIFN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEJ1dCBoZXJlJ3MgdGhlIGtpY2tlcjogaXQgcmVsaWVzIG9uIHNwZWNpZmljIFBDSSBoYXJkd2FyZS4gSXQgbmVlZHMgdGhhdCBwaHlzaWNhbCBwcmVzZW5jZSB0byBkbyBpdHMgcHJvYmluZyBhbmQgcmVnaXN0ZXIgdGhlIG5ldHdvcmsgZGV2aWNlLlxuXG5Ob3csIG15IGluaXRpYWwgdGhvdWdodCBpcywgYW5kIEknbSBwcmV0dHkgc3VyZSBJJ20gcmlnaHQsIHRoYXQgdGhpcyBjb2RlIGlzICpuZXZlciogaGl0IGluIGEgc3RhbmRhcmQgU3l6a2FsbGVyIHNldHVwLiBXZSdyZSBlaXRoZXIgcnVubmluZyBpbiBHQ0Ugb3IgUUVNVSwgYW5kIHRob3NlIGVudmlyb25tZW50cywgYnkgZGVmYXVsdCwgZG9uJ3QgaGF2ZSB0aGlzIHBhcnRpY3VsYXIgcGllY2Ugb2YgUENJIGhhcmR3YXJlIHVubGVzcyB3ZSd2ZSBnb25lIHRvIHRoZSB0cm91YmxlIG9mIGRvaW5nIFBDSSBwYXNzdGhyb3VnaCBvciBzZXQgdXAgc29tZSBzcGVjaWZpYyBlbXVsYXRvciwgd2hpY2gsIGxldCdzIGJlIGhvbmVzdCwgaXNuJ3QgdGhlIG5vcm0uIFRoZSB1c3VhbCBmdXp6aW5nIHNldHVwLCBmb3Igc3BlZWQgYW5kIHNpbXBsaWNpdHksIGF2b2lkcyB0aGlzIGxldmVsIG9mIGNvbmZpZ3VyYXRpb24uXG5cblRoZXJlZm9yZSwgdW5kZXIgdGhlc2UgY29uZGl0aW9ucywgV29ydGhGdXp6aW5nIGhhcyBnb3QgdG8gYmUgZmFsc2UuIE5vIGNoYW5jZSBvZiByZWFjaGluZyB0aGF0IGNvZGUuXG5cbkxldCBtZSBqdXN0IGRvIGEgcXVpY2sgc2NhbiB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBpc24ndCBzb21lIG9ic2N1cmUgc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGUgTUFOQSBkcml2ZXIgb3V0IHRoZXJlLCBqdXN0IHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2guIEl0J3MgYWx3YXlzIHdvcnRoIGRvdWJsZS1jaGVja2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzUzNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMjoyOTozNi4yNDAxNjUyMDVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzMzA4MjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hbmFfZ2RfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jPTIyNDU9c3RhdGljIGJvb2wgbWFuYV9pc19wZih1bnNpZ25lZCBzaG9ydCBkZXZfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yMjQ5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jOjIyNTA6c3RhdGljIGludCBtYW5hX2dkX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTIyNTEte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9MjQ1ND1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFuYV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNDU2LVxcdC5pZF90YWJsZVxcdD0gbWFuYV9pZF90YWJsZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzoyNDU3OlxcdC5wcm9iZVxcdFxcdD0gbWFuYV9nZF9wcm9iZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNDU4LVxcdC5yZW1vdmVcXHRcXHQ9IG1hbmFfZ2RfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMjoyOTozNi42NzM0Nzg1NDdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODc3NzgyMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUENJIERyaXZlciBhbmQgaXRzIExpbWl0YXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBQQ0kgZHJpdmVyIHN0cnVjdHVyZSwgYG1hbmFfZHJpdmVyYCwgYW5kIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgdGhlIHVzdWFsIHN1c3BlY3RzOiBgbmFtZWAsIGBpZF90YWJsZWAsIGBwcm9iZWAsIGFuZCBgcmVtb3ZlYCBtZXRob2RzLiBOb3RoaW5nIGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhcyB1bnVzdWFsLiBCdXQsIGJhc2VkIG9uIHRoZSBjb2RlIEknbSBzZWVpbmcsIHRoZXJlJ3MgYSBjcml0aWNhbCBkZXBlbmRlbmN5IGhlcmUuIFdpdGhvdXQgdGhlIGFjdHVhbCBwaHlzaWNhbCBoYXJkd2FyZSBwcmVzZW50LCB0aGF0IGNydWNpYWwgYG1hbmFfZ2RfcHJvYmVgIGZ1bmN0aW9uIHdpbGwgbmV2ZXIgZ2V0IGV4ZWN1dGVkLiBBbmQgaWYgYG1hbmFfZ2RfcHJvYmVgIGlzbid0IGNhbGxlZCwgdGhlbiBgbWFuYV9wcm9iZWAgZG9lc24ndCBydW4sIGFuZCBuZWl0aGVyIGRvZXMgYG1hbmFfcHJvYmVfcG9ydGAsIGxlYWRpbmcgdG8gYHJlZ2lzdGVyX25ldGRldmAgYmVpbmcgc2tpcHBlZC4gVGhhdCB3aG9sZSBjaGFpbiBpcyBibG9ja2VkLlxuXG5UaGUgaW1wbGljYXRpb24gaXMgY2xlYXI6IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbGlrZSBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgb3IgUUVNVSwgdGhpcyBkcml2ZXIncyBmdW5jdGlvbmFsaXR5IGlzIGZ1bmRhbWVudGFsbHkgdW5yZWFjaGFibGUuIE5vIGhhcmR3YXJlLCBubyBwcm9iaW5nLCBubyBkZXZpY2UgcmVnaXN0cmF0aW9uLCBubyBuZXR3b3JrIGludGVyZmFjZS4gVGhlIGV0aHRvb2wgb3BlcmF0aW9ucywgY3J1Y2lhbCBmb3IgYW55IHNvcnQgb2YgbWVhbmluZ2Z1bCBpbnRlcmFjdGlvbiwgYXJlIGVmZmVjdGl2ZWx5IGxvY2tlZCBhd2F5LlxuXG5HaXZlbiB0aGVzZSBjb25zdHJhaW50cywgdGhlcmUncyBubyB3YXkgdGhpcyBkcml2ZXIgY2FuIGJlIGVmZmVjdGl2ZWx5IGZ1enplZCBpbiBhIHZpcnR1YWxpemVkIGNvbnRleHQuIEknbGwgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjE5LCJPdXRwdXRUb2tlbnMiOjExNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMjoyOTo0MS41NTEyNjMzODhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIsIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUENJIGRyaXZlci4gVGhlIG1vZGlmaWVkIGNvZGUgKGV0aHRvb2wgb3BzIGFuZCBSWCBidWZmZXIgYWxsb2NhdGlvbiBsb2dpYykgaXMgb25seSByZWFjaGFibGUgaWYgdGhlIE1BTkEgUENJIGRldmljZSBpcyBwcmVzZW50IGFuZCBwcm9iZWQuIFNpbmNlIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzIChsaWtlIEdDRSBvciBRRU1VKSBkbyBub3QgZW11bGF0ZSB0aGlzIHNwZWNpZmljIGhhcmR3YXJlLCB0aGUgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIsIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUENJIGRyaXZlci4gVGhlIG1vZGlmaWVkIGNvZGUgKGV0aHRvb2wgb3BzIGFuZCBSWCBidWZmZXIgYWxsb2NhdGlvbiBsb2dpYykgaXMgb25seSByZWFjaGFibGUgaWYgdGhlIE1BTkEgUENJIGRldmljZSBpcyBwcmVzZW50IGFuZCBwcm9iZWQuIFNpbmNlIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzIChsaWtlIEdDRSBvciBRRU1VKSBkbyBub3QgZW11bGF0ZSB0aGlzIHNwZWNpZmljIGhhcmR3YXJlLCB0aGUgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowf8wc9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-01 22:17:36 +0000 UTC FinishedAt: 2026-07-01 22:29:42 +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+CgkJCTx0ZD4yMDI2LzA3LzAxIDIyOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIsIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUENJIGRyaXZlci4gVGhlIG1vZGlmaWVkIGNvZGUgKGV0aHRvb2wgb3BzIGFuZCBSWCBidWZmZXIgYWxsb2NhdGlvbiBsb2dpYykgaXMgb25seSByZWFjaGFibGUgaWYgdGhlIE1BTkEgUENJIGRldmljZSBpcyBwcmVzZW50IGFuZCBwcm9iZWQuIFNpbmNlIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzIChsaWtlIEdDRSBvciBRRU1VKSBkbyBub3QgZW11bGF0ZSB0aGlzIHNwZWNpZmljIGhhcmR3YXJlLCB0aGUgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjI6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2NWNlNmI1NjZmZjNlMmE0ZTNjNmZmZGMwZmFiN2U2NDU1MDVkNzYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAyMjoyOToyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcbmluZGV4IDI2YWVmMjFjNmMyYzg5Li40YmQ4M2M3ODJlYTM3ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXG5AQCAtNzU1LDYgJiM0Mzs3NTUsMjUgQEAgc3RhdGljIHZvaWQgKm1hbmFfZ2V0X3J4YnVmX3ByZShzdHJ1Y3QgbWFuYV9yeHEgKnJ4cSwgZG1hX2FkZHJfdCAqZGEpXG4gXHRyZXR1cm4gdmE7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbFxuJiM0MzttYW5hX3VzZV9zaW5nbGVfcnhidWZfcGVyX3BhZ2Uoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsIHUzMiBtdHUpXG4mIzQzO3tcbiYjNDM7XHQvKiBPbiBzb21lIHBsYXRmb3JtcyB3aXRoIDRLIFBBR0VfU0laRSwgcGFnZV9wb29sIGZyYWdtZW50IGFsbG9jYXRpb25cbiYjNDM7XHQgKiBpbiB0aGUgUlggcmVmaWxsIHBhdGggKH4ya0IgYnVmZmVyKSBjYW4gY2F1c2Ugc2lnbmlmaWNhbnQgdGhyb3VnaHB1dFxuJiM0MztcdCAqIHJlZ3Jlc3Npb24gdW5kZXIgaGlnaCBjb25uZWN0aW9uIGNvdW50cy4gQWxsb3cgdXNlciB0byBmb3JjZSBvbmUgUlhcbiYjNDM7XHQgKiBidWZmZXIgcGVyIHBhZ2UgdmlhIGV0aHRvb2wgcHJpdmF0ZSBmbGFnIHRvIGJ5cGFzcyB0aGUgZnJhZ21lbnRcbiYjNDM7XHQgKiBwYXRoLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChhcGMtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgQklUKE1BTkFfUFJJVl9GTEFHX1VTRV9GVUxMX1BBR0VfUlhCVUYpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdC8qIEZvciB4ZHAgYW5kIGp1bWJvIGZyYW1lcyBtYWtlIHN1cmUgb25seSBvbmUgcGFja2V0IGZpdHMgcGVyIHBhZ2UuICovXG4mIzQzO1x0aWYgKG10dSAmIzQzOyBNQU5BX1JYQlVGX1BBRCBcdTAwM2UgUEFHRV9TSVpFIC8gMiB8fCBtYW5hX3hkcF9nZXQoYXBjKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gLyogR2V0IFJYIGJ1ZmZlciYjMzk7cyBkYXRhIHNpemUsIGFsbG9jIHNpemUsIFhEUCBoZWFkcm9vbSBiYXNlZCBvbiBNVFUgKi9cbiBzdGF0aWMgdm9pZCBtYW5hX2dldF9yeGJ1Zl9jZmcoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXG4gXHRcdFx0ICAgICAgIGludCBtdHUsIHUzMiAqZGF0YXNpemUsIHUzMiAqYWxsb2Nfc2l6ZSxcbkBAIC03NjUsOCAmIzQzOzc4NCw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfZ2V0X3J4YnVmX2NmZyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcbiBcdC8qIENhbGN1bGF0ZSBkYXRhc2l6ZSBmaXJzdCAoY29uc2lzdGVudCBhY3Jvc3MgYWxsIGNhc2VzKSAqL1xuIFx0KmRhdGFzaXplID0gbXR1ICYjNDM7IEVUSF9ITEVOO1xuIFxuLVx0LyogRm9yIHhkcCBhbmQganVtYm8gZnJhbWVzIG1ha2Ugc3VyZSBvbmx5IG9uZSBwYWNrZXQgZml0cyBwZXIgcGFnZSAqL1xuLVx0aWYgKG10dSAmIzQzOyBNQU5BX1JYQlVGX1BBRCBcdTAwM2UgUEFHRV9TSVpFIC8gMiB8fCBtYW5hX3hkcF9nZXQoYXBjKSkge1xuJiM0MztcdGlmIChtYW5hX3VzZV9zaW5nbGVfcnhidWZfcGVyX3BhZ2UoYXBjLCBtdHUpKSB7XG4gXHRcdGlmIChtYW5hX3hkcF9nZXQoYXBjKSkge1xuIFx0XHRcdCpoZWFkcm9vbSA9IFhEUF9QQUNLRVRfSEVBRFJPT007XG4gXHRcdFx0KmFsbG9jX3NpemUgPSBQQUdFX1NJWkU7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2V0aHRvb2wuY1xuaW5kZXggOTRlNjU4ZDA3YTI3ZTguLjNjNDk4YTIyMjk2NTgwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9ldGh0b29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZXRodG9vbC5jXG5AQCAtMTMzLDU4ICYjNDM7MTMzLDk0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWFuYV9zdGF0c19kZXNjIG1hbmFfcGh5X3N0YXRzW10gPSB7XG4gXHR7IFwmIzM0O2hjX3RjN190eF9wYXVzZV9waHlcJiMzNDssIG9mZnNldG9mKHN0cnVjdCBtYW5hX2V0aHRvb2xfcGh5X3N0YXRzLCB0eF9wYXVzZV90YzdfcGh5KSB9LFxuIH07XG4gXG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyIG1hbmFfcHJpdl9mbGFnc1tNQU5BX1BSSVZfRkxBR19NQVhdW0VUSF9HU1RSSU5HX0xFTl0gPSB7XG4mIzQzO1x0W01BTkFfUFJJVl9GTEFHX1VTRV9GVUxMX1BBR0VfUlhCVUZdID0gXCYjMzQ7ZnVsbC1wYWdlLXJ4XCYjMzQ7XG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBpbnQgbWFuYV9nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IHN0cmluZ3NldClcbiB7XG4gXHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFx0dW5zaWduZWQgaW50IG51bV9xdWV1ZXMgPSBhcGMtXHUwMDNlbnVtX3F1ZXVlcztcbiBcbi1cdGlmIChzdHJpbmdzZXQgIT0gRVRIX1NTX1NUQVRTKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRzd2l0Y2ggKHN0cmluZ3NldCkge1xuJiM0MztcdGNhc2UgRVRIX1NTX1NUQVRTOlxuJiM0MztcdFx0cmV0dXJuIEFSUkFZX1NJWkUobWFuYV9ldGhfc3RhdHMpICYjNDM7XG4mIzQzO1x0XHQgICAgICAgQVJSQVlfU0laRShtYW5hX3BoeV9zdGF0cykgJiM0MztcbiYjNDM7XHRcdCAgICAgICBBUlJBWV9TSVpFKG1hbmFfaGNfc3RhdHMpICAmIzQzO1xuJiM0MztcdFx0ICAgICAgIG51bV9xdWV1ZXMgKiAoTUFOQV9TVEFUU19SWF9DT1VOVCAmIzQzOyBNQU5BX1NUQVRTX1RYX0NPVU5UKTtcbiYjNDM7XG4mIzQzO1x0Y2FzZSBFVEhfU1NfUFJJVl9GTEFHUzpcbiYjNDM7XHRcdHJldHVybiBNQU5BX1BSSVZfRkxBR19NQVg7XG4gXG4tXHRyZXR1cm4gQVJSQVlfU0laRShtYW5hX2V0aF9zdGF0cykgJiM0MzsgQVJSQVlfU0laRShtYW5hX3BoeV9zdGF0cykgJiM0MzsgQVJSQVlfU0laRShtYW5hX2hjX3N0YXRzKSAmIzQzO1xuLVx0XHRcdG51bV9xdWV1ZXMgKiAoTUFOQV9TVEFUU19SWF9DT1VOVCAmIzQzOyBNQU5BX1NUQVRTX1RYX0NPVU5UKTtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBtYW5hX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqZGF0YSlcbiYjNDM7c3RhdGljIHZvaWQgbWFuYV9nZXRfc3RyaW5nc19zdGF0cyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgdTggKipkYXRhKVxuIHtcbi1cdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXHR1bnNpZ25lZCBpbnQgbnVtX3F1ZXVlcyA9IGFwYy1cdTAwM2VudW1fcXVldWVzO1xuIFx0aW50IGksIGo7XG4gXG4tXHRpZiAoc3RyaW5nc2V0ICE9IEVUSF9TU19TVEFUUylcbi1cdFx0cmV0dXJuO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShtYW5hX2V0aF9zdGF0cyk7IGkmIzQzOyYjNDM7KVxuLVx0XHRldGh0b29sX3B1dHMoXHUwMDI2ZGF0YSwgbWFuYV9ldGhfc3RhdHNbaV0ubmFtZSk7XG4mIzQzO1x0XHRldGh0b29sX3B1dHMoZGF0YSwgbWFuYV9ldGhfc3RhdHNbaV0ubmFtZSk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG1hbmFfaGNfc3RhdHMpOyBpJiM0MzsmIzQzOylcbi1cdFx0ZXRodG9vbF9wdXRzKFx1MDAyNmRhdGEsIG1hbmFfaGNfc3RhdHNbaV0ubmFtZSk7XG4mIzQzO1x0XHRldGh0b29sX3B1dHMoZGF0YSwgbWFuYV9oY19zdGF0c1tpXS5uYW1lKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobWFuYV9waHlfc3RhdHMpOyBpJiM0MzsmIzQzOylcbi1cdFx0ZXRodG9vbF9wdXRzKFx1MDAyNmRhdGEsIG1hbmFfcGh5X3N0YXRzW2ldLm5hbWUpO1xuJiM0MztcdFx0ZXRodG9vbF9wdXRzKGRhdGEsIG1hbmFfcGh5X3N0YXRzW2ldLm5hbWUpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0ZXRodG9vbF9zcHJpbnRmKFx1MDAyNmRhdGEsIFwmIzM0O3J4XyVkX3BhY2tldHNcJiMzNDssIGkpO1xuLVx0XHRldGh0b29sX3NwcmludGYoXHUwMDI2ZGF0YSwgXCYjMzQ7cnhfJWRfYnl0ZXNcJiMzNDssIGkpO1xuLVx0XHRldGh0b29sX3NwcmludGYoXHUwMDI2ZGF0YSwgXCYjMzQ7cnhfJWRfeGRwX2Ryb3BcJiMzNDssIGkpO1xuLVx0XHRldGh0b29sX3NwcmludGYoXHUwMDI2ZGF0YSwgXCYjMzQ7cnhfJWRfeGRwX3R4XCYjMzQ7LCBpKTtcbi1cdFx0ZXRodG9vbF9zcHJpbnRmKFx1MDAyNmRhdGEsIFwmIzM0O3J4XyVkX3hkcF9yZWRpcmVjdFwmIzM0OywgaSk7XG4tXHRcdGV0aHRvb2xfc3ByaW50ZihcdTAwMjZkYXRhLCBcJiMzNDtyeF8lZF9wa3RfbGVuMF9lcnJcJiMzNDssIGkpO1xuJiM0MztcdFx0ZXRodG9vbF9zcHJpbnRmKGRhdGEsIFwmIzM0O3J4XyVkX3BhY2tldHNcJiMzNDssIGkpO1xuJiM0MztcdFx0ZXRodG9vbF9zcHJpbnRmKGRhdGEsIFwmIzM0O3J4XyVkX2J5dGVzXCYjMzQ7LCBpKTtcbiYjNDM7XHRcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcJiMzNDtyeF8lZF94ZHBfZHJvcFwmIzM0OywgaSk7XG4mIzQzO1x0XHRldGh0b29sX3NwcmludGYoZGF0YSwgXCYjMzQ7cnhfJWRfeGRwX3R4XCYjMzQ7LCBpKTtcbiYjNDM7XHRcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcJiMzNDtyeF8lZF94ZHBfcmVkaXJlY3RcJiMzNDssIGkpO1xuJiM0MztcdFx0ZXRodG9vbF9zcHJpbnRmKGRhdGEsIFwmIzM0O3J4XyVkX3BrdF9sZW4wX2VyclwmIzM0OywgaSk7XG4gXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIE1BTkFfUlhDT01QX09PQl9OVU1fUFBJIC0gMTsgaiYjNDM7JiM0MzspXG4tXHRcdFx0ZXRodG9vbF9zcHJpbnRmKFx1MDAyNmRhdGEsIFwmIzM0O3J4XyVkX2NvYWxlc2NlZF9jcWVfJWRcJiMzNDssIGksIGogJiM0MzsgMik7XG4mIzQzO1x0XHRcdGV0aHRvb2xfc3ByaW50ZihkYXRhLFxuJiM0MztcdFx0XHRcdFx0XCYjMzQ7cnhfJWRfY29hbGVzY2VkX2NxZV8lZFwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdGksXG4mIzQzO1x0XHRcdFx0XHRqICYjNDM7IDIpO1xuIFx0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0ZXRodG9vbF9zcHJpbnRmKFx1MDAyNmRhdGEsIFwmIzM0O3R4XyVkX3BhY2tldHNcJiMzNDssIGkpO1xuLVx0XHRldGh0b29sX3NwcmludGYoXHUwMDI2ZGF0YSwgXCYjMzQ7dHhfJWRfYnl0ZXNcJiMzNDssIGkpO1xuLVx0XHRldGh0b29sX3NwcmludGYoXHUwMDI2ZGF0YSwgXCYjMzQ7dHhfJWRfeGRwX3htaXRcJiMzNDssIGkpO1xuLVx0XHRldGh0b29sX3NwcmludGYoXHUwMDI2ZGF0YSwgXCYjMzQ7dHhfJWRfdHNvX3BhY2tldHNcJiMzNDssIGkpO1xuLVx0XHRldGh0b29sX3NwcmludGYoXHUwMDI2ZGF0YSwgXCYjMzQ7dHhfJWRfdHNvX2J5dGVzXCYjMzQ7LCBpKTtcbi1cdFx0ZXRodG9vbF9zcHJpbnRmKFx1MDAyNmRhdGEsIFwmIzM0O3R4XyVkX3Rzb19pbm5lcl9wYWNrZXRzXCYjMzQ7LCBpKTtcbi1cdFx0ZXRodG9vbF9zcHJpbnRmKFx1MDAyNmRhdGEsIFwmIzM0O3R4XyVkX3Rzb19pbm5lcl9ieXRlc1wmIzM0OywgaSk7XG4tXHRcdGV0aHRvb2xfc3ByaW50ZihcdTAwMjZkYXRhLCBcJiMzNDt0eF8lZF9sb25nX3BrdF9mbXRcJiMzNDssIGkpO1xuLVx0XHRldGh0b29sX3NwcmludGYoXHUwMDI2ZGF0YSwgXCYjMzQ7dHhfJWRfc2hvcnRfcGt0X2ZtdFwmIzM0OywgaSk7XG4tXHRcdGV0aHRvb2xfc3ByaW50ZihcdTAwMjZkYXRhLCBcJiMzNDt0eF8lZF9jc3VtX3BhcnRpYWxcJiMzNDssIGkpO1xuLVx0XHRldGh0b29sX3NwcmludGYoXHUwMDI2ZGF0YSwgXCYjMzQ7dHhfJWRfbWFuYV9tYXBfZXJyXCYjMzQ7LCBpKTtcbiYjNDM7XHRcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcJiMzNDt0eF8lZF9wYWNrZXRzXCYjMzQ7LCBpKTtcbiYjNDM7XHRcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcJiMzNDt0eF8lZF9ieXRlc1wmIzM0OywgaSk7XG4mIzQzO1x0XHRldGh0b29sX3NwcmludGYoZGF0YSwgXCYjMzQ7dHhfJWRfeGRwX3htaXRcJiMzNDssIGkpO1xuJiM0MztcdFx0ZXRodG9vbF9zcHJpbnRmKGRhdGEsIFwmIzM0O3R4XyVkX3Rzb19wYWNrZXRzXCYjMzQ7LCBpKTtcbiYjNDM7XHRcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcJiMzNDt0eF8lZF90c29fYnl0ZXNcJiMzNDssIGkpO1xuJiM0MztcdFx0ZXRodG9vbF9zcHJpbnRmKGRhdGEsIFwmIzM0O3R4XyVkX3Rzb19pbm5lcl9wYWNrZXRzXCYjMzQ7LCBpKTtcbiYjNDM7XHRcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcJiMzNDt0eF8lZF90c29faW5uZXJfYnl0ZXNcJiMzNDssIGkpO1xuJiM0MztcdFx0ZXRodG9vbF9zcHJpbnRmKGRhdGEsIFwmIzM0O3R4XyVkX2xvbmdfcGt0X2ZtdFwmIzM0OywgaSk7XG4mIzQzO1x0XHRldGh0b29sX3NwcmludGYoZGF0YSwgXCYjMzQ7dHhfJWRfc2hvcnRfcGt0X2ZtdFwmIzM0OywgaSk7XG4mIzQzO1x0XHRldGh0b29sX3NwcmludGYoZGF0YSwgXCYjMzQ7dHhfJWRfY3N1bV9wYXJ0aWFsXCYjMzQ7LCBpKTtcbiYjNDM7XHRcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcJiMzNDt0eF8lZF9tYW5hX21hcF9lcnJcJiMzNDssIGkpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWFuYV9nZXRfc3RyaW5nc19wcml2X2ZsYWdzKHU4ICoqZGF0YSlcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNQU5BX1BSSVZfRkxBR19NQVg7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0ZXRodG9vbF9wdXRzKGRhdGEsIG1hbmFfcHJpdl9mbGFnc1tpXSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1hbmFfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBzdHJpbmdzZXQsIHU4ICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChzdHJpbmdzZXQpIHtcbiYjNDM7XHRjYXNlIEVUSF9TU19TVEFUUzpcbiYjNDM7XHRcdG1hbmFfZ2V0X3N0cmluZ3Nfc3RhdHMoYXBjLCBcdTAwMjZkYXRhKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgRVRIX1NTX1BSSVZfRkxBR1M6XG4mIzQzO1x0XHRtYW5hX2dldF9zdHJpbmdzX3ByaXZfZmxhZ3MoXHUwMDI2ZGF0YSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0YnJlYWs7XG4gXHR9XG4gfVxuIFxuQEAgLTU5NCw2ICYjNDM7NjMwLDg4IEBAIHN0YXRpYyBpbnQgbWFuYV9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB1MzIgbWFuYV9nZXRfcHJpdl9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBhcGMtXHUwMDNlcHJpdl9mbGFncztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBtYW5hX3NldF9wcml2X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgcHJpdl9mbGFncylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1x0dTMyIGNoYW5nZWQgPSBhcGMtXHUwMDNlcHJpdl9mbGFncyBeIHByaXZfZmxhZ3M7XG4mIzQzO1x0dTMyIG9sZF9wcml2X2ZsYWdzID0gYXBjLVx1MDAzZXByaXZfZmxhZ3M7XG4mIzQzO1x0Ym9vbCBzY2hlZHVsZV9wb3J0X3Jlc2V0ID0gZmFsc2U7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICghY2hhbmdlZClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBSZWplY3QgdW5rbm93biBiaXRzICovXG4mIzQzO1x0aWYgKHByaXZfZmxhZ3MgXHUwMDI2IH5HRU5NQVNLKE1BTkFfUFJJVl9GTEFHX01BWCAtIDEsIDApKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChjaGFuZ2VkIFx1MDAyNiBCSVQoTUFOQV9QUklWX0ZMQUdfVVNFX0ZVTExfUEFHRV9SWEJVRikpIHtcbiYjNDM7XHRcdGFwYy1cdTAwM2Vwcml2X2ZsYWdzID0gcHJpdl9mbGFncztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWFwYy1cdTAwM2Vwb3J0X2lzX3VwKSB7XG4mIzQzO1x0XHRcdC8qIFBvcnQgaXMgZG93biwgZmxhZyB1cGRhdGVkIHRvIGFwcGx5IG9uIG5leHQgdXBcbiYjNDM7XHRcdFx0ICogc28ganVzdCByZXR1cm4uXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKiBQcmUtYWxsb2NhdGUgYnVmZmVycyB0byBwcmV2ZW50IGZhaWx1cmUgaW4gbWFuYV9hdHRhY2hcbiYjNDM7XHRcdCAqIGxhdGVyXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGVyciA9IG1hbmFfcHJlX2FsbG9jX3J4YnVmcyhhcGMsIG5kZXYtXHUwMDNlbXR1LCBhcGMtXHUwMDNlbnVtX3F1ZXVlcyk7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDtJbnN1ZmZpY2llbnQgbWVtb3J5IGZvciBuZXcgYWxsb2NhdGlvbnNcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRhcGMtXHUwMDNlcHJpdl9mbGFncyA9IG9sZF9wcml2X2ZsYWdzO1xuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGVyciA9IG1hbmFfZGV0YWNoKG5kZXYsIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZGV2LCBcJiMzNDttYW5hX2RldGFjaCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuJiM0MztcdFx0XHRhcGMtXHUwMDNlcHJpdl9mbGFncyA9IG9sZF9wcml2X2ZsYWdzO1xuJiM0MztcbiYjNDM7XHRcdFx0LyogUG9ydCBpcyBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFJlc3RvcmVcbiYjNDM7XHRcdFx0ICogJiMzOTtwb3J0X2lzX3VwJiMzOTsgc28gdGhhdCBxdWV1ZSByZXNldCB3b3JrIGhhbmRsZXJcbiYjNDM7XHRcdFx0ICogY2FuIHByb3Blcmx5IGRldGFjaCBhbmQgcmUtYXR0YWNoLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0YXBjLVx1MDAzZXBvcnRfaXNfdXAgPSB0cnVlO1xuJiM0MztcdFx0XHRzY2hlZHVsZV9wb3J0X3Jlc2V0ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gbWFuYV9hdHRhY2gobmRldik7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmRldiwgXCYjMzQ7bWFuYV9hdHRhY2ggZmFpbGVkOiAlZFxcblwmIzM0OywgZXJyKTtcbiYjNDM7XHRcdFx0YXBjLVx1MDAzZXByaXZfZmxhZ3MgPSBvbGRfcHJpdl9mbGFncztcbiYjNDM7XG4mIzQzO1x0XHRcdC8qIFJlc3RvcmUgJiMzOTtwb3J0X2lzX3VwJiMzOTsgc28gdGhlIHJlc2V0IHdvcmsgaGFuZGxlclxuJiM0MztcdFx0XHQgKiBjYW4gcHJvcGVybHkgZGV0YWNoL2F0dGFjaC4gV2l0aG91dCB0aGlzLFxuJiM0MztcdFx0XHQgKiB0aGUgaGFuZGxlciBzZWVzIHBvcnRfaXNfdXA9ZmFsc2UgYW5kIHNraXBzXG4mIzQzO1x0XHRcdCAqIHF1ZXVlIGFsbG9jYXRpb24sIGxlYXZpbmcgdGhlIHBvcnQgZGVhZC5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGFwYy1cdTAwM2Vwb3J0X2lzX3VwID0gdHJ1ZTtcbiYjNDM7XHRcdFx0c2NoZWR1bGVfcG9ydF9yZXNldCA9IHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdG1hbmFfcHJlX2RlYWxsb2NfcnhidWZzKGFwYyk7XG4mIzQzO1xuJiM0MztcdGlmIChzY2hlZHVsZV9wb3J0X3Jlc2V0KVxuJiM0MztcdFx0cXVldWVfd29yayhhcGMtXHUwMDNlYWMtXHUwMDNlcGVyX3BvcnRfcXVldWVfcmVzZXRfd3EsXG4mIzQzO1x0XHRcdCAgIFx1MDAyNmFwYy1cdTAwM2VxdWV1ZV9yZXNldF93b3JrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbWFuYV9ldGh0b29sX29wcyA9IHtcbiBcdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9SWF9DUUVfRlJBTUVTLFxuIFx0Lm9wX25lZWRzX3J0bmxcdFx0PSBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTIHxcbkBAIC02MTQsNCAmIzQzOzczMiw2IEBAIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBtYW5hX2V0aHRvb2xfb3BzID0ge1xuIFx0LnNldF9yaW5ncGFyYW0gICAgICAgICAgPSBtYW5hX3NldF9yaW5ncGFyYW0sXG4gXHQuZ2V0X2xpbmtfa3NldHRpbmdzXHQ9IG1hbmFfZ2V0X2xpbmtfa3NldHRpbmdzLFxuIFx0LmdldF9saW5rXHRcdD0gZXRodG9vbF9vcF9nZXRfbGluayxcbiYjNDM7XHQuZ2V0X3ByaXZfZmxhZ3NcdFx0PSBtYW5hX2dldF9wcml2X2ZsYWdzLFxuJiM0MztcdC5zZXRfcHJpdl9mbGFnc1x0XHQ9IG1hbmFfc2V0X3ByaXZfZmxhZ3MsXG4gfTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYW5hL21hbmEuaCBiL2luY2x1ZGUvbmV0L21hbmEvbWFuYS5oXG5pbmRleCAxM2M4N2JhZjAxOGVlMS4uOGRjNDk2ZjA1OTM4YmYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9tYW5hL21hbmEuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbWFuYS9tYW5hLmhcbkBAIC0zMCw2ICYjNDM7MzAsMTIgQEAgZW51bSBUUklfU1RBVEUge1xuIFx0VFJJX1NUQVRFX1RSVUUgPSAxXG4gfTtcbiBcbiYjNDM7LyogTUFOQSBldGh0b29sIHByaXZhdGUgZmxhZyBiaXQgcG9zaXRpb25zICovXG4mIzQzO2VudW0gbWFuYV9wcml2X2ZsYWdfYml0cyB7XG4mIzQzO1x0TUFOQV9QUklWX0ZMQUdfVVNFX0ZVTExfUEFHRV9SWEJVRiA9IDAsXG4mIzQzO1x0TUFOQV9QUklWX0ZMQUdfTUFYLFxuJiM0Mzt9O1xuJiM0MztcbiAvKiBOdW1iZXIgb2YgZW50cmllcyBmb3IgaGFyZHdhcmUgaW5kaXJlY3Rpb24gdGFibGUgbXVzdCBiZSBpbiBwb3dlciBvZiAyICovXG4gI2RlZmluZSBNQU5BX0lORElSRUNUX1RBQkxFX01BWF9TSVpFIDUxMlxuICNkZWZpbmUgTUFOQV9JTkRJUkVDVF9UQUJMRV9ERUZfU0laRSA2NFxuQEAgLTUzMiw2ICYjNDM7NTM4LDggQEAgc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0IHtcbiBcdHUzMiByeGJwcmVfaGVhZHJvb207XG4gXHR1MzIgcnhicHJlX2ZyYWdfY291bnQ7XG4gXG4mIzQzO1x0dTMyIHByaXZfZmxhZ3M7XG4mIzQzO1xuIFx0c3RydWN0IGJwZl9wcm9nICpicGZfcHJvZztcbiBcbiBcdC8qIENyZWF0ZSBudW1fcXVldWVzIEVRcywgU1FzLCBTUS1DUXMsIFJRcyBhbmQgUlEtQ1FzLCByZXNwZWN0aXZlbHkuICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjI6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlciwgd2hpY2ggaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBQQ0kgZHJpdmVyLiBUaGUgbW9kaWZpZWQgY29kZSAoZXRodG9vbCBvcHMgYW5kIFJYIGJ1ZmZlciBhbGxvY2F0aW9uIGxvZ2ljKSBpcyBvbmx5IHJlYWNoYWJsZSBpZiB0aGUgTUFOQSBQQ0kgZGV2aWNlIGlzIHByZXNlbnQgYW5kIHByb2JlZC4gU2luY2Ugc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMgKGxpa2UgR0NFIG9yIFFFTVUpIGRvIG5vdCBlbXVsYXRlIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUsIHRoZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjVjZTZiNTY2ZmYzZTJhNGUzYzZmZmRjMGZhYjdlNjQ1NTA1ZDc2MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDEgMjI6Mjk6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMKaW5kZXggMjZhZWYyMWM2YzJjODkuLjRiZDgzYzc4MmVhMzdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jCkBAIC03NTUsNiAmIzQzOzc1NSwyNSBAQCBzdGF0aWMgdm9pZCAqbWFuYV9nZXRfcnhidWZfcHJlKHN0cnVjdCBtYW5hX3J4cSAqcnhxLCBkbWFfYWRkcl90ICpkYSkKIAlyZXR1cm4gdmE7CiB9CiAKJiM0MztzdGF0aWMgYm9vbAomIzQzO21hbmFfdXNlX3NpbmdsZV9yeGJ1Zl9wZXJfcGFnZShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgdTMyIG10dSkKJiM0Mzt7CiYjNDM7CS8qIE9uIHNvbWUgcGxhdGZvcm1zIHdpdGggNEsgUEFHRV9TSVpFLCBwYWdlX3Bvb2wgZnJhZ21lbnQgYWxsb2NhdGlvbgomIzQzOwkgKiBpbiB0aGUgUlggcmVmaWxsIHBhdGggKH4ya0IgYnVmZmVyKSBjYW4gY2F1c2Ugc2lnbmlmaWNhbnQgdGhyb3VnaHB1dAomIzQzOwkgKiByZWdyZXNzaW9uIHVuZGVyIGhpZ2ggY29ubmVjdGlvbiBjb3VudHMuIEFsbG93IHVzZXIgdG8gZm9yY2Ugb25lIFJYCiYjNDM7CSAqIGJ1ZmZlciBwZXIgcGFnZSB2aWEgZXRodG9vbCBwcml2YXRlIGZsYWcgdG8gYnlwYXNzIHRoZSBmcmFnbWVudAomIzQzOwkgKiBwYXRoLgomIzQzOwkgKi8KJiM0MzsJaWYgKGFwYy0mZ3Q7cHJpdl9mbGFncyAmYW1wOyBCSVQoTUFOQV9QUklWX0ZMQUdfVVNFX0ZVTExfUEFHRV9SWEJVRikpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJLyogRm9yIHhkcCBhbmQganVtYm8gZnJhbWVzIG1ha2Ugc3VyZSBvbmx5IG9uZSBwYWNrZXQgZml0cyBwZXIgcGFnZS4gKi8KJiM0MzsJaWYgKG10dSAmIzQzOyBNQU5BX1JYQlVGX1BBRCAmZ3Q7IFBBR0VfU0laRSAvIDIgfHwgbWFuYV94ZHBfZ2V0KGFwYykpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKIC8qIEdldCBSWCBidWZmZXImIzM5O3MgZGF0YSBzaXplLCBhbGxvYyBzaXplLCBYRFAgaGVhZHJvb20gYmFzZWQgb24gTVRVICovCiBzdGF0aWMgdm9pZCBtYW5hX2dldF9yeGJ1Zl9jZmcoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsCiAJCQkgICAgICAgaW50IG10dSwgdTMyICpkYXRhc2l6ZSwgdTMyICphbGxvY19zaXplLApAQCAtNzY1LDggJiM0Mzs3ODQsNyBAQCBzdGF0aWMgdm9pZCBtYW5hX2dldF9yeGJ1Zl9jZmcoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsCiAJLyogQ2FsY3VsYXRlIGRhdGFzaXplIGZpcnN0IChjb25zaXN0ZW50IGFjcm9zcyBhbGwgY2FzZXMpICovCiAJKmRhdGFzaXplID0gbXR1ICYjNDM7IEVUSF9ITEVOOwogCi0JLyogRm9yIHhkcCBhbmQganVtYm8gZnJhbWVzIG1ha2Ugc3VyZSBvbmx5IG9uZSBwYWNrZXQgZml0cyBwZXIgcGFnZSAqLwotCWlmIChtdHUgJiM0MzsgTUFOQV9SWEJVRl9QQUQgJmd0OyBQQUdFX1NJWkUgLyAyIHx8IG1hbmFfeGRwX2dldChhcGMpKSB7CiYjNDM7CWlmIChtYW5hX3VzZV9zaW5nbGVfcnhidWZfcGVyX3BhZ2UoYXBjLCBtdHUpKSB7CiAJCWlmIChtYW5hX3hkcF9nZXQoYXBjKSkgewogCQkJKmhlYWRyb29tID0gWERQX1BBQ0tFVF9IRUFEUk9PTTsKIAkJCSphbGxvY19zaXplID0gUEFHRV9TSVpFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2V0aHRvb2wuYwppbmRleCA5NGU2NThkMDdhMjdlOC4uM2M0OThhMjIyOTY1ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZXRodG9vbC5jCkBAIC0xMzMsNTggJiM0MzsxMzMsOTQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtYW5hX3N0YXRzX2Rlc2MgbWFuYV9waHlfc3RhdHNbXSA9IHsKIAl7ICYjMzQ7aGNfdGM3X3R4X3BhdXNlX3BoeSYjMzQ7LCBvZmZzZXRvZihzdHJ1Y3QgbWFuYV9ldGh0b29sX3BoeV9zdGF0cywgdHhfcGF1c2VfdGM3X3BoeSkgfSwKIH07CiAKJiM0MztzdGF0aWMgY29uc3QgY2hhciBtYW5hX3ByaXZfZmxhZ3NbTUFOQV9QUklWX0ZMQUdfTUFYXVtFVEhfR1NUUklOR19MRU5dID0gewomIzQzOwlbTUFOQV9QUklWX0ZMQUdfVVNFX0ZVTExfUEFHRV9SWEJVRl0gPSAmIzM0O2Z1bGwtcGFnZS1yeCYjMzQ7CiYjNDM7fTsKJiM0MzsKIHN0YXRpYyBpbnQgbWFuYV9nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IHN0cmluZ3NldCkKIHsKIAlzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyA9IG5ldGRldl9wcml2KG5kZXYpOwogCXVuc2lnbmVkIGludCBudW1fcXVldWVzID0gYXBjLSZndDtudW1fcXVldWVzOwogCi0JaWYgKHN0cmluZ3NldCAhPSBFVEhfU1NfU1RBVFMpCi0JCXJldHVybiAtRUlOVkFMOwomIzQzOwlzd2l0Y2ggKHN0cmluZ3NldCkgewomIzQzOwljYXNlIEVUSF9TU19TVEFUUzoKJiM0MzsJCXJldHVybiBBUlJBWV9TSVpFKG1hbmFfZXRoX3N0YXRzKSAmIzQzOwomIzQzOwkJICAgICAgIEFSUkFZX1NJWkUobWFuYV9waHlfc3RhdHMpICYjNDM7CiYjNDM7CQkgICAgICAgQVJSQVlfU0laRShtYW5hX2hjX3N0YXRzKSAgJiM0MzsKJiM0MzsJCSAgICAgICBudW1fcXVldWVzICogKE1BTkFfU1RBVFNfUlhfQ09VTlQgJiM0MzsgTUFOQV9TVEFUU19UWF9DT1VOVCk7CiYjNDM7CiYjNDM7CWNhc2UgRVRIX1NTX1BSSVZfRkxBR1M6CiYjNDM7CQlyZXR1cm4gTUFOQV9QUklWX0ZMQUdfTUFYOwogCi0JcmV0dXJuIEFSUkFZX1NJWkUobWFuYV9ldGhfc3RhdHMpICYjNDM7IEFSUkFZX1NJWkUobWFuYV9waHlfc3RhdHMpICYjNDM7IEFSUkFZX1NJWkUobWFuYV9oY19zdGF0cykgJiM0MzsKLQkJCW51bV9xdWV1ZXMgKiAoTUFOQV9TVEFUU19SWF9DT1VOVCAmIzQzOyBNQU5BX1NUQVRTX1RYX0NPVU5UKTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiB9CiAKLXN0YXRpYyB2b2lkIG1hbmFfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBzdHJpbmdzZXQsIHU4ICpkYXRhKQomIzQzO3N0YXRpYyB2b2lkIG1hbmFfZ2V0X3N0cmluZ3Nfc3RhdHMoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsIHU4ICoqZGF0YSkKIHsKLQlzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyA9IG5ldGRldl9wcml2KG5kZXYpOwogCXVuc2lnbmVkIGludCBudW1fcXVldWVzID0gYXBjLSZndDtudW1fcXVldWVzOwogCWludCBpLCBqOwogCi0JaWYgKHN0cmluZ3NldCAhPSBFVEhfU1NfU1RBVFMpCi0JCXJldHVybjsKIAlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShtYW5hX2V0aF9zdGF0cyk7IGkmIzQzOyYjNDM7KQotCQlldGh0b29sX3B1dHMoJmFtcDtkYXRhLCBtYW5hX2V0aF9zdGF0c1tpXS5uYW1lKTsKJiM0MzsJCWV0aHRvb2xfcHV0cyhkYXRhLCBtYW5hX2V0aF9zdGF0c1tpXS5uYW1lKTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKG1hbmFfaGNfc3RhdHMpOyBpJiM0MzsmIzQzOykKLQkJZXRodG9vbF9wdXRzKCZhbXA7ZGF0YSwgbWFuYV9oY19zdGF0c1tpXS5uYW1lKTsKJiM0MzsJCWV0aHRvb2xfcHV0cyhkYXRhLCBtYW5hX2hjX3N0YXRzW2ldLm5hbWUpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUobWFuYV9waHlfc3RhdHMpOyBpJiM0MzsmIzQzOykKLQkJZXRodG9vbF9wdXRzKCZhbXA7ZGF0YSwgbWFuYV9waHlfc3RhdHNbaV0ubmFtZSk7CiYjNDM7CQlldGh0b29sX3B1dHMoZGF0YSwgbWFuYV9waHlfc3RhdHNbaV0ubmFtZSk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKLQkJZXRodG9vbF9zcHJpbnRmKCZhbXA7ZGF0YSwgJiMzNDtyeF8lZF9wYWNrZXRzJiMzNDssIGkpOwotCQlldGh0b29sX3NwcmludGYoJmFtcDtkYXRhLCAmIzM0O3J4XyVkX2J5dGVzJiMzNDssIGkpOwotCQlldGh0b29sX3NwcmludGYoJmFtcDtkYXRhLCAmIzM0O3J4XyVkX3hkcF9kcm9wJiMzNDssIGkpOwotCQlldGh0b29sX3NwcmludGYoJmFtcDtkYXRhLCAmIzM0O3J4XyVkX3hkcF90eCYjMzQ7LCBpKTsKLQkJZXRodG9vbF9zcHJpbnRmKCZhbXA7ZGF0YSwgJiMzNDtyeF8lZF94ZHBfcmVkaXJlY3QmIzM0OywgaSk7Ci0JCWV0aHRvb2xfc3ByaW50ZigmYW1wO2RhdGEsICYjMzQ7cnhfJWRfcGt0X2xlbjBfZXJyJiMzNDssIGkpOwomIzQzOwkJZXRodG9vbF9zcHJpbnRmKGRhdGEsICYjMzQ7cnhfJWRfcGFja2V0cyYjMzQ7LCBpKTsKJiM0MzsJCWV0aHRvb2xfc3ByaW50ZihkYXRhLCAmIzM0O3J4XyVkX2J5dGVzJiMzNDssIGkpOwomIzQzOwkJZXRodG9vbF9zcHJpbnRmKGRhdGEsICYjMzQ7cnhfJWRfeGRwX2Ryb3AmIzM0OywgaSk7CiYjNDM7CQlldGh0b29sX3NwcmludGYoZGF0YSwgJiMzNDtyeF8lZF94ZHBfdHgmIzM0OywgaSk7CiYjNDM7CQlldGh0b29sX3NwcmludGYoZGF0YSwgJiMzNDtyeF8lZF94ZHBfcmVkaXJlY3QmIzM0OywgaSk7CiYjNDM7CQlldGh0b29sX3NwcmludGYoZGF0YSwgJiMzNDtyeF8lZF9wa3RfbGVuMF9lcnImIzM0OywgaSk7CiAJCWZvciAoaiA9IDA7IGogJmx0OyBNQU5BX1JYQ09NUF9PT0JfTlVNX1BQSSAtIDE7IGomIzQzOyYjNDM7KQotCQkJZXRodG9vbF9zcHJpbnRmKCZhbXA7ZGF0YSwgJiMzNDtyeF8lZF9jb2FsZXNjZWRfY3FlXyVkJiMzNDssIGksIGogJiM0MzsgMik7CiYjNDM7CQkJZXRodG9vbF9zcHJpbnRmKGRhdGEsCiYjNDM7CQkJCQkmIzM0O3J4XyVkX2NvYWxlc2NlZF9jcWVfJWQmIzM0OywKJiM0MzsJCQkJCWksCiYjNDM7CQkJCQlqICYjNDM7IDIpOwogCX0KIAogCWZvciAoaSA9IDA7IGkgJmx0OyBudW1fcXVldWVzOyBpJiM0MzsmIzQzOykgewotCQlldGh0b29sX3NwcmludGYoJmFtcDtkYXRhLCAmIzM0O3R4XyVkX3BhY2tldHMmIzM0OywgaSk7Ci0JCWV0aHRvb2xfc3ByaW50ZigmYW1wO2RhdGEsICYjMzQ7dHhfJWRfYnl0ZXMmIzM0OywgaSk7Ci0JCWV0aHRvb2xfc3ByaW50ZigmYW1wO2RhdGEsICYjMzQ7dHhfJWRfeGRwX3htaXQmIzM0OywgaSk7Ci0JCWV0aHRvb2xfc3ByaW50ZigmYW1wO2RhdGEsICYjMzQ7dHhfJWRfdHNvX3BhY2tldHMmIzM0OywgaSk7Ci0JCWV0aHRvb2xfc3ByaW50ZigmYW1wO2RhdGEsICYjMzQ7dHhfJWRfdHNvX2J5dGVzJiMzNDssIGkpOwotCQlldGh0b29sX3NwcmludGYoJmFtcDtkYXRhLCAmIzM0O3R4XyVkX3Rzb19pbm5lcl9wYWNrZXRzJiMzNDssIGkpOwotCQlldGh0b29sX3NwcmludGYoJmFtcDtkYXRhLCAmIzM0O3R4XyVkX3Rzb19pbm5lcl9ieXRlcyYjMzQ7LCBpKTsKLQkJZXRodG9vbF9zcHJpbnRmKCZhbXA7ZGF0YSwgJiMzNDt0eF8lZF9sb25nX3BrdF9mbXQmIzM0OywgaSk7Ci0JCWV0aHRvb2xfc3ByaW50ZigmYW1wO2RhdGEsICYjMzQ7dHhfJWRfc2hvcnRfcGt0X2ZtdCYjMzQ7LCBpKTsKLQkJZXRodG9vbF9zcHJpbnRmKCZhbXA7ZGF0YSwgJiMzNDt0eF8lZF9jc3VtX3BhcnRpYWwmIzM0OywgaSk7Ci0JCWV0aHRvb2xfc3ByaW50ZigmYW1wO2RhdGEsICYjMzQ7dHhfJWRfbWFuYV9tYXBfZXJyJiMzNDssIGkpOwomIzQzOwkJZXRodG9vbF9zcHJpbnRmKGRhdGEsICYjMzQ7dHhfJWRfcGFja2V0cyYjMzQ7LCBpKTsKJiM0MzsJCWV0aHRvb2xfc3ByaW50ZihkYXRhLCAmIzM0O3R4XyVkX2J5dGVzJiMzNDssIGkpOwomIzQzOwkJZXRodG9vbF9zcHJpbnRmKGRhdGEsICYjMzQ7dHhfJWRfeGRwX3htaXQmIzM0OywgaSk7CiYjNDM7CQlldGh0b29sX3NwcmludGYoZGF0YSwgJiMzNDt0eF8lZF90c29fcGFja2V0cyYjMzQ7LCBpKTsKJiM0MzsJCWV0aHRvb2xfc3ByaW50ZihkYXRhLCAmIzM0O3R4XyVkX3Rzb19ieXRlcyYjMzQ7LCBpKTsKJiM0MzsJCWV0aHRvb2xfc3ByaW50ZihkYXRhLCAmIzM0O3R4XyVkX3Rzb19pbm5lcl9wYWNrZXRzJiMzNDssIGkpOwomIzQzOwkJZXRodG9vbF9zcHJpbnRmKGRhdGEsICYjMzQ7dHhfJWRfdHNvX2lubmVyX2J5dGVzJiMzNDssIGkpOwomIzQzOwkJZXRodG9vbF9zcHJpbnRmKGRhdGEsICYjMzQ7dHhfJWRfbG9uZ19wa3RfZm10JiMzNDssIGkpOwomIzQzOwkJZXRodG9vbF9zcHJpbnRmKGRhdGEsICYjMzQ7dHhfJWRfc2hvcnRfcGt0X2ZtdCYjMzQ7LCBpKTsKJiM0MzsJCWV0aHRvb2xfc3ByaW50ZihkYXRhLCAmIzM0O3R4XyVkX2NzdW1fcGFydGlhbCYjMzQ7LCBpKTsKJiM0MzsJCWV0aHRvb2xfc3ByaW50ZihkYXRhLCAmIzM0O3R4XyVkX21hbmFfbWFwX2VyciYjMzQ7LCBpKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtYW5hX2dldF9zdHJpbmdzX3ByaXZfZmxhZ3ModTggKipkYXRhKQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBNQU5BX1BSSVZfRkxBR19NQVg7IGkmIzQzOyYjNDM7KQomIzQzOwkJZXRodG9vbF9wdXRzKGRhdGEsIG1hbmFfcHJpdl9mbGFnc1tpXSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1hbmFfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBzdHJpbmdzZXQsIHU4ICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsKJiM0MzsJc3dpdGNoIChzdHJpbmdzZXQpIHsKJiM0MzsJY2FzZSBFVEhfU1NfU1RBVFM6CiYjNDM7CQltYW5hX2dldF9zdHJpbmdzX3N0YXRzKGFwYywgJmFtcDtkYXRhKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEVUSF9TU19QUklWX0ZMQUdTOgomIzQzOwkJbWFuYV9nZXRfc3RyaW5nc19wcml2X2ZsYWdzKCZhbXA7ZGF0YSk7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWJyZWFrOwogCX0KIH0KIApAQCAtNTk0LDYgJiM0Mzs2MzAsODggQEAgc3RhdGljIGludCBtYW5hX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyB1MzIgbWFuYV9nZXRfcHJpdl9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CiYjNDM7CXJldHVybiBhcGMtJmd0O3ByaXZfZmxhZ3M7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbWFuYV9zZXRfcHJpdl9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIHByaXZfZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwl1MzIgY2hhbmdlZCA9IGFwYy0mZ3Q7cHJpdl9mbGFncyBeIHByaXZfZmxhZ3M7CiYjNDM7CXUzMiBvbGRfcHJpdl9mbGFncyA9IGFwYy0mZ3Q7cHJpdl9mbGFnczsKJiM0MzsJYm9vbCBzY2hlZHVsZV9wb3J0X3Jlc2V0ID0gZmFsc2U7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwlpZiAoIWNoYW5nZWQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogUmVqZWN0IHVua25vd24gYml0cyAqLwomIzQzOwlpZiAocHJpdl9mbGFncyAmYW1wOyB+R0VOTUFTSyhNQU5BX1BSSVZfRkxBR19NQVggLSAxLCAwKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoY2hhbmdlZCAmYW1wOyBCSVQoTUFOQV9QUklWX0ZMQUdfVVNFX0ZVTExfUEFHRV9SWEJVRikpIHsKJiM0MzsJCWFwYy0mZ3Q7cHJpdl9mbGFncyA9IHByaXZfZmxhZ3M7CiYjNDM7CiYjNDM7CQlpZiAoIWFwYy0mZ3Q7cG9ydF9pc191cCkgewomIzQzOwkJCS8qIFBvcnQgaXMgZG93biwgZmxhZyB1cGRhdGVkIHRvIGFwcGx5IG9uIG5leHQgdXAKJiM0MzsJCQkgKiBzbyBqdXN0IHJldHVybi4KJiM0MzsJCQkgKi8KJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qIFByZS1hbGxvY2F0ZSBidWZmZXJzIHRvIHByZXZlbnQgZmFpbHVyZSBpbiBtYW5hX2F0dGFjaAomIzQzOwkJICogbGF0ZXIKJiM0MzsJCSAqLwomIzQzOwkJZXJyID0gbWFuYV9wcmVfYWxsb2NfcnhidWZzKGFwYywgbmRldi0mZ3Q7bXR1LCBhcGMtJmd0O251bV9xdWV1ZXMpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCW5ldGRldl9lcnIobmRldiwKJiM0MzsJCQkJICAgJiMzNDtJbnN1ZmZpY2llbnQgbWVtb3J5IGZvciBuZXcgYWxsb2NhdGlvbnNcbiYjMzQ7KTsKJiM0MzsJCQlhcGMtJmd0O3ByaXZfZmxhZ3MgPSBvbGRfcHJpdl9mbGFnczsKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZXJyID0gbWFuYV9kZXRhY2gobmRldiwgZmFsc2UpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCW5ldGRldl9lcnIobmRldiwgJiMzNDttYW5hX2RldGFjaCBmYWlsZWQ6ICVkXG4mIzM0OywgZXJyKTsKJiM0MzsJCQlhcGMtJmd0O3ByaXZfZmxhZ3MgPSBvbGRfcHJpdl9mbGFnczsKJiM0MzsKJiM0MzsJCQkvKiBQb3J0IGlzIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gUmVzdG9yZQomIzQzOwkJCSAqICYjMzk7cG9ydF9pc191cCYjMzk7IHNvIHRoYXQgcXVldWUgcmVzZXQgd29yayBoYW5kbGVyCiYjNDM7CQkJICogY2FuIHByb3Blcmx5IGRldGFjaCBhbmQgcmUtYXR0YWNoLgomIzQzOwkJCSAqLwomIzQzOwkJCWFwYy0mZ3Q7cG9ydF9pc191cCA9IHRydWU7CiYjNDM7CQkJc2NoZWR1bGVfcG9ydF9yZXNldCA9IHRydWU7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQllcnIgPSBtYW5hX2F0dGFjaChuZGV2KTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQluZXRkZXZfZXJyKG5kZXYsICYjMzQ7bWFuYV9hdHRhY2ggZmFpbGVkOiAlZFxuJiMzNDssIGVycik7CiYjNDM7CQkJYXBjLSZndDtwcml2X2ZsYWdzID0gb2xkX3ByaXZfZmxhZ3M7CiYjNDM7CiYjNDM7CQkJLyogUmVzdG9yZSAmIzM5O3BvcnRfaXNfdXAmIzM5OyBzbyB0aGUgcmVzZXQgd29yayBoYW5kbGVyCiYjNDM7CQkJICogY2FuIHByb3Blcmx5IGRldGFjaC9hdHRhY2guIFdpdGhvdXQgdGhpcywKJiM0MzsJCQkgKiB0aGUgaGFuZGxlciBzZWVzIHBvcnRfaXNfdXA9ZmFsc2UgYW5kIHNraXBzCiYjNDM7CQkJICogcXVldWUgYWxsb2NhdGlvbiwgbGVhdmluZyB0aGUgcG9ydCBkZWFkLgomIzQzOwkJCSAqLwomIzQzOwkJCWFwYy0mZ3Q7cG9ydF9pc191cCA9IHRydWU7CiYjNDM7CQkJc2NoZWR1bGVfcG9ydF9yZXNldCA9IHRydWU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MztvdXQ6CiYjNDM7CW1hbmFfcHJlX2RlYWxsb2NfcnhidWZzKGFwYyk7CiYjNDM7CiYjNDM7CWlmIChzY2hlZHVsZV9wb3J0X3Jlc2V0KQomIzQzOwkJcXVldWVfd29yayhhcGMtJmd0O2FjLSZndDtwZXJfcG9ydF9xdWV1ZV9yZXNldF93cSwKJiM0MzsJCQkgICAmYW1wO2FwYy0mZ3Q7cXVldWVfcmVzZXRfd29yayk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwogY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG1hbmFfZXRodG9vbF9vcHMgPSB7CiAJLnN1cHBvcnRlZF9jb2FsZXNjZV9wYXJhbXMgPSBFVEhUT09MX0NPQUxFU0NFX1JYX0NRRV9GUkFNRVMsCiAJLm9wX25lZWRzX3J0bmwJCT0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8CkBAIC02MTQsNCAmIzQzOzczMiw2IEBAIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBtYW5hX2V0aHRvb2xfb3BzID0gewogCS5zZXRfcmluZ3BhcmFtICAgICAgICAgID0gbWFuYV9zZXRfcmluZ3BhcmFtLAogCS5nZXRfbGlua19rc2V0dGluZ3MJPSBtYW5hX2dldF9saW5rX2tzZXR0aW5ncywKIAkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKJiM0MzsJLmdldF9wcml2X2ZsYWdzCQk9IG1hbmFfZ2V0X3ByaXZfZmxhZ3MsCiYjNDM7CS5zZXRfcHJpdl9mbGFncwkJPSBtYW5hX3NldF9wcml2X2ZsYWdzLAogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hbmEvbWFuYS5oIGIvaW5jbHVkZS9uZXQvbWFuYS9tYW5hLmgKaW5kZXggMTNjODdiYWYwMThlZTEuLjhkYzQ5NmYwNTkzOGJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tYW5hL21hbmEuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9tYW5hL21hbmEuaApAQCAtMzAsNiAmIzQzOzMwLDEyIEBAIGVudW0gVFJJX1NUQVRFIHsKIAlUUklfU1RBVEVfVFJVRSA9IDEKIH07CiAKJiM0MzsvKiBNQU5BIGV0aHRvb2wgcHJpdmF0ZSBmbGFnIGJpdCBwb3NpdGlvbnMgKi8KJiM0MztlbnVtIG1hbmFfcHJpdl9mbGFnX2JpdHMgewomIzQzOwlNQU5BX1BSSVZfRkxBR19VU0VfRlVMTF9QQUdFX1JYQlVGID0gMCwKJiM0MzsJTUFOQV9QUklWX0ZMQUdfTUFYLAomIzQzO307CiYjNDM7CiAvKiBOdW1iZXIgb2YgZW50cmllcyBmb3IgaGFyZHdhcmUgaW5kaXJlY3Rpb24gdGFibGUgbXVzdCBiZSBpbiBwb3dlciBvZiAyICovCiAjZGVmaW5lIE1BTkFfSU5ESVJFQ1RfVEFCTEVfTUFYX1NJWkUgNTEyCiAjZGVmaW5lIE1BTkFfSU5ESVJFQ1RfVEFCTEVfREVGX1NJWkUgNjQKQEAgLTUzMiw2ICYjNDM7NTM4LDggQEAgc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0IHsKIAl1MzIgcnhicHJlX2hlYWRyb29tOwogCXUzMiByeGJwcmVfZnJhZ19jb3VudDsKIAomIzQzOwl1MzIgcHJpdl9mbGFnczsKJiM0MzsKIAlzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nOwogCiAJLyogQ3JlYXRlIG51bV9xdWV1ZXMgRVFzLCBTUXMsIFNRLUNRcywgUlFzIGFuZCBSUS1DUXMsIHJlc3BlY3RpdmVseS4gKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc0NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyB0aGUgYGZ1bGwtcGFnZS1yeGAgUGF0Y2g6IEEgVmlydHVhbGl6YXRpb24gQ29udW5kcnVtKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCDigJMgYSBuZXcgYGV0aHRvb2xgIHByaXZhdGUgZmxhZywgYGZ1bGwtcGFnZS1yeGAsIGZvciB0aGUgTWljcm9zb2Z0IE1BTkEgZXRoZXJuZXQgZHJpdmVyLiBJdCYjMzk7cyBzdXBwb3NlZCB0byBmb3JjZSB0aGUgZHJpdmVyIHRvIHVzZSBhIGZ1bGwgcGFnZSBmb3IgZWFjaCBSWCBidWZmZXIsIHNraXBwaW5nIHRoZSBmcmFnbWVudCBwYXRoLiBUaGUgY29kZSYjMzk7cyBzcHJlYWQgYWNyb3NzIGBtYW5hX2VuLmNgLCBgbWFuYV9ldGh0b29sLmNgLCBhbmQgYG1hbmEuaGAuIEZpbmUsIHN0YW5kYXJkIHN0dWZmLiBOb3cgdGhlIHF1ZXN0aW9uIGlzLCBob3cgZG8gd2UgKnRlc3QqIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gVGhpcyBkcml2ZXImIzM5O3MgZm9yIHRoZSBBenVyZSBOZXR3b3JrIEFkYXB0ZXIsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBQQ0kgZGV2aWNlLgoKVGhlIHJlYWwgY2hhbGxlbmdlIGlzIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgbGlrZSB0aGlzLCB1bmxlc3Mgd2UgYXJlIHRhbGtpbmcgYWJvdXQgc29tZXRoaW5nIG1vcmUgYW1lbmFibGUgdG8gZW11bGF0aW9uIHN1Y2ggYXMgVVNCLCB2aXJ0aW8sIHZldGgsIG9yIG1hYzgwMjExX2h3c2ltLiBUaGVzZSB0aGluZ3MgYXJlIHJhcmVseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgc3l6a2FsbGVyIFZNcyB1bmxlc3MgdGhlcmUmIzM5O3MgYW4gZW11bGF0b3IuIFNwZWNpZmljYWxseSwgdW5sZXNzIGl0JiMzOTtzIHJ1bm5pbmcgb24gQXp1cmUgVk1zLCB0aGlzIGlzIGdvaW5nIHRvIGJlIGRpZmZpY3VsdC4gU3l6a2FsbGVyIHJ1bnMgb24gR0NFIG9yIFFFTVUsIHNvIGNhbiBRRU1VIGVtdWxhdGUgYSBNQU5BIGRldmljZT8gSGlnaGx5IHVubGlrZWx5LgoKQ2FuIHdlIGV2ZW4gcmVhY2ggYG1hbmFfc2V0X3ByaXZfZmxhZ3NgIHdpdGhvdXQgYSByZWFsIE1BTkEgZGV2aWNlPyBUaGUgYGV0aHRvb2xgIG9wZXJhdGlvbnMgYXJlIHJlZ2lzdGVyZWQgd2hlbiB0aGUgbmV0d29yayBkZXZpY2UgaXMgcmVnaXN0ZXJlZCwgYW5kIHRoYXQgbmV0ZGV2IHJlZ2lzdHJhdGlvbiBoYXBwZW5zIGluIHRoZSBwcm9iZSBmdW5jdGlvbiBvZiB0aGUgUENJIGRyaXZlci4gSWYgbm8gTUFOQSBQQ0kgZGV2aWNlIGlzIHByZXNlbnQsIHRoZSBwcm9iZSBmdW5jdGlvbiBpcyBuZXZlciBjYWxsZWQsIHRoZSBuZXRkZXYgaXMgbmV2ZXIgY3JlYXRlZCwgYW5kIHRob3NlIGBldGh0b29sYCBvcGVyYXRpb25zIGFyZSB1bnJlYWNoYWJsZS4gU28gdGhlIGFuc3dlciBpcyAmIzM0O25vJiMzNDsuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gc2VlIGlmICphbnkqIGtpbmQgb2Ygc29mdHdhcmUgZW11bGF0aW9uIGV4aXN0cyBmb3IgdGhlIE1BTkEgZGV2aWNlLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBkcml2ZXIgZGlyZWN0b3J5OiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvYC4gSSB3aWxsIHNlYXJjaCBmb3Igc29tZXRoaW5nIGxpa2UgYG1hbmFfcHJvYmVgIG9yIGEgc2ltaWxhciBpZGVudGlmaWVyLiBUaGlzIGlzIGNyaXRpY2FsOiBpZiB0aGVyZSBpcyBubyBlbXVsYXRpb24gYXZhaWxhYmxlLCByZWFjaGluZyB0aGlzIHBhdGNoIGZvciB0ZXN0aW5nIG1heSBiZSBkaWZmaWN1bHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFuYV9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYz0xNzc9c3RhdGljIGludCBtYW5hX2dkX3F1ZXJ5X21heF9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjU5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6MjYwOlx0LyogQ2FwIHRvIHRoZSBzYW1lIGxpbWl0IHVzZWQgYnkgbWFuYV9wcm9iZSgpIGZvciBwb3J0IGluc3RhbnRpYXRpb24sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNjEtXHQgKiBzbyBNU0ktWCBhbmQgcXVldWUgYnVkZ2V0aW5nIG1hdGNoZXMgdGhlIGFjdHVhbCBwb3J0IGNvdW50LlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jPTIyNTA9c3RhdGljIGludCBtYW5hX2dkX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTIzMDUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzoyMzA2Olx0ZXJyID0gbWFuYV9wcm9iZShcdTAwMjZnYy1cdTAwM2VtYW5hLCBmYWxzZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yMzA3LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yMzQ0LVx0ICogSGFyZHdhcmUgY291bGQgYmUgaW4gcmVjb3ZlcnkgbW9kZSBhbmQgdGhlIEhXQyByZXR1cm5zIFRJTUVET1VUIG9yXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzoyMzQ1Olx0ICogRVBST1RPIGZyb20gbWFuYV9nZF9zZXR1cCgpLCBtYW5hX3Byb2JlKCkgb3IgbWFuYV9yZG1hX3Byb2JlKCksIG9yXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yMzQ2LVx0ICogd2UgcmVjZWl2ZWQgYSBoYXJkd2FyZSByZXNldCBldmVudCBvdmVyIEhXQyBpbnRlcnJ1cHQuIEluIHRoaXMgY2FzZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYz0yNDA4PWludCBtYW5hX2dkX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNDE2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6MjQxNzpcdGVyciA9IG1hbmFfcHJvYmUoXHUwMDI2Z2MtXHUwMDNlbWFuYSwgdHJ1ZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNDE4LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM9MzQ4Nz1pbnQgbWFuYV9kZXRhY2goc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGJvb2wgZnJvbV9jbG9zZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMzUyMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzozNTI0OnN0YXRpYyBpbnQgbWFuYV9wcm9iZV9wb3J0KHN0cnVjdCBtYW5hX2NvbnRleHQgKmFjLCBpbnQgcG9ydF9pZHgsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMzUyNS1cdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqKm5kZXZfc3RvcmFnZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM9Mzc1ND1zdGF0aWMgdm9pZCBtYW5hX2dmX3N0YXRzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTM3NzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM6Mzc3NzppbnQgbWFuYV9wcm9iZShzdHJ1Y3QgZ2RtYV9kZXYgKmdkLCBib29sIHJlc3VtaW5nKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTM3Nzgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0zODUxLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhYy1cdTAwM2VudW1fcG9ydHM7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM6Mzg1MjpcdFx0XHRlcnIgPSBtYW5hX3Byb2JlX3BvcnQoYWMsIGksIFx1MDAyNmFjLVx1MDAzZXBvcnRzW2ldKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0zODUzLVx0XHRcdC8qIExvZyB0aGUgcG9ydCBmb3Igd2hpY2ggdGhlIHByb2JlIGZhaWxlZCwgc3RvcCBwcm9iaW5nXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUzNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNQU5BIERyaXZlciBSZWFjaGFiaWxpdHkgQW5hbHlzaXMqKgoKT2theSwgc28gdGhlIE1BTkEgZHJpdmVyLCB0aGF0JiMzOTtzIHRoZSBQQ0kgZHJpdmVyIGZvciB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlci4gU3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gQnV0IGhlcmUmIzM5O3MgdGhlIGtpY2tlcjogaXQgcmVsaWVzIG9uIHNwZWNpZmljIFBDSSBoYXJkd2FyZS4gSXQgbmVlZHMgdGhhdCBwaHlzaWNhbCBwcmVzZW5jZSB0byBkbyBpdHMgcHJvYmluZyBhbmQgcmVnaXN0ZXIgdGhlIG5ldHdvcmsgZGV2aWNlLgoKTm93LCBteSBpbml0aWFsIHRob3VnaHQgaXMsIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIEkmIzM5O20gcmlnaHQsIHRoYXQgdGhpcyBjb2RlIGlzICpuZXZlciogaGl0IGluIGEgc3RhbmRhcmQgU3l6a2FsbGVyIHNldHVwLiBXZSYjMzk7cmUgZWl0aGVyIHJ1bm5pbmcgaW4gR0NFIG9yIFFFTVUsIGFuZCB0aG9zZSBlbnZpcm9ubWVudHMsIGJ5IGRlZmF1bHQsIGRvbiYjMzk7dCBoYXZlIHRoaXMgcGFydGljdWxhciBwaWVjZSBvZiBQQ0kgaGFyZHdhcmUgdW5sZXNzIHdlJiMzOTt2ZSBnb25lIHRvIHRoZSB0cm91YmxlIG9mIGRvaW5nIFBDSSBwYXNzdGhyb3VnaCBvciBzZXQgdXAgc29tZSBzcGVjaWZpYyBlbXVsYXRvciwgd2hpY2gsIGxldCYjMzk7cyBiZSBob25lc3QsIGlzbiYjMzk7dCB0aGUgbm9ybS4gVGhlIHVzdWFsIGZ1enppbmcgc2V0dXAsIGZvciBzcGVlZCBhbmQgc2ltcGxpY2l0eSwgYXZvaWRzIHRoaXMgbGV2ZWwgb2YgY29uZmlndXJhdGlvbi4KClRoZXJlZm9yZSwgdW5kZXIgdGhlc2UgY29uZGl0aW9ucywgV29ydGhGdXp6aW5nIGhhcyBnb3QgdG8gYmUgZmFsc2UuIE5vIGNoYW5jZSBvZiByZWFjaGluZyB0aGF0IGNvZGUuCgpMZXQgbWUganVzdCBkbyBhIHF1aWNrIHNjYW4gdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlcmUgaXNuJiMzOTt0IHNvbWUgb2JzY3VyZSBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoZSBNQU5BIGRyaXZlciBvdXQgdGhlcmUsIGp1c3QgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaC4gSXQmIzM5O3MgYWx3YXlzIHdvcnRoIGRvdWJsZS1jaGVja2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYW5hX2dkX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jPTIyNDU9c3RhdGljIGJvb2wgbWFuYV9pc19wZih1bnNpZ25lZCBzaG9ydCBkZXZfaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjI0OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jOjIyNTA6c3RhdGljIGludCBtYW5hX2dkX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjI1MS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9MjQ1ND1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFuYV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjQ1Ni1cdC5pZF90YWJsZVx0PSBtYW5hX2lkX3RhYmxlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6MjQ1NzpcdC5wcm9iZVx0XHQ9IG1hbmFfZ2RfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNDU4LVx0LnJlbW92ZVx0XHQ9IG1hbmFfZ2RfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMTkKCQkJCQkJCW91dHB1dDogMTE0CgkJCQkJCQl0aG91Z2h0czogMTczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUENJIERyaXZlciBhbmQgaXRzIExpbWl0YXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIFBDSSBkcml2ZXIgc3RydWN0dXJlLCBgbWFuYV9kcml2ZXJgLCBhbmQgaXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgdGhlIHVzdWFsIHN1c3BlY3RzOiBgbmFtZWAsIGBpZF90YWJsZWAsIGBwcm9iZWAsIGFuZCBgcmVtb3ZlYCBtZXRob2RzLiBOb3RoaW5nIGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhcyB1bnVzdWFsLiBCdXQsIGJhc2VkIG9uIHRoZSBjb2RlIEkmIzM5O20gc2VlaW5nLCB0aGVyZSYjMzk7cyBhIGNyaXRpY2FsIGRlcGVuZGVuY3kgaGVyZS4gV2l0aG91dCB0aGUgYWN0dWFsIHBoeXNpY2FsIGhhcmR3YXJlIHByZXNlbnQsIHRoYXQgY3J1Y2lhbCBgbWFuYV9nZF9wcm9iZWAgZnVuY3Rpb24gd2lsbCBuZXZlciBnZXQgZXhlY3V0ZWQuIEFuZCBpZiBgbWFuYV9nZF9wcm9iZWAgaXNuJiMzOTt0IGNhbGxlZCwgdGhlbiBgbWFuYV9wcm9iZWAgZG9lc24mIzM5O3QgcnVuLCBhbmQgbmVpdGhlciBkb2VzIGBtYW5hX3Byb2JlX3BvcnRgLCBsZWFkaW5nIHRvIGByZWdpc3Rlcl9uZXRkZXZgIGJlaW5nIHNraXBwZWQuIFRoYXQgd2hvbGUgY2hhaW4gaXMgYmxvY2tlZC4KClRoZSBpbXBsaWNhdGlvbiBpcyBjbGVhcjogaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBsaWtlIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBvciBRRU1VLCB0aGlzIGRyaXZlciYjMzk7cyBmdW5jdGlvbmFsaXR5IGlzIGZ1bmRhbWVudGFsbHkgdW5yZWFjaGFibGUuIE5vIGhhcmR3YXJlLCBubyBwcm9iaW5nLCBubyBkZXZpY2UgcmVnaXN0cmF0aW9uLCBubyBuZXR3b3JrIGludGVyZmFjZS4gVGhlIGV0aHRvb2wgb3BlcmF0aW9ucywgY3J1Y2lhbCBmb3IgYW55IHNvcnQgb2YgbWVhbmluZ2Z1bCBpbnRlcmFjdGlvbiwgYXJlIGVmZmVjdGl2ZWx5IGxvY2tlZCBhd2F5LgoKR2l2ZW4gdGhlc2UgY29uc3RyYWludHMsIHRoZXJlJiMzOTtzIG5vIHdheSB0aGlzIGRyaXZlciBjYW4gYmUgZWZmZWN0aXZlbHkgZnV6emVkIGluIGEgdmlydHVhbGl6ZWQgY29udGV4dC4gSSYjMzk7bGwgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlciwgd2hpY2ggaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBQQ0kgZHJpdmVyLiBUaGUgbW9kaWZpZWQgY29kZSAoZXRodG9vbCBvcHMgYW5kIFJYIGJ1ZmZlciBhbGxvY2F0aW9uIGxvZ2ljKSBpcyBvbmx5IHJlYWNoYWJsZSBpZiB0aGUgTUFOQSBQQ0kgZGV2aWNlIGlzIHByZXNlbnQgYW5kIHByb2JlZC4gU2luY2Ugc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMgKGxpa2UgR0NFIG9yIFFFTVUpIGRvIG5vdCBlbXVsYXRlIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUsIHRoZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlciwgd2hpY2ggaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBQQ0kgZHJpdmVyLiBUaGUgbW9kaWZpZWQgY29kZSAoZXRodG9vbCBvcHMgYW5kIFJYIGJ1ZmZlciBhbGxvY2F0aW9uIGxvZ2ljKSBpcyBvbmx5IHJlYWNoYWJsZSBpZiB0aGUgTUFOQSBQQ0kgZGV2aWNlIGlzIHByZXNlbnQgYW5kIHByb2JlZC4gU2luY2Ugc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMgKGxpa2UgR0NFIG9yIFFFTVUpIGRvIG5vdCBlbXVsYXRlIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUsIHRoZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIyOjI5OjIyLjY0NzIxNDc4NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTA0MTAxMDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyLCB3aGljaCBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBDSSBkcml2ZXIuIFRoZSBtb2RpZmllZCBjb2RlIChldGh0b29sIG9wcyBhbmQgUlggYnVmZmVyIGFsbG9jYXRpb24gbG9naWMpIGlzIG9ubHkgcmVhY2hhYmxlIGlmIHRoZSBNQU5BIFBDSSBkZXZpY2UgaXMgcHJlc2VudCBhbmQgcHJvYmVkLiBTaW5jZSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cyAobGlrZSBHQ0Ugb3IgUUVNVSkgZG8gbm90IGVtdWxhdGUgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSwgdGhlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMjoyOToyMi42NDcyMjM0MTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MDM0NjgwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY1Y2U2YjU2NmZmM2UyYTRlM2M2ZmZkYzBmYWI3ZTY0NTUwNWQ3NjFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMSAyMjoyOToyMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcXG5pbmRleCAyNmFlZjIxYzZjMmM4OS4uNGJkODNjNzgyZWEzN2UgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXFxuQEAgLTc1NSw2ICs3NTUsMjUgQEAgc3RhdGljIHZvaWQgKm1hbmFfZ2V0X3J4YnVmX3ByZShzdHJ1Y3QgbWFuYV9yeHEgKnJ4cSwgZG1hX2FkZHJfdCAqZGEpXFxuIFxcdHJldHVybiB2YTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2xcXG4rbWFuYV91c2Vfc2luZ2xlX3J4YnVmX3Blcl9wYWdlKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLCB1MzIgbXR1KVxcbit7XFxuK1xcdC8qIE9uIHNvbWUgcGxhdGZvcm1zIHdpdGggNEsgUEFHRV9TSVpFLCBwYWdlX3Bvb2wgZnJhZ21lbnQgYWxsb2NhdGlvblxcbitcXHQgKiBpbiB0aGUgUlggcmVmaWxsIHBhdGggKH4ya0IgYnVmZmVyKSBjYW4gY2F1c2Ugc2lnbmlmaWNhbnQgdGhyb3VnaHB1dFxcbitcXHQgKiByZWdyZXNzaW9uIHVuZGVyIGhpZ2ggY29ubmVjdGlvbiBjb3VudHMuIEFsbG93IHVzZXIgdG8gZm9yY2Ugb25lIFJYXFxuK1xcdCAqIGJ1ZmZlciBwZXIgcGFnZSB2aWEgZXRodG9vbCBwcml2YXRlIGZsYWcgdG8gYnlwYXNzIHRoZSBmcmFnbWVudFxcbitcXHQgKiBwYXRoLlxcbitcXHQgKi9cXG4rXFx0aWYgKGFwYy1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2IEJJVChNQU5BX1BSSVZfRkxBR19VU0VfRlVMTF9QQUdFX1JYQlVGKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHQvKiBGb3IgeGRwIGFuZCBqdW1ibyBmcmFtZXMgbWFrZSBzdXJlIG9ubHkgb25lIHBhY2tldCBmaXRzIHBlciBwYWdlLiAqL1xcbitcXHRpZiAobXR1ICsgTUFOQV9SWEJVRl9QQUQgXFx1MDAzZSBQQUdFX1NJWkUgLyAyIHx8IG1hbmFfeGRwX2dldChhcGMpKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4gLyogR2V0IFJYIGJ1ZmZlcidzIGRhdGEgc2l6ZSwgYWxsb2Mgc2l6ZSwgWERQIGhlYWRyb29tIGJhc2VkIG9uIE1UVSAqL1xcbiBzdGF0aWMgdm9pZCBtYW5hX2dldF9yeGJ1Zl9jZmcoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXFxuIFxcdFxcdFxcdCAgICAgICBpbnQgbXR1LCB1MzIgKmRhdGFzaXplLCB1MzIgKmFsbG9jX3NpemUsXFxuQEAgLTc2NSw4ICs3ODQsNyBAQCBzdGF0aWMgdm9pZCBtYW5hX2dldF9yeGJ1Zl9jZmcoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXFxuIFxcdC8qIENhbGN1bGF0ZSBkYXRhc2l6ZSBmaXJzdCAoY29uc2lzdGVudCBhY3Jvc3MgYWxsIGNhc2VzKSAqL1xcbiBcXHQqZGF0YXNpemUgPSBtdHUgKyBFVEhfSExFTjtcXG4gXFxuLVxcdC8qIEZvciB4ZHAgYW5kIGp1bWJvIGZyYW1lcyBtYWtlIHN1cmUgb25seSBvbmUgcGFja2V0IGZpdHMgcGVyIHBhZ2UgKi9cXG4tXFx0aWYgKG10dSArIE1BTkFfUlhCVUZfUEFEIFxcdTAwM2UgUEFHRV9TSVpFIC8gMiB8fCBtYW5hX3hkcF9nZXQoYXBjKSkge1xcbitcXHRpZiAobWFuYV91c2Vfc2luZ2xlX3J4YnVmX3Blcl9wYWdlKGFwYywgbXR1KSkge1xcbiBcXHRcXHRpZiAobWFuYV94ZHBfZ2V0KGFwYykpIHtcXG4gXFx0XFx0XFx0KmhlYWRyb29tID0gWERQX1BBQ0tFVF9IRUFEUk9PTTtcXG4gXFx0XFx0XFx0KmFsbG9jX3NpemUgPSBQQUdFX1NJWkU7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9ldGh0b29sLmNcXG5pbmRleCA5NGU2NThkMDdhMjdlOC4uM2M0OThhMjIyOTY1ODAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9ldGh0b29sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2V0aHRvb2wuY1xcbkBAIC0xMzMsNTggKzEzMyw5NCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1hbmFfc3RhdHNfZGVzYyBtYW5hX3BoeV9zdGF0c1tdID0ge1xcbiBcXHR7IFxcXCJoY190YzdfdHhfcGF1c2VfcGh5XFxcIiwgb2Zmc2V0b2Yoc3RydWN0IG1hbmFfZXRodG9vbF9waHlfc3RhdHMsIHR4X3BhdXNlX3RjN19waHkpIH0sXFxuIH07XFxuIFxcbitzdGF0aWMgY29uc3QgY2hhciBtYW5hX3ByaXZfZmxhZ3NbTUFOQV9QUklWX0ZMQUdfTUFYXVtFVEhfR1NUUklOR19MRU5dID0ge1xcbitcXHRbTUFOQV9QUklWX0ZMQUdfVVNFX0ZVTExfUEFHRV9SWEJVRl0gPSBcXFwiZnVsbC1wYWdlLXJ4XFxcIlxcbit9O1xcbitcXG4gc3RhdGljIGludCBtYW5hX2dldF9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgc3RyaW5nc2V0KVxcbiB7XFxuIFxcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjID0gbmV0ZGV2X3ByaXYobmRldik7XFxuIFxcdHVuc2lnbmVkIGludCBudW1fcXVldWVzID0gYXBjLVxcdTAwM2VudW1fcXVldWVzO1xcbiBcXG4tXFx0aWYgKHN0cmluZ3NldCAhPSBFVEhfU1NfU1RBVFMpXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRzd2l0Y2ggKHN0cmluZ3NldCkge1xcbitcXHRjYXNlIEVUSF9TU19TVEFUUzpcXG4rXFx0XFx0cmV0dXJuIEFSUkFZX1NJWkUobWFuYV9ldGhfc3RhdHMpICtcXG4rXFx0XFx0ICAgICAgIEFSUkFZX1NJWkUobWFuYV9waHlfc3RhdHMpICtcXG4rXFx0XFx0ICAgICAgIEFSUkFZX1NJWkUobWFuYV9oY19zdGF0cykgICtcXG4rXFx0XFx0ICAgICAgIG51bV9xdWV1ZXMgKiAoTUFOQV9TVEFUU19SWF9DT1VOVCArIE1BTkFfU1RBVFNfVFhfQ09VTlQpO1xcbitcXG4rXFx0Y2FzZSBFVEhfU1NfUFJJVl9GTEFHUzpcXG4rXFx0XFx0cmV0dXJuIE1BTkFfUFJJVl9GTEFHX01BWDtcXG4gXFxuLVxcdHJldHVybiBBUlJBWV9TSVpFKG1hbmFfZXRoX3N0YXRzKSArIEFSUkFZX1NJWkUobWFuYV9waHlfc3RhdHMpICsgQVJSQVlfU0laRShtYW5hX2hjX3N0YXRzKSArXFxuLVxcdFxcdFxcdG51bV9xdWV1ZXMgKiAoTUFOQV9TVEFUU19SWF9DT1VOVCArIE1BTkFfU1RBVFNfVFhfQ09VTlQpO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBtYW5hX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqZGF0YSlcXG4rc3RhdGljIHZvaWQgbWFuYV9nZXRfc3RyaW5nc19zdGF0cyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgdTggKipkYXRhKVxcbiB7XFxuLVxcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjID0gbmV0ZGV2X3ByaXYobmRldik7XFxuIFxcdHVuc2lnbmVkIGludCBudW1fcXVldWVzID0gYXBjLVxcdTAwM2VudW1fcXVldWVzO1xcbiBcXHRpbnQgaSwgajtcXG4gXFxuLVxcdGlmIChzdHJpbmdzZXQgIT0gRVRIX1NTX1NUQVRTKVxcbi1cXHRcXHRyZXR1cm47XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG1hbmFfZXRoX3N0YXRzKTsgaSsrKVxcbi1cXHRcXHRldGh0b29sX3B1dHMoXFx1MDAyNmRhdGEsIG1hbmFfZXRoX3N0YXRzW2ldLm5hbWUpO1xcbitcXHRcXHRldGh0b29sX3B1dHMoZGF0YSwgbWFuYV9ldGhfc3RhdHNbaV0ubmFtZSk7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShtYW5hX2hjX3N0YXRzKTsgaSsrKVxcbi1cXHRcXHRldGh0b29sX3B1dHMoXFx1MDAyNmRhdGEsIG1hbmFfaGNfc3RhdHNbaV0ubmFtZSk7XFxuK1xcdFxcdGV0aHRvb2xfcHV0cyhkYXRhLCBtYW5hX2hjX3N0YXRzW2ldLm5hbWUpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUobWFuYV9waHlfc3RhdHMpOyBpKyspXFxuLVxcdFxcdGV0aHRvb2xfcHV0cyhcXHUwMDI2ZGF0YSwgbWFuYV9waHlfc3RhdHNbaV0ubmFtZSk7XFxuK1xcdFxcdGV0aHRvb2xfcHV0cyhkYXRhLCBtYW5hX3BoeV9zdGF0c1tpXS5uYW1lKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fcXVldWVzOyBpKyspIHtcXG4tXFx0XFx0ZXRodG9vbF9zcHJpbnRmKFxcdTAwMjZkYXRhLCBcXFwicnhfJWRfcGFja2V0c1xcXCIsIGkpO1xcbi1cXHRcXHRldGh0b29sX3NwcmludGYoXFx1MDAyNmRhdGEsIFxcXCJyeF8lZF9ieXRlc1xcXCIsIGkpO1xcbi1cXHRcXHRldGh0b29sX3NwcmludGYoXFx1MDAyNmRhdGEsIFxcXCJyeF8lZF94ZHBfZHJvcFxcXCIsIGkpO1xcbi1cXHRcXHRldGh0b29sX3NwcmludGYoXFx1MDAyNmRhdGEsIFxcXCJyeF8lZF94ZHBfdHhcXFwiLCBpKTtcXG4tXFx0XFx0ZXRodG9vbF9zcHJpbnRmKFxcdTAwMjZkYXRhLCBcXFwicnhfJWRfeGRwX3JlZGlyZWN0XFxcIiwgaSk7XFxuLVxcdFxcdGV0aHRvb2xfc3ByaW50ZihcXHUwMDI2ZGF0YSwgXFxcInJ4XyVkX3BrdF9sZW4wX2VyclxcXCIsIGkpO1xcbitcXHRcXHRldGh0b29sX3NwcmludGYoZGF0YSwgXFxcInJ4XyVkX3BhY2tldHNcXFwiLCBpKTtcXG4rXFx0XFx0ZXRodG9vbF9zcHJpbnRmKGRhdGEsIFxcXCJyeF8lZF9ieXRlc1xcXCIsIGkpO1xcbitcXHRcXHRldGh0b29sX3NwcmludGYoZGF0YSwgXFxcInJ4XyVkX3hkcF9kcm9wXFxcIiwgaSk7XFxuK1xcdFxcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcXFwicnhfJWRfeGRwX3R4XFxcIiwgaSk7XFxuK1xcdFxcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcXFwicnhfJWRfeGRwX3JlZGlyZWN0XFxcIiwgaSk7XFxuK1xcdFxcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcXFwicnhfJWRfcGt0X2xlbjBfZXJyXFxcIiwgaSk7XFxuIFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBNQU5BX1JYQ09NUF9PT0JfTlVNX1BQSSAtIDE7IGorKylcXG4tXFx0XFx0XFx0ZXRodG9vbF9zcHJpbnRmKFxcdTAwMjZkYXRhLCBcXFwicnhfJWRfY29hbGVzY2VkX2NxZV8lZFxcXCIsIGksIGogKyAyKTtcXG4rXFx0XFx0XFx0ZXRodG9vbF9zcHJpbnRmKGRhdGEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcXCJyeF8lZF9jb2FsZXNjZWRfY3FlXyVkXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0aSxcXG4rXFx0XFx0XFx0XFx0XFx0aiArIDIpO1xcbiBcXHR9XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX3F1ZXVlczsgaSsrKSB7XFxuLVxcdFxcdGV0aHRvb2xfc3ByaW50ZihcXHUwMDI2ZGF0YSwgXFxcInR4XyVkX3BhY2tldHNcXFwiLCBpKTtcXG4tXFx0XFx0ZXRodG9vbF9zcHJpbnRmKFxcdTAwMjZkYXRhLCBcXFwidHhfJWRfYnl0ZXNcXFwiLCBpKTtcXG4tXFx0XFx0ZXRodG9vbF9zcHJpbnRmKFxcdTAwMjZkYXRhLCBcXFwidHhfJWRfeGRwX3htaXRcXFwiLCBpKTtcXG4tXFx0XFx0ZXRodG9vbF9zcHJpbnRmKFxcdTAwMjZkYXRhLCBcXFwidHhfJWRfdHNvX3BhY2tldHNcXFwiLCBpKTtcXG4tXFx0XFx0ZXRodG9vbF9zcHJpbnRmKFxcdTAwMjZkYXRhLCBcXFwidHhfJWRfdHNvX2J5dGVzXFxcIiwgaSk7XFxuLVxcdFxcdGV0aHRvb2xfc3ByaW50ZihcXHUwMDI2ZGF0YSwgXFxcInR4XyVkX3Rzb19pbm5lcl9wYWNrZXRzXFxcIiwgaSk7XFxuLVxcdFxcdGV0aHRvb2xfc3ByaW50ZihcXHUwMDI2ZGF0YSwgXFxcInR4XyVkX3Rzb19pbm5lcl9ieXRlc1xcXCIsIGkpO1xcbi1cXHRcXHRldGh0b29sX3NwcmludGYoXFx1MDAyNmRhdGEsIFxcXCJ0eF8lZF9sb25nX3BrdF9mbXRcXFwiLCBpKTtcXG4tXFx0XFx0ZXRodG9vbF9zcHJpbnRmKFxcdTAwMjZkYXRhLCBcXFwidHhfJWRfc2hvcnRfcGt0X2ZtdFxcXCIsIGkpO1xcbi1cXHRcXHRldGh0b29sX3NwcmludGYoXFx1MDAyNmRhdGEsIFxcXCJ0eF8lZF9jc3VtX3BhcnRpYWxcXFwiLCBpKTtcXG4tXFx0XFx0ZXRodG9vbF9zcHJpbnRmKFxcdTAwMjZkYXRhLCBcXFwidHhfJWRfbWFuYV9tYXBfZXJyXFxcIiwgaSk7XFxuK1xcdFxcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcXFwidHhfJWRfcGFja2V0c1xcXCIsIGkpO1xcbitcXHRcXHRldGh0b29sX3NwcmludGYoZGF0YSwgXFxcInR4XyVkX2J5dGVzXFxcIiwgaSk7XFxuK1xcdFxcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcXFwidHhfJWRfeGRwX3htaXRcXFwiLCBpKTtcXG4rXFx0XFx0ZXRodG9vbF9zcHJpbnRmKGRhdGEsIFxcXCJ0eF8lZF90c29fcGFja2V0c1xcXCIsIGkpO1xcbitcXHRcXHRldGh0b29sX3NwcmludGYoZGF0YSwgXFxcInR4XyVkX3Rzb19ieXRlc1xcXCIsIGkpO1xcbitcXHRcXHRldGh0b29sX3NwcmludGYoZGF0YSwgXFxcInR4XyVkX3Rzb19pbm5lcl9wYWNrZXRzXFxcIiwgaSk7XFxuK1xcdFxcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcXFwidHhfJWRfdHNvX2lubmVyX2J5dGVzXFxcIiwgaSk7XFxuK1xcdFxcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcXFwidHhfJWRfbG9uZ19wa3RfZm10XFxcIiwgaSk7XFxuK1xcdFxcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcXFwidHhfJWRfc2hvcnRfcGt0X2ZtdFxcXCIsIGkpO1xcbitcXHRcXHRldGh0b29sX3NwcmludGYoZGF0YSwgXFxcInR4XyVkX2NzdW1fcGFydGlhbFxcXCIsIGkpO1xcbitcXHRcXHRldGh0b29sX3NwcmludGYoZGF0YSwgXFxcInR4XyVkX21hbmFfbWFwX2VyclxcXCIsIGkpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1hbmFfZ2V0X3N0cmluZ3NfcHJpdl9mbGFncyh1OCAqKmRhdGEpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUFOQV9QUklWX0ZMQUdfTUFYOyBpKyspXFxuK1xcdFxcdGV0aHRvb2xfcHV0cyhkYXRhLCBtYW5hX3ByaXZfZmxhZ3NbaV0pO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtYW5hX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyA9IG5ldGRldl9wcml2KG5kZXYpO1xcbitcXG4rXFx0c3dpdGNoIChzdHJpbmdzZXQpIHtcXG4rXFx0Y2FzZSBFVEhfU1NfU1RBVFM6XFxuK1xcdFxcdG1hbmFfZ2V0X3N0cmluZ3Nfc3RhdHMoYXBjLCBcXHUwMDI2ZGF0YSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEVUSF9TU19QUklWX0ZMQUdTOlxcbitcXHRcXHRtYW5hX2dldF9zdHJpbmdzX3ByaXZfZmxhZ3MoXFx1MDAyNmRhdGEpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtNTk0LDYgKzYzMCw4OCBAQCBzdGF0aWMgaW50IG1hbmFfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHUzMiBtYW5hX2dldF9wcml2X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcbitcXHRyZXR1cm4gYXBjLVxcdTAwM2Vwcml2X2ZsYWdzO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG1hbmFfc2V0X3ByaXZfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBwcml2X2ZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcdHUzMiBjaGFuZ2VkID0gYXBjLVxcdTAwM2Vwcml2X2ZsYWdzIF4gcHJpdl9mbGFncztcXG4rXFx0dTMyIG9sZF9wcml2X2ZsYWdzID0gYXBjLVxcdTAwM2Vwcml2X2ZsYWdzO1xcbitcXHRib29sIHNjaGVkdWxlX3BvcnRfcmVzZXQgPSBmYWxzZTtcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHRpZiAoIWNoYW5nZWQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LyogUmVqZWN0IHVua25vd24gYml0cyAqL1xcbitcXHRpZiAocHJpdl9mbGFncyBcXHUwMDI2IH5HRU5NQVNLKE1BTkFfUFJJVl9GTEFHX01BWCAtIDEsIDApKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChjaGFuZ2VkIFxcdTAwMjYgQklUKE1BTkFfUFJJVl9GTEFHX1VTRV9GVUxMX1BBR0VfUlhCVUYpKSB7XFxuK1xcdFxcdGFwYy1cXHUwMDNlcHJpdl9mbGFncyA9IHByaXZfZmxhZ3M7XFxuK1xcbitcXHRcXHRpZiAoIWFwYy1cXHUwMDNlcG9ydF9pc191cCkge1xcbitcXHRcXHRcXHQvKiBQb3J0IGlzIGRvd24sIGZsYWcgdXBkYXRlZCB0byBhcHBseSBvbiBuZXh0IHVwXFxuK1xcdFxcdFxcdCAqIHNvIGp1c3QgcmV0dXJuLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIFByZS1hbGxvY2F0ZSBidWZmZXJzIHRvIHByZXZlbnQgZmFpbHVyZSBpbiBtYW5hX2F0dGFjaFxcbitcXHRcXHQgKiBsYXRlclxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZXJyID0gbWFuYV9wcmVfYWxsb2NfcnhidWZzKGFwYywgbmRldi1cXHUwMDNlbXR1LCBhcGMtXFx1MDAzZW51bV9xdWV1ZXMpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIkluc3VmZmljaWVudCBtZW1vcnkgZm9yIG5ldyBhbGxvY2F0aW9uc1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGFwYy1cXHUwMDNlcHJpdl9mbGFncyA9IG9sZF9wcml2X2ZsYWdzO1xcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRlcnIgPSBtYW5hX2RldGFjaChuZGV2LCBmYWxzZSk7XFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0bmV0ZGV2X2VycihuZGV2LCBcXFwibWFuYV9kZXRhY2ggZmFpbGVkOiAlZFxcXFxuXFxcIiwgZXJyKTtcXG4rXFx0XFx0XFx0YXBjLVxcdTAwM2Vwcml2X2ZsYWdzID0gb2xkX3ByaXZfZmxhZ3M7XFxuK1xcbitcXHRcXHRcXHQvKiBQb3J0IGlzIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gUmVzdG9yZVxcbitcXHRcXHRcXHQgKiAncG9ydF9pc191cCcgc28gdGhhdCBxdWV1ZSByZXNldCB3b3JrIGhhbmRsZXJcXG4rXFx0XFx0XFx0ICogY2FuIHByb3Blcmx5IGRldGFjaCBhbmQgcmUtYXR0YWNoLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0YXBjLVxcdTAwM2Vwb3J0X2lzX3VwID0gdHJ1ZTtcXG4rXFx0XFx0XFx0c2NoZWR1bGVfcG9ydF9yZXNldCA9IHRydWU7XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRlcnIgPSBtYW5hX2F0dGFjaChuZGV2KTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5kZXYsIFxcXCJtYW5hX2F0dGFjaCBmYWlsZWQ6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbitcXHRcXHRcXHRhcGMtXFx1MDAzZXByaXZfZmxhZ3MgPSBvbGRfcHJpdl9mbGFncztcXG4rXFxuK1xcdFxcdFxcdC8qIFJlc3RvcmUgJ3BvcnRfaXNfdXAnIHNvIHRoZSByZXNldCB3b3JrIGhhbmRsZXJcXG4rXFx0XFx0XFx0ICogY2FuIHByb3Blcmx5IGRldGFjaC9hdHRhY2guIFdpdGhvdXQgdGhpcyxcXG4rXFx0XFx0XFx0ICogdGhlIGhhbmRsZXIgc2VlcyBwb3J0X2lzX3VwPWZhbHNlIGFuZCBza2lwc1xcbitcXHRcXHRcXHQgKiBxdWV1ZSBhbGxvY2F0aW9uLCBsZWF2aW5nIHRoZSBwb3J0IGRlYWQuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRhcGMtXFx1MDAzZXBvcnRfaXNfdXAgPSB0cnVlO1xcbitcXHRcXHRcXHRzY2hlZHVsZV9wb3J0X3Jlc2V0ID0gdHJ1ZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitvdXQ6XFxuK1xcdG1hbmFfcHJlX2RlYWxsb2NfcnhidWZzKGFwYyk7XFxuK1xcbitcXHRpZiAoc2NoZWR1bGVfcG9ydF9yZXNldClcXG4rXFx0XFx0cXVldWVfd29yayhhcGMtXFx1MDAzZWFjLVxcdTAwM2VwZXJfcG9ydF9xdWV1ZV9yZXNldF93cSxcXG4rXFx0XFx0XFx0ICAgXFx1MDAyNmFwYy1cXHUwMDNlcXVldWVfcmVzZXRfd29yayk7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbWFuYV9ldGh0b29sX29wcyA9IHtcXG4gXFx0LnN1cHBvcnRlZF9jb2FsZXNjZV9wYXJhbXMgPSBFVEhUT09MX0NPQUxFU0NFX1JYX0NRRV9GUkFNRVMsXFxuIFxcdC5vcF9uZWVkc19ydG5sXFx0XFx0PSBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTIHxcXG5AQCAtNjE0LDQgKzczMiw2IEBAIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBtYW5hX2V0aHRvb2xfb3BzID0ge1xcbiBcXHQuc2V0X3JpbmdwYXJhbSAgICAgICAgICA9IG1hbmFfc2V0X3JpbmdwYXJhbSxcXG4gXFx0LmdldF9saW5rX2tzZXR0aW5nc1xcdD0gbWFuYV9nZXRfbGlua19rc2V0dGluZ3MsXFxuIFxcdC5nZXRfbGlua1xcdFxcdD0gZXRodG9vbF9vcF9nZXRfbGluayxcXG4rXFx0LmdldF9wcml2X2ZsYWdzXFx0XFx0PSBtYW5hX2dldF9wcml2X2ZsYWdzLFxcbitcXHQuc2V0X3ByaXZfZmxhZ3NcXHRcXHQ9IG1hbmFfc2V0X3ByaXZfZmxhZ3MsXFxuIH07XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hbmEvbWFuYS5oIGIvaW5jbHVkZS9uZXQvbWFuYS9tYW5hLmhcXG5pbmRleCAxM2M4N2JhZjAxOGVlMS4uOGRjNDk2ZjA1OTM4YmYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbWFuYS9tYW5hLmhcXG4rKysgYi9pbmNsdWRlL25ldC9tYW5hL21hbmEuaFxcbkBAIC0zMCw2ICszMCwxMiBAQCBlbnVtIFRSSV9TVEFURSB7XFxuIFxcdFRSSV9TVEFURV9UUlVFID0gMVxcbiB9O1xcbiBcXG4rLyogTUFOQSBldGh0b29sIHByaXZhdGUgZmxhZyBiaXQgcG9zaXRpb25zICovXFxuK2VudW0gbWFuYV9wcml2X2ZsYWdfYml0cyB7XFxuK1xcdE1BTkFfUFJJVl9GTEFHX1VTRV9GVUxMX1BBR0VfUlhCVUYgPSAwLFxcbitcXHRNQU5BX1BSSVZfRkxBR19NQVgsXFxuK307XFxuK1xcbiAvKiBOdW1iZXIgb2YgZW50cmllcyBmb3IgaGFyZHdhcmUgaW5kaXJlY3Rpb24gdGFibGUgbXVzdCBiZSBpbiBwb3dlciBvZiAyICovXFxuICNkZWZpbmUgTUFOQV9JTkRJUkVDVF9UQUJMRV9NQVhfU0laRSA1MTJcXG4gI2RlZmluZSBNQU5BX0lORElSRUNUX1RBQkxFX0RFRl9TSVpFIDY0XFxuQEAgLTUzMiw2ICs1MzgsOCBAQCBzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQge1xcbiBcXHR1MzIgcnhicHJlX2hlYWRyb29tO1xcbiBcXHR1MzIgcnhicHJlX2ZyYWdfY291bnQ7XFxuIFxcbitcXHR1MzIgcHJpdl9mbGFncztcXG4rXFxuIFxcdHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2c7XFxuIFxcbiBcXHQvKiBDcmVhdGUgbnVtX3F1ZXVlcyBFUXMsIFNRcywgU1EtQ1FzLCBSUXMgYW5kIFJRLUNRcywgcmVzcGVjdGl2ZWx5LiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMjoyOToyMy40ODg1OTEzNzdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MDYyNzE0NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyLCB3aGljaCBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBDSSBkcml2ZXIuIFRoZSBtb2RpZmllZCBjb2RlIChldGh0b29sIG9wcyBhbmQgUlggYnVmZmVyIGFsbG9jYXRpb24gbG9naWMpIGlzIG9ubHkgcmVhY2hhYmxlIGlmIHRoZSBNQU5BIFBDSSBkZXZpY2UgaXMgcHJlc2VudCBhbmQgcHJvYmVkLiBTaW5jZSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cyAobGlrZSBHQ0Ugb3IgUUVNVSkgZG8gbm90IGVtdWxhdGUgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSwgdGhlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY1Y2U2YjU2NmZmM2UyYTRlM2M2ZmZkYzBmYWI3ZTY0NTUwNWQ3NjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxIDIyOjI5OjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXG5pbmRleCAyNmFlZjIxYzZjMmM4OS4uNGJkODNjNzgyZWEzN2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY1xuQEAgLTc1NSw2ICs3NTUsMjUgQEAgc3RhdGljIHZvaWQgKm1hbmFfZ2V0X3J4YnVmX3ByZShzdHJ1Y3QgbWFuYV9yeHEgKnJ4cSwgZG1hX2FkZHJfdCAqZGEpXG4gXHRyZXR1cm4gdmE7XG4gfVxuIFxuK3N0YXRpYyBib29sXG4rbWFuYV91c2Vfc2luZ2xlX3J4YnVmX3Blcl9wYWdlKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLCB1MzIgbXR1KVxuK3tcbitcdC8qIE9uIHNvbWUgcGxhdGZvcm1zIHdpdGggNEsgUEFHRV9TSVpFLCBwYWdlX3Bvb2wgZnJhZ21lbnQgYWxsb2NhdGlvblxuK1x0ICogaW4gdGhlIFJYIHJlZmlsbCBwYXRoICh+MmtCIGJ1ZmZlcikgY2FuIGNhdXNlIHNpZ25pZmljYW50IHRocm91Z2hwdXRcbitcdCAqIHJlZ3Jlc3Npb24gdW5kZXIgaGlnaCBjb25uZWN0aW9uIGNvdW50cy4gQWxsb3cgdXNlciB0byBmb3JjZSBvbmUgUlhcbitcdCAqIGJ1ZmZlciBwZXIgcGFnZSB2aWEgZXRodG9vbCBwcml2YXRlIGZsYWcgdG8gYnlwYXNzIHRoZSBmcmFnbWVudFxuK1x0ICogcGF0aC5cbitcdCAqL1xuK1x0aWYgKGFwYy1cdTAwM2Vwcml2X2ZsYWdzIFx1MDAyNiBCSVQoTUFOQV9QUklWX0ZMQUdfVVNFX0ZVTExfUEFHRV9SWEJVRikpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0LyogRm9yIHhkcCBhbmQganVtYm8gZnJhbWVzIG1ha2Ugc3VyZSBvbmx5IG9uZSBwYWNrZXQgZml0cyBwZXIgcGFnZS4gKi9cbitcdGlmIChtdHUgKyBNQU5BX1JYQlVGX1BBRCBcdTAwM2UgUEFHRV9TSVpFIC8gMiB8fCBtYW5hX3hkcF9nZXQoYXBjKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIC8qIEdldCBSWCBidWZmZXIncyBkYXRhIHNpemUsIGFsbG9jIHNpemUsIFhEUCBoZWFkcm9vbSBiYXNlZCBvbiBNVFUgKi9cbiBzdGF0aWMgdm9pZCBtYW5hX2dldF9yeGJ1Zl9jZmcoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXG4gXHRcdFx0ICAgICAgIGludCBtdHUsIHUzMiAqZGF0YXNpemUsIHUzMiAqYWxsb2Nfc2l6ZSxcbkBAIC03NjUsOCArNzg0LDcgQEAgc3RhdGljIHZvaWQgbWFuYV9nZXRfcnhidWZfY2ZnKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuIFx0LyogQ2FsY3VsYXRlIGRhdGFzaXplIGZpcnN0IChjb25zaXN0ZW50IGFjcm9zcyBhbGwgY2FzZXMpICovXG4gXHQqZGF0YXNpemUgPSBtdHUgKyBFVEhfSExFTjtcbiBcbi1cdC8qIEZvciB4ZHAgYW5kIGp1bWJvIGZyYW1lcyBtYWtlIHN1cmUgb25seSBvbmUgcGFja2V0IGZpdHMgcGVyIHBhZ2UgKi9cbi1cdGlmIChtdHUgKyBNQU5BX1JYQlVGX1BBRCBcdTAwM2UgUEFHRV9TSVpFIC8gMiB8fCBtYW5hX3hkcF9nZXQoYXBjKSkge1xuK1x0aWYgKG1hbmFfdXNlX3NpbmdsZV9yeGJ1Zl9wZXJfcGFnZShhcGMsIG10dSkpIHtcbiBcdFx0aWYgKG1hbmFfeGRwX2dldChhcGMpKSB7XG4gXHRcdFx0KmhlYWRyb29tID0gWERQX1BBQ0tFVF9IRUFEUk9PTTtcbiBcdFx0XHQqYWxsb2Nfc2l6ZSA9IFBBR0VfU0laRTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZXRodG9vbC5jXG5pbmRleCA5NGU2NThkMDdhMjdlOC4uM2M0OThhMjIyOTY1ODAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2V0aHRvb2wuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9ldGh0b29sLmNcbkBAIC0xMzMsNTggKzEzMyw5NCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1hbmFfc3RhdHNfZGVzYyBtYW5hX3BoeV9zdGF0c1tdID0ge1xuIFx0eyBcImhjX3RjN190eF9wYXVzZV9waHlcIiwgb2Zmc2V0b2Yoc3RydWN0IG1hbmFfZXRodG9vbF9waHlfc3RhdHMsIHR4X3BhdXNlX3RjN19waHkpIH0sXG4gfTtcbiBcbitzdGF0aWMgY29uc3QgY2hhciBtYW5hX3ByaXZfZmxhZ3NbTUFOQV9QUklWX0ZMQUdfTUFYXVtFVEhfR1NUUklOR19MRU5dID0ge1xuK1x0W01BTkFfUFJJVl9GTEFHX1VTRV9GVUxMX1BBR0VfUlhCVUZdID0gXCJmdWxsLXBhZ2UtcnhcIlxuK307XG4rXG4gc3RhdGljIGludCBtYW5hX2dldF9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgc3RyaW5nc2V0KVxuIHtcbiBcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXHR1bnNpZ25lZCBpbnQgbnVtX3F1ZXVlcyA9IGFwYy1cdTAwM2VudW1fcXVldWVzO1xuIFxuLVx0aWYgKHN0cmluZ3NldCAhPSBFVEhfU1NfU1RBVFMpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0c3dpdGNoIChzdHJpbmdzZXQpIHtcbitcdGNhc2UgRVRIX1NTX1NUQVRTOlxuK1x0XHRyZXR1cm4gQVJSQVlfU0laRShtYW5hX2V0aF9zdGF0cykgK1xuK1x0XHQgICAgICAgQVJSQVlfU0laRShtYW5hX3BoeV9zdGF0cykgK1xuK1x0XHQgICAgICAgQVJSQVlfU0laRShtYW5hX2hjX3N0YXRzKSAgK1xuK1x0XHQgICAgICAgbnVtX3F1ZXVlcyAqIChNQU5BX1NUQVRTX1JYX0NPVU5UICsgTUFOQV9TVEFUU19UWF9DT1VOVCk7XG4rXG4rXHRjYXNlIEVUSF9TU19QUklWX0ZMQUdTOlxuK1x0XHRyZXR1cm4gTUFOQV9QUklWX0ZMQUdfTUFYO1xuIFxuLVx0cmV0dXJuIEFSUkFZX1NJWkUobWFuYV9ldGhfc3RhdHMpICsgQVJSQVlfU0laRShtYW5hX3BoeV9zdGF0cykgKyBBUlJBWV9TSVpFKG1hbmFfaGNfc3RhdHMpICtcbi1cdFx0XHRudW1fcXVldWVzICogKE1BTkFfU1RBVFNfUlhfQ09VTlQgKyBNQU5BX1NUQVRTX1RYX0NPVU5UKTtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBtYW5hX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqZGF0YSlcbitzdGF0aWMgdm9pZCBtYW5hX2dldF9zdHJpbmdzX3N0YXRzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLCB1OCAqKmRhdGEpXG4ge1xuLVx0c3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcdHVuc2lnbmVkIGludCBudW1fcXVldWVzID0gYXBjLVx1MDAzZW51bV9xdWV1ZXM7XG4gXHRpbnQgaSwgajtcbiBcbi1cdGlmIChzdHJpbmdzZXQgIT0gRVRIX1NTX1NUQVRTKVxuLVx0XHRyZXR1cm47XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG1hbmFfZXRoX3N0YXRzKTsgaSsrKVxuLVx0XHRldGh0b29sX3B1dHMoXHUwMDI2ZGF0YSwgbWFuYV9ldGhfc3RhdHNbaV0ubmFtZSk7XG4rXHRcdGV0aHRvb2xfcHV0cyhkYXRhLCBtYW5hX2V0aF9zdGF0c1tpXS5uYW1lKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobWFuYV9oY19zdGF0cyk7IGkrKylcbi1cdFx0ZXRodG9vbF9wdXRzKFx1MDAyNmRhdGEsIG1hbmFfaGNfc3RhdHNbaV0ubmFtZSk7XG4rXHRcdGV0aHRvb2xfcHV0cyhkYXRhLCBtYW5hX2hjX3N0YXRzW2ldLm5hbWUpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShtYW5hX3BoeV9zdGF0cyk7IGkrKylcbi1cdFx0ZXRodG9vbF9wdXRzKFx1MDAyNmRhdGEsIG1hbmFfcGh5X3N0YXRzW2ldLm5hbWUpO1xuK1x0XHRldGh0b29sX3B1dHMoZGF0YSwgbWFuYV9waHlfc3RhdHNbaV0ubmFtZSk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fcXVldWVzOyBpKyspIHtcbi1cdFx0ZXRodG9vbF9zcHJpbnRmKFx1MDAyNmRhdGEsIFwicnhfJWRfcGFja2V0c1wiLCBpKTtcbi1cdFx0ZXRodG9vbF9zcHJpbnRmKFx1MDAyNmRhdGEsIFwicnhfJWRfYnl0ZXNcIiwgaSk7XG4tXHRcdGV0aHRvb2xfc3ByaW50ZihcdTAwMjZkYXRhLCBcInJ4XyVkX3hkcF9kcm9wXCIsIGkpO1xuLVx0XHRldGh0b29sX3NwcmludGYoXHUwMDI2ZGF0YSwgXCJyeF8lZF94ZHBfdHhcIiwgaSk7XG4tXHRcdGV0aHRvb2xfc3ByaW50ZihcdTAwMjZkYXRhLCBcInJ4XyVkX3hkcF9yZWRpcmVjdFwiLCBpKTtcbi1cdFx0ZXRodG9vbF9zcHJpbnRmKFx1MDAyNmRhdGEsIFwicnhfJWRfcGt0X2xlbjBfZXJyXCIsIGkpO1xuK1x0XHRldGh0b29sX3NwcmludGYoZGF0YSwgXCJyeF8lZF9wYWNrZXRzXCIsIGkpO1xuK1x0XHRldGh0b29sX3NwcmludGYoZGF0YSwgXCJyeF8lZF9ieXRlc1wiLCBpKTtcbitcdFx0ZXRodG9vbF9zcHJpbnRmKGRhdGEsIFwicnhfJWRfeGRwX2Ryb3BcIiwgaSk7XG4rXHRcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcInJ4XyVkX3hkcF90eFwiLCBpKTtcbitcdFx0ZXRodG9vbF9zcHJpbnRmKGRhdGEsIFwicnhfJWRfeGRwX3JlZGlyZWN0XCIsIGkpO1xuK1x0XHRldGh0b29sX3NwcmludGYoZGF0YSwgXCJyeF8lZF9wa3RfbGVuMF9lcnJcIiwgaSk7XG4gXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIE1BTkFfUlhDT01QX09PQl9OVU1fUFBJIC0gMTsgaisrKVxuLVx0XHRcdGV0aHRvb2xfc3ByaW50ZihcdTAwMjZkYXRhLCBcInJ4XyVkX2NvYWxlc2NlZF9jcWVfJWRcIiwgaSwgaiArIDIpO1xuK1x0XHRcdGV0aHRvb2xfc3ByaW50ZihkYXRhLFxuK1x0XHRcdFx0XHRcInJ4XyVkX2NvYWxlc2NlZF9jcWVfJWRcIixcbitcdFx0XHRcdFx0aSxcbitcdFx0XHRcdFx0aiArIDIpO1xuIFx0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3F1ZXVlczsgaSsrKSB7XG4tXHRcdGV0aHRvb2xfc3ByaW50ZihcdTAwMjZkYXRhLCBcInR4XyVkX3BhY2tldHNcIiwgaSk7XG4tXHRcdGV0aHRvb2xfc3ByaW50ZihcdTAwMjZkYXRhLCBcInR4XyVkX2J5dGVzXCIsIGkpO1xuLVx0XHRldGh0b29sX3NwcmludGYoXHUwMDI2ZGF0YSwgXCJ0eF8lZF94ZHBfeG1pdFwiLCBpKTtcbi1cdFx0ZXRodG9vbF9zcHJpbnRmKFx1MDAyNmRhdGEsIFwidHhfJWRfdHNvX3BhY2tldHNcIiwgaSk7XG4tXHRcdGV0aHRvb2xfc3ByaW50ZihcdTAwMjZkYXRhLCBcInR4XyVkX3Rzb19ieXRlc1wiLCBpKTtcbi1cdFx0ZXRodG9vbF9zcHJpbnRmKFx1MDAyNmRhdGEsIFwidHhfJWRfdHNvX2lubmVyX3BhY2tldHNcIiwgaSk7XG4tXHRcdGV0aHRvb2xfc3ByaW50ZihcdTAwMjZkYXRhLCBcInR4XyVkX3Rzb19pbm5lcl9ieXRlc1wiLCBpKTtcbi1cdFx0ZXRodG9vbF9zcHJpbnRmKFx1MDAyNmRhdGEsIFwidHhfJWRfbG9uZ19wa3RfZm10XCIsIGkpO1xuLVx0XHRldGh0b29sX3NwcmludGYoXHUwMDI2ZGF0YSwgXCJ0eF8lZF9zaG9ydF9wa3RfZm10XCIsIGkpO1xuLVx0XHRldGh0b29sX3NwcmludGYoXHUwMDI2ZGF0YSwgXCJ0eF8lZF9jc3VtX3BhcnRpYWxcIiwgaSk7XG4tXHRcdGV0aHRvb2xfc3ByaW50ZihcdTAwMjZkYXRhLCBcInR4XyVkX21hbmFfbWFwX2VyclwiLCBpKTtcbitcdFx0ZXRodG9vbF9zcHJpbnRmKGRhdGEsIFwidHhfJWRfcGFja2V0c1wiLCBpKTtcbitcdFx0ZXRodG9vbF9zcHJpbnRmKGRhdGEsIFwidHhfJWRfYnl0ZXNcIiwgaSk7XG4rXHRcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcInR4XyVkX3hkcF94bWl0XCIsIGkpO1xuK1x0XHRldGh0b29sX3NwcmludGYoZGF0YSwgXCJ0eF8lZF90c29fcGFja2V0c1wiLCBpKTtcbitcdFx0ZXRodG9vbF9zcHJpbnRmKGRhdGEsIFwidHhfJWRfdHNvX2J5dGVzXCIsIGkpO1xuK1x0XHRldGh0b29sX3NwcmludGYoZGF0YSwgXCJ0eF8lZF90c29faW5uZXJfcGFja2V0c1wiLCBpKTtcbitcdFx0ZXRodG9vbF9zcHJpbnRmKGRhdGEsIFwidHhfJWRfdHNvX2lubmVyX2J5dGVzXCIsIGkpO1xuK1x0XHRldGh0b29sX3NwcmludGYoZGF0YSwgXCJ0eF8lZF9sb25nX3BrdF9mbXRcIiwgaSk7XG4rXHRcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcInR4XyVkX3Nob3J0X3BrdF9mbXRcIiwgaSk7XG4rXHRcdGV0aHRvb2xfc3ByaW50ZihkYXRhLCBcInR4XyVkX2NzdW1fcGFydGlhbFwiLCBpKTtcbitcdFx0ZXRodG9vbF9zcHJpbnRmKGRhdGEsIFwidHhfJWRfbWFuYV9tYXBfZXJyXCIsIGkpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBtYW5hX2dldF9zdHJpbmdzX3ByaXZfZmxhZ3ModTggKipkYXRhKVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFOQV9QUklWX0ZMQUdfTUFYOyBpKyspXG4rXHRcdGV0aHRvb2xfcHV0cyhkYXRhLCBtYW5hX3ByaXZfZmxhZ3NbaV0pO1xuK31cbitcbitzdGF0aWMgdm9pZCBtYW5hX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1xuK1x0c3dpdGNoIChzdHJpbmdzZXQpIHtcbitcdGNhc2UgRVRIX1NTX1NUQVRTOlxuK1x0XHRtYW5hX2dldF9zdHJpbmdzX3N0YXRzKGFwYywgXHUwMDI2ZGF0YSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBFVEhfU1NfUFJJVl9GTEFHUzpcbitcdFx0bWFuYV9nZXRfc3RyaW5nc19wcml2X2ZsYWdzKFx1MDAyNmRhdGEpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdGJyZWFrO1xuIFx0fVxuIH1cbiBcbkBAIC01OTQsNiArNjMwLDg4IEBAIHN0YXRpYyBpbnQgbWFuYV9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHUzMiBtYW5hX2dldF9wcml2X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuK3tcbitcdHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXG4rXHRyZXR1cm4gYXBjLVx1MDAzZXByaXZfZmxhZ3M7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbWFuYV9zZXRfcHJpdl9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIHByaXZfZmxhZ3MpXG4re1xuK1x0c3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcdHUzMiBjaGFuZ2VkID0gYXBjLVx1MDAzZXByaXZfZmxhZ3MgXiBwcml2X2ZsYWdzO1xuK1x0dTMyIG9sZF9wcml2X2ZsYWdzID0gYXBjLVx1MDAzZXByaXZfZmxhZ3M7XG4rXHRib29sIHNjaGVkdWxlX3BvcnRfcmVzZXQgPSBmYWxzZTtcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0aWYgKCFjaGFuZ2VkKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIFJlamVjdCB1bmtub3duIGJpdHMgKi9cbitcdGlmIChwcml2X2ZsYWdzIFx1MDAyNiB+R0VOTUFTSyhNQU5BX1BSSVZfRkxBR19NQVggLSAxLCAwKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoY2hhbmdlZCBcdTAwMjYgQklUKE1BTkFfUFJJVl9GTEFHX1VTRV9GVUxMX1BBR0VfUlhCVUYpKSB7XG4rXHRcdGFwYy1cdTAwM2Vwcml2X2ZsYWdzID0gcHJpdl9mbGFncztcbitcbitcdFx0aWYgKCFhcGMtXHUwMDNlcG9ydF9pc191cCkge1xuK1x0XHRcdC8qIFBvcnQgaXMgZG93biwgZmxhZyB1cGRhdGVkIHRvIGFwcGx5IG9uIG5leHQgdXBcbitcdFx0XHQgKiBzbyBqdXN0IHJldHVybi5cbitcdFx0XHQgKi9cbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuK1xuK1x0XHQvKiBQcmUtYWxsb2NhdGUgYnVmZmVycyB0byBwcmV2ZW50IGZhaWx1cmUgaW4gbWFuYV9hdHRhY2hcbitcdFx0ICogbGF0ZXJcbitcdFx0ICovXG4rXHRcdGVyciA9IG1hbmFfcHJlX2FsbG9jX3J4YnVmcyhhcGMsIG5kZXYtXHUwMDNlbXR1LCBhcGMtXHUwMDNlbnVtX3F1ZXVlcyk7XG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHRuZXRkZXZfZXJyKG5kZXYsXG4rXHRcdFx0XHQgICBcIkluc3VmZmljaWVudCBtZW1vcnkgZm9yIG5ldyBhbGxvY2F0aW9uc1xcblwiKTtcbitcdFx0XHRhcGMtXHUwMDNlcHJpdl9mbGFncyA9IG9sZF9wcml2X2ZsYWdzO1xuK1x0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcbitcdFx0ZXJyID0gbWFuYV9kZXRhY2gobmRldiwgZmFsc2UpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZGV2LCBcIm1hbmFfZGV0YWNoIGZhaWxlZDogJWRcXG5cIiwgZXJyKTtcbitcdFx0XHRhcGMtXHUwMDNlcHJpdl9mbGFncyA9IG9sZF9wcml2X2ZsYWdzO1xuK1xuK1x0XHRcdC8qIFBvcnQgaXMgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBSZXN0b3JlXG4rXHRcdFx0ICogJ3BvcnRfaXNfdXAnIHNvIHRoYXQgcXVldWUgcmVzZXQgd29yayBoYW5kbGVyXG4rXHRcdFx0ICogY2FuIHByb3Blcmx5IGRldGFjaCBhbmQgcmUtYXR0YWNoLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGFwYy1cdTAwM2Vwb3J0X2lzX3VwID0gdHJ1ZTtcbitcdFx0XHRzY2hlZHVsZV9wb3J0X3Jlc2V0ID0gdHJ1ZTtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1xuK1x0XHRlcnIgPSBtYW5hX2F0dGFjaChuZGV2KTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdG5ldGRldl9lcnIobmRldiwgXCJtYW5hX2F0dGFjaCBmYWlsZWQ6ICVkXFxuXCIsIGVycik7XG4rXHRcdFx0YXBjLVx1MDAzZXByaXZfZmxhZ3MgPSBvbGRfcHJpdl9mbGFncztcbitcbitcdFx0XHQvKiBSZXN0b3JlICdwb3J0X2lzX3VwJyBzbyB0aGUgcmVzZXQgd29yayBoYW5kbGVyXG4rXHRcdFx0ICogY2FuIHByb3Blcmx5IGRldGFjaC9hdHRhY2guIFdpdGhvdXQgdGhpcyxcbitcdFx0XHQgKiB0aGUgaGFuZGxlciBzZWVzIHBvcnRfaXNfdXA9ZmFsc2UgYW5kIHNraXBzXG4rXHRcdFx0ICogcXVldWUgYWxsb2NhdGlvbiwgbGVhdmluZyB0aGUgcG9ydCBkZWFkLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGFwYy1cdTAwM2Vwb3J0X2lzX3VwID0gdHJ1ZTtcbitcdFx0XHRzY2hlZHVsZV9wb3J0X3Jlc2V0ID0gdHJ1ZTtcbitcdFx0fVxuK1x0fVxuK1xuK291dDpcbitcdG1hbmFfcHJlX2RlYWxsb2NfcnhidWZzKGFwYyk7XG4rXG4rXHRpZiAoc2NoZWR1bGVfcG9ydF9yZXNldClcbitcdFx0cXVldWVfd29yayhhcGMtXHUwMDNlYWMtXHUwMDNlcGVyX3BvcnRfcXVldWVfcmVzZXRfd3EsXG4rXHRcdFx0ICAgXHUwMDI2YXBjLVx1MDAzZXF1ZXVlX3Jlc2V0X3dvcmspO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG1hbmFfZXRodG9vbF9vcHMgPSB7XG4gXHQuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfUlhfQ1FFX0ZSQU1FUyxcbiBcdC5vcF9uZWVkc19ydG5sXHRcdD0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XG5AQCAtNjE0LDQgKzczMiw2IEBAIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBtYW5hX2V0aHRvb2xfb3BzID0ge1xuIFx0LnNldF9yaW5ncGFyYW0gICAgICAgICAgPSBtYW5hX3NldF9yaW5ncGFyYW0sXG4gXHQuZ2V0X2xpbmtfa3NldHRpbmdzXHQ9IG1hbmFfZ2V0X2xpbmtfa3NldHRpbmdzLFxuIFx0LmdldF9saW5rXHRcdD0gZXRodG9vbF9vcF9nZXRfbGluayxcbitcdC5nZXRfcHJpdl9mbGFnc1x0XHQ9IG1hbmFfZ2V0X3ByaXZfZmxhZ3MsXG4rXHQuc2V0X3ByaXZfZmxhZ3NcdFx0PSBtYW5hX3NldF9wcml2X2ZsYWdzLFxuIH07XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFuYS9tYW5hLmggYi9pbmNsdWRlL25ldC9tYW5hL21hbmEuaFxuaW5kZXggMTNjODdiYWYwMThlZTEuLjhkYzQ5NmYwNTkzOGJmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbWFuYS9tYW5hLmhcbisrKyBiL2luY2x1ZGUvbmV0L21hbmEvbWFuYS5oXG5AQCAtMzAsNiArMzAsMTIgQEAgZW51bSBUUklfU1RBVEUge1xuIFx0VFJJX1NUQVRFX1RSVUUgPSAxXG4gfTtcbiBcbisvKiBNQU5BIGV0aHRvb2wgcHJpdmF0ZSBmbGFnIGJpdCBwb3NpdGlvbnMgKi9cbitlbnVtIG1hbmFfcHJpdl9mbGFnX2JpdHMge1xuK1x0TUFOQV9QUklWX0ZMQUdfVVNFX0ZVTExfUEFHRV9SWEJVRiA9IDAsXG4rXHRNQU5BX1BSSVZfRkxBR19NQVgsXG4rfTtcbitcbiAvKiBOdW1iZXIgb2YgZW50cmllcyBmb3IgaGFyZHdhcmUgaW5kaXJlY3Rpb24gdGFibGUgbXVzdCBiZSBpbiBwb3dlciBvZiAyICovXG4gI2RlZmluZSBNQU5BX0lORElSRUNUX1RBQkxFX01BWF9TSVpFIDUxMlxuICNkZWZpbmUgTUFOQV9JTkRJUkVDVF9UQUJMRV9ERUZfU0laRSA2NFxuQEAgLTUzMiw2ICs1MzgsOCBAQCBzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQge1xuIFx0dTMyIHJ4YnByZV9oZWFkcm9vbTtcbiBcdHUzMiByeGJwcmVfZnJhZ19jb3VudDtcbiBcbitcdHUzMiBwcml2X2ZsYWdzO1xuK1xuIFx0c3RydWN0IGJwZl9wcm9nICpicGZfcHJvZztcbiBcbiBcdC8qIENyZWF0ZSBudW1fcXVldWVzIEVRcywgU1FzLCBTUS1DUXMsIFJRcyBhbmQgUlEtQ1FzLCByZXNwZWN0aXZlbHkuICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMjoyOToyMy40ODg1OTM0MzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Njg1MzY3NzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIHRoZSBgZnVsbC1wYWdlLXJ4YCBQYXRjaDogQSBWaXJ0dWFsaXphdGlvbiBDb251bmRydW0qKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgdGhpcyBwYXRjaCDigJMgYSBuZXcgYGV0aHRvb2xgIHByaXZhdGUgZmxhZywgYGZ1bGwtcGFnZS1yeGAsIGZvciB0aGUgTWljcm9zb2Z0IE1BTkEgZXRoZXJuZXQgZHJpdmVyLiBJdCdzIHN1cHBvc2VkIHRvIGZvcmNlIHRoZSBkcml2ZXIgdG8gdXNlIGEgZnVsbCBwYWdlIGZvciBlYWNoIFJYIGJ1ZmZlciwgc2tpcHBpbmcgdGhlIGZyYWdtZW50IHBhdGguIFRoZSBjb2RlJ3Mgc3ByZWFkIGFjcm9zcyBgbWFuYV9lbi5jYCwgYG1hbmFfZXRodG9vbC5jYCwgYW5kIGBtYW5hLmhgLiBGaW5lLCBzdGFuZGFyZCBzdHVmZi4gTm93IHRoZSBxdWVzdGlvbiBpcywgaG93IGRvIHdlICp0ZXN0KiB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFRoaXMgZHJpdmVyJ3MgZm9yIHRoZSBBenVyZSBOZXR3b3JrIEFkYXB0ZXIsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIFBDSSBkZXZpY2UuXG5cblRoZSByZWFsIGNoYWxsZW5nZSBpcyBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzIGxpa2UgdGhpcywgdW5sZXNzIHdlIGFyZSB0YWxraW5nIGFib3V0IHNvbWV0aGluZyBtb3JlIGFtZW5hYmxlIHRvIGVtdWxhdGlvbiBzdWNoIGFzIFVTQiwgdmlydGlvLCB2ZXRoLCBvciBtYWM4MDIxMV9od3NpbS4gVGhlc2UgdGhpbmdzIGFyZSByYXJlbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHN5emthbGxlciBWTXMgdW5sZXNzIHRoZXJlJ3MgYW4gZW11bGF0b3IuIFNwZWNpZmljYWxseSwgdW5sZXNzIGl0J3MgcnVubmluZyBvbiBBenVyZSBWTXMsIHRoaXMgaXMgZ29pbmcgdG8gYmUgZGlmZmljdWx0LiBTeXprYWxsZXIgcnVucyBvbiBHQ0Ugb3IgUUVNVSwgc28gY2FuIFFFTVUgZW11bGF0ZSBhIE1BTkEgZGV2aWNlPyBIaWdobHkgdW5saWtlbHkuXG5cbkNhbiB3ZSBldmVuIHJlYWNoIGBtYW5hX3NldF9wcml2X2ZsYWdzYCB3aXRob3V0IGEgcmVhbCBNQU5BIGRldmljZT8gVGhlIGBldGh0b29sYCBvcGVyYXRpb25zIGFyZSByZWdpc3RlcmVkIHdoZW4gdGhlIG5ldHdvcmsgZGV2aWNlIGlzIHJlZ2lzdGVyZWQsIGFuZCB0aGF0IG5ldGRldiByZWdpc3RyYXRpb24gaGFwcGVucyBpbiB0aGUgcHJvYmUgZnVuY3Rpb24gb2YgdGhlIFBDSSBkcml2ZXIuIElmIG5vIE1BTkEgUENJIGRldmljZSBpcyBwcmVzZW50LCB0aGUgcHJvYmUgZnVuY3Rpb24gaXMgbmV2ZXIgY2FsbGVkLCB0aGUgbmV0ZGV2IGlzIG5ldmVyIGNyZWF0ZWQsIGFuZCB0aG9zZSBgZXRodG9vbGAgb3BlcmF0aW9ucyBhcmUgdW5yZWFjaGFibGUuIFNvIHRoZSBhbnN3ZXIgaXMgXCJub1wiLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gc2VlIGlmICphbnkqIGtpbmQgb2Ygc29mdHdhcmUgZW11bGF0aW9uIGV4aXN0cyBmb3IgdGhlIE1BTkEgZGV2aWNlLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBkcml2ZXIgZGlyZWN0b3J5OiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvYC4gSSB3aWxsIHNlYXJjaCBmb3Igc29tZXRoaW5nIGxpa2UgYG1hbmFfcHJvYmVgIG9yIGEgc2ltaWxhciBpZGVudGlmaWVyLiBUaGlzIGlzIGNyaXRpY2FsOiBpZiB0aGVyZSBpcyBubyBlbXVsYXRpb24gYXZhaWxhYmxlLCByZWFjaGluZyB0aGlzIHBhdGNoIGZvciB0ZXN0aW5nIG1heSBiZSBkaWZmaWN1bHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NDUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMjoyOTozMC4xNzM5NjI2NTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwMjczNzY0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYW5hX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYz0xNzc9c3RhdGljIGludCBtYW5hX2dkX3F1ZXJ5X21heF9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6MjYwOlxcdC8qIENhcCB0byB0aGUgc2FtZSBsaW1pdCB1c2VkIGJ5IG1hbmFfcHJvYmUoKSBmb3IgcG9ydCBpbnN0YW50aWF0aW9uLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTI2MS1cXHQgKiBzbyBNU0ktWCBhbmQgcXVldWUgYnVkZ2V0aW5nIG1hdGNoZXMgdGhlIGFjdHVhbCBwb3J0IGNvdW50Llxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9MjI1MD1zdGF0aWMgaW50IG1hbmFfZ2RfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yMzA1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jOjIzMDY6XFx0ZXJyID0gbWFuYV9wcm9iZShcXHUwMDI2Z2MtXFx1MDAzZW1hbmEsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yMzA3LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yMzQ0LVxcdCAqIEhhcmR3YXJlIGNvdWxkIGJlIGluIHJlY292ZXJ5IG1vZGUgYW5kIHRoZSBIV0MgcmV0dXJucyBUSU1FRE9VVCBvclxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jOjIzNDU6XFx0ICogRVBST1RPIGZyb20gbWFuYV9nZF9zZXR1cCgpLCBtYW5hX3Byb2JlKCkgb3IgbWFuYV9yZG1hX3Byb2JlKCksIG9yXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjM0Ni1cXHQgKiB3ZSByZWNlaXZlZCBhIGhhcmR3YXJlIHJlc2V0IGV2ZW50IG92ZXIgSFdDIGludGVycnVwdC4gSW4gdGhpcyBjYXNlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9MjQwOD1pbnQgbWFuYV9nZF9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNDE2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jOjI0MTc6XFx0ZXJyID0gbWFuYV9wcm9iZShcXHUwMDI2Z2MtXFx1MDAzZW1hbmEsIHRydWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTI0MTgtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYz0zNDg3PWludCBtYW5hX2RldGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgYm9vbCBmcm9tX2Nsb3NlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTM1MjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jOjM1MjQ6c3RhdGljIGludCBtYW5hX3Byb2JlX3BvcnQoc3RydWN0IG1hbmFfY29udGV4dCAqYWMsIGludCBwb3J0X2lkeCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMzUyNS1cXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqKm5kZXZfc3RvcmFnZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYz0zNzU0PXN0YXRpYyB2b2lkIG1hbmFfZ2Zfc3RhdHNfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0zNzc2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzozNzc3OmludCBtYW5hX3Byb2JlKHN0cnVjdCBnZG1hX2RldiAqZ2QsIGJvb2wgcmVzdW1pbmcpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTM3Nzgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTM4NTEtXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFjLVxcdTAwM2VudW1fcG9ydHM7IGkrKykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzozODUyOlxcdFxcdFxcdGVyciA9IG1hbmFfcHJvYmVfcG9ydChhYywgaSwgXFx1MDAyNmFjLVxcdTAwM2Vwb3J0c1tpXSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTM4NTMtXFx0XFx0XFx0LyogTG9nIHRoZSBwb3J0IGZvciB3aGljaCB0aGUgcHJvYmUgZmFpbGVkLCBzdG9wIHByb2JpbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjI6Mjk6MzEuOTc2NzA0NzEyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI2MzQ1ODU0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNQU5BIERyaXZlciBSZWFjaGFiaWxpdHkgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGUgTUFOQSBkcml2ZXIsIHRoYXQncyB0aGUgUENJIGRyaXZlciBmb3IgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIuIFN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEJ1dCBoZXJlJ3MgdGhlIGtpY2tlcjogaXQgcmVsaWVzIG9uIHNwZWNpZmljIFBDSSBoYXJkd2FyZS4gSXQgbmVlZHMgdGhhdCBwaHlzaWNhbCBwcmVzZW5jZSB0byBkbyBpdHMgcHJvYmluZyBhbmQgcmVnaXN0ZXIgdGhlIG5ldHdvcmsgZGV2aWNlLlxuXG5Ob3csIG15IGluaXRpYWwgdGhvdWdodCBpcywgYW5kIEknbSBwcmV0dHkgc3VyZSBJJ20gcmlnaHQsIHRoYXQgdGhpcyBjb2RlIGlzICpuZXZlciogaGl0IGluIGEgc3RhbmRhcmQgU3l6a2FsbGVyIHNldHVwLiBXZSdyZSBlaXRoZXIgcnVubmluZyBpbiBHQ0Ugb3IgUUVNVSwgYW5kIHRob3NlIGVudmlyb25tZW50cywgYnkgZGVmYXVsdCwgZG9uJ3QgaGF2ZSB0aGlzIHBhcnRpY3VsYXIgcGllY2Ugb2YgUENJIGhhcmR3YXJlIHVubGVzcyB3ZSd2ZSBnb25lIHRvIHRoZSB0cm91YmxlIG9mIGRvaW5nIFBDSSBwYXNzdGhyb3VnaCBvciBzZXQgdXAgc29tZSBzcGVjaWZpYyBlbXVsYXRvciwgd2hpY2gsIGxldCdzIGJlIGhvbmVzdCwgaXNuJ3QgdGhlIG5vcm0uIFRoZSB1c3VhbCBmdXp6aW5nIHNldHVwLCBmb3Igc3BlZWQgYW5kIHNpbXBsaWNpdHksIGF2b2lkcyB0aGlzIGxldmVsIG9mIGNvbmZpZ3VyYXRpb24uXG5cblRoZXJlZm9yZSwgdW5kZXIgdGhlc2UgY29uZGl0aW9ucywgV29ydGhGdXp6aW5nIGhhcyBnb3QgdG8gYmUgZmFsc2UuIE5vIGNoYW5jZSBvZiByZWFjaGluZyB0aGF0IGNvZGUuXG5cbkxldCBtZSBqdXN0IGRvIGEgcXVpY2sgc2NhbiB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBpc24ndCBzb21lIG9ic2N1cmUgc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGUgTUFOQSBkcml2ZXIgb3V0IHRoZXJlLCBqdXN0IHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2guIEl0J3MgYWx3YXlzIHdvcnRoIGRvdWJsZS1jaGVja2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzUzNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMjoyOTozNi4yNDAxNjUyMDVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzMzA4MjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hbmFfZ2RfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jPTIyNDU9c3RhdGljIGJvb2wgbWFuYV9pc19wZih1bnNpZ25lZCBzaG9ydCBkZXZfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yMjQ5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jOjIyNTA6c3RhdGljIGludCBtYW5hX2dkX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTIyNTEte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9MjQ1ND1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFuYV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNDU2LVxcdC5pZF90YWJsZVxcdD0gbWFuYV9pZF90YWJsZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzoyNDU3OlxcdC5wcm9iZVxcdFxcdD0gbWFuYV9nZF9wcm9iZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNDU4LVxcdC5yZW1vdmVcXHRcXHQ9IG1hbmFfZ2RfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMjoyOTozNi42NzM0Nzg1NDdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODc3NzgyMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUENJIERyaXZlciBhbmQgaXRzIExpbWl0YXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBQQ0kgZHJpdmVyIHN0cnVjdHVyZSwgYG1hbmFfZHJpdmVyYCwgYW5kIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgdGhlIHVzdWFsIHN1c3BlY3RzOiBgbmFtZWAsIGBpZF90YWJsZWAsIGBwcm9iZWAsIGFuZCBgcmVtb3ZlYCBtZXRob2RzLiBOb3RoaW5nIGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhcyB1bnVzdWFsLiBCdXQsIGJhc2VkIG9uIHRoZSBjb2RlIEknbSBzZWVpbmcsIHRoZXJlJ3MgYSBjcml0aWNhbCBkZXBlbmRlbmN5IGhlcmUuIFdpdGhvdXQgdGhlIGFjdHVhbCBwaHlzaWNhbCBoYXJkd2FyZSBwcmVzZW50LCB0aGF0IGNydWNpYWwgYG1hbmFfZ2RfcHJvYmVgIGZ1bmN0aW9uIHdpbGwgbmV2ZXIgZ2V0IGV4ZWN1dGVkLiBBbmQgaWYgYG1hbmFfZ2RfcHJvYmVgIGlzbid0IGNhbGxlZCwgdGhlbiBgbWFuYV9wcm9iZWAgZG9lc24ndCBydW4sIGFuZCBuZWl0aGVyIGRvZXMgYG1hbmFfcHJvYmVfcG9ydGAsIGxlYWRpbmcgdG8gYHJlZ2lzdGVyX25ldGRldmAgYmVpbmcgc2tpcHBlZC4gVGhhdCB3aG9sZSBjaGFpbiBpcyBibG9ja2VkLlxuXG5UaGUgaW1wbGljYXRpb24gaXMgY2xlYXI6IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbGlrZSBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgb3IgUUVNVSwgdGhpcyBkcml2ZXIncyBmdW5jdGlvbmFsaXR5IGlzIGZ1bmRhbWVudGFsbHkgdW5yZWFjaGFibGUuIE5vIGhhcmR3YXJlLCBubyBwcm9iaW5nLCBubyBkZXZpY2UgcmVnaXN0cmF0aW9uLCBubyBuZXR3b3JrIGludGVyZmFjZS4gVGhlIGV0aHRvb2wgb3BlcmF0aW9ucywgY3J1Y2lhbCBmb3IgYW55IHNvcnQgb2YgbWVhbmluZ2Z1bCBpbnRlcmFjdGlvbiwgYXJlIGVmZmVjdGl2ZWx5IGxvY2tlZCBhd2F5LlxuXG5HaXZlbiB0aGVzZSBjb25zdHJhaW50cywgdGhlcmUncyBubyB3YXkgdGhpcyBkcml2ZXIgY2FuIGJlIGVmZmVjdGl2ZWx5IGZ1enplZCBpbiBhIHZpcnR1YWxpemVkIGNvbnRleHQuIEknbGwgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjE5LCJPdXRwdXRUb2tlbnMiOjExNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMjoyOTo0MS41NTEyNjMzODhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIsIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUENJIGRyaXZlci4gVGhlIG1vZGlmaWVkIGNvZGUgKGV0aHRvb2wgb3BzIGFuZCBSWCBidWZmZXIgYWxsb2NhdGlvbiBsb2dpYykgaXMgb25seSByZWFjaGFibGUgaWYgdGhlIE1BTkEgUENJIGRldmljZSBpcyBwcmVzZW50IGFuZCBwcm9iZWQuIFNpbmNlIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzIChsaWtlIEdDRSBvciBRRU1VKSBkbyBub3QgZW11bGF0ZSB0aGlzIHNwZWNpZmljIGhhcmR3YXJlLCB0aGUgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIsIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUENJIGRyaXZlci4gVGhlIG1vZGlmaWVkIGNvZGUgKGV0aHRvb2wgb3BzIGFuZCBSWCBidWZmZXIgYWxsb2NhdGlvbiBsb2dpYykgaXMgb25seSByZWFjaGFibGUgaWYgdGhlIE1BTkEgUENJIGRldmljZSBpcyBwcmVzZW50IGFuZCBwcm9iZWQuIFNpbmNlIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzIChsaWtlIEdDRSBvciBRRU1VKSBkbyBub3QgZW11bGF0ZSB0aGlzIHNwZWNpZmljIGhhcmR3YXJlLCB0aGUgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowf8wc9[1] Phase: Running StartedAt: 2026-07-01 22:29:52 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf8wc9[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-01 22:29:52 +0000 UTC FinishedAt: 2026-07-01 22:30:00 +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,}