Name: series-workflowlzrs2 Phase: Failed StartedAt: 2026-07-18 03:06:10 +0000 UTC FinishedAt: 2026-07-18 03:26:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlzrs2[0] Phase: Succeeded StartedAt: 2026-07-18 03:06:10 +0000 UTC FinishedAt: 2026-07-18 03:25:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlzrs2[0].run-triage Phase: Succeeded StartedAt: 2026-07-18 03:06:10 +0000 UTC FinishedAt: 2026-07-18 03:25:59 +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+CgkJCTx0ZD4yMDI2LzA3LzE4IDAzOjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIuIE1BTkEgaXMgYSBoYXJkd2FyZSBkZXZpY2Ugc3BlY2lmaWMgdG8gTWljcm9zb2Z0IEF6dXJlIGFuZCBpcyBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSB3aGVyZSBmdXp6aW5nIG9jY3Vycy4gV2hpbGUgdGhlIFBDSSBmdXp6ZXIgY2FuIHRyaWdnZXIgdGhlIGRyaXZlciYjMzk7cyBwcm9iZSBmdW5jdGlvbiwgc3VjY2Vzc2Z1bGx5IHBhc3NpbmcgdGhlIGNvbXBsZXggaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgdG8gcmVnaXN0ZXIgdGhlIG5ldHdvcmsgZGV2aWNlIGFuZCByZWFjaCBgbWFuYV9jcmVhdGVfcnhxYCAodmlhIGBtYW5hX29wZW5gKSBpcyBwcmFjdGljYWxseSBpbXBvc3NpYmxlIHdpdGhvdXQgYSBkZWRpY2F0ZWQgZW11bGF0b3IuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgaW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAzOjI0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDdkOTEzODJjYTI0NGZmMGEwZjZlMDM4Nzk5NzJkNDk1MWQ2YjAzYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDE4IDAzOjI0OjM3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY1xuaW5kZXggOWQ5YmZkMTE2ZGFiYzIuLjkxNjJlMzU2ZTBjMWQ3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcbkBAIC0yODExLDkgJiM0MzsyODExLDkgQEAgc3RhdGljIGludCBtYW5hX2NyZWF0ZV9wYWdlX3Bvb2woc3RydWN0IG1hbmFfcnhxICpyeHEsIHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgbWFuYV9yeHEgKm1hbmFfY3JlYXRlX3J4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcbi1cdFx0XHRcdFx0dTMyIHJ4cV9pZHgsIHN0cnVjdCBtYW5hX2VxICplcSxcbi1cdFx0XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4mIzQzO3N0YXRpYyBpbnQgbWFuYV9jcmVhdGVfcnhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLCB1MzIgcnhxX2lkeCxcbiYjNDM7XHRcdFx0ICAgc3RydWN0IG1hbmFfZXEgKmVxLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiYjNDM7XHRcdFx0ICAgc3RydWN0IG1hbmFfcnhxICoqcnhxX291dClcbiB7XG4gXHRzdHJ1Y3QgZ2RtYV9kZXYgKmdkID0gYXBjLVx1MDAzZWFjLVx1MDAzZWdkbWFfZGV2O1xuIFx0c3RydWN0IG1hbmFfb2JqX3NwZWMgd3Ffc3BlYztcbkBAIC0yODI5LDcgJiM0MzsyODI5LDcgQEAgc3RhdGljIHN0cnVjdCBtYW5hX3J4cSAqbWFuYV9jcmVhdGVfcnhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuIFxuIFx0cnhxID0ga3Z6YWxsb2NfZmxleCgqcnhxLCByeF9vb2JzLCBhcGMtXHUwMDNlcnhfcXVldWVfc2l6ZSk7XG4gXHRpZiAoIXJ4cSlcbi1cdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdHJ4cS1cdTAwM2VuZGV2ID0gbmRldjtcbiBcdHJ4cS1cdTAwM2VudW1fcnhfYnVmID0gYXBjLVx1MDAzZXJ4X3F1ZXVlX3NpemU7XG5AQCAtMjkyMywxNCAmIzQzOzI5MjMsMTYgQEAgc3RhdGljIHN0cnVjdCBtYW5hX3J4cSAqbWFuYV9jcmVhdGVfcnhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuIFxuIFx0bWFuYV9nZF9yaW5nX2NxKGNxLVx1MDAzZWdkbWFfY3EsIFNFVF9BUk1fQklUKTtcbiBvdXQ6XG4tXHRpZiAoIWVycilcbi1cdFx0cmV0dXJuIHJ4cTtcbiYjNDM7XHRpZiAoIWVycikge1xuJiM0MztcdFx0KnJ4cV9vdXQgPSByeHE7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4gXG4gXHRuZXRkZXZfZXJyKG5kZXYsIFwmIzM0O0ZhaWxlZCB0byBjcmVhdGUgUlhROiBlcnIgPSAlZFxcblwmIzM0OywgZXJyKTtcbiBcbiBcdG1hbmFfZGVzdHJveV9yeHEoYXBjLCByeHEsIGZhbHNlKTtcbiBcbi1cdHJldHVybiBOVUxMO1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1hbmFfY3JlYXRlX3J4cV9kZWJ1Z2ZzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLCBpbnQgaWR4KVxuQEAgLTI5NjMsOSAmIzQzOzI5NjUsOCBAQCBzdGF0aWMgaW50IG1hbmFfYWRkX3J4X3F1ZXVlcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYXBjLVx1MDAzZW51bV9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHJ4cSA9IG1hbmFfY3JlYXRlX3J4cShhcGMsIGksIFx1MDAyNmFwYy1cdTAwM2VlcXNbaV0sIG5kZXYpO1xuLVx0XHRpZiAoIXJ4cSkge1xuLVx0XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRlcnIgPSBtYW5hX2NyZWF0ZV9yeHEoYXBjLCBpLCBcdTAwMjZhcGMtXHUwMDNlZXFzW2ldLCBuZGV2LCBcdTAwMjZyeHEpO1xuJiM0MztcdFx0aWYgKGVycikge1xuIFx0XHRcdG5ldGRldl9lcnIobmRldiwgXCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSByeHEgJWQgOiAlZFxcblwmIzM0OywgaSwgZXJyKTtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAzOjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIuIE1BTkEgaXMgYSBoYXJkd2FyZSBkZXZpY2Ugc3BlY2lmaWMgdG8gTWljcm9zb2Z0IEF6dXJlIGFuZCBpcyBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSB3aGVyZSBmdXp6aW5nIG9jY3Vycy4gV2hpbGUgdGhlIFBDSSBmdXp6ZXIgY2FuIHRyaWdnZXIgdGhlIGRyaXZlciYjMzk7cyBwcm9iZSBmdW5jdGlvbiwgc3VjY2Vzc2Z1bGx5IHBhc3NpbmcgdGhlIGNvbXBsZXggaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgdG8gcmVnaXN0ZXIgdGhlIG5ldHdvcmsgZGV2aWNlIGFuZCByZWFjaCBgbWFuYV9jcmVhdGVfcnhxYCAodmlhIGBtYW5hX29wZW5gKSBpcyBwcmFjdGljYWxseSBpbXBvc3NpYmxlIHdpdGhvdXQgYSBkZWRpY2F0ZWQgZW11bGF0b3IuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgaW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0N2Q5MTM4MmNhMjQ0ZmYwYTBmNmUwMzg3OTk3MmQ0OTUxZDZiMDNiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMTggMDM6MjQ6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMKaW5kZXggOWQ5YmZkMTE2ZGFiYzIuLjkxNjJlMzU2ZTBjMWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jCkBAIC0yODExLDkgJiM0MzsyODExLDkgQEAgc3RhdGljIGludCBtYW5hX2NyZWF0ZV9wYWdlX3Bvb2woc3RydWN0IG1hbmFfcnhxICpyeHEsIHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG1hbmFfcnhxICptYW5hX2NyZWF0ZV9yeHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsCi0JCQkJCXUzMiByeHFfaWR4LCBzdHJ1Y3QgbWFuYV9lcSAqZXEsCi0JCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQomIzQzO3N0YXRpYyBpbnQgbWFuYV9jcmVhdGVfcnhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLCB1MzIgcnhxX2lkeCwKJiM0MzsJCQkgICBzdHJ1Y3QgbWFuYV9lcSAqZXEsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAomIzQzOwkJCSAgIHN0cnVjdCBtYW5hX3J4cSAqKnJ4cV9vdXQpCiB7CiAJc3RydWN0IGdkbWFfZGV2ICpnZCA9IGFwYy0mZ3Q7YWMtJmd0O2dkbWFfZGV2OwogCXN0cnVjdCBtYW5hX29ial9zcGVjIHdxX3NwZWM7CkBAIC0yODI5LDcgJiM0MzsyODI5LDcgQEAgc3RhdGljIHN0cnVjdCBtYW5hX3J4cSAqbWFuYV9jcmVhdGVfcnhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLAogCiAJcnhxID0ga3Z6YWxsb2NfZmxleCgqcnhxLCByeF9vb2JzLCBhcGMtJmd0O3J4X3F1ZXVlX3NpemUpOwogCWlmICghcnhxKQotCQlyZXR1cm4gTlVMTDsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwogCiAJcnhxLSZndDtuZGV2ID0gbmRldjsKIAlyeHEtJmd0O251bV9yeF9idWYgPSBhcGMtJmd0O3J4X3F1ZXVlX3NpemU7CkBAIC0yOTIzLDE0ICYjNDM7MjkyMywxNiBAQCBzdGF0aWMgc3RydWN0IG1hbmFfcnhxICptYW5hX2NyZWF0ZV9yeHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsCiAKIAltYW5hX2dkX3JpbmdfY3EoY3EtJmd0O2dkbWFfY3EsIFNFVF9BUk1fQklUKTsKIG91dDoKLQlpZiAoIWVycikKLQkJcmV0dXJuIHJ4cTsKJiM0MzsJaWYgKCFlcnIpIHsKJiM0MzsJCSpyeHFfb3V0ID0gcnhxOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KIAogCW5ldGRldl9lcnIobmRldiwgJiMzNDtGYWlsZWQgdG8gY3JlYXRlIFJYUTogZXJyID0gJWRcbiYjMzQ7LCBlcnIpOwogCiAJbWFuYV9kZXN0cm95X3J4cShhcGMsIHJ4cSwgZmFsc2UpOwogCi0JcmV0dXJuIE5VTEw7CiYjNDM7CXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIG1hbmFfY3JlYXRlX3J4cV9kZWJ1Z2ZzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLCBpbnQgaWR4KQpAQCAtMjk2Myw5ICYjNDM7Mjk2NSw4IEBAIHN0YXRpYyBpbnQgbWFuYV9hZGRfcnhfcXVldWVzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IGFwYy0mZ3Q7bnVtX3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKLQkJcnhxID0gbWFuYV9jcmVhdGVfcnhxKGFwYywgaSwgJmFtcDthcGMtJmd0O2Vxc1tpXSwgbmRldik7Ci0JCWlmICghcnhxKSB7Ci0JCQllcnIgPSAtRU5PTUVNOwomIzQzOwkJZXJyID0gbWFuYV9jcmVhdGVfcnhxKGFwYywgaSwgJmFtcDthcGMtJmd0O2Vxc1tpXSwgbmRldiwgJmFtcDtyeHEpOwomIzQzOwkJaWYgKGVycikgewogCQkJbmV0ZGV2X2VycihuZGV2LCAmIzM0O0ZhaWxlZCB0byBjcmVhdGUgcnhxICVkIDogJWRcbiYjMzQ7LCBpLCBlcnIpOwogCQkJZ290byBvdXQ7CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ5MAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDM3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCB0byBhIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY2AuIEl0JiMzOTtzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZTogdGhleSYjMzk7dmUgYWx0ZXJlZCB0aGUgc2lnbmF0dXJlIG9mIGBtYW5hX2NyZWF0ZV9yeHFgLiBJdCB1c2VkIHRvIHJldHVybiBhIHBvaW50ZXIsIGJ1dCBub3cgaXQgcmV0dXJucyBhbiBgaW50YCBlcnJvciBjb2RlLCBwYXNzaW5nIHRoZSBwb2ludGVyIHZpYSBhbiBvdXQgcGFyYW1ldGVyLiBUaGlzIHNlZW1zIHRvIGJlIGEgc3RyYWlnaHRmb3J3YXJkIGJ1ZyBmaXgsIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgbWlzaW50ZXJwcmV0YXRpb24gb2YgZXJyb3JzLiBQcmV2aW91c2x5LCBgbWFuYV9jcmVhdGVfcnhxYCB3b3VsZCBhbHdheXMgcmV0dXJuIGBOVUxMYCBvbiBhbnkgZXJyb3IsIGJ1dCB0aGUgY2FsbGluZyBmdW5jdGlvbiwgYG1hbmFfYWRkX3J4X3F1ZXVlc2AsIHdvdWxkIGFsd2F5cyBhc3N1bWUgYC1FTk9NRU1gLCByZWdhcmRsZXNzIG9mIHRoZSB1bmRlcmx5aW5nIGlzc3VlLiBOb3cgd2UgaGF2ZSB0aGUgYWN0dWFsIGVycm9yIGNvZGVzIGJlaW5nIHJldHVybmVkLgoKSG1tLCB0aGlzIHdhcnJhbnRzIGEgZnV6emluZyBjb25zaWRlcmF0aW9uLCBvYnZpb3VzbHkuIEl04oCZcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgbmV0d29yayBkcml2ZXIgZm9yIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyLCBzbyB0aGlzIGlzIGludGVyZXN0aW5nIHRlcnJpdG9yeS4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gd2UgYWN0dWFsbHkgKnJlYWNoKiB0aGlzIGluIGEgZnV6emFibGUgZW52aXJvbm1lbnQ/IFNpbmNlIGl0JiMzOTtzIGEgUENJIGRldmljZSBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgQXp1cmUsIGl0JiMzOTtzIHR5cGljYWxseSB0b3VnaC4gVGhlc2Uga2luZHMgb2YgaGFyZHdhcmUgZHJpdmVycyBhcmUgcmFyZWx5IGVhc2lseSBmdXp6YWJsZSB1bmxlc3MgdGhleeKAmXJlIGVtdWxhdGVkIGluIFFFTVUgb3Igc3l6a2FsbGVyIGhhcyBhIGdvb2Qgd2F5IHRvIHNpbXVsYXRlIHRoZSBQQ0kgaGFyZHdhcmUuIEFuZCBzeXprYWxsZXImIzM5O3MgUENJIGZ1enppbmcgY2FwYWJpbGl0aWVzIGFyZSBrbm93biB0byBiZSBsaW1pdGVkLiBJcyBNQU5BIGV2ZW4gZW11bGF0ZWQ/IFByb2JhYmx5IG5vdCwgcmlnaHQ/CgpBbHJpZ2h0LCBsZXQmIzM5O3MgdHJhY2UgdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGwgY2hhaW4uIGBtYW5hX2NyZWF0ZV9yeHFgIGlzIGNhbGxlZCBieSBgbWFuYV9hZGRfcnhfcXVldWVzYCwgd2hpY2gsIGluIHR1cm4sIGlzIHByb2JhYmx5IGNhbGxlZCBieSBgbWFuYV9hdHRhY2hgIG9yIGEgc2ltaWxhciBmdW5jdGlvbi4gTGV0JiMzOTtzIGRvIGEgcXVpY2sgc2VhcmNoIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNgIHRvIGNvbmZpcm0gdGhlIGNhbGwgY2hhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDM6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFuYV9jcmVhdGVfcnhxJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYz0yNzgwPXN0YXRpYyBpbnQgbWFuYV9jcmVhdGVfcGFnZV9wb29sKHN0cnVjdCBtYW5hX3J4cSAqcnhxLCBzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMjgxMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzoyODE0OnN0YXRpYyBpbnQgbWFuYV9jcmVhdGVfcnhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLCB1MzIgcnhxX2lkeCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0yODE1LVx0XHRcdCAgIHN0cnVjdCBtYW5hX2VxICplcSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTI5MzctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM6MjkzODpzdGF0aWMgdm9pZCBtYW5hX2NyZWF0ZV9yeHFfZGVidWdmcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgaW50IGlkeClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0yOTM5LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM9Mjk2MD1zdGF0aWMgaW50IG1hbmFfYWRkX3J4X3F1ZXVlcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMjk2Ny1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFwYy1cdTAwM2VudW1fcXVldWVzOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jOjI5Njg6XHRcdGVyciA9IG1hbmFfY3JlYXRlX3J4cShhcGMsIGksIFx1MDAyNmFwYy1cdTAwM2VlcXNbaV0sIG5kZXYsIFx1MDAyNnJ4cSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMjk2OS1cdFx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0yOTc3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jOjI5Nzg6XHRcdG1hbmFfY3JlYXRlX3J4cV9kZWJ1Z2ZzKGFwYywgaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMjk3OS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODMwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQXNzZXNzaW5nIHRoZSBGdXp6YWJpbGl0eSBvZiB0aGUgQXp1cmUgTmV0d29yayBBZGFwdGVyIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBkcml2ZXIsIHRoZSBvbmUgZm9yIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyLiBNeSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzLCAmIzM0O2htbW0sIHdvcnRoIGZ1enppbmc/JiMzNDsgSSB1c3VhbGx5IHNlZSBoYXJkd2FyZSBkcml2ZXJzIHRoYXQgZGVwZW5kIG9uIHNwZWNpZmljIGhhcmR3YXJlLCBlc3BlY2lhbGx5IHRob3NlIHRoYXQgYXJlbiYjMzk7dCBlbXVsYXRlZCBpbiB0aGUgdXN1YWwgc3VzcGVjdHMgbGlrZSBRRU1VIG9yIHZoY2ksIGFuZCBJIGtub3cgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IHR5cGljYWxseSByZWFjaCB0aG9zZS4gU28sIG15IHByaW1hcnkgcXVlc3Rpb24gYmVjb21lczogaXMgdGhlcmUgYW55IGtpbmQgb2YgZW11bGF0aW9uIGluIHBsYWNlIGZvciB0aGUgTUFOQSBhZGFwdGVyPyBJZiB0aGVyZSYjMzk7cyBubyBlbXVsYXRpb24sIHRoZSBjaGFuY2VzIG9mIGVmZmVjdGl2ZSBmdXp6aW5nIGRyb3Agc2lnbmlmaWNhbnRseS4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgYW5kIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgYXZhaWxhYmxlIHNpbXVsYXRpb24sIG9yIGlmIHRoaXMgaXMgYSBub24tc3RhcnRlciByaWdodCBvdXQgb2YgdGhlIGdhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDM6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUlDUk9TT0ZUX01BTkEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvS2NvbmZpZz0yPWNvbmZpZyBNQU5BX0lORklOSUJBTkRcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O01pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvS2NvbmZpZzo0Olx0ZGVwZW5kcyBvbiBORVRERVZJQ0VTIFx1MDAyNlx1MDAyNiBFVEhFUk5FVCBcdTAwMjZcdTAwMjYgUENJIFx1MDAyNlx1MDAyNiBNSUNST1NPRlRfTUFOQVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvS2NvbmZpZy01LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnPTE2PWlmIE5FVF9WRU5ET1JfTUlDUk9TT0ZUXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZy0xNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnOjE4OmNvbmZpZyBNSUNST1NPRlRfTUFOQVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWctMTktXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L01ha2VmaWxlLTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfTUlDUk9TT0ZUX01BTkEpICYjNDM7PSBtYW5hL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL01ha2VmaWxlLTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19NSUNST1NPRlRfTUFOQSkgJiM0Mzs9IG1hbmEub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvTWFrZWZpbGUtNi1tYW5hLW9ianMgOj0gZ2RtYV9tYWluLm8gc2htX2NoYW5uZWwubyBod19jaGFubmVsLm8gbWFuYV9lbi5vIG1hbmFfZXRodG9vbC5vIG1hbmFfYnBmLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDM5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgU3l6a2FsbGVyJiMzOTtzIE1BTkEgRnV6emluZyBDYXBhYmlsaXRpZXMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBmdXp6aW5nIHRoZSBNQU5BIGRldmljZSB3aXRoIHN5emthbGxlci4gRmlyc3QgdGhpbmdzIGZpcnN0LCBpcyBNQU5BIGEgUENJIGRldmljZT8gWWVzLCBpdCBpcy4gTm93LCBjYW4gc3l6a2FsbGVyIGhhbmRsZSB0aGF0PyBXZWxsLCBpdCAqZG9lcyogaGF2ZSBzb21lIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcywgYnV0IGZyb20gbXkgZXhwZXJpZW5jZSwgaXQmIzM5O3MgcHJldHR5IGxpbWl0ZWQgYW5kIGdlbmVyYWxseSByZXF1aXJlcyB2ZXJ5IHNwZWNpZmljIGRlc2NyaXB0aW9ucyB0byBiZSBlZmZlY3RpdmUuIFRoaXMgaXMga2V5LiBIb2xkIG9uIGEgc2Vjb25kLi4uIGRvZXMgc3l6a2FsbGVyIGV2ZW4gKmhhdmUqIGEgTUFOQSBlbXVsYXRvcj8gTm8sIGl0IGRvZXNuJiMzOTt0LiBUaGF0IG1ha2VzIHRoaW5ncyBtb3JlIGNvbXBsaWNhdGVkLgoKU28sIHN5emthbGxlciAqY2FuKiB0ZWNobmljYWxseSBmdXp6IFBDSSBkZXZpY2VzIHVzaW5nIHZQQ0ksIGJ1dCBvbmx5IGlmIHRoZSBkZXZpY2UmIzM5O3MgYmVoYXZpb3IgaXMgZXhwbGljaXRseSBkZXNjcmliZWQgaW4gdGhvc2UgZGVzY3JpcHRpb25zLiBXaXRob3V0IHRob3NlIGRlc2NyaXB0aW9ucywgaXQmIzM5O3MgcHJldHR5IG11Y2gganVzdCByYW5kb20gZnV6emluZyBvZiB0aGUgUENJIGNvbmZpZyBzcGFjZS4gQW5kIGZyb20gd2hhdCBJJiMzOTt2ZSBzZWVuLCB0aGF0IGFsbW9zdCBuZXZlciBnZXRzIG1lIGRlZXAgZW5vdWdoIGludG8gdGhlIGRyaXZlciBsb2dpYywgbm90IG5lYXJseSBlbm91Z2ggdG8gaGl0IHNvbWV0aGluZyBpbXBvcnRhbnQgbGlrZSBgbWFuYV9jcmVhdGVfcnhxYC4KCkJ1dCB3YWl04oCmIEkmIzM5O20gcmVtZW1iZXJpbmcgdGhhdCBgbWFuYV9jcmVhdGVfcnhxYCBnZXRzIGNhbGxlZCBkdXJpbmcgdGhlIGRldmljZSYjMzk7cyBpbml0aWFsaXphdGlvbi4gQWhhISBJZiB0aGUgUENJIHByb2JlIHN1Y2NlZWRzLCB0aGF0ICpjb3VsZCogbWVhbiBpdCYjMzk7cyBjYWxsZWQuIFRoaXMgaXMgYSBwb3NzaWJpbGl0eS4gTm93LCBsZXQgbWUgY2hlY2sgaWYgYG1hbmFfcHJvYmVgIGRvZXMsIGluIGZhY3QsIGNhbGwgYG1hbmFfY3JlYXRlX3J4cWAuIFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIGxpbmsgSSBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDM6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFuYV9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYz0xNzc9c3RhdGljIGludCBtYW5hX2dkX3F1ZXJ5X21heF9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjYxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6MjYyOlx0LyogQ2FwIHRvIHRoZSBzYW1lIGxpbWl0IHVzZWQgYnkgbWFuYV9wcm9iZSgpIGZvciBwb3J0IGluc3RhbnRpYXRpb24sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNjMtXHQgKiBzbyBNU0ktWCBhbmQgcXVldWUgYnVkZ2V0aW5nIG1hdGNoZXMgdGhlIGFjdHVhbCBwb3J0IGNvdW50LlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jPTIzMDI9c3RhdGljIGludCBtYW5hX2dkX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTIzNTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzoyMzU4Olx0ZXJyID0gbWFuYV9wcm9iZShcdTAwMjZnYy1cdTAwM2VtYW5hLCBmYWxzZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yMzU5LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yMzk2LVx0ICogSGFyZHdhcmUgY291bGQgYmUgaW4gcmVjb3ZlcnkgbW9kZSBhbmQgdGhlIEhXQyByZXR1cm5zIFRJTUVET1VUIG9yXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzoyMzk3Olx0ICogRVBST1RPIGZyb20gbWFuYV9nZF9zZXR1cCgpLCBtYW5hX3Byb2JlKCkgb3IgbWFuYV9yZG1hX3Byb2JlKCksIG9yXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yMzk4LVx0ICogd2UgcmVjZWl2ZWQgYSBoYXJkd2FyZSByZXNldCBldmVudCBvdmVyIEhXQyBpbnRlcnJ1cHQuIEluIHRoaXMgY2FzZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYz0yNDYwPWludCBtYW5hX2dkX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNDY4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6MjQ2OTpcdGVyciA9IG1hbmFfcHJvYmUoXHUwMDI2Z2MtXHUwMDNlbWFuYSwgdHJ1ZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNDcwLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM9MzUyMz1pbnQgbWFuYV9kZXRhY2goc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGJvb2wgZnJvbV9jbG9zZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMzU1OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzozNTYwOnN0YXRpYyBpbnQgbWFuYV9wcm9iZV9wb3J0KHN0cnVjdCBtYW5hX2NvbnRleHQgKmFjLCBpbnQgcG9ydF9pZHgsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMzU2MS1cdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqKm5kZXZfc3RvcmFnZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM9Mzc5MD1zdGF0aWMgdm9pZCBtYW5hX2dmX3N0YXRzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTM4MTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM6MzgxMzppbnQgbWFuYV9wcm9iZShzdHJ1Y3QgZ2RtYV9kZXYgKmdkLCBib29sIHJlc3VtaW5nKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTM4MTQte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0zODg3LVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhYy1cdTAwM2VudW1fcG9ydHM7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM6Mzg4ODpcdFx0XHRlcnIgPSBtYW5hX3Byb2JlX3BvcnQoYWMsIGksIFx1MDAyNmFjLVx1MDAzZXBvcnRzW2ldKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0zODg5LVx0XHRcdC8qIExvZyB0aGUgcG9ydCBmb3Igd2hpY2ggdGhlIHByb2JlIGZhaWxlZCwgc3RvcCBwcm9iaW5nXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg4OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZnJhbWVkIGFzIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBtYW5hYCBOZXR3b3JrIFN0YWNrIEZsb3cqKgoKQWxyaWdodCwgSSYjMzk7bSB0cmFjaW5nIHRocm91Z2ggdGhlIGBtYW5hX3Byb2JlYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBgbWFuYV9wcm9iZWAgaXMgbWFraW5nIGEgY2FsbCB0byBgbWFuYV9wcm9iZV9wb3J0YC4gTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBJJiMzOTttIHRyeWluZyB0byBhbnN3ZXIgaXMgd2hhdCBoYXBwZW5zICphZnRlciogdGhhdC4gRG9lcyBgbWFuYV9wcm9iZV9wb3J0YCBjb250aW51ZSBieSBjYWxsaW5nIGBtYW5hX2F0dGFjaGAsIHdoaWNoIEkgc3VzcGVjdCB3b3VsZCBiZSB0aGUgcGF0aCBmb3IgZXN0YWJsaXNoaW5nIHRoZSBwb3J0IHdpdGhpbiB0aGUgYG1hbmFgIHN1YnN5c3RlbSwgb3IgaXMgaXQgZ29pbmcgZG93biB0aGUgcXVldWUgc2V0dXAgcm91dGUgd2l0aCBgbWFuYV9hZGRfcnhfcXVldWVzYD8gVGhlIGRpc3RpbmN0aW9uIGhlcmUgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHBvcnQgaW5pdGlhbGl6YXRpb24gcGF0aC4gQXJlIHdlIGluaXRpYWxseSBhdHRhY2hpbmcgdGhlIHBvcnQmIzM5O3MgcmVzb3VyY2VzLCBvciBpcyB0aGUgcXVldWUgc2V0dXAgYmVpbmcgaGFuZGxlZCBmaXJzdD8gRGVwZW5kaW5nIG9uIGhvdyB0aGUgc3lzdGVtIGlzIGRlc2lnbmVkLCB0aGlzIG1heSBiZSBhbiBpbXBvcnRhbnQgZGF0YSBwYXRoIHRvIGFuYWx5emUgdG8gZmluZCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGNhbGwgY2hhaW4gZnJvbSB0aGlzIHBvaW50IHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHBvcnQgaW5pdGlhbGl6YXRpb24gZmxvdyBpbiB0aGlzIGBtYW5hYCBmcmFtZXdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAzOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hbmFfYWRkX3J4X3F1ZXVlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM9MjkzOD1zdGF0aWMgdm9pZCBtYW5hX2NyZWF0ZV9yeHFfZGVidWdmcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgaW50IGlkeClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMjk1OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzoyOTYwOnN0YXRpYyBpbnQgbWFuYV9hZGRfcnhfcXVldWVzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTI5NjEtXHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jPTMzMzI9aW50IG1hbmFfYWxsb2NfcXVldWVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0zMzY2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jOjMzNjc6XHRlcnIgPSBtYW5hX2FkZF9yeF9xdWV1ZXMoYXBjLCBuZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0zMzY4LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ5MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6CgoqKkRpZ2dpbmcgaW50byB0aGUgYG1hbmFgIGFsbG9jYXRpb24qKgoKT2theSwgc28gSSBzZWUgYG1hbmFfYWxsb2NfcXVldWVzYCBpcyBjYWxsaW5nIGBtYW5hX2FkZF9yeF9xdWV1ZXNgLiBUaGF0JiMzOTtzIHN0YW5kYXJkIHByYWN0aWNlLCB0aGUgYWxsb2NhdGlvbiBmdW5jdGlvbiB1c3VhbGx5IGluaXRpYWxpemVzIHNvbWUgdGhpbmdzIGJlZm9yZSBhZGRpbmcgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMgYmV0dGVyLgoKQnV0IGhvbGQgb24uLi4gYmVmb3JlIEkgZGl2ZSBpbnRvIHRoZSBpbnRlcm5hbHMgb2YgYG1hbmFfYWRkX3J4X3F1ZXVlc2AsIG15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyAqd2hvKiBpcyBjYWxsaW5nIGBtYW5hX2FsbG9jX3F1ZXVlc2A/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyAqY3JpdGljYWwqIGZvciBncmFzcGluZyB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBmdW5jdGlvbiBjYWxsIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIHdob2xlIGFsbG9jYXRpb24gcHJvY2VzcyBiZWdpbnMuIFdoYXQgc3Vic3lzdGVtIGlzIHRyaWdnZXJpbmcgdGhpcyBhbGxvY2F0aW9uPyBJcyBpdCBvbiBkZXZpY2UgaW5pdCwgb24gbmV0d29yayBldmVudCwgZXRjLiBDb250ZXh0IGlzIGtleSB0byB1bmRlcnN0YW5kIHdoYXQgaXMgaGFwcGVuaW5nIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hbmFfYWxsb2NfcXVldWVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYz03Mz1zdGF0aWMgaW50IG1hbmFfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtNzYtXHRpbnQgZXJyO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jOjc3Olx0ZXJyID0gbWFuYV9hbGxvY19xdWV1ZXMobmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtNzgtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jPTMyNzA9c3RhdGljIGludCBtYW5hX2luaXRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMzMzMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzozMzMyOmludCBtYW5hX2FsbG9jX3F1ZXVlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0zMzMzLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM9MzQxMD1pbnQgbWFuYV9hdHRhY2goc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTM0MjEtXHRpZiAoYXBjLVx1MDAzZXBvcnRfc3Rfc2F2ZSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jOjM0MjI6XHRcdGVyciA9IG1hbmFfYWxsb2NfcXVldWVzKG5kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTM0MjMtXHRcdGlmIChlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE0MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBNQU5BIGFuZCBTeXprYWxsZXIgQ29tcGF0aWJpbGl0eSoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24gb2Ygd2hhdCBJJiMzOTttIHRoaW5raW5nIHJlZ2FyZGluZyBNQU5BIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggU3l6a2FsbGVyLiBFc3NlbnRpYWxseSwgYG1hbmFfb3BlbmAgaXMgdGhlIGtleSBlbnRyeSBwb2ludDsgaXQgdHJpZ2dlcnMgYG1hbmFfYWxsb2NfcXVldWVzYCwgd2hpY2ggZXZlbnR1YWxseSBsZWFkcyB0byB0aGUgY3JlYXRpb24gb2YgcmVjZWl2ZSBxdWV1ZXMgdGhyb3VnaCBgbWFuYV9hZGRfcnhfcXVldWVzYCBhbmQgYG1hbmFfY3JlYXRlX3J4cWAuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIFN5emthbGxlciwgaW4gaXRzIGN1cnJlbnQgc2V0dXAsIGFjdHVhbGx5IHJlZ2lzdGVycyB0aGlzIGRldmljZS4KCkNvbnNpZGVyaW5nIGhvdyBTeXprYWxsZXIgb3BlcmF0ZXMg4oCTIGluIFFFTVUgb3IgR0NFIHByaW1hcmlseSDigJMgSSBpbW1lZGlhdGVseSBoaXQgYSByb2FkYmxvY2suIEdDRSByZWxpZXMgb24gdmlydGlvLW5ldCBvciBndmUsIGFuZCB3aGlsZSBBenVyZSB1c2VzIE1BTkEsIHRoZSBlbnZpcm9ubWVudHMgU3l6a2FsbGVyIHR5cGljYWxseSBydW5zIGluIGRvbiYjMzk7dCBuYXRpdmVseSBpbmNsdWRlIHRoaXMgaGFyZHdhcmUuIFRoZSBpbXBsaWNhdGlvbiBpcywgc3RyYWlnaHQgb3V0IG9mIHRoZSBib3gsIFN5emthbGxlciBjYW4mIzM5O3QgJiMzNDtzZWUmIzM0OyBNQU5BLgoKVGhlIG5hdHVyYWwgZm9sbG93LXVwIGlzLCBkb2VzIFN5emthbGxlciAqZW11bGF0ZSogTUFOQT8gV2Uga25vdyBpdCBoYXMgbWVjaGFuaXNtcyBmb3IgVVNCICh2aGNpKSBhbmQgV2ktRmkgKG1hYzgwMjExX2h3c2ltKSwgc28gdGhlcmUmIzM5O3MgcHJlY2VkZW50LiBCdXQgYSBxdWljayBjaGVjayByZXZlYWxzIG5vIGV4cGxpY2l0IGVtdWxhdGlvbiBmb3IgTUFOQS4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGlzc3VlLgoKSG93ZXZlciwgdGhlcmUmIzM5O3MgYSBnbGltbWVyIG9mIGhvcGU6IFN5emthbGxlciAqZG9lcyogaGF2ZSBhIFBDSSBmdXp6ZXIsIHdoaWNoIGlzIGRlc2lnbmVkIHRvIGluamVjdCBQQ0kgZGV2aWNlcy4gQ291bGQgdGhpcyBiZSB0aGUgc29sdXRpb24/IE1heWJlLiBCdXQgZXZlbiBpZiBpdCAqY2FuKiBpbmplY3QgYSBQQ0kgZGV2aWNlIHJlcHJlc2VudGluZyBNQU5BLCB0aGF0JiMzOTtzIG9ubHkgdGhlIGZpcnN0IHN0ZXAuIEZvciBgbWFuYV9wcm9iZWAgdG8gc3VjY2VlZCwgdGhlIGVtdWxhdGVkIGRldmljZSB3b3VsZCBuZWVkIHRvIHJlc3BvbmQgdG8gc3BlY2lmaWMgTU1JTyByZWFkcyBhbmQgd3JpdGVzIGluIGEgd2F5IHRoYXQgc2F0aXNmaWVzIHRoZSBkcml2ZXIuCgpTbyB0aGUgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGZvciBgbWFuYV9wcm9iZWAgYW5kIGBtYW5hX2dkX3Byb2JlYCB0byB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGF0IGNvbmRpdGlvbnMgbmVlZCB0byBiZSBtZXQsIHdoYXQgcmVnaXN0ZXJzIG5lZWQgdG8gYmUgcmVhZCwgYW5kIHdoYXQgdmFsdWVzIGFyZSBleHBlY3RlZCBpbiB0aGUgd3JpdGVzLiBUaGlzIHdpbGwgcmV2ZWFsIHRoZSBmZWFzaWJpbGl0eSBvZiB1c2luZyB0aGUgUENJIGZ1enplciB0byB0cmljayB0aGUgZHJpdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYW5hX2dkX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jPTIyOTc9c3RhdGljIGJvb2wgbWFuYV9pc19wZih1bnNpZ25lZCBzaG9ydCBkZXZfaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjMwMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jOjIzMDI6c3RhdGljIGludCBtYW5hX2dkX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjMwMy17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9MjUwNj1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFuYV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjUwOC1cdC5pZF90YWJsZVx0PSBtYW5hX2lkX3RhYmxlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6MjUwOTpcdC5wcm9iZVx0XHQ9IG1hbmFfZ2RfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNTEwLVx0LnJlbW92ZVx0XHQ9IG1hbmFfZ2RfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTU0CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyBgbWFuYV9nZF9wcm9iZWAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gaXQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBqdXN0IGp1bXAgcmlnaHQgaW4gYW5kIHNlZSB3aGF0IGBtYW5hX2dkX3Byb2JlYCBpcyBhY3R1YWxseSBkb2luZy4gTm8gbmVlZCBmb3IgZXhjZXNzaXZlIHRoZW9yaXppbmcgYXQgdGhpcyBwb2ludC4gR290dGEgc2VlIHRoZSBjb2RlLCBwb2tlIGFyb3VuZCwgdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24uIFdoYXQgZXhhY3RseSBpcyB0aGlzIHByb2JlIGRlc2lnbmVkIHRvIGFjaGlldmU/IFdoYXQgZGF0YSBpcyBpdCBpbnRlcmFjdGluZyB3aXRoPyBMZXQmIzM5O3MgZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb3JlIHB1cnBvc2UgYmVmb3JlIGdldHRpbmcgaW50byBkZWVwZXIgYW5hbHlzaXMuIExldCYjMzk7cyBzZWUgaG93IGl0IG9wZXJhdGVzIGFuZCBnbyBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjMwMiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjMwMjpcdHN0YXRpYyBpbnQgbWFuYV9nZF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbjIzMDM6XHR7XG4yMzA0Olx0XHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYztcbjIzMDU6XHRcdHZvaWQgX19pb21lbSAqYmFyMF92YTtcbjIzMDY6XHRcdGludCBiYXIgPSAwO1xuMjMwNzpcdFx0aW50IGVycjtcbjIzMDg6XHRcbjIzMDk6XHRcdC8qIEVhY2ggcG9ydCBoYXMgMiBDUXMsIGVhY2ggQ1EgaGFzIGF0IG1vc3QgMSBFUUUgYXQgYSB0aW1lICovXG4yMzEwOlx0XHRCVUlMRF9CVUdfT04oMiAqIE1BWF9QT1JUU19JTl9NQU5BX0RFViAqIEdETUFfRVFFX1NJWkUgXHUwMDNlIEVRX1NJWkUpO1xuMjMxMTpcdFxuMjMxMjpcdFx0ZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7XG4yMzEzOlx0XHRpZiAoZXJyKSB7XG4yMzE0Olx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byBlbmFibGUgcGNpIGRldmljZSAoZXJyPSVkKVxcblwmIzM0OywgZXJyKTtcbjIzMTU6XHRcdFx0cmV0dXJuIC1FTlhJTztcbjIzMTY6XHRcdH1cbjIzMTc6XHRcbjIzMTg6XHRcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xuMjMxOTpcdFxuMjMyMDpcdFx0ZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBcJiMzNDttYW5hXCYjMzQ7KTtcbjIzMjE6XHRcdGlmIChlcnIpXG4yMzIyOlx0XHRcdGdvdG8gZGlzYWJsZV9kZXY7XG4yMzIzOlx0XG4yMzI0Olx0XHRlcnIgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBETUFfQklUX01BU0soNjQpKTtcbjIzMjU6XHRcdGlmIChlcnIpIHtcbjIzMjY6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7RE1BIHNldCBtYXNrIGZhaWxlZDogJWRcXG5cJiMzNDssIGVycik7XG4yMzI3Olx0XHRcdGdvdG8gcmVsZWFzZV9yZWdpb247XG4yMzI4Olx0XHR9XG4yMzI5Olx0XHRkbWFfc2V0X21heF9zZWdfc2l6ZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgVUlOVF9NQVgpO1xuMjMzMDpcdFxuMjMzMTpcdFx0ZXJyID0gLUVOT01FTTtcbjIzMzI6XHRcdGdjID0gdnphbGxvYyhzaXplb2YoKmdjKSk7XG4yMzMzOlx0XHRpZiAoIWdjKVxuMjMzNDpcdFx0XHRnb3RvIHJlbGVhc2VfcmVnaW9uO1xuMjMzNTpcdFxuMjMzNjpcdFx0bXV0ZXhfaW5pdChcdTAwMjZnYy1cdTAwM2VlcV90ZXN0X2V2ZW50X211dGV4KTtcbjIzMzc6XHRcdG11dGV4X2luaXQoXHUwMDI2Z2MtXHUwMDNlZ2ljX211dGV4KTtcbjIzMzg6XHRcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBnYyk7XG4yMzM5Olx0XHRnYy1cdTAwM2ViYXIwX3BhID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApO1xuMjM0MDpcdFx0Z2MtXHUwMDNlYmFyMF9zaXplID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTtcbjIzNDE6XHRcbjIzNDI6XHRcdGJhcjBfdmEgPSBwY2lfaW9tYXAocGRldiwgYmFyLCAwKTtcbjIzNDM6XHRcdGlmICghYmFyMF92YSlcbjIzNDQ6XHRcdFx0Z290byBmcmVlX2djO1xuMjM0NTpcdFxuMjM0NjpcdFx0Z2MtXHUwMDNlbnVtYV9ub2RlID0gZGV2X3RvX25vZGUoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuMjM0NzpcdFx0Z2MtXHUwMDNlaXNfcGYgPSBtYW5hX2lzX3BmKHBkZXYtXHUwMDNlZGV2aWNlKTtcbjIzNDg6XHRcdGdjLVx1MDAzZWlzX3BmMiA9IChwZGV2LVx1MDAzZWRldmljZSA9PSBNQU5BX1BGMl9ERVZJQ0VfSUQpO1xuMjM0OTpcdFxuMjM1MDpcdFx0Z2MtXHUwMDNlYmFyMF92YSA9IGJhcjBfdmE7XG4yMzUxOlx0XHRnYy1cdTAwM2VkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbjIzNTI6XHRcdHhhX2luaXQoXHUwMDI2Z2MtXHUwMDNlaXJxX2NvbnRleHRzKTtcbjIzNTM6XHRcbjIzNTQ6XHRcdGVyciA9IG1hbmFfZ2Rfc2V0dXAocGRldik7XG4yMzU1Olx0XHRpZiAoZXJyKVxuMjM1NjpcdFx0XHRnb3RvIHVubWFwX2JhcjtcbjIzNTc6XHRcbjIzNTg6XHRcdGVyciA9IG1hbmFfcHJvYmUoXHUwMDI2Z2MtXHUwMDNlbWFuYSwgZmFsc2UpO1xuMjM1OTpcdFx0aWYgKGVycilcbjIzNjA6XHRcdFx0Z290byBjbGVhbnVwX2dkO1xuMjM2MTpcdFxuMjM2MjpcdFx0ZXJyID0gbWFuYV9yZG1hX3Byb2JlKFx1MDAyNmdjLVx1MDAzZW1hbmFfaWIpO1xuMjM2MzpcdFx0aWYgKGVycilcbjIzNjQ6XHRcdFx0Z290byBjbGVhbnVwX21hbmE7XG4yMzY1Olx0XG4yMzY2Olx0XHQvKlxuMjM2NzpcdFx0ICogSWYgYSBoYXJkd2FyZSByZXNldCBldmVudCBoYXMgb2NjdXJyZWQgb3ZlciBIV0MgZHVyaW5nIHByb2JlLFxuMjM2ODpcdFx0ICogcm9sbGJhY2sgYW5kIHBlcmZvcm0gaGFyZHdhcmUgcmVzZXQgcHJvY2VkdXJlLlxuMjM2OTpcdFx0ICovXG4yMzcwOlx0XHRpZiAodGVzdF9hbmRfc2V0X2JpdChHQ19QUk9CRV9TVUNDRUVERUQsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKSkge1xuMjM3MTpcdFx0XHRlcnIgPSAtRVBST1RPO1xuMjM3MjpcdFx0XHRnb3RvIGNsZWFudXBfbWFuYV9yZG1hO1xuMjM3MzpcdFx0fVxuMjM3NDpcdFxuMjM3NTpcdFx0cmV0dXJuIDA7XG4yMzc2Olx0XG4yMzc3Olx0Y2xlYW51cF9tYW5hX3JkbWE6XG4yMzc4Olx0XHRtYW5hX3JkbWFfcmVtb3ZlKFx1MDAyNmdjLVx1MDAzZW1hbmFfaWIpO1xuMjM3OTpcdGNsZWFudXBfbWFuYTpcbjIzODA6XHRcdG1hbmFfcmVtb3ZlKFx1MDAyNmdjLVx1MDAzZW1hbmEsIGZhbHNlKTtcbjIzODE6XHRjbGVhbnVwX2dkOlxuMjM4MjpcdFx0bWFuYV9nZF9jbGVhbnVwX2RldmljZShwZGV2KTtcbjIzODM6XHR1bm1hcF9iYXI6XG4yMzg0Olx0XHR4YV9kZXN0cm95KFx1MDAyNmdjLVx1MDAzZWlycV9jb250ZXh0cyk7XG4yMzg1Olx0XHRwY2lfaW91bm1hcChwZGV2LCBiYXIwX3ZhKTtcbjIzODY6XHRmcmVlX2djOlxuMjM4NzpcdFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpO1xuMjM4ODpcdFx0dmZyZWUoZ2MpO1xuMjM4OTpcdHJlbGVhc2VfcmVnaW9uOlxuMjM5MDpcdFx0cGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTtcbjIzOTE6XHRkaXNhYmxlX2RldjpcbjIzOTI6XHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbjIzOTM6XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O2dkbWEgcHJvYmUgZmFpbGVkOiBlcnIgPSAlZFxcblwmIzM0OywgZXJyKTtcbjIzOTQ6XHRcbjIzOTU6XHRcdC8qXG4yMzk2Olx0XHQgKiBIYXJkd2FyZSBjb3VsZCBiZSBpbiByZWNvdmVyeSBtb2RlIGFuZCB0aGUgSFdDIHJldHVybnMgVElNRURPVVQgb3JcbjIzOTc6XHRcdCAqIEVQUk9UTyBmcm9tIG1hbmFfZ2Rfc2V0dXAoKSwgbWFuYV9wcm9iZSgpIG9yIG1hbmFfcmRtYV9wcm9iZSgpLCBvclxuMjM5ODpcdFx0ICogd2UgcmVjZWl2ZWQgYSBoYXJkd2FyZSByZXNldCBldmVudCBvdmVyIEhXQyBpbnRlcnJ1cHQuIEluIHRoaXMgY2FzZSxcbjIzOTk6XHRcdCAqIHBlcmZvcm0gdGhlIGRldmljZSByZWNvdmVyeSBwcm9jZWR1cmUgYWZ0ZXIgTUFOQV9TRVJWSUNFX1BFUklPRFxuMjQwMDpcdFx0ICogc2Vjb25kcy5cbjI0MDE6XHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTIzCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBNYW5hIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIGBtYW5hX2dkX3NldHVwYCBnZXRzIGNhbGxlZCAqYmVmb3JlKiBgbWFuYV9wcm9iZWAuIFRoYXQmIzM5O3MgdGhlIGtleS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBwcmVwYXJhdG9yeSBzdGVwcyBhcmUgYmVpbmcgdGFrZW4gYmVmb3JlIHRoZSBhY3R1YWwgcHJvYmluZyBwcm9jZXNzIGJlZ2lucy4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW4gdGhpcyBzZXR1cCBmdW5jdGlvbiBpcyBsYXlpbmcgdGhlIGdyb3VuZHdvcmsgZm9yIHRoZSBwcm9iZS4gSSBuZWVkIHRvIGRpdmUgaW50byBgbWFuYV9nZF9zZXR1cGAgYW5kIHF1aWNrbHkgaWRlbnRpZnkgaXRzIHB1cnBvc2UuIElzIGl0IGFsbG9jYXRpbmcgcmVzb3VyY2VzPyBJbml0aWFsaXppbmcgZGF0YSBzdHJ1Y3R1cmVzPyBDb25maWd1cmluZyBoYXJkd2FyZT8gRGV0ZXJtaW5pbmcgdGhlIGNvbnRleHQmIzM5O3MgcmVhZGluZXNzIGZvciBwcm9iaW5nPyBNeSBhc3N1bXB0aW9uIGlzIHRoYXQgaXQmIzM5O3MgZG9pbmcgb25lIG9yIGEgY29tYmluYXRpb24gb2YgdGhlc2UgdGhpbmdzIHRvIGZhY2lsaXRhdGUgYSBzdWNjZXNzZnVsIHByb2JlLiBHb3R0YSBwaW5wb2ludCB0aGUgc3BlY2lmaWMgYWN0aW9ucyB0YWtlbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxMDA6XHRcdGNwdXNfcmVhZF91bmxvY2soKTtcbjIxMDE6XHRcdGtmcmVlKHN0YXJ0X2lycXMpO1xuMjEwMjpcdFx0cmV0dXJuIDA7XG4yMTAzOlx0XG4yMTA0Olx0ZnJlZV9pcnE6XG4yMTA1Olx0XHRmb3IgKGkgLT0gMTsgaSBcdTAwM2U9IDA7IGktLSlcbjIxMDY6XHRcdFx0bWFuYV9nZF9wdXRfZ2ljKGdjLCBmYWxzZSwgaSk7XG4yMTA3Olx0XG4yMTA4Olx0XHRrZnJlZShzdGFydF9pcnFzKTtcbjIxMDk6XHRcdHJldHVybiBlcnI7XG4yMTEwOlx0fVxuMjExMTpcdFxuMjExMjpcdHN0YXRpYyBpbnQgbWFuYV9nZF9zZXR1cF9od2NfaXJxcyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbjIxMTM6XHR7XG4yMTE0Olx0XHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbjIxMTU6XHRcdHVuc2lnbmVkIGludCBtYXhfaXJxcywgbWluX2lycXM7XG4yMTE2Olx0XHRpbnQgbnZlYywgZXJyO1xuMjExNzpcdFxuMjExODpcdFx0aWYgKHBjaV9tc2l4X2Nhbl9hbGxvY19keW4ocGRldikpIHtcbjIxMTk6XHRcdFx0bWF4X2lycXMgPSAxO1xuMjEyMDpcdFx0XHRtaW5faXJxcyA9IDE7XG4yMTIxOlx0XHR9IGVsc2Uge1xuMjEyMjpcdFx0XHQvKiBOZWVkIDEgaW50ZXJydXB0IGZvciBIV0MgKi9cbjIxMjM6XHRcdFx0bWF4X2lycXMgPSBtaW4obnVtX29ubGluZV9jcHVzKCksIE1BTkFfTUFYX05VTV9RVUVVRVMpICYjNDM7IDE7XG4yMTI0Olx0XHRcdG1pbl9pcnFzID0gMjtcbjIxMjU6XHRcdFx0Z2MtXHUwMDNlbXNpX3NoYXJpbmcgPSB0cnVlO1xuMjEyNjpcdFx0fVxuMjEyNzpcdFxuMjEyODpcdFx0bnZlYyA9IHBjaV9hbGxvY19pcnFfdmVjdG9ycyhwZGV2LCBtaW5faXJxcywgbWF4X2lycXMsIFBDSV9JUlFfTVNJWCk7XG4yMTI5Olx0XHRpZiAobnZlYyBcdTAwM2MgMClcbjIxMzA6XHRcdFx0cmV0dXJuIG52ZWM7XG4yMTMxOlx0XG4yMTMyOlx0XHRlcnIgPSBtYW5hX2dkX3NldHVwX2lycXMocGRldiwgbnZlYyk7XG4yMTMzOlx0XHRpZiAoZXJyKSB7XG4yMTM0Olx0XHRcdHBjaV9mcmVlX2lycV92ZWN0b3JzKHBkZXYpO1xuMjEzNTpcdFx0XHRyZXR1cm4gZXJyO1xuMjEzNjpcdFx0fVxuMjEzNzpcdFxuMjEzODpcdFx0Z2MtXHUwMDNlbnVtX21zaXhfdXNhYmxlID0gbnZlYztcbjIxMzk6XHRcdGdjLVx1MDAzZW1heF9udW1fbXNpeCA9IG52ZWM7XG4yMTQwOlx0XG4yMTQxOlx0XHRyZXR1cm4gMDtcbjIxNDI6XHR9XG4yMTQzOlx0XG4yMTQ0Olx0c3RhdGljIGludCBtYW5hX2dkX3NldHVwX3JlbWFpbmluZ19pcnFzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuMjE0NTpcdHtcbjIxNDY6XHRcdHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuMjE0NzpcdFx0c3RydWN0IG1zaV9tYXAgaXJxX21hcDtcbjIxNDg6XHRcdGludCBtYXhfaXJxcywgaSwgZXJyO1xuMjE0OTpcdFxuMjE1MDpcdFx0aWYgKCFwY2lfbXNpeF9jYW5fYWxsb2NfZHluKHBkZXYpKVxuMjE1MTpcdFx0XHQvKiByZW1haW4gaXJxcyBhcmUgYWxyZWFkeSBhbGxvY2F0ZWQgd2l0aCBIV0MgSVJRICovXG4yMTUyOlx0XHRcdHJldHVybiAwO1xuMjE1MzpcdFxuMjE1NDpcdFx0LyogYWxsb2NhdGUgb25seSByZW1haW5pbmcgSVJRcyovXG4yMTU1Olx0XHRtYXhfaXJxcyA9IGdjLVx1MDAzZW51bV9tc2l4X3VzYWJsZSAtIDE7XG4yMTU2Olx0XG4yMTU3Olx0XHRmb3IgKGkgPSAxOyBpIFx1MDAzYz0gbWF4X2lycXM7IGkmIzQzOyYjNDM7KSB7XG4yMTU4Olx0XHRcdGlycV9tYXAgPSBwY2lfbXNpeF9hbGxvY19pcnFfYXQocGRldiwgaSwgTlVMTCk7XG4yMTU5Olx0XHRcdGlmICghaXJxX21hcC52aXJxKSB7XG4yMTYwOlx0XHRcdFx0ZXJyID0gaXJxX21hcC5pbmRleDtcbjIxNjE6XHRcdFx0XHQvKiBjYWxsZXIgd2lsbCBoYW5kbGUgY2xlYW5pbmcgdXAgYWxsIGFsbG9jYXRlZFxuMjE2MjpcdFx0XHRcdCAqIGlycXMsIGFmdGVyIEhXQyBpcyBkZXN0cm95ZWRcbjIxNjM6XHRcdFx0XHQgKi9cbjIxNjQ6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMjE2NTpcdFx0XHR9XG4yMTY2Olx0XHR9XG4yMTY3Olx0XG4yMTY4Olx0XHRlcnIgPSBtYW5hX2dkX3NldHVwX2R5bl9pcnFzKHBkZXYsIG1heF9pcnFzKTtcbjIxNjk6XHRcdGlmIChlcnIpXG4yMTcwOlx0XHRcdHJldHVybiBlcnI7XG4yMTcxOlx0XG4yMTcyOlx0XHRnYy1cdTAwM2VtYXhfbnVtX21zaXggPSBnYy1cdTAwM2VtYXhfbnVtX21zaXggJiM0MzsgbWF4X2lycXM7XG4yMTczOlx0XG4yMTc0Olx0XHRyZXR1cm4gMDtcbjIxNzU6XHR9XG4yMTc2Olx0XG4yMTc3Olx0c3RhdGljIHZvaWQgbWFuYV9nZF9yZW1vdmVfaXJxcyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbjIxNzg6XHR7XG4yMTc5Olx0XHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbjIxODA6XHRcdGludCBpO1xuMjE4MTpcdFxuMjE4MjpcdFx0aWYgKGdjLVx1MDAzZW1heF9udW1fbXNpeCBcdTAwM2MgMSlcbjIxODM6XHRcdFx0cmV0dXJuO1xuMjE4NDpcdFxuMjE4NTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZ2MtXHUwMDNlbWF4X251bV9tc2l4OyBpJiM0MzsmIzQzOykge1xuMjE4NjpcdFx0XHRpZiAoIXhhX2xvYWQoXHUwMDI2Z2MtXHUwMDNlaXJxX2NvbnRleHRzLCBpKSlcbjIxODc6XHRcdFx0XHRjb250aW51ZTtcbjIxODg6XHRcbjIxODk6XHRcdFx0bWFuYV9nZF9wdXRfZ2ljKGdjLCBmYWxzZSwgaSk7XG4yMTkwOlx0XHR9XG4yMTkxOlx0XG4yMTkyOlx0XHRXQVJOX09OKCF4YV9lbXB0eShcdTAwMjZnYy1cdTAwM2VpcnFfY29udGV4dHMpKTtcbjIxOTM6XHRcbjIxOTQ6XHRcdHBjaV9mcmVlX2lycV92ZWN0b3JzKHBkZXYpO1xuMjE5NTpcdFxuMjE5NjpcdFx0Yml0bWFwX2ZyZWUoZ2MtXHUwMDNlbXNpX2JpdG1hcCk7XG4yMTk3Olx0XHRnYy1cdTAwM2Vtc2lfYml0bWFwID0gTlVMTDtcbjIxOTg6XHRcdGdjLVx1MDAzZW1heF9udW1fbXNpeCA9IDA7XG4yMTk5Olx0XHRnYy1cdTAwM2VudW1fbXNpeF91c2FibGUgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYzMQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgYG1hbmFfZ2Rfc2V0dXBgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBjb3JlIG9mIHRoaXMuIE15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGlubmVyIHdvcmtpbmdzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbWFuYV9nZF9zZXR1cGAgYW5kIHdoYXQgaXQgYWN0dWFsbHkgKmRvZXMqLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgZnVuY3Rpb25hbGl0eS4gV2hhdCBhcmUgaXRzIGNvbXBvbmVudHM/IFdoYXQgYXJlIGl0cyBkZXBlbmRlbmNpZXM/IFdoYXQgaXMgaXRzIHJvbGUgaW4gdGhlIGdyZWF0ZXIgc2NoZW1lPyBJIHdpbGwgYW5hbHl6ZSB0aGUgY29kZSBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMjAwOlx0fVxuMjIwMTpcdFxuMjIwMjpcdHN0YXRpYyBpbnQgbWFuYV9nZF9zZXR1cChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbjIyMDM6XHR7XG4yMjA0Olx0XHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbjIyMDU6XHRcdGludCBlcnI7XG4yMjA2Olx0XG4yMjA3Olx0XHRnYy1cdTAwM2VtYW5hX3BjaV9kZWJ1Z2ZzID0gZGVidWdmc19jcmVhdGVfZGlyKHBjaV9uYW1lKHBkZXYpLFxuMjIwODpcdFx0XHRcdFx0XHRcdCAgbWFuYV9kZWJ1Z2ZzX3Jvb3QpO1xuMjIwOTpcdFxuMjIxMDpcdFx0ZXJyID0gbWFuYV9nZF9pbml0X3JlZ2lzdGVycyhwZGV2KTtcbjIyMTE6XHRcdGlmIChlcnIpXG4yMjEyOlx0XHRcdGdvdG8gcmVtb3ZlX2RlYnVnZnM7XG4yMjEzOlx0XG4yMjE0Olx0XHRtYW5hX3NtY19pbml0KFx1MDAyNmdjLVx1MDAzZXNobV9jaGFubmVsLCBnYy1cdTAwM2VkZXYsIGdjLVx1MDAzZXNobV9iYXNlKTtcbjIyMTU6XHRcbjIyMTY6XHRcdGdjLVx1MDAzZXNlcnZpY2Vfd3EgPSBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZShcJiMzNDtnZG1hX3NlcnZpY2Vfd3FcJiMzNDssIDApO1xuMjIxNzpcdFx0aWYgKCFnYy1cdTAwM2VzZXJ2aWNlX3dxKSB7XG4yMjE4Olx0XHRcdGVyciA9IC1FTk9NRU07XG4yMjE5Olx0XHRcdGdvdG8gcmVtb3ZlX2RlYnVnZnM7XG4yMjIwOlx0XHR9XG4yMjIxOlx0XG4yMjIyOlx0XHRlcnIgPSBtYW5hX2dkX3NldHVwX2h3Y19pcnFzKHBkZXYpO1xuMjIyMzpcdFx0aWYgKGVycikge1xuMjIyNDpcdFx0XHRkZXZfZXJyKGdjLVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHNldHVwIElSUXMgZm9yIEhXQyBjcmVhdGlvbjogJWRcXG5cJiMzNDssXG4yMjI1Olx0XHRcdFx0ZXJyKTtcbjIyMjY6XHRcdFx0Z290byBmcmVlX3dvcmtxdWV1ZTtcbjIyMjc6XHRcdH1cbjIyMjg6XHRcbjIyMjk6XHRcdGVyciA9IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKGdjKTtcbjIyMzA6XHRcdGlmIChlcnIpXG4yMjMxOlx0XHRcdGdvdG8gcmVtb3ZlX2lycTtcbjIyMzI6XHRcbjIyMzM6XHRcdGVyciA9IG1hbmFfZ2RfdmVyaWZ5X3ZmX3ZlcnNpb24ocGRldik7XG4yMjM0Olx0XHRpZiAoZXJyKVxuMjIzNTpcdFx0XHRnb3RvIGRlc3Ryb3lfaHdjO1xuMjIzNjpcdFxuMjIzNzpcdFx0ZXJyID0gbWFuYV9nZF9kZXRlY3RfZGV2aWNlcyhwZGV2KTtcbjIyMzg6XHRcdGlmIChlcnIpXG4yMjM5Olx0XHRcdGdvdG8gZGVzdHJveV9od2M7XG4yMjQwOlx0XG4yMjQxOlx0XHRlcnIgPSBtYW5hX2dkX3F1ZXJ5X21heF9yZXNvdXJjZXMocGRldik7XG4yMjQyOlx0XHRpZiAoZXJyKVxuMjI0MzpcdFx0XHRnb3RvIGRlc3Ryb3lfaHdjO1xuMjI0NDpcdFxuMjI0NTpcdFx0ZXJyID0gbWFuYV9nZF9zZXR1cF9yZW1haW5pbmdfaXJxcyhwZGV2KTtcbjIyNDY6XHRcdGlmIChlcnIpIHtcbjIyNDc6XHRcdFx0ZGV2X2VycihnYy1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byBzZXR1cCByZW1haW5pbmcgSVJRczogJWRcJiMzNDssIGVycik7XG4yMjQ4Olx0XHRcdGdvdG8gZGVzdHJveV9od2M7XG4yMjQ5Olx0XHR9XG4yMjUwOlx0XG4yMjUxOlx0XHRpZiAoIWdjLVx1MDAzZW1zaV9zaGFyaW5nKSB7XG4yMjUyOlx0XHRcdGdjLVx1MDAzZW1zaV9iaXRtYXAgPSBiaXRtYXBfemFsbG9jKGdjLVx1MDAzZW51bV9tc2l4X3VzYWJsZSwgR0ZQX0tFUk5FTCk7XG4yMjUzOlx0XHRcdGlmICghZ2MtXHUwMDNlbXNpX2JpdG1hcCkge1xuMjI1NDpcdFx0XHRcdGVyciA9IC1FTk9NRU07XG4yMjU1Olx0XHRcdFx0Z290byBkZXN0cm95X2h3YztcbjIyNTY6XHRcdFx0fVxuMjI1NzpcdFx0XHQvKiBTZXQgYml0IGZvciBIV0MgKi9cbjIyNTg6XHRcdFx0c2V0X2JpdCgwLCBnYy1cdTAwM2Vtc2lfYml0bWFwKTtcbjIyNTk6XHRcdH1cbjIyNjA6XHRcbjIyNjE6XHRcdGRldl9kYmcoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O21hbmEgZ2RtYSBzZXR1cCBzdWNjZXNzZnVsXFxuXCYjMzQ7KTtcbjIyNjI6XHRcdHJldHVybiAwO1xuMjI2MzpcdFxuMjI2NDpcdGRlc3Ryb3lfaHdjOlxuMjI2NTpcdFx0bWFuYV9od2NfZGVzdHJveV9jaGFubmVsKGdjKTtcbjIyNjY6XHRyZW1vdmVfaXJxOlxuMjI2NzpcdFx0bWFuYV9nZF9yZW1vdmVfaXJxcyhwZGV2KTtcbjIyNjg6XHRmcmVlX3dvcmtxdWV1ZTpcbjIyNjk6XHRcdGRlc3Ryb3lfd29ya3F1ZXVlKGdjLVx1MDAzZXNlcnZpY2Vfd3EpO1xuMjI3MDpcdFx0Z2MtXHUwMDNlc2VydmljZV93cSA9IE5VTEw7XG4yMjcxOlx0cmVtb3ZlX2RlYnVnZnM6XG4yMjcyOlx0XHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoZ2MtXHUwMDNlbWFuYV9wY2lfZGVidWdmcyk7XG4yMjczOlx0XHRnYy1cdTAwM2VtYW5hX3BjaV9kZWJ1Z2ZzID0gTlVMTDtcbjIyNzQ6XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0OyVzIGZhaWxlZCAoZXJyb3IgJWQpXFxuXCYjMzQ7LCBfX2Z1bmNfXywgZXJyKTtcbjIyNzU6XHRcdHJldHVybiBlcnI7XG4yMjc2Olx0fVxuMjI3NzpcdFxuMjI3ODpcdHN0YXRpYyB2b2lkIG1hbmFfZ2RfY2xlYW51cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4yMjc5Olx0e1xuMjI4MDpcdFx0c3RydWN0IGdkbWFfY29udGV4dCAqZ2MgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4yMjgxOlx0XG4yMjgyOlx0XHRtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoZ2MpO1xuMjI4MzpcdFxuMjI4NDpcdFx0bWFuYV9nZF9yZW1vdmVfaXJxcyhwZGV2KTtcbjIyODU6XHRcbjIyODY6XHRcdGlmIChnYy1cdTAwM2VzZXJ2aWNlX3dxKSB7XG4yMjg3Olx0XHRcdGRlc3Ryb3lfd29ya3F1ZXVlKGdjLVx1MDAzZXNlcnZpY2Vfd3EpO1xuMjI4ODpcdFx0XHRnYy1cdTAwM2VzZXJ2aWNlX3dxID0gTlVMTDtcbjIyODk6XHRcdH1cbjIyOTA6XHRcbjIyOTE6XHRcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShnYy1cdTAwM2VtYW5hX3BjaV9kZWJ1Z2ZzKTtcbjIyOTI6XHRcdGdjLVx1MDAzZW1hbmFfcGNpX2RlYnVnZnMgPSBOVUxMO1xuMjI5MzpcdFxuMjI5NDpcdFx0ZGV2X2RiZyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7bWFuYSBnZG1hIGNsZWFudXAgc3VjY2Vzc2Z1bFxcblwmIzM0Oyk7XG4yMjk1Olx0fVxuMjI5NjpcdFxuMjI5NzpcdHN0YXRpYyBib29sIG1hbmFfaXNfcGYodW5zaWduZWQgc2hvcnQgZGV2X2lkKVxuMjI5ODpcdHtcbjIyOTk6XHRcdHJldHVybiBkZXZfaWQgPT0gTUFOQV9QRl9ERVZJQ0VfSUQgfHwgZGV2X2lkID09IE1BTkFfUEYyX0RFVklDRV9JRDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyOTAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNQU5BIERldmljZSBEcml2ZXIgSW50ZXJhY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgbWFuYV9nZF9zZXR1cGAgZnVuY3Rpb24sIHRyeWluZyB0byB1bmRlcnN0YW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoYXJkd2FyZS4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCBpdCByZWxpZXMgb24gYSBidW5jaCBvZiBsb3ctbGV2ZWwgY2FsbHM6IGBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbGAsIGBtYW5hX2dkX3ZlcmlmeV92Zl92ZXJzaW9uYCwgYG1hbmFfZ2RfZGV0ZWN0X2RldmljZXNgLCBhbmQgYG1hbmFfZ2RfcXVlcnlfbWF4X3Jlc291cmNlc2AuIFByZXR0eSBzdGFuZGFyZCBzdHVmZiBmb3IgaW5pdGlhbGl6aW5nIGEgZGV2aWNlLCBxdWVyeWluZyBjYXBhYmlsaXRpZXMsIHRoYXQga2luZCBvZiB0aGluZy4KCkJ1dCB0aGVuIGl0IGhpdHMgbWUuIFN5emthbGxlciwgaW4gaXRzIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sICpkb2VzbiYjMzk7dCogaGF2ZSBhIE1BTkEgZW11bGF0b3IsIHJpZ2h0PyBTbywgaWYgd2UmIzM5O3JlIHRyeWluZyB0byBmdXp6IHRoaXMgdmlhIFBDSSwgd2UmIzM5O3JlIGluIGEgYml0IG9mIGEgcGlja2xlLiBJdCBtZWFucyBzeXprYWxsZXIgd291bGQgbmVlZCB0byBwcm92aWRlICp2YWxpZCogcmVzcG9uc2VzIHRvICpldmVyeSBzaW5nbGUqIGhhcmR3YXJlIHF1ZXJ5IHRoYXQgYG1hbmFfZ2Rfc2V0dXBgIHRocm93cyBhdCBpdC4gQW5kIHRoZXNlIGFyZW4mIzM5O3Qgc2ltcGxlIHJlYWRzOyB3ZSYjMzk7cmUgbGlrZWx5IHRhbGtpbmcgYWJvdXQgY29tcGxleCBtZW1vcnktbWFwcGVkIEkvTywgb3IgbWF5YmUgZXZlbiBETUEgcmluZ3Mgd2l0aCBhbGwgdGhlaXIgYXNzb2NpYXRlZCBxdWlya3MuIFRoYXQmIzM5O3MgZ29pbmcgdG8gYmUgYSBzdWJzdGFudGlhbCB1bmRlcnRha2luZyB0byBnZXQgcmlnaHQuCgpJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBoYXJkd2FyZSBxdWVyaWVzIGFyZSBoYW5kbGVkLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbWFuYV9od2NfY3JlYXRlX2NoYW5uZWxgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQga2luZCBvZiBpbmZvcm1hdGlvbiBpcyBleGNoYW5nZWQsIHdoYXQgdGhlIGV4cGVjdGVkIHJlc3BvbnNlcyBsb29rIGxpa2UsIGFuZCBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgdnVsbmVyYWJpbGl0aWVzIGluIHRoYXQgaW50ZXJmYWNlLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGtleSB0byBmaWd1cmluZyBvdXQgdGhlIGJlc3QgZnV6emluZyBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFuYV9od2NfY3JlYXRlX2NoYW5uZWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9MzE4PXN0YXRpYyBpbnQgbWFuYV9nZF9kZXRlY3RfZGV2aWNlcyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0zNDktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzozNTA6XHRcdC8qIEhXQyBpcyBhbHJlYWR5IGRldGVjdGVkIGluIG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKCkuICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0zNTEtXHRcdGlmIChkZXZfdHlwZSA9PSBHRE1BX0RFVklDRV9IV0MpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9MjIwMj1zdGF0aWMgaW50IG1hbmFfZ2Rfc2V0dXAoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjIyOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jOjIyMjk6XHRlcnIgPSBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChnYyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yMjMwLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmM9NzEwPXN0YXRpYyBpbnQgbWFuYV9od2NfaW5pdF9xdWV1ZXMoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgcV9kZXB0aCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmMtNzQ5LW91dDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuYzo3NTA6XHQvKiBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbCgpIHdpbGwgZG8gdGhlIGNsZWFudXAuKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuYy03NTEtXHRyZXR1cm4gZXJyO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuYy03NTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmM6NzU0OmludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuYy03NTUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI4OAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IG1hbmFcX2h3Y1xfY3JlYXRlXF9jaGFubmVsKioKCkFscmlnaHQsICptYW5hXF9od2NcX2NyZWF0ZVxfY2hhbm5lbCouIFRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIGNhbGwgdGhhdCYjMzk7cyBncmFiYmluZyBteSBhdHRlbnRpb24uIFRoZSBuYW1pbmcgY29udmVudGlvbiBzdWdnZXN0cyBpdOKAmXMgcmVsYXRlZCB0byBoYXJkd2FyZSBjb21wb3NpdGlvbiwgb3IgcG9zc2libHkgdGhlIGNyZWF0aW9uIG9mIGEgY2hhbm5lbCBmb3IgaGFyZHdhcmUtYWNjZWxlcmF0ZWQgcmVuZGVyaW5nLCB3aGljaCBpcyBhIGtleSBwYXJ0IG9mIGhvdyB3ZSBoYW5kbGUgZGlzcGxheSBvdXRwdXQuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBpbml0aWFsaXppbmcgYSBuZXcgY29tcG9zaXRpb24gY2hhbm5lbCwgbWFuYWdpbmcgcmVzb3VyY2VzLCBvciBzZXR0aW5nIHVwIGEgcGlwZWxpbmUgZm9yIGdyYXBoaWNzIGRhdGEuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gV2hhdCBsaWJyYXJ5IG9yIGZyYW1ld29yayBkb2VzIHRoaXMgYmVsb25nIHRvPyBJcyBpdCBvcGVuLXNvdXJjZT8gV2hhdCBhcmUgdGhlIGlucHV0cz8gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoZSBkZXRhaWxzIG1hdHRlciDigJMgdGhlIGRhdGEgdHlwZXMgb2YgdGhlIHBhcmFtZXRlcnMsIHRoZWlyIGludGVuZGVkIG1lYW5pbmdzLiBUaGlzIGRldGVybWluZXMgaG93IGZsZXhpYmxlIG9yIHNwZWNpZmljIHRoaXMgZnVuY3Rpb24gaXMuIElzIHRoZXJlIGEgcmVsYXRlZCBzdHJ1Y3Qgb3IgY2xhc3MgdGhhdCB0aGlzIHVzZXM/IFVuZGVyc3RhbmRpbmcgdGhlIGlucHV0cyB3aWxsIHRlbGwgbWUgaG93IGdyYW51bGFyIHRoZSBjb250cm9sIGlzLiBBcmUgd2UgY3JlYXRpbmcgYSBjb21wbGV0ZWx5IG5ldyBjaGFubmVsIGZyb20gc2NyYXRjaCwgb3IgbW9kaWZ5aW5nIGFuIGV4aXN0aW5nIG9uZT8KCkkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVycm9yIGhhbmRsaW5nLiBIb3cgZG9lcyB0aGlzIGZ1bmN0aW9uIHNpZ25hbCBmYWlsdXJlPyBBcmUgdGhlcmUgcmV0dXJuIGNvZGVzIG9yIGV4Y2VwdGlvbnM/IEhvdyBkb2VzIGl0IGhhbmRsZSByZXNvdXJjZSBhbGxvY2F0aW9uLCBsaWtlIG1lbW9yeSBvciBmaWxlIGRlc2NyaXB0b3JzPyBBbmQgd2hhdCBraW5kIG9mIGNsZWFudXAgaXMgcGVyZm9ybWVkPyBXaGF0IGhhcHBlbnMgd2hlbiBhIGNoYW5uZWwgaXMgbm8gbG9uZ2VyIG5lZWRlZD8gQXJlIHRoZXJlIGNvcnJlc3BvbmRpbmcgZGVzdHJ1Y3Rpb24gb3IgcmVsZWFzZSBjYWxscz8gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGhlcmUuCgpFc3NlbnRpYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbiYjMzk7cyBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byBhbmFseXplIGl0cyBpbXBsZW1lbnRhdGlvbiB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBncmFwaGljcyBwaXBlbGluZSwgYW5kIHdoZXRoZXIgaXQgcGxheXMgbmljZWx5IHdpdGggb3RoZXIgcmVsZXZhbnQgcGFydHMgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NTQ6XHRpbnQgbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXG4gNzU1Olx0e1xuIDc1NjpcdFx0dTMyIG1heF9yZXFfbXNnX3NpemUsIG1heF9yZXNwX21zZ19zaXplO1xuIDc1NzpcdFx0c3RydWN0IGdkbWFfZGV2ICpnZCA9IFx1MDAyNmdjLVx1MDAzZWh3YztcbiA3NTg6XHRcdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YztcbiA3NTk6XHRcdHUxNiBxX2RlcHRoX21heDtcbiA3NjA6XHRcdGludCBlcnI7XG4gNzYxOlx0XG4gNzYyOlx0XHRod2MgPSBremFsbG9jX29iaigqaHdjKTtcbiA3NjM6XHRcdGlmICghaHdjKVxuIDc2NDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA3NjU6XHRcbiA3NjY6XHRcdGdkLVx1MDAzZWdkbWFfY29udGV4dCA9IGdjO1xuIDc2NzpcdFx0Z2QtXHUwMDNlZHJpdmVyX2RhdGEgPSBod2M7XG4gNzY4Olx0XHRod2MtXHUwMDNlZ2RtYV9kZXYgPSBnZDtcbiA3Njk6XHRcdGh3Yy1cdTAwM2VkZXYgPSBnYy1cdTAwM2VkZXY7XG4gNzcwOlx0XHRod2MtXHUwMDNlaHdjX3RpbWVvdXQgPSBIV19DSEFOTkVMX1dBSVRfUkVTT1VSQ0VfVElNRU9VVF9NUztcbiA3NzE6XHRcbiA3NzI6XHRcdC8qIEhXQyYjMzk7cyBpbnN0YW5jZSBudW1iZXIgaXMgYWx3YXlzIDAuICovXG4gNzczOlx0XHRnZC1cdTAwM2VkZXZfaWQuYXNfdWludDMyID0gMDtcbiA3NzQ6XHRcdGdkLVx1MDAzZWRldl9pZC50eXBlID0gR0RNQV9ERVZJQ0VfSFdDO1xuIDc3NTpcdFxuIDc3NjpcdFx0Z2QtXHUwMDNlcGRpZCA9IElOVkFMSURfUERJRDtcbiA3Nzc6XHRcdGdkLVx1MDAzZWRvb3JiZWxsID0gSU5WQUxJRF9ET09SQkVMTDtcbiA3Nzg6XHRcbiA3Nzk6XHRcdC8qIG1hbmFfaHdjX2luaXRfcXVldWVzKCkgb25seSBjcmVhdGVzIHRoZSByZXF1aXJlZCBkYXRhIHN0cnVjdHVyZXMsXG4gNzgwOlx0XHQgKiBhbmQgZG9lc24mIzM5O3QgdG91Y2ggdGhlIEhXQyBkZXZpY2UuXG4gNzgxOlx0XHQgKi9cbiA3ODI6XHRcdGVyciA9IG1hbmFfaHdjX2luaXRfcXVldWVzKGh3YywgSFdfQ0hBTk5FTF9WRl9CT09UU1RSQVBfUVVFVUVfREVQVEgsXG4gNzgzOlx0XHRcdFx0XHQgICBIV19DSEFOTkVMX01BWF9SRVFVRVNUX1NJWkUsXG4gNzg0Olx0XHRcdFx0XHQgICBIV19DSEFOTkVMX01BWF9SRVNQT05TRV9TSVpFKTtcbiA3ODU6XHRcdGlmIChlcnIpIHtcbiA3ODY6XHRcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBIV0M6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuIDc4NzpcdFx0XHRnb3RvIG91dDtcbiA3ODg6XHRcdH1cbiA3ODk6XHRcbiA3OTA6XHRcdGVyciA9IG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsKGdjLCBcdTAwMjZxX2RlcHRoX21heCwgXHUwMDI2bWF4X3JlcV9tc2dfc2l6ZSxcbiA3OTE6XHRcdFx0XHRcdFx0IFx1MDAyNm1heF9yZXNwX21zZ19zaXplKTtcbiA3OTI6XHRcdGlmIChlcnIpIHtcbiA3OTM6XHRcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gZXN0YWJsaXNoIEhXQzogJWRcXG5cJiMzNDssIGVycik7XG4gNzk0Olx0XHRcdGdvdG8gb3V0O1xuIDc5NTpcdFx0fVxuIDc5NjpcdFxuIDc5NzpcdFx0ZXJyID0gbWFuYV9od2NfdGVzdF9jaGFubmVsKGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YSxcbiA3OTg6XHRcdFx0XHRcdCAgICBIV19DSEFOTkVMX1ZGX0JPT1RTVFJBUF9RVUVVRV9ERVBUSCxcbiA3OTk6XHRcdFx0XHRcdCAgICBtYXhfcmVxX21zZ19zaXplLCBtYXhfcmVzcF9tc2dfc2l6ZSk7XG4gODAwOlx0XHRpZiAoZXJyKSB7XG4gODAxOlx0XHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHRlc3QgSFdDOiAlZFxcblwmIzM0OywgZXJyKTtcbiA4MDI6XHRcdFx0Z290byBvdXQ7XG4gODAzOlx0XHR9XG4gODA0Olx0XG4gODA1Olx0XHRyZXR1cm4gMDtcbiA4MDY6XHRvdXQ6XG4gODA3Olx0XHRtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoZ2MpO1xuIDgwODpcdFx0cmV0dXJuIGVycjtcbiA4MDk6XHR9XG4gODEwOlx0XG4gODExOlx0dm9pZCBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXG4gODEyOlx0e1xuIDgxMzpcdFx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjID0gZ2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xuIDgxNDpcdFxuIDgxNTpcdFx0aWYgKCFod2MpXG4gODE2Olx0XHRcdHJldHVybjtcbiA4MTc6XHRcbiA4MTg6XHRcdC8qIGdjLVx1MDAzZW1heF9udW1fY3FzIGlzIHNldCBpbiBtYW5hX2h3Y19pbml0X2V2ZW50X2hhbmRsZXIoKS4gSWYgaXQmIzM5O3NcbiA4MTk6XHRcdCAqIG5vbi16ZXJvLCB0aGUgSFdDIHdvcmtlZCBhbmQgd2Ugc2hvdWxkIHRlYXIgZG93biB0aGUgSFdDIGhlcmUuXG4gODIwOlx0XHQgKi9cbiA4MjE6XHRcdGlmIChnYy1cdTAwM2VtYXhfbnVtX2NxcyBcdTAwM2UgMCkge1xuIDgyMjpcdFx0XHRtYW5hX3NtY190ZWFyZG93bl9od2MoXHUwMDI2Z2MtXHUwMDNlc2htX2NoYW5uZWwsIGZhbHNlKTtcbiA4MjM6XHRcdFx0Z2MtXHUwMDNlbWF4X251bV9jcXMgPSAwO1xuIDgyNDpcdFx0fVxuIDgyNTpcdFxuIDgyNjpcdFx0aWYgKGh3Yy1cdTAwM2V0eHEpXG4gODI3Olx0XHRcdG1hbmFfaHdjX2Rlc3Ryb3lfd3EoaHdjLCBod2MtXHUwMDNldHhxKTtcbiA4Mjg6XHRcbiA4Mjk6XHRcdGlmIChod2MtXHUwMDNlcnhxKVxuIDgzMDpcdFx0XHRtYW5hX2h3Y19kZXN0cm95X3dxKGh3YywgaHdjLVx1MDAzZXJ4cSk7XG4gODMxOlx0XG4gODMyOlx0XHRpZiAoaHdjLVx1MDAzZWNxKVxuIDgzMzpcdFx0XHRtYW5hX2h3Y19kZXN0cm95X2NxKGh3Yy1cdTAwM2VnZG1hX2Rldi1cdTAwM2VnZG1hX2NvbnRleHQsIGh3Yy1cdTAwM2VjcSk7XG4gODM0Olx0XG4gODM1Olx0XHRrZnJlZShod2MtXHUwMDNlY2FsbGVyX2N0eCk7XG4gODM2Olx0XHRod2MtXHUwMDNlY2FsbGVyX2N0eCA9IE5VTEw7XG4gODM3Olx0XG4gODM4Olx0XHRtYW5hX2dkX2ZyZWVfcmVzX21hcChcdTAwMjZod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcyk7XG4gODM5Olx0XG4gODQwOlx0XHRod2MtXHUwMDNlbnVtX2luZmxpZ2h0X21zZyA9IDA7XG4gODQxOlx0XG4gODQyOlx0XHRod2MtXHUwMDNlZ2RtYV9kZXYtXHUwMDNlZG9vcmJlbGwgPSBJTlZBTElEX0RPT1JCRUxMO1xuIDg0MzpcdFx0aHdjLVx1MDAzZWdkbWFfZGV2LVx1MDAzZXBkaWQgPSBJTlZBTElEX1BESUQ7XG4gODQ0Olx0XG4gODQ1Olx0XHRod2MtXHUwMDNlaHdjX3RpbWVvdXQgPSAwO1xuIDg0NjpcdFxuIDg0NzpcdFx0a2ZyZWUoaHdjKTtcbiA4NDg6XHRcdGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YSA9IE5VTEw7XG4gODQ5Olx0XHRnYy1cdTAwM2Vod2MuZ2RtYV9jb250ZXh0ID0gTlVMTDtcbiA4NTA6XHRcbiA4NTE6XHRcdHZmcmVlKGdjLVx1MDAzZWNxX3RhYmxlKTtcbiA4NTI6XHRcdGdjLVx1MDAzZWNxX3RhYmxlID0gTlVMTDtcbiA4NTM6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Mjg3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBSZWFjaGFiaWxpdHkgZm9yIFBhdGNoIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtUaGlzIGlzIHZlcnkgc3BlY2lmaWMgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24uJiMzNDsgV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgY2hhbmdlcyB0byB0aGUgYG1hbmFfY3JlYXRlX3J4cWAgZnVuY3Rpb24gd2l0aGluIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIuICBTeXprYWxsZXImIzM5O3MgUENJIGZ1enplciBpcyB0aGUgdG9vbCBpbiBxdWVzdGlvbiwgYW5kIGl0IHdvcmtzIGJ5IGludGVyY2VwdGluZyBQQ0kgY29uZmlnIHNwYWNlIGFuZCBNTUlPIHJlYWRzL3dyaXRlcy4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gdGhpcyBmdXp6ZXIgZXZlbiBnZXQgKm5lYXIqIHRoaXMgY29kZT8KCk15IGZpcnN0IGluc3RpbmN0IGlzIHRoYXQsIHRoZW9yZXRpY2FsbHksIHRoZSBmdXp6ZXIgY291bGQgcG90ZW50aWFsbHkgcGFzcyB0aHJvdWdoIHRoZXNlIGNoZWNrcyBpZiBpdCByYW5kb21seSBndWVzc2VzIHRoZSBjb3JyZWN0IE1NSU8gdmFsdWVzLCBvciBpZiB3ZSBoYWQgY3JhZnRlZCBzcGVjaWZpYyBkZXNjcmlwdGlvbnMgZm9yIHRoZSBNQU5BIGRldmljZSB3aXRoaW4gU3l6a2FsbGVyLiBIb3dldmVyLCB3ZSBkb24mIzM5O3QgaGF2ZSBNQU5BIGRlc2NyaXB0aW9ucywgYW5kIHRoaXMgcGF0Y2ggaXMsIGF0IGl0cyBjb3JlLCBhIHNpbXBsZSBidWcgZml4IGluIGFuIGVycm9yIHBhdGguIFRoZSBwYXRjaCBjaGFuZ2VzIGBtYW5hX2NyZWF0ZV9yeHFgIHRvIHJldHVybiBhbiBlcnJvciBjb2RlIGluc3RlYWQgb2YgYE5VTExgIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIElmIHdlIGNvbnNpZGVyZWQgdGhpcyBjb2RlIHRvIGJlIHJlYWNoYWJsZSwgd2Ugc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLgoKQnV0IHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNyaXRpY2FsIHByb2JsZW0gY29tZXMgaW46IElzIHRoaXMgcmVhY2hhYmxlIGluICpvdXIqIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gIFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBpZiB0aGUgY29kZSBwYXRoIGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSwgdGhlbiB0aGUgYW5zd2VyIGlzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBBbmQgTUFOQSAqaXMqIGEgUENJIGRldmljZSwgYW5kLCBhcyBmYXIgYXMgSSYjMzk7bSBhd2FyZSwgaXQmIzM5O3Mgbm90IGVtdWxhdGVkIGluIFFFTVUgb3IgR0NFLgoKV2FpdCBhIHNlY29uZC4gIElzIE1BTkEgZW11bGF0ZWQgaW4gUUVNVT8gTm8sIGl0JiMzOTtzIGEgcHJvcHJpZXRhcnkgaGFyZHdhcmUgZGV2aWNlIHVzZWQgaW4gQXp1cmUuIFVubGVzcyBzeXprYWxsZXIgaXMgcnVubmluZyBvbiBBenVyZSBWTXMgd2l0aCBNQU5BIGhhcmR3YXJlIGF0dGFjaGVkLCB3aGljaCBzeXpib3QgZG9lc24mIzM5O3QgZG8gKGl0IHJ1bnMgb24gR0NFKSwgdGhpcyBjb2RlIGlzIGVzc2VudGlhbGx5IHVucmVhY2hhYmxlLiBBbmQgc3l6Ym90ICpkb2VzKiBydW4gb24gR0NFLCB3aGljaCBkb2VzIG5vdCBoYXZlIE1BTkEgaGFyZHdhcmUuCgpTbywgY2FuIHN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyIHJlYWNoIGl0PyAgVGhlIFBDSSBmdXp6ZXIgY2FuIGluc3RhbnRpYXRlIGEgUENJIGRldmljZSB3aXRoIGFueSB2ZW5kb3IvZGV2aWNlIElELCB3aGljaCB3aWxsIHRoZW4gdHJpZ2dlciBhIHByb2JlIGJ5IHRoZSBrZXJuZWwuIFRoZSBkcml2ZXIgd2lsbCBtYXAgTU1JTyBhbmQgcmVhZC93cml0ZSB0byBpdC4gVGhlIFBDSSBmdXp6ZXIgaW50ZXJjZXB0cyB0aGVzZSBNTUlPIGFjY2Vzc2VzIGFuZCByZXR1cm5zIGZ1enplZCBkYXRhLiBUaHVzIGBtYW5hX2dkX3Byb2JlYCB3aWxsIGJlIGNhbGxlZC4gVGhlbiB0aGUgZnV6emVyIHdpbGwgc3RhcnQgaW50ZXJjZXB0aW5nIE1NSU8uICBDYW4gaXQgZ2V0IHRocm91Z2ggYG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsYCBhbmQgYWxsIHRoZSBjb21wbGV4IGluaXRpYWxpemF0aW9uPyBVc3VhbGx5LCBubywgaXQgcmVxdWlyZXMgc3BlY2lmaWMgc2VxdWVuY2VzIG9mIHZhbHVlcy4gIFRob3VnaCBzeXprYWxsZXIgaGFzIHJlYWNoZWQgc29tZSBQQ0kgZHJpdmVycyYjMzk7IHByb2JlIGZ1bmN0aW9ucy4KClRoZSBiaWdnZXIgcHJvYmxlbSBpcyB0aGF0IGBtYW5hX2NyZWF0ZV9yeHFgIGlzIGNhbGxlZCBkdXJpbmcgYG1hbmFfb3BlbmAgb3IgYG1hbmFfYXR0YWNoYCwgd2hpY2ggaGFwcGVucyAqYWZ0ZXIqIHRoZSBkZXZpY2UgaXMgc3VjY2Vzc2Z1bGx5IHByb2JlZCBhbmQgcmVnaXN0ZXJlZCBhcyBhIG5ldGRldi4gR2V0dGluZyBhICpmdWxseSBmdW5jdGlvbmFsKiBuZXRkZXYgb3V0IG9mIGEgcmFuZG9tbHkgZnV6emVkIFBDSSBkZXZpY2UgaXMgcHJhY3RpY2FsbHkgaW1wb3NzaWJsZSB3aXRob3V0IGEgZGVkaWNhdGVkIGVtdWxhdG9yIG9yIHNwZWNpZmljIGRlc2NyaXB0aW9ucy4KClRoZXJlZm9yZSwgdGhlIGxpa2VsaWhvb2Qgb2YgdGhpcyBjb2RlIHBhdGggYmVpbmcgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VIGlzIG1pbnVzY3VsZS4gTGV0JiMzOTtzIGRvdWJsZS1jaGVjayBob3cgYG1hbmFfY3JlYXRlX3J4cWAgaXMgY2FsbGVkLiBJdCYjMzk7cyBvbmx5IGNhbGxlZCBmcm9tIGBtYW5hX2FkZF9yeF9xdWV1ZXNgLCB3aGljaCBpcyBpbiB0dXJuIGNhbGxlZCBmcm9tIGBtYW5hX2FsbG9jX3F1ZXVlc2AsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBtYW5hX29wZW5gIGFuZCBgbWFuYV9hdHRhY2hgLiBBbGwgb2YgdGhlc2UgcmVxdWlyZSB0aGUgbmV0ZGV2IHRvIGJlIHJlZ2lzdGVyZWQuIFRoZSBuZXRkZXYgaXMgcmVnaXN0ZXJlZCBpbiBgbWFuYV9wcm9iZV9wb3J0YCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYG1hbmFfcHJvYmVgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgbWFuYV9nZF9wcm9iZWAgKHRoZSBQQ0kgcHJvYmUgZnVuY3Rpb24pLgoKU28gaXQgc3RyaWN0bHkgZGVwZW5kcyBvbiB0aGUgUENJIHByb2JlIHN1Y2NlZWRpbmcuIFNpbmNlIHRoZXJlIGlzIG5vIE1BTkEgZW11bGF0b3IsIHRoZSBQQ0kgcHJvYmUgd2lsbCBmYWlsIHVubGVzcyB0aGUgZnV6emVyIHNvbWVob3cgZ3Vlc3NlcyBhbGwgdGhlIGNvcnJlY3QgTU1JTyByZXNwb25zZXMsIHdoaWNoIGlzIGFzdHJvbm9taWNhbGx5IHVubGlrZWx5LiBUaHVzLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gb3VyIGZ1enppbmcgZW52aXJvbm1lbnQuCgpXYWl0LCB3aGF0IGlmIHRoZSBwYXRjaCBpcyB0ZXN0ZWQgb24gQXp1cmU/ICBUaGUgcHJvbXB0IHNwZWNpZmllZCAmIzM0O0NvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7LiBTaW5jZSBzeXprYWxsZXIgcnVucyBvbiBHQ0UvUUVNVSwgYW5kIE1BTkEgaXMgbm90IGVtdWxhdGVkIHRoZXJlLCBpdCYjMzk7cyB1bnJlYWNoYWJsZS4KCkkmIzM5O20gcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKTGV0IG1lIGp1c3QgcmV2aWV3IHRoZSByZWFzb25pbmcuIFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyLiBNQU5BIGlzIGEgcGh5c2ljYWwvdmlydHVhbCBoYXJkd2FyZSBkZXZpY2Ugc3BlY2lmaWMgdG8gTWljcm9zb2Z0IEF6dXJlLiBTeXprYWxsZXIgcnVucyBpbiBHQ0Ugb3IgUUVNVSBlbnZpcm9ubWVudHMsIHdoaWNoIGRvIG5vdCBwcm92aWRlIE1BTkEgaGFyZHdhcmUuIFRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgTUFOQSBpbiB0aGUga2VybmVsIG9yIFFFTVUuIFdoaWxlIHN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyIGNhbiB0cmlnZ2VyIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24sIHN1Y2Nlc3NmdWxseSBwYXNzaW5nIHRoZSBjb21wbGV4IGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIChlLmcuLAoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hbmFfY3JlYXRlX3J4cSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM9Mjc4MD1zdGF0aWMgaW50IG1hbmFfY3JlYXRlX3BhZ2VfcG9vbChzdHJ1Y3QgbWFuYV9yeHEgKnJ4cSwgc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTI4MTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM6MjgxNDpzdGF0aWMgaW50IG1hbmFfY3JlYXRlX3J4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgdTMyIHJ4cV9pZHgsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMjgxNS1cdFx0XHQgICBzdHJ1Y3QgbWFuYV9lcSAqZXEsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0yOTM3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jOjI5Mzg6c3RhdGljIHZvaWQgbWFuYV9jcmVhdGVfcnhxX2RlYnVnZnMoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsIGludCBpZHgpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMjkzOS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jPTI5NjA9c3RhdGljIGludCBtYW5hX2FkZF9yeF9xdWV1ZXMoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTI5NjctXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhcGMtXHUwMDNlbnVtX3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzoyOTY4Olx0XHRlcnIgPSBtYW5hX2NyZWF0ZV9yeHEoYXBjLCBpLCBcdTAwMjZhcGMtXHUwMDNlZXFzW2ldLCBuZGV2LCBcdTAwMjZyeHEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTI5NjktXHRcdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMjk3Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzoyOTc4Olx0XHRtYW5hX2NyZWF0ZV9yeHFfZGVidWdmcyhhcGMsIGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTI5NzktXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTA2CgkJCQkJCQlvdXRwdXQ6IDE0MwoJCQkJCQkJdGhvdWdodHM6IDE0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDoKCioqVW5yZWFjaGFibGUgQ29kZSBBbmFseXNpcyoqCgpPa2F5LCBsZXQmIzM5O3MgdHJhY2UgdGhpcyBiYWNrLiBUaGUgY29kZSBwYXRoIEkmIzM5O20gZXhhbWluaW5nIGFwcGVhcnMgdG8gYmUgaW5jcmVkaWJseSBjb25zdHJhaW5lZC4gSXQgc2VlbXMgdGhlIGZ1bmN0aW9uIEkmIzM5O20gY29uY2VybmVkIGFib3V0LCBsaWtlbHkgcmVsYXRlZCB0byBSWCBxdWV1ZSBhbGxvY2F0aW9uLCBgbWFuYV9hZGRfcnhfcXVldWVzYCwgaXMgb25seSBjYWxsZWQgZnJvbSBgbWFuYV9hbGxvY19xdWV1ZXNgLiBUaGF0JiMzOTtzIGEgbGltaXRlZCBzdGFydGluZyBwb2ludC4KCkZ1cnRoZXIsIGBtYW5hX2FsbG9jX3F1ZXVlc2AgaXRzZWxmIGlzIG9ubHkgaW52b2tlZCBmcm9tIHR3byBmdW5jdGlvbnM6IGBtYW5hX29wZW5gIGFuZCBgbWFuYV9hdHRhY2hgLiBCb3RoIG9mIHRoZXNlIHJlcXVpcmUgYSBuZXR3b3JrIGRldmljZSwgdGhlIGBuZXRkZXZgLCB0byBiZSByZWdpc3RlcmVkLiBUaGlzIGlzIHRoZSBjcnVjaWFsIHBvaW50LiBUaGUgYG5ldGRldmAgcmVnaXN0cmF0aW9uIGhhcHBlbnMgaW5zaWRlIGBtYW5hX3Byb2JlX3BvcnRgLiBMb29raW5nIGhpZ2hlciBpbiB0aGUgY2FsbCBncmFwaCwgYG1hbmFfcHJvYmVfcG9ydGAgaXMgY2FsbGVkIGV4Y2x1c2l2ZWx5IGZyb20gYG1hbmFfcHJvYmVgLCBhbmQgYG1hbmFfcHJvYmVgIGlzLCBpbiB0dXJuLCBjYWxsZWQgYnkgYG1hbmFfZ2RfcHJvYmVgLiBUaGlzIHN1Z2dlc3RzIGEgUENJIHByb2JlLCBhcyB0aGUgY29kZSBpcyBsaWtlbHkgcmVsYXRlZCB0byBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIGRldGVjdGlvbi4KClRoZXJlZm9yZSwgdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uLCB0aGF0IGlzLCBgbWFuYV9hZGRfcnhfcXVldWVzYCwgaXMgdW5yZWFjaGFibGUgaW4gbm9ybWFsIG9wZXJhdGlvbiBiZWNhdXNlIGl0IGlzIG9ubHkgcmVhY2hhYmxlIGJ5IGNhbGwgY2hhaW5zIHRoYXQgYXJlIG9ubHkgc3RhcnRlZCBieSB0aGUgcHJvYmUuIFRoZSBjb2RlIHdpbGwgbmV2ZXIgYmUgZXhlY3V0ZWQuIFNvLCBpdCYjMzk7cyB1bnJlYWNoYWJsZSwgYXNzdW1pbmcgdGhlIHR5cGljYWwgUENJIGRldmljZSBwcm9iaW5nIGZsb3cuIFRoYXQgbWVhbnMgaXQgaXMgaGlnaGx5IGxpa2VseSB0aGF0IHRoZXJlIGlzIGEgYnVnIGhlcmUsIG9yIHRoYXQgdGhlIGNvZGUgaXMgaW50ZW5kZWQgZm9yIGFuIGVkZ2UgY2FzZSB3aGljaCBoYXMgbmV2ZXIsIG9yIHdpbGwgbmV2ZXIsIG9jY3VyLgoKTm93LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIuIE1BTkEgaXMgYSBoYXJkd2FyZSBkZXZpY2Ugc3BlY2lmaWMgdG8gTWljcm9zb2Z0IEF6dXJlIGFuZCBpcyBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSB3aGVyZSBmdXp6aW5nIG9jY3Vycy4gV2hpbGUgdGhlIFBDSSBmdXp6ZXIgY2FuIHRyaWdnZXIgdGhlIGRyaXZlciYjMzk7cyBwcm9iZSBmdW5jdGlvbiwgc3VjY2Vzc2Z1bGx5IHBhc3NpbmcgdGhlIGNvbXBsZXggaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgdG8gcmVnaXN0ZXIgdGhlIG5ldHdvcmsgZGV2aWNlIGFuZCByZWFjaCBgbWFuYV9jcmVhdGVfcnhxYCAodmlhIGBtYW5hX29wZW5gKSBpcyBwcmFjdGljYWxseSBpbXBvc3NpYmxlIHdpdGhvdXQgYSBkZWRpY2F0ZWQgZW11bGF0b3IuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgaW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyLiBNQU5BIGlzIGEgaGFyZHdhcmUgZGV2aWNlIHNwZWNpZmljIHRvIE1pY3Jvc29mdCBBenVyZSBhbmQgaXMgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUgd2hlcmUgZnV6emluZyBvY2N1cnMuIFdoaWxlIHRoZSBQQ0kgZnV6emVyIGNhbiB0cmlnZ2VyIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24sIHN1Y2Nlc3NmdWxseSBwYXNzaW5nIHRoZSBjb21wbGV4IGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIHRvIHJlZ2lzdGVyIHRoZSBuZXR3b3JrIGRldmljZSBhbmQgcmVhY2ggYG1hbmFfY3JlYXRlX3J4cWAgKHZpYSBgbWFuYV9vcGVuYCkgaXMgcHJhY3RpY2FsbHkgaW1wb3NzaWJsZSB3aXRob3V0IGEgZGVkaWNhdGVkIGVtdWxhdG9yLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBwYXRoIGlzIHVucmVhY2hhYmxlIGluIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAzOjI0OjM4LjIyMDAzOTQ5MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5Njc5NjYwMDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyLiBNQU5BIGlzIGEgaGFyZHdhcmUgZGV2aWNlIHNwZWNpZmljIHRvIE1pY3Jvc29mdCBBenVyZSBhbmQgaXMgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUgd2hlcmUgZnV6emluZyBvY2N1cnMuIFdoaWxlIHRoZSBQQ0kgZnV6emVyIGNhbiB0cmlnZ2VyIHRoZSBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbiwgc3VjY2Vzc2Z1bGx5IHBhc3NpbmcgdGhlIGNvbXBsZXggaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgdG8gcmVnaXN0ZXIgdGhlIG5ldHdvcmsgZGV2aWNlIGFuZCByZWFjaCBgbWFuYV9jcmVhdGVfcnhxYCAodmlhIGBtYW5hX29wZW5gKSBpcyBwcmFjdGljYWxseSBpbXBvc3NpYmxlIHdpdGhvdXQgYSBkZWRpY2F0ZWQgZW11bGF0b3IuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgaW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMzoyNDozOC4yMjAwNDQ4MTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMzIwNzMxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ3ZDkxMzgyY2EyNDRmZjBhMGY2ZTAzODc5OTcyZDQ5NTFkNmIwM2JcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMTggMDM6MjQ6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXFxuaW5kZXggOWQ5YmZkMTE2ZGFiYzIuLjkxNjJlMzU2ZTBjMWQ3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY1xcbkBAIC0yODExLDkgKzI4MTEsOSBAQCBzdGF0aWMgaW50IG1hbmFfY3JlYXRlX3BhZ2VfcG9vbChzdHJ1Y3QgbWFuYV9yeHEgKnJ4cSwgc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgc3RydWN0IG1hbmFfcnhxICptYW5hX2NyZWF0ZV9yeHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXFxuLVxcdFxcdFxcdFxcdFxcdHUzMiByeHFfaWR4LCBzdHJ1Y3QgbWFuYV9lcSAqZXEsXFxuLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbitzdGF0aWMgaW50IG1hbmFfY3JlYXRlX3J4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgdTMyIHJ4cV9pZHgsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBtYW5hX2VxICplcSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBtYW5hX3J4cSAqKnJ4cV9vdXQpXFxuIHtcXG4gXFx0c3RydWN0IGdkbWFfZGV2ICpnZCA9IGFwYy1cXHUwMDNlYWMtXFx1MDAzZWdkbWFfZGV2O1xcbiBcXHRzdHJ1Y3QgbWFuYV9vYmpfc3BlYyB3cV9zcGVjO1xcbkBAIC0yODI5LDcgKzI4MjksNyBAQCBzdGF0aWMgc3RydWN0IG1hbmFfcnhxICptYW5hX2NyZWF0ZV9yeHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXFxuIFxcbiBcXHRyeHEgPSBrdnphbGxvY19mbGV4KCpyeHEsIHJ4X29vYnMsIGFwYy1cXHUwMDNlcnhfcXVldWVfc2l6ZSk7XFxuIFxcdGlmICghcnhxKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbiBcXHRyeHEtXFx1MDAzZW5kZXYgPSBuZGV2O1xcbiBcXHRyeHEtXFx1MDAzZW51bV9yeF9idWYgPSBhcGMtXFx1MDAzZXJ4X3F1ZXVlX3NpemU7XFxuQEAgLTI5MjMsMTQgKzI5MjMsMTYgQEAgc3RhdGljIHN0cnVjdCBtYW5hX3J4cSAqbWFuYV9jcmVhdGVfcnhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxcbiBcXG4gXFx0bWFuYV9nZF9yaW5nX2NxKGNxLVxcdTAwM2VnZG1hX2NxLCBTRVRfQVJNX0JJVCk7XFxuIG91dDpcXG4tXFx0aWYgKCFlcnIpXFxuLVxcdFxcdHJldHVybiByeHE7XFxuK1xcdGlmICghZXJyKSB7XFxuK1xcdFxcdCpyeHFfb3V0ID0gcnhxO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbiBcXG4gXFx0bmV0ZGV2X2VycihuZGV2LCBcXFwiRmFpbGVkIHRvIGNyZWF0ZSBSWFE6IGVyciA9ICVkXFxcXG5cXFwiLCBlcnIpO1xcbiBcXG4gXFx0bWFuYV9kZXN0cm95X3J4cShhcGMsIHJ4cSwgZmFsc2UpO1xcbiBcXG4tXFx0cmV0dXJuIE5VTEw7XFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIG1hbmFfY3JlYXRlX3J4cV9kZWJ1Z2ZzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLCBpbnQgaWR4KVxcbkBAIC0yOTYzLDkgKzI5NjUsOCBAQCBzdGF0aWMgaW50IG1hbmFfYWRkX3J4X3F1ZXVlcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcXG4gXFx0aW50IGk7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYXBjLVxcdTAwM2VudW1fcXVldWVzOyBpKyspIHtcXG4tXFx0XFx0cnhxID0gbWFuYV9jcmVhdGVfcnhxKGFwYywgaSwgXFx1MDAyNmFwYy1cXHUwMDNlZXFzW2ldLCBuZGV2KTtcXG4tXFx0XFx0aWYgKCFyeHEpIHtcXG4tXFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4rXFx0XFx0ZXJyID0gbWFuYV9jcmVhdGVfcnhxKGFwYywgaSwgXFx1MDAyNmFwYy1cXHUwMDNlZXFzW2ldLCBuZGV2LCBcXHUwMDI2cnhxKTtcXG4rXFx0XFx0aWYgKGVycikge1xcbiBcXHRcXHRcXHRuZXRkZXZfZXJyKG5kZXYsIFxcXCJGYWlsZWQgdG8gY3JlYXRlIHJ4cSAlZCA6ICVkXFxcXG5cXFwiLCBpLCBlcnIpO1xcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMzoyNDozOC42MzQwMDYxMjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MjY1Njg3OTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyLiBNQU5BIGlzIGEgaGFyZHdhcmUgZGV2aWNlIHNwZWNpZmljIHRvIE1pY3Jvc29mdCBBenVyZSBhbmQgaXMgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUgd2hlcmUgZnV6emluZyBvY2N1cnMuIFdoaWxlIHRoZSBQQ0kgZnV6emVyIGNhbiB0cmlnZ2VyIHRoZSBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbiwgc3VjY2Vzc2Z1bGx5IHBhc3NpbmcgdGhlIGNvbXBsZXggaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgdG8gcmVnaXN0ZXIgdGhlIG5ldHdvcmsgZGV2aWNlIGFuZCByZWFjaCBgbWFuYV9jcmVhdGVfcnhxYCAodmlhIGBtYW5hX29wZW5gKSBpcyBwcmFjdGljYWxseSBpbXBvc3NpYmxlIHdpdGhvdXQgYSBkZWRpY2F0ZWQgZW11bGF0b3IuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgaW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ3ZDkxMzgyY2EyNDRmZjBhMGY2ZTAzODc5OTcyZDQ5NTFkNmIwM2JcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxOCAwMzoyNDozNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY1xuaW5kZXggOWQ5YmZkMTE2ZGFiYzIuLjkxNjJlMzU2ZTBjMWQ3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcbkBAIC0yODExLDkgKzI4MTEsOSBAQCBzdGF0aWMgaW50IG1hbmFfY3JlYXRlX3BhZ2VfcG9vbChzdHJ1Y3QgbWFuYV9yeHEgKnJ4cSwgc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBtYW5hX3J4cSAqbWFuYV9jcmVhdGVfcnhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuLVx0XHRcdFx0XHR1MzIgcnhxX2lkeCwgc3RydWN0IG1hbmFfZXEgKmVxLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbitzdGF0aWMgaW50IG1hbmFfY3JlYXRlX3J4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgdTMyIHJ4cV9pZHgsXG4rXHRcdFx0ICAgc3RydWN0IG1hbmFfZXEgKmVxLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbitcdFx0XHQgICBzdHJ1Y3QgbWFuYV9yeHEgKipyeHFfb3V0KVxuIHtcbiBcdHN0cnVjdCBnZG1hX2RldiAqZ2QgPSBhcGMtXHUwMDNlYWMtXHUwMDNlZ2RtYV9kZXY7XG4gXHRzdHJ1Y3QgbWFuYV9vYmpfc3BlYyB3cV9zcGVjO1xuQEAgLTI4MjksNyArMjgyOSw3IEBAIHN0YXRpYyBzdHJ1Y3QgbWFuYV9yeHEgKm1hbmFfY3JlYXRlX3J4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcbiBcbiBcdHJ4cSA9IGt2emFsbG9jX2ZsZXgoKnJ4cSwgcnhfb29icywgYXBjLVx1MDAzZXJ4X3F1ZXVlX3NpemUpO1xuIFx0aWYgKCFyeHEpXG4tXHRcdHJldHVybiBOVUxMO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdHJ4cS1cdTAwM2VuZGV2ID0gbmRldjtcbiBcdHJ4cS1cdTAwM2VudW1fcnhfYnVmID0gYXBjLVx1MDAzZXJ4X3F1ZXVlX3NpemU7XG5AQCAtMjkyMywxNCArMjkyMywxNiBAQCBzdGF0aWMgc3RydWN0IG1hbmFfcnhxICptYW5hX2NyZWF0ZV9yeHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXG4gXG4gXHRtYW5hX2dkX3JpbmdfY3EoY3EtXHUwMDNlZ2RtYV9jcSwgU0VUX0FSTV9CSVQpO1xuIG91dDpcbi1cdGlmICghZXJyKVxuLVx0XHRyZXR1cm4gcnhxO1xuK1x0aWYgKCFlcnIpIHtcbitcdFx0KnJ4cV9vdXQgPSByeHE7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuIFxuIFx0bmV0ZGV2X2VycihuZGV2LCBcIkZhaWxlZCB0byBjcmVhdGUgUlhROiBlcnIgPSAlZFxcblwiLCBlcnIpO1xuIFxuIFx0bWFuYV9kZXN0cm95X3J4cShhcGMsIHJ4cSwgZmFsc2UpO1xuIFxuLVx0cmV0dXJuIE5VTEw7XG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBtYW5hX2NyZWF0ZV9yeHFfZGVidWdmcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgaW50IGlkeClcbkBAIC0yOTYzLDkgKzI5NjUsOCBAQCBzdGF0aWMgaW50IG1hbmFfYWRkX3J4X3F1ZXVlcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYXBjLVx1MDAzZW51bV9xdWV1ZXM7IGkrKykge1xuLVx0XHRyeHEgPSBtYW5hX2NyZWF0ZV9yeHEoYXBjLCBpLCBcdTAwMjZhcGMtXHUwMDNlZXFzW2ldLCBuZGV2KTtcbi1cdFx0aWYgKCFyeHEpIHtcbi1cdFx0XHRlcnIgPSAtRU5PTUVNO1xuK1x0XHRlcnIgPSBtYW5hX2NyZWF0ZV9yeHEoYXBjLCBpLCBcdTAwMjZhcGMtXHUwMDNlZXFzW2ldLCBuZGV2LCBcdTAwMjZyeHEpO1xuK1x0XHRpZiAoZXJyKSB7XG4gXHRcdFx0bmV0ZGV2X2VycihuZGV2LCBcIkZhaWxlZCB0byBjcmVhdGUgcnhxICVkIDogJWRcXG5cIiwgaSwgZXJyKTtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDM6MjQ6MzguNjM0MDA3NDQyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk4ODkxMDU1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCB0byBhIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNgLiBJdCdzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZTogdGhleSd2ZSBhbHRlcmVkIHRoZSBzaWduYXR1cmUgb2YgYG1hbmFfY3JlYXRlX3J4cWAuIEl0IHVzZWQgdG8gcmV0dXJuIGEgcG9pbnRlciwgYnV0IG5vdyBpdCByZXR1cm5zIGFuIGBpbnRgIGVycm9yIGNvZGUsIHBhc3NpbmcgdGhlIHBvaW50ZXIgdmlhIGFuIG91dCBwYXJhbWV0ZXIuIFRoaXMgc2VlbXMgdG8gYmUgYSBzdHJhaWdodGZvcndhcmQgYnVnIGZpeCwgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBtaXNpbnRlcnByZXRhdGlvbiBvZiBlcnJvcnMuIFByZXZpb3VzbHksIGBtYW5hX2NyZWF0ZV9yeHFgIHdvdWxkIGFsd2F5cyByZXR1cm4gYE5VTExgIG9uIGFueSBlcnJvciwgYnV0IHRoZSBjYWxsaW5nIGZ1bmN0aW9uLCBgbWFuYV9hZGRfcnhfcXVldWVzYCwgd291bGQgYWx3YXlzIGFzc3VtZSBgLUVOT01FTWAsIHJlZ2FyZGxlc3Mgb2YgdGhlIHVuZGVybHlpbmcgaXNzdWUuIE5vdyB3ZSBoYXZlIHRoZSBhY3R1YWwgZXJyb3IgY29kZXMgYmVpbmcgcmV0dXJuZWQuXG5cbkhtbSwgdGhpcyB3YXJyYW50cyBhIGZ1enppbmcgY29uc2lkZXJhdGlvbiwgb2J2aW91c2x5LiBJdOKAmXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIG5ldHdvcmsgZHJpdmVyIGZvciB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciwgc28gdGhpcyBpcyBpbnRlcmVzdGluZyB0ZXJyaXRvcnkuIFRoZSBxdWVzdGlvbiBpcywgY2FuIHdlIGFjdHVhbGx5ICpyZWFjaCogdGhpcyBpbiBhIGZ1enphYmxlIGVudmlyb25tZW50PyBTaW5jZSBpdCdzIGEgUENJIGRldmljZSBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgQXp1cmUsIGl0J3MgdHlwaWNhbGx5IHRvdWdoLiBUaGVzZSBraW5kcyBvZiBoYXJkd2FyZSBkcml2ZXJzIGFyZSByYXJlbHkgZWFzaWx5IGZ1enphYmxlIHVubGVzcyB0aGV54oCZcmUgZW11bGF0ZWQgaW4gUUVNVSBvciBzeXprYWxsZXIgaGFzIGEgZ29vZCB3YXkgdG8gc2ltdWxhdGUgdGhlIFBDSSBoYXJkd2FyZS4gQW5kIHN5emthbGxlcidzIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcyBhcmUga25vd24gdG8gYmUgbGltaXRlZC4gSXMgTUFOQSBldmVuIGVtdWxhdGVkPyBQcm9iYWJseSBub3QsIHJpZ2h0P1xuXG5BbHJpZ2h0LCBsZXQncyB0cmFjZSB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY2FsbCBjaGFpbi4gYG1hbmFfY3JlYXRlX3J4cWAgaXMgY2FsbGVkIGJ5IGBtYW5hX2FkZF9yeF9xdWV1ZXNgLCB3aGljaCwgaW4gdHVybiwgaXMgcHJvYmFibHkgY2FsbGVkIGJ5IGBtYW5hX2F0dGFjaGAgb3IgYSBzaW1pbGFyIGZ1bmN0aW9uLiBMZXQncyBkbyBhIHF1aWNrIHNlYXJjaCBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jYCB0byBjb25maXJtIHRoZSBjYWxsIGNoYWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDkwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDM6MjQ6NDUuNjIyOTIwMTU2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyOTU5MTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hbmFfY3JlYXRlX3J4cVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jPTI3ODA9c3RhdGljIGludCBtYW5hX2NyZWF0ZV9wYWdlX3Bvb2woc3RydWN0IG1hbmFfcnhxICpyeHEsIHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTI4MTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jOjI4MTQ6c3RhdGljIGludCBtYW5hX2NyZWF0ZV9yeHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsIHUzMiByeHFfaWR4LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0yODE1LVxcdFxcdFxcdCAgIHN0cnVjdCBtYW5hX2VxICplcSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMjkzNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM6MjkzODpzdGF0aWMgdm9pZCBtYW5hX2NyZWF0ZV9yeHFfZGVidWdmcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgaW50IGlkeClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMjkzOS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM9Mjk2MD1zdGF0aWMgaW50IG1hbmFfYWRkX3J4X3F1ZXVlcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0yOTY3LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBhcGMtXFx1MDAzZW51bV9xdWV1ZXM7IGkrKykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzoyOTY4OlxcdFxcdGVyciA9IG1hbmFfY3JlYXRlX3J4cShhcGMsIGksIFxcdTAwMjZhcGMtXFx1MDAzZWVxc1tpXSwgbmRldiwgXFx1MDAyNnJ4cSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTI5NjktXFx0XFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTI5NzctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jOjI5Nzg6XFx0XFx0bWFuYV9jcmVhdGVfcnhxX2RlYnVnZnMoYXBjLCBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMjk3OS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAzOjI0OjQ1LjY4NTg4NjE0NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzQ5NTQxMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBGdXp6YWJpbGl0eSBvZiB0aGUgQXp1cmUgTmV0d29yayBBZGFwdGVyIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZHJpdmVyLCB0aGUgb25lIGZvciB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlci4gTXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcywgXCJobW1tLCB3b3J0aCBmdXp6aW5nP1wiIEkgdXN1YWxseSBzZWUgaGFyZHdhcmUgZHJpdmVycyB0aGF0IGRlcGVuZCBvbiBzcGVjaWZpYyBoYXJkd2FyZSwgZXNwZWNpYWxseSB0aG9zZSB0aGF0IGFyZW4ndCBlbXVsYXRlZCBpbiB0aGUgdXN1YWwgc3VzcGVjdHMgbGlrZSBRRU1VIG9yIHZoY2ksIGFuZCBJIGtub3cgc3l6a2FsbGVyIGRvZXNuJ3QgdHlwaWNhbGx5IHJlYWNoIHRob3NlLiBTbywgbXkgcHJpbWFyeSBxdWVzdGlvbiBiZWNvbWVzOiBpcyB0aGVyZSBhbnkga2luZCBvZiBlbXVsYXRpb24gaW4gcGxhY2UgZm9yIHRoZSBNQU5BIGFkYXB0ZXI/IElmIHRoZXJlJ3Mgbm8gZW11bGF0aW9uLCB0aGUgY2hhbmNlcyBvZiBlZmZlY3RpdmUgZnV6emluZyBkcm9wIHNpZ25pZmljYW50bHkuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGFuZCBzZWUgaWYgdGhlcmUncyBhbnkgYXZhaWxhYmxlIHNpbXVsYXRpb24sIG9yIGlmIHRoaXMgaXMgYSBub24tc3RhcnRlciByaWdodCBvdXQgb2YgdGhlIGdhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MzAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMzoyNDo0OC45MjA4NDIyNjdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzNzg0Nzk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNSUNST1NPRlRfTUFOQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvS2NvbmZpZz0yPWNvbmZpZyBNQU5BX0lORklOSUJBTkRcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9LY29uZmlnOjQ6XFx0ZGVwZW5kcyBvbiBORVRERVZJQ0VTIFxcdTAwMjZcXHUwMDI2IEVUSEVSTkVUIFxcdTAwMjZcXHUwMDI2IFBDSSBcXHUwMDI2XFx1MDAyNiBNSUNST1NPRlRfTUFOQVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL0tjb25maWctNS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZz0xNj1pZiBORVRfVkVORE9SX01JQ1JPU09GVFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnLTE3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnOjE4OmNvbmZpZyBNSUNST1NPRlRfTUFOQVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnLTE5LVxcdHRyaXN0YXRlIFxcXCJNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L01ha2VmaWxlLTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX01JQ1JPU09GVF9NQU5BKSArPSBtYW5hL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvTWFrZWZpbGUtNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19NSUNST1NPRlRfTUFOQSkgKz0gbWFuYS5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvTWFrZWZpbGUtNi1tYW5hLW9ianMgOj0gZ2RtYV9tYWluLm8gc2htX2NoYW5uZWwubyBod19jaGFubmVsLm8gbWFuYV9lbi5vIG1hbmFfZXRodG9vbC5vIG1hbmFfYnBmLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDM6MjQ6NTAuODU4Njk0Njk3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI1NzMxMjU3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIFN5emthbGxlcidzIE1BTkEgRnV6emluZyBDYXBhYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgZnV6emluZyB0aGUgTUFOQSBkZXZpY2Ugd2l0aCBzeXprYWxsZXIuIEZpcnN0IHRoaW5ncyBmaXJzdCwgaXMgTUFOQSBhIFBDSSBkZXZpY2U/IFllcywgaXQgaXMuIE5vdywgY2FuIHN5emthbGxlciBoYW5kbGUgdGhhdD8gV2VsbCwgaXQgKmRvZXMqIGhhdmUgc29tZSBQQ0kgZnV6emluZyBjYXBhYmlsaXRpZXMsIGJ1dCBmcm9tIG15IGV4cGVyaWVuY2UsIGl0J3MgcHJldHR5IGxpbWl0ZWQgYW5kIGdlbmVyYWxseSByZXF1aXJlcyB2ZXJ5IHNwZWNpZmljIGRlc2NyaXB0aW9ucyB0byBiZSBlZmZlY3RpdmUuIFRoaXMgaXMga2V5LiBIb2xkIG9uIGEgc2Vjb25kLi4uIGRvZXMgc3l6a2FsbGVyIGV2ZW4gKmhhdmUqIGEgTUFOQSBlbXVsYXRvcj8gTm8sIGl0IGRvZXNuJ3QuIFRoYXQgbWFrZXMgdGhpbmdzIG1vcmUgY29tcGxpY2F0ZWQuXG5cblNvLCBzeXprYWxsZXIgKmNhbiogdGVjaG5pY2FsbHkgZnV6eiBQQ0kgZGV2aWNlcyB1c2luZyB2UENJLCBidXQgb25seSBpZiB0aGUgZGV2aWNlJ3MgYmVoYXZpb3IgaXMgZXhwbGljaXRseSBkZXNjcmliZWQgaW4gdGhvc2UgZGVzY3JpcHRpb25zLiBXaXRob3V0IHRob3NlIGRlc2NyaXB0aW9ucywgaXQncyBwcmV0dHkgbXVjaCBqdXN0IHJhbmRvbSBmdXp6aW5nIG9mIHRoZSBQQ0kgY29uZmlnIHNwYWNlLiBBbmQgZnJvbSB3aGF0IEkndmUgc2VlbiwgdGhhdCBhbG1vc3QgbmV2ZXIgZ2V0cyBtZSBkZWVwIGVub3VnaCBpbnRvIHRoZSBkcml2ZXIgbG9naWMsIG5vdCBuZWFybHkgZW5vdWdoIHRvIGhpdCBzb21ldGhpbmcgaW1wb3J0YW50IGxpa2UgYG1hbmFfY3JlYXRlX3J4cWAuXG5cbkJ1dCB3YWl04oCmIEknbSByZW1lbWJlcmluZyB0aGF0IGBtYW5hX2NyZWF0ZV9yeHFgIGdldHMgY2FsbGVkIGR1cmluZyB0aGUgZGV2aWNlJ3MgaW5pdGlhbGl6YXRpb24uIEFoYSEgSWYgdGhlIFBDSSBwcm9iZSBzdWNjZWVkcywgdGhhdCAqY291bGQqIG1lYW4gaXQncyBjYWxsZWQuIFRoaXMgaXMgYSBwb3NzaWJpbGl0eS4gTm93LCBsZXQgbWUgY2hlY2sgaWYgYG1hbmFfcHJvYmVgIGRvZXMsIGluIGZhY3QsIGNhbGwgYG1hbmFfY3JlYXRlX3J4cWAuIFRoYXQncyB0aGUgY3JpdGljYWwgbGluayBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQzOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMzoyNDo1NS4xMTYwMDg5ODhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY5NjQ4NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFuYV9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9MTc3PXN0YXRpYyBpbnQgbWFuYV9nZF9xdWVyeV9tYXhfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjYxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jOjI2MjpcXHQvKiBDYXAgdG8gdGhlIHNhbWUgbGltaXQgdXNlZCBieSBtYW5hX3Byb2JlKCkgZm9yIHBvcnQgaW5zdGFudGlhdGlvbixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNjMtXFx0ICogc28gTVNJLVggYW5kIHF1ZXVlIGJ1ZGdldGluZyBtYXRjaGVzIHRoZSBhY3R1YWwgcG9ydCBjb3VudC5cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jPTIzMDI9c3RhdGljIGludCBtYW5hX2dkX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjM1Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzoyMzU4OlxcdGVyciA9IG1hbmFfcHJvYmUoXFx1MDAyNmdjLVxcdTAwM2VtYW5hLCBmYWxzZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjM1OS1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjM5Ni1cXHQgKiBIYXJkd2FyZSBjb3VsZCBiZSBpbiByZWNvdmVyeSBtb2RlIGFuZCB0aGUgSFdDIHJldHVybnMgVElNRURPVVQgb3JcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzoyMzk3OlxcdCAqIEVQUk9UTyBmcm9tIG1hbmFfZ2Rfc2V0dXAoKSwgbWFuYV9wcm9iZSgpIG9yIG1hbmFfcmRtYV9wcm9iZSgpLCBvclxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTIzOTgtXFx0ICogd2UgcmVjZWl2ZWQgYSBoYXJkd2FyZSByZXNldCBldmVudCBvdmVyIEhXQyBpbnRlcnJ1cHQuIEluIHRoaXMgY2FzZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jPTI0NjA9aW50IG1hbmFfZ2RfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjQ2OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzoyNDY5OlxcdGVyciA9IG1hbmFfcHJvYmUoXFx1MDAyNmdjLVxcdTAwM2VtYW5hLCB0cnVlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNDcwLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM9MzUyMz1pbnQgbWFuYV9kZXRhY2goc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGJvb2wgZnJvbV9jbG9zZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0zNTU5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzozNTYwOnN0YXRpYyBpbnQgbWFuYV9wcm9iZV9wb3J0KHN0cnVjdCBtYW5hX2NvbnRleHQgKmFjLCBpbnQgcG9ydF9pZHgsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTM1NjEtXFx0XFx0XFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKipuZGV2X3N0b3JhZ2UpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM9Mzc5MD1zdGF0aWMgdm9pZCBtYW5hX2dmX3N0YXRzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMzgxMi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM6MzgxMzppbnQgbWFuYV9wcm9iZShzdHJ1Y3QgZ2RtYV9kZXYgKmdkLCBib29sIHJlc3VtaW5nKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0zODE0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0zODg3LVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBhYy1cXHUwMDNlbnVtX3BvcnRzOyBpKyspIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM6Mzg4ODpcXHRcXHRcXHRlcnIgPSBtYW5hX3Byb2JlX3BvcnQoYWMsIGksIFxcdTAwMjZhYy1cXHUwMDNlcG9ydHNbaV0pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0zODg5LVxcdFxcdFxcdC8qIExvZyB0aGUgcG9ydCBmb3Igd2hpY2ggdGhlIHByb2JlIGZhaWxlZCwgc3RvcCBwcm9iaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAzOjI0OjU1LjE3Mjk3ODIxNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTIzODQyMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGZyYW1lZCBhcyBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBtYW5hYCBOZXR3b3JrIFN0YWNrIEZsb3cqKlxuXG5BbHJpZ2h0LCBJJ20gdHJhY2luZyB0aHJvdWdoIHRoZSBgbWFuYV9wcm9iZWAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgYG1hbmFfcHJvYmVgIGlzIG1ha2luZyBhIGNhbGwgdG8gYG1hbmFfcHJvYmVfcG9ydGAuIE5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gSSdtIHRyeWluZyB0byBhbnN3ZXIgaXMgd2hhdCBoYXBwZW5zICphZnRlciogdGhhdC4gRG9lcyBgbWFuYV9wcm9iZV9wb3J0YCBjb250aW51ZSBieSBjYWxsaW5nIGBtYW5hX2F0dGFjaGAsIHdoaWNoIEkgc3VzcGVjdCB3b3VsZCBiZSB0aGUgcGF0aCBmb3IgZXN0YWJsaXNoaW5nIHRoZSBwb3J0IHdpdGhpbiB0aGUgYG1hbmFgIHN1YnN5c3RlbSwgb3IgaXMgaXQgZ29pbmcgZG93biB0aGUgcXVldWUgc2V0dXAgcm91dGUgd2l0aCBgbWFuYV9hZGRfcnhfcXVldWVzYD8gVGhlIGRpc3RpbmN0aW9uIGhlcmUgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHBvcnQgaW5pdGlhbGl6YXRpb24gcGF0aC4gQXJlIHdlIGluaXRpYWxseSBhdHRhY2hpbmcgdGhlIHBvcnQncyByZXNvdXJjZXMsIG9yIGlzIHRoZSBxdWV1ZSBzZXR1cCBiZWluZyBoYW5kbGVkIGZpcnN0PyBEZXBlbmRpbmcgb24gaG93IHRoZSBzeXN0ZW0gaXMgZGVzaWduZWQsIHRoaXMgbWF5IGJlIGFuIGltcG9ydGFudCBkYXRhIHBhdGggdG8gYW5hbHl6ZSB0byBmaW5kIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgY2FsbCBjaGFpbiBmcm9tIHRoaXMgcG9pbnQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgcG9ydCBpbml0aWFsaXphdGlvbiBmbG93IGluIHRoaXMgYG1hbmFgIGZyYW1ld29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg4OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAzOjI0OjU4LjQ4NTM2NDMyN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTczOTQ1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFuYV9hZGRfcnhfcXVldWVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM9MjkzOD1zdGF0aWMgdm9pZCBtYW5hX2NyZWF0ZV9yeHFfZGVidWdmcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgaW50IGlkeClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0yOTU5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzoyOTYwOnN0YXRpYyBpbnQgbWFuYV9hZGRfcnhfcXVldWVzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0yOTYxLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jPTMzMzI9aW50IG1hbmFfYWxsb2NfcXVldWVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTMzNjYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jOjMzNjc6XFx0ZXJyID0gbWFuYV9hZGRfcnhfcXVldWVzKGFwYywgbmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTMzNjgtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDM6MjQ6NTguNTQyNzY0MDg2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4OTc3ODA5MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgYG1hbmFgIGFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSBgbWFuYV9hbGxvY19xdWV1ZXNgIGlzIGNhbGxpbmcgYG1hbmFfYWRkX3J4X3F1ZXVlc2AuIFRoYXQncyBzdGFuZGFyZCBwcmFjdGljZSwgdGhlIGFsbG9jYXRpb24gZnVuY3Rpb24gdXN1YWxseSBpbml0aWFsaXplcyBzb21lIHRoaW5ncyBiZWZvcmUgYWRkaW5nIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGJldHRlci5cblxuQnV0IGhvbGQgb24uLi4gYmVmb3JlIEkgZGl2ZSBpbnRvIHRoZSBpbnRlcm5hbHMgb2YgYG1hbmFfYWRkX3J4X3F1ZXVlc2AsIG15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyAqd2hvKiBpcyBjYWxsaW5nIGBtYW5hX2FsbG9jX3F1ZXVlc2A/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyAqY3JpdGljYWwqIGZvciBncmFzcGluZyB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBmdW5jdGlvbiBjYWxsIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIHdob2xlIGFsbG9jYXRpb24gcHJvY2VzcyBiZWdpbnMuIFdoYXQgc3Vic3lzdGVtIGlzIHRyaWdnZXJpbmcgdGhpcyBhbGxvY2F0aW9uPyBJcyBpdCBvbiBkZXZpY2UgaW5pdCwgb24gbmV0d29yayBldmVudCwgZXRjLiBDb250ZXh0IGlzIGtleSB0byB1bmRlcnN0YW5kIHdoYXQgaXMgaGFwcGVuaW5nIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0OTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMzoyNTowMS40NDA1NDcxNzZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NzkwNzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hbmFfYWxsb2NfcXVldWVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM9NzM9c3RhdGljIGludCBtYW5hX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtNzYtXFx0aW50IGVycjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM6Nzc6XFx0ZXJyID0gbWFuYV9hbGxvY19xdWV1ZXMobmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTc4LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jPTMyNzA9c3RhdGljIGludCBtYW5hX2luaXRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0zMzMxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzozMzMyOmludCBtYW5hX2FsbG9jX3F1ZXVlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMzMzMy17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM9MzQxMD1pbnQgbWFuYV9hdHRhY2goc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMzQyMS1cXHRpZiAoYXBjLVxcdTAwM2Vwb3J0X3N0X3NhdmUpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM6MzQyMjpcXHRcXHRlcnIgPSBtYW5hX2FsbG9jX3F1ZXVlcyhuZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMzQyMy1cXHRcXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAzOjI1OjAxLjQ5ODM0MzYwNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTEyNjI5NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE1BTkEgYW5kIFN5emthbGxlciBDb21wYXRpYmlsaXR5KipcblxuT2theSwgc28gaGVyZSdzIHRoZSBicmVha2Rvd24gb2Ygd2hhdCBJJ20gdGhpbmtpbmcgcmVnYXJkaW5nIE1BTkEgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBTeXprYWxsZXIuIEVzc2VudGlhbGx5LCBgbWFuYV9vcGVuYCBpcyB0aGUga2V5IGVudHJ5IHBvaW50OyBpdCB0cmlnZ2VycyBgbWFuYV9hbGxvY19xdWV1ZXNgLCB3aGljaCBldmVudHVhbGx5IGxlYWRzIHRvIHRoZSBjcmVhdGlvbiBvZiByZWNlaXZlIHF1ZXVlcyB0aHJvdWdoIGBtYW5hX2FkZF9yeF9xdWV1ZXNgIGFuZCBgbWFuYV9jcmVhdGVfcnhxYC4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgU3l6a2FsbGVyLCBpbiBpdHMgY3VycmVudCBzZXR1cCwgYWN0dWFsbHkgcmVnaXN0ZXJzIHRoaXMgZGV2aWNlLlxuXG5Db25zaWRlcmluZyBob3cgU3l6a2FsbGVyIG9wZXJhdGVzIOKAkyBpbiBRRU1VIG9yIEdDRSBwcmltYXJpbHkg4oCTIEkgaW1tZWRpYXRlbHkgaGl0IGEgcm9hZGJsb2NrLiBHQ0UgcmVsaWVzIG9uIHZpcnRpby1uZXQgb3IgZ3ZlLCBhbmQgd2hpbGUgQXp1cmUgdXNlcyBNQU5BLCB0aGUgZW52aXJvbm1lbnRzIFN5emthbGxlciB0eXBpY2FsbHkgcnVucyBpbiBkb24ndCBuYXRpdmVseSBpbmNsdWRlIHRoaXMgaGFyZHdhcmUuIFRoZSBpbXBsaWNhdGlvbiBpcywgc3RyYWlnaHQgb3V0IG9mIHRoZSBib3gsIFN5emthbGxlciBjYW4ndCBcInNlZVwiIE1BTkEuXG5cblRoZSBuYXR1cmFsIGZvbGxvdy11cCBpcywgZG9lcyBTeXprYWxsZXIgKmVtdWxhdGUqIE1BTkE/IFdlIGtub3cgaXQgaGFzIG1lY2hhbmlzbXMgZm9yIFVTQiAodmhjaSkgYW5kIFdpLUZpIChtYWM4MDIxMV9od3NpbSksIHNvIHRoZXJlJ3MgcHJlY2VkZW50LiBCdXQgYSBxdWljayBjaGVjayByZXZlYWxzIG5vIGV4cGxpY2l0IGVtdWxhdGlvbiBmb3IgTUFOQS4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGlzc3VlLlxuXG5Ib3dldmVyLCB0aGVyZSdzIGEgZ2xpbW1lciBvZiBob3BlOiBTeXprYWxsZXIgKmRvZXMqIGhhdmUgYSBQQ0kgZnV6emVyLCB3aGljaCBpcyBkZXNpZ25lZCB0byBpbmplY3QgUENJIGRldmljZXMuIENvdWxkIHRoaXMgYmUgdGhlIHNvbHV0aW9uPyBNYXliZS4gQnV0IGV2ZW4gaWYgaXQgKmNhbiogaW5qZWN0IGEgUENJIGRldmljZSByZXByZXNlbnRpbmcgTUFOQSwgdGhhdCdzIG9ubHkgdGhlIGZpcnN0IHN0ZXAuIEZvciBgbWFuYV9wcm9iZWAgdG8gc3VjY2VlZCwgdGhlIGVtdWxhdGVkIGRldmljZSB3b3VsZCBuZWVkIHRvIHJlc3BvbmQgdG8gc3BlY2lmaWMgTU1JTyByZWFkcyBhbmQgd3JpdGVzIGluIGEgd2F5IHRoYXQgc2F0aXNmaWVzIHRoZSBkcml2ZXIuXG5cblNvIHRoZSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBkaXZlIGludG8gdGhlIGNvZGUgZm9yIGBtYW5hX3Byb2JlYCBhbmQgYG1hbmFfZ2RfcHJvYmVgIHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IHdoYXQgY29uZGl0aW9ucyBuZWVkIHRvIGJlIG1ldCwgd2hhdCByZWdpc3RlcnMgbmVlZCB0byBiZSByZWFkLCBhbmQgd2hhdCB2YWx1ZXMgYXJlIGV4cGVjdGVkIGluIHRoZSB3cml0ZXMuIFRoaXMgd2lsbCByZXZlYWwgdGhlIGZlYXNpYmlsaXR5IG9mIHVzaW5nIHRoZSBQQ0kgZnV6emVyIHRvIHRyaWNrIHRoZSBkcml2ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNDMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDM6MjU6MDcuNDEwOTc0ODkxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzA4NDg4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYW5hX2dkX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYz0yMjk3PXN0YXRpYyBib29sIG1hbmFfaXNfcGYodW5zaWduZWQgc2hvcnQgZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjMwMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzoyMzAyOnN0YXRpYyBpbnQgbWFuYV9nZF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yMzAzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jPTI1MDY9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG1hbmFfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjUwOC1cXHQuaWRfdGFibGVcXHQ9IG1hbmFfaWRfdGFibGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6MjUwOTpcXHQucHJvYmVcXHRcXHQ9IG1hbmFfZ2RfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjUxMC1cXHQucmVtb3ZlXFx0XFx0PSBtYW5hX2dkX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDM6MjU6MDcuNDc0MDY3NjU5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1NTY4NDY0ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIGBtYW5hX2dkX3Byb2JlYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIGl0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8ganVzdCBqdW1wIHJpZ2h0IGluIGFuZCBzZWUgd2hhdCBgbWFuYV9nZF9wcm9iZWAgaXMgYWN0dWFsbHkgZG9pbmcuIE5vIG5lZWQgZm9yIGV4Y2Vzc2l2ZSB0aGVvcml6aW5nIGF0IHRoaXMgcG9pbnQuIEdvdHRhIHNlZSB0aGUgY29kZSwgcG9rZSBhcm91bmQsIHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uLiBXaGF0IGV4YWN0bHkgaXMgdGhpcyBwcm9iZSBkZXNpZ25lZCB0byBhY2hpZXZlPyBXaGF0IGRhdGEgaXMgaXQgaW50ZXJhY3Rpbmcgd2l0aD8gTGV0J3MgZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb3JlIHB1cnBvc2UgYmVmb3JlIGdldHRpbmcgaW50byBkZWVwZXIgYW5hbHlzaXMuIExldCdzIHNlZSBob3cgaXQgb3BlcmF0ZXMgYW5kIGdvIGZyb20gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNTQsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMzoyNToxMC4wMzA5MTU5NzZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzMDIsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMzAyOlxcdHN0YXRpYyBpbnQgbWFuYV9nZF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4yMzAzOlxcdHtcXG4yMzA0OlxcdFxcdHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjO1xcbjIzMDU6XFx0XFx0dm9pZCBfX2lvbWVtICpiYXIwX3ZhO1xcbjIzMDY6XFx0XFx0aW50IGJhciA9IDA7XFxuMjMwNzpcXHRcXHRpbnQgZXJyO1xcbjIzMDg6XFx0XFxuMjMwOTpcXHRcXHQvKiBFYWNoIHBvcnQgaGFzIDIgQ1FzLCBlYWNoIENRIGhhcyBhdCBtb3N0IDEgRVFFIGF0IGEgdGltZSAqL1xcbjIzMTA6XFx0XFx0QlVJTERfQlVHX09OKDIgKiBNQVhfUE9SVFNfSU5fTUFOQV9ERVYgKiBHRE1BX0VRRV9TSVpFIFxcdTAwM2UgRVFfU0laRSk7XFxuMjMxMTpcXHRcXG4yMzEyOlxcdFxcdGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpO1xcbjIzMTM6XFx0XFx0aWYgKGVycikge1xcbjIzMTQ6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIGVuYWJsZSBwY2kgZGV2aWNlIChlcnI9JWQpXFxcXG5cXFwiLCBlcnIpO1xcbjIzMTU6XFx0XFx0XFx0cmV0dXJuIC1FTlhJTztcXG4yMzE2OlxcdFxcdH1cXG4yMzE3OlxcdFxcbjIzMTg6XFx0XFx0cGNpX3NldF9tYXN0ZXIocGRldik7XFxuMjMxOTpcXHRcXG4yMzIwOlxcdFxcdGVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgXFxcIm1hbmFcXFwiKTtcXG4yMzIxOlxcdFxcdGlmIChlcnIpXFxuMjMyMjpcXHRcXHRcXHRnb3RvIGRpc2FibGVfZGV2O1xcbjIzMjM6XFx0XFxuMjMyNDpcXHRcXHRlcnIgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIERNQV9CSVRfTUFTSyg2NCkpO1xcbjIzMjU6XFx0XFx0aWYgKGVycikge1xcbjIzMjY6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiRE1BIHNldCBtYXNrIGZhaWxlZDogJWRcXFxcblxcXCIsIGVycik7XFxuMjMyNzpcXHRcXHRcXHRnb3RvIHJlbGVhc2VfcmVnaW9uO1xcbjIzMjg6XFx0XFx0fVxcbjIzMjk6XFx0XFx0ZG1hX3NldF9tYXhfc2VnX3NpemUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgVUlOVF9NQVgpO1xcbjIzMzA6XFx0XFxuMjMzMTpcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbjIzMzI6XFx0XFx0Z2MgPSB2emFsbG9jKHNpemVvZigqZ2MpKTtcXG4yMzMzOlxcdFxcdGlmICghZ2MpXFxuMjMzNDpcXHRcXHRcXHRnb3RvIHJlbGVhc2VfcmVnaW9uO1xcbjIzMzU6XFx0XFxuMjMzNjpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZnYy1cXHUwMDNlZXFfdGVzdF9ldmVudF9tdXRleCk7XFxuMjMzNzpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZnYy1cXHUwMDNlZ2ljX211dGV4KTtcXG4yMzM4OlxcdFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBnYyk7XFxuMjMzOTpcXHRcXHRnYy1cXHUwMDNlYmFyMF9wYSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTtcXG4yMzQwOlxcdFxcdGdjLVxcdTAwM2ViYXIwX3NpemUgPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApO1xcbjIzNDE6XFx0XFxuMjM0MjpcXHRcXHRiYXIwX3ZhID0gcGNpX2lvbWFwKHBkZXYsIGJhciwgMCk7XFxuMjM0MzpcXHRcXHRpZiAoIWJhcjBfdmEpXFxuMjM0NDpcXHRcXHRcXHRnb3RvIGZyZWVfZ2M7XFxuMjM0NTpcXHRcXG4yMzQ2OlxcdFxcdGdjLVxcdTAwM2VudW1hX25vZGUgPSBkZXZfdG9fbm9kZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4yMzQ3OlxcdFxcdGdjLVxcdTAwM2Vpc19wZiA9IG1hbmFfaXNfcGYocGRldi1cXHUwMDNlZGV2aWNlKTtcXG4yMzQ4OlxcdFxcdGdjLVxcdTAwM2Vpc19wZjIgPSAocGRldi1cXHUwMDNlZGV2aWNlID09IE1BTkFfUEYyX0RFVklDRV9JRCk7XFxuMjM0OTpcXHRcXG4yMzUwOlxcdFxcdGdjLVxcdTAwM2ViYXIwX3ZhID0gYmFyMF92YTtcXG4yMzUxOlxcdFxcdGdjLVxcdTAwM2VkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbjIzNTI6XFx0XFx0eGFfaW5pdChcXHUwMDI2Z2MtXFx1MDAzZWlycV9jb250ZXh0cyk7XFxuMjM1MzpcXHRcXG4yMzU0OlxcdFxcdGVyciA9IG1hbmFfZ2Rfc2V0dXAocGRldik7XFxuMjM1NTpcXHRcXHRpZiAoZXJyKVxcbjIzNTY6XFx0XFx0XFx0Z290byB1bm1hcF9iYXI7XFxuMjM1NzpcXHRcXG4yMzU4OlxcdFxcdGVyciA9IG1hbmFfcHJvYmUoXFx1MDAyNmdjLVxcdTAwM2VtYW5hLCBmYWxzZSk7XFxuMjM1OTpcXHRcXHRpZiAoZXJyKVxcbjIzNjA6XFx0XFx0XFx0Z290byBjbGVhbnVwX2dkO1xcbjIzNjE6XFx0XFxuMjM2MjpcXHRcXHRlcnIgPSBtYW5hX3JkbWFfcHJvYmUoXFx1MDAyNmdjLVxcdTAwM2VtYW5hX2liKTtcXG4yMzYzOlxcdFxcdGlmIChlcnIpXFxuMjM2NDpcXHRcXHRcXHRnb3RvIGNsZWFudXBfbWFuYTtcXG4yMzY1OlxcdFxcbjIzNjY6XFx0XFx0LypcXG4yMzY3OlxcdFxcdCAqIElmIGEgaGFyZHdhcmUgcmVzZXQgZXZlbnQgaGFzIG9jY3VycmVkIG92ZXIgSFdDIGR1cmluZyBwcm9iZSxcXG4yMzY4OlxcdFxcdCAqIHJvbGxiYWNrIGFuZCBwZXJmb3JtIGhhcmR3YXJlIHJlc2V0IHByb2NlZHVyZS5cXG4yMzY5OlxcdFxcdCAqL1xcbjIzNzA6XFx0XFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoR0NfUFJPQkVfU1VDQ0VFREVELCBcXHUwMDI2Z2MtXFx1MDAzZWZsYWdzKSkge1xcbjIzNzE6XFx0XFx0XFx0ZXJyID0gLUVQUk9UTztcXG4yMzcyOlxcdFxcdFxcdGdvdG8gY2xlYW51cF9tYW5hX3JkbWE7XFxuMjM3MzpcXHRcXHR9XFxuMjM3NDpcXHRcXG4yMzc1OlxcdFxcdHJldHVybiAwO1xcbjIzNzY6XFx0XFxuMjM3NzpcXHRjbGVhbnVwX21hbmFfcmRtYTpcXG4yMzc4OlxcdFxcdG1hbmFfcmRtYV9yZW1vdmUoXFx1MDAyNmdjLVxcdTAwM2VtYW5hX2liKTtcXG4yMzc5OlxcdGNsZWFudXBfbWFuYTpcXG4yMzgwOlxcdFxcdG1hbmFfcmVtb3ZlKFxcdTAwMjZnYy1cXHUwMDNlbWFuYSwgZmFsc2UpO1xcbjIzODE6XFx0Y2xlYW51cF9nZDpcXG4yMzgyOlxcdFxcdG1hbmFfZ2RfY2xlYW51cF9kZXZpY2UocGRldik7XFxuMjM4MzpcXHR1bm1hcF9iYXI6XFxuMjM4NDpcXHRcXHR4YV9kZXN0cm95KFxcdTAwMjZnYy1cXHUwMDNlaXJxX2NvbnRleHRzKTtcXG4yMzg1OlxcdFxcdHBjaV9pb3VubWFwKHBkZXYsIGJhcjBfdmEpO1xcbjIzODY6XFx0ZnJlZV9nYzpcXG4yMzg3OlxcdFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTtcXG4yMzg4OlxcdFxcdHZmcmVlKGdjKTtcXG4yMzg5OlxcdHJlbGVhc2VfcmVnaW9uOlxcbjIzOTA6XFx0XFx0cGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTtcXG4yMzkxOlxcdGRpc2FibGVfZGV2OlxcbjIzOTI6XFx0XFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbjIzOTM6XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiZ2RtYSBwcm9iZSBmYWlsZWQ6IGVyciA9ICVkXFxcXG5cXFwiLCBlcnIpO1xcbjIzOTQ6XFx0XFxuMjM5NTpcXHRcXHQvKlxcbjIzOTY6XFx0XFx0ICogSGFyZHdhcmUgY291bGQgYmUgaW4gcmVjb3ZlcnkgbW9kZSBhbmQgdGhlIEhXQyByZXR1cm5zIFRJTUVET1VUIG9yXFxuMjM5NzpcXHRcXHQgKiBFUFJPVE8gZnJvbSBtYW5hX2dkX3NldHVwKCksIG1hbmFfcHJvYmUoKSBvciBtYW5hX3JkbWFfcHJvYmUoKSwgb3JcXG4yMzk4OlxcdFxcdCAqIHdlIHJlY2VpdmVkIGEgaGFyZHdhcmUgcmVzZXQgZXZlbnQgb3ZlciBIV0MgaW50ZXJydXB0LiBJbiB0aGlzIGNhc2UsXFxuMjM5OTpcXHRcXHQgKiBwZXJmb3JtIHRoZSBkZXZpY2UgcmVjb3ZlcnkgcHJvY2VkdXJlIGFmdGVyIE1BTkFfU0VSVklDRV9QRVJJT0RcXG4yNDAwOlxcdFxcdCAqIHNlY29uZHMuXFxuMjQwMTpcXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDM6MjU6MTAuMDMxMDYxMjE2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MTgyOTQ2MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgTWFuYSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIGBtYW5hX2dkX3NldHVwYCBnZXRzIGNhbGxlZCAqYmVmb3JlKiBgbWFuYV9wcm9iZWAuIFRoYXQncyB0aGUga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHByZXBhcmF0b3J5IHN0ZXBzIGFyZSBiZWluZyB0YWtlbiBiZWZvcmUgdGhlIGFjdHVhbCBwcm9iaW5nIHByb2Nlc3MgYmVnaW5zLiBJdCdzIGFsbW9zdCBjZXJ0YWluIHRoaXMgc2V0dXAgZnVuY3Rpb24gaXMgbGF5aW5nIHRoZSBncm91bmR3b3JrIGZvciB0aGUgcHJvYmUuIEkgbmVlZCB0byBkaXZlIGludG8gYG1hbmFfZ2Rfc2V0dXBgIGFuZCBxdWlja2x5IGlkZW50aWZ5IGl0cyBwdXJwb3NlLiBJcyBpdCBhbGxvY2F0aW5nIHJlc291cmNlcz8gSW5pdGlhbGl6aW5nIGRhdGEgc3RydWN0dXJlcz8gQ29uZmlndXJpbmcgaGFyZHdhcmU/IERldGVybWluaW5nIHRoZSBjb250ZXh0J3MgcmVhZGluZXNzIGZvciBwcm9iaW5nPyBNeSBhc3N1bXB0aW9uIGlzIHRoYXQgaXQncyBkb2luZyBvbmUgb3IgYSBjb21iaW5hdGlvbiBvZiB0aGVzZSB0aGluZ3MgdG8gZmFjaWxpdGF0ZSBhIHN1Y2Nlc3NmdWwgcHJvYmUuIEdvdHRhIHBpbnBvaW50IHRoZSBzcGVjaWZpYyBhY3Rpb25zIHRha2VuLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTIzLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMzoyNToxMi44NDkzNTc3MjdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTAwOlxcdFxcdGNwdXNfcmVhZF91bmxvY2soKTtcXG4yMTAxOlxcdFxcdGtmcmVlKHN0YXJ0X2lycXMpO1xcbjIxMDI6XFx0XFx0cmV0dXJuIDA7XFxuMjEwMzpcXHRcXG4yMTA0OlxcdGZyZWVfaXJxOlxcbjIxMDU6XFx0XFx0Zm9yIChpIC09IDE7IGkgXFx1MDAzZT0gMDsgaS0tKVxcbjIxMDY6XFx0XFx0XFx0bWFuYV9nZF9wdXRfZ2ljKGdjLCBmYWxzZSwgaSk7XFxuMjEwNzpcXHRcXG4yMTA4OlxcdFxcdGtmcmVlKHN0YXJ0X2lycXMpO1xcbjIxMDk6XFx0XFx0cmV0dXJuIGVycjtcXG4yMTEwOlxcdH1cXG4yMTExOlxcdFxcbjIxMTI6XFx0c3RhdGljIGludCBtYW5hX2dkX3NldHVwX2h3Y19pcnFzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbjIxMTM6XFx0e1xcbjIxMTQ6XFx0XFx0c3RydWN0IGdkbWFfY29udGV4dCAqZ2MgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuMjExNTpcXHRcXHR1bnNpZ25lZCBpbnQgbWF4X2lycXMsIG1pbl9pcnFzO1xcbjIxMTY6XFx0XFx0aW50IG52ZWMsIGVycjtcXG4yMTE3OlxcdFxcbjIxMTg6XFx0XFx0aWYgKHBjaV9tc2l4X2Nhbl9hbGxvY19keW4ocGRldikpIHtcXG4yMTE5OlxcdFxcdFxcdG1heF9pcnFzID0gMTtcXG4yMTIwOlxcdFxcdFxcdG1pbl9pcnFzID0gMTtcXG4yMTIxOlxcdFxcdH0gZWxzZSB7XFxuMjEyMjpcXHRcXHRcXHQvKiBOZWVkIDEgaW50ZXJydXB0IGZvciBIV0MgKi9cXG4yMTIzOlxcdFxcdFxcdG1heF9pcnFzID0gbWluKG51bV9vbmxpbmVfY3B1cygpLCBNQU5BX01BWF9OVU1fUVVFVUVTKSArIDE7XFxuMjEyNDpcXHRcXHRcXHRtaW5faXJxcyA9IDI7XFxuMjEyNTpcXHRcXHRcXHRnYy1cXHUwMDNlbXNpX3NoYXJpbmcgPSB0cnVlO1xcbjIxMjY6XFx0XFx0fVxcbjIxMjc6XFx0XFxuMjEyODpcXHRcXHRudmVjID0gcGNpX2FsbG9jX2lycV92ZWN0b3JzKHBkZXYsIG1pbl9pcnFzLCBtYXhfaXJxcywgUENJX0lSUV9NU0lYKTtcXG4yMTI5OlxcdFxcdGlmIChudmVjIFxcdTAwM2MgMClcXG4yMTMwOlxcdFxcdFxcdHJldHVybiBudmVjO1xcbjIxMzE6XFx0XFxuMjEzMjpcXHRcXHRlcnIgPSBtYW5hX2dkX3NldHVwX2lycXMocGRldiwgbnZlYyk7XFxuMjEzMzpcXHRcXHRpZiAoZXJyKSB7XFxuMjEzNDpcXHRcXHRcXHRwY2lfZnJlZV9pcnFfdmVjdG9ycyhwZGV2KTtcXG4yMTM1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMjEzNjpcXHRcXHR9XFxuMjEzNzpcXHRcXG4yMTM4OlxcdFxcdGdjLVxcdTAwM2VudW1fbXNpeF91c2FibGUgPSBudmVjO1xcbjIxMzk6XFx0XFx0Z2MtXFx1MDAzZW1heF9udW1fbXNpeCA9IG52ZWM7XFxuMjE0MDpcXHRcXG4yMTQxOlxcdFxcdHJldHVybiAwO1xcbjIxNDI6XFx0fVxcbjIxNDM6XFx0XFxuMjE0NDpcXHRzdGF0aWMgaW50IG1hbmFfZ2Rfc2V0dXBfcmVtYWluaW5nX2lycXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuMjE0NTpcXHR7XFxuMjE0NjpcXHRcXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4yMTQ3OlxcdFxcdHN0cnVjdCBtc2lfbWFwIGlycV9tYXA7XFxuMjE0ODpcXHRcXHRpbnQgbWF4X2lycXMsIGksIGVycjtcXG4yMTQ5OlxcdFxcbjIxNTA6XFx0XFx0aWYgKCFwY2lfbXNpeF9jYW5fYWxsb2NfZHluKHBkZXYpKVxcbjIxNTE6XFx0XFx0XFx0LyogcmVtYWluIGlycXMgYXJlIGFscmVhZHkgYWxsb2NhdGVkIHdpdGggSFdDIElSUSAqL1xcbjIxNTI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjE1MzpcXHRcXG4yMTU0OlxcdFxcdC8qIGFsbG9jYXRlIG9ubHkgcmVtYWluaW5nIElSUXMqL1xcbjIxNTU6XFx0XFx0bWF4X2lycXMgPSBnYy1cXHUwMDNlbnVtX21zaXhfdXNhYmxlIC0gMTtcXG4yMTU2OlxcdFxcbjIxNTc6XFx0XFx0Zm9yIChpID0gMTsgaSBcXHUwMDNjPSBtYXhfaXJxczsgaSsrKSB7XFxuMjE1ODpcXHRcXHRcXHRpcnFfbWFwID0gcGNpX21zaXhfYWxsb2NfaXJxX2F0KHBkZXYsIGksIE5VTEwpO1xcbjIxNTk6XFx0XFx0XFx0aWYgKCFpcnFfbWFwLnZpcnEpIHtcXG4yMTYwOlxcdFxcdFxcdFxcdGVyciA9IGlycV9tYXAuaW5kZXg7XFxuMjE2MTpcXHRcXHRcXHRcXHQvKiBjYWxsZXIgd2lsbCBoYW5kbGUgY2xlYW5pbmcgdXAgYWxsIGFsbG9jYXRlZFxcbjIxNjI6XFx0XFx0XFx0XFx0ICogaXJxcywgYWZ0ZXIgSFdDIGlzIGRlc3Ryb3llZFxcbjIxNjM6XFx0XFx0XFx0XFx0ICovXFxuMjE2NDpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjIxNjU6XFx0XFx0XFx0fVxcbjIxNjY6XFx0XFx0fVxcbjIxNjc6XFx0XFxuMjE2ODpcXHRcXHRlcnIgPSBtYW5hX2dkX3NldHVwX2R5bl9pcnFzKHBkZXYsIG1heF9pcnFzKTtcXG4yMTY5OlxcdFxcdGlmIChlcnIpXFxuMjE3MDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjIxNzE6XFx0XFxuMjE3MjpcXHRcXHRnYy1cXHUwMDNlbWF4X251bV9tc2l4ID0gZ2MtXFx1MDAzZW1heF9udW1fbXNpeCArIG1heF9pcnFzO1xcbjIxNzM6XFx0XFxuMjE3NDpcXHRcXHRyZXR1cm4gMDtcXG4yMTc1OlxcdH1cXG4yMTc2OlxcdFxcbjIxNzc6XFx0c3RhdGljIHZvaWQgbWFuYV9nZF9yZW1vdmVfaXJxcyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4yMTc4OlxcdHtcXG4yMTc5OlxcdFxcdHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xcbjIxODA6XFx0XFx0aW50IGk7XFxuMjE4MTpcXHRcXG4yMTgyOlxcdFxcdGlmIChnYy1cXHUwMDNlbWF4X251bV9tc2l4IFxcdTAwM2MgMSlcXG4yMTgzOlxcdFxcdFxcdHJldHVybjtcXG4yMTg0OlxcdFxcbjIxODU6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGdjLVxcdTAwM2VtYXhfbnVtX21zaXg7IGkrKykge1xcbjIxODY6XFx0XFx0XFx0aWYgKCF4YV9sb2FkKFxcdTAwMjZnYy1cXHUwMDNlaXJxX2NvbnRleHRzLCBpKSlcXG4yMTg3OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjIxODg6XFx0XFxuMjE4OTpcXHRcXHRcXHRtYW5hX2dkX3B1dF9naWMoZ2MsIGZhbHNlLCBpKTtcXG4yMTkwOlxcdFxcdH1cXG4yMTkxOlxcdFxcbjIxOTI6XFx0XFx0V0FSTl9PTigheGFfZW1wdHkoXFx1MDAyNmdjLVxcdTAwM2VpcnFfY29udGV4dHMpKTtcXG4yMTkzOlxcdFxcbjIxOTQ6XFx0XFx0cGNpX2ZyZWVfaXJxX3ZlY3RvcnMocGRldik7XFxuMjE5NTpcXHRcXG4yMTk2OlxcdFxcdGJpdG1hcF9mcmVlKGdjLVxcdTAwM2Vtc2lfYml0bWFwKTtcXG4yMTk3OlxcdFxcdGdjLVxcdTAwM2Vtc2lfYml0bWFwID0gTlVMTDtcXG4yMTk4OlxcdFxcdGdjLVxcdTAwM2VtYXhfbnVtX21zaXggPSAwO1xcbjIxOTk6XFx0XFx0Z2MtXFx1MDAzZW51bV9tc2l4X3VzYWJsZSA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAzOjI1OjEyLjg0OTU0NDI1N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzExNzE4ODgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgbWFuYV9nZF9zZXR1cGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgY29yZSBvZiB0aGlzLiBNeSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBpbm5lciB3b3JraW5ncy4gTGV0J3Mgc3RhcnQgd2l0aCBgbWFuYV9nZF9zZXR1cGAgYW5kIHdoYXQgaXQgYWN0dWFsbHkgKmRvZXMqLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgZnVuY3Rpb25hbGl0eS4gV2hhdCBhcmUgaXRzIGNvbXBvbmVudHM/IFdoYXQgYXJlIGl0cyBkZXBlbmRlbmNpZXM/IFdoYXQgaXMgaXRzIHJvbGUgaW4gdGhlIGdyZWF0ZXIgc2NoZW1lPyBJIHdpbGwgYW5hbHl6ZSB0aGUgY29kZSBpdHNlbGYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjMxLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMzoyNToxNS41NjEyNjU4NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjIwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyMDA6XFx0fVxcbjIyMDE6XFx0XFxuMjIwMjpcXHRzdGF0aWMgaW50IG1hbmFfZ2Rfc2V0dXAoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuMjIwMzpcXHR7XFxuMjIwNDpcXHRcXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4yMjA1OlxcdFxcdGludCBlcnI7XFxuMjIwNjpcXHRcXG4yMjA3OlxcdFxcdGdjLVxcdTAwM2VtYW5hX3BjaV9kZWJ1Z2ZzID0gZGVidWdmc19jcmVhdGVfZGlyKHBjaV9uYW1lKHBkZXYpLFxcbjIyMDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBtYW5hX2RlYnVnZnNfcm9vdCk7XFxuMjIwOTpcXHRcXG4yMjEwOlxcdFxcdGVyciA9IG1hbmFfZ2RfaW5pdF9yZWdpc3RlcnMocGRldik7XFxuMjIxMTpcXHRcXHRpZiAoZXJyKVxcbjIyMTI6XFx0XFx0XFx0Z290byByZW1vdmVfZGVidWdmcztcXG4yMjEzOlxcdFxcbjIyMTQ6XFx0XFx0bWFuYV9zbWNfaW5pdChcXHUwMDI2Z2MtXFx1MDAzZXNobV9jaGFubmVsLCBnYy1cXHUwMDNlZGV2LCBnYy1cXHUwMDNlc2htX2Jhc2UpO1xcbjIyMTU6XFx0XFxuMjIxNjpcXHRcXHRnYy1cXHUwMDNlc2VydmljZV93cSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKFxcXCJnZG1hX3NlcnZpY2Vfd3FcXFwiLCAwKTtcXG4yMjE3OlxcdFxcdGlmICghZ2MtXFx1MDAzZXNlcnZpY2Vfd3EpIHtcXG4yMjE4OlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuMjIxOTpcXHRcXHRcXHRnb3RvIHJlbW92ZV9kZWJ1Z2ZzO1xcbjIyMjA6XFx0XFx0fVxcbjIyMjE6XFx0XFxuMjIyMjpcXHRcXHRlcnIgPSBtYW5hX2dkX3NldHVwX2h3Y19pcnFzKHBkZXYpO1xcbjIyMjM6XFx0XFx0aWYgKGVycikge1xcbjIyMjQ6XFx0XFx0XFx0ZGV2X2VycihnYy1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHNldHVwIElSUXMgZm9yIEhXQyBjcmVhdGlvbjogJWRcXFxcblxcXCIsXFxuMjIyNTpcXHRcXHRcXHRcXHRlcnIpO1xcbjIyMjY6XFx0XFx0XFx0Z290byBmcmVlX3dvcmtxdWV1ZTtcXG4yMjI3OlxcdFxcdH1cXG4yMjI4OlxcdFxcbjIyMjk6XFx0XFx0ZXJyID0gbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwoZ2MpO1xcbjIyMzA6XFx0XFx0aWYgKGVycilcXG4yMjMxOlxcdFxcdFxcdGdvdG8gcmVtb3ZlX2lycTtcXG4yMjMyOlxcdFxcbjIyMzM6XFx0XFx0ZXJyID0gbWFuYV9nZF92ZXJpZnlfdmZfdmVyc2lvbihwZGV2KTtcXG4yMjM0OlxcdFxcdGlmIChlcnIpXFxuMjIzNTpcXHRcXHRcXHRnb3RvIGRlc3Ryb3lfaHdjO1xcbjIyMzY6XFx0XFxuMjIzNzpcXHRcXHRlcnIgPSBtYW5hX2dkX2RldGVjdF9kZXZpY2VzKHBkZXYpO1xcbjIyMzg6XFx0XFx0aWYgKGVycilcXG4yMjM5OlxcdFxcdFxcdGdvdG8gZGVzdHJveV9od2M7XFxuMjI0MDpcXHRcXG4yMjQxOlxcdFxcdGVyciA9IG1hbmFfZ2RfcXVlcnlfbWF4X3Jlc291cmNlcyhwZGV2KTtcXG4yMjQyOlxcdFxcdGlmIChlcnIpXFxuMjI0MzpcXHRcXHRcXHRnb3RvIGRlc3Ryb3lfaHdjO1xcbjIyNDQ6XFx0XFxuMjI0NTpcXHRcXHRlcnIgPSBtYW5hX2dkX3NldHVwX3JlbWFpbmluZ19pcnFzKHBkZXYpO1xcbjIyNDY6XFx0XFx0aWYgKGVycikge1xcbjIyNDc6XFx0XFx0XFx0ZGV2X2VycihnYy1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHNldHVwIHJlbWFpbmluZyBJUlFzOiAlZFxcXCIsIGVycik7XFxuMjI0ODpcXHRcXHRcXHRnb3RvIGRlc3Ryb3lfaHdjO1xcbjIyNDk6XFx0XFx0fVxcbjIyNTA6XFx0XFxuMjI1MTpcXHRcXHRpZiAoIWdjLVxcdTAwM2Vtc2lfc2hhcmluZykge1xcbjIyNTI6XFx0XFx0XFx0Z2MtXFx1MDAzZW1zaV9iaXRtYXAgPSBiaXRtYXBfemFsbG9jKGdjLVxcdTAwM2VudW1fbXNpeF91c2FibGUsIEdGUF9LRVJORUwpO1xcbjIyNTM6XFx0XFx0XFx0aWYgKCFnYy1cXHUwMDNlbXNpX2JpdG1hcCkge1xcbjIyNTQ6XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4yMjU1OlxcdFxcdFxcdFxcdGdvdG8gZGVzdHJveV9od2M7XFxuMjI1NjpcXHRcXHRcXHR9XFxuMjI1NzpcXHRcXHRcXHQvKiBTZXQgYml0IGZvciBIV0MgKi9cXG4yMjU4OlxcdFxcdFxcdHNldF9iaXQoMCwgZ2MtXFx1MDAzZW1zaV9iaXRtYXApO1xcbjIyNTk6XFx0XFx0fVxcbjIyNjA6XFx0XFxuMjI2MTpcXHRcXHRkZXZfZGJnKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJtYW5hIGdkbWEgc2V0dXAgc3VjY2Vzc2Z1bFxcXFxuXFxcIik7XFxuMjI2MjpcXHRcXHRyZXR1cm4gMDtcXG4yMjYzOlxcdFxcbjIyNjQ6XFx0ZGVzdHJveV9od2M6XFxuMjI2NTpcXHRcXHRtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoZ2MpO1xcbjIyNjY6XFx0cmVtb3ZlX2lycTpcXG4yMjY3OlxcdFxcdG1hbmFfZ2RfcmVtb3ZlX2lycXMocGRldik7XFxuMjI2ODpcXHRmcmVlX3dvcmtxdWV1ZTpcXG4yMjY5OlxcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKGdjLVxcdTAwM2VzZXJ2aWNlX3dxKTtcXG4yMjcwOlxcdFxcdGdjLVxcdTAwM2VzZXJ2aWNlX3dxID0gTlVMTDtcXG4yMjcxOlxcdHJlbW92ZV9kZWJ1Z2ZzOlxcbjIyNzI6XFx0XFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGdjLVxcdTAwM2VtYW5hX3BjaV9kZWJ1Z2ZzKTtcXG4yMjczOlxcdFxcdGdjLVxcdTAwM2VtYW5hX3BjaV9kZWJ1Z2ZzID0gTlVMTDtcXG4yMjc0OlxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIiVzIGZhaWxlZCAoZXJyb3IgJWQpXFxcXG5cXFwiLCBfX2Z1bmNfXywgZXJyKTtcXG4yMjc1OlxcdFxcdHJldHVybiBlcnI7XFxuMjI3NjpcXHR9XFxuMjI3NzpcXHRcXG4yMjc4OlxcdHN0YXRpYyB2b2lkIG1hbmFfZ2RfY2xlYW51cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuMjI3OTpcXHR7XFxuMjI4MDpcXHRcXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4yMjgxOlxcdFxcbjIyODI6XFx0XFx0bWFuYV9od2NfZGVzdHJveV9jaGFubmVsKGdjKTtcXG4yMjgzOlxcdFxcbjIyODQ6XFx0XFx0bWFuYV9nZF9yZW1vdmVfaXJxcyhwZGV2KTtcXG4yMjg1OlxcdFxcbjIyODY6XFx0XFx0aWYgKGdjLVxcdTAwM2VzZXJ2aWNlX3dxKSB7XFxuMjI4NzpcXHRcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShnYy1cXHUwMDNlc2VydmljZV93cSk7XFxuMjI4ODpcXHRcXHRcXHRnYy1cXHUwMDNlc2VydmljZV93cSA9IE5VTEw7XFxuMjI4OTpcXHRcXHR9XFxuMjI5MDpcXHRcXG4yMjkxOlxcdFxcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShnYy1cXHUwMDNlbWFuYV9wY2lfZGVidWdmcyk7XFxuMjI5MjpcXHRcXHRnYy1cXHUwMDNlbWFuYV9wY2lfZGVidWdmcyA9IE5VTEw7XFxuMjI5MzpcXHRcXG4yMjk0OlxcdFxcdGRldl9kYmcoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIm1hbmEgZ2RtYSBjbGVhbnVwIHN1Y2Nlc3NmdWxcXFxcblxcXCIpO1xcbjIyOTU6XFx0fVxcbjIyOTY6XFx0XFxuMjI5NzpcXHRzdGF0aWMgYm9vbCBtYW5hX2lzX3BmKHVuc2lnbmVkIHNob3J0IGRldl9pZClcXG4yMjk4OlxcdHtcXG4yMjk5OlxcdFxcdHJldHVybiBkZXZfaWQgPT0gTUFOQV9QRl9ERVZJQ0VfSUQgfHwgZGV2X2lkID09IE1BTkFfUEYyX0RFVklDRV9JRDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDM6MjU6MTUuNTYxNDA4MzVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ4Mzk1NTgxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1BTkEgRGV2aWNlIERyaXZlciBJbnRlcmFjdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgbWFuYV9nZF9zZXR1cGAgZnVuY3Rpb24sIHRyeWluZyB0byB1bmRlcnN0YW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoYXJkd2FyZS4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIGl0IHJlbGllcyBvbiBhIGJ1bmNoIG9mIGxvdy1sZXZlbCBjYWxsczogYG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsYCwgYG1hbmFfZ2RfdmVyaWZ5X3ZmX3ZlcnNpb25gLCBgbWFuYV9nZF9kZXRlY3RfZGV2aWNlc2AsIGFuZCBgbWFuYV9nZF9xdWVyeV9tYXhfcmVzb3VyY2VzYC4gUHJldHR5IHN0YW5kYXJkIHN0dWZmIGZvciBpbml0aWFsaXppbmcgYSBkZXZpY2UsIHF1ZXJ5aW5nIGNhcGFiaWxpdGllcywgdGhhdCBraW5kIG9mIHRoaW5nLlxuXG5CdXQgdGhlbiBpdCBoaXRzIG1lLiBTeXprYWxsZXIsIGluIGl0cyBjdXJyZW50IGltcGxlbWVudGF0aW9uLCAqZG9lc24ndCogaGF2ZSBhIE1BTkEgZW11bGF0b3IsIHJpZ2h0PyBTbywgaWYgd2UncmUgdHJ5aW5nIHRvIGZ1enogdGhpcyB2aWEgUENJLCB3ZSdyZSBpbiBhIGJpdCBvZiBhIHBpY2tsZS4gSXQgbWVhbnMgc3l6a2FsbGVyIHdvdWxkIG5lZWQgdG8gcHJvdmlkZSAqdmFsaWQqIHJlc3BvbnNlcyB0byAqZXZlcnkgc2luZ2xlKiBoYXJkd2FyZSBxdWVyeSB0aGF0IGBtYW5hX2dkX3NldHVwYCB0aHJvd3MgYXQgaXQuIEFuZCB0aGVzZSBhcmVuJ3Qgc2ltcGxlIHJlYWRzOyB3ZSdyZSBsaWtlbHkgdGFsa2luZyBhYm91dCBjb21wbGV4IG1lbW9yeS1tYXBwZWQgSS9PLCBvciBtYXliZSBldmVuIERNQSByaW5ncyB3aXRoIGFsbCB0aGVpciBhc3NvY2lhdGVkIHF1aXJrcy4gVGhhdCdzIGdvaW5nIHRvIGJlIGEgc3Vic3RhbnRpYWwgdW5kZXJ0YWtpbmcgdG8gZ2V0IHJpZ2h0LlxuXG5JIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBoYXJkd2FyZSBxdWVyaWVzIGFyZSBoYW5kbGVkLiBMZXQncyBzdGFydCB3aXRoIGBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbGAuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBraW5kIG9mIGluZm9ybWF0aW9uIGlzIGV4Y2hhbmdlZCwgd2hhdCB0aGUgZXhwZWN0ZWQgcmVzcG9uc2VzIGxvb2sgbGlrZSwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyB2dWxuZXJhYmlsaXRpZXMgaW4gdGhhdCBpbnRlcmZhY2UuIFRoaXMgaXMgZ29pbmcgdG8gYmUga2V5IHRvIGZpZ3VyaW5nIG91dCB0aGUgYmVzdCBmdXp6aW5nIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI5MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAzOjI1OjIwLjA0NTM2NjU4N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTczODA3MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFuYV9od2NfY3JlYXRlX2NoYW5uZWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jPTMxOD1zdGF0aWMgaW50IG1hbmFfZ2RfZGV0ZWN0X2RldmljZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0zNDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6MzUwOlxcdFxcdC8qIEhXQyBpcyBhbHJlYWR5IGRldGVjdGVkIGluIG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKCkuICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMzUxLVxcdFxcdGlmIChkZXZfdHlwZSA9PSBHRE1BX0RFVklDRV9IV0MpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYz0yMjAyPXN0YXRpYyBpbnQgbWFuYV9nZF9zZXR1cChzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTIyMjgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6MjIyOTpcXHRlcnIgPSBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChnYyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjIzMC1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jPTcxMD1zdGF0aWMgaW50IG1hbmFfaHdjX2luaXRfcXVldWVzKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmMtNzQ5LW91dDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmM6NzUwOlxcdC8qIG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKCkgd2lsbCBkbyB0aGUgY2xlYW51cC4qL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuYy03NTEtXFx0cmV0dXJuIGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuYy03NTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jOjc1NDppbnQgbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jLTc1NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAzOjI1OjIwLjEwMjc1MjAyNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODQzNjM5NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogbWFuYVxcX2h3Y1xcX2NyZWF0ZVxcX2NoYW5uZWwqKlxuXG5BbHJpZ2h0LCAqbWFuYVxcX2h3Y1xcX2NyZWF0ZVxcX2NoYW5uZWwqLiBUaGF0J3MgdGhlIGZ1bmN0aW9uIGNhbGwgdGhhdCdzIGdyYWJiaW5nIG15IGF0dGVudGlvbi4gVGhlIG5hbWluZyBjb252ZW50aW9uIHN1Z2dlc3RzIGl04oCZcyByZWxhdGVkIHRvIGhhcmR3YXJlIGNvbXBvc2l0aW9uLCBvciBwb3NzaWJseSB0aGUgY3JlYXRpb24gb2YgYSBjaGFubmVsIGZvciBoYXJkd2FyZS1hY2NlbGVyYXRlZCByZW5kZXJpbmcsIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgaG93IHdlIGhhbmRsZSBkaXNwbGF5IG91dHB1dC4gSXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gaW5pdGlhbGl6aW5nIGEgbmV3IGNvbXBvc2l0aW9uIGNoYW5uZWwsIG1hbmFnaW5nIHJlc291cmNlcywgb3Igc2V0dGluZyB1cCBhIHBpcGVsaW5lIGZvciBncmFwaGljcyBkYXRhLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCdzIHRoZSBjb250ZXh0PyBXaGF0IGxpYnJhcnkgb3IgZnJhbWV3b3JrIGRvZXMgdGhpcyBiZWxvbmcgdG8/IElzIGl0IG9wZW4tc291cmNlPyBXaGF0IGFyZSB0aGUgaW5wdXRzPyBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgdGhlIGRldGFpbHMgbWF0dGVyIOKAkyB0aGUgZGF0YSB0eXBlcyBvZiB0aGUgcGFyYW1ldGVycywgdGhlaXIgaW50ZW5kZWQgbWVhbmluZ3MuIFRoaXMgZGV0ZXJtaW5lcyBob3cgZmxleGlibGUgb3Igc3BlY2lmaWMgdGhpcyBmdW5jdGlvbiBpcy4gSXMgdGhlcmUgYSByZWxhdGVkIHN0cnVjdCBvciBjbGFzcyB0aGF0IHRoaXMgdXNlcz8gVW5kZXJzdGFuZGluZyB0aGUgaW5wdXRzIHdpbGwgdGVsbCBtZSBob3cgZ3JhbnVsYXIgdGhlIGNvbnRyb2wgaXMuIEFyZSB3ZSBjcmVhdGluZyBhIGNvbXBsZXRlbHkgbmV3IGNoYW5uZWwgZnJvbSBzY3JhdGNoLCBvciBtb2RpZnlpbmcgYW4gZXhpc3Rpbmcgb25lP1xuXG5JIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBlcnJvciBoYW5kbGluZy4gSG93IGRvZXMgdGhpcyBmdW5jdGlvbiBzaWduYWwgZmFpbHVyZT8gQXJlIHRoZXJlIHJldHVybiBjb2RlcyBvciBleGNlcHRpb25zPyBIb3cgZG9lcyBpdCBoYW5kbGUgcmVzb3VyY2UgYWxsb2NhdGlvbiwgbGlrZSBtZW1vcnkgb3IgZmlsZSBkZXNjcmlwdG9ycz8gQW5kIHdoYXQga2luZCBvZiBjbGVhbnVwIGlzIHBlcmZvcm1lZD8gV2hhdCBoYXBwZW5zIHdoZW4gYSBjaGFubmVsIGlzIG5vIGxvbmdlciBuZWVkZWQ/IEFyZSB0aGVyZSBjb3JyZXNwb25kaW5nIGRlc3RydWN0aW9uIG9yIHJlbGVhc2UgY2FsbHM/IEkgbmVlZCB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBoZXJlLlxuXG5Fc3NlbnRpYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbidzIHB1cnBvc2Ugd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBJJ2xsIG5lZWQgdG8gYW5hbHl6ZSBpdHMgaW1wbGVtZW50YXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgZ3JhcGhpY3MgcGlwZWxpbmUsIGFuZCB3aGV0aGVyIGl0IHBsYXlzIG5pY2VseSB3aXRoIG90aGVyIHJlbGV2YW50IHBhcnRzIG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Mjg4LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDM6MjU6MjMuOTQ2MzkzMjc1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzU0LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc1NDpcXHRpbnQgbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXFxuIDc1NTpcXHR7XFxuIDc1NjpcXHRcXHR1MzIgbWF4X3JlcV9tc2dfc2l6ZSwgbWF4X3Jlc3BfbXNnX3NpemU7XFxuIDc1NzpcXHRcXHRzdHJ1Y3QgZ2RtYV9kZXYgKmdkID0gXFx1MDAyNmdjLVxcdTAwM2Vod2M7XFxuIDc1ODpcXHRcXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7XFxuIDc1OTpcXHRcXHR1MTYgcV9kZXB0aF9tYXg7XFxuIDc2MDpcXHRcXHRpbnQgZXJyO1xcbiA3NjE6XFx0XFxuIDc2MjpcXHRcXHRod2MgPSBremFsbG9jX29iaigqaHdjKTtcXG4gNzYzOlxcdFxcdGlmICghaHdjKVxcbiA3NjQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDc2NTpcXHRcXG4gNzY2OlxcdFxcdGdkLVxcdTAwM2VnZG1hX2NvbnRleHQgPSBnYztcXG4gNzY3OlxcdFxcdGdkLVxcdTAwM2Vkcml2ZXJfZGF0YSA9IGh3YztcXG4gNzY4OlxcdFxcdGh3Yy1cXHUwMDNlZ2RtYV9kZXYgPSBnZDtcXG4gNzY5OlxcdFxcdGh3Yy1cXHUwMDNlZGV2ID0gZ2MtXFx1MDAzZWRldjtcXG4gNzcwOlxcdFxcdGh3Yy1cXHUwMDNlaHdjX3RpbWVvdXQgPSBIV19DSEFOTkVMX1dBSVRfUkVTT1VSQ0VfVElNRU9VVF9NUztcXG4gNzcxOlxcdFxcbiA3NzI6XFx0XFx0LyogSFdDJ3MgaW5zdGFuY2UgbnVtYmVyIGlzIGFsd2F5cyAwLiAqL1xcbiA3NzM6XFx0XFx0Z2QtXFx1MDAzZWRldl9pZC5hc191aW50MzIgPSAwO1xcbiA3NzQ6XFx0XFx0Z2QtXFx1MDAzZWRldl9pZC50eXBlID0gR0RNQV9ERVZJQ0VfSFdDO1xcbiA3NzU6XFx0XFxuIDc3NjpcXHRcXHRnZC1cXHUwMDNlcGRpZCA9IElOVkFMSURfUERJRDtcXG4gNzc3OlxcdFxcdGdkLVxcdTAwM2Vkb29yYmVsbCA9IElOVkFMSURfRE9PUkJFTEw7XFxuIDc3ODpcXHRcXG4gNzc5OlxcdFxcdC8qIG1hbmFfaHdjX2luaXRfcXVldWVzKCkgb25seSBjcmVhdGVzIHRoZSByZXF1aXJlZCBkYXRhIHN0cnVjdHVyZXMsXFxuIDc4MDpcXHRcXHQgKiBhbmQgZG9lc24ndCB0b3VjaCB0aGUgSFdDIGRldmljZS5cXG4gNzgxOlxcdFxcdCAqL1xcbiA3ODI6XFx0XFx0ZXJyID0gbWFuYV9od2NfaW5pdF9xdWV1ZXMoaHdjLCBIV19DSEFOTkVMX1ZGX0JPT1RTVFJBUF9RVUVVRV9ERVBUSCxcXG4gNzgzOlxcdFxcdFxcdFxcdFxcdCAgIEhXX0NIQU5ORUxfTUFYX1JFUVVFU1RfU0laRSxcXG4gNzg0OlxcdFxcdFxcdFxcdFxcdCAgIEhXX0NIQU5ORUxfTUFYX1JFU1BPTlNFX1NJWkUpO1xcbiA3ODU6XFx0XFx0aWYgKGVycikge1xcbiA3ODY6XFx0XFx0XFx0ZGV2X2Vycihod2MtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIEhXQzogJWRcXFxcblxcXCIsIGVycik7XFxuIDc4NzpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNzg4OlxcdFxcdH1cXG4gNzg5OlxcdFxcbiA3OTA6XFx0XFx0ZXJyID0gbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoZ2MsIFxcdTAwMjZxX2RlcHRoX21heCwgXFx1MDAyNm1heF9yZXFfbXNnX3NpemUsXFxuIDc5MTpcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNm1heF9yZXNwX21zZ19zaXplKTtcXG4gNzkyOlxcdFxcdGlmIChlcnIpIHtcXG4gNzkzOlxcdFxcdFxcdGRldl9lcnIoaHdjLVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gZXN0YWJsaXNoIEhXQzogJWRcXFxcblxcXCIsIGVycik7XFxuIDc5NDpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNzk1OlxcdFxcdH1cXG4gNzk2OlxcdFxcbiA3OTc6XFx0XFx0ZXJyID0gbWFuYV9od2NfdGVzdF9jaGFubmVsKGdjLVxcdTAwM2Vod2MuZHJpdmVyX2RhdGEsXFxuIDc5ODpcXHRcXHRcXHRcXHRcXHQgICAgSFdfQ0hBTk5FTF9WRl9CT09UU1RSQVBfUVVFVUVfREVQVEgsXFxuIDc5OTpcXHRcXHRcXHRcXHRcXHQgICAgbWF4X3JlcV9tc2dfc2l6ZSwgbWF4X3Jlc3BfbXNnX3NpemUpO1xcbiA4MDA6XFx0XFx0aWYgKGVycikge1xcbiA4MDE6XFx0XFx0XFx0ZGV2X2Vycihod2MtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byB0ZXN0IEhXQzogJWRcXFxcblxcXCIsIGVycik7XFxuIDgwMjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gODAzOlxcdFxcdH1cXG4gODA0OlxcdFxcbiA4MDU6XFx0XFx0cmV0dXJuIDA7XFxuIDgwNjpcXHRvdXQ6XFxuIDgwNzpcXHRcXHRtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoZ2MpO1xcbiA4MDg6XFx0XFx0cmV0dXJuIGVycjtcXG4gODA5OlxcdH1cXG4gODEwOlxcdFxcbiA4MTE6XFx0dm9pZCBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXFxuIDgxMjpcXHR7XFxuIDgxMzpcXHRcXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MgPSBnYy1cXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xcbiA4MTQ6XFx0XFxuIDgxNTpcXHRcXHRpZiAoIWh3YylcXG4gODE2OlxcdFxcdFxcdHJldHVybjtcXG4gODE3OlxcdFxcbiA4MTg6XFx0XFx0LyogZ2MtXFx1MDAzZW1heF9udW1fY3FzIGlzIHNldCBpbiBtYW5hX2h3Y19pbml0X2V2ZW50X2hhbmRsZXIoKS4gSWYgaXQnc1xcbiA4MTk6XFx0XFx0ICogbm9uLXplcm8sIHRoZSBIV0Mgd29ya2VkIGFuZCB3ZSBzaG91bGQgdGVhciBkb3duIHRoZSBIV0MgaGVyZS5cXG4gODIwOlxcdFxcdCAqL1xcbiA4MjE6XFx0XFx0aWYgKGdjLVxcdTAwM2VtYXhfbnVtX2NxcyBcXHUwMDNlIDApIHtcXG4gODIyOlxcdFxcdFxcdG1hbmFfc21jX3RlYXJkb3duX2h3YyhcXHUwMDI2Z2MtXFx1MDAzZXNobV9jaGFubmVsLCBmYWxzZSk7XFxuIDgyMzpcXHRcXHRcXHRnYy1cXHUwMDNlbWF4X251bV9jcXMgPSAwO1xcbiA4MjQ6XFx0XFx0fVxcbiA4MjU6XFx0XFxuIDgyNjpcXHRcXHRpZiAoaHdjLVxcdTAwM2V0eHEpXFxuIDgyNzpcXHRcXHRcXHRtYW5hX2h3Y19kZXN0cm95X3dxKGh3YywgaHdjLVxcdTAwM2V0eHEpO1xcbiA4Mjg6XFx0XFxuIDgyOTpcXHRcXHRpZiAoaHdjLVxcdTAwM2VyeHEpXFxuIDgzMDpcXHRcXHRcXHRtYW5hX2h3Y19kZXN0cm95X3dxKGh3YywgaHdjLVxcdTAwM2VyeHEpO1xcbiA4MzE6XFx0XFxuIDgzMjpcXHRcXHRpZiAoaHdjLVxcdTAwM2VjcSlcXG4gODMzOlxcdFxcdFxcdG1hbmFfaHdjX2Rlc3Ryb3lfY3EoaHdjLVxcdTAwM2VnZG1hX2Rldi1cXHUwMDNlZ2RtYV9jb250ZXh0LCBod2MtXFx1MDAzZWNxKTtcXG4gODM0OlxcdFxcbiA4MzU6XFx0XFx0a2ZyZWUoaHdjLVxcdTAwM2VjYWxsZXJfY3R4KTtcXG4gODM2OlxcdFxcdGh3Yy1cXHUwMDNlY2FsbGVyX2N0eCA9IE5VTEw7XFxuIDgzNzpcXHRcXG4gODM4OlxcdFxcdG1hbmFfZ2RfZnJlZV9yZXNfbWFwKFxcdTAwMjZod2MtXFx1MDAzZWluZmxpZ2h0X21zZ19yZXMpO1xcbiA4Mzk6XFx0XFxuIDg0MDpcXHRcXHRod2MtXFx1MDAzZW51bV9pbmZsaWdodF9tc2cgPSAwO1xcbiA4NDE6XFx0XFxuIDg0MjpcXHRcXHRod2MtXFx1MDAzZWdkbWFfZGV2LVxcdTAwM2Vkb29yYmVsbCA9IElOVkFMSURfRE9PUkJFTEw7XFxuIDg0MzpcXHRcXHRod2MtXFx1MDAzZWdkbWFfZGV2LVxcdTAwM2VwZGlkID0gSU5WQUxJRF9QRElEO1xcbiA4NDQ6XFx0XFxuIDg0NTpcXHRcXHRod2MtXFx1MDAzZWh3Y190aW1lb3V0ID0gMDtcXG4gODQ2OlxcdFxcbiA4NDc6XFx0XFx0a2ZyZWUoaHdjKTtcXG4gODQ4OlxcdFxcdGdjLVxcdTAwM2Vod2MuZHJpdmVyX2RhdGEgPSBOVUxMO1xcbiA4NDk6XFx0XFx0Z2MtXFx1MDAzZWh3Yy5nZG1hX2NvbnRleHQgPSBOVUxMO1xcbiA4NTA6XFx0XFxuIDg1MTpcXHRcXHR2ZnJlZShnYy1cXHUwMDNlY3FfdGFibGUpO1xcbiA4NTI6XFx0XFx0Z2MtXFx1MDAzZWNxX3RhYmxlID0gTlVMTDtcXG4gODUzOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDM6MjU6MjMuOTQ2NTIxNzg1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0OTY0Njk4MTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFJlYWNoYWJpbGl0eSBmb3IgUGF0Y2ggRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJUaGlzIGlzIHZlcnkgc3BlY2lmaWMgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24uXCIgV2UncmUgdGFsa2luZyBhYm91dCBjaGFuZ2VzIHRvIHRoZSBgbWFuYV9jcmVhdGVfcnhxYCBmdW5jdGlvbiB3aXRoaW4gdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlci4gIFN5emthbGxlcidzIFBDSSBmdXp6ZXIgaXMgdGhlIHRvb2wgaW4gcXVlc3Rpb24sIGFuZCBpdCB3b3JrcyBieSBpbnRlcmNlcHRpbmcgUENJIGNvbmZpZyBzcGFjZSBhbmQgTU1JTyByZWFkcy93cml0ZXMuIFRoZSBxdWVzdGlvbiBpcywgY2FuIHRoaXMgZnV6emVyIGV2ZW4gZ2V0ICpuZWFyKiB0aGlzIGNvZGU/XG5cbk15IGZpcnN0IGluc3RpbmN0IGlzIHRoYXQsIHRoZW9yZXRpY2FsbHksIHRoZSBmdXp6ZXIgY291bGQgcG90ZW50aWFsbHkgcGFzcyB0aHJvdWdoIHRoZXNlIGNoZWNrcyBpZiBpdCByYW5kb21seSBndWVzc2VzIHRoZSBjb3JyZWN0IE1NSU8gdmFsdWVzLCBvciBpZiB3ZSBoYWQgY3JhZnRlZCBzcGVjaWZpYyBkZXNjcmlwdGlvbnMgZm9yIHRoZSBNQU5BIGRldmljZSB3aXRoaW4gU3l6a2FsbGVyLiBIb3dldmVyLCB3ZSBkb24ndCBoYXZlIE1BTkEgZGVzY3JpcHRpb25zLCBhbmQgdGhpcyBwYXRjaCBpcywgYXQgaXRzIGNvcmUsIGEgc2ltcGxlIGJ1ZyBmaXggaW4gYW4gZXJyb3IgcGF0aC4gVGhlIHBhdGNoIGNoYW5nZXMgYG1hbmFfY3JlYXRlX3J4cWAgdG8gcmV0dXJuIGFuIGVycm9yIGNvZGUgaW5zdGVhZCBvZiBgTlVMTGAgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSWYgd2UgY29uc2lkZXJlZCB0aGlzIGNvZGUgdG8gYmUgcmVhY2hhYmxlLCB3ZSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbkJ1dCB0aGF0J3Mgd2hlcmUgdGhlIGNyaXRpY2FsIHByb2JsZW0gY29tZXMgaW46IElzIHRoaXMgcmVhY2hhYmxlIGluICpvdXIqIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gIFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBpZiB0aGUgY29kZSBwYXRoIGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSwgdGhlbiB0aGUgYW5zd2VyIGlzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBBbmQgTUFOQSAqaXMqIGEgUENJIGRldmljZSwgYW5kLCBhcyBmYXIgYXMgSSdtIGF3YXJlLCBpdCdzIG5vdCBlbXVsYXRlZCBpbiBRRU1VIG9yIEdDRS5cblxuV2FpdCBhIHNlY29uZC4gIElzIE1BTkEgZW11bGF0ZWQgaW4gUUVNVT8gTm8sIGl0J3MgYSBwcm9wcmlldGFyeSBoYXJkd2FyZSBkZXZpY2UgdXNlZCBpbiBBenVyZS4gVW5sZXNzIHN5emthbGxlciBpcyBydW5uaW5nIG9uIEF6dXJlIFZNcyB3aXRoIE1BTkEgaGFyZHdhcmUgYXR0YWNoZWQsIHdoaWNoIHN5emJvdCBkb2Vzbid0IGRvIChpdCBydW5zIG9uIEdDRSksIHRoaXMgY29kZSBpcyBlc3NlbnRpYWxseSB1bnJlYWNoYWJsZS4gQW5kIHN5emJvdCAqZG9lcyogcnVuIG9uIEdDRSwgd2hpY2ggZG9lcyBub3QgaGF2ZSBNQU5BIGhhcmR3YXJlLlxuXG5TbywgY2FuIHN5emthbGxlcidzIFBDSSBmdXp6ZXIgcmVhY2ggaXQ/ICBUaGUgUENJIGZ1enplciBjYW4gaW5zdGFudGlhdGUgYSBQQ0kgZGV2aWNlIHdpdGggYW55IHZlbmRvci9kZXZpY2UgSUQsIHdoaWNoIHdpbGwgdGhlbiB0cmlnZ2VyIGEgcHJvYmUgYnkgdGhlIGtlcm5lbC4gVGhlIGRyaXZlciB3aWxsIG1hcCBNTUlPIGFuZCByZWFkL3dyaXRlIHRvIGl0LiBUaGUgUENJIGZ1enplciBpbnRlcmNlcHRzIHRoZXNlIE1NSU8gYWNjZXNzZXMgYW5kIHJldHVybnMgZnV6emVkIGRhdGEuIFRodXMgYG1hbmFfZ2RfcHJvYmVgIHdpbGwgYmUgY2FsbGVkLiBUaGVuIHRoZSBmdXp6ZXIgd2lsbCBzdGFydCBpbnRlcmNlcHRpbmcgTU1JTy4gIENhbiBpdCBnZXQgdGhyb3VnaCBgbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWxgIGFuZCBhbGwgdGhlIGNvbXBsZXggaW5pdGlhbGl6YXRpb24/IFVzdWFsbHksIG5vLCBpdCByZXF1aXJlcyBzcGVjaWZpYyBzZXF1ZW5jZXMgb2YgdmFsdWVzLiAgVGhvdWdoIHN5emthbGxlciBoYXMgcmVhY2hlZCBzb21lIFBDSSBkcml2ZXJzJyBwcm9iZSBmdW5jdGlvbnMuXG5cblRoZSBiaWdnZXIgcHJvYmxlbSBpcyB0aGF0IGBtYW5hX2NyZWF0ZV9yeHFgIGlzIGNhbGxlZCBkdXJpbmcgYG1hbmFfb3BlbmAgb3IgYG1hbmFfYXR0YWNoYCwgd2hpY2ggaGFwcGVucyAqYWZ0ZXIqIHRoZSBkZXZpY2UgaXMgc3VjY2Vzc2Z1bGx5IHByb2JlZCBhbmQgcmVnaXN0ZXJlZCBhcyBhIG5ldGRldi4gR2V0dGluZyBhICpmdWxseSBmdW5jdGlvbmFsKiBuZXRkZXYgb3V0IG9mIGEgcmFuZG9tbHkgZnV6emVkIFBDSSBkZXZpY2UgaXMgcHJhY3RpY2FsbHkgaW1wb3NzaWJsZSB3aXRob3V0IGEgZGVkaWNhdGVkIGVtdWxhdG9yIG9yIHNwZWNpZmljIGRlc2NyaXB0aW9ucy5cblxuVGhlcmVmb3JlLCB0aGUgbGlrZWxpaG9vZCBvZiB0aGlzIGNvZGUgcGF0aCBiZWluZyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUgaXMgbWludXNjdWxlLiBMZXQncyBkb3VibGUtY2hlY2sgaG93IGBtYW5hX2NyZWF0ZV9yeHFgIGlzIGNhbGxlZC4gSXQncyBvbmx5IGNhbGxlZCBmcm9tIGBtYW5hX2FkZF9yeF9xdWV1ZXNgLCB3aGljaCBpcyBpbiB0dXJuIGNhbGxlZCBmcm9tIGBtYW5hX2FsbG9jX3F1ZXVlc2AsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBtYW5hX29wZW5gIGFuZCBgbWFuYV9hdHRhY2hgLiBBbGwgb2YgdGhlc2UgcmVxdWlyZSB0aGUgbmV0ZGV2IHRvIGJlIHJlZ2lzdGVyZWQuIFRoZSBuZXRkZXYgaXMgcmVnaXN0ZXJlZCBpbiBgbWFuYV9wcm9iZV9wb3J0YCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYG1hbmFfcHJvYmVgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgbWFuYV9nZF9wcm9iZWAgKHRoZSBQQ0kgcHJvYmUgZnVuY3Rpb24pLlxuXG5TbyBpdCBzdHJpY3RseSBkZXBlbmRzIG9uIHRoZSBQQ0kgcHJvYmUgc3VjY2VlZGluZy4gU2luY2UgdGhlcmUgaXMgbm8gTUFOQSBlbXVsYXRvciwgdGhlIFBDSSBwcm9iZSB3aWxsIGZhaWwgdW5sZXNzIHRoZSBmdXp6ZXIgc29tZWhvdyBndWVzc2VzIGFsbCB0aGUgY29ycmVjdCBNTUlPIHJlc3BvbnNlcywgd2hpY2ggaXMgYXN0cm9ub21pY2FsbHkgdW5saWtlbHkuIFRodXMsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBvdXIgZnV6emluZyBlbnZpcm9ubWVudC5cblxuV2FpdCwgd2hhdCBpZiB0aGUgcGF0Y2ggaXMgdGVzdGVkIG9uIEF6dXJlPyAgVGhlIHByb21wdCBzcGVjaWZpZWQgXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIi4gU2luY2Ugc3l6a2FsbGVyIHJ1bnMgb24gR0NFL1FFTVUsIGFuZCBNQU5BIGlzIG5vdCBlbXVsYXRlZCB0aGVyZSwgaXQncyB1bnJlYWNoYWJsZS5cblxuSSdtIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuTGV0IG1lIGp1c3QgcmV2aWV3IHRoZSByZWFzb25pbmcuIFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyLiBNQU5BIGlzIGEgcGh5c2ljYWwvdmlydHVhbCBoYXJkd2FyZSBkZXZpY2Ugc3BlY2lmaWMgdG8gTWljcm9zb2Z0IEF6dXJlLiBTeXprYWxsZXIgcnVucyBpbiBHQ0Ugb3IgUUVNVSBlbnZpcm9ubWVudHMsIHdoaWNoIGRvIG5vdCBwcm92aWRlIE1BTkEgaGFyZHdhcmUuIFRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgTUFOQSBpbiB0aGUga2VybmVsIG9yIFFFTVUuIFdoaWxlIHN5emthbGxlcidzIFBDSSBmdXp6ZXIgY2FuIHRyaWdnZXIgdGhlIGRyaXZlcidzIHByb2JlIGZ1bmN0aW9uLCBzdWNjZXNzZnVsbHkgcGFzc2luZyB0aGUgY29tcGxleCBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSAoZS5nLixcblxuIiwiSW5wdXRUb2tlbnMiOjE2Mjg3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAzOjI1OjM4LjkxMTIyMjUxMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2NjY0NTExNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYW5hX2NyZWF0ZV9yeHFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYz0yNzgwPXN0YXRpYyBpbnQgbWFuYV9jcmVhdGVfcGFnZV9wb29sKHN0cnVjdCBtYW5hX3J4cSAqcnhxLCBzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0yODEzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzoyODE0OnN0YXRpYyBpbnQgbWFuYV9jcmVhdGVfcnhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLCB1MzIgcnhxX2lkeCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMjgxNS1cXHRcXHRcXHQgICBzdHJ1Y3QgbWFuYV9lcSAqZXEsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTI5MzctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jOjI5Mzg6c3RhdGljIHZvaWQgbWFuYV9jcmVhdGVfcnhxX2RlYnVnZnMoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsIGludCBpZHgpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTI5Mzkte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jPTI5NjA9c3RhdGljIGludCBtYW5hX2FkZF9yeF9xdWV1ZXMoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMjk2Ny1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYXBjLVxcdTAwM2VudW1fcXVldWVzOyBpKyspIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM6Mjk2ODpcXHRcXHRlcnIgPSBtYW5hX2NyZWF0ZV9yeHEoYXBjLCBpLCBcXHUwMDI2YXBjLVxcdTAwM2VlcXNbaV0sIG5kZXYsIFxcdTAwMjZyeHEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0yOTY5LVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0yOTc3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzoyOTc4OlxcdFxcdG1hbmFfY3JlYXRlX3J4cV9kZWJ1Z2ZzKGFwYywgaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTI5NzktXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMzoyNTo0MS4xNzc4NzI3MDZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcyMTc4MTIxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOlxuXG4qKlVucmVhY2hhYmxlIENvZGUgQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyB0cmFjZSB0aGlzIGJhY2suIFRoZSBjb2RlIHBhdGggSSdtIGV4YW1pbmluZyBhcHBlYXJzIHRvIGJlIGluY3JlZGlibHkgY29uc3RyYWluZWQuIEl0IHNlZW1zIHRoZSBmdW5jdGlvbiBJJ20gY29uY2VybmVkIGFib3V0LCBsaWtlbHkgcmVsYXRlZCB0byBSWCBxdWV1ZSBhbGxvY2F0aW9uLCBgbWFuYV9hZGRfcnhfcXVldWVzYCwgaXMgb25seSBjYWxsZWQgZnJvbSBgbWFuYV9hbGxvY19xdWV1ZXNgLiBUaGF0J3MgYSBsaW1pdGVkIHN0YXJ0aW5nIHBvaW50LlxuXG5GdXJ0aGVyLCBgbWFuYV9hbGxvY19xdWV1ZXNgIGl0c2VsZiBpcyBvbmx5IGludm9rZWQgZnJvbSB0d28gZnVuY3Rpb25zOiBgbWFuYV9vcGVuYCBhbmQgYG1hbmFfYXR0YWNoYC4gQm90aCBvZiB0aGVzZSByZXF1aXJlIGEgbmV0d29yayBkZXZpY2UsIHRoZSBgbmV0ZGV2YCwgdG8gYmUgcmVnaXN0ZXJlZC4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBwb2ludC4gVGhlIGBuZXRkZXZgIHJlZ2lzdHJhdGlvbiBoYXBwZW5zIGluc2lkZSBgbWFuYV9wcm9iZV9wb3J0YC4gTG9va2luZyBoaWdoZXIgaW4gdGhlIGNhbGwgZ3JhcGgsIGBtYW5hX3Byb2JlX3BvcnRgIGlzIGNhbGxlZCBleGNsdXNpdmVseSBmcm9tIGBtYW5hX3Byb2JlYCwgYW5kIGBtYW5hX3Byb2JlYCBpcywgaW4gdHVybiwgY2FsbGVkIGJ5IGBtYW5hX2dkX3Byb2JlYC4gVGhpcyBzdWdnZXN0cyBhIFBDSSBwcm9iZSwgYXMgdGhlIGNvZGUgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCBkZXRlY3Rpb24uXG5cblRoZXJlZm9yZSwgdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uLCB0aGF0IGlzLCBgbWFuYV9hZGRfcnhfcXVldWVzYCwgaXMgdW5yZWFjaGFibGUgaW4gbm9ybWFsIG9wZXJhdGlvbiBiZWNhdXNlIGl0IGlzIG9ubHkgcmVhY2hhYmxlIGJ5IGNhbGwgY2hhaW5zIHRoYXQgYXJlIG9ubHkgc3RhcnRlZCBieSB0aGUgcHJvYmUuIFRoZSBjb2RlIHdpbGwgbmV2ZXIgYmUgZXhlY3V0ZWQuIFNvLCBpdCdzIHVucmVhY2hhYmxlLCBhc3N1bWluZyB0aGUgdHlwaWNhbCBQQ0kgZGV2aWNlIHByb2JpbmcgZmxvdy4gVGhhdCBtZWFucyBpdCBpcyBoaWdobHkgbGlrZWx5IHRoYXQgdGhlcmUgaXMgYSBidWcgaGVyZSwgb3IgdGhhdCB0aGUgY29kZSBpcyBpbnRlbmRlZCBmb3IgYW4gZWRnZSBjYXNlIHdoaWNoIGhhcyBuZXZlciwgb3Igd2lsbCBuZXZlciwgb2NjdXIuXG5cbk5vdywgbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODkwNiwiT3V0cHV0VG9rZW5zIjoxNDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDM6MjU6NDcuODk5NjU2MDI1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlci4gTUFOQSBpcyBhIGhhcmR3YXJlIGRldmljZSBzcGVjaWZpYyB0byBNaWNyb3NvZnQgQXp1cmUgYW5kIGlzIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VIHdoZXJlIGZ1enppbmcgb2NjdXJzLiBXaGlsZSB0aGUgUENJIGZ1enplciBjYW4gdHJpZ2dlciB0aGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24sIHN1Y2Nlc3NmdWxseSBwYXNzaW5nIHRoZSBjb21wbGV4IGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIHRvIHJlZ2lzdGVyIHRoZSBuZXR3b3JrIGRldmljZSBhbmQgcmVhY2ggYG1hbmFfY3JlYXRlX3J4cWAgKHZpYSBgbWFuYV9vcGVuYCkgaXMgcHJhY3RpY2FsbHkgaW1wb3NzaWJsZSB3aXRob3V0IGEgZGVkaWNhdGVkIGVtdWxhdG9yLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBwYXRoIGlzIHVucmVhY2hhYmxlIGluIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlci4gTUFOQSBpcyBhIGhhcmR3YXJlIGRldmljZSBzcGVjaWZpYyB0byBNaWNyb3NvZnQgQXp1cmUgYW5kIGlzIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VIHdoZXJlIGZ1enppbmcgb2NjdXJzLiBXaGlsZSB0aGUgUENJIGZ1enplciBjYW4gdHJpZ2dlciB0aGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24sIHN1Y2Nlc3NmdWxseSBwYXNzaW5nIHRoZSBjb21wbGV4IGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIHRvIHJlZ2lzdGVyIHRoZSBuZXR3b3JrIGRldmljZSBhbmQgcmVhY2ggYG1hbmFfY3JlYXRlX3J4cWAgKHZpYSBgbWFuYV9vcGVuYCkgaXMgcHJhY3RpY2FsbHkgaW1wb3NzaWJsZSB3aXRob3V0IGEgZGVkaWNhdGVkIGVtdWxhdG9yLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBwYXRoIGlzIHVucmVhY2hhYmxlIGluIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlzrs2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-18 03:06:10 +0000 UTC FinishedAt: 2026-07-18 03:25:49 +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+CgkJCTx0ZD4yMDI2LzA3LzE4IDAzOjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIuIE1BTkEgaXMgYSBoYXJkd2FyZSBkZXZpY2Ugc3BlY2lmaWMgdG8gTWljcm9zb2Z0IEF6dXJlIGFuZCBpcyBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSB3aGVyZSBmdXp6aW5nIG9jY3Vycy4gV2hpbGUgdGhlIFBDSSBmdXp6ZXIgY2FuIHRyaWdnZXIgdGhlIGRyaXZlciYjMzk7cyBwcm9iZSBmdW5jdGlvbiwgc3VjY2Vzc2Z1bGx5IHBhc3NpbmcgdGhlIGNvbXBsZXggaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgdG8gcmVnaXN0ZXIgdGhlIG5ldHdvcmsgZGV2aWNlIGFuZCByZWFjaCBgbWFuYV9jcmVhdGVfcnhxYCAodmlhIGBtYW5hX29wZW5gKSBpcyBwcmFjdGljYWxseSBpbXBvc3NpYmxlIHdpdGhvdXQgYSBkZWRpY2F0ZWQgZW11bGF0b3IuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgaW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAzOjI0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDdkOTEzODJjYTI0NGZmMGEwZjZlMDM4Nzk5NzJkNDk1MWQ2YjAzYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDE4IDAzOjI0OjM3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY1xuaW5kZXggOWQ5YmZkMTE2ZGFiYzIuLjkxNjJlMzU2ZTBjMWQ3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcbkBAIC0yODExLDkgJiM0MzsyODExLDkgQEAgc3RhdGljIGludCBtYW5hX2NyZWF0ZV9wYWdlX3Bvb2woc3RydWN0IG1hbmFfcnhxICpyeHEsIHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgbWFuYV9yeHEgKm1hbmFfY3JlYXRlX3J4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcbi1cdFx0XHRcdFx0dTMyIHJ4cV9pZHgsIHN0cnVjdCBtYW5hX2VxICplcSxcbi1cdFx0XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4mIzQzO3N0YXRpYyBpbnQgbWFuYV9jcmVhdGVfcnhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLCB1MzIgcnhxX2lkeCxcbiYjNDM7XHRcdFx0ICAgc3RydWN0IG1hbmFfZXEgKmVxLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiYjNDM7XHRcdFx0ICAgc3RydWN0IG1hbmFfcnhxICoqcnhxX291dClcbiB7XG4gXHRzdHJ1Y3QgZ2RtYV9kZXYgKmdkID0gYXBjLVx1MDAzZWFjLVx1MDAzZWdkbWFfZGV2O1xuIFx0c3RydWN0IG1hbmFfb2JqX3NwZWMgd3Ffc3BlYztcbkBAIC0yODI5LDcgJiM0MzsyODI5LDcgQEAgc3RhdGljIHN0cnVjdCBtYW5hX3J4cSAqbWFuYV9jcmVhdGVfcnhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuIFxuIFx0cnhxID0ga3Z6YWxsb2NfZmxleCgqcnhxLCByeF9vb2JzLCBhcGMtXHUwMDNlcnhfcXVldWVfc2l6ZSk7XG4gXHRpZiAoIXJ4cSlcbi1cdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdHJ4cS1cdTAwM2VuZGV2ID0gbmRldjtcbiBcdHJ4cS1cdTAwM2VudW1fcnhfYnVmID0gYXBjLVx1MDAzZXJ4X3F1ZXVlX3NpemU7XG5AQCAtMjkyMywxNCAmIzQzOzI5MjMsMTYgQEAgc3RhdGljIHN0cnVjdCBtYW5hX3J4cSAqbWFuYV9jcmVhdGVfcnhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuIFxuIFx0bWFuYV9nZF9yaW5nX2NxKGNxLVx1MDAzZWdkbWFfY3EsIFNFVF9BUk1fQklUKTtcbiBvdXQ6XG4tXHRpZiAoIWVycilcbi1cdFx0cmV0dXJuIHJ4cTtcbiYjNDM7XHRpZiAoIWVycikge1xuJiM0MztcdFx0KnJ4cV9vdXQgPSByeHE7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4gXG4gXHRuZXRkZXZfZXJyKG5kZXYsIFwmIzM0O0ZhaWxlZCB0byBjcmVhdGUgUlhROiBlcnIgPSAlZFxcblwmIzM0OywgZXJyKTtcbiBcbiBcdG1hbmFfZGVzdHJveV9yeHEoYXBjLCByeHEsIGZhbHNlKTtcbiBcbi1cdHJldHVybiBOVUxMO1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1hbmFfY3JlYXRlX3J4cV9kZWJ1Z2ZzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLCBpbnQgaWR4KVxuQEAgLTI5NjMsOSAmIzQzOzI5NjUsOCBAQCBzdGF0aWMgaW50IG1hbmFfYWRkX3J4X3F1ZXVlcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYXBjLVx1MDAzZW51bV9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHJ4cSA9IG1hbmFfY3JlYXRlX3J4cShhcGMsIGksIFx1MDAyNmFwYy1cdTAwM2VlcXNbaV0sIG5kZXYpO1xuLVx0XHRpZiAoIXJ4cSkge1xuLVx0XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRlcnIgPSBtYW5hX2NyZWF0ZV9yeHEoYXBjLCBpLCBcdTAwMjZhcGMtXHUwMDNlZXFzW2ldLCBuZGV2LCBcdTAwMjZyeHEpO1xuJiM0MztcdFx0aWYgKGVycikge1xuIFx0XHRcdG5ldGRldl9lcnIobmRldiwgXCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSByeHEgJWQgOiAlZFxcblwmIzM0OywgaSwgZXJyKTtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAzOjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIuIE1BTkEgaXMgYSBoYXJkd2FyZSBkZXZpY2Ugc3BlY2lmaWMgdG8gTWljcm9zb2Z0IEF6dXJlIGFuZCBpcyBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSB3aGVyZSBmdXp6aW5nIG9jY3Vycy4gV2hpbGUgdGhlIFBDSSBmdXp6ZXIgY2FuIHRyaWdnZXIgdGhlIGRyaXZlciYjMzk7cyBwcm9iZSBmdW5jdGlvbiwgc3VjY2Vzc2Z1bGx5IHBhc3NpbmcgdGhlIGNvbXBsZXggaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgdG8gcmVnaXN0ZXIgdGhlIG5ldHdvcmsgZGV2aWNlIGFuZCByZWFjaCBgbWFuYV9jcmVhdGVfcnhxYCAodmlhIGBtYW5hX29wZW5gKSBpcyBwcmFjdGljYWxseSBpbXBvc3NpYmxlIHdpdGhvdXQgYSBkZWRpY2F0ZWQgZW11bGF0b3IuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgaW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0N2Q5MTM4MmNhMjQ0ZmYwYTBmNmUwMzg3OTk3MmQ0OTUxZDZiMDNiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMTggMDM6MjQ6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMKaW5kZXggOWQ5YmZkMTE2ZGFiYzIuLjkxNjJlMzU2ZTBjMWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jCkBAIC0yODExLDkgJiM0MzsyODExLDkgQEAgc3RhdGljIGludCBtYW5hX2NyZWF0ZV9wYWdlX3Bvb2woc3RydWN0IG1hbmFfcnhxICpyeHEsIHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG1hbmFfcnhxICptYW5hX2NyZWF0ZV9yeHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsCi0JCQkJCXUzMiByeHFfaWR4LCBzdHJ1Y3QgbWFuYV9lcSAqZXEsCi0JCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQomIzQzO3N0YXRpYyBpbnQgbWFuYV9jcmVhdGVfcnhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLCB1MzIgcnhxX2lkeCwKJiM0MzsJCQkgICBzdHJ1Y3QgbWFuYV9lcSAqZXEsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAomIzQzOwkJCSAgIHN0cnVjdCBtYW5hX3J4cSAqKnJ4cV9vdXQpCiB7CiAJc3RydWN0IGdkbWFfZGV2ICpnZCA9IGFwYy0mZ3Q7YWMtJmd0O2dkbWFfZGV2OwogCXN0cnVjdCBtYW5hX29ial9zcGVjIHdxX3NwZWM7CkBAIC0yODI5LDcgJiM0MzsyODI5LDcgQEAgc3RhdGljIHN0cnVjdCBtYW5hX3J4cSAqbWFuYV9jcmVhdGVfcnhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLAogCiAJcnhxID0ga3Z6YWxsb2NfZmxleCgqcnhxLCByeF9vb2JzLCBhcGMtJmd0O3J4X3F1ZXVlX3NpemUpOwogCWlmICghcnhxKQotCQlyZXR1cm4gTlVMTDsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwogCiAJcnhxLSZndDtuZGV2ID0gbmRldjsKIAlyeHEtJmd0O251bV9yeF9idWYgPSBhcGMtJmd0O3J4X3F1ZXVlX3NpemU7CkBAIC0yOTIzLDE0ICYjNDM7MjkyMywxNiBAQCBzdGF0aWMgc3RydWN0IG1hbmFfcnhxICptYW5hX2NyZWF0ZV9yeHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsCiAKIAltYW5hX2dkX3JpbmdfY3EoY3EtJmd0O2dkbWFfY3EsIFNFVF9BUk1fQklUKTsKIG91dDoKLQlpZiAoIWVycikKLQkJcmV0dXJuIHJ4cTsKJiM0MzsJaWYgKCFlcnIpIHsKJiM0MzsJCSpyeHFfb3V0ID0gcnhxOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KIAogCW5ldGRldl9lcnIobmRldiwgJiMzNDtGYWlsZWQgdG8gY3JlYXRlIFJYUTogZXJyID0gJWRcbiYjMzQ7LCBlcnIpOwogCiAJbWFuYV9kZXN0cm95X3J4cShhcGMsIHJ4cSwgZmFsc2UpOwogCi0JcmV0dXJuIE5VTEw7CiYjNDM7CXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIG1hbmFfY3JlYXRlX3J4cV9kZWJ1Z2ZzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLCBpbnQgaWR4KQpAQCAtMjk2Myw5ICYjNDM7Mjk2NSw4IEBAIHN0YXRpYyBpbnQgbWFuYV9hZGRfcnhfcXVldWVzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IGFwYy0mZ3Q7bnVtX3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKLQkJcnhxID0gbWFuYV9jcmVhdGVfcnhxKGFwYywgaSwgJmFtcDthcGMtJmd0O2Vxc1tpXSwgbmRldik7Ci0JCWlmICghcnhxKSB7Ci0JCQllcnIgPSAtRU5PTUVNOwomIzQzOwkJZXJyID0gbWFuYV9jcmVhdGVfcnhxKGFwYywgaSwgJmFtcDthcGMtJmd0O2Vxc1tpXSwgbmRldiwgJmFtcDtyeHEpOwomIzQzOwkJaWYgKGVycikgewogCQkJbmV0ZGV2X2VycihuZGV2LCAmIzM0O0ZhaWxlZCB0byBjcmVhdGUgcnhxICVkIDogJWRcbiYjMzQ7LCBpLCBlcnIpOwogCQkJZ290byBvdXQ7CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ5MAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDM3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCB0byBhIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY2AuIEl0JiMzOTtzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZTogdGhleSYjMzk7dmUgYWx0ZXJlZCB0aGUgc2lnbmF0dXJlIG9mIGBtYW5hX2NyZWF0ZV9yeHFgLiBJdCB1c2VkIHRvIHJldHVybiBhIHBvaW50ZXIsIGJ1dCBub3cgaXQgcmV0dXJucyBhbiBgaW50YCBlcnJvciBjb2RlLCBwYXNzaW5nIHRoZSBwb2ludGVyIHZpYSBhbiBvdXQgcGFyYW1ldGVyLiBUaGlzIHNlZW1zIHRvIGJlIGEgc3RyYWlnaHRmb3J3YXJkIGJ1ZyBmaXgsIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgbWlzaW50ZXJwcmV0YXRpb24gb2YgZXJyb3JzLiBQcmV2aW91c2x5LCBgbWFuYV9jcmVhdGVfcnhxYCB3b3VsZCBhbHdheXMgcmV0dXJuIGBOVUxMYCBvbiBhbnkgZXJyb3IsIGJ1dCB0aGUgY2FsbGluZyBmdW5jdGlvbiwgYG1hbmFfYWRkX3J4X3F1ZXVlc2AsIHdvdWxkIGFsd2F5cyBhc3N1bWUgYC1FTk9NRU1gLCByZWdhcmRsZXNzIG9mIHRoZSB1bmRlcmx5aW5nIGlzc3VlLiBOb3cgd2UgaGF2ZSB0aGUgYWN0dWFsIGVycm9yIGNvZGVzIGJlaW5nIHJldHVybmVkLgoKSG1tLCB0aGlzIHdhcnJhbnRzIGEgZnV6emluZyBjb25zaWRlcmF0aW9uLCBvYnZpb3VzbHkuIEl04oCZcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgbmV0d29yayBkcml2ZXIgZm9yIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyLCBzbyB0aGlzIGlzIGludGVyZXN0aW5nIHRlcnJpdG9yeS4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gd2UgYWN0dWFsbHkgKnJlYWNoKiB0aGlzIGluIGEgZnV6emFibGUgZW52aXJvbm1lbnQ/IFNpbmNlIGl0JiMzOTtzIGEgUENJIGRldmljZSBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgQXp1cmUsIGl0JiMzOTtzIHR5cGljYWxseSB0b3VnaC4gVGhlc2Uga2luZHMgb2YgaGFyZHdhcmUgZHJpdmVycyBhcmUgcmFyZWx5IGVhc2lseSBmdXp6YWJsZSB1bmxlc3MgdGhleeKAmXJlIGVtdWxhdGVkIGluIFFFTVUgb3Igc3l6a2FsbGVyIGhhcyBhIGdvb2Qgd2F5IHRvIHNpbXVsYXRlIHRoZSBQQ0kgaGFyZHdhcmUuIEFuZCBzeXprYWxsZXImIzM5O3MgUENJIGZ1enppbmcgY2FwYWJpbGl0aWVzIGFyZSBrbm93biB0byBiZSBsaW1pdGVkLiBJcyBNQU5BIGV2ZW4gZW11bGF0ZWQ/IFByb2JhYmx5IG5vdCwgcmlnaHQ/CgpBbHJpZ2h0LCBsZXQmIzM5O3MgdHJhY2UgdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGwgY2hhaW4uIGBtYW5hX2NyZWF0ZV9yeHFgIGlzIGNhbGxlZCBieSBgbWFuYV9hZGRfcnhfcXVldWVzYCwgd2hpY2gsIGluIHR1cm4sIGlzIHByb2JhYmx5IGNhbGxlZCBieSBgbWFuYV9hdHRhY2hgIG9yIGEgc2ltaWxhciBmdW5jdGlvbi4gTGV0JiMzOTtzIGRvIGEgcXVpY2sgc2VhcmNoIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNgIHRvIGNvbmZpcm0gdGhlIGNhbGwgY2hhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDM6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFuYV9jcmVhdGVfcnhxJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYz0yNzgwPXN0YXRpYyBpbnQgbWFuYV9jcmVhdGVfcGFnZV9wb29sKHN0cnVjdCBtYW5hX3J4cSAqcnhxLCBzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMjgxMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzoyODE0OnN0YXRpYyBpbnQgbWFuYV9jcmVhdGVfcnhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLCB1MzIgcnhxX2lkeCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0yODE1LVx0XHRcdCAgIHN0cnVjdCBtYW5hX2VxICplcSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTI5MzctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM6MjkzODpzdGF0aWMgdm9pZCBtYW5hX2NyZWF0ZV9yeHFfZGVidWdmcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgaW50IGlkeClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0yOTM5LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM9Mjk2MD1zdGF0aWMgaW50IG1hbmFfYWRkX3J4X3F1ZXVlcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMjk2Ny1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFwYy1cdTAwM2VudW1fcXVldWVzOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jOjI5Njg6XHRcdGVyciA9IG1hbmFfY3JlYXRlX3J4cShhcGMsIGksIFx1MDAyNmFwYy1cdTAwM2VlcXNbaV0sIG5kZXYsIFx1MDAyNnJ4cSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMjk2OS1cdFx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0yOTc3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jOjI5Nzg6XHRcdG1hbmFfY3JlYXRlX3J4cV9kZWJ1Z2ZzKGFwYywgaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMjk3OS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODMwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQXNzZXNzaW5nIHRoZSBGdXp6YWJpbGl0eSBvZiB0aGUgQXp1cmUgTmV0d29yayBBZGFwdGVyIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBkcml2ZXIsIHRoZSBvbmUgZm9yIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyLiBNeSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzLCAmIzM0O2htbW0sIHdvcnRoIGZ1enppbmc/JiMzNDsgSSB1c3VhbGx5IHNlZSBoYXJkd2FyZSBkcml2ZXJzIHRoYXQgZGVwZW5kIG9uIHNwZWNpZmljIGhhcmR3YXJlLCBlc3BlY2lhbGx5IHRob3NlIHRoYXQgYXJlbiYjMzk7dCBlbXVsYXRlZCBpbiB0aGUgdXN1YWwgc3VzcGVjdHMgbGlrZSBRRU1VIG9yIHZoY2ksIGFuZCBJIGtub3cgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IHR5cGljYWxseSByZWFjaCB0aG9zZS4gU28sIG15IHByaW1hcnkgcXVlc3Rpb24gYmVjb21lczogaXMgdGhlcmUgYW55IGtpbmQgb2YgZW11bGF0aW9uIGluIHBsYWNlIGZvciB0aGUgTUFOQSBhZGFwdGVyPyBJZiB0aGVyZSYjMzk7cyBubyBlbXVsYXRpb24sIHRoZSBjaGFuY2VzIG9mIGVmZmVjdGl2ZSBmdXp6aW5nIGRyb3Agc2lnbmlmaWNhbnRseS4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgYW5kIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgYXZhaWxhYmxlIHNpbXVsYXRpb24sIG9yIGlmIHRoaXMgaXMgYSBub24tc3RhcnRlciByaWdodCBvdXQgb2YgdGhlIGdhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDM6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUlDUk9TT0ZUX01BTkEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvS2NvbmZpZz0yPWNvbmZpZyBNQU5BX0lORklOSUJBTkRcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O01pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvS2NvbmZpZzo0Olx0ZGVwZW5kcyBvbiBORVRERVZJQ0VTIFx1MDAyNlx1MDAyNiBFVEhFUk5FVCBcdTAwMjZcdTAwMjYgUENJIFx1MDAyNlx1MDAyNiBNSUNST1NPRlRfTUFOQVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvS2NvbmZpZy01LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnPTE2PWlmIE5FVF9WRU5ET1JfTUlDUk9TT0ZUXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZy0xNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnOjE4OmNvbmZpZyBNSUNST1NPRlRfTUFOQVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWctMTktXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L01ha2VmaWxlLTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfTUlDUk9TT0ZUX01BTkEpICYjNDM7PSBtYW5hL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL01ha2VmaWxlLTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19NSUNST1NPRlRfTUFOQSkgJiM0Mzs9IG1hbmEub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvTWFrZWZpbGUtNi1tYW5hLW9ianMgOj0gZ2RtYV9tYWluLm8gc2htX2NoYW5uZWwubyBod19jaGFubmVsLm8gbWFuYV9lbi5vIG1hbmFfZXRodG9vbC5vIG1hbmFfYnBmLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDM5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgU3l6a2FsbGVyJiMzOTtzIE1BTkEgRnV6emluZyBDYXBhYmlsaXRpZXMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBmdXp6aW5nIHRoZSBNQU5BIGRldmljZSB3aXRoIHN5emthbGxlci4gRmlyc3QgdGhpbmdzIGZpcnN0LCBpcyBNQU5BIGEgUENJIGRldmljZT8gWWVzLCBpdCBpcy4gTm93LCBjYW4gc3l6a2FsbGVyIGhhbmRsZSB0aGF0PyBXZWxsLCBpdCAqZG9lcyogaGF2ZSBzb21lIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcywgYnV0IGZyb20gbXkgZXhwZXJpZW5jZSwgaXQmIzM5O3MgcHJldHR5IGxpbWl0ZWQgYW5kIGdlbmVyYWxseSByZXF1aXJlcyB2ZXJ5IHNwZWNpZmljIGRlc2NyaXB0aW9ucyB0byBiZSBlZmZlY3RpdmUuIFRoaXMgaXMga2V5LiBIb2xkIG9uIGEgc2Vjb25kLi4uIGRvZXMgc3l6a2FsbGVyIGV2ZW4gKmhhdmUqIGEgTUFOQSBlbXVsYXRvcj8gTm8sIGl0IGRvZXNuJiMzOTt0LiBUaGF0IG1ha2VzIHRoaW5ncyBtb3JlIGNvbXBsaWNhdGVkLgoKU28sIHN5emthbGxlciAqY2FuKiB0ZWNobmljYWxseSBmdXp6IFBDSSBkZXZpY2VzIHVzaW5nIHZQQ0ksIGJ1dCBvbmx5IGlmIHRoZSBkZXZpY2UmIzM5O3MgYmVoYXZpb3IgaXMgZXhwbGljaXRseSBkZXNjcmliZWQgaW4gdGhvc2UgZGVzY3JpcHRpb25zLiBXaXRob3V0IHRob3NlIGRlc2NyaXB0aW9ucywgaXQmIzM5O3MgcHJldHR5IG11Y2gganVzdCByYW5kb20gZnV6emluZyBvZiB0aGUgUENJIGNvbmZpZyBzcGFjZS4gQW5kIGZyb20gd2hhdCBJJiMzOTt2ZSBzZWVuLCB0aGF0IGFsbW9zdCBuZXZlciBnZXRzIG1lIGRlZXAgZW5vdWdoIGludG8gdGhlIGRyaXZlciBsb2dpYywgbm90IG5lYXJseSBlbm91Z2ggdG8gaGl0IHNvbWV0aGluZyBpbXBvcnRhbnQgbGlrZSBgbWFuYV9jcmVhdGVfcnhxYC4KCkJ1dCB3YWl04oCmIEkmIzM5O20gcmVtZW1iZXJpbmcgdGhhdCBgbWFuYV9jcmVhdGVfcnhxYCBnZXRzIGNhbGxlZCBkdXJpbmcgdGhlIGRldmljZSYjMzk7cyBpbml0aWFsaXphdGlvbi4gQWhhISBJZiB0aGUgUENJIHByb2JlIHN1Y2NlZWRzLCB0aGF0ICpjb3VsZCogbWVhbiBpdCYjMzk7cyBjYWxsZWQuIFRoaXMgaXMgYSBwb3NzaWJpbGl0eS4gTm93LCBsZXQgbWUgY2hlY2sgaWYgYG1hbmFfcHJvYmVgIGRvZXMsIGluIGZhY3QsIGNhbGwgYG1hbmFfY3JlYXRlX3J4cWAuIFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIGxpbmsgSSBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDM6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFuYV9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYz0xNzc9c3RhdGljIGludCBtYW5hX2dkX3F1ZXJ5X21heF9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjYxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6MjYyOlx0LyogQ2FwIHRvIHRoZSBzYW1lIGxpbWl0IHVzZWQgYnkgbWFuYV9wcm9iZSgpIGZvciBwb3J0IGluc3RhbnRpYXRpb24sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNjMtXHQgKiBzbyBNU0ktWCBhbmQgcXVldWUgYnVkZ2V0aW5nIG1hdGNoZXMgdGhlIGFjdHVhbCBwb3J0IGNvdW50LlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jPTIzMDI9c3RhdGljIGludCBtYW5hX2dkX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTIzNTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzoyMzU4Olx0ZXJyID0gbWFuYV9wcm9iZShcdTAwMjZnYy1cdTAwM2VtYW5hLCBmYWxzZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yMzU5LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yMzk2LVx0ICogSGFyZHdhcmUgY291bGQgYmUgaW4gcmVjb3ZlcnkgbW9kZSBhbmQgdGhlIEhXQyByZXR1cm5zIFRJTUVET1VUIG9yXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzoyMzk3Olx0ICogRVBST1RPIGZyb20gbWFuYV9nZF9zZXR1cCgpLCBtYW5hX3Byb2JlKCkgb3IgbWFuYV9yZG1hX3Byb2JlKCksIG9yXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yMzk4LVx0ICogd2UgcmVjZWl2ZWQgYSBoYXJkd2FyZSByZXNldCBldmVudCBvdmVyIEhXQyBpbnRlcnJ1cHQuIEluIHRoaXMgY2FzZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYz0yNDYwPWludCBtYW5hX2dkX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNDY4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6MjQ2OTpcdGVyciA9IG1hbmFfcHJvYmUoXHUwMDI2Z2MtXHUwMDNlbWFuYSwgdHJ1ZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNDcwLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM9MzUyMz1pbnQgbWFuYV9kZXRhY2goc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGJvb2wgZnJvbV9jbG9zZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMzU1OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzozNTYwOnN0YXRpYyBpbnQgbWFuYV9wcm9iZV9wb3J0KHN0cnVjdCBtYW5hX2NvbnRleHQgKmFjLCBpbnQgcG9ydF9pZHgsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMzU2MS1cdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqKm5kZXZfc3RvcmFnZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM9Mzc5MD1zdGF0aWMgdm9pZCBtYW5hX2dmX3N0YXRzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTM4MTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM6MzgxMzppbnQgbWFuYV9wcm9iZShzdHJ1Y3QgZ2RtYV9kZXYgKmdkLCBib29sIHJlc3VtaW5nKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTM4MTQte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0zODg3LVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhYy1cdTAwM2VudW1fcG9ydHM7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM6Mzg4ODpcdFx0XHRlcnIgPSBtYW5hX3Byb2JlX3BvcnQoYWMsIGksIFx1MDAyNmFjLVx1MDAzZXBvcnRzW2ldKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0zODg5LVx0XHRcdC8qIExvZyB0aGUgcG9ydCBmb3Igd2hpY2ggdGhlIHByb2JlIGZhaWxlZCwgc3RvcCBwcm9iaW5nXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg4OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZnJhbWVkIGFzIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBtYW5hYCBOZXR3b3JrIFN0YWNrIEZsb3cqKgoKQWxyaWdodCwgSSYjMzk7bSB0cmFjaW5nIHRocm91Z2ggdGhlIGBtYW5hX3Byb2JlYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBgbWFuYV9wcm9iZWAgaXMgbWFraW5nIGEgY2FsbCB0byBgbWFuYV9wcm9iZV9wb3J0YC4gTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBJJiMzOTttIHRyeWluZyB0byBhbnN3ZXIgaXMgd2hhdCBoYXBwZW5zICphZnRlciogdGhhdC4gRG9lcyBgbWFuYV9wcm9iZV9wb3J0YCBjb250aW51ZSBieSBjYWxsaW5nIGBtYW5hX2F0dGFjaGAsIHdoaWNoIEkgc3VzcGVjdCB3b3VsZCBiZSB0aGUgcGF0aCBmb3IgZXN0YWJsaXNoaW5nIHRoZSBwb3J0IHdpdGhpbiB0aGUgYG1hbmFgIHN1YnN5c3RlbSwgb3IgaXMgaXQgZ29pbmcgZG93biB0aGUgcXVldWUgc2V0dXAgcm91dGUgd2l0aCBgbWFuYV9hZGRfcnhfcXVldWVzYD8gVGhlIGRpc3RpbmN0aW9uIGhlcmUgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHBvcnQgaW5pdGlhbGl6YXRpb24gcGF0aC4gQXJlIHdlIGluaXRpYWxseSBhdHRhY2hpbmcgdGhlIHBvcnQmIzM5O3MgcmVzb3VyY2VzLCBvciBpcyB0aGUgcXVldWUgc2V0dXAgYmVpbmcgaGFuZGxlZCBmaXJzdD8gRGVwZW5kaW5nIG9uIGhvdyB0aGUgc3lzdGVtIGlzIGRlc2lnbmVkLCB0aGlzIG1heSBiZSBhbiBpbXBvcnRhbnQgZGF0YSBwYXRoIHRvIGFuYWx5emUgdG8gZmluZCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGNhbGwgY2hhaW4gZnJvbSB0aGlzIHBvaW50IHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHBvcnQgaW5pdGlhbGl6YXRpb24gZmxvdyBpbiB0aGlzIGBtYW5hYCBmcmFtZXdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAzOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hbmFfYWRkX3J4X3F1ZXVlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM9MjkzOD1zdGF0aWMgdm9pZCBtYW5hX2NyZWF0ZV9yeHFfZGVidWdmcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgaW50IGlkeClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMjk1OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzoyOTYwOnN0YXRpYyBpbnQgbWFuYV9hZGRfcnhfcXVldWVzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTI5NjEtXHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jPTMzMzI9aW50IG1hbmFfYWxsb2NfcXVldWVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0zMzY2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jOjMzNjc6XHRlcnIgPSBtYW5hX2FkZF9yeF9xdWV1ZXMoYXBjLCBuZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0zMzY4LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ5MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6CgoqKkRpZ2dpbmcgaW50byB0aGUgYG1hbmFgIGFsbG9jYXRpb24qKgoKT2theSwgc28gSSBzZWUgYG1hbmFfYWxsb2NfcXVldWVzYCBpcyBjYWxsaW5nIGBtYW5hX2FkZF9yeF9xdWV1ZXNgLiBUaGF0JiMzOTtzIHN0YW5kYXJkIHByYWN0aWNlLCB0aGUgYWxsb2NhdGlvbiBmdW5jdGlvbiB1c3VhbGx5IGluaXRpYWxpemVzIHNvbWUgdGhpbmdzIGJlZm9yZSBhZGRpbmcgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMgYmV0dGVyLgoKQnV0IGhvbGQgb24uLi4gYmVmb3JlIEkgZGl2ZSBpbnRvIHRoZSBpbnRlcm5hbHMgb2YgYG1hbmFfYWRkX3J4X3F1ZXVlc2AsIG15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyAqd2hvKiBpcyBjYWxsaW5nIGBtYW5hX2FsbG9jX3F1ZXVlc2A/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyAqY3JpdGljYWwqIGZvciBncmFzcGluZyB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBmdW5jdGlvbiBjYWxsIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIHdob2xlIGFsbG9jYXRpb24gcHJvY2VzcyBiZWdpbnMuIFdoYXQgc3Vic3lzdGVtIGlzIHRyaWdnZXJpbmcgdGhpcyBhbGxvY2F0aW9uPyBJcyBpdCBvbiBkZXZpY2UgaW5pdCwgb24gbmV0d29yayBldmVudCwgZXRjLiBDb250ZXh0IGlzIGtleSB0byB1bmRlcnN0YW5kIHdoYXQgaXMgaGFwcGVuaW5nIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hbmFfYWxsb2NfcXVldWVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYz03Mz1zdGF0aWMgaW50IG1hbmFfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtNzYtXHRpbnQgZXJyO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jOjc3Olx0ZXJyID0gbWFuYV9hbGxvY19xdWV1ZXMobmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtNzgtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jPTMyNzA9c3RhdGljIGludCBtYW5hX2luaXRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMzMzMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzozMzMyOmludCBtYW5hX2FsbG9jX3F1ZXVlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0zMzMzLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM9MzQxMD1pbnQgbWFuYV9hdHRhY2goc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTM0MjEtXHRpZiAoYXBjLVx1MDAzZXBvcnRfc3Rfc2F2ZSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jOjM0MjI6XHRcdGVyciA9IG1hbmFfYWxsb2NfcXVldWVzKG5kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTM0MjMtXHRcdGlmIChlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE0MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBNQU5BIGFuZCBTeXprYWxsZXIgQ29tcGF0aWJpbGl0eSoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24gb2Ygd2hhdCBJJiMzOTttIHRoaW5raW5nIHJlZ2FyZGluZyBNQU5BIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggU3l6a2FsbGVyLiBFc3NlbnRpYWxseSwgYG1hbmFfb3BlbmAgaXMgdGhlIGtleSBlbnRyeSBwb2ludDsgaXQgdHJpZ2dlcnMgYG1hbmFfYWxsb2NfcXVldWVzYCwgd2hpY2ggZXZlbnR1YWxseSBsZWFkcyB0byB0aGUgY3JlYXRpb24gb2YgcmVjZWl2ZSBxdWV1ZXMgdGhyb3VnaCBgbWFuYV9hZGRfcnhfcXVldWVzYCBhbmQgYG1hbmFfY3JlYXRlX3J4cWAuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIFN5emthbGxlciwgaW4gaXRzIGN1cnJlbnQgc2V0dXAsIGFjdHVhbGx5IHJlZ2lzdGVycyB0aGlzIGRldmljZS4KCkNvbnNpZGVyaW5nIGhvdyBTeXprYWxsZXIgb3BlcmF0ZXMg4oCTIGluIFFFTVUgb3IgR0NFIHByaW1hcmlseSDigJMgSSBpbW1lZGlhdGVseSBoaXQgYSByb2FkYmxvY2suIEdDRSByZWxpZXMgb24gdmlydGlvLW5ldCBvciBndmUsIGFuZCB3aGlsZSBBenVyZSB1c2VzIE1BTkEsIHRoZSBlbnZpcm9ubWVudHMgU3l6a2FsbGVyIHR5cGljYWxseSBydW5zIGluIGRvbiYjMzk7dCBuYXRpdmVseSBpbmNsdWRlIHRoaXMgaGFyZHdhcmUuIFRoZSBpbXBsaWNhdGlvbiBpcywgc3RyYWlnaHQgb3V0IG9mIHRoZSBib3gsIFN5emthbGxlciBjYW4mIzM5O3QgJiMzNDtzZWUmIzM0OyBNQU5BLgoKVGhlIG5hdHVyYWwgZm9sbG93LXVwIGlzLCBkb2VzIFN5emthbGxlciAqZW11bGF0ZSogTUFOQT8gV2Uga25vdyBpdCBoYXMgbWVjaGFuaXNtcyBmb3IgVVNCICh2aGNpKSBhbmQgV2ktRmkgKG1hYzgwMjExX2h3c2ltKSwgc28gdGhlcmUmIzM5O3MgcHJlY2VkZW50LiBCdXQgYSBxdWljayBjaGVjayByZXZlYWxzIG5vIGV4cGxpY2l0IGVtdWxhdGlvbiBmb3IgTUFOQS4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGlzc3VlLgoKSG93ZXZlciwgdGhlcmUmIzM5O3MgYSBnbGltbWVyIG9mIGhvcGU6IFN5emthbGxlciAqZG9lcyogaGF2ZSBhIFBDSSBmdXp6ZXIsIHdoaWNoIGlzIGRlc2lnbmVkIHRvIGluamVjdCBQQ0kgZGV2aWNlcy4gQ291bGQgdGhpcyBiZSB0aGUgc29sdXRpb24/IE1heWJlLiBCdXQgZXZlbiBpZiBpdCAqY2FuKiBpbmplY3QgYSBQQ0kgZGV2aWNlIHJlcHJlc2VudGluZyBNQU5BLCB0aGF0JiMzOTtzIG9ubHkgdGhlIGZpcnN0IHN0ZXAuIEZvciBgbWFuYV9wcm9iZWAgdG8gc3VjY2VlZCwgdGhlIGVtdWxhdGVkIGRldmljZSB3b3VsZCBuZWVkIHRvIHJlc3BvbmQgdG8gc3BlY2lmaWMgTU1JTyByZWFkcyBhbmQgd3JpdGVzIGluIGEgd2F5IHRoYXQgc2F0aXNmaWVzIHRoZSBkcml2ZXIuCgpTbyB0aGUgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGZvciBgbWFuYV9wcm9iZWAgYW5kIGBtYW5hX2dkX3Byb2JlYCB0byB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGF0IGNvbmRpdGlvbnMgbmVlZCB0byBiZSBtZXQsIHdoYXQgcmVnaXN0ZXJzIG5lZWQgdG8gYmUgcmVhZCwgYW5kIHdoYXQgdmFsdWVzIGFyZSBleHBlY3RlZCBpbiB0aGUgd3JpdGVzLiBUaGlzIHdpbGwgcmV2ZWFsIHRoZSBmZWFzaWJpbGl0eSBvZiB1c2luZyB0aGUgUENJIGZ1enplciB0byB0cmljayB0aGUgZHJpdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYW5hX2dkX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jPTIyOTc9c3RhdGljIGJvb2wgbWFuYV9pc19wZih1bnNpZ25lZCBzaG9ydCBkZXZfaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjMwMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jOjIzMDI6c3RhdGljIGludCBtYW5hX2dkX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjMwMy17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9MjUwNj1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFuYV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjUwOC1cdC5pZF90YWJsZVx0PSBtYW5hX2lkX3RhYmxlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6MjUwOTpcdC5wcm9iZVx0XHQ9IG1hbmFfZ2RfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNTEwLVx0LnJlbW92ZVx0XHQ9IG1hbmFfZ2RfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTU0CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyBgbWFuYV9nZF9wcm9iZWAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gaXQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBqdXN0IGp1bXAgcmlnaHQgaW4gYW5kIHNlZSB3aGF0IGBtYW5hX2dkX3Byb2JlYCBpcyBhY3R1YWxseSBkb2luZy4gTm8gbmVlZCBmb3IgZXhjZXNzaXZlIHRoZW9yaXppbmcgYXQgdGhpcyBwb2ludC4gR290dGEgc2VlIHRoZSBjb2RlLCBwb2tlIGFyb3VuZCwgdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24uIFdoYXQgZXhhY3RseSBpcyB0aGlzIHByb2JlIGRlc2lnbmVkIHRvIGFjaGlldmU/IFdoYXQgZGF0YSBpcyBpdCBpbnRlcmFjdGluZyB3aXRoPyBMZXQmIzM5O3MgZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb3JlIHB1cnBvc2UgYmVmb3JlIGdldHRpbmcgaW50byBkZWVwZXIgYW5hbHlzaXMuIExldCYjMzk7cyBzZWUgaG93IGl0IG9wZXJhdGVzIGFuZCBnbyBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjMwMiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjMwMjpcdHN0YXRpYyBpbnQgbWFuYV9nZF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbjIzMDM6XHR7XG4yMzA0Olx0XHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYztcbjIzMDU6XHRcdHZvaWQgX19pb21lbSAqYmFyMF92YTtcbjIzMDY6XHRcdGludCBiYXIgPSAwO1xuMjMwNzpcdFx0aW50IGVycjtcbjIzMDg6XHRcbjIzMDk6XHRcdC8qIEVhY2ggcG9ydCBoYXMgMiBDUXMsIGVhY2ggQ1EgaGFzIGF0IG1vc3QgMSBFUUUgYXQgYSB0aW1lICovXG4yMzEwOlx0XHRCVUlMRF9CVUdfT04oMiAqIE1BWF9QT1JUU19JTl9NQU5BX0RFViAqIEdETUFfRVFFX1NJWkUgXHUwMDNlIEVRX1NJWkUpO1xuMjMxMTpcdFxuMjMxMjpcdFx0ZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7XG4yMzEzOlx0XHRpZiAoZXJyKSB7XG4yMzE0Olx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byBlbmFibGUgcGNpIGRldmljZSAoZXJyPSVkKVxcblwmIzM0OywgZXJyKTtcbjIzMTU6XHRcdFx0cmV0dXJuIC1FTlhJTztcbjIzMTY6XHRcdH1cbjIzMTc6XHRcbjIzMTg6XHRcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xuMjMxOTpcdFxuMjMyMDpcdFx0ZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBcJiMzNDttYW5hXCYjMzQ7KTtcbjIzMjE6XHRcdGlmIChlcnIpXG4yMzIyOlx0XHRcdGdvdG8gZGlzYWJsZV9kZXY7XG4yMzIzOlx0XG4yMzI0Olx0XHRlcnIgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBETUFfQklUX01BU0soNjQpKTtcbjIzMjU6XHRcdGlmIChlcnIpIHtcbjIzMjY6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7RE1BIHNldCBtYXNrIGZhaWxlZDogJWRcXG5cJiMzNDssIGVycik7XG4yMzI3Olx0XHRcdGdvdG8gcmVsZWFzZV9yZWdpb247XG4yMzI4Olx0XHR9XG4yMzI5Olx0XHRkbWFfc2V0X21heF9zZWdfc2l6ZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgVUlOVF9NQVgpO1xuMjMzMDpcdFxuMjMzMTpcdFx0ZXJyID0gLUVOT01FTTtcbjIzMzI6XHRcdGdjID0gdnphbGxvYyhzaXplb2YoKmdjKSk7XG4yMzMzOlx0XHRpZiAoIWdjKVxuMjMzNDpcdFx0XHRnb3RvIHJlbGVhc2VfcmVnaW9uO1xuMjMzNTpcdFxuMjMzNjpcdFx0bXV0ZXhfaW5pdChcdTAwMjZnYy1cdTAwM2VlcV90ZXN0X2V2ZW50X211dGV4KTtcbjIzMzc6XHRcdG11dGV4X2luaXQoXHUwMDI2Z2MtXHUwMDNlZ2ljX211dGV4KTtcbjIzMzg6XHRcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBnYyk7XG4yMzM5Olx0XHRnYy1cdTAwM2ViYXIwX3BhID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApO1xuMjM0MDpcdFx0Z2MtXHUwMDNlYmFyMF9zaXplID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTtcbjIzNDE6XHRcbjIzNDI6XHRcdGJhcjBfdmEgPSBwY2lfaW9tYXAocGRldiwgYmFyLCAwKTtcbjIzNDM6XHRcdGlmICghYmFyMF92YSlcbjIzNDQ6XHRcdFx0Z290byBmcmVlX2djO1xuMjM0NTpcdFxuMjM0NjpcdFx0Z2MtXHUwMDNlbnVtYV9ub2RlID0gZGV2X3RvX25vZGUoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuMjM0NzpcdFx0Z2MtXHUwMDNlaXNfcGYgPSBtYW5hX2lzX3BmKHBkZXYtXHUwMDNlZGV2aWNlKTtcbjIzNDg6XHRcdGdjLVx1MDAzZWlzX3BmMiA9IChwZGV2LVx1MDAzZWRldmljZSA9PSBNQU5BX1BGMl9ERVZJQ0VfSUQpO1xuMjM0OTpcdFxuMjM1MDpcdFx0Z2MtXHUwMDNlYmFyMF92YSA9IGJhcjBfdmE7XG4yMzUxOlx0XHRnYy1cdTAwM2VkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbjIzNTI6XHRcdHhhX2luaXQoXHUwMDI2Z2MtXHUwMDNlaXJxX2NvbnRleHRzKTtcbjIzNTM6XHRcbjIzNTQ6XHRcdGVyciA9IG1hbmFfZ2Rfc2V0dXAocGRldik7XG4yMzU1Olx0XHRpZiAoZXJyKVxuMjM1NjpcdFx0XHRnb3RvIHVubWFwX2JhcjtcbjIzNTc6XHRcbjIzNTg6XHRcdGVyciA9IG1hbmFfcHJvYmUoXHUwMDI2Z2MtXHUwMDNlbWFuYSwgZmFsc2UpO1xuMjM1OTpcdFx0aWYgKGVycilcbjIzNjA6XHRcdFx0Z290byBjbGVhbnVwX2dkO1xuMjM2MTpcdFxuMjM2MjpcdFx0ZXJyID0gbWFuYV9yZG1hX3Byb2JlKFx1MDAyNmdjLVx1MDAzZW1hbmFfaWIpO1xuMjM2MzpcdFx0aWYgKGVycilcbjIzNjQ6XHRcdFx0Z290byBjbGVhbnVwX21hbmE7XG4yMzY1Olx0XG4yMzY2Olx0XHQvKlxuMjM2NzpcdFx0ICogSWYgYSBoYXJkd2FyZSByZXNldCBldmVudCBoYXMgb2NjdXJyZWQgb3ZlciBIV0MgZHVyaW5nIHByb2JlLFxuMjM2ODpcdFx0ICogcm9sbGJhY2sgYW5kIHBlcmZvcm0gaGFyZHdhcmUgcmVzZXQgcHJvY2VkdXJlLlxuMjM2OTpcdFx0ICovXG4yMzcwOlx0XHRpZiAodGVzdF9hbmRfc2V0X2JpdChHQ19QUk9CRV9TVUNDRUVERUQsIFx1MDAyNmdjLVx1MDAzZWZsYWdzKSkge1xuMjM3MTpcdFx0XHRlcnIgPSAtRVBST1RPO1xuMjM3MjpcdFx0XHRnb3RvIGNsZWFudXBfbWFuYV9yZG1hO1xuMjM3MzpcdFx0fVxuMjM3NDpcdFxuMjM3NTpcdFx0cmV0dXJuIDA7XG4yMzc2Olx0XG4yMzc3Olx0Y2xlYW51cF9tYW5hX3JkbWE6XG4yMzc4Olx0XHRtYW5hX3JkbWFfcmVtb3ZlKFx1MDAyNmdjLVx1MDAzZW1hbmFfaWIpO1xuMjM3OTpcdGNsZWFudXBfbWFuYTpcbjIzODA6XHRcdG1hbmFfcmVtb3ZlKFx1MDAyNmdjLVx1MDAzZW1hbmEsIGZhbHNlKTtcbjIzODE6XHRjbGVhbnVwX2dkOlxuMjM4MjpcdFx0bWFuYV9nZF9jbGVhbnVwX2RldmljZShwZGV2KTtcbjIzODM6XHR1bm1hcF9iYXI6XG4yMzg0Olx0XHR4YV9kZXN0cm95KFx1MDAyNmdjLVx1MDAzZWlycV9jb250ZXh0cyk7XG4yMzg1Olx0XHRwY2lfaW91bm1hcChwZGV2LCBiYXIwX3ZhKTtcbjIzODY6XHRmcmVlX2djOlxuMjM4NzpcdFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpO1xuMjM4ODpcdFx0dmZyZWUoZ2MpO1xuMjM4OTpcdHJlbGVhc2VfcmVnaW9uOlxuMjM5MDpcdFx0cGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTtcbjIzOTE6XHRkaXNhYmxlX2RldjpcbjIzOTI6XHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbjIzOTM6XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O2dkbWEgcHJvYmUgZmFpbGVkOiBlcnIgPSAlZFxcblwmIzM0OywgZXJyKTtcbjIzOTQ6XHRcbjIzOTU6XHRcdC8qXG4yMzk2Olx0XHQgKiBIYXJkd2FyZSBjb3VsZCBiZSBpbiByZWNvdmVyeSBtb2RlIGFuZCB0aGUgSFdDIHJldHVybnMgVElNRURPVVQgb3JcbjIzOTc6XHRcdCAqIEVQUk9UTyBmcm9tIG1hbmFfZ2Rfc2V0dXAoKSwgbWFuYV9wcm9iZSgpIG9yIG1hbmFfcmRtYV9wcm9iZSgpLCBvclxuMjM5ODpcdFx0ICogd2UgcmVjZWl2ZWQgYSBoYXJkd2FyZSByZXNldCBldmVudCBvdmVyIEhXQyBpbnRlcnJ1cHQuIEluIHRoaXMgY2FzZSxcbjIzOTk6XHRcdCAqIHBlcmZvcm0gdGhlIGRldmljZSByZWNvdmVyeSBwcm9jZWR1cmUgYWZ0ZXIgTUFOQV9TRVJWSUNFX1BFUklPRFxuMjQwMDpcdFx0ICogc2Vjb25kcy5cbjI0MDE6XHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTIzCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBNYW5hIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIGBtYW5hX2dkX3NldHVwYCBnZXRzIGNhbGxlZCAqYmVmb3JlKiBgbWFuYV9wcm9iZWAuIFRoYXQmIzM5O3MgdGhlIGtleS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBwcmVwYXJhdG9yeSBzdGVwcyBhcmUgYmVpbmcgdGFrZW4gYmVmb3JlIHRoZSBhY3R1YWwgcHJvYmluZyBwcm9jZXNzIGJlZ2lucy4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW4gdGhpcyBzZXR1cCBmdW5jdGlvbiBpcyBsYXlpbmcgdGhlIGdyb3VuZHdvcmsgZm9yIHRoZSBwcm9iZS4gSSBuZWVkIHRvIGRpdmUgaW50byBgbWFuYV9nZF9zZXR1cGAgYW5kIHF1aWNrbHkgaWRlbnRpZnkgaXRzIHB1cnBvc2UuIElzIGl0IGFsbG9jYXRpbmcgcmVzb3VyY2VzPyBJbml0aWFsaXppbmcgZGF0YSBzdHJ1Y3R1cmVzPyBDb25maWd1cmluZyBoYXJkd2FyZT8gRGV0ZXJtaW5pbmcgdGhlIGNvbnRleHQmIzM5O3MgcmVhZGluZXNzIGZvciBwcm9iaW5nPyBNeSBhc3N1bXB0aW9uIGlzIHRoYXQgaXQmIzM5O3MgZG9pbmcgb25lIG9yIGEgY29tYmluYXRpb24gb2YgdGhlc2UgdGhpbmdzIHRvIGZhY2lsaXRhdGUgYSBzdWNjZXNzZnVsIHByb2JlLiBHb3R0YSBwaW5wb2ludCB0aGUgc3BlY2lmaWMgYWN0aW9ucyB0YWtlbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxMDA6XHRcdGNwdXNfcmVhZF91bmxvY2soKTtcbjIxMDE6XHRcdGtmcmVlKHN0YXJ0X2lycXMpO1xuMjEwMjpcdFx0cmV0dXJuIDA7XG4yMTAzOlx0XG4yMTA0Olx0ZnJlZV9pcnE6XG4yMTA1Olx0XHRmb3IgKGkgLT0gMTsgaSBcdTAwM2U9IDA7IGktLSlcbjIxMDY6XHRcdFx0bWFuYV9nZF9wdXRfZ2ljKGdjLCBmYWxzZSwgaSk7XG4yMTA3Olx0XG4yMTA4Olx0XHRrZnJlZShzdGFydF9pcnFzKTtcbjIxMDk6XHRcdHJldHVybiBlcnI7XG4yMTEwOlx0fVxuMjExMTpcdFxuMjExMjpcdHN0YXRpYyBpbnQgbWFuYV9nZF9zZXR1cF9od2NfaXJxcyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbjIxMTM6XHR7XG4yMTE0Olx0XHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbjIxMTU6XHRcdHVuc2lnbmVkIGludCBtYXhfaXJxcywgbWluX2lycXM7XG4yMTE2Olx0XHRpbnQgbnZlYywgZXJyO1xuMjExNzpcdFxuMjExODpcdFx0aWYgKHBjaV9tc2l4X2Nhbl9hbGxvY19keW4ocGRldikpIHtcbjIxMTk6XHRcdFx0bWF4X2lycXMgPSAxO1xuMjEyMDpcdFx0XHRtaW5faXJxcyA9IDE7XG4yMTIxOlx0XHR9IGVsc2Uge1xuMjEyMjpcdFx0XHQvKiBOZWVkIDEgaW50ZXJydXB0IGZvciBIV0MgKi9cbjIxMjM6XHRcdFx0bWF4X2lycXMgPSBtaW4obnVtX29ubGluZV9jcHVzKCksIE1BTkFfTUFYX05VTV9RVUVVRVMpICYjNDM7IDE7XG4yMTI0Olx0XHRcdG1pbl9pcnFzID0gMjtcbjIxMjU6XHRcdFx0Z2MtXHUwMDNlbXNpX3NoYXJpbmcgPSB0cnVlO1xuMjEyNjpcdFx0fVxuMjEyNzpcdFxuMjEyODpcdFx0bnZlYyA9IHBjaV9hbGxvY19pcnFfdmVjdG9ycyhwZGV2LCBtaW5faXJxcywgbWF4X2lycXMsIFBDSV9JUlFfTVNJWCk7XG4yMTI5Olx0XHRpZiAobnZlYyBcdTAwM2MgMClcbjIxMzA6XHRcdFx0cmV0dXJuIG52ZWM7XG4yMTMxOlx0XG4yMTMyOlx0XHRlcnIgPSBtYW5hX2dkX3NldHVwX2lycXMocGRldiwgbnZlYyk7XG4yMTMzOlx0XHRpZiAoZXJyKSB7XG4yMTM0Olx0XHRcdHBjaV9mcmVlX2lycV92ZWN0b3JzKHBkZXYpO1xuMjEzNTpcdFx0XHRyZXR1cm4gZXJyO1xuMjEzNjpcdFx0fVxuMjEzNzpcdFxuMjEzODpcdFx0Z2MtXHUwMDNlbnVtX21zaXhfdXNhYmxlID0gbnZlYztcbjIxMzk6XHRcdGdjLVx1MDAzZW1heF9udW1fbXNpeCA9IG52ZWM7XG4yMTQwOlx0XG4yMTQxOlx0XHRyZXR1cm4gMDtcbjIxNDI6XHR9XG4yMTQzOlx0XG4yMTQ0Olx0c3RhdGljIGludCBtYW5hX2dkX3NldHVwX3JlbWFpbmluZ19pcnFzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuMjE0NTpcdHtcbjIxNDY6XHRcdHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuMjE0NzpcdFx0c3RydWN0IG1zaV9tYXAgaXJxX21hcDtcbjIxNDg6XHRcdGludCBtYXhfaXJxcywgaSwgZXJyO1xuMjE0OTpcdFxuMjE1MDpcdFx0aWYgKCFwY2lfbXNpeF9jYW5fYWxsb2NfZHluKHBkZXYpKVxuMjE1MTpcdFx0XHQvKiByZW1haW4gaXJxcyBhcmUgYWxyZWFkeSBhbGxvY2F0ZWQgd2l0aCBIV0MgSVJRICovXG4yMTUyOlx0XHRcdHJldHVybiAwO1xuMjE1MzpcdFxuMjE1NDpcdFx0LyogYWxsb2NhdGUgb25seSByZW1haW5pbmcgSVJRcyovXG4yMTU1Olx0XHRtYXhfaXJxcyA9IGdjLVx1MDAzZW51bV9tc2l4X3VzYWJsZSAtIDE7XG4yMTU2Olx0XG4yMTU3Olx0XHRmb3IgKGkgPSAxOyBpIFx1MDAzYz0gbWF4X2lycXM7IGkmIzQzOyYjNDM7KSB7XG4yMTU4Olx0XHRcdGlycV9tYXAgPSBwY2lfbXNpeF9hbGxvY19pcnFfYXQocGRldiwgaSwgTlVMTCk7XG4yMTU5Olx0XHRcdGlmICghaXJxX21hcC52aXJxKSB7XG4yMTYwOlx0XHRcdFx0ZXJyID0gaXJxX21hcC5pbmRleDtcbjIxNjE6XHRcdFx0XHQvKiBjYWxsZXIgd2lsbCBoYW5kbGUgY2xlYW5pbmcgdXAgYWxsIGFsbG9jYXRlZFxuMjE2MjpcdFx0XHRcdCAqIGlycXMsIGFmdGVyIEhXQyBpcyBkZXN0cm95ZWRcbjIxNjM6XHRcdFx0XHQgKi9cbjIxNjQ6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMjE2NTpcdFx0XHR9XG4yMTY2Olx0XHR9XG4yMTY3Olx0XG4yMTY4Olx0XHRlcnIgPSBtYW5hX2dkX3NldHVwX2R5bl9pcnFzKHBkZXYsIG1heF9pcnFzKTtcbjIxNjk6XHRcdGlmIChlcnIpXG4yMTcwOlx0XHRcdHJldHVybiBlcnI7XG4yMTcxOlx0XG4yMTcyOlx0XHRnYy1cdTAwM2VtYXhfbnVtX21zaXggPSBnYy1cdTAwM2VtYXhfbnVtX21zaXggJiM0MzsgbWF4X2lycXM7XG4yMTczOlx0XG4yMTc0Olx0XHRyZXR1cm4gMDtcbjIxNzU6XHR9XG4yMTc2Olx0XG4yMTc3Olx0c3RhdGljIHZvaWQgbWFuYV9nZF9yZW1vdmVfaXJxcyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbjIxNzg6XHR7XG4yMTc5Olx0XHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbjIxODA6XHRcdGludCBpO1xuMjE4MTpcdFxuMjE4MjpcdFx0aWYgKGdjLVx1MDAzZW1heF9udW1fbXNpeCBcdTAwM2MgMSlcbjIxODM6XHRcdFx0cmV0dXJuO1xuMjE4NDpcdFxuMjE4NTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZ2MtXHUwMDNlbWF4X251bV9tc2l4OyBpJiM0MzsmIzQzOykge1xuMjE4NjpcdFx0XHRpZiAoIXhhX2xvYWQoXHUwMDI2Z2MtXHUwMDNlaXJxX2NvbnRleHRzLCBpKSlcbjIxODc6XHRcdFx0XHRjb250aW51ZTtcbjIxODg6XHRcbjIxODk6XHRcdFx0bWFuYV9nZF9wdXRfZ2ljKGdjLCBmYWxzZSwgaSk7XG4yMTkwOlx0XHR9XG4yMTkxOlx0XG4yMTkyOlx0XHRXQVJOX09OKCF4YV9lbXB0eShcdTAwMjZnYy1cdTAwM2VpcnFfY29udGV4dHMpKTtcbjIxOTM6XHRcbjIxOTQ6XHRcdHBjaV9mcmVlX2lycV92ZWN0b3JzKHBkZXYpO1xuMjE5NTpcdFxuMjE5NjpcdFx0Yml0bWFwX2ZyZWUoZ2MtXHUwMDNlbXNpX2JpdG1hcCk7XG4yMTk3Olx0XHRnYy1cdTAwM2Vtc2lfYml0bWFwID0gTlVMTDtcbjIxOTg6XHRcdGdjLVx1MDAzZW1heF9udW1fbXNpeCA9IDA7XG4yMTk5Olx0XHRnYy1cdTAwM2VudW1fbXNpeF91c2FibGUgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYzMQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgYG1hbmFfZ2Rfc2V0dXBgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBjb3JlIG9mIHRoaXMuIE15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGlubmVyIHdvcmtpbmdzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbWFuYV9nZF9zZXR1cGAgYW5kIHdoYXQgaXQgYWN0dWFsbHkgKmRvZXMqLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgZnVuY3Rpb25hbGl0eS4gV2hhdCBhcmUgaXRzIGNvbXBvbmVudHM/IFdoYXQgYXJlIGl0cyBkZXBlbmRlbmNpZXM/IFdoYXQgaXMgaXRzIHJvbGUgaW4gdGhlIGdyZWF0ZXIgc2NoZW1lPyBJIHdpbGwgYW5hbHl6ZSB0aGUgY29kZSBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMjAwOlx0fVxuMjIwMTpcdFxuMjIwMjpcdHN0YXRpYyBpbnQgbWFuYV9nZF9zZXR1cChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbjIyMDM6XHR7XG4yMjA0Olx0XHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbjIyMDU6XHRcdGludCBlcnI7XG4yMjA2Olx0XG4yMjA3Olx0XHRnYy1cdTAwM2VtYW5hX3BjaV9kZWJ1Z2ZzID0gZGVidWdmc19jcmVhdGVfZGlyKHBjaV9uYW1lKHBkZXYpLFxuMjIwODpcdFx0XHRcdFx0XHRcdCAgbWFuYV9kZWJ1Z2ZzX3Jvb3QpO1xuMjIwOTpcdFxuMjIxMDpcdFx0ZXJyID0gbWFuYV9nZF9pbml0X3JlZ2lzdGVycyhwZGV2KTtcbjIyMTE6XHRcdGlmIChlcnIpXG4yMjEyOlx0XHRcdGdvdG8gcmVtb3ZlX2RlYnVnZnM7XG4yMjEzOlx0XG4yMjE0Olx0XHRtYW5hX3NtY19pbml0KFx1MDAyNmdjLVx1MDAzZXNobV9jaGFubmVsLCBnYy1cdTAwM2VkZXYsIGdjLVx1MDAzZXNobV9iYXNlKTtcbjIyMTU6XHRcbjIyMTY6XHRcdGdjLVx1MDAzZXNlcnZpY2Vfd3EgPSBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZShcJiMzNDtnZG1hX3NlcnZpY2Vfd3FcJiMzNDssIDApO1xuMjIxNzpcdFx0aWYgKCFnYy1cdTAwM2VzZXJ2aWNlX3dxKSB7XG4yMjE4Olx0XHRcdGVyciA9IC1FTk9NRU07XG4yMjE5Olx0XHRcdGdvdG8gcmVtb3ZlX2RlYnVnZnM7XG4yMjIwOlx0XHR9XG4yMjIxOlx0XG4yMjIyOlx0XHRlcnIgPSBtYW5hX2dkX3NldHVwX2h3Y19pcnFzKHBkZXYpO1xuMjIyMzpcdFx0aWYgKGVycikge1xuMjIyNDpcdFx0XHRkZXZfZXJyKGdjLVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHNldHVwIElSUXMgZm9yIEhXQyBjcmVhdGlvbjogJWRcXG5cJiMzNDssXG4yMjI1Olx0XHRcdFx0ZXJyKTtcbjIyMjY6XHRcdFx0Z290byBmcmVlX3dvcmtxdWV1ZTtcbjIyMjc6XHRcdH1cbjIyMjg6XHRcbjIyMjk6XHRcdGVyciA9IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKGdjKTtcbjIyMzA6XHRcdGlmIChlcnIpXG4yMjMxOlx0XHRcdGdvdG8gcmVtb3ZlX2lycTtcbjIyMzI6XHRcbjIyMzM6XHRcdGVyciA9IG1hbmFfZ2RfdmVyaWZ5X3ZmX3ZlcnNpb24ocGRldik7XG4yMjM0Olx0XHRpZiAoZXJyKVxuMjIzNTpcdFx0XHRnb3RvIGRlc3Ryb3lfaHdjO1xuMjIzNjpcdFxuMjIzNzpcdFx0ZXJyID0gbWFuYV9nZF9kZXRlY3RfZGV2aWNlcyhwZGV2KTtcbjIyMzg6XHRcdGlmIChlcnIpXG4yMjM5Olx0XHRcdGdvdG8gZGVzdHJveV9od2M7XG4yMjQwOlx0XG4yMjQxOlx0XHRlcnIgPSBtYW5hX2dkX3F1ZXJ5X21heF9yZXNvdXJjZXMocGRldik7XG4yMjQyOlx0XHRpZiAoZXJyKVxuMjI0MzpcdFx0XHRnb3RvIGRlc3Ryb3lfaHdjO1xuMjI0NDpcdFxuMjI0NTpcdFx0ZXJyID0gbWFuYV9nZF9zZXR1cF9yZW1haW5pbmdfaXJxcyhwZGV2KTtcbjIyNDY6XHRcdGlmIChlcnIpIHtcbjIyNDc6XHRcdFx0ZGV2X2VycihnYy1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byBzZXR1cCByZW1haW5pbmcgSVJRczogJWRcJiMzNDssIGVycik7XG4yMjQ4Olx0XHRcdGdvdG8gZGVzdHJveV9od2M7XG4yMjQ5Olx0XHR9XG4yMjUwOlx0XG4yMjUxOlx0XHRpZiAoIWdjLVx1MDAzZW1zaV9zaGFyaW5nKSB7XG4yMjUyOlx0XHRcdGdjLVx1MDAzZW1zaV9iaXRtYXAgPSBiaXRtYXBfemFsbG9jKGdjLVx1MDAzZW51bV9tc2l4X3VzYWJsZSwgR0ZQX0tFUk5FTCk7XG4yMjUzOlx0XHRcdGlmICghZ2MtXHUwMDNlbXNpX2JpdG1hcCkge1xuMjI1NDpcdFx0XHRcdGVyciA9IC1FTk9NRU07XG4yMjU1Olx0XHRcdFx0Z290byBkZXN0cm95X2h3YztcbjIyNTY6XHRcdFx0fVxuMjI1NzpcdFx0XHQvKiBTZXQgYml0IGZvciBIV0MgKi9cbjIyNTg6XHRcdFx0c2V0X2JpdCgwLCBnYy1cdTAwM2Vtc2lfYml0bWFwKTtcbjIyNTk6XHRcdH1cbjIyNjA6XHRcbjIyNjE6XHRcdGRldl9kYmcoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O21hbmEgZ2RtYSBzZXR1cCBzdWNjZXNzZnVsXFxuXCYjMzQ7KTtcbjIyNjI6XHRcdHJldHVybiAwO1xuMjI2MzpcdFxuMjI2NDpcdGRlc3Ryb3lfaHdjOlxuMjI2NTpcdFx0bWFuYV9od2NfZGVzdHJveV9jaGFubmVsKGdjKTtcbjIyNjY6XHRyZW1vdmVfaXJxOlxuMjI2NzpcdFx0bWFuYV9nZF9yZW1vdmVfaXJxcyhwZGV2KTtcbjIyNjg6XHRmcmVlX3dvcmtxdWV1ZTpcbjIyNjk6XHRcdGRlc3Ryb3lfd29ya3F1ZXVlKGdjLVx1MDAzZXNlcnZpY2Vfd3EpO1xuMjI3MDpcdFx0Z2MtXHUwMDNlc2VydmljZV93cSA9IE5VTEw7XG4yMjcxOlx0cmVtb3ZlX2RlYnVnZnM6XG4yMjcyOlx0XHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoZ2MtXHUwMDNlbWFuYV9wY2lfZGVidWdmcyk7XG4yMjczOlx0XHRnYy1cdTAwM2VtYW5hX3BjaV9kZWJ1Z2ZzID0gTlVMTDtcbjIyNzQ6XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0OyVzIGZhaWxlZCAoZXJyb3IgJWQpXFxuXCYjMzQ7LCBfX2Z1bmNfXywgZXJyKTtcbjIyNzU6XHRcdHJldHVybiBlcnI7XG4yMjc2Olx0fVxuMjI3NzpcdFxuMjI3ODpcdHN0YXRpYyB2b2lkIG1hbmFfZ2RfY2xlYW51cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4yMjc5Olx0e1xuMjI4MDpcdFx0c3RydWN0IGdkbWFfY29udGV4dCAqZ2MgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4yMjgxOlx0XG4yMjgyOlx0XHRtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoZ2MpO1xuMjI4MzpcdFxuMjI4NDpcdFx0bWFuYV9nZF9yZW1vdmVfaXJxcyhwZGV2KTtcbjIyODU6XHRcbjIyODY6XHRcdGlmIChnYy1cdTAwM2VzZXJ2aWNlX3dxKSB7XG4yMjg3Olx0XHRcdGRlc3Ryb3lfd29ya3F1ZXVlKGdjLVx1MDAzZXNlcnZpY2Vfd3EpO1xuMjI4ODpcdFx0XHRnYy1cdTAwM2VzZXJ2aWNlX3dxID0gTlVMTDtcbjIyODk6XHRcdH1cbjIyOTA6XHRcbjIyOTE6XHRcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShnYy1cdTAwM2VtYW5hX3BjaV9kZWJ1Z2ZzKTtcbjIyOTI6XHRcdGdjLVx1MDAzZW1hbmFfcGNpX2RlYnVnZnMgPSBOVUxMO1xuMjI5MzpcdFxuMjI5NDpcdFx0ZGV2X2RiZyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7bWFuYSBnZG1hIGNsZWFudXAgc3VjY2Vzc2Z1bFxcblwmIzM0Oyk7XG4yMjk1Olx0fVxuMjI5NjpcdFxuMjI5NzpcdHN0YXRpYyBib29sIG1hbmFfaXNfcGYodW5zaWduZWQgc2hvcnQgZGV2X2lkKVxuMjI5ODpcdHtcbjIyOTk6XHRcdHJldHVybiBkZXZfaWQgPT0gTUFOQV9QRl9ERVZJQ0VfSUQgfHwgZGV2X2lkID09IE1BTkFfUEYyX0RFVklDRV9JRDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyOTAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNQU5BIERldmljZSBEcml2ZXIgSW50ZXJhY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgbWFuYV9nZF9zZXR1cGAgZnVuY3Rpb24sIHRyeWluZyB0byB1bmRlcnN0YW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoYXJkd2FyZS4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCBpdCByZWxpZXMgb24gYSBidW5jaCBvZiBsb3ctbGV2ZWwgY2FsbHM6IGBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbGAsIGBtYW5hX2dkX3ZlcmlmeV92Zl92ZXJzaW9uYCwgYG1hbmFfZ2RfZGV0ZWN0X2RldmljZXNgLCBhbmQgYG1hbmFfZ2RfcXVlcnlfbWF4X3Jlc291cmNlc2AuIFByZXR0eSBzdGFuZGFyZCBzdHVmZiBmb3IgaW5pdGlhbGl6aW5nIGEgZGV2aWNlLCBxdWVyeWluZyBjYXBhYmlsaXRpZXMsIHRoYXQga2luZCBvZiB0aGluZy4KCkJ1dCB0aGVuIGl0IGhpdHMgbWUuIFN5emthbGxlciwgaW4gaXRzIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sICpkb2VzbiYjMzk7dCogaGF2ZSBhIE1BTkEgZW11bGF0b3IsIHJpZ2h0PyBTbywgaWYgd2UmIzM5O3JlIHRyeWluZyB0byBmdXp6IHRoaXMgdmlhIFBDSSwgd2UmIzM5O3JlIGluIGEgYml0IG9mIGEgcGlja2xlLiBJdCBtZWFucyBzeXprYWxsZXIgd291bGQgbmVlZCB0byBwcm92aWRlICp2YWxpZCogcmVzcG9uc2VzIHRvICpldmVyeSBzaW5nbGUqIGhhcmR3YXJlIHF1ZXJ5IHRoYXQgYG1hbmFfZ2Rfc2V0dXBgIHRocm93cyBhdCBpdC4gQW5kIHRoZXNlIGFyZW4mIzM5O3Qgc2ltcGxlIHJlYWRzOyB3ZSYjMzk7cmUgbGlrZWx5IHRhbGtpbmcgYWJvdXQgY29tcGxleCBtZW1vcnktbWFwcGVkIEkvTywgb3IgbWF5YmUgZXZlbiBETUEgcmluZ3Mgd2l0aCBhbGwgdGhlaXIgYXNzb2NpYXRlZCBxdWlya3MuIFRoYXQmIzM5O3MgZ29pbmcgdG8gYmUgYSBzdWJzdGFudGlhbCB1bmRlcnRha2luZyB0byBnZXQgcmlnaHQuCgpJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBoYXJkd2FyZSBxdWVyaWVzIGFyZSBoYW5kbGVkLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbWFuYV9od2NfY3JlYXRlX2NoYW5uZWxgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQga2luZCBvZiBpbmZvcm1hdGlvbiBpcyBleGNoYW5nZWQsIHdoYXQgdGhlIGV4cGVjdGVkIHJlc3BvbnNlcyBsb29rIGxpa2UsIGFuZCBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgdnVsbmVyYWJpbGl0aWVzIGluIHRoYXQgaW50ZXJmYWNlLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGtleSB0byBmaWd1cmluZyBvdXQgdGhlIGJlc3QgZnV6emluZyBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFuYV9od2NfY3JlYXRlX2NoYW5uZWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9MzE4PXN0YXRpYyBpbnQgbWFuYV9nZF9kZXRlY3RfZGV2aWNlcyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0zNDktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzozNTA6XHRcdC8qIEhXQyBpcyBhbHJlYWR5IGRldGVjdGVkIGluIG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKCkuICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0zNTEtXHRcdGlmIChkZXZfdHlwZSA9PSBHRE1BX0RFVklDRV9IV0MpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9MjIwMj1zdGF0aWMgaW50IG1hbmFfZ2Rfc2V0dXAoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjIyOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jOjIyMjk6XHRlcnIgPSBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChnYyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yMjMwLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmM9NzEwPXN0YXRpYyBpbnQgbWFuYV9od2NfaW5pdF9xdWV1ZXMoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgcV9kZXB0aCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmMtNzQ5LW91dDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuYzo3NTA6XHQvKiBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbCgpIHdpbGwgZG8gdGhlIGNsZWFudXAuKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuYy03NTEtXHRyZXR1cm4gZXJyO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuYy03NTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmM6NzU0OmludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuYy03NTUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI4OAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IG1hbmFcX2h3Y1xfY3JlYXRlXF9jaGFubmVsKioKCkFscmlnaHQsICptYW5hXF9od2NcX2NyZWF0ZVxfY2hhbm5lbCouIFRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIGNhbGwgdGhhdCYjMzk7cyBncmFiYmluZyBteSBhdHRlbnRpb24uIFRoZSBuYW1pbmcgY29udmVudGlvbiBzdWdnZXN0cyBpdOKAmXMgcmVsYXRlZCB0byBoYXJkd2FyZSBjb21wb3NpdGlvbiwgb3IgcG9zc2libHkgdGhlIGNyZWF0aW9uIG9mIGEgY2hhbm5lbCBmb3IgaGFyZHdhcmUtYWNjZWxlcmF0ZWQgcmVuZGVyaW5nLCB3aGljaCBpcyBhIGtleSBwYXJ0IG9mIGhvdyB3ZSBoYW5kbGUgZGlzcGxheSBvdXRwdXQuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBpbml0aWFsaXppbmcgYSBuZXcgY29tcG9zaXRpb24gY2hhbm5lbCwgbWFuYWdpbmcgcmVzb3VyY2VzLCBvciBzZXR0aW5nIHVwIGEgcGlwZWxpbmUgZm9yIGdyYXBoaWNzIGRhdGEuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gV2hhdCBsaWJyYXJ5IG9yIGZyYW1ld29yayBkb2VzIHRoaXMgYmVsb25nIHRvPyBJcyBpdCBvcGVuLXNvdXJjZT8gV2hhdCBhcmUgdGhlIGlucHV0cz8gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoZSBkZXRhaWxzIG1hdHRlciDigJMgdGhlIGRhdGEgdHlwZXMgb2YgdGhlIHBhcmFtZXRlcnMsIHRoZWlyIGludGVuZGVkIG1lYW5pbmdzLiBUaGlzIGRldGVybWluZXMgaG93IGZsZXhpYmxlIG9yIHNwZWNpZmljIHRoaXMgZnVuY3Rpb24gaXMuIElzIHRoZXJlIGEgcmVsYXRlZCBzdHJ1Y3Qgb3IgY2xhc3MgdGhhdCB0aGlzIHVzZXM/IFVuZGVyc3RhbmRpbmcgdGhlIGlucHV0cyB3aWxsIHRlbGwgbWUgaG93IGdyYW51bGFyIHRoZSBjb250cm9sIGlzLiBBcmUgd2UgY3JlYXRpbmcgYSBjb21wbGV0ZWx5IG5ldyBjaGFubmVsIGZyb20gc2NyYXRjaCwgb3IgbW9kaWZ5aW5nIGFuIGV4aXN0aW5nIG9uZT8KCkkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVycm9yIGhhbmRsaW5nLiBIb3cgZG9lcyB0aGlzIGZ1bmN0aW9uIHNpZ25hbCBmYWlsdXJlPyBBcmUgdGhlcmUgcmV0dXJuIGNvZGVzIG9yIGV4Y2VwdGlvbnM/IEhvdyBkb2VzIGl0IGhhbmRsZSByZXNvdXJjZSBhbGxvY2F0aW9uLCBsaWtlIG1lbW9yeSBvciBmaWxlIGRlc2NyaXB0b3JzPyBBbmQgd2hhdCBraW5kIG9mIGNsZWFudXAgaXMgcGVyZm9ybWVkPyBXaGF0IGhhcHBlbnMgd2hlbiBhIGNoYW5uZWwgaXMgbm8gbG9uZ2VyIG5lZWRlZD8gQXJlIHRoZXJlIGNvcnJlc3BvbmRpbmcgZGVzdHJ1Y3Rpb24gb3IgcmVsZWFzZSBjYWxscz8gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGhlcmUuCgpFc3NlbnRpYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbiYjMzk7cyBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byBhbmFseXplIGl0cyBpbXBsZW1lbnRhdGlvbiB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBncmFwaGljcyBwaXBlbGluZSwgYW5kIHdoZXRoZXIgaXQgcGxheXMgbmljZWx5IHdpdGggb3RoZXIgcmVsZXZhbnQgcGFydHMgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NTQ6XHRpbnQgbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXG4gNzU1Olx0e1xuIDc1NjpcdFx0dTMyIG1heF9yZXFfbXNnX3NpemUsIG1heF9yZXNwX21zZ19zaXplO1xuIDc1NzpcdFx0c3RydWN0IGdkbWFfZGV2ICpnZCA9IFx1MDAyNmdjLVx1MDAzZWh3YztcbiA3NTg6XHRcdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YztcbiA3NTk6XHRcdHUxNiBxX2RlcHRoX21heDtcbiA3NjA6XHRcdGludCBlcnI7XG4gNzYxOlx0XG4gNzYyOlx0XHRod2MgPSBremFsbG9jX29iaigqaHdjKTtcbiA3NjM6XHRcdGlmICghaHdjKVxuIDc2NDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA3NjU6XHRcbiA3NjY6XHRcdGdkLVx1MDAzZWdkbWFfY29udGV4dCA9IGdjO1xuIDc2NzpcdFx0Z2QtXHUwMDNlZHJpdmVyX2RhdGEgPSBod2M7XG4gNzY4Olx0XHRod2MtXHUwMDNlZ2RtYV9kZXYgPSBnZDtcbiA3Njk6XHRcdGh3Yy1cdTAwM2VkZXYgPSBnYy1cdTAwM2VkZXY7XG4gNzcwOlx0XHRod2MtXHUwMDNlaHdjX3RpbWVvdXQgPSBIV19DSEFOTkVMX1dBSVRfUkVTT1VSQ0VfVElNRU9VVF9NUztcbiA3NzE6XHRcbiA3NzI6XHRcdC8qIEhXQyYjMzk7cyBpbnN0YW5jZSBudW1iZXIgaXMgYWx3YXlzIDAuICovXG4gNzczOlx0XHRnZC1cdTAwM2VkZXZfaWQuYXNfdWludDMyID0gMDtcbiA3NzQ6XHRcdGdkLVx1MDAzZWRldl9pZC50eXBlID0gR0RNQV9ERVZJQ0VfSFdDO1xuIDc3NTpcdFxuIDc3NjpcdFx0Z2QtXHUwMDNlcGRpZCA9IElOVkFMSURfUERJRDtcbiA3Nzc6XHRcdGdkLVx1MDAzZWRvb3JiZWxsID0gSU5WQUxJRF9ET09SQkVMTDtcbiA3Nzg6XHRcbiA3Nzk6XHRcdC8qIG1hbmFfaHdjX2luaXRfcXVldWVzKCkgb25seSBjcmVhdGVzIHRoZSByZXF1aXJlZCBkYXRhIHN0cnVjdHVyZXMsXG4gNzgwOlx0XHQgKiBhbmQgZG9lc24mIzM5O3QgdG91Y2ggdGhlIEhXQyBkZXZpY2UuXG4gNzgxOlx0XHQgKi9cbiA3ODI6XHRcdGVyciA9IG1hbmFfaHdjX2luaXRfcXVldWVzKGh3YywgSFdfQ0hBTk5FTF9WRl9CT09UU1RSQVBfUVVFVUVfREVQVEgsXG4gNzgzOlx0XHRcdFx0XHQgICBIV19DSEFOTkVMX01BWF9SRVFVRVNUX1NJWkUsXG4gNzg0Olx0XHRcdFx0XHQgICBIV19DSEFOTkVMX01BWF9SRVNQT05TRV9TSVpFKTtcbiA3ODU6XHRcdGlmIChlcnIpIHtcbiA3ODY6XHRcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBIV0M6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuIDc4NzpcdFx0XHRnb3RvIG91dDtcbiA3ODg6XHRcdH1cbiA3ODk6XHRcbiA3OTA6XHRcdGVyciA9IG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsKGdjLCBcdTAwMjZxX2RlcHRoX21heCwgXHUwMDI2bWF4X3JlcV9tc2dfc2l6ZSxcbiA3OTE6XHRcdFx0XHRcdFx0IFx1MDAyNm1heF9yZXNwX21zZ19zaXplKTtcbiA3OTI6XHRcdGlmIChlcnIpIHtcbiA3OTM6XHRcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gZXN0YWJsaXNoIEhXQzogJWRcXG5cJiMzNDssIGVycik7XG4gNzk0Olx0XHRcdGdvdG8gb3V0O1xuIDc5NTpcdFx0fVxuIDc5NjpcdFxuIDc5NzpcdFx0ZXJyID0gbWFuYV9od2NfdGVzdF9jaGFubmVsKGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YSxcbiA3OTg6XHRcdFx0XHRcdCAgICBIV19DSEFOTkVMX1ZGX0JPT1RTVFJBUF9RVUVVRV9ERVBUSCxcbiA3OTk6XHRcdFx0XHRcdCAgICBtYXhfcmVxX21zZ19zaXplLCBtYXhfcmVzcF9tc2dfc2l6ZSk7XG4gODAwOlx0XHRpZiAoZXJyKSB7XG4gODAxOlx0XHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHRlc3QgSFdDOiAlZFxcblwmIzM0OywgZXJyKTtcbiA4MDI6XHRcdFx0Z290byBvdXQ7XG4gODAzOlx0XHR9XG4gODA0Olx0XG4gODA1Olx0XHRyZXR1cm4gMDtcbiA4MDY6XHRvdXQ6XG4gODA3Olx0XHRtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoZ2MpO1xuIDgwODpcdFx0cmV0dXJuIGVycjtcbiA4MDk6XHR9XG4gODEwOlx0XG4gODExOlx0dm9pZCBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXG4gODEyOlx0e1xuIDgxMzpcdFx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjID0gZ2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xuIDgxNDpcdFxuIDgxNTpcdFx0aWYgKCFod2MpXG4gODE2Olx0XHRcdHJldHVybjtcbiA4MTc6XHRcbiA4MTg6XHRcdC8qIGdjLVx1MDAzZW1heF9udW1fY3FzIGlzIHNldCBpbiBtYW5hX2h3Y19pbml0X2V2ZW50X2hhbmRsZXIoKS4gSWYgaXQmIzM5O3NcbiA4MTk6XHRcdCAqIG5vbi16ZXJvLCB0aGUgSFdDIHdvcmtlZCBhbmQgd2Ugc2hvdWxkIHRlYXIgZG93biB0aGUgSFdDIGhlcmUuXG4gODIwOlx0XHQgKi9cbiA4MjE6XHRcdGlmIChnYy1cdTAwM2VtYXhfbnVtX2NxcyBcdTAwM2UgMCkge1xuIDgyMjpcdFx0XHRtYW5hX3NtY190ZWFyZG93bl9od2MoXHUwMDI2Z2MtXHUwMDNlc2htX2NoYW5uZWwsIGZhbHNlKTtcbiA4MjM6XHRcdFx0Z2MtXHUwMDNlbWF4X251bV9jcXMgPSAwO1xuIDgyNDpcdFx0fVxuIDgyNTpcdFxuIDgyNjpcdFx0aWYgKGh3Yy1cdTAwM2V0eHEpXG4gODI3Olx0XHRcdG1hbmFfaHdjX2Rlc3Ryb3lfd3EoaHdjLCBod2MtXHUwMDNldHhxKTtcbiA4Mjg6XHRcbiA4Mjk6XHRcdGlmIChod2MtXHUwMDNlcnhxKVxuIDgzMDpcdFx0XHRtYW5hX2h3Y19kZXN0cm95X3dxKGh3YywgaHdjLVx1MDAzZXJ4cSk7XG4gODMxOlx0XG4gODMyOlx0XHRpZiAoaHdjLVx1MDAzZWNxKVxuIDgzMzpcdFx0XHRtYW5hX2h3Y19kZXN0cm95X2NxKGh3Yy1cdTAwM2VnZG1hX2Rldi1cdTAwM2VnZG1hX2NvbnRleHQsIGh3Yy1cdTAwM2VjcSk7XG4gODM0Olx0XG4gODM1Olx0XHRrZnJlZShod2MtXHUwMDNlY2FsbGVyX2N0eCk7XG4gODM2Olx0XHRod2MtXHUwMDNlY2FsbGVyX2N0eCA9IE5VTEw7XG4gODM3Olx0XG4gODM4Olx0XHRtYW5hX2dkX2ZyZWVfcmVzX21hcChcdTAwMjZod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcyk7XG4gODM5Olx0XG4gODQwOlx0XHRod2MtXHUwMDNlbnVtX2luZmxpZ2h0X21zZyA9IDA7XG4gODQxOlx0XG4gODQyOlx0XHRod2MtXHUwMDNlZ2RtYV9kZXYtXHUwMDNlZG9vcmJlbGwgPSBJTlZBTElEX0RPT1JCRUxMO1xuIDg0MzpcdFx0aHdjLVx1MDAzZWdkbWFfZGV2LVx1MDAzZXBkaWQgPSBJTlZBTElEX1BESUQ7XG4gODQ0Olx0XG4gODQ1Olx0XHRod2MtXHUwMDNlaHdjX3RpbWVvdXQgPSAwO1xuIDg0NjpcdFxuIDg0NzpcdFx0a2ZyZWUoaHdjKTtcbiA4NDg6XHRcdGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YSA9IE5VTEw7XG4gODQ5Olx0XHRnYy1cdTAwM2Vod2MuZ2RtYV9jb250ZXh0ID0gTlVMTDtcbiA4NTA6XHRcbiA4NTE6XHRcdHZmcmVlKGdjLVx1MDAzZWNxX3RhYmxlKTtcbiA4NTI6XHRcdGdjLVx1MDAzZWNxX3RhYmxlID0gTlVMTDtcbiA4NTM6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Mjg3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBSZWFjaGFiaWxpdHkgZm9yIFBhdGNoIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtUaGlzIGlzIHZlcnkgc3BlY2lmaWMgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24uJiMzNDsgV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgY2hhbmdlcyB0byB0aGUgYG1hbmFfY3JlYXRlX3J4cWAgZnVuY3Rpb24gd2l0aGluIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIuICBTeXprYWxsZXImIzM5O3MgUENJIGZ1enplciBpcyB0aGUgdG9vbCBpbiBxdWVzdGlvbiwgYW5kIGl0IHdvcmtzIGJ5IGludGVyY2VwdGluZyBQQ0kgY29uZmlnIHNwYWNlIGFuZCBNTUlPIHJlYWRzL3dyaXRlcy4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gdGhpcyBmdXp6ZXIgZXZlbiBnZXQgKm5lYXIqIHRoaXMgY29kZT8KCk15IGZpcnN0IGluc3RpbmN0IGlzIHRoYXQsIHRoZW9yZXRpY2FsbHksIHRoZSBmdXp6ZXIgY291bGQgcG90ZW50aWFsbHkgcGFzcyB0aHJvdWdoIHRoZXNlIGNoZWNrcyBpZiBpdCByYW5kb21seSBndWVzc2VzIHRoZSBjb3JyZWN0IE1NSU8gdmFsdWVzLCBvciBpZiB3ZSBoYWQgY3JhZnRlZCBzcGVjaWZpYyBkZXNjcmlwdGlvbnMgZm9yIHRoZSBNQU5BIGRldmljZSB3aXRoaW4gU3l6a2FsbGVyLiBIb3dldmVyLCB3ZSBkb24mIzM5O3QgaGF2ZSBNQU5BIGRlc2NyaXB0aW9ucywgYW5kIHRoaXMgcGF0Y2ggaXMsIGF0IGl0cyBjb3JlLCBhIHNpbXBsZSBidWcgZml4IGluIGFuIGVycm9yIHBhdGguIFRoZSBwYXRjaCBjaGFuZ2VzIGBtYW5hX2NyZWF0ZV9yeHFgIHRvIHJldHVybiBhbiBlcnJvciBjb2RlIGluc3RlYWQgb2YgYE5VTExgIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIElmIHdlIGNvbnNpZGVyZWQgdGhpcyBjb2RlIHRvIGJlIHJlYWNoYWJsZSwgd2Ugc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLgoKQnV0IHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNyaXRpY2FsIHByb2JsZW0gY29tZXMgaW46IElzIHRoaXMgcmVhY2hhYmxlIGluICpvdXIqIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gIFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBpZiB0aGUgY29kZSBwYXRoIGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSwgdGhlbiB0aGUgYW5zd2VyIGlzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBBbmQgTUFOQSAqaXMqIGEgUENJIGRldmljZSwgYW5kLCBhcyBmYXIgYXMgSSYjMzk7bSBhd2FyZSwgaXQmIzM5O3Mgbm90IGVtdWxhdGVkIGluIFFFTVUgb3IgR0NFLgoKV2FpdCBhIHNlY29uZC4gIElzIE1BTkEgZW11bGF0ZWQgaW4gUUVNVT8gTm8sIGl0JiMzOTtzIGEgcHJvcHJpZXRhcnkgaGFyZHdhcmUgZGV2aWNlIHVzZWQgaW4gQXp1cmUuIFVubGVzcyBzeXprYWxsZXIgaXMgcnVubmluZyBvbiBBenVyZSBWTXMgd2l0aCBNQU5BIGhhcmR3YXJlIGF0dGFjaGVkLCB3aGljaCBzeXpib3QgZG9lc24mIzM5O3QgZG8gKGl0IHJ1bnMgb24gR0NFKSwgdGhpcyBjb2RlIGlzIGVzc2VudGlhbGx5IHVucmVhY2hhYmxlLiBBbmQgc3l6Ym90ICpkb2VzKiBydW4gb24gR0NFLCB3aGljaCBkb2VzIG5vdCBoYXZlIE1BTkEgaGFyZHdhcmUuCgpTbywgY2FuIHN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyIHJlYWNoIGl0PyAgVGhlIFBDSSBmdXp6ZXIgY2FuIGluc3RhbnRpYXRlIGEgUENJIGRldmljZSB3aXRoIGFueSB2ZW5kb3IvZGV2aWNlIElELCB3aGljaCB3aWxsIHRoZW4gdHJpZ2dlciBhIHByb2JlIGJ5IHRoZSBrZXJuZWwuIFRoZSBkcml2ZXIgd2lsbCBtYXAgTU1JTyBhbmQgcmVhZC93cml0ZSB0byBpdC4gVGhlIFBDSSBmdXp6ZXIgaW50ZXJjZXB0cyB0aGVzZSBNTUlPIGFjY2Vzc2VzIGFuZCByZXR1cm5zIGZ1enplZCBkYXRhLiBUaHVzIGBtYW5hX2dkX3Byb2JlYCB3aWxsIGJlIGNhbGxlZC4gVGhlbiB0aGUgZnV6emVyIHdpbGwgc3RhcnQgaW50ZXJjZXB0aW5nIE1NSU8uICBDYW4gaXQgZ2V0IHRocm91Z2ggYG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsYCBhbmQgYWxsIHRoZSBjb21wbGV4IGluaXRpYWxpemF0aW9uPyBVc3VhbGx5LCBubywgaXQgcmVxdWlyZXMgc3BlY2lmaWMgc2VxdWVuY2VzIG9mIHZhbHVlcy4gIFRob3VnaCBzeXprYWxsZXIgaGFzIHJlYWNoZWQgc29tZSBQQ0kgZHJpdmVycyYjMzk7IHByb2JlIGZ1bmN0aW9ucy4KClRoZSBiaWdnZXIgcHJvYmxlbSBpcyB0aGF0IGBtYW5hX2NyZWF0ZV9yeHFgIGlzIGNhbGxlZCBkdXJpbmcgYG1hbmFfb3BlbmAgb3IgYG1hbmFfYXR0YWNoYCwgd2hpY2ggaGFwcGVucyAqYWZ0ZXIqIHRoZSBkZXZpY2UgaXMgc3VjY2Vzc2Z1bGx5IHByb2JlZCBhbmQgcmVnaXN0ZXJlZCBhcyBhIG5ldGRldi4gR2V0dGluZyBhICpmdWxseSBmdW5jdGlvbmFsKiBuZXRkZXYgb3V0IG9mIGEgcmFuZG9tbHkgZnV6emVkIFBDSSBkZXZpY2UgaXMgcHJhY3RpY2FsbHkgaW1wb3NzaWJsZSB3aXRob3V0IGEgZGVkaWNhdGVkIGVtdWxhdG9yIG9yIHNwZWNpZmljIGRlc2NyaXB0aW9ucy4KClRoZXJlZm9yZSwgdGhlIGxpa2VsaWhvb2Qgb2YgdGhpcyBjb2RlIHBhdGggYmVpbmcgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VIGlzIG1pbnVzY3VsZS4gTGV0JiMzOTtzIGRvdWJsZS1jaGVjayBob3cgYG1hbmFfY3JlYXRlX3J4cWAgaXMgY2FsbGVkLiBJdCYjMzk7cyBvbmx5IGNhbGxlZCBmcm9tIGBtYW5hX2FkZF9yeF9xdWV1ZXNgLCB3aGljaCBpcyBpbiB0dXJuIGNhbGxlZCBmcm9tIGBtYW5hX2FsbG9jX3F1ZXVlc2AsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBtYW5hX29wZW5gIGFuZCBgbWFuYV9hdHRhY2hgLiBBbGwgb2YgdGhlc2UgcmVxdWlyZSB0aGUgbmV0ZGV2IHRvIGJlIHJlZ2lzdGVyZWQuIFRoZSBuZXRkZXYgaXMgcmVnaXN0ZXJlZCBpbiBgbWFuYV9wcm9iZV9wb3J0YCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYG1hbmFfcHJvYmVgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgbWFuYV9nZF9wcm9iZWAgKHRoZSBQQ0kgcHJvYmUgZnVuY3Rpb24pLgoKU28gaXQgc3RyaWN0bHkgZGVwZW5kcyBvbiB0aGUgUENJIHByb2JlIHN1Y2NlZWRpbmcuIFNpbmNlIHRoZXJlIGlzIG5vIE1BTkEgZW11bGF0b3IsIHRoZSBQQ0kgcHJvYmUgd2lsbCBmYWlsIHVubGVzcyB0aGUgZnV6emVyIHNvbWVob3cgZ3Vlc3NlcyBhbGwgdGhlIGNvcnJlY3QgTU1JTyByZXNwb25zZXMsIHdoaWNoIGlzIGFzdHJvbm9taWNhbGx5IHVubGlrZWx5LiBUaHVzLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gb3VyIGZ1enppbmcgZW52aXJvbm1lbnQuCgpXYWl0LCB3aGF0IGlmIHRoZSBwYXRjaCBpcyB0ZXN0ZWQgb24gQXp1cmU/ICBUaGUgcHJvbXB0IHNwZWNpZmllZCAmIzM0O0NvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7LiBTaW5jZSBzeXprYWxsZXIgcnVucyBvbiBHQ0UvUUVNVSwgYW5kIE1BTkEgaXMgbm90IGVtdWxhdGVkIHRoZXJlLCBpdCYjMzk7cyB1bnJlYWNoYWJsZS4KCkkmIzM5O20gcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKTGV0IG1lIGp1c3QgcmV2aWV3IHRoZSByZWFzb25pbmcuIFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyLiBNQU5BIGlzIGEgcGh5c2ljYWwvdmlydHVhbCBoYXJkd2FyZSBkZXZpY2Ugc3BlY2lmaWMgdG8gTWljcm9zb2Z0IEF6dXJlLiBTeXprYWxsZXIgcnVucyBpbiBHQ0Ugb3IgUUVNVSBlbnZpcm9ubWVudHMsIHdoaWNoIGRvIG5vdCBwcm92aWRlIE1BTkEgaGFyZHdhcmUuIFRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgTUFOQSBpbiB0aGUga2VybmVsIG9yIFFFTVUuIFdoaWxlIHN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyIGNhbiB0cmlnZ2VyIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24sIHN1Y2Nlc3NmdWxseSBwYXNzaW5nIHRoZSBjb21wbGV4IGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIChlLmcuLAoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hbmFfY3JlYXRlX3J4cSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM9Mjc4MD1zdGF0aWMgaW50IG1hbmFfY3JlYXRlX3BhZ2VfcG9vbChzdHJ1Y3QgbWFuYV9yeHEgKnJ4cSwgc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTI4MTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM6MjgxNDpzdGF0aWMgaW50IG1hbmFfY3JlYXRlX3J4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgdTMyIHJ4cV9pZHgsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMjgxNS1cdFx0XHQgICBzdHJ1Y3QgbWFuYV9lcSAqZXEsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0yOTM3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jOjI5Mzg6c3RhdGljIHZvaWQgbWFuYV9jcmVhdGVfcnhxX2RlYnVnZnMoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsIGludCBpZHgpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMjkzOS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jPTI5NjA9c3RhdGljIGludCBtYW5hX2FkZF9yeF9xdWV1ZXMoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTI5NjctXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhcGMtXHUwMDNlbnVtX3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzoyOTY4Olx0XHRlcnIgPSBtYW5hX2NyZWF0ZV9yeHEoYXBjLCBpLCBcdTAwMjZhcGMtXHUwMDNlZXFzW2ldLCBuZGV2LCBcdTAwMjZyeHEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTI5NjktXHRcdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMjk3Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzoyOTc4Olx0XHRtYW5hX2NyZWF0ZV9yeHFfZGVidWdmcyhhcGMsIGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTI5NzktXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTA2CgkJCQkJCQlvdXRwdXQ6IDE0MwoJCQkJCQkJdGhvdWdodHM6IDE0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDoKCioqVW5yZWFjaGFibGUgQ29kZSBBbmFseXNpcyoqCgpPa2F5LCBsZXQmIzM5O3MgdHJhY2UgdGhpcyBiYWNrLiBUaGUgY29kZSBwYXRoIEkmIzM5O20gZXhhbWluaW5nIGFwcGVhcnMgdG8gYmUgaW5jcmVkaWJseSBjb25zdHJhaW5lZC4gSXQgc2VlbXMgdGhlIGZ1bmN0aW9uIEkmIzM5O20gY29uY2VybmVkIGFib3V0LCBsaWtlbHkgcmVsYXRlZCB0byBSWCBxdWV1ZSBhbGxvY2F0aW9uLCBgbWFuYV9hZGRfcnhfcXVldWVzYCwgaXMgb25seSBjYWxsZWQgZnJvbSBgbWFuYV9hbGxvY19xdWV1ZXNgLiBUaGF0JiMzOTtzIGEgbGltaXRlZCBzdGFydGluZyBwb2ludC4KCkZ1cnRoZXIsIGBtYW5hX2FsbG9jX3F1ZXVlc2AgaXRzZWxmIGlzIG9ubHkgaW52b2tlZCBmcm9tIHR3byBmdW5jdGlvbnM6IGBtYW5hX29wZW5gIGFuZCBgbWFuYV9hdHRhY2hgLiBCb3RoIG9mIHRoZXNlIHJlcXVpcmUgYSBuZXR3b3JrIGRldmljZSwgdGhlIGBuZXRkZXZgLCB0byBiZSByZWdpc3RlcmVkLiBUaGlzIGlzIHRoZSBjcnVjaWFsIHBvaW50LiBUaGUgYG5ldGRldmAgcmVnaXN0cmF0aW9uIGhhcHBlbnMgaW5zaWRlIGBtYW5hX3Byb2JlX3BvcnRgLiBMb29raW5nIGhpZ2hlciBpbiB0aGUgY2FsbCBncmFwaCwgYG1hbmFfcHJvYmVfcG9ydGAgaXMgY2FsbGVkIGV4Y2x1c2l2ZWx5IGZyb20gYG1hbmFfcHJvYmVgLCBhbmQgYG1hbmFfcHJvYmVgIGlzLCBpbiB0dXJuLCBjYWxsZWQgYnkgYG1hbmFfZ2RfcHJvYmVgLiBUaGlzIHN1Z2dlc3RzIGEgUENJIHByb2JlLCBhcyB0aGUgY29kZSBpcyBsaWtlbHkgcmVsYXRlZCB0byBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIGRldGVjdGlvbi4KClRoZXJlZm9yZSwgdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uLCB0aGF0IGlzLCBgbWFuYV9hZGRfcnhfcXVldWVzYCwgaXMgdW5yZWFjaGFibGUgaW4gbm9ybWFsIG9wZXJhdGlvbiBiZWNhdXNlIGl0IGlzIG9ubHkgcmVhY2hhYmxlIGJ5IGNhbGwgY2hhaW5zIHRoYXQgYXJlIG9ubHkgc3RhcnRlZCBieSB0aGUgcHJvYmUuIFRoZSBjb2RlIHdpbGwgbmV2ZXIgYmUgZXhlY3V0ZWQuIFNvLCBpdCYjMzk7cyB1bnJlYWNoYWJsZSwgYXNzdW1pbmcgdGhlIHR5cGljYWwgUENJIGRldmljZSBwcm9iaW5nIGZsb3cuIFRoYXQgbWVhbnMgaXQgaXMgaGlnaGx5IGxpa2VseSB0aGF0IHRoZXJlIGlzIGEgYnVnIGhlcmUsIG9yIHRoYXQgdGhlIGNvZGUgaXMgaW50ZW5kZWQgZm9yIGFuIGVkZ2UgY2FzZSB3aGljaCBoYXMgbmV2ZXIsIG9yIHdpbGwgbmV2ZXIsIG9jY3VyLgoKTm93LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIuIE1BTkEgaXMgYSBoYXJkd2FyZSBkZXZpY2Ugc3BlY2lmaWMgdG8gTWljcm9zb2Z0IEF6dXJlIGFuZCBpcyBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSB3aGVyZSBmdXp6aW5nIG9jY3Vycy4gV2hpbGUgdGhlIFBDSSBmdXp6ZXIgY2FuIHRyaWdnZXIgdGhlIGRyaXZlciYjMzk7cyBwcm9iZSBmdW5jdGlvbiwgc3VjY2Vzc2Z1bGx5IHBhc3NpbmcgdGhlIGNvbXBsZXggaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgdG8gcmVnaXN0ZXIgdGhlIG5ldHdvcmsgZGV2aWNlIGFuZCByZWFjaCBgbWFuYV9jcmVhdGVfcnhxYCAodmlhIGBtYW5hX29wZW5gKSBpcyBwcmFjdGljYWxseSBpbXBvc3NpYmxlIHdpdGhvdXQgYSBkZWRpY2F0ZWQgZW11bGF0b3IuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgaW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyLiBNQU5BIGlzIGEgaGFyZHdhcmUgZGV2aWNlIHNwZWNpZmljIHRvIE1pY3Jvc29mdCBBenVyZSBhbmQgaXMgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUgd2hlcmUgZnV6emluZyBvY2N1cnMuIFdoaWxlIHRoZSBQQ0kgZnV6emVyIGNhbiB0cmlnZ2VyIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24sIHN1Y2Nlc3NmdWxseSBwYXNzaW5nIHRoZSBjb21wbGV4IGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIHRvIHJlZ2lzdGVyIHRoZSBuZXR3b3JrIGRldmljZSBhbmQgcmVhY2ggYG1hbmFfY3JlYXRlX3J4cWAgKHZpYSBgbWFuYV9vcGVuYCkgaXMgcHJhY3RpY2FsbHkgaW1wb3NzaWJsZSB3aXRob3V0IGEgZGVkaWNhdGVkIGVtdWxhdG9yLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBwYXRoIGlzIHVucmVhY2hhYmxlIGluIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAzOjI0OjM4LjIyMDAzOTQ5MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5Njc5NjYwMDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyLiBNQU5BIGlzIGEgaGFyZHdhcmUgZGV2aWNlIHNwZWNpZmljIHRvIE1pY3Jvc29mdCBBenVyZSBhbmQgaXMgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUgd2hlcmUgZnV6emluZyBvY2N1cnMuIFdoaWxlIHRoZSBQQ0kgZnV6emVyIGNhbiB0cmlnZ2VyIHRoZSBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbiwgc3VjY2Vzc2Z1bGx5IHBhc3NpbmcgdGhlIGNvbXBsZXggaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgdG8gcmVnaXN0ZXIgdGhlIG5ldHdvcmsgZGV2aWNlIGFuZCByZWFjaCBgbWFuYV9jcmVhdGVfcnhxYCAodmlhIGBtYW5hX29wZW5gKSBpcyBwcmFjdGljYWxseSBpbXBvc3NpYmxlIHdpdGhvdXQgYSBkZWRpY2F0ZWQgZW11bGF0b3IuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgaW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMzoyNDozOC4yMjAwNDQ4MTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMzIwNzMxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ3ZDkxMzgyY2EyNDRmZjBhMGY2ZTAzODc5OTcyZDQ5NTFkNmIwM2JcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMTggMDM6MjQ6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXFxuaW5kZXggOWQ5YmZkMTE2ZGFiYzIuLjkxNjJlMzU2ZTBjMWQ3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY1xcbkBAIC0yODExLDkgKzI4MTEsOSBAQCBzdGF0aWMgaW50IG1hbmFfY3JlYXRlX3BhZ2VfcG9vbChzdHJ1Y3QgbWFuYV9yeHEgKnJ4cSwgc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgc3RydWN0IG1hbmFfcnhxICptYW5hX2NyZWF0ZV9yeHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXFxuLVxcdFxcdFxcdFxcdFxcdHUzMiByeHFfaWR4LCBzdHJ1Y3QgbWFuYV9lcSAqZXEsXFxuLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbitzdGF0aWMgaW50IG1hbmFfY3JlYXRlX3J4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgdTMyIHJ4cV9pZHgsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBtYW5hX2VxICplcSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBtYW5hX3J4cSAqKnJ4cV9vdXQpXFxuIHtcXG4gXFx0c3RydWN0IGdkbWFfZGV2ICpnZCA9IGFwYy1cXHUwMDNlYWMtXFx1MDAzZWdkbWFfZGV2O1xcbiBcXHRzdHJ1Y3QgbWFuYV9vYmpfc3BlYyB3cV9zcGVjO1xcbkBAIC0yODI5LDcgKzI4MjksNyBAQCBzdGF0aWMgc3RydWN0IG1hbmFfcnhxICptYW5hX2NyZWF0ZV9yeHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXFxuIFxcbiBcXHRyeHEgPSBrdnphbGxvY19mbGV4KCpyeHEsIHJ4X29vYnMsIGFwYy1cXHUwMDNlcnhfcXVldWVfc2l6ZSk7XFxuIFxcdGlmICghcnhxKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbiBcXHRyeHEtXFx1MDAzZW5kZXYgPSBuZGV2O1xcbiBcXHRyeHEtXFx1MDAzZW51bV9yeF9idWYgPSBhcGMtXFx1MDAzZXJ4X3F1ZXVlX3NpemU7XFxuQEAgLTI5MjMsMTQgKzI5MjMsMTYgQEAgc3RhdGljIHN0cnVjdCBtYW5hX3J4cSAqbWFuYV9jcmVhdGVfcnhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxcbiBcXG4gXFx0bWFuYV9nZF9yaW5nX2NxKGNxLVxcdTAwM2VnZG1hX2NxLCBTRVRfQVJNX0JJVCk7XFxuIG91dDpcXG4tXFx0aWYgKCFlcnIpXFxuLVxcdFxcdHJldHVybiByeHE7XFxuK1xcdGlmICghZXJyKSB7XFxuK1xcdFxcdCpyeHFfb3V0ID0gcnhxO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbiBcXG4gXFx0bmV0ZGV2X2VycihuZGV2LCBcXFwiRmFpbGVkIHRvIGNyZWF0ZSBSWFE6IGVyciA9ICVkXFxcXG5cXFwiLCBlcnIpO1xcbiBcXG4gXFx0bWFuYV9kZXN0cm95X3J4cShhcGMsIHJ4cSwgZmFsc2UpO1xcbiBcXG4tXFx0cmV0dXJuIE5VTEw7XFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIG1hbmFfY3JlYXRlX3J4cV9kZWJ1Z2ZzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLCBpbnQgaWR4KVxcbkBAIC0yOTYzLDkgKzI5NjUsOCBAQCBzdGF0aWMgaW50IG1hbmFfYWRkX3J4X3F1ZXVlcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcXG4gXFx0aW50IGk7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYXBjLVxcdTAwM2VudW1fcXVldWVzOyBpKyspIHtcXG4tXFx0XFx0cnhxID0gbWFuYV9jcmVhdGVfcnhxKGFwYywgaSwgXFx1MDAyNmFwYy1cXHUwMDNlZXFzW2ldLCBuZGV2KTtcXG4tXFx0XFx0aWYgKCFyeHEpIHtcXG4tXFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4rXFx0XFx0ZXJyID0gbWFuYV9jcmVhdGVfcnhxKGFwYywgaSwgXFx1MDAyNmFwYy1cXHUwMDNlZXFzW2ldLCBuZGV2LCBcXHUwMDI2cnhxKTtcXG4rXFx0XFx0aWYgKGVycikge1xcbiBcXHRcXHRcXHRuZXRkZXZfZXJyKG5kZXYsIFxcXCJGYWlsZWQgdG8gY3JlYXRlIHJ4cSAlZCA6ICVkXFxcXG5cXFwiLCBpLCBlcnIpO1xcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMzoyNDozOC42MzQwMDYxMjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MjY1Njg3OTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyLiBNQU5BIGlzIGEgaGFyZHdhcmUgZGV2aWNlIHNwZWNpZmljIHRvIE1pY3Jvc29mdCBBenVyZSBhbmQgaXMgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUgd2hlcmUgZnV6emluZyBvY2N1cnMuIFdoaWxlIHRoZSBQQ0kgZnV6emVyIGNhbiB0cmlnZ2VyIHRoZSBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbiwgc3VjY2Vzc2Z1bGx5IHBhc3NpbmcgdGhlIGNvbXBsZXggaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgdG8gcmVnaXN0ZXIgdGhlIG5ldHdvcmsgZGV2aWNlIGFuZCByZWFjaCBgbWFuYV9jcmVhdGVfcnhxYCAodmlhIGBtYW5hX29wZW5gKSBpcyBwcmFjdGljYWxseSBpbXBvc3NpYmxlIHdpdGhvdXQgYSBkZWRpY2F0ZWQgZW11bGF0b3IuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgaW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ3ZDkxMzgyY2EyNDRmZjBhMGY2ZTAzODc5OTcyZDQ5NTFkNmIwM2JcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxOCAwMzoyNDozNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY1xuaW5kZXggOWQ5YmZkMTE2ZGFiYzIuLjkxNjJlMzU2ZTBjMWQ3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcbkBAIC0yODExLDkgKzI4MTEsOSBAQCBzdGF0aWMgaW50IG1hbmFfY3JlYXRlX3BhZ2VfcG9vbChzdHJ1Y3QgbWFuYV9yeHEgKnJ4cSwgc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBtYW5hX3J4cSAqbWFuYV9jcmVhdGVfcnhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuLVx0XHRcdFx0XHR1MzIgcnhxX2lkeCwgc3RydWN0IG1hbmFfZXEgKmVxLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbitzdGF0aWMgaW50IG1hbmFfY3JlYXRlX3J4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgdTMyIHJ4cV9pZHgsXG4rXHRcdFx0ICAgc3RydWN0IG1hbmFfZXEgKmVxLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbitcdFx0XHQgICBzdHJ1Y3QgbWFuYV9yeHEgKipyeHFfb3V0KVxuIHtcbiBcdHN0cnVjdCBnZG1hX2RldiAqZ2QgPSBhcGMtXHUwMDNlYWMtXHUwMDNlZ2RtYV9kZXY7XG4gXHRzdHJ1Y3QgbWFuYV9vYmpfc3BlYyB3cV9zcGVjO1xuQEAgLTI4MjksNyArMjgyOSw3IEBAIHN0YXRpYyBzdHJ1Y3QgbWFuYV9yeHEgKm1hbmFfY3JlYXRlX3J4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcbiBcbiBcdHJ4cSA9IGt2emFsbG9jX2ZsZXgoKnJ4cSwgcnhfb29icywgYXBjLVx1MDAzZXJ4X3F1ZXVlX3NpemUpO1xuIFx0aWYgKCFyeHEpXG4tXHRcdHJldHVybiBOVUxMO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdHJ4cS1cdTAwM2VuZGV2ID0gbmRldjtcbiBcdHJ4cS1cdTAwM2VudW1fcnhfYnVmID0gYXBjLVx1MDAzZXJ4X3F1ZXVlX3NpemU7XG5AQCAtMjkyMywxNCArMjkyMywxNiBAQCBzdGF0aWMgc3RydWN0IG1hbmFfcnhxICptYW5hX2NyZWF0ZV9yeHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXG4gXG4gXHRtYW5hX2dkX3JpbmdfY3EoY3EtXHUwMDNlZ2RtYV9jcSwgU0VUX0FSTV9CSVQpO1xuIG91dDpcbi1cdGlmICghZXJyKVxuLVx0XHRyZXR1cm4gcnhxO1xuK1x0aWYgKCFlcnIpIHtcbitcdFx0KnJ4cV9vdXQgPSByeHE7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuIFxuIFx0bmV0ZGV2X2VycihuZGV2LCBcIkZhaWxlZCB0byBjcmVhdGUgUlhROiBlcnIgPSAlZFxcblwiLCBlcnIpO1xuIFxuIFx0bWFuYV9kZXN0cm95X3J4cShhcGMsIHJ4cSwgZmFsc2UpO1xuIFxuLVx0cmV0dXJuIE5VTEw7XG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBtYW5hX2NyZWF0ZV9yeHFfZGVidWdmcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgaW50IGlkeClcbkBAIC0yOTYzLDkgKzI5NjUsOCBAQCBzdGF0aWMgaW50IG1hbmFfYWRkX3J4X3F1ZXVlcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYXBjLVx1MDAzZW51bV9xdWV1ZXM7IGkrKykge1xuLVx0XHRyeHEgPSBtYW5hX2NyZWF0ZV9yeHEoYXBjLCBpLCBcdTAwMjZhcGMtXHUwMDNlZXFzW2ldLCBuZGV2KTtcbi1cdFx0aWYgKCFyeHEpIHtcbi1cdFx0XHRlcnIgPSAtRU5PTUVNO1xuK1x0XHRlcnIgPSBtYW5hX2NyZWF0ZV9yeHEoYXBjLCBpLCBcdTAwMjZhcGMtXHUwMDNlZXFzW2ldLCBuZGV2LCBcdTAwMjZyeHEpO1xuK1x0XHRpZiAoZXJyKSB7XG4gXHRcdFx0bmV0ZGV2X2VycihuZGV2LCBcIkZhaWxlZCB0byBjcmVhdGUgcnhxICVkIDogJWRcXG5cIiwgaSwgZXJyKTtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDM6MjQ6MzguNjM0MDA3NDQyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk4ODkxMDU1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCB0byBhIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNgLiBJdCdzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZTogdGhleSd2ZSBhbHRlcmVkIHRoZSBzaWduYXR1cmUgb2YgYG1hbmFfY3JlYXRlX3J4cWAuIEl0IHVzZWQgdG8gcmV0dXJuIGEgcG9pbnRlciwgYnV0IG5vdyBpdCByZXR1cm5zIGFuIGBpbnRgIGVycm9yIGNvZGUsIHBhc3NpbmcgdGhlIHBvaW50ZXIgdmlhIGFuIG91dCBwYXJhbWV0ZXIuIFRoaXMgc2VlbXMgdG8gYmUgYSBzdHJhaWdodGZvcndhcmQgYnVnIGZpeCwgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBtaXNpbnRlcnByZXRhdGlvbiBvZiBlcnJvcnMuIFByZXZpb3VzbHksIGBtYW5hX2NyZWF0ZV9yeHFgIHdvdWxkIGFsd2F5cyByZXR1cm4gYE5VTExgIG9uIGFueSBlcnJvciwgYnV0IHRoZSBjYWxsaW5nIGZ1bmN0aW9uLCBgbWFuYV9hZGRfcnhfcXVldWVzYCwgd291bGQgYWx3YXlzIGFzc3VtZSBgLUVOT01FTWAsIHJlZ2FyZGxlc3Mgb2YgdGhlIHVuZGVybHlpbmcgaXNzdWUuIE5vdyB3ZSBoYXZlIHRoZSBhY3R1YWwgZXJyb3IgY29kZXMgYmVpbmcgcmV0dXJuZWQuXG5cbkhtbSwgdGhpcyB3YXJyYW50cyBhIGZ1enppbmcgY29uc2lkZXJhdGlvbiwgb2J2aW91c2x5LiBJdOKAmXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIG5ldHdvcmsgZHJpdmVyIGZvciB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciwgc28gdGhpcyBpcyBpbnRlcmVzdGluZyB0ZXJyaXRvcnkuIFRoZSBxdWVzdGlvbiBpcywgY2FuIHdlIGFjdHVhbGx5ICpyZWFjaCogdGhpcyBpbiBhIGZ1enphYmxlIGVudmlyb25tZW50PyBTaW5jZSBpdCdzIGEgUENJIGRldmljZSBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgQXp1cmUsIGl0J3MgdHlwaWNhbGx5IHRvdWdoLiBUaGVzZSBraW5kcyBvZiBoYXJkd2FyZSBkcml2ZXJzIGFyZSByYXJlbHkgZWFzaWx5IGZ1enphYmxlIHVubGVzcyB0aGV54oCZcmUgZW11bGF0ZWQgaW4gUUVNVSBvciBzeXprYWxsZXIgaGFzIGEgZ29vZCB3YXkgdG8gc2ltdWxhdGUgdGhlIFBDSSBoYXJkd2FyZS4gQW5kIHN5emthbGxlcidzIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcyBhcmUga25vd24gdG8gYmUgbGltaXRlZC4gSXMgTUFOQSBldmVuIGVtdWxhdGVkPyBQcm9iYWJseSBub3QsIHJpZ2h0P1xuXG5BbHJpZ2h0LCBsZXQncyB0cmFjZSB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY2FsbCBjaGFpbi4gYG1hbmFfY3JlYXRlX3J4cWAgaXMgY2FsbGVkIGJ5IGBtYW5hX2FkZF9yeF9xdWV1ZXNgLCB3aGljaCwgaW4gdHVybiwgaXMgcHJvYmFibHkgY2FsbGVkIGJ5IGBtYW5hX2F0dGFjaGAgb3IgYSBzaW1pbGFyIGZ1bmN0aW9uLiBMZXQncyBkbyBhIHF1aWNrIHNlYXJjaCBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jYCB0byBjb25maXJtIHRoZSBjYWxsIGNoYWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDkwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDM6MjQ6NDUuNjIyOTIwMTU2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyOTU5MTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hbmFfY3JlYXRlX3J4cVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jPTI3ODA9c3RhdGljIGludCBtYW5hX2NyZWF0ZV9wYWdlX3Bvb2woc3RydWN0IG1hbmFfcnhxICpyeHEsIHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTI4MTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jOjI4MTQ6c3RhdGljIGludCBtYW5hX2NyZWF0ZV9yeHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsIHUzMiByeHFfaWR4LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0yODE1LVxcdFxcdFxcdCAgIHN0cnVjdCBtYW5hX2VxICplcSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMjkzNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM6MjkzODpzdGF0aWMgdm9pZCBtYW5hX2NyZWF0ZV9yeHFfZGVidWdmcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgaW50IGlkeClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMjkzOS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM9Mjk2MD1zdGF0aWMgaW50IG1hbmFfYWRkX3J4X3F1ZXVlcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0yOTY3LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBhcGMtXFx1MDAzZW51bV9xdWV1ZXM7IGkrKykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzoyOTY4OlxcdFxcdGVyciA9IG1hbmFfY3JlYXRlX3J4cShhcGMsIGksIFxcdTAwMjZhcGMtXFx1MDAzZWVxc1tpXSwgbmRldiwgXFx1MDAyNnJ4cSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTI5NjktXFx0XFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTI5NzctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jOjI5Nzg6XFx0XFx0bWFuYV9jcmVhdGVfcnhxX2RlYnVnZnMoYXBjLCBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMjk3OS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAzOjI0OjQ1LjY4NTg4NjE0NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzQ5NTQxMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBGdXp6YWJpbGl0eSBvZiB0aGUgQXp1cmUgTmV0d29yayBBZGFwdGVyIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZHJpdmVyLCB0aGUgb25lIGZvciB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlci4gTXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcywgXCJobW1tLCB3b3J0aCBmdXp6aW5nP1wiIEkgdXN1YWxseSBzZWUgaGFyZHdhcmUgZHJpdmVycyB0aGF0IGRlcGVuZCBvbiBzcGVjaWZpYyBoYXJkd2FyZSwgZXNwZWNpYWxseSB0aG9zZSB0aGF0IGFyZW4ndCBlbXVsYXRlZCBpbiB0aGUgdXN1YWwgc3VzcGVjdHMgbGlrZSBRRU1VIG9yIHZoY2ksIGFuZCBJIGtub3cgc3l6a2FsbGVyIGRvZXNuJ3QgdHlwaWNhbGx5IHJlYWNoIHRob3NlLiBTbywgbXkgcHJpbWFyeSBxdWVzdGlvbiBiZWNvbWVzOiBpcyB0aGVyZSBhbnkga2luZCBvZiBlbXVsYXRpb24gaW4gcGxhY2UgZm9yIHRoZSBNQU5BIGFkYXB0ZXI/IElmIHRoZXJlJ3Mgbm8gZW11bGF0aW9uLCB0aGUgY2hhbmNlcyBvZiBlZmZlY3RpdmUgZnV6emluZyBkcm9wIHNpZ25pZmljYW50bHkuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGFuZCBzZWUgaWYgdGhlcmUncyBhbnkgYXZhaWxhYmxlIHNpbXVsYXRpb24sIG9yIGlmIHRoaXMgaXMgYSBub24tc3RhcnRlciByaWdodCBvdXQgb2YgdGhlIGdhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MzAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMzoyNDo0OC45MjA4NDIyNjdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzNzg0Nzk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNSUNST1NPRlRfTUFOQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvS2NvbmZpZz0yPWNvbmZpZyBNQU5BX0lORklOSUJBTkRcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9LY29uZmlnOjQ6XFx0ZGVwZW5kcyBvbiBORVRERVZJQ0VTIFxcdTAwMjZcXHUwMDI2IEVUSEVSTkVUIFxcdTAwMjZcXHUwMDI2IFBDSSBcXHUwMDI2XFx1MDAyNiBNSUNST1NPRlRfTUFOQVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL0tjb25maWctNS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZz0xNj1pZiBORVRfVkVORE9SX01JQ1JPU09GVFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnLTE3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnOjE4OmNvbmZpZyBNSUNST1NPRlRfTUFOQVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnLTE5LVxcdHRyaXN0YXRlIFxcXCJNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L01ha2VmaWxlLTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX01JQ1JPU09GVF9NQU5BKSArPSBtYW5hL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvTWFrZWZpbGUtNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19NSUNST1NPRlRfTUFOQSkgKz0gbWFuYS5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvTWFrZWZpbGUtNi1tYW5hLW9ianMgOj0gZ2RtYV9tYWluLm8gc2htX2NoYW5uZWwubyBod19jaGFubmVsLm8gbWFuYV9lbi5vIG1hbmFfZXRodG9vbC5vIG1hbmFfYnBmLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDM6MjQ6NTAuODU4Njk0Njk3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI1NzMxMjU3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIFN5emthbGxlcidzIE1BTkEgRnV6emluZyBDYXBhYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgZnV6emluZyB0aGUgTUFOQSBkZXZpY2Ugd2l0aCBzeXprYWxsZXIuIEZpcnN0IHRoaW5ncyBmaXJzdCwgaXMgTUFOQSBhIFBDSSBkZXZpY2U/IFllcywgaXQgaXMuIE5vdywgY2FuIHN5emthbGxlciBoYW5kbGUgdGhhdD8gV2VsbCwgaXQgKmRvZXMqIGhhdmUgc29tZSBQQ0kgZnV6emluZyBjYXBhYmlsaXRpZXMsIGJ1dCBmcm9tIG15IGV4cGVyaWVuY2UsIGl0J3MgcHJldHR5IGxpbWl0ZWQgYW5kIGdlbmVyYWxseSByZXF1aXJlcyB2ZXJ5IHNwZWNpZmljIGRlc2NyaXB0aW9ucyB0byBiZSBlZmZlY3RpdmUuIFRoaXMgaXMga2V5LiBIb2xkIG9uIGEgc2Vjb25kLi4uIGRvZXMgc3l6a2FsbGVyIGV2ZW4gKmhhdmUqIGEgTUFOQSBlbXVsYXRvcj8gTm8sIGl0IGRvZXNuJ3QuIFRoYXQgbWFrZXMgdGhpbmdzIG1vcmUgY29tcGxpY2F0ZWQuXG5cblNvLCBzeXprYWxsZXIgKmNhbiogdGVjaG5pY2FsbHkgZnV6eiBQQ0kgZGV2aWNlcyB1c2luZyB2UENJLCBidXQgb25seSBpZiB0aGUgZGV2aWNlJ3MgYmVoYXZpb3IgaXMgZXhwbGljaXRseSBkZXNjcmliZWQgaW4gdGhvc2UgZGVzY3JpcHRpb25zLiBXaXRob3V0IHRob3NlIGRlc2NyaXB0aW9ucywgaXQncyBwcmV0dHkgbXVjaCBqdXN0IHJhbmRvbSBmdXp6aW5nIG9mIHRoZSBQQ0kgY29uZmlnIHNwYWNlLiBBbmQgZnJvbSB3aGF0IEkndmUgc2VlbiwgdGhhdCBhbG1vc3QgbmV2ZXIgZ2V0cyBtZSBkZWVwIGVub3VnaCBpbnRvIHRoZSBkcml2ZXIgbG9naWMsIG5vdCBuZWFybHkgZW5vdWdoIHRvIGhpdCBzb21ldGhpbmcgaW1wb3J0YW50IGxpa2UgYG1hbmFfY3JlYXRlX3J4cWAuXG5cbkJ1dCB3YWl04oCmIEknbSByZW1lbWJlcmluZyB0aGF0IGBtYW5hX2NyZWF0ZV9yeHFgIGdldHMgY2FsbGVkIGR1cmluZyB0aGUgZGV2aWNlJ3MgaW5pdGlhbGl6YXRpb24uIEFoYSEgSWYgdGhlIFBDSSBwcm9iZSBzdWNjZWVkcywgdGhhdCAqY291bGQqIG1lYW4gaXQncyBjYWxsZWQuIFRoaXMgaXMgYSBwb3NzaWJpbGl0eS4gTm93LCBsZXQgbWUgY2hlY2sgaWYgYG1hbmFfcHJvYmVgIGRvZXMsIGluIGZhY3QsIGNhbGwgYG1hbmFfY3JlYXRlX3J4cWAuIFRoYXQncyB0aGUgY3JpdGljYWwgbGluayBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQzOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMzoyNDo1NS4xMTYwMDg5ODhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY5NjQ4NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFuYV9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9MTc3PXN0YXRpYyBpbnQgbWFuYV9nZF9xdWVyeV9tYXhfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjYxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jOjI2MjpcXHQvKiBDYXAgdG8gdGhlIHNhbWUgbGltaXQgdXNlZCBieSBtYW5hX3Byb2JlKCkgZm9yIHBvcnQgaW5zdGFudGlhdGlvbixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNjMtXFx0ICogc28gTVNJLVggYW5kIHF1ZXVlIGJ1ZGdldGluZyBtYXRjaGVzIHRoZSBhY3R1YWwgcG9ydCBjb3VudC5cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jPTIzMDI9c3RhdGljIGludCBtYW5hX2dkX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjM1Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzoyMzU4OlxcdGVyciA9IG1hbmFfcHJvYmUoXFx1MDAyNmdjLVxcdTAwM2VtYW5hLCBmYWxzZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjM1OS1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjM5Ni1cXHQgKiBIYXJkd2FyZSBjb3VsZCBiZSBpbiByZWNvdmVyeSBtb2RlIGFuZCB0aGUgSFdDIHJldHVybnMgVElNRURPVVQgb3JcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzoyMzk3OlxcdCAqIEVQUk9UTyBmcm9tIG1hbmFfZ2Rfc2V0dXAoKSwgbWFuYV9wcm9iZSgpIG9yIG1hbmFfcmRtYV9wcm9iZSgpLCBvclxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTIzOTgtXFx0ICogd2UgcmVjZWl2ZWQgYSBoYXJkd2FyZSByZXNldCBldmVudCBvdmVyIEhXQyBpbnRlcnJ1cHQuIEluIHRoaXMgY2FzZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jPTI0NjA9aW50IG1hbmFfZ2RfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjQ2OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzoyNDY5OlxcdGVyciA9IG1hbmFfcHJvYmUoXFx1MDAyNmdjLVxcdTAwM2VtYW5hLCB0cnVlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yNDcwLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM9MzUyMz1pbnQgbWFuYV9kZXRhY2goc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGJvb2wgZnJvbV9jbG9zZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0zNTU5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzozNTYwOnN0YXRpYyBpbnQgbWFuYV9wcm9iZV9wb3J0KHN0cnVjdCBtYW5hX2NvbnRleHQgKmFjLCBpbnQgcG9ydF9pZHgsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTM1NjEtXFx0XFx0XFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKipuZGV2X3N0b3JhZ2UpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM9Mzc5MD1zdGF0aWMgdm9pZCBtYW5hX2dmX3N0YXRzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMzgxMi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM6MzgxMzppbnQgbWFuYV9wcm9iZShzdHJ1Y3QgZ2RtYV9kZXYgKmdkLCBib29sIHJlc3VtaW5nKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0zODE0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0zODg3LVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBhYy1cXHUwMDNlbnVtX3BvcnRzOyBpKyspIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM6Mzg4ODpcXHRcXHRcXHRlcnIgPSBtYW5hX3Byb2JlX3BvcnQoYWMsIGksIFxcdTAwMjZhYy1cXHUwMDNlcG9ydHNbaV0pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0zODg5LVxcdFxcdFxcdC8qIExvZyB0aGUgcG9ydCBmb3Igd2hpY2ggdGhlIHByb2JlIGZhaWxlZCwgc3RvcCBwcm9iaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAzOjI0OjU1LjE3Mjk3ODIxNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTIzODQyMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGZyYW1lZCBhcyBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBtYW5hYCBOZXR3b3JrIFN0YWNrIEZsb3cqKlxuXG5BbHJpZ2h0LCBJJ20gdHJhY2luZyB0aHJvdWdoIHRoZSBgbWFuYV9wcm9iZWAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgYG1hbmFfcHJvYmVgIGlzIG1ha2luZyBhIGNhbGwgdG8gYG1hbmFfcHJvYmVfcG9ydGAuIE5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gSSdtIHRyeWluZyB0byBhbnN3ZXIgaXMgd2hhdCBoYXBwZW5zICphZnRlciogdGhhdC4gRG9lcyBgbWFuYV9wcm9iZV9wb3J0YCBjb250aW51ZSBieSBjYWxsaW5nIGBtYW5hX2F0dGFjaGAsIHdoaWNoIEkgc3VzcGVjdCB3b3VsZCBiZSB0aGUgcGF0aCBmb3IgZXN0YWJsaXNoaW5nIHRoZSBwb3J0IHdpdGhpbiB0aGUgYG1hbmFgIHN1YnN5c3RlbSwgb3IgaXMgaXQgZ29pbmcgZG93biB0aGUgcXVldWUgc2V0dXAgcm91dGUgd2l0aCBgbWFuYV9hZGRfcnhfcXVldWVzYD8gVGhlIGRpc3RpbmN0aW9uIGhlcmUgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHBvcnQgaW5pdGlhbGl6YXRpb24gcGF0aC4gQXJlIHdlIGluaXRpYWxseSBhdHRhY2hpbmcgdGhlIHBvcnQncyByZXNvdXJjZXMsIG9yIGlzIHRoZSBxdWV1ZSBzZXR1cCBiZWluZyBoYW5kbGVkIGZpcnN0PyBEZXBlbmRpbmcgb24gaG93IHRoZSBzeXN0ZW0gaXMgZGVzaWduZWQsIHRoaXMgbWF5IGJlIGFuIGltcG9ydGFudCBkYXRhIHBhdGggdG8gYW5hbHl6ZSB0byBmaW5kIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgY2FsbCBjaGFpbiBmcm9tIHRoaXMgcG9pbnQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgcG9ydCBpbml0aWFsaXphdGlvbiBmbG93IGluIHRoaXMgYG1hbmFgIGZyYW1ld29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg4OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAzOjI0OjU4LjQ4NTM2NDMyN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTczOTQ1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFuYV9hZGRfcnhfcXVldWVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM9MjkzOD1zdGF0aWMgdm9pZCBtYW5hX2NyZWF0ZV9yeHFfZGVidWdmcyhzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywgaW50IGlkeClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0yOTU5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzoyOTYwOnN0YXRpYyBpbnQgbWFuYV9hZGRfcnhfcXVldWVzKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0yOTYxLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jPTMzMzI9aW50IG1hbmFfYWxsb2NfcXVldWVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTMzNjYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jOjMzNjc6XFx0ZXJyID0gbWFuYV9hZGRfcnhfcXVldWVzKGFwYywgbmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTMzNjgtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDM6MjQ6NTguNTQyNzY0MDg2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4OTc3ODA5MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgYG1hbmFgIGFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSBgbWFuYV9hbGxvY19xdWV1ZXNgIGlzIGNhbGxpbmcgYG1hbmFfYWRkX3J4X3F1ZXVlc2AuIFRoYXQncyBzdGFuZGFyZCBwcmFjdGljZSwgdGhlIGFsbG9jYXRpb24gZnVuY3Rpb24gdXN1YWxseSBpbml0aWFsaXplcyBzb21lIHRoaW5ncyBiZWZvcmUgYWRkaW5nIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGJldHRlci5cblxuQnV0IGhvbGQgb24uLi4gYmVmb3JlIEkgZGl2ZSBpbnRvIHRoZSBpbnRlcm5hbHMgb2YgYG1hbmFfYWRkX3J4X3F1ZXVlc2AsIG15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyAqd2hvKiBpcyBjYWxsaW5nIGBtYW5hX2FsbG9jX3F1ZXVlc2A/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyAqY3JpdGljYWwqIGZvciBncmFzcGluZyB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBmdW5jdGlvbiBjYWxsIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIHdob2xlIGFsbG9jYXRpb24gcHJvY2VzcyBiZWdpbnMuIFdoYXQgc3Vic3lzdGVtIGlzIHRyaWdnZXJpbmcgdGhpcyBhbGxvY2F0aW9uPyBJcyBpdCBvbiBkZXZpY2UgaW5pdCwgb24gbmV0d29yayBldmVudCwgZXRjLiBDb250ZXh0IGlzIGtleSB0byB1bmRlcnN0YW5kIHdoYXQgaXMgaGFwcGVuaW5nIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0OTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMzoyNTowMS40NDA1NDcxNzZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NzkwNzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hbmFfYWxsb2NfcXVldWVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM9NzM9c3RhdGljIGludCBtYW5hX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtNzYtXFx0aW50IGVycjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM6Nzc6XFx0ZXJyID0gbWFuYV9hbGxvY19xdWV1ZXMobmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTc4LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jPTMyNzA9c3RhdGljIGludCBtYW5hX2luaXRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0zMzMxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzozMzMyOmludCBtYW5hX2FsbG9jX3F1ZXVlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMzMzMy17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM9MzQxMD1pbnQgbWFuYV9hdHRhY2goc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMzQyMS1cXHRpZiAoYXBjLVxcdTAwM2Vwb3J0X3N0X3NhdmUpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM6MzQyMjpcXHRcXHRlcnIgPSBtYW5hX2FsbG9jX3F1ZXVlcyhuZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMzQyMy1cXHRcXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAzOjI1OjAxLjQ5ODM0MzYwNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTEyNjI5NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE1BTkEgYW5kIFN5emthbGxlciBDb21wYXRpYmlsaXR5KipcblxuT2theSwgc28gaGVyZSdzIHRoZSBicmVha2Rvd24gb2Ygd2hhdCBJJ20gdGhpbmtpbmcgcmVnYXJkaW5nIE1BTkEgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBTeXprYWxsZXIuIEVzc2VudGlhbGx5LCBgbWFuYV9vcGVuYCBpcyB0aGUga2V5IGVudHJ5IHBvaW50OyBpdCB0cmlnZ2VycyBgbWFuYV9hbGxvY19xdWV1ZXNgLCB3aGljaCBldmVudHVhbGx5IGxlYWRzIHRvIHRoZSBjcmVhdGlvbiBvZiByZWNlaXZlIHF1ZXVlcyB0aHJvdWdoIGBtYW5hX2FkZF9yeF9xdWV1ZXNgIGFuZCBgbWFuYV9jcmVhdGVfcnhxYC4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgU3l6a2FsbGVyLCBpbiBpdHMgY3VycmVudCBzZXR1cCwgYWN0dWFsbHkgcmVnaXN0ZXJzIHRoaXMgZGV2aWNlLlxuXG5Db25zaWRlcmluZyBob3cgU3l6a2FsbGVyIG9wZXJhdGVzIOKAkyBpbiBRRU1VIG9yIEdDRSBwcmltYXJpbHkg4oCTIEkgaW1tZWRpYXRlbHkgaGl0IGEgcm9hZGJsb2NrLiBHQ0UgcmVsaWVzIG9uIHZpcnRpby1uZXQgb3IgZ3ZlLCBhbmQgd2hpbGUgQXp1cmUgdXNlcyBNQU5BLCB0aGUgZW52aXJvbm1lbnRzIFN5emthbGxlciB0eXBpY2FsbHkgcnVucyBpbiBkb24ndCBuYXRpdmVseSBpbmNsdWRlIHRoaXMgaGFyZHdhcmUuIFRoZSBpbXBsaWNhdGlvbiBpcywgc3RyYWlnaHQgb3V0IG9mIHRoZSBib3gsIFN5emthbGxlciBjYW4ndCBcInNlZVwiIE1BTkEuXG5cblRoZSBuYXR1cmFsIGZvbGxvdy11cCBpcywgZG9lcyBTeXprYWxsZXIgKmVtdWxhdGUqIE1BTkE/IFdlIGtub3cgaXQgaGFzIG1lY2hhbmlzbXMgZm9yIFVTQiAodmhjaSkgYW5kIFdpLUZpIChtYWM4MDIxMV9od3NpbSksIHNvIHRoZXJlJ3MgcHJlY2VkZW50LiBCdXQgYSBxdWljayBjaGVjayByZXZlYWxzIG5vIGV4cGxpY2l0IGVtdWxhdGlvbiBmb3IgTUFOQS4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGlzc3VlLlxuXG5Ib3dldmVyLCB0aGVyZSdzIGEgZ2xpbW1lciBvZiBob3BlOiBTeXprYWxsZXIgKmRvZXMqIGhhdmUgYSBQQ0kgZnV6emVyLCB3aGljaCBpcyBkZXNpZ25lZCB0byBpbmplY3QgUENJIGRldmljZXMuIENvdWxkIHRoaXMgYmUgdGhlIHNvbHV0aW9uPyBNYXliZS4gQnV0IGV2ZW4gaWYgaXQgKmNhbiogaW5qZWN0IGEgUENJIGRldmljZSByZXByZXNlbnRpbmcgTUFOQSwgdGhhdCdzIG9ubHkgdGhlIGZpcnN0IHN0ZXAuIEZvciBgbWFuYV9wcm9iZWAgdG8gc3VjY2VlZCwgdGhlIGVtdWxhdGVkIGRldmljZSB3b3VsZCBuZWVkIHRvIHJlc3BvbmQgdG8gc3BlY2lmaWMgTU1JTyByZWFkcyBhbmQgd3JpdGVzIGluIGEgd2F5IHRoYXQgc2F0aXNmaWVzIHRoZSBkcml2ZXIuXG5cblNvIHRoZSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBkaXZlIGludG8gdGhlIGNvZGUgZm9yIGBtYW5hX3Byb2JlYCBhbmQgYG1hbmFfZ2RfcHJvYmVgIHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IHdoYXQgY29uZGl0aW9ucyBuZWVkIHRvIGJlIG1ldCwgd2hhdCByZWdpc3RlcnMgbmVlZCB0byBiZSByZWFkLCBhbmQgd2hhdCB2YWx1ZXMgYXJlIGV4cGVjdGVkIGluIHRoZSB3cml0ZXMuIFRoaXMgd2lsbCByZXZlYWwgdGhlIGZlYXNpYmlsaXR5IG9mIHVzaW5nIHRoZSBQQ0kgZnV6emVyIHRvIHRyaWNrIHRoZSBkcml2ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNDMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDM6MjU6MDcuNDEwOTc0ODkxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzA4NDg4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYW5hX2dkX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYz0yMjk3PXN0YXRpYyBib29sIG1hbmFfaXNfcGYodW5zaWduZWQgc2hvcnQgZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjMwMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzoyMzAyOnN0YXRpYyBpbnQgbWFuYV9nZF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0yMzAzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jPTI1MDY9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG1hbmFfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjUwOC1cXHQuaWRfdGFibGVcXHQ9IG1hbmFfaWRfdGFibGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6MjUwOTpcXHQucHJvYmVcXHRcXHQ9IG1hbmFfZ2RfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjUxMC1cXHQucmVtb3ZlXFx0XFx0PSBtYW5hX2dkX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDM6MjU6MDcuNDc0MDY3NjU5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1NTY4NDY0ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIGBtYW5hX2dkX3Byb2JlYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIGl0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8ganVzdCBqdW1wIHJpZ2h0IGluIGFuZCBzZWUgd2hhdCBgbWFuYV9nZF9wcm9iZWAgaXMgYWN0dWFsbHkgZG9pbmcuIE5vIG5lZWQgZm9yIGV4Y2Vzc2l2ZSB0aGVvcml6aW5nIGF0IHRoaXMgcG9pbnQuIEdvdHRhIHNlZSB0aGUgY29kZSwgcG9rZSBhcm91bmQsIHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uLiBXaGF0IGV4YWN0bHkgaXMgdGhpcyBwcm9iZSBkZXNpZ25lZCB0byBhY2hpZXZlPyBXaGF0IGRhdGEgaXMgaXQgaW50ZXJhY3Rpbmcgd2l0aD8gTGV0J3MgZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb3JlIHB1cnBvc2UgYmVmb3JlIGdldHRpbmcgaW50byBkZWVwZXIgYW5hbHlzaXMuIExldCdzIHNlZSBob3cgaXQgb3BlcmF0ZXMgYW5kIGdvIGZyb20gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNTQsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMzoyNToxMC4wMzA5MTU5NzZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzMDIsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMzAyOlxcdHN0YXRpYyBpbnQgbWFuYV9nZF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4yMzAzOlxcdHtcXG4yMzA0OlxcdFxcdHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjO1xcbjIzMDU6XFx0XFx0dm9pZCBfX2lvbWVtICpiYXIwX3ZhO1xcbjIzMDY6XFx0XFx0aW50IGJhciA9IDA7XFxuMjMwNzpcXHRcXHRpbnQgZXJyO1xcbjIzMDg6XFx0XFxuMjMwOTpcXHRcXHQvKiBFYWNoIHBvcnQgaGFzIDIgQ1FzLCBlYWNoIENRIGhhcyBhdCBtb3N0IDEgRVFFIGF0IGEgdGltZSAqL1xcbjIzMTA6XFx0XFx0QlVJTERfQlVHX09OKDIgKiBNQVhfUE9SVFNfSU5fTUFOQV9ERVYgKiBHRE1BX0VRRV9TSVpFIFxcdTAwM2UgRVFfU0laRSk7XFxuMjMxMTpcXHRcXG4yMzEyOlxcdFxcdGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpO1xcbjIzMTM6XFx0XFx0aWYgKGVycikge1xcbjIzMTQ6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIGVuYWJsZSBwY2kgZGV2aWNlIChlcnI9JWQpXFxcXG5cXFwiLCBlcnIpO1xcbjIzMTU6XFx0XFx0XFx0cmV0dXJuIC1FTlhJTztcXG4yMzE2OlxcdFxcdH1cXG4yMzE3OlxcdFxcbjIzMTg6XFx0XFx0cGNpX3NldF9tYXN0ZXIocGRldik7XFxuMjMxOTpcXHRcXG4yMzIwOlxcdFxcdGVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgXFxcIm1hbmFcXFwiKTtcXG4yMzIxOlxcdFxcdGlmIChlcnIpXFxuMjMyMjpcXHRcXHRcXHRnb3RvIGRpc2FibGVfZGV2O1xcbjIzMjM6XFx0XFxuMjMyNDpcXHRcXHRlcnIgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIERNQV9CSVRfTUFTSyg2NCkpO1xcbjIzMjU6XFx0XFx0aWYgKGVycikge1xcbjIzMjY6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiRE1BIHNldCBtYXNrIGZhaWxlZDogJWRcXFxcblxcXCIsIGVycik7XFxuMjMyNzpcXHRcXHRcXHRnb3RvIHJlbGVhc2VfcmVnaW9uO1xcbjIzMjg6XFx0XFx0fVxcbjIzMjk6XFx0XFx0ZG1hX3NldF9tYXhfc2VnX3NpemUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgVUlOVF9NQVgpO1xcbjIzMzA6XFx0XFxuMjMzMTpcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbjIzMzI6XFx0XFx0Z2MgPSB2emFsbG9jKHNpemVvZigqZ2MpKTtcXG4yMzMzOlxcdFxcdGlmICghZ2MpXFxuMjMzNDpcXHRcXHRcXHRnb3RvIHJlbGVhc2VfcmVnaW9uO1xcbjIzMzU6XFx0XFxuMjMzNjpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZnYy1cXHUwMDNlZXFfdGVzdF9ldmVudF9tdXRleCk7XFxuMjMzNzpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZnYy1cXHUwMDNlZ2ljX211dGV4KTtcXG4yMzM4OlxcdFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBnYyk7XFxuMjMzOTpcXHRcXHRnYy1cXHUwMDNlYmFyMF9wYSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTtcXG4yMzQwOlxcdFxcdGdjLVxcdTAwM2ViYXIwX3NpemUgPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApO1xcbjIzNDE6XFx0XFxuMjM0MjpcXHRcXHRiYXIwX3ZhID0gcGNpX2lvbWFwKHBkZXYsIGJhciwgMCk7XFxuMjM0MzpcXHRcXHRpZiAoIWJhcjBfdmEpXFxuMjM0NDpcXHRcXHRcXHRnb3RvIGZyZWVfZ2M7XFxuMjM0NTpcXHRcXG4yMzQ2OlxcdFxcdGdjLVxcdTAwM2VudW1hX25vZGUgPSBkZXZfdG9fbm9kZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4yMzQ3OlxcdFxcdGdjLVxcdTAwM2Vpc19wZiA9IG1hbmFfaXNfcGYocGRldi1cXHUwMDNlZGV2aWNlKTtcXG4yMzQ4OlxcdFxcdGdjLVxcdTAwM2Vpc19wZjIgPSAocGRldi1cXHUwMDNlZGV2aWNlID09IE1BTkFfUEYyX0RFVklDRV9JRCk7XFxuMjM0OTpcXHRcXG4yMzUwOlxcdFxcdGdjLVxcdTAwM2ViYXIwX3ZhID0gYmFyMF92YTtcXG4yMzUxOlxcdFxcdGdjLVxcdTAwM2VkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbjIzNTI6XFx0XFx0eGFfaW5pdChcXHUwMDI2Z2MtXFx1MDAzZWlycV9jb250ZXh0cyk7XFxuMjM1MzpcXHRcXG4yMzU0OlxcdFxcdGVyciA9IG1hbmFfZ2Rfc2V0dXAocGRldik7XFxuMjM1NTpcXHRcXHRpZiAoZXJyKVxcbjIzNTY6XFx0XFx0XFx0Z290byB1bm1hcF9iYXI7XFxuMjM1NzpcXHRcXG4yMzU4OlxcdFxcdGVyciA9IG1hbmFfcHJvYmUoXFx1MDAyNmdjLVxcdTAwM2VtYW5hLCBmYWxzZSk7XFxuMjM1OTpcXHRcXHRpZiAoZXJyKVxcbjIzNjA6XFx0XFx0XFx0Z290byBjbGVhbnVwX2dkO1xcbjIzNjE6XFx0XFxuMjM2MjpcXHRcXHRlcnIgPSBtYW5hX3JkbWFfcHJvYmUoXFx1MDAyNmdjLVxcdTAwM2VtYW5hX2liKTtcXG4yMzYzOlxcdFxcdGlmIChlcnIpXFxuMjM2NDpcXHRcXHRcXHRnb3RvIGNsZWFudXBfbWFuYTtcXG4yMzY1OlxcdFxcbjIzNjY6XFx0XFx0LypcXG4yMzY3OlxcdFxcdCAqIElmIGEgaGFyZHdhcmUgcmVzZXQgZXZlbnQgaGFzIG9jY3VycmVkIG92ZXIgSFdDIGR1cmluZyBwcm9iZSxcXG4yMzY4OlxcdFxcdCAqIHJvbGxiYWNrIGFuZCBwZXJmb3JtIGhhcmR3YXJlIHJlc2V0IHByb2NlZHVyZS5cXG4yMzY5OlxcdFxcdCAqL1xcbjIzNzA6XFx0XFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoR0NfUFJPQkVfU1VDQ0VFREVELCBcXHUwMDI2Z2MtXFx1MDAzZWZsYWdzKSkge1xcbjIzNzE6XFx0XFx0XFx0ZXJyID0gLUVQUk9UTztcXG4yMzcyOlxcdFxcdFxcdGdvdG8gY2xlYW51cF9tYW5hX3JkbWE7XFxuMjM3MzpcXHRcXHR9XFxuMjM3NDpcXHRcXG4yMzc1OlxcdFxcdHJldHVybiAwO1xcbjIzNzY6XFx0XFxuMjM3NzpcXHRjbGVhbnVwX21hbmFfcmRtYTpcXG4yMzc4OlxcdFxcdG1hbmFfcmRtYV9yZW1vdmUoXFx1MDAyNmdjLVxcdTAwM2VtYW5hX2liKTtcXG4yMzc5OlxcdGNsZWFudXBfbWFuYTpcXG4yMzgwOlxcdFxcdG1hbmFfcmVtb3ZlKFxcdTAwMjZnYy1cXHUwMDNlbWFuYSwgZmFsc2UpO1xcbjIzODE6XFx0Y2xlYW51cF9nZDpcXG4yMzgyOlxcdFxcdG1hbmFfZ2RfY2xlYW51cF9kZXZpY2UocGRldik7XFxuMjM4MzpcXHR1bm1hcF9iYXI6XFxuMjM4NDpcXHRcXHR4YV9kZXN0cm95KFxcdTAwMjZnYy1cXHUwMDNlaXJxX2NvbnRleHRzKTtcXG4yMzg1OlxcdFxcdHBjaV9pb3VubWFwKHBkZXYsIGJhcjBfdmEpO1xcbjIzODY6XFx0ZnJlZV9nYzpcXG4yMzg3OlxcdFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTtcXG4yMzg4OlxcdFxcdHZmcmVlKGdjKTtcXG4yMzg5OlxcdHJlbGVhc2VfcmVnaW9uOlxcbjIzOTA6XFx0XFx0cGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTtcXG4yMzkxOlxcdGRpc2FibGVfZGV2OlxcbjIzOTI6XFx0XFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbjIzOTM6XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiZ2RtYSBwcm9iZSBmYWlsZWQ6IGVyciA9ICVkXFxcXG5cXFwiLCBlcnIpO1xcbjIzOTQ6XFx0XFxuMjM5NTpcXHRcXHQvKlxcbjIzOTY6XFx0XFx0ICogSGFyZHdhcmUgY291bGQgYmUgaW4gcmVjb3ZlcnkgbW9kZSBhbmQgdGhlIEhXQyByZXR1cm5zIFRJTUVET1VUIG9yXFxuMjM5NzpcXHRcXHQgKiBFUFJPVE8gZnJvbSBtYW5hX2dkX3NldHVwKCksIG1hbmFfcHJvYmUoKSBvciBtYW5hX3JkbWFfcHJvYmUoKSwgb3JcXG4yMzk4OlxcdFxcdCAqIHdlIHJlY2VpdmVkIGEgaGFyZHdhcmUgcmVzZXQgZXZlbnQgb3ZlciBIV0MgaW50ZXJydXB0LiBJbiB0aGlzIGNhc2UsXFxuMjM5OTpcXHRcXHQgKiBwZXJmb3JtIHRoZSBkZXZpY2UgcmVjb3ZlcnkgcHJvY2VkdXJlIGFmdGVyIE1BTkFfU0VSVklDRV9QRVJJT0RcXG4yNDAwOlxcdFxcdCAqIHNlY29uZHMuXFxuMjQwMTpcXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDM6MjU6MTAuMDMxMDYxMjE2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MTgyOTQ2MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgTWFuYSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIGBtYW5hX2dkX3NldHVwYCBnZXRzIGNhbGxlZCAqYmVmb3JlKiBgbWFuYV9wcm9iZWAuIFRoYXQncyB0aGUga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHByZXBhcmF0b3J5IHN0ZXBzIGFyZSBiZWluZyB0YWtlbiBiZWZvcmUgdGhlIGFjdHVhbCBwcm9iaW5nIHByb2Nlc3MgYmVnaW5zLiBJdCdzIGFsbW9zdCBjZXJ0YWluIHRoaXMgc2V0dXAgZnVuY3Rpb24gaXMgbGF5aW5nIHRoZSBncm91bmR3b3JrIGZvciB0aGUgcHJvYmUuIEkgbmVlZCB0byBkaXZlIGludG8gYG1hbmFfZ2Rfc2V0dXBgIGFuZCBxdWlja2x5IGlkZW50aWZ5IGl0cyBwdXJwb3NlLiBJcyBpdCBhbGxvY2F0aW5nIHJlc291cmNlcz8gSW5pdGlhbGl6aW5nIGRhdGEgc3RydWN0dXJlcz8gQ29uZmlndXJpbmcgaGFyZHdhcmU/IERldGVybWluaW5nIHRoZSBjb250ZXh0J3MgcmVhZGluZXNzIGZvciBwcm9iaW5nPyBNeSBhc3N1bXB0aW9uIGlzIHRoYXQgaXQncyBkb2luZyBvbmUgb3IgYSBjb21iaW5hdGlvbiBvZiB0aGVzZSB0aGluZ3MgdG8gZmFjaWxpdGF0ZSBhIHN1Y2Nlc3NmdWwgcHJvYmUuIEdvdHRhIHBpbnBvaW50IHRoZSBzcGVjaWZpYyBhY3Rpb25zIHRha2VuLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTIzLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMzoyNToxMi44NDkzNTc3MjdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTAwOlxcdFxcdGNwdXNfcmVhZF91bmxvY2soKTtcXG4yMTAxOlxcdFxcdGtmcmVlKHN0YXJ0X2lycXMpO1xcbjIxMDI6XFx0XFx0cmV0dXJuIDA7XFxuMjEwMzpcXHRcXG4yMTA0OlxcdGZyZWVfaXJxOlxcbjIxMDU6XFx0XFx0Zm9yIChpIC09IDE7IGkgXFx1MDAzZT0gMDsgaS0tKVxcbjIxMDY6XFx0XFx0XFx0bWFuYV9nZF9wdXRfZ2ljKGdjLCBmYWxzZSwgaSk7XFxuMjEwNzpcXHRcXG4yMTA4OlxcdFxcdGtmcmVlKHN0YXJ0X2lycXMpO1xcbjIxMDk6XFx0XFx0cmV0dXJuIGVycjtcXG4yMTEwOlxcdH1cXG4yMTExOlxcdFxcbjIxMTI6XFx0c3RhdGljIGludCBtYW5hX2dkX3NldHVwX2h3Y19pcnFzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbjIxMTM6XFx0e1xcbjIxMTQ6XFx0XFx0c3RydWN0IGdkbWFfY29udGV4dCAqZ2MgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuMjExNTpcXHRcXHR1bnNpZ25lZCBpbnQgbWF4X2lycXMsIG1pbl9pcnFzO1xcbjIxMTY6XFx0XFx0aW50IG52ZWMsIGVycjtcXG4yMTE3OlxcdFxcbjIxMTg6XFx0XFx0aWYgKHBjaV9tc2l4X2Nhbl9hbGxvY19keW4ocGRldikpIHtcXG4yMTE5OlxcdFxcdFxcdG1heF9pcnFzID0gMTtcXG4yMTIwOlxcdFxcdFxcdG1pbl9pcnFzID0gMTtcXG4yMTIxOlxcdFxcdH0gZWxzZSB7XFxuMjEyMjpcXHRcXHRcXHQvKiBOZWVkIDEgaW50ZXJydXB0IGZvciBIV0MgKi9cXG4yMTIzOlxcdFxcdFxcdG1heF9pcnFzID0gbWluKG51bV9vbmxpbmVfY3B1cygpLCBNQU5BX01BWF9OVU1fUVVFVUVTKSArIDE7XFxuMjEyNDpcXHRcXHRcXHRtaW5faXJxcyA9IDI7XFxuMjEyNTpcXHRcXHRcXHRnYy1cXHUwMDNlbXNpX3NoYXJpbmcgPSB0cnVlO1xcbjIxMjY6XFx0XFx0fVxcbjIxMjc6XFx0XFxuMjEyODpcXHRcXHRudmVjID0gcGNpX2FsbG9jX2lycV92ZWN0b3JzKHBkZXYsIG1pbl9pcnFzLCBtYXhfaXJxcywgUENJX0lSUV9NU0lYKTtcXG4yMTI5OlxcdFxcdGlmIChudmVjIFxcdTAwM2MgMClcXG4yMTMwOlxcdFxcdFxcdHJldHVybiBudmVjO1xcbjIxMzE6XFx0XFxuMjEzMjpcXHRcXHRlcnIgPSBtYW5hX2dkX3NldHVwX2lycXMocGRldiwgbnZlYyk7XFxuMjEzMzpcXHRcXHRpZiAoZXJyKSB7XFxuMjEzNDpcXHRcXHRcXHRwY2lfZnJlZV9pcnFfdmVjdG9ycyhwZGV2KTtcXG4yMTM1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMjEzNjpcXHRcXHR9XFxuMjEzNzpcXHRcXG4yMTM4OlxcdFxcdGdjLVxcdTAwM2VudW1fbXNpeF91c2FibGUgPSBudmVjO1xcbjIxMzk6XFx0XFx0Z2MtXFx1MDAzZW1heF9udW1fbXNpeCA9IG52ZWM7XFxuMjE0MDpcXHRcXG4yMTQxOlxcdFxcdHJldHVybiAwO1xcbjIxNDI6XFx0fVxcbjIxNDM6XFx0XFxuMjE0NDpcXHRzdGF0aWMgaW50IG1hbmFfZ2Rfc2V0dXBfcmVtYWluaW5nX2lycXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuMjE0NTpcXHR7XFxuMjE0NjpcXHRcXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4yMTQ3OlxcdFxcdHN0cnVjdCBtc2lfbWFwIGlycV9tYXA7XFxuMjE0ODpcXHRcXHRpbnQgbWF4X2lycXMsIGksIGVycjtcXG4yMTQ5OlxcdFxcbjIxNTA6XFx0XFx0aWYgKCFwY2lfbXNpeF9jYW5fYWxsb2NfZHluKHBkZXYpKVxcbjIxNTE6XFx0XFx0XFx0LyogcmVtYWluIGlycXMgYXJlIGFscmVhZHkgYWxsb2NhdGVkIHdpdGggSFdDIElSUSAqL1xcbjIxNTI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjE1MzpcXHRcXG4yMTU0OlxcdFxcdC8qIGFsbG9jYXRlIG9ubHkgcmVtYWluaW5nIElSUXMqL1xcbjIxNTU6XFx0XFx0bWF4X2lycXMgPSBnYy1cXHUwMDNlbnVtX21zaXhfdXNhYmxlIC0gMTtcXG4yMTU2OlxcdFxcbjIxNTc6XFx0XFx0Zm9yIChpID0gMTsgaSBcXHUwMDNjPSBtYXhfaXJxczsgaSsrKSB7XFxuMjE1ODpcXHRcXHRcXHRpcnFfbWFwID0gcGNpX21zaXhfYWxsb2NfaXJxX2F0KHBkZXYsIGksIE5VTEwpO1xcbjIxNTk6XFx0XFx0XFx0aWYgKCFpcnFfbWFwLnZpcnEpIHtcXG4yMTYwOlxcdFxcdFxcdFxcdGVyciA9IGlycV9tYXAuaW5kZXg7XFxuMjE2MTpcXHRcXHRcXHRcXHQvKiBjYWxsZXIgd2lsbCBoYW5kbGUgY2xlYW5pbmcgdXAgYWxsIGFsbG9jYXRlZFxcbjIxNjI6XFx0XFx0XFx0XFx0ICogaXJxcywgYWZ0ZXIgSFdDIGlzIGRlc3Ryb3llZFxcbjIxNjM6XFx0XFx0XFx0XFx0ICovXFxuMjE2NDpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjIxNjU6XFx0XFx0XFx0fVxcbjIxNjY6XFx0XFx0fVxcbjIxNjc6XFx0XFxuMjE2ODpcXHRcXHRlcnIgPSBtYW5hX2dkX3NldHVwX2R5bl9pcnFzKHBkZXYsIG1heF9pcnFzKTtcXG4yMTY5OlxcdFxcdGlmIChlcnIpXFxuMjE3MDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjIxNzE6XFx0XFxuMjE3MjpcXHRcXHRnYy1cXHUwMDNlbWF4X251bV9tc2l4ID0gZ2MtXFx1MDAzZW1heF9udW1fbXNpeCArIG1heF9pcnFzO1xcbjIxNzM6XFx0XFxuMjE3NDpcXHRcXHRyZXR1cm4gMDtcXG4yMTc1OlxcdH1cXG4yMTc2OlxcdFxcbjIxNzc6XFx0c3RhdGljIHZvaWQgbWFuYV9nZF9yZW1vdmVfaXJxcyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4yMTc4OlxcdHtcXG4yMTc5OlxcdFxcdHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xcbjIxODA6XFx0XFx0aW50IGk7XFxuMjE4MTpcXHRcXG4yMTgyOlxcdFxcdGlmIChnYy1cXHUwMDNlbWF4X251bV9tc2l4IFxcdTAwM2MgMSlcXG4yMTgzOlxcdFxcdFxcdHJldHVybjtcXG4yMTg0OlxcdFxcbjIxODU6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGdjLVxcdTAwM2VtYXhfbnVtX21zaXg7IGkrKykge1xcbjIxODY6XFx0XFx0XFx0aWYgKCF4YV9sb2FkKFxcdTAwMjZnYy1cXHUwMDNlaXJxX2NvbnRleHRzLCBpKSlcXG4yMTg3OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjIxODg6XFx0XFxuMjE4OTpcXHRcXHRcXHRtYW5hX2dkX3B1dF9naWMoZ2MsIGZhbHNlLCBpKTtcXG4yMTkwOlxcdFxcdH1cXG4yMTkxOlxcdFxcbjIxOTI6XFx0XFx0V0FSTl9PTigheGFfZW1wdHkoXFx1MDAyNmdjLVxcdTAwM2VpcnFfY29udGV4dHMpKTtcXG4yMTkzOlxcdFxcbjIxOTQ6XFx0XFx0cGNpX2ZyZWVfaXJxX3ZlY3RvcnMocGRldik7XFxuMjE5NTpcXHRcXG4yMTk2OlxcdFxcdGJpdG1hcF9mcmVlKGdjLVxcdTAwM2Vtc2lfYml0bWFwKTtcXG4yMTk3OlxcdFxcdGdjLVxcdTAwM2Vtc2lfYml0bWFwID0gTlVMTDtcXG4yMTk4OlxcdFxcdGdjLVxcdTAwM2VtYXhfbnVtX21zaXggPSAwO1xcbjIxOTk6XFx0XFx0Z2MtXFx1MDAzZW51bV9tc2l4X3VzYWJsZSA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAzOjI1OjEyLjg0OTU0NDI1N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzExNzE4ODgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgbWFuYV9nZF9zZXR1cGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgY29yZSBvZiB0aGlzLiBNeSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBpbm5lciB3b3JraW5ncy4gTGV0J3Mgc3RhcnQgd2l0aCBgbWFuYV9nZF9zZXR1cGAgYW5kIHdoYXQgaXQgYWN0dWFsbHkgKmRvZXMqLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgZnVuY3Rpb25hbGl0eS4gV2hhdCBhcmUgaXRzIGNvbXBvbmVudHM/IFdoYXQgYXJlIGl0cyBkZXBlbmRlbmNpZXM/IFdoYXQgaXMgaXRzIHJvbGUgaW4gdGhlIGdyZWF0ZXIgc2NoZW1lPyBJIHdpbGwgYW5hbHl6ZSB0aGUgY29kZSBpdHNlbGYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjMxLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMzoyNToxNS41NjEyNjU4NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjIwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyMDA6XFx0fVxcbjIyMDE6XFx0XFxuMjIwMjpcXHRzdGF0aWMgaW50IG1hbmFfZ2Rfc2V0dXAoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuMjIwMzpcXHR7XFxuMjIwNDpcXHRcXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4yMjA1OlxcdFxcdGludCBlcnI7XFxuMjIwNjpcXHRcXG4yMjA3OlxcdFxcdGdjLVxcdTAwM2VtYW5hX3BjaV9kZWJ1Z2ZzID0gZGVidWdmc19jcmVhdGVfZGlyKHBjaV9uYW1lKHBkZXYpLFxcbjIyMDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBtYW5hX2RlYnVnZnNfcm9vdCk7XFxuMjIwOTpcXHRcXG4yMjEwOlxcdFxcdGVyciA9IG1hbmFfZ2RfaW5pdF9yZWdpc3RlcnMocGRldik7XFxuMjIxMTpcXHRcXHRpZiAoZXJyKVxcbjIyMTI6XFx0XFx0XFx0Z290byByZW1vdmVfZGVidWdmcztcXG4yMjEzOlxcdFxcbjIyMTQ6XFx0XFx0bWFuYV9zbWNfaW5pdChcXHUwMDI2Z2MtXFx1MDAzZXNobV9jaGFubmVsLCBnYy1cXHUwMDNlZGV2LCBnYy1cXHUwMDNlc2htX2Jhc2UpO1xcbjIyMTU6XFx0XFxuMjIxNjpcXHRcXHRnYy1cXHUwMDNlc2VydmljZV93cSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKFxcXCJnZG1hX3NlcnZpY2Vfd3FcXFwiLCAwKTtcXG4yMjE3OlxcdFxcdGlmICghZ2MtXFx1MDAzZXNlcnZpY2Vfd3EpIHtcXG4yMjE4OlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuMjIxOTpcXHRcXHRcXHRnb3RvIHJlbW92ZV9kZWJ1Z2ZzO1xcbjIyMjA6XFx0XFx0fVxcbjIyMjE6XFx0XFxuMjIyMjpcXHRcXHRlcnIgPSBtYW5hX2dkX3NldHVwX2h3Y19pcnFzKHBkZXYpO1xcbjIyMjM6XFx0XFx0aWYgKGVycikge1xcbjIyMjQ6XFx0XFx0XFx0ZGV2X2VycihnYy1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHNldHVwIElSUXMgZm9yIEhXQyBjcmVhdGlvbjogJWRcXFxcblxcXCIsXFxuMjIyNTpcXHRcXHRcXHRcXHRlcnIpO1xcbjIyMjY6XFx0XFx0XFx0Z290byBmcmVlX3dvcmtxdWV1ZTtcXG4yMjI3OlxcdFxcdH1cXG4yMjI4OlxcdFxcbjIyMjk6XFx0XFx0ZXJyID0gbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwoZ2MpO1xcbjIyMzA6XFx0XFx0aWYgKGVycilcXG4yMjMxOlxcdFxcdFxcdGdvdG8gcmVtb3ZlX2lycTtcXG4yMjMyOlxcdFxcbjIyMzM6XFx0XFx0ZXJyID0gbWFuYV9nZF92ZXJpZnlfdmZfdmVyc2lvbihwZGV2KTtcXG4yMjM0OlxcdFxcdGlmIChlcnIpXFxuMjIzNTpcXHRcXHRcXHRnb3RvIGRlc3Ryb3lfaHdjO1xcbjIyMzY6XFx0XFxuMjIzNzpcXHRcXHRlcnIgPSBtYW5hX2dkX2RldGVjdF9kZXZpY2VzKHBkZXYpO1xcbjIyMzg6XFx0XFx0aWYgKGVycilcXG4yMjM5OlxcdFxcdFxcdGdvdG8gZGVzdHJveV9od2M7XFxuMjI0MDpcXHRcXG4yMjQxOlxcdFxcdGVyciA9IG1hbmFfZ2RfcXVlcnlfbWF4X3Jlc291cmNlcyhwZGV2KTtcXG4yMjQyOlxcdFxcdGlmIChlcnIpXFxuMjI0MzpcXHRcXHRcXHRnb3RvIGRlc3Ryb3lfaHdjO1xcbjIyNDQ6XFx0XFxuMjI0NTpcXHRcXHRlcnIgPSBtYW5hX2dkX3NldHVwX3JlbWFpbmluZ19pcnFzKHBkZXYpO1xcbjIyNDY6XFx0XFx0aWYgKGVycikge1xcbjIyNDc6XFx0XFx0XFx0ZGV2X2VycihnYy1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHNldHVwIHJlbWFpbmluZyBJUlFzOiAlZFxcXCIsIGVycik7XFxuMjI0ODpcXHRcXHRcXHRnb3RvIGRlc3Ryb3lfaHdjO1xcbjIyNDk6XFx0XFx0fVxcbjIyNTA6XFx0XFxuMjI1MTpcXHRcXHRpZiAoIWdjLVxcdTAwM2Vtc2lfc2hhcmluZykge1xcbjIyNTI6XFx0XFx0XFx0Z2MtXFx1MDAzZW1zaV9iaXRtYXAgPSBiaXRtYXBfemFsbG9jKGdjLVxcdTAwM2VudW1fbXNpeF91c2FibGUsIEdGUF9LRVJORUwpO1xcbjIyNTM6XFx0XFx0XFx0aWYgKCFnYy1cXHUwMDNlbXNpX2JpdG1hcCkge1xcbjIyNTQ6XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4yMjU1OlxcdFxcdFxcdFxcdGdvdG8gZGVzdHJveV9od2M7XFxuMjI1NjpcXHRcXHRcXHR9XFxuMjI1NzpcXHRcXHRcXHQvKiBTZXQgYml0IGZvciBIV0MgKi9cXG4yMjU4OlxcdFxcdFxcdHNldF9iaXQoMCwgZ2MtXFx1MDAzZW1zaV9iaXRtYXApO1xcbjIyNTk6XFx0XFx0fVxcbjIyNjA6XFx0XFxuMjI2MTpcXHRcXHRkZXZfZGJnKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJtYW5hIGdkbWEgc2V0dXAgc3VjY2Vzc2Z1bFxcXFxuXFxcIik7XFxuMjI2MjpcXHRcXHRyZXR1cm4gMDtcXG4yMjYzOlxcdFxcbjIyNjQ6XFx0ZGVzdHJveV9od2M6XFxuMjI2NTpcXHRcXHRtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoZ2MpO1xcbjIyNjY6XFx0cmVtb3ZlX2lycTpcXG4yMjY3OlxcdFxcdG1hbmFfZ2RfcmVtb3ZlX2lycXMocGRldik7XFxuMjI2ODpcXHRmcmVlX3dvcmtxdWV1ZTpcXG4yMjY5OlxcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKGdjLVxcdTAwM2VzZXJ2aWNlX3dxKTtcXG4yMjcwOlxcdFxcdGdjLVxcdTAwM2VzZXJ2aWNlX3dxID0gTlVMTDtcXG4yMjcxOlxcdHJlbW92ZV9kZWJ1Z2ZzOlxcbjIyNzI6XFx0XFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGdjLVxcdTAwM2VtYW5hX3BjaV9kZWJ1Z2ZzKTtcXG4yMjczOlxcdFxcdGdjLVxcdTAwM2VtYW5hX3BjaV9kZWJ1Z2ZzID0gTlVMTDtcXG4yMjc0OlxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIiVzIGZhaWxlZCAoZXJyb3IgJWQpXFxcXG5cXFwiLCBfX2Z1bmNfXywgZXJyKTtcXG4yMjc1OlxcdFxcdHJldHVybiBlcnI7XFxuMjI3NjpcXHR9XFxuMjI3NzpcXHRcXG4yMjc4OlxcdHN0YXRpYyB2b2lkIG1hbmFfZ2RfY2xlYW51cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuMjI3OTpcXHR7XFxuMjI4MDpcXHRcXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4yMjgxOlxcdFxcbjIyODI6XFx0XFx0bWFuYV9od2NfZGVzdHJveV9jaGFubmVsKGdjKTtcXG4yMjgzOlxcdFxcbjIyODQ6XFx0XFx0bWFuYV9nZF9yZW1vdmVfaXJxcyhwZGV2KTtcXG4yMjg1OlxcdFxcbjIyODY6XFx0XFx0aWYgKGdjLVxcdTAwM2VzZXJ2aWNlX3dxKSB7XFxuMjI4NzpcXHRcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShnYy1cXHUwMDNlc2VydmljZV93cSk7XFxuMjI4ODpcXHRcXHRcXHRnYy1cXHUwMDNlc2VydmljZV93cSA9IE5VTEw7XFxuMjI4OTpcXHRcXHR9XFxuMjI5MDpcXHRcXG4yMjkxOlxcdFxcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShnYy1cXHUwMDNlbWFuYV9wY2lfZGVidWdmcyk7XFxuMjI5MjpcXHRcXHRnYy1cXHUwMDNlbWFuYV9wY2lfZGVidWdmcyA9IE5VTEw7XFxuMjI5MzpcXHRcXG4yMjk0OlxcdFxcdGRldl9kYmcoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIm1hbmEgZ2RtYSBjbGVhbnVwIHN1Y2Nlc3NmdWxcXFxcblxcXCIpO1xcbjIyOTU6XFx0fVxcbjIyOTY6XFx0XFxuMjI5NzpcXHRzdGF0aWMgYm9vbCBtYW5hX2lzX3BmKHVuc2lnbmVkIHNob3J0IGRldl9pZClcXG4yMjk4OlxcdHtcXG4yMjk5OlxcdFxcdHJldHVybiBkZXZfaWQgPT0gTUFOQV9QRl9ERVZJQ0VfSUQgfHwgZGV2X2lkID09IE1BTkFfUEYyX0RFVklDRV9JRDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDM6MjU6MTUuNTYxNDA4MzVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ4Mzk1NTgxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1BTkEgRGV2aWNlIERyaXZlciBJbnRlcmFjdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgbWFuYV9nZF9zZXR1cGAgZnVuY3Rpb24sIHRyeWluZyB0byB1bmRlcnN0YW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoYXJkd2FyZS4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIGl0IHJlbGllcyBvbiBhIGJ1bmNoIG9mIGxvdy1sZXZlbCBjYWxsczogYG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsYCwgYG1hbmFfZ2RfdmVyaWZ5X3ZmX3ZlcnNpb25gLCBgbWFuYV9nZF9kZXRlY3RfZGV2aWNlc2AsIGFuZCBgbWFuYV9nZF9xdWVyeV9tYXhfcmVzb3VyY2VzYC4gUHJldHR5IHN0YW5kYXJkIHN0dWZmIGZvciBpbml0aWFsaXppbmcgYSBkZXZpY2UsIHF1ZXJ5aW5nIGNhcGFiaWxpdGllcywgdGhhdCBraW5kIG9mIHRoaW5nLlxuXG5CdXQgdGhlbiBpdCBoaXRzIG1lLiBTeXprYWxsZXIsIGluIGl0cyBjdXJyZW50IGltcGxlbWVudGF0aW9uLCAqZG9lc24ndCogaGF2ZSBhIE1BTkEgZW11bGF0b3IsIHJpZ2h0PyBTbywgaWYgd2UncmUgdHJ5aW5nIHRvIGZ1enogdGhpcyB2aWEgUENJLCB3ZSdyZSBpbiBhIGJpdCBvZiBhIHBpY2tsZS4gSXQgbWVhbnMgc3l6a2FsbGVyIHdvdWxkIG5lZWQgdG8gcHJvdmlkZSAqdmFsaWQqIHJlc3BvbnNlcyB0byAqZXZlcnkgc2luZ2xlKiBoYXJkd2FyZSBxdWVyeSB0aGF0IGBtYW5hX2dkX3NldHVwYCB0aHJvd3MgYXQgaXQuIEFuZCB0aGVzZSBhcmVuJ3Qgc2ltcGxlIHJlYWRzOyB3ZSdyZSBsaWtlbHkgdGFsa2luZyBhYm91dCBjb21wbGV4IG1lbW9yeS1tYXBwZWQgSS9PLCBvciBtYXliZSBldmVuIERNQSByaW5ncyB3aXRoIGFsbCB0aGVpciBhc3NvY2lhdGVkIHF1aXJrcy4gVGhhdCdzIGdvaW5nIHRvIGJlIGEgc3Vic3RhbnRpYWwgdW5kZXJ0YWtpbmcgdG8gZ2V0IHJpZ2h0LlxuXG5JIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBoYXJkd2FyZSBxdWVyaWVzIGFyZSBoYW5kbGVkLiBMZXQncyBzdGFydCB3aXRoIGBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbGAuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBraW5kIG9mIGluZm9ybWF0aW9uIGlzIGV4Y2hhbmdlZCwgd2hhdCB0aGUgZXhwZWN0ZWQgcmVzcG9uc2VzIGxvb2sgbGlrZSwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyB2dWxuZXJhYmlsaXRpZXMgaW4gdGhhdCBpbnRlcmZhY2UuIFRoaXMgaXMgZ29pbmcgdG8gYmUga2V5IHRvIGZpZ3VyaW5nIG91dCB0aGUgYmVzdCBmdXp6aW5nIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI5MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAzOjI1OjIwLjA0NTM2NjU4N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTczODA3MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFuYV9od2NfY3JlYXRlX2NoYW5uZWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jPTMxOD1zdGF0aWMgaW50IG1hbmFfZ2RfZGV0ZWN0X2RldmljZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYy0zNDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6MzUwOlxcdFxcdC8qIEhXQyBpcyBhbHJlYWR5IGRldGVjdGVkIGluIG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKCkuICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMzUxLVxcdFxcdGlmIChkZXZfdHlwZSA9PSBHRE1BX0RFVklDRV9IV0MpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYz0yMjAyPXN0YXRpYyBpbnQgbWFuYV9nZF9zZXR1cChzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTIyMjgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6MjIyOTpcXHRlcnIgPSBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChnYyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjIzMC1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jPTcxMD1zdGF0aWMgaW50IG1hbmFfaHdjX2luaXRfcXVldWVzKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmMtNzQ5LW91dDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmM6NzUwOlxcdC8qIG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKCkgd2lsbCBkbyB0aGUgY2xlYW51cC4qL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuYy03NTEtXFx0cmV0dXJuIGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuYy03NTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jOjc1NDppbnQgbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jLTc1NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAzOjI1OjIwLjEwMjc1MjAyNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODQzNjM5NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogbWFuYVxcX2h3Y1xcX2NyZWF0ZVxcX2NoYW5uZWwqKlxuXG5BbHJpZ2h0LCAqbWFuYVxcX2h3Y1xcX2NyZWF0ZVxcX2NoYW5uZWwqLiBUaGF0J3MgdGhlIGZ1bmN0aW9uIGNhbGwgdGhhdCdzIGdyYWJiaW5nIG15IGF0dGVudGlvbi4gVGhlIG5hbWluZyBjb252ZW50aW9uIHN1Z2dlc3RzIGl04oCZcyByZWxhdGVkIHRvIGhhcmR3YXJlIGNvbXBvc2l0aW9uLCBvciBwb3NzaWJseSB0aGUgY3JlYXRpb24gb2YgYSBjaGFubmVsIGZvciBoYXJkd2FyZS1hY2NlbGVyYXRlZCByZW5kZXJpbmcsIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgaG93IHdlIGhhbmRsZSBkaXNwbGF5IG91dHB1dC4gSXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gaW5pdGlhbGl6aW5nIGEgbmV3IGNvbXBvc2l0aW9uIGNoYW5uZWwsIG1hbmFnaW5nIHJlc291cmNlcywgb3Igc2V0dGluZyB1cCBhIHBpcGVsaW5lIGZvciBncmFwaGljcyBkYXRhLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCdzIHRoZSBjb250ZXh0PyBXaGF0IGxpYnJhcnkgb3IgZnJhbWV3b3JrIGRvZXMgdGhpcyBiZWxvbmcgdG8/IElzIGl0IG9wZW4tc291cmNlPyBXaGF0IGFyZSB0aGUgaW5wdXRzPyBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgdGhlIGRldGFpbHMgbWF0dGVyIOKAkyB0aGUgZGF0YSB0eXBlcyBvZiB0aGUgcGFyYW1ldGVycywgdGhlaXIgaW50ZW5kZWQgbWVhbmluZ3MuIFRoaXMgZGV0ZXJtaW5lcyBob3cgZmxleGlibGUgb3Igc3BlY2lmaWMgdGhpcyBmdW5jdGlvbiBpcy4gSXMgdGhlcmUgYSByZWxhdGVkIHN0cnVjdCBvciBjbGFzcyB0aGF0IHRoaXMgdXNlcz8gVW5kZXJzdGFuZGluZyB0aGUgaW5wdXRzIHdpbGwgdGVsbCBtZSBob3cgZ3JhbnVsYXIgdGhlIGNvbnRyb2wgaXMuIEFyZSB3ZSBjcmVhdGluZyBhIGNvbXBsZXRlbHkgbmV3IGNoYW5uZWwgZnJvbSBzY3JhdGNoLCBvciBtb2RpZnlpbmcgYW4gZXhpc3Rpbmcgb25lP1xuXG5JIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBlcnJvciBoYW5kbGluZy4gSG93IGRvZXMgdGhpcyBmdW5jdGlvbiBzaWduYWwgZmFpbHVyZT8gQXJlIHRoZXJlIHJldHVybiBjb2RlcyBvciBleGNlcHRpb25zPyBIb3cgZG9lcyBpdCBoYW5kbGUgcmVzb3VyY2UgYWxsb2NhdGlvbiwgbGlrZSBtZW1vcnkgb3IgZmlsZSBkZXNjcmlwdG9ycz8gQW5kIHdoYXQga2luZCBvZiBjbGVhbnVwIGlzIHBlcmZvcm1lZD8gV2hhdCBoYXBwZW5zIHdoZW4gYSBjaGFubmVsIGlzIG5vIGxvbmdlciBuZWVkZWQ/IEFyZSB0aGVyZSBjb3JyZXNwb25kaW5nIGRlc3RydWN0aW9uIG9yIHJlbGVhc2UgY2FsbHM/IEkgbmVlZCB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBoZXJlLlxuXG5Fc3NlbnRpYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbidzIHB1cnBvc2Ugd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBJJ2xsIG5lZWQgdG8gYW5hbHl6ZSBpdHMgaW1wbGVtZW50YXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgZ3JhcGhpY3MgcGlwZWxpbmUsIGFuZCB3aGV0aGVyIGl0IHBsYXlzIG5pY2VseSB3aXRoIG90aGVyIHJlbGV2YW50IHBhcnRzIG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Mjg4LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDM6MjU6MjMuOTQ2MzkzMjc1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzU0LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc1NDpcXHRpbnQgbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXFxuIDc1NTpcXHR7XFxuIDc1NjpcXHRcXHR1MzIgbWF4X3JlcV9tc2dfc2l6ZSwgbWF4X3Jlc3BfbXNnX3NpemU7XFxuIDc1NzpcXHRcXHRzdHJ1Y3QgZ2RtYV9kZXYgKmdkID0gXFx1MDAyNmdjLVxcdTAwM2Vod2M7XFxuIDc1ODpcXHRcXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7XFxuIDc1OTpcXHRcXHR1MTYgcV9kZXB0aF9tYXg7XFxuIDc2MDpcXHRcXHRpbnQgZXJyO1xcbiA3NjE6XFx0XFxuIDc2MjpcXHRcXHRod2MgPSBremFsbG9jX29iaigqaHdjKTtcXG4gNzYzOlxcdFxcdGlmICghaHdjKVxcbiA3NjQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDc2NTpcXHRcXG4gNzY2OlxcdFxcdGdkLVxcdTAwM2VnZG1hX2NvbnRleHQgPSBnYztcXG4gNzY3OlxcdFxcdGdkLVxcdTAwM2Vkcml2ZXJfZGF0YSA9IGh3YztcXG4gNzY4OlxcdFxcdGh3Yy1cXHUwMDNlZ2RtYV9kZXYgPSBnZDtcXG4gNzY5OlxcdFxcdGh3Yy1cXHUwMDNlZGV2ID0gZ2MtXFx1MDAzZWRldjtcXG4gNzcwOlxcdFxcdGh3Yy1cXHUwMDNlaHdjX3RpbWVvdXQgPSBIV19DSEFOTkVMX1dBSVRfUkVTT1VSQ0VfVElNRU9VVF9NUztcXG4gNzcxOlxcdFxcbiA3NzI6XFx0XFx0LyogSFdDJ3MgaW5zdGFuY2UgbnVtYmVyIGlzIGFsd2F5cyAwLiAqL1xcbiA3NzM6XFx0XFx0Z2QtXFx1MDAzZWRldl9pZC5hc191aW50MzIgPSAwO1xcbiA3NzQ6XFx0XFx0Z2QtXFx1MDAzZWRldl9pZC50eXBlID0gR0RNQV9ERVZJQ0VfSFdDO1xcbiA3NzU6XFx0XFxuIDc3NjpcXHRcXHRnZC1cXHUwMDNlcGRpZCA9IElOVkFMSURfUERJRDtcXG4gNzc3OlxcdFxcdGdkLVxcdTAwM2Vkb29yYmVsbCA9IElOVkFMSURfRE9PUkJFTEw7XFxuIDc3ODpcXHRcXG4gNzc5OlxcdFxcdC8qIG1hbmFfaHdjX2luaXRfcXVldWVzKCkgb25seSBjcmVhdGVzIHRoZSByZXF1aXJlZCBkYXRhIHN0cnVjdHVyZXMsXFxuIDc4MDpcXHRcXHQgKiBhbmQgZG9lc24ndCB0b3VjaCB0aGUgSFdDIGRldmljZS5cXG4gNzgxOlxcdFxcdCAqL1xcbiA3ODI6XFx0XFx0ZXJyID0gbWFuYV9od2NfaW5pdF9xdWV1ZXMoaHdjLCBIV19DSEFOTkVMX1ZGX0JPT1RTVFJBUF9RVUVVRV9ERVBUSCxcXG4gNzgzOlxcdFxcdFxcdFxcdFxcdCAgIEhXX0NIQU5ORUxfTUFYX1JFUVVFU1RfU0laRSxcXG4gNzg0OlxcdFxcdFxcdFxcdFxcdCAgIEhXX0NIQU5ORUxfTUFYX1JFU1BPTlNFX1NJWkUpO1xcbiA3ODU6XFx0XFx0aWYgKGVycikge1xcbiA3ODY6XFx0XFx0XFx0ZGV2X2Vycihod2MtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIEhXQzogJWRcXFxcblxcXCIsIGVycik7XFxuIDc4NzpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNzg4OlxcdFxcdH1cXG4gNzg5OlxcdFxcbiA3OTA6XFx0XFx0ZXJyID0gbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoZ2MsIFxcdTAwMjZxX2RlcHRoX21heCwgXFx1MDAyNm1heF9yZXFfbXNnX3NpemUsXFxuIDc5MTpcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNm1heF9yZXNwX21zZ19zaXplKTtcXG4gNzkyOlxcdFxcdGlmIChlcnIpIHtcXG4gNzkzOlxcdFxcdFxcdGRldl9lcnIoaHdjLVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gZXN0YWJsaXNoIEhXQzogJWRcXFxcblxcXCIsIGVycik7XFxuIDc5NDpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNzk1OlxcdFxcdH1cXG4gNzk2OlxcdFxcbiA3OTc6XFx0XFx0ZXJyID0gbWFuYV9od2NfdGVzdF9jaGFubmVsKGdjLVxcdTAwM2Vod2MuZHJpdmVyX2RhdGEsXFxuIDc5ODpcXHRcXHRcXHRcXHRcXHQgICAgSFdfQ0hBTk5FTF9WRl9CT09UU1RSQVBfUVVFVUVfREVQVEgsXFxuIDc5OTpcXHRcXHRcXHRcXHRcXHQgICAgbWF4X3JlcV9tc2dfc2l6ZSwgbWF4X3Jlc3BfbXNnX3NpemUpO1xcbiA4MDA6XFx0XFx0aWYgKGVycikge1xcbiA4MDE6XFx0XFx0XFx0ZGV2X2Vycihod2MtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byB0ZXN0IEhXQzogJWRcXFxcblxcXCIsIGVycik7XFxuIDgwMjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gODAzOlxcdFxcdH1cXG4gODA0OlxcdFxcbiA4MDU6XFx0XFx0cmV0dXJuIDA7XFxuIDgwNjpcXHRvdXQ6XFxuIDgwNzpcXHRcXHRtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoZ2MpO1xcbiA4MDg6XFx0XFx0cmV0dXJuIGVycjtcXG4gODA5OlxcdH1cXG4gODEwOlxcdFxcbiA4MTE6XFx0dm9pZCBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXFxuIDgxMjpcXHR7XFxuIDgxMzpcXHRcXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MgPSBnYy1cXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xcbiA4MTQ6XFx0XFxuIDgxNTpcXHRcXHRpZiAoIWh3YylcXG4gODE2OlxcdFxcdFxcdHJldHVybjtcXG4gODE3OlxcdFxcbiA4MTg6XFx0XFx0LyogZ2MtXFx1MDAzZW1heF9udW1fY3FzIGlzIHNldCBpbiBtYW5hX2h3Y19pbml0X2V2ZW50X2hhbmRsZXIoKS4gSWYgaXQnc1xcbiA4MTk6XFx0XFx0ICogbm9uLXplcm8sIHRoZSBIV0Mgd29ya2VkIGFuZCB3ZSBzaG91bGQgdGVhciBkb3duIHRoZSBIV0MgaGVyZS5cXG4gODIwOlxcdFxcdCAqL1xcbiA4MjE6XFx0XFx0aWYgKGdjLVxcdTAwM2VtYXhfbnVtX2NxcyBcXHUwMDNlIDApIHtcXG4gODIyOlxcdFxcdFxcdG1hbmFfc21jX3RlYXJkb3duX2h3YyhcXHUwMDI2Z2MtXFx1MDAzZXNobV9jaGFubmVsLCBmYWxzZSk7XFxuIDgyMzpcXHRcXHRcXHRnYy1cXHUwMDNlbWF4X251bV9jcXMgPSAwO1xcbiA4MjQ6XFx0XFx0fVxcbiA4MjU6XFx0XFxuIDgyNjpcXHRcXHRpZiAoaHdjLVxcdTAwM2V0eHEpXFxuIDgyNzpcXHRcXHRcXHRtYW5hX2h3Y19kZXN0cm95X3dxKGh3YywgaHdjLVxcdTAwM2V0eHEpO1xcbiA4Mjg6XFx0XFxuIDgyOTpcXHRcXHRpZiAoaHdjLVxcdTAwM2VyeHEpXFxuIDgzMDpcXHRcXHRcXHRtYW5hX2h3Y19kZXN0cm95X3dxKGh3YywgaHdjLVxcdTAwM2VyeHEpO1xcbiA4MzE6XFx0XFxuIDgzMjpcXHRcXHRpZiAoaHdjLVxcdTAwM2VjcSlcXG4gODMzOlxcdFxcdFxcdG1hbmFfaHdjX2Rlc3Ryb3lfY3EoaHdjLVxcdTAwM2VnZG1hX2Rldi1cXHUwMDNlZ2RtYV9jb250ZXh0LCBod2MtXFx1MDAzZWNxKTtcXG4gODM0OlxcdFxcbiA4MzU6XFx0XFx0a2ZyZWUoaHdjLVxcdTAwM2VjYWxsZXJfY3R4KTtcXG4gODM2OlxcdFxcdGh3Yy1cXHUwMDNlY2FsbGVyX2N0eCA9IE5VTEw7XFxuIDgzNzpcXHRcXG4gODM4OlxcdFxcdG1hbmFfZ2RfZnJlZV9yZXNfbWFwKFxcdTAwMjZod2MtXFx1MDAzZWluZmxpZ2h0X21zZ19yZXMpO1xcbiA4Mzk6XFx0XFxuIDg0MDpcXHRcXHRod2MtXFx1MDAzZW51bV9pbmZsaWdodF9tc2cgPSAwO1xcbiA4NDE6XFx0XFxuIDg0MjpcXHRcXHRod2MtXFx1MDAzZWdkbWFfZGV2LVxcdTAwM2Vkb29yYmVsbCA9IElOVkFMSURfRE9PUkJFTEw7XFxuIDg0MzpcXHRcXHRod2MtXFx1MDAzZWdkbWFfZGV2LVxcdTAwM2VwZGlkID0gSU5WQUxJRF9QRElEO1xcbiA4NDQ6XFx0XFxuIDg0NTpcXHRcXHRod2MtXFx1MDAzZWh3Y190aW1lb3V0ID0gMDtcXG4gODQ2OlxcdFxcbiA4NDc6XFx0XFx0a2ZyZWUoaHdjKTtcXG4gODQ4OlxcdFxcdGdjLVxcdTAwM2Vod2MuZHJpdmVyX2RhdGEgPSBOVUxMO1xcbiA4NDk6XFx0XFx0Z2MtXFx1MDAzZWh3Yy5nZG1hX2NvbnRleHQgPSBOVUxMO1xcbiA4NTA6XFx0XFxuIDg1MTpcXHRcXHR2ZnJlZShnYy1cXHUwMDNlY3FfdGFibGUpO1xcbiA4NTI6XFx0XFx0Z2MtXFx1MDAzZWNxX3RhYmxlID0gTlVMTDtcXG4gODUzOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDM6MjU6MjMuOTQ2NTIxNzg1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0OTY0Njk4MTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFJlYWNoYWJpbGl0eSBmb3IgUGF0Y2ggRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJUaGlzIGlzIHZlcnkgc3BlY2lmaWMgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24uXCIgV2UncmUgdGFsa2luZyBhYm91dCBjaGFuZ2VzIHRvIHRoZSBgbWFuYV9jcmVhdGVfcnhxYCBmdW5jdGlvbiB3aXRoaW4gdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlci4gIFN5emthbGxlcidzIFBDSSBmdXp6ZXIgaXMgdGhlIHRvb2wgaW4gcXVlc3Rpb24sIGFuZCBpdCB3b3JrcyBieSBpbnRlcmNlcHRpbmcgUENJIGNvbmZpZyBzcGFjZSBhbmQgTU1JTyByZWFkcy93cml0ZXMuIFRoZSBxdWVzdGlvbiBpcywgY2FuIHRoaXMgZnV6emVyIGV2ZW4gZ2V0ICpuZWFyKiB0aGlzIGNvZGU/XG5cbk15IGZpcnN0IGluc3RpbmN0IGlzIHRoYXQsIHRoZW9yZXRpY2FsbHksIHRoZSBmdXp6ZXIgY291bGQgcG90ZW50aWFsbHkgcGFzcyB0aHJvdWdoIHRoZXNlIGNoZWNrcyBpZiBpdCByYW5kb21seSBndWVzc2VzIHRoZSBjb3JyZWN0IE1NSU8gdmFsdWVzLCBvciBpZiB3ZSBoYWQgY3JhZnRlZCBzcGVjaWZpYyBkZXNjcmlwdGlvbnMgZm9yIHRoZSBNQU5BIGRldmljZSB3aXRoaW4gU3l6a2FsbGVyLiBIb3dldmVyLCB3ZSBkb24ndCBoYXZlIE1BTkEgZGVzY3JpcHRpb25zLCBhbmQgdGhpcyBwYXRjaCBpcywgYXQgaXRzIGNvcmUsIGEgc2ltcGxlIGJ1ZyBmaXggaW4gYW4gZXJyb3IgcGF0aC4gVGhlIHBhdGNoIGNoYW5nZXMgYG1hbmFfY3JlYXRlX3J4cWAgdG8gcmV0dXJuIGFuIGVycm9yIGNvZGUgaW5zdGVhZCBvZiBgTlVMTGAgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSWYgd2UgY29uc2lkZXJlZCB0aGlzIGNvZGUgdG8gYmUgcmVhY2hhYmxlLCB3ZSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbkJ1dCB0aGF0J3Mgd2hlcmUgdGhlIGNyaXRpY2FsIHByb2JsZW0gY29tZXMgaW46IElzIHRoaXMgcmVhY2hhYmxlIGluICpvdXIqIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gIFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBpZiB0aGUgY29kZSBwYXRoIGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSwgdGhlbiB0aGUgYW5zd2VyIGlzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBBbmQgTUFOQSAqaXMqIGEgUENJIGRldmljZSwgYW5kLCBhcyBmYXIgYXMgSSdtIGF3YXJlLCBpdCdzIG5vdCBlbXVsYXRlZCBpbiBRRU1VIG9yIEdDRS5cblxuV2FpdCBhIHNlY29uZC4gIElzIE1BTkEgZW11bGF0ZWQgaW4gUUVNVT8gTm8sIGl0J3MgYSBwcm9wcmlldGFyeSBoYXJkd2FyZSBkZXZpY2UgdXNlZCBpbiBBenVyZS4gVW5sZXNzIHN5emthbGxlciBpcyBydW5uaW5nIG9uIEF6dXJlIFZNcyB3aXRoIE1BTkEgaGFyZHdhcmUgYXR0YWNoZWQsIHdoaWNoIHN5emJvdCBkb2Vzbid0IGRvIChpdCBydW5zIG9uIEdDRSksIHRoaXMgY29kZSBpcyBlc3NlbnRpYWxseSB1bnJlYWNoYWJsZS4gQW5kIHN5emJvdCAqZG9lcyogcnVuIG9uIEdDRSwgd2hpY2ggZG9lcyBub3QgaGF2ZSBNQU5BIGhhcmR3YXJlLlxuXG5TbywgY2FuIHN5emthbGxlcidzIFBDSSBmdXp6ZXIgcmVhY2ggaXQ/ICBUaGUgUENJIGZ1enplciBjYW4gaW5zdGFudGlhdGUgYSBQQ0kgZGV2aWNlIHdpdGggYW55IHZlbmRvci9kZXZpY2UgSUQsIHdoaWNoIHdpbGwgdGhlbiB0cmlnZ2VyIGEgcHJvYmUgYnkgdGhlIGtlcm5lbC4gVGhlIGRyaXZlciB3aWxsIG1hcCBNTUlPIGFuZCByZWFkL3dyaXRlIHRvIGl0LiBUaGUgUENJIGZ1enplciBpbnRlcmNlcHRzIHRoZXNlIE1NSU8gYWNjZXNzZXMgYW5kIHJldHVybnMgZnV6emVkIGRhdGEuIFRodXMgYG1hbmFfZ2RfcHJvYmVgIHdpbGwgYmUgY2FsbGVkLiBUaGVuIHRoZSBmdXp6ZXIgd2lsbCBzdGFydCBpbnRlcmNlcHRpbmcgTU1JTy4gIENhbiBpdCBnZXQgdGhyb3VnaCBgbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWxgIGFuZCBhbGwgdGhlIGNvbXBsZXggaW5pdGlhbGl6YXRpb24/IFVzdWFsbHksIG5vLCBpdCByZXF1aXJlcyBzcGVjaWZpYyBzZXF1ZW5jZXMgb2YgdmFsdWVzLiAgVGhvdWdoIHN5emthbGxlciBoYXMgcmVhY2hlZCBzb21lIFBDSSBkcml2ZXJzJyBwcm9iZSBmdW5jdGlvbnMuXG5cblRoZSBiaWdnZXIgcHJvYmxlbSBpcyB0aGF0IGBtYW5hX2NyZWF0ZV9yeHFgIGlzIGNhbGxlZCBkdXJpbmcgYG1hbmFfb3BlbmAgb3IgYG1hbmFfYXR0YWNoYCwgd2hpY2ggaGFwcGVucyAqYWZ0ZXIqIHRoZSBkZXZpY2UgaXMgc3VjY2Vzc2Z1bGx5IHByb2JlZCBhbmQgcmVnaXN0ZXJlZCBhcyBhIG5ldGRldi4gR2V0dGluZyBhICpmdWxseSBmdW5jdGlvbmFsKiBuZXRkZXYgb3V0IG9mIGEgcmFuZG9tbHkgZnV6emVkIFBDSSBkZXZpY2UgaXMgcHJhY3RpY2FsbHkgaW1wb3NzaWJsZSB3aXRob3V0IGEgZGVkaWNhdGVkIGVtdWxhdG9yIG9yIHNwZWNpZmljIGRlc2NyaXB0aW9ucy5cblxuVGhlcmVmb3JlLCB0aGUgbGlrZWxpaG9vZCBvZiB0aGlzIGNvZGUgcGF0aCBiZWluZyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUgaXMgbWludXNjdWxlLiBMZXQncyBkb3VibGUtY2hlY2sgaG93IGBtYW5hX2NyZWF0ZV9yeHFgIGlzIGNhbGxlZC4gSXQncyBvbmx5IGNhbGxlZCBmcm9tIGBtYW5hX2FkZF9yeF9xdWV1ZXNgLCB3aGljaCBpcyBpbiB0dXJuIGNhbGxlZCBmcm9tIGBtYW5hX2FsbG9jX3F1ZXVlc2AsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBtYW5hX29wZW5gIGFuZCBgbWFuYV9hdHRhY2hgLiBBbGwgb2YgdGhlc2UgcmVxdWlyZSB0aGUgbmV0ZGV2IHRvIGJlIHJlZ2lzdGVyZWQuIFRoZSBuZXRkZXYgaXMgcmVnaXN0ZXJlZCBpbiBgbWFuYV9wcm9iZV9wb3J0YCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYG1hbmFfcHJvYmVgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgbWFuYV9nZF9wcm9iZWAgKHRoZSBQQ0kgcHJvYmUgZnVuY3Rpb24pLlxuXG5TbyBpdCBzdHJpY3RseSBkZXBlbmRzIG9uIHRoZSBQQ0kgcHJvYmUgc3VjY2VlZGluZy4gU2luY2UgdGhlcmUgaXMgbm8gTUFOQSBlbXVsYXRvciwgdGhlIFBDSSBwcm9iZSB3aWxsIGZhaWwgdW5sZXNzIHRoZSBmdXp6ZXIgc29tZWhvdyBndWVzc2VzIGFsbCB0aGUgY29ycmVjdCBNTUlPIHJlc3BvbnNlcywgd2hpY2ggaXMgYXN0cm9ub21pY2FsbHkgdW5saWtlbHkuIFRodXMsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBvdXIgZnV6emluZyBlbnZpcm9ubWVudC5cblxuV2FpdCwgd2hhdCBpZiB0aGUgcGF0Y2ggaXMgdGVzdGVkIG9uIEF6dXJlPyAgVGhlIHByb21wdCBzcGVjaWZpZWQgXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIi4gU2luY2Ugc3l6a2FsbGVyIHJ1bnMgb24gR0NFL1FFTVUsIGFuZCBNQU5BIGlzIG5vdCBlbXVsYXRlZCB0aGVyZSwgaXQncyB1bnJlYWNoYWJsZS5cblxuSSdtIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuTGV0IG1lIGp1c3QgcmV2aWV3IHRoZSByZWFzb25pbmcuIFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyLiBNQU5BIGlzIGEgcGh5c2ljYWwvdmlydHVhbCBoYXJkd2FyZSBkZXZpY2Ugc3BlY2lmaWMgdG8gTWljcm9zb2Z0IEF6dXJlLiBTeXprYWxsZXIgcnVucyBpbiBHQ0Ugb3IgUUVNVSBlbnZpcm9ubWVudHMsIHdoaWNoIGRvIG5vdCBwcm92aWRlIE1BTkEgaGFyZHdhcmUuIFRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgTUFOQSBpbiB0aGUga2VybmVsIG9yIFFFTVUuIFdoaWxlIHN5emthbGxlcidzIFBDSSBmdXp6ZXIgY2FuIHRyaWdnZXIgdGhlIGRyaXZlcidzIHByb2JlIGZ1bmN0aW9uLCBzdWNjZXNzZnVsbHkgcGFzc2luZyB0aGUgY29tcGxleCBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSAoZS5nLixcblxuIiwiSW5wdXRUb2tlbnMiOjE2Mjg3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAzOjI1OjM4LjkxMTIyMjUxMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2NjY0NTExNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYW5hX2NyZWF0ZV9yeHFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYz0yNzgwPXN0YXRpYyBpbnQgbWFuYV9jcmVhdGVfcGFnZV9wb29sKHN0cnVjdCBtYW5hX3J4cSAqcnhxLCBzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0yODEzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzoyODE0OnN0YXRpYyBpbnQgbWFuYV9jcmVhdGVfcnhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLCB1MzIgcnhxX2lkeCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMjgxNS1cXHRcXHRcXHQgICBzdHJ1Y3QgbWFuYV9lcSAqZXEsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTI5MzctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jOjI5Mzg6c3RhdGljIHZvaWQgbWFuYV9jcmVhdGVfcnhxX2RlYnVnZnMoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsIGludCBpZHgpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTI5Mzkte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jPTI5NjA9c3RhdGljIGludCBtYW5hX2FkZF9yeF9xdWV1ZXMoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMtMjk2Ny1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYXBjLVxcdTAwM2VudW1fcXVldWVzOyBpKyspIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmM6Mjk2ODpcXHRcXHRlcnIgPSBtYW5hX2NyZWF0ZV9yeHEoYXBjLCBpLCBcXHUwMDI2YXBjLVxcdTAwM2VlcXNbaV0sIG5kZXYsIFxcdTAwMjZyeHEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0yOTY5LVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYy0yOTc3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYzoyOTc4OlxcdFxcdG1hbmFfY3JlYXRlX3J4cV9kZWJ1Z2ZzKGFwYywgaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jLTI5NzktXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMzoyNTo0MS4xNzc4NzI3MDZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcyMTc4MTIxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOlxuXG4qKlVucmVhY2hhYmxlIENvZGUgQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyB0cmFjZSB0aGlzIGJhY2suIFRoZSBjb2RlIHBhdGggSSdtIGV4YW1pbmluZyBhcHBlYXJzIHRvIGJlIGluY3JlZGlibHkgY29uc3RyYWluZWQuIEl0IHNlZW1zIHRoZSBmdW5jdGlvbiBJJ20gY29uY2VybmVkIGFib3V0LCBsaWtlbHkgcmVsYXRlZCB0byBSWCBxdWV1ZSBhbGxvY2F0aW9uLCBgbWFuYV9hZGRfcnhfcXVldWVzYCwgaXMgb25seSBjYWxsZWQgZnJvbSBgbWFuYV9hbGxvY19xdWV1ZXNgLiBUaGF0J3MgYSBsaW1pdGVkIHN0YXJ0aW5nIHBvaW50LlxuXG5GdXJ0aGVyLCBgbWFuYV9hbGxvY19xdWV1ZXNgIGl0c2VsZiBpcyBvbmx5IGludm9rZWQgZnJvbSB0d28gZnVuY3Rpb25zOiBgbWFuYV9vcGVuYCBhbmQgYG1hbmFfYXR0YWNoYC4gQm90aCBvZiB0aGVzZSByZXF1aXJlIGEgbmV0d29yayBkZXZpY2UsIHRoZSBgbmV0ZGV2YCwgdG8gYmUgcmVnaXN0ZXJlZC4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBwb2ludC4gVGhlIGBuZXRkZXZgIHJlZ2lzdHJhdGlvbiBoYXBwZW5zIGluc2lkZSBgbWFuYV9wcm9iZV9wb3J0YC4gTG9va2luZyBoaWdoZXIgaW4gdGhlIGNhbGwgZ3JhcGgsIGBtYW5hX3Byb2JlX3BvcnRgIGlzIGNhbGxlZCBleGNsdXNpdmVseSBmcm9tIGBtYW5hX3Byb2JlYCwgYW5kIGBtYW5hX3Byb2JlYCBpcywgaW4gdHVybiwgY2FsbGVkIGJ5IGBtYW5hX2dkX3Byb2JlYC4gVGhpcyBzdWdnZXN0cyBhIFBDSSBwcm9iZSwgYXMgdGhlIGNvZGUgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCBkZXRlY3Rpb24uXG5cblRoZXJlZm9yZSwgdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uLCB0aGF0IGlzLCBgbWFuYV9hZGRfcnhfcXVldWVzYCwgaXMgdW5yZWFjaGFibGUgaW4gbm9ybWFsIG9wZXJhdGlvbiBiZWNhdXNlIGl0IGlzIG9ubHkgcmVhY2hhYmxlIGJ5IGNhbGwgY2hhaW5zIHRoYXQgYXJlIG9ubHkgc3RhcnRlZCBieSB0aGUgcHJvYmUuIFRoZSBjb2RlIHdpbGwgbmV2ZXIgYmUgZXhlY3V0ZWQuIFNvLCBpdCdzIHVucmVhY2hhYmxlLCBhc3N1bWluZyB0aGUgdHlwaWNhbCBQQ0kgZGV2aWNlIHByb2JpbmcgZmxvdy4gVGhhdCBtZWFucyBpdCBpcyBoaWdobHkgbGlrZWx5IHRoYXQgdGhlcmUgaXMgYSBidWcgaGVyZSwgb3IgdGhhdCB0aGUgY29kZSBpcyBpbnRlbmRlZCBmb3IgYW4gZWRnZSBjYXNlIHdoaWNoIGhhcyBuZXZlciwgb3Igd2lsbCBuZXZlciwgb2NjdXIuXG5cbk5vdywgbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODkwNiwiT3V0cHV0VG9rZW5zIjoxNDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDM6MjU6NDcuODk5NjU2MDI1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlci4gTUFOQSBpcyBhIGhhcmR3YXJlIGRldmljZSBzcGVjaWZpYyB0byBNaWNyb3NvZnQgQXp1cmUgYW5kIGlzIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VIHdoZXJlIGZ1enppbmcgb2NjdXJzLiBXaGlsZSB0aGUgUENJIGZ1enplciBjYW4gdHJpZ2dlciB0aGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24sIHN1Y2Nlc3NmdWxseSBwYXNzaW5nIHRoZSBjb21wbGV4IGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIHRvIHJlZ2lzdGVyIHRoZSBuZXR3b3JrIGRldmljZSBhbmQgcmVhY2ggYG1hbmFfY3JlYXRlX3J4cWAgKHZpYSBgbWFuYV9vcGVuYCkgaXMgcHJhY3RpY2FsbHkgaW1wb3NzaWJsZSB3aXRob3V0IGEgZGVkaWNhdGVkIGVtdWxhdG9yLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBwYXRoIGlzIHVucmVhY2hhYmxlIGluIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlci4gTUFOQSBpcyBhIGhhcmR3YXJlIGRldmljZSBzcGVjaWZpYyB0byBNaWNyb3NvZnQgQXp1cmUgYW5kIGlzIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VIHdoZXJlIGZ1enppbmcgb2NjdXJzLiBXaGlsZSB0aGUgUENJIGZ1enplciBjYW4gdHJpZ2dlciB0aGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24sIHN1Y2Nlc3NmdWxseSBwYXNzaW5nIHRoZSBjb21wbGV4IGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIHRvIHJlZ2lzdGVyIHRoZSBuZXR3b3JrIGRldmljZSBhbmQgcmVhY2ggYG1hbmFfY3JlYXRlX3J4cWAgKHZpYSBgbWFuYV9vcGVuYCkgaXMgcHJhY3RpY2FsbHkgaW1wb3NzaWJsZSB3aXRob3V0IGEgZGVkaWNhdGVkIGVtdWxhdG9yLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBwYXRoIGlzIHVucmVhY2hhYmxlIGluIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlzrs2[1] Phase: Running StartedAt: 2026-07-18 03:25:59 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlzrs2[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-18 03:25:59 +0000 UTC FinishedAt: 2026-07-18 03:26:05 +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,}