Name: series-workflow7bctj Phase: Failed StartedAt: 2026-08-01 16:14:59 +0000 UTC FinishedAt: 2026-08-01 17:17:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bctj[0] Phase: Succeeded StartedAt: 2026-08-01 16:14:59 +0000 UTC FinishedAt: 2026-08-01 17:16:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bctj[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 16:14:59 +0000 UTC FinishedAt: 2026-08-01 17:16:46 +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+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIG1vZGlmaWVkIGNvZGUgaXMgbG9jYXRlZCBpbiB0aGUgYXRoMTJrIGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUXVhbGNvbW0gV2ktRmkgNyBoYXJkd2FyZSAoUENJZSBvciBBSEIpIGFuZCBmaXJtd2FyZSB0byBpbml0aWFsaXplLiBUaGUgZHJpdmVyIHJlbGllcyBvbiB0aGUgTW9kZW0gSG9zdCBJbnRlcmZhY2UgKE1ISSkgYW5kIFF1YWxjb21tIE1lc3NhZ2UgSW50ZXJmYWNlIChRTUkpIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGZpcm13YXJlLiBJbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSB3aXRob3V0IHNwZWNpZmljIGhhcmR3YXJlIGVtdWxhdGlvbiwgdGhlIGRyaXZlciBpbml0aWFsaXphdGlvbiBmYWlscyBlYXJseSBkdXJpbmcgTUhJIHBvd2VyLXVwIChgbWhpX3N5bmNfcG93ZXJfdXBgKSwgbWVhbmluZyB0aGUgZmlybXdhcmUgcmVhZHkgZXZlbnQgaXMgbmV2ZXIgdHJpZ2dlcmVkLiBDb25zZXF1ZW50bHksIHRoZSBNQUMgcmVnaXN0cmF0aW9uIHBhdGggKGBhdGgxMmtfbWFjX3NldHVwX2NoYW5uZWxzX3JhdGVzYCkgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4ODc2NGM1ZWU1OGVhY2JkMDgyODc4ODE3MmFmNTg0MDhjYTAzYWM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAxNzoxNDoxMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuY1xuaW5kZXggYTA5Mjg4OTA2NzFhYy4uNTQ2OGE4ZDJkNWQ1NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmNcbkBAIC0xNDI3NSw2ICYjNDM7MTQyNzUsNyBAQCBzdGF0aWMgaW50IGF0aDEya19tYWNfc2V0dXBfY2hhbm5lbHNfcmF0ZXMoc3RydWN0IGF0aDEyayAqYXIsXG4gXHRcdFx0XHRcdCAgIHNpemVvZihhdGgxMmtfNmdoel9jaGFubmVscyksIEdGUF9LRVJORUwpO1xuIFx0XHRcdGlmICghY2hhbm5lbHMpIHtcbiBcdFx0XHRcdGtmcmVlKGFyLVx1MDAzZW1hYy5zYmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLmNoYW5uZWxzKTtcbiYjNDM7XHRcdFx0XHRhci1cdTAwM2VtYWMuc2JhbmRzW05MODAyMTFfQkFORF8yR0haXS5jaGFubmVscyA9IE5VTEw7XG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdFx0XHR9XG4gXG5AQCAtMTQzMjUsNyAmIzQzOzE0MzI2LDkgQEAgc3RhdGljIGludCBhdGgxMmtfbWFjX3NldHVwX2NoYW5uZWxzX3JhdGVzKHN0cnVjdCBhdGgxMmsgKmFyLFxuIFx0XHRcdFx0XHQgICBHRlBfS0VSTkVMKTtcbiBcdFx0XHRpZiAoIWNoYW5uZWxzKSB7XG4gXHRcdFx0XHRrZnJlZShhci1cdTAwM2VtYWMuc2JhbmRzW05MODAyMTFfQkFORF8yR0haXS5jaGFubmVscyk7XG4mIzQzO1x0XHRcdFx0YXItXHUwMDNlbWFjLnNiYW5kc1tOTDgwMjExX0JBTkRfMkdIWl0uY2hhbm5lbHMgPSBOVUxMO1xuIFx0XHRcdFx0a2ZyZWUoYXItXHUwMDNlbWFjLnNiYW5kc1tOTDgwMjExX0JBTkRfNkdIWl0uY2hhbm5lbHMpO1xuJiM0MztcdFx0XHRcdGFyLVx1MDAzZW1hYy5zYmFuZHNbTkw4MDIxMV9CQU5EXzZHSFpdLmNoYW5uZWxzID0gTlVMTDtcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0XHRcdH1cbiBcbkBAIC0xNDM2NSw3ICYjNDM7MTQzNjgsNyBAQCBzdGF0aWMgaW50IGF0aDEya19tYWNfc2V0dXBfY2hhbm5lbHNfcmF0ZXMoc3RydWN0IGF0aDEyayAqYXIsXG4gXHRcdFx0XHRcdGtmcmVlKGFyLVx1MDAzZW1hYy5zYmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLmNoYW5uZWxzKTtcbiBcdFx0XHRcdFx0YXItXHUwMDNlbWFjLnNiYW5kc1tOTDgwMjExX0JBTkRfMkdIWl0uY2hhbm5lbHMgPSBOVUxMO1xuIFx0XHRcdFx0XHRrZnJlZShhci1cdTAwM2VtYWMuc2JhbmRzW05MODAyMTFfQkFORF82R0haXS5jaGFubmVscyk7XG4tXHRcdFx0XHRcdGFyLVx1MDAzZW1hYy5zYmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLmNoYW5uZWxzID0gTlVMTDtcbiYjNDM7XHRcdFx0XHRcdGFyLVx1MDAzZW1hYy5zYmFuZHNbTkw4MDIxMV9CQU5EXzZHSFpdLmNoYW5uZWxzID0gTlVMTDtcbiBcdFx0XHRcdFx0a2ZyZWUoY2hhbm5lbHMpO1xuIFx0XHRcdFx0XHRiYW5kLVx1MDAzZWNoYW5uZWxzID0gTlVMTDtcbiBcdFx0XHRcdFx0cmV0dXJuIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgbW9kaWZpZWQgY29kZSBpcyBsb2NhdGVkIGluIHRoZSBhdGgxMmsgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBRdWFsY29tbSBXaS1GaSA3IGhhcmR3YXJlIChQQ0llIG9yIEFIQikgYW5kIGZpcm13YXJlIHRvIGluaXRpYWxpemUuIFRoZSBkcml2ZXIgcmVsaWVzIG9uIHRoZSBNb2RlbSBIb3N0IEludGVyZmFjZSAoTUhJKSBhbmQgUXVhbGNvbW0gTWVzc2FnZSBJbnRlcmZhY2UgKFFNSSkgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgZmlybXdhcmUuIEluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUgZW11bGF0aW9uLCB0aGUgZHJpdmVyIGluaXRpYWxpemF0aW9uIGZhaWxzIGVhcmx5IGR1cmluZyBNSEkgcG93ZXItdXAgKGBtaGlfc3luY19wb3dlcl91cGApLCBtZWFuaW5nIHRoZSBmaXJtd2FyZSByZWFkeSBldmVudCBpcyBuZXZlciB0cmlnZ2VyZWQuIENvbnNlcXVlbnRseSwgdGhlIE1BQyByZWdpc3RyYXRpb24gcGF0aCAoYGF0aDEya19tYWNfc2V0dXBfY2hhbm5lbHNfcmF0ZXNgKSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg4NzY0YzVlZTU4ZWFjYmQwODI4Nzg4MTcyYWY1ODQwOGNhMDNhYzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxIDE3OjE0OjEzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMKaW5kZXggYTA5Mjg4OTA2NzFhYy4uNTQ2OGE4ZDJkNWQ1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jCkBAIC0xNDI3NSw2ICYjNDM7MTQyNzUsNyBAQCBzdGF0aWMgaW50IGF0aDEya19tYWNfc2V0dXBfY2hhbm5lbHNfcmF0ZXMoc3RydWN0IGF0aDEyayAqYXIsCiAJCQkJCSAgIHNpemVvZihhdGgxMmtfNmdoel9jaGFubmVscyksIEdGUF9LRVJORUwpOwogCQkJaWYgKCFjaGFubmVscykgewogCQkJCWtmcmVlKGFyLSZndDttYWMuc2JhbmRzW05MODAyMTFfQkFORF8yR0haXS5jaGFubmVscyk7CiYjNDM7CQkJCWFyLSZndDttYWMuc2JhbmRzW05MODAyMTFfQkFORF8yR0haXS5jaGFubmVscyA9IE5VTEw7CiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQl9CiAKQEAgLTE0MzI1LDcgJiM0MzsxNDMyNiw5IEBAIHN0YXRpYyBpbnQgYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlcyhzdHJ1Y3QgYXRoMTJrICphciwKIAkJCQkJICAgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIWNoYW5uZWxzKSB7CiAJCQkJa2ZyZWUoYXItJmd0O21hYy5zYmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLmNoYW5uZWxzKTsKJiM0MzsJCQkJYXItJmd0O21hYy5zYmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLmNoYW5uZWxzID0gTlVMTDsKIAkJCQlrZnJlZShhci0mZ3Q7bWFjLnNiYW5kc1tOTDgwMjExX0JBTkRfNkdIWl0uY2hhbm5lbHMpOwomIzQzOwkJCQlhci0mZ3Q7bWFjLnNiYW5kc1tOTDgwMjExX0JBTkRfNkdIWl0uY2hhbm5lbHMgPSBOVUxMOwogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJfQogCkBAIC0xNDM2NSw3ICYjNDM7MTQzNjgsNyBAQCBzdGF0aWMgaW50IGF0aDEya19tYWNfc2V0dXBfY2hhbm5lbHNfcmF0ZXMoc3RydWN0IGF0aDEyayAqYXIsCiAJCQkJCWtmcmVlKGFyLSZndDttYWMuc2JhbmRzW05MODAyMTFfQkFORF8yR0haXS5jaGFubmVscyk7CiAJCQkJCWFyLSZndDttYWMuc2JhbmRzW05MODAyMTFfQkFORF8yR0haXS5jaGFubmVscyA9IE5VTEw7CiAJCQkJCWtmcmVlKGFyLSZndDttYWMuc2JhbmRzW05MODAyMTFfQkFORF82R0haXS5jaGFubmVscyk7Ci0JCQkJCWFyLSZndDttYWMuc2JhbmRzW05MODAyMTFfQkFORF8yR0haXS5jaGFubmVscyA9IE5VTEw7CiYjNDM7CQkJCQlhci0mZ3Q7bWFjLnNiYW5kc1tOTDgwMjExX0JBTkRfNkdIWl0uY2hhbm5lbHMgPSBOVUxMOwogCQkJCQlrZnJlZShjaGFubmVscyk7CiAJCQkJCWJhbmQtJmd0O2NoYW5uZWxzID0gTlVMTDsKIAkJCQkJcmV0dXJuIHJldDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ4NAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDI5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBXaUZpIDcgRHJpdmVyIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuY2AuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBkb3VibGUtZnJlZSBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZSBieSBzZXR0aW5nIGEgcG9pbnRlciB0byBOVUxMIGFmdGVyIGZyZWVpbmcgbWVtb3J5LiBHb29kIGRlZmVuc2l2ZSBjb2RpbmcsIGJ1dCBkb2VzIGl0IHdhcnJhbnQgZnV6emluZz8KClRoaXMgaXMgZm9yIHRoZSBhdGgxMmsgZHJpdmVyLCB3aGljaCwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBpcyBzcGVjaWZpYyB0byBRdWFsY29tbSYjMzk7cyBXaS1GaSA3IHNpbGljb24uIFRoZSBiaWcgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGlzIGZ1enplci1mcmllbmRseS4gQ2FuIEkgZ2V0IGF3YXkgd2l0aCBydW5uaW5nIGl0IGluIHNvbWV0aGluZyBsaWtlIFFFTVU/IFR5cGljYWxseSwgdGhlc2UgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycywgZXNwZWNpYWxseSB3aXJlbGVzcyBvbmVzLCBkZW1hbmQgZWl0aGVyIHBoeXNpY2FsIGhhcmR3YXJlIG9yIHByZXR0eSBlbGFib3JhdGUgZW11bGF0aW9uLiBJIGtub3cgKm1hYzgwMjExX2h3c2ltKiBvZmZlcnMgc29tZSBlbXVsYXRpb24sIGJ1dCB0aGF04oCZcyBhICpnZW5lcmljKiBmcmFtZXdvcmssIGFuZCB0aGlzIGlzIGEgc3BlY2lhbGl6ZWQgKmhhcmR3YXJlIGRyaXZlciouCgpOb3csIHRoZSBuZXh0IGxvZ2ljYWwgcXVlc3Rpb24g4oCTIGRvZXMgc3l6a2FsbGVyIHRhcmdldCB0aGlzPyBMZXQgbWUgY2hlY2suIFJpZ2h0LCBzeXprYWxsZXIgKmRvZXNuJiMzOTt0KiBlbXVsYXRlIHRoZSBhdGgxMmsgaGFyZHdhcmUuIEhtbS4uLiBtYXliZSwgKm1heWJlKiBJIGNvdWxkIHJlYWNoIHNvbWUgaW5pdGlhbGl6YXRpb24gY29kZSBpZiBpdCB3ZXJlIGEgVVNCIGRyaXZlciwgYnV0IGF0aDEyayBpcyBQQ0kgb3IgQUhCLCBJIHRoaW5rLiBUaGF04oCZcyBwcm9iYWJseSBhIGRlYWQgZW5kLgoKSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcsIGFuZCB0aGUgUENJIHNvdXJjZS4gTGV0IG1lIGxvb2sgYXQgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZ2AgYW5kIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jYCwgdG8gc2VlIGlmIEkgY2FuIGdldCBhIGJldHRlciBzZW5zZSBvZiBob3cgdGhpcyBkcml2ZXIgaXMgYXJjaGl0ZWN0ZWQgYW5kIHdoYXQgc29ydCBvZiBlbnRyeSBwb2ludHMgYXJlIGV4cG9zZWQuIE1pZ2h0IGdpdmUgbWUgYSBiZXR0ZXIgaWRlYSBvZiBob3cgcmVhbGlzdGljIGZ1enppbmcgdGhpcyB0aGluZyByZWFsbHkgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM9MTQxODY9c3RhdGljIHZvaWQgYXRoMTJrX21hY191cGRhdGVfNV85X2doel9jaF9saXN0KHN0cnVjdCBhdGgxMmsgKmFyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTQyMDUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jOjE0MjA2OnN0YXRpYyBpbnQgYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlcyhzdHJ1Y3QgYXRoMTJrICphcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTQyMDctXHRcdFx0XHRcdCAgIHUzMiBzdXBwb3J0ZWRfYmFuZHMsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYz0xNDc0Mz1zdGF0aWMgaW50IGF0aDEya19tYWNfc2V0dXBfcmVnaXN0ZXIoc3RydWN0IGF0aDEyayAqYXIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNDc1NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM6MTQ3NTY6XHRyZXQgPSBhdGgxMmtfbWFjX3NldHVwX2NoYW5uZWxzX3JhdGVzKGFyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNDc1Ny1cdFx0XHRcdFx0ICAgICAgY2FwLVx1MDAzZXN1cHBvcnRlZF9iYW5kcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTE4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbGVycyBvZiBgYXRoMTJrX21hY19zZXR1cF9yZWdpc3RlcmAqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBhdGgxMmtfbWFjX3NldHVwX3JlZ2lzdGVyYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGZpZ3VyZSBvdXQgKndobyogaXMgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGFuZCAqd2h5Ki4gSSB3YW50IHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdy4gSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkIGZyb20uIElzIGl0IGR1cmluZyBkcml2ZXIgaW5pdGlhbGl6YXRpb24/IElzIGl0IHRyaWdnZXJlZCBieSBzb21lIGV2ZW50PyBJcyBpdCBwYXJ0IG9mIHNvbWUgbW9yZSBjb21wbGV4IHJlZ2lzdHJhdGlvbiBzZXF1ZW5jZT8gIFRoZSBjb250ZXh0IHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0IHdpdGhpbiB0aGUgYnJvYWRlciBgYXRoMTJrYCBkcml2ZXIuIFRpbWUgdG8gdHJhY2sgZG93biBhbGwgaXRzIGNhbGwgc2l0ZXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX21hY19zZXR1cF9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM9MTQ3MjA9c3RhdGljIHZvaWQgYXRoMTJrX21hY19od191bnJlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfaHcgKmFoKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTQ3NDItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jOjE0NzQzOnN0YXRpYyBpbnQgYXRoMTJrX21hY19zZXR1cF9yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrICphcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTQ3NDQtXHRcdFx0XHQgICAgIHUzMiAqaHRfY2FwLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM9MTQ3Nzc9c3RhdGljIGludCBhdGgxMmtfbWFjX2h3X3JlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfaHcgKmFoKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTQ4MTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jOjE0ODE1Olx0XHRyZXQgPSBhdGgxMmtfbWFjX3NldHVwX3JlZ2lzdGVyKGFyLCBcdTAwMjZodF9jYXBfaW5mbywgaHctXHUwMDNld2lwaHktXHUwMDNlYmFuZHMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNDgxNi1cdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDYzCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZSwgdXNpbmcgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6CgoqKkRlZXAgRGl2ZSBvbiBgYXRoMTJrX21hY19od19yZWdpc3RlcmAqKgoKQWxyaWdodCwgc28gdGhlIGRpc2N1c3Npb24gaGFzIG1vdmVkIG9uIHRvIGBhdGgxMmtfbWFjX2h3X3JlZ2lzdGVyYC4gVGhhdCBmdW5jdGlvbiBjYWxsLi4uIGl0IGFsd2F5cyBnZXRzIG15IGF0dGVudGlvbi4gVGhpcyBpcyBsaWtlbHkgdGhlIHBvaW50IHdoZXJlIHRoZSBoYXJkd2FyZSBpdHNlbGYgaXMgZmluYWxseSBpbml0aWFsaXplZCBhbmQgZm9ybWFsbHkgaW50ZWdyYXRlZCBpbnRvIHRoZSBhdGgxMmsgZHJpdmVyJiMzOTtzIG9wZXJhdGlvbmFsIGZsb3cuIEkmIzM5O20gaW1tZWRpYXRlbHkgcnVubmluZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMgaW4gbXkgaGVhZDogV2hhdCBzcGVjaWZpYyBoYXJkd2FyZSByZXNvdXJjZXMgYXJlIGJlaW5nIGNsYWltZWQgYW5kIG1hcHBlZCBhdCB0aGlzIHBvaW50PyBJcyB0aGVyZSBhbnkgc29ydCBvZiBkaXJlY3QgcmVnaXN0ZXIgYWNjZXNzIGhhcHBlbmluZyBoZXJlPyBNb3JlIGltcG9ydGFudGx5LCBhbSBJIHJlbWVtYmVyaW5nIGFsbCB0aGUgbnVhbmNlcyBvZiB0aGlzIHNwZWNpZmljIHJlZ2lzdHJhdGlvbiBwcm9jZXNzPyBJcyB0aGVyZSBhbnkgb3Bwb3J0dW5pdHkgZm9yIG9wdGltaXphdGlvbiBpbiBob3cgaXQmIzM5O3MgZG9uZT8gT3IgYW55IGNoYW5jZSBvZiBhbiBpbnRlcmVzdGluZyBvciBkYW5nZXJvdXMgYnVnIGJlaW5nIGhpZGRlbiBoZXJlPyBOZWVkIHRvIGtlZXAgaW4gbWluZCwgYW5kIHZlcmlmeSBpZiBpdCBhbGlnbnMgd2l0aCBteSBleHBlY3RhdGlvbnMgb2YgaG93IGFuIGF0aDEyayBkcml2ZXIgc2hvdWxkIHdvcmsuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGNyaXRpY2FsIHNlY3Rpb24sIGFuZCBvbmUgSSB3b3VsZCB3YW50IHRvIGRpc3NlY3QgY2FyZWZ1bGx5IGlmIEkgd2VyZSBkZWJ1Z2dpbmcgYSB3aXJlbGVzcyBwZXJmb3JtYW5jZSBpc3N1ZSBvciBpbnZlc3RpZ2F0aW5nIGEgcGFydGljdWxhcmx5IG5hc3R5IGRyaXZlciBoYW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZnVsbHkgdXAgdG8gc3BlZWQgb24gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMmtfbWFjX2h3X3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYz0xNDc0Mz1zdGF0aWMgaW50IGF0aDEya19tYWNfc2V0dXBfcmVnaXN0ZXIoc3RydWN0IGF0aDEyayAqYXIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNDc3Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM6MTQ3Nzc6c3RhdGljIGludCBhdGgxMmtfbWFjX2h3X3JlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfaHcgKmFoKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNDc3OC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYz0xNTI5NT1pbnQgYXRoMTJrX21hY19yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphZylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jLTE1MzAzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYzoxNTMwNDpcdFx0cmV0ID0gYXRoMTJrX21hY19od19yZWdpc3RlcihhaCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jLTE1MzA1LVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmM9NjkyMz1zdGF0aWMgaW50IGF0aDEya19yZWdfY2hhbl9saXN0X2V2ZW50KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYy03MDAxLVx0ICogc28gdGhlIGNvbXBsZXRpb24gY2Fubm90IGJlIG1hcmtlZCBhdCB0aGF0IHBvaW50LlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYzo3MDAyOlx0ICogVGhpcyBib290LXRpbWUgdXBkYXRlIGlzIGhhbmRsZWQgaW4gYXRoMTJrX21hY19od19yZWdpc3RlcigpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jLTcwMDMtXHQgKiBiZWZvcmUgcmVnaXN0ZXJpbmcgdGhlIGhhcmR3YXJlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NDAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgaW4gdGhlIGZpcnN0IHBlcnNvbiBhbmQgYXNzdW1pbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgYGF0aDEya19tYWNfcmVnaXN0ZXJgKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gdGhlIHRleHQgbWVudGlvbnMgYGF0aDEya19tYWNfcmVnaXN0ZXJgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoYXQgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgTUFDIGxheWVyIHdpdGhpbiB0aGUgYXRoMTJrIGRyaXZlci4gV2hhdCYjMzk7cyB0aGUgY29udGV4dCBoZXJlPyBJJiMzOTttIHByb2JhYmx5IGNvbnNpZGVyaW5nIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCBvciBwZXJoYXBzIGRlYnVnZ2luZyBhIHNwZWNpZmljIGlzc3VlIHJlbGF0ZWQgdG8gTUFDIG9wZXJhdGlvbnMgb24gYW4gYXRoMTJrLWJhc2VkIGRldmljZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoYXQqIHRoZSBxdWVzdGlvbiBvciBzY2VuYXJpbyBhcm91bmQgdGhhdCBmdW5jdGlvbiBpcy4gQXJlIHdlIHRyb3VibGVzaG9vdGluZyBhIHJlZ2lzdGVyIGFjY2VzcyBwcm9ibGVtPyBBIHJlc291cmNlIGNvbmZsaWN0PyBPciBhcmUgd2UgaW4gdGhlIGFyY2hpdGVjdHVyZSBwaGFzZSwgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRoZSBNQUMgYW5kIHRoZSBkcml2ZXIgaW50ZXJhY3QgZHVyaW5nIGluaXRpYWwgYnJpbmd1cD8gQXJlIHRoZXJlIHNwZWNpZmljIHJlZ2lzdGVycyBiZWluZyBtZW50aW9uZWQsIG9yIHNwZWNpZmljIGlzc3Vlcz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX21hY19yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jPTExNTU9c3RhdGljIGludCBhdGgxMmtfY29yZV9od19ncm91cF9zdGFydChzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphZylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0xMTc4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6MTE3OTpcdHJldCA9IGF0aDEya19tYWNfcmVnaXN0ZXIoYWcpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMTE4MC1cdGlmIChXQVJOX09OKHJldCkpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYz0xNTI3Mz12b2lkIGF0aDEya19tYWNfbWxvX3RlYXJkb3duKHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTUyOTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jOjE1Mjk1OmludCBhdGgxMmtfbWFjX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNTI5Ni17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuaD0xNTQ9dm9pZCBhdGgxMmtfbWFjX3VucmVnaXN0ZXIoc3RydWN0IGF0aDEya19od19ncm91cCAqYWcpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuaDoxNTU6aW50IGF0aDEya19tYWNfcmVnaXN0ZXIoc3RydWN0IGF0aDEya19od19ncm91cCAqYWcpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuaC0xNTYtaW50IGF0aDEya19tYWNfYWxsb2NhdGUoc3RydWN0IGF0aDEya19od19ncm91cCAqYWcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTE5CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgYXRoMTJrX2NvcmVfaHdfZ3JvdXBfc3RhcnRgIEZ1bmN0aW9uIENhbGwqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBhbmQgdGhlIHF1ZXN0aW9uIHRoYXQmIzM5O3MgcmVhbGx5IG5hZ2dpbmcgYXQgbWUgaXM6IHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGlzIGBhdGgxMmtfY29yZV9od19ncm91cF9zdGFydGAgZnVuY3Rpb24/IEl0JiMzOTtzIGtleSwgSSBrbm93IGl0LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0aGUgY29yZSBoYXJkd2FyZSBncm91cCBzdGFydCBmdW5jdGlvbiwgYW5kIHRoYXQgdXN1YWxseSBpbmRpY2F0ZXMgc29tZSBmdW5kYW1lbnRhbCBpbml0aWFsaXphdGlvbiBvciBhY3RpdmF0aW9uIHBoYXNlIGZvciBhIHNwZWNpZmljIHBhcnQgb2YgdGhlIGhhcmR3YXJlLCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSB3aXJlbGVzcyBpbnRlcmZhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgY29udGV4dCwgc3BlY2lmaWNhbGx5IHdoYXQgaXTigJlzIHN0YXJ0aW5nIGluIHRoZSBmaXJzdCBwbGFjZS4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3BlY2lmaWMgaGFyZHdhcmUgZ3JvdXAgaXQmIzM5O3MgbWFuYWdpbmcsIGFuZCB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlLCBpZiBhbnkuIElzIGl0IHJlbGF0ZWQgdG8gdGhlIFBIWSwgTUFDLCBvciBwZXJoYXBzIGEgc3BlY2lmaWMgcmFkaW8gY2hhaW4/IElzIHRoZXJlIGEgcHJlY2VkaW5nIHNldHVwIHRoYXQgbXVzdCBiZSBkb25lIGJlZm9yZSB0aGlzIGNhbiBydW4gd2l0aG91dCBpc3N1ZT8gUGVyaGFwcyB0aGVyZSYjMzk7cyBhIHJlYXNvbiBmb3IgY29uY2VybnMgcmVsYXRlZCB0byBpdHMgZGVwZW5kZW5jaWVzLCBvciBhIHNwZWNpZmljIHJlYXNvbiB3aHkgaXRzIGxvY2F0aW9uIGluIHRoZSBicm9hZGVyIGNvZGUgaXMgaW50ZXJlc3RpbmcuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkaXZlIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX2NvcmVfaHdfZ3JvdXBfc3RhcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYz0xMTI5PXN0YXRpYyBpbnQgYXRoMTJrX2NvcmVfbWxvX3NldHVwKHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTExNTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYzoxMTU1OnN0YXRpYyBpbnQgYXRoMTJrX2NvcmVfaHdfZ3JvdXBfc3RhcnQoc3RydWN0IGF0aDEya19od19ncm91cCAqYWcpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0xMTU2LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYz0xMjMwPXN0YXRpYyBpbmxpbmVcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jOjEyMzE6Ym9vbCBhdGgxMmtfY29yZV9od19ncm91cF9zdGFydF9yZWFkeShzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphZylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTEyMzIte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jPTEzMTE9aW50IGF0aDEya19jb3JlX3FtaV9maXJtd2FyZV9yZWFkeShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTEzNDQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYzoxMzQ1Olx0aWYgKGF0aDEya19jb3JlX2h3X2dyb3VwX3N0YXJ0X3JlYWR5KGFnKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6MTM0NjpcdFx0cmV0ID0gYXRoMTJrX2NvcmVfaHdfZ3JvdXBfc3RhcnQoYWcpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMTM0Ny1cdFx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jPTE2Mzg9c3RhdGljIHZvaWQgYXRoMTJrX2NvcmVfcmVzdGFydChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMTY2MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jOjE2NjI6XHRcdGlmICghYXRoMTJrX2NvcmVfaHdfZ3JvdXBfc3RhcnRfcmVhZHkoYWcpKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0xNjYzLVx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZhZy1cdTAwM2VtdXRleCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MjgKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFFNSSBGaXJtd2FyZSBSZWFkeSBDYWxsKioKCk9rYXksIHNvIEkmIzM5O3ZlIGhpdCBhIHBvaW50IGluIHRoZSBjb2RlIHdoZXJlIHRoZSBRTUkgZmlybXdhcmUgaXMgcmVhZHkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoZSBgYXRoMTJrYCBkcml2ZXIsIHNwZWNpZmljYWxseSwgYmVpbmcgc3ViamVjdGVkIHRvIGZ1enppbmc/JiMzNDsgVHlwaWNhbGx5LCB5b3UgZG9uJiMzOTt0IGZ1enogUENJIGRldmljZXMgZGlyZWN0bHkgdW5sZXNzIHRoZXJlJiMzOTtzIHNvbWUga2luZCBvZiB2aXJ0dWFsIGRldmljZSBvciBQQ0kgZW11bGF0aW9uIGluIHBsYWNlLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQgc3l6a2FsbGVyLCB3aGljaCBpcyB0aGUgZnV6emVyIHRoYXQmIzM5O3MgbGlrZWx5IGRyaXZpbmcgdGhpcywgd291bGRuJiMzOTt0IGhhdmUgUENJIGVtdWxhdGlvbiBzZXQgdXAgc3BlY2lmaWNhbGx5IGZvciBgYXRoMTJrYC4gQnV0LCB3YWl0IGEgbWludXRlLi4uIHdoYXQgaWYgaXQgKmlzbiYjMzk7dCogYSBQQ0kgZGV2aWNlPyBXaGF0IGlmIGl0JiMzOTtzIGEgcGxhdGZvcm0gZGV2aWNlPyBUaGF0IGNoYW5nZXMgdGhpbmdzLiBMZXQmIzM5O3MgZGlnIGluIGEgYml0IGZ1cnRoZXIsIGFuZCBjaGVjayB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuY2AgZmlsZS4gVGhhdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBjbHVlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX2FoYl9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM9OTk4PWF0aDEya19haGJfZ2V0X2RldmljZV9mYW1pbHkoY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTEwMTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjEwMTk6c3RhdGljIGludCBhdGgxMmtfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTEwMjAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM9MTE4Nz1pbnQgYXRoMTJrX2FoYl9yZWdpc3Rlcl9kcml2ZXIoY29uc3QgZW51bSBhdGgxMmtfZGV2aWNlX2ZhbWlseSBkZXZpY2VfaWQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xMjA4LVx0YWhiX2RyaXZlci1cdTAwM2Vkcml2ZXIub2ZfbWF0Y2hfdGFibGUgPSBkcml2ZXItXHUwMDNlaWRfdGFibGU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjEyMDk6XHRhaGJfZHJpdmVyLVx1MDAzZXByb2JlICA9IGF0aDEya19haGJfcHJvYmU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTEyMTAtXHRhaGJfZHJpdmVyLVx1MDAzZXJlbW92ZSA9IGF0aDEya19haGJfcmVtb3ZlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDk3CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlFFTVUgYW5kIGF0aDEyazogQSBTaW11bGF0aW9uIENoYWxsZW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBhY3R1YWxseSB0cmlnZ2VyIHRoaXMgYGF0aDEya2AgY29kZSB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50LiBUaGUgb2J2aW91cyByb2FkYmxvY2tzIGFyZSBwcmV0dHkgY2xlYXI6IHdpdGhvdXQgdGhlIGFjdHVhbCBoYXJkd2FyZSwgbmVpdGhlciBgYXRoMTJrX2FoYl9wcm9iZWAgbm9yIGBhdGgxMmtfcGNpX3Byb2JlYCB3aWxsIGV2ZXIgYmUgY2FsbGVkIGluIGEgJiMzNDtub3JtYWwmIzM0OyBzY2VuYXJpby4gT3IsIGlmIEkgdHJ5IGEgd29ya2Fyb3VuZCBsaWtlIGZha2luZyBhIHBsYXRmb3JtIGRldmljZSwgdGhlIGNvZGUgd2lsbCBqdXN0IGVycm9yIG91dCBxdWlja2x5IHdoZW4gaXQgY2FuJiMzOTt0IHJlYWQgdGhlIGhhcmR3YXJlIHJlZ2lzdGVycyBvciBjb21tdW5pY2F0ZSB3aXRoIHRoZSBmaXJtd2FyZS4KCldhaXQgYSBzZWNvbmTigKZzeXprYWxsZXIgbWlnaHQgYmUgYWJsZSB0byBjcmVhdGUgdGhvc2UgcGxhdGZvcm0gZGV2aWNlcyB1c2luZyBgc3l6X2RldnJlc2Agb3Igc29tZXRoaW5nIHNpbWlsYXIsIHJpZ2h0PyBCdXQgZXZlbiBpZiBJIGdvIGRvd24gdGhhdCBwYXRoLCBpdCB3b24mIzM5O3QgYmUgYWJsZSB0byBwcm92aWRlIHRoZSBmaXJtd2FyZSBhbmQgYWxsIHRoZSBuZWNlc3NhcnkgaGFyZHdhcmUgcmVzcG9uc2VzIHJlcXVpcmVkIHRvIGdldCB0aGUgY29kZSB0byByZWFjaCBgYXRoMTJrX2NvcmVfcW1pX2Zpcm13YXJlX3JlYWR5YC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBhdGgxMmtfY29yZV9xbWlfZmlybXdhcmVfcmVhZHlgIHRvIHNlZSB3aGF0IHRoZSBjb25kaXRpb25zIGFyZS4gSXQmIzM5O3MgcHJvYmFibHkgdGhlIGNydWNpYWwgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya19jb3JlX3FtaV9maXJtd2FyZV9yZWFkeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jPTEyOTI9c3RhdGljIHZvaWQgYXRoMTJrX2NvcmVfdHJpZ2dlcl9wYXJ0bmVyKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMTMxMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jOjEzMTE6aW50IGF0aDEya19jb3JlX3FtaV9maXJtd2FyZV9yZWFkeShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMTMxMi17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM9MTM4NT1zdGF0aWMgaW50IGF0aDEya19jb3JlX3JlY29uZmlndXJlX29uX2NyYXNoKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMTQwOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jOjE0MDk6XHRyZXQgPSBhdGgxMmtfY29yZV9xbWlfZmlybXdhcmVfcmVhZHkoYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMTQxMC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmg9MTIwNT1zdHJ1Y3QgYXRoMTJrX2Z3X3N0YXRzX3BkZXYge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5oLTEyNjQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaDoxMjY1OmludCBhdGgxMmtfY29yZV9xbWlfZmlybXdhcmVfcmVhZHkoc3RydWN0IGF0aDEya19iYXNlICphYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaC0xMjY2LXZvaWQgYXRoMTJrX2NvcmVfaHdfZ3JvdXBfY2xlYW51cChzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphZyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYz0zOTY1PXN0YXRpYyB2b2lkIGF0aDEya19xbWlfZHJpdmVyX2V2ZW50X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtNDAxNC1cdFx0XHRcdCAgXHUwMDI2YWItXHUwMDNlZGV2X2ZsYWdzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM6NDAxNTpcdFx0XHRyZXQgPSBhdGgxMmtfY29yZV9xbWlfZmlybXdhcmVfcmVhZHkoYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy00MDE2LVx0XHRcdGlmICghcmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTYwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgUU1JIE1lc3NhZ2UgSGFuZGxpbmcgaW4gYXRoMTJrKioKCk9rYXksIHNvIGBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudF93b3JrYCBnZXRzIHRyaWdnZXJlZCB3aGVuZXZlciBhIFFNSSBtZXNzYWdlIGNvbWVzIGluLiBUaGF0IG1ha2VzIHNlbnNlIOKAkyBRTUkgaXMgdGhlIFF1YWxjb21tIE1lc3NhZ2UgSW50ZXJmYWNlLCBhbmQgaXQgdHlwaWNhbGx5IHRyYXZlbHMgb3ZlciB0aGUgSVBDIHJvdXRlciwgcmlnaHQ/IFNwZWNpZmljYWxseSwgQUZfUUlQQ1JUUiwgb3IgYSBzaW1pbGFyIGNvbW11bmljYXRpb24gY2hhbm5lbC4gSSYjMzk7bSB3b25kZXJpbmcgdGhvdWdoLi4uIGNhbiBzeXprYWxsZXIgaW5qZWN0IHRoZXNlIFFNSSBtZXNzYWdlcz8gV2UgdXNlIHN5emthbGxlciBmb3IgZnV6emluZywgYW5kIGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGNvbnNpZGVyIGFsbCBhdHRhY2sgc3VyZmFjZXMuCgpJIHJlbWVtYmVyIHN5emthbGxlciAqZG9lcyogaGF2ZSBzb21lIEFGX1FJUENSVFIgc3VwcG9ydCwgYnV0IGlzbuKAmXQgdGhhdCBwcmltYXJpbHkgZm9yIHVzZXJzcGFjZSBjb21tdW5pY2F0aW5nIHdpdGggdGhlIGtlcm5lbD8gSGVyZSwgdGhlIGBhdGgxMmtgIGRyaXZlciBpcyBjb21tdW5pY2F0aW5nIHdpdGggdGhlICpmaXJtd2FyZSogdXNpbmcgUU1JLCB3aGljaCBpcyBhIGRpZmZlcmVudCBjb250ZXh0LiBJIG5lZWQgdG8gY2xhcmlmeSBpZiBpdCBpcyB1c2luZyB0aGUgUVJUUiBzdWJzeXN0ZW0gd2hpY2ggd291bGQgYmUgcmVsZXZhbnQgdG8gaG93IGl0IGNvbW11bmljYXRlcyB3aXRoIFFNSS4gTGV0IG1lIGRpZyBhIGJpdCBkZWVwZXIgYW5kIHNlZSBpZiBgYXRoMTJrYCBpcyBsZXZlcmFnaW5nIFFSVFIgaW4gYW55IG9mIHRoaXMgY29tbXVuaWNhdGlvbiBwYXRoLiBUaGF0IHdpbGwgYmUgdGhlIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXJ0ciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZWR1bXAuaD0zNz1zdHJ1Y3QgYXRoMTJrX2R1bXBfZmlsZV9kYXRhIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmVkdW1wLmgtNDUtXHRfX2xlMzIgY2hpcF9pZDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZWR1bXAuaDo0NjpcdC8qIHFydHIgaW5zdGFuY2UgaWQgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZWR1bXAuaDo0NzpcdF9fbGUzMiBxcnRyX2lkO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlZHVtcC5oLTQ4LVx0LyogcGNpIGRvbWFpbiBpZCAqL1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGFsLmg9MTEzNT1zdHJ1Y3QgYXRoMTJrX2h3X3JlZ3Mge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGFsLmgtMTIxMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGFsLmg6MTIxNDpcdHUzMiBxcnRyX25vZGVfaWQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hhbC5oLTEyMTUtfTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTg4OT1zdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2FzcG1fZGlzYWJsZShzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtOTA3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzo5MDg6c3RhdGljIHZvaWQgYXRoMTJrX3BjaV91cGRhdGVfcXJ0cl9ub2RlX2lkKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTkwOS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy05MTMtXHQvKiBPbiBwbGF0Zm9ybXMgd2l0aCB0d28gb3IgbW9yZSBpZGVudGljYWwgbWhpIGRldmljZXMsIHFtaSBzZXJ2aWNlIHJ1blxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzo5MTQ6XHQgKiB3aXRoIGlkZW50aWNhbCBxcnRyLW5vZGUtaWQuIEJlY2F1c2Ugb2YgdGhpcyBpZGVudGljYWwgSUQgcXJ0ci1sb29rdXBcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtOTE1LVx0ICogY2Fubm90IHJlZ2lzdGVyIG1vcmUgdGhhbiBvbmUgcW1pIHNlcnZpY2Ugd2l0aCBpZGVudGljYWwgbm9kZSBJRC5cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTEzMTY9c3RhdGljIHZvaWQgYXRoMTJrX3BjaV9jb3JlZHVtcF9kb3dubG9hZChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTM1Mi1cdGZpbGVfZGF0YS1cdTAwM2VjaGlwX2lkID0gY3B1X3RvX2xlMzIoYWJfcGNpLVx1MDAzZWRldl9pZCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjEzNTM6XHRmaWxlX2RhdGEtXHUwMDNlcXJ0cl9pZCA9IGNwdV90b19sZTMyKGFiX3BjaS1cdTAwM2VhYi1cdTAwM2VxbWkuc2VydmljZV9pbnNfaWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xMzU0LVx0ZmlsZV9kYXRhLVx1MDAzZWJ1c19pZCA9IGNwdV90b19sZTMyKHBjaV9kb21haW5fbnIoYWJfcGNpLVx1MDAzZXBkZXYtXHUwMDNlYnVzKSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xNDI4PWludCBhdGgxMmtfcGNpX3Bvd2VyX3VwKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNDQ0LVx0aWYgKGF0aDEya19md19mZWF0dXJlX3N1cHBvcnRlZChhYiwgQVRIMTJLX0ZXX0ZFQVRVUkVfTVVMVElfUVJUUl9JRCkpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE0NDU6XHRcdGF0aDEya19wY2lfdXBkYXRlX3FydHJfbm9kZV9pZChhYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE0NDYtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaC02Mi0jZGVmaW5lIFBDSUVfTE9DQUxfUkVHX1FSVFJfTk9ERV9JRChhYikgXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmg6NjM6XHQoKGFiKS1cdTAwM2VoYWwucmVncy1cdTAwM2VxcnRyX25vZGVfaWQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5oLTY0LSNkZWZpbmUgRE9NQUlOX05VTUJFUl9NQVNLXHRcdFx0R0VOTUFTSyg3LCA0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM9MzgxND1zdGF0aWMgdm9pZCBhdGgxMmtfcW1pX21zZ19tZW1fcmVxdWVzdF9jYihzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pX2hkbCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM6MzgxNTpcdFx0XHRcdFx0ICBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTM4MTYtXHRcdFx0XHRcdCAgc3RydWN0IHFtaV90eG4gKnR4bixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jPTM4NTk9c3RhdGljIHZvaWQgYXRoMTJrX3FtaV9tc2dfbWVtX3JlYWR5X2NiKHN0cnVjdCBxbWlfaGFuZGxlICpxbWlfaGRsLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYzozODYwOlx0XHRcdFx0XHRzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTM4NjEtXHRcdFx0XHRcdHN0cnVjdCBxbWlfdHhuICp0eG4sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYz0zODcxPXN0YXRpYyB2b2lkIGF0aDEya19xbWlfbXNnX2Z3X3JlYWR5X2NiKHN0cnVjdCBxbWlfaGFuZGxlICpxbWlfaGRsLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYzozODcyOlx0XHRcdFx0ICAgICAgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtMzg3My1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgcW1pX3R4biAqdHhuLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM9MzkxMD1zdGF0aWMgaW50IGF0aDEya19xbWlfb3BzX25ld19zZXJ2ZXIoc3RydWN0IHFtaV9oYW5kbGUgKnFtaV9oZGwsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy0zOTE0LVx0c3RydWN0IGF0aDEya19iYXNlICphYiA9IHFtaS1cdTAwM2VhYjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM6MzkxNTpcdHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSA9IFx1MDAyNnFtaS1cdTAwM2VzcTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtMzkxNi1cdGludCByZXQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuaD0xMzU9c3RydWN0IGF0aDEya19xbWkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmgtMTM3LVx0c3RydWN0IHFtaV9oYW5kbGUgaGFuZGxlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuaDoxMzg6XHRzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciBzcTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmgtMTM5LVx0c3RydWN0IHdvcmtfc3RydWN0IGV2ZW50X3dvcms7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9oYWxfcWNjMjA3Mi5jPTk9Y29uc3Qgc3RydWN0IGF0aDEya19od19yZWdzIHFjYzIwNzJfcmVncyA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF9xY2MyMDcyLmMtOTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF9xY2MyMDcyLmM6OTY6XHQucXJ0cl9ub2RlX2lkID0gMHgxZTAzMzAwLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9oYWxfcWNjMjA3Mi5jLTk3LX07XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9oYWxfcWNuOTI3NC5jPTIxNT1jb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X3JlZ3MgcWNuOTI3NF92MV9yZWdzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaGFsX3FjbjkyNzQuYy0zMDAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF9xY245Mjc0LmM6MzAxOlx0LnFydHJfbm9kZV9pZCA9IDB4MWUwMzE2NCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaGFsX3FjbjkyNzQuYy0zMDItfTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF9xY245Mjc0LmM9MzA0PWNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfcmVncyBxY245Mjc0X3YyX3JlZ3MgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9oYWxfcWNuOTI3NC5jLTM5NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaGFsX3FjbjkyNzQuYzozOTY6XHQucXJ0cl9ub2RlX2lkID0gMHgxZTAzMTY0LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9oYWxfcWNuOTI3NC5jLTM5Ny19O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaGFsX3djbjc4NTAuYz0xNzQ9Y29uc3Qgc3RydWN0IGF0aDEya19od19yZWdzIHdjbjc4NTBfcmVncyA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF93Y243ODUwLmMtMjU5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9oYWxfd2NuNzg1MC5jOjI2MDpcdC5xcnRyX25vZGVfaWQgPSAweDFlMDMxNjQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF93Y243ODUwLmMtMjYxLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTc4CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgSW52ZXN0aWdhdGlvbiBvZiB0aGUgYXRoMTJrIERyaXZlciBhbmQgUVJUUioqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBzeXprYWxsZXIgY2FuIGludGVyYWN0IHdpdGggdGhlIGF0aDEyayBkcml2ZXIsIHNwZWNpZmljYWxseSBob3cgaXQgbGV2ZXJhZ2VzIFFSVFIgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgZmlybXdhcmUuIEkga25vdyB0aGUgZHJpdmVyIHVzZXMgUVJUUiB0byB0YWxrIHRvIHRoZSBmaXJtd2FyZSwgYnV0IG15IHF1ZXN0aW9uIGlzIHdoZXRoZXIgc3l6a2FsbGVyIGlzIGVtdWxhdGluZyBRUlRSIG5vZGVzIHRvIGZvb2wgdGhlIGRyaXZlciBpbnRvIHRoaW5raW5nIGl0JiMzOTtzIHRhbGtpbmcgdG8gdGhlIGFjdHVhbCBmaXJtd2FyZS4KClRoZSBhbnN3ZXIsIGFzIGZhciBhcyBJIHVuZGVyc3RhbmQsIGlzIG5vLiBTeXprYWxsZXIgY2FuIGluamVjdCBRUlRSIHBhY2tldHMgZGlyZWN0bHkgaW50byB0aGUgc29ja2V0LCBidXQgdGhlIGFjdHVhbCBRUlRSIG5vZGVzIHRoZW1zZWx2ZXMgYXJlIHR5cGljYWxseSBzZXQgdXAgYW5kIHJlZ2lzdGVyZWQgYnkgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgZHJpdmVycyDigJMgdGhpbmdzIGxpa2UgTUhJIG9yIFNNRC4gCgpBaCwgYnV0IGhlcmUmIzM5O3MgYSB0aG91Z2h0OiBpZiBzeXprYWxsZXIgY2FuIGNyZWF0ZSBpdHMgKm93biogdmlydHVhbCBRUlRSIG5vZGUgYW5kIHNlbmQgUU1JIG1lc3NhZ2VzLCBjb3VsZCB0aGF0IHBvdGVudGlhbGx5IHRyaWdnZXIgdGhlIGBhdGgxMmtfcW1pX29wc19uZXdfc2VydmVyYCBmdW5jdGlvbj8gQnV0IHdhaXQgYSBtaW51dGUsIGlzbiYjMzk7dCB0aGF0IGZ1bmN0aW9uIGNhbGxlZCB3aGVuIGEgKm5ldyBzZXJ2ZXIqIGlzIHJlZ2lzdGVyZWQgb24gdGhlIFFSVFIgYnVzPyBUaGUgYXRoMTJrIGRyaXZlciBpcyBhY3R1YWxseSBhICpjbGllbnQqLCBpc24mIzM5O3QgaXQ/IEl0IHJlZ2lzdGVycyBpdHMgb3duIFFNSSBoYW5kbGUgYW5kIHRoZW4gd2FpdHMgZm9yIHRoZSBmaXJtd2FyZSB0byBhY3QgYXMgdGhlIHNlcnZlci4KCk9rYXksIHNvIGlmIHN5emthbGxlciBjcmVhdGVzIGEgUVJUUiBzZXJ2ZXIgaW4gdXNlcnNwYWNlLCB0aGF0ICptaWdodCogdHJpZ2dlciBgYXRoMTJrX3FtaV9vcHNfbmV3X3NlcnZlcmAuIExldCYjMzk7cyBzdGVwIGJhY2ssIGFuZCByZW1lbWJlciB0aGF0IGF0aDEyayBvbmx5IHJlZ2lzdGVycyBpdHMgUU1JIGhhbmRsZSBpbnNpZGUgYGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlYC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2VgIGlzIGV2ZW4gY2FsbGVkLCBhbmQgaXQmIzM5O3MgdGltZSB0byBzdGFydCB0cmFjaW5nIHRoYXQgY2FsbCBjaGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX3FtaV9pbml0X3NlcnZpY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYz04MTU9c3RhdGljIGludCBhdGgxMmtfY29yZV9zb2NfY3JlYXRlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtODIzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6ODI0Olx0cmV0ID0gYXRoMTJrX3FtaV9pbml0X3NlcnZpY2UoYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtODI1LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM9Mzk2NT1zdGF0aWMgdm9pZCBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTQwMzctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjQwMzg6aW50IGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTQwMzkte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmg9NjQ0PXZvaWQgYXRoMTJrX3FtaV9kZWluaXRfc2VydmljZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmg6NjQ1OmludCBhdGgxMmtfcW1pX2luaXRfc2VydmljZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmgtNjQ2LXZvaWQgYXRoMTJrX3FtaV9mcmVlX3Jlc291cmNlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA2NAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB1bmRlcnN0YW5kaW5nLCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHRzOgoKKipEaXNzZWN0aW5nIHRoZSBBdGgxMmsgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBmb3IgdGhlIGF0aDEyayBkcml2ZXIsIGFuZCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBgYXRoMTJrX2NvcmVfc29jX2NyZWF0ZWAgaXMgYSBrZXkgZnVuY3Rpb24uIEkgc2VlIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBhdGgxMmtfY29yZV9pbml0YC4gVGhhdCYjMzk7cyBub3Qgc3VycHJpc2luZywgYnV0IGl0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIGEgZmV3IHRoaW5ncy4gRmlyc3QsIGBhdGgxMmtfY29yZV9zb2NfY3JlYXRlYCBpcyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgY29yZSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllciBvciBpbml0aWFsaXppbmcgc29tZSBjcnVjaWFsIHN0YXRlIHJlbGF0ZWQgdG8gdGhlIFN5c3RlbS1vbi1DaGlwIChTb0MpIGludGVncmF0aW9uLiBHaXZlbiB0aGUgbmFtZSwgaXQgYWxtb3N0IGNlcnRhaW5seSBkZWFscyB3aXRoIHRoZSBzcGVjaWZpYyBTb0MgZmVhdHVyZXMgYW5kIHJlcXVpcmVtZW50cy4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgYXRoMTJrX2NvcmVfaW5pdGAgc3VnZ2VzdHMgaXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBvdmVyYWxsIGRyaXZlciYjMzk7cyBpbnN0YW50aWF0aW9uIHByb2Nlc3MuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gd2hhdCBgYXRoMTJrX2NvcmVfc29jX2NyZWF0ZWAgKmFjdHVhbGx5KiBkb2VzLiBJcyBpdCBhbGxvY2F0aW5nIG1lbW9yeSwgcmVnaXN0ZXJpbmcgaGFyZHdhcmUgcmVzb3VyY2VzLCBzZXR0aW5nIHVwIGludGVycnVwdCBoYW5kbGVycywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGNhbGwgdHJlZSBoaW50cyB0aGF0IGl0JiMzOTtzIHByb2JhYmx5IG9uZSBvZiB0aGUgZmlyc3Qgc3RlcHMgaW4gcHJlcGFyaW5nIHRoZSBoYXJkd2FyZSBmb3Igb3BlcmF0aW9uLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uJiMzOTtzIGltcGxlbWVudGF0aW9uIG5leHQsIGl0IHdpbGwgcHJvdmlkZSBtdWNoIG1vcmUgZGV0YWlsIG9uIHRoZSBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMmtfY29yZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYz0xMDE5PXN0YXRpYyBpbnQgYXRoMTJrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTExMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MTExMTpcdHJldCA9IGF0aDEya19jb3JlX2luaXQoYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xMTEyLVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jPTIxOTA9dm9pZCBhdGgxMmtfY29yZV9od19ncm91cF9zZXRfbWxvX2NhcGFibGUoc3RydWN0IGF0aDEya19od19ncm91cCAqYWcpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMjIzMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jOjIyMzE6aW50IGF0aDEya19jb3JlX2luaXQoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTIyMzIte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5oPTEyNjc9aW50IGF0aDEya19jb3JlX3ByZV9pbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmg6MTI2ODppbnQgYXRoMTJrX2NvcmVfaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmF0aDEyayk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaC0xMjY5LXZvaWQgYXRoMTJrX2NvcmVfZGVpbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYXRoMTJrKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE1Mjg9c3RhdGljIGludCBhdGgxMmtfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTY0OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTY0OTpcdHJldCA9IGF0aDEya19jb3JlX2luaXQoYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNjUwLVx0aWYgKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk5NQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGF0aDEyayBEcml2ZXIgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gYGF0aDEya19jb3JlX2luaXRgIGlzIHRoZSBjb3JlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgY2FsbGVkIGZyb20gYm90aCBgYXRoMTJrX2FoYl9wcm9iZWAgYW5kIGBhdGgxMmtfcGNpX3Byb2JlYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkga25vdyBzeXprYWxsZXIgaXNuJiMzOTt0IGdvaW5nIHRvIGJlIGFibGUgdG8gaGl0IHRob3NlIHByb2JlcyBkaXJlY3RseS4gVGhleSByZXF1aXJlIHJlYWwgaGFyZHdhcmUgb3IgdmVyeSBzcGVjaWZpYyBlbXVsYXRlZCBkZXZpY2VzIOKAkyB0aGluZ3Mgc3l6a2FsbGVyIHR5cGljYWxseSBzdHJ1Z2dsZXMgd2l0aC4KCkJ1dCB3YWl0IGEgbWludXRlLi4uIEkgcmVjYWxsIGBzeXpfZGV2cmVzYC4gVGhhdCYjMzk7cyB0aGUga2V5ISBJZiBJIGNhbiBsZXZlcmFnZSBgc3l6X2RldnJlc2AgdG8gZmFicmljYXRlIGEgcGxhdGZvcm0gZGV2aWNlIHRoYXQgbG9va3MgbGlrZSB3aGF0IGBhdGgxMmtfYWhiX3Byb2JlYCBleHBlY3RzLCB0aGVuIHN5emthbGxlciAqbWlnaHQqIGFjdHVhbGx5IHRyaWdnZXIgdGhhdCBwcm9iZSBmdW5jdGlvbi4gSXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBhIHNob3QuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBhdGgxMmtfYWhiX3Byb2JlYCBhbmQgc2VlIHdoYXQgaXQmIzM5O3MgbG9va2luZyBmb3IuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwbGF0Zm9ybSBkZXZpY2UgcmVxdWlyZW1lbnRzIHRvIGNyYWZ0IGEgc3VjY2Vzc2Z1bCBgc3l6X2RldnJlc2AgY2FsbC4gVW5kZXJzdGFuZGluZyB0aGUgcHJvYmUmIzM5O3MgbG9naWMgaXMgdGhlIGNydWNpYWwgZmlyc3Qgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX2FoYl9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM9OTk4PWF0aDEya19haGJfZ2V0X2RldmljZV9mYW1pbHkoY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTEwMTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjEwMTk6c3RhdGljIGludCBhdGgxMmtfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTEwMjAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM9MTE4Nz1pbnQgYXRoMTJrX2FoYl9yZWdpc3Rlcl9kcml2ZXIoY29uc3QgZW51bSBhdGgxMmtfZGV2aWNlX2ZhbWlseSBkZXZpY2VfaWQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xMjA4LVx0YWhiX2RyaXZlci1cdTAwM2Vkcml2ZXIub2ZfbWF0Y2hfdGFibGUgPSBkcml2ZXItXHUwMDNlaWRfdGFibGU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjEyMDk6XHRhaGJfZHJpdmVyLVx1MDAzZXByb2JlICA9IGF0aDEya19haGJfcHJvYmU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTEyMTAtXHRhaGJfZHJpdmVyLVx1MDAzZXJlbW92ZSA9IGF0aDEya19haGJfcmVtb3ZlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc2MAoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiBgYXRoMTJrX2FoYl9wcm9iZWAsIGFzIGlmIGl0IHdlcmUgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYGF0aDEya19haGJfcHJvYmVgKioKCkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiB0aGlzIGBhdGgxMmtfYWhiX3Byb2JlYCBmdW5jdGlvbi4gSSByZWNvZ25pemUgdGhlIG5hbWUgaW1tZWRpYXRlbHkg4oCTIGl0JiMzOTtzIGdvaW5nIHRvIGJlIHRoZSBBSEIgKEFkdmFuY2VkIEhpZ2gtcGVyZm9ybWFuY2UgQnVzKSBwcm9iZSBmdW5jdGlvbiBmb3IgdGhlIGF0aDEyayB3aXJlbGVzcyBkcml2ZXIsIG5vIGRvdWJ0LiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhpcyBpcyB3aGVyZSB0aGUgc3lzdGVtIHRyaWVzIHRvIGRldGVjdCBhbmQgaW5pdGlhbGl6ZSBhbiBhdGgxMmsgZGV2aWNlIGNvbm5lY3RlZCB2aWEgdGhlIEFIQiBpbnRlcmZhY2UsIGxpa2VseSBvbiBhbiBlbWJlZGRlZCBzeXN0ZW0gb3Igc3lzdGVtLW9uLWEtY2hpcC4KCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSB0eXBpY2FsIHByb2JlIHJvdXRpbmUgc3RlcHM6IHJlc291cmNlIGFsbG9jYXRpb24sIGRldmljZSBpZGVudGlmaWNhdGlvbiwgcGVyaGFwcyBzb21lIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uLCBhbmQgZmluYWxseSwgdGhlIHJlZ2lzdHJhdGlvbiBvZiB0aGUgZGV2aWNlIHdpdGggdGhlIGtlcm5lbC4gSSBleHBlY3QgdGhlcmUgd2lsbCBiZSBjaGVja3MgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgaGFyZHdhcmUsIHByb2JhYmx5IHVzaW5nIHJlZ2lzdGVyIHJlYWRzIG92ZXIgdGhlIEFIQi4gVGhlcmUgbWlnaHQgYmUgc29tZSBwb3dlciBtYW5hZ2VtZW50IGNvbnNpZGVyYXRpb25zIGludm9sdmVkIGhlcmUgYXMgd2VsbCwgZW5hYmxpbmcgY2xvY2tzIGFuZCBwb3dlcmluZyB1cCB0aGUgZGV2aWNlLgoKSSYjMzk7bSBhbHNvIGFudGljaXBhdGluZyBzb21lIGVycm9yIGhhbmRsaW5nLiBUaGlzIGNvdWxkIGludm9sdmUgY2hlY2tpbmcgZm9yIGJ1cyBlcnJvcnMsIGRldmljZSB0aW1lb3V0cywgYW5kIHBvdGVudGlhbCBwcm9ibGVtcyBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGVycm9yIGNvZGVzIGFuZCBwb3RlbnRpYWwgcmVjb3ZlcnkgbWVjaGFuaXNtcyBpbXBsZW1lbnRlZCwgd2hpY2ggY291bGQgaW5jbHVkZSByZXRyaWVzIG9yIGV2ZW4gZGV2aWNlIHJlc2V0cy4KCkZpbmFsbHksIEkmIzM5O2xsIGJlIHNlYXJjaGluZyBmb3IgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBhdGgxMmsgZHJpdmVyIHN0YWNrLiBJIGltYWdpbmUgaXQgc2V0cyB1cCB0aGUgbmVjZXNzYXJ5IGRhdGEgc3RydWN0dXJlcywgcG9zc2libHkgY3JlYXRlcyBhIHBsYXRmb3JtIGRldmljZSwgYW5kIGxpbmtzIGl0IHdpdGggdGhlIHJlc3Qgb2YgdGhlIHdpcmVsZXNzIGRyaXZlciBzdWJzeXN0ZW0uIEkmIzM5O20ga2VlbiB0byBzZWUgdGhlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHVzZWQsIHdoZXRoZXIgaXQgdXNlcyBtdXRleGVzIG9yIHNlbWFwaG9yZXMsIHRvIGVuc3VyZSB0aHJlYWQtc2FmZSBvcGVyYXRpb24gZHVyaW5nIGluaXRpYWxpemF0aW9uLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgZGV2aWNlIGlzIGJyb3VnaHQgdXA7IHRpbWluZyBjYW4gYmUgY3JpdGljYWwgaW4gc3VjaCBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwMTk6XHRzdGF0aWMgaW50IGF0aDEya19haGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbjEwMjA6XHR7XG4xMDIxOlx0XHRlbnVtIGF0aDEya19kZXZpY2VfZmFtaWx5IGRldmljZV9pZDtcbjEwMjI6XHRcdHN0cnVjdCBhdGgxMmtfYWhiICphYl9haGI7XG4xMDIzOlx0XHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiO1xuMTAyNDpcdFx0dTMyIGFkZHI7XG4xMDI1Olx0XHRpbnQgcmV0O1xuMTAyNjpcdFxuMTAyNzpcdFx0cmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChcdTAwMjZwZGV2LVx1MDAzZWRldiwgRE1BX0JJVF9NQVNLKDMyKSk7XG4xMDI4Olx0XHRpZiAocmV0KSB7XG4xMDI5Olx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byBzZXQgMzItYml0IGNvaGVyZW50IGRtYVxcblwmIzM0Oyk7XG4xMDMwOlx0XHRcdHJldHVybiByZXQ7XG4xMDMxOlx0XHR9XG4xMDMyOlx0XG4xMDMzOlx0XHRhYiA9IGF0aDEya19jb3JlX2FsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2Yoc3RydWN0IGF0aDEya19haGIpLFxuMTAzNDpcdFx0XHRcdCAgICAgICBBVEgxMktfQlVTX0FIQik7XG4xMDM1Olx0XHRpZiAoIWFiKVxuMTAzNjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjEwMzc6XHRcbjEwMzg6XHRcdGFiX2FoYiA9IGF0aDEya19hYl90b19haGIoYWIpO1xuMTAzOTpcdFx0YWJfYWhiLVx1MDAzZWFiID0gYWI7XG4xMDQwOlx0XHRhYi1cdTAwM2VoaWYub3BzID0gXHUwMDI2YXRoMTJrX2FoYl9oaWZfb3BzO1xuMTA0MTpcdFx0YWItXHUwMDNlcGRldiA9IHBkZXY7XG4xMDQyOlx0XHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBhYik7XG4xMDQzOlx0XG4xMDQ0Olx0XHRkZXZpY2VfaWQgPSBhdGgxMmtfYWhiX2dldF9kZXZpY2VfZmFtaWx5KHBkZXYpO1xuMTA0NTpcdFx0aWYgKGRldmljZV9pZCBcdTAwM2U9IEFUSDEyS19ERVZJQ0VfRkFNSUxZX01BWCkge1xuMTA0NjpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gZ2V0IGRldmljZSBmYW1pbHk6ICVkXFxuXCYjMzQ7LCBkZXZpY2VfaWQpO1xuMTA0NzpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuMTA0ODpcdFx0XHRnb3RvIGVycl9jb3JlX2ZyZWU7XG4xMDQ5Olx0XHR9XG4xMDUwOlx0XG4xMDUxOlx0XHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX0FIQiwgXCYjMzQ7QUhCIGRldmljZSBmYW1pbHkgaWQ6ICVkXFxuXCYjMzQ7LCBkZXZpY2VfaWQpO1xuMTA1MjpcdFxuMTA1MzpcdFx0YWJfYWhiLVx1MDAzZWRldmljZV9mYW1pbHlfb3BzID0gXHUwMDI2YXRoMTJrX2FoYl9mYW1pbHlfZHJpdmVyc1tkZXZpY2VfaWRdLVx1MDAzZW9wcztcbjEwNTQ6XHRcbjEwNTU6XHRcdC8qIENhbGwgZGV2aWNlIHNwZWNpZmljIHByb2JlLiBUaGlzIGlzIHRoZSBjYWxsYmFjayB0aGF0IGNhblxuMTA1NjpcdFx0ICogYmUgdXNlZCB0byBvdmVycmlkZSBhbnkgb3BzIGluIGZ1dHVyZVxuMTA1NzpcdFx0ICogcHJvYmUgaXMgdmFsaWRhdGVkIGZvciBOVUxMIGR1cmluZyByZWdpc3RyYXRpb24uXG4xMDU4Olx0XHQgKi9cbjEwNTk6XHRcdHJldCA9IGFiX2FoYi1cdTAwM2VkZXZpY2VfZmFtaWx5X29wcy1cdTAwM2Vwcm9iZShwZGV2KTtcbjEwNjA6XHRcdGlmIChyZXQpIHtcbjEwNjE6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHByb2JlIGRldmljZTogJWRcXG5cJiMzNDssIHJldCk7XG4xMDYyOlx0XHRcdGdvdG8gZXJyX2NvcmVfZnJlZTtcbjEwNjM6XHRcdH1cbjEwNjQ6XHRcbjEwNjU6XHRcdC8qIFNldCBmaXhlZF9tZW1fcmVnaW9uIHRvIHRydWUgZm9yIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgZml4ZWQgbWVtb3J5XG4xMDY2Olx0XHQgKiByZXNlcnZhdGlvbiBmcm9tIERULiBJZiBtZW1vcnkgaXMgcmVzZXJ2ZWQgZnJvbSBEVCBmb3IgRlcsIGF0aDEyayBkcml2ZXJcbjEwNjc6XHRcdCAqIG5lZWQgbm90IHRvIGFsbG9jYXRlIG1lbW9yeS5cbjEwNjg6XHRcdCAqL1xuMTA2OTpcdFx0aWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3UzMihhYi1cdTAwM2VkZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7bWVtb3J5LXJlZ2lvblwmIzM0OywgXHUwMDI2YWRkcikpXG4xMDcwOlx0XHRcdHNldF9iaXQoQVRIMTJLX0ZMQUdfRklYRURfTUVNX1JFR0lPTiwgXHUwMDI2YWItXHUwMDNlZGV2X2ZsYWdzKTtcbjEwNzE6XHRcbjEwNzI6XHRcdHJldCA9IGF0aDEya19jb3JlX3ByZV9pbml0KGFiKTtcbjEwNzM6XHRcdGlmIChyZXQpXG4xMDc0Olx0XHRcdGdvdG8gZXJyX2NvcmVfZnJlZTtcbjEwNzU6XHRcbjEwNzY6XHRcdHJldCA9IGF0aDEya19haGJfcmVzb3VyY2VfaW5pdChhYik7XG4xMDc3Olx0XHRpZiAocmV0KVxuMTA3ODpcdFx0XHRnb3RvIGVycl9jb3JlX2ZyZWU7XG4xMDc5Olx0XG4xMDgwOlx0XHRyZXQgPSBhdGgxMmtfaGFsX3NybmdfaW5pdChhYik7XG4xMDgxOlx0XHRpZiAocmV0KVxuMTA4MjpcdFx0XHRnb3RvIGVycl9yZXNvdXJjZV9kZWluaXQ7XG4xMDgzOlx0XG4xMDg0Olx0XHRyZXQgPSBhdGgxMmtfY2VfYWxsb2NfcGlwZXMoYWIpO1xuMTA4NTpcdFx0aWYgKHJldCkge1xuMTA4NjpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gYWxsb2NhdGUgY2UgcGlwZXM6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTA4NzpcdFx0XHRnb3RvIGVycl9oYWxfc3JuZ19kZWluaXQ7XG4xMDg4Olx0XHR9XG4xMDg5Olx0XG4xMDkwOlx0XHRhdGgxMmtfYWhiX2luaXRfcW1pX2NlX2NvbmZpZyhhYik7XG4xMDkxOlx0XG4xMDkyOlx0XHRyZXQgPSBhdGgxMmtfYWhiX2NvbmZpZ3VyZV9ycHJvYyhhYik7XG4xMDkzOlx0XHRpZiAocmV0KVxuMTA5NDpcdFx0XHRnb3RvIGVycl9jZV9mcmVlO1xuMTA5NTpcdFxuMTA5NjpcdFx0cmV0ID0gYXRoMTJrX2FoYl9jb25maWdfaXJxKGFiKTtcbjEwOTc6XHRcdGlmIChyZXQpIHtcbjEwOTg6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGNvbmZpZ3VyZSBpcnE6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTA5OTpcdFx0XHRnb3RvIGVycl9ycHJvY19kZWNvbmZpZ3VyZTtcbjExMDA6XHRcdH1cbjExMDE6XHRcbjExMDI6XHRcdC8qIEludm9rZSBhcmNoX2luaXQgaGVyZSBzbyB0aGF0IGFyY2gtc3BlY2lmaWMgaW5pdCBvcGVyYXRpb25zXG4xMTAzOlx0XHQgKiBjYW4gdXRpbGl6ZSBhbHJlYWR5IGluaXRpYWxpemVkIGFiIGZpZWxkcywgc3VjaCBhcyBIQUwgU1JOR3MuXG4xMTA0Olx0XHQgKi9cbjExMDU6XHRcdHJldCA9IGFiX2FoYi1cdTAwM2VkZXZpY2VfZmFtaWx5X29wcy1cdTAwM2VhcmNoX2luaXQoYWIpO1xuMTEwNjpcdFx0aWYgKHJldCkge1xuMTEwNzpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtBSEIgYXJjaF9pbml0IGZhaWxlZCAlZFxcblwmIzM0OywgcmV0KTtcbjExMDg6XHRcdFx0Z290byBlcnJfcnByb2NfZGVjb25maWd1cmU7XG4xMTA5Olx0XHR9XG4xMTEwOlx0XG4xMTExOlx0XHRyZXQgPSBhdGgxMmtfY29yZV9pbml0KGFiKTtcbjExMTI6XHRcdGlmIChyZXQpIHtcbjExMTM6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGluaXQgY29yZTogJWRcXG5cJiMzNDssIHJldCk7XG4xMTE0Olx0XHRcdGdvdG8gZXJyX2RlaW5pdF9hcmNoO1xuMTExNTpcdFx0fVxuMTExNjpcdFxuMTExNzpcdFx0cmV0dXJuIDA7XG4xMTE4Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODcwCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYXRoMTJrIEFIQiBJbml0aWFsaXphdGlvbiBTZXF1ZW5jZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgYGF0aDEya19haGJfcHJvYmVgIGZ1bmN0aW9uIGlzIHRoZSBzdGFydGluZyBwb2ludCwgYW5kIGl0JiMzOTtzIGNhbGxpbmcgYSBzZXJpZXMgb2YgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIGluIHNlcXVlbmNlOiBgYXRoMTJrX2FoYl9yZXNvdXJjZV9pbml0YCwgYGF0aDEya19oYWxfc3JuZ19pbml0YCwgYGF0aDEya19jZV9hbGxvY19waXBlc2AsIGBhdGgxMmtfYWhiX2NvbmZpZ3VyZV9ycHJvY2AsIGBhdGgxMmtfYWhiX2NvbmZpZ19pcnFgLCBgYXJjaF9pbml0YCwgYW5kIGZpbmlzaGluZyB3aXRoIGBhdGgxMmtfY29yZV9pbml0YC4gVGhhdCBzZXF1ZW5jZSBpcyBwcmV0dHkgc3RhbmRhcmQgZm9yIGEgZHJpdmVyIGxpa2UgdGhpcy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBhdGgxMmtfYWhiX3Jlc291cmNlX2luaXRgIGxpa2VseSBoYW5kbGVzIHRoZSBtYXBwaW5nIG9mIHRoZSBJL08gbWVtb3J5IHJlZ2lvbnMuIFRoYXQmIzM5O3MgYSBrZXkgZmlyc3Qgc3RlcC4gQW5kIHRoYXQgbGVhZHMgdG8gYSB0aG91Z2h0IGFib3V0IGZ1enppbmc6IGlmIHN5emthbGxlciBpcyBjcmVhdGluZyB0aGUgcGxhdGZvcm0gZGV2aWNlLCBpdCAqY291bGQqIHByb3ZpZGUgZmFrZWQgcmVzb3VyY2VzLCBsaWtlIG1lbW9yeSByZWdpb25zLiBTb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLCBhbmQgbWlnaHQgYmVjb21lIGltcG9ydGFudC4KCkJ1dCBsb29raW5nIGF0IHRoZSBzZXF1ZW5jZSwgYGF0aDEya19haGJfY29uZmlndXJlX3Jwcm9jYCBzcGVjaWZpY2FsbHkgc3Rvb2Qgb3V0LCBiZWNhdXNlIGl0IGluZGljYXRlcyB0aGF0IHRoaXMgZGV2aWNlIGlzIGNvbmZpZ3VyaW5nIHJlbW90ZXByb2MuIFNpbmNlIHJlbW90ZXByb2MgaXMgdXNlZCBmb3Igb2ZmbG9hZGluZyBwcm9jZXNzaW5nIHRvIGEgc2VwYXJhdGUgcHJvY2Vzc29yLCBpdHMgY29uZmlndXJhdGlvbiBpcyBrZXkuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gaG93IHRoYXQgaXMgZG9uZS4gSSBzaG91bGQgZGVmaW5pdGVseSBjaGVjayBpbnRvIGBhdGgxMmtfYWhiX2NvbmZpZ3VyZV9ycHJvY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya19haGJfY29uZmlndXJlX3Jwcm9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYz04NTE9c3RhdGljIGludCBhdGgxMmtfYWhiX2Jvb3Rfcm9vdF9wZChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtODcyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzo4NzM6c3RhdGljIGludCBhdGgxMmtfYWhiX2NvbmZpZ3VyZV9ycHJvYyhzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy04NzQte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM9MTAxOT1zdGF0aWMgaW50IGF0aDEya19haGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTEwOTEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjEwOTI6XHRyZXQgPSBhdGgxMmtfYWhiX2NvbmZpZ3VyZV9ycHJvYyhhYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTEwOTMtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjcxMQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGF0aDEya19haGJfY29uZmlndXJlX3Jwcm9jYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGRvaW5nIGF0IGEgaGlnaCBsZXZlbCwgYW5kIHRoZW4gSSBjYW4gYnJlYWsgZG93biB0aGUgc3BlY2lmaWNzLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgdGhpcyBsaWtlbHkgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIGNvbmZpZ3VyaW5nIGEgcmVtb3RlIHByb2Nlc3NvciAocnByb2MpIGZvciBhbiBBdGhlcm9zIFdpLUZpIGNoaXAgdXNpbmcgdGhlIEFIQiBidXMuICBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2UgY2xvY2sgY29uZmlndXJhdGlvbiwgbWVtb3J5IG1hcHBpbmcsIGZpcm13YXJlIGxvYWRpbmcgbWF5YmUsIGFuZCBwcm9iYWJseSBzb21lIGludGVycnVwdCBzZXR1cC4gVGhlICYjMzQ7QUhCJiMzNDsgcGFydCBpcyBrZXkg4oCTIGl0IGluZGljYXRlcyBkaXJlY3QgbWVtb3J5IGFjY2VzcyBhbmQgYSBmYXN0ZXIgY29tbXVuaWNhdGlvbiBwYXRod2F5IHRoYW4gc29tZXRoaW5nIGxpa2UgYSBzdGFuZGFyZCBQQ0kgYnVzLCBtZWFuaW5nIHRoaXMgaXMgY29yZS1sZXZlbCBzdHVmZi4gSXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIGluaXRpYWxpemluZyB0aGUgaGFyZHdhcmUgdG8gcmVhZHkgaXQgZm9yIHdpcmVsZXNzIG9wZXJhdGlvbi4gVGhpcyBpcyBwcm9iYWJseSBnb2luZyB0byBiZSBwYXJ0IG9mIGFuIGVhcmx5IGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBMZXQmIzM5O3Mgc3RhcnQgcmVhZGluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODczLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NzM6XHRzdGF0aWMgaW50IGF0aDEya19haGJfY29uZmlndXJlX3Jwcm9jKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4gODc0Olx0e1xuIDg3NTpcdFx0c3RydWN0IGF0aDEya19haGIgKmFiX2FoYiA9IGF0aDEya19hYl90b19haGIoYWIpO1xuIDg3NjpcdFx0aW50IHJldDtcbiA4Nzc6XHRcbiA4Nzg6XHRcdHJldCA9IGF0aDEya19haGJfZ2V0X3Jwcm9jKGFiKTtcbiA4Nzk6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gODgwOlx0XHRcdHJldHVybiByZXQ7XG4gODgxOlx0XG4gODgyOlx0XHRyZXQgPSBhdGgxMmtfYWhiX3JlZ2lzdGVyX3Jwcm9jX25vdGlmaWVyKGFiKTtcbiA4ODM6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiA4ODQ6XHRcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShcdTAwMjZhYi1cdTAwM2VwZGV2LVx1MDAzZWRldiwgcmV0LFxuIDg4NTpcdFx0XHRcdFx0ICAgIFwmIzM0O2ZhaWxlZCB0byByZWdpc3RlciBycHJvYyBub3RpZmllclxcblwmIzM0Oyk7XG4gODg2Olx0XHRcdGdvdG8gZXJyX3B1dF9ycHJvYztcbiA4ODc6XHRcdH1cbiA4ODg6XHRcbiA4ODk6XHRcdGlmIChhYl9haGItXHUwMDNldGd0X3Jwcm9jLVx1MDAzZXN0YXRlICE9IFJQUk9DX1JVTk5JTkcpIHtcbiA4OTA6XHRcdFx0cmV0ID0gYXRoMTJrX2FoYl9ib290X3Jvb3RfcGQoYWIpO1xuIDg5MTpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gODkyOlx0XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGJvb3QgdGhlIHJlbW90ZSBwcm9jZXNzb3IgUTZcXG5cJiMzNDspO1xuIDg5MzpcdFx0XHRcdGdvdG8gZXJyX3VucmVnX25vdGlmaWVyO1xuIDg5NDpcdFx0XHR9XG4gODk1Olx0XHR9XG4gODk2Olx0XG4gODk3Olx0XHRyZXR1cm4gYXRoMTJrX2FoYl9jb25maWdfcnByb2NfaXJxKGFiKTtcbiA4OTg6XHRcbiA4OTk6XHRlcnJfdW5yZWdfbm90aWZpZXI6XG4gOTAwOlx0XHRhdGgxMmtfYWhiX3VucmVnaXN0ZXJfcnByb2Nfbm90aWZpZXIoYWIpO1xuIDkwMTpcdFxuIDkwMjpcdGVycl9wdXRfcnByb2M6XG4gOTAzOlx0XHRycHJvY19wdXQoYWJfYWhiLVx1MDAzZXRndF9ycHJvYyk7XG4gOTA0Olx0XHRyZXR1cm4gcmV0O1xuIDkwNTpcdH1cbiA5MDY6XHRcbiA5MDc6XHRzdGF0aWMgdm9pZCBhdGgxMmtfYWhiX2RlY29uZmlndXJlX3Jwcm9jKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4gOTA4Olx0e1xuIDkwOTpcdFx0c3RydWN0IGF0aDEya19haGIgKmFiX2FoYiA9IGF0aDEya19hYl90b19haGIoYWIpO1xuIDkxMDpcdFxuIDkxMTpcdFx0YXRoMTJrX2FoYl91bnJlZ2lzdGVyX3Jwcm9jX25vdGlmaWVyKGFiKTtcbiA5MTI6XHRcdHJwcm9jX3B1dChhYl9haGItXHUwMDNldGd0X3Jwcm9jKTtcbiA5MTM6XHR9XG4gOTE0Olx0XG4gOTE1Olx0c3RhdGljIGludCBhdGgxMmtfYWhiX3Jlc291cmNlX2luaXQoc3RydWN0IGF0aDEya19iYXNlICphYilcbiA5MTY6XHR7XG4gOTE3Olx0XHRzdHJ1Y3QgYXRoMTJrX2FoYiAqYWJfYWhiID0gYXRoMTJrX2FiX3RvX2FoYihhYik7XG4gOTE4Olx0XHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gYWItXHUwMDNlcGRldjtcbiA5MTk6XHRcdHN0cnVjdCByZXNvdXJjZSAqbWVtX3JlcztcbiA5MjA6XHRcdGludCByZXQ7XG4gOTIxOlx0XG4gOTIyOlx0XHRhYi1cdTAwM2VtZW0gPSBkZXZtX3BsYXRmb3JtX2dldF9hbmRfaW9yZW1hcF9yZXNvdXJjZShwZGV2LCAwLCBcdTAwMjZtZW1fcmVzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4MDEKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiA0MDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYGF0aDEya2AgQ29kZSBQYXRocyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgYXRoMTJrX2FoYl9nZXRfcnByb2NgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUgZ29hbCBpcyB0byBnZXQgYSByZW1vdGVwcm9jIGRldmljZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gc3l6a2FsbGVyIGFjdHVhbGx5IGNyZWF0ZSBhIHJlbW90ZXByb2MgZGV2aWNlIGFuZCBsaW5rIGl0IHRvIHRoZSBwbGF0Zm9ybSBkZXZpY2UsIGluIGEgd2F5IHRoYXQgd291bGQgdHJpY2sgdGhpcyBkcml2ZXIgaW50byB0aGlua2luZyBpdCYjMzk7cyBydW5uaW5nIG9uIHJlYWwgaGFyZHdhcmU/IEkmIzM5O20gaGlnaGx5IHNrZXB0aWNhbC4gVGhlIGRlcGVuZGVuY2llcyBhcmUganVzdCB0b28gbnVtZXJvdXMg4oCTIHJlbW90ZXByb2MsIG1lbW9yeSByZWdpb25zLCBpbnRlcnJ1cHRzLCB0aGUgd2hvbGUgc2hlYmFuZy4gSXQmIzM5O3Mgd2lsZGx5IGltcHJvYmFibGUgdGhhdCBzeXprYWxsZXIgY291bGQgc3VjY2Vzc2Z1bGx5IG1vY2sgKmFsbCogb2YgdGhvc2UgdG8gZXZlbiBnZXQgdG8gYGF0aDEya19jb3JlX2luaXRgLCBsZXQgYWxvbmUgdGhlIGZ1cnRoZXIgc3RhZ2Ugb2YgYGF0aDEya19jb3JlX3FtaV9maXJtd2FyZV9yZWFkeWAgd2hpY2ggcmVhbGlzdGljYWxseSBkZW1hbmRzIGFjdHVhbCBmaXJtd2FyZSBpbnRlcmFjdGlvbiBvciBhIHNvcGhpc3RpY2F0ZWQgUU1JIHNlcnZlciBtb2NrLgoKSGFuZyBvbi4uLiB3aGF0IGFib3V0IGBtYWM4MDIxMV9od3NpbWA/IFRoYXQgZW11bGF0ZXMgV2ktRmksIGJ1dCBpdCYjMzk7cyBub3QgYWN0dWFsbHkgYW4gYGF0aDEya2AgZHJpdmVyLiBTbyB0aGF0JiMzOTtzIGEgZGVhZCBlbmQuCgpJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzICphbnkqIHdheSB0byByZWFjaCBgYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlc2Agd2l0aG91dCByZWFsIGhhcmR3YXJlLiBMZXQmIzM5O3MgdHJhY2UgYmFjayBmcm9tIHRoYXQgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGF0aDEya19tYWNfc2V0dXBfcmVnaXN0ZXJgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgYXRoMTJrX21hY19od19yZWdpc3RlcmAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBhdGgxMmtfbWFjX3JlZ2lzdGVyYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYGF0aDEya19jb3JlX2h3X2dyb3VwX3N0YXJ0YCwgd2hpY2ggaXMgaW4gdHVybiBjYWxsZWQgZnJvbSBgYXRoMTJrX2NvcmVfcW1pX2Zpcm13YXJlX3JlYWR5YC4gVGhhdCYjMzk7cyB3aGVyZSB3ZSBnZXQgdG8gdGhlIGZpcm13YXJlIHJlYWRpbmVzcywgd2hpY2ggb2YgY291cnNlLCB3ZSBkb24mIzM5O3QgaGF2ZS4KCkJhc2ljYWxseSwgd2l0aG91dCB0aGUgZmlybXdhcmUgYmVpbmcgcmVhZHksIHRoaXMgd2hvbGUgc2VxdWVuY2UgaXMgdW5yZWFjaGFibGUuIEFuZCBjb25zaWRlcmluZyBgYXRoMTJrYCBpcyBhIGhhcmR3YXJlIGRyaXZlciBzcGVjaWZpY2FsbHkgZm9yIFF1YWxjb21tIFdpLUZpIDcgZGV2aWNlcywgYW5kIHN5emthbGxlciAqZGVmaW5pdGVseSogZG9lc24mIzM5O3QgZW11bGF0ZSB0aGF0IGhhcmR3YXJlLCBhbmQgUUVNVSBwcm9iYWJseSBkb2VzbiYjMzk7dCBieSBkZWZhdWx0IGVpdGhlciwgSSYjMzk7bSBwcmV0dHkgY29uZmlkZW50IHRoaXMgY29kZSBpc24mIzM5O3QgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuCgpOb3csIGEgZ2xpbW1lciBvZiBob3BlLi4uIENvdWxkIHN5emthbGxlciBwb3RlbnRpYWxseSBpbmplY3QgUU1JIG1lc3NhZ2VzIGZyb20gdXNlcnNwYWNlIHRvIHNvbWVob3cgdHJpZ2dlciBgYXRoMTJrX3FtaV9kcml2ZXJfZXZlbnRfd29ya2A/IExldCYjMzk7cyBjaGVjayBgYXRoMTJrX3FtaV9kcml2ZXJfZXZlbnRfd29ya2AuIFRoYXQmIzM5O3MgdGhlIGtleSBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM5NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM5NjU6XHRzdGF0aWMgdm9pZCBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbjM5NjY6XHR7XG4zOTY3Olx0XHRzdHJ1Y3QgYXRoMTJrX3FtaSAqcW1pID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdGgxMmtfcW1pLFxuMzk2ODpcdFx0XHRcdFx0XHQgICAgICBldmVudF93b3JrKTtcbjM5Njk6XHRcdHN0cnVjdCBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudCAqZXZlbnQ7XG4zOTcwOlx0XHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiID0gcW1pLVx1MDAzZWFiO1xuMzk3MTpcdFx0aW50IHJldDtcbjM5NzI6XHRcbjM5NzM6XHRcdHNwaW5fbG9jayhcdTAwMjZxbWktXHUwMDNlZXZlbnRfbG9jayk7XG4zOTc0Olx0XHR3aGlsZSAoIWxpc3RfZW1wdHkoXHUwMDI2cW1pLVx1MDAzZWV2ZW50X2xpc3QpKSB7XG4zOTc1Olx0XHRcdGV2ZW50ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZxbWktXHUwMDNlZXZlbnRfbGlzdCxcbjM5NzY6XHRcdFx0XHRcdFx0IHN0cnVjdCBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudCwgbGlzdCk7XG4zOTc3Olx0XHRcdGxpc3RfZGVsKFx1MDAyNmV2ZW50LVx1MDAzZWxpc3QpO1xuMzk3ODpcdFx0XHRzcGluX3VubG9jayhcdTAwMjZxbWktXHUwMDNlZXZlbnRfbG9jayk7XG4zOTc5Olx0XG4zOTgwOlx0XHRcdGlmICh0ZXN0X2JpdChBVEgxMktfRkxBR19VTlJFR0lTVEVSSU5HLCBcdTAwMjZhYi1cdTAwM2VkZXZfZmxhZ3MpKVxuMzk4MTpcdFx0XHRcdGdvdG8gc2tpcDtcbjM5ODI6XHRcbjM5ODM6XHRcdFx0c3dpdGNoIChldmVudC1cdTAwM2V0eXBlKSB7XG4zOTg0Olx0XHRcdGNhc2UgQVRIMTJLX1FNSV9FVkVOVF9TRVJWRVJfQVJSSVZFOlxuMzk4NTpcdFx0XHRcdHJldCA9IGF0aDEya19xbWlfZXZlbnRfc2VydmVyX2Fycml2ZShxbWkpO1xuMzk4NjpcdFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4zOTg3Olx0XHRcdFx0XHRzZXRfYml0KEFUSDEyS19GTEFHX1FNSV9GQUlMLCBcdTAwMjZhYi1cdTAwM2VkZXZfZmxhZ3MpO1xuMzk4ODpcdFx0XHRcdGJyZWFrO1xuMzk4OTpcdFx0XHRjYXNlIEFUSDEyS19RTUlfRVZFTlRfU0VSVkVSX0VYSVQ6XG4zOTkwOlx0XHRcdFx0c2V0X2JpdChBVEgxMktfRkxBR19DUkFTSF9GTFVTSCwgXHUwMDI2YWItXHUwMDNlZGV2X2ZsYWdzKTtcbjM5OTE6XHRcdFx0XHRicmVhaztcbjM5OTI6XHRcdFx0Y2FzZSBBVEgxMktfUU1JX0VWRU5UX1JFUVVFU1RfTUVNOlxuMzk5MzpcdFx0XHRcdHJldCA9IGF0aDEya19xbWlfZXZlbnRfbWVtX3JlcXVlc3QocW1pKTtcbjM5OTQ6XHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMzk5NTpcdFx0XHRcdFx0c2V0X2JpdChBVEgxMktfRkxBR19RTUlfRkFJTCwgXHUwMDI2YWItXHUwMDNlZGV2X2ZsYWdzKTtcbjM5OTY6XHRcdFx0XHRicmVhaztcbjM5OTc6XHRcdFx0Y2FzZSBBVEgxMktfUU1JX0VWRU5UX0ZXX01FTV9SRUFEWTpcbjM5OTg6XHRcdFx0XHRyZXQgPSBhdGgxMmtfcW1pX2V2ZW50X2xvYWRfYmRmKHFtaSk7XG4zOTk5Olx0XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjQwMDA6XHRcdFx0XHRcdHNldF9iaXQoQVRIMTJLX0ZMQUdfUU1JX0ZBSUwsIFx1MDAyNmFiLVx1MDAzZWRldl9mbGFncyk7XG40MDAxOlx0XHRcdFx0YnJlYWs7XG40MDAyOlx0XHRcdGNhc2UgQVRIMTJLX1FNSV9FVkVOVF9GV19SRUFEWTpcbjQwMDM6XHRcdFx0XHRjbGVhcl9iaXQoQVRIMTJLX0ZMQUdfUU1JX0ZBSUwsIFx1MDAyNmFiLVx1MDAzZWRldl9mbGFncyk7XG40MDA0Olx0XHRcdFx0aWYgKHRlc3RfYml0KEFUSDEyS19GTEFHX1FNSV9GV19SRUFEWV9DT01QTEVURSwgXHUwMDI2YWItXHUwMDNlZGV2X2ZsYWdzKSkge1xuNDAwNTpcdFx0XHRcdFx0aWYgKGFiLVx1MDAzZWlzX3Jlc2V0KVxuNDAwNjpcdFx0XHRcdFx0XHRhdGgxMmtfaGFsX2R1bXBfc3JuZ19zdGF0cyhhYik7XG40MDA3Olx0XG40MDA4Olx0XHRcdFx0XHRzZXRfYml0KEFUSDEyS19GTEFHX1JFQ09WRVJZLCBcdTAwMjZhYi1cdTAwM2VkZXZfZmxhZ3MpO1xuNDAwOTpcdFx0XHRcdFx0cXVldWVfd29yayhhYi1cdTAwM2V3b3JrcXVldWUsIFx1MDAyNmFiLVx1MDAzZXJlc3RhcnRfd29yayk7XG40MDEwOlx0XHRcdFx0XHRicmVhaztcbjQwMTE6XHRcdFx0XHR9XG40MDEyOlx0XG40MDEzOlx0XHRcdFx0Y2xlYXJfYml0KEFUSDEyS19GTEFHX0NSQVNIX0ZMVVNILFxuNDAxNDpcdFx0XHRcdFx0ICBcdTAwMjZhYi1cdTAwM2VkZXZfZmxhZ3MpO1xuNDAxNTpcdFx0XHRcdHJldCA9IGF0aDEya19jb3JlX3FtaV9maXJtd2FyZV9yZWFkeShhYik7XG40MDE2Olx0XHRcdFx0aWYgKCFyZXQpXG40MDE3Olx0XHRcdFx0XHRzZXRfYml0KEFUSDEyS19GTEFHX1FNSV9GV19SRUFEWV9DT01QTEVURSxcbjQwMTg6XHRcdFx0XHRcdFx0XHUwMDI2YWItXHUwMDNlZGV2X2ZsYWdzKTtcbjQwMTk6XHRcbjQwMjA6XHRcdFx0XHRicmVhaztcbjQwMjE6XHRcdFx0Y2FzZSBBVEgxMktfUU1JX0VWRU5UX0hPU1RfQ0FQOlxuNDAyMjpcdFx0XHRcdHJldCA9IGF0aDEya19xbWlfZXZlbnRfaG9zdF9jYXAocW1pKTtcbjQwMjM6XHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuNDAyNDpcdFx0XHRcdFx0c2V0X2JpdChBVEgxMktfRkxBR19RTUlfRkFJTCwgXHUwMDI2YWItXHUwMDNlZGV2X2ZsYWdzKTtcbjQwMjU6XHRcdFx0XHRicmVhaztcbjQwMjY6XHRcdFx0ZGVmYXVsdDpcbjQwMjc6XHRcdFx0XHRhdGgxMmtfd2FybihhYiwgXCYjMzQ7aW52YWxpZCBldmVudCB0eXBlOiAlZFwmIzM0OywgZXZlbnQtXHUwMDNldHlwZSk7XG40MDI4Olx0XHRcdFx0YnJlYWs7XG40MDI5Olx0XHRcdH1cbjQwMzA6XHRcbjQwMzE6XHRza2lwOlxuNDAzMjpcdFx0XHRrZnJlZShldmVudCk7XG40MDMzOlx0XHRcdHNwaW5fbG9jayhcdTAwMjZxbWktXHUwMDNlZXZlbnRfbG9jayk7XG40MDM0Olx0XHR9XG40MDM1Olx0XHRzcGluX3VubG9jayhcdTAwMjZxbWktXHUwMDNlZXZlbnRfbG9jayk7XG40MDM2Olx0fVxuNDAzNzpcdFxuNDAzODpcdGludCBhdGgxMmtfcW1pX2luaXRfc2VydmljZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuNDAzOTpcdHtcbjQwNDA6XHRcdGludCByZXQ7XG40MDQxOlx0XG40MDQyOlx0XHRtZW1zZXQoXHUwMDI2YWItXHUwMDNlcW1pLnRhcmdldCwgMCwgc2l6ZW9mKHN0cnVjdCB0YXJnZXRfaW5mbykpO1xuNDA0MzpcdFx0bWVtc2V0KFx1MDAyNmFiLVx1MDAzZXFtaS50YXJnZXRfbWVtLCAwLCBzaXplb2Yoc3RydWN0IHRhcmdldF9tZW1fY2h1bmspKTtcbjQwNDQ6XHRcdGFiLVx1MDAzZXFtaS5hYiA9IGFiO1xuNDA0NTpcdFxuNDA0NjpcdFx0YWItXHUwMDNlcW1pLnRhcmdldF9tZW1fbW9kZSA9IGFiLVx1MDAzZXRhcmdldF9tZW1fbW9kZTtcbjQwNDc6XHRcdHJldCA9IHFtaV9oYW5kbGVfaW5pdChcdTAwMjZhYi1cdTAwM2VxbWkuaGFuZGxlLCBBVEgxMktfUU1JX1JFU1BfTEVOX01BWCxcbjQwNDg6XHRcdFx0XHQgICAgICBcdTAwMjZhdGgxMmtfcW1pX29wcywgYXRoMTJrX3FtaV9tc2dfaGFuZGxlcnMpO1xuNDA0OTpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuNDA1MDpcdFx0XHRhdGgxMmtfd2FybihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGluaXRpYWxpemUgcW1pIGhhbmRsZVxcblwmIzM0Oyk7XG40MDUxOlx0XHRcdHJldHVybiByZXQ7XG40MDUyOlx0XHR9XG40MDUzOlx0XG40MDU0Olx0XHRhYi1cdTAwM2VxbWkuZXZlbnRfd3EgPSBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZShcJiMzNDthdGgxMmtfcW1pX2RyaXZlcl9ldmVudFwmIzM0OywgMCk7XG40MDU1Olx0XHRpZiAoIWFiLVx1MDAzZXFtaS5ldmVudF93cSkge1xuNDA1NjpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gYWxsb2NhdGUgd29ya3F1ZXVlXFxuXCYjMzQ7KTtcbjQwNTc6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG40MDU4Olx0XHR9XG40MDU5Olx0XG40MDYwOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZhYi1cdTAwM2VxbWkuZXZlbnRfbGlzdCk7XG40MDYxOlx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZhYi1cdTAwM2VxbWkuZXZlbnRfbG9jayk7XG40MDYyOlx0XHRJTklUX1dPUksoXHUwMDI2YWItXHUwMDNlcW1pLmV2ZW50X3dvcmssIGF0aDEya19xbWlfZHJpdmVyX2V2ZW50X3dvcmspO1xuNDA2MzpcdFxuNDA2NDpcdFx0cmV0ID0gcW1pX2FkZF9sb29rdXAoXHUwMDI2YWItXHUwMDNlcW1pLmhhbmRsZSwgUU1JX1NFUlZJQ0VfSURfV0xGVyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2MTQKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdW5kZXJzdGFuZGluZywgcmVuZGVyZWQgYXMgdGhvdWdoIGl0IHdlcmUgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRXZlbnQgSGFuZGxpbmcgaW4gdGhlIGF0aDEyayBRTUkgRnJhbWV3b3JrKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBgYXRoMTJrYCBRTUkgY29kZS4gSSYjMzk7dmUgdHJhY2tlZCBkb3duIHRoZSBgYXRoMTJrX3FtaV9tc2dfZndfcmVhZHlfY2JgIGZ1bmN0aW9uLiBNeSBtYWluIGZvY3VzIGlzIG9uIGhvdyBldmVudHMgYXJlIGhhbmRsZWQuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdGhhdCB0aGUgYEFUSDEyS19RTUlfRVZFTlRfRldfUkVBRFlgIGV2ZW50LCB3aGljaCwganVkZ2luZyBmcm9tIHRoZSBuYW1lLCBpbmRpY2F0ZXMgdGhlIGZpcm13YXJlIGlzIG5vdyByZWFkeSwgaXMgYmVpbmcgYWRkZWQgdG8gYSBsaXN0IG9yIHF1ZXVlIHdpdGhpbiB0aGlzIGNhbGxiYWNrLiBUaGlzIG11c3QgYmUgdGhlIG1lY2hhbmlzbSB0aGUgZHJpdmVyIHVzZXMgdG8gc2lnbmFsIGFuZCBtYW5hZ2UgdGhlIHN0YXRlIHRyYW5zaXRpb25zIHJlbGF0ZWQgdG8gdGhlIGZpcm13YXJlIGxvYWRpbmcgcHJvY2VzcyBhZnRlciBhIGBRTUlgIG1lc3NhZ2UgaXMgcmVjZWl2ZWQuIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgaW5zaWdodCBpbnRvIGhvdyB0aGUgZXZlbnQgaXMgZnVydGhlciBwcm9jZXNzZWQgYW5kIHV0aWxpemVkIGZvciB0aGUgb3ZlcmFsbCBjb250cm9sIGZsb3cgb2YgdGhlIGRyaXZlci4gSSBuZWVkIHRvIGxvb2sgaW50byBob3cgdGhpcyBsaXN0IGlzIGNvbnN1bWVkIG5leHQ7IGxpa2VseSB0aGVyZSYjMzk7cyBhIHByb2Nlc3NpbmcgbG9vcCBvciBhbm90aGVyIGNhbGxiYWNrIGZ1bmN0aW9uIHdhaXRpbmcgZm9yIGV2ZW50cyBvbiB0aGlzIGxpc3QgdG8gaGFuZGxlIGZ1cnRoZXIgaW5pdGlhbGl6YXRpb24gc3RlcHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya19xbWlfbXNnX2Z3X3JlYWR5X2NiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYz0zODU5PXN0YXRpYyB2b2lkIGF0aDEya19xbWlfbXNnX21lbV9yZWFkeV9jYihzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pX2hkbCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTM4NzAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjM4NzE6c3RhdGljIHZvaWQgYXRoMTJrX3FtaV9tc2dfZndfcmVhZHlfY2Ioc3RydWN0IHFtaV9oYW5kbGUgKnFtaV9oZGwsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTM4NzItXHRcdFx0XHQgICAgICAgc3RydWN0IHNvY2thZGRyX3FydHIgKnNxLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM9Mzg4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHFtaV9tc2dfaGFuZGxlciBhdGgxMmtfcW1pX21zZ19oYW5kbGVyc1tdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtMzkwMi1cdFx0LmRlY29kZWRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcW1pX3dsYW5md19md19yZWFkeV9pbmRfbXNnX3YwMSksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjM5MDM6XHRcdC5mbiA9IGF0aDEya19xbWlfbXNnX2Z3X3JlYWR5X2NiLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy0zOTA0LVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyODIKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAzODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBhdGgxMmsgUU1JIEZpcm13YXJlIFJlYWR5IENhbGxiYWNrKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgYXRoMTJrX3FtaV9tc2dfZndfcmVhZHlfY2JgLiBJdCYjMzk7cyB0cmlnZ2VyZWQgYnkgcmVjZWl2aW5nIHRoZSBgUU1JX1dMRldfRldfUkVBRFlfSU5EX1YwMWAgbWVzc2FnZSwgd2hpY2ggbWFrZXMgc2Vuc2UuIEJ1dCB0aGUga2V5IGlzIHRoYXQgdGhpcyBtZXNzYWdlIGlzIG9ubHkgcmVjZWl2ZWQgd2hlbiB0aGUgUVJUUiBzb2NrZXQgaXMgYWN0dWFsbHkgY29ubmVjdGVkIHRvIHRoZSBmaXJtd2FyZS4gVGhlIHNvY2tldCBjcmVhdGlvbiBpdHNlbGYgaGFwcGVucyBpbiBgcW1pX2hhbmRsZV9pbml0YC4KCk5vdywgdGhlIG9idmlvdXMgcXVlc3Rpb24gaXM6IGNhbiBzeXprYWxsZXIgYmUgdXNlZCB0byB0cmlnZ2VyIHRoaXMgY2FsbGJhY2s/IEl0IGNhbiBjcmVhdGUgUVJUUiBzb2NrZXRzIGFuZCBzZW5kIG1lc3NhZ2VzLCBzbyBpbiB0aGVvcnksIGlmIHN5emthbGxlciBjcmVhdGVzIGEgc29ja2V0LCB0aGVuIHNlbmRzIHRoZSBgUU1JX1dMRldfRldfUkVBRFlfSU5EX1YwMWAgbWVzc2FnZSB0byB0aGUgYXRoMTJrIGRyaXZlciYjMzk7cyBub2RlIElELCB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IHdvcmsuIFRoZSBpc3N1ZSBub3cgaXMgaG93IHRvIGtub3cgdGhpcyBub2RlIElELiBUaGUgYXRoMTJrIGRyaXZlciwgYmVpbmcgYSBRTUkgY2xpZW50LCB3aWxsIGhhdmUgYSBsb2NhbCBub2RlIElEIGFzc2lnbmVkIHRvIGl0IGJ5IHRoZSBRUlRSIGNvcmUsIGJ1dCBob3cgZG8gSSBnZXQgaXQ/CgpTaW5jZSBzeXprYWxsZXIgY2FuIHNlbmQgbWVzc2FnZXMgdG8gYW55IG5vZGUgSUQsIHRoYXQgc2VlbXMgbGlrZSBhIG5vbi1pc3N1ZS4gVGhlIGxhcmdlciBjb25jZXJuIGlzIHRoYXQgYGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlYCBtdXN0IGhhdmUgYmVlbiBjYWxsZWQgKmJlZm9yZSogdGhlIGNhbGxiYWNrIHdpbGwgZXZlciBiZSB0cmlnZ2VyZWQuIFRoYXQgZnVuY3Rpb24sIGBhdGgxMmtfcW1pX2luaXRfc2VydmljZWAgaXMgY2FsbGVkIGZyb20gYGF0aDEya19jb3JlX3NvY19jcmVhdGVgLCB3aGljaCBjb21lcyBmcm9tIGBhdGgxMmtfY29yZV9pbml0YCwgd2hpY2ggZmluYWxseSBvcmlnaW5hdGVzIGZyb20gZWl0aGVyIGBhdGgxMmtfYWhiX3Byb2JlYCBvciBgYXRoMTJrX3BjaV9wcm9iZWAuCgpTbyB3ZeKAmXJlIGJhY2sgdG8gdGhlIGRyaXZlciBwcm9iZSBmdW5jdGlvbnMsIGBhdGgxMmtfYWhiX3Byb2JlYCBhbmQgYGF0aDEya19wY2lfcHJvYmVgLiBDYW4gc3l6a2FsbGVyIGV4ZWN1dGUgYGF0aDEya19haGJfcHJvYmVgIHN1Y2Nlc3NmdWxseT8gSSBuZWVkIHRvIGZvY3VzIHRoZXJlLiBUaW1lIHRvIHJlLWV4YW1pbmUgYGF0aDEya19haGJfcHJvYmVgIHRvIHNlZSB3aGF0IG5lZWRzIHRvIGJlIGluIHBsYWNlLiBJIHJlbWVtYmVyIGl0IGNhbGxzIGBhdGgxMmtfYWhiX2dldF9ycHJvY2AuIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhpcyBjYWxsLCBhcyBpdCBpcyBvbmUgb2YgdGhlIG1vcmUgaW52b2x2ZWQgY2FsbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya19haGJfZ2V0X3Jwcm9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYz04MTM9c3RhdGljIHZvaWQgYXRoMTJrX2FoYl91bnJlZ2lzdGVyX3Jwcm9jX25vdGlmaWVyKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy04MjYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjgyNzpzdGF0aWMgaW50IGF0aDEya19haGJfZ2V0X3Jwcm9jKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTgyOC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYz04NzM9c3RhdGljIGludCBhdGgxMmtfYWhiX2NvbmZpZ3VyZV9ycHJvYyhzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtODc3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzo4Nzg6XHRyZXQgPSBhdGgxMmtfYWhiX2dldF9ycHJvYyhhYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTg3OS1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDk1CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGBhdGgxMmtfYWhiX2dldF9ycHJvY2A6CgoqKkluaXRpYWwgQXNzZXNzbWVudDogTmF2aWdhdGluZyB0aGUgUlBST0MgQWNxdWlzaXRpb24qKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIGBhdGgxMmtfYWhiX2dldF9ycHJvY2AuIEJhc2VkIG9uIHRoZSBuYW1lLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhpcyBmdW5jdGlvbiBpcyBpbnZvbHZlZCBpbiBhY3F1aXJpbmcgYSByZW1vdGUgcHJvY2Vzc29yLCBwcm9iYWJseSBvbiBhbiBBSEIgYnVzLCByZWxhdGVkIHRvIHRoZSBhdGgxMmsgd2lyZWxlc3MgZHJpdmVyLiBJJiMzOTttIGdvaW5nIHRvIGFzc3VtZSB0aGlzIGlzIGEgY3JpdGljYWwgZnVuY3Rpb24gZm9yIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIG9yIGNvbW11bmljYXRpb24sIGxpa2VseSBzZXR0aW5nIHVwIHRoZSBuZWNlc3NhcnkgaGFyZHdhcmUgcmVzb3VyY2VzLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgdGhhdCBBSEIgaW1wbGllcyBhIHBvdGVudGlhbGx5IHRpZ2h0ZXIgaW50ZWdyYXRpb24gd2l0aCB0aGUgaGFyZHdhcmUsIGEgbG93ZXItbGV2ZWwgaW50ZXJhY3Rpb24gdGhhbiBzb21ldGhpbmcgUENJLWJhc2VkLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIGRlYWxzIHdpdGggbWVtb3J5IG1hcHBpbmcsIGNsb2NrIGVuYWJsaW5nLCBpbnRlcnJ1cHQgcmVnaXN0cmF0aW9uLCBhbmQgcGVyaGFwcyBzb21lIGRldmljZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGRldGFpbHMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHJlZmVyZW5jZXMgdG8gaGFyZHdhcmUgcmVnaXN0ZXJzIG9yIGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvbmZpcm0gbXkgaW5pdGlhbCB0aG91Z2h0cy4gSSYjMzk7bSBhbHNvIGFudGljaXBhdGluZyB0aGF0IGVycm9yIGhhbmRsaW5nIHdpbGwgYmUgcHJlc2VudCwgYXMgZmFpbGluZyB0byBhY3F1aXJlIHRoZSBSUFJPQyBjb3VsZCBiZSBhIGZ1bmRhbWVudGFsIGlzc3VlIGZvciB0aGUgd2hvbGUgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGhhbmRsZSB0aGF0LiBNeSBpbnN0aW5jdCBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEga2VybmVsIGRyaXZlciBmdW5jdGlvbiwgYW5kIHRodXMgdmVyeSBjYXJlZnVsIGFib3V0IGxvY2tpbmcsIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgZ2VuZXJhbCByb2J1c3RuZXNzLiBJIHdpbGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IGhvdyB0aGV5IGRlYWwgd2l0aCBjb25jdXJyZW5jeSwgb3IgbGFjayB0aGVyZW9mLiBBbmQgZmluYWxseSwgSSB3b3VsZCBleHBlY3QgdGhhdCB0aGlzIGlzIHRoZSBlbnRyeSBwb2ludCwgb3IgYSBjb3JlIGZ1bmN0aW9uLCBmb3IgdGhlIGRldmljZSB0byBldmVuIGZ1bmN0aW9uLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgyNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODI3Olx0c3RhdGljIGludCBhdGgxMmtfYWhiX2dldF9ycHJvYyhzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuIDgyODpcdHtcbiA4Mjk6XHRcdHN0cnVjdCBhdGgxMmtfYWhiICphYl9haGIgPSBhdGgxMmtfYWJfdG9fYWhiKGFiKTtcbiA4MzA6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGFiLVx1MDAzZWRldjtcbiA4MzE6XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XG4gODMyOlx0XHRzdHJ1Y3QgcnByb2MgKnBycHJvYztcbiA4MzM6XHRcbiA4MzQ6XHRcdG5wID0gb2ZfcGFyc2VfcGhhbmRsZShkZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7cWNvbSxycHJvY1wmIzM0OywgMCk7XG4gODM1Olx0XHRpZiAoIW5wKSB7XG4gODM2Olx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBnZXQgcTZfcnByb2MgaGFuZGxlXFxuXCYjMzQ7KTtcbiA4Mzc6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gODM4Olx0XHR9XG4gODM5Olx0XG4gODQwOlx0XHRwcnByb2MgPSBycHJvY19nZXRfYnlfcGhhbmRsZShucC1cdTAwM2VwaGFuZGxlKTtcbiA4NDE6XHRcdG9mX25vZGVfcHV0KG5wKTtcbiA4NDI6XHRcdGlmICghcHJwcm9jKVxuIDg0MzpcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcdTAwMjZhYi1cdTAwM2VwZGV2LVx1MDAzZWRldiwgLUVQUk9CRV9ERUZFUixcbiA4NDQ6XHRcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIGdldCBycHJvY1xcblwmIzM0Oyk7XG4gODQ1Olx0XG4gODQ2Olx0XHRhYl9haGItXHUwMDNldGd0X3Jwcm9jID0gcHJwcm9jO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzIzOQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGF0aDEyayBEcml2ZXIgUHJvYmUgU2VxdWVuY2UqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgYXRoMTJrYCBkcml2ZXIgcHJvYmUgaXNzdWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIGFsbCBhYm91dCB0aGUgZGV2aWNlIHRyZWUgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyBoYW5kbGVkLiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoaXMgZGVwZW5kZW5jZSBvbiBhIGRldmljZSB0cmVlIG5vZGUgd2l0aCBhIGBxY29tLHJwcm9jYCBwaGFuZGxlLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGEgcmVkIGZsYWcuIFN5emthbGxlciwgd2hpbGUgYSBwb3dlcmZ1bCBmdXp6aW5nIHRvb2wsIGlzbiYjMzk7dCBkZXNpZ25lZCB0byBpbmplY3QgdGhlc2UgY29tcGxleCBkZXZpY2UgdHJlZSBzdHJ1Y3R1cmVzIOKAkyBpdCYjMzk7cyBnb2luZyB0byBzdHJ1Z2dsZSBzZXR0aW5nIHVwIHRoYXQgY3JpdGljYWwgYHFjb20scnByb2NgIGNvbm5lY3Rpb24uCgpUaGVyZWZvcmUsIEkmIzM5O20gcHJldHR5IHN1cmUgdGhhdCB3aGVuIGBhdGgxMmtfYWhiX2dldF9ycHJvY2AgaXMgY2FsbGVkLCBpdCYjMzk7cyBnb2luZyB0byBjaG9rZSB3aXRoIGFuIGAtRU5PRU5UYCBlcnJvci4gRWl0aGVyIGBkZXYtJmd0O29mX25vZGVgIHdpbGwgYmUgTlVMTCwgb3IsIGV2ZW4gaWYgaXQmIzM5O3MgdGhlcmUsIHRoYXQgcmVxdWlyZWQgYHFjb20scnByb2NgIHByb3BlcnR5IGlzIHNpbXBseSBub3QgZ29pbmcgdG8gZXhpc3QgaW4gdGhlICYjMzQ7ZmFrZSYjMzQ7IGRldmljZSB0cmVlIFN5emthbGxlciYjMzk7cyBnZW5lcmF0aW5nLgoKQW5kIGlmICp0aGF0KiBmYWlscywgYGF0aDEya19haGJfY29uZmlndXJlX3Jwcm9jYCBpcyBndWFyYW50ZWVkIHRvIGZhaWwsIGFuZCB0aGF0LCBpbiB0dXJuLCBraWxscyB0aGUgYGF0aDEya19haGJfcHJvYmVgIGNhbGwsIHByb2JhYmx5IGJlZm9yZSBpdCBldmVuIGdldHMgdG8gYGF0aDEya19jb3JlX2luaXRgLiBUaGF0IHNlcXVlbmNlIGlzIGEgZGVhZCBlbmQg4oCTIHRoZSBjb3JlIGluaXRpYWxpemF0aW9uIG5ldmVyIGV2ZW4gZXhlY3V0ZXMuIAoKQnV0LCB3YWl0Li4uIHRoZXJlJiMzOTtzIGFsc28gdGhlIFBDSSBwcm9iZSBwYXRoIHRvIGNvbnNpZGVyLiBJcyBgYXRoMTJrX3BjaV9wcm9iZWAgYWxzbyBmYWlsaW5nPyBJIG5lZWQgdG8gY2hlY2sgaWYgaXQgZGVwZW5kcyBvbiB0aGUgc2FtZSBkZXZpY2UgdHJlZSBub2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgYWhiIHBhdGggaXMgbW9yZSBwcm9uZSB0byBmYWlsdXJlLCBkdWUgdG8gdGhlIHJlbGlhbmNlIG9uIHRoYXQgcnByb2MsIGFuZCBpZiB0aGlzIGlzIGEgZ2VuZXJhbCBpc3N1ZSBvciBzcGVjaWZpYyB0byB0aGUgYWhiIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya19wY2lfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE1MDc9YXRoMTJrX2dldF9kZXZpY2VfZmFtaWx5KGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTUyNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTUyODpzdGF0aWMgaW50IGF0aDEya19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1MjktXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTgwOD1pbnQgYXRoMTJrX3BjaV9yZWdpc3Rlcl9kcml2ZXIoY29uc3QgZW51bSBhdGgxMmtfZGV2aWNlX2ZhbWlseSBkZXZpY2VfaWQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODI5LVx0cGNpX2RyaXZlci1cdTAwM2VpZF90YWJsZSA9IGRyaXZlci1cdTAwM2VpZF90YWJsZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTgzMDpcdHBjaV9kcml2ZXItXHUwMDNlcHJvYmUgPSBhdGgxMmtfcGNpX3Byb2JlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODMxLVx0cGNpX2RyaXZlci1cdTAwM2VyZW1vdmUgPSBhdGgxMmtfcGNpX3JlbW92ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyMTQKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSB3ZSBnby4uLgoKKipEaXZpbmcgaW50byBgYXRoMTJrX3BjaV9wcm9iZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHB1bGwgdXAgdGhhdCBgYXRoMTJrX3BjaV9wcm9iZWAgZnVuY3Rpb24uIEkmIzM5O3ZlIGJlZW4gbWVhbmluZyB0byByZXZpc2l0IHRoaXM7IHRoZXJlIGFyZSBhIGZldyBhc3BlY3RzIG9mIHRoZSBQQ0kgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgSSB3YW50IHRvIGNsYXJpZnkgaW4gbXkgaGVhZC4gSSBrbm93IHRoZSBiYXNpY3MsIHRoZSBlbnRyeSBwb2ludCwgdGhlIHJlc291cmNlIGFsbG9jYXRpb24sIGJ1dCBpdCYjMzk7cyB0aGUgZmluZXIgcG9pbnRzIEkmIzM5O20gYWZ0ZXIgdG9kYXkuIFJpZ2h0LCBzbyB0aGlzIGlzIHdoZXJlIHRoZSBkcml2ZXIgYmluZHMgdG8gdGhlIGRldmljZS4gSSYjMzk7bGwgZm9jdXMgb24gaG93IGl0IGhhbmRsZXMgdGhlIFBDSSBkZXZpY2Ugc3RydWN0dXJlLCB0aGUgbWVtb3J5IG1hcHBpbmcsIHRoZSBpbnRlcnJ1cHQgc2V0dXAuLi4gYWxsIHRoZSB1c3VhbCBzdXNwZWN0cy4gSSB3YW50IHRvIHNlZSBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgcG90ZW50aWFsIGVycm9ycywgdGhlIHJvYnVzdG5lc3MuIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNsb2NraW5nIHNlcXVlbmNlIGFuZCB0aGUgcG93ZXIgbWFuYWdlbWVudCByZWxhdGVkIHRvIGl0LiBMZXQgbWUgc2VlIGhvdyB0aGUgcmVnaXN0ZXIgYWNjZXNzIGlzIGltcGxlbWVudGVkLCBhbmQgaG93IGl0IGlzIGFic3RyYWN0ZWQuIEkgc3VzcGVjdCB0aGVyZSBtYXkgYmUgYSBzcGVjaWZpYyBxdWlyayBvciB0d28gaGVyZSByZWxhdGVkIHRvIGRpZmZlcmVudCBoYXJkd2FyZSByZXZpc2lvbnMgb3Igc3BlY2lmaWMgUENJIGJ1cyBjb25maWd1cmF0aW9ucywgc28gSSYjMzk7bGwgYmUgbG9va2luZyBvdXQgZm9yIHRoYXQgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUyOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTUyODpcdHN0YXRpYyBpbnQgYXRoMTJrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbjE1Mjk6XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXYpXG4xNTMwOlx0e1xuMTUzMTpcdFx0ZW51bSBhdGgxMmtfZGV2aWNlX2ZhbWlseSBkZXZpY2VfaWQ7XG4xNTMyOlx0XHRzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpO1xuMTUzMzpcdFx0c3RydWN0IGF0aDEya19iYXNlICphYjtcbjE1MzQ6XHRcdGludCByZXQ7XG4xNTM1Olx0XG4xNTM2Olx0XHRhYiA9IGF0aDEya19jb3JlX2FsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2YoKmFiX3BjaSksIEFUSDEyS19CVVNfUENJKTtcbjE1Mzc6XHRcdGlmICghYWIpIHtcbjE1Mzg6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIGFsbG9jYXRlIGF0aDEyayBiYXNlXFxuXCYjMzQ7KTtcbjE1Mzk6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xNTQwOlx0XHR9XG4xNTQxOlx0XG4xNTQyOlx0XHRhYi1cdTAwM2VkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbjE1NDM6XHRcdGFiX3BjaSA9IGF0aDEya19wY2lfcHJpdihhYik7XG4xNTQ0Olx0XHRhYl9wY2ktXHUwMDNlZGV2X2lkID0gcGNpX2Rldi1cdTAwM2VkZXZpY2U7XG4xNTQ1Olx0XHRhYl9wY2ktXHUwMDNlYWIgPSBhYjtcbjE1NDY6XHRcdGFiX3BjaS1cdTAwM2VwZGV2ID0gcGRldjtcbjE1NDc6XHRcdGFiLVx1MDAzZWhpZi5vcHMgPSBcdTAwMjZhdGgxMmtfcGNpX2hpZl9vcHM7XG4xNTQ4Olx0XHRhYi1cdTAwM2Vmd19tb2RlID0gQVRIMTJLX0ZJUk1XQVJFX01PREVfTk9STUFMO1xuMTU0OTpcdFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIGFiKTtcbjE1NTA6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmFiX3BjaS1cdTAwM2V3aW5kb3dfbG9jayk7XG4xNTUxOlx0XG4xNTUyOlx0XHRyZXQgPSBhdGgxMmtfcGNpX2NsYWltKGFiX3BjaSwgcGRldik7XG4xNTUzOlx0XHRpZiAocmV0KSB7XG4xNTU0Olx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBjbGFpbSBkZXZpY2U6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTU1NTpcdFx0XHRnb3RvIGVycl9mcmVlX2NvcmU7XG4xNTU2Olx0XHR9XG4xNTU3Olx0XG4xNTU4Olx0XHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX0JPT1QsIFwmIzM0O3BjaSBwcm9iZSAlMDR4OiUwNHggJTA0eDolMDR4XFxuXCYjMzQ7LFxuMTU1OTpcdFx0XHQgICBwZGV2LVx1MDAzZXZlbmRvciwgcGRldi1cdTAwM2VkZXZpY2UsXG4xNTYwOlx0XHRcdCAgIHBkZXYtXHUwMDNlc3Vic3lzdGVtX3ZlbmRvciwgcGRldi1cdTAwM2VzdWJzeXN0ZW1fZGV2aWNlKTtcbjE1NjE6XHRcbjE1NjI6XHRcdGFiLVx1MDAzZWlkLnZlbmRvciA9IHBkZXYtXHUwMDNldmVuZG9yO1xuMTU2MzpcdFx0YWItXHUwMDNlaWQuZGV2aWNlID0gcGRldi1cdTAwM2VkZXZpY2U7XG4xNTY0Olx0XHRhYi1cdTAwM2VpZC5zdWJzeXN0ZW1fdmVuZG9yID0gcGRldi1cdTAwM2VzdWJzeXN0ZW1fdmVuZG9yO1xuMTU2NTpcdFx0YWItXHUwMDNlaWQuc3Vic3lzdGVtX2RldmljZSA9IHBkZXYtXHUwMDNlc3Vic3lzdGVtX2RldmljZTtcbjE1NjY6XHRcbjE1Njc6XHRcdGRldmljZV9pZCA9IGF0aDEya19nZXRfZGV2aWNlX2ZhbWlseShwY2lfZGV2KTtcbjE1Njg6XHRcdGlmIChkZXZpY2VfaWQgXHUwMDNlPSBBVEgxMktfREVWSUNFX0ZBTUlMWV9NQVgpIHtcbjE1Njk6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGdldCBkZXZpY2UgZmFtaWx5IGlkXFxuXCYjMzQ7KTtcbjE1NzA6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbjE1NzE6XHRcdFx0Z290byBlcnJfcGNpX2ZyZWVfcmVnaW9uO1xuMTU3MjpcdFx0fVxuMTU3MzpcdFxuMTU3NDpcdFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19QQ0ksIFwmIzM0O1BDSSBkZXZpY2UgZmFtaWx5IGlkOiAlZFxcblwmIzM0OywgZGV2aWNlX2lkKTtcbjE1NzU6XHRcbjE1NzY6XHRcdGFiX3BjaS1cdTAwM2VkZXZpY2VfZmFtaWx5X29wcyA9IFx1MDAyNmF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbZGV2aWNlX2lkXS1cdTAwM2VvcHM7XG4xNTc3Olx0XHRhYl9wY2ktXHUwMDNlcmVnX2Jhc2UgPSBhdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzW2RldmljZV9pZF0tXHUwMDNlcmVnX2Jhc2U7XG4xNTc4Olx0XG4xNTc5Olx0XHQvKiBDYWxsIGRldmljZSBzcGVjaWZpYyBwcm9iZS4gVGhpcyBpcyB0aGUgY2FsbGJhY2sgdGhhdCBjYW5cbjE1ODA6XHRcdCAqIGJlIHVzZWQgdG8gb3ZlcnJpZGUgYW55IG9wcyBpbiBmdXR1cmVcbjE1ODE6XHRcdCAqIHByb2JlIGlzIHZhbGlkYXRlZCBmb3IgTlVMTCBkdXJpbmcgcmVnaXN0cmF0aW9uLlxuMTU4MjpcdFx0ICovXG4xNTgzOlx0XHRyZXQgPSBhYl9wY2ktXHUwMDNlZGV2aWNlX2ZhbWlseV9vcHMtXHUwMDNlcHJvYmUocGRldiwgcGNpX2Rldik7XG4xNTg0Olx0XHRpZiAocmV0KSB7XG4xNTg1Olx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBwcm9iZSBkZXZpY2U6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTU4NjpcdFx0XHRnb3RvIGVycl9wY2lfZnJlZV9yZWdpb247XG4xNTg3Olx0XHR9XG4xNTg4Olx0XG4xNTg5Olx0XHRyZXQgPSBhdGgxMmtfcGNpX21zaV9hbGxvYyhhYl9wY2kpO1xuMTU5MDpcdFx0aWYgKHJldCkge1xuMTU5MTpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gYWxsb2MgbXNpOiAlZFxcblwmIzM0OywgcmV0KTtcbjE1OTI6XHRcdFx0Z290byBlcnJfcGNpX2ZyZWVfcmVnaW9uO1xuMTU5MzpcdFx0fVxuMTU5NDpcdFxuMTU5NTpcdFx0cmV0ID0gYXRoMTJrX2NvcmVfcHJlX2luaXQoYWIpO1xuMTU5NjpcdFx0aWYgKHJldClcbjE1OTc6XHRcdFx0Z290byBlcnJfcGNpX21zaV9mcmVlO1xuMTU5ODpcdFxuMTU5OTpcdFx0cmV0ID0gYXRoMTJrX3BjaV9zZXRfaXJxX2FmZmluaXR5X2hpbnQoYWJfcGNpLCBjcHVtYXNrX29mKDApKTtcbjE2MDA6XHRcdGlmIChyZXQpIHtcbjE2MDE6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHNldCBpcnEgYWZmaW5pdHkgJWRcXG5cJiMzNDssIHJldCk7XG4xNjAyOlx0XHRcdGdvdG8gZXJyX3BjaV9tc2lfZnJlZTtcbjE2MDM6XHRcdH1cbjE2MDQ6XHRcbjE2MDU6XHRcdHJldCA9IGF0aDEya19taGlfcmVnaXN0ZXIoYWJfcGNpKTtcbjE2MDY6XHRcdGlmIChyZXQpIHtcbjE2MDc6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHJlZ2lzdGVyIG1oaTogJWRcXG5cJiMzNDssIHJldCk7XG4xNjA4Olx0XHRcdGdvdG8gZXJyX2lycV9hZmZpbml0eV9jbGVhbnVwO1xuMTYwOTpcdFx0fVxuMTYxMDpcdFxuMTYxMTpcdFx0cmV0ID0gYXRoMTJrX2hhbF9zcm5nX2luaXQoYWIpO1xuMTYxMjpcdFx0aWYgKHJldClcbjE2MTM6XHRcdFx0Z290byBlcnJfbWhpX3VucmVnaXN0ZXI7XG4xNjE0Olx0XG4xNjE1Olx0XHRyZXQgPSBhdGgxMmtfY2VfYWxsb2NfcGlwZXMoYWIpO1xuMTYxNjpcdFx0aWYgKHJldCkge1xuMTYxNzpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gYWxsb2NhdGUgY2UgcGlwZXM6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTYxODpcdFx0XHRnb3RvIGVycl9oYWxfc3JuZ19kZWluaXQ7XG4xNjE5Olx0XHR9XG4xNjIwOlx0XG4xNjIxOlx0XHRhdGgxMmtfcGNpX2luaXRfcW1pX2NlX2NvbmZpZyhhYik7XG4xNjIyOlx0XG4xNjIzOlx0XHRyZXQgPSBhdGgxMmtfcGNpX2NvbmZpZ19pcnEoYWIpO1xuMTYyNDpcdFx0aWYgKHJldCkge1xuMTYyNTpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gY29uZmlnIGlycTogJWRcXG5cJiMzNDssIHJldCk7XG4xNjI2Olx0XHRcdGdvdG8gZXJyX2NlX2ZyZWU7XG4xNjI3Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2Mjk0CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgTUhJIEludGVyZmFjZSB3aXRoIGF0aDEyayBhbmQgU3l6a2FsbGVyKioKCk9rYXksIHNvIGBhdGgxMmtfcGNpX3Byb2JlYCBpcyB3aGVyZSBpdCBhbGwgc3RhcnRzLiBJdCYjMzk7cyBjYWxsaW5nIGBhdGgxMmtfbWhpX3JlZ2lzdGVyYCwgd2hpY2ggaW5zdGFudGx5IGZsYWdzIG15IGF0dGVudGlvbi4gTUhJLCBNb2RlbSBIb3N0IEludGVyZmFjZeKApiByaWdodC4gTm93LCBjYW4gd2UgYWN0dWFsbHkgKm1vY2sqIHRoZSBNSEkgd2l0aCBTeXprYWxsZXI/IERvZXMgU3l6a2FsbGVyIGhhdmUgYSBnZW5lcmljIE1ISSBkZXZpY2UgZW11bGF0b3I/IFRoYXQmIzM5O3MgdGhlIHJlYWwgcXVlc3Rpb24uIEkgZG9uJiMzOTt0IHJlY2FsbCBzZWVpbmcgYW55dGhpbmcgbGlrZSB0aGF0IGluIGl0cyBzdGFuZGFyZCByZXBlcnRvaXJlLgoKSG1tLCBpZiBgYXRoMTJrX21oaV9yZWdpc3RlcmAgZmFpbHMsIHRoZSB3aG9sZSBwcm9iZSBiYWlscy4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIHBhdGguIEl0IG1lYW5zIHRoaXMgTUhJIHJlZ2lzdHJhdGlvbiBpcyBhIHBvdGVudGlhbCBwb2ludCBvZiBmYWlsdXJlIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCBhbmQgcG90ZW50aWFsbHkgZXhwbG9pdC4gQWxyaWdodCwgdGltZSB0byBkaXZlIGRlZXBlciBhbmQgdGFrZSBhIGNsb3NlIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBhdGgxMmtfbWhpX3JlZ2lzdGVyYC4gTmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoIHRoZSBNSEksIHdoYXQgZXJyb3JzIGNhbiBoYXBwZW4sIGFuZCBob3cgaXQgaGFuZGxlcyB0aGVtLiBUaGlzIGlzIHdoZXJlIHRoZSB2dWxuZXJhYmlsaXR5IGh1bnRpbmcgYmVnaW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMmtfbWhpX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYz0xODA9c3RhdGljIHZvaWQgYXRoMTJrX21oaV9vcF93cml0ZV9yZWcoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy0xODYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jOjE4NzppbnQgYXRoMTJrX21oaV9yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy0xODgte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmg9MzU9dm9pZCBhdGgxMmtfbWhpX3N0b3Aoc3RydWN0IGF0aDEya19wY2kgKmFyX3BjaSwgYm9vbCBpc19zdXNwZW5kKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmg6MzY6aW50IGF0aDEya19taGlfcmVnaXN0ZXIoc3RydWN0IGF0aDEya19wY2kgKmFyX3BjaSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5oLTM3LXZvaWQgYXRoMTJrX21oaV91bnJlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfcGNpICphcl9wY2kpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTUyOD1zdGF0aWMgaW50IGF0aDEya19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNjA0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNjA1Olx0cmV0ID0gYXRoMTJrX21oaV9yZWdpc3RlcihhYl9wY2kpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNjA2LVx0aWYgKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzEwNwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiBgYXRoMTJrX21oaV9yZWdpc3RlcmAsIGFzc3VtaW5nIEkgaGF2ZSBhIGRlZXAgdW5kZXJzdGFuZGluZyBvZiB3aXJlbGVzcyBkcml2ZXJzIGFuZCBNSEkgKE11bHRpLUludGVyZmFjZSBIYXJkd2FyZSkuCgoqKkRpc3NlY3RpbmcgYGF0aDEya19taGlfcmVnaXN0ZXJgIC0gQSBEZWVwIERpdmUqKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSBgYXRoMTJrX21oaV9yZWdpc3RlcmAuIE15IG1pbmQgaXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhlIGNvcmUgcHVycG9zZTogcmVnaXN0cmF0aW9uLiBUaGlzIGZ1bmN0aW9uLCBieSBpdHMgdmVyeSBuYW1lLCBpbXBsaWVzIGl0JiMzOTtzIHRoZSBnYXRld2F5IGZvciBpbmNvcnBvcmF0aW5nIHRoZSBNSEkgZnVuY3Rpb25hbGl0eSBvZiB0aGUgQXRoZXJvcyAxMmsgZHJpdmVyLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O3doYXQgZXhhY3RseSBpcyBiZWluZyByZWdpc3RlcmVkPyYjMzQ7IElzIGl0IHRoZSBNSEkgZGV2aWNlIGl0c2VsZj8gQXJlIHdlIGVzdGFibGlzaGluZyByZXNvdXJjZSBhbGxvY2F0aW9uIG9yIGludGVycnVwdCBoYW5kbGVycz8KCkkgZXhwZWN0IHRvIHNlZSB0aGUgY29kZSBoYW5kbGluZyB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgTUhJIGhhcmR3YXJlIOKAkyBtb3N0IGxpa2VseSwgaW5pdGlhbGl6aW5nIGRhdGEgc3RydWN0dXJlcywgc2V0dGluZyB1cCBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIChwcm9iYWJseSB0aHJvdWdoIERNQSBvciBzaGFyZWQgbWVtb3J5KSwgYW5kIHBvdGVudGlhbGx5IGNvbmZpZ3VyaW5nIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHJlZ2lzdGVycyBiYXNlZCBvbiB0aGUgc3BlY2lmaWMgY2FwYWJpbGl0aWVzIGFkdmVydGlzZWQgYnkgdGhlIE1ISSBjb250cm9sbGVyLiBJ4oCZbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBwb3RlbnRpYWwgaGFyZHdhcmUgdmFyaWF0aW9ucyBvciBkaWZmZXJlbnQgTUhJIGltcGxlbWVudGF0aW9ucywgYXMgd2VsbCBhcyBob3cgdGhpcyByZWdpc3RyYXRpb24gcmVsYXRlcyB0byB0aGUgbGFyZ2VyIGZyYW1ld29yayBvZiBhdGgxMmsuCgpJ4oCZbSBwYXJ0aWN1bGFybHkgY3VyaW91cyBhYm91dCB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoaXMgZnVuY3Rpb24uIEdpdmVuIHRoZSBjb21wbGV4aXRpZXMgb2YgaGFyZHdhcmUgaW50ZXJmYWNlcywgSSBhbnRpY2lwYXRlIHJvYnVzdCBjaGVja3MgZm9yIGZhaWx1cmUgY29uZGl0aW9ucyBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIHJlc291cmNlIGFsbG9jYXRpb24sIGFuZCBjb21tdW5pY2F0aW9uIHNldHVwLiBIb3cgZ3JhY2VmdWxseSBkb2VzIGl0IGhhbmRsZSBhIHNjZW5hcmlvIHdoZXJlIHRoZSBNSEkgZGV2aWNlIGlzbiYjMzk7dCByZXNwb25kaW5nIG9yIHRoZSBuZWNlc3NhcnkgcmVzb3VyY2VzIGFyZSB1bmF2YWlsYWJsZT8gRG9lcyBpdCBpbmNsdWRlIHNwZWNpZmljIGVycm9yIGNvZGVzIGFuZCBsb2dnaW5nIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXM/IFRoZSBlbGVnYW5jZSBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgZGV0ZXJtaW5lZCBieSBpdHMgYWJpbGl0eSB0byByZWNvdmVyIGZyb20gZXJyb3JzLCBhdCB0aGUgc2FtZSB0aW1lIGJlaW5nIGVmZmljaWVudC4gCgpJJiMzOTttIHByZXBhcmVkIHRvIGRpc3NlY3QgdGhlIGZ1bmN0aW9u4oCZcyBhcmd1bWVudHMgYW5kIHNjcnV0aW5pemUgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCB1c2VzLiBJJiMzOTttIGV4cGVjdGluZyB0byBsb29rIGF0IGRldGFpbHMgbGlrZSB0aGUgTUhJIGRldmljZSBwb2ludGVyLCBhbnkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHBhc3NlZCBpbiwgYW5kIHBvaW50ZXJzIHRvIHRoZSBkcml2ZXLigJlzIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUuIEl0IGlzIHZpdGFsIHRvIHNlZSBob3cgdGhlc2UgYXJndW1lbnRzIGFyZSB1c2VkIHRvIGNvbW11bmljYXRlIGluZm9ybWF0aW9uIHRvIHRoZSBNSEkgZGV2aWNlLiAKCkluIHNob3J0LCBJJiMzOTttIGV4cGVjdGluZyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUsIGEgZm91bmRhdGlvbmFsIGZ1bmN0aW9uLCB0aGF0IG11c3QgYmUgc29saWQsIGVmZmljaWVudCwgYW5kIHdlbGwtZG9jdW1lbnRlZCBpZiB0aGUgb3ZlcmFsbCBkcml2ZXIgaXMgdG8gYmUgcmVzaWxpZW50LiBMZXQmIzM5O3Mgc2VlIGhvdyB3ZWxsIHRoZXkmIzM5O3ZlIGRvbmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTg3Olx0aW50IGF0aDEya19taGlfcmVnaXN0ZXIoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSlcbiAxODg6XHR7XG4gMTg5Olx0XHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiID0gYWJfcGNpLVx1MDAzZWFiO1xuIDE5MDpcdFx0c3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY3RybDtcbiAxOTE6XHRcdHVuc2lnbmVkIGludCBib2FyZF9pZDtcbiAxOTI6XHRcdGludCByZXQ7XG4gMTkzOlx0XHRib29sIGR1YWxtYWMgPSBmYWxzZTtcbiAxOTQ6XHRcbiAxOTU6XHRcdG1oaV9jdHJsID0gbWhpX2FsbG9jX2NvbnRyb2xsZXIoKTtcbiAxOTY6XHRcdGlmICghbWhpX2N0cmwpXG4gMTk3Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDE5ODpcdFxuIDE5OTpcdFx0YWJfcGNpLVx1MDAzZW1oaV9wcmVfY2IgPSBNSElfQ0JfSU5WQUxJRDtcbiAyMDA6XHRcdGFiX3BjaS1cdTAwM2VtaGlfY3RybCA9IG1oaV9jdHJsO1xuIDIwMTpcdFx0bWhpX2N0cmwtXHUwMDNlY250cmxfZGV2ID0gYWItXHUwMDNlZGV2O1xuIDIwMjpcdFx0bWhpX2N0cmwtXHUwMDNlcmVncyA9IGFiLVx1MDAzZW1lbTtcbiAyMDM6XHRcdG1oaV9jdHJsLVx1MDAzZXJlZ19sZW4gPSBhYi1cdTAwM2VtZW1fbGVuO1xuIDIwNDpcdFx0bWhpX2N0cmwtXHUwMDNlcmRkbV9zaXplID0gYWItXHUwMDNlaHdfcGFyYW1zLVx1MDAzZXJkZG1fc2l6ZTtcbiAyMDU6XHRcbiAyMDY6XHRcdGlmIChhYi1cdTAwM2Vod19wYXJhbXMtXHUwMDNlb3RwX2JvYXJkX2lkX3JlZ2lzdGVyKSB7XG4gMjA3Olx0XHRcdGJvYXJkX2lkID1cbiAyMDg6XHRcdFx0XHRhdGgxMmtfcGNpX3JlYWQzMihhYiwgYWItXHUwMDNlaHdfcGFyYW1zLVx1MDAzZW90cF9ib2FyZF9pZF9yZWdpc3Rlcik7XG4gMjA5Olx0XHRcdGJvYXJkX2lkID0gdTMyX2dldF9iaXRzKGJvYXJkX2lkLCBPVFBfQk9BUkRfSURfTUFTSyk7XG4gMjEwOlx0XG4gMjExOlx0XHRcdGlmICghYm9hcmRfaWQgfHwgKGJvYXJkX2lkID09IE9UUF9JTlZBTElEX0JPQVJEX0lEKSkge1xuIDIxMjpcdFx0XHRcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfQk9PVCxcbiAyMTM6XHRcdFx0XHRcdCAgIFwmIzM0O2ZhaWxlZCB0byByZWFkIGJvYXJkIGlkXFxuXCYjMzQ7KTtcbiAyMTQ6XHRcdFx0fSBlbHNlIGlmIChib2FyZF9pZCBcdTAwMjYgT1RQX1ZBTElEX0RVQUxNQUNfQk9BUkRfSURfTUFTSykge1xuIDIxNTpcdFx0XHRcdGR1YWxtYWMgPSB0cnVlO1xuIDIxNjpcdFx0XHRcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfQk9PVCxcbiAyMTc6XHRcdFx0XHRcdCAgIFwmIzM0O2R1YWxtYWMgZncgc2VsZWN0ZWQgZm9yIGJvYXJkIGlkOiAleFxcblwmIzM0OywgYm9hcmRfaWQpO1xuIDIxODpcdFx0XHR9XG4gMjE5Olx0XHR9XG4gMjIwOlx0XG4gMjIxOlx0XHRpZiAoZHVhbG1hYykge1xuIDIyMjpcdFx0XHRpZiAoYWItXHUwMDNlZncuYW1zc19kdWFsbWFjX2RhdGEgXHUwMDI2XHUwMDI2IGFiLVx1MDAzZWZ3LmFtc3NfZHVhbG1hY19sZW4gXHUwMDNlIDApIHtcbiAyMjM6XHRcdFx0XHQvKiB1c2UgTUhJIGZpcm13YXJlIGZpbGUgZnJvbSBmaXJtd2FyZS1OLmJpbiAqL1xuIDIyNDpcdFx0XHRcdG1oaV9jdHJsLVx1MDAzZWZ3X2RhdGEgPSBhYi1cdTAwM2Vmdy5hbXNzX2R1YWxtYWNfZGF0YTtcbiAyMjU6XHRcdFx0XHRtaGlfY3RybC1cdTAwM2Vmd19zeiA9IGFiLVx1MDAzZWZ3LmFtc3NfZHVhbG1hY19sZW47XG4gMjI2Olx0XHRcdH0gZWxzZSB7XG4gMjI3Olx0XHRcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2R1YWxtYWMgZmlybXdhcmUgSUUgbm90IHByZXNlbnQgaW4gZmlybXdhcmUtTi5iaW5cXG5cJiMzNDspO1xuIDIyODpcdFx0XHRcdHJldCA9IC1FTk9FTlQ7XG4gMjI5Olx0XHRcdFx0Z290byBmcmVlX2NvbnRyb2xsZXI7XG4gMjMwOlx0XHRcdH1cbiAyMzE6XHRcdH0gZWxzZSB7XG4gMjMyOlx0XHRcdGlmIChhYi1cdTAwM2Vmdy5hbXNzX2RhdGEgXHUwMDI2XHUwMDI2IGFiLVx1MDAzZWZ3LmFtc3NfbGVuIFx1MDAzZSAwKSB7XG4gMjMzOlx0XHRcdFx0LyogdXNlIE1ISSBmaXJtd2FyZSBmaWxlIGZyb20gZmlybXdhcmUtTi5iaW4gKi9cbiAyMzQ6XHRcdFx0XHRtaGlfY3RybC1cdTAwM2Vmd19kYXRhID0gYWItXHUwMDNlZncuYW1zc19kYXRhO1xuIDIzNTpcdFx0XHRcdG1oaV9jdHJsLVx1MDAzZWZ3X3N6ID0gYWItXHUwMDNlZncuYW1zc19sZW47XG4gMjM2Olx0XHRcdH0gZWxzZSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NTkxCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKk5hdmlnYXRpbmcgdGhlIGBhYi0mZ3Q7ZncuYW1zc19kYXRhYCBDb250ZXh0KioKCk9rYXksIEkmIzM5O20gdHJhY2luZyB0aGlzIGFjY2VzczogYGFiLSZndDtmdy5hbXNzX2RhdGFgLiBJbW1lZGlhdGVseSwgbXkgbWVudGFsIG1hcCBraWNrcyBpbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBgYWItJmd0O2Z3YCBwb2ludGVyIGdldHMgcG9wdWxhdGVkLiBNeSBndXQgZmVlbGluZyBpcyBzb21ldGhpbmcgd2l0aGluIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgcGVyaGFwcyBkdXJpbmcgdGhlIHNldHVwIHBoYXNlIG9mIHRoZSBmaXJtd2FyZS4gSXMgaXQgYGF0aDEya19jb3JlX3ByZV9pbml0YCBvciBzb21ldGhpbmcgc2ltaWxhcj8KCldhaXQsIG5vLiBXYXNuJiMzOTt0IGBhdGgxMmtfY29yZV9wcmVfaW5pdGAgY2FsbGVkICpiZWZvcmUqIGBhdGgxMmtfbWhpX3JlZ2lzdGVyYD8gWWVzLCBJIHJlbWVtYmVyLiBTbywgSSBuZWVkIHRvIHpvb20gaW4gb24gd2hhdCBoYXBwZW5zIGR1cmluZyB0aGF0IHByZS1pbml0aWFsaXphdGlvbiBzdGFnZS4gTGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBmdW5jdGlvbiBgYXRoMTJrX2NvcmVfcHJlX2luaXRgIGJlY2F1c2UgdGhhdCYjMzk7cyBtb3N0IGxpa2VseSB3aGVyZSB0aGUgcmVsZXZhbnQgZGF0YSBpcyBiZWluZyBlc3RhYmxpc2hlZC4gVGltZSB0byBkaWcgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya19jb3JlX3ByZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYz0xMDE5PXN0YXRpYyBpbnQgYXRoMTJrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTA3MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MTA3MjpcdHJldCA9IGF0aDEya19jb3JlX3ByZV9pbml0KGFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTA3My1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM9MTc4NT1FWFBPUlRfU1lNQk9MKGF0aDEya19jb3JlX2dldF9tZW1vcnlfbW9kZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0xNzg2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6MTc4NzppbnQgYXRoMTJrX2NvcmVfcHJlX2luaXQoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTE3ODgte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5oPTEyNjY9dm9pZCBhdGgxMmtfY29yZV9od19ncm91cF9jbGVhbnVwKHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5oOjEyNjc6aW50IGF0aDEya19jb3JlX3ByZV9pbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmgtMTI2OC1pbnQgYXRoMTJrX2NvcmVfaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmF0aDEyayk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xNTI4PXN0YXRpYyBpbnQgYXRoMTJrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1OTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE1OTU6XHRyZXQgPSBhdGgxMmtfY29yZV9wcmVfaW5pdChhYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1OTYtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTQ5OAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgYGF0aDEya19jb3JlX3ByZV9pbml0YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ3JhYiBgYXRoMTJrX2NvcmVfcHJlX2luaXRgIGFuZCBnZXQgYSBmZWVsIGZvciB3aGF0JiMzOTtzIGdvaW5nIG9uLiBUaGlzIGZ1bmN0aW9uIG5hbWUgc3Ryb25nbHkgc3VnZ2VzdHMgdGhpcyBpcyBhIHByZWxpbWluYXJ5IGluaXRpYWxpemF0aW9uIHN0YWdlLCBwcm9iYWJseSBjcml0aWNhbCBmb3Igc2V0dGluZyB1cCB0aGUgaGFyZHdhcmUgYW5kIHByZXBhcmluZyBpdCBmb3Igb3BlcmF0aW9uLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgZXNzZW50aWFsIGNvbmZpZ3VyYXRpb24gc3RlcHMsIHBvc3NpYmx5IHJlZ2lzdGVyIGFjY2Vzc2VzLCBwb3dlciBtYW5hZ2VtZW50IGNvbnNpZGVyYXRpb25zLCBhbmQgcG90ZW50aWFsbHkgc29tZSBiYXNpYyBoYXJkd2FyZSBkaXNjb3ZlcnkuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucywgYXMgdGhlIHNlcXVlbmNlIGlzIG9mdGVuIGNydWNpYWwgaW4gdGhlc2UgbG93LWxldmVsIGluaXRpYWxpemF0aW9ucy4gSSYjMzk7bGwgYWxzbyBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgZXJyb3IgaGFuZGxpbmcgb3IgZmFsbGJhY2sgbWVjaGFuaXNtcywgYXMgYW55IGluaXRpYWxpemF0aW9uIHJvdXRpbmUgbXVzdCBiZSByb2J1c3QuIFVuZGVyc3RhbmRpbmcgd2hhdCYjMzk7cyBoYXBwZW5pbmcgKmJlZm9yZSogdGhlIG1haW4gZHJpdmVyIGxvZ2ljIGtpY2tzIGluIGlzIHZpdGFsIGZvciB0cm91Ymxlc2hvb3RpbmcgbGF0ZXIgb24sIGFuZCBjYW4gaW5mb3JtIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBkb3duIHRoZSBsaW5lLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc4NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzg3Olx0aW50IGF0aDEya19jb3JlX3ByZV9pbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4xNzg4Olx0e1xuMTc4OTpcdFx0Y29uc3Qgc3RydWN0IGF0aDEya19tZW1fcHJvZmlsZV9iYXNlZF9wYXJhbSAqcGFyYW07XG4xNzkwOlx0XG4xNzkxOlx0XHRwYXJhbSA9IFx1MDAyNmF0aDEya19tZW1fcHJvZmlsZV9iYXNlZF9wYXJhbVthYi1cdTAwM2V0YXJnZXRfbWVtX21vZGVdO1xuMTc5MjpcdFx0YWItXHUwMDNlcHJvZmlsZV9wYXJhbSA9IHBhcmFtO1xuMTc5MzpcdFx0YXRoMTJrX2Z3X21hcChhYik7XG4xNzk0Olx0XG4xNzk1Olx0XHRyZXR1cm4gMDtcbjE3OTY6XHR9XG4xNzk3Olx0XG4xNzk4Olx0c3RhdGljIGludCBhdGgxMmtfY29yZV9wYW5pY19oYW5kbGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4xNzk5Olx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkYXRhKVxuMTgwMDpcdHtcbjE4MDE6XHRcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBjb250YWluZXJfb2YobmIsIHN0cnVjdCBhdGgxMmtfYmFzZSxcbjE4MDI6XHRcdFx0XHRcdFx0ICAgICAgcGFuaWNfbmIpO1xuMTgwMzpcdFxuMTgwNDpcdFx0cmV0dXJuIGF0aDEya19oaWZfcGFuaWNfaGFuZGxlcihhYik7XG4xODA1Olx0fVxuMTgwNjpcdFxuMTgwNzpcdHN0YXRpYyBpbnQgYXRoMTJrX2NvcmVfcGFuaWNfbm90aWZpZXJfcmVnaXN0ZXIoc3RydWN0IGF0aDEya19iYXNlICphYilcbjE4MDg6XHR7XG4xODA5Olx0XHRhYi1cdTAwM2VwYW5pY19uYi5ub3RpZmllcl9jYWxsID0gYXRoMTJrX2NvcmVfcGFuaWNfaGFuZGxlcjtcbjE4MTA6XHRcbjE4MTE6XHRcdHJldHVybiBhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoXHUwMDI2cGFuaWNfbm90aWZpZXJfbGlzdCxcbjE4MTI6XHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2YWItXHUwMDNlcGFuaWNfbmIpO1xuMTgxMzpcdH1cbjE4MTQ6XHRcbjE4MTU6XHRzdGF0aWMgdm9pZCBhdGgxMmtfY29yZV9wYW5pY19ub3RpZmllcl91bnJlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4xODE2Olx0e1xuMTgxNzpcdFx0YXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoXHUwMDI2cGFuaWNfbm90aWZpZXJfbGlzdCxcbjE4MTg6XHRcdFx0XHRcdFx0IFx1MDAyNmFiLVx1MDAzZXBhbmljX25iKTtcbjE4MTk6XHR9XG4xODIwOlx0XG4xODIxOlx0c3RhdGljIGlubGluZVxuMTgyMjpcdGJvb2wgYXRoMTJrX2NvcmVfaHdfZ3JvdXBfY3JlYXRlX3JlYWR5KHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnKVxuMTgyMzpcdHtcbjE4MjQ6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2YWctXHUwMDNlbXV0ZXgpO1xuMTgyNTpcdFxuMTgyNjpcdFx0cmV0dXJuIChhZy1cdTAwM2VudW1fcHJvYmVkID09IGFnLVx1MDAzZW51bV9kZXZpY2VzKTtcbjE4Mjc6XHR9XG4xODI4Olx0XG4xODI5Olx0c3RhdGljIHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmF0aDEya19jb3JlX2h3X2dyb3VwX2FsbG9jKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4xODMwOlx0e1xuMTgzMTpcdFx0c3RydWN0IGF0aDEya19od19ncm91cCAqYWc7XG4xODMyOlx0XHRpbnQgY291bnQgPSAwO1xuMTgzMzpcdFxuMTgzNDpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZhdGgxMmtfaHdfZ3JvdXBfbXV0ZXgpO1xuMTgzNTpcdFxuMTgzNjpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShhZywgXHUwMDI2YXRoMTJrX2h3X2dyb3VwX2xpc3QsIGxpc3QpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNTg5CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMjExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYXRoMTJrIEZpcm13YXJlIE1hcHBpbmcgYW5kIE1ISSBSZWdpc3RyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBhdGgxMmtfZndfbWFwYCwgd2hpY2ggSSBrbm93IGhhbmRsZXMgZmlybXdhcmUgbWFwcGluZy4gQnV0IHdoYXQmIzM5O3MgcmVhbGx5IGNhdGNoaW5nIG15IGF0dGVudGlvbiBpcyB0aGF0IGBhdGgxMmtfbWhpX3JlZ2lzdGVyYCBjYWxscyBgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXJgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgZG9lcyBzeXprYWxsZXIgZXZlbiAqZW11bGF0ZSogTUhJPyBObywgcmlnaHQ/IEkmIzM5O20gcHJldHR5IHN1cmUgaXQgZG9lc24mIzM5O3QuCgpTbywgaWYgc3l6a2FsbGVyICpkb2VzbiYjMzk7dCogaGF2ZSBhbiBNSEkgZW11bGF0b3IsIGBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcmAgaXMgZ29pbmcgdG8gYmUgdHJ5aW5nIHRvIHRhbGsgdG8gYSBkZXZpY2UgdmlhIGl0cyBQQ0kgbWVtb3J5LW1hcHBlZCByZWdpc3RlcnMsIGBtaGlfY3RybC0mZ3Q7cmVnc2AuIEkga25vdyB0aGF0IGlmIHN5emthbGxlciBzZXRzIHVwIGEgZmFrZSBQQ0kgZGV2aWNlLCBpdCAqY291bGQqIHByb3ZpZGUgdGhvc2UgZmFrZSBtZW1vcnkgcmVnaW9ucy4gQnV0IE1ISSBpcyBhIGJpdCBtb3JlIGludm9sdmVkLCBpc24mIzM5O3QgaXQ/IFdlIG5lZWQgYSBzcGVjaWZpYyBzdGF0ZSBtYWNoaW5lIGFuZCB0aG9zZSBwZXNreSBpbnRlcnJ1cHRzIHRvIGdldCB0aGUgZGV2aWNlIGludG8gYW4gYE1ISV9SRUFEWWAgc3RhdGUuIFdpdGhvdXQgYSByZWFsIGRldmljZSBvciBhIGN1c3RvbSBlbXVsYXRvciBmb3IgTUhJLCBgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXJgIGlzIGxpa2VseSB0byB0aW1lIG91dCBvciBmYWlsIG91dHJpZ2h0LgoKSGFuZyBvbi4uLiBJJiMzOTttIG1pc3Npbmcgc29tZXRoaW5nIGhlcmUuIGBhdGgxMmtfbWhpX3JlZ2lzdGVyYCBjYWxscyBgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXJgLCBidXQgSSBkb24mIzM5O3QgcmVjYWxsIGl0IHdhaXRpbmcgZm9yIHRoZSBkZXZpY2UgdG8gYWN0dWFsbHkgKmJlY29tZSogcmVhZHkuIEkgbmVlZCB0byB0YWtlIGFub3RoZXIgbG9vayBhdCBgYXRoMTJrX21oaV9yZWdpc3RlcmAgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3Qgb3Zlcmxvb2tlZCBzb21ldGhpbmcgY3J1Y2lhbC4gR290dGEgZ28gYmFjayBhbmQgY2hlY2sgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIzNzpcdFx0XHRcdC8qIHVzZSB0aGUgb2xkIHNlcGFyYXRlIG1oaS5iaW4gTUhJIGZpcm13YXJlIGZpbGUgKi9cbiAyMzg6XHRcdFx0XHRhdGgxMmtfY29yZV9jcmVhdGVfZmlybXdhcmVfcGF0aChhYiwgQVRIMTJLX0FNU1NfRklMRSxcbiAyMzk6XHRcdFx0XHRcdFx0XHRcdCBhYl9wY2ktXHUwMDNlYW1zc19wYXRoLFxuIDI0MDpcdFx0XHRcdFx0XHRcdFx0IHNpemVvZihhYl9wY2ktXHUwMDNlYW1zc19wYXRoKSk7XG4gMjQxOlx0XHRcdFx0bWhpX2N0cmwtXHUwMDNlZndfaW1hZ2UgPSBhYl9wY2ktXHUwMDNlYW1zc19wYXRoO1xuIDI0MjpcdFx0XHR9XG4gMjQzOlx0XHR9XG4gMjQ0Olx0XG4gMjQ1Olx0XHRyZXQgPSBhdGgxMmtfbWhpX2dldF9tc2koYWJfcGNpKTtcbiAyNDY6XHRcdGlmIChyZXQpIHtcbiAyNDc6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGdldCBtc2kgZm9yIG1oaVxcblwmIzM0Oyk7XG4gMjQ4Olx0XHRcdGdvdG8gZnJlZV9jb250cm9sbGVyO1xuIDI0OTpcdFx0fVxuIDI1MDpcdFxuIDI1MTpcdFx0aWYgKCF0ZXN0X2JpdChBVEgxMktfUENJX0ZMQUdfTVVMVElfTVNJX1ZFQ1RPUlMsIFx1MDAyNmFiX3BjaS1cdTAwM2VmbGFncykpXG4gMjUyOlx0XHRcdG1oaV9jdHJsLVx1MDAzZWlycV9mbGFncyA9IElSUUZfU0hBUkVEIHwgSVJRRl9OT0JBTEFOQ0lORztcbiAyNTM6XHRcbiAyNTQ6XHRcdG1oaV9jdHJsLVx1MDAzZWlvdmFfc3RhcnQgPSAwO1xuIDI1NTpcdFx0bWhpX2N0cmwtXHUwMDNlaW92YV9zdG9wID0gYWJfcGNpLVx1MDAzZWRtYV9tYXNrO1xuIDI1NjpcdFx0bWhpX2N0cmwtXHUwMDNlc2JsX3NpemUgPSBTWl81MTJLO1xuIDI1NzpcdFx0bWhpX2N0cmwtXHUwMDNlc2VnX2xlbiA9IFNaXzUxMks7XG4gMjU4Olx0XHRtaGlfY3RybC1cdTAwM2VmYmNfZG93bmxvYWQgPSB0cnVlO1xuIDI1OTpcdFx0bWhpX2N0cmwtXHUwMDNlcnVudGltZV9nZXQgPSBhdGgxMmtfbWhpX29wX3J1bnRpbWVfZ2V0O1xuIDI2MDpcdFx0bWhpX2N0cmwtXHUwMDNlcnVudGltZV9wdXQgPSBhdGgxMmtfbWhpX29wX3J1bnRpbWVfcHV0O1xuIDI2MTpcdFx0bWhpX2N0cmwtXHUwMDNlc3RhdHVzX2NiID0gYXRoMTJrX21oaV9vcF9zdGF0dXNfY2I7XG4gMjYyOlx0XHRtaGlfY3RybC1cdTAwM2VyZWFkX3JlZyA9IGF0aDEya19taGlfb3BfcmVhZF9yZWc7XG4gMjYzOlx0XHRtaGlfY3RybC1cdTAwM2V3cml0ZV9yZWcgPSBhdGgxMmtfbWhpX29wX3dyaXRlX3JlZztcbiAyNjQ6XHRcbiAyNjU6XHRcdHJldCA9IG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyKG1oaV9jdHJsLCBhYi1cdTAwM2Vod19wYXJhbXMtXHUwMDNlbWhpX2NvbmZpZyk7XG4gMjY2Olx0XHRpZiAocmV0KSB7XG4gMjY3Olx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byByZWdpc3RlciB0byBtaGkgYnVzLCBlcnIgPSAlZFxcblwmIzM0OywgcmV0KTtcbiAyNjg6XHRcdFx0Z290byBmcmVlX2NvbnRyb2xsZXI7XG4gMjY5Olx0XHR9XG4gMjcwOlx0XG4gMjcxOlx0XHRyZXR1cm4gMDtcbiAyNzI6XHRcbiAyNzM6XHRmcmVlX2NvbnRyb2xsZXI6XG4gMjc0Olx0XHRtaGlfZnJlZV9jb250cm9sbGVyKG1oaV9jdHJsKTtcbiAyNzU6XHRcdGFiX3BjaS1cdTAwM2VtaGlfY3RybCA9IE5VTEw7XG4gMjc2Olx0XHRyZXR1cm4gcmV0O1xuIDI3NzpcdH1cbiAyNzg6XHRcbiAyNzk6XHR2b2lkIGF0aDEya19taGlfdW5yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpKVxuIDI4MDpcdHtcbiAyODE6XHRcdHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2N0cmwgPSBhYl9wY2ktXHUwMDNlbWhpX2N0cmw7XG4gMjgyOlx0XG4gMjgzOlx0XHRtaGlfdW5yZWdpc3Rlcl9jb250cm9sbGVyKG1oaV9jdHJsKTtcbiAyODQ6XHRcdGtmcmVlKG1oaV9jdHJsLVx1MDAzZWlycSk7XG4gMjg1Olx0XHRtaGlfZnJlZV9jb250cm9sbGVyKG1oaV9jdHJsKTtcbiAyODY6XHRcdGFiX3BjaS1cdTAwM2VtaGlfY3RybCA9IE5VTEw7XG4gMjg3Olx0fVxuIDI4ODpcdFxuIDI4OTpcdHN0YXRpYyBjaGFyICphdGgxMmtfbWhpX3N0YXRlX3RvX3N0cihlbnVtIGF0aDEya19taGlfc3RhdGUgbWhpX3N0YXRlKVxuIDI5MDpcdHtcbiAyOTE6XHRcdHN3aXRjaCAobWhpX3N0YXRlKSB7XG4gMjkyOlx0XHRjYXNlIEFUSDEyS19NSElfSU5JVDpcbiAyOTM6XHRcdFx0cmV0dXJuIFwmIzM0O0lOSVRcJiMzNDs7XG4gMjk0Olx0XHRjYXNlIEFUSDEyS19NSElfREVJTklUOlxuIDI5NTpcdFx0XHRyZXR1cm4gXCYjMzQ7REVJTklUXCYjMzQ7O1xuIDI5NjpcdFx0Y2FzZSBBVEgxMktfTUhJX1BPV0VSX09OOlxuIDI5NzpcdFx0XHRyZXR1cm4gXCYjMzQ7UE9XRVJfT05cJiMzNDs7XG4gMjk4Olx0XHRjYXNlIEFUSDEyS19NSElfUE9XRVJfT0ZGOlxuIDI5OTpcdFx0XHRyZXR1cm4gXCYjMzQ7UE9XRVJfT0ZGXCYjMzQ7O1xuIDMwMDpcdFx0Y2FzZSBBVEgxMktfTUhJX1BPV0VSX09GRl9LRUVQX0RFVjpcbiAzMDE6XHRcdFx0cmV0dXJuIFwmIzM0O1BPV0VSX09GRl9LRUVQX0RFVlwmIzM0OztcbiAzMDI6XHRcdGNhc2UgQVRIMTJLX01ISV9GT1JDRV9QT1dFUl9PRkY6XG4gMzAzOlx0XHRcdHJldHVybiBcJiMzNDtGT1JDRV9QT1dFUl9PRkZcJiMzNDs7XG4gMzA0Olx0XHRjYXNlIEFUSDEyS19NSElfU1VTUEVORDpcbiAzMDU6XHRcdFx0cmV0dXJuIFwmIzM0O1NVU1BFTkRcJiMzNDs7XG4gMzA2Olx0XHRjYXNlIEFUSDEyS19NSElfUkVTVU1FOlxuIDMwNzpcdFx0XHRyZXR1cm4gXCYjMzQ7UkVTVU1FXCYjMzQ7O1xuIDMwODpcdFx0Y2FzZSBBVEgxMktfTUhJX1RSSUdHRVJfUkRETTpcbiAzMDk6XHRcdFx0cmV0dXJuIFwmIzM0O1RSSUdHRVJfUkRETVwmIzM0OztcbiAzMTA6XHRcdGNhc2UgQVRIMTJLX01ISV9SRERNX0RPTkU6XG4gMzExOlx0XHRcdHJldHVybiBcJiMzNDtSRERNX0RPTkVcJiMzNDs7XG4gMzEyOlx0XHRkZWZhdWx0OlxuIDMxMzpcdFx0XHRyZXR1cm4gXCYjMzQ7VU5LTk9XTlwmIzM0OztcbiAzMTQ6XHRcdH1cbiAzMTU6XHR9O1xuIDMxNjpcdFxuIDMxNzpcdHN0YXRpYyB2b2lkIGF0aDEya19taGlfc2V0X3N0YXRlX2JpdChzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpLFxuIDMxODpcdFx0XHRcdFx0ICAgICBlbnVtIGF0aDEya19taGlfc3RhdGUgbWhpX3N0YXRlKVxuIDMxOTpcdHtcbiAzMjA6XHRcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBhYl9wY2ktXHUwMDNlYWI7XG4gMzIxOlx0XG4gMzIyOlx0XHRzd2l0Y2ggKG1oaV9zdGF0ZSkge1xuIDMyMzpcdFx0Y2FzZSBBVEgxMktfTUhJX0lOSVQ6XG4gMzI0Olx0XHRcdHNldF9iaXQoQVRIMTJLX01ISV9JTklULCBcdTAwMjZhYl9wY2ktXHUwMDNlbWhpX3N0YXRlKTtcbiAzMjU6XHRcdFx0YnJlYWs7XG4gMzI2Olx0XHRjYXNlIEFUSDEyS19NSElfREVJTklUOlxuIDMyNzpcdFx0XHRjbGVhcl9iaXQoQVRIMTJLX01ISV9JTklULCBcdTAwMjZhYl9wY2ktXHUwMDNlbWhpX3N0YXRlKTtcbiAzMjg6XHRcdFx0YnJlYWs7XG4gMzI5Olx0XHRjYXNlIEFUSDEyS19NSElfUE9XRVJfT046XG4gMzMwOlx0XHRcdHNldF9iaXQoQVRIMTJLX01ISV9QT1dFUl9PTiwgXHUwMDI2YWJfcGNpLVx1MDAzZW1oaV9zdGF0ZSk7XG4gMzMxOlx0XHRcdGJyZWFrO1xuIDMzMjpcdFx0Y2FzZSBBVEgxMktfTUhJX1BPV0VSX09GRjpcbiAzMzM6XHRcdGNhc2UgQVRIMTJLX01ISV9QT1dFUl9PRkZfS0VFUF9ERVY6XG4gMzM0Olx0XHRjYXNlIEFUSDEyS19NSElfRk9SQ0VfUE9XRVJfT0ZGOlxuIDMzNTpcdFx0XHRjbGVhcl9iaXQoQVRIMTJLX01ISV9QT1dFUl9PTiwgXHUwMDI2YWJfcGNpLVx1MDAzZW1oaV9zdGF0ZSk7XG4gMzM2Olx0XHRcdGNsZWFyX2JpdChBVEgxMktfTUhJX1RSSUdHRVJfUkRETSwgXHUwMDI2YWJfcGNpLVx1MDAzZW1oaV9zdGF0ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMDAyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBBbmFseXNpcyBvZiB0aGUgTUhJIERldmljZSBTdGFydHVwIFNlcXVlbmNlKioKCk9rYXksIHNvIGBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcmAgcmVnaXN0ZXJzIHRoZSBjb250cm9sbGVyIOKAkyB0aGF0IG11Y2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBCdXQgdGhlIGNydWNpYWwgcXVlc3Rpb24gbmFnczogd2hlcmUgaW4gdGhlIGNvZGUgaXMgdGhlIGFjdHVhbCBNSEkgZGV2aWNlIHBvd2VyZWQgb24/IFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIHBpZWNlIEkmIzM5O20gbWlzc2luZy4gR2l2ZW4gdGhlIG5hbWUsIG15IGludHVpdGlvbiBzYXlzIHRoZSByZWFsIHdvcmsgcHJvYmFibHkgaGFwcGVucyBpbiBgYXRoMTJrX21oaV9zdGFydGAuIEkgbmVlZCB0byBkaXZlIGludG8gdGhhdCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0byB2ZXJpZnkgbXkgdGhvdWdodCBwcm9jZXNzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgaHVuY2ggaXMgY29ycmVjdCwgb3IgaWYgdGhlcmUmIzM5O3MgYW5vdGhlciBsb2NhdGlvbiB0byBpbnZlc3RpZ2F0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX21oaV9zdGFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM9NDA2PXN0YXRpYyBpbnQgYXRoMTJrX21oaV9zZXRfc3RhdGUoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTQ4MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM6NDgyOmludCBhdGgxMmtfbWhpX3N0YXJ0KHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2kpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTQ4My17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuaD0yMD1lbnVtIGF0aDEya19taGlfc3RhdGUge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmgtMzMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5oOjM0OmludCBhdGgxMmtfbWhpX3N0YXJ0KHN0cnVjdCBhdGgxMmtfcGNpICphcl9wY2kpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuaC0zNS12b2lkIGF0aDEya19taGlfc3RvcChzdHJ1Y3QgYXRoMTJrX3BjaSAqYXJfcGNpLCBib29sIGlzX3N1c3BlbmQpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTQyOD1pbnQgYXRoMTJrX3BjaV9wb3dlcl91cChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTQ0Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTQ0NzpcdHJldCA9IGF0aDEya19taGlfc3RhcnQoYWJfcGNpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTQ0OC1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2NzcKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgUG93ZXItVXAgU2VxdWVuY2Ugb2YgdGhlIGF0aDEyayBQQ0kgRHJpdmVyKioKCkFscmlnaHQsIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBwb3dlci11cCBzZXF1ZW5jZSBvZiB0aGUgYGF0aDEya2AgZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgUENJLWJhc2VkIGRldmljZXMuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgYXRoMTJrX3BjaV9wb3dlcl91cGAgaXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciB0aGF0IHByb2Nlc3MuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIHRoaXMgZnVuY3Rpb24sIHNvIEkgbm90ZSB0aGF0IGl0IGNhbGxzIGBhdGgxMmtfbWhpX3N0YXJ0YC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZzsgaXQgc3VnZ2VzdHMgYSBtb2R1bGFyIGFwcHJvYWNoLCBsaWtlbHkgaW5kaWNhdGluZyB0aGF0IHRoZSBNSEkgKHByZXN1bWFibHkgTW9iaWxlIEhvc3QgSW50ZXJmYWNlKSBjb21wb25lbnQgaGFuZGxlcyB0aGUgY29tbXVuaWNhdGlvbiBhc3BlY3RzIGR1cmluZyBwb3dlci11cC4KCkJ1dCB0aGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGVyZSBpcyBgYXRoMTJrX3BjaV9wb3dlcl91cGAgaXRzZWxmIGJlaW5nIGNhbGxlZCBmcm9tPyBJIG5lZWQgdG8gdHJhY2UgYmFjayB0aGUgY2FsbCBzdGFjayB0byBzZWUgdGhlIGJyb2FkZXIgY29udGV4dC4gSXMgaXQgY2FsbGVkIGRpcmVjdGx5IGZyb20gdGhlIFBDSSBwcm9iZSBmdW5jdGlvbj8gSXMgaXQgYmVpbmcgY2FsbGVkIGZyb20gYSBwb3dlciBtYW5hZ2VtZW50IGNhbGxiYWNrPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgcG93ZXItdXAgcHJvY2VzcyBhbmQgcG90ZW50aWFsIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIGRyaXZlci4gRGV0ZXJtaW5pbmcgdGhpcyBjb250ZXh0IGlzIHRoZSBjcml0aWNhbCBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya19wY2lfcG93ZXJfdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTEzMTY9c3RhdGljIHZvaWQgYXRoMTJrX3BjaV9jb3JlZHVtcF9kb3dubG9hZChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTQyNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTQyODppbnQgYXRoMTJrX3BjaV9wb3dlcl91cChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNDI5LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE0ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaGlmX29wcyBhdGgxMmtfcGNpX2hpZl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNDg4LVx0LnBvd2VyX2Rvd24gPSBhdGgxMmtfcGNpX3Bvd2VyX2Rvd24sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE0ODk6XHQucG93ZXJfdXAgPSBhdGgxMmtfcGNpX3Bvd2VyX3VwLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNDkwLVx0LnN1c3BlbmQgPSBhdGgxMmtfcGNpX2hpZl9zdXNwZW5kLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmg9MTc0PWludCBhdGgxMmtfcGNpX3N0YXJ0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaDoxNzU6aW50IGF0aDEya19wY2lfcG93ZXJfdXAoc3RydWN0IGF0aDEya19iYXNlICphYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5oLTE3Ni12b2lkIGF0aDEya19wY2lfcG93ZXJfZG93bihzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBib29sIGlzX3N1c3BlbmQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDQ5OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgYGhpZl9vcHNgIENhbGxiYWNrKioKCkFscmlnaHQsIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBzZWN0aW9uIG9mIGNvZGUsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7QWgsIHRoaXMgaXMgYW4gYGhpZl9vcHNgIGNhbGxiYWNrLiYjMzQ7IFRoYXQgaW1tZWRpYXRlbHkgc2V0cyB0aGUgc3RhZ2UuIE5vdywgdGhlIG5leHQgY3J1Y2lhbCBxdWVzdGlvbiBwb3BzIHVwOiBXaGVyZSB0aGUgaGVsbCBpcyBgcG93ZXJfdXBgIGJlaW5nIGNhbGxlZD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBncmFwaCwgZXNwZWNpYWxseSBhcm91bmQgdGhlc2UgY2FsbGJhY2sgc3RydWN0dXJlcywgaXMgcGFyYW1vdW50LiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoaXMgcG9pbnQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIHRyaWdnZXJpbmcgaXQuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgaW5zaWdodHMgd2lsbCBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cG93ZXJfdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jPTMyND1zdGF0aWMgdm9pZCBhdGgxMmtfYWhiX3N0b3Aoc3RydWN0IGF0aDEya19iYXNlICphYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTMzMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MzM0OnN0YXRpYyBpbnQgYXRoMTJrX2FoYl9wb3dlcl91cChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zMzUte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM9NzA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTJrX2hpZl9vcHMgYXRoMTJrX2FoYl9oaWZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtNzEzLVx0Lm1hcF9zZXJ2aWNlX3RvX3BpcGUgPSBhdGgxMmtfYWhiX21hcF9zZXJ2aWNlX3RvX3BpcGUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjcxNDpcdC5wb3dlcl91cCA9IGF0aDEya19haGJfcG93ZXJfdXAsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTcxNS1cdC5wb3dlcl9kb3duID0gYXRoMTJrX2FoYl9wb3dlcl9kb3duLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jPTE4MT1pbnQgYXRoMTJrX2NvcmVfcmVzdW1lX2Vhcmx5KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMTg5LVx0cmVpbml0X2NvbXBsZXRpb24oXHUwMDI2YWItXHUwMDNlcmVzdGFydF9jb21wbGV0ZWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6MTkwOlx0cmV0ID0gYXRoMTJrX2hpZl9wb3dlcl91cChhYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0xOTEtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jPTgxNT1zdGF0aWMgaW50IGF0aDEya19jb3JlX3NvY19jcmVhdGUoc3RydWN0IGF0aDEya19iYXNlICphYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy04MzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYzo4MzI6XHRyZXQgPSBhdGgxMmtfaGlmX3Bvd2VyX3VwKGFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTgzMy1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYz0xNjc5PXN0YXRpYyB2b2lkIGF0aDEya19jb3JlX3Jlc2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0xNzY0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6MTc2NTpcdFx0YXRoMTJrX2hpZl9wb3dlcl91cChhYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0xNzY2LVx0XHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX0JPT1QsIFwmIzM0O3Jlc2V0IHN0YXJ0ZWRcXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5oPTYyND1zdHJ1Y3QgYXRoMTJrIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaC03NjktXHRzdHJ1Y3QgYXRoMTJrX2Z3X3N0YXRzIGZ3X3N0YXRzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmg6NzcwOlx0dW5zaWduZWQgbG9uZyBsYXN0X3R4X3Bvd2VyX3VwZGF0ZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5oLTc3MS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oPTEyPXN0cnVjdCBhdGgxMmtfaGlmX29wcyB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaC0xOC1cdHZvaWQgKCpzdG9wKShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmg6MTk6XHRpbnQgKCpwb3dlcl91cCkoc3RydWN0IGF0aDEya19iYXNlICphYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oLTIwLVx0dm9pZCAoKnBvd2VyX2Rvd24pKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGJvb2wgaXNfc3VzcGVuZCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaD0xMzA9c3RhdGljIGlubGluZSB2b2lkIGF0aDEya19oaWZfd3JpdGUzMihzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCB1MzIgYWRkcmVzcyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oLTEzNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmg6MTM2OnN0YXRpYyBpbmxpbmUgaW50IGF0aDEya19oaWZfcG93ZXJfdXAoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmgtMTM3LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmg6MTM4Olx0aWYgKCFhYi1cdTAwM2VoaWYub3BzLVx1MDAzZXBvd2VyX3VwKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaC0xMzktXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmgtMTQwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaDoxNDE6XHRyZXR1cm4gYWItXHUwMDNlaGlmLm9wcy1cdTAwM2Vwb3dlcl91cChhYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oLTE0Mi19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYz01NDcxPWludCBhdGgxMmtfbWFjX29wX2dldF90eHBvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtNTUwOC1cdFx0XHRtc2Vjc190b19qaWZmaWVzKEFUSDEyS19QREVWX1RYX1BPV0VSX1JFRlJFU0hfVElNRV9NU0VDUykgJiM0MztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM6NTUwOTpcdFx0XHRcdFx0IGFyLVx1MDAzZWxhc3RfdHhfcG93ZXJfdXBkYXRlKSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtNTUxMC1cdFx0Z290byBzZW5kX3R4X3Bvd2VyO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtNTUzMS1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmFyLVx1MDAzZWRhdGFfbG9jayk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jOjU1MzI6XHRhci1cdTAwM2VsYXN0X3R4X3Bvd2VyX3VwZGF0ZSA9IGppZmZpZXM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jLTU1MzMtXHRhdGgxMmtfZndfc3RhdHNfcmVzZXQoYXIpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM9NDA2PXN0YXRpYyBpbnQgYXRoMTJrX21oaV9zZXRfc3RhdGUoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTQyMC1cdGNhc2UgQVRIMTJLX01ISV9JTklUOlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYzo0MjE6XHRcdHJldCA9IG1oaV9wcmVwYXJlX2Zvcl9wb3dlcl91cChhYl9wY2ktXHUwMDNlbWhpX2N0cmwpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy00MjItXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtNDM4LVx0XHQgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM6NDM5Olx0XHRyZXQgPSBtaGlfc3luY19wb3dlcl91cChhYl9wY2ktXHUwMDNlbWhpX2N0cmwpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy00NDAtXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTMxNj1zdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2NvcmVkdW1wX2Rvd25sb2FkKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNDI3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNDI4OmludCBhdGgxMmtfcGNpX3Bvd2VyX3VwKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE0Mjkte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTQ4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19oaWZfb3BzIGF0aDEya19wY2lfaGlmX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE0ODgtXHQucG93ZXJfZG93biA9IGF0aDEya19wY2lfcG93ZXJfZG93bixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTQ4OTpcdC5wb3dlcl91cCA9IGF0aDEya19wY2lfcG93ZXJfdXAsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE0OTAtXHQuc3VzcGVuZCA9IGF0aDEya19wY2lfaGlmX3N1c3BlbmQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaD0xNzQ9aW50IGF0aDEya19wY2lfc3RhcnQoc3RydWN0IGF0aDEya19iYXNlICphYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5oOjE3NTppbnQgYXRoMTJrX3BjaV9wb3dlcl91cChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmgtMTc2LXZvaWQgYXRoMTJrX3BjaV9wb3dlcl9kb3duKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGJvb2wgaXNfc3VzcGVuZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MDc3CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBhdGgxMmsgRHJpdmVyIEluaXRpYWxpemF0aW9uIFBhdGgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCB0aGUgY3JpdGljYWwgZnVuY3Rpb24gYGF0aDEya19tYWNfc2V0dXBfY2hhbm5lbHNfcmF0ZXNgIGlzIHVucmVhY2hhYmxlIGluIHRoaXMgZW11bGF0ZWQgZW52aXJvbm1lbnQuIFRoZSBjYWxsIGNoYWluIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGBhdGgxMmtfY29yZV9pbml0YCBraWNrcyBldmVyeXRoaW5nIG9mZiwgY2FsbGluZyBgYXRoMTJrX2NvcmVfc29jX2NyZWF0ZWAsIHdoaWNoIHRoZW4gZGl2ZXMgaW50byB0aGUgcG93ZXItdXAgc2VxdWVuY2Ugd2l0aCBgYXRoMTJrX2hpZl9wb3dlcl91cGAuIFRoaXMgbGVhZHMgdG8gYGF0aDEya19wY2lfcG93ZXJfdXBgLCBhbmQgdWx0aW1hdGVseSBgYXRoMTJrX21oaV9zdGFydGAsIHdoaWNoIHJlbGllcyBvbiBgbWhpX3N5bmNfcG93ZXJfdXBgLgoKSGVyZSYjMzk7cyB0aGUgcHJvYmxlbTogYG1oaV9zeW5jX3Bvd2VyX3VwYCBpcyBkZXNpZ25lZCB0byB3YWl0IGZvciB0aGUgTUhJIGRldmljZSB0byBiZWNvbWUgcmVhZHksIGJ1dCBiZWNhdXNlIHdlJiMzOTtyZSBpbiBhIHZpcnR1YWxpemF0aW9uIHNldHVwIOKAkyBzcGVjaWZpY2FsbHksIHdpdGggc3l6a2FsbGVyIOKAkyB0aGUgTUhJIGRldmljZSBpc24mIzM5O3QgYWN0dWFsbHkgZW11bGF0ZWQuICBUaGlzIG1lYW5zIHRoYXQgYG1oaV9zeW5jX3Bvd2VyX3VwYCB3aWxsIGluZXZpdGFibHkgdGltZSBvdXQgb3IgZmFpbCB3aXRoIGFuIGVycm9yLgoKVGhlIHJpcHBsZSBlZmZlY3QgaXMgY2xlYXI6IGEgZmFpbHVyZSBpbiBgbWhpX3N5bmNfcG93ZXJfdXBgIGltbWVkaWF0ZWx5IGNhc2NhZGVzIHVwd2FyZHMsIGNhdXNpbmcgYGF0aDEya19taGlfc3RhcnRgLCBgYXRoMTJrX3BjaV9wb3dlcl91cGAsIGBhdGgxMmtfY29yZV9zb2NfY3JlYXRlYCwgYW5kIHVsdGltYXRlbHkgYGF0aDEya19jb3JlX2luaXRgIHRvIGFsbCBmYWlsLiBUaGlzIGVhcmx5IGFib3J0aW9uIG9mIHRoZSBpbml0aWFsaXphdGlvbiBwcmV2ZW50cyB1cyBmcm9tIGV2ZXIgcmVhY2hpbmcgYGF0aDEya19jb3JlX3FtaV9maXJtd2FyZV9yZWFkeWAsIHRodXMgYGF0aDEya19jb3JlX2h3X2dyb3VwX3N0YXJ0YCwgdGhlbiBgYXRoMTJrX21hY19yZWdpc3RlcmAsIGBhdGgxMmtfbWFjX2h3X3JlZ2lzdGVyYCwgYGF0aDEya19tYWNfc2V0dXBfcmVnaXN0ZXJgIGFuZCBtb3N0IGltcG9ydGFudGx5IGBhdGgxMmtfbWFjX3NldHVwX2NoYW5uZWxzX3JhdGVzYC4KClNvLCB0aGUgY29kZSBpbiBgYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlc2AgaXMgY29tcGxldGVseSBkZWFkIGNvZGUgaW4gdGhpcyBlbnZpcm9ubWVudCwgZ2l2ZW4gdGhlIGxhY2sgb2YgcHJvcGVyIE1ISSBlbXVsYXRpb24uIFRoZXJlZm9yZSwgSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYGZhbHNlYCBmb3IgdGhpcyB0YXJnZXQuIEl0JiMzOTtzIGEgd2FzdGUgb2YgcmVzb3VyY2VzIHRvIHRhcmdldCB0aGF0IGZ1bmN0aW9uLCBhdCBsZWFzdCBpbiB0aGlzIHNwZWNpZmljIHNjZW5hcmlvLgoKQmVmb3JlIEkgY29tbWl0IHRvIHRoaXMsIHRob3VnaCwgSSYjMzk7bSBnb2luZyB0byBkbyBhIHF1aWNrIHNjYW4gb2YgdGhlIGNvZGUgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSAqb3RoZXIqIHdheSB0byByZWFjaCBgYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlc2AuIEdvdHRhIGJlIHRob3JvdWdoLCBhZnRlciBhbGwhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya19tYWNfc2V0dXBfY2hhbm5lbHNfcmF0ZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jPTE0MTg2PXN0YXRpYyB2b2lkIGF0aDEya19tYWNfdXBkYXRlXzVfOV9naHpfY2hfbGlzdChzdHJ1Y3QgYXRoMTJrICphcixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jLTE0MjA1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYzoxNDIwNjpzdGF0aWMgaW50IGF0aDEya19tYWNfc2V0dXBfY2hhbm5lbHNfcmF0ZXMoc3RydWN0IGF0aDEyayAqYXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jLTE0MjA3LVx0XHRcdFx0XHQgICB1MzIgc3VwcG9ydGVkX2JhbmRzLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM9MTQ3NDM9c3RhdGljIGludCBhdGgxMmtfbWFjX3NldHVwX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMmsgKmFyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTQ3NTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jOjE0NzU2Olx0cmV0ID0gYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlcyhhcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTQ3NTctXHRcdFx0XHRcdCAgICAgIGNhcC1cdTAwM2VzdXBwb3J0ZWRfYmFuZHMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NTMyCgkJCQkJCQlvdXRwdXQ6IDE2MAoJCQkJCQkJdGhvdWdodHM6IDIwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbnJlYWNoYWJsZSBDb2RlIFBhdGggQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBjb2RlIHBhdGgsIHNwZWNpZmljYWxseSB0aGUgc2VjdGlvbiBzdGFydGluZyB3aXRoIGBhdGgxMmtfbWFjX3NldHVwX3JlZ2lzdGVyYCwgaXMgY29tcGxldGVseSBkZWFkLiBJJiMzOTt2ZSB0cmFjZWQgdGhlIGNhbGwgY2hhaW4sIGFuZCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7dmUgZm91bmQ6IGBhdGgxMmtfbWFjX3NldHVwX3JlZ2lzdGVyYCBpcyBvbmx5IGV2ZXIgaW52b2tlZCBmcm9tIGBhdGgxMmtfbWFjX2h3X3JlZ2lzdGVyYC4gIGBhdGgxMmtfbWFjX2h3X3JlZ2lzdGVyYCBpcywgaW4gdHVybiwgb25seSBjYWxsZWQgZnJvbSBgYXRoMTJrX21hY19yZWdpc3RlcmAuICBUaGF0IGZ1bmN0aW9uIGlzIG9ubHkgaW52b2tlZCBieSBgYXRoMTJrX2NvcmVfaHdfZ3JvdXBfc3RhcnRgLCB3aGljaCBpcyBvbmx5IGNhbGxlZCBmcm9tIGBhdGgxMmtfY29yZV9xbWlfZmlybXdhcmVfcmVhZHlgLiBBbmQsIGNyaXRpY2FsbHksIGBhdGgxMmtfY29yZV9xbWlfZmlybXdhcmVfcmVhZHlgIGlzIG9ubHkgdHJpZ2dlcmVkIHdoZW4gdGhlIGZpcm13YXJlIGlzIGFjdHVhbGx5IHJlYWR5LCB1c2luZyB0aGUgUU1JIGludGVyZmFjZS4KCkdpdmVuIHRoZSBjb250ZXh0LCB0aGUgZmlybXdhcmUgaXNuJiMzOTt0IHByZXNlbnQsIGFuZCB0aGUgTUhJIGluaXRpYWxpemF0aW9uIGZhaWxlZC4gIFRoZXJlZm9yZSwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIGVudGlyZSBzZXF1ZW5jZSDigJMgYW5kIHRodXMsIHRoZSBjYWxsIHRvIGBhdGgxMmtfbWFjX3NldHVwX3JlZ2lzdGVyYCDigJMgd2lsbCAqbmV2ZXIqIGJlIGV4ZWN1dGVkLiBHaXZlbiB0aGVzZSBjb25zdHJhaW50cywgdGhlcmUmIzM5O3Mgbm8gd2F5IHRvIG1lYW5pbmdmdWxseSBmdXp6IHRoaXMsIHNvIEkgd2lsbCBtYXJrIHRoaXMgcGF0aCBhcyBub3Qgd29ydGggZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBtb2RpZmllZCBjb2RlIGlzIGxvY2F0ZWQgaW4gdGhlIGF0aDEyayBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFF1YWxjb21tIFdpLUZpIDcgaGFyZHdhcmUgKFBDSWUgb3IgQUhCKSBhbmQgZmlybXdhcmUgdG8gaW5pdGlhbGl6ZS4gVGhlIGRyaXZlciByZWxpZXMgb24gdGhlIE1vZGVtIEhvc3QgSW50ZXJmYWNlIChNSEkpIGFuZCBRdWFsY29tbSBNZXNzYWdlIEludGVyZmFjZSAoUU1JKSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBmaXJtd2FyZS4gSW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRpb24sIHRoZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZmFpbHMgZWFybHkgZHVyaW5nIE1ISSBwb3dlci11cCAoYG1oaV9zeW5jX3Bvd2VyX3VwYCksIG1lYW5pbmcgdGhlIGZpcm13YXJlIHJlYWR5IGV2ZW50IGlzIG5ldmVyIHRyaWdnZXJlZC4gQ29uc2VxdWVudGx5LCB0aGUgTUFDIHJlZ2lzdHJhdGlvbiBwYXRoIChgYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlc2ApIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBtb2RpZmllZCBjb2RlIGlzIGxvY2F0ZWQgaW4gdGhlIGF0aDEyayBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFF1YWxjb21tIFdpLUZpIDcgaGFyZHdhcmUgKFBDSWUgb3IgQUhCKSBhbmQgZmlybXdhcmUgdG8gaW5pdGlhbGl6ZS4gVGhlIGRyaXZlciByZWxpZXMgb24gdGhlIE1vZGVtIEhvc3QgSW50ZXJmYWNlIChNSEkpIGFuZCBRdWFsY29tbSBNZXNzYWdlIEludGVyZmFjZSAoUU1JKSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBmaXJtd2FyZS4gSW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRpb24sIHRoZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZmFpbHMgZWFybHkgZHVyaW5nIE1ISSBwb3dlci11cCAoYG1oaV9zeW5jX3Bvd2VyX3VwYCksIG1lYW5pbmcgdGhlIGZpcm13YXJlIHJlYWR5IGV2ZW50IGlzIG5ldmVyIHRyaWdnZXJlZC4gQ29uc2VxdWVudGx5LCB0aGUgTUFDIHJlZ2lzdHJhdGlvbiBwYXRoIChgYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlc2ApIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTQ6MTQuOTMwNjk5NDc4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5NjgzNzYyNTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBtb2RpZmllZCBjb2RlIGlzIGxvY2F0ZWQgaW4gdGhlIGF0aDEyayBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFF1YWxjb21tIFdpLUZpIDcgaGFyZHdhcmUgKFBDSWUgb3IgQUhCKSBhbmQgZmlybXdhcmUgdG8gaW5pdGlhbGl6ZS4gVGhlIGRyaXZlciByZWxpZXMgb24gdGhlIE1vZGVtIEhvc3QgSW50ZXJmYWNlIChNSEkpIGFuZCBRdWFsY29tbSBNZXNzYWdlIEludGVyZmFjZSAoUU1JKSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBmaXJtd2FyZS4gSW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRpb24sIHRoZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZmFpbHMgZWFybHkgZHVyaW5nIE1ISSBwb3dlci11cCAoYG1oaV9zeW5jX3Bvd2VyX3VwYCksIG1lYW5pbmcgdGhlIGZpcm13YXJlIHJlYWR5IGV2ZW50IGlzIG5ldmVyIHRyaWdnZXJlZC4gQ29uc2VxdWVudGx5LCB0aGUgTUFDIHJlZ2lzdHJhdGlvbiBwYXRoIChgYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlc2ApIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNDoxNC45MzA3MDU4NThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MjcwMTYzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg4NzY0YzVlZTU4ZWFjYmQwODI4Nzg4MTcyYWY1ODQwOGNhMDNhYzhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMSAxNzoxNDoxMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuY1xcbmluZGV4IGEwOTI4ODkwNjcxYWMuLjU0NjhhOGQyZDVkNTYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmNcXG5AQCAtMTQyNzUsNiArMTQyNzUsNyBAQCBzdGF0aWMgaW50IGF0aDEya19tYWNfc2V0dXBfY2hhbm5lbHNfcmF0ZXMoc3RydWN0IGF0aDEyayAqYXIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHNpemVvZihhdGgxMmtfNmdoel9jaGFubmVscyksIEdGUF9LRVJORUwpO1xcbiBcXHRcXHRcXHRpZiAoIWNoYW5uZWxzKSB7XFxuIFxcdFxcdFxcdFxcdGtmcmVlKGFyLVxcdTAwM2VtYWMuc2JhbmRzW05MODAyMTFfQkFORF8yR0haXS5jaGFubmVscyk7XFxuK1xcdFxcdFxcdFxcdGFyLVxcdTAwM2VtYWMuc2JhbmRzW05MODAyMTFfQkFORF8yR0haXS5jaGFubmVscyA9IE5VTEw7XFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHRcXHRcXHR9XFxuIFxcbkBAIC0xNDMyNSw3ICsxNDMyNiw5IEBAIHN0YXRpYyBpbnQgYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlcyhzdHJ1Y3QgYXRoMTJrICphcixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgR0ZQX0tFUk5FTCk7XFxuIFxcdFxcdFxcdGlmICghY2hhbm5lbHMpIHtcXG4gXFx0XFx0XFx0XFx0a2ZyZWUoYXItXFx1MDAzZW1hYy5zYmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLmNoYW5uZWxzKTtcXG4rXFx0XFx0XFx0XFx0YXItXFx1MDAzZW1hYy5zYmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLmNoYW5uZWxzID0gTlVMTDtcXG4gXFx0XFx0XFx0XFx0a2ZyZWUoYXItXFx1MDAzZW1hYy5zYmFuZHNbTkw4MDIxMV9CQU5EXzZHSFpdLmNoYW5uZWxzKTtcXG4rXFx0XFx0XFx0XFx0YXItXFx1MDAzZW1hYy5zYmFuZHNbTkw4MDIxMV9CQU5EXzZHSFpdLmNoYW5uZWxzID0gTlVMTDtcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdFxcdFxcdH1cXG4gXFxuQEAgLTE0MzY1LDcgKzE0MzY4LDcgQEAgc3RhdGljIGludCBhdGgxMmtfbWFjX3NldHVwX2NoYW5uZWxzX3JhdGVzKHN0cnVjdCBhdGgxMmsgKmFyLFxcbiBcXHRcXHRcXHRcXHRcXHRrZnJlZShhci1cXHUwMDNlbWFjLnNiYW5kc1tOTDgwMjExX0JBTkRfMkdIWl0uY2hhbm5lbHMpO1xcbiBcXHRcXHRcXHRcXHRcXHRhci1cXHUwMDNlbWFjLnNiYW5kc1tOTDgwMjExX0JBTkRfMkdIWl0uY2hhbm5lbHMgPSBOVUxMO1xcbiBcXHRcXHRcXHRcXHRcXHRrZnJlZShhci1cXHUwMDNlbWFjLnNiYW5kc1tOTDgwMjExX0JBTkRfNkdIWl0uY2hhbm5lbHMpO1xcbi1cXHRcXHRcXHRcXHRcXHRhci1cXHUwMDNlbWFjLnNiYW5kc1tOTDgwMjExX0JBTkRfMkdIWl0uY2hhbm5lbHMgPSBOVUxMO1xcbitcXHRcXHRcXHRcXHRcXHRhci1cXHUwMDNlbWFjLnNiYW5kc1tOTDgwMjExX0JBTkRfNkdIWl0uY2hhbm5lbHMgPSBOVUxMO1xcbiBcXHRcXHRcXHRcXHRcXHRrZnJlZShjaGFubmVscyk7XFxuIFxcdFxcdFxcdFxcdFxcdGJhbmQtXFx1MDAzZWNoYW5uZWxzID0gTlVMTDtcXG4gXFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTQ6MTUuNDk0NjQ1OTA0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTM5MTE5Nzk4OTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBtb2RpZmllZCBjb2RlIGlzIGxvY2F0ZWQgaW4gdGhlIGF0aDEyayBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFF1YWxjb21tIFdpLUZpIDcgaGFyZHdhcmUgKFBDSWUgb3IgQUhCKSBhbmQgZmlybXdhcmUgdG8gaW5pdGlhbGl6ZS4gVGhlIGRyaXZlciByZWxpZXMgb24gdGhlIE1vZGVtIEhvc3QgSW50ZXJmYWNlIChNSEkpIGFuZCBRdWFsY29tbSBNZXNzYWdlIEludGVyZmFjZSAoUU1JKSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBmaXJtd2FyZS4gSW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRpb24sIHRoZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZmFpbHMgZWFybHkgZHVyaW5nIE1ISSBwb3dlci11cCAoYG1oaV9zeW5jX3Bvd2VyX3VwYCksIG1lYW5pbmcgdGhlIGZpcm13YXJlIHJlYWR5IGV2ZW50IGlzIG5ldmVyIHRyaWdnZXJlZC4gQ29uc2VxdWVudGx5LCB0aGUgTUFDIHJlZ2lzdHJhdGlvbiBwYXRoIChgYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlc2ApIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4ODc2NGM1ZWU1OGVhY2JkMDgyODc4ODE3MmFmNTg0MDhjYTAzYWM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAxNzoxNDoxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jXG5pbmRleCBhMDkyODg5MDY3MWFjLi41NDY4YThkMmQ1ZDU2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuY1xuQEAgLTE0Mjc1LDYgKzE0Mjc1LDcgQEAgc3RhdGljIGludCBhdGgxMmtfbWFjX3NldHVwX2NoYW5uZWxzX3JhdGVzKHN0cnVjdCBhdGgxMmsgKmFyLFxuIFx0XHRcdFx0XHQgICBzaXplb2YoYXRoMTJrXzZnaHpfY2hhbm5lbHMpLCBHRlBfS0VSTkVMKTtcbiBcdFx0XHRpZiAoIWNoYW5uZWxzKSB7XG4gXHRcdFx0XHRrZnJlZShhci1cdTAwM2VtYWMuc2JhbmRzW05MODAyMTFfQkFORF8yR0haXS5jaGFubmVscyk7XG4rXHRcdFx0XHRhci1cdTAwM2VtYWMuc2JhbmRzW05MODAyMTFfQkFORF8yR0haXS5jaGFubmVscyA9IE5VTEw7XG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdFx0XHR9XG4gXG5AQCAtMTQzMjUsNyArMTQzMjYsOSBAQCBzdGF0aWMgaW50IGF0aDEya19tYWNfc2V0dXBfY2hhbm5lbHNfcmF0ZXMoc3RydWN0IGF0aDEyayAqYXIsXG4gXHRcdFx0XHRcdCAgIEdGUF9LRVJORUwpO1xuIFx0XHRcdGlmICghY2hhbm5lbHMpIHtcbiBcdFx0XHRcdGtmcmVlKGFyLVx1MDAzZW1hYy5zYmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLmNoYW5uZWxzKTtcbitcdFx0XHRcdGFyLVx1MDAzZW1hYy5zYmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLmNoYW5uZWxzID0gTlVMTDtcbiBcdFx0XHRcdGtmcmVlKGFyLVx1MDAzZW1hYy5zYmFuZHNbTkw4MDIxMV9CQU5EXzZHSFpdLmNoYW5uZWxzKTtcbitcdFx0XHRcdGFyLVx1MDAzZW1hYy5zYmFuZHNbTkw4MDIxMV9CQU5EXzZHSFpdLmNoYW5uZWxzID0gTlVMTDtcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0XHRcdH1cbiBcbkBAIC0xNDM2NSw3ICsxNDM2OCw3IEBAIHN0YXRpYyBpbnQgYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlcyhzdHJ1Y3QgYXRoMTJrICphcixcbiBcdFx0XHRcdFx0a2ZyZWUoYXItXHUwMDNlbWFjLnNiYW5kc1tOTDgwMjExX0JBTkRfMkdIWl0uY2hhbm5lbHMpO1xuIFx0XHRcdFx0XHRhci1cdTAwM2VtYWMuc2JhbmRzW05MODAyMTFfQkFORF8yR0haXS5jaGFubmVscyA9IE5VTEw7XG4gXHRcdFx0XHRcdGtmcmVlKGFyLVx1MDAzZW1hYy5zYmFuZHNbTkw4MDIxMV9CQU5EXzZHSFpdLmNoYW5uZWxzKTtcbi1cdFx0XHRcdFx0YXItXHUwMDNlbWFjLnNiYW5kc1tOTDgwMjExX0JBTkRfMkdIWl0uY2hhbm5lbHMgPSBOVUxMO1xuK1x0XHRcdFx0XHRhci1cdTAwM2VtYWMuc2JhbmRzW05MODAyMTFfQkFORF82R0haXS5jaGFubmVscyA9IE5VTEw7XG4gXHRcdFx0XHRcdGtmcmVlKGNoYW5uZWxzKTtcbiBcdFx0XHRcdFx0YmFuZC1cdTAwM2VjaGFubmVscyA9IE5VTEw7XG4gXHRcdFx0XHRcdHJldHVybiByZXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNDoxNS40OTQ2NDgwNjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDcyMzU5MjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFdpRmkgNyBEcml2ZXIgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuY2AuIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGRvdWJsZS1mcmVlIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlIGJ5IHNldHRpbmcgYSBwb2ludGVyIHRvIE5VTEwgYWZ0ZXIgZnJlZWluZyBtZW1vcnkuIEdvb2QgZGVmZW5zaXZlIGNvZGluZywgYnV0IGRvZXMgaXQgd2FycmFudCBmdXp6aW5nP1xuXG5UaGlzIGlzIGZvciB0aGUgYXRoMTJrIGRyaXZlciwgd2hpY2gsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgaXMgc3BlY2lmaWMgdG8gUXVhbGNvbW0ncyBXaS1GaSA3IHNpbGljb24uIFRoZSBiaWcgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGlzIGZ1enplci1mcmllbmRseS4gQ2FuIEkgZ2V0IGF3YXkgd2l0aCBydW5uaW5nIGl0IGluIHNvbWV0aGluZyBsaWtlIFFFTVU/IFR5cGljYWxseSwgdGhlc2UgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycywgZXNwZWNpYWxseSB3aXJlbGVzcyBvbmVzLCBkZW1hbmQgZWl0aGVyIHBoeXNpY2FsIGhhcmR3YXJlIG9yIHByZXR0eSBlbGFib3JhdGUgZW11bGF0aW9uLiBJIGtub3cgKm1hYzgwMjExX2h3c2ltKiBvZmZlcnMgc29tZSBlbXVsYXRpb24sIGJ1dCB0aGF04oCZcyBhICpnZW5lcmljKiBmcmFtZXdvcmssIGFuZCB0aGlzIGlzIGEgc3BlY2lhbGl6ZWQgKmhhcmR3YXJlIGRyaXZlciouXG5cbk5vdywgdGhlIG5leHQgbG9naWNhbCBxdWVzdGlvbiDigJMgZG9lcyBzeXprYWxsZXIgdGFyZ2V0IHRoaXM/IExldCBtZSBjaGVjay4gUmlnaHQsIHN5emthbGxlciAqZG9lc24ndCogZW11bGF0ZSB0aGUgYXRoMTJrIGhhcmR3YXJlLiBIbW0uLi4gbWF5YmUsICptYXliZSogSSBjb3VsZCByZWFjaCBzb21lIGluaXRpYWxpemF0aW9uIGNvZGUgaWYgaXQgd2VyZSBhIFVTQiBkcml2ZXIsIGJ1dCBhdGgxMmsgaXMgUENJIG9yIEFIQiwgSSB0aGluay4gVGhhdOKAmXMgcHJvYmFibHkgYSBkZWFkIGVuZC5cblxuSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcsIGFuZCB0aGUgUENJIHNvdXJjZS4gTGV0IG1lIGxvb2sgYXQgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZ2AgYW5kIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jYCwgdG8gc2VlIGlmIEkgY2FuIGdldCBhIGJldHRlciBzZW5zZSBvZiBob3cgdGhpcyBkcml2ZXIgaXMgYXJjaGl0ZWN0ZWQgYW5kIHdoYXQgc29ydCBvZiBlbnRyeSBwb2ludHMgYXJlIGV4cG9zZWQuIE1pZ2h0IGdpdmUgbWUgYSBiZXR0ZXIgaWRlYSBvZiBob3cgcmVhbGlzdGljIGZ1enppbmcgdGhpcyB0aGluZyByZWFsbHkgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0ODQsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNDoyMC45NjcwMTA0MTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc4MzMwMzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDEya19tYWNfc2V0dXBfY2hhbm5lbHNfcmF0ZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYz0xNDE4Nj1zdGF0aWMgdm9pZCBhdGgxMmtfbWFjX3VwZGF0ZV81XzlfZ2h6X2NoX2xpc3Qoc3RydWN0IGF0aDEyayAqYXIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jLTE0MjA1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM6MTQyMDY6c3RhdGljIGludCBhdGgxMmtfbWFjX3NldHVwX2NoYW5uZWxzX3JhdGVzKHN0cnVjdCBhdGgxMmsgKmFyLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTQyMDctXFx0XFx0XFx0XFx0XFx0ICAgdTMyIHN1cHBvcnRlZF9iYW5kcyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM9MTQ3NDM9c3RhdGljIGludCBhdGgxMmtfbWFjX3NldHVwX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMmsgKmFyLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNDc1NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jOjE0NzU2OlxcdHJldCA9IGF0aDEya19tYWNfc2V0dXBfY2hhbm5lbHNfcmF0ZXMoYXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNDc1Ny1cXHRcXHRcXHRcXHRcXHQgICAgICBjYXAtXFx1MDAzZXN1cHBvcnRlZF9iYW5kcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTQ6MjEuMzQ1MzQ4Mjg0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1NzYyNzExMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDYWxsZXJzIG9mIGBhdGgxMmtfbWFjX3NldHVwX3JlZ2lzdGVyYCoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgYXRoMTJrX21hY19zZXR1cF9yZWdpc3RlcmAuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmaWd1cmUgb3V0ICp3aG8qIGlzIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBhbmQgKndoeSouIEkgd2FudCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIGZsb3cuIEkgbmVlZCB0byBrbm93IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZCBmcm9tLiBJcyBpdCBkdXJpbmcgZHJpdmVyIGluaXRpYWxpemF0aW9uPyBJcyBpdCB0cmlnZ2VyZWQgYnkgc29tZSBldmVudD8gSXMgaXQgcGFydCBvZiBzb21lIG1vcmUgY29tcGxleCByZWdpc3RyYXRpb24gc2VxdWVuY2U/ICBUaGUgY29udGV4dCB3aWxsIGdpdmUgbWUgY2x1ZXMgYWJvdXQgaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdCB3aXRoaW4gdGhlIGJyb2FkZXIgYGF0aDEya2AgZHJpdmVyLiBUaW1lIHRvIHRyYWNrIGRvd24gYWxsIGl0cyBjYWxsIHNpdGVzIVxuXG5cbiIsIklucHV0VG9rZW5zIjozNTE4LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTQ6MjQuNDAyOTc5NTE2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODQwNDQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMmtfbWFjX3NldHVwX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM9MTQ3MjA9c3RhdGljIHZvaWQgYXRoMTJrX21hY19od191bnJlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfaHcgKmFoKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNDc0Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jOjE0NzQzOnN0YXRpYyBpbnQgYXRoMTJrX21hY19zZXR1cF9yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrICphcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jLTE0NzQ0LVxcdFxcdFxcdFxcdCAgICAgdTMyICpodF9jYXAsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jPTE0Nzc3PXN0YXRpYyBpbnQgYXRoMTJrX21hY19od19yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrX2h3ICphaClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTQ4MTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYzoxNDgxNTpcXHRcXHRyZXQgPSBhdGgxMmtfbWFjX3NldHVwX3JlZ2lzdGVyKGFyLCBcXHUwMDI2aHRfY2FwX2luZm8sIGh3LVxcdTAwM2V3aXBoeS1cXHUwMDNlYmFuZHMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTQ4MTYtXFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTQ6MjQuNTQxMzg5OTQ3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0NjY1NTQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZSwgdXNpbmcgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6XG5cbioqRGVlcCBEaXZlIG9uIGBhdGgxMmtfbWFjX2h3X3JlZ2lzdGVyYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBkaXNjdXNzaW9uIGhhcyBtb3ZlZCBvbiB0byBgYXRoMTJrX21hY19od19yZWdpc3RlcmAuIFRoYXQgZnVuY3Rpb24gY2FsbC4uLiBpdCBhbHdheXMgZ2V0cyBteSBhdHRlbnRpb24uIFRoaXMgaXMgbGlrZWx5IHRoZSBwb2ludCB3aGVyZSB0aGUgaGFyZHdhcmUgaXRzZWxmIGlzIGZpbmFsbHkgaW5pdGlhbGl6ZWQgYW5kIGZvcm1hbGx5IGludGVncmF0ZWQgaW50byB0aGUgYXRoMTJrIGRyaXZlcidzIG9wZXJhdGlvbmFsIGZsb3cuIEknbSBpbW1lZGlhdGVseSBydW5uaW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucyBpbiBteSBoZWFkOiBXaGF0IHNwZWNpZmljIGhhcmR3YXJlIHJlc291cmNlcyBhcmUgYmVpbmcgY2xhaW1lZCBhbmQgbWFwcGVkIGF0IHRoaXMgcG9pbnQ/IElzIHRoZXJlIGFueSBzb3J0IG9mIGRpcmVjdCByZWdpc3RlciBhY2Nlc3MgaGFwcGVuaW5nIGhlcmU/IE1vcmUgaW1wb3J0YW50bHksIGFtIEkgcmVtZW1iZXJpbmcgYWxsIHRoZSBudWFuY2VzIG9mIHRoaXMgc3BlY2lmaWMgcmVnaXN0cmF0aW9uIHByb2Nlc3M/IElzIHRoZXJlIGFueSBvcHBvcnR1bml0eSBmb3Igb3B0aW1pemF0aW9uIGluIGhvdyBpdCdzIGRvbmU/IE9yIGFueSBjaGFuY2Ugb2YgYW4gaW50ZXJlc3Rpbmcgb3IgZGFuZ2Vyb3VzIGJ1ZyBiZWluZyBoaWRkZW4gaGVyZT8gTmVlZCB0byBrZWVwIGluIG1pbmQsIGFuZCB2ZXJpZnkgaWYgaXQgYWxpZ25zIHdpdGggbXkgZXhwZWN0YXRpb25zIG9mIGhvdyBhbiBhdGgxMmsgZHJpdmVyIHNob3VsZCB3b3JrLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBjcml0aWNhbCBzZWN0aW9uLCBhbmQgb25lIEkgd291bGQgd2FudCB0byBkaXNzZWN0IGNhcmVmdWxseSBpZiBJIHdlcmUgZGVidWdnaW5nIGEgd2lyZWxlc3MgcGVyZm9ybWFuY2UgaXNzdWUgb3IgaW52ZXN0aWdhdGluZyBhIHBhcnRpY3VsYXJseSBuYXN0eSBkcml2ZXIgaGFuZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGZ1bGx5IHVwIHRvIHNwZWVkIG9uIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNjMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNDoyOC4xODgwNDg2MjNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1ODc1NTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDEya19tYWNfaHdfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYz0xNDc0Mz1zdGF0aWMgaW50IGF0aDEya19tYWNfc2V0dXBfcmVnaXN0ZXIoc3RydWN0IGF0aDEyayAqYXIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jLTE0Nzc2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM6MTQ3Nzc6c3RhdGljIGludCBhdGgxMmtfbWFjX2h3X3JlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfaHcgKmFoKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTQ3Nzgte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYz0xNTI5NT1pbnQgYXRoMTJrX21hY19yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphZylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTUzMDMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYzoxNTMwNDpcXHRcXHRyZXQgPSBhdGgxMmtfbWFjX2h3X3JlZ2lzdGVyKGFoKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jLTE1MzA1LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jPTY5MjM9c3RhdGljIGludCBhdGgxMmtfcmVnX2NoYW5fbGlzdF9ldmVudChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYy03MDAxLVxcdCAqIHNvIHRoZSBjb21wbGV0aW9uIGNhbm5vdCBiZSBtYXJrZWQgYXQgdGhhdCBwb2ludC5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jOjcwMDI6XFx0ICogVGhpcyBib290LXRpbWUgdXBkYXRlIGlzIGhhbmRsZWQgaW4gYXRoMTJrX21hY19od19yZWdpc3RlcigpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYy03MDAzLVxcdCAqIGJlZm9yZSByZWdpc3RlcmluZyB0aGUgaGFyZHdhcmUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE0OjI4LjMwMzkyOTI2NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTI3ODY1MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgaW4gdGhlIGZpcnN0IHBlcnNvbiBhbmQgYXNzdW1pbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBgYXRoMTJrX21hY19yZWdpc3RlcmAqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gdGhlIHRleHQgbWVudGlvbnMgYGF0aDEya19tYWNfcmVnaXN0ZXJgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoYXQgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgTUFDIGxheWVyIHdpdGhpbiB0aGUgYXRoMTJrIGRyaXZlci4gV2hhdCdzIHRoZSBjb250ZXh0IGhlcmU/IEknbSBwcm9iYWJseSBjb25zaWRlcmluZyBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgb3IgcGVyaGFwcyBkZWJ1Z2dpbmcgYSBzcGVjaWZpYyBpc3N1ZSByZWxhdGVkIHRvIE1BQyBvcGVyYXRpb25zIG9uIGFuIGF0aDEyay1iYXNlZCBkZXZpY2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aGF0KiB0aGUgcXVlc3Rpb24gb3Igc2NlbmFyaW8gYXJvdW5kIHRoYXQgZnVuY3Rpb24gaXMuIEFyZSB3ZSB0cm91Ymxlc2hvb3RpbmcgYSByZWdpc3RlciBhY2Nlc3MgcHJvYmxlbT8gQSByZXNvdXJjZSBjb25mbGljdD8gT3IgYXJlIHdlIGluIHRoZSBhcmNoaXRlY3R1cmUgcGhhc2UsIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyB0aGUgTUFDIGFuZCB0aGUgZHJpdmVyIGludGVyYWN0IGR1cmluZyBpbml0aWFsIGJyaW5ndXA/IEFyZSB0aGVyZSBzcGVjaWZpYyByZWdpc3RlcnMgYmVpbmcgbWVudGlvbmVkLCBvciBzcGVjaWZpYyBpc3N1ZXM/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4NDAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNDozMS42OTY3MTg0MDdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzIwMjU0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMmtfbWFjX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jPTExNTU9c3RhdGljIGludCBhdGgxMmtfY29yZV9od19ncm91cF9zdGFydChzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphZylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTExNzgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6MTE3OTpcXHRyZXQgPSBhdGgxMmtfbWFjX3JlZ2lzdGVyKGFnKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0xMTgwLVxcdGlmIChXQVJOX09OKHJldCkpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jPTE1MjczPXZvaWQgYXRoMTJrX21hY19tbG9fdGVhcmRvd24oc3RydWN0IGF0aDEya19od19ncm91cCAqYWcpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jLTE1Mjk0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM6MTUyOTU6aW50IGF0aDEya19tYWNfcmVnaXN0ZXIoc3RydWN0IGF0aDEya19od19ncm91cCAqYWcpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNTI5Ni17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5oPTE1ND12b2lkIGF0aDEya19tYWNfdW5yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphZyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuaDoxNTU6aW50IGF0aDEya19tYWNfcmVnaXN0ZXIoc3RydWN0IGF0aDEya19od19ncm91cCAqYWcpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmgtMTU2LWludCBhdGgxMmtfbWFjX2FsbG9jYXRlKHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTQ6MzEuODQ5OTI3NTU3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTcwMDQwNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgYXRoMTJrX2NvcmVfaHdfZ3JvdXBfc3RhcnRgIEZ1bmN0aW9uIENhbGwqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgYW5kIHRoZSBxdWVzdGlvbiB0aGF0J3MgcmVhbGx5IG5hZ2dpbmcgYXQgbWUgaXM6IHdoYXQncyBnb2luZyBvbiB3aXRoIHRoaXMgYGF0aDEya19jb3JlX2h3X2dyb3VwX3N0YXJ0YCBmdW5jdGlvbj8gSXQncyBrZXksIEkga25vdyBpdC4gV2UncmUgdGFsa2luZyBhYm91dCB0aGUgY29yZSBoYXJkd2FyZSBncm91cCBzdGFydCBmdW5jdGlvbiwgYW5kIHRoYXQgdXN1YWxseSBpbmRpY2F0ZXMgc29tZSBmdW5kYW1lbnRhbCBpbml0aWFsaXphdGlvbiBvciBhY3RpdmF0aW9uIHBoYXNlIGZvciBhIHNwZWNpZmljIHBhcnQgb2YgdGhlIGhhcmR3YXJlLCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSB3aXJlbGVzcyBpbnRlcmZhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgY29udGV4dCwgc3BlY2lmaWNhbGx5IHdoYXQgaXTigJlzIHN0YXJ0aW5nIGluIHRoZSBmaXJzdCBwbGFjZS5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyBoYXJkd2FyZSBncm91cCBpdCdzIG1hbmFnaW5nLCBhbmQgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSwgaWYgYW55LiBJcyBpdCByZWxhdGVkIHRvIHRoZSBQSFksIE1BQywgb3IgcGVyaGFwcyBhIHNwZWNpZmljIHJhZGlvIGNoYWluPyBJcyB0aGVyZSBhIHByZWNlZGluZyBzZXR1cCB0aGF0IG11c3QgYmUgZG9uZSBiZWZvcmUgdGhpcyBjYW4gcnVuIHdpdGhvdXQgaXNzdWU/IFBlcmhhcHMgdGhlcmUncyBhIHJlYXNvbiBmb3IgY29uY2VybnMgcmVsYXRlZCB0byBpdHMgZGVwZW5kZW5jaWVzLCBvciBhIHNwZWNpZmljIHJlYXNvbiB3aHkgaXRzIGxvY2F0aW9uIGluIHRoZSBicm9hZGVyIGNvZGUgaXMgaW50ZXJlc3RpbmcuIEknbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTE5LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTQ6MzUuMTQ2OTM0OTQ1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDY1MDA1MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX2NvcmVfaHdfZ3JvdXBfc3RhcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM9MTEyOT1zdGF0aWMgaW50IGF0aDEya19jb3JlX21sb19zZXR1cChzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphZylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTExNTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6MTE1NTpzdGF0aWMgaW50IGF0aDEya19jb3JlX2h3X2dyb3VwX3N0YXJ0KHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTExNTYte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM9MTIzMD1zdGF0aWMgaW5saW5lXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6MTIzMTpib29sIGF0aDEya19jb3JlX2h3X2dyb3VwX3N0YXJ0X3JlYWR5KHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTEyMzIte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM9MTMxMT1pbnQgYXRoMTJrX2NvcmVfcW1pX2Zpcm13YXJlX3JlYWR5KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0xMzQ0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jOjEzNDU6XFx0aWYgKGF0aDEya19jb3JlX2h3X2dyb3VwX3N0YXJ0X3JlYWR5KGFnKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jOjEzNDY6XFx0XFx0cmV0ID0gYXRoMTJrX2NvcmVfaHdfZ3JvdXBfc3RhcnQoYWcpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTEzNDctXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM9MTYzOD1zdGF0aWMgdm9pZCBhdGgxMmtfY29yZV9yZXN0YXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTE2NjEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6MTY2MjpcXHRcXHRpZiAoIWF0aDEya19jb3JlX2h3X2dyb3VwX3N0YXJ0X3JlYWR5KGFnKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTE2NjMtXFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZhZy1cXHUwMDNlbXV0ZXgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNDozNS40OTM0NDA4MjRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU5NDM5Njk5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFFNSSBGaXJtd2FyZSBSZWFkeSBDYWxsKipcblxuT2theSwgc28gSSd2ZSBoaXQgYSBwb2ludCBpbiB0aGUgY29kZSB3aGVyZSB0aGUgUU1JIGZpcm13YXJlIGlzIHJlYWR5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJcyB0aGUgYGF0aDEya2AgZHJpdmVyLCBzcGVjaWZpY2FsbHksIGJlaW5nIHN1YmplY3RlZCB0byBmdXp6aW5nP1wiIFR5cGljYWxseSwgeW91IGRvbid0IGZ1enogUENJIGRldmljZXMgZGlyZWN0bHkgdW5sZXNzIHRoZXJlJ3Mgc29tZSBraW5kIG9mIHZpcnR1YWwgZGV2aWNlIG9yIFBDSSBlbXVsYXRpb24gaW4gcGxhY2UuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCBzeXprYWxsZXIsIHdoaWNoIGlzIHRoZSBmdXp6ZXIgdGhhdCdzIGxpa2VseSBkcml2aW5nIHRoaXMsIHdvdWxkbid0IGhhdmUgUENJIGVtdWxhdGlvbiBzZXQgdXAgc3BlY2lmaWNhbGx5IGZvciBgYXRoMTJrYC4gQnV0LCB3YWl0IGEgbWludXRlLi4uIHdoYXQgaWYgaXQgKmlzbid0KiBhIFBDSSBkZXZpY2U/IFdoYXQgaWYgaXQncyBhIHBsYXRmb3JtIGRldmljZT8gVGhhdCBjaGFuZ2VzIHRoaW5ncy4gTGV0J3MgZGlnIGluIGEgYml0IGZ1cnRoZXIsIGFuZCBjaGVjayB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuY2AgZmlsZS4gVGhhdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBjbHVlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQyOCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE0OjM5LjA4Nzg0MTEwMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAyMTg2NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX2FoYl9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jPTk5OD1hdGgxMmtfYWhiX2dldF9kZXZpY2VfZmFtaWx5KGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTEwMTgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoxMDE5OnN0YXRpYyBpbnQgYXRoMTJrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTAyMC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jPTExODc9aW50IGF0aDEya19haGJfcmVnaXN0ZXJfZHJpdmVyKGNvbnN0IGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xMjA4LVxcdGFoYl9kcml2ZXItXFx1MDAzZWRyaXZlci5vZl9tYXRjaF90YWJsZSA9IGRyaXZlci1cXHUwMDNlaWRfdGFibGU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoxMjA5OlxcdGFoYl9kcml2ZXItXFx1MDAzZXByb2JlICA9IGF0aDEya19haGJfcHJvYmU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xMjEwLVxcdGFoYl9kcml2ZXItXFx1MDAzZXJlbW92ZSA9IGF0aDEya19haGJfcmVtb3ZlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNDozOS4xNjgwNjYwMzhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQxNzAzMTIzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipRRU1VIGFuZCBhdGgxMms6IEEgU2ltdWxhdGlvbiBDaGFsbGVuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGFjdHVhbGx5IHRyaWdnZXIgdGhpcyBgYXRoMTJrYCBjb2RlIHdpdGhpbiBhIFFFTVUgZW52aXJvbm1lbnQuIFRoZSBvYnZpb3VzIHJvYWRibG9ja3MgYXJlIHByZXR0eSBjbGVhcjogd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlLCBuZWl0aGVyIGBhdGgxMmtfYWhiX3Byb2JlYCBub3IgYGF0aDEya19wY2lfcHJvYmVgIHdpbGwgZXZlciBiZSBjYWxsZWQgaW4gYSBcIm5vcm1hbFwiIHNjZW5hcmlvLiBPciwgaWYgSSB0cnkgYSB3b3JrYXJvdW5kIGxpa2UgZmFraW5nIGEgcGxhdGZvcm0gZGV2aWNlLCB0aGUgY29kZSB3aWxsIGp1c3QgZXJyb3Igb3V0IHF1aWNrbHkgd2hlbiBpdCBjYW4ndCByZWFkIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMgb3IgY29tbXVuaWNhdGUgd2l0aCB0aGUgZmlybXdhcmUuXG5cbldhaXQgYSBzZWNvbmTigKZzeXprYWxsZXIgbWlnaHQgYmUgYWJsZSB0byBjcmVhdGUgdGhvc2UgcGxhdGZvcm0gZGV2aWNlcyB1c2luZyBgc3l6X2RldnJlc2Agb3Igc29tZXRoaW5nIHNpbWlsYXIsIHJpZ2h0PyBCdXQgZXZlbiBpZiBJIGdvIGRvd24gdGhhdCBwYXRoLCBpdCB3b24ndCBiZSBhYmxlIHRvIHByb3ZpZGUgdGhlIGZpcm13YXJlIGFuZCBhbGwgdGhlIG5lY2Vzc2FyeSBoYXJkd2FyZSByZXNwb25zZXMgcmVxdWlyZWQgdG8gZ2V0IHRoZSBjb2RlIHRvIHJlYWNoIGBhdGgxMmtfY29yZV9xbWlfZmlybXdhcmVfcmVhZHlgLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgYXRoMTJrX2NvcmVfcW1pX2Zpcm13YXJlX3JlYWR5YCB0byBzZWUgd2hhdCB0aGUgY29uZGl0aW9ucyBhcmUuIEl0J3MgcHJvYmFibHkgdGhlIGNydWNpYWwgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwOTcsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTQ6NDMuNTg1MTAwOTI2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzMwODA0MDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX2NvcmVfcW1pX2Zpcm13YXJlX3JlYWR5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jPTEyOTI9c3RhdGljIHZvaWQgYXRoMTJrX2NvcmVfdHJpZ2dlcl9wYXJ0bmVyKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0xMzEwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jOjEzMTE6aW50IGF0aDEya19jb3JlX3FtaV9maXJtd2FyZV9yZWFkeShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTEzMTIte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM9MTM4NT1zdGF0aWMgaW50IGF0aDEya19jb3JlX3JlY29uZmlndXJlX29uX2NyYXNoKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0xNDA4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jOjE0MDk6XFx0cmV0ID0gYXRoMTJrX2NvcmVfcW1pX2Zpcm13YXJlX3JlYWR5KGFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0xNDEwLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaD0xMjA1PXN0cnVjdCBhdGgxMmtfZndfc3RhdHNfcGRldiB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaC0xMjY0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5oOjEyNjU6aW50IGF0aDEya19jb3JlX3FtaV9maXJtd2FyZV9yZWFkeShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaC0xMjY2LXZvaWQgYXRoMTJrX2NvcmVfaHdfZ3JvdXBfY2xlYW51cChzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphZyk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jPTM5NjU9c3RhdGljIHZvaWQgYXRoMTJrX3FtaV9kcml2ZXJfZXZlbnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTQwMTQtXFx0XFx0XFx0XFx0ICBcXHUwMDI2YWItXFx1MDAzZWRldl9mbGFncyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYzo0MDE1OlxcdFxcdFxcdHJldCA9IGF0aDEya19jb3JlX3FtaV9maXJtd2FyZV9yZWFkeShhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy00MDE2LVxcdFxcdFxcdGlmICghcmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNDo0My43MTgxOTA3NThaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA3MTc2OTU4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFFNSSBNZXNzYWdlIEhhbmRsaW5nIGluIGF0aDEyayoqXG5cbk9rYXksIHNvIGBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudF93b3JrYCBnZXRzIHRyaWdnZXJlZCB3aGVuZXZlciBhIFFNSSBtZXNzYWdlIGNvbWVzIGluLiBUaGF0IG1ha2VzIHNlbnNlIOKAkyBRTUkgaXMgdGhlIFF1YWxjb21tIE1lc3NhZ2UgSW50ZXJmYWNlLCBhbmQgaXQgdHlwaWNhbGx5IHRyYXZlbHMgb3ZlciB0aGUgSVBDIHJvdXRlciwgcmlnaHQ/IFNwZWNpZmljYWxseSwgQUZfUUlQQ1JUUiwgb3IgYSBzaW1pbGFyIGNvbW11bmljYXRpb24gY2hhbm5lbC4gSSdtIHdvbmRlcmluZyB0aG91Z2guLi4gY2FuIHN5emthbGxlciBpbmplY3QgdGhlc2UgUU1JIG1lc3NhZ2VzPyBXZSB1c2Ugc3l6a2FsbGVyIGZvciBmdXp6aW5nLCBhbmQgaXQncyBhbHdheXMgZ29vZCB0byBjb25zaWRlciBhbGwgYXR0YWNrIHN1cmZhY2VzLlxuXG5JIHJlbWVtYmVyIHN5emthbGxlciAqZG9lcyogaGF2ZSBzb21lIEFGX1FJUENSVFIgc3VwcG9ydCwgYnV0IGlzbuKAmXQgdGhhdCBwcmltYXJpbHkgZm9yIHVzZXJzcGFjZSBjb21tdW5pY2F0aW5nIHdpdGggdGhlIGtlcm5lbD8gSGVyZSwgdGhlIGBhdGgxMmtgIGRyaXZlciBpcyBjb21tdW5pY2F0aW5nIHdpdGggdGhlICpmaXJtd2FyZSogdXNpbmcgUU1JLCB3aGljaCBpcyBhIGRpZmZlcmVudCBjb250ZXh0LiBJIG5lZWQgdG8gY2xhcmlmeSBpZiBpdCBpcyB1c2luZyB0aGUgUVJUUiBzdWJzeXN0ZW0gd2hpY2ggd291bGQgYmUgcmVsZXZhbnQgdG8gaG93IGl0IGNvbW11bmljYXRlcyB3aXRoIFFNSS4gTGV0IG1lIGRpZyBhIGJpdCBkZWVwZXIgYW5kIHNlZSBpZiBgYXRoMTJrYCBpcyBsZXZlcmFnaW5nIFFSVFIgaW4gYW55IG9mIHRoaXMgY29tbXVuaWNhdGlvbiBwYXRoLiBUaGF0IHdpbGwgYmUgdGhlIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE2MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNDo0Ny43ODk5NjM5MjdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjc2NjkwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxcnRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZWR1bXAuaD0zNz1zdHJ1Y3QgYXRoMTJrX2R1bXBfZmlsZV9kYXRhIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZWR1bXAuaC00NS1cXHRfX2xlMzIgY2hpcF9pZDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmVkdW1wLmg6NDY6XFx0LyogcXJ0ciBpbnN0YW5jZSBpZCAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZWR1bXAuaDo0NzpcXHRfX2xlMzIgcXJ0cl9pZDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmVkdW1wLmgtNDgtXFx0LyogcGNpIGRvbWFpbiBpZCAqL1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oYWwuaD0xMTM1PXN0cnVjdCBhdGgxMmtfaHdfcmVncyB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hhbC5oLTEyMTMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oYWwuaDoxMjE0OlxcdHUzMiBxcnRyX25vZGVfaWQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oYWwuaC0xMjE1LX07XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTg4OT1zdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2FzcG1fZGlzYWJsZShzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy05MDctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzo5MDg6c3RhdGljIHZvaWQgYXRoMTJrX3BjaV91cGRhdGVfcXJ0cl9ub2RlX2lkKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy05MDkte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy05MTMtXFx0LyogT24gcGxhdGZvcm1zIHdpdGggdHdvIG9yIG1vcmUgaWRlbnRpY2FsIG1oaSBkZXZpY2VzLCBxbWkgc2VydmljZSBydW5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjkxNDpcXHQgKiB3aXRoIGlkZW50aWNhbCBxcnRyLW5vZGUtaWQuIEJlY2F1c2Ugb2YgdGhpcyBpZGVudGljYWwgSUQgcXJ0ci1sb29rdXBcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTkxNS1cXHQgKiBjYW5ub3QgcmVnaXN0ZXIgbW9yZSB0aGFuIG9uZSBxbWkgc2VydmljZSB3aXRoIGlkZW50aWNhbCBub2RlIElELlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xMzE2PXN0YXRpYyB2b2lkIGF0aDEya19wY2lfY29yZWR1bXBfZG93bmxvYWQoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTM1Mi1cXHRmaWxlX2RhdGEtXFx1MDAzZWNoaXBfaWQgPSBjcHVfdG9fbGUzMihhYl9wY2ktXFx1MDAzZWRldl9pZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxMzUzOlxcdGZpbGVfZGF0YS1cXHUwMDNlcXJ0cl9pZCA9IGNwdV90b19sZTMyKGFiX3BjaS1cXHUwMDNlYWItXFx1MDAzZXFtaS5zZXJ2aWNlX2luc19pZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xMzU0LVxcdGZpbGVfZGF0YS1cXHUwMDNlYnVzX2lkID0gY3B1X3RvX2xlMzIocGNpX2RvbWFpbl9ucihhYl9wY2ktXFx1MDAzZXBkZXYtXFx1MDAzZWJ1cykpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xNDI4PWludCBhdGgxMmtfcGNpX3Bvd2VyX3VwKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE0NDQtXFx0aWYgKGF0aDEya19md19mZWF0dXJlX3N1cHBvcnRlZChhYiwgQVRIMTJLX0ZXX0ZFQVRVUkVfTVVMVElfUVJUUl9JRCkpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNDQ1OlxcdFxcdGF0aDEya19wY2lfdXBkYXRlX3FydHJfbm9kZV9pZChhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNDQ2LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaC02Mi0jZGVmaW5lIFBDSUVfTE9DQUxfUkVHX1FSVFJfTk9ERV9JRChhYikgXFxcXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmg6NjM6XFx0KChhYiktXFx1MDAzZWhhbC5yZWdzLVxcdTAwM2VxcnRyX25vZGVfaWQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaC02NC0jZGVmaW5lIERPTUFJTl9OVU1CRVJfTUFTS1xcdFxcdFxcdEdFTk1BU0soNywgNClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM9MzgxND1zdGF0aWMgdm9pZCBhdGgxMmtfcW1pX21zZ19tZW1fcmVxdWVzdF9jYihzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pX2hkbCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjM4MTU6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy0zODE2LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHFtaV90eG4gKnR4bixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM9Mzg1OT1zdGF0aWMgdm9pZCBhdGgxMmtfcW1pX21zZ19tZW1fcmVhZHlfY2Ioc3RydWN0IHFtaV9oYW5kbGUgKnFtaV9oZGwsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYzozODYwOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTM4NjEtXFx0XFx0XFx0XFx0XFx0c3RydWN0IHFtaV90eG4gKnR4bixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM9Mzg3MT1zdGF0aWMgdm9pZCBhdGgxMmtfcW1pX21zZ19md19yZWFkeV9jYihzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pX2hkbCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjM4NzI6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTM4NzMtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBxbWlfdHhuICp0eG4sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jPTM5MTA9c3RhdGljIGludCBhdGgxMmtfcW1pX29wc19uZXdfc2VydmVyKHN0cnVjdCBxbWlfaGFuZGxlICpxbWlfaGRsLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy0zOTE0LVxcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBxbWktXFx1MDAzZWFiO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM6MzkxNTpcXHRzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EgPSBcXHUwMDI2cW1pLVxcdTAwM2VzcTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTM5MTYtXFx0aW50IHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmg9MTM1PXN0cnVjdCBhdGgxMmtfcW1pIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmgtMTM3LVxcdHN0cnVjdCBxbWlfaGFuZGxlIGhhbmRsZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5oOjEzODpcXHRzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciBzcTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5oLTEzOS1cXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgZXZlbnRfd29yaztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaGFsX3FjYzIwNzIuYz05PWNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfcmVncyBxY2MyMDcyX3JlZ3MgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF9xY2MyMDcyLmMtOTUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9oYWxfcWNjMjA3Mi5jOjk2OlxcdC5xcnRyX25vZGVfaWQgPSAweDFlMDMzMDAsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9oYWxfcWNjMjA3Mi5jLTk3LX07XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF9xY245Mjc0LmM9MjE1PWNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfcmVncyBxY245Mjc0X3YxX3JlZ3MgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF9xY245Mjc0LmMtMzAwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaGFsX3FjbjkyNzQuYzozMDE6XFx0LnFydHJfbm9kZV9pZCA9IDB4MWUwMzE2NCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF9xY245Mjc0LmMtMzAyLX07XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF9xY245Mjc0LmM9MzA0PWNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfcmVncyBxY245Mjc0X3YyX3JlZ3MgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF9xY245Mjc0LmMtMzk1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaGFsX3FjbjkyNzQuYzozOTY6XFx0LnFydHJfbm9kZV9pZCA9IDB4MWUwMzE2NCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF9xY245Mjc0LmMtMzk3LX07XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF93Y243ODUwLmM9MTc0PWNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfcmVncyB3Y243ODUwX3JlZ3MgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF93Y243ODUwLmMtMjU5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaGFsX3djbjc4NTAuYzoyNjA6XFx0LnFydHJfbm9kZV9pZCA9IDB4MWUwMzE2NCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF93Y243ODUwLmMtMjYxLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE0OjQ3LjkxMjczODUyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0ODY2NzY0NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBJbnZlc3RpZ2F0aW9uIG9mIHRoZSBhdGgxMmsgRHJpdmVyIGFuZCBRUlRSKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBzeXprYWxsZXIgY2FuIGludGVyYWN0IHdpdGggdGhlIGF0aDEyayBkcml2ZXIsIHNwZWNpZmljYWxseSBob3cgaXQgbGV2ZXJhZ2VzIFFSVFIgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgZmlybXdhcmUuIEkga25vdyB0aGUgZHJpdmVyIHVzZXMgUVJUUiB0byB0YWxrIHRvIHRoZSBmaXJtd2FyZSwgYnV0IG15IHF1ZXN0aW9uIGlzIHdoZXRoZXIgc3l6a2FsbGVyIGlzIGVtdWxhdGluZyBRUlRSIG5vZGVzIHRvIGZvb2wgdGhlIGRyaXZlciBpbnRvIHRoaW5raW5nIGl0J3MgdGFsa2luZyB0byB0aGUgYWN0dWFsIGZpcm13YXJlLlxuXG5UaGUgYW5zd2VyLCBhcyBmYXIgYXMgSSB1bmRlcnN0YW5kLCBpcyBuby4gU3l6a2FsbGVyIGNhbiBpbmplY3QgUVJUUiBwYWNrZXRzIGRpcmVjdGx5IGludG8gdGhlIHNvY2tldCwgYnV0IHRoZSBhY3R1YWwgUVJUUiBub2RlcyB0aGVtc2VsdmVzIGFyZSB0eXBpY2FsbHkgc2V0IHVwIGFuZCByZWdpc3RlcmVkIGJ5IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGRyaXZlcnMg4oCTIHRoaW5ncyBsaWtlIE1ISSBvciBTTUQuIFxuXG5BaCwgYnV0IGhlcmUncyBhIHRob3VnaHQ6IGlmIHN5emthbGxlciBjYW4gY3JlYXRlIGl0cyAqb3duKiB2aXJ0dWFsIFFSVFIgbm9kZSBhbmQgc2VuZCBRTUkgbWVzc2FnZXMsIGNvdWxkIHRoYXQgcG90ZW50aWFsbHkgdHJpZ2dlciB0aGUgYGF0aDEya19xbWlfb3BzX25ld19zZXJ2ZXJgIGZ1bmN0aW9uPyBCdXQgd2FpdCBhIG1pbnV0ZSwgaXNuJ3QgdGhhdCBmdW5jdGlvbiBjYWxsZWQgd2hlbiBhICpuZXcgc2VydmVyKiBpcyByZWdpc3RlcmVkIG9uIHRoZSBRUlRSIGJ1cz8gVGhlIGF0aDEyayBkcml2ZXIgaXMgYWN0dWFsbHkgYSAqY2xpZW50KiwgaXNuJ3QgaXQ/IEl0IHJlZ2lzdGVycyBpdHMgb3duIFFNSSBoYW5kbGUgYW5kIHRoZW4gd2FpdHMgZm9yIHRoZSBmaXJtd2FyZSB0byBhY3QgYXMgdGhlIHNlcnZlci5cblxuT2theSwgc28gaWYgc3l6a2FsbGVyIGNyZWF0ZXMgYSBRUlRSIHNlcnZlciBpbiB1c2Vyc3BhY2UsIHRoYXQgKm1pZ2h0KiB0cmlnZ2VyIGBhdGgxMmtfcW1pX29wc19uZXdfc2VydmVyYC4gTGV0J3Mgc3RlcCBiYWNrLCBhbmQgcmVtZW1iZXIgdGhhdCBhdGgxMmsgb25seSByZWdpc3RlcnMgaXRzIFFNSSBoYW5kbGUgaW5zaWRlIGBhdGgxMmtfcW1pX2luaXRfc2VydmljZWAuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlYCBpcyBldmVuIGNhbGxlZCwgYW5kIGl0J3MgdGltZSB0byBzdGFydCB0cmFjaW5nIHRoYXQgY2FsbCBjaGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5NzgsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTQ6NTUuMzk5NDE3OTU5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODcxOTQyMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX3FtaV9pbml0X3NlcnZpY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM9ODE1PXN0YXRpYyBpbnQgYXRoMTJrX2NvcmVfc29jX2NyZWF0ZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtODIzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jOjgyNDpcXHRyZXQgPSBhdGgxMmtfcW1pX2luaXRfc2VydmljZShhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtODI1LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM9Mzk2NT1zdGF0aWMgdm9pZCBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtNDAzNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjQwMzg6aW50IGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy00MDM5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmg9NjQ0PXZvaWQgYXRoMTJrX3FtaV9kZWluaXRfc2VydmljZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5oOjY0NTppbnQgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuaC02NDYtdm9pZCBhdGgxMmtfcW1pX2ZyZWVfcmVzb3VyY2Uoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE0OjU1LjU4NjYxNzI3N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTUyMzgyNDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHVuZGVyc3RhbmRpbmcsIGZyYW1lZCBhcyBteSBvd24gdGhvdWdodHM6XG5cbioqRGlzc2VjdGluZyB0aGUgQXRoMTJrIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGZvciB0aGUgYXRoMTJrIGRyaXZlciwgYW5kIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgYGF0aDEya19jb3JlX3NvY19jcmVhdGVgIGlzIGEga2V5IGZ1bmN0aW9uLiBJIHNlZSBpdCdzIGJlaW5nIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBhdGgxMmtfY29yZV9pbml0YC4gVGhhdCdzIG5vdCBzdXJwcmlzaW5nLCBidXQgaXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgYSBmZXcgdGhpbmdzLiBGaXJzdCwgYGF0aDEya19jb3JlX3NvY19jcmVhdGVgIGlzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBjb3JlIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyIG9yIGluaXRpYWxpemluZyBzb21lIGNydWNpYWwgc3RhdGUgcmVsYXRlZCB0byB0aGUgU3lzdGVtLW9uLUNoaXAgKFNvQykgaW50ZWdyYXRpb24uIEdpdmVuIHRoZSBuYW1lLCBpdCBhbG1vc3QgY2VydGFpbmx5IGRlYWxzIHdpdGggdGhlIHNwZWNpZmljIFNvQyBmZWF0dXJlcyBhbmQgcmVxdWlyZW1lbnRzLiBUaGUgZmFjdCB0aGF0IGl0J3MgY2FsbGVkIGZyb20gYGF0aDEya19jb3JlX2luaXRgIHN1Z2dlc3RzIGl0J3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBvdmVyYWxsIGRyaXZlcidzIGluc3RhbnRpYXRpb24gcHJvY2Vzcy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB3aGF0IGBhdGgxMmtfY29yZV9zb2NfY3JlYXRlYCAqYWN0dWFsbHkqIGRvZXMuIElzIGl0IGFsbG9jYXRpbmcgbWVtb3J5LCByZWdpc3RlcmluZyBoYXJkd2FyZSByZXNvdXJjZXMsIHNldHRpbmcgdXAgaW50ZXJydXB0IGhhbmRsZXJzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIHN0cnVjdHVyZSBvZiB0aGUgY2FsbCB0cmVlIGhpbnRzIHRoYXQgaXQncyBwcm9iYWJseSBvbmUgb2YgdGhlIGZpcnN0IHN0ZXBzIGluIHByZXBhcmluZyB0aGUgaGFyZHdhcmUgZm9yIG9wZXJhdGlvbi4gSSBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbidzIGltcGxlbWVudGF0aW9uIG5leHQsIGl0IHdpbGwgcHJvdmlkZSBtdWNoIG1vcmUgZGV0YWlsIG9uIHRoZSBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA2NCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE1OjAwLjUzOTAwMjU5M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0NzY1NzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDEya19jb3JlX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYz0xMDE5PXN0YXRpYyBpbnQgYXRoMTJrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xMTEwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MTExMTpcXHRyZXQgPSBhdGgxMmtfY29yZV9pbml0KGFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTExMTItXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM9MjE5MD12b2lkIGF0aDEya19jb3JlX2h3X2dyb3VwX3NldF9tbG9fY2FwYWJsZShzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphZylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTIyMzAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6MjIzMTppbnQgYXRoMTJrX2NvcmVfaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTIyMzIte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmg9MTI2Nz1pbnQgYXRoMTJrX2NvcmVfcHJlX2luaXQoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmg6MTI2ODppbnQgYXRoMTJrX2NvcmVfaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmF0aDEyayk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmgtMTI2OS12b2lkIGF0aDEya19jb3JlX2RlaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmF0aDEyayk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE1Mjg9c3RhdGljIGludCBhdGgxMmtfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNjQ4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTY0OTpcXHRyZXQgPSBhdGgxMmtfY29yZV9pbml0KGFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE2NTAtXFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNTowMC42NDM3NzQ0MDZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI0NzM0NjM2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGF0aDEyayBEcml2ZXIgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBgYXRoMTJrX2NvcmVfaW5pdGAgaXMgdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24sIGFuZCBpdCdzIGNhbGxlZCBmcm9tIGJvdGggYGF0aDEya19haGJfcHJvYmVgIGFuZCBgYXRoMTJrX3BjaV9wcm9iZWAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIGtub3cgc3l6a2FsbGVyIGlzbid0IGdvaW5nIHRvIGJlIGFibGUgdG8gaGl0IHRob3NlIHByb2JlcyBkaXJlY3RseS4gVGhleSByZXF1aXJlIHJlYWwgaGFyZHdhcmUgb3IgdmVyeSBzcGVjaWZpYyBlbXVsYXRlZCBkZXZpY2VzIOKAkyB0aGluZ3Mgc3l6a2FsbGVyIHR5cGljYWxseSBzdHJ1Z2dsZXMgd2l0aC5cblxuQnV0IHdhaXQgYSBtaW51dGUuLi4gSSByZWNhbGwgYHN5el9kZXZyZXNgLiBUaGF0J3MgdGhlIGtleSEgSWYgSSBjYW4gbGV2ZXJhZ2UgYHN5el9kZXZyZXNgIHRvIGZhYnJpY2F0ZSBhIHBsYXRmb3JtIGRldmljZSB0aGF0IGxvb2tzIGxpa2Ugd2hhdCBgYXRoMTJrX2FoYl9wcm9iZWAgZXhwZWN0cywgdGhlbiBzeXprYWxsZXIgKm1pZ2h0KiBhY3R1YWxseSB0cmlnZ2VyIHRoYXQgcHJvYmUgZnVuY3Rpb24uIEl0J3MgZGVmaW5pdGVseSB3b3J0aCBhIHNob3QuXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byBgYXRoMTJrX2FoYl9wcm9iZWAgYW5kIHNlZSB3aGF0IGl0J3MgbG9va2luZyBmb3IuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwbGF0Zm9ybSBkZXZpY2UgcmVxdWlyZW1lbnRzIHRvIGNyYWZ0IGEgc3VjY2Vzc2Z1bCBgc3l6X2RldnJlc2AgY2FsbC4gVW5kZXJzdGFuZGluZyB0aGUgcHJvYmUncyBsb2dpYyBpcyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk5NSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNTowNC44OTExMjQwNzVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTkyOTAyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMmtfYWhiX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM9OTk4PWF0aDEya19haGJfZ2V0X2RldmljZV9mYW1pbHkoY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTAxOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjEwMTk6c3RhdGljIGludCBhdGgxMmtfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xMDIwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM9MTE4Nz1pbnQgYXRoMTJrX2FoYl9yZWdpc3Rlcl9kcml2ZXIoY29uc3QgZW51bSBhdGgxMmtfZGV2aWNlX2ZhbWlseSBkZXZpY2VfaWQsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTEyMDgtXFx0YWhiX2RyaXZlci1cXHUwMDNlZHJpdmVyLm9mX21hdGNoX3RhYmxlID0gZHJpdmVyLVxcdTAwM2VpZF90YWJsZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjEyMDk6XFx0YWhiX2RyaXZlci1cXHUwMDNlcHJvYmUgID0gYXRoMTJrX2FoYl9wcm9iZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTEyMTAtXFx0YWhiX2RyaXZlci1cXHUwMDNlcmVtb3ZlID0gYXRoMTJrX2FoYl9yZW1vdmU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE1OjA1LjAyMzA1ODg5N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTAwOTE0MzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYGF0aDEya19haGJfcHJvYmVgLCBhcyBpZiBpdCB3ZXJlIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYGF0aDEya19haGJfcHJvYmVgKipcblxuQWxyaWdodCwgdGltZSB0byBjcmFjayBvcGVuIHRoaXMgYGF0aDEya19haGJfcHJvYmVgIGZ1bmN0aW9uLiBJIHJlY29nbml6ZSB0aGUgbmFtZSBpbW1lZGlhdGVseSDigJMgaXQncyBnb2luZyB0byBiZSB0aGUgQUhCIChBZHZhbmNlZCBIaWdoLXBlcmZvcm1hbmNlIEJ1cykgcHJvYmUgZnVuY3Rpb24gZm9yIHRoZSBhdGgxMmsgd2lyZWxlc3MgZHJpdmVyLCBubyBkb3VidC4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoaXMgaXMgd2hlcmUgdGhlIHN5c3RlbSB0cmllcyB0byBkZXRlY3QgYW5kIGluaXRpYWxpemUgYW4gYXRoMTJrIGRldmljZSBjb25uZWN0ZWQgdmlhIHRoZSBBSEIgaW50ZXJmYWNlLCBsaWtlbHkgb24gYW4gZW1iZWRkZWQgc3lzdGVtIG9yIHN5c3RlbS1vbi1hLWNoaXAuXG5cbkknbGwgYmUgbG9va2luZyBmb3IgdGhlIHR5cGljYWwgcHJvYmUgcm91dGluZSBzdGVwczogcmVzb3VyY2UgYWxsb2NhdGlvbiwgZGV2aWNlIGlkZW50aWZpY2F0aW9uLCBwZXJoYXBzIHNvbWUgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24sIGFuZCBmaW5hbGx5LCB0aGUgcmVnaXN0cmF0aW9uIG9mIHRoZSBkZXZpY2Ugd2l0aCB0aGUga2VybmVsLiBJIGV4cGVjdCB0aGVyZSB3aWxsIGJlIGNoZWNrcyBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSBoYXJkd2FyZSwgcHJvYmFibHkgdXNpbmcgcmVnaXN0ZXIgcmVhZHMgb3ZlciB0aGUgQUhCLiBUaGVyZSBtaWdodCBiZSBzb21lIHBvd2VyIG1hbmFnZW1lbnQgY29uc2lkZXJhdGlvbnMgaW52b2x2ZWQgaGVyZSBhcyB3ZWxsLCBlbmFibGluZyBjbG9ja3MgYW5kIHBvd2VyaW5nIHVwIHRoZSBkZXZpY2UuXG5cbkknbSBhbHNvIGFudGljaXBhdGluZyBzb21lIGVycm9yIGhhbmRsaW5nLiBUaGlzIGNvdWxkIGludm9sdmUgY2hlY2tpbmcgZm9yIGJ1cyBlcnJvcnMsIGRldmljZSB0aW1lb3V0cywgYW5kIHBvdGVudGlhbCBwcm9ibGVtcyBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZXJyb3IgY29kZXMgYW5kIHBvdGVudGlhbCByZWNvdmVyeSBtZWNoYW5pc21zIGltcGxlbWVudGVkLCB3aGljaCBjb3VsZCBpbmNsdWRlIHJldHJpZXMgb3IgZXZlbiBkZXZpY2UgcmVzZXRzLlxuXG5GaW5hbGx5LCBJJ2xsIGJlIHNlYXJjaGluZyBmb3IgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBhdGgxMmsgZHJpdmVyIHN0YWNrLiBJIGltYWdpbmUgaXQgc2V0cyB1cCB0aGUgbmVjZXNzYXJ5IGRhdGEgc3RydWN0dXJlcywgcG9zc2libHkgY3JlYXRlcyBhIHBsYXRmb3JtIGRldmljZSwgYW5kIGxpbmtzIGl0IHdpdGggdGhlIHJlc3Qgb2YgdGhlIHdpcmVsZXNzIGRyaXZlciBzdWJzeXN0ZW0uIEknbSBrZWVuIHRvIHNlZSB0aGUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZCwgd2hldGhlciBpdCB1c2VzIG11dGV4ZXMgb3Igc2VtYXBob3JlcywgdG8gZW5zdXJlIHRocmVhZC1zYWZlIG9wZXJhdGlvbiBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGRldmljZSBpcyBicm91Z2h0IHVwOyB0aW1pbmcgY2FuIGJlIGNyaXRpY2FsIGluIHN1Y2ggZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc2MCwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE1OjA5LjEyMzk3NjU5NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU5MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDE5LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTAxOTpcXHRzdGF0aWMgaW50IGF0aDEya19haGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4xMDIwOlxcdHtcXG4xMDIxOlxcdFxcdGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkO1xcbjEwMjI6XFx0XFx0c3RydWN0IGF0aDEya19haGIgKmFiX2FoYjtcXG4xMDIzOlxcdFxcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWI7XFxuMTAyNDpcXHRcXHR1MzIgYWRkcjtcXG4xMDI1OlxcdFxcdGludCByZXQ7XFxuMTAyNjpcXHRcXG4xMDI3OlxcdFxcdHJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgRE1BX0JJVF9NQVNLKDMyKSk7XFxuMTAyODpcXHRcXHRpZiAocmV0KSB7XFxuMTAyOTpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gc2V0IDMyLWJpdCBjb2hlcmVudCBkbWFcXFxcblxcXCIpO1xcbjEwMzA6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMDMxOlxcdFxcdH1cXG4xMDMyOlxcdFxcbjEwMzM6XFx0XFx0YWIgPSBhdGgxMmtfY29yZV9hbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBzaXplb2Yoc3RydWN0IGF0aDEya19haGIpLFxcbjEwMzQ6XFx0XFx0XFx0XFx0ICAgICAgIEFUSDEyS19CVVNfQUhCKTtcXG4xMDM1OlxcdFxcdGlmICghYWIpXFxuMTAzNjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xMDM3OlxcdFxcbjEwMzg6XFx0XFx0YWJfYWhiID0gYXRoMTJrX2FiX3RvX2FoYihhYik7XFxuMTAzOTpcXHRcXHRhYl9haGItXFx1MDAzZWFiID0gYWI7XFxuMTA0MDpcXHRcXHRhYi1cXHUwMDNlaGlmLm9wcyA9IFxcdTAwMjZhdGgxMmtfYWhiX2hpZl9vcHM7XFxuMTA0MTpcXHRcXHRhYi1cXHUwMDNlcGRldiA9IHBkZXY7XFxuMTA0MjpcXHRcXHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBhYik7XFxuMTA0MzpcXHRcXG4xMDQ0OlxcdFxcdGRldmljZV9pZCA9IGF0aDEya19haGJfZ2V0X2RldmljZV9mYW1pbHkocGRldik7XFxuMTA0NTpcXHRcXHRpZiAoZGV2aWNlX2lkIFxcdTAwM2U9IEFUSDEyS19ERVZJQ0VfRkFNSUxZX01BWCkge1xcbjEwNDY6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBnZXQgZGV2aWNlIGZhbWlseTogJWRcXFxcblxcXCIsIGRldmljZV9pZCk7XFxuMTA0NzpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbjEwNDg6XFx0XFx0XFx0Z290byBlcnJfY29yZV9mcmVlO1xcbjEwNDk6XFx0XFx0fVxcbjEwNTA6XFx0XFxuMTA1MTpcXHRcXHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX0FIQiwgXFxcIkFIQiBkZXZpY2UgZmFtaWx5IGlkOiAlZFxcXFxuXFxcIiwgZGV2aWNlX2lkKTtcXG4xMDUyOlxcdFxcbjEwNTM6XFx0XFx0YWJfYWhiLVxcdTAwM2VkZXZpY2VfZmFtaWx5X29wcyA9IFxcdTAwMjZhdGgxMmtfYWhiX2ZhbWlseV9kcml2ZXJzW2RldmljZV9pZF0tXFx1MDAzZW9wcztcXG4xMDU0OlxcdFxcbjEwNTU6XFx0XFx0LyogQ2FsbCBkZXZpY2Ugc3BlY2lmaWMgcHJvYmUuIFRoaXMgaXMgdGhlIGNhbGxiYWNrIHRoYXQgY2FuXFxuMTA1NjpcXHRcXHQgKiBiZSB1c2VkIHRvIG92ZXJyaWRlIGFueSBvcHMgaW4gZnV0dXJlXFxuMTA1NzpcXHRcXHQgKiBwcm9iZSBpcyB2YWxpZGF0ZWQgZm9yIE5VTEwgZHVyaW5nIHJlZ2lzdHJhdGlvbi5cXG4xMDU4OlxcdFxcdCAqL1xcbjEwNTk6XFx0XFx0cmV0ID0gYWJfYWhiLVxcdTAwM2VkZXZpY2VfZmFtaWx5X29wcy1cXHUwMDNlcHJvYmUocGRldik7XFxuMTA2MDpcXHRcXHRpZiAocmV0KSB7XFxuMTA2MTpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIHByb2JlIGRldmljZTogJWRcXFxcblxcXCIsIHJldCk7XFxuMTA2MjpcXHRcXHRcXHRnb3RvIGVycl9jb3JlX2ZyZWU7XFxuMTA2MzpcXHRcXHR9XFxuMTA2NDpcXHRcXG4xMDY1OlxcdFxcdC8qIFNldCBmaXhlZF9tZW1fcmVnaW9uIHRvIHRydWUgZm9yIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgZml4ZWQgbWVtb3J5XFxuMTA2NjpcXHRcXHQgKiByZXNlcnZhdGlvbiBmcm9tIERULiBJZiBtZW1vcnkgaXMgcmVzZXJ2ZWQgZnJvbSBEVCBmb3IgRlcsIGF0aDEyayBkcml2ZXJcXG4xMDY3OlxcdFxcdCAqIG5lZWQgbm90IHRvIGFsbG9jYXRlIG1lbW9yeS5cXG4xMDY4OlxcdFxcdCAqL1xcbjEwNjk6XFx0XFx0aWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3UzMihhYi1cXHUwMDNlZGV2LVxcdTAwM2VvZl9ub2RlLCBcXFwibWVtb3J5LXJlZ2lvblxcXCIsIFxcdTAwMjZhZGRyKSlcXG4xMDcwOlxcdFxcdFxcdHNldF9iaXQoQVRIMTJLX0ZMQUdfRklYRURfTUVNX1JFR0lPTiwgXFx1MDAyNmFiLVxcdTAwM2VkZXZfZmxhZ3MpO1xcbjEwNzE6XFx0XFxuMTA3MjpcXHRcXHRyZXQgPSBhdGgxMmtfY29yZV9wcmVfaW5pdChhYik7XFxuMTA3MzpcXHRcXHRpZiAocmV0KVxcbjEwNzQ6XFx0XFx0XFx0Z290byBlcnJfY29yZV9mcmVlO1xcbjEwNzU6XFx0XFxuMTA3NjpcXHRcXHRyZXQgPSBhdGgxMmtfYWhiX3Jlc291cmNlX2luaXQoYWIpO1xcbjEwNzc6XFx0XFx0aWYgKHJldClcXG4xMDc4OlxcdFxcdFxcdGdvdG8gZXJyX2NvcmVfZnJlZTtcXG4xMDc5OlxcdFxcbjEwODA6XFx0XFx0cmV0ID0gYXRoMTJrX2hhbF9zcm5nX2luaXQoYWIpO1xcbjEwODE6XFx0XFx0aWYgKHJldClcXG4xMDgyOlxcdFxcdFxcdGdvdG8gZXJyX3Jlc291cmNlX2RlaW5pdDtcXG4xMDgzOlxcdFxcbjEwODQ6XFx0XFx0cmV0ID0gYXRoMTJrX2NlX2FsbG9jX3BpcGVzKGFiKTtcXG4xMDg1OlxcdFxcdGlmIChyZXQpIHtcXG4xMDg2OlxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gYWxsb2NhdGUgY2UgcGlwZXM6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjEwODc6XFx0XFx0XFx0Z290byBlcnJfaGFsX3NybmdfZGVpbml0O1xcbjEwODg6XFx0XFx0fVxcbjEwODk6XFx0XFxuMTA5MDpcXHRcXHRhdGgxMmtfYWhiX2luaXRfcW1pX2NlX2NvbmZpZyhhYik7XFxuMTA5MTpcXHRcXG4xMDkyOlxcdFxcdHJldCA9IGF0aDEya19haGJfY29uZmlndXJlX3Jwcm9jKGFiKTtcXG4xMDkzOlxcdFxcdGlmIChyZXQpXFxuMTA5NDpcXHRcXHRcXHRnb3RvIGVycl9jZV9mcmVlO1xcbjEwOTU6XFx0XFxuMTA5NjpcXHRcXHRyZXQgPSBhdGgxMmtfYWhiX2NvbmZpZ19pcnEoYWIpO1xcbjEwOTc6XFx0XFx0aWYgKHJldCkge1xcbjEwOTg6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBjb25maWd1cmUgaXJxOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xMDk5OlxcdFxcdFxcdGdvdG8gZXJyX3Jwcm9jX2RlY29uZmlndXJlO1xcbjExMDA6XFx0XFx0fVxcbjExMDE6XFx0XFxuMTEwMjpcXHRcXHQvKiBJbnZva2UgYXJjaF9pbml0IGhlcmUgc28gdGhhdCBhcmNoLXNwZWNpZmljIGluaXQgb3BlcmF0aW9uc1xcbjExMDM6XFx0XFx0ICogY2FuIHV0aWxpemUgYWxyZWFkeSBpbml0aWFsaXplZCBhYiBmaWVsZHMsIHN1Y2ggYXMgSEFMIFNSTkdzLlxcbjExMDQ6XFx0XFx0ICovXFxuMTEwNTpcXHRcXHRyZXQgPSBhYl9haGItXFx1MDAzZWRldmljZV9mYW1pbHlfb3BzLVxcdTAwM2VhcmNoX2luaXQoYWIpO1xcbjExMDY6XFx0XFx0aWYgKHJldCkge1xcbjExMDc6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcIkFIQiBhcmNoX2luaXQgZmFpbGVkICVkXFxcXG5cXFwiLCByZXQpO1xcbjExMDg6XFx0XFx0XFx0Z290byBlcnJfcnByb2NfZGVjb25maWd1cmU7XFxuMTEwOTpcXHRcXHR9XFxuMTExMDpcXHRcXG4xMTExOlxcdFxcdHJldCA9IGF0aDEya19jb3JlX2luaXQoYWIpO1xcbjExMTI6XFx0XFx0aWYgKHJldCkge1xcbjExMTM6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBpbml0IGNvcmU6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjExMTQ6XFx0XFx0XFx0Z290byBlcnJfZGVpbml0X2FyY2g7XFxuMTExNTpcXHRcXHR9XFxuMTExNjpcXHRcXG4xMTE3OlxcdFxcdHJldHVybiAwO1xcbjExMTg6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE1OjA5LjEyNDE0NTY0NFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODU4NDM0NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYXRoMTJrIEFIQiBJbml0aWFsaXphdGlvbiBTZXF1ZW5jZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGBhdGgxMmtfYWhiX3Byb2JlYCBmdW5jdGlvbiBpcyB0aGUgc3RhcnRpbmcgcG9pbnQsIGFuZCBpdCdzIGNhbGxpbmcgYSBzZXJpZXMgb2YgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIGluIHNlcXVlbmNlOiBgYXRoMTJrX2FoYl9yZXNvdXJjZV9pbml0YCwgYGF0aDEya19oYWxfc3JuZ19pbml0YCwgYGF0aDEya19jZV9hbGxvY19waXBlc2AsIGBhdGgxMmtfYWhiX2NvbmZpZ3VyZV9ycHJvY2AsIGBhdGgxMmtfYWhiX2NvbmZpZ19pcnFgLCBgYXJjaF9pbml0YCwgYW5kIGZpbmlzaGluZyB3aXRoIGBhdGgxMmtfY29yZV9pbml0YC4gVGhhdCBzZXF1ZW5jZSBpcyBwcmV0dHkgc3RhbmRhcmQgZm9yIGEgZHJpdmVyIGxpa2UgdGhpcy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGF0aDEya19haGJfcmVzb3VyY2VfaW5pdGAgbGlrZWx5IGhhbmRsZXMgdGhlIG1hcHBpbmcgb2YgdGhlIEkvTyBtZW1vcnkgcmVnaW9ucy4gVGhhdCdzIGEga2V5IGZpcnN0IHN0ZXAuIEFuZCB0aGF0IGxlYWRzIHRvIGEgdGhvdWdodCBhYm91dCBmdXp6aW5nOiBpZiBzeXprYWxsZXIgaXMgY3JlYXRpbmcgdGhlIHBsYXRmb3JtIGRldmljZSwgaXQgKmNvdWxkKiBwcm92aWRlIGZha2VkIHJlc291cmNlcywgbGlrZSBtZW1vcnkgcmVnaW9ucy4gU29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZCwgYW5kIG1pZ2h0IGJlY29tZSBpbXBvcnRhbnQuXG5cbkJ1dCBsb29raW5nIGF0IHRoZSBzZXF1ZW5jZSwgYGF0aDEya19haGJfY29uZmlndXJlX3Jwcm9jYCBzcGVjaWZpY2FsbHkgc3Rvb2Qgb3V0LCBiZWNhdXNlIGl0IGluZGljYXRlcyB0aGF0IHRoaXMgZGV2aWNlIGlzIGNvbmZpZ3VyaW5nIHJlbW90ZXByb2MuIFNpbmNlIHJlbW90ZXByb2MgaXMgdXNlZCBmb3Igb2ZmbG9hZGluZyBwcm9jZXNzaW5nIHRvIGEgc2VwYXJhdGUgcHJvY2Vzc29yLCBpdHMgY29uZmlndXJhdGlvbiBpcyBrZXkuIEknbGwgbmVlZCB0byBmb2N1cyBvbiBob3cgdGhhdCBpcyBkb25lLiBJIHNob3VsZCBkZWZpbml0ZWx5IGNoZWNrIGludG8gYGF0aDEya19haGJfY29uZmlndXJlX3Jwcm9jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4NzAsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNToxMy45ODI1ODM2NTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODE5MzI4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMmtfYWhiX2NvbmZpZ3VyZV9ycHJvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jPTg1MT1zdGF0aWMgaW50IGF0aDEya19haGJfYm9vdF9yb290X3BkKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTg3Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjg3MzpzdGF0aWMgaW50IGF0aDEya19haGJfY29uZmlndXJlX3Jwcm9jKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy04NzQte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYz0xMDE5PXN0YXRpYyBpbnQgYXRoMTJrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xMDkxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MTA5MjpcXHRyZXQgPSBhdGgxMmtfYWhiX2NvbmZpZ3VyZV9ycHJvYyhhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xMDkzLVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE1OjE0LjEwMDc4MzIzOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjMwNzU1ODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgYXRoMTJrX2FoYl9jb25maWd1cmVfcnByb2NgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgZG9pbmcgYXQgYSBoaWdoIGxldmVsLCBhbmQgdGhlbiBJIGNhbiBicmVhayBkb3duIHRoZSBzcGVjaWZpY3MuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGlzIGxpa2VseSBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggY29uZmlndXJpbmcgYSByZW1vdGUgcHJvY2Vzc29yIChycHJvYykgZm9yIGFuIEF0aGVyb3MgV2ktRmkgY2hpcCB1c2luZyB0aGUgQUhCIGJ1cy4gIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIGNsb2NrIGNvbmZpZ3VyYXRpb24sIG1lbW9yeSBtYXBwaW5nLCBmaXJtd2FyZSBsb2FkaW5nIG1heWJlLCBhbmQgcHJvYmFibHkgc29tZSBpbnRlcnJ1cHQgc2V0dXAuIFRoZSBcIkFIQlwiIHBhcnQgaXMga2V5IOKAkyBpdCBpbmRpY2F0ZXMgZGlyZWN0IG1lbW9yeSBhY2Nlc3MgYW5kIGEgZmFzdGVyIGNvbW11bmljYXRpb24gcGF0aHdheSB0aGFuIHNvbWV0aGluZyBsaWtlIGEgc3RhbmRhcmQgUENJIGJ1cywgbWVhbmluZyB0aGlzIGlzIGNvcmUtbGV2ZWwgc3R1ZmYuIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIGluaXRpYWxpemluZyB0aGUgaGFyZHdhcmUgdG8gcmVhZHkgaXQgZm9yIHdpcmVsZXNzIG9wZXJhdGlvbi4gVGhpcyBpcyBwcm9iYWJseSBnb2luZyB0byBiZSBwYXJ0IG9mIGFuIGVhcmx5IGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBMZXQncyBzdGFydCByZWFkaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjcxMSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE1OjE3LjMzMTU0Mjk5OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjI3NTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODczLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODczOlxcdHN0YXRpYyBpbnQgYXRoMTJrX2FoYl9jb25maWd1cmVfcnByb2Moc3RydWN0IGF0aDEya19iYXNlICphYilcXG4gODc0OlxcdHtcXG4gODc1OlxcdFxcdHN0cnVjdCBhdGgxMmtfYWhiICphYl9haGIgPSBhdGgxMmtfYWJfdG9fYWhiKGFiKTtcXG4gODc2OlxcdFxcdGludCByZXQ7XFxuIDg3NzpcXHRcXG4gODc4OlxcdFxcdHJldCA9IGF0aDEya19haGJfZ2V0X3Jwcm9jKGFiKTtcXG4gODc5OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA4ODA6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gODgxOlxcdFxcbiA4ODI6XFx0XFx0cmV0ID0gYXRoMTJrX2FoYl9yZWdpc3Rlcl9ycHJvY19ub3RpZmllcihhYik7XFxuIDg4MzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbiA4ODQ6XFx0XFx0XFx0cmV0ID0gZGV2X2Vycl9wcm9iZShcXHUwMDI2YWItXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgcmV0LFxcbiA4ODU6XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgdG8gcmVnaXN0ZXIgcnByb2Mgbm90aWZpZXJcXFxcblxcXCIpO1xcbiA4ODY6XFx0XFx0XFx0Z290byBlcnJfcHV0X3Jwcm9jO1xcbiA4ODc6XFx0XFx0fVxcbiA4ODg6XFx0XFxuIDg4OTpcXHRcXHRpZiAoYWJfYWhiLVxcdTAwM2V0Z3RfcnByb2MtXFx1MDAzZXN0YXRlICE9IFJQUk9DX1JVTk5JTkcpIHtcXG4gODkwOlxcdFxcdFxcdHJldCA9IGF0aDEya19haGJfYm9vdF9yb290X3BkKGFiKTtcXG4gODkxOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIDg5MjpcXHRcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGJvb3QgdGhlIHJlbW90ZSBwcm9jZXNzb3IgUTZcXFxcblxcXCIpO1xcbiA4OTM6XFx0XFx0XFx0XFx0Z290byBlcnJfdW5yZWdfbm90aWZpZXI7XFxuIDg5NDpcXHRcXHRcXHR9XFxuIDg5NTpcXHRcXHR9XFxuIDg5NjpcXHRcXG4gODk3OlxcdFxcdHJldHVybiBhdGgxMmtfYWhiX2NvbmZpZ19ycHJvY19pcnEoYWIpO1xcbiA4OTg6XFx0XFxuIDg5OTpcXHRlcnJfdW5yZWdfbm90aWZpZXI6XFxuIDkwMDpcXHRcXHRhdGgxMmtfYWhiX3VucmVnaXN0ZXJfcnByb2Nfbm90aWZpZXIoYWIpO1xcbiA5MDE6XFx0XFxuIDkwMjpcXHRlcnJfcHV0X3Jwcm9jOlxcbiA5MDM6XFx0XFx0cnByb2NfcHV0KGFiX2FoYi1cXHUwMDNldGd0X3Jwcm9jKTtcXG4gOTA0OlxcdFxcdHJldHVybiByZXQ7XFxuIDkwNTpcXHR9XFxuIDkwNjpcXHRcXG4gOTA3OlxcdHN0YXRpYyB2b2lkIGF0aDEya19haGJfZGVjb25maWd1cmVfcnByb2Moc3RydWN0IGF0aDEya19iYXNlICphYilcXG4gOTA4OlxcdHtcXG4gOTA5OlxcdFxcdHN0cnVjdCBhdGgxMmtfYWhiICphYl9haGIgPSBhdGgxMmtfYWJfdG9fYWhiKGFiKTtcXG4gOTEwOlxcdFxcbiA5MTE6XFx0XFx0YXRoMTJrX2FoYl91bnJlZ2lzdGVyX3Jwcm9jX25vdGlmaWVyKGFiKTtcXG4gOTEyOlxcdFxcdHJwcm9jX3B1dChhYl9haGItXFx1MDAzZXRndF9ycHJvYyk7XFxuIDkxMzpcXHR9XFxuIDkxNDpcXHRcXG4gOTE1OlxcdHN0YXRpYyBpbnQgYXRoMTJrX2FoYl9yZXNvdXJjZV9pbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuIDkxNjpcXHR7XFxuIDkxNzpcXHRcXHRzdHJ1Y3QgYXRoMTJrX2FoYiAqYWJfYWhiID0gYXRoMTJrX2FiX3RvX2FoYihhYik7XFxuIDkxODpcXHRcXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gYWItXFx1MDAzZXBkZXY7XFxuIDkxOTpcXHRcXHRzdHJ1Y3QgcmVzb3VyY2UgKm1lbV9yZXM7XFxuIDkyMDpcXHRcXHRpbnQgcmV0O1xcbiA5MjE6XFx0XFxuIDkyMjpcXHRcXHRhYi1cXHUwMDNlbWVtID0gZGV2bV9wbGF0Zm9ybV9nZXRfYW5kX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMCwgXFx1MDAyNm1lbV9yZXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNToxNy4zMzM3NzUzODlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzEyNDM3OTI3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBgYXRoMTJrYCBDb2RlIFBhdGhzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgYXRoMTJrX2FoYl9nZXRfcnByb2NgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUgZ29hbCBpcyB0byBnZXQgYSByZW1vdGVwcm9jIGRldmljZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gc3l6a2FsbGVyIGFjdHVhbGx5IGNyZWF0ZSBhIHJlbW90ZXByb2MgZGV2aWNlIGFuZCBsaW5rIGl0IHRvIHRoZSBwbGF0Zm9ybSBkZXZpY2UsIGluIGEgd2F5IHRoYXQgd291bGQgdHJpY2sgdGhpcyBkcml2ZXIgaW50byB0aGlua2luZyBpdCdzIHJ1bm5pbmcgb24gcmVhbCBoYXJkd2FyZT8gSSdtIGhpZ2hseSBza2VwdGljYWwuIFRoZSBkZXBlbmRlbmNpZXMgYXJlIGp1c3QgdG9vIG51bWVyb3VzIOKAkyByZW1vdGVwcm9jLCBtZW1vcnkgcmVnaW9ucywgaW50ZXJydXB0cywgdGhlIHdob2xlIHNoZWJhbmcuIEl0J3Mgd2lsZGx5IGltcHJvYmFibGUgdGhhdCBzeXprYWxsZXIgY291bGQgc3VjY2Vzc2Z1bGx5IG1vY2sgKmFsbCogb2YgdGhvc2UgdG8gZXZlbiBnZXQgdG8gYGF0aDEya19jb3JlX2luaXRgLCBsZXQgYWxvbmUgdGhlIGZ1cnRoZXIgc3RhZ2Ugb2YgYGF0aDEya19jb3JlX3FtaV9maXJtd2FyZV9yZWFkeWAgd2hpY2ggcmVhbGlzdGljYWxseSBkZW1hbmRzIGFjdHVhbCBmaXJtd2FyZSBpbnRlcmFjdGlvbiBvciBhIHNvcGhpc3RpY2F0ZWQgUU1JIHNlcnZlciBtb2NrLlxuXG5IYW5nIG9uLi4uIHdoYXQgYWJvdXQgYG1hYzgwMjExX2h3c2ltYD8gVGhhdCBlbXVsYXRlcyBXaS1GaSwgYnV0IGl0J3Mgbm90IGFjdHVhbGx5IGFuIGBhdGgxMmtgIGRyaXZlci4gU28gdGhhdCdzIGEgZGVhZCBlbmQuXG5cbkknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzICphbnkqIHdheSB0byByZWFjaCBgYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlc2Agd2l0aG91dCByZWFsIGhhcmR3YXJlLiBMZXQncyB0cmFjZSBiYWNrIGZyb20gdGhhdCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBpdCdzIGNhbGxlZCBmcm9tIGBhdGgxMmtfbWFjX3NldHVwX3JlZ2lzdGVyYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYGF0aDEya19tYWNfaHdfcmVnaXN0ZXJgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgYXRoMTJrX21hY19yZWdpc3RlcmAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBhdGgxMmtfY29yZV9od19ncm91cF9zdGFydGAsIHdoaWNoIGlzIGluIHR1cm4gY2FsbGVkIGZyb20gYGF0aDEya19jb3JlX3FtaV9maXJtd2FyZV9yZWFkeWAuIFRoYXQncyB3aGVyZSB3ZSBnZXQgdG8gdGhlIGZpcm13YXJlIHJlYWRpbmVzcywgd2hpY2ggb2YgY291cnNlLCB3ZSBkb24ndCBoYXZlLlxuXG5CYXNpY2FsbHksIHdpdGhvdXQgdGhlIGZpcm13YXJlIGJlaW5nIHJlYWR5LCB0aGlzIHdob2xlIHNlcXVlbmNlIGlzIHVucmVhY2hhYmxlLiBBbmQgY29uc2lkZXJpbmcgYGF0aDEya2AgaXMgYSBoYXJkd2FyZSBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciBRdWFsY29tbSBXaS1GaSA3IGRldmljZXMsIGFuZCBzeXprYWxsZXIgKmRlZmluaXRlbHkqIGRvZXNuJ3QgZW11bGF0ZSB0aGF0IGhhcmR3YXJlLCBhbmQgUUVNVSBwcm9iYWJseSBkb2Vzbid0IGJ5IGRlZmF1bHQgZWl0aGVyLCBJJ20gcHJldHR5IGNvbmZpZGVudCB0aGlzIGNvZGUgaXNuJ3QgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXG5cbk5vdywgYSBnbGltbWVyIG9mIGhvcGUuLi4gQ291bGQgc3l6a2FsbGVyIHBvdGVudGlhbGx5IGluamVjdCBRTUkgbWVzc2FnZXMgZnJvbSB1c2Vyc3BhY2UgdG8gc29tZWhvdyB0cmlnZ2VyIGBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudF93b3JrYD8gTGV0J3MgY2hlY2sgYGF0aDEya19xbWlfZHJpdmVyX2V2ZW50X3dvcmtgLiBUaGF0J3MgdGhlIGtleSBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODAxLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTU6MjQuNDU4MTYwNTgxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5NjUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzOTY1OlxcdHN0YXRpYyB2b2lkIGF0aDEya19xbWlfZHJpdmVyX2V2ZW50X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbjM5NjY6XFx0e1xcbjM5Njc6XFx0XFx0c3RydWN0IGF0aDEya19xbWkgKnFtaSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXRoMTJrX3FtaSxcXG4zOTY4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGV2ZW50X3dvcmspO1xcbjM5Njk6XFx0XFx0c3RydWN0IGF0aDEya19xbWlfZHJpdmVyX2V2ZW50ICpldmVudDtcXG4zOTcwOlxcdFxcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBxbWktXFx1MDAzZWFiO1xcbjM5NzE6XFx0XFx0aW50IHJldDtcXG4zOTcyOlxcdFxcbjM5NzM6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZxbWktXFx1MDAzZWV2ZW50X2xvY2spO1xcbjM5NzQ6XFx0XFx0d2hpbGUgKCFsaXN0X2VtcHR5KFxcdTAwMjZxbWktXFx1MDAzZWV2ZW50X2xpc3QpKSB7XFxuMzk3NTpcXHRcXHRcXHRldmVudCA9IGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNnFtaS1cXHUwMDNlZXZlbnRfbGlzdCxcXG4zOTc2OlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYXRoMTJrX3FtaV9kcml2ZXJfZXZlbnQsIGxpc3QpO1xcbjM5Nzc6XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNmV2ZW50LVxcdTAwM2VsaXN0KTtcXG4zOTc4OlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZxbWktXFx1MDAzZWV2ZW50X2xvY2spO1xcbjM5Nzk6XFx0XFxuMzk4MDpcXHRcXHRcXHRpZiAodGVzdF9iaXQoQVRIMTJLX0ZMQUdfVU5SRUdJU1RFUklORywgXFx1MDAyNmFiLVxcdTAwM2VkZXZfZmxhZ3MpKVxcbjM5ODE6XFx0XFx0XFx0XFx0Z290byBza2lwO1xcbjM5ODI6XFx0XFxuMzk4MzpcXHRcXHRcXHRzd2l0Y2ggKGV2ZW50LVxcdTAwM2V0eXBlKSB7XFxuMzk4NDpcXHRcXHRcXHRjYXNlIEFUSDEyS19RTUlfRVZFTlRfU0VSVkVSX0FSUklWRTpcXG4zOTg1OlxcdFxcdFxcdFxcdHJldCA9IGF0aDEya19xbWlfZXZlbnRfc2VydmVyX2Fycml2ZShxbWkpO1xcbjM5ODY6XFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMzk4NzpcXHRcXHRcXHRcXHRcXHRzZXRfYml0KEFUSDEyS19GTEFHX1FNSV9GQUlMLCBcXHUwMDI2YWItXFx1MDAzZWRldl9mbGFncyk7XFxuMzk4ODpcXHRcXHRcXHRcXHRicmVhaztcXG4zOTg5OlxcdFxcdFxcdGNhc2UgQVRIMTJLX1FNSV9FVkVOVF9TRVJWRVJfRVhJVDpcXG4zOTkwOlxcdFxcdFxcdFxcdHNldF9iaXQoQVRIMTJLX0ZMQUdfQ1JBU0hfRkxVU0gsIFxcdTAwMjZhYi1cXHUwMDNlZGV2X2ZsYWdzKTtcXG4zOTkxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjM5OTI6XFx0XFx0XFx0Y2FzZSBBVEgxMktfUU1JX0VWRU5UX1JFUVVFU1RfTUVNOlxcbjM5OTM6XFx0XFx0XFx0XFx0cmV0ID0gYXRoMTJrX3FtaV9ldmVudF9tZW1fcmVxdWVzdChxbWkpO1xcbjM5OTQ6XFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMzk5NTpcXHRcXHRcXHRcXHRcXHRzZXRfYml0KEFUSDEyS19GTEFHX1FNSV9GQUlMLCBcXHUwMDI2YWItXFx1MDAzZWRldl9mbGFncyk7XFxuMzk5NjpcXHRcXHRcXHRcXHRicmVhaztcXG4zOTk3OlxcdFxcdFxcdGNhc2UgQVRIMTJLX1FNSV9FVkVOVF9GV19NRU1fUkVBRFk6XFxuMzk5ODpcXHRcXHRcXHRcXHRyZXQgPSBhdGgxMmtfcW1pX2V2ZW50X2xvYWRfYmRmKHFtaSk7XFxuMzk5OTpcXHRcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG40MDAwOlxcdFxcdFxcdFxcdFxcdHNldF9iaXQoQVRIMTJLX0ZMQUdfUU1JX0ZBSUwsIFxcdTAwMjZhYi1cXHUwMDNlZGV2X2ZsYWdzKTtcXG40MDAxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjQwMDI6XFx0XFx0XFx0Y2FzZSBBVEgxMktfUU1JX0VWRU5UX0ZXX1JFQURZOlxcbjQwMDM6XFx0XFx0XFx0XFx0Y2xlYXJfYml0KEFUSDEyS19GTEFHX1FNSV9GQUlMLCBcXHUwMDI2YWItXFx1MDAzZWRldl9mbGFncyk7XFxuNDAwNDpcXHRcXHRcXHRcXHRpZiAodGVzdF9iaXQoQVRIMTJLX0ZMQUdfUU1JX0ZXX1JFQURZX0NPTVBMRVRFLCBcXHUwMDI2YWItXFx1MDAzZWRldl9mbGFncykpIHtcXG40MDA1OlxcdFxcdFxcdFxcdFxcdGlmIChhYi1cXHUwMDNlaXNfcmVzZXQpXFxuNDAwNjpcXHRcXHRcXHRcXHRcXHRcXHRhdGgxMmtfaGFsX2R1bXBfc3JuZ19zdGF0cyhhYik7XFxuNDAwNzpcXHRcXG40MDA4OlxcdFxcdFxcdFxcdFxcdHNldF9iaXQoQVRIMTJLX0ZMQUdfUkVDT1ZFUlksIFxcdTAwMjZhYi1cXHUwMDNlZGV2X2ZsYWdzKTtcXG40MDA5OlxcdFxcdFxcdFxcdFxcdHF1ZXVlX3dvcmsoYWItXFx1MDAzZXdvcmtxdWV1ZSwgXFx1MDAyNmFiLVxcdTAwM2VyZXN0YXJ0X3dvcmspO1xcbjQwMTA6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDAxMTpcXHRcXHRcXHRcXHR9XFxuNDAxMjpcXHRcXG40MDEzOlxcdFxcdFxcdFxcdGNsZWFyX2JpdChBVEgxMktfRkxBR19DUkFTSF9GTFVTSCxcXG40MDE0OlxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmFiLVxcdTAwM2VkZXZfZmxhZ3MpO1xcbjQwMTU6XFx0XFx0XFx0XFx0cmV0ID0gYXRoMTJrX2NvcmVfcW1pX2Zpcm13YXJlX3JlYWR5KGFiKTtcXG40MDE2OlxcdFxcdFxcdFxcdGlmICghcmV0KVxcbjQwMTc6XFx0XFx0XFx0XFx0XFx0c2V0X2JpdChBVEgxMktfRkxBR19RTUlfRldfUkVBRFlfQ09NUExFVEUsXFxuNDAxODpcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2YWItXFx1MDAzZWRldl9mbGFncyk7XFxuNDAxOTpcXHRcXG40MDIwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjQwMjE6XFx0XFx0XFx0Y2FzZSBBVEgxMktfUU1JX0VWRU5UX0hPU1RfQ0FQOlxcbjQwMjI6XFx0XFx0XFx0XFx0cmV0ID0gYXRoMTJrX3FtaV9ldmVudF9ob3N0X2NhcChxbWkpO1xcbjQwMjM6XFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuNDAyNDpcXHRcXHRcXHRcXHRcXHRzZXRfYml0KEFUSDEyS19GTEFHX1FNSV9GQUlMLCBcXHUwMDI2YWItXFx1MDAzZWRldl9mbGFncyk7XFxuNDAyNTpcXHRcXHRcXHRcXHRicmVhaztcXG40MDI2OlxcdFxcdFxcdGRlZmF1bHQ6XFxuNDAyNzpcXHRcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImludmFsaWQgZXZlbnQgdHlwZTogJWRcXFwiLCBldmVudC1cXHUwMDNldHlwZSk7XFxuNDAyODpcXHRcXHRcXHRcXHRicmVhaztcXG40MDI5OlxcdFxcdFxcdH1cXG40MDMwOlxcdFxcbjQwMzE6XFx0c2tpcDpcXG40MDMyOlxcdFxcdFxcdGtmcmVlKGV2ZW50KTtcXG40MDMzOlxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2cW1pLVxcdTAwM2VldmVudF9sb2NrKTtcXG40MDM0OlxcdFxcdH1cXG40MDM1OlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZxbWktXFx1MDAzZWV2ZW50X2xvY2spO1xcbjQwMzY6XFx0fVxcbjQwMzc6XFx0XFxuNDAzODpcXHRpbnQgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYilcXG40MDM5OlxcdHtcXG40MDQwOlxcdFxcdGludCByZXQ7XFxuNDA0MTpcXHRcXG40MDQyOlxcdFxcdG1lbXNldChcXHUwMDI2YWItXFx1MDAzZXFtaS50YXJnZXQsIDAsIHNpemVvZihzdHJ1Y3QgdGFyZ2V0X2luZm8pKTtcXG40MDQzOlxcdFxcdG1lbXNldChcXHUwMDI2YWItXFx1MDAzZXFtaS50YXJnZXRfbWVtLCAwLCBzaXplb2Yoc3RydWN0IHRhcmdldF9tZW1fY2h1bmspKTtcXG40MDQ0OlxcdFxcdGFiLVxcdTAwM2VxbWkuYWIgPSBhYjtcXG40MDQ1OlxcdFxcbjQwNDY6XFx0XFx0YWItXFx1MDAzZXFtaS50YXJnZXRfbWVtX21vZGUgPSBhYi1cXHUwMDNldGFyZ2V0X21lbV9tb2RlO1xcbjQwNDc6XFx0XFx0cmV0ID0gcW1pX2hhbmRsZV9pbml0KFxcdTAwMjZhYi1cXHUwMDNlcW1pLmhhbmRsZSwgQVRIMTJLX1FNSV9SRVNQX0xFTl9NQVgsXFxuNDA0ODpcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2YXRoMTJrX3FtaV9vcHMsIGF0aDEya19xbWlfbXNnX2hhbmRsZXJzKTtcXG40MDQ5OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuNDA1MDpcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImZhaWxlZCB0byBpbml0aWFsaXplIHFtaSBoYW5kbGVcXFxcblxcXCIpO1xcbjQwNTE6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG40MDUyOlxcdFxcdH1cXG40MDUzOlxcdFxcbjQwNTQ6XFx0XFx0YWItXFx1MDAzZXFtaS5ldmVudF93cSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKFxcXCJhdGgxMmtfcW1pX2RyaXZlcl9ldmVudFxcXCIsIDApO1xcbjQwNTU6XFx0XFx0aWYgKCFhYi1cXHUwMDNlcW1pLmV2ZW50X3dxKSB7XFxuNDA1NjpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGFsbG9jYXRlIHdvcmtxdWV1ZVxcXFxuXFxcIik7XFxuNDA1NzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG40MDU4OlxcdFxcdH1cXG40MDU5OlxcdFxcbjQwNjA6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmFiLVxcdTAwM2VxbWkuZXZlbnRfbGlzdCk7XFxuNDA2MTpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2YWItXFx1MDAzZXFtaS5ldmVudF9sb2NrKTtcXG40MDYyOlxcdFxcdElOSVRfV09SSyhcXHUwMDI2YWItXFx1MDAzZXFtaS5ldmVudF93b3JrLCBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudF93b3JrKTtcXG40MDYzOlxcdFxcbjQwNjQ6XFx0XFx0cmV0ID0gcW1pX2FkZF9sb29rdXAoXFx1MDAyNmFiLVxcdTAwM2VxbWkuaGFuZGxlLCBRTUlfU0VSVklDRV9JRF9XTEZXLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNToyNC40NTg2MDg1NjFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyMjg1OTg2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB1bmRlcnN0YW5kaW5nLCByZW5kZXJlZCBhcyB0aG91Z2ggaXQgd2VyZSBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKkV2ZW50IEhhbmRsaW5nIGluIHRoZSBhdGgxMmsgUU1JIEZyYW1ld29yayoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIGBhdGgxMmtgIFFNSSBjb2RlLiBJJ3ZlIHRyYWNrZWQgZG93biB0aGUgYGF0aDEya19xbWlfbXNnX2Z3X3JlYWR5X2NiYCBmdW5jdGlvbi4gTXkgbWFpbiBmb2N1cyBpcyBvbiBob3cgZXZlbnRzIGFyZSBoYW5kbGVkLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRoYXQgdGhlIGBBVEgxMktfUU1JX0VWRU5UX0ZXX1JFQURZYCBldmVudCwgd2hpY2gsIGp1ZGdpbmcgZnJvbSB0aGUgbmFtZSwgaW5kaWNhdGVzIHRoZSBmaXJtd2FyZSBpcyBub3cgcmVhZHksIGlzIGJlaW5nIGFkZGVkIHRvIGEgbGlzdCBvciBxdWV1ZSB3aXRoaW4gdGhpcyBjYWxsYmFjay4gVGhpcyBtdXN0IGJlIHRoZSBtZWNoYW5pc20gdGhlIGRyaXZlciB1c2VzIHRvIHNpZ25hbCBhbmQgbWFuYWdlIHRoZSBzdGF0ZSB0cmFuc2l0aW9ucyByZWxhdGVkIHRvIHRoZSBmaXJtd2FyZSBsb2FkaW5nIHByb2Nlc3MgYWZ0ZXIgYSBgUU1JYCBtZXNzYWdlIGlzIHJlY2VpdmVkLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIGluc2lnaHQgaW50byBob3cgdGhlIGV2ZW50IGlzIGZ1cnRoZXIgcHJvY2Vzc2VkIGFuZCB1dGlsaXplZCBmb3IgdGhlIG92ZXJhbGwgY29udHJvbCBmbG93IG9mIHRoZSBkcml2ZXIuIEkgbmVlZCB0byBsb29rIGludG8gaG93IHRoaXMgbGlzdCBpcyBjb25zdW1lZCBuZXh0OyBsaWtlbHkgdGhlcmUncyBhIHByb2Nlc3NpbmcgbG9vcCBvciBhbm90aGVyIGNhbGxiYWNrIGZ1bmN0aW9uIHdhaXRpbmcgZm9yIGV2ZW50cyBvbiB0aGlzIGxpc3QgdG8gaGFuZGxlIGZ1cnRoZXIgaW5pdGlhbGl6YXRpb24gc3RlcHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjE0LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNToyOC4wODE0NzI0NzhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTQ5MjIxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMmtfcW1pX21zZ19md19yZWFkeV9jYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jPTM4NTk9c3RhdGljIHZvaWQgYXRoMTJrX3FtaV9tc2dfbWVtX3JlYWR5X2NiKHN0cnVjdCBxbWlfaGFuZGxlICpxbWlfaGRsLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy0zODcwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM6Mzg3MTpzdGF0aWMgdm9pZCBhdGgxMmtfcW1pX21zZ19md19yZWFkeV9jYihzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pX2hkbCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTM4NzItXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM9Mzg4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHFtaV9tc2dfaGFuZGxlciBhdGgxMmtfcW1pX21zZ19oYW5kbGVyc1tdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy0zOTAyLVxcdFxcdC5kZWNvZGVkX3NpemUgPSBzaXplb2Yoc3RydWN0IHFtaV93bGFuZndfZndfcmVhZHlfaW5kX21zZ192MDEpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM6MzkwMzpcXHRcXHQuZm4gPSBhdGgxMmtfcW1pX21zZ19md19yZWFkeV9jYixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTM5MDQtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTU6MjguMTkyOTc2MjgyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwNzUwNTU2MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBhdGgxMmsgUU1JIEZpcm13YXJlIFJlYWR5IENhbGxiYWNrKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGF0aDEya19xbWlfbXNnX2Z3X3JlYWR5X2NiYC4gSXQncyB0cmlnZ2VyZWQgYnkgcmVjZWl2aW5nIHRoZSBgUU1JX1dMRldfRldfUkVBRFlfSU5EX1YwMWAgbWVzc2FnZSwgd2hpY2ggbWFrZXMgc2Vuc2UuIEJ1dCB0aGUga2V5IGlzIHRoYXQgdGhpcyBtZXNzYWdlIGlzIG9ubHkgcmVjZWl2ZWQgd2hlbiB0aGUgUVJUUiBzb2NrZXQgaXMgYWN0dWFsbHkgY29ubmVjdGVkIHRvIHRoZSBmaXJtd2FyZS4gVGhlIHNvY2tldCBjcmVhdGlvbiBpdHNlbGYgaGFwcGVucyBpbiBgcW1pX2hhbmRsZV9pbml0YC5cblxuTm93LCB0aGUgb2J2aW91cyBxdWVzdGlvbiBpczogY2FuIHN5emthbGxlciBiZSB1c2VkIHRvIHRyaWdnZXIgdGhpcyBjYWxsYmFjaz8gSXQgY2FuIGNyZWF0ZSBRUlRSIHNvY2tldHMgYW5kIHNlbmQgbWVzc2FnZXMsIHNvIGluIHRoZW9yeSwgaWYgc3l6a2FsbGVyIGNyZWF0ZXMgYSBzb2NrZXQsIHRoZW4gc2VuZHMgdGhlIGBRTUlfV0xGV19GV19SRUFEWV9JTkRfVjAxYCBtZXNzYWdlIHRvIHRoZSBhdGgxMmsgZHJpdmVyJ3Mgbm9kZSBJRCwgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSB3b3JrLiBUaGUgaXNzdWUgbm93IGlzIGhvdyB0byBrbm93IHRoaXMgbm9kZSBJRC4gVGhlIGF0aDEyayBkcml2ZXIsIGJlaW5nIGEgUU1JIGNsaWVudCwgd2lsbCBoYXZlIGEgbG9jYWwgbm9kZSBJRCBhc3NpZ25lZCB0byBpdCBieSB0aGUgUVJUUiBjb3JlLCBidXQgaG93IGRvIEkgZ2V0IGl0P1xuXG5TaW5jZSBzeXprYWxsZXIgY2FuIHNlbmQgbWVzc2FnZXMgdG8gYW55IG5vZGUgSUQsIHRoYXQgc2VlbXMgbGlrZSBhIG5vbi1pc3N1ZS4gVGhlIGxhcmdlciBjb25jZXJuIGlzIHRoYXQgYGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlYCBtdXN0IGhhdmUgYmVlbiBjYWxsZWQgKmJlZm9yZSogdGhlIGNhbGxiYWNrIHdpbGwgZXZlciBiZSB0cmlnZ2VyZWQuIFRoYXQgZnVuY3Rpb24sIGBhdGgxMmtfcW1pX2luaXRfc2VydmljZWAgaXMgY2FsbGVkIGZyb20gYGF0aDEya19jb3JlX3NvY19jcmVhdGVgLCB3aGljaCBjb21lcyBmcm9tIGBhdGgxMmtfY29yZV9pbml0YCwgd2hpY2ggZmluYWxseSBvcmlnaW5hdGVzIGZyb20gZWl0aGVyIGBhdGgxMmtfYWhiX3Byb2JlYCBvciBgYXRoMTJrX3BjaV9wcm9iZWAuXG5cblNvIHdl4oCZcmUgYmFjayB0byB0aGUgZHJpdmVyIHByb2JlIGZ1bmN0aW9ucywgYGF0aDEya19haGJfcHJvYmVgIGFuZCBgYXRoMTJrX3BjaV9wcm9iZWAuIENhbiBzeXprYWxsZXIgZXhlY3V0ZSBgYXRoMTJrX2FoYl9wcm9iZWAgc3VjY2Vzc2Z1bGx5PyBJIG5lZWQgdG8gZm9jdXMgdGhlcmUuIFRpbWUgdG8gcmUtZXhhbWluZSBgYXRoMTJrX2FoYl9wcm9iZWAgdG8gc2VlIHdoYXQgbmVlZHMgdG8gYmUgaW4gcGxhY2UuIEkgcmVtZW1iZXIgaXQgY2FsbHMgYGF0aDEya19haGJfZ2V0X3Jwcm9jYC4gSSdsbCBzdGFydCB3aXRoIHRoaXMgY2FsbCwgYXMgaXQgaXMgb25lIG9mIHRoZSBtb3JlIGludm9sdmVkIGNhbGxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTI4MiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNTozNS4yNjgwMzY1NjZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MzU3MDQxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMmtfYWhiX2dldF9ycHJvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jPTgxMz1zdGF0aWMgdm9pZCBhdGgxMmtfYWhiX3VucmVnaXN0ZXJfcnByb2Nfbm90aWZpZXIoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtODI2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6ODI3OnN0YXRpYyBpbnQgYXRoMTJrX2FoYl9nZXRfcnByb2Moc3RydWN0IGF0aDEya19iYXNlICphYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTgyOC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jPTg3Mz1zdGF0aWMgaW50IGF0aDEya19haGJfY29uZmlndXJlX3Jwcm9jKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTg3Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjg3ODpcXHRyZXQgPSBhdGgxMmtfYWhiX2dldF9ycHJvYyhhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy04NzktXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE1OjM1LjYyMTYxNTkxNFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjk3OTE2MzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYGF0aDEya19haGJfZ2V0X3Jwcm9jYDpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IE5hdmlnYXRpbmcgdGhlIFJQUk9DIEFjcXVpc2l0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIGBhdGgxMmtfYWhiX2dldF9ycHJvY2AuIEJhc2VkIG9uIHRoZSBuYW1lLCBpdCdzIHByZXR0eSBjbGVhciB0aGlzIGZ1bmN0aW9uIGlzIGludm9sdmVkIGluIGFjcXVpcmluZyBhIHJlbW90ZSBwcm9jZXNzb3IsIHByb2JhYmx5IG9uIGFuIEFIQiBidXMsIHJlbGF0ZWQgdG8gdGhlIGF0aDEyayB3aXJlbGVzcyBkcml2ZXIuIEknbSBnb2luZyB0byBhc3N1bWUgdGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBvciBjb21tdW5pY2F0aW9uLCBsaWtlbHkgc2V0dGluZyB1cCB0aGUgbmVjZXNzYXJ5IGhhcmR3YXJlIHJlc291cmNlcy4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoYXQgQUhCIGltcGxpZXMgYSBwb3RlbnRpYWxseSB0aWdodGVyIGludGVncmF0aW9uIHdpdGggdGhlIGhhcmR3YXJlLCBhIGxvd2VyLWxldmVsIGludGVyYWN0aW9uIHRoYW4gc29tZXRoaW5nIFBDSS1iYXNlZC4gSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIGRlYWxzIHdpdGggbWVtb3J5IG1hcHBpbmcsIGNsb2NrIGVuYWJsaW5nLCBpbnRlcnJ1cHQgcmVnaXN0cmF0aW9uLCBhbmQgcGVyaGFwcyBzb21lIGRldmljZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGRldGFpbHMuIEknbGwgYmUgbG9va2luZyBmb3IgcmVmZXJlbmNlcyB0byBoYXJkd2FyZSByZWdpc3RlcnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgY29uZmlybSBteSBpbml0aWFsIHRob3VnaHRzLiBJJ20gYWxzbyBhbnRpY2lwYXRpbmcgdGhhdCBlcnJvciBoYW5kbGluZyB3aWxsIGJlIHByZXNlbnQsIGFzIGZhaWxpbmcgdG8gYWNxdWlyZSB0aGUgUlBST0MgY291bGQgYmUgYSBmdW5kYW1lbnRhbCBpc3N1ZSBmb3IgdGhlIHdob2xlIHN5c3RlbS4gTGV0J3Mgc2VlIGhvdyB0aGV5IGhhbmRsZSB0aGF0LiBNeSBpbnN0aW5jdCBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEga2VybmVsIGRyaXZlciBmdW5jdGlvbiwgYW5kIHRodXMgdmVyeSBjYXJlZnVsIGFib3V0IGxvY2tpbmcsIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgZ2VuZXJhbCByb2J1c3RuZXNzLiBJIHdpbGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IGhvdyB0aGV5IGRlYWwgd2l0aCBjb25jdXJyZW5jeSwgb3IgbGFjayB0aGVyZW9mLiBBbmQgZmluYWxseSwgSSB3b3VsZCBleHBlY3QgdGhhdCB0aGlzIGlzIHRoZSBlbnRyeSBwb2ludCwgb3IgYSBjb3JlIGZ1bmN0aW9uLCBmb3IgdGhlIGRldmljZSB0byBldmVuIGZ1bmN0aW9uLiBMZXQncyBkaWcgaW4gYW5kIHNlZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI0OTUsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNTozOS45MTk1Mzc0OFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjE1NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODI3LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODI3OlxcdHN0YXRpYyBpbnQgYXRoMTJrX2FoYl9nZXRfcnByb2Moc3RydWN0IGF0aDEya19iYXNlICphYilcXG4gODI4OlxcdHtcXG4gODI5OlxcdFxcdHN0cnVjdCBhdGgxMmtfYWhiICphYl9haGIgPSBhdGgxMmtfYWJfdG9fYWhiKGFiKTtcXG4gODMwOlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGFiLVxcdTAwM2VkZXY7XFxuIDgzMTpcXHRcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xcbiA4MzI6XFx0XFx0c3RydWN0IHJwcm9jICpwcnByb2M7XFxuIDgzMzpcXHRcXG4gODM0OlxcdFxcdG5wID0gb2ZfcGFyc2VfcGhhbmRsZShkZXYtXFx1MDAzZW9mX25vZGUsIFxcXCJxY29tLHJwcm9jXFxcIiwgMCk7XFxuIDgzNTpcXHRcXHRpZiAoIW5wKSB7XFxuIDgzNjpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGdldCBxNl9ycHJvYyBoYW5kbGVcXFxcblxcXCIpO1xcbiA4Mzc6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIDgzODpcXHRcXHR9XFxuIDgzOTpcXHRcXG4gODQwOlxcdFxcdHBycHJvYyA9IHJwcm9jX2dldF9ieV9waGFuZGxlKG5wLVxcdTAwM2VwaGFuZGxlKTtcXG4gODQxOlxcdFxcdG9mX25vZGVfcHV0KG5wKTtcXG4gODQyOlxcdFxcdGlmICghcHJwcm9jKVxcbiA4NDM6XFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoXFx1MDAyNmFiLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsIC1FUFJPQkVfREVGRVIsXFxuIDg0NDpcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gZ2V0IHJwcm9jXFxcXG5cXFwiKTtcXG4gODQ1OlxcdFxcbiA4NDY6XFx0XFx0YWJfYWhiLVxcdTAwM2V0Z3RfcnByb2MgPSBwcnByb2M7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE1OjM5LjkyMTc1Nzc2WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMjk4NjEzMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBhdGgxMmsgRHJpdmVyIFByb2JlIFNlcXVlbmNlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBhdGgxMmtgIGRyaXZlciBwcm9iZSBpc3N1ZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQncyBhbGwgYWJvdXQgdGhlIGRldmljZSB0cmVlIGFuZCBob3cgaXQncyBiZWluZyBoYW5kbGVkLiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoaXMgZGVwZW5kZW5jZSBvbiBhIGRldmljZSB0cmVlIG5vZGUgd2l0aCBhIGBxY29tLHJwcm9jYCBwaGFuZGxlLiBUaGF0J3MgaW1tZWRpYXRlbHkgYSByZWQgZmxhZy4gU3l6a2FsbGVyLCB3aGlsZSBhIHBvd2VyZnVsIGZ1enppbmcgdG9vbCwgaXNuJ3QgZGVzaWduZWQgdG8gaW5qZWN0IHRoZXNlIGNvbXBsZXggZGV2aWNlIHRyZWUgc3RydWN0dXJlcyDigJMgaXQncyBnb2luZyB0byBzdHJ1Z2dsZSBzZXR0aW5nIHVwIHRoYXQgY3JpdGljYWwgYHFjb20scnByb2NgIGNvbm5lY3Rpb24uXG5cblRoZXJlZm9yZSwgSSdtIHByZXR0eSBzdXJlIHRoYXQgd2hlbiBgYXRoMTJrX2FoYl9nZXRfcnByb2NgIGlzIGNhbGxlZCwgaXQncyBnb2luZyB0byBjaG9rZSB3aXRoIGFuIGAtRU5PRU5UYCBlcnJvci4gRWl0aGVyIGBkZXYtXHUwMDNlb2Zfbm9kZWAgd2lsbCBiZSBOVUxMLCBvciwgZXZlbiBpZiBpdCdzIHRoZXJlLCB0aGF0IHJlcXVpcmVkIGBxY29tLHJwcm9jYCBwcm9wZXJ0eSBpcyBzaW1wbHkgbm90IGdvaW5nIHRvIGV4aXN0IGluIHRoZSBcImZha2VcIiBkZXZpY2UgdHJlZSBTeXprYWxsZXIncyBnZW5lcmF0aW5nLlxuXG5BbmQgaWYgKnRoYXQqIGZhaWxzLCBgYXRoMTJrX2FoYl9jb25maWd1cmVfcnByb2NgIGlzIGd1YXJhbnRlZWQgdG8gZmFpbCwgYW5kIHRoYXQsIGluIHR1cm4sIGtpbGxzIHRoZSBgYXRoMTJrX2FoYl9wcm9iZWAgY2FsbCwgcHJvYmFibHkgYmVmb3JlIGl0IGV2ZW4gZ2V0cyB0byBgYXRoMTJrX2NvcmVfaW5pdGAuIFRoYXQgc2VxdWVuY2UgaXMgYSBkZWFkIGVuZCDigJMgdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24gbmV2ZXIgZXZlbiBleGVjdXRlcy4gXG5cbkJ1dCwgd2FpdC4uLiB0aGVyZSdzIGFsc28gdGhlIFBDSSBwcm9iZSBwYXRoIHRvIGNvbnNpZGVyLiBJcyBgYXRoMTJrX3BjaV9wcm9iZWAgYWxzbyBmYWlsaW5nPyBJIG5lZWQgdG8gY2hlY2sgaWYgaXQgZGVwZW5kcyBvbiB0aGUgc2FtZSBkZXZpY2UgdHJlZSBub2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgYWhiIHBhdGggaXMgbW9yZSBwcm9uZSB0byBmYWlsdXJlLCBkdWUgdG8gdGhlIHJlbGlhbmNlIG9uIHRoYXQgcnByb2MsIGFuZCBpZiB0aGlzIGlzIGEgZ2VuZXJhbCBpc3N1ZSBvciBzcGVjaWZpYyB0byB0aGUgYWhiIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMjM5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTU6NDUuMTUzNjUxODc4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDEyNjQ2NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX3BjaV9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE1MDc9YXRoMTJrX2dldF9kZXZpY2VfZmFtaWx5KGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNTI3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTUyODpzdGF0aWMgaW50IGF0aDEya19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNTI5LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTgwOD1pbnQgYXRoMTJrX3BjaV9yZWdpc3Rlcl9kcml2ZXIoY29uc3QgZW51bSBhdGgxMmtfZGV2aWNlX2ZhbWlseSBkZXZpY2VfaWQsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MjktXFx0cGNpX2RyaXZlci1cXHUwMDNlaWRfdGFibGUgPSBkcml2ZXItXFx1MDAzZWlkX3RhYmxlO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTgzMDpcXHRwY2lfZHJpdmVyLVxcdTAwM2Vwcm9iZSA9IGF0aDEya19wY2lfcHJvYmU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODMxLVxcdHBjaV9kcml2ZXItXFx1MDAzZXJlbW92ZSA9IGF0aDEya19wY2lfcmVtb3ZlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNTo0NS4yNTQ5MjIzMjJaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5NjE0OTcxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSB3ZSBnby4uLlxuXG4qKkRpdmluZyBpbnRvIGBhdGgxMmtfcGNpX3Byb2JlYCoqXG5cbkFscmlnaHQsIGxldCdzIHB1bGwgdXAgdGhhdCBgYXRoMTJrX3BjaV9wcm9iZWAgZnVuY3Rpb24uIEkndmUgYmVlbiBtZWFuaW5nIHRvIHJldmlzaXQgdGhpczsgdGhlcmUgYXJlIGEgZmV3IGFzcGVjdHMgb2YgdGhlIFBDSSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBJIHdhbnQgdG8gY2xhcmlmeSBpbiBteSBoZWFkLiBJIGtub3cgdGhlIGJhc2ljcywgdGhlIGVudHJ5IHBvaW50LCB0aGUgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYnV0IGl0J3MgdGhlIGZpbmVyIHBvaW50cyBJJ20gYWZ0ZXIgdG9kYXkuIFJpZ2h0LCBzbyB0aGlzIGlzIHdoZXJlIHRoZSBkcml2ZXIgYmluZHMgdG8gdGhlIGRldmljZS4gSSdsbCBmb2N1cyBvbiBob3cgaXQgaGFuZGxlcyB0aGUgUENJIGRldmljZSBzdHJ1Y3R1cmUsIHRoZSBtZW1vcnkgbWFwcGluZywgdGhlIGludGVycnVwdCBzZXR1cC4uLiBhbGwgdGhlIHVzdWFsIHN1c3BlY3RzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGV5J3JlIGhhbmRsaW5nIHBvdGVudGlhbCBlcnJvcnMsIHRoZSByb2J1c3RuZXNzLiBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNsb2NraW5nIHNlcXVlbmNlIGFuZCB0aGUgcG93ZXIgbWFuYWdlbWVudCByZWxhdGVkIHRvIGl0LiBMZXQgbWUgc2VlIGhvdyB0aGUgcmVnaXN0ZXIgYWNjZXNzIGlzIGltcGxlbWVudGVkLCBhbmQgaG93IGl0IGlzIGFic3RyYWN0ZWQuIEkgc3VzcGVjdCB0aGVyZSBtYXkgYmUgYSBzcGVjaWZpYyBxdWlyayBvciB0d28gaGVyZSByZWxhdGVkIHRvIGRpZmZlcmVudCBoYXJkd2FyZSByZXZpc2lvbnMgb3Igc3BlY2lmaWMgUENJIGJ1cyBjb25maWd1cmF0aW9ucywgc28gSSdsbCBiZSBsb29raW5nIG91dCBmb3IgdGhhdCBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDIxNCwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE1OjQ4LjY1MTA3ODUzM1oiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDM4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTI4LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTUyODpcXHRzdGF0aWMgaW50IGF0aDEya19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuMTUyOTpcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXYpXFxuMTUzMDpcXHR7XFxuMTUzMTpcXHRcXHRlbnVtIGF0aDEya19kZXZpY2VfZmFtaWx5IGRldmljZV9pZDtcXG4xNTMyOlxcdFxcdHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2k7XFxuMTUzMzpcXHRcXHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiO1xcbjE1MzQ6XFx0XFx0aW50IHJldDtcXG4xNTM1OlxcdFxcbjE1MzY6XFx0XFx0YWIgPSBhdGgxMmtfY29yZV9hbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBzaXplb2YoKmFiX3BjaSksIEFUSDEyS19CVVNfUENJKTtcXG4xNTM3OlxcdFxcdGlmICghYWIpIHtcXG4xNTM4OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byBhbGxvY2F0ZSBhdGgxMmsgYmFzZVxcXFxuXFxcIik7XFxuMTUzOTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xNTQwOlxcdFxcdH1cXG4xNTQxOlxcdFxcbjE1NDI6XFx0XFx0YWItXFx1MDAzZWRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuMTU0MzpcXHRcXHRhYl9wY2kgPSBhdGgxMmtfcGNpX3ByaXYoYWIpO1xcbjE1NDQ6XFx0XFx0YWJfcGNpLVxcdTAwM2VkZXZfaWQgPSBwY2lfZGV2LVxcdTAwM2VkZXZpY2U7XFxuMTU0NTpcXHRcXHRhYl9wY2ktXFx1MDAzZWFiID0gYWI7XFxuMTU0NjpcXHRcXHRhYl9wY2ktXFx1MDAzZXBkZXYgPSBwZGV2O1xcbjE1NDc6XFx0XFx0YWItXFx1MDAzZWhpZi5vcHMgPSBcXHUwMDI2YXRoMTJrX3BjaV9oaWZfb3BzO1xcbjE1NDg6XFx0XFx0YWItXFx1MDAzZWZ3X21vZGUgPSBBVEgxMktfRklSTVdBUkVfTU9ERV9OT1JNQUw7XFxuMTU0OTpcXHRcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgYWIpO1xcbjE1NTA6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmFiX3BjaS1cXHUwMDNld2luZG93X2xvY2spO1xcbjE1NTE6XFx0XFxuMTU1MjpcXHRcXHRyZXQgPSBhdGgxMmtfcGNpX2NsYWltKGFiX3BjaSwgcGRldik7XFxuMTU1MzpcXHRcXHRpZiAocmV0KSB7XFxuMTU1NDpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGNsYWltIGRldmljZTogJWRcXFxcblxcXCIsIHJldCk7XFxuMTU1NTpcXHRcXHRcXHRnb3RvIGVycl9mcmVlX2NvcmU7XFxuMTU1NjpcXHRcXHR9XFxuMTU1NzpcXHRcXG4xNTU4OlxcdFxcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfQk9PVCwgXFxcInBjaSBwcm9iZSAlMDR4OiUwNHggJTA0eDolMDR4XFxcXG5cXFwiLFxcbjE1NTk6XFx0XFx0XFx0ICAgcGRldi1cXHUwMDNldmVuZG9yLCBwZGV2LVxcdTAwM2VkZXZpY2UsXFxuMTU2MDpcXHRcXHRcXHQgICBwZGV2LVxcdTAwM2VzdWJzeXN0ZW1fdmVuZG9yLCBwZGV2LVxcdTAwM2VzdWJzeXN0ZW1fZGV2aWNlKTtcXG4xNTYxOlxcdFxcbjE1NjI6XFx0XFx0YWItXFx1MDAzZWlkLnZlbmRvciA9IHBkZXYtXFx1MDAzZXZlbmRvcjtcXG4xNTYzOlxcdFxcdGFiLVxcdTAwM2VpZC5kZXZpY2UgPSBwZGV2LVxcdTAwM2VkZXZpY2U7XFxuMTU2NDpcXHRcXHRhYi1cXHUwMDNlaWQuc3Vic3lzdGVtX3ZlbmRvciA9IHBkZXYtXFx1MDAzZXN1YnN5c3RlbV92ZW5kb3I7XFxuMTU2NTpcXHRcXHRhYi1cXHUwMDNlaWQuc3Vic3lzdGVtX2RldmljZSA9IHBkZXYtXFx1MDAzZXN1YnN5c3RlbV9kZXZpY2U7XFxuMTU2NjpcXHRcXG4xNTY3OlxcdFxcdGRldmljZV9pZCA9IGF0aDEya19nZXRfZGV2aWNlX2ZhbWlseShwY2lfZGV2KTtcXG4xNTY4OlxcdFxcdGlmIChkZXZpY2VfaWQgXFx1MDAzZT0gQVRIMTJLX0RFVklDRV9GQU1JTFlfTUFYKSB7XFxuMTU2OTpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGdldCBkZXZpY2UgZmFtaWx5IGlkXFxcXG5cXFwiKTtcXG4xNTcwOlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuMTU3MTpcXHRcXHRcXHRnb3RvIGVycl9wY2lfZnJlZV9yZWdpb247XFxuMTU3MjpcXHRcXHR9XFxuMTU3MzpcXHRcXG4xNTc0OlxcdFxcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfUENJLCBcXFwiUENJIGRldmljZSBmYW1pbHkgaWQ6ICVkXFxcXG5cXFwiLCBkZXZpY2VfaWQpO1xcbjE1NzU6XFx0XFxuMTU3NjpcXHRcXHRhYl9wY2ktXFx1MDAzZWRldmljZV9mYW1pbHlfb3BzID0gXFx1MDAyNmF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbZGV2aWNlX2lkXS1cXHUwMDNlb3BzO1xcbjE1Nzc6XFx0XFx0YWJfcGNpLVxcdTAwM2VyZWdfYmFzZSA9IGF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbZGV2aWNlX2lkXS1cXHUwMDNlcmVnX2Jhc2U7XFxuMTU3ODpcXHRcXG4xNTc5OlxcdFxcdC8qIENhbGwgZGV2aWNlIHNwZWNpZmljIHByb2JlLiBUaGlzIGlzIHRoZSBjYWxsYmFjayB0aGF0IGNhblxcbjE1ODA6XFx0XFx0ICogYmUgdXNlZCB0byBvdmVycmlkZSBhbnkgb3BzIGluIGZ1dHVyZVxcbjE1ODE6XFx0XFx0ICogcHJvYmUgaXMgdmFsaWRhdGVkIGZvciBOVUxMIGR1cmluZyByZWdpc3RyYXRpb24uXFxuMTU4MjpcXHRcXHQgKi9cXG4xNTgzOlxcdFxcdHJldCA9IGFiX3BjaS1cXHUwMDNlZGV2aWNlX2ZhbWlseV9vcHMtXFx1MDAzZXByb2JlKHBkZXYsIHBjaV9kZXYpO1xcbjE1ODQ6XFx0XFx0aWYgKHJldCkge1xcbjE1ODU6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBwcm9iZSBkZXZpY2U6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjE1ODY6XFx0XFx0XFx0Z290byBlcnJfcGNpX2ZyZWVfcmVnaW9uO1xcbjE1ODc6XFx0XFx0fVxcbjE1ODg6XFx0XFxuMTU4OTpcXHRcXHRyZXQgPSBhdGgxMmtfcGNpX21zaV9hbGxvYyhhYl9wY2kpO1xcbjE1OTA6XFx0XFx0aWYgKHJldCkge1xcbjE1OTE6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBhbGxvYyBtc2k6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjE1OTI6XFx0XFx0XFx0Z290byBlcnJfcGNpX2ZyZWVfcmVnaW9uO1xcbjE1OTM6XFx0XFx0fVxcbjE1OTQ6XFx0XFxuMTU5NTpcXHRcXHRyZXQgPSBhdGgxMmtfY29yZV9wcmVfaW5pdChhYik7XFxuMTU5NjpcXHRcXHRpZiAocmV0KVxcbjE1OTc6XFx0XFx0XFx0Z290byBlcnJfcGNpX21zaV9mcmVlO1xcbjE1OTg6XFx0XFxuMTU5OTpcXHRcXHRyZXQgPSBhdGgxMmtfcGNpX3NldF9pcnFfYWZmaW5pdHlfaGludChhYl9wY2ksIGNwdW1hc2tfb2YoMCkpO1xcbjE2MDA6XFx0XFx0aWYgKHJldCkge1xcbjE2MDE6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBzZXQgaXJxIGFmZmluaXR5ICVkXFxcXG5cXFwiLCByZXQpO1xcbjE2MDI6XFx0XFx0XFx0Z290byBlcnJfcGNpX21zaV9mcmVlO1xcbjE2MDM6XFx0XFx0fVxcbjE2MDQ6XFx0XFxuMTYwNTpcXHRcXHRyZXQgPSBhdGgxMmtfbWhpX3JlZ2lzdGVyKGFiX3BjaSk7XFxuMTYwNjpcXHRcXHRpZiAocmV0KSB7XFxuMTYwNzpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIHJlZ2lzdGVyIG1oaTogJWRcXFxcblxcXCIsIHJldCk7XFxuMTYwODpcXHRcXHRcXHRnb3RvIGVycl9pcnFfYWZmaW5pdHlfY2xlYW51cDtcXG4xNjA5OlxcdFxcdH1cXG4xNjEwOlxcdFxcbjE2MTE6XFx0XFx0cmV0ID0gYXRoMTJrX2hhbF9zcm5nX2luaXQoYWIpO1xcbjE2MTI6XFx0XFx0aWYgKHJldClcXG4xNjEzOlxcdFxcdFxcdGdvdG8gZXJyX21oaV91bnJlZ2lzdGVyO1xcbjE2MTQ6XFx0XFxuMTYxNTpcXHRcXHRyZXQgPSBhdGgxMmtfY2VfYWxsb2NfcGlwZXMoYWIpO1xcbjE2MTY6XFx0XFx0aWYgKHJldCkge1xcbjE2MTc6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBhbGxvY2F0ZSBjZSBwaXBlczogJWRcXFxcblxcXCIsIHJldCk7XFxuMTYxODpcXHRcXHRcXHRnb3RvIGVycl9oYWxfc3JuZ19kZWluaXQ7XFxuMTYxOTpcXHRcXHR9XFxuMTYyMDpcXHRcXG4xNjIxOlxcdFxcdGF0aDEya19wY2lfaW5pdF9xbWlfY2VfY29uZmlnKGFiKTtcXG4xNjIyOlxcdFxcbjE2MjM6XFx0XFx0cmV0ID0gYXRoMTJrX3BjaV9jb25maWdfaXJxKGFiKTtcXG4xNjI0OlxcdFxcdGlmIChyZXQpIHtcXG4xNjI1OlxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gY29uZmlnIGlycTogJWRcXFxcblxcXCIsIHJldCk7XFxuMTYyNjpcXHRcXHRcXHRnb3RvIGVycl9jZV9mcmVlO1xcbjE2Mjc6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNTo0OC42NTE0MjQ5MzNaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE0NjkwOTU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBNSEkgSW50ZXJmYWNlIHdpdGggYXRoMTJrIGFuZCBTeXprYWxsZXIqKlxuXG5Pa2F5LCBzbyBgYXRoMTJrX3BjaV9wcm9iZWAgaXMgd2hlcmUgaXQgYWxsIHN0YXJ0cy4gSXQncyBjYWxsaW5nIGBhdGgxMmtfbWhpX3JlZ2lzdGVyYCwgd2hpY2ggaW5zdGFudGx5IGZsYWdzIG15IGF0dGVudGlvbi4gTUhJLCBNb2RlbSBIb3N0IEludGVyZmFjZeKApiByaWdodC4gTm93LCBjYW4gd2UgYWN0dWFsbHkgKm1vY2sqIHRoZSBNSEkgd2l0aCBTeXprYWxsZXI/IERvZXMgU3l6a2FsbGVyIGhhdmUgYSBnZW5lcmljIE1ISSBkZXZpY2UgZW11bGF0b3I/IFRoYXQncyB0aGUgcmVhbCBxdWVzdGlvbi4gSSBkb24ndCByZWNhbGwgc2VlaW5nIGFueXRoaW5nIGxpa2UgdGhhdCBpbiBpdHMgc3RhbmRhcmQgcmVwZXJ0b2lyZS5cblxuSG1tLCBpZiBgYXRoMTJrX21oaV9yZWdpc3RlcmAgZmFpbHMsIHRoZSB3aG9sZSBwcm9iZSBiYWlscy4gVGhhdCdzIGEgY3JpdGljYWwgcGF0aC4gSXQgbWVhbnMgdGhpcyBNSEkgcmVnaXN0cmF0aW9uIGlzIGEgcG90ZW50aWFsIHBvaW50IG9mIGZhaWx1cmUgd2UgbmVlZCB0byB1bmRlcnN0YW5kIGFuZCBwb3RlbnRpYWxseSBleHBsb2l0LiBBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgZGVlcGVyIGFuZCB0YWtlIGEgY2xvc2UgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGF0aDEya19taGlfcmVnaXN0ZXJgLiBOZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgTUhJLCB3aGF0IGVycm9ycyBjYW4gaGFwcGVuLCBhbmQgaG93IGl0IGhhbmRsZXMgdGhlbS4gVGhpcyBpcyB3aGVyZSB0aGUgdnVsbmVyYWJpbGl0eSBodW50aW5nIGJlZ2lucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYyOTQsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE1OjUyLjc5ODMzODYwOFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2ODQzODMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDEya19taGlfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYz0xODA9c3RhdGljIHZvaWQgYXRoMTJrX21oaV9vcF93cml0ZV9yZWcoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTE4Ni1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jOjE4NzppbnQgYXRoMTJrX21oaV9yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtMTg4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmg9MzU9dm9pZCBhdGgxMmtfbWhpX3N0b3Aoc3RydWN0IGF0aDEya19wY2kgKmFyX3BjaSwgYm9vbCBpc19zdXNwZW5kKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5oOjM2OmludCBhdGgxMmtfbWhpX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfcGNpICphcl9wY2kpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmgtMzctdm9pZCBhdGgxMmtfbWhpX3VucmVnaXN0ZXIoc3RydWN0IGF0aDEya19wY2kgKmFyX3BjaSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE1Mjg9c3RhdGljIGludCBhdGgxMmtfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNjA0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTYwNTpcXHRyZXQgPSBhdGgxMmtfbWhpX3JlZ2lzdGVyKGFiX3BjaSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNjA2LVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTU6NTIuOTI1MTg5NDZaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgxMTA5OTE0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIGBhdGgxMmtfbWhpX3JlZ2lzdGVyYCwgYXNzdW1pbmcgSSBoYXZlIGEgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHdpcmVsZXNzIGRyaXZlcnMgYW5kIE1ISSAoTXVsdGktSW50ZXJmYWNlIEhhcmR3YXJlKS5cblxuKipEaXNzZWN0aW5nIGBhdGgxMmtfbWhpX3JlZ2lzdGVyYCAtIEEgRGVlcCBEaXZlKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSBgYXRoMTJrX21oaV9yZWdpc3RlcmAuIE15IG1pbmQgaXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhlIGNvcmUgcHVycG9zZTogcmVnaXN0cmF0aW9uLiBUaGlzIGZ1bmN0aW9uLCBieSBpdHMgdmVyeSBuYW1lLCBpbXBsaWVzIGl0J3MgdGhlIGdhdGV3YXkgZm9yIGluY29ycG9yYXRpbmcgdGhlIE1ISSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBBdGhlcm9zIDEyayBkcml2ZXIuIEknbSB0aGlua2luZywgXCJ3aGF0IGV4YWN0bHkgaXMgYmVpbmcgcmVnaXN0ZXJlZD9cIiBJcyBpdCB0aGUgTUhJIGRldmljZSBpdHNlbGY/IEFyZSB3ZSBlc3RhYmxpc2hpbmcgcmVzb3VyY2UgYWxsb2NhdGlvbiBvciBpbnRlcnJ1cHQgaGFuZGxlcnM/XG5cbkkgZXhwZWN0IHRvIHNlZSB0aGUgY29kZSBoYW5kbGluZyB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgTUhJIGhhcmR3YXJlIOKAkyBtb3N0IGxpa2VseSwgaW5pdGlhbGl6aW5nIGRhdGEgc3RydWN0dXJlcywgc2V0dGluZyB1cCBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIChwcm9iYWJseSB0aHJvdWdoIERNQSBvciBzaGFyZWQgbWVtb3J5KSwgYW5kIHBvdGVudGlhbGx5IGNvbmZpZ3VyaW5nIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHJlZ2lzdGVycyBiYXNlZCBvbiB0aGUgc3BlY2lmaWMgY2FwYWJpbGl0aWVzIGFkdmVydGlzZWQgYnkgdGhlIE1ISSBjb250cm9sbGVyLiBJ4oCZbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBwb3RlbnRpYWwgaGFyZHdhcmUgdmFyaWF0aW9ucyBvciBkaWZmZXJlbnQgTUhJIGltcGxlbWVudGF0aW9ucywgYXMgd2VsbCBhcyBob3cgdGhpcyByZWdpc3RyYXRpb24gcmVsYXRlcyB0byB0aGUgbGFyZ2VyIGZyYW1ld29yayBvZiBhdGgxMmsuXG5cbknigJltIHBhcnRpY3VsYXJseSBjdXJpb3VzIGFib3V0IHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gR2l2ZW4gdGhlIGNvbXBsZXhpdGllcyBvZiBoYXJkd2FyZSBpbnRlcmZhY2VzLCBJIGFudGljaXBhdGUgcm9idXN0IGNoZWNrcyBmb3IgZmFpbHVyZSBjb25kaXRpb25zIGR1cmluZyBpbml0aWFsaXphdGlvbiwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW5kIGNvbW11bmljYXRpb24gc2V0dXAuIEhvdyBncmFjZWZ1bGx5IGRvZXMgaXQgaGFuZGxlIGEgc2NlbmFyaW8gd2hlcmUgdGhlIE1ISSBkZXZpY2UgaXNuJ3QgcmVzcG9uZGluZyBvciB0aGUgbmVjZXNzYXJ5IHJlc291cmNlcyBhcmUgdW5hdmFpbGFibGU/IERvZXMgaXQgaW5jbHVkZSBzcGVjaWZpYyBlcnJvciBjb2RlcyBhbmQgbG9nZ2luZyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzPyBUaGUgZWxlZ2FuY2Ugb2YgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGRldGVybWluZWQgYnkgaXRzIGFiaWxpdHkgdG8gcmVjb3ZlciBmcm9tIGVycm9ycywgYXQgdGhlIHNhbWUgdGltZSBiZWluZyBlZmZpY2llbnQuIFxuXG5JJ20gcHJlcGFyZWQgdG8gZGlzc2VjdCB0aGUgZnVuY3Rpb27igJlzIGFyZ3VtZW50cyBhbmQgc2NydXRpbml6ZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMuIEknbSBleHBlY3RpbmcgdG8gbG9vayBhdCBkZXRhaWxzIGxpa2UgdGhlIE1ISSBkZXZpY2UgcG9pbnRlciwgYW55IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBwYXNzZWQgaW4sIGFuZCBwb2ludGVycyB0byB0aGUgZHJpdmVy4oCZcyBwcml2YXRlIGRhdGEgc3RydWN0dXJlLiBJdCBpcyB2aXRhbCB0byBzZWUgaG93IHRoZXNlIGFyZ3VtZW50cyBhcmUgdXNlZCB0byBjb21tdW5pY2F0ZSBpbmZvcm1hdGlvbiB0byB0aGUgTUhJIGRldmljZS4gXG5cbkluIHNob3J0LCBJJ20gZXhwZWN0aW5nIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSwgYSBmb3VuZGF0aW9uYWwgZnVuY3Rpb24sIHRoYXQgbXVzdCBiZSBzb2xpZCwgZWZmaWNpZW50LCBhbmQgd2VsbC1kb2N1bWVudGVkIGlmIHRoZSBvdmVyYWxsIGRyaXZlciBpcyB0byBiZSByZXNpbGllbnQuIExldCdzIHNlZSBob3cgd2VsbCB0aGV5J3ZlIGRvbmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTA3LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTU6NTcuNzM2MjkyNTU0WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4NzpcXHRpbnQgYXRoMTJrX21oaV9yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpKVxcbiAxODg6XFx0e1xcbiAxODk6XFx0XFx0c3RydWN0IGF0aDEya19iYXNlICphYiA9IGFiX3BjaS1cXHUwMDNlYWI7XFxuIDE5MDpcXHRcXHRzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jdHJsO1xcbiAxOTE6XFx0XFx0dW5zaWduZWQgaW50IGJvYXJkX2lkO1xcbiAxOTI6XFx0XFx0aW50IHJldDtcXG4gMTkzOlxcdFxcdGJvb2wgZHVhbG1hYyA9IGZhbHNlO1xcbiAxOTQ6XFx0XFxuIDE5NTpcXHRcXHRtaGlfY3RybCA9IG1oaV9hbGxvY19jb250cm9sbGVyKCk7XFxuIDE5NjpcXHRcXHRpZiAoIW1oaV9jdHJsKVxcbiAxOTc6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDE5ODpcXHRcXG4gMTk5OlxcdFxcdGFiX3BjaS1cXHUwMDNlbWhpX3ByZV9jYiA9IE1ISV9DQl9JTlZBTElEO1xcbiAyMDA6XFx0XFx0YWJfcGNpLVxcdTAwM2VtaGlfY3RybCA9IG1oaV9jdHJsO1xcbiAyMDE6XFx0XFx0bWhpX2N0cmwtXFx1MDAzZWNudHJsX2RldiA9IGFiLVxcdTAwM2VkZXY7XFxuIDIwMjpcXHRcXHRtaGlfY3RybC1cXHUwMDNlcmVncyA9IGFiLVxcdTAwM2VtZW07XFxuIDIwMzpcXHRcXHRtaGlfY3RybC1cXHUwMDNlcmVnX2xlbiA9IGFiLVxcdTAwM2VtZW1fbGVuO1xcbiAyMDQ6XFx0XFx0bWhpX2N0cmwtXFx1MDAzZXJkZG1fc2l6ZSA9IGFiLVxcdTAwM2Vod19wYXJhbXMtXFx1MDAzZXJkZG1fc2l6ZTtcXG4gMjA1OlxcdFxcbiAyMDY6XFx0XFx0aWYgKGFiLVxcdTAwM2Vod19wYXJhbXMtXFx1MDAzZW90cF9ib2FyZF9pZF9yZWdpc3Rlcikge1xcbiAyMDc6XFx0XFx0XFx0Ym9hcmRfaWQgPVxcbiAyMDg6XFx0XFx0XFx0XFx0YXRoMTJrX3BjaV9yZWFkMzIoYWIsIGFiLVxcdTAwM2Vod19wYXJhbXMtXFx1MDAzZW90cF9ib2FyZF9pZF9yZWdpc3Rlcik7XFxuIDIwOTpcXHRcXHRcXHRib2FyZF9pZCA9IHUzMl9nZXRfYml0cyhib2FyZF9pZCwgT1RQX0JPQVJEX0lEX01BU0spO1xcbiAyMTA6XFx0XFxuIDIxMTpcXHRcXHRcXHRpZiAoIWJvYXJkX2lkIHx8IChib2FyZF9pZCA9PSBPVFBfSU5WQUxJRF9CT0FSRF9JRCkpIHtcXG4gMjEyOlxcdFxcdFxcdFxcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfQk9PVCxcXG4gMjEzOlxcdFxcdFxcdFxcdFxcdCAgIFxcXCJmYWlsZWQgdG8gcmVhZCBib2FyZCBpZFxcXFxuXFxcIik7XFxuIDIxNDpcXHRcXHRcXHR9IGVsc2UgaWYgKGJvYXJkX2lkIFxcdTAwMjYgT1RQX1ZBTElEX0RVQUxNQUNfQk9BUkRfSURfTUFTSykge1xcbiAyMTU6XFx0XFx0XFx0XFx0ZHVhbG1hYyA9IHRydWU7XFxuIDIxNjpcXHRcXHRcXHRcXHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX0JPT1QsXFxuIDIxNzpcXHRcXHRcXHRcXHRcXHQgICBcXFwiZHVhbG1hYyBmdyBzZWxlY3RlZCBmb3IgYm9hcmQgaWQ6ICV4XFxcXG5cXFwiLCBib2FyZF9pZCk7XFxuIDIxODpcXHRcXHRcXHR9XFxuIDIxOTpcXHRcXHR9XFxuIDIyMDpcXHRcXG4gMjIxOlxcdFxcdGlmIChkdWFsbWFjKSB7XFxuIDIyMjpcXHRcXHRcXHRpZiAoYWItXFx1MDAzZWZ3LmFtc3NfZHVhbG1hY19kYXRhIFxcdTAwMjZcXHUwMDI2IGFiLVxcdTAwM2Vmdy5hbXNzX2R1YWxtYWNfbGVuIFxcdTAwM2UgMCkge1xcbiAyMjM6XFx0XFx0XFx0XFx0LyogdXNlIE1ISSBmaXJtd2FyZSBmaWxlIGZyb20gZmlybXdhcmUtTi5iaW4gKi9cXG4gMjI0OlxcdFxcdFxcdFxcdG1oaV9jdHJsLVxcdTAwM2Vmd19kYXRhID0gYWItXFx1MDAzZWZ3LmFtc3NfZHVhbG1hY19kYXRhO1xcbiAyMjU6XFx0XFx0XFx0XFx0bWhpX2N0cmwtXFx1MDAzZWZ3X3N6ID0gYWItXFx1MDAzZWZ3LmFtc3NfZHVhbG1hY19sZW47XFxuIDIyNjpcXHRcXHRcXHR9IGVsc2Uge1xcbiAyMjc6XFx0XFx0XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJkdWFsbWFjIGZpcm13YXJlIElFIG5vdCBwcmVzZW50IGluIGZpcm13YXJlLU4uYmluXFxcXG5cXFwiKTtcXG4gMjI4OlxcdFxcdFxcdFxcdHJldCA9IC1FTk9FTlQ7XFxuIDIyOTpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfY29udHJvbGxlcjtcXG4gMjMwOlxcdFxcdFxcdH1cXG4gMjMxOlxcdFxcdH0gZWxzZSB7XFxuIDIzMjpcXHRcXHRcXHRpZiAoYWItXFx1MDAzZWZ3LmFtc3NfZGF0YSBcXHUwMDI2XFx1MDAyNiBhYi1cXHUwMDNlZncuYW1zc19sZW4gXFx1MDAzZSAwKSB7XFxuIDIzMzpcXHRcXHRcXHRcXHQvKiB1c2UgTUhJIGZpcm13YXJlIGZpbGUgZnJvbSBmaXJtd2FyZS1OLmJpbiAqL1xcbiAyMzQ6XFx0XFx0XFx0XFx0bWhpX2N0cmwtXFx1MDAzZWZ3X2RhdGEgPSBhYi1cXHUwMDNlZncuYW1zc19kYXRhO1xcbiAyMzU6XFx0XFx0XFx0XFx0bWhpX2N0cmwtXFx1MDAzZWZ3X3N6ID0gYWItXFx1MDAzZWZ3LmFtc3NfbGVuO1xcbiAyMzY6XFx0XFx0XFx0fSBlbHNlIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTU6NTcuNzM2NDI2NDE0WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NzU3NDUzMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipOYXZpZ2F0aW5nIHRoZSBgYWItXHUwMDNlZncuYW1zc19kYXRhYCBDb250ZXh0KipcblxuT2theSwgSSdtIHRyYWNpbmcgdGhpcyBhY2Nlc3M6IGBhYi1cdTAwM2Vmdy5hbXNzX2RhdGFgLiBJbW1lZGlhdGVseSwgbXkgbWVudGFsIG1hcCBraWNrcyBpbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBgYWItXHUwMDNlZndgIHBvaW50ZXIgZ2V0cyBwb3B1bGF0ZWQuIE15IGd1dCBmZWVsaW5nIGlzIHNvbWV0aGluZyB3aXRoaW4gdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCBwZXJoYXBzIGR1cmluZyB0aGUgc2V0dXAgcGhhc2Ugb2YgdGhlIGZpcm13YXJlLiBJcyBpdCBgYXRoMTJrX2NvcmVfcHJlX2luaXRgIG9yIHNvbWV0aGluZyBzaW1pbGFyP1xuXG5XYWl0LCBuby4gV2Fzbid0IGBhdGgxMmtfY29yZV9wcmVfaW5pdGAgY2FsbGVkICpiZWZvcmUqIGBhdGgxMmtfbWhpX3JlZ2lzdGVyYD8gWWVzLCBJIHJlbWVtYmVyLiBTbywgSSBuZWVkIHRvIHpvb20gaW4gb24gd2hhdCBoYXBwZW5zIGR1cmluZyB0aGF0IHByZS1pbml0aWFsaXphdGlvbiBzdGFnZS4gTGV0J3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhlIGZ1bmN0aW9uIGBhdGgxMmtfY29yZV9wcmVfaW5pdGAgYmVjYXVzZSB0aGF0J3MgbW9zdCBsaWtlbHkgd2hlcmUgdGhlIHJlbGV2YW50IGRhdGEgaXMgYmVpbmcgZXN0YWJsaXNoZWQuIFRpbWUgdG8gZGlnIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODU5MSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTY6MDEuNTEyMTc2NDYxWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM1NTgzMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX2NvcmVfcHJlX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYz0xMDE5PXN0YXRpYyBpbnQgYXRoMTJrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xMDcxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MTA3MjpcXHRyZXQgPSBhdGgxMmtfY29yZV9wcmVfaW5pdChhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xMDczLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYz0xNzg1PUVYUE9SVF9TWU1CT0woYXRoMTJrX2NvcmVfZ2V0X21lbW9yeV9tb2RlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0xNzg2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jOjE3ODc6aW50IGF0aDEya19jb3JlX3ByZV9pbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMTc4OC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaD0xMjY2PXZvaWQgYXRoMTJrX2NvcmVfaHdfZ3JvdXBfY2xlYW51cChzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphZyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmg6MTI2NzppbnQgYXRoMTJrX2NvcmVfcHJlX2luaXQoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmgtMTI2OC1pbnQgYXRoMTJrX2NvcmVfaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmF0aDEyayk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE1Mjg9c3RhdGljIGludCBhdGgxMmtfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNTk0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTU5NTpcXHRyZXQgPSBhdGgxMmtfY29yZV9wcmVfaW5pdChhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNTk2LVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE2OjAxLjYyNTc0OTg5NFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzE4MDY3OTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgYXRoMTJrX2NvcmVfcHJlX2luaXRgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gd29yay4gTGV0J3Mgc2VlIHdoYXQgd2UncmUgZGVhbGluZyB3aXRoIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBncmFiIGBhdGgxMmtfY29yZV9wcmVfaW5pdGAgYW5kIGdldCBhIGZlZWwgZm9yIHdoYXQncyBnb2luZyBvbi4gVGhpcyBmdW5jdGlvbiBuYW1lIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoaXMgaXMgYSBwcmVsaW1pbmFyeSBpbml0aWFsaXphdGlvbiBzdGFnZSwgcHJvYmFibHkgY3JpdGljYWwgZm9yIHNldHRpbmcgdXAgdGhlIGhhcmR3YXJlIGFuZCBwcmVwYXJpbmcgaXQgZm9yIG9wZXJhdGlvbi4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgZXNzZW50aWFsIGNvbmZpZ3VyYXRpb24gc3RlcHMsIHBvc3NpYmx5IHJlZ2lzdGVyIGFjY2Vzc2VzLCBwb3dlciBtYW5hZ2VtZW50IGNvbnNpZGVyYXRpb25zLCBhbmQgcG90ZW50aWFsbHkgc29tZSBiYXNpYyBoYXJkd2FyZSBkaXNjb3ZlcnkuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zLCBhcyB0aGUgc2VxdWVuY2UgaXMgb2Z0ZW4gY3J1Y2lhbCBpbiB0aGVzZSBsb3ctbGV2ZWwgaW5pdGlhbGl6YXRpb25zLiBJJ2xsIGFsc28gYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIG9mIGVycm9yIGhhbmRsaW5nIG9yIGZhbGxiYWNrIG1lY2hhbmlzbXMsIGFzIGFueSBpbml0aWFsaXphdGlvbiByb3V0aW5lIG11c3QgYmUgcm9idXN0LiBVbmRlcnN0YW5kaW5nIHdoYXQncyBoYXBwZW5pbmcgKmJlZm9yZSogdGhlIG1haW4gZHJpdmVyIGxvZ2ljIGtpY2tzIGluIGlzIHZpdGFsIGZvciB0cm91Ymxlc2hvb3RpbmcgbGF0ZXIgb24sIGFuZCBjYW4gaW5mb3JtIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBkb3duIHRoZSBsaW5lLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDk4LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTY6MDUuMzQzODIxMjE2WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzg3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzg3OlxcdGludCBhdGgxMmtfY29yZV9wcmVfaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbjE3ODg6XFx0e1xcbjE3ODk6XFx0XFx0Y29uc3Qgc3RydWN0IGF0aDEya19tZW1fcHJvZmlsZV9iYXNlZF9wYXJhbSAqcGFyYW07XFxuMTc5MDpcXHRcXG4xNzkxOlxcdFxcdHBhcmFtID0gXFx1MDAyNmF0aDEya19tZW1fcHJvZmlsZV9iYXNlZF9wYXJhbVthYi1cXHUwMDNldGFyZ2V0X21lbV9tb2RlXTtcXG4xNzkyOlxcdFxcdGFiLVxcdTAwM2Vwcm9maWxlX3BhcmFtID0gcGFyYW07XFxuMTc5MzpcXHRcXHRhdGgxMmtfZndfbWFwKGFiKTtcXG4xNzk0OlxcdFxcbjE3OTU6XFx0XFx0cmV0dXJuIDA7XFxuMTc5NjpcXHR9XFxuMTc5NzpcXHRcXG4xNzk4OlxcdHN0YXRpYyBpbnQgYXRoMTJrX2NvcmVfcGFuaWNfaGFuZGxlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbjE3OTk6XFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqZGF0YSlcXG4xODAwOlxcdHtcXG4xODAxOlxcdFxcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBjb250YWluZXJfb2YobmIsIHN0cnVjdCBhdGgxMmtfYmFzZSxcXG4xODAyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHBhbmljX25iKTtcXG4xODAzOlxcdFxcbjE4MDQ6XFx0XFx0cmV0dXJuIGF0aDEya19oaWZfcGFuaWNfaGFuZGxlcihhYik7XFxuMTgwNTpcXHR9XFxuMTgwNjpcXHRcXG4xODA3OlxcdHN0YXRpYyBpbnQgYXRoMTJrX2NvcmVfcGFuaWNfbm90aWZpZXJfcmVnaXN0ZXIoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4xODA4OlxcdHtcXG4xODA5OlxcdFxcdGFiLVxcdTAwM2VwYW5pY19uYi5ub3RpZmllcl9jYWxsID0gYXRoMTJrX2NvcmVfcGFuaWNfaGFuZGxlcjtcXG4xODEwOlxcdFxcbjE4MTE6XFx0XFx0cmV0dXJuIGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcihcXHUwMDI2cGFuaWNfbm90aWZpZXJfbGlzdCxcXG4xODEyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZhYi1cXHUwMDNlcGFuaWNfbmIpO1xcbjE4MTM6XFx0fVxcbjE4MTQ6XFx0XFxuMTgxNTpcXHRzdGF0aWMgdm9pZCBhdGgxMmtfY29yZV9wYW5pY19ub3RpZmllcl91bnJlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuMTgxNjpcXHR7XFxuMTgxNzpcXHRcXHRhdG9taWNfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcihcXHUwMDI2cGFuaWNfbm90aWZpZXJfbGlzdCxcXG4xODE4OlxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2YWItXFx1MDAzZXBhbmljX25iKTtcXG4xODE5OlxcdH1cXG4xODIwOlxcdFxcbjE4MjE6XFx0c3RhdGljIGlubGluZVxcbjE4MjI6XFx0Ym9vbCBhdGgxMmtfY29yZV9od19ncm91cF9jcmVhdGVfcmVhZHkoc3RydWN0IGF0aDEya19od19ncm91cCAqYWcpXFxuMTgyMzpcXHR7XFxuMTgyNDpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZhZy1cXHUwMDNlbXV0ZXgpO1xcbjE4MjU6XFx0XFxuMTgyNjpcXHRcXHRyZXR1cm4gKGFnLVxcdTAwM2VudW1fcHJvYmVkID09IGFnLVxcdTAwM2VudW1fZGV2aWNlcyk7XFxuMTgyNzpcXHR9XFxuMTgyODpcXHRcXG4xODI5OlxcdHN0YXRpYyBzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphdGgxMmtfY29yZV9od19ncm91cF9hbGxvYyhzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbjE4MzA6XFx0e1xcbjE4MzE6XFx0XFx0c3RydWN0IGF0aDEya19od19ncm91cCAqYWc7XFxuMTgzMjpcXHRcXHRpbnQgY291bnQgPSAwO1xcbjE4MzM6XFx0XFxuMTgzNDpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZhdGgxMmtfaHdfZ3JvdXBfbXV0ZXgpO1xcbjE4MzU6XFx0XFxuMTgzNjpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGFnLCBcXHUwMDI2YXRoMTJrX2h3X2dyb3VwX2xpc3QsIGxpc3QpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE2OjA1LjM0NDAzMjA4NloiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDU1NjY3MTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYXRoMTJrIEZpcm13YXJlIE1hcHBpbmcgYW5kIE1ISSBSZWdpc3RyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgYXRoMTJrX2Z3X21hcGAsIHdoaWNoIEkga25vdyBoYW5kbGVzIGZpcm13YXJlIG1hcHBpbmcuIEJ1dCB3aGF0J3MgcmVhbGx5IGNhdGNoaW5nIG15IGF0dGVudGlvbiBpcyB0aGF0IGBhdGgxMmtfbWhpX3JlZ2lzdGVyYCBjYWxscyBgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXJgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgZG9lcyBzeXprYWxsZXIgZXZlbiAqZW11bGF0ZSogTUhJPyBObywgcmlnaHQ/IEknbSBwcmV0dHkgc3VyZSBpdCBkb2Vzbid0LlxuXG5TbywgaWYgc3l6a2FsbGVyICpkb2Vzbid0KiBoYXZlIGFuIE1ISSBlbXVsYXRvciwgYG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyYCBpcyBnb2luZyB0byBiZSB0cnlpbmcgdG8gdGFsayB0byBhIGRldmljZSB2aWEgaXRzIFBDSSBtZW1vcnktbWFwcGVkIHJlZ2lzdGVycywgYG1oaV9jdHJsLVx1MDAzZXJlZ3NgLiBJIGtub3cgdGhhdCBpZiBzeXprYWxsZXIgc2V0cyB1cCBhIGZha2UgUENJIGRldmljZSwgaXQgKmNvdWxkKiBwcm92aWRlIHRob3NlIGZha2UgbWVtb3J5IHJlZ2lvbnMuIEJ1dCBNSEkgaXMgYSBiaXQgbW9yZSBpbnZvbHZlZCwgaXNuJ3QgaXQ/IFdlIG5lZWQgYSBzcGVjaWZpYyBzdGF0ZSBtYWNoaW5lIGFuZCB0aG9zZSBwZXNreSBpbnRlcnJ1cHRzIHRvIGdldCB0aGUgZGV2aWNlIGludG8gYW4gYE1ISV9SRUFEWWAgc3RhdGUuIFdpdGhvdXQgYSByZWFsIGRldmljZSBvciBhIGN1c3RvbSBlbXVsYXRvciBmb3IgTUhJLCBgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXJgIGlzIGxpa2VseSB0byB0aW1lIG91dCBvciBmYWlsIG91dHJpZ2h0LlxuXG5IYW5nIG9uLi4uIEknbSBtaXNzaW5nIHNvbWV0aGluZyBoZXJlLiBgYXRoMTJrX21oaV9yZWdpc3RlcmAgY2FsbHMgYG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyYCwgYnV0IEkgZG9uJ3QgcmVjYWxsIGl0IHdhaXRpbmcgZm9yIHRoZSBkZXZpY2UgdG8gYWN0dWFsbHkgKmJlY29tZSogcmVhZHkuIEkgbmVlZCB0byB0YWtlIGFub3RoZXIgbG9vayBhdCBgYXRoMTJrX21oaV9yZWdpc3RlcmAgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBvdmVybG9va2VkIHNvbWV0aGluZyBjcnVjaWFsLiBHb3R0YSBnbyBiYWNrIGFuZCBjaGVjayB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA1ODksIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNjoxMC43OTk3MDUxMloiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODI2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzcsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjM3OlxcdFxcdFxcdFxcdC8qIHVzZSB0aGUgb2xkIHNlcGFyYXRlIG1oaS5iaW4gTUhJIGZpcm13YXJlIGZpbGUgKi9cXG4gMjM4OlxcdFxcdFxcdFxcdGF0aDEya19jb3JlX2NyZWF0ZV9maXJtd2FyZV9wYXRoKGFiLCBBVEgxMktfQU1TU19GSUxFLFxcbiAyMzk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGFiX3BjaS1cXHUwMDNlYW1zc19wYXRoLFxcbiAyNDA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHNpemVvZihhYl9wY2ktXFx1MDAzZWFtc3NfcGF0aCkpO1xcbiAyNDE6XFx0XFx0XFx0XFx0bWhpX2N0cmwtXFx1MDAzZWZ3X2ltYWdlID0gYWJfcGNpLVxcdTAwM2VhbXNzX3BhdGg7XFxuIDI0MjpcXHRcXHRcXHR9XFxuIDI0MzpcXHRcXHR9XFxuIDI0NDpcXHRcXG4gMjQ1OlxcdFxcdHJldCA9IGF0aDEya19taGlfZ2V0X21zaShhYl9wY2kpO1xcbiAyNDY6XFx0XFx0aWYgKHJldCkge1xcbiAyNDc6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBnZXQgbXNpIGZvciBtaGlcXFxcblxcXCIpO1xcbiAyNDg6XFx0XFx0XFx0Z290byBmcmVlX2NvbnRyb2xsZXI7XFxuIDI0OTpcXHRcXHR9XFxuIDI1MDpcXHRcXG4gMjUxOlxcdFxcdGlmICghdGVzdF9iaXQoQVRIMTJLX1BDSV9GTEFHX01VTFRJX01TSV9WRUNUT1JTLCBcXHUwMDI2YWJfcGNpLVxcdTAwM2VmbGFncykpXFxuIDI1MjpcXHRcXHRcXHRtaGlfY3RybC1cXHUwMDNlaXJxX2ZsYWdzID0gSVJRRl9TSEFSRUQgfCBJUlFGX05PQkFMQU5DSU5HO1xcbiAyNTM6XFx0XFxuIDI1NDpcXHRcXHRtaGlfY3RybC1cXHUwMDNlaW92YV9zdGFydCA9IDA7XFxuIDI1NTpcXHRcXHRtaGlfY3RybC1cXHUwMDNlaW92YV9zdG9wID0gYWJfcGNpLVxcdTAwM2VkbWFfbWFzaztcXG4gMjU2OlxcdFxcdG1oaV9jdHJsLVxcdTAwM2VzYmxfc2l6ZSA9IFNaXzUxMks7XFxuIDI1NzpcXHRcXHRtaGlfY3RybC1cXHUwMDNlc2VnX2xlbiA9IFNaXzUxMks7XFxuIDI1ODpcXHRcXHRtaGlfY3RybC1cXHUwMDNlZmJjX2Rvd25sb2FkID0gdHJ1ZTtcXG4gMjU5OlxcdFxcdG1oaV9jdHJsLVxcdTAwM2VydW50aW1lX2dldCA9IGF0aDEya19taGlfb3BfcnVudGltZV9nZXQ7XFxuIDI2MDpcXHRcXHRtaGlfY3RybC1cXHUwMDNlcnVudGltZV9wdXQgPSBhdGgxMmtfbWhpX29wX3J1bnRpbWVfcHV0O1xcbiAyNjE6XFx0XFx0bWhpX2N0cmwtXFx1MDAzZXN0YXR1c19jYiA9IGF0aDEya19taGlfb3Bfc3RhdHVzX2NiO1xcbiAyNjI6XFx0XFx0bWhpX2N0cmwtXFx1MDAzZXJlYWRfcmVnID0gYXRoMTJrX21oaV9vcF9yZWFkX3JlZztcXG4gMjYzOlxcdFxcdG1oaV9jdHJsLVxcdTAwM2V3cml0ZV9yZWcgPSBhdGgxMmtfbWhpX29wX3dyaXRlX3JlZztcXG4gMjY0OlxcdFxcbiAyNjU6XFx0XFx0cmV0ID0gbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIobWhpX2N0cmwsIGFiLVxcdTAwM2Vod19wYXJhbXMtXFx1MDAzZW1oaV9jb25maWcpO1xcbiAyNjY6XFx0XFx0aWYgKHJldCkge1xcbiAyNjc6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byByZWdpc3RlciB0byBtaGkgYnVzLCBlcnIgPSAlZFxcXFxuXFxcIiwgcmV0KTtcXG4gMjY4OlxcdFxcdFxcdGdvdG8gZnJlZV9jb250cm9sbGVyO1xcbiAyNjk6XFx0XFx0fVxcbiAyNzA6XFx0XFxuIDI3MTpcXHRcXHRyZXR1cm4gMDtcXG4gMjcyOlxcdFxcbiAyNzM6XFx0ZnJlZV9jb250cm9sbGVyOlxcbiAyNzQ6XFx0XFx0bWhpX2ZyZWVfY29udHJvbGxlcihtaGlfY3RybCk7XFxuIDI3NTpcXHRcXHRhYl9wY2ktXFx1MDAzZW1oaV9jdHJsID0gTlVMTDtcXG4gMjc2OlxcdFxcdHJldHVybiByZXQ7XFxuIDI3NzpcXHR9XFxuIDI3ODpcXHRcXG4gMjc5OlxcdHZvaWQgYXRoMTJrX21oaV91bnJlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2kpXFxuIDI4MDpcXHR7XFxuIDI4MTpcXHRcXHRzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jdHJsID0gYWJfcGNpLVxcdTAwM2VtaGlfY3RybDtcXG4gMjgyOlxcdFxcbiAyODM6XFx0XFx0bWhpX3VucmVnaXN0ZXJfY29udHJvbGxlcihtaGlfY3RybCk7XFxuIDI4NDpcXHRcXHRrZnJlZShtaGlfY3RybC1cXHUwMDNlaXJxKTtcXG4gMjg1OlxcdFxcdG1oaV9mcmVlX2NvbnRyb2xsZXIobWhpX2N0cmwpO1xcbiAyODY6XFx0XFx0YWJfcGNpLVxcdTAwM2VtaGlfY3RybCA9IE5VTEw7XFxuIDI4NzpcXHR9XFxuIDI4ODpcXHRcXG4gMjg5OlxcdHN0YXRpYyBjaGFyICphdGgxMmtfbWhpX3N0YXRlX3RvX3N0cihlbnVtIGF0aDEya19taGlfc3RhdGUgbWhpX3N0YXRlKVxcbiAyOTA6XFx0e1xcbiAyOTE6XFx0XFx0c3dpdGNoIChtaGlfc3RhdGUpIHtcXG4gMjkyOlxcdFxcdGNhc2UgQVRIMTJLX01ISV9JTklUOlxcbiAyOTM6XFx0XFx0XFx0cmV0dXJuIFxcXCJJTklUXFxcIjtcXG4gMjk0OlxcdFxcdGNhc2UgQVRIMTJLX01ISV9ERUlOSVQ6XFxuIDI5NTpcXHRcXHRcXHRyZXR1cm4gXFxcIkRFSU5JVFxcXCI7XFxuIDI5NjpcXHRcXHRjYXNlIEFUSDEyS19NSElfUE9XRVJfT046XFxuIDI5NzpcXHRcXHRcXHRyZXR1cm4gXFxcIlBPV0VSX09OXFxcIjtcXG4gMjk4OlxcdFxcdGNhc2UgQVRIMTJLX01ISV9QT1dFUl9PRkY6XFxuIDI5OTpcXHRcXHRcXHRyZXR1cm4gXFxcIlBPV0VSX09GRlxcXCI7XFxuIDMwMDpcXHRcXHRjYXNlIEFUSDEyS19NSElfUE9XRVJfT0ZGX0tFRVBfREVWOlxcbiAzMDE6XFx0XFx0XFx0cmV0dXJuIFxcXCJQT1dFUl9PRkZfS0VFUF9ERVZcXFwiO1xcbiAzMDI6XFx0XFx0Y2FzZSBBVEgxMktfTUhJX0ZPUkNFX1BPV0VSX09GRjpcXG4gMzAzOlxcdFxcdFxcdHJldHVybiBcXFwiRk9SQ0VfUE9XRVJfT0ZGXFxcIjtcXG4gMzA0OlxcdFxcdGNhc2UgQVRIMTJLX01ISV9TVVNQRU5EOlxcbiAzMDU6XFx0XFx0XFx0cmV0dXJuIFxcXCJTVVNQRU5EXFxcIjtcXG4gMzA2OlxcdFxcdGNhc2UgQVRIMTJLX01ISV9SRVNVTUU6XFxuIDMwNzpcXHRcXHRcXHRyZXR1cm4gXFxcIlJFU1VNRVxcXCI7XFxuIDMwODpcXHRcXHRjYXNlIEFUSDEyS19NSElfVFJJR0dFUl9SRERNOlxcbiAzMDk6XFx0XFx0XFx0cmV0dXJuIFxcXCJUUklHR0VSX1JERE1cXFwiO1xcbiAzMTA6XFx0XFx0Y2FzZSBBVEgxMktfTUhJX1JERE1fRE9ORTpcXG4gMzExOlxcdFxcdFxcdHJldHVybiBcXFwiUkRETV9ET05FXFxcIjtcXG4gMzEyOlxcdFxcdGRlZmF1bHQ6XFxuIDMxMzpcXHRcXHRcXHRyZXR1cm4gXFxcIlVOS05PV05cXFwiO1xcbiAzMTQ6XFx0XFx0fVxcbiAzMTU6XFx0fTtcXG4gMzE2OlxcdFxcbiAzMTc6XFx0c3RhdGljIHZvaWQgYXRoMTJrX21oaV9zZXRfc3RhdGVfYml0KHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2ksXFxuIDMxODpcXHRcXHRcXHRcXHRcXHQgICAgIGVudW0gYXRoMTJrX21oaV9zdGF0ZSBtaGlfc3RhdGUpXFxuIDMxOTpcXHR7XFxuIDMyMDpcXHRcXHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiID0gYWJfcGNpLVxcdTAwM2VhYjtcXG4gMzIxOlxcdFxcbiAzMjI6XFx0XFx0c3dpdGNoIChtaGlfc3RhdGUpIHtcXG4gMzIzOlxcdFxcdGNhc2UgQVRIMTJLX01ISV9JTklUOlxcbiAzMjQ6XFx0XFx0XFx0c2V0X2JpdChBVEgxMktfTUhJX0lOSVQsIFxcdTAwMjZhYl9wY2ktXFx1MDAzZW1oaV9zdGF0ZSk7XFxuIDMyNTpcXHRcXHRcXHRicmVhaztcXG4gMzI2OlxcdFxcdGNhc2UgQVRIMTJLX01ISV9ERUlOSVQ6XFxuIDMyNzpcXHRcXHRcXHRjbGVhcl9iaXQoQVRIMTJLX01ISV9JTklULCBcXHUwMDI2YWJfcGNpLVxcdTAwM2VtaGlfc3RhdGUpO1xcbiAzMjg6XFx0XFx0XFx0YnJlYWs7XFxuIDMyOTpcXHRcXHRjYXNlIEFUSDEyS19NSElfUE9XRVJfT046XFxuIDMzMDpcXHRcXHRcXHRzZXRfYml0KEFUSDEyS19NSElfUE9XRVJfT04sIFxcdTAwMjZhYl9wY2ktXFx1MDAzZW1oaV9zdGF0ZSk7XFxuIDMzMTpcXHRcXHRcXHRicmVhaztcXG4gMzMyOlxcdFxcdGNhc2UgQVRIMTJLX01ISV9QT1dFUl9PRkY6XFxuIDMzMzpcXHRcXHRjYXNlIEFUSDEyS19NSElfUE9XRVJfT0ZGX0tFRVBfREVWOlxcbiAzMzQ6XFx0XFx0Y2FzZSBBVEgxMktfTUhJX0ZPUkNFX1BPV0VSX09GRjpcXG4gMzM1OlxcdFxcdFxcdGNsZWFyX2JpdChBVEgxMktfTUhJX1BPV0VSX09OLCBcXHUwMDI2YWJfcGNpLVxcdTAwM2VtaGlfc3RhdGUpO1xcbiAzMzY6XFx0XFx0XFx0Y2xlYXJfYml0KEFUSDEyS19NSElfVFJJR0dFUl9SRERNLCBcXHUwMDI2YWJfcGNpLVxcdTAwM2VtaGlfc3RhdGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNjoxMC43OTk5OTE3MloiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDU5NTk2NDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgQW5hbHlzaXMgb2YgdGhlIE1ISSBEZXZpY2UgU3RhcnR1cCBTZXF1ZW5jZSoqXG5cbk9rYXksIHNvIGBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcmAgcmVnaXN0ZXJzIHRoZSBjb250cm9sbGVyIOKAkyB0aGF0IG11Y2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBCdXQgdGhlIGNydWNpYWwgcXVlc3Rpb24gbmFnczogd2hlcmUgaW4gdGhlIGNvZGUgaXMgdGhlIGFjdHVhbCBNSEkgZGV2aWNlIHBvd2VyZWQgb24/IFRoYXQncyB0aGUgY3JpdGljYWwgcGllY2UgSSdtIG1pc3NpbmcuIEdpdmVuIHRoZSBuYW1lLCBteSBpbnR1aXRpb24gc2F5cyB0aGUgcmVhbCB3b3JrIHByb2JhYmx5IGhhcHBlbnMgaW4gYGF0aDEya19taGlfc3RhcnRgLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoYXQgZnVuY3Rpb24gYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiB0byB2ZXJpZnkgbXkgdGhvdWdodCBwcm9jZXNzLiBMZXQncyBzZWUgaWYgdGhpcyBodW5jaCBpcyBjb3JyZWN0LCBvciBpZiB0aGVyZSdzIGFub3RoZXIgbG9jYXRpb24gdG8gaW52ZXN0aWdhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMDAyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNjoxMy44NTk1OTI3NzJaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjI0NDAxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMmtfbWhpX3N0YXJ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM9NDA2PXN0YXRpYyBpbnQgYXRoMTJrX21oaV9zZXRfc3RhdGUoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtNDgxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM6NDgyOmludCBhdGgxMmtfbWhpX3N0YXJ0KHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2kpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy00ODMte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuaD0yMD1lbnVtIGF0aDEya19taGlfc3RhdGUge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuaC0zMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5oOjM0OmludCBhdGgxMmtfbWhpX3N0YXJ0KHN0cnVjdCBhdGgxMmtfcGNpICphcl9wY2kpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmgtMzUtdm9pZCBhdGgxMmtfbWhpX3N0b3Aoc3RydWN0IGF0aDEya19wY2kgKmFyX3BjaSwgYm9vbCBpc19zdXNwZW5kKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTQyOD1pbnQgYXRoMTJrX3BjaV9wb3dlcl91cChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNDQ2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTQ0NzpcXHRyZXQgPSBhdGgxMmtfbWhpX3N0YXJ0KGFiX3BjaSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNDQ4LVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTY6MTMuOTgxODQ1MTU0WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODA2MTQ5NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFBvd2VyLVVwIFNlcXVlbmNlIG9mIHRoZSBhdGgxMmsgUENJIERyaXZlcioqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gdGhlIHBvd2VyLXVwIHNlcXVlbmNlIG9mIHRoZSBgYXRoMTJrYCBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciBQQ0ktYmFzZWQgZGV2aWNlcy4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBhdGgxMmtfcGNpX3Bvd2VyX3VwYCBpcyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHRoYXQgcHJvY2Vzcy4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLCBzbyBJIG5vdGUgdGhhdCBpdCBjYWxscyBgYXRoMTJrX21oaV9zdGFydGAuIFRoYXQncyBpbnRlcmVzdGluZzsgaXQgc3VnZ2VzdHMgYSBtb2R1bGFyIGFwcHJvYWNoLCBsaWtlbHkgaW5kaWNhdGluZyB0aGF0IHRoZSBNSEkgKHByZXN1bWFibHkgTW9iaWxlIEhvc3QgSW50ZXJmYWNlKSBjb21wb25lbnQgaGFuZGxlcyB0aGUgY29tbXVuaWNhdGlvbiBhc3BlY3RzIGR1cmluZyBwb3dlci11cC5cblxuQnV0IHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdoZXJlIGlzIGBhdGgxMmtfcGNpX3Bvd2VyX3VwYCBpdHNlbGYgYmVpbmcgY2FsbGVkIGZyb20/IEkgbmVlZCB0byB0cmFjZSBiYWNrIHRoZSBjYWxsIHN0YWNrIHRvIHNlZSB0aGUgYnJvYWRlciBjb250ZXh0LiBJcyBpdCBjYWxsZWQgZGlyZWN0bHkgZnJvbSB0aGUgUENJIHByb2JlIGZ1bmN0aW9uPyBJcyBpdCBiZWluZyBjYWxsZWQgZnJvbSBhIHBvd2VyIG1hbmFnZW1lbnQgY2FsbGJhY2s/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb21wbGV0ZSBwb3dlci11cCBwcm9jZXNzIGFuZCBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgZHJpdmVyLiBEZXRlcm1pbmluZyB0aGlzIGNvbnRleHQgaXMgdGhlIGNyaXRpY2FsIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM2NzcsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNjoxNy41NjI0NjM0NjRaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTczODI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMmtfcGNpX3Bvd2VyX3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTMxNj1zdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2NvcmVkdW1wX2Rvd25sb2FkKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE0MjctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNDI4OmludCBhdGgxMmtfcGNpX3Bvd2VyX3VwKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNDI5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTQ4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19oaWZfb3BzIGF0aDEya19wY2lfaGlmX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTQ4OC1cXHQucG93ZXJfZG93biA9IGF0aDEya19wY2lfcG93ZXJfZG93bixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE0ODk6XFx0LnBvd2VyX3VwID0gYXRoMTJrX3BjaV9wb3dlcl91cCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE0OTAtXFx0LnN1c3BlbmQgPSBhdGgxMmtfcGNpX2hpZl9zdXNwZW5kLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaD0xNzQ9aW50IGF0aDEya19wY2lfc3RhcnQoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaDoxNzU6aW50IGF0aDEya19wY2lfcG93ZXJfdXAoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaC0xNzYtdm9pZCBhdGgxMmtfcGNpX3Bvd2VyX2Rvd24oc3RydWN0IGF0aDEya19iYXNlICphYiwgYm9vbCBpc19zdXNwZW5kKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTY6MTcuNzI0MjA3MzQ0WiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTQ4NzQ3MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgYGhpZl9vcHNgIENhbGxiYWNrKipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBpbnRvIHRoaXMgc2VjdGlvbiBvZiBjb2RlLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkFoLCB0aGlzIGlzIGFuIGBoaWZfb3BzYCBjYWxsYmFjay5cIiBUaGF0IGltbWVkaWF0ZWx5IHNldHMgdGhlIHN0YWdlLiBOb3csIHRoZSBuZXh0IGNydWNpYWwgcXVlc3Rpb24gcG9wcyB1cDogV2hlcmUgdGhlIGhlbGwgaXMgYHBvd2VyX3VwYCBiZWluZyBjYWxsZWQ/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgZ3JhcGgsIGVzcGVjaWFsbHkgYXJvdW5kIHRoZXNlIGNhbGxiYWNrIHN0cnVjdHVyZXMsIGlzIHBhcmFtb3VudC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIHBvaW50IHRvIGZpZ3VyZSBvdXQgd2hhdCdzIHRyaWdnZXJpbmcgaXQuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBpbnNpZ2h0cyB3aWxsIGJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDQ5OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE2OjIwLjc3OTA4NTQxNloiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMzQwNzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBvd2VyX3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM9MzI0PXN0YXRpYyB2b2lkIGF0aDEya19haGJfc3RvcChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zMzMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzozMzQ6c3RhdGljIGludCBhdGgxMmtfYWhiX3Bvd2VyX3VwKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zMzUte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYz03MDY9c3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaGlmX29wcyBhdGgxMmtfYWhiX2hpZl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTcxMy1cXHQubWFwX3NlcnZpY2VfdG9fcGlwZSA9IGF0aDEya19haGJfbWFwX3NlcnZpY2VfdG9fcGlwZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjcxNDpcXHQucG93ZXJfdXAgPSBhdGgxMmtfYWhiX3Bvd2VyX3VwLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtNzE1LVxcdC5wb3dlcl9kb3duID0gYXRoMTJrX2FoYl9wb3dlcl9kb3duLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM9MTgxPWludCBhdGgxMmtfY29yZV9yZXN1bWVfZWFybHkoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTE4OS1cXHRyZWluaXRfY29tcGxldGlvbihcXHUwMDI2YWItXFx1MDAzZXJlc3RhcnRfY29tcGxldGVkKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYzoxOTA6XFx0cmV0ID0gYXRoMTJrX2hpZl9wb3dlcl91cChhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMTkxLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYz04MTU9c3RhdGljIGludCBhdGgxMmtfY29yZV9zb2NfY3JlYXRlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy04MzEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6ODMyOlxcdHJldCA9IGF0aDEya19oaWZfcG93ZXJfdXAoYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTgzMy1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYz0xNjc5PXN0YXRpYyB2b2lkIGF0aDEya19jb3JlX3Jlc2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTE3NjQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6MTc2NTpcXHRcXHRhdGgxMmtfaGlmX3Bvd2VyX3VwKGFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0xNzY2LVxcdFxcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfQk9PVCwgXFxcInJlc2V0IHN0YXJ0ZWRcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmg9NjI0PXN0cnVjdCBhdGgxMmsge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmgtNzY5LVxcdHN0cnVjdCBhdGgxMmtfZndfc3RhdHMgZndfc3RhdHM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmg6NzcwOlxcdHVuc2lnbmVkIGxvbmcgbGFzdF90eF9wb3dlcl91cGRhdGU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmgtNzcxLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaD0xMj1zdHJ1Y3QgYXRoMTJrX2hpZl9vcHMge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaC0xOC1cXHR2b2lkICgqc3RvcCkoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaDoxOTpcXHRpbnQgKCpwb3dlcl91cCkoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaC0yMC1cXHR2b2lkICgqcG93ZXJfZG93bikoc3RydWN0IGF0aDEya19iYXNlICphYiwgYm9vbCBpc19zdXNwZW5kKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmg9MTMwPXN0YXRpYyBpbmxpbmUgdm9pZCBhdGgxMmtfaGlmX3dyaXRlMzIoc3RydWN0IGF0aDEya19iYXNlICphYiwgdTMyIGFkZHJlc3MsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oLTEzNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oOjEzNjpzdGF0aWMgaW5saW5lIGludCBhdGgxMmtfaGlmX3Bvd2VyX3VwKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaC0xMzcte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmg6MTM4OlxcdGlmICghYWItXFx1MDAzZWhpZi5vcHMtXFx1MDAzZXBvd2VyX3VwKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmgtMTM5LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oLTE0MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oOjE0MTpcXHRyZXR1cm4gYWItXFx1MDAzZWhpZi5vcHMtXFx1MDAzZXBvd2VyX3VwKGFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oLTE0Mi19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jPTU0NzE9aW50IGF0aDEya19tYWNfb3BfZ2V0X3R4cG93ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jLTU1MDgtXFx0XFx0XFx0bXNlY3NfdG9famlmZmllcyhBVEgxMktfUERFVl9UWF9QT1dFUl9SRUZSRVNIX1RJTUVfTVNFQ1MpICtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jOjU1MDk6XFx0XFx0XFx0XFx0XFx0IGFyLVxcdTAwM2VsYXN0X3R4X3Bvd2VyX3VwZGF0ZSkpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy01NTEwLVxcdFxcdGdvdG8gc2VuZF90eF9wb3dlcjtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtNTUzMS1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2YXItXFx1MDAzZWRhdGFfbG9jayk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYzo1NTMyOlxcdGFyLVxcdTAwM2VsYXN0X3R4X3Bvd2VyX3VwZGF0ZSA9IGppZmZpZXM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy01NTMzLVxcdGF0aDEya19md19zdGF0c19yZXNldChhcik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jPTQwNj1zdGF0aWMgaW50IGF0aDEya19taGlfc2V0X3N0YXRlKHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2ksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTQyMC1cXHRjYXNlIEFUSDEyS19NSElfSU5JVDpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jOjQyMTpcXHRcXHRyZXQgPSBtaGlfcHJlcGFyZV9mb3JfcG93ZXJfdXAoYWJfcGNpLVxcdTAwM2VtaGlfY3RybCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy00MjItXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTQzOC1cXHRcXHQgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jOjQzOTpcXHRcXHRyZXQgPSBtaGlfc3luY19wb3dlcl91cChhYl9wY2ktXFx1MDAzZW1oaV9jdHJsKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTQ0MC1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTMxNj1zdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2NvcmVkdW1wX2Rvd25sb2FkKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE0MjctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNDI4OmludCBhdGgxMmtfcGNpX3Bvd2VyX3VwKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNDI5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTQ4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19oaWZfb3BzIGF0aDEya19wY2lfaGlmX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTQ4OC1cXHQucG93ZXJfZG93biA9IGF0aDEya19wY2lfcG93ZXJfZG93bixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE0ODk6XFx0LnBvd2VyX3VwID0gYXRoMTJrX3BjaV9wb3dlcl91cCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE0OTAtXFx0LnN1c3BlbmQgPSBhdGgxMmtfcGNpX2hpZl9zdXNwZW5kLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaD0xNzQ9aW50IGF0aDEya19wY2lfc3RhcnQoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaDoxNzU6aW50IGF0aDEya19wY2lfcG93ZXJfdXAoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaC0xNzYtdm9pZCBhdGgxMmtfcGNpX3Bvd2VyX2Rvd24oc3RydWN0IGF0aDEya19iYXNlICphYiwgYm9vbCBpc19zdXNwZW5kKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTY6MjAuOTA5NDMwNzE4WiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3MjgxMDAyMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGF0aDEyayBEcml2ZXIgSW5pdGlhbGl6YXRpb24gUGF0aCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBgYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlc2AgaXMgdW5yZWFjaGFibGUgaW4gdGhpcyBlbXVsYXRlZCBlbnZpcm9ubWVudC4gVGhlIGNhbGwgY2hhaW4gaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogYGF0aDEya19jb3JlX2luaXRgIGtpY2tzIGV2ZXJ5dGhpbmcgb2ZmLCBjYWxsaW5nIGBhdGgxMmtfY29yZV9zb2NfY3JlYXRlYCwgd2hpY2ggdGhlbiBkaXZlcyBpbnRvIHRoZSBwb3dlci11cCBzZXF1ZW5jZSB3aXRoIGBhdGgxMmtfaGlmX3Bvd2VyX3VwYC4gVGhpcyBsZWFkcyB0byBgYXRoMTJrX3BjaV9wb3dlcl91cGAsIGFuZCB1bHRpbWF0ZWx5IGBhdGgxMmtfbWhpX3N0YXJ0YCwgd2hpY2ggcmVsaWVzIG9uIGBtaGlfc3luY19wb3dlcl91cGAuXG5cbkhlcmUncyB0aGUgcHJvYmxlbTogYG1oaV9zeW5jX3Bvd2VyX3VwYCBpcyBkZXNpZ25lZCB0byB3YWl0IGZvciB0aGUgTUhJIGRldmljZSB0byBiZWNvbWUgcmVhZHksIGJ1dCBiZWNhdXNlIHdlJ3JlIGluIGEgdmlydHVhbGl6YXRpb24gc2V0dXAg4oCTIHNwZWNpZmljYWxseSwgd2l0aCBzeXprYWxsZXIg4oCTIHRoZSBNSEkgZGV2aWNlIGlzbid0IGFjdHVhbGx5IGVtdWxhdGVkLiAgVGhpcyBtZWFucyB0aGF0IGBtaGlfc3luY19wb3dlcl91cGAgd2lsbCBpbmV2aXRhYmx5IHRpbWUgb3V0IG9yIGZhaWwgd2l0aCBhbiBlcnJvci5cblxuVGhlIHJpcHBsZSBlZmZlY3QgaXMgY2xlYXI6IGEgZmFpbHVyZSBpbiBgbWhpX3N5bmNfcG93ZXJfdXBgIGltbWVkaWF0ZWx5IGNhc2NhZGVzIHVwd2FyZHMsIGNhdXNpbmcgYGF0aDEya19taGlfc3RhcnRgLCBgYXRoMTJrX3BjaV9wb3dlcl91cGAsIGBhdGgxMmtfY29yZV9zb2NfY3JlYXRlYCwgYW5kIHVsdGltYXRlbHkgYGF0aDEya19jb3JlX2luaXRgIHRvIGFsbCBmYWlsLiBUaGlzIGVhcmx5IGFib3J0aW9uIG9mIHRoZSBpbml0aWFsaXphdGlvbiBwcmV2ZW50cyB1cyBmcm9tIGV2ZXIgcmVhY2hpbmcgYGF0aDEya19jb3JlX3FtaV9maXJtd2FyZV9yZWFkeWAsIHRodXMgYGF0aDEya19jb3JlX2h3X2dyb3VwX3N0YXJ0YCwgdGhlbiBgYXRoMTJrX21hY19yZWdpc3RlcmAsIGBhdGgxMmtfbWFjX2h3X3JlZ2lzdGVyYCwgYGF0aDEya19tYWNfc2V0dXBfcmVnaXN0ZXJgIGFuZCBtb3N0IGltcG9ydGFudGx5IGBhdGgxMmtfbWFjX3NldHVwX2NoYW5uZWxzX3JhdGVzYC5cblxuU28sIHRoZSBjb2RlIGluIGBhdGgxMmtfbWFjX3NldHVwX2NoYW5uZWxzX3JhdGVzYCBpcyBjb21wbGV0ZWx5IGRlYWQgY29kZSBpbiB0aGlzIGVudmlyb25tZW50LCBnaXZlbiB0aGUgbGFjayBvZiBwcm9wZXIgTUhJIGVtdWxhdGlvbi4gVGhlcmVmb3JlLCBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmdgIHRvIGBmYWxzZWAgZm9yIHRoaXMgdGFyZ2V0LiBJdCdzIGEgd2FzdGUgb2YgcmVzb3VyY2VzIHRvIHRhcmdldCB0aGF0IGZ1bmN0aW9uLCBhdCBsZWFzdCBpbiB0aGlzIHNwZWNpZmljIHNjZW5hcmlvLlxuXG5CZWZvcmUgSSBjb21taXQgdG8gdGhpcywgdGhvdWdoLCBJJ20gZ29pbmcgdG8gZG8gYSBxdWljayBzY2FuIG9mIHRoZSBjb2RlIHRvIHNlZSBpZiB0aGVyZSdzIGFueSAqb3RoZXIqIHdheSB0byByZWFjaCBgYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlc2AuIEdvdHRhIGJlIHRob3JvdWdoLCBhZnRlciBhbGwhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MDc3LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE2OjI4LjYzNzUzNDcxMloiLCJTZXEiOjYwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2ODIzNDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDEya19tYWNfc2V0dXBfY2hhbm5lbHNfcmF0ZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYz0xNDE4Nj1zdGF0aWMgdm9pZCBhdGgxMmtfbWFjX3VwZGF0ZV81XzlfZ2h6X2NoX2xpc3Qoc3RydWN0IGF0aDEyayAqYXIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jLTE0MjA1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM6MTQyMDY6c3RhdGljIGludCBhdGgxMmtfbWFjX3NldHVwX2NoYW5uZWxzX3JhdGVzKHN0cnVjdCBhdGgxMmsgKmFyLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTQyMDctXFx0XFx0XFx0XFx0XFx0ICAgdTMyIHN1cHBvcnRlZF9iYW5kcyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM9MTQ3NDM9c3RhdGljIGludCBhdGgxMmtfbWFjX3NldHVwX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMmsgKmFyLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNDc1NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jOjE0NzU2OlxcdHJldCA9IGF0aDEya19tYWNfc2V0dXBfY2hhbm5lbHNfcmF0ZXMoYXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNDc1Ny1cXHRcXHRcXHRcXHRcXHQgICAgICBjYXAtXFx1MDAzZXN1cHBvcnRlZF9iYW5kcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTY6MjguODM0MzYzOTZaIiwiU2VxIjo2MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc3OTIwNjU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBDb2RlIFBhdGggQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgY29kZSBwYXRoLCBzcGVjaWZpY2FsbHkgdGhlIHNlY3Rpb24gc3RhcnRpbmcgd2l0aCBgYXRoMTJrX21hY19zZXR1cF9yZWdpc3RlcmAsIGlzIGNvbXBsZXRlbHkgZGVhZC4gSSd2ZSB0cmFjZWQgdGhlIGNhbGwgY2hhaW4sIGFuZCBoZXJlJ3Mgd2hhdCBJJ3ZlIGZvdW5kOiBgYXRoMTJrX21hY19zZXR1cF9yZWdpc3RlcmAgaXMgb25seSBldmVyIGludm9rZWQgZnJvbSBgYXRoMTJrX21hY19od19yZWdpc3RlcmAuICBgYXRoMTJrX21hY19od19yZWdpc3RlcmAgaXMsIGluIHR1cm4sIG9ubHkgY2FsbGVkIGZyb20gYGF0aDEya19tYWNfcmVnaXN0ZXJgLiAgVGhhdCBmdW5jdGlvbiBpcyBvbmx5IGludm9rZWQgYnkgYGF0aDEya19jb3JlX2h3X2dyb3VwX3N0YXJ0YCwgd2hpY2ggaXMgb25seSBjYWxsZWQgZnJvbSBgYXRoMTJrX2NvcmVfcW1pX2Zpcm13YXJlX3JlYWR5YC4gQW5kLCBjcml0aWNhbGx5LCBgYXRoMTJrX2NvcmVfcW1pX2Zpcm13YXJlX3JlYWR5YCBpcyBvbmx5IHRyaWdnZXJlZCB3aGVuIHRoZSBmaXJtd2FyZSBpcyBhY3R1YWxseSByZWFkeSwgdXNpbmcgdGhlIFFNSSBpbnRlcmZhY2UuXG5cbkdpdmVuIHRoZSBjb250ZXh0LCB0aGUgZmlybXdhcmUgaXNuJ3QgcHJlc2VudCwgYW5kIHRoZSBNSEkgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiAgVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBlbnRpcmUgc2VxdWVuY2Ug4oCTIGFuZCB0aHVzLCB0aGUgY2FsbCB0byBgYXRoMTJrX21hY19zZXR1cF9yZWdpc3RlcmAg4oCTIHdpbGwgKm5ldmVyKiBiZSBleGVjdXRlZC4gR2l2ZW4gdGhlc2UgY29uc3RyYWludHMsIHRoZXJlJ3Mgbm8gd2F5IHRvIG1lYW5pbmdmdWxseSBmdXp6IHRoaXMsIHNvIEkgd2lsbCBtYXJrIHRoaXMgcGF0aCBhcyBub3Qgd29ydGggZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg1MzIsIk91dHB1dFRva2VucyI6MTYwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE2OjM0LjYxMzU3MzcyNVoiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2ODAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBtb2RpZmllZCBjb2RlIGlzIGxvY2F0ZWQgaW4gdGhlIGF0aDEyayBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFF1YWxjb21tIFdpLUZpIDcgaGFyZHdhcmUgKFBDSWUgb3IgQUhCKSBhbmQgZmlybXdhcmUgdG8gaW5pdGlhbGl6ZS4gVGhlIGRyaXZlciByZWxpZXMgb24gdGhlIE1vZGVtIEhvc3QgSW50ZXJmYWNlIChNSEkpIGFuZCBRdWFsY29tbSBNZXNzYWdlIEludGVyZmFjZSAoUU1JKSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBmaXJtd2FyZS4gSW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRpb24sIHRoZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZmFpbHMgZWFybHkgZHVyaW5nIE1ISSBwb3dlci11cCAoYG1oaV9zeW5jX3Bvd2VyX3VwYCksIG1lYW5pbmcgdGhlIGZpcm13YXJlIHJlYWR5IGV2ZW50IGlzIG5ldmVyIHRyaWdnZXJlZC4gQ29uc2VxdWVudGx5LCB0aGUgTUFDIHJlZ2lzdHJhdGlvbiBwYXRoIChgYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlc2ApIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBtb2RpZmllZCBjb2RlIGlzIGxvY2F0ZWQgaW4gdGhlIGF0aDEyayBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFF1YWxjb21tIFdpLUZpIDcgaGFyZHdhcmUgKFBDSWUgb3IgQUhCKSBhbmQgZmlybXdhcmUgdG8gaW5pdGlhbGl6ZS4gVGhlIGRyaXZlciByZWxpZXMgb24gdGhlIE1vZGVtIEhvc3QgSW50ZXJmYWNlIChNSEkpIGFuZCBRdWFsY29tbSBNZXNzYWdlIEludGVyZmFjZSAoUU1JKSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBmaXJtd2FyZS4gSW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRpb24sIHRoZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZmFpbHMgZWFybHkgZHVyaW5nIE1ISSBwb3dlci11cCAoYG1oaV9zeW5jX3Bvd2VyX3VwYCksIG1lYW5pbmcgdGhlIGZpcm13YXJlIHJlYWR5IGV2ZW50IGlzIG5ldmVyIHRyaWdnZXJlZC4gQ29uc2VxdWVudGx5LCB0aGUgTUFDIHJlZ2lzdHJhdGlvbiBwYXRoIChgYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlc2ApIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7bctj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 16:14:59 +0000 UTC FinishedAt: 2026-08-01 17:16:37 +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+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIG1vZGlmaWVkIGNvZGUgaXMgbG9jYXRlZCBpbiB0aGUgYXRoMTJrIGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUXVhbGNvbW0gV2ktRmkgNyBoYXJkd2FyZSAoUENJZSBvciBBSEIpIGFuZCBmaXJtd2FyZSB0byBpbml0aWFsaXplLiBUaGUgZHJpdmVyIHJlbGllcyBvbiB0aGUgTW9kZW0gSG9zdCBJbnRlcmZhY2UgKE1ISSkgYW5kIFF1YWxjb21tIE1lc3NhZ2UgSW50ZXJmYWNlIChRTUkpIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGZpcm13YXJlLiBJbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSB3aXRob3V0IHNwZWNpZmljIGhhcmR3YXJlIGVtdWxhdGlvbiwgdGhlIGRyaXZlciBpbml0aWFsaXphdGlvbiBmYWlscyBlYXJseSBkdXJpbmcgTUhJIHBvd2VyLXVwIChgbWhpX3N5bmNfcG93ZXJfdXBgKSwgbWVhbmluZyB0aGUgZmlybXdhcmUgcmVhZHkgZXZlbnQgaXMgbmV2ZXIgdHJpZ2dlcmVkLiBDb25zZXF1ZW50bHksIHRoZSBNQUMgcmVnaXN0cmF0aW9uIHBhdGggKGBhdGgxMmtfbWFjX3NldHVwX2NoYW5uZWxzX3JhdGVzYCkgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4ODc2NGM1ZWU1OGVhY2JkMDgyODc4ODE3MmFmNTg0MDhjYTAzYWM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAxNzoxNDoxMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuY1xuaW5kZXggYTA5Mjg4OTA2NzFhYy4uNTQ2OGE4ZDJkNWQ1NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmNcbkBAIC0xNDI3NSw2ICYjNDM7MTQyNzUsNyBAQCBzdGF0aWMgaW50IGF0aDEya19tYWNfc2V0dXBfY2hhbm5lbHNfcmF0ZXMoc3RydWN0IGF0aDEyayAqYXIsXG4gXHRcdFx0XHRcdCAgIHNpemVvZihhdGgxMmtfNmdoel9jaGFubmVscyksIEdGUF9LRVJORUwpO1xuIFx0XHRcdGlmICghY2hhbm5lbHMpIHtcbiBcdFx0XHRcdGtmcmVlKGFyLVx1MDAzZW1hYy5zYmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLmNoYW5uZWxzKTtcbiYjNDM7XHRcdFx0XHRhci1cdTAwM2VtYWMuc2JhbmRzW05MODAyMTFfQkFORF8yR0haXS5jaGFubmVscyA9IE5VTEw7XG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdFx0XHR9XG4gXG5AQCAtMTQzMjUsNyAmIzQzOzE0MzI2LDkgQEAgc3RhdGljIGludCBhdGgxMmtfbWFjX3NldHVwX2NoYW5uZWxzX3JhdGVzKHN0cnVjdCBhdGgxMmsgKmFyLFxuIFx0XHRcdFx0XHQgICBHRlBfS0VSTkVMKTtcbiBcdFx0XHRpZiAoIWNoYW5uZWxzKSB7XG4gXHRcdFx0XHRrZnJlZShhci1cdTAwM2VtYWMuc2JhbmRzW05MODAyMTFfQkFORF8yR0haXS5jaGFubmVscyk7XG4mIzQzO1x0XHRcdFx0YXItXHUwMDNlbWFjLnNiYW5kc1tOTDgwMjExX0JBTkRfMkdIWl0uY2hhbm5lbHMgPSBOVUxMO1xuIFx0XHRcdFx0a2ZyZWUoYXItXHUwMDNlbWFjLnNiYW5kc1tOTDgwMjExX0JBTkRfNkdIWl0uY2hhbm5lbHMpO1xuJiM0MztcdFx0XHRcdGFyLVx1MDAzZW1hYy5zYmFuZHNbTkw4MDIxMV9CQU5EXzZHSFpdLmNoYW5uZWxzID0gTlVMTDtcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0XHRcdH1cbiBcbkBAIC0xNDM2NSw3ICYjNDM7MTQzNjgsNyBAQCBzdGF0aWMgaW50IGF0aDEya19tYWNfc2V0dXBfY2hhbm5lbHNfcmF0ZXMoc3RydWN0IGF0aDEyayAqYXIsXG4gXHRcdFx0XHRcdGtmcmVlKGFyLVx1MDAzZW1hYy5zYmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLmNoYW5uZWxzKTtcbiBcdFx0XHRcdFx0YXItXHUwMDNlbWFjLnNiYW5kc1tOTDgwMjExX0JBTkRfMkdIWl0uY2hhbm5lbHMgPSBOVUxMO1xuIFx0XHRcdFx0XHRrZnJlZShhci1cdTAwM2VtYWMuc2JhbmRzW05MODAyMTFfQkFORF82R0haXS5jaGFubmVscyk7XG4tXHRcdFx0XHRcdGFyLVx1MDAzZW1hYy5zYmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLmNoYW5uZWxzID0gTlVMTDtcbiYjNDM7XHRcdFx0XHRcdGFyLVx1MDAzZW1hYy5zYmFuZHNbTkw4MDIxMV9CQU5EXzZHSFpdLmNoYW5uZWxzID0gTlVMTDtcbiBcdFx0XHRcdFx0a2ZyZWUoY2hhbm5lbHMpO1xuIFx0XHRcdFx0XHRiYW5kLVx1MDAzZWNoYW5uZWxzID0gTlVMTDtcbiBcdFx0XHRcdFx0cmV0dXJuIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgbW9kaWZpZWQgY29kZSBpcyBsb2NhdGVkIGluIHRoZSBhdGgxMmsgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBRdWFsY29tbSBXaS1GaSA3IGhhcmR3YXJlIChQQ0llIG9yIEFIQikgYW5kIGZpcm13YXJlIHRvIGluaXRpYWxpemUuIFRoZSBkcml2ZXIgcmVsaWVzIG9uIHRoZSBNb2RlbSBIb3N0IEludGVyZmFjZSAoTUhJKSBhbmQgUXVhbGNvbW0gTWVzc2FnZSBJbnRlcmZhY2UgKFFNSSkgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgZmlybXdhcmUuIEluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUgZW11bGF0aW9uLCB0aGUgZHJpdmVyIGluaXRpYWxpemF0aW9uIGZhaWxzIGVhcmx5IGR1cmluZyBNSEkgcG93ZXItdXAgKGBtaGlfc3luY19wb3dlcl91cGApLCBtZWFuaW5nIHRoZSBmaXJtd2FyZSByZWFkeSBldmVudCBpcyBuZXZlciB0cmlnZ2VyZWQuIENvbnNlcXVlbnRseSwgdGhlIE1BQyByZWdpc3RyYXRpb24gcGF0aCAoYGF0aDEya19tYWNfc2V0dXBfY2hhbm5lbHNfcmF0ZXNgKSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg4NzY0YzVlZTU4ZWFjYmQwODI4Nzg4MTcyYWY1ODQwOGNhMDNhYzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxIDE3OjE0OjEzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMKaW5kZXggYTA5Mjg4OTA2NzFhYy4uNTQ2OGE4ZDJkNWQ1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jCkBAIC0xNDI3NSw2ICYjNDM7MTQyNzUsNyBAQCBzdGF0aWMgaW50IGF0aDEya19tYWNfc2V0dXBfY2hhbm5lbHNfcmF0ZXMoc3RydWN0IGF0aDEyayAqYXIsCiAJCQkJCSAgIHNpemVvZihhdGgxMmtfNmdoel9jaGFubmVscyksIEdGUF9LRVJORUwpOwogCQkJaWYgKCFjaGFubmVscykgewogCQkJCWtmcmVlKGFyLSZndDttYWMuc2JhbmRzW05MODAyMTFfQkFORF8yR0haXS5jaGFubmVscyk7CiYjNDM7CQkJCWFyLSZndDttYWMuc2JhbmRzW05MODAyMTFfQkFORF8yR0haXS5jaGFubmVscyA9IE5VTEw7CiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQl9CiAKQEAgLTE0MzI1LDcgJiM0MzsxNDMyNiw5IEBAIHN0YXRpYyBpbnQgYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlcyhzdHJ1Y3QgYXRoMTJrICphciwKIAkJCQkJICAgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIWNoYW5uZWxzKSB7CiAJCQkJa2ZyZWUoYXItJmd0O21hYy5zYmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLmNoYW5uZWxzKTsKJiM0MzsJCQkJYXItJmd0O21hYy5zYmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLmNoYW5uZWxzID0gTlVMTDsKIAkJCQlrZnJlZShhci0mZ3Q7bWFjLnNiYW5kc1tOTDgwMjExX0JBTkRfNkdIWl0uY2hhbm5lbHMpOwomIzQzOwkJCQlhci0mZ3Q7bWFjLnNiYW5kc1tOTDgwMjExX0JBTkRfNkdIWl0uY2hhbm5lbHMgPSBOVUxMOwogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJfQogCkBAIC0xNDM2NSw3ICYjNDM7MTQzNjgsNyBAQCBzdGF0aWMgaW50IGF0aDEya19tYWNfc2V0dXBfY2hhbm5lbHNfcmF0ZXMoc3RydWN0IGF0aDEyayAqYXIsCiAJCQkJCWtmcmVlKGFyLSZndDttYWMuc2JhbmRzW05MODAyMTFfQkFORF8yR0haXS5jaGFubmVscyk7CiAJCQkJCWFyLSZndDttYWMuc2JhbmRzW05MODAyMTFfQkFORF8yR0haXS5jaGFubmVscyA9IE5VTEw7CiAJCQkJCWtmcmVlKGFyLSZndDttYWMuc2JhbmRzW05MODAyMTFfQkFORF82R0haXS5jaGFubmVscyk7Ci0JCQkJCWFyLSZndDttYWMuc2JhbmRzW05MODAyMTFfQkFORF8yR0haXS5jaGFubmVscyA9IE5VTEw7CiYjNDM7CQkJCQlhci0mZ3Q7bWFjLnNiYW5kc1tOTDgwMjExX0JBTkRfNkdIWl0uY2hhbm5lbHMgPSBOVUxMOwogCQkJCQlrZnJlZShjaGFubmVscyk7CiAJCQkJCWJhbmQtJmd0O2NoYW5uZWxzID0gTlVMTDsKIAkJCQkJcmV0dXJuIHJldDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ4NAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDI5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBXaUZpIDcgRHJpdmVyIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuY2AuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBkb3VibGUtZnJlZSBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZSBieSBzZXR0aW5nIGEgcG9pbnRlciB0byBOVUxMIGFmdGVyIGZyZWVpbmcgbWVtb3J5LiBHb29kIGRlZmVuc2l2ZSBjb2RpbmcsIGJ1dCBkb2VzIGl0IHdhcnJhbnQgZnV6emluZz8KClRoaXMgaXMgZm9yIHRoZSBhdGgxMmsgZHJpdmVyLCB3aGljaCwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBpcyBzcGVjaWZpYyB0byBRdWFsY29tbSYjMzk7cyBXaS1GaSA3IHNpbGljb24uIFRoZSBiaWcgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGlzIGZ1enplci1mcmllbmRseS4gQ2FuIEkgZ2V0IGF3YXkgd2l0aCBydW5uaW5nIGl0IGluIHNvbWV0aGluZyBsaWtlIFFFTVU/IFR5cGljYWxseSwgdGhlc2UgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycywgZXNwZWNpYWxseSB3aXJlbGVzcyBvbmVzLCBkZW1hbmQgZWl0aGVyIHBoeXNpY2FsIGhhcmR3YXJlIG9yIHByZXR0eSBlbGFib3JhdGUgZW11bGF0aW9uLiBJIGtub3cgKm1hYzgwMjExX2h3c2ltKiBvZmZlcnMgc29tZSBlbXVsYXRpb24sIGJ1dCB0aGF04oCZcyBhICpnZW5lcmljKiBmcmFtZXdvcmssIGFuZCB0aGlzIGlzIGEgc3BlY2lhbGl6ZWQgKmhhcmR3YXJlIGRyaXZlciouCgpOb3csIHRoZSBuZXh0IGxvZ2ljYWwgcXVlc3Rpb24g4oCTIGRvZXMgc3l6a2FsbGVyIHRhcmdldCB0aGlzPyBMZXQgbWUgY2hlY2suIFJpZ2h0LCBzeXprYWxsZXIgKmRvZXNuJiMzOTt0KiBlbXVsYXRlIHRoZSBhdGgxMmsgaGFyZHdhcmUuIEhtbS4uLiBtYXliZSwgKm1heWJlKiBJIGNvdWxkIHJlYWNoIHNvbWUgaW5pdGlhbGl6YXRpb24gY29kZSBpZiBpdCB3ZXJlIGEgVVNCIGRyaXZlciwgYnV0IGF0aDEyayBpcyBQQ0kgb3IgQUhCLCBJIHRoaW5rLiBUaGF04oCZcyBwcm9iYWJseSBhIGRlYWQgZW5kLgoKSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcsIGFuZCB0aGUgUENJIHNvdXJjZS4gTGV0IG1lIGxvb2sgYXQgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZ2AgYW5kIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jYCwgdG8gc2VlIGlmIEkgY2FuIGdldCBhIGJldHRlciBzZW5zZSBvZiBob3cgdGhpcyBkcml2ZXIgaXMgYXJjaGl0ZWN0ZWQgYW5kIHdoYXQgc29ydCBvZiBlbnRyeSBwb2ludHMgYXJlIGV4cG9zZWQuIE1pZ2h0IGdpdmUgbWUgYSBiZXR0ZXIgaWRlYSBvZiBob3cgcmVhbGlzdGljIGZ1enppbmcgdGhpcyB0aGluZyByZWFsbHkgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM9MTQxODY9c3RhdGljIHZvaWQgYXRoMTJrX21hY191cGRhdGVfNV85X2doel9jaF9saXN0KHN0cnVjdCBhdGgxMmsgKmFyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTQyMDUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jOjE0MjA2OnN0YXRpYyBpbnQgYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlcyhzdHJ1Y3QgYXRoMTJrICphcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTQyMDctXHRcdFx0XHRcdCAgIHUzMiBzdXBwb3J0ZWRfYmFuZHMsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYz0xNDc0Mz1zdGF0aWMgaW50IGF0aDEya19tYWNfc2V0dXBfcmVnaXN0ZXIoc3RydWN0IGF0aDEyayAqYXIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNDc1NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM6MTQ3NTY6XHRyZXQgPSBhdGgxMmtfbWFjX3NldHVwX2NoYW5uZWxzX3JhdGVzKGFyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNDc1Ny1cdFx0XHRcdFx0ICAgICAgY2FwLVx1MDAzZXN1cHBvcnRlZF9iYW5kcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTE4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbGVycyBvZiBgYXRoMTJrX21hY19zZXR1cF9yZWdpc3RlcmAqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBhdGgxMmtfbWFjX3NldHVwX3JlZ2lzdGVyYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGZpZ3VyZSBvdXQgKndobyogaXMgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGFuZCAqd2h5Ki4gSSB3YW50IHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdy4gSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkIGZyb20uIElzIGl0IGR1cmluZyBkcml2ZXIgaW5pdGlhbGl6YXRpb24/IElzIGl0IHRyaWdnZXJlZCBieSBzb21lIGV2ZW50PyBJcyBpdCBwYXJ0IG9mIHNvbWUgbW9yZSBjb21wbGV4IHJlZ2lzdHJhdGlvbiBzZXF1ZW5jZT8gIFRoZSBjb250ZXh0IHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0IHdpdGhpbiB0aGUgYnJvYWRlciBgYXRoMTJrYCBkcml2ZXIuIFRpbWUgdG8gdHJhY2sgZG93biBhbGwgaXRzIGNhbGwgc2l0ZXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX21hY19zZXR1cF9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM9MTQ3MjA9c3RhdGljIHZvaWQgYXRoMTJrX21hY19od191bnJlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfaHcgKmFoKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTQ3NDItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jOjE0NzQzOnN0YXRpYyBpbnQgYXRoMTJrX21hY19zZXR1cF9yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrICphcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTQ3NDQtXHRcdFx0XHQgICAgIHUzMiAqaHRfY2FwLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM9MTQ3Nzc9c3RhdGljIGludCBhdGgxMmtfbWFjX2h3X3JlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfaHcgKmFoKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTQ4MTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jOjE0ODE1Olx0XHRyZXQgPSBhdGgxMmtfbWFjX3NldHVwX3JlZ2lzdGVyKGFyLCBcdTAwMjZodF9jYXBfaW5mbywgaHctXHUwMDNld2lwaHktXHUwMDNlYmFuZHMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNDgxNi1cdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDYzCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZSwgdXNpbmcgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6CgoqKkRlZXAgRGl2ZSBvbiBgYXRoMTJrX21hY19od19yZWdpc3RlcmAqKgoKQWxyaWdodCwgc28gdGhlIGRpc2N1c3Npb24gaGFzIG1vdmVkIG9uIHRvIGBhdGgxMmtfbWFjX2h3X3JlZ2lzdGVyYC4gVGhhdCBmdW5jdGlvbiBjYWxsLi4uIGl0IGFsd2F5cyBnZXRzIG15IGF0dGVudGlvbi4gVGhpcyBpcyBsaWtlbHkgdGhlIHBvaW50IHdoZXJlIHRoZSBoYXJkd2FyZSBpdHNlbGYgaXMgZmluYWxseSBpbml0aWFsaXplZCBhbmQgZm9ybWFsbHkgaW50ZWdyYXRlZCBpbnRvIHRoZSBhdGgxMmsgZHJpdmVyJiMzOTtzIG9wZXJhdGlvbmFsIGZsb3cuIEkmIzM5O20gaW1tZWRpYXRlbHkgcnVubmluZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMgaW4gbXkgaGVhZDogV2hhdCBzcGVjaWZpYyBoYXJkd2FyZSByZXNvdXJjZXMgYXJlIGJlaW5nIGNsYWltZWQgYW5kIG1hcHBlZCBhdCB0aGlzIHBvaW50PyBJcyB0aGVyZSBhbnkgc29ydCBvZiBkaXJlY3QgcmVnaXN0ZXIgYWNjZXNzIGhhcHBlbmluZyBoZXJlPyBNb3JlIGltcG9ydGFudGx5LCBhbSBJIHJlbWVtYmVyaW5nIGFsbCB0aGUgbnVhbmNlcyBvZiB0aGlzIHNwZWNpZmljIHJlZ2lzdHJhdGlvbiBwcm9jZXNzPyBJcyB0aGVyZSBhbnkgb3Bwb3J0dW5pdHkgZm9yIG9wdGltaXphdGlvbiBpbiBob3cgaXQmIzM5O3MgZG9uZT8gT3IgYW55IGNoYW5jZSBvZiBhbiBpbnRlcmVzdGluZyBvciBkYW5nZXJvdXMgYnVnIGJlaW5nIGhpZGRlbiBoZXJlPyBOZWVkIHRvIGtlZXAgaW4gbWluZCwgYW5kIHZlcmlmeSBpZiBpdCBhbGlnbnMgd2l0aCBteSBleHBlY3RhdGlvbnMgb2YgaG93IGFuIGF0aDEyayBkcml2ZXIgc2hvdWxkIHdvcmsuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGNyaXRpY2FsIHNlY3Rpb24sIGFuZCBvbmUgSSB3b3VsZCB3YW50IHRvIGRpc3NlY3QgY2FyZWZ1bGx5IGlmIEkgd2VyZSBkZWJ1Z2dpbmcgYSB3aXJlbGVzcyBwZXJmb3JtYW5jZSBpc3N1ZSBvciBpbnZlc3RpZ2F0aW5nIGEgcGFydGljdWxhcmx5IG5hc3R5IGRyaXZlciBoYW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZnVsbHkgdXAgdG8gc3BlZWQgb24gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMmtfbWFjX2h3X3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYz0xNDc0Mz1zdGF0aWMgaW50IGF0aDEya19tYWNfc2V0dXBfcmVnaXN0ZXIoc3RydWN0IGF0aDEyayAqYXIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNDc3Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM6MTQ3Nzc6c3RhdGljIGludCBhdGgxMmtfbWFjX2h3X3JlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfaHcgKmFoKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNDc3OC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYz0xNTI5NT1pbnQgYXRoMTJrX21hY19yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphZylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jLTE1MzAzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYzoxNTMwNDpcdFx0cmV0ID0gYXRoMTJrX21hY19od19yZWdpc3RlcihhaCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jLTE1MzA1LVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmM9NjkyMz1zdGF0aWMgaW50IGF0aDEya19yZWdfY2hhbl9saXN0X2V2ZW50KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYy03MDAxLVx0ICogc28gdGhlIGNvbXBsZXRpb24gY2Fubm90IGJlIG1hcmtlZCBhdCB0aGF0IHBvaW50LlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYzo3MDAyOlx0ICogVGhpcyBib290LXRpbWUgdXBkYXRlIGlzIGhhbmRsZWQgaW4gYXRoMTJrX21hY19od19yZWdpc3RlcigpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jLTcwMDMtXHQgKiBiZWZvcmUgcmVnaXN0ZXJpbmcgdGhlIGhhcmR3YXJlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NDAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgaW4gdGhlIGZpcnN0IHBlcnNvbiBhbmQgYXNzdW1pbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgYGF0aDEya19tYWNfcmVnaXN0ZXJgKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gdGhlIHRleHQgbWVudGlvbnMgYGF0aDEya19tYWNfcmVnaXN0ZXJgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoYXQgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgTUFDIGxheWVyIHdpdGhpbiB0aGUgYXRoMTJrIGRyaXZlci4gV2hhdCYjMzk7cyB0aGUgY29udGV4dCBoZXJlPyBJJiMzOTttIHByb2JhYmx5IGNvbnNpZGVyaW5nIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCBvciBwZXJoYXBzIGRlYnVnZ2luZyBhIHNwZWNpZmljIGlzc3VlIHJlbGF0ZWQgdG8gTUFDIG9wZXJhdGlvbnMgb24gYW4gYXRoMTJrLWJhc2VkIGRldmljZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoYXQqIHRoZSBxdWVzdGlvbiBvciBzY2VuYXJpbyBhcm91bmQgdGhhdCBmdW5jdGlvbiBpcy4gQXJlIHdlIHRyb3VibGVzaG9vdGluZyBhIHJlZ2lzdGVyIGFjY2VzcyBwcm9ibGVtPyBBIHJlc291cmNlIGNvbmZsaWN0PyBPciBhcmUgd2UgaW4gdGhlIGFyY2hpdGVjdHVyZSBwaGFzZSwgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRoZSBNQUMgYW5kIHRoZSBkcml2ZXIgaW50ZXJhY3QgZHVyaW5nIGluaXRpYWwgYnJpbmd1cD8gQXJlIHRoZXJlIHNwZWNpZmljIHJlZ2lzdGVycyBiZWluZyBtZW50aW9uZWQsIG9yIHNwZWNpZmljIGlzc3Vlcz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX21hY19yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jPTExNTU9c3RhdGljIGludCBhdGgxMmtfY29yZV9od19ncm91cF9zdGFydChzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphZylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0xMTc4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6MTE3OTpcdHJldCA9IGF0aDEya19tYWNfcmVnaXN0ZXIoYWcpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMTE4MC1cdGlmIChXQVJOX09OKHJldCkpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYz0xNTI3Mz12b2lkIGF0aDEya19tYWNfbWxvX3RlYXJkb3duKHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTUyOTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jOjE1Mjk1OmludCBhdGgxMmtfbWFjX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNTI5Ni17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuaD0xNTQ9dm9pZCBhdGgxMmtfbWFjX3VucmVnaXN0ZXIoc3RydWN0IGF0aDEya19od19ncm91cCAqYWcpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuaDoxNTU6aW50IGF0aDEya19tYWNfcmVnaXN0ZXIoc3RydWN0IGF0aDEya19od19ncm91cCAqYWcpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuaC0xNTYtaW50IGF0aDEya19tYWNfYWxsb2NhdGUoc3RydWN0IGF0aDEya19od19ncm91cCAqYWcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTE5CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgYXRoMTJrX2NvcmVfaHdfZ3JvdXBfc3RhcnRgIEZ1bmN0aW9uIENhbGwqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBhbmQgdGhlIHF1ZXN0aW9uIHRoYXQmIzM5O3MgcmVhbGx5IG5hZ2dpbmcgYXQgbWUgaXM6IHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGlzIGBhdGgxMmtfY29yZV9od19ncm91cF9zdGFydGAgZnVuY3Rpb24/IEl0JiMzOTtzIGtleSwgSSBrbm93IGl0LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0aGUgY29yZSBoYXJkd2FyZSBncm91cCBzdGFydCBmdW5jdGlvbiwgYW5kIHRoYXQgdXN1YWxseSBpbmRpY2F0ZXMgc29tZSBmdW5kYW1lbnRhbCBpbml0aWFsaXphdGlvbiBvciBhY3RpdmF0aW9uIHBoYXNlIGZvciBhIHNwZWNpZmljIHBhcnQgb2YgdGhlIGhhcmR3YXJlLCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSB3aXJlbGVzcyBpbnRlcmZhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgY29udGV4dCwgc3BlY2lmaWNhbGx5IHdoYXQgaXTigJlzIHN0YXJ0aW5nIGluIHRoZSBmaXJzdCBwbGFjZS4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3BlY2lmaWMgaGFyZHdhcmUgZ3JvdXAgaXQmIzM5O3MgbWFuYWdpbmcsIGFuZCB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlLCBpZiBhbnkuIElzIGl0IHJlbGF0ZWQgdG8gdGhlIFBIWSwgTUFDLCBvciBwZXJoYXBzIGEgc3BlY2lmaWMgcmFkaW8gY2hhaW4/IElzIHRoZXJlIGEgcHJlY2VkaW5nIHNldHVwIHRoYXQgbXVzdCBiZSBkb25lIGJlZm9yZSB0aGlzIGNhbiBydW4gd2l0aG91dCBpc3N1ZT8gUGVyaGFwcyB0aGVyZSYjMzk7cyBhIHJlYXNvbiBmb3IgY29uY2VybnMgcmVsYXRlZCB0byBpdHMgZGVwZW5kZW5jaWVzLCBvciBhIHNwZWNpZmljIHJlYXNvbiB3aHkgaXRzIGxvY2F0aW9uIGluIHRoZSBicm9hZGVyIGNvZGUgaXMgaW50ZXJlc3RpbmcuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkaXZlIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX2NvcmVfaHdfZ3JvdXBfc3RhcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYz0xMTI5PXN0YXRpYyBpbnQgYXRoMTJrX2NvcmVfbWxvX3NldHVwKHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTExNTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYzoxMTU1OnN0YXRpYyBpbnQgYXRoMTJrX2NvcmVfaHdfZ3JvdXBfc3RhcnQoc3RydWN0IGF0aDEya19od19ncm91cCAqYWcpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0xMTU2LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYz0xMjMwPXN0YXRpYyBpbmxpbmVcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jOjEyMzE6Ym9vbCBhdGgxMmtfY29yZV9od19ncm91cF9zdGFydF9yZWFkeShzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphZylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTEyMzIte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jPTEzMTE9aW50IGF0aDEya19jb3JlX3FtaV9maXJtd2FyZV9yZWFkeShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTEzNDQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYzoxMzQ1Olx0aWYgKGF0aDEya19jb3JlX2h3X2dyb3VwX3N0YXJ0X3JlYWR5KGFnKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6MTM0NjpcdFx0cmV0ID0gYXRoMTJrX2NvcmVfaHdfZ3JvdXBfc3RhcnQoYWcpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMTM0Ny1cdFx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jPTE2Mzg9c3RhdGljIHZvaWQgYXRoMTJrX2NvcmVfcmVzdGFydChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMTY2MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jOjE2NjI6XHRcdGlmICghYXRoMTJrX2NvcmVfaHdfZ3JvdXBfc3RhcnRfcmVhZHkoYWcpKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0xNjYzLVx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZhZy1cdTAwM2VtdXRleCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MjgKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFFNSSBGaXJtd2FyZSBSZWFkeSBDYWxsKioKCk9rYXksIHNvIEkmIzM5O3ZlIGhpdCBhIHBvaW50IGluIHRoZSBjb2RlIHdoZXJlIHRoZSBRTUkgZmlybXdhcmUgaXMgcmVhZHkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoZSBgYXRoMTJrYCBkcml2ZXIsIHNwZWNpZmljYWxseSwgYmVpbmcgc3ViamVjdGVkIHRvIGZ1enppbmc/JiMzNDsgVHlwaWNhbGx5LCB5b3UgZG9uJiMzOTt0IGZ1enogUENJIGRldmljZXMgZGlyZWN0bHkgdW5sZXNzIHRoZXJlJiMzOTtzIHNvbWUga2luZCBvZiB2aXJ0dWFsIGRldmljZSBvciBQQ0kgZW11bGF0aW9uIGluIHBsYWNlLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQgc3l6a2FsbGVyLCB3aGljaCBpcyB0aGUgZnV6emVyIHRoYXQmIzM5O3MgbGlrZWx5IGRyaXZpbmcgdGhpcywgd291bGRuJiMzOTt0IGhhdmUgUENJIGVtdWxhdGlvbiBzZXQgdXAgc3BlY2lmaWNhbGx5IGZvciBgYXRoMTJrYC4gQnV0LCB3YWl0IGEgbWludXRlLi4uIHdoYXQgaWYgaXQgKmlzbiYjMzk7dCogYSBQQ0kgZGV2aWNlPyBXaGF0IGlmIGl0JiMzOTtzIGEgcGxhdGZvcm0gZGV2aWNlPyBUaGF0IGNoYW5nZXMgdGhpbmdzLiBMZXQmIzM5O3MgZGlnIGluIGEgYml0IGZ1cnRoZXIsIGFuZCBjaGVjayB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuY2AgZmlsZS4gVGhhdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBjbHVlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX2FoYl9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM9OTk4PWF0aDEya19haGJfZ2V0X2RldmljZV9mYW1pbHkoY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTEwMTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjEwMTk6c3RhdGljIGludCBhdGgxMmtfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTEwMjAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM9MTE4Nz1pbnQgYXRoMTJrX2FoYl9yZWdpc3Rlcl9kcml2ZXIoY29uc3QgZW51bSBhdGgxMmtfZGV2aWNlX2ZhbWlseSBkZXZpY2VfaWQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xMjA4LVx0YWhiX2RyaXZlci1cdTAwM2Vkcml2ZXIub2ZfbWF0Y2hfdGFibGUgPSBkcml2ZXItXHUwMDNlaWRfdGFibGU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjEyMDk6XHRhaGJfZHJpdmVyLVx1MDAzZXByb2JlICA9IGF0aDEya19haGJfcHJvYmU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTEyMTAtXHRhaGJfZHJpdmVyLVx1MDAzZXJlbW92ZSA9IGF0aDEya19haGJfcmVtb3ZlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDk3CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlFFTVUgYW5kIGF0aDEyazogQSBTaW11bGF0aW9uIENoYWxsZW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBhY3R1YWxseSB0cmlnZ2VyIHRoaXMgYGF0aDEya2AgY29kZSB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50LiBUaGUgb2J2aW91cyByb2FkYmxvY2tzIGFyZSBwcmV0dHkgY2xlYXI6IHdpdGhvdXQgdGhlIGFjdHVhbCBoYXJkd2FyZSwgbmVpdGhlciBgYXRoMTJrX2FoYl9wcm9iZWAgbm9yIGBhdGgxMmtfcGNpX3Byb2JlYCB3aWxsIGV2ZXIgYmUgY2FsbGVkIGluIGEgJiMzNDtub3JtYWwmIzM0OyBzY2VuYXJpby4gT3IsIGlmIEkgdHJ5IGEgd29ya2Fyb3VuZCBsaWtlIGZha2luZyBhIHBsYXRmb3JtIGRldmljZSwgdGhlIGNvZGUgd2lsbCBqdXN0IGVycm9yIG91dCBxdWlja2x5IHdoZW4gaXQgY2FuJiMzOTt0IHJlYWQgdGhlIGhhcmR3YXJlIHJlZ2lzdGVycyBvciBjb21tdW5pY2F0ZSB3aXRoIHRoZSBmaXJtd2FyZS4KCldhaXQgYSBzZWNvbmTigKZzeXprYWxsZXIgbWlnaHQgYmUgYWJsZSB0byBjcmVhdGUgdGhvc2UgcGxhdGZvcm0gZGV2aWNlcyB1c2luZyBgc3l6X2RldnJlc2Agb3Igc29tZXRoaW5nIHNpbWlsYXIsIHJpZ2h0PyBCdXQgZXZlbiBpZiBJIGdvIGRvd24gdGhhdCBwYXRoLCBpdCB3b24mIzM5O3QgYmUgYWJsZSB0byBwcm92aWRlIHRoZSBmaXJtd2FyZSBhbmQgYWxsIHRoZSBuZWNlc3NhcnkgaGFyZHdhcmUgcmVzcG9uc2VzIHJlcXVpcmVkIHRvIGdldCB0aGUgY29kZSB0byByZWFjaCBgYXRoMTJrX2NvcmVfcW1pX2Zpcm13YXJlX3JlYWR5YC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBhdGgxMmtfY29yZV9xbWlfZmlybXdhcmVfcmVhZHlgIHRvIHNlZSB3aGF0IHRoZSBjb25kaXRpb25zIGFyZS4gSXQmIzM5O3MgcHJvYmFibHkgdGhlIGNydWNpYWwgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya19jb3JlX3FtaV9maXJtd2FyZV9yZWFkeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jPTEyOTI9c3RhdGljIHZvaWQgYXRoMTJrX2NvcmVfdHJpZ2dlcl9wYXJ0bmVyKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMTMxMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jOjEzMTE6aW50IGF0aDEya19jb3JlX3FtaV9maXJtd2FyZV9yZWFkeShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMTMxMi17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM9MTM4NT1zdGF0aWMgaW50IGF0aDEya19jb3JlX3JlY29uZmlndXJlX29uX2NyYXNoKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMTQwOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jOjE0MDk6XHRyZXQgPSBhdGgxMmtfY29yZV9xbWlfZmlybXdhcmVfcmVhZHkoYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMTQxMC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmg9MTIwNT1zdHJ1Y3QgYXRoMTJrX2Z3X3N0YXRzX3BkZXYge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5oLTEyNjQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaDoxMjY1OmludCBhdGgxMmtfY29yZV9xbWlfZmlybXdhcmVfcmVhZHkoc3RydWN0IGF0aDEya19iYXNlICphYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaC0xMjY2LXZvaWQgYXRoMTJrX2NvcmVfaHdfZ3JvdXBfY2xlYW51cChzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphZyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYz0zOTY1PXN0YXRpYyB2b2lkIGF0aDEya19xbWlfZHJpdmVyX2V2ZW50X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtNDAxNC1cdFx0XHRcdCAgXHUwMDI2YWItXHUwMDNlZGV2X2ZsYWdzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM6NDAxNTpcdFx0XHRyZXQgPSBhdGgxMmtfY29yZV9xbWlfZmlybXdhcmVfcmVhZHkoYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy00MDE2LVx0XHRcdGlmICghcmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTYwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgUU1JIE1lc3NhZ2UgSGFuZGxpbmcgaW4gYXRoMTJrKioKCk9rYXksIHNvIGBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudF93b3JrYCBnZXRzIHRyaWdnZXJlZCB3aGVuZXZlciBhIFFNSSBtZXNzYWdlIGNvbWVzIGluLiBUaGF0IG1ha2VzIHNlbnNlIOKAkyBRTUkgaXMgdGhlIFF1YWxjb21tIE1lc3NhZ2UgSW50ZXJmYWNlLCBhbmQgaXQgdHlwaWNhbGx5IHRyYXZlbHMgb3ZlciB0aGUgSVBDIHJvdXRlciwgcmlnaHQ/IFNwZWNpZmljYWxseSwgQUZfUUlQQ1JUUiwgb3IgYSBzaW1pbGFyIGNvbW11bmljYXRpb24gY2hhbm5lbC4gSSYjMzk7bSB3b25kZXJpbmcgdGhvdWdoLi4uIGNhbiBzeXprYWxsZXIgaW5qZWN0IHRoZXNlIFFNSSBtZXNzYWdlcz8gV2UgdXNlIHN5emthbGxlciBmb3IgZnV6emluZywgYW5kIGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGNvbnNpZGVyIGFsbCBhdHRhY2sgc3VyZmFjZXMuCgpJIHJlbWVtYmVyIHN5emthbGxlciAqZG9lcyogaGF2ZSBzb21lIEFGX1FJUENSVFIgc3VwcG9ydCwgYnV0IGlzbuKAmXQgdGhhdCBwcmltYXJpbHkgZm9yIHVzZXJzcGFjZSBjb21tdW5pY2F0aW5nIHdpdGggdGhlIGtlcm5lbD8gSGVyZSwgdGhlIGBhdGgxMmtgIGRyaXZlciBpcyBjb21tdW5pY2F0aW5nIHdpdGggdGhlICpmaXJtd2FyZSogdXNpbmcgUU1JLCB3aGljaCBpcyBhIGRpZmZlcmVudCBjb250ZXh0LiBJIG5lZWQgdG8gY2xhcmlmeSBpZiBpdCBpcyB1c2luZyB0aGUgUVJUUiBzdWJzeXN0ZW0gd2hpY2ggd291bGQgYmUgcmVsZXZhbnQgdG8gaG93IGl0IGNvbW11bmljYXRlcyB3aXRoIFFNSS4gTGV0IG1lIGRpZyBhIGJpdCBkZWVwZXIgYW5kIHNlZSBpZiBgYXRoMTJrYCBpcyBsZXZlcmFnaW5nIFFSVFIgaW4gYW55IG9mIHRoaXMgY29tbXVuaWNhdGlvbiBwYXRoLiBUaGF0IHdpbGwgYmUgdGhlIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXJ0ciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZWR1bXAuaD0zNz1zdHJ1Y3QgYXRoMTJrX2R1bXBfZmlsZV9kYXRhIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmVkdW1wLmgtNDUtXHRfX2xlMzIgY2hpcF9pZDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZWR1bXAuaDo0NjpcdC8qIHFydHIgaW5zdGFuY2UgaWQgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZWR1bXAuaDo0NzpcdF9fbGUzMiBxcnRyX2lkO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlZHVtcC5oLTQ4LVx0LyogcGNpIGRvbWFpbiBpZCAqL1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGFsLmg9MTEzNT1zdHJ1Y3QgYXRoMTJrX2h3X3JlZ3Mge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGFsLmgtMTIxMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGFsLmg6MTIxNDpcdHUzMiBxcnRyX25vZGVfaWQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hhbC5oLTEyMTUtfTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTg4OT1zdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2FzcG1fZGlzYWJsZShzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtOTA3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzo5MDg6c3RhdGljIHZvaWQgYXRoMTJrX3BjaV91cGRhdGVfcXJ0cl9ub2RlX2lkKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTkwOS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy05MTMtXHQvKiBPbiBwbGF0Zm9ybXMgd2l0aCB0d28gb3IgbW9yZSBpZGVudGljYWwgbWhpIGRldmljZXMsIHFtaSBzZXJ2aWNlIHJ1blxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzo5MTQ6XHQgKiB3aXRoIGlkZW50aWNhbCBxcnRyLW5vZGUtaWQuIEJlY2F1c2Ugb2YgdGhpcyBpZGVudGljYWwgSUQgcXJ0ci1sb29rdXBcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtOTE1LVx0ICogY2Fubm90IHJlZ2lzdGVyIG1vcmUgdGhhbiBvbmUgcW1pIHNlcnZpY2Ugd2l0aCBpZGVudGljYWwgbm9kZSBJRC5cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTEzMTY9c3RhdGljIHZvaWQgYXRoMTJrX3BjaV9jb3JlZHVtcF9kb3dubG9hZChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTM1Mi1cdGZpbGVfZGF0YS1cdTAwM2VjaGlwX2lkID0gY3B1X3RvX2xlMzIoYWJfcGNpLVx1MDAzZWRldl9pZCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjEzNTM6XHRmaWxlX2RhdGEtXHUwMDNlcXJ0cl9pZCA9IGNwdV90b19sZTMyKGFiX3BjaS1cdTAwM2VhYi1cdTAwM2VxbWkuc2VydmljZV9pbnNfaWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xMzU0LVx0ZmlsZV9kYXRhLVx1MDAzZWJ1c19pZCA9IGNwdV90b19sZTMyKHBjaV9kb21haW5fbnIoYWJfcGNpLVx1MDAzZXBkZXYtXHUwMDNlYnVzKSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xNDI4PWludCBhdGgxMmtfcGNpX3Bvd2VyX3VwKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNDQ0LVx0aWYgKGF0aDEya19md19mZWF0dXJlX3N1cHBvcnRlZChhYiwgQVRIMTJLX0ZXX0ZFQVRVUkVfTVVMVElfUVJUUl9JRCkpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE0NDU6XHRcdGF0aDEya19wY2lfdXBkYXRlX3FydHJfbm9kZV9pZChhYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE0NDYtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaC02Mi0jZGVmaW5lIFBDSUVfTE9DQUxfUkVHX1FSVFJfTk9ERV9JRChhYikgXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmg6NjM6XHQoKGFiKS1cdTAwM2VoYWwucmVncy1cdTAwM2VxcnRyX25vZGVfaWQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5oLTY0LSNkZWZpbmUgRE9NQUlOX05VTUJFUl9NQVNLXHRcdFx0R0VOTUFTSyg3LCA0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM9MzgxND1zdGF0aWMgdm9pZCBhdGgxMmtfcW1pX21zZ19tZW1fcmVxdWVzdF9jYihzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pX2hkbCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM6MzgxNTpcdFx0XHRcdFx0ICBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTM4MTYtXHRcdFx0XHRcdCAgc3RydWN0IHFtaV90eG4gKnR4bixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jPTM4NTk9c3RhdGljIHZvaWQgYXRoMTJrX3FtaV9tc2dfbWVtX3JlYWR5X2NiKHN0cnVjdCBxbWlfaGFuZGxlICpxbWlfaGRsLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYzozODYwOlx0XHRcdFx0XHRzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTM4NjEtXHRcdFx0XHRcdHN0cnVjdCBxbWlfdHhuICp0eG4sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYz0zODcxPXN0YXRpYyB2b2lkIGF0aDEya19xbWlfbXNnX2Z3X3JlYWR5X2NiKHN0cnVjdCBxbWlfaGFuZGxlICpxbWlfaGRsLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYzozODcyOlx0XHRcdFx0ICAgICAgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtMzg3My1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgcW1pX3R4biAqdHhuLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM9MzkxMD1zdGF0aWMgaW50IGF0aDEya19xbWlfb3BzX25ld19zZXJ2ZXIoc3RydWN0IHFtaV9oYW5kbGUgKnFtaV9oZGwsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy0zOTE0LVx0c3RydWN0IGF0aDEya19iYXNlICphYiA9IHFtaS1cdTAwM2VhYjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM6MzkxNTpcdHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSA9IFx1MDAyNnFtaS1cdTAwM2VzcTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtMzkxNi1cdGludCByZXQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuaD0xMzU9c3RydWN0IGF0aDEya19xbWkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmgtMTM3LVx0c3RydWN0IHFtaV9oYW5kbGUgaGFuZGxlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuaDoxMzg6XHRzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciBzcTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmgtMTM5LVx0c3RydWN0IHdvcmtfc3RydWN0IGV2ZW50X3dvcms7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9oYWxfcWNjMjA3Mi5jPTk9Y29uc3Qgc3RydWN0IGF0aDEya19od19yZWdzIHFjYzIwNzJfcmVncyA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF9xY2MyMDcyLmMtOTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF9xY2MyMDcyLmM6OTY6XHQucXJ0cl9ub2RlX2lkID0gMHgxZTAzMzAwLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9oYWxfcWNjMjA3Mi5jLTk3LX07XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9oYWxfcWNuOTI3NC5jPTIxNT1jb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X3JlZ3MgcWNuOTI3NF92MV9yZWdzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaGFsX3FjbjkyNzQuYy0zMDAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF9xY245Mjc0LmM6MzAxOlx0LnFydHJfbm9kZV9pZCA9IDB4MWUwMzE2NCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaGFsX3FjbjkyNzQuYy0zMDItfTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF9xY245Mjc0LmM9MzA0PWNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfcmVncyBxY245Mjc0X3YyX3JlZ3MgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9oYWxfcWNuOTI3NC5jLTM5NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaGFsX3FjbjkyNzQuYzozOTY6XHQucXJ0cl9ub2RlX2lkID0gMHgxZTAzMTY0LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9oYWxfcWNuOTI3NC5jLTM5Ny19O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaGFsX3djbjc4NTAuYz0xNzQ9Y29uc3Qgc3RydWN0IGF0aDEya19od19yZWdzIHdjbjc4NTBfcmVncyA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF93Y243ODUwLmMtMjU5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9oYWxfd2NuNzg1MC5jOjI2MDpcdC5xcnRyX25vZGVfaWQgPSAweDFlMDMxNjQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF93Y243ODUwLmMtMjYxLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTc4CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgSW52ZXN0aWdhdGlvbiBvZiB0aGUgYXRoMTJrIERyaXZlciBhbmQgUVJUUioqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBzeXprYWxsZXIgY2FuIGludGVyYWN0IHdpdGggdGhlIGF0aDEyayBkcml2ZXIsIHNwZWNpZmljYWxseSBob3cgaXQgbGV2ZXJhZ2VzIFFSVFIgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgZmlybXdhcmUuIEkga25vdyB0aGUgZHJpdmVyIHVzZXMgUVJUUiB0byB0YWxrIHRvIHRoZSBmaXJtd2FyZSwgYnV0IG15IHF1ZXN0aW9uIGlzIHdoZXRoZXIgc3l6a2FsbGVyIGlzIGVtdWxhdGluZyBRUlRSIG5vZGVzIHRvIGZvb2wgdGhlIGRyaXZlciBpbnRvIHRoaW5raW5nIGl0JiMzOTtzIHRhbGtpbmcgdG8gdGhlIGFjdHVhbCBmaXJtd2FyZS4KClRoZSBhbnN3ZXIsIGFzIGZhciBhcyBJIHVuZGVyc3RhbmQsIGlzIG5vLiBTeXprYWxsZXIgY2FuIGluamVjdCBRUlRSIHBhY2tldHMgZGlyZWN0bHkgaW50byB0aGUgc29ja2V0LCBidXQgdGhlIGFjdHVhbCBRUlRSIG5vZGVzIHRoZW1zZWx2ZXMgYXJlIHR5cGljYWxseSBzZXQgdXAgYW5kIHJlZ2lzdGVyZWQgYnkgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgZHJpdmVycyDigJMgdGhpbmdzIGxpa2UgTUhJIG9yIFNNRC4gCgpBaCwgYnV0IGhlcmUmIzM5O3MgYSB0aG91Z2h0OiBpZiBzeXprYWxsZXIgY2FuIGNyZWF0ZSBpdHMgKm93biogdmlydHVhbCBRUlRSIG5vZGUgYW5kIHNlbmQgUU1JIG1lc3NhZ2VzLCBjb3VsZCB0aGF0IHBvdGVudGlhbGx5IHRyaWdnZXIgdGhlIGBhdGgxMmtfcW1pX29wc19uZXdfc2VydmVyYCBmdW5jdGlvbj8gQnV0IHdhaXQgYSBtaW51dGUsIGlzbiYjMzk7dCB0aGF0IGZ1bmN0aW9uIGNhbGxlZCB3aGVuIGEgKm5ldyBzZXJ2ZXIqIGlzIHJlZ2lzdGVyZWQgb24gdGhlIFFSVFIgYnVzPyBUaGUgYXRoMTJrIGRyaXZlciBpcyBhY3R1YWxseSBhICpjbGllbnQqLCBpc24mIzM5O3QgaXQ/IEl0IHJlZ2lzdGVycyBpdHMgb3duIFFNSSBoYW5kbGUgYW5kIHRoZW4gd2FpdHMgZm9yIHRoZSBmaXJtd2FyZSB0byBhY3QgYXMgdGhlIHNlcnZlci4KCk9rYXksIHNvIGlmIHN5emthbGxlciBjcmVhdGVzIGEgUVJUUiBzZXJ2ZXIgaW4gdXNlcnNwYWNlLCB0aGF0ICptaWdodCogdHJpZ2dlciBgYXRoMTJrX3FtaV9vcHNfbmV3X3NlcnZlcmAuIExldCYjMzk7cyBzdGVwIGJhY2ssIGFuZCByZW1lbWJlciB0aGF0IGF0aDEyayBvbmx5IHJlZ2lzdGVycyBpdHMgUU1JIGhhbmRsZSBpbnNpZGUgYGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlYC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2VgIGlzIGV2ZW4gY2FsbGVkLCBhbmQgaXQmIzM5O3MgdGltZSB0byBzdGFydCB0cmFjaW5nIHRoYXQgY2FsbCBjaGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX3FtaV9pbml0X3NlcnZpY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYz04MTU9c3RhdGljIGludCBhdGgxMmtfY29yZV9zb2NfY3JlYXRlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtODIzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6ODI0Olx0cmV0ID0gYXRoMTJrX3FtaV9pbml0X3NlcnZpY2UoYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtODI1LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM9Mzk2NT1zdGF0aWMgdm9pZCBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTQwMzctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjQwMzg6aW50IGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTQwMzkte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmg9NjQ0PXZvaWQgYXRoMTJrX3FtaV9kZWluaXRfc2VydmljZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmg6NjQ1OmludCBhdGgxMmtfcW1pX2luaXRfc2VydmljZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmgtNjQ2LXZvaWQgYXRoMTJrX3FtaV9mcmVlX3Jlc291cmNlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA2NAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB1bmRlcnN0YW5kaW5nLCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHRzOgoKKipEaXNzZWN0aW5nIHRoZSBBdGgxMmsgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBmb3IgdGhlIGF0aDEyayBkcml2ZXIsIGFuZCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBgYXRoMTJrX2NvcmVfc29jX2NyZWF0ZWAgaXMgYSBrZXkgZnVuY3Rpb24uIEkgc2VlIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBhdGgxMmtfY29yZV9pbml0YC4gVGhhdCYjMzk7cyBub3Qgc3VycHJpc2luZywgYnV0IGl0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIGEgZmV3IHRoaW5ncy4gRmlyc3QsIGBhdGgxMmtfY29yZV9zb2NfY3JlYXRlYCBpcyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgY29yZSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllciBvciBpbml0aWFsaXppbmcgc29tZSBjcnVjaWFsIHN0YXRlIHJlbGF0ZWQgdG8gdGhlIFN5c3RlbS1vbi1DaGlwIChTb0MpIGludGVncmF0aW9uLiBHaXZlbiB0aGUgbmFtZSwgaXQgYWxtb3N0IGNlcnRhaW5seSBkZWFscyB3aXRoIHRoZSBzcGVjaWZpYyBTb0MgZmVhdHVyZXMgYW5kIHJlcXVpcmVtZW50cy4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgYXRoMTJrX2NvcmVfaW5pdGAgc3VnZ2VzdHMgaXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBvdmVyYWxsIGRyaXZlciYjMzk7cyBpbnN0YW50aWF0aW9uIHByb2Nlc3MuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gd2hhdCBgYXRoMTJrX2NvcmVfc29jX2NyZWF0ZWAgKmFjdHVhbGx5KiBkb2VzLiBJcyBpdCBhbGxvY2F0aW5nIG1lbW9yeSwgcmVnaXN0ZXJpbmcgaGFyZHdhcmUgcmVzb3VyY2VzLCBzZXR0aW5nIHVwIGludGVycnVwdCBoYW5kbGVycywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGNhbGwgdHJlZSBoaW50cyB0aGF0IGl0JiMzOTtzIHByb2JhYmx5IG9uZSBvZiB0aGUgZmlyc3Qgc3RlcHMgaW4gcHJlcGFyaW5nIHRoZSBoYXJkd2FyZSBmb3Igb3BlcmF0aW9uLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uJiMzOTtzIGltcGxlbWVudGF0aW9uIG5leHQsIGl0IHdpbGwgcHJvdmlkZSBtdWNoIG1vcmUgZGV0YWlsIG9uIHRoZSBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMmtfY29yZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYz0xMDE5PXN0YXRpYyBpbnQgYXRoMTJrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTExMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MTExMTpcdHJldCA9IGF0aDEya19jb3JlX2luaXQoYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xMTEyLVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jPTIxOTA9dm9pZCBhdGgxMmtfY29yZV9od19ncm91cF9zZXRfbWxvX2NhcGFibGUoc3RydWN0IGF0aDEya19od19ncm91cCAqYWcpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMjIzMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jOjIyMzE6aW50IGF0aDEya19jb3JlX2luaXQoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTIyMzIte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5oPTEyNjc9aW50IGF0aDEya19jb3JlX3ByZV9pbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmg6MTI2ODppbnQgYXRoMTJrX2NvcmVfaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmF0aDEyayk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaC0xMjY5LXZvaWQgYXRoMTJrX2NvcmVfZGVpbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYXRoMTJrKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE1Mjg9c3RhdGljIGludCBhdGgxMmtfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTY0OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTY0OTpcdHJldCA9IGF0aDEya19jb3JlX2luaXQoYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNjUwLVx0aWYgKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk5NQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGF0aDEyayBEcml2ZXIgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gYGF0aDEya19jb3JlX2luaXRgIGlzIHRoZSBjb3JlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgY2FsbGVkIGZyb20gYm90aCBgYXRoMTJrX2FoYl9wcm9iZWAgYW5kIGBhdGgxMmtfcGNpX3Byb2JlYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkga25vdyBzeXprYWxsZXIgaXNuJiMzOTt0IGdvaW5nIHRvIGJlIGFibGUgdG8gaGl0IHRob3NlIHByb2JlcyBkaXJlY3RseS4gVGhleSByZXF1aXJlIHJlYWwgaGFyZHdhcmUgb3IgdmVyeSBzcGVjaWZpYyBlbXVsYXRlZCBkZXZpY2VzIOKAkyB0aGluZ3Mgc3l6a2FsbGVyIHR5cGljYWxseSBzdHJ1Z2dsZXMgd2l0aC4KCkJ1dCB3YWl0IGEgbWludXRlLi4uIEkgcmVjYWxsIGBzeXpfZGV2cmVzYC4gVGhhdCYjMzk7cyB0aGUga2V5ISBJZiBJIGNhbiBsZXZlcmFnZSBgc3l6X2RldnJlc2AgdG8gZmFicmljYXRlIGEgcGxhdGZvcm0gZGV2aWNlIHRoYXQgbG9va3MgbGlrZSB3aGF0IGBhdGgxMmtfYWhiX3Byb2JlYCBleHBlY3RzLCB0aGVuIHN5emthbGxlciAqbWlnaHQqIGFjdHVhbGx5IHRyaWdnZXIgdGhhdCBwcm9iZSBmdW5jdGlvbi4gSXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBhIHNob3QuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBhdGgxMmtfYWhiX3Byb2JlYCBhbmQgc2VlIHdoYXQgaXQmIzM5O3MgbG9va2luZyBmb3IuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwbGF0Zm9ybSBkZXZpY2UgcmVxdWlyZW1lbnRzIHRvIGNyYWZ0IGEgc3VjY2Vzc2Z1bCBgc3l6X2RldnJlc2AgY2FsbC4gVW5kZXJzdGFuZGluZyB0aGUgcHJvYmUmIzM5O3MgbG9naWMgaXMgdGhlIGNydWNpYWwgZmlyc3Qgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX2FoYl9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM9OTk4PWF0aDEya19haGJfZ2V0X2RldmljZV9mYW1pbHkoY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTEwMTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjEwMTk6c3RhdGljIGludCBhdGgxMmtfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTEwMjAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM9MTE4Nz1pbnQgYXRoMTJrX2FoYl9yZWdpc3Rlcl9kcml2ZXIoY29uc3QgZW51bSBhdGgxMmtfZGV2aWNlX2ZhbWlseSBkZXZpY2VfaWQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xMjA4LVx0YWhiX2RyaXZlci1cdTAwM2Vkcml2ZXIub2ZfbWF0Y2hfdGFibGUgPSBkcml2ZXItXHUwMDNlaWRfdGFibGU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjEyMDk6XHRhaGJfZHJpdmVyLVx1MDAzZXByb2JlICA9IGF0aDEya19haGJfcHJvYmU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTEyMTAtXHRhaGJfZHJpdmVyLVx1MDAzZXJlbW92ZSA9IGF0aDEya19haGJfcmVtb3ZlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc2MAoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiBgYXRoMTJrX2FoYl9wcm9iZWAsIGFzIGlmIGl0IHdlcmUgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYGF0aDEya19haGJfcHJvYmVgKioKCkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiB0aGlzIGBhdGgxMmtfYWhiX3Byb2JlYCBmdW5jdGlvbi4gSSByZWNvZ25pemUgdGhlIG5hbWUgaW1tZWRpYXRlbHkg4oCTIGl0JiMzOTtzIGdvaW5nIHRvIGJlIHRoZSBBSEIgKEFkdmFuY2VkIEhpZ2gtcGVyZm9ybWFuY2UgQnVzKSBwcm9iZSBmdW5jdGlvbiBmb3IgdGhlIGF0aDEyayB3aXJlbGVzcyBkcml2ZXIsIG5vIGRvdWJ0LiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhpcyBpcyB3aGVyZSB0aGUgc3lzdGVtIHRyaWVzIHRvIGRldGVjdCBhbmQgaW5pdGlhbGl6ZSBhbiBhdGgxMmsgZGV2aWNlIGNvbm5lY3RlZCB2aWEgdGhlIEFIQiBpbnRlcmZhY2UsIGxpa2VseSBvbiBhbiBlbWJlZGRlZCBzeXN0ZW0gb3Igc3lzdGVtLW9uLWEtY2hpcC4KCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSB0eXBpY2FsIHByb2JlIHJvdXRpbmUgc3RlcHM6IHJlc291cmNlIGFsbG9jYXRpb24sIGRldmljZSBpZGVudGlmaWNhdGlvbiwgcGVyaGFwcyBzb21lIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uLCBhbmQgZmluYWxseSwgdGhlIHJlZ2lzdHJhdGlvbiBvZiB0aGUgZGV2aWNlIHdpdGggdGhlIGtlcm5lbC4gSSBleHBlY3QgdGhlcmUgd2lsbCBiZSBjaGVja3MgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgaGFyZHdhcmUsIHByb2JhYmx5IHVzaW5nIHJlZ2lzdGVyIHJlYWRzIG92ZXIgdGhlIEFIQi4gVGhlcmUgbWlnaHQgYmUgc29tZSBwb3dlciBtYW5hZ2VtZW50IGNvbnNpZGVyYXRpb25zIGludm9sdmVkIGhlcmUgYXMgd2VsbCwgZW5hYmxpbmcgY2xvY2tzIGFuZCBwb3dlcmluZyB1cCB0aGUgZGV2aWNlLgoKSSYjMzk7bSBhbHNvIGFudGljaXBhdGluZyBzb21lIGVycm9yIGhhbmRsaW5nLiBUaGlzIGNvdWxkIGludm9sdmUgY2hlY2tpbmcgZm9yIGJ1cyBlcnJvcnMsIGRldmljZSB0aW1lb3V0cywgYW5kIHBvdGVudGlhbCBwcm9ibGVtcyBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGVycm9yIGNvZGVzIGFuZCBwb3RlbnRpYWwgcmVjb3ZlcnkgbWVjaGFuaXNtcyBpbXBsZW1lbnRlZCwgd2hpY2ggY291bGQgaW5jbHVkZSByZXRyaWVzIG9yIGV2ZW4gZGV2aWNlIHJlc2V0cy4KCkZpbmFsbHksIEkmIzM5O2xsIGJlIHNlYXJjaGluZyBmb3IgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBhdGgxMmsgZHJpdmVyIHN0YWNrLiBJIGltYWdpbmUgaXQgc2V0cyB1cCB0aGUgbmVjZXNzYXJ5IGRhdGEgc3RydWN0dXJlcywgcG9zc2libHkgY3JlYXRlcyBhIHBsYXRmb3JtIGRldmljZSwgYW5kIGxpbmtzIGl0IHdpdGggdGhlIHJlc3Qgb2YgdGhlIHdpcmVsZXNzIGRyaXZlciBzdWJzeXN0ZW0uIEkmIzM5O20ga2VlbiB0byBzZWUgdGhlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHVzZWQsIHdoZXRoZXIgaXQgdXNlcyBtdXRleGVzIG9yIHNlbWFwaG9yZXMsIHRvIGVuc3VyZSB0aHJlYWQtc2FmZSBvcGVyYXRpb24gZHVyaW5nIGluaXRpYWxpemF0aW9uLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgZGV2aWNlIGlzIGJyb3VnaHQgdXA7IHRpbWluZyBjYW4gYmUgY3JpdGljYWwgaW4gc3VjaCBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwMTk6XHRzdGF0aWMgaW50IGF0aDEya19haGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbjEwMjA6XHR7XG4xMDIxOlx0XHRlbnVtIGF0aDEya19kZXZpY2VfZmFtaWx5IGRldmljZV9pZDtcbjEwMjI6XHRcdHN0cnVjdCBhdGgxMmtfYWhiICphYl9haGI7XG4xMDIzOlx0XHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiO1xuMTAyNDpcdFx0dTMyIGFkZHI7XG4xMDI1Olx0XHRpbnQgcmV0O1xuMTAyNjpcdFxuMTAyNzpcdFx0cmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChcdTAwMjZwZGV2LVx1MDAzZWRldiwgRE1BX0JJVF9NQVNLKDMyKSk7XG4xMDI4Olx0XHRpZiAocmV0KSB7XG4xMDI5Olx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byBzZXQgMzItYml0IGNvaGVyZW50IGRtYVxcblwmIzM0Oyk7XG4xMDMwOlx0XHRcdHJldHVybiByZXQ7XG4xMDMxOlx0XHR9XG4xMDMyOlx0XG4xMDMzOlx0XHRhYiA9IGF0aDEya19jb3JlX2FsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2Yoc3RydWN0IGF0aDEya19haGIpLFxuMTAzNDpcdFx0XHRcdCAgICAgICBBVEgxMktfQlVTX0FIQik7XG4xMDM1Olx0XHRpZiAoIWFiKVxuMTAzNjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjEwMzc6XHRcbjEwMzg6XHRcdGFiX2FoYiA9IGF0aDEya19hYl90b19haGIoYWIpO1xuMTAzOTpcdFx0YWJfYWhiLVx1MDAzZWFiID0gYWI7XG4xMDQwOlx0XHRhYi1cdTAwM2VoaWYub3BzID0gXHUwMDI2YXRoMTJrX2FoYl9oaWZfb3BzO1xuMTA0MTpcdFx0YWItXHUwMDNlcGRldiA9IHBkZXY7XG4xMDQyOlx0XHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBhYik7XG4xMDQzOlx0XG4xMDQ0Olx0XHRkZXZpY2VfaWQgPSBhdGgxMmtfYWhiX2dldF9kZXZpY2VfZmFtaWx5KHBkZXYpO1xuMTA0NTpcdFx0aWYgKGRldmljZV9pZCBcdTAwM2U9IEFUSDEyS19ERVZJQ0VfRkFNSUxZX01BWCkge1xuMTA0NjpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gZ2V0IGRldmljZSBmYW1pbHk6ICVkXFxuXCYjMzQ7LCBkZXZpY2VfaWQpO1xuMTA0NzpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuMTA0ODpcdFx0XHRnb3RvIGVycl9jb3JlX2ZyZWU7XG4xMDQ5Olx0XHR9XG4xMDUwOlx0XG4xMDUxOlx0XHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX0FIQiwgXCYjMzQ7QUhCIGRldmljZSBmYW1pbHkgaWQ6ICVkXFxuXCYjMzQ7LCBkZXZpY2VfaWQpO1xuMTA1MjpcdFxuMTA1MzpcdFx0YWJfYWhiLVx1MDAzZWRldmljZV9mYW1pbHlfb3BzID0gXHUwMDI2YXRoMTJrX2FoYl9mYW1pbHlfZHJpdmVyc1tkZXZpY2VfaWRdLVx1MDAzZW9wcztcbjEwNTQ6XHRcbjEwNTU6XHRcdC8qIENhbGwgZGV2aWNlIHNwZWNpZmljIHByb2JlLiBUaGlzIGlzIHRoZSBjYWxsYmFjayB0aGF0IGNhblxuMTA1NjpcdFx0ICogYmUgdXNlZCB0byBvdmVycmlkZSBhbnkgb3BzIGluIGZ1dHVyZVxuMTA1NzpcdFx0ICogcHJvYmUgaXMgdmFsaWRhdGVkIGZvciBOVUxMIGR1cmluZyByZWdpc3RyYXRpb24uXG4xMDU4Olx0XHQgKi9cbjEwNTk6XHRcdHJldCA9IGFiX2FoYi1cdTAwM2VkZXZpY2VfZmFtaWx5X29wcy1cdTAwM2Vwcm9iZShwZGV2KTtcbjEwNjA6XHRcdGlmIChyZXQpIHtcbjEwNjE6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHByb2JlIGRldmljZTogJWRcXG5cJiMzNDssIHJldCk7XG4xMDYyOlx0XHRcdGdvdG8gZXJyX2NvcmVfZnJlZTtcbjEwNjM6XHRcdH1cbjEwNjQ6XHRcbjEwNjU6XHRcdC8qIFNldCBmaXhlZF9tZW1fcmVnaW9uIHRvIHRydWUgZm9yIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgZml4ZWQgbWVtb3J5XG4xMDY2Olx0XHQgKiByZXNlcnZhdGlvbiBmcm9tIERULiBJZiBtZW1vcnkgaXMgcmVzZXJ2ZWQgZnJvbSBEVCBmb3IgRlcsIGF0aDEyayBkcml2ZXJcbjEwNjc6XHRcdCAqIG5lZWQgbm90IHRvIGFsbG9jYXRlIG1lbW9yeS5cbjEwNjg6XHRcdCAqL1xuMTA2OTpcdFx0aWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3UzMihhYi1cdTAwM2VkZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7bWVtb3J5LXJlZ2lvblwmIzM0OywgXHUwMDI2YWRkcikpXG4xMDcwOlx0XHRcdHNldF9iaXQoQVRIMTJLX0ZMQUdfRklYRURfTUVNX1JFR0lPTiwgXHUwMDI2YWItXHUwMDNlZGV2X2ZsYWdzKTtcbjEwNzE6XHRcbjEwNzI6XHRcdHJldCA9IGF0aDEya19jb3JlX3ByZV9pbml0KGFiKTtcbjEwNzM6XHRcdGlmIChyZXQpXG4xMDc0Olx0XHRcdGdvdG8gZXJyX2NvcmVfZnJlZTtcbjEwNzU6XHRcbjEwNzY6XHRcdHJldCA9IGF0aDEya19haGJfcmVzb3VyY2VfaW5pdChhYik7XG4xMDc3Olx0XHRpZiAocmV0KVxuMTA3ODpcdFx0XHRnb3RvIGVycl9jb3JlX2ZyZWU7XG4xMDc5Olx0XG4xMDgwOlx0XHRyZXQgPSBhdGgxMmtfaGFsX3NybmdfaW5pdChhYik7XG4xMDgxOlx0XHRpZiAocmV0KVxuMTA4MjpcdFx0XHRnb3RvIGVycl9yZXNvdXJjZV9kZWluaXQ7XG4xMDgzOlx0XG4xMDg0Olx0XHRyZXQgPSBhdGgxMmtfY2VfYWxsb2NfcGlwZXMoYWIpO1xuMTA4NTpcdFx0aWYgKHJldCkge1xuMTA4NjpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gYWxsb2NhdGUgY2UgcGlwZXM6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTA4NzpcdFx0XHRnb3RvIGVycl9oYWxfc3JuZ19kZWluaXQ7XG4xMDg4Olx0XHR9XG4xMDg5Olx0XG4xMDkwOlx0XHRhdGgxMmtfYWhiX2luaXRfcW1pX2NlX2NvbmZpZyhhYik7XG4xMDkxOlx0XG4xMDkyOlx0XHRyZXQgPSBhdGgxMmtfYWhiX2NvbmZpZ3VyZV9ycHJvYyhhYik7XG4xMDkzOlx0XHRpZiAocmV0KVxuMTA5NDpcdFx0XHRnb3RvIGVycl9jZV9mcmVlO1xuMTA5NTpcdFxuMTA5NjpcdFx0cmV0ID0gYXRoMTJrX2FoYl9jb25maWdfaXJxKGFiKTtcbjEwOTc6XHRcdGlmIChyZXQpIHtcbjEwOTg6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGNvbmZpZ3VyZSBpcnE6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTA5OTpcdFx0XHRnb3RvIGVycl9ycHJvY19kZWNvbmZpZ3VyZTtcbjExMDA6XHRcdH1cbjExMDE6XHRcbjExMDI6XHRcdC8qIEludm9rZSBhcmNoX2luaXQgaGVyZSBzbyB0aGF0IGFyY2gtc3BlY2lmaWMgaW5pdCBvcGVyYXRpb25zXG4xMTAzOlx0XHQgKiBjYW4gdXRpbGl6ZSBhbHJlYWR5IGluaXRpYWxpemVkIGFiIGZpZWxkcywgc3VjaCBhcyBIQUwgU1JOR3MuXG4xMTA0Olx0XHQgKi9cbjExMDU6XHRcdHJldCA9IGFiX2FoYi1cdTAwM2VkZXZpY2VfZmFtaWx5X29wcy1cdTAwM2VhcmNoX2luaXQoYWIpO1xuMTEwNjpcdFx0aWYgKHJldCkge1xuMTEwNzpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtBSEIgYXJjaF9pbml0IGZhaWxlZCAlZFxcblwmIzM0OywgcmV0KTtcbjExMDg6XHRcdFx0Z290byBlcnJfcnByb2NfZGVjb25maWd1cmU7XG4xMTA5Olx0XHR9XG4xMTEwOlx0XG4xMTExOlx0XHRyZXQgPSBhdGgxMmtfY29yZV9pbml0KGFiKTtcbjExMTI6XHRcdGlmIChyZXQpIHtcbjExMTM6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGluaXQgY29yZTogJWRcXG5cJiMzNDssIHJldCk7XG4xMTE0Olx0XHRcdGdvdG8gZXJyX2RlaW5pdF9hcmNoO1xuMTExNTpcdFx0fVxuMTExNjpcdFxuMTExNzpcdFx0cmV0dXJuIDA7XG4xMTE4Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODcwCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYXRoMTJrIEFIQiBJbml0aWFsaXphdGlvbiBTZXF1ZW5jZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgYGF0aDEya19haGJfcHJvYmVgIGZ1bmN0aW9uIGlzIHRoZSBzdGFydGluZyBwb2ludCwgYW5kIGl0JiMzOTtzIGNhbGxpbmcgYSBzZXJpZXMgb2YgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIGluIHNlcXVlbmNlOiBgYXRoMTJrX2FoYl9yZXNvdXJjZV9pbml0YCwgYGF0aDEya19oYWxfc3JuZ19pbml0YCwgYGF0aDEya19jZV9hbGxvY19waXBlc2AsIGBhdGgxMmtfYWhiX2NvbmZpZ3VyZV9ycHJvY2AsIGBhdGgxMmtfYWhiX2NvbmZpZ19pcnFgLCBgYXJjaF9pbml0YCwgYW5kIGZpbmlzaGluZyB3aXRoIGBhdGgxMmtfY29yZV9pbml0YC4gVGhhdCBzZXF1ZW5jZSBpcyBwcmV0dHkgc3RhbmRhcmQgZm9yIGEgZHJpdmVyIGxpa2UgdGhpcy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBhdGgxMmtfYWhiX3Jlc291cmNlX2luaXRgIGxpa2VseSBoYW5kbGVzIHRoZSBtYXBwaW5nIG9mIHRoZSBJL08gbWVtb3J5IHJlZ2lvbnMuIFRoYXQmIzM5O3MgYSBrZXkgZmlyc3Qgc3RlcC4gQW5kIHRoYXQgbGVhZHMgdG8gYSB0aG91Z2h0IGFib3V0IGZ1enppbmc6IGlmIHN5emthbGxlciBpcyBjcmVhdGluZyB0aGUgcGxhdGZvcm0gZGV2aWNlLCBpdCAqY291bGQqIHByb3ZpZGUgZmFrZWQgcmVzb3VyY2VzLCBsaWtlIG1lbW9yeSByZWdpb25zLiBTb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLCBhbmQgbWlnaHQgYmVjb21lIGltcG9ydGFudC4KCkJ1dCBsb29raW5nIGF0IHRoZSBzZXF1ZW5jZSwgYGF0aDEya19haGJfY29uZmlndXJlX3Jwcm9jYCBzcGVjaWZpY2FsbHkgc3Rvb2Qgb3V0LCBiZWNhdXNlIGl0IGluZGljYXRlcyB0aGF0IHRoaXMgZGV2aWNlIGlzIGNvbmZpZ3VyaW5nIHJlbW90ZXByb2MuIFNpbmNlIHJlbW90ZXByb2MgaXMgdXNlZCBmb3Igb2ZmbG9hZGluZyBwcm9jZXNzaW5nIHRvIGEgc2VwYXJhdGUgcHJvY2Vzc29yLCBpdHMgY29uZmlndXJhdGlvbiBpcyBrZXkuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gaG93IHRoYXQgaXMgZG9uZS4gSSBzaG91bGQgZGVmaW5pdGVseSBjaGVjayBpbnRvIGBhdGgxMmtfYWhiX2NvbmZpZ3VyZV9ycHJvY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya19haGJfY29uZmlndXJlX3Jwcm9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYz04NTE9c3RhdGljIGludCBhdGgxMmtfYWhiX2Jvb3Rfcm9vdF9wZChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtODcyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzo4NzM6c3RhdGljIGludCBhdGgxMmtfYWhiX2NvbmZpZ3VyZV9ycHJvYyhzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy04NzQte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM9MTAxOT1zdGF0aWMgaW50IGF0aDEya19haGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTEwOTEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjEwOTI6XHRyZXQgPSBhdGgxMmtfYWhiX2NvbmZpZ3VyZV9ycHJvYyhhYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTEwOTMtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjcxMQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGF0aDEya19haGJfY29uZmlndXJlX3Jwcm9jYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGRvaW5nIGF0IGEgaGlnaCBsZXZlbCwgYW5kIHRoZW4gSSBjYW4gYnJlYWsgZG93biB0aGUgc3BlY2lmaWNzLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgdGhpcyBsaWtlbHkgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIGNvbmZpZ3VyaW5nIGEgcmVtb3RlIHByb2Nlc3NvciAocnByb2MpIGZvciBhbiBBdGhlcm9zIFdpLUZpIGNoaXAgdXNpbmcgdGhlIEFIQiBidXMuICBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2UgY2xvY2sgY29uZmlndXJhdGlvbiwgbWVtb3J5IG1hcHBpbmcsIGZpcm13YXJlIGxvYWRpbmcgbWF5YmUsIGFuZCBwcm9iYWJseSBzb21lIGludGVycnVwdCBzZXR1cC4gVGhlICYjMzQ7QUhCJiMzNDsgcGFydCBpcyBrZXkg4oCTIGl0IGluZGljYXRlcyBkaXJlY3QgbWVtb3J5IGFjY2VzcyBhbmQgYSBmYXN0ZXIgY29tbXVuaWNhdGlvbiBwYXRod2F5IHRoYW4gc29tZXRoaW5nIGxpa2UgYSBzdGFuZGFyZCBQQ0kgYnVzLCBtZWFuaW5nIHRoaXMgaXMgY29yZS1sZXZlbCBzdHVmZi4gSXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIGluaXRpYWxpemluZyB0aGUgaGFyZHdhcmUgdG8gcmVhZHkgaXQgZm9yIHdpcmVsZXNzIG9wZXJhdGlvbi4gVGhpcyBpcyBwcm9iYWJseSBnb2luZyB0byBiZSBwYXJ0IG9mIGFuIGVhcmx5IGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBMZXQmIzM5O3Mgc3RhcnQgcmVhZGluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODczLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NzM6XHRzdGF0aWMgaW50IGF0aDEya19haGJfY29uZmlndXJlX3Jwcm9jKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4gODc0Olx0e1xuIDg3NTpcdFx0c3RydWN0IGF0aDEya19haGIgKmFiX2FoYiA9IGF0aDEya19hYl90b19haGIoYWIpO1xuIDg3NjpcdFx0aW50IHJldDtcbiA4Nzc6XHRcbiA4Nzg6XHRcdHJldCA9IGF0aDEya19haGJfZ2V0X3Jwcm9jKGFiKTtcbiA4Nzk6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gODgwOlx0XHRcdHJldHVybiByZXQ7XG4gODgxOlx0XG4gODgyOlx0XHRyZXQgPSBhdGgxMmtfYWhiX3JlZ2lzdGVyX3Jwcm9jX25vdGlmaWVyKGFiKTtcbiA4ODM6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiA4ODQ6XHRcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShcdTAwMjZhYi1cdTAwM2VwZGV2LVx1MDAzZWRldiwgcmV0LFxuIDg4NTpcdFx0XHRcdFx0ICAgIFwmIzM0O2ZhaWxlZCB0byByZWdpc3RlciBycHJvYyBub3RpZmllclxcblwmIzM0Oyk7XG4gODg2Olx0XHRcdGdvdG8gZXJyX3B1dF9ycHJvYztcbiA4ODc6XHRcdH1cbiA4ODg6XHRcbiA4ODk6XHRcdGlmIChhYl9haGItXHUwMDNldGd0X3Jwcm9jLVx1MDAzZXN0YXRlICE9IFJQUk9DX1JVTk5JTkcpIHtcbiA4OTA6XHRcdFx0cmV0ID0gYXRoMTJrX2FoYl9ib290X3Jvb3RfcGQoYWIpO1xuIDg5MTpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gODkyOlx0XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGJvb3QgdGhlIHJlbW90ZSBwcm9jZXNzb3IgUTZcXG5cJiMzNDspO1xuIDg5MzpcdFx0XHRcdGdvdG8gZXJyX3VucmVnX25vdGlmaWVyO1xuIDg5NDpcdFx0XHR9XG4gODk1Olx0XHR9XG4gODk2Olx0XG4gODk3Olx0XHRyZXR1cm4gYXRoMTJrX2FoYl9jb25maWdfcnByb2NfaXJxKGFiKTtcbiA4OTg6XHRcbiA4OTk6XHRlcnJfdW5yZWdfbm90aWZpZXI6XG4gOTAwOlx0XHRhdGgxMmtfYWhiX3VucmVnaXN0ZXJfcnByb2Nfbm90aWZpZXIoYWIpO1xuIDkwMTpcdFxuIDkwMjpcdGVycl9wdXRfcnByb2M6XG4gOTAzOlx0XHRycHJvY19wdXQoYWJfYWhiLVx1MDAzZXRndF9ycHJvYyk7XG4gOTA0Olx0XHRyZXR1cm4gcmV0O1xuIDkwNTpcdH1cbiA5MDY6XHRcbiA5MDc6XHRzdGF0aWMgdm9pZCBhdGgxMmtfYWhiX2RlY29uZmlndXJlX3Jwcm9jKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4gOTA4Olx0e1xuIDkwOTpcdFx0c3RydWN0IGF0aDEya19haGIgKmFiX2FoYiA9IGF0aDEya19hYl90b19haGIoYWIpO1xuIDkxMDpcdFxuIDkxMTpcdFx0YXRoMTJrX2FoYl91bnJlZ2lzdGVyX3Jwcm9jX25vdGlmaWVyKGFiKTtcbiA5MTI6XHRcdHJwcm9jX3B1dChhYl9haGItXHUwMDNldGd0X3Jwcm9jKTtcbiA5MTM6XHR9XG4gOTE0Olx0XG4gOTE1Olx0c3RhdGljIGludCBhdGgxMmtfYWhiX3Jlc291cmNlX2luaXQoc3RydWN0IGF0aDEya19iYXNlICphYilcbiA5MTY6XHR7XG4gOTE3Olx0XHRzdHJ1Y3QgYXRoMTJrX2FoYiAqYWJfYWhiID0gYXRoMTJrX2FiX3RvX2FoYihhYik7XG4gOTE4Olx0XHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gYWItXHUwMDNlcGRldjtcbiA5MTk6XHRcdHN0cnVjdCByZXNvdXJjZSAqbWVtX3JlcztcbiA5MjA6XHRcdGludCByZXQ7XG4gOTIxOlx0XG4gOTIyOlx0XHRhYi1cdTAwM2VtZW0gPSBkZXZtX3BsYXRmb3JtX2dldF9hbmRfaW9yZW1hcF9yZXNvdXJjZShwZGV2LCAwLCBcdTAwMjZtZW1fcmVzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4MDEKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiA0MDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYGF0aDEya2AgQ29kZSBQYXRocyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgYXRoMTJrX2FoYl9nZXRfcnByb2NgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUgZ29hbCBpcyB0byBnZXQgYSByZW1vdGVwcm9jIGRldmljZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gc3l6a2FsbGVyIGFjdHVhbGx5IGNyZWF0ZSBhIHJlbW90ZXByb2MgZGV2aWNlIGFuZCBsaW5rIGl0IHRvIHRoZSBwbGF0Zm9ybSBkZXZpY2UsIGluIGEgd2F5IHRoYXQgd291bGQgdHJpY2sgdGhpcyBkcml2ZXIgaW50byB0aGlua2luZyBpdCYjMzk7cyBydW5uaW5nIG9uIHJlYWwgaGFyZHdhcmU/IEkmIzM5O20gaGlnaGx5IHNrZXB0aWNhbC4gVGhlIGRlcGVuZGVuY2llcyBhcmUganVzdCB0b28gbnVtZXJvdXMg4oCTIHJlbW90ZXByb2MsIG1lbW9yeSByZWdpb25zLCBpbnRlcnJ1cHRzLCB0aGUgd2hvbGUgc2hlYmFuZy4gSXQmIzM5O3Mgd2lsZGx5IGltcHJvYmFibGUgdGhhdCBzeXprYWxsZXIgY291bGQgc3VjY2Vzc2Z1bGx5IG1vY2sgKmFsbCogb2YgdGhvc2UgdG8gZXZlbiBnZXQgdG8gYGF0aDEya19jb3JlX2luaXRgLCBsZXQgYWxvbmUgdGhlIGZ1cnRoZXIgc3RhZ2Ugb2YgYGF0aDEya19jb3JlX3FtaV9maXJtd2FyZV9yZWFkeWAgd2hpY2ggcmVhbGlzdGljYWxseSBkZW1hbmRzIGFjdHVhbCBmaXJtd2FyZSBpbnRlcmFjdGlvbiBvciBhIHNvcGhpc3RpY2F0ZWQgUU1JIHNlcnZlciBtb2NrLgoKSGFuZyBvbi4uLiB3aGF0IGFib3V0IGBtYWM4MDIxMV9od3NpbWA/IFRoYXQgZW11bGF0ZXMgV2ktRmksIGJ1dCBpdCYjMzk7cyBub3QgYWN0dWFsbHkgYW4gYGF0aDEya2AgZHJpdmVyLiBTbyB0aGF0JiMzOTtzIGEgZGVhZCBlbmQuCgpJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzICphbnkqIHdheSB0byByZWFjaCBgYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlc2Agd2l0aG91dCByZWFsIGhhcmR3YXJlLiBMZXQmIzM5O3MgdHJhY2UgYmFjayBmcm9tIHRoYXQgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGF0aDEya19tYWNfc2V0dXBfcmVnaXN0ZXJgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgYXRoMTJrX21hY19od19yZWdpc3RlcmAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBhdGgxMmtfbWFjX3JlZ2lzdGVyYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYGF0aDEya19jb3JlX2h3X2dyb3VwX3N0YXJ0YCwgd2hpY2ggaXMgaW4gdHVybiBjYWxsZWQgZnJvbSBgYXRoMTJrX2NvcmVfcW1pX2Zpcm13YXJlX3JlYWR5YC4gVGhhdCYjMzk7cyB3aGVyZSB3ZSBnZXQgdG8gdGhlIGZpcm13YXJlIHJlYWRpbmVzcywgd2hpY2ggb2YgY291cnNlLCB3ZSBkb24mIzM5O3QgaGF2ZS4KCkJhc2ljYWxseSwgd2l0aG91dCB0aGUgZmlybXdhcmUgYmVpbmcgcmVhZHksIHRoaXMgd2hvbGUgc2VxdWVuY2UgaXMgdW5yZWFjaGFibGUuIEFuZCBjb25zaWRlcmluZyBgYXRoMTJrYCBpcyBhIGhhcmR3YXJlIGRyaXZlciBzcGVjaWZpY2FsbHkgZm9yIFF1YWxjb21tIFdpLUZpIDcgZGV2aWNlcywgYW5kIHN5emthbGxlciAqZGVmaW5pdGVseSogZG9lc24mIzM5O3QgZW11bGF0ZSB0aGF0IGhhcmR3YXJlLCBhbmQgUUVNVSBwcm9iYWJseSBkb2VzbiYjMzk7dCBieSBkZWZhdWx0IGVpdGhlciwgSSYjMzk7bSBwcmV0dHkgY29uZmlkZW50IHRoaXMgY29kZSBpc24mIzM5O3QgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuCgpOb3csIGEgZ2xpbW1lciBvZiBob3BlLi4uIENvdWxkIHN5emthbGxlciBwb3RlbnRpYWxseSBpbmplY3QgUU1JIG1lc3NhZ2VzIGZyb20gdXNlcnNwYWNlIHRvIHNvbWVob3cgdHJpZ2dlciBgYXRoMTJrX3FtaV9kcml2ZXJfZXZlbnRfd29ya2A/IExldCYjMzk7cyBjaGVjayBgYXRoMTJrX3FtaV9kcml2ZXJfZXZlbnRfd29ya2AuIFRoYXQmIzM5O3MgdGhlIGtleSBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM5NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM5NjU6XHRzdGF0aWMgdm9pZCBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbjM5NjY6XHR7XG4zOTY3Olx0XHRzdHJ1Y3QgYXRoMTJrX3FtaSAqcW1pID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdGgxMmtfcW1pLFxuMzk2ODpcdFx0XHRcdFx0XHQgICAgICBldmVudF93b3JrKTtcbjM5Njk6XHRcdHN0cnVjdCBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudCAqZXZlbnQ7XG4zOTcwOlx0XHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiID0gcW1pLVx1MDAzZWFiO1xuMzk3MTpcdFx0aW50IHJldDtcbjM5NzI6XHRcbjM5NzM6XHRcdHNwaW5fbG9jayhcdTAwMjZxbWktXHUwMDNlZXZlbnRfbG9jayk7XG4zOTc0Olx0XHR3aGlsZSAoIWxpc3RfZW1wdHkoXHUwMDI2cW1pLVx1MDAzZWV2ZW50X2xpc3QpKSB7XG4zOTc1Olx0XHRcdGV2ZW50ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZxbWktXHUwMDNlZXZlbnRfbGlzdCxcbjM5NzY6XHRcdFx0XHRcdFx0IHN0cnVjdCBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudCwgbGlzdCk7XG4zOTc3Olx0XHRcdGxpc3RfZGVsKFx1MDAyNmV2ZW50LVx1MDAzZWxpc3QpO1xuMzk3ODpcdFx0XHRzcGluX3VubG9jayhcdTAwMjZxbWktXHUwMDNlZXZlbnRfbG9jayk7XG4zOTc5Olx0XG4zOTgwOlx0XHRcdGlmICh0ZXN0X2JpdChBVEgxMktfRkxBR19VTlJFR0lTVEVSSU5HLCBcdTAwMjZhYi1cdTAwM2VkZXZfZmxhZ3MpKVxuMzk4MTpcdFx0XHRcdGdvdG8gc2tpcDtcbjM5ODI6XHRcbjM5ODM6XHRcdFx0c3dpdGNoIChldmVudC1cdTAwM2V0eXBlKSB7XG4zOTg0Olx0XHRcdGNhc2UgQVRIMTJLX1FNSV9FVkVOVF9TRVJWRVJfQVJSSVZFOlxuMzk4NTpcdFx0XHRcdHJldCA9IGF0aDEya19xbWlfZXZlbnRfc2VydmVyX2Fycml2ZShxbWkpO1xuMzk4NjpcdFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4zOTg3Olx0XHRcdFx0XHRzZXRfYml0KEFUSDEyS19GTEFHX1FNSV9GQUlMLCBcdTAwMjZhYi1cdTAwM2VkZXZfZmxhZ3MpO1xuMzk4ODpcdFx0XHRcdGJyZWFrO1xuMzk4OTpcdFx0XHRjYXNlIEFUSDEyS19RTUlfRVZFTlRfU0VSVkVSX0VYSVQ6XG4zOTkwOlx0XHRcdFx0c2V0X2JpdChBVEgxMktfRkxBR19DUkFTSF9GTFVTSCwgXHUwMDI2YWItXHUwMDNlZGV2X2ZsYWdzKTtcbjM5OTE6XHRcdFx0XHRicmVhaztcbjM5OTI6XHRcdFx0Y2FzZSBBVEgxMktfUU1JX0VWRU5UX1JFUVVFU1RfTUVNOlxuMzk5MzpcdFx0XHRcdHJldCA9IGF0aDEya19xbWlfZXZlbnRfbWVtX3JlcXVlc3QocW1pKTtcbjM5OTQ6XHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMzk5NTpcdFx0XHRcdFx0c2V0X2JpdChBVEgxMktfRkxBR19RTUlfRkFJTCwgXHUwMDI2YWItXHUwMDNlZGV2X2ZsYWdzKTtcbjM5OTY6XHRcdFx0XHRicmVhaztcbjM5OTc6XHRcdFx0Y2FzZSBBVEgxMktfUU1JX0VWRU5UX0ZXX01FTV9SRUFEWTpcbjM5OTg6XHRcdFx0XHRyZXQgPSBhdGgxMmtfcW1pX2V2ZW50X2xvYWRfYmRmKHFtaSk7XG4zOTk5Olx0XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjQwMDA6XHRcdFx0XHRcdHNldF9iaXQoQVRIMTJLX0ZMQUdfUU1JX0ZBSUwsIFx1MDAyNmFiLVx1MDAzZWRldl9mbGFncyk7XG40MDAxOlx0XHRcdFx0YnJlYWs7XG40MDAyOlx0XHRcdGNhc2UgQVRIMTJLX1FNSV9FVkVOVF9GV19SRUFEWTpcbjQwMDM6XHRcdFx0XHRjbGVhcl9iaXQoQVRIMTJLX0ZMQUdfUU1JX0ZBSUwsIFx1MDAyNmFiLVx1MDAzZWRldl9mbGFncyk7XG40MDA0Olx0XHRcdFx0aWYgKHRlc3RfYml0KEFUSDEyS19GTEFHX1FNSV9GV19SRUFEWV9DT01QTEVURSwgXHUwMDI2YWItXHUwMDNlZGV2X2ZsYWdzKSkge1xuNDAwNTpcdFx0XHRcdFx0aWYgKGFiLVx1MDAzZWlzX3Jlc2V0KVxuNDAwNjpcdFx0XHRcdFx0XHRhdGgxMmtfaGFsX2R1bXBfc3JuZ19zdGF0cyhhYik7XG40MDA3Olx0XG40MDA4Olx0XHRcdFx0XHRzZXRfYml0KEFUSDEyS19GTEFHX1JFQ09WRVJZLCBcdTAwMjZhYi1cdTAwM2VkZXZfZmxhZ3MpO1xuNDAwOTpcdFx0XHRcdFx0cXVldWVfd29yayhhYi1cdTAwM2V3b3JrcXVldWUsIFx1MDAyNmFiLVx1MDAzZXJlc3RhcnRfd29yayk7XG40MDEwOlx0XHRcdFx0XHRicmVhaztcbjQwMTE6XHRcdFx0XHR9XG40MDEyOlx0XG40MDEzOlx0XHRcdFx0Y2xlYXJfYml0KEFUSDEyS19GTEFHX0NSQVNIX0ZMVVNILFxuNDAxNDpcdFx0XHRcdFx0ICBcdTAwMjZhYi1cdTAwM2VkZXZfZmxhZ3MpO1xuNDAxNTpcdFx0XHRcdHJldCA9IGF0aDEya19jb3JlX3FtaV9maXJtd2FyZV9yZWFkeShhYik7XG40MDE2Olx0XHRcdFx0aWYgKCFyZXQpXG40MDE3Olx0XHRcdFx0XHRzZXRfYml0KEFUSDEyS19GTEFHX1FNSV9GV19SRUFEWV9DT01QTEVURSxcbjQwMTg6XHRcdFx0XHRcdFx0XHUwMDI2YWItXHUwMDNlZGV2X2ZsYWdzKTtcbjQwMTk6XHRcbjQwMjA6XHRcdFx0XHRicmVhaztcbjQwMjE6XHRcdFx0Y2FzZSBBVEgxMktfUU1JX0VWRU5UX0hPU1RfQ0FQOlxuNDAyMjpcdFx0XHRcdHJldCA9IGF0aDEya19xbWlfZXZlbnRfaG9zdF9jYXAocW1pKTtcbjQwMjM6XHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuNDAyNDpcdFx0XHRcdFx0c2V0X2JpdChBVEgxMktfRkxBR19RTUlfRkFJTCwgXHUwMDI2YWItXHUwMDNlZGV2X2ZsYWdzKTtcbjQwMjU6XHRcdFx0XHRicmVhaztcbjQwMjY6XHRcdFx0ZGVmYXVsdDpcbjQwMjc6XHRcdFx0XHRhdGgxMmtfd2FybihhYiwgXCYjMzQ7aW52YWxpZCBldmVudCB0eXBlOiAlZFwmIzM0OywgZXZlbnQtXHUwMDNldHlwZSk7XG40MDI4Olx0XHRcdFx0YnJlYWs7XG40MDI5Olx0XHRcdH1cbjQwMzA6XHRcbjQwMzE6XHRza2lwOlxuNDAzMjpcdFx0XHRrZnJlZShldmVudCk7XG40MDMzOlx0XHRcdHNwaW5fbG9jayhcdTAwMjZxbWktXHUwMDNlZXZlbnRfbG9jayk7XG40MDM0Olx0XHR9XG40MDM1Olx0XHRzcGluX3VubG9jayhcdTAwMjZxbWktXHUwMDNlZXZlbnRfbG9jayk7XG40MDM2Olx0fVxuNDAzNzpcdFxuNDAzODpcdGludCBhdGgxMmtfcW1pX2luaXRfc2VydmljZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuNDAzOTpcdHtcbjQwNDA6XHRcdGludCByZXQ7XG40MDQxOlx0XG40MDQyOlx0XHRtZW1zZXQoXHUwMDI2YWItXHUwMDNlcW1pLnRhcmdldCwgMCwgc2l6ZW9mKHN0cnVjdCB0YXJnZXRfaW5mbykpO1xuNDA0MzpcdFx0bWVtc2V0KFx1MDAyNmFiLVx1MDAzZXFtaS50YXJnZXRfbWVtLCAwLCBzaXplb2Yoc3RydWN0IHRhcmdldF9tZW1fY2h1bmspKTtcbjQwNDQ6XHRcdGFiLVx1MDAzZXFtaS5hYiA9IGFiO1xuNDA0NTpcdFxuNDA0NjpcdFx0YWItXHUwMDNlcW1pLnRhcmdldF9tZW1fbW9kZSA9IGFiLVx1MDAzZXRhcmdldF9tZW1fbW9kZTtcbjQwNDc6XHRcdHJldCA9IHFtaV9oYW5kbGVfaW5pdChcdTAwMjZhYi1cdTAwM2VxbWkuaGFuZGxlLCBBVEgxMktfUU1JX1JFU1BfTEVOX01BWCxcbjQwNDg6XHRcdFx0XHQgICAgICBcdTAwMjZhdGgxMmtfcW1pX29wcywgYXRoMTJrX3FtaV9tc2dfaGFuZGxlcnMpO1xuNDA0OTpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuNDA1MDpcdFx0XHRhdGgxMmtfd2FybihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGluaXRpYWxpemUgcW1pIGhhbmRsZVxcblwmIzM0Oyk7XG40MDUxOlx0XHRcdHJldHVybiByZXQ7XG40MDUyOlx0XHR9XG40MDUzOlx0XG40MDU0Olx0XHRhYi1cdTAwM2VxbWkuZXZlbnRfd3EgPSBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZShcJiMzNDthdGgxMmtfcW1pX2RyaXZlcl9ldmVudFwmIzM0OywgMCk7XG40MDU1Olx0XHRpZiAoIWFiLVx1MDAzZXFtaS5ldmVudF93cSkge1xuNDA1NjpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gYWxsb2NhdGUgd29ya3F1ZXVlXFxuXCYjMzQ7KTtcbjQwNTc6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG40MDU4Olx0XHR9XG40MDU5Olx0XG40MDYwOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZhYi1cdTAwM2VxbWkuZXZlbnRfbGlzdCk7XG40MDYxOlx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZhYi1cdTAwM2VxbWkuZXZlbnRfbG9jayk7XG40MDYyOlx0XHRJTklUX1dPUksoXHUwMDI2YWItXHUwMDNlcW1pLmV2ZW50X3dvcmssIGF0aDEya19xbWlfZHJpdmVyX2V2ZW50X3dvcmspO1xuNDA2MzpcdFxuNDA2NDpcdFx0cmV0ID0gcW1pX2FkZF9sb29rdXAoXHUwMDI2YWItXHUwMDNlcW1pLmhhbmRsZSwgUU1JX1NFUlZJQ0VfSURfV0xGVyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2MTQKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdW5kZXJzdGFuZGluZywgcmVuZGVyZWQgYXMgdGhvdWdoIGl0IHdlcmUgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRXZlbnQgSGFuZGxpbmcgaW4gdGhlIGF0aDEyayBRTUkgRnJhbWV3b3JrKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBgYXRoMTJrYCBRTUkgY29kZS4gSSYjMzk7dmUgdHJhY2tlZCBkb3duIHRoZSBgYXRoMTJrX3FtaV9tc2dfZndfcmVhZHlfY2JgIGZ1bmN0aW9uLiBNeSBtYWluIGZvY3VzIGlzIG9uIGhvdyBldmVudHMgYXJlIGhhbmRsZWQuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdGhhdCB0aGUgYEFUSDEyS19RTUlfRVZFTlRfRldfUkVBRFlgIGV2ZW50LCB3aGljaCwganVkZ2luZyBmcm9tIHRoZSBuYW1lLCBpbmRpY2F0ZXMgdGhlIGZpcm13YXJlIGlzIG5vdyByZWFkeSwgaXMgYmVpbmcgYWRkZWQgdG8gYSBsaXN0IG9yIHF1ZXVlIHdpdGhpbiB0aGlzIGNhbGxiYWNrLiBUaGlzIG11c3QgYmUgdGhlIG1lY2hhbmlzbSB0aGUgZHJpdmVyIHVzZXMgdG8gc2lnbmFsIGFuZCBtYW5hZ2UgdGhlIHN0YXRlIHRyYW5zaXRpb25zIHJlbGF0ZWQgdG8gdGhlIGZpcm13YXJlIGxvYWRpbmcgcHJvY2VzcyBhZnRlciBhIGBRTUlgIG1lc3NhZ2UgaXMgcmVjZWl2ZWQuIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgaW5zaWdodCBpbnRvIGhvdyB0aGUgZXZlbnQgaXMgZnVydGhlciBwcm9jZXNzZWQgYW5kIHV0aWxpemVkIGZvciB0aGUgb3ZlcmFsbCBjb250cm9sIGZsb3cgb2YgdGhlIGRyaXZlci4gSSBuZWVkIHRvIGxvb2sgaW50byBob3cgdGhpcyBsaXN0IGlzIGNvbnN1bWVkIG5leHQ7IGxpa2VseSB0aGVyZSYjMzk7cyBhIHByb2Nlc3NpbmcgbG9vcCBvciBhbm90aGVyIGNhbGxiYWNrIGZ1bmN0aW9uIHdhaXRpbmcgZm9yIGV2ZW50cyBvbiB0aGlzIGxpc3QgdG8gaGFuZGxlIGZ1cnRoZXIgaW5pdGlhbGl6YXRpb24gc3RlcHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya19xbWlfbXNnX2Z3X3JlYWR5X2NiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYz0zODU5PXN0YXRpYyB2b2lkIGF0aDEya19xbWlfbXNnX21lbV9yZWFkeV9jYihzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pX2hkbCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTM4NzAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjM4NzE6c3RhdGljIHZvaWQgYXRoMTJrX3FtaV9tc2dfZndfcmVhZHlfY2Ioc3RydWN0IHFtaV9oYW5kbGUgKnFtaV9oZGwsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTM4NzItXHRcdFx0XHQgICAgICAgc3RydWN0IHNvY2thZGRyX3FydHIgKnNxLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM9Mzg4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHFtaV9tc2dfaGFuZGxlciBhdGgxMmtfcW1pX21zZ19oYW5kbGVyc1tdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtMzkwMi1cdFx0LmRlY29kZWRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcW1pX3dsYW5md19md19yZWFkeV9pbmRfbXNnX3YwMSksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjM5MDM6XHRcdC5mbiA9IGF0aDEya19xbWlfbXNnX2Z3X3JlYWR5X2NiLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy0zOTA0LVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyODIKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAzODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBhdGgxMmsgUU1JIEZpcm13YXJlIFJlYWR5IENhbGxiYWNrKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgYXRoMTJrX3FtaV9tc2dfZndfcmVhZHlfY2JgLiBJdCYjMzk7cyB0cmlnZ2VyZWQgYnkgcmVjZWl2aW5nIHRoZSBgUU1JX1dMRldfRldfUkVBRFlfSU5EX1YwMWAgbWVzc2FnZSwgd2hpY2ggbWFrZXMgc2Vuc2UuIEJ1dCB0aGUga2V5IGlzIHRoYXQgdGhpcyBtZXNzYWdlIGlzIG9ubHkgcmVjZWl2ZWQgd2hlbiB0aGUgUVJUUiBzb2NrZXQgaXMgYWN0dWFsbHkgY29ubmVjdGVkIHRvIHRoZSBmaXJtd2FyZS4gVGhlIHNvY2tldCBjcmVhdGlvbiBpdHNlbGYgaGFwcGVucyBpbiBgcW1pX2hhbmRsZV9pbml0YC4KCk5vdywgdGhlIG9idmlvdXMgcXVlc3Rpb24gaXM6IGNhbiBzeXprYWxsZXIgYmUgdXNlZCB0byB0cmlnZ2VyIHRoaXMgY2FsbGJhY2s/IEl0IGNhbiBjcmVhdGUgUVJUUiBzb2NrZXRzIGFuZCBzZW5kIG1lc3NhZ2VzLCBzbyBpbiB0aGVvcnksIGlmIHN5emthbGxlciBjcmVhdGVzIGEgc29ja2V0LCB0aGVuIHNlbmRzIHRoZSBgUU1JX1dMRldfRldfUkVBRFlfSU5EX1YwMWAgbWVzc2FnZSB0byB0aGUgYXRoMTJrIGRyaXZlciYjMzk7cyBub2RlIElELCB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IHdvcmsuIFRoZSBpc3N1ZSBub3cgaXMgaG93IHRvIGtub3cgdGhpcyBub2RlIElELiBUaGUgYXRoMTJrIGRyaXZlciwgYmVpbmcgYSBRTUkgY2xpZW50LCB3aWxsIGhhdmUgYSBsb2NhbCBub2RlIElEIGFzc2lnbmVkIHRvIGl0IGJ5IHRoZSBRUlRSIGNvcmUsIGJ1dCBob3cgZG8gSSBnZXQgaXQ/CgpTaW5jZSBzeXprYWxsZXIgY2FuIHNlbmQgbWVzc2FnZXMgdG8gYW55IG5vZGUgSUQsIHRoYXQgc2VlbXMgbGlrZSBhIG5vbi1pc3N1ZS4gVGhlIGxhcmdlciBjb25jZXJuIGlzIHRoYXQgYGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlYCBtdXN0IGhhdmUgYmVlbiBjYWxsZWQgKmJlZm9yZSogdGhlIGNhbGxiYWNrIHdpbGwgZXZlciBiZSB0cmlnZ2VyZWQuIFRoYXQgZnVuY3Rpb24sIGBhdGgxMmtfcW1pX2luaXRfc2VydmljZWAgaXMgY2FsbGVkIGZyb20gYGF0aDEya19jb3JlX3NvY19jcmVhdGVgLCB3aGljaCBjb21lcyBmcm9tIGBhdGgxMmtfY29yZV9pbml0YCwgd2hpY2ggZmluYWxseSBvcmlnaW5hdGVzIGZyb20gZWl0aGVyIGBhdGgxMmtfYWhiX3Byb2JlYCBvciBgYXRoMTJrX3BjaV9wcm9iZWAuCgpTbyB3ZeKAmXJlIGJhY2sgdG8gdGhlIGRyaXZlciBwcm9iZSBmdW5jdGlvbnMsIGBhdGgxMmtfYWhiX3Byb2JlYCBhbmQgYGF0aDEya19wY2lfcHJvYmVgLiBDYW4gc3l6a2FsbGVyIGV4ZWN1dGUgYGF0aDEya19haGJfcHJvYmVgIHN1Y2Nlc3NmdWxseT8gSSBuZWVkIHRvIGZvY3VzIHRoZXJlLiBUaW1lIHRvIHJlLWV4YW1pbmUgYGF0aDEya19haGJfcHJvYmVgIHRvIHNlZSB3aGF0IG5lZWRzIHRvIGJlIGluIHBsYWNlLiBJIHJlbWVtYmVyIGl0IGNhbGxzIGBhdGgxMmtfYWhiX2dldF9ycHJvY2AuIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhpcyBjYWxsLCBhcyBpdCBpcyBvbmUgb2YgdGhlIG1vcmUgaW52b2x2ZWQgY2FsbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya19haGJfZ2V0X3Jwcm9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYz04MTM9c3RhdGljIHZvaWQgYXRoMTJrX2FoYl91bnJlZ2lzdGVyX3Jwcm9jX25vdGlmaWVyKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy04MjYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjgyNzpzdGF0aWMgaW50IGF0aDEya19haGJfZ2V0X3Jwcm9jKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTgyOC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYz04NzM9c3RhdGljIGludCBhdGgxMmtfYWhiX2NvbmZpZ3VyZV9ycHJvYyhzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtODc3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzo4Nzg6XHRyZXQgPSBhdGgxMmtfYWhiX2dldF9ycHJvYyhhYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTg3OS1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDk1CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGBhdGgxMmtfYWhiX2dldF9ycHJvY2A6CgoqKkluaXRpYWwgQXNzZXNzbWVudDogTmF2aWdhdGluZyB0aGUgUlBST0MgQWNxdWlzaXRpb24qKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIGBhdGgxMmtfYWhiX2dldF9ycHJvY2AuIEJhc2VkIG9uIHRoZSBuYW1lLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhpcyBmdW5jdGlvbiBpcyBpbnZvbHZlZCBpbiBhY3F1aXJpbmcgYSByZW1vdGUgcHJvY2Vzc29yLCBwcm9iYWJseSBvbiBhbiBBSEIgYnVzLCByZWxhdGVkIHRvIHRoZSBhdGgxMmsgd2lyZWxlc3MgZHJpdmVyLiBJJiMzOTttIGdvaW5nIHRvIGFzc3VtZSB0aGlzIGlzIGEgY3JpdGljYWwgZnVuY3Rpb24gZm9yIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIG9yIGNvbW11bmljYXRpb24sIGxpa2VseSBzZXR0aW5nIHVwIHRoZSBuZWNlc3NhcnkgaGFyZHdhcmUgcmVzb3VyY2VzLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgdGhhdCBBSEIgaW1wbGllcyBhIHBvdGVudGlhbGx5IHRpZ2h0ZXIgaW50ZWdyYXRpb24gd2l0aCB0aGUgaGFyZHdhcmUsIGEgbG93ZXItbGV2ZWwgaW50ZXJhY3Rpb24gdGhhbiBzb21ldGhpbmcgUENJLWJhc2VkLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIGRlYWxzIHdpdGggbWVtb3J5IG1hcHBpbmcsIGNsb2NrIGVuYWJsaW5nLCBpbnRlcnJ1cHQgcmVnaXN0cmF0aW9uLCBhbmQgcGVyaGFwcyBzb21lIGRldmljZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGRldGFpbHMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHJlZmVyZW5jZXMgdG8gaGFyZHdhcmUgcmVnaXN0ZXJzIG9yIGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvbmZpcm0gbXkgaW5pdGlhbCB0aG91Z2h0cy4gSSYjMzk7bSBhbHNvIGFudGljaXBhdGluZyB0aGF0IGVycm9yIGhhbmRsaW5nIHdpbGwgYmUgcHJlc2VudCwgYXMgZmFpbGluZyB0byBhY3F1aXJlIHRoZSBSUFJPQyBjb3VsZCBiZSBhIGZ1bmRhbWVudGFsIGlzc3VlIGZvciB0aGUgd2hvbGUgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGhhbmRsZSB0aGF0LiBNeSBpbnN0aW5jdCBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEga2VybmVsIGRyaXZlciBmdW5jdGlvbiwgYW5kIHRodXMgdmVyeSBjYXJlZnVsIGFib3V0IGxvY2tpbmcsIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgZ2VuZXJhbCByb2J1c3RuZXNzLiBJIHdpbGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IGhvdyB0aGV5IGRlYWwgd2l0aCBjb25jdXJyZW5jeSwgb3IgbGFjayB0aGVyZW9mLiBBbmQgZmluYWxseSwgSSB3b3VsZCBleHBlY3QgdGhhdCB0aGlzIGlzIHRoZSBlbnRyeSBwb2ludCwgb3IgYSBjb3JlIGZ1bmN0aW9uLCBmb3IgdGhlIGRldmljZSB0byBldmVuIGZ1bmN0aW9uLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgyNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODI3Olx0c3RhdGljIGludCBhdGgxMmtfYWhiX2dldF9ycHJvYyhzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuIDgyODpcdHtcbiA4Mjk6XHRcdHN0cnVjdCBhdGgxMmtfYWhiICphYl9haGIgPSBhdGgxMmtfYWJfdG9fYWhiKGFiKTtcbiA4MzA6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGFiLVx1MDAzZWRldjtcbiA4MzE6XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XG4gODMyOlx0XHRzdHJ1Y3QgcnByb2MgKnBycHJvYztcbiA4MzM6XHRcbiA4MzQ6XHRcdG5wID0gb2ZfcGFyc2VfcGhhbmRsZShkZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7cWNvbSxycHJvY1wmIzM0OywgMCk7XG4gODM1Olx0XHRpZiAoIW5wKSB7XG4gODM2Olx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBnZXQgcTZfcnByb2MgaGFuZGxlXFxuXCYjMzQ7KTtcbiA4Mzc6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gODM4Olx0XHR9XG4gODM5Olx0XG4gODQwOlx0XHRwcnByb2MgPSBycHJvY19nZXRfYnlfcGhhbmRsZShucC1cdTAwM2VwaGFuZGxlKTtcbiA4NDE6XHRcdG9mX25vZGVfcHV0KG5wKTtcbiA4NDI6XHRcdGlmICghcHJwcm9jKVxuIDg0MzpcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcdTAwMjZhYi1cdTAwM2VwZGV2LVx1MDAzZWRldiwgLUVQUk9CRV9ERUZFUixcbiA4NDQ6XHRcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIGdldCBycHJvY1xcblwmIzM0Oyk7XG4gODQ1Olx0XG4gODQ2Olx0XHRhYl9haGItXHUwMDNldGd0X3Jwcm9jID0gcHJwcm9jO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzIzOQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGF0aDEyayBEcml2ZXIgUHJvYmUgU2VxdWVuY2UqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgYXRoMTJrYCBkcml2ZXIgcHJvYmUgaXNzdWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIGFsbCBhYm91dCB0aGUgZGV2aWNlIHRyZWUgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyBoYW5kbGVkLiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoaXMgZGVwZW5kZW5jZSBvbiBhIGRldmljZSB0cmVlIG5vZGUgd2l0aCBhIGBxY29tLHJwcm9jYCBwaGFuZGxlLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGEgcmVkIGZsYWcuIFN5emthbGxlciwgd2hpbGUgYSBwb3dlcmZ1bCBmdXp6aW5nIHRvb2wsIGlzbiYjMzk7dCBkZXNpZ25lZCB0byBpbmplY3QgdGhlc2UgY29tcGxleCBkZXZpY2UgdHJlZSBzdHJ1Y3R1cmVzIOKAkyBpdCYjMzk7cyBnb2luZyB0byBzdHJ1Z2dsZSBzZXR0aW5nIHVwIHRoYXQgY3JpdGljYWwgYHFjb20scnByb2NgIGNvbm5lY3Rpb24uCgpUaGVyZWZvcmUsIEkmIzM5O20gcHJldHR5IHN1cmUgdGhhdCB3aGVuIGBhdGgxMmtfYWhiX2dldF9ycHJvY2AgaXMgY2FsbGVkLCBpdCYjMzk7cyBnb2luZyB0byBjaG9rZSB3aXRoIGFuIGAtRU5PRU5UYCBlcnJvci4gRWl0aGVyIGBkZXYtJmd0O29mX25vZGVgIHdpbGwgYmUgTlVMTCwgb3IsIGV2ZW4gaWYgaXQmIzM5O3MgdGhlcmUsIHRoYXQgcmVxdWlyZWQgYHFjb20scnByb2NgIHByb3BlcnR5IGlzIHNpbXBseSBub3QgZ29pbmcgdG8gZXhpc3QgaW4gdGhlICYjMzQ7ZmFrZSYjMzQ7IGRldmljZSB0cmVlIFN5emthbGxlciYjMzk7cyBnZW5lcmF0aW5nLgoKQW5kIGlmICp0aGF0KiBmYWlscywgYGF0aDEya19haGJfY29uZmlndXJlX3Jwcm9jYCBpcyBndWFyYW50ZWVkIHRvIGZhaWwsIGFuZCB0aGF0LCBpbiB0dXJuLCBraWxscyB0aGUgYGF0aDEya19haGJfcHJvYmVgIGNhbGwsIHByb2JhYmx5IGJlZm9yZSBpdCBldmVuIGdldHMgdG8gYGF0aDEya19jb3JlX2luaXRgLiBUaGF0IHNlcXVlbmNlIGlzIGEgZGVhZCBlbmQg4oCTIHRoZSBjb3JlIGluaXRpYWxpemF0aW9uIG5ldmVyIGV2ZW4gZXhlY3V0ZXMuIAoKQnV0LCB3YWl0Li4uIHRoZXJlJiMzOTtzIGFsc28gdGhlIFBDSSBwcm9iZSBwYXRoIHRvIGNvbnNpZGVyLiBJcyBgYXRoMTJrX3BjaV9wcm9iZWAgYWxzbyBmYWlsaW5nPyBJIG5lZWQgdG8gY2hlY2sgaWYgaXQgZGVwZW5kcyBvbiB0aGUgc2FtZSBkZXZpY2UgdHJlZSBub2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgYWhiIHBhdGggaXMgbW9yZSBwcm9uZSB0byBmYWlsdXJlLCBkdWUgdG8gdGhlIHJlbGlhbmNlIG9uIHRoYXQgcnByb2MsIGFuZCBpZiB0aGlzIGlzIGEgZ2VuZXJhbCBpc3N1ZSBvciBzcGVjaWZpYyB0byB0aGUgYWhiIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya19wY2lfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE1MDc9YXRoMTJrX2dldF9kZXZpY2VfZmFtaWx5KGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTUyNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTUyODpzdGF0aWMgaW50IGF0aDEya19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1MjktXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTgwOD1pbnQgYXRoMTJrX3BjaV9yZWdpc3Rlcl9kcml2ZXIoY29uc3QgZW51bSBhdGgxMmtfZGV2aWNlX2ZhbWlseSBkZXZpY2VfaWQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODI5LVx0cGNpX2RyaXZlci1cdTAwM2VpZF90YWJsZSA9IGRyaXZlci1cdTAwM2VpZF90YWJsZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTgzMDpcdHBjaV9kcml2ZXItXHUwMDNlcHJvYmUgPSBhdGgxMmtfcGNpX3Byb2JlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODMxLVx0cGNpX2RyaXZlci1cdTAwM2VyZW1vdmUgPSBhdGgxMmtfcGNpX3JlbW92ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyMTQKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSB3ZSBnby4uLgoKKipEaXZpbmcgaW50byBgYXRoMTJrX3BjaV9wcm9iZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHB1bGwgdXAgdGhhdCBgYXRoMTJrX3BjaV9wcm9iZWAgZnVuY3Rpb24uIEkmIzM5O3ZlIGJlZW4gbWVhbmluZyB0byByZXZpc2l0IHRoaXM7IHRoZXJlIGFyZSBhIGZldyBhc3BlY3RzIG9mIHRoZSBQQ0kgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgSSB3YW50IHRvIGNsYXJpZnkgaW4gbXkgaGVhZC4gSSBrbm93IHRoZSBiYXNpY3MsIHRoZSBlbnRyeSBwb2ludCwgdGhlIHJlc291cmNlIGFsbG9jYXRpb24sIGJ1dCBpdCYjMzk7cyB0aGUgZmluZXIgcG9pbnRzIEkmIzM5O20gYWZ0ZXIgdG9kYXkuIFJpZ2h0LCBzbyB0aGlzIGlzIHdoZXJlIHRoZSBkcml2ZXIgYmluZHMgdG8gdGhlIGRldmljZS4gSSYjMzk7bGwgZm9jdXMgb24gaG93IGl0IGhhbmRsZXMgdGhlIFBDSSBkZXZpY2Ugc3RydWN0dXJlLCB0aGUgbWVtb3J5IG1hcHBpbmcsIHRoZSBpbnRlcnJ1cHQgc2V0dXAuLi4gYWxsIHRoZSB1c3VhbCBzdXNwZWN0cy4gSSB3YW50IHRvIHNlZSBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgcG90ZW50aWFsIGVycm9ycywgdGhlIHJvYnVzdG5lc3MuIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNsb2NraW5nIHNlcXVlbmNlIGFuZCB0aGUgcG93ZXIgbWFuYWdlbWVudCByZWxhdGVkIHRvIGl0LiBMZXQgbWUgc2VlIGhvdyB0aGUgcmVnaXN0ZXIgYWNjZXNzIGlzIGltcGxlbWVudGVkLCBhbmQgaG93IGl0IGlzIGFic3RyYWN0ZWQuIEkgc3VzcGVjdCB0aGVyZSBtYXkgYmUgYSBzcGVjaWZpYyBxdWlyayBvciB0d28gaGVyZSByZWxhdGVkIHRvIGRpZmZlcmVudCBoYXJkd2FyZSByZXZpc2lvbnMgb3Igc3BlY2lmaWMgUENJIGJ1cyBjb25maWd1cmF0aW9ucywgc28gSSYjMzk7bGwgYmUgbG9va2luZyBvdXQgZm9yIHRoYXQgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUyOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTUyODpcdHN0YXRpYyBpbnQgYXRoMTJrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbjE1Mjk6XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXYpXG4xNTMwOlx0e1xuMTUzMTpcdFx0ZW51bSBhdGgxMmtfZGV2aWNlX2ZhbWlseSBkZXZpY2VfaWQ7XG4xNTMyOlx0XHRzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpO1xuMTUzMzpcdFx0c3RydWN0IGF0aDEya19iYXNlICphYjtcbjE1MzQ6XHRcdGludCByZXQ7XG4xNTM1Olx0XG4xNTM2Olx0XHRhYiA9IGF0aDEya19jb3JlX2FsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2YoKmFiX3BjaSksIEFUSDEyS19CVVNfUENJKTtcbjE1Mzc6XHRcdGlmICghYWIpIHtcbjE1Mzg6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIGFsbG9jYXRlIGF0aDEyayBiYXNlXFxuXCYjMzQ7KTtcbjE1Mzk6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xNTQwOlx0XHR9XG4xNTQxOlx0XG4xNTQyOlx0XHRhYi1cdTAwM2VkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbjE1NDM6XHRcdGFiX3BjaSA9IGF0aDEya19wY2lfcHJpdihhYik7XG4xNTQ0Olx0XHRhYl9wY2ktXHUwMDNlZGV2X2lkID0gcGNpX2Rldi1cdTAwM2VkZXZpY2U7XG4xNTQ1Olx0XHRhYl9wY2ktXHUwMDNlYWIgPSBhYjtcbjE1NDY6XHRcdGFiX3BjaS1cdTAwM2VwZGV2ID0gcGRldjtcbjE1NDc6XHRcdGFiLVx1MDAzZWhpZi5vcHMgPSBcdTAwMjZhdGgxMmtfcGNpX2hpZl9vcHM7XG4xNTQ4Olx0XHRhYi1cdTAwM2Vmd19tb2RlID0gQVRIMTJLX0ZJUk1XQVJFX01PREVfTk9STUFMO1xuMTU0OTpcdFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIGFiKTtcbjE1NTA6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmFiX3BjaS1cdTAwM2V3aW5kb3dfbG9jayk7XG4xNTUxOlx0XG4xNTUyOlx0XHRyZXQgPSBhdGgxMmtfcGNpX2NsYWltKGFiX3BjaSwgcGRldik7XG4xNTUzOlx0XHRpZiAocmV0KSB7XG4xNTU0Olx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBjbGFpbSBkZXZpY2U6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTU1NTpcdFx0XHRnb3RvIGVycl9mcmVlX2NvcmU7XG4xNTU2Olx0XHR9XG4xNTU3Olx0XG4xNTU4Olx0XHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX0JPT1QsIFwmIzM0O3BjaSBwcm9iZSAlMDR4OiUwNHggJTA0eDolMDR4XFxuXCYjMzQ7LFxuMTU1OTpcdFx0XHQgICBwZGV2LVx1MDAzZXZlbmRvciwgcGRldi1cdTAwM2VkZXZpY2UsXG4xNTYwOlx0XHRcdCAgIHBkZXYtXHUwMDNlc3Vic3lzdGVtX3ZlbmRvciwgcGRldi1cdTAwM2VzdWJzeXN0ZW1fZGV2aWNlKTtcbjE1NjE6XHRcbjE1NjI6XHRcdGFiLVx1MDAzZWlkLnZlbmRvciA9IHBkZXYtXHUwMDNldmVuZG9yO1xuMTU2MzpcdFx0YWItXHUwMDNlaWQuZGV2aWNlID0gcGRldi1cdTAwM2VkZXZpY2U7XG4xNTY0Olx0XHRhYi1cdTAwM2VpZC5zdWJzeXN0ZW1fdmVuZG9yID0gcGRldi1cdTAwM2VzdWJzeXN0ZW1fdmVuZG9yO1xuMTU2NTpcdFx0YWItXHUwMDNlaWQuc3Vic3lzdGVtX2RldmljZSA9IHBkZXYtXHUwMDNlc3Vic3lzdGVtX2RldmljZTtcbjE1NjY6XHRcbjE1Njc6XHRcdGRldmljZV9pZCA9IGF0aDEya19nZXRfZGV2aWNlX2ZhbWlseShwY2lfZGV2KTtcbjE1Njg6XHRcdGlmIChkZXZpY2VfaWQgXHUwMDNlPSBBVEgxMktfREVWSUNFX0ZBTUlMWV9NQVgpIHtcbjE1Njk6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGdldCBkZXZpY2UgZmFtaWx5IGlkXFxuXCYjMzQ7KTtcbjE1NzA6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbjE1NzE6XHRcdFx0Z290byBlcnJfcGNpX2ZyZWVfcmVnaW9uO1xuMTU3MjpcdFx0fVxuMTU3MzpcdFxuMTU3NDpcdFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19QQ0ksIFwmIzM0O1BDSSBkZXZpY2UgZmFtaWx5IGlkOiAlZFxcblwmIzM0OywgZGV2aWNlX2lkKTtcbjE1NzU6XHRcbjE1NzY6XHRcdGFiX3BjaS1cdTAwM2VkZXZpY2VfZmFtaWx5X29wcyA9IFx1MDAyNmF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbZGV2aWNlX2lkXS1cdTAwM2VvcHM7XG4xNTc3Olx0XHRhYl9wY2ktXHUwMDNlcmVnX2Jhc2UgPSBhdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzW2RldmljZV9pZF0tXHUwMDNlcmVnX2Jhc2U7XG4xNTc4Olx0XG4xNTc5Olx0XHQvKiBDYWxsIGRldmljZSBzcGVjaWZpYyBwcm9iZS4gVGhpcyBpcyB0aGUgY2FsbGJhY2sgdGhhdCBjYW5cbjE1ODA6XHRcdCAqIGJlIHVzZWQgdG8gb3ZlcnJpZGUgYW55IG9wcyBpbiBmdXR1cmVcbjE1ODE6XHRcdCAqIHByb2JlIGlzIHZhbGlkYXRlZCBmb3IgTlVMTCBkdXJpbmcgcmVnaXN0cmF0aW9uLlxuMTU4MjpcdFx0ICovXG4xNTgzOlx0XHRyZXQgPSBhYl9wY2ktXHUwMDNlZGV2aWNlX2ZhbWlseV9vcHMtXHUwMDNlcHJvYmUocGRldiwgcGNpX2Rldik7XG4xNTg0Olx0XHRpZiAocmV0KSB7XG4xNTg1Olx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBwcm9iZSBkZXZpY2U6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTU4NjpcdFx0XHRnb3RvIGVycl9wY2lfZnJlZV9yZWdpb247XG4xNTg3Olx0XHR9XG4xNTg4Olx0XG4xNTg5Olx0XHRyZXQgPSBhdGgxMmtfcGNpX21zaV9hbGxvYyhhYl9wY2kpO1xuMTU5MDpcdFx0aWYgKHJldCkge1xuMTU5MTpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gYWxsb2MgbXNpOiAlZFxcblwmIzM0OywgcmV0KTtcbjE1OTI6XHRcdFx0Z290byBlcnJfcGNpX2ZyZWVfcmVnaW9uO1xuMTU5MzpcdFx0fVxuMTU5NDpcdFxuMTU5NTpcdFx0cmV0ID0gYXRoMTJrX2NvcmVfcHJlX2luaXQoYWIpO1xuMTU5NjpcdFx0aWYgKHJldClcbjE1OTc6XHRcdFx0Z290byBlcnJfcGNpX21zaV9mcmVlO1xuMTU5ODpcdFxuMTU5OTpcdFx0cmV0ID0gYXRoMTJrX3BjaV9zZXRfaXJxX2FmZmluaXR5X2hpbnQoYWJfcGNpLCBjcHVtYXNrX29mKDApKTtcbjE2MDA6XHRcdGlmIChyZXQpIHtcbjE2MDE6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHNldCBpcnEgYWZmaW5pdHkgJWRcXG5cJiMzNDssIHJldCk7XG4xNjAyOlx0XHRcdGdvdG8gZXJyX3BjaV9tc2lfZnJlZTtcbjE2MDM6XHRcdH1cbjE2MDQ6XHRcbjE2MDU6XHRcdHJldCA9IGF0aDEya19taGlfcmVnaXN0ZXIoYWJfcGNpKTtcbjE2MDY6XHRcdGlmIChyZXQpIHtcbjE2MDc6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHJlZ2lzdGVyIG1oaTogJWRcXG5cJiMzNDssIHJldCk7XG4xNjA4Olx0XHRcdGdvdG8gZXJyX2lycV9hZmZpbml0eV9jbGVhbnVwO1xuMTYwOTpcdFx0fVxuMTYxMDpcdFxuMTYxMTpcdFx0cmV0ID0gYXRoMTJrX2hhbF9zcm5nX2luaXQoYWIpO1xuMTYxMjpcdFx0aWYgKHJldClcbjE2MTM6XHRcdFx0Z290byBlcnJfbWhpX3VucmVnaXN0ZXI7XG4xNjE0Olx0XG4xNjE1Olx0XHRyZXQgPSBhdGgxMmtfY2VfYWxsb2NfcGlwZXMoYWIpO1xuMTYxNjpcdFx0aWYgKHJldCkge1xuMTYxNzpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gYWxsb2NhdGUgY2UgcGlwZXM6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTYxODpcdFx0XHRnb3RvIGVycl9oYWxfc3JuZ19kZWluaXQ7XG4xNjE5Olx0XHR9XG4xNjIwOlx0XG4xNjIxOlx0XHRhdGgxMmtfcGNpX2luaXRfcW1pX2NlX2NvbmZpZyhhYik7XG4xNjIyOlx0XG4xNjIzOlx0XHRyZXQgPSBhdGgxMmtfcGNpX2NvbmZpZ19pcnEoYWIpO1xuMTYyNDpcdFx0aWYgKHJldCkge1xuMTYyNTpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gY29uZmlnIGlycTogJWRcXG5cJiMzNDssIHJldCk7XG4xNjI2Olx0XHRcdGdvdG8gZXJyX2NlX2ZyZWU7XG4xNjI3Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2Mjk0CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgTUhJIEludGVyZmFjZSB3aXRoIGF0aDEyayBhbmQgU3l6a2FsbGVyKioKCk9rYXksIHNvIGBhdGgxMmtfcGNpX3Byb2JlYCBpcyB3aGVyZSBpdCBhbGwgc3RhcnRzLiBJdCYjMzk7cyBjYWxsaW5nIGBhdGgxMmtfbWhpX3JlZ2lzdGVyYCwgd2hpY2ggaW5zdGFudGx5IGZsYWdzIG15IGF0dGVudGlvbi4gTUhJLCBNb2RlbSBIb3N0IEludGVyZmFjZeKApiByaWdodC4gTm93LCBjYW4gd2UgYWN0dWFsbHkgKm1vY2sqIHRoZSBNSEkgd2l0aCBTeXprYWxsZXI/IERvZXMgU3l6a2FsbGVyIGhhdmUgYSBnZW5lcmljIE1ISSBkZXZpY2UgZW11bGF0b3I/IFRoYXQmIzM5O3MgdGhlIHJlYWwgcXVlc3Rpb24uIEkgZG9uJiMzOTt0IHJlY2FsbCBzZWVpbmcgYW55dGhpbmcgbGlrZSB0aGF0IGluIGl0cyBzdGFuZGFyZCByZXBlcnRvaXJlLgoKSG1tLCBpZiBgYXRoMTJrX21oaV9yZWdpc3RlcmAgZmFpbHMsIHRoZSB3aG9sZSBwcm9iZSBiYWlscy4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIHBhdGguIEl0IG1lYW5zIHRoaXMgTUhJIHJlZ2lzdHJhdGlvbiBpcyBhIHBvdGVudGlhbCBwb2ludCBvZiBmYWlsdXJlIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCBhbmQgcG90ZW50aWFsbHkgZXhwbG9pdC4gQWxyaWdodCwgdGltZSB0byBkaXZlIGRlZXBlciBhbmQgdGFrZSBhIGNsb3NlIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBhdGgxMmtfbWhpX3JlZ2lzdGVyYC4gTmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoIHRoZSBNSEksIHdoYXQgZXJyb3JzIGNhbiBoYXBwZW4sIGFuZCBob3cgaXQgaGFuZGxlcyB0aGVtLiBUaGlzIGlzIHdoZXJlIHRoZSB2dWxuZXJhYmlsaXR5IGh1bnRpbmcgYmVnaW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMmtfbWhpX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYz0xODA9c3RhdGljIHZvaWQgYXRoMTJrX21oaV9vcF93cml0ZV9yZWcoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy0xODYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jOjE4NzppbnQgYXRoMTJrX21oaV9yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy0xODgte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmg9MzU9dm9pZCBhdGgxMmtfbWhpX3N0b3Aoc3RydWN0IGF0aDEya19wY2kgKmFyX3BjaSwgYm9vbCBpc19zdXNwZW5kKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmg6MzY6aW50IGF0aDEya19taGlfcmVnaXN0ZXIoc3RydWN0IGF0aDEya19wY2kgKmFyX3BjaSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5oLTM3LXZvaWQgYXRoMTJrX21oaV91bnJlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfcGNpICphcl9wY2kpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTUyOD1zdGF0aWMgaW50IGF0aDEya19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNjA0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNjA1Olx0cmV0ID0gYXRoMTJrX21oaV9yZWdpc3RlcihhYl9wY2kpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNjA2LVx0aWYgKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzEwNwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiBgYXRoMTJrX21oaV9yZWdpc3RlcmAsIGFzc3VtaW5nIEkgaGF2ZSBhIGRlZXAgdW5kZXJzdGFuZGluZyBvZiB3aXJlbGVzcyBkcml2ZXJzIGFuZCBNSEkgKE11bHRpLUludGVyZmFjZSBIYXJkd2FyZSkuCgoqKkRpc3NlY3RpbmcgYGF0aDEya19taGlfcmVnaXN0ZXJgIC0gQSBEZWVwIERpdmUqKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSBgYXRoMTJrX21oaV9yZWdpc3RlcmAuIE15IG1pbmQgaXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhlIGNvcmUgcHVycG9zZTogcmVnaXN0cmF0aW9uLiBUaGlzIGZ1bmN0aW9uLCBieSBpdHMgdmVyeSBuYW1lLCBpbXBsaWVzIGl0JiMzOTtzIHRoZSBnYXRld2F5IGZvciBpbmNvcnBvcmF0aW5nIHRoZSBNSEkgZnVuY3Rpb25hbGl0eSBvZiB0aGUgQXRoZXJvcyAxMmsgZHJpdmVyLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O3doYXQgZXhhY3RseSBpcyBiZWluZyByZWdpc3RlcmVkPyYjMzQ7IElzIGl0IHRoZSBNSEkgZGV2aWNlIGl0c2VsZj8gQXJlIHdlIGVzdGFibGlzaGluZyByZXNvdXJjZSBhbGxvY2F0aW9uIG9yIGludGVycnVwdCBoYW5kbGVycz8KCkkgZXhwZWN0IHRvIHNlZSB0aGUgY29kZSBoYW5kbGluZyB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgTUhJIGhhcmR3YXJlIOKAkyBtb3N0IGxpa2VseSwgaW5pdGlhbGl6aW5nIGRhdGEgc3RydWN0dXJlcywgc2V0dGluZyB1cCBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIChwcm9iYWJseSB0aHJvdWdoIERNQSBvciBzaGFyZWQgbWVtb3J5KSwgYW5kIHBvdGVudGlhbGx5IGNvbmZpZ3VyaW5nIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHJlZ2lzdGVycyBiYXNlZCBvbiB0aGUgc3BlY2lmaWMgY2FwYWJpbGl0aWVzIGFkdmVydGlzZWQgYnkgdGhlIE1ISSBjb250cm9sbGVyLiBJ4oCZbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBwb3RlbnRpYWwgaGFyZHdhcmUgdmFyaWF0aW9ucyBvciBkaWZmZXJlbnQgTUhJIGltcGxlbWVudGF0aW9ucywgYXMgd2VsbCBhcyBob3cgdGhpcyByZWdpc3RyYXRpb24gcmVsYXRlcyB0byB0aGUgbGFyZ2VyIGZyYW1ld29yayBvZiBhdGgxMmsuCgpJ4oCZbSBwYXJ0aWN1bGFybHkgY3VyaW91cyBhYm91dCB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoaXMgZnVuY3Rpb24uIEdpdmVuIHRoZSBjb21wbGV4aXRpZXMgb2YgaGFyZHdhcmUgaW50ZXJmYWNlcywgSSBhbnRpY2lwYXRlIHJvYnVzdCBjaGVja3MgZm9yIGZhaWx1cmUgY29uZGl0aW9ucyBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIHJlc291cmNlIGFsbG9jYXRpb24sIGFuZCBjb21tdW5pY2F0aW9uIHNldHVwLiBIb3cgZ3JhY2VmdWxseSBkb2VzIGl0IGhhbmRsZSBhIHNjZW5hcmlvIHdoZXJlIHRoZSBNSEkgZGV2aWNlIGlzbiYjMzk7dCByZXNwb25kaW5nIG9yIHRoZSBuZWNlc3NhcnkgcmVzb3VyY2VzIGFyZSB1bmF2YWlsYWJsZT8gRG9lcyBpdCBpbmNsdWRlIHNwZWNpZmljIGVycm9yIGNvZGVzIGFuZCBsb2dnaW5nIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXM/IFRoZSBlbGVnYW5jZSBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgZGV0ZXJtaW5lZCBieSBpdHMgYWJpbGl0eSB0byByZWNvdmVyIGZyb20gZXJyb3JzLCBhdCB0aGUgc2FtZSB0aW1lIGJlaW5nIGVmZmljaWVudC4gCgpJJiMzOTttIHByZXBhcmVkIHRvIGRpc3NlY3QgdGhlIGZ1bmN0aW9u4oCZcyBhcmd1bWVudHMgYW5kIHNjcnV0aW5pemUgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCB1c2VzLiBJJiMzOTttIGV4cGVjdGluZyB0byBsb29rIGF0IGRldGFpbHMgbGlrZSB0aGUgTUhJIGRldmljZSBwb2ludGVyLCBhbnkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHBhc3NlZCBpbiwgYW5kIHBvaW50ZXJzIHRvIHRoZSBkcml2ZXLigJlzIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUuIEl0IGlzIHZpdGFsIHRvIHNlZSBob3cgdGhlc2UgYXJndW1lbnRzIGFyZSB1c2VkIHRvIGNvbW11bmljYXRlIGluZm9ybWF0aW9uIHRvIHRoZSBNSEkgZGV2aWNlLiAKCkluIHNob3J0LCBJJiMzOTttIGV4cGVjdGluZyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUsIGEgZm91bmRhdGlvbmFsIGZ1bmN0aW9uLCB0aGF0IG11c3QgYmUgc29saWQsIGVmZmljaWVudCwgYW5kIHdlbGwtZG9jdW1lbnRlZCBpZiB0aGUgb3ZlcmFsbCBkcml2ZXIgaXMgdG8gYmUgcmVzaWxpZW50LiBMZXQmIzM5O3Mgc2VlIGhvdyB3ZWxsIHRoZXkmIzM5O3ZlIGRvbmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTg3Olx0aW50IGF0aDEya19taGlfcmVnaXN0ZXIoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSlcbiAxODg6XHR7XG4gMTg5Olx0XHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiID0gYWJfcGNpLVx1MDAzZWFiO1xuIDE5MDpcdFx0c3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY3RybDtcbiAxOTE6XHRcdHVuc2lnbmVkIGludCBib2FyZF9pZDtcbiAxOTI6XHRcdGludCByZXQ7XG4gMTkzOlx0XHRib29sIGR1YWxtYWMgPSBmYWxzZTtcbiAxOTQ6XHRcbiAxOTU6XHRcdG1oaV9jdHJsID0gbWhpX2FsbG9jX2NvbnRyb2xsZXIoKTtcbiAxOTY6XHRcdGlmICghbWhpX2N0cmwpXG4gMTk3Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDE5ODpcdFxuIDE5OTpcdFx0YWJfcGNpLVx1MDAzZW1oaV9wcmVfY2IgPSBNSElfQ0JfSU5WQUxJRDtcbiAyMDA6XHRcdGFiX3BjaS1cdTAwM2VtaGlfY3RybCA9IG1oaV9jdHJsO1xuIDIwMTpcdFx0bWhpX2N0cmwtXHUwMDNlY250cmxfZGV2ID0gYWItXHUwMDNlZGV2O1xuIDIwMjpcdFx0bWhpX2N0cmwtXHUwMDNlcmVncyA9IGFiLVx1MDAzZW1lbTtcbiAyMDM6XHRcdG1oaV9jdHJsLVx1MDAzZXJlZ19sZW4gPSBhYi1cdTAwM2VtZW1fbGVuO1xuIDIwNDpcdFx0bWhpX2N0cmwtXHUwMDNlcmRkbV9zaXplID0gYWItXHUwMDNlaHdfcGFyYW1zLVx1MDAzZXJkZG1fc2l6ZTtcbiAyMDU6XHRcbiAyMDY6XHRcdGlmIChhYi1cdTAwM2Vod19wYXJhbXMtXHUwMDNlb3RwX2JvYXJkX2lkX3JlZ2lzdGVyKSB7XG4gMjA3Olx0XHRcdGJvYXJkX2lkID1cbiAyMDg6XHRcdFx0XHRhdGgxMmtfcGNpX3JlYWQzMihhYiwgYWItXHUwMDNlaHdfcGFyYW1zLVx1MDAzZW90cF9ib2FyZF9pZF9yZWdpc3Rlcik7XG4gMjA5Olx0XHRcdGJvYXJkX2lkID0gdTMyX2dldF9iaXRzKGJvYXJkX2lkLCBPVFBfQk9BUkRfSURfTUFTSyk7XG4gMjEwOlx0XG4gMjExOlx0XHRcdGlmICghYm9hcmRfaWQgfHwgKGJvYXJkX2lkID09IE9UUF9JTlZBTElEX0JPQVJEX0lEKSkge1xuIDIxMjpcdFx0XHRcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfQk9PVCxcbiAyMTM6XHRcdFx0XHRcdCAgIFwmIzM0O2ZhaWxlZCB0byByZWFkIGJvYXJkIGlkXFxuXCYjMzQ7KTtcbiAyMTQ6XHRcdFx0fSBlbHNlIGlmIChib2FyZF9pZCBcdTAwMjYgT1RQX1ZBTElEX0RVQUxNQUNfQk9BUkRfSURfTUFTSykge1xuIDIxNTpcdFx0XHRcdGR1YWxtYWMgPSB0cnVlO1xuIDIxNjpcdFx0XHRcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfQk9PVCxcbiAyMTc6XHRcdFx0XHRcdCAgIFwmIzM0O2R1YWxtYWMgZncgc2VsZWN0ZWQgZm9yIGJvYXJkIGlkOiAleFxcblwmIzM0OywgYm9hcmRfaWQpO1xuIDIxODpcdFx0XHR9XG4gMjE5Olx0XHR9XG4gMjIwOlx0XG4gMjIxOlx0XHRpZiAoZHVhbG1hYykge1xuIDIyMjpcdFx0XHRpZiAoYWItXHUwMDNlZncuYW1zc19kdWFsbWFjX2RhdGEgXHUwMDI2XHUwMDI2IGFiLVx1MDAzZWZ3LmFtc3NfZHVhbG1hY19sZW4gXHUwMDNlIDApIHtcbiAyMjM6XHRcdFx0XHQvKiB1c2UgTUhJIGZpcm13YXJlIGZpbGUgZnJvbSBmaXJtd2FyZS1OLmJpbiAqL1xuIDIyNDpcdFx0XHRcdG1oaV9jdHJsLVx1MDAzZWZ3X2RhdGEgPSBhYi1cdTAwM2Vmdy5hbXNzX2R1YWxtYWNfZGF0YTtcbiAyMjU6XHRcdFx0XHRtaGlfY3RybC1cdTAwM2Vmd19zeiA9IGFiLVx1MDAzZWZ3LmFtc3NfZHVhbG1hY19sZW47XG4gMjI2Olx0XHRcdH0gZWxzZSB7XG4gMjI3Olx0XHRcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2R1YWxtYWMgZmlybXdhcmUgSUUgbm90IHByZXNlbnQgaW4gZmlybXdhcmUtTi5iaW5cXG5cJiMzNDspO1xuIDIyODpcdFx0XHRcdHJldCA9IC1FTk9FTlQ7XG4gMjI5Olx0XHRcdFx0Z290byBmcmVlX2NvbnRyb2xsZXI7XG4gMjMwOlx0XHRcdH1cbiAyMzE6XHRcdH0gZWxzZSB7XG4gMjMyOlx0XHRcdGlmIChhYi1cdTAwM2Vmdy5hbXNzX2RhdGEgXHUwMDI2XHUwMDI2IGFiLVx1MDAzZWZ3LmFtc3NfbGVuIFx1MDAzZSAwKSB7XG4gMjMzOlx0XHRcdFx0LyogdXNlIE1ISSBmaXJtd2FyZSBmaWxlIGZyb20gZmlybXdhcmUtTi5iaW4gKi9cbiAyMzQ6XHRcdFx0XHRtaGlfY3RybC1cdTAwM2Vmd19kYXRhID0gYWItXHUwMDNlZncuYW1zc19kYXRhO1xuIDIzNTpcdFx0XHRcdG1oaV9jdHJsLVx1MDAzZWZ3X3N6ID0gYWItXHUwMDNlZncuYW1zc19sZW47XG4gMjM2Olx0XHRcdH0gZWxzZSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NTkxCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKk5hdmlnYXRpbmcgdGhlIGBhYi0mZ3Q7ZncuYW1zc19kYXRhYCBDb250ZXh0KioKCk9rYXksIEkmIzM5O20gdHJhY2luZyB0aGlzIGFjY2VzczogYGFiLSZndDtmdy5hbXNzX2RhdGFgLiBJbW1lZGlhdGVseSwgbXkgbWVudGFsIG1hcCBraWNrcyBpbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBgYWItJmd0O2Z3YCBwb2ludGVyIGdldHMgcG9wdWxhdGVkLiBNeSBndXQgZmVlbGluZyBpcyBzb21ldGhpbmcgd2l0aGluIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgcGVyaGFwcyBkdXJpbmcgdGhlIHNldHVwIHBoYXNlIG9mIHRoZSBmaXJtd2FyZS4gSXMgaXQgYGF0aDEya19jb3JlX3ByZV9pbml0YCBvciBzb21ldGhpbmcgc2ltaWxhcj8KCldhaXQsIG5vLiBXYXNuJiMzOTt0IGBhdGgxMmtfY29yZV9wcmVfaW5pdGAgY2FsbGVkICpiZWZvcmUqIGBhdGgxMmtfbWhpX3JlZ2lzdGVyYD8gWWVzLCBJIHJlbWVtYmVyLiBTbywgSSBuZWVkIHRvIHpvb20gaW4gb24gd2hhdCBoYXBwZW5zIGR1cmluZyB0aGF0IHByZS1pbml0aWFsaXphdGlvbiBzdGFnZS4gTGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBmdW5jdGlvbiBgYXRoMTJrX2NvcmVfcHJlX2luaXRgIGJlY2F1c2UgdGhhdCYjMzk7cyBtb3N0IGxpa2VseSB3aGVyZSB0aGUgcmVsZXZhbnQgZGF0YSBpcyBiZWluZyBlc3RhYmxpc2hlZC4gVGltZSB0byBkaWcgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya19jb3JlX3ByZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYz0xMDE5PXN0YXRpYyBpbnQgYXRoMTJrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTA3MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MTA3MjpcdHJldCA9IGF0aDEya19jb3JlX3ByZV9pbml0KGFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTA3My1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM9MTc4NT1FWFBPUlRfU1lNQk9MKGF0aDEya19jb3JlX2dldF9tZW1vcnlfbW9kZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0xNzg2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6MTc4NzppbnQgYXRoMTJrX2NvcmVfcHJlX2luaXQoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTE3ODgte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5oPTEyNjY9dm9pZCBhdGgxMmtfY29yZV9od19ncm91cF9jbGVhbnVwKHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5oOjEyNjc6aW50IGF0aDEya19jb3JlX3ByZV9pbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmgtMTI2OC1pbnQgYXRoMTJrX2NvcmVfaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmF0aDEyayk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xNTI4PXN0YXRpYyBpbnQgYXRoMTJrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1OTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE1OTU6XHRyZXQgPSBhdGgxMmtfY29yZV9wcmVfaW5pdChhYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1OTYtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTQ5OAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgYGF0aDEya19jb3JlX3ByZV9pbml0YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ3JhYiBgYXRoMTJrX2NvcmVfcHJlX2luaXRgIGFuZCBnZXQgYSBmZWVsIGZvciB3aGF0JiMzOTtzIGdvaW5nIG9uLiBUaGlzIGZ1bmN0aW9uIG5hbWUgc3Ryb25nbHkgc3VnZ2VzdHMgdGhpcyBpcyBhIHByZWxpbWluYXJ5IGluaXRpYWxpemF0aW9uIHN0YWdlLCBwcm9iYWJseSBjcml0aWNhbCBmb3Igc2V0dGluZyB1cCB0aGUgaGFyZHdhcmUgYW5kIHByZXBhcmluZyBpdCBmb3Igb3BlcmF0aW9uLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgZXNzZW50aWFsIGNvbmZpZ3VyYXRpb24gc3RlcHMsIHBvc3NpYmx5IHJlZ2lzdGVyIGFjY2Vzc2VzLCBwb3dlciBtYW5hZ2VtZW50IGNvbnNpZGVyYXRpb25zLCBhbmQgcG90ZW50aWFsbHkgc29tZSBiYXNpYyBoYXJkd2FyZSBkaXNjb3ZlcnkuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucywgYXMgdGhlIHNlcXVlbmNlIGlzIG9mdGVuIGNydWNpYWwgaW4gdGhlc2UgbG93LWxldmVsIGluaXRpYWxpemF0aW9ucy4gSSYjMzk7bGwgYWxzbyBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgZXJyb3IgaGFuZGxpbmcgb3IgZmFsbGJhY2sgbWVjaGFuaXNtcywgYXMgYW55IGluaXRpYWxpemF0aW9uIHJvdXRpbmUgbXVzdCBiZSByb2J1c3QuIFVuZGVyc3RhbmRpbmcgd2hhdCYjMzk7cyBoYXBwZW5pbmcgKmJlZm9yZSogdGhlIG1haW4gZHJpdmVyIGxvZ2ljIGtpY2tzIGluIGlzIHZpdGFsIGZvciB0cm91Ymxlc2hvb3RpbmcgbGF0ZXIgb24sIGFuZCBjYW4gaW5mb3JtIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBkb3duIHRoZSBsaW5lLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc4NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzg3Olx0aW50IGF0aDEya19jb3JlX3ByZV9pbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4xNzg4Olx0e1xuMTc4OTpcdFx0Y29uc3Qgc3RydWN0IGF0aDEya19tZW1fcHJvZmlsZV9iYXNlZF9wYXJhbSAqcGFyYW07XG4xNzkwOlx0XG4xNzkxOlx0XHRwYXJhbSA9IFx1MDAyNmF0aDEya19tZW1fcHJvZmlsZV9iYXNlZF9wYXJhbVthYi1cdTAwM2V0YXJnZXRfbWVtX21vZGVdO1xuMTc5MjpcdFx0YWItXHUwMDNlcHJvZmlsZV9wYXJhbSA9IHBhcmFtO1xuMTc5MzpcdFx0YXRoMTJrX2Z3X21hcChhYik7XG4xNzk0Olx0XG4xNzk1Olx0XHRyZXR1cm4gMDtcbjE3OTY6XHR9XG4xNzk3Olx0XG4xNzk4Olx0c3RhdGljIGludCBhdGgxMmtfY29yZV9wYW5pY19oYW5kbGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4xNzk5Olx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkYXRhKVxuMTgwMDpcdHtcbjE4MDE6XHRcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBjb250YWluZXJfb2YobmIsIHN0cnVjdCBhdGgxMmtfYmFzZSxcbjE4MDI6XHRcdFx0XHRcdFx0ICAgICAgcGFuaWNfbmIpO1xuMTgwMzpcdFxuMTgwNDpcdFx0cmV0dXJuIGF0aDEya19oaWZfcGFuaWNfaGFuZGxlcihhYik7XG4xODA1Olx0fVxuMTgwNjpcdFxuMTgwNzpcdHN0YXRpYyBpbnQgYXRoMTJrX2NvcmVfcGFuaWNfbm90aWZpZXJfcmVnaXN0ZXIoc3RydWN0IGF0aDEya19iYXNlICphYilcbjE4MDg6XHR7XG4xODA5Olx0XHRhYi1cdTAwM2VwYW5pY19uYi5ub3RpZmllcl9jYWxsID0gYXRoMTJrX2NvcmVfcGFuaWNfaGFuZGxlcjtcbjE4MTA6XHRcbjE4MTE6XHRcdHJldHVybiBhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoXHUwMDI2cGFuaWNfbm90aWZpZXJfbGlzdCxcbjE4MTI6XHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2YWItXHUwMDNlcGFuaWNfbmIpO1xuMTgxMzpcdH1cbjE4MTQ6XHRcbjE4MTU6XHRzdGF0aWMgdm9pZCBhdGgxMmtfY29yZV9wYW5pY19ub3RpZmllcl91bnJlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4xODE2Olx0e1xuMTgxNzpcdFx0YXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoXHUwMDI2cGFuaWNfbm90aWZpZXJfbGlzdCxcbjE4MTg6XHRcdFx0XHRcdFx0IFx1MDAyNmFiLVx1MDAzZXBhbmljX25iKTtcbjE4MTk6XHR9XG4xODIwOlx0XG4xODIxOlx0c3RhdGljIGlubGluZVxuMTgyMjpcdGJvb2wgYXRoMTJrX2NvcmVfaHdfZ3JvdXBfY3JlYXRlX3JlYWR5KHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnKVxuMTgyMzpcdHtcbjE4MjQ6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2YWctXHUwMDNlbXV0ZXgpO1xuMTgyNTpcdFxuMTgyNjpcdFx0cmV0dXJuIChhZy1cdTAwM2VudW1fcHJvYmVkID09IGFnLVx1MDAzZW51bV9kZXZpY2VzKTtcbjE4Mjc6XHR9XG4xODI4Olx0XG4xODI5Olx0c3RhdGljIHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmF0aDEya19jb3JlX2h3X2dyb3VwX2FsbG9jKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4xODMwOlx0e1xuMTgzMTpcdFx0c3RydWN0IGF0aDEya19od19ncm91cCAqYWc7XG4xODMyOlx0XHRpbnQgY291bnQgPSAwO1xuMTgzMzpcdFxuMTgzNDpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZhdGgxMmtfaHdfZ3JvdXBfbXV0ZXgpO1xuMTgzNTpcdFxuMTgzNjpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShhZywgXHUwMDI2YXRoMTJrX2h3X2dyb3VwX2xpc3QsIGxpc3QpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNTg5CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMjExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYXRoMTJrIEZpcm13YXJlIE1hcHBpbmcgYW5kIE1ISSBSZWdpc3RyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBhdGgxMmtfZndfbWFwYCwgd2hpY2ggSSBrbm93IGhhbmRsZXMgZmlybXdhcmUgbWFwcGluZy4gQnV0IHdoYXQmIzM5O3MgcmVhbGx5IGNhdGNoaW5nIG15IGF0dGVudGlvbiBpcyB0aGF0IGBhdGgxMmtfbWhpX3JlZ2lzdGVyYCBjYWxscyBgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXJgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgZG9lcyBzeXprYWxsZXIgZXZlbiAqZW11bGF0ZSogTUhJPyBObywgcmlnaHQ/IEkmIzM5O20gcHJldHR5IHN1cmUgaXQgZG9lc24mIzM5O3QuCgpTbywgaWYgc3l6a2FsbGVyICpkb2VzbiYjMzk7dCogaGF2ZSBhbiBNSEkgZW11bGF0b3IsIGBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcmAgaXMgZ29pbmcgdG8gYmUgdHJ5aW5nIHRvIHRhbGsgdG8gYSBkZXZpY2UgdmlhIGl0cyBQQ0kgbWVtb3J5LW1hcHBlZCByZWdpc3RlcnMsIGBtaGlfY3RybC0mZ3Q7cmVnc2AuIEkga25vdyB0aGF0IGlmIHN5emthbGxlciBzZXRzIHVwIGEgZmFrZSBQQ0kgZGV2aWNlLCBpdCAqY291bGQqIHByb3ZpZGUgdGhvc2UgZmFrZSBtZW1vcnkgcmVnaW9ucy4gQnV0IE1ISSBpcyBhIGJpdCBtb3JlIGludm9sdmVkLCBpc24mIzM5O3QgaXQ/IFdlIG5lZWQgYSBzcGVjaWZpYyBzdGF0ZSBtYWNoaW5lIGFuZCB0aG9zZSBwZXNreSBpbnRlcnJ1cHRzIHRvIGdldCB0aGUgZGV2aWNlIGludG8gYW4gYE1ISV9SRUFEWWAgc3RhdGUuIFdpdGhvdXQgYSByZWFsIGRldmljZSBvciBhIGN1c3RvbSBlbXVsYXRvciBmb3IgTUhJLCBgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXJgIGlzIGxpa2VseSB0byB0aW1lIG91dCBvciBmYWlsIG91dHJpZ2h0LgoKSGFuZyBvbi4uLiBJJiMzOTttIG1pc3Npbmcgc29tZXRoaW5nIGhlcmUuIGBhdGgxMmtfbWhpX3JlZ2lzdGVyYCBjYWxscyBgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXJgLCBidXQgSSBkb24mIzM5O3QgcmVjYWxsIGl0IHdhaXRpbmcgZm9yIHRoZSBkZXZpY2UgdG8gYWN0dWFsbHkgKmJlY29tZSogcmVhZHkuIEkgbmVlZCB0byB0YWtlIGFub3RoZXIgbG9vayBhdCBgYXRoMTJrX21oaV9yZWdpc3RlcmAgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3Qgb3Zlcmxvb2tlZCBzb21ldGhpbmcgY3J1Y2lhbC4gR290dGEgZ28gYmFjayBhbmQgY2hlY2sgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIzNzpcdFx0XHRcdC8qIHVzZSB0aGUgb2xkIHNlcGFyYXRlIG1oaS5iaW4gTUhJIGZpcm13YXJlIGZpbGUgKi9cbiAyMzg6XHRcdFx0XHRhdGgxMmtfY29yZV9jcmVhdGVfZmlybXdhcmVfcGF0aChhYiwgQVRIMTJLX0FNU1NfRklMRSxcbiAyMzk6XHRcdFx0XHRcdFx0XHRcdCBhYl9wY2ktXHUwMDNlYW1zc19wYXRoLFxuIDI0MDpcdFx0XHRcdFx0XHRcdFx0IHNpemVvZihhYl9wY2ktXHUwMDNlYW1zc19wYXRoKSk7XG4gMjQxOlx0XHRcdFx0bWhpX2N0cmwtXHUwMDNlZndfaW1hZ2UgPSBhYl9wY2ktXHUwMDNlYW1zc19wYXRoO1xuIDI0MjpcdFx0XHR9XG4gMjQzOlx0XHR9XG4gMjQ0Olx0XG4gMjQ1Olx0XHRyZXQgPSBhdGgxMmtfbWhpX2dldF9tc2koYWJfcGNpKTtcbiAyNDY6XHRcdGlmIChyZXQpIHtcbiAyNDc6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGdldCBtc2kgZm9yIG1oaVxcblwmIzM0Oyk7XG4gMjQ4Olx0XHRcdGdvdG8gZnJlZV9jb250cm9sbGVyO1xuIDI0OTpcdFx0fVxuIDI1MDpcdFxuIDI1MTpcdFx0aWYgKCF0ZXN0X2JpdChBVEgxMktfUENJX0ZMQUdfTVVMVElfTVNJX1ZFQ1RPUlMsIFx1MDAyNmFiX3BjaS1cdTAwM2VmbGFncykpXG4gMjUyOlx0XHRcdG1oaV9jdHJsLVx1MDAzZWlycV9mbGFncyA9IElSUUZfU0hBUkVEIHwgSVJRRl9OT0JBTEFOQ0lORztcbiAyNTM6XHRcbiAyNTQ6XHRcdG1oaV9jdHJsLVx1MDAzZWlvdmFfc3RhcnQgPSAwO1xuIDI1NTpcdFx0bWhpX2N0cmwtXHUwMDNlaW92YV9zdG9wID0gYWJfcGNpLVx1MDAzZWRtYV9tYXNrO1xuIDI1NjpcdFx0bWhpX2N0cmwtXHUwMDNlc2JsX3NpemUgPSBTWl81MTJLO1xuIDI1NzpcdFx0bWhpX2N0cmwtXHUwMDNlc2VnX2xlbiA9IFNaXzUxMks7XG4gMjU4Olx0XHRtaGlfY3RybC1cdTAwM2VmYmNfZG93bmxvYWQgPSB0cnVlO1xuIDI1OTpcdFx0bWhpX2N0cmwtXHUwMDNlcnVudGltZV9nZXQgPSBhdGgxMmtfbWhpX29wX3J1bnRpbWVfZ2V0O1xuIDI2MDpcdFx0bWhpX2N0cmwtXHUwMDNlcnVudGltZV9wdXQgPSBhdGgxMmtfbWhpX29wX3J1bnRpbWVfcHV0O1xuIDI2MTpcdFx0bWhpX2N0cmwtXHUwMDNlc3RhdHVzX2NiID0gYXRoMTJrX21oaV9vcF9zdGF0dXNfY2I7XG4gMjYyOlx0XHRtaGlfY3RybC1cdTAwM2VyZWFkX3JlZyA9IGF0aDEya19taGlfb3BfcmVhZF9yZWc7XG4gMjYzOlx0XHRtaGlfY3RybC1cdTAwM2V3cml0ZV9yZWcgPSBhdGgxMmtfbWhpX29wX3dyaXRlX3JlZztcbiAyNjQ6XHRcbiAyNjU6XHRcdHJldCA9IG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyKG1oaV9jdHJsLCBhYi1cdTAwM2Vod19wYXJhbXMtXHUwMDNlbWhpX2NvbmZpZyk7XG4gMjY2Olx0XHRpZiAocmV0KSB7XG4gMjY3Olx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byByZWdpc3RlciB0byBtaGkgYnVzLCBlcnIgPSAlZFxcblwmIzM0OywgcmV0KTtcbiAyNjg6XHRcdFx0Z290byBmcmVlX2NvbnRyb2xsZXI7XG4gMjY5Olx0XHR9XG4gMjcwOlx0XG4gMjcxOlx0XHRyZXR1cm4gMDtcbiAyNzI6XHRcbiAyNzM6XHRmcmVlX2NvbnRyb2xsZXI6XG4gMjc0Olx0XHRtaGlfZnJlZV9jb250cm9sbGVyKG1oaV9jdHJsKTtcbiAyNzU6XHRcdGFiX3BjaS1cdTAwM2VtaGlfY3RybCA9IE5VTEw7XG4gMjc2Olx0XHRyZXR1cm4gcmV0O1xuIDI3NzpcdH1cbiAyNzg6XHRcbiAyNzk6XHR2b2lkIGF0aDEya19taGlfdW5yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpKVxuIDI4MDpcdHtcbiAyODE6XHRcdHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2N0cmwgPSBhYl9wY2ktXHUwMDNlbWhpX2N0cmw7XG4gMjgyOlx0XG4gMjgzOlx0XHRtaGlfdW5yZWdpc3Rlcl9jb250cm9sbGVyKG1oaV9jdHJsKTtcbiAyODQ6XHRcdGtmcmVlKG1oaV9jdHJsLVx1MDAzZWlycSk7XG4gMjg1Olx0XHRtaGlfZnJlZV9jb250cm9sbGVyKG1oaV9jdHJsKTtcbiAyODY6XHRcdGFiX3BjaS1cdTAwM2VtaGlfY3RybCA9IE5VTEw7XG4gMjg3Olx0fVxuIDI4ODpcdFxuIDI4OTpcdHN0YXRpYyBjaGFyICphdGgxMmtfbWhpX3N0YXRlX3RvX3N0cihlbnVtIGF0aDEya19taGlfc3RhdGUgbWhpX3N0YXRlKVxuIDI5MDpcdHtcbiAyOTE6XHRcdHN3aXRjaCAobWhpX3N0YXRlKSB7XG4gMjkyOlx0XHRjYXNlIEFUSDEyS19NSElfSU5JVDpcbiAyOTM6XHRcdFx0cmV0dXJuIFwmIzM0O0lOSVRcJiMzNDs7XG4gMjk0Olx0XHRjYXNlIEFUSDEyS19NSElfREVJTklUOlxuIDI5NTpcdFx0XHRyZXR1cm4gXCYjMzQ7REVJTklUXCYjMzQ7O1xuIDI5NjpcdFx0Y2FzZSBBVEgxMktfTUhJX1BPV0VSX09OOlxuIDI5NzpcdFx0XHRyZXR1cm4gXCYjMzQ7UE9XRVJfT05cJiMzNDs7XG4gMjk4Olx0XHRjYXNlIEFUSDEyS19NSElfUE9XRVJfT0ZGOlxuIDI5OTpcdFx0XHRyZXR1cm4gXCYjMzQ7UE9XRVJfT0ZGXCYjMzQ7O1xuIDMwMDpcdFx0Y2FzZSBBVEgxMktfTUhJX1BPV0VSX09GRl9LRUVQX0RFVjpcbiAzMDE6XHRcdFx0cmV0dXJuIFwmIzM0O1BPV0VSX09GRl9LRUVQX0RFVlwmIzM0OztcbiAzMDI6XHRcdGNhc2UgQVRIMTJLX01ISV9GT1JDRV9QT1dFUl9PRkY6XG4gMzAzOlx0XHRcdHJldHVybiBcJiMzNDtGT1JDRV9QT1dFUl9PRkZcJiMzNDs7XG4gMzA0Olx0XHRjYXNlIEFUSDEyS19NSElfU1VTUEVORDpcbiAzMDU6XHRcdFx0cmV0dXJuIFwmIzM0O1NVU1BFTkRcJiMzNDs7XG4gMzA2Olx0XHRjYXNlIEFUSDEyS19NSElfUkVTVU1FOlxuIDMwNzpcdFx0XHRyZXR1cm4gXCYjMzQ7UkVTVU1FXCYjMzQ7O1xuIDMwODpcdFx0Y2FzZSBBVEgxMktfTUhJX1RSSUdHRVJfUkRETTpcbiAzMDk6XHRcdFx0cmV0dXJuIFwmIzM0O1RSSUdHRVJfUkRETVwmIzM0OztcbiAzMTA6XHRcdGNhc2UgQVRIMTJLX01ISV9SRERNX0RPTkU6XG4gMzExOlx0XHRcdHJldHVybiBcJiMzNDtSRERNX0RPTkVcJiMzNDs7XG4gMzEyOlx0XHRkZWZhdWx0OlxuIDMxMzpcdFx0XHRyZXR1cm4gXCYjMzQ7VU5LTk9XTlwmIzM0OztcbiAzMTQ6XHRcdH1cbiAzMTU6XHR9O1xuIDMxNjpcdFxuIDMxNzpcdHN0YXRpYyB2b2lkIGF0aDEya19taGlfc2V0X3N0YXRlX2JpdChzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpLFxuIDMxODpcdFx0XHRcdFx0ICAgICBlbnVtIGF0aDEya19taGlfc3RhdGUgbWhpX3N0YXRlKVxuIDMxOTpcdHtcbiAzMjA6XHRcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBhYl9wY2ktXHUwMDNlYWI7XG4gMzIxOlx0XG4gMzIyOlx0XHRzd2l0Y2ggKG1oaV9zdGF0ZSkge1xuIDMyMzpcdFx0Y2FzZSBBVEgxMktfTUhJX0lOSVQ6XG4gMzI0Olx0XHRcdHNldF9iaXQoQVRIMTJLX01ISV9JTklULCBcdTAwMjZhYl9wY2ktXHUwMDNlbWhpX3N0YXRlKTtcbiAzMjU6XHRcdFx0YnJlYWs7XG4gMzI2Olx0XHRjYXNlIEFUSDEyS19NSElfREVJTklUOlxuIDMyNzpcdFx0XHRjbGVhcl9iaXQoQVRIMTJLX01ISV9JTklULCBcdTAwMjZhYl9wY2ktXHUwMDNlbWhpX3N0YXRlKTtcbiAzMjg6XHRcdFx0YnJlYWs7XG4gMzI5Olx0XHRjYXNlIEFUSDEyS19NSElfUE9XRVJfT046XG4gMzMwOlx0XHRcdHNldF9iaXQoQVRIMTJLX01ISV9QT1dFUl9PTiwgXHUwMDI2YWJfcGNpLVx1MDAzZW1oaV9zdGF0ZSk7XG4gMzMxOlx0XHRcdGJyZWFrO1xuIDMzMjpcdFx0Y2FzZSBBVEgxMktfTUhJX1BPV0VSX09GRjpcbiAzMzM6XHRcdGNhc2UgQVRIMTJLX01ISV9QT1dFUl9PRkZfS0VFUF9ERVY6XG4gMzM0Olx0XHRjYXNlIEFUSDEyS19NSElfRk9SQ0VfUE9XRVJfT0ZGOlxuIDMzNTpcdFx0XHRjbGVhcl9iaXQoQVRIMTJLX01ISV9QT1dFUl9PTiwgXHUwMDI2YWJfcGNpLVx1MDAzZW1oaV9zdGF0ZSk7XG4gMzM2Olx0XHRcdGNsZWFyX2JpdChBVEgxMktfTUhJX1RSSUdHRVJfUkRETSwgXHUwMDI2YWJfcGNpLVx1MDAzZW1oaV9zdGF0ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMDAyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBBbmFseXNpcyBvZiB0aGUgTUhJIERldmljZSBTdGFydHVwIFNlcXVlbmNlKioKCk9rYXksIHNvIGBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcmAgcmVnaXN0ZXJzIHRoZSBjb250cm9sbGVyIOKAkyB0aGF0IG11Y2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBCdXQgdGhlIGNydWNpYWwgcXVlc3Rpb24gbmFnczogd2hlcmUgaW4gdGhlIGNvZGUgaXMgdGhlIGFjdHVhbCBNSEkgZGV2aWNlIHBvd2VyZWQgb24/IFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIHBpZWNlIEkmIzM5O20gbWlzc2luZy4gR2l2ZW4gdGhlIG5hbWUsIG15IGludHVpdGlvbiBzYXlzIHRoZSByZWFsIHdvcmsgcHJvYmFibHkgaGFwcGVucyBpbiBgYXRoMTJrX21oaV9zdGFydGAuIEkgbmVlZCB0byBkaXZlIGludG8gdGhhdCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0byB2ZXJpZnkgbXkgdGhvdWdodCBwcm9jZXNzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgaHVuY2ggaXMgY29ycmVjdCwgb3IgaWYgdGhlcmUmIzM5O3MgYW5vdGhlciBsb2NhdGlvbiB0byBpbnZlc3RpZ2F0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX21oaV9zdGFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM9NDA2PXN0YXRpYyBpbnQgYXRoMTJrX21oaV9zZXRfc3RhdGUoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTQ4MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM6NDgyOmludCBhdGgxMmtfbWhpX3N0YXJ0KHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2kpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTQ4My17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuaD0yMD1lbnVtIGF0aDEya19taGlfc3RhdGUge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmgtMzMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5oOjM0OmludCBhdGgxMmtfbWhpX3N0YXJ0KHN0cnVjdCBhdGgxMmtfcGNpICphcl9wY2kpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuaC0zNS12b2lkIGF0aDEya19taGlfc3RvcChzdHJ1Y3QgYXRoMTJrX3BjaSAqYXJfcGNpLCBib29sIGlzX3N1c3BlbmQpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTQyOD1pbnQgYXRoMTJrX3BjaV9wb3dlcl91cChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTQ0Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTQ0NzpcdHJldCA9IGF0aDEya19taGlfc3RhcnQoYWJfcGNpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTQ0OC1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2NzcKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgUG93ZXItVXAgU2VxdWVuY2Ugb2YgdGhlIGF0aDEyayBQQ0kgRHJpdmVyKioKCkFscmlnaHQsIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBwb3dlci11cCBzZXF1ZW5jZSBvZiB0aGUgYGF0aDEya2AgZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgUENJLWJhc2VkIGRldmljZXMuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgYXRoMTJrX3BjaV9wb3dlcl91cGAgaXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciB0aGF0IHByb2Nlc3MuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIHRoaXMgZnVuY3Rpb24sIHNvIEkgbm90ZSB0aGF0IGl0IGNhbGxzIGBhdGgxMmtfbWhpX3N0YXJ0YC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZzsgaXQgc3VnZ2VzdHMgYSBtb2R1bGFyIGFwcHJvYWNoLCBsaWtlbHkgaW5kaWNhdGluZyB0aGF0IHRoZSBNSEkgKHByZXN1bWFibHkgTW9iaWxlIEhvc3QgSW50ZXJmYWNlKSBjb21wb25lbnQgaGFuZGxlcyB0aGUgY29tbXVuaWNhdGlvbiBhc3BlY3RzIGR1cmluZyBwb3dlci11cC4KCkJ1dCB0aGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGVyZSBpcyBgYXRoMTJrX3BjaV9wb3dlcl91cGAgaXRzZWxmIGJlaW5nIGNhbGxlZCBmcm9tPyBJIG5lZWQgdG8gdHJhY2UgYmFjayB0aGUgY2FsbCBzdGFjayB0byBzZWUgdGhlIGJyb2FkZXIgY29udGV4dC4gSXMgaXQgY2FsbGVkIGRpcmVjdGx5IGZyb20gdGhlIFBDSSBwcm9iZSBmdW5jdGlvbj8gSXMgaXQgYmVpbmcgY2FsbGVkIGZyb20gYSBwb3dlciBtYW5hZ2VtZW50IGNhbGxiYWNrPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgcG93ZXItdXAgcHJvY2VzcyBhbmQgcG90ZW50aWFsIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIGRyaXZlci4gRGV0ZXJtaW5pbmcgdGhpcyBjb250ZXh0IGlzIHRoZSBjcml0aWNhbCBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya19wY2lfcG93ZXJfdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTEzMTY9c3RhdGljIHZvaWQgYXRoMTJrX3BjaV9jb3JlZHVtcF9kb3dubG9hZChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTQyNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTQyODppbnQgYXRoMTJrX3BjaV9wb3dlcl91cChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNDI5LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE0ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaGlmX29wcyBhdGgxMmtfcGNpX2hpZl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNDg4LVx0LnBvd2VyX2Rvd24gPSBhdGgxMmtfcGNpX3Bvd2VyX2Rvd24sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE0ODk6XHQucG93ZXJfdXAgPSBhdGgxMmtfcGNpX3Bvd2VyX3VwLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNDkwLVx0LnN1c3BlbmQgPSBhdGgxMmtfcGNpX2hpZl9zdXNwZW5kLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmg9MTc0PWludCBhdGgxMmtfcGNpX3N0YXJ0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaDoxNzU6aW50IGF0aDEya19wY2lfcG93ZXJfdXAoc3RydWN0IGF0aDEya19iYXNlICphYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5oLTE3Ni12b2lkIGF0aDEya19wY2lfcG93ZXJfZG93bihzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBib29sIGlzX3N1c3BlbmQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDQ5OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgYGhpZl9vcHNgIENhbGxiYWNrKioKCkFscmlnaHQsIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBzZWN0aW9uIG9mIGNvZGUsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7QWgsIHRoaXMgaXMgYW4gYGhpZl9vcHNgIGNhbGxiYWNrLiYjMzQ7IFRoYXQgaW1tZWRpYXRlbHkgc2V0cyB0aGUgc3RhZ2UuIE5vdywgdGhlIG5leHQgY3J1Y2lhbCBxdWVzdGlvbiBwb3BzIHVwOiBXaGVyZSB0aGUgaGVsbCBpcyBgcG93ZXJfdXBgIGJlaW5nIGNhbGxlZD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBncmFwaCwgZXNwZWNpYWxseSBhcm91bmQgdGhlc2UgY2FsbGJhY2sgc3RydWN0dXJlcywgaXMgcGFyYW1vdW50LiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoaXMgcG9pbnQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIHRyaWdnZXJpbmcgaXQuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgaW5zaWdodHMgd2lsbCBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cG93ZXJfdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jPTMyND1zdGF0aWMgdm9pZCBhdGgxMmtfYWhiX3N0b3Aoc3RydWN0IGF0aDEya19iYXNlICphYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTMzMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MzM0OnN0YXRpYyBpbnQgYXRoMTJrX2FoYl9wb3dlcl91cChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zMzUte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM9NzA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTJrX2hpZl9vcHMgYXRoMTJrX2FoYl9oaWZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtNzEzLVx0Lm1hcF9zZXJ2aWNlX3RvX3BpcGUgPSBhdGgxMmtfYWhiX21hcF9zZXJ2aWNlX3RvX3BpcGUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjcxNDpcdC5wb3dlcl91cCA9IGF0aDEya19haGJfcG93ZXJfdXAsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTcxNS1cdC5wb3dlcl9kb3duID0gYXRoMTJrX2FoYl9wb3dlcl9kb3duLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jPTE4MT1pbnQgYXRoMTJrX2NvcmVfcmVzdW1lX2Vhcmx5KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMTg5LVx0cmVpbml0X2NvbXBsZXRpb24oXHUwMDI2YWItXHUwMDNlcmVzdGFydF9jb21wbGV0ZWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6MTkwOlx0cmV0ID0gYXRoMTJrX2hpZl9wb3dlcl91cChhYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0xOTEtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jPTgxNT1zdGF0aWMgaW50IGF0aDEya19jb3JlX3NvY19jcmVhdGUoc3RydWN0IGF0aDEya19iYXNlICphYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy04MzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYzo4MzI6XHRyZXQgPSBhdGgxMmtfaGlmX3Bvd2VyX3VwKGFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTgzMy1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYz0xNjc5PXN0YXRpYyB2b2lkIGF0aDEya19jb3JlX3Jlc2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0xNzY0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6MTc2NTpcdFx0YXRoMTJrX2hpZl9wb3dlcl91cChhYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0xNzY2LVx0XHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX0JPT1QsIFwmIzM0O3Jlc2V0IHN0YXJ0ZWRcXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5oPTYyND1zdHJ1Y3QgYXRoMTJrIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaC03NjktXHRzdHJ1Y3QgYXRoMTJrX2Z3X3N0YXRzIGZ3X3N0YXRzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmg6NzcwOlx0dW5zaWduZWQgbG9uZyBsYXN0X3R4X3Bvd2VyX3VwZGF0ZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5oLTc3MS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oPTEyPXN0cnVjdCBhdGgxMmtfaGlmX29wcyB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaC0xOC1cdHZvaWQgKCpzdG9wKShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmg6MTk6XHRpbnQgKCpwb3dlcl91cCkoc3RydWN0IGF0aDEya19iYXNlICphYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oLTIwLVx0dm9pZCAoKnBvd2VyX2Rvd24pKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGJvb2wgaXNfc3VzcGVuZCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaD0xMzA9c3RhdGljIGlubGluZSB2b2lkIGF0aDEya19oaWZfd3JpdGUzMihzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCB1MzIgYWRkcmVzcyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oLTEzNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmg6MTM2OnN0YXRpYyBpbmxpbmUgaW50IGF0aDEya19oaWZfcG93ZXJfdXAoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmgtMTM3LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmg6MTM4Olx0aWYgKCFhYi1cdTAwM2VoaWYub3BzLVx1MDAzZXBvd2VyX3VwKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaC0xMzktXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmgtMTQwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaDoxNDE6XHRyZXR1cm4gYWItXHUwMDNlaGlmLm9wcy1cdTAwM2Vwb3dlcl91cChhYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oLTE0Mi19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYz01NDcxPWludCBhdGgxMmtfbWFjX29wX2dldF90eHBvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtNTUwOC1cdFx0XHRtc2Vjc190b19qaWZmaWVzKEFUSDEyS19QREVWX1RYX1BPV0VSX1JFRlJFU0hfVElNRV9NU0VDUykgJiM0MztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM6NTUwOTpcdFx0XHRcdFx0IGFyLVx1MDAzZWxhc3RfdHhfcG93ZXJfdXBkYXRlKSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtNTUxMC1cdFx0Z290byBzZW5kX3R4X3Bvd2VyO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtNTUzMS1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmFyLVx1MDAzZWRhdGFfbG9jayk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jOjU1MzI6XHRhci1cdTAwM2VsYXN0X3R4X3Bvd2VyX3VwZGF0ZSA9IGppZmZpZXM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jLTU1MzMtXHRhdGgxMmtfZndfc3RhdHNfcmVzZXQoYXIpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM9NDA2PXN0YXRpYyBpbnQgYXRoMTJrX21oaV9zZXRfc3RhdGUoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTQyMC1cdGNhc2UgQVRIMTJLX01ISV9JTklUOlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYzo0MjE6XHRcdHJldCA9IG1oaV9wcmVwYXJlX2Zvcl9wb3dlcl91cChhYl9wY2ktXHUwMDNlbWhpX2N0cmwpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy00MjItXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtNDM4LVx0XHQgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM6NDM5Olx0XHRyZXQgPSBtaGlfc3luY19wb3dlcl91cChhYl9wY2ktXHUwMDNlbWhpX2N0cmwpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy00NDAtXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTMxNj1zdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2NvcmVkdW1wX2Rvd25sb2FkKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNDI3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNDI4OmludCBhdGgxMmtfcGNpX3Bvd2VyX3VwKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE0Mjkte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTQ4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19oaWZfb3BzIGF0aDEya19wY2lfaGlmX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE0ODgtXHQucG93ZXJfZG93biA9IGF0aDEya19wY2lfcG93ZXJfZG93bixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTQ4OTpcdC5wb3dlcl91cCA9IGF0aDEya19wY2lfcG93ZXJfdXAsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE0OTAtXHQuc3VzcGVuZCA9IGF0aDEya19wY2lfaGlmX3N1c3BlbmQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaD0xNzQ9aW50IGF0aDEya19wY2lfc3RhcnQoc3RydWN0IGF0aDEya19iYXNlICphYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5oOjE3NTppbnQgYXRoMTJrX3BjaV9wb3dlcl91cChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmgtMTc2LXZvaWQgYXRoMTJrX3BjaV9wb3dlcl9kb3duKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGJvb2wgaXNfc3VzcGVuZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MDc3CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBhdGgxMmsgRHJpdmVyIEluaXRpYWxpemF0aW9uIFBhdGgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCB0aGUgY3JpdGljYWwgZnVuY3Rpb24gYGF0aDEya19tYWNfc2V0dXBfY2hhbm5lbHNfcmF0ZXNgIGlzIHVucmVhY2hhYmxlIGluIHRoaXMgZW11bGF0ZWQgZW52aXJvbm1lbnQuIFRoZSBjYWxsIGNoYWluIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGBhdGgxMmtfY29yZV9pbml0YCBraWNrcyBldmVyeXRoaW5nIG9mZiwgY2FsbGluZyBgYXRoMTJrX2NvcmVfc29jX2NyZWF0ZWAsIHdoaWNoIHRoZW4gZGl2ZXMgaW50byB0aGUgcG93ZXItdXAgc2VxdWVuY2Ugd2l0aCBgYXRoMTJrX2hpZl9wb3dlcl91cGAuIFRoaXMgbGVhZHMgdG8gYGF0aDEya19wY2lfcG93ZXJfdXBgLCBhbmQgdWx0aW1hdGVseSBgYXRoMTJrX21oaV9zdGFydGAsIHdoaWNoIHJlbGllcyBvbiBgbWhpX3N5bmNfcG93ZXJfdXBgLgoKSGVyZSYjMzk7cyB0aGUgcHJvYmxlbTogYG1oaV9zeW5jX3Bvd2VyX3VwYCBpcyBkZXNpZ25lZCB0byB3YWl0IGZvciB0aGUgTUhJIGRldmljZSB0byBiZWNvbWUgcmVhZHksIGJ1dCBiZWNhdXNlIHdlJiMzOTtyZSBpbiBhIHZpcnR1YWxpemF0aW9uIHNldHVwIOKAkyBzcGVjaWZpY2FsbHksIHdpdGggc3l6a2FsbGVyIOKAkyB0aGUgTUhJIGRldmljZSBpc24mIzM5O3QgYWN0dWFsbHkgZW11bGF0ZWQuICBUaGlzIG1lYW5zIHRoYXQgYG1oaV9zeW5jX3Bvd2VyX3VwYCB3aWxsIGluZXZpdGFibHkgdGltZSBvdXQgb3IgZmFpbCB3aXRoIGFuIGVycm9yLgoKVGhlIHJpcHBsZSBlZmZlY3QgaXMgY2xlYXI6IGEgZmFpbHVyZSBpbiBgbWhpX3N5bmNfcG93ZXJfdXBgIGltbWVkaWF0ZWx5IGNhc2NhZGVzIHVwd2FyZHMsIGNhdXNpbmcgYGF0aDEya19taGlfc3RhcnRgLCBgYXRoMTJrX3BjaV9wb3dlcl91cGAsIGBhdGgxMmtfY29yZV9zb2NfY3JlYXRlYCwgYW5kIHVsdGltYXRlbHkgYGF0aDEya19jb3JlX2luaXRgIHRvIGFsbCBmYWlsLiBUaGlzIGVhcmx5IGFib3J0aW9uIG9mIHRoZSBpbml0aWFsaXphdGlvbiBwcmV2ZW50cyB1cyBmcm9tIGV2ZXIgcmVhY2hpbmcgYGF0aDEya19jb3JlX3FtaV9maXJtd2FyZV9yZWFkeWAsIHRodXMgYGF0aDEya19jb3JlX2h3X2dyb3VwX3N0YXJ0YCwgdGhlbiBgYXRoMTJrX21hY19yZWdpc3RlcmAsIGBhdGgxMmtfbWFjX2h3X3JlZ2lzdGVyYCwgYGF0aDEya19tYWNfc2V0dXBfcmVnaXN0ZXJgIGFuZCBtb3N0IGltcG9ydGFudGx5IGBhdGgxMmtfbWFjX3NldHVwX2NoYW5uZWxzX3JhdGVzYC4KClNvLCB0aGUgY29kZSBpbiBgYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlc2AgaXMgY29tcGxldGVseSBkZWFkIGNvZGUgaW4gdGhpcyBlbnZpcm9ubWVudCwgZ2l2ZW4gdGhlIGxhY2sgb2YgcHJvcGVyIE1ISSBlbXVsYXRpb24uIFRoZXJlZm9yZSwgSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYGZhbHNlYCBmb3IgdGhpcyB0YXJnZXQuIEl0JiMzOTtzIGEgd2FzdGUgb2YgcmVzb3VyY2VzIHRvIHRhcmdldCB0aGF0IGZ1bmN0aW9uLCBhdCBsZWFzdCBpbiB0aGlzIHNwZWNpZmljIHNjZW5hcmlvLgoKQmVmb3JlIEkgY29tbWl0IHRvIHRoaXMsIHRob3VnaCwgSSYjMzk7bSBnb2luZyB0byBkbyBhIHF1aWNrIHNjYW4gb2YgdGhlIGNvZGUgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSAqb3RoZXIqIHdheSB0byByZWFjaCBgYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlc2AuIEdvdHRhIGJlIHRob3JvdWdoLCBhZnRlciBhbGwhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya19tYWNfc2V0dXBfY2hhbm5lbHNfcmF0ZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jPTE0MTg2PXN0YXRpYyB2b2lkIGF0aDEya19tYWNfdXBkYXRlXzVfOV9naHpfY2hfbGlzdChzdHJ1Y3QgYXRoMTJrICphcixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jLTE0MjA1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYzoxNDIwNjpzdGF0aWMgaW50IGF0aDEya19tYWNfc2V0dXBfY2hhbm5lbHNfcmF0ZXMoc3RydWN0IGF0aDEyayAqYXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jLTE0MjA3LVx0XHRcdFx0XHQgICB1MzIgc3VwcG9ydGVkX2JhbmRzLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM9MTQ3NDM9c3RhdGljIGludCBhdGgxMmtfbWFjX3NldHVwX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMmsgKmFyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTQ3NTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jOjE0NzU2Olx0cmV0ID0gYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlcyhhcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTQ3NTctXHRcdFx0XHRcdCAgICAgIGNhcC1cdTAwM2VzdXBwb3J0ZWRfYmFuZHMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE3OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NTMyCgkJCQkJCQlvdXRwdXQ6IDE2MAoJCQkJCQkJdGhvdWdodHM6IDIwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbnJlYWNoYWJsZSBDb2RlIFBhdGggQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBjb2RlIHBhdGgsIHNwZWNpZmljYWxseSB0aGUgc2VjdGlvbiBzdGFydGluZyB3aXRoIGBhdGgxMmtfbWFjX3NldHVwX3JlZ2lzdGVyYCwgaXMgY29tcGxldGVseSBkZWFkLiBJJiMzOTt2ZSB0cmFjZWQgdGhlIGNhbGwgY2hhaW4sIGFuZCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7dmUgZm91bmQ6IGBhdGgxMmtfbWFjX3NldHVwX3JlZ2lzdGVyYCBpcyBvbmx5IGV2ZXIgaW52b2tlZCBmcm9tIGBhdGgxMmtfbWFjX2h3X3JlZ2lzdGVyYC4gIGBhdGgxMmtfbWFjX2h3X3JlZ2lzdGVyYCBpcywgaW4gdHVybiwgb25seSBjYWxsZWQgZnJvbSBgYXRoMTJrX21hY19yZWdpc3RlcmAuICBUaGF0IGZ1bmN0aW9uIGlzIG9ubHkgaW52b2tlZCBieSBgYXRoMTJrX2NvcmVfaHdfZ3JvdXBfc3RhcnRgLCB3aGljaCBpcyBvbmx5IGNhbGxlZCBmcm9tIGBhdGgxMmtfY29yZV9xbWlfZmlybXdhcmVfcmVhZHlgLiBBbmQsIGNyaXRpY2FsbHksIGBhdGgxMmtfY29yZV9xbWlfZmlybXdhcmVfcmVhZHlgIGlzIG9ubHkgdHJpZ2dlcmVkIHdoZW4gdGhlIGZpcm13YXJlIGlzIGFjdHVhbGx5IHJlYWR5LCB1c2luZyB0aGUgUU1JIGludGVyZmFjZS4KCkdpdmVuIHRoZSBjb250ZXh0LCB0aGUgZmlybXdhcmUgaXNuJiMzOTt0IHByZXNlbnQsIGFuZCB0aGUgTUhJIGluaXRpYWxpemF0aW9uIGZhaWxlZC4gIFRoZXJlZm9yZSwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIGVudGlyZSBzZXF1ZW5jZSDigJMgYW5kIHRodXMsIHRoZSBjYWxsIHRvIGBhdGgxMmtfbWFjX3NldHVwX3JlZ2lzdGVyYCDigJMgd2lsbCAqbmV2ZXIqIGJlIGV4ZWN1dGVkLiBHaXZlbiB0aGVzZSBjb25zdHJhaW50cywgdGhlcmUmIzM5O3Mgbm8gd2F5IHRvIG1lYW5pbmdmdWxseSBmdXp6IHRoaXMsIHNvIEkgd2lsbCBtYXJrIHRoaXMgcGF0aCBhcyBub3Qgd29ydGggZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTc6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBtb2RpZmllZCBjb2RlIGlzIGxvY2F0ZWQgaW4gdGhlIGF0aDEyayBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFF1YWxjb21tIFdpLUZpIDcgaGFyZHdhcmUgKFBDSWUgb3IgQUhCKSBhbmQgZmlybXdhcmUgdG8gaW5pdGlhbGl6ZS4gVGhlIGRyaXZlciByZWxpZXMgb24gdGhlIE1vZGVtIEhvc3QgSW50ZXJmYWNlIChNSEkpIGFuZCBRdWFsY29tbSBNZXNzYWdlIEludGVyZmFjZSAoUU1JKSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBmaXJtd2FyZS4gSW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRpb24sIHRoZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZmFpbHMgZWFybHkgZHVyaW5nIE1ISSBwb3dlci11cCAoYG1oaV9zeW5jX3Bvd2VyX3VwYCksIG1lYW5pbmcgdGhlIGZpcm13YXJlIHJlYWR5IGV2ZW50IGlzIG5ldmVyIHRyaWdnZXJlZC4gQ29uc2VxdWVudGx5LCB0aGUgTUFDIHJlZ2lzdHJhdGlvbiBwYXRoIChgYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlc2ApIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBtb2RpZmllZCBjb2RlIGlzIGxvY2F0ZWQgaW4gdGhlIGF0aDEyayBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFF1YWxjb21tIFdpLUZpIDcgaGFyZHdhcmUgKFBDSWUgb3IgQUhCKSBhbmQgZmlybXdhcmUgdG8gaW5pdGlhbGl6ZS4gVGhlIGRyaXZlciByZWxpZXMgb24gdGhlIE1vZGVtIEhvc3QgSW50ZXJmYWNlIChNSEkpIGFuZCBRdWFsY29tbSBNZXNzYWdlIEludGVyZmFjZSAoUU1JKSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBmaXJtd2FyZS4gSW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRpb24sIHRoZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZmFpbHMgZWFybHkgZHVyaW5nIE1ISSBwb3dlci11cCAoYG1oaV9zeW5jX3Bvd2VyX3VwYCksIG1lYW5pbmcgdGhlIGZpcm13YXJlIHJlYWR5IGV2ZW50IGlzIG5ldmVyIHRyaWdnZXJlZC4gQ29uc2VxdWVudGx5LCB0aGUgTUFDIHJlZ2lzdHJhdGlvbiBwYXRoIChgYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlc2ApIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTQ6MTQuOTMwNjk5NDc4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5NjgzNzYyNTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBtb2RpZmllZCBjb2RlIGlzIGxvY2F0ZWQgaW4gdGhlIGF0aDEyayBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFF1YWxjb21tIFdpLUZpIDcgaGFyZHdhcmUgKFBDSWUgb3IgQUhCKSBhbmQgZmlybXdhcmUgdG8gaW5pdGlhbGl6ZS4gVGhlIGRyaXZlciByZWxpZXMgb24gdGhlIE1vZGVtIEhvc3QgSW50ZXJmYWNlIChNSEkpIGFuZCBRdWFsY29tbSBNZXNzYWdlIEludGVyZmFjZSAoUU1JKSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBmaXJtd2FyZS4gSW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRpb24sIHRoZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZmFpbHMgZWFybHkgZHVyaW5nIE1ISSBwb3dlci11cCAoYG1oaV9zeW5jX3Bvd2VyX3VwYCksIG1lYW5pbmcgdGhlIGZpcm13YXJlIHJlYWR5IGV2ZW50IGlzIG5ldmVyIHRyaWdnZXJlZC4gQ29uc2VxdWVudGx5LCB0aGUgTUFDIHJlZ2lzdHJhdGlvbiBwYXRoIChgYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlc2ApIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNDoxNC45MzA3MDU4NThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MjcwMTYzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg4NzY0YzVlZTU4ZWFjYmQwODI4Nzg4MTcyYWY1ODQwOGNhMDNhYzhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMSAxNzoxNDoxMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuY1xcbmluZGV4IGEwOTI4ODkwNjcxYWMuLjU0NjhhOGQyZDVkNTYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmNcXG5AQCAtMTQyNzUsNiArMTQyNzUsNyBAQCBzdGF0aWMgaW50IGF0aDEya19tYWNfc2V0dXBfY2hhbm5lbHNfcmF0ZXMoc3RydWN0IGF0aDEyayAqYXIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHNpemVvZihhdGgxMmtfNmdoel9jaGFubmVscyksIEdGUF9LRVJORUwpO1xcbiBcXHRcXHRcXHRpZiAoIWNoYW5uZWxzKSB7XFxuIFxcdFxcdFxcdFxcdGtmcmVlKGFyLVxcdTAwM2VtYWMuc2JhbmRzW05MODAyMTFfQkFORF8yR0haXS5jaGFubmVscyk7XFxuK1xcdFxcdFxcdFxcdGFyLVxcdTAwM2VtYWMuc2JhbmRzW05MODAyMTFfQkFORF8yR0haXS5jaGFubmVscyA9IE5VTEw7XFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHRcXHRcXHR9XFxuIFxcbkBAIC0xNDMyNSw3ICsxNDMyNiw5IEBAIHN0YXRpYyBpbnQgYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlcyhzdHJ1Y3QgYXRoMTJrICphcixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgR0ZQX0tFUk5FTCk7XFxuIFxcdFxcdFxcdGlmICghY2hhbm5lbHMpIHtcXG4gXFx0XFx0XFx0XFx0a2ZyZWUoYXItXFx1MDAzZW1hYy5zYmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLmNoYW5uZWxzKTtcXG4rXFx0XFx0XFx0XFx0YXItXFx1MDAzZW1hYy5zYmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLmNoYW5uZWxzID0gTlVMTDtcXG4gXFx0XFx0XFx0XFx0a2ZyZWUoYXItXFx1MDAzZW1hYy5zYmFuZHNbTkw4MDIxMV9CQU5EXzZHSFpdLmNoYW5uZWxzKTtcXG4rXFx0XFx0XFx0XFx0YXItXFx1MDAzZW1hYy5zYmFuZHNbTkw4MDIxMV9CQU5EXzZHSFpdLmNoYW5uZWxzID0gTlVMTDtcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdFxcdFxcdH1cXG4gXFxuQEAgLTE0MzY1LDcgKzE0MzY4LDcgQEAgc3RhdGljIGludCBhdGgxMmtfbWFjX3NldHVwX2NoYW5uZWxzX3JhdGVzKHN0cnVjdCBhdGgxMmsgKmFyLFxcbiBcXHRcXHRcXHRcXHRcXHRrZnJlZShhci1cXHUwMDNlbWFjLnNiYW5kc1tOTDgwMjExX0JBTkRfMkdIWl0uY2hhbm5lbHMpO1xcbiBcXHRcXHRcXHRcXHRcXHRhci1cXHUwMDNlbWFjLnNiYW5kc1tOTDgwMjExX0JBTkRfMkdIWl0uY2hhbm5lbHMgPSBOVUxMO1xcbiBcXHRcXHRcXHRcXHRcXHRrZnJlZShhci1cXHUwMDNlbWFjLnNiYW5kc1tOTDgwMjExX0JBTkRfNkdIWl0uY2hhbm5lbHMpO1xcbi1cXHRcXHRcXHRcXHRcXHRhci1cXHUwMDNlbWFjLnNiYW5kc1tOTDgwMjExX0JBTkRfMkdIWl0uY2hhbm5lbHMgPSBOVUxMO1xcbitcXHRcXHRcXHRcXHRcXHRhci1cXHUwMDNlbWFjLnNiYW5kc1tOTDgwMjExX0JBTkRfNkdIWl0uY2hhbm5lbHMgPSBOVUxMO1xcbiBcXHRcXHRcXHRcXHRcXHRrZnJlZShjaGFubmVscyk7XFxuIFxcdFxcdFxcdFxcdFxcdGJhbmQtXFx1MDAzZWNoYW5uZWxzID0gTlVMTDtcXG4gXFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTQ6MTUuNDk0NjQ1OTA0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTM5MTE5Nzk4OTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBtb2RpZmllZCBjb2RlIGlzIGxvY2F0ZWQgaW4gdGhlIGF0aDEyayBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFF1YWxjb21tIFdpLUZpIDcgaGFyZHdhcmUgKFBDSWUgb3IgQUhCKSBhbmQgZmlybXdhcmUgdG8gaW5pdGlhbGl6ZS4gVGhlIGRyaXZlciByZWxpZXMgb24gdGhlIE1vZGVtIEhvc3QgSW50ZXJmYWNlIChNSEkpIGFuZCBRdWFsY29tbSBNZXNzYWdlIEludGVyZmFjZSAoUU1JKSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBmaXJtd2FyZS4gSW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRpb24sIHRoZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZmFpbHMgZWFybHkgZHVyaW5nIE1ISSBwb3dlci11cCAoYG1oaV9zeW5jX3Bvd2VyX3VwYCksIG1lYW5pbmcgdGhlIGZpcm13YXJlIHJlYWR5IGV2ZW50IGlzIG5ldmVyIHRyaWdnZXJlZC4gQ29uc2VxdWVudGx5LCB0aGUgTUFDIHJlZ2lzdHJhdGlvbiBwYXRoIChgYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlc2ApIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4ODc2NGM1ZWU1OGVhY2JkMDgyODc4ODE3MmFmNTg0MDhjYTAzYWM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAxNzoxNDoxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jXG5pbmRleCBhMDkyODg5MDY3MWFjLi41NDY4YThkMmQ1ZDU2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuY1xuQEAgLTE0Mjc1LDYgKzE0Mjc1LDcgQEAgc3RhdGljIGludCBhdGgxMmtfbWFjX3NldHVwX2NoYW5uZWxzX3JhdGVzKHN0cnVjdCBhdGgxMmsgKmFyLFxuIFx0XHRcdFx0XHQgICBzaXplb2YoYXRoMTJrXzZnaHpfY2hhbm5lbHMpLCBHRlBfS0VSTkVMKTtcbiBcdFx0XHRpZiAoIWNoYW5uZWxzKSB7XG4gXHRcdFx0XHRrZnJlZShhci1cdTAwM2VtYWMuc2JhbmRzW05MODAyMTFfQkFORF8yR0haXS5jaGFubmVscyk7XG4rXHRcdFx0XHRhci1cdTAwM2VtYWMuc2JhbmRzW05MODAyMTFfQkFORF8yR0haXS5jaGFubmVscyA9IE5VTEw7XG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdFx0XHR9XG4gXG5AQCAtMTQzMjUsNyArMTQzMjYsOSBAQCBzdGF0aWMgaW50IGF0aDEya19tYWNfc2V0dXBfY2hhbm5lbHNfcmF0ZXMoc3RydWN0IGF0aDEyayAqYXIsXG4gXHRcdFx0XHRcdCAgIEdGUF9LRVJORUwpO1xuIFx0XHRcdGlmICghY2hhbm5lbHMpIHtcbiBcdFx0XHRcdGtmcmVlKGFyLVx1MDAzZW1hYy5zYmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLmNoYW5uZWxzKTtcbitcdFx0XHRcdGFyLVx1MDAzZW1hYy5zYmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLmNoYW5uZWxzID0gTlVMTDtcbiBcdFx0XHRcdGtmcmVlKGFyLVx1MDAzZW1hYy5zYmFuZHNbTkw4MDIxMV9CQU5EXzZHSFpdLmNoYW5uZWxzKTtcbitcdFx0XHRcdGFyLVx1MDAzZW1hYy5zYmFuZHNbTkw4MDIxMV9CQU5EXzZHSFpdLmNoYW5uZWxzID0gTlVMTDtcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0XHRcdH1cbiBcbkBAIC0xNDM2NSw3ICsxNDM2OCw3IEBAIHN0YXRpYyBpbnQgYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlcyhzdHJ1Y3QgYXRoMTJrICphcixcbiBcdFx0XHRcdFx0a2ZyZWUoYXItXHUwMDNlbWFjLnNiYW5kc1tOTDgwMjExX0JBTkRfMkdIWl0uY2hhbm5lbHMpO1xuIFx0XHRcdFx0XHRhci1cdTAwM2VtYWMuc2JhbmRzW05MODAyMTFfQkFORF8yR0haXS5jaGFubmVscyA9IE5VTEw7XG4gXHRcdFx0XHRcdGtmcmVlKGFyLVx1MDAzZW1hYy5zYmFuZHNbTkw4MDIxMV9CQU5EXzZHSFpdLmNoYW5uZWxzKTtcbi1cdFx0XHRcdFx0YXItXHUwMDNlbWFjLnNiYW5kc1tOTDgwMjExX0JBTkRfMkdIWl0uY2hhbm5lbHMgPSBOVUxMO1xuK1x0XHRcdFx0XHRhci1cdTAwM2VtYWMuc2JhbmRzW05MODAyMTFfQkFORF82R0haXS5jaGFubmVscyA9IE5VTEw7XG4gXHRcdFx0XHRcdGtmcmVlKGNoYW5uZWxzKTtcbiBcdFx0XHRcdFx0YmFuZC1cdTAwM2VjaGFubmVscyA9IE5VTEw7XG4gXHRcdFx0XHRcdHJldHVybiByZXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNDoxNS40OTQ2NDgwNjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDcyMzU5MjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFdpRmkgNyBEcml2ZXIgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuY2AuIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGRvdWJsZS1mcmVlIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlIGJ5IHNldHRpbmcgYSBwb2ludGVyIHRvIE5VTEwgYWZ0ZXIgZnJlZWluZyBtZW1vcnkuIEdvb2QgZGVmZW5zaXZlIGNvZGluZywgYnV0IGRvZXMgaXQgd2FycmFudCBmdXp6aW5nP1xuXG5UaGlzIGlzIGZvciB0aGUgYXRoMTJrIGRyaXZlciwgd2hpY2gsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgaXMgc3BlY2lmaWMgdG8gUXVhbGNvbW0ncyBXaS1GaSA3IHNpbGljb24uIFRoZSBiaWcgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGlzIGZ1enplci1mcmllbmRseS4gQ2FuIEkgZ2V0IGF3YXkgd2l0aCBydW5uaW5nIGl0IGluIHNvbWV0aGluZyBsaWtlIFFFTVU/IFR5cGljYWxseSwgdGhlc2UgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycywgZXNwZWNpYWxseSB3aXJlbGVzcyBvbmVzLCBkZW1hbmQgZWl0aGVyIHBoeXNpY2FsIGhhcmR3YXJlIG9yIHByZXR0eSBlbGFib3JhdGUgZW11bGF0aW9uLiBJIGtub3cgKm1hYzgwMjExX2h3c2ltKiBvZmZlcnMgc29tZSBlbXVsYXRpb24sIGJ1dCB0aGF04oCZcyBhICpnZW5lcmljKiBmcmFtZXdvcmssIGFuZCB0aGlzIGlzIGEgc3BlY2lhbGl6ZWQgKmhhcmR3YXJlIGRyaXZlciouXG5cbk5vdywgdGhlIG5leHQgbG9naWNhbCBxdWVzdGlvbiDigJMgZG9lcyBzeXprYWxsZXIgdGFyZ2V0IHRoaXM/IExldCBtZSBjaGVjay4gUmlnaHQsIHN5emthbGxlciAqZG9lc24ndCogZW11bGF0ZSB0aGUgYXRoMTJrIGhhcmR3YXJlLiBIbW0uLi4gbWF5YmUsICptYXliZSogSSBjb3VsZCByZWFjaCBzb21lIGluaXRpYWxpemF0aW9uIGNvZGUgaWYgaXQgd2VyZSBhIFVTQiBkcml2ZXIsIGJ1dCBhdGgxMmsgaXMgUENJIG9yIEFIQiwgSSB0aGluay4gVGhhdOKAmXMgcHJvYmFibHkgYSBkZWFkIGVuZC5cblxuSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcsIGFuZCB0aGUgUENJIHNvdXJjZS4gTGV0IG1lIGxvb2sgYXQgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZ2AgYW5kIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jYCwgdG8gc2VlIGlmIEkgY2FuIGdldCBhIGJldHRlciBzZW5zZSBvZiBob3cgdGhpcyBkcml2ZXIgaXMgYXJjaGl0ZWN0ZWQgYW5kIHdoYXQgc29ydCBvZiBlbnRyeSBwb2ludHMgYXJlIGV4cG9zZWQuIE1pZ2h0IGdpdmUgbWUgYSBiZXR0ZXIgaWRlYSBvZiBob3cgcmVhbGlzdGljIGZ1enppbmcgdGhpcyB0aGluZyByZWFsbHkgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0ODQsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNDoyMC45NjcwMTA0MTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc4MzMwMzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDEya19tYWNfc2V0dXBfY2hhbm5lbHNfcmF0ZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYz0xNDE4Nj1zdGF0aWMgdm9pZCBhdGgxMmtfbWFjX3VwZGF0ZV81XzlfZ2h6X2NoX2xpc3Qoc3RydWN0IGF0aDEyayAqYXIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jLTE0MjA1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM6MTQyMDY6c3RhdGljIGludCBhdGgxMmtfbWFjX3NldHVwX2NoYW5uZWxzX3JhdGVzKHN0cnVjdCBhdGgxMmsgKmFyLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTQyMDctXFx0XFx0XFx0XFx0XFx0ICAgdTMyIHN1cHBvcnRlZF9iYW5kcyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM9MTQ3NDM9c3RhdGljIGludCBhdGgxMmtfbWFjX3NldHVwX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMmsgKmFyLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNDc1NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jOjE0NzU2OlxcdHJldCA9IGF0aDEya19tYWNfc2V0dXBfY2hhbm5lbHNfcmF0ZXMoYXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNDc1Ny1cXHRcXHRcXHRcXHRcXHQgICAgICBjYXAtXFx1MDAzZXN1cHBvcnRlZF9iYW5kcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTQ6MjEuMzQ1MzQ4Mjg0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1NzYyNzExMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDYWxsZXJzIG9mIGBhdGgxMmtfbWFjX3NldHVwX3JlZ2lzdGVyYCoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgYXRoMTJrX21hY19zZXR1cF9yZWdpc3RlcmAuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmaWd1cmUgb3V0ICp3aG8qIGlzIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBhbmQgKndoeSouIEkgd2FudCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIGZsb3cuIEkgbmVlZCB0byBrbm93IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZCBmcm9tLiBJcyBpdCBkdXJpbmcgZHJpdmVyIGluaXRpYWxpemF0aW9uPyBJcyBpdCB0cmlnZ2VyZWQgYnkgc29tZSBldmVudD8gSXMgaXQgcGFydCBvZiBzb21lIG1vcmUgY29tcGxleCByZWdpc3RyYXRpb24gc2VxdWVuY2U/ICBUaGUgY29udGV4dCB3aWxsIGdpdmUgbWUgY2x1ZXMgYWJvdXQgaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdCB3aXRoaW4gdGhlIGJyb2FkZXIgYGF0aDEya2AgZHJpdmVyLiBUaW1lIHRvIHRyYWNrIGRvd24gYWxsIGl0cyBjYWxsIHNpdGVzIVxuXG5cbiIsIklucHV0VG9rZW5zIjozNTE4LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTQ6MjQuNDAyOTc5NTE2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODQwNDQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMmtfbWFjX3NldHVwX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM9MTQ3MjA9c3RhdGljIHZvaWQgYXRoMTJrX21hY19od191bnJlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfaHcgKmFoKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNDc0Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jOjE0NzQzOnN0YXRpYyBpbnQgYXRoMTJrX21hY19zZXR1cF9yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrICphcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jLTE0NzQ0LVxcdFxcdFxcdFxcdCAgICAgdTMyICpodF9jYXAsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jPTE0Nzc3PXN0YXRpYyBpbnQgYXRoMTJrX21hY19od19yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrX2h3ICphaClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTQ4MTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYzoxNDgxNTpcXHRcXHRyZXQgPSBhdGgxMmtfbWFjX3NldHVwX3JlZ2lzdGVyKGFyLCBcXHUwMDI2aHRfY2FwX2luZm8sIGh3LVxcdTAwM2V3aXBoeS1cXHUwMDNlYmFuZHMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTQ4MTYtXFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTQ6MjQuNTQxMzg5OTQ3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0NjY1NTQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZSwgdXNpbmcgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6XG5cbioqRGVlcCBEaXZlIG9uIGBhdGgxMmtfbWFjX2h3X3JlZ2lzdGVyYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBkaXNjdXNzaW9uIGhhcyBtb3ZlZCBvbiB0byBgYXRoMTJrX21hY19od19yZWdpc3RlcmAuIFRoYXQgZnVuY3Rpb24gY2FsbC4uLiBpdCBhbHdheXMgZ2V0cyBteSBhdHRlbnRpb24uIFRoaXMgaXMgbGlrZWx5IHRoZSBwb2ludCB3aGVyZSB0aGUgaGFyZHdhcmUgaXRzZWxmIGlzIGZpbmFsbHkgaW5pdGlhbGl6ZWQgYW5kIGZvcm1hbGx5IGludGVncmF0ZWQgaW50byB0aGUgYXRoMTJrIGRyaXZlcidzIG9wZXJhdGlvbmFsIGZsb3cuIEknbSBpbW1lZGlhdGVseSBydW5uaW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucyBpbiBteSBoZWFkOiBXaGF0IHNwZWNpZmljIGhhcmR3YXJlIHJlc291cmNlcyBhcmUgYmVpbmcgY2xhaW1lZCBhbmQgbWFwcGVkIGF0IHRoaXMgcG9pbnQ/IElzIHRoZXJlIGFueSBzb3J0IG9mIGRpcmVjdCByZWdpc3RlciBhY2Nlc3MgaGFwcGVuaW5nIGhlcmU/IE1vcmUgaW1wb3J0YW50bHksIGFtIEkgcmVtZW1iZXJpbmcgYWxsIHRoZSBudWFuY2VzIG9mIHRoaXMgc3BlY2lmaWMgcmVnaXN0cmF0aW9uIHByb2Nlc3M/IElzIHRoZXJlIGFueSBvcHBvcnR1bml0eSBmb3Igb3B0aW1pemF0aW9uIGluIGhvdyBpdCdzIGRvbmU/IE9yIGFueSBjaGFuY2Ugb2YgYW4gaW50ZXJlc3Rpbmcgb3IgZGFuZ2Vyb3VzIGJ1ZyBiZWluZyBoaWRkZW4gaGVyZT8gTmVlZCB0byBrZWVwIGluIG1pbmQsIGFuZCB2ZXJpZnkgaWYgaXQgYWxpZ25zIHdpdGggbXkgZXhwZWN0YXRpb25zIG9mIGhvdyBhbiBhdGgxMmsgZHJpdmVyIHNob3VsZCB3b3JrLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBjcml0aWNhbCBzZWN0aW9uLCBhbmQgb25lIEkgd291bGQgd2FudCB0byBkaXNzZWN0IGNhcmVmdWxseSBpZiBJIHdlcmUgZGVidWdnaW5nIGEgd2lyZWxlc3MgcGVyZm9ybWFuY2UgaXNzdWUgb3IgaW52ZXN0aWdhdGluZyBhIHBhcnRpY3VsYXJseSBuYXN0eSBkcml2ZXIgaGFuZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGZ1bGx5IHVwIHRvIHNwZWVkIG9uIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNjMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNDoyOC4xODgwNDg2MjNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1ODc1NTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDEya19tYWNfaHdfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYz0xNDc0Mz1zdGF0aWMgaW50IGF0aDEya19tYWNfc2V0dXBfcmVnaXN0ZXIoc3RydWN0IGF0aDEyayAqYXIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jLTE0Nzc2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM6MTQ3Nzc6c3RhdGljIGludCBhdGgxMmtfbWFjX2h3X3JlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfaHcgKmFoKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTQ3Nzgte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYz0xNTI5NT1pbnQgYXRoMTJrX21hY19yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphZylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTUzMDMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYzoxNTMwNDpcXHRcXHRyZXQgPSBhdGgxMmtfbWFjX2h3X3JlZ2lzdGVyKGFoKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jLTE1MzA1LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jPTY5MjM9c3RhdGljIGludCBhdGgxMmtfcmVnX2NoYW5fbGlzdF9ldmVudChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYy03MDAxLVxcdCAqIHNvIHRoZSBjb21wbGV0aW9uIGNhbm5vdCBiZSBtYXJrZWQgYXQgdGhhdCBwb2ludC5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jOjcwMDI6XFx0ICogVGhpcyBib290LXRpbWUgdXBkYXRlIGlzIGhhbmRsZWQgaW4gYXRoMTJrX21hY19od19yZWdpc3RlcigpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYy03MDAzLVxcdCAqIGJlZm9yZSByZWdpc3RlcmluZyB0aGUgaGFyZHdhcmUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE0OjI4LjMwMzkyOTI2NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTI3ODY1MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgaW4gdGhlIGZpcnN0IHBlcnNvbiBhbmQgYXNzdW1pbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBgYXRoMTJrX21hY19yZWdpc3RlcmAqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gdGhlIHRleHQgbWVudGlvbnMgYGF0aDEya19tYWNfcmVnaXN0ZXJgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoYXQgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgTUFDIGxheWVyIHdpdGhpbiB0aGUgYXRoMTJrIGRyaXZlci4gV2hhdCdzIHRoZSBjb250ZXh0IGhlcmU/IEknbSBwcm9iYWJseSBjb25zaWRlcmluZyBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgb3IgcGVyaGFwcyBkZWJ1Z2dpbmcgYSBzcGVjaWZpYyBpc3N1ZSByZWxhdGVkIHRvIE1BQyBvcGVyYXRpb25zIG9uIGFuIGF0aDEyay1iYXNlZCBkZXZpY2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aGF0KiB0aGUgcXVlc3Rpb24gb3Igc2NlbmFyaW8gYXJvdW5kIHRoYXQgZnVuY3Rpb24gaXMuIEFyZSB3ZSB0cm91Ymxlc2hvb3RpbmcgYSByZWdpc3RlciBhY2Nlc3MgcHJvYmxlbT8gQSByZXNvdXJjZSBjb25mbGljdD8gT3IgYXJlIHdlIGluIHRoZSBhcmNoaXRlY3R1cmUgcGhhc2UsIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyB0aGUgTUFDIGFuZCB0aGUgZHJpdmVyIGludGVyYWN0IGR1cmluZyBpbml0aWFsIGJyaW5ndXA/IEFyZSB0aGVyZSBzcGVjaWZpYyByZWdpc3RlcnMgYmVpbmcgbWVudGlvbmVkLCBvciBzcGVjaWZpYyBpc3N1ZXM/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4NDAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNDozMS42OTY3MTg0MDdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzIwMjU0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMmtfbWFjX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jPTExNTU9c3RhdGljIGludCBhdGgxMmtfY29yZV9od19ncm91cF9zdGFydChzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphZylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTExNzgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6MTE3OTpcXHRyZXQgPSBhdGgxMmtfbWFjX3JlZ2lzdGVyKGFnKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0xMTgwLVxcdGlmIChXQVJOX09OKHJldCkpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jPTE1MjczPXZvaWQgYXRoMTJrX21hY19tbG9fdGVhcmRvd24oc3RydWN0IGF0aDEya19od19ncm91cCAqYWcpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jLTE1Mjk0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM6MTUyOTU6aW50IGF0aDEya19tYWNfcmVnaXN0ZXIoc3RydWN0IGF0aDEya19od19ncm91cCAqYWcpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNTI5Ni17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5oPTE1ND12b2lkIGF0aDEya19tYWNfdW5yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphZyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuaDoxNTU6aW50IGF0aDEya19tYWNfcmVnaXN0ZXIoc3RydWN0IGF0aDEya19od19ncm91cCAqYWcpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmgtMTU2LWludCBhdGgxMmtfbWFjX2FsbG9jYXRlKHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTQ6MzEuODQ5OTI3NTU3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTcwMDQwNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgYXRoMTJrX2NvcmVfaHdfZ3JvdXBfc3RhcnRgIEZ1bmN0aW9uIENhbGwqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgYW5kIHRoZSBxdWVzdGlvbiB0aGF0J3MgcmVhbGx5IG5hZ2dpbmcgYXQgbWUgaXM6IHdoYXQncyBnb2luZyBvbiB3aXRoIHRoaXMgYGF0aDEya19jb3JlX2h3X2dyb3VwX3N0YXJ0YCBmdW5jdGlvbj8gSXQncyBrZXksIEkga25vdyBpdC4gV2UncmUgdGFsa2luZyBhYm91dCB0aGUgY29yZSBoYXJkd2FyZSBncm91cCBzdGFydCBmdW5jdGlvbiwgYW5kIHRoYXQgdXN1YWxseSBpbmRpY2F0ZXMgc29tZSBmdW5kYW1lbnRhbCBpbml0aWFsaXphdGlvbiBvciBhY3RpdmF0aW9uIHBoYXNlIGZvciBhIHNwZWNpZmljIHBhcnQgb2YgdGhlIGhhcmR3YXJlLCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSB3aXJlbGVzcyBpbnRlcmZhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgY29udGV4dCwgc3BlY2lmaWNhbGx5IHdoYXQgaXTigJlzIHN0YXJ0aW5nIGluIHRoZSBmaXJzdCBwbGFjZS5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyBoYXJkd2FyZSBncm91cCBpdCdzIG1hbmFnaW5nLCBhbmQgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSwgaWYgYW55LiBJcyBpdCByZWxhdGVkIHRvIHRoZSBQSFksIE1BQywgb3IgcGVyaGFwcyBhIHNwZWNpZmljIHJhZGlvIGNoYWluPyBJcyB0aGVyZSBhIHByZWNlZGluZyBzZXR1cCB0aGF0IG11c3QgYmUgZG9uZSBiZWZvcmUgdGhpcyBjYW4gcnVuIHdpdGhvdXQgaXNzdWU/IFBlcmhhcHMgdGhlcmUncyBhIHJlYXNvbiBmb3IgY29uY2VybnMgcmVsYXRlZCB0byBpdHMgZGVwZW5kZW5jaWVzLCBvciBhIHNwZWNpZmljIHJlYXNvbiB3aHkgaXRzIGxvY2F0aW9uIGluIHRoZSBicm9hZGVyIGNvZGUgaXMgaW50ZXJlc3RpbmcuIEknbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTE5LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTQ6MzUuMTQ2OTM0OTQ1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDY1MDA1MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX2NvcmVfaHdfZ3JvdXBfc3RhcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM9MTEyOT1zdGF0aWMgaW50IGF0aDEya19jb3JlX21sb19zZXR1cChzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphZylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTExNTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6MTE1NTpzdGF0aWMgaW50IGF0aDEya19jb3JlX2h3X2dyb3VwX3N0YXJ0KHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTExNTYte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM9MTIzMD1zdGF0aWMgaW5saW5lXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6MTIzMTpib29sIGF0aDEya19jb3JlX2h3X2dyb3VwX3N0YXJ0X3JlYWR5KHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTEyMzIte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM9MTMxMT1pbnQgYXRoMTJrX2NvcmVfcW1pX2Zpcm13YXJlX3JlYWR5KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0xMzQ0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jOjEzNDU6XFx0aWYgKGF0aDEya19jb3JlX2h3X2dyb3VwX3N0YXJ0X3JlYWR5KGFnKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jOjEzNDY6XFx0XFx0cmV0ID0gYXRoMTJrX2NvcmVfaHdfZ3JvdXBfc3RhcnQoYWcpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTEzNDctXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM9MTYzOD1zdGF0aWMgdm9pZCBhdGgxMmtfY29yZV9yZXN0YXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTE2NjEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6MTY2MjpcXHRcXHRpZiAoIWF0aDEya19jb3JlX2h3X2dyb3VwX3N0YXJ0X3JlYWR5KGFnKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTE2NjMtXFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZhZy1cXHUwMDNlbXV0ZXgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNDozNS40OTM0NDA4MjRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU5NDM5Njk5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFFNSSBGaXJtd2FyZSBSZWFkeSBDYWxsKipcblxuT2theSwgc28gSSd2ZSBoaXQgYSBwb2ludCBpbiB0aGUgY29kZSB3aGVyZSB0aGUgUU1JIGZpcm13YXJlIGlzIHJlYWR5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJcyB0aGUgYGF0aDEya2AgZHJpdmVyLCBzcGVjaWZpY2FsbHksIGJlaW5nIHN1YmplY3RlZCB0byBmdXp6aW5nP1wiIFR5cGljYWxseSwgeW91IGRvbid0IGZ1enogUENJIGRldmljZXMgZGlyZWN0bHkgdW5sZXNzIHRoZXJlJ3Mgc29tZSBraW5kIG9mIHZpcnR1YWwgZGV2aWNlIG9yIFBDSSBlbXVsYXRpb24gaW4gcGxhY2UuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCBzeXprYWxsZXIsIHdoaWNoIGlzIHRoZSBmdXp6ZXIgdGhhdCdzIGxpa2VseSBkcml2aW5nIHRoaXMsIHdvdWxkbid0IGhhdmUgUENJIGVtdWxhdGlvbiBzZXQgdXAgc3BlY2lmaWNhbGx5IGZvciBgYXRoMTJrYC4gQnV0LCB3YWl0IGEgbWludXRlLi4uIHdoYXQgaWYgaXQgKmlzbid0KiBhIFBDSSBkZXZpY2U/IFdoYXQgaWYgaXQncyBhIHBsYXRmb3JtIGRldmljZT8gVGhhdCBjaGFuZ2VzIHRoaW5ncy4gTGV0J3MgZGlnIGluIGEgYml0IGZ1cnRoZXIsIGFuZCBjaGVjayB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuY2AgZmlsZS4gVGhhdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBjbHVlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQyOCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE0OjM5LjA4Nzg0MTEwMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAyMTg2NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX2FoYl9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jPTk5OD1hdGgxMmtfYWhiX2dldF9kZXZpY2VfZmFtaWx5KGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTEwMTgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoxMDE5OnN0YXRpYyBpbnQgYXRoMTJrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTAyMC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jPTExODc9aW50IGF0aDEya19haGJfcmVnaXN0ZXJfZHJpdmVyKGNvbnN0IGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xMjA4LVxcdGFoYl9kcml2ZXItXFx1MDAzZWRyaXZlci5vZl9tYXRjaF90YWJsZSA9IGRyaXZlci1cXHUwMDNlaWRfdGFibGU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoxMjA5OlxcdGFoYl9kcml2ZXItXFx1MDAzZXByb2JlICA9IGF0aDEya19haGJfcHJvYmU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xMjEwLVxcdGFoYl9kcml2ZXItXFx1MDAzZXJlbW92ZSA9IGF0aDEya19haGJfcmVtb3ZlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNDozOS4xNjgwNjYwMzhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQxNzAzMTIzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipRRU1VIGFuZCBhdGgxMms6IEEgU2ltdWxhdGlvbiBDaGFsbGVuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGFjdHVhbGx5IHRyaWdnZXIgdGhpcyBgYXRoMTJrYCBjb2RlIHdpdGhpbiBhIFFFTVUgZW52aXJvbm1lbnQuIFRoZSBvYnZpb3VzIHJvYWRibG9ja3MgYXJlIHByZXR0eSBjbGVhcjogd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlLCBuZWl0aGVyIGBhdGgxMmtfYWhiX3Byb2JlYCBub3IgYGF0aDEya19wY2lfcHJvYmVgIHdpbGwgZXZlciBiZSBjYWxsZWQgaW4gYSBcIm5vcm1hbFwiIHNjZW5hcmlvLiBPciwgaWYgSSB0cnkgYSB3b3JrYXJvdW5kIGxpa2UgZmFraW5nIGEgcGxhdGZvcm0gZGV2aWNlLCB0aGUgY29kZSB3aWxsIGp1c3QgZXJyb3Igb3V0IHF1aWNrbHkgd2hlbiBpdCBjYW4ndCByZWFkIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMgb3IgY29tbXVuaWNhdGUgd2l0aCB0aGUgZmlybXdhcmUuXG5cbldhaXQgYSBzZWNvbmTigKZzeXprYWxsZXIgbWlnaHQgYmUgYWJsZSB0byBjcmVhdGUgdGhvc2UgcGxhdGZvcm0gZGV2aWNlcyB1c2luZyBgc3l6X2RldnJlc2Agb3Igc29tZXRoaW5nIHNpbWlsYXIsIHJpZ2h0PyBCdXQgZXZlbiBpZiBJIGdvIGRvd24gdGhhdCBwYXRoLCBpdCB3b24ndCBiZSBhYmxlIHRvIHByb3ZpZGUgdGhlIGZpcm13YXJlIGFuZCBhbGwgdGhlIG5lY2Vzc2FyeSBoYXJkd2FyZSByZXNwb25zZXMgcmVxdWlyZWQgdG8gZ2V0IHRoZSBjb2RlIHRvIHJlYWNoIGBhdGgxMmtfY29yZV9xbWlfZmlybXdhcmVfcmVhZHlgLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgYXRoMTJrX2NvcmVfcW1pX2Zpcm13YXJlX3JlYWR5YCB0byBzZWUgd2hhdCB0aGUgY29uZGl0aW9ucyBhcmUuIEl0J3MgcHJvYmFibHkgdGhlIGNydWNpYWwgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwOTcsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTQ6NDMuNTg1MTAwOTI2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzMwODA0MDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX2NvcmVfcW1pX2Zpcm13YXJlX3JlYWR5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jPTEyOTI9c3RhdGljIHZvaWQgYXRoMTJrX2NvcmVfdHJpZ2dlcl9wYXJ0bmVyKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0xMzEwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jOjEzMTE6aW50IGF0aDEya19jb3JlX3FtaV9maXJtd2FyZV9yZWFkeShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTEzMTIte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM9MTM4NT1zdGF0aWMgaW50IGF0aDEya19jb3JlX3JlY29uZmlndXJlX29uX2NyYXNoKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0xNDA4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jOjE0MDk6XFx0cmV0ID0gYXRoMTJrX2NvcmVfcW1pX2Zpcm13YXJlX3JlYWR5KGFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0xNDEwLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaD0xMjA1PXN0cnVjdCBhdGgxMmtfZndfc3RhdHNfcGRldiB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaC0xMjY0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5oOjEyNjU6aW50IGF0aDEya19jb3JlX3FtaV9maXJtd2FyZV9yZWFkeShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaC0xMjY2LXZvaWQgYXRoMTJrX2NvcmVfaHdfZ3JvdXBfY2xlYW51cChzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphZyk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jPTM5NjU9c3RhdGljIHZvaWQgYXRoMTJrX3FtaV9kcml2ZXJfZXZlbnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTQwMTQtXFx0XFx0XFx0XFx0ICBcXHUwMDI2YWItXFx1MDAzZWRldl9mbGFncyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYzo0MDE1OlxcdFxcdFxcdHJldCA9IGF0aDEya19jb3JlX3FtaV9maXJtd2FyZV9yZWFkeShhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy00MDE2LVxcdFxcdFxcdGlmICghcmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNDo0My43MTgxOTA3NThaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA3MTc2OTU4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFFNSSBNZXNzYWdlIEhhbmRsaW5nIGluIGF0aDEyayoqXG5cbk9rYXksIHNvIGBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudF93b3JrYCBnZXRzIHRyaWdnZXJlZCB3aGVuZXZlciBhIFFNSSBtZXNzYWdlIGNvbWVzIGluLiBUaGF0IG1ha2VzIHNlbnNlIOKAkyBRTUkgaXMgdGhlIFF1YWxjb21tIE1lc3NhZ2UgSW50ZXJmYWNlLCBhbmQgaXQgdHlwaWNhbGx5IHRyYXZlbHMgb3ZlciB0aGUgSVBDIHJvdXRlciwgcmlnaHQ/IFNwZWNpZmljYWxseSwgQUZfUUlQQ1JUUiwgb3IgYSBzaW1pbGFyIGNvbW11bmljYXRpb24gY2hhbm5lbC4gSSdtIHdvbmRlcmluZyB0aG91Z2guLi4gY2FuIHN5emthbGxlciBpbmplY3QgdGhlc2UgUU1JIG1lc3NhZ2VzPyBXZSB1c2Ugc3l6a2FsbGVyIGZvciBmdXp6aW5nLCBhbmQgaXQncyBhbHdheXMgZ29vZCB0byBjb25zaWRlciBhbGwgYXR0YWNrIHN1cmZhY2VzLlxuXG5JIHJlbWVtYmVyIHN5emthbGxlciAqZG9lcyogaGF2ZSBzb21lIEFGX1FJUENSVFIgc3VwcG9ydCwgYnV0IGlzbuKAmXQgdGhhdCBwcmltYXJpbHkgZm9yIHVzZXJzcGFjZSBjb21tdW5pY2F0aW5nIHdpdGggdGhlIGtlcm5lbD8gSGVyZSwgdGhlIGBhdGgxMmtgIGRyaXZlciBpcyBjb21tdW5pY2F0aW5nIHdpdGggdGhlICpmaXJtd2FyZSogdXNpbmcgUU1JLCB3aGljaCBpcyBhIGRpZmZlcmVudCBjb250ZXh0LiBJIG5lZWQgdG8gY2xhcmlmeSBpZiBpdCBpcyB1c2luZyB0aGUgUVJUUiBzdWJzeXN0ZW0gd2hpY2ggd291bGQgYmUgcmVsZXZhbnQgdG8gaG93IGl0IGNvbW11bmljYXRlcyB3aXRoIFFNSS4gTGV0IG1lIGRpZyBhIGJpdCBkZWVwZXIgYW5kIHNlZSBpZiBgYXRoMTJrYCBpcyBsZXZlcmFnaW5nIFFSVFIgaW4gYW55IG9mIHRoaXMgY29tbXVuaWNhdGlvbiBwYXRoLiBUaGF0IHdpbGwgYmUgdGhlIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE2MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNDo0Ny43ODk5NjM5MjdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjc2NjkwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxcnRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZWR1bXAuaD0zNz1zdHJ1Y3QgYXRoMTJrX2R1bXBfZmlsZV9kYXRhIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZWR1bXAuaC00NS1cXHRfX2xlMzIgY2hpcF9pZDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmVkdW1wLmg6NDY6XFx0LyogcXJ0ciBpbnN0YW5jZSBpZCAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZWR1bXAuaDo0NzpcXHRfX2xlMzIgcXJ0cl9pZDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmVkdW1wLmgtNDgtXFx0LyogcGNpIGRvbWFpbiBpZCAqL1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oYWwuaD0xMTM1PXN0cnVjdCBhdGgxMmtfaHdfcmVncyB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hhbC5oLTEyMTMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oYWwuaDoxMjE0OlxcdHUzMiBxcnRyX25vZGVfaWQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oYWwuaC0xMjE1LX07XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTg4OT1zdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2FzcG1fZGlzYWJsZShzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy05MDctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzo5MDg6c3RhdGljIHZvaWQgYXRoMTJrX3BjaV91cGRhdGVfcXJ0cl9ub2RlX2lkKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy05MDkte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy05MTMtXFx0LyogT24gcGxhdGZvcm1zIHdpdGggdHdvIG9yIG1vcmUgaWRlbnRpY2FsIG1oaSBkZXZpY2VzLCBxbWkgc2VydmljZSBydW5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjkxNDpcXHQgKiB3aXRoIGlkZW50aWNhbCBxcnRyLW5vZGUtaWQuIEJlY2F1c2Ugb2YgdGhpcyBpZGVudGljYWwgSUQgcXJ0ci1sb29rdXBcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTkxNS1cXHQgKiBjYW5ub3QgcmVnaXN0ZXIgbW9yZSB0aGFuIG9uZSBxbWkgc2VydmljZSB3aXRoIGlkZW50aWNhbCBub2RlIElELlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xMzE2PXN0YXRpYyB2b2lkIGF0aDEya19wY2lfY29yZWR1bXBfZG93bmxvYWQoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTM1Mi1cXHRmaWxlX2RhdGEtXFx1MDAzZWNoaXBfaWQgPSBjcHVfdG9fbGUzMihhYl9wY2ktXFx1MDAzZWRldl9pZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxMzUzOlxcdGZpbGVfZGF0YS1cXHUwMDNlcXJ0cl9pZCA9IGNwdV90b19sZTMyKGFiX3BjaS1cXHUwMDNlYWItXFx1MDAzZXFtaS5zZXJ2aWNlX2luc19pZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xMzU0LVxcdGZpbGVfZGF0YS1cXHUwMDNlYnVzX2lkID0gY3B1X3RvX2xlMzIocGNpX2RvbWFpbl9ucihhYl9wY2ktXFx1MDAzZXBkZXYtXFx1MDAzZWJ1cykpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xNDI4PWludCBhdGgxMmtfcGNpX3Bvd2VyX3VwKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE0NDQtXFx0aWYgKGF0aDEya19md19mZWF0dXJlX3N1cHBvcnRlZChhYiwgQVRIMTJLX0ZXX0ZFQVRVUkVfTVVMVElfUVJUUl9JRCkpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNDQ1OlxcdFxcdGF0aDEya19wY2lfdXBkYXRlX3FydHJfbm9kZV9pZChhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNDQ2LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaC02Mi0jZGVmaW5lIFBDSUVfTE9DQUxfUkVHX1FSVFJfTk9ERV9JRChhYikgXFxcXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmg6NjM6XFx0KChhYiktXFx1MDAzZWhhbC5yZWdzLVxcdTAwM2VxcnRyX25vZGVfaWQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaC02NC0jZGVmaW5lIERPTUFJTl9OVU1CRVJfTUFTS1xcdFxcdFxcdEdFTk1BU0soNywgNClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM9MzgxND1zdGF0aWMgdm9pZCBhdGgxMmtfcW1pX21zZ19tZW1fcmVxdWVzdF9jYihzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pX2hkbCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjM4MTU6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy0zODE2LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHFtaV90eG4gKnR4bixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM9Mzg1OT1zdGF0aWMgdm9pZCBhdGgxMmtfcW1pX21zZ19tZW1fcmVhZHlfY2Ioc3RydWN0IHFtaV9oYW5kbGUgKnFtaV9oZGwsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYzozODYwOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTM4NjEtXFx0XFx0XFx0XFx0XFx0c3RydWN0IHFtaV90eG4gKnR4bixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM9Mzg3MT1zdGF0aWMgdm9pZCBhdGgxMmtfcW1pX21zZ19md19yZWFkeV9jYihzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pX2hkbCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjM4NzI6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTM4NzMtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBxbWlfdHhuICp0eG4sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jPTM5MTA9c3RhdGljIGludCBhdGgxMmtfcW1pX29wc19uZXdfc2VydmVyKHN0cnVjdCBxbWlfaGFuZGxlICpxbWlfaGRsLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy0zOTE0LVxcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBxbWktXFx1MDAzZWFiO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM6MzkxNTpcXHRzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EgPSBcXHUwMDI2cW1pLVxcdTAwM2VzcTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTM5MTYtXFx0aW50IHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmg9MTM1PXN0cnVjdCBhdGgxMmtfcW1pIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmgtMTM3LVxcdHN0cnVjdCBxbWlfaGFuZGxlIGhhbmRsZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5oOjEzODpcXHRzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciBzcTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5oLTEzOS1cXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgZXZlbnRfd29yaztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaGFsX3FjYzIwNzIuYz05PWNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfcmVncyBxY2MyMDcyX3JlZ3MgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF9xY2MyMDcyLmMtOTUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9oYWxfcWNjMjA3Mi5jOjk2OlxcdC5xcnRyX25vZGVfaWQgPSAweDFlMDMzMDAsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9oYWxfcWNjMjA3Mi5jLTk3LX07XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF9xY245Mjc0LmM9MjE1PWNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfcmVncyBxY245Mjc0X3YxX3JlZ3MgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF9xY245Mjc0LmMtMzAwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaGFsX3FjbjkyNzQuYzozMDE6XFx0LnFydHJfbm9kZV9pZCA9IDB4MWUwMzE2NCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF9xY245Mjc0LmMtMzAyLX07XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF9xY245Mjc0LmM9MzA0PWNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfcmVncyBxY245Mjc0X3YyX3JlZ3MgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF9xY245Mjc0LmMtMzk1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaGFsX3FjbjkyNzQuYzozOTY6XFx0LnFydHJfbm9kZV9pZCA9IDB4MWUwMzE2NCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF9xY245Mjc0LmMtMzk3LX07XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF93Y243ODUwLmM9MTc0PWNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfcmVncyB3Y243ODUwX3JlZ3MgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF93Y243ODUwLmMtMjU5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaGFsX3djbjc4NTAuYzoyNjA6XFx0LnFydHJfbm9kZV9pZCA9IDB4MWUwMzE2NCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF93Y243ODUwLmMtMjYxLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE0OjQ3LjkxMjczODUyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0ODY2NzY0NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBJbnZlc3RpZ2F0aW9uIG9mIHRoZSBhdGgxMmsgRHJpdmVyIGFuZCBRUlRSKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBzeXprYWxsZXIgY2FuIGludGVyYWN0IHdpdGggdGhlIGF0aDEyayBkcml2ZXIsIHNwZWNpZmljYWxseSBob3cgaXQgbGV2ZXJhZ2VzIFFSVFIgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgZmlybXdhcmUuIEkga25vdyB0aGUgZHJpdmVyIHVzZXMgUVJUUiB0byB0YWxrIHRvIHRoZSBmaXJtd2FyZSwgYnV0IG15IHF1ZXN0aW9uIGlzIHdoZXRoZXIgc3l6a2FsbGVyIGlzIGVtdWxhdGluZyBRUlRSIG5vZGVzIHRvIGZvb2wgdGhlIGRyaXZlciBpbnRvIHRoaW5raW5nIGl0J3MgdGFsa2luZyB0byB0aGUgYWN0dWFsIGZpcm13YXJlLlxuXG5UaGUgYW5zd2VyLCBhcyBmYXIgYXMgSSB1bmRlcnN0YW5kLCBpcyBuby4gU3l6a2FsbGVyIGNhbiBpbmplY3QgUVJUUiBwYWNrZXRzIGRpcmVjdGx5IGludG8gdGhlIHNvY2tldCwgYnV0IHRoZSBhY3R1YWwgUVJUUiBub2RlcyB0aGVtc2VsdmVzIGFyZSB0eXBpY2FsbHkgc2V0IHVwIGFuZCByZWdpc3RlcmVkIGJ5IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGRyaXZlcnMg4oCTIHRoaW5ncyBsaWtlIE1ISSBvciBTTUQuIFxuXG5BaCwgYnV0IGhlcmUncyBhIHRob3VnaHQ6IGlmIHN5emthbGxlciBjYW4gY3JlYXRlIGl0cyAqb3duKiB2aXJ0dWFsIFFSVFIgbm9kZSBhbmQgc2VuZCBRTUkgbWVzc2FnZXMsIGNvdWxkIHRoYXQgcG90ZW50aWFsbHkgdHJpZ2dlciB0aGUgYGF0aDEya19xbWlfb3BzX25ld19zZXJ2ZXJgIGZ1bmN0aW9uPyBCdXQgd2FpdCBhIG1pbnV0ZSwgaXNuJ3QgdGhhdCBmdW5jdGlvbiBjYWxsZWQgd2hlbiBhICpuZXcgc2VydmVyKiBpcyByZWdpc3RlcmVkIG9uIHRoZSBRUlRSIGJ1cz8gVGhlIGF0aDEyayBkcml2ZXIgaXMgYWN0dWFsbHkgYSAqY2xpZW50KiwgaXNuJ3QgaXQ/IEl0IHJlZ2lzdGVycyBpdHMgb3duIFFNSSBoYW5kbGUgYW5kIHRoZW4gd2FpdHMgZm9yIHRoZSBmaXJtd2FyZSB0byBhY3QgYXMgdGhlIHNlcnZlci5cblxuT2theSwgc28gaWYgc3l6a2FsbGVyIGNyZWF0ZXMgYSBRUlRSIHNlcnZlciBpbiB1c2Vyc3BhY2UsIHRoYXQgKm1pZ2h0KiB0cmlnZ2VyIGBhdGgxMmtfcW1pX29wc19uZXdfc2VydmVyYC4gTGV0J3Mgc3RlcCBiYWNrLCBhbmQgcmVtZW1iZXIgdGhhdCBhdGgxMmsgb25seSByZWdpc3RlcnMgaXRzIFFNSSBoYW5kbGUgaW5zaWRlIGBhdGgxMmtfcW1pX2luaXRfc2VydmljZWAuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlYCBpcyBldmVuIGNhbGxlZCwgYW5kIGl0J3MgdGltZSB0byBzdGFydCB0cmFjaW5nIHRoYXQgY2FsbCBjaGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5NzgsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTQ6NTUuMzk5NDE3OTU5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODcxOTQyMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX3FtaV9pbml0X3NlcnZpY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM9ODE1PXN0YXRpYyBpbnQgYXRoMTJrX2NvcmVfc29jX2NyZWF0ZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtODIzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jOjgyNDpcXHRyZXQgPSBhdGgxMmtfcW1pX2luaXRfc2VydmljZShhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtODI1LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM9Mzk2NT1zdGF0aWMgdm9pZCBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtNDAzNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjQwMzg6aW50IGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy00MDM5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmg9NjQ0PXZvaWQgYXRoMTJrX3FtaV9kZWluaXRfc2VydmljZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5oOjY0NTppbnQgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuaC02NDYtdm9pZCBhdGgxMmtfcW1pX2ZyZWVfcmVzb3VyY2Uoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE0OjU1LjU4NjYxNzI3N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTUyMzgyNDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHVuZGVyc3RhbmRpbmcsIGZyYW1lZCBhcyBteSBvd24gdGhvdWdodHM6XG5cbioqRGlzc2VjdGluZyB0aGUgQXRoMTJrIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGZvciB0aGUgYXRoMTJrIGRyaXZlciwgYW5kIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgYGF0aDEya19jb3JlX3NvY19jcmVhdGVgIGlzIGEga2V5IGZ1bmN0aW9uLiBJIHNlZSBpdCdzIGJlaW5nIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBhdGgxMmtfY29yZV9pbml0YC4gVGhhdCdzIG5vdCBzdXJwcmlzaW5nLCBidXQgaXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgYSBmZXcgdGhpbmdzLiBGaXJzdCwgYGF0aDEya19jb3JlX3NvY19jcmVhdGVgIGlzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBjb3JlIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyIG9yIGluaXRpYWxpemluZyBzb21lIGNydWNpYWwgc3RhdGUgcmVsYXRlZCB0byB0aGUgU3lzdGVtLW9uLUNoaXAgKFNvQykgaW50ZWdyYXRpb24uIEdpdmVuIHRoZSBuYW1lLCBpdCBhbG1vc3QgY2VydGFpbmx5IGRlYWxzIHdpdGggdGhlIHNwZWNpZmljIFNvQyBmZWF0dXJlcyBhbmQgcmVxdWlyZW1lbnRzLiBUaGUgZmFjdCB0aGF0IGl0J3MgY2FsbGVkIGZyb20gYGF0aDEya19jb3JlX2luaXRgIHN1Z2dlc3RzIGl0J3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBvdmVyYWxsIGRyaXZlcidzIGluc3RhbnRpYXRpb24gcHJvY2Vzcy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB3aGF0IGBhdGgxMmtfY29yZV9zb2NfY3JlYXRlYCAqYWN0dWFsbHkqIGRvZXMuIElzIGl0IGFsbG9jYXRpbmcgbWVtb3J5LCByZWdpc3RlcmluZyBoYXJkd2FyZSByZXNvdXJjZXMsIHNldHRpbmcgdXAgaW50ZXJydXB0IGhhbmRsZXJzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIHN0cnVjdHVyZSBvZiB0aGUgY2FsbCB0cmVlIGhpbnRzIHRoYXQgaXQncyBwcm9iYWJseSBvbmUgb2YgdGhlIGZpcnN0IHN0ZXBzIGluIHByZXBhcmluZyB0aGUgaGFyZHdhcmUgZm9yIG9wZXJhdGlvbi4gSSBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbidzIGltcGxlbWVudGF0aW9uIG5leHQsIGl0IHdpbGwgcHJvdmlkZSBtdWNoIG1vcmUgZGV0YWlsIG9uIHRoZSBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA2NCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE1OjAwLjUzOTAwMjU5M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0NzY1NzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDEya19jb3JlX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYz0xMDE5PXN0YXRpYyBpbnQgYXRoMTJrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xMTEwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MTExMTpcXHRyZXQgPSBhdGgxMmtfY29yZV9pbml0KGFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTExMTItXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM9MjE5MD12b2lkIGF0aDEya19jb3JlX2h3X2dyb3VwX3NldF9tbG9fY2FwYWJsZShzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphZylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTIyMzAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6MjIzMTppbnQgYXRoMTJrX2NvcmVfaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTIyMzIte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmg9MTI2Nz1pbnQgYXRoMTJrX2NvcmVfcHJlX2luaXQoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmg6MTI2ODppbnQgYXRoMTJrX2NvcmVfaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmF0aDEyayk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmgtMTI2OS12b2lkIGF0aDEya19jb3JlX2RlaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmF0aDEyayk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE1Mjg9c3RhdGljIGludCBhdGgxMmtfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNjQ4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTY0OTpcXHRyZXQgPSBhdGgxMmtfY29yZV9pbml0KGFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE2NTAtXFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNTowMC42NDM3NzQ0MDZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI0NzM0NjM2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGF0aDEyayBEcml2ZXIgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBgYXRoMTJrX2NvcmVfaW5pdGAgaXMgdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24sIGFuZCBpdCdzIGNhbGxlZCBmcm9tIGJvdGggYGF0aDEya19haGJfcHJvYmVgIGFuZCBgYXRoMTJrX3BjaV9wcm9iZWAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIGtub3cgc3l6a2FsbGVyIGlzbid0IGdvaW5nIHRvIGJlIGFibGUgdG8gaGl0IHRob3NlIHByb2JlcyBkaXJlY3RseS4gVGhleSByZXF1aXJlIHJlYWwgaGFyZHdhcmUgb3IgdmVyeSBzcGVjaWZpYyBlbXVsYXRlZCBkZXZpY2VzIOKAkyB0aGluZ3Mgc3l6a2FsbGVyIHR5cGljYWxseSBzdHJ1Z2dsZXMgd2l0aC5cblxuQnV0IHdhaXQgYSBtaW51dGUuLi4gSSByZWNhbGwgYHN5el9kZXZyZXNgLiBUaGF0J3MgdGhlIGtleSEgSWYgSSBjYW4gbGV2ZXJhZ2UgYHN5el9kZXZyZXNgIHRvIGZhYnJpY2F0ZSBhIHBsYXRmb3JtIGRldmljZSB0aGF0IGxvb2tzIGxpa2Ugd2hhdCBgYXRoMTJrX2FoYl9wcm9iZWAgZXhwZWN0cywgdGhlbiBzeXprYWxsZXIgKm1pZ2h0KiBhY3R1YWxseSB0cmlnZ2VyIHRoYXQgcHJvYmUgZnVuY3Rpb24uIEl0J3MgZGVmaW5pdGVseSB3b3J0aCBhIHNob3QuXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byBgYXRoMTJrX2FoYl9wcm9iZWAgYW5kIHNlZSB3aGF0IGl0J3MgbG9va2luZyBmb3IuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwbGF0Zm9ybSBkZXZpY2UgcmVxdWlyZW1lbnRzIHRvIGNyYWZ0IGEgc3VjY2Vzc2Z1bCBgc3l6X2RldnJlc2AgY2FsbC4gVW5kZXJzdGFuZGluZyB0aGUgcHJvYmUncyBsb2dpYyBpcyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk5NSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNTowNC44OTExMjQwNzVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTkyOTAyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMmtfYWhiX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM9OTk4PWF0aDEya19haGJfZ2V0X2RldmljZV9mYW1pbHkoY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTAxOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjEwMTk6c3RhdGljIGludCBhdGgxMmtfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xMDIwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM9MTE4Nz1pbnQgYXRoMTJrX2FoYl9yZWdpc3Rlcl9kcml2ZXIoY29uc3QgZW51bSBhdGgxMmtfZGV2aWNlX2ZhbWlseSBkZXZpY2VfaWQsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTEyMDgtXFx0YWhiX2RyaXZlci1cXHUwMDNlZHJpdmVyLm9mX21hdGNoX3RhYmxlID0gZHJpdmVyLVxcdTAwM2VpZF90YWJsZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjEyMDk6XFx0YWhiX2RyaXZlci1cXHUwMDNlcHJvYmUgID0gYXRoMTJrX2FoYl9wcm9iZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTEyMTAtXFx0YWhiX2RyaXZlci1cXHUwMDNlcmVtb3ZlID0gYXRoMTJrX2FoYl9yZW1vdmU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE1OjA1LjAyMzA1ODg5N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTAwOTE0MzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYGF0aDEya19haGJfcHJvYmVgLCBhcyBpZiBpdCB3ZXJlIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYGF0aDEya19haGJfcHJvYmVgKipcblxuQWxyaWdodCwgdGltZSB0byBjcmFjayBvcGVuIHRoaXMgYGF0aDEya19haGJfcHJvYmVgIGZ1bmN0aW9uLiBJIHJlY29nbml6ZSB0aGUgbmFtZSBpbW1lZGlhdGVseSDigJMgaXQncyBnb2luZyB0byBiZSB0aGUgQUhCIChBZHZhbmNlZCBIaWdoLXBlcmZvcm1hbmNlIEJ1cykgcHJvYmUgZnVuY3Rpb24gZm9yIHRoZSBhdGgxMmsgd2lyZWxlc3MgZHJpdmVyLCBubyBkb3VidC4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoaXMgaXMgd2hlcmUgdGhlIHN5c3RlbSB0cmllcyB0byBkZXRlY3QgYW5kIGluaXRpYWxpemUgYW4gYXRoMTJrIGRldmljZSBjb25uZWN0ZWQgdmlhIHRoZSBBSEIgaW50ZXJmYWNlLCBsaWtlbHkgb24gYW4gZW1iZWRkZWQgc3lzdGVtIG9yIHN5c3RlbS1vbi1hLWNoaXAuXG5cbkknbGwgYmUgbG9va2luZyBmb3IgdGhlIHR5cGljYWwgcHJvYmUgcm91dGluZSBzdGVwczogcmVzb3VyY2UgYWxsb2NhdGlvbiwgZGV2aWNlIGlkZW50aWZpY2F0aW9uLCBwZXJoYXBzIHNvbWUgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24sIGFuZCBmaW5hbGx5LCB0aGUgcmVnaXN0cmF0aW9uIG9mIHRoZSBkZXZpY2Ugd2l0aCB0aGUga2VybmVsLiBJIGV4cGVjdCB0aGVyZSB3aWxsIGJlIGNoZWNrcyBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSBoYXJkd2FyZSwgcHJvYmFibHkgdXNpbmcgcmVnaXN0ZXIgcmVhZHMgb3ZlciB0aGUgQUhCLiBUaGVyZSBtaWdodCBiZSBzb21lIHBvd2VyIG1hbmFnZW1lbnQgY29uc2lkZXJhdGlvbnMgaW52b2x2ZWQgaGVyZSBhcyB3ZWxsLCBlbmFibGluZyBjbG9ja3MgYW5kIHBvd2VyaW5nIHVwIHRoZSBkZXZpY2UuXG5cbkknbSBhbHNvIGFudGljaXBhdGluZyBzb21lIGVycm9yIGhhbmRsaW5nLiBUaGlzIGNvdWxkIGludm9sdmUgY2hlY2tpbmcgZm9yIGJ1cyBlcnJvcnMsIGRldmljZSB0aW1lb3V0cywgYW5kIHBvdGVudGlhbCBwcm9ibGVtcyBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZXJyb3IgY29kZXMgYW5kIHBvdGVudGlhbCByZWNvdmVyeSBtZWNoYW5pc21zIGltcGxlbWVudGVkLCB3aGljaCBjb3VsZCBpbmNsdWRlIHJldHJpZXMgb3IgZXZlbiBkZXZpY2UgcmVzZXRzLlxuXG5GaW5hbGx5LCBJJ2xsIGJlIHNlYXJjaGluZyBmb3IgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBhdGgxMmsgZHJpdmVyIHN0YWNrLiBJIGltYWdpbmUgaXQgc2V0cyB1cCB0aGUgbmVjZXNzYXJ5IGRhdGEgc3RydWN0dXJlcywgcG9zc2libHkgY3JlYXRlcyBhIHBsYXRmb3JtIGRldmljZSwgYW5kIGxpbmtzIGl0IHdpdGggdGhlIHJlc3Qgb2YgdGhlIHdpcmVsZXNzIGRyaXZlciBzdWJzeXN0ZW0uIEknbSBrZWVuIHRvIHNlZSB0aGUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZCwgd2hldGhlciBpdCB1c2VzIG11dGV4ZXMgb3Igc2VtYXBob3JlcywgdG8gZW5zdXJlIHRocmVhZC1zYWZlIG9wZXJhdGlvbiBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGRldmljZSBpcyBicm91Z2h0IHVwOyB0aW1pbmcgY2FuIGJlIGNyaXRpY2FsIGluIHN1Y2ggZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc2MCwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE1OjA5LjEyMzk3NjU5NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU5MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDE5LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTAxOTpcXHRzdGF0aWMgaW50IGF0aDEya19haGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4xMDIwOlxcdHtcXG4xMDIxOlxcdFxcdGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkO1xcbjEwMjI6XFx0XFx0c3RydWN0IGF0aDEya19haGIgKmFiX2FoYjtcXG4xMDIzOlxcdFxcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWI7XFxuMTAyNDpcXHRcXHR1MzIgYWRkcjtcXG4xMDI1OlxcdFxcdGludCByZXQ7XFxuMTAyNjpcXHRcXG4xMDI3OlxcdFxcdHJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgRE1BX0JJVF9NQVNLKDMyKSk7XFxuMTAyODpcXHRcXHRpZiAocmV0KSB7XFxuMTAyOTpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gc2V0IDMyLWJpdCBjb2hlcmVudCBkbWFcXFxcblxcXCIpO1xcbjEwMzA6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMDMxOlxcdFxcdH1cXG4xMDMyOlxcdFxcbjEwMzM6XFx0XFx0YWIgPSBhdGgxMmtfY29yZV9hbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBzaXplb2Yoc3RydWN0IGF0aDEya19haGIpLFxcbjEwMzQ6XFx0XFx0XFx0XFx0ICAgICAgIEFUSDEyS19CVVNfQUhCKTtcXG4xMDM1OlxcdFxcdGlmICghYWIpXFxuMTAzNjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xMDM3OlxcdFxcbjEwMzg6XFx0XFx0YWJfYWhiID0gYXRoMTJrX2FiX3RvX2FoYihhYik7XFxuMTAzOTpcXHRcXHRhYl9haGItXFx1MDAzZWFiID0gYWI7XFxuMTA0MDpcXHRcXHRhYi1cXHUwMDNlaGlmLm9wcyA9IFxcdTAwMjZhdGgxMmtfYWhiX2hpZl9vcHM7XFxuMTA0MTpcXHRcXHRhYi1cXHUwMDNlcGRldiA9IHBkZXY7XFxuMTA0MjpcXHRcXHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBhYik7XFxuMTA0MzpcXHRcXG4xMDQ0OlxcdFxcdGRldmljZV9pZCA9IGF0aDEya19haGJfZ2V0X2RldmljZV9mYW1pbHkocGRldik7XFxuMTA0NTpcXHRcXHRpZiAoZGV2aWNlX2lkIFxcdTAwM2U9IEFUSDEyS19ERVZJQ0VfRkFNSUxZX01BWCkge1xcbjEwNDY6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBnZXQgZGV2aWNlIGZhbWlseTogJWRcXFxcblxcXCIsIGRldmljZV9pZCk7XFxuMTA0NzpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbjEwNDg6XFx0XFx0XFx0Z290byBlcnJfY29yZV9mcmVlO1xcbjEwNDk6XFx0XFx0fVxcbjEwNTA6XFx0XFxuMTA1MTpcXHRcXHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX0FIQiwgXFxcIkFIQiBkZXZpY2UgZmFtaWx5IGlkOiAlZFxcXFxuXFxcIiwgZGV2aWNlX2lkKTtcXG4xMDUyOlxcdFxcbjEwNTM6XFx0XFx0YWJfYWhiLVxcdTAwM2VkZXZpY2VfZmFtaWx5X29wcyA9IFxcdTAwMjZhdGgxMmtfYWhiX2ZhbWlseV9kcml2ZXJzW2RldmljZV9pZF0tXFx1MDAzZW9wcztcXG4xMDU0OlxcdFxcbjEwNTU6XFx0XFx0LyogQ2FsbCBkZXZpY2Ugc3BlY2lmaWMgcHJvYmUuIFRoaXMgaXMgdGhlIGNhbGxiYWNrIHRoYXQgY2FuXFxuMTA1NjpcXHRcXHQgKiBiZSB1c2VkIHRvIG92ZXJyaWRlIGFueSBvcHMgaW4gZnV0dXJlXFxuMTA1NzpcXHRcXHQgKiBwcm9iZSBpcyB2YWxpZGF0ZWQgZm9yIE5VTEwgZHVyaW5nIHJlZ2lzdHJhdGlvbi5cXG4xMDU4OlxcdFxcdCAqL1xcbjEwNTk6XFx0XFx0cmV0ID0gYWJfYWhiLVxcdTAwM2VkZXZpY2VfZmFtaWx5X29wcy1cXHUwMDNlcHJvYmUocGRldik7XFxuMTA2MDpcXHRcXHRpZiAocmV0KSB7XFxuMTA2MTpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIHByb2JlIGRldmljZTogJWRcXFxcblxcXCIsIHJldCk7XFxuMTA2MjpcXHRcXHRcXHRnb3RvIGVycl9jb3JlX2ZyZWU7XFxuMTA2MzpcXHRcXHR9XFxuMTA2NDpcXHRcXG4xMDY1OlxcdFxcdC8qIFNldCBmaXhlZF9tZW1fcmVnaW9uIHRvIHRydWUgZm9yIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgZml4ZWQgbWVtb3J5XFxuMTA2NjpcXHRcXHQgKiByZXNlcnZhdGlvbiBmcm9tIERULiBJZiBtZW1vcnkgaXMgcmVzZXJ2ZWQgZnJvbSBEVCBmb3IgRlcsIGF0aDEyayBkcml2ZXJcXG4xMDY3OlxcdFxcdCAqIG5lZWQgbm90IHRvIGFsbG9jYXRlIG1lbW9yeS5cXG4xMDY4OlxcdFxcdCAqL1xcbjEwNjk6XFx0XFx0aWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3UzMihhYi1cXHUwMDNlZGV2LVxcdTAwM2VvZl9ub2RlLCBcXFwibWVtb3J5LXJlZ2lvblxcXCIsIFxcdTAwMjZhZGRyKSlcXG4xMDcwOlxcdFxcdFxcdHNldF9iaXQoQVRIMTJLX0ZMQUdfRklYRURfTUVNX1JFR0lPTiwgXFx1MDAyNmFiLVxcdTAwM2VkZXZfZmxhZ3MpO1xcbjEwNzE6XFx0XFxuMTA3MjpcXHRcXHRyZXQgPSBhdGgxMmtfY29yZV9wcmVfaW5pdChhYik7XFxuMTA3MzpcXHRcXHRpZiAocmV0KVxcbjEwNzQ6XFx0XFx0XFx0Z290byBlcnJfY29yZV9mcmVlO1xcbjEwNzU6XFx0XFxuMTA3NjpcXHRcXHRyZXQgPSBhdGgxMmtfYWhiX3Jlc291cmNlX2luaXQoYWIpO1xcbjEwNzc6XFx0XFx0aWYgKHJldClcXG4xMDc4OlxcdFxcdFxcdGdvdG8gZXJyX2NvcmVfZnJlZTtcXG4xMDc5OlxcdFxcbjEwODA6XFx0XFx0cmV0ID0gYXRoMTJrX2hhbF9zcm5nX2luaXQoYWIpO1xcbjEwODE6XFx0XFx0aWYgKHJldClcXG4xMDgyOlxcdFxcdFxcdGdvdG8gZXJyX3Jlc291cmNlX2RlaW5pdDtcXG4xMDgzOlxcdFxcbjEwODQ6XFx0XFx0cmV0ID0gYXRoMTJrX2NlX2FsbG9jX3BpcGVzKGFiKTtcXG4xMDg1OlxcdFxcdGlmIChyZXQpIHtcXG4xMDg2OlxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gYWxsb2NhdGUgY2UgcGlwZXM6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjEwODc6XFx0XFx0XFx0Z290byBlcnJfaGFsX3NybmdfZGVpbml0O1xcbjEwODg6XFx0XFx0fVxcbjEwODk6XFx0XFxuMTA5MDpcXHRcXHRhdGgxMmtfYWhiX2luaXRfcW1pX2NlX2NvbmZpZyhhYik7XFxuMTA5MTpcXHRcXG4xMDkyOlxcdFxcdHJldCA9IGF0aDEya19haGJfY29uZmlndXJlX3Jwcm9jKGFiKTtcXG4xMDkzOlxcdFxcdGlmIChyZXQpXFxuMTA5NDpcXHRcXHRcXHRnb3RvIGVycl9jZV9mcmVlO1xcbjEwOTU6XFx0XFxuMTA5NjpcXHRcXHRyZXQgPSBhdGgxMmtfYWhiX2NvbmZpZ19pcnEoYWIpO1xcbjEwOTc6XFx0XFx0aWYgKHJldCkge1xcbjEwOTg6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBjb25maWd1cmUgaXJxOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xMDk5OlxcdFxcdFxcdGdvdG8gZXJyX3Jwcm9jX2RlY29uZmlndXJlO1xcbjExMDA6XFx0XFx0fVxcbjExMDE6XFx0XFxuMTEwMjpcXHRcXHQvKiBJbnZva2UgYXJjaF9pbml0IGhlcmUgc28gdGhhdCBhcmNoLXNwZWNpZmljIGluaXQgb3BlcmF0aW9uc1xcbjExMDM6XFx0XFx0ICogY2FuIHV0aWxpemUgYWxyZWFkeSBpbml0aWFsaXplZCBhYiBmaWVsZHMsIHN1Y2ggYXMgSEFMIFNSTkdzLlxcbjExMDQ6XFx0XFx0ICovXFxuMTEwNTpcXHRcXHRyZXQgPSBhYl9haGItXFx1MDAzZWRldmljZV9mYW1pbHlfb3BzLVxcdTAwM2VhcmNoX2luaXQoYWIpO1xcbjExMDY6XFx0XFx0aWYgKHJldCkge1xcbjExMDc6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcIkFIQiBhcmNoX2luaXQgZmFpbGVkICVkXFxcXG5cXFwiLCByZXQpO1xcbjExMDg6XFx0XFx0XFx0Z290byBlcnJfcnByb2NfZGVjb25maWd1cmU7XFxuMTEwOTpcXHRcXHR9XFxuMTExMDpcXHRcXG4xMTExOlxcdFxcdHJldCA9IGF0aDEya19jb3JlX2luaXQoYWIpO1xcbjExMTI6XFx0XFx0aWYgKHJldCkge1xcbjExMTM6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBpbml0IGNvcmU6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjExMTQ6XFx0XFx0XFx0Z290byBlcnJfZGVpbml0X2FyY2g7XFxuMTExNTpcXHRcXHR9XFxuMTExNjpcXHRcXG4xMTE3OlxcdFxcdHJldHVybiAwO1xcbjExMTg6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE1OjA5LjEyNDE0NTY0NFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODU4NDM0NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYXRoMTJrIEFIQiBJbml0aWFsaXphdGlvbiBTZXF1ZW5jZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGBhdGgxMmtfYWhiX3Byb2JlYCBmdW5jdGlvbiBpcyB0aGUgc3RhcnRpbmcgcG9pbnQsIGFuZCBpdCdzIGNhbGxpbmcgYSBzZXJpZXMgb2YgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIGluIHNlcXVlbmNlOiBgYXRoMTJrX2FoYl9yZXNvdXJjZV9pbml0YCwgYGF0aDEya19oYWxfc3JuZ19pbml0YCwgYGF0aDEya19jZV9hbGxvY19waXBlc2AsIGBhdGgxMmtfYWhiX2NvbmZpZ3VyZV9ycHJvY2AsIGBhdGgxMmtfYWhiX2NvbmZpZ19pcnFgLCBgYXJjaF9pbml0YCwgYW5kIGZpbmlzaGluZyB3aXRoIGBhdGgxMmtfY29yZV9pbml0YC4gVGhhdCBzZXF1ZW5jZSBpcyBwcmV0dHkgc3RhbmRhcmQgZm9yIGEgZHJpdmVyIGxpa2UgdGhpcy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGF0aDEya19haGJfcmVzb3VyY2VfaW5pdGAgbGlrZWx5IGhhbmRsZXMgdGhlIG1hcHBpbmcgb2YgdGhlIEkvTyBtZW1vcnkgcmVnaW9ucy4gVGhhdCdzIGEga2V5IGZpcnN0IHN0ZXAuIEFuZCB0aGF0IGxlYWRzIHRvIGEgdGhvdWdodCBhYm91dCBmdXp6aW5nOiBpZiBzeXprYWxsZXIgaXMgY3JlYXRpbmcgdGhlIHBsYXRmb3JtIGRldmljZSwgaXQgKmNvdWxkKiBwcm92aWRlIGZha2VkIHJlc291cmNlcywgbGlrZSBtZW1vcnkgcmVnaW9ucy4gU29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZCwgYW5kIG1pZ2h0IGJlY29tZSBpbXBvcnRhbnQuXG5cbkJ1dCBsb29raW5nIGF0IHRoZSBzZXF1ZW5jZSwgYGF0aDEya19haGJfY29uZmlndXJlX3Jwcm9jYCBzcGVjaWZpY2FsbHkgc3Rvb2Qgb3V0LCBiZWNhdXNlIGl0IGluZGljYXRlcyB0aGF0IHRoaXMgZGV2aWNlIGlzIGNvbmZpZ3VyaW5nIHJlbW90ZXByb2MuIFNpbmNlIHJlbW90ZXByb2MgaXMgdXNlZCBmb3Igb2ZmbG9hZGluZyBwcm9jZXNzaW5nIHRvIGEgc2VwYXJhdGUgcHJvY2Vzc29yLCBpdHMgY29uZmlndXJhdGlvbiBpcyBrZXkuIEknbGwgbmVlZCB0byBmb2N1cyBvbiBob3cgdGhhdCBpcyBkb25lLiBJIHNob3VsZCBkZWZpbml0ZWx5IGNoZWNrIGludG8gYGF0aDEya19haGJfY29uZmlndXJlX3Jwcm9jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4NzAsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNToxMy45ODI1ODM2NTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODE5MzI4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMmtfYWhiX2NvbmZpZ3VyZV9ycHJvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jPTg1MT1zdGF0aWMgaW50IGF0aDEya19haGJfYm9vdF9yb290X3BkKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTg3Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjg3MzpzdGF0aWMgaW50IGF0aDEya19haGJfY29uZmlndXJlX3Jwcm9jKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy04NzQte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYz0xMDE5PXN0YXRpYyBpbnQgYXRoMTJrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xMDkxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MTA5MjpcXHRyZXQgPSBhdGgxMmtfYWhiX2NvbmZpZ3VyZV9ycHJvYyhhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xMDkzLVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE1OjE0LjEwMDc4MzIzOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjMwNzU1ODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgYXRoMTJrX2FoYl9jb25maWd1cmVfcnByb2NgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgZG9pbmcgYXQgYSBoaWdoIGxldmVsLCBhbmQgdGhlbiBJIGNhbiBicmVhayBkb3duIHRoZSBzcGVjaWZpY3MuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGlzIGxpa2VseSBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggY29uZmlndXJpbmcgYSByZW1vdGUgcHJvY2Vzc29yIChycHJvYykgZm9yIGFuIEF0aGVyb3MgV2ktRmkgY2hpcCB1c2luZyB0aGUgQUhCIGJ1cy4gIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIGNsb2NrIGNvbmZpZ3VyYXRpb24sIG1lbW9yeSBtYXBwaW5nLCBmaXJtd2FyZSBsb2FkaW5nIG1heWJlLCBhbmQgcHJvYmFibHkgc29tZSBpbnRlcnJ1cHQgc2V0dXAuIFRoZSBcIkFIQlwiIHBhcnQgaXMga2V5IOKAkyBpdCBpbmRpY2F0ZXMgZGlyZWN0IG1lbW9yeSBhY2Nlc3MgYW5kIGEgZmFzdGVyIGNvbW11bmljYXRpb24gcGF0aHdheSB0aGFuIHNvbWV0aGluZyBsaWtlIGEgc3RhbmRhcmQgUENJIGJ1cywgbWVhbmluZyB0aGlzIGlzIGNvcmUtbGV2ZWwgc3R1ZmYuIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIGluaXRpYWxpemluZyB0aGUgaGFyZHdhcmUgdG8gcmVhZHkgaXQgZm9yIHdpcmVsZXNzIG9wZXJhdGlvbi4gVGhpcyBpcyBwcm9iYWJseSBnb2luZyB0byBiZSBwYXJ0IG9mIGFuIGVhcmx5IGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBMZXQncyBzdGFydCByZWFkaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjcxMSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE1OjE3LjMzMTU0Mjk5OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjI3NTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODczLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODczOlxcdHN0YXRpYyBpbnQgYXRoMTJrX2FoYl9jb25maWd1cmVfcnByb2Moc3RydWN0IGF0aDEya19iYXNlICphYilcXG4gODc0OlxcdHtcXG4gODc1OlxcdFxcdHN0cnVjdCBhdGgxMmtfYWhiICphYl9haGIgPSBhdGgxMmtfYWJfdG9fYWhiKGFiKTtcXG4gODc2OlxcdFxcdGludCByZXQ7XFxuIDg3NzpcXHRcXG4gODc4OlxcdFxcdHJldCA9IGF0aDEya19haGJfZ2V0X3Jwcm9jKGFiKTtcXG4gODc5OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA4ODA6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gODgxOlxcdFxcbiA4ODI6XFx0XFx0cmV0ID0gYXRoMTJrX2FoYl9yZWdpc3Rlcl9ycHJvY19ub3RpZmllcihhYik7XFxuIDg4MzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbiA4ODQ6XFx0XFx0XFx0cmV0ID0gZGV2X2Vycl9wcm9iZShcXHUwMDI2YWItXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgcmV0LFxcbiA4ODU6XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgdG8gcmVnaXN0ZXIgcnByb2Mgbm90aWZpZXJcXFxcblxcXCIpO1xcbiA4ODY6XFx0XFx0XFx0Z290byBlcnJfcHV0X3Jwcm9jO1xcbiA4ODc6XFx0XFx0fVxcbiA4ODg6XFx0XFxuIDg4OTpcXHRcXHRpZiAoYWJfYWhiLVxcdTAwM2V0Z3RfcnByb2MtXFx1MDAzZXN0YXRlICE9IFJQUk9DX1JVTk5JTkcpIHtcXG4gODkwOlxcdFxcdFxcdHJldCA9IGF0aDEya19haGJfYm9vdF9yb290X3BkKGFiKTtcXG4gODkxOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIDg5MjpcXHRcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGJvb3QgdGhlIHJlbW90ZSBwcm9jZXNzb3IgUTZcXFxcblxcXCIpO1xcbiA4OTM6XFx0XFx0XFx0XFx0Z290byBlcnJfdW5yZWdfbm90aWZpZXI7XFxuIDg5NDpcXHRcXHRcXHR9XFxuIDg5NTpcXHRcXHR9XFxuIDg5NjpcXHRcXG4gODk3OlxcdFxcdHJldHVybiBhdGgxMmtfYWhiX2NvbmZpZ19ycHJvY19pcnEoYWIpO1xcbiA4OTg6XFx0XFxuIDg5OTpcXHRlcnJfdW5yZWdfbm90aWZpZXI6XFxuIDkwMDpcXHRcXHRhdGgxMmtfYWhiX3VucmVnaXN0ZXJfcnByb2Nfbm90aWZpZXIoYWIpO1xcbiA5MDE6XFx0XFxuIDkwMjpcXHRlcnJfcHV0X3Jwcm9jOlxcbiA5MDM6XFx0XFx0cnByb2NfcHV0KGFiX2FoYi1cXHUwMDNldGd0X3Jwcm9jKTtcXG4gOTA0OlxcdFxcdHJldHVybiByZXQ7XFxuIDkwNTpcXHR9XFxuIDkwNjpcXHRcXG4gOTA3OlxcdHN0YXRpYyB2b2lkIGF0aDEya19haGJfZGVjb25maWd1cmVfcnByb2Moc3RydWN0IGF0aDEya19iYXNlICphYilcXG4gOTA4OlxcdHtcXG4gOTA5OlxcdFxcdHN0cnVjdCBhdGgxMmtfYWhiICphYl9haGIgPSBhdGgxMmtfYWJfdG9fYWhiKGFiKTtcXG4gOTEwOlxcdFxcbiA5MTE6XFx0XFx0YXRoMTJrX2FoYl91bnJlZ2lzdGVyX3Jwcm9jX25vdGlmaWVyKGFiKTtcXG4gOTEyOlxcdFxcdHJwcm9jX3B1dChhYl9haGItXFx1MDAzZXRndF9ycHJvYyk7XFxuIDkxMzpcXHR9XFxuIDkxNDpcXHRcXG4gOTE1OlxcdHN0YXRpYyBpbnQgYXRoMTJrX2FoYl9yZXNvdXJjZV9pbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuIDkxNjpcXHR7XFxuIDkxNzpcXHRcXHRzdHJ1Y3QgYXRoMTJrX2FoYiAqYWJfYWhiID0gYXRoMTJrX2FiX3RvX2FoYihhYik7XFxuIDkxODpcXHRcXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gYWItXFx1MDAzZXBkZXY7XFxuIDkxOTpcXHRcXHRzdHJ1Y3QgcmVzb3VyY2UgKm1lbV9yZXM7XFxuIDkyMDpcXHRcXHRpbnQgcmV0O1xcbiA5MjE6XFx0XFxuIDkyMjpcXHRcXHRhYi1cXHUwMDNlbWVtID0gZGV2bV9wbGF0Zm9ybV9nZXRfYW5kX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMCwgXFx1MDAyNm1lbV9yZXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNToxNy4zMzM3NzUzODlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzEyNDM3OTI3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBgYXRoMTJrYCBDb2RlIFBhdGhzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgYXRoMTJrX2FoYl9nZXRfcnByb2NgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUgZ29hbCBpcyB0byBnZXQgYSByZW1vdGVwcm9jIGRldmljZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gc3l6a2FsbGVyIGFjdHVhbGx5IGNyZWF0ZSBhIHJlbW90ZXByb2MgZGV2aWNlIGFuZCBsaW5rIGl0IHRvIHRoZSBwbGF0Zm9ybSBkZXZpY2UsIGluIGEgd2F5IHRoYXQgd291bGQgdHJpY2sgdGhpcyBkcml2ZXIgaW50byB0aGlua2luZyBpdCdzIHJ1bm5pbmcgb24gcmVhbCBoYXJkd2FyZT8gSSdtIGhpZ2hseSBza2VwdGljYWwuIFRoZSBkZXBlbmRlbmNpZXMgYXJlIGp1c3QgdG9vIG51bWVyb3VzIOKAkyByZW1vdGVwcm9jLCBtZW1vcnkgcmVnaW9ucywgaW50ZXJydXB0cywgdGhlIHdob2xlIHNoZWJhbmcuIEl0J3Mgd2lsZGx5IGltcHJvYmFibGUgdGhhdCBzeXprYWxsZXIgY291bGQgc3VjY2Vzc2Z1bGx5IG1vY2sgKmFsbCogb2YgdGhvc2UgdG8gZXZlbiBnZXQgdG8gYGF0aDEya19jb3JlX2luaXRgLCBsZXQgYWxvbmUgdGhlIGZ1cnRoZXIgc3RhZ2Ugb2YgYGF0aDEya19jb3JlX3FtaV9maXJtd2FyZV9yZWFkeWAgd2hpY2ggcmVhbGlzdGljYWxseSBkZW1hbmRzIGFjdHVhbCBmaXJtd2FyZSBpbnRlcmFjdGlvbiBvciBhIHNvcGhpc3RpY2F0ZWQgUU1JIHNlcnZlciBtb2NrLlxuXG5IYW5nIG9uLi4uIHdoYXQgYWJvdXQgYG1hYzgwMjExX2h3c2ltYD8gVGhhdCBlbXVsYXRlcyBXaS1GaSwgYnV0IGl0J3Mgbm90IGFjdHVhbGx5IGFuIGBhdGgxMmtgIGRyaXZlci4gU28gdGhhdCdzIGEgZGVhZCBlbmQuXG5cbkknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzICphbnkqIHdheSB0byByZWFjaCBgYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlc2Agd2l0aG91dCByZWFsIGhhcmR3YXJlLiBMZXQncyB0cmFjZSBiYWNrIGZyb20gdGhhdCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBpdCdzIGNhbGxlZCBmcm9tIGBhdGgxMmtfbWFjX3NldHVwX3JlZ2lzdGVyYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYGF0aDEya19tYWNfaHdfcmVnaXN0ZXJgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgYXRoMTJrX21hY19yZWdpc3RlcmAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBhdGgxMmtfY29yZV9od19ncm91cF9zdGFydGAsIHdoaWNoIGlzIGluIHR1cm4gY2FsbGVkIGZyb20gYGF0aDEya19jb3JlX3FtaV9maXJtd2FyZV9yZWFkeWAuIFRoYXQncyB3aGVyZSB3ZSBnZXQgdG8gdGhlIGZpcm13YXJlIHJlYWRpbmVzcywgd2hpY2ggb2YgY291cnNlLCB3ZSBkb24ndCBoYXZlLlxuXG5CYXNpY2FsbHksIHdpdGhvdXQgdGhlIGZpcm13YXJlIGJlaW5nIHJlYWR5LCB0aGlzIHdob2xlIHNlcXVlbmNlIGlzIHVucmVhY2hhYmxlLiBBbmQgY29uc2lkZXJpbmcgYGF0aDEya2AgaXMgYSBoYXJkd2FyZSBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciBRdWFsY29tbSBXaS1GaSA3IGRldmljZXMsIGFuZCBzeXprYWxsZXIgKmRlZmluaXRlbHkqIGRvZXNuJ3QgZW11bGF0ZSB0aGF0IGhhcmR3YXJlLCBhbmQgUUVNVSBwcm9iYWJseSBkb2Vzbid0IGJ5IGRlZmF1bHQgZWl0aGVyLCBJJ20gcHJldHR5IGNvbmZpZGVudCB0aGlzIGNvZGUgaXNuJ3QgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXG5cbk5vdywgYSBnbGltbWVyIG9mIGhvcGUuLi4gQ291bGQgc3l6a2FsbGVyIHBvdGVudGlhbGx5IGluamVjdCBRTUkgbWVzc2FnZXMgZnJvbSB1c2Vyc3BhY2UgdG8gc29tZWhvdyB0cmlnZ2VyIGBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudF93b3JrYD8gTGV0J3MgY2hlY2sgYGF0aDEya19xbWlfZHJpdmVyX2V2ZW50X3dvcmtgLiBUaGF0J3MgdGhlIGtleSBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODAxLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTU6MjQuNDU4MTYwNTgxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5NjUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzOTY1OlxcdHN0YXRpYyB2b2lkIGF0aDEya19xbWlfZHJpdmVyX2V2ZW50X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbjM5NjY6XFx0e1xcbjM5Njc6XFx0XFx0c3RydWN0IGF0aDEya19xbWkgKnFtaSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXRoMTJrX3FtaSxcXG4zOTY4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGV2ZW50X3dvcmspO1xcbjM5Njk6XFx0XFx0c3RydWN0IGF0aDEya19xbWlfZHJpdmVyX2V2ZW50ICpldmVudDtcXG4zOTcwOlxcdFxcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBxbWktXFx1MDAzZWFiO1xcbjM5NzE6XFx0XFx0aW50IHJldDtcXG4zOTcyOlxcdFxcbjM5NzM6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZxbWktXFx1MDAzZWV2ZW50X2xvY2spO1xcbjM5NzQ6XFx0XFx0d2hpbGUgKCFsaXN0X2VtcHR5KFxcdTAwMjZxbWktXFx1MDAzZWV2ZW50X2xpc3QpKSB7XFxuMzk3NTpcXHRcXHRcXHRldmVudCA9IGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNnFtaS1cXHUwMDNlZXZlbnRfbGlzdCxcXG4zOTc2OlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYXRoMTJrX3FtaV9kcml2ZXJfZXZlbnQsIGxpc3QpO1xcbjM5Nzc6XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNmV2ZW50LVxcdTAwM2VsaXN0KTtcXG4zOTc4OlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZxbWktXFx1MDAzZWV2ZW50X2xvY2spO1xcbjM5Nzk6XFx0XFxuMzk4MDpcXHRcXHRcXHRpZiAodGVzdF9iaXQoQVRIMTJLX0ZMQUdfVU5SRUdJU1RFUklORywgXFx1MDAyNmFiLVxcdTAwM2VkZXZfZmxhZ3MpKVxcbjM5ODE6XFx0XFx0XFx0XFx0Z290byBza2lwO1xcbjM5ODI6XFx0XFxuMzk4MzpcXHRcXHRcXHRzd2l0Y2ggKGV2ZW50LVxcdTAwM2V0eXBlKSB7XFxuMzk4NDpcXHRcXHRcXHRjYXNlIEFUSDEyS19RTUlfRVZFTlRfU0VSVkVSX0FSUklWRTpcXG4zOTg1OlxcdFxcdFxcdFxcdHJldCA9IGF0aDEya19xbWlfZXZlbnRfc2VydmVyX2Fycml2ZShxbWkpO1xcbjM5ODY6XFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMzk4NzpcXHRcXHRcXHRcXHRcXHRzZXRfYml0KEFUSDEyS19GTEFHX1FNSV9GQUlMLCBcXHUwMDI2YWItXFx1MDAzZWRldl9mbGFncyk7XFxuMzk4ODpcXHRcXHRcXHRcXHRicmVhaztcXG4zOTg5OlxcdFxcdFxcdGNhc2UgQVRIMTJLX1FNSV9FVkVOVF9TRVJWRVJfRVhJVDpcXG4zOTkwOlxcdFxcdFxcdFxcdHNldF9iaXQoQVRIMTJLX0ZMQUdfQ1JBU0hfRkxVU0gsIFxcdTAwMjZhYi1cXHUwMDNlZGV2X2ZsYWdzKTtcXG4zOTkxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjM5OTI6XFx0XFx0XFx0Y2FzZSBBVEgxMktfUU1JX0VWRU5UX1JFUVVFU1RfTUVNOlxcbjM5OTM6XFx0XFx0XFx0XFx0cmV0ID0gYXRoMTJrX3FtaV9ldmVudF9tZW1fcmVxdWVzdChxbWkpO1xcbjM5OTQ6XFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMzk5NTpcXHRcXHRcXHRcXHRcXHRzZXRfYml0KEFUSDEyS19GTEFHX1FNSV9GQUlMLCBcXHUwMDI2YWItXFx1MDAzZWRldl9mbGFncyk7XFxuMzk5NjpcXHRcXHRcXHRcXHRicmVhaztcXG4zOTk3OlxcdFxcdFxcdGNhc2UgQVRIMTJLX1FNSV9FVkVOVF9GV19NRU1fUkVBRFk6XFxuMzk5ODpcXHRcXHRcXHRcXHRyZXQgPSBhdGgxMmtfcW1pX2V2ZW50X2xvYWRfYmRmKHFtaSk7XFxuMzk5OTpcXHRcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG40MDAwOlxcdFxcdFxcdFxcdFxcdHNldF9iaXQoQVRIMTJLX0ZMQUdfUU1JX0ZBSUwsIFxcdTAwMjZhYi1cXHUwMDNlZGV2X2ZsYWdzKTtcXG40MDAxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjQwMDI6XFx0XFx0XFx0Y2FzZSBBVEgxMktfUU1JX0VWRU5UX0ZXX1JFQURZOlxcbjQwMDM6XFx0XFx0XFx0XFx0Y2xlYXJfYml0KEFUSDEyS19GTEFHX1FNSV9GQUlMLCBcXHUwMDI2YWItXFx1MDAzZWRldl9mbGFncyk7XFxuNDAwNDpcXHRcXHRcXHRcXHRpZiAodGVzdF9iaXQoQVRIMTJLX0ZMQUdfUU1JX0ZXX1JFQURZX0NPTVBMRVRFLCBcXHUwMDI2YWItXFx1MDAzZWRldl9mbGFncykpIHtcXG40MDA1OlxcdFxcdFxcdFxcdFxcdGlmIChhYi1cXHUwMDNlaXNfcmVzZXQpXFxuNDAwNjpcXHRcXHRcXHRcXHRcXHRcXHRhdGgxMmtfaGFsX2R1bXBfc3JuZ19zdGF0cyhhYik7XFxuNDAwNzpcXHRcXG40MDA4OlxcdFxcdFxcdFxcdFxcdHNldF9iaXQoQVRIMTJLX0ZMQUdfUkVDT1ZFUlksIFxcdTAwMjZhYi1cXHUwMDNlZGV2X2ZsYWdzKTtcXG40MDA5OlxcdFxcdFxcdFxcdFxcdHF1ZXVlX3dvcmsoYWItXFx1MDAzZXdvcmtxdWV1ZSwgXFx1MDAyNmFiLVxcdTAwM2VyZXN0YXJ0X3dvcmspO1xcbjQwMTA6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDAxMTpcXHRcXHRcXHRcXHR9XFxuNDAxMjpcXHRcXG40MDEzOlxcdFxcdFxcdFxcdGNsZWFyX2JpdChBVEgxMktfRkxBR19DUkFTSF9GTFVTSCxcXG40MDE0OlxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmFiLVxcdTAwM2VkZXZfZmxhZ3MpO1xcbjQwMTU6XFx0XFx0XFx0XFx0cmV0ID0gYXRoMTJrX2NvcmVfcW1pX2Zpcm13YXJlX3JlYWR5KGFiKTtcXG40MDE2OlxcdFxcdFxcdFxcdGlmICghcmV0KVxcbjQwMTc6XFx0XFx0XFx0XFx0XFx0c2V0X2JpdChBVEgxMktfRkxBR19RTUlfRldfUkVBRFlfQ09NUExFVEUsXFxuNDAxODpcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2YWItXFx1MDAzZWRldl9mbGFncyk7XFxuNDAxOTpcXHRcXG40MDIwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjQwMjE6XFx0XFx0XFx0Y2FzZSBBVEgxMktfUU1JX0VWRU5UX0hPU1RfQ0FQOlxcbjQwMjI6XFx0XFx0XFx0XFx0cmV0ID0gYXRoMTJrX3FtaV9ldmVudF9ob3N0X2NhcChxbWkpO1xcbjQwMjM6XFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuNDAyNDpcXHRcXHRcXHRcXHRcXHRzZXRfYml0KEFUSDEyS19GTEFHX1FNSV9GQUlMLCBcXHUwMDI2YWItXFx1MDAzZWRldl9mbGFncyk7XFxuNDAyNTpcXHRcXHRcXHRcXHRicmVhaztcXG40MDI2OlxcdFxcdFxcdGRlZmF1bHQ6XFxuNDAyNzpcXHRcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImludmFsaWQgZXZlbnQgdHlwZTogJWRcXFwiLCBldmVudC1cXHUwMDNldHlwZSk7XFxuNDAyODpcXHRcXHRcXHRcXHRicmVhaztcXG40MDI5OlxcdFxcdFxcdH1cXG40MDMwOlxcdFxcbjQwMzE6XFx0c2tpcDpcXG40MDMyOlxcdFxcdFxcdGtmcmVlKGV2ZW50KTtcXG40MDMzOlxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2cW1pLVxcdTAwM2VldmVudF9sb2NrKTtcXG40MDM0OlxcdFxcdH1cXG40MDM1OlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZxbWktXFx1MDAzZWV2ZW50X2xvY2spO1xcbjQwMzY6XFx0fVxcbjQwMzc6XFx0XFxuNDAzODpcXHRpbnQgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYilcXG40MDM5OlxcdHtcXG40MDQwOlxcdFxcdGludCByZXQ7XFxuNDA0MTpcXHRcXG40MDQyOlxcdFxcdG1lbXNldChcXHUwMDI2YWItXFx1MDAzZXFtaS50YXJnZXQsIDAsIHNpemVvZihzdHJ1Y3QgdGFyZ2V0X2luZm8pKTtcXG40MDQzOlxcdFxcdG1lbXNldChcXHUwMDI2YWItXFx1MDAzZXFtaS50YXJnZXRfbWVtLCAwLCBzaXplb2Yoc3RydWN0IHRhcmdldF9tZW1fY2h1bmspKTtcXG40MDQ0OlxcdFxcdGFiLVxcdTAwM2VxbWkuYWIgPSBhYjtcXG40MDQ1OlxcdFxcbjQwNDY6XFx0XFx0YWItXFx1MDAzZXFtaS50YXJnZXRfbWVtX21vZGUgPSBhYi1cXHUwMDNldGFyZ2V0X21lbV9tb2RlO1xcbjQwNDc6XFx0XFx0cmV0ID0gcW1pX2hhbmRsZV9pbml0KFxcdTAwMjZhYi1cXHUwMDNlcW1pLmhhbmRsZSwgQVRIMTJLX1FNSV9SRVNQX0xFTl9NQVgsXFxuNDA0ODpcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2YXRoMTJrX3FtaV9vcHMsIGF0aDEya19xbWlfbXNnX2hhbmRsZXJzKTtcXG40MDQ5OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuNDA1MDpcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImZhaWxlZCB0byBpbml0aWFsaXplIHFtaSBoYW5kbGVcXFxcblxcXCIpO1xcbjQwNTE6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG40MDUyOlxcdFxcdH1cXG40MDUzOlxcdFxcbjQwNTQ6XFx0XFx0YWItXFx1MDAzZXFtaS5ldmVudF93cSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKFxcXCJhdGgxMmtfcW1pX2RyaXZlcl9ldmVudFxcXCIsIDApO1xcbjQwNTU6XFx0XFx0aWYgKCFhYi1cXHUwMDNlcW1pLmV2ZW50X3dxKSB7XFxuNDA1NjpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGFsbG9jYXRlIHdvcmtxdWV1ZVxcXFxuXFxcIik7XFxuNDA1NzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG40MDU4OlxcdFxcdH1cXG40MDU5OlxcdFxcbjQwNjA6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmFiLVxcdTAwM2VxbWkuZXZlbnRfbGlzdCk7XFxuNDA2MTpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2YWItXFx1MDAzZXFtaS5ldmVudF9sb2NrKTtcXG40MDYyOlxcdFxcdElOSVRfV09SSyhcXHUwMDI2YWItXFx1MDAzZXFtaS5ldmVudF93b3JrLCBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudF93b3JrKTtcXG40MDYzOlxcdFxcbjQwNjQ6XFx0XFx0cmV0ID0gcW1pX2FkZF9sb29rdXAoXFx1MDAyNmFiLVxcdTAwM2VxbWkuaGFuZGxlLCBRTUlfU0VSVklDRV9JRF9XTEZXLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNToyNC40NTg2MDg1NjFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyMjg1OTg2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB1bmRlcnN0YW5kaW5nLCByZW5kZXJlZCBhcyB0aG91Z2ggaXQgd2VyZSBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKkV2ZW50IEhhbmRsaW5nIGluIHRoZSBhdGgxMmsgUU1JIEZyYW1ld29yayoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIGBhdGgxMmtgIFFNSSBjb2RlLiBJJ3ZlIHRyYWNrZWQgZG93biB0aGUgYGF0aDEya19xbWlfbXNnX2Z3X3JlYWR5X2NiYCBmdW5jdGlvbi4gTXkgbWFpbiBmb2N1cyBpcyBvbiBob3cgZXZlbnRzIGFyZSBoYW5kbGVkLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRoYXQgdGhlIGBBVEgxMktfUU1JX0VWRU5UX0ZXX1JFQURZYCBldmVudCwgd2hpY2gsIGp1ZGdpbmcgZnJvbSB0aGUgbmFtZSwgaW5kaWNhdGVzIHRoZSBmaXJtd2FyZSBpcyBub3cgcmVhZHksIGlzIGJlaW5nIGFkZGVkIHRvIGEgbGlzdCBvciBxdWV1ZSB3aXRoaW4gdGhpcyBjYWxsYmFjay4gVGhpcyBtdXN0IGJlIHRoZSBtZWNoYW5pc20gdGhlIGRyaXZlciB1c2VzIHRvIHNpZ25hbCBhbmQgbWFuYWdlIHRoZSBzdGF0ZSB0cmFuc2l0aW9ucyByZWxhdGVkIHRvIHRoZSBmaXJtd2FyZSBsb2FkaW5nIHByb2Nlc3MgYWZ0ZXIgYSBgUU1JYCBtZXNzYWdlIGlzIHJlY2VpdmVkLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIGluc2lnaHQgaW50byBob3cgdGhlIGV2ZW50IGlzIGZ1cnRoZXIgcHJvY2Vzc2VkIGFuZCB1dGlsaXplZCBmb3IgdGhlIG92ZXJhbGwgY29udHJvbCBmbG93IG9mIHRoZSBkcml2ZXIuIEkgbmVlZCB0byBsb29rIGludG8gaG93IHRoaXMgbGlzdCBpcyBjb25zdW1lZCBuZXh0OyBsaWtlbHkgdGhlcmUncyBhIHByb2Nlc3NpbmcgbG9vcCBvciBhbm90aGVyIGNhbGxiYWNrIGZ1bmN0aW9uIHdhaXRpbmcgZm9yIGV2ZW50cyBvbiB0aGlzIGxpc3QgdG8gaGFuZGxlIGZ1cnRoZXIgaW5pdGlhbGl6YXRpb24gc3RlcHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjE0LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNToyOC4wODE0NzI0NzhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTQ5MjIxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMmtfcW1pX21zZ19md19yZWFkeV9jYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jPTM4NTk9c3RhdGljIHZvaWQgYXRoMTJrX3FtaV9tc2dfbWVtX3JlYWR5X2NiKHN0cnVjdCBxbWlfaGFuZGxlICpxbWlfaGRsLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy0zODcwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM6Mzg3MTpzdGF0aWMgdm9pZCBhdGgxMmtfcW1pX21zZ19md19yZWFkeV9jYihzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pX2hkbCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTM4NzItXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM9Mzg4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHFtaV9tc2dfaGFuZGxlciBhdGgxMmtfcW1pX21zZ19oYW5kbGVyc1tdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy0zOTAyLVxcdFxcdC5kZWNvZGVkX3NpemUgPSBzaXplb2Yoc3RydWN0IHFtaV93bGFuZndfZndfcmVhZHlfaW5kX21zZ192MDEpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM6MzkwMzpcXHRcXHQuZm4gPSBhdGgxMmtfcW1pX21zZ19md19yZWFkeV9jYixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTM5MDQtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTU6MjguMTkyOTc2MjgyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwNzUwNTU2MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBhdGgxMmsgUU1JIEZpcm13YXJlIFJlYWR5IENhbGxiYWNrKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGF0aDEya19xbWlfbXNnX2Z3X3JlYWR5X2NiYC4gSXQncyB0cmlnZ2VyZWQgYnkgcmVjZWl2aW5nIHRoZSBgUU1JX1dMRldfRldfUkVBRFlfSU5EX1YwMWAgbWVzc2FnZSwgd2hpY2ggbWFrZXMgc2Vuc2UuIEJ1dCB0aGUga2V5IGlzIHRoYXQgdGhpcyBtZXNzYWdlIGlzIG9ubHkgcmVjZWl2ZWQgd2hlbiB0aGUgUVJUUiBzb2NrZXQgaXMgYWN0dWFsbHkgY29ubmVjdGVkIHRvIHRoZSBmaXJtd2FyZS4gVGhlIHNvY2tldCBjcmVhdGlvbiBpdHNlbGYgaGFwcGVucyBpbiBgcW1pX2hhbmRsZV9pbml0YC5cblxuTm93LCB0aGUgb2J2aW91cyBxdWVzdGlvbiBpczogY2FuIHN5emthbGxlciBiZSB1c2VkIHRvIHRyaWdnZXIgdGhpcyBjYWxsYmFjaz8gSXQgY2FuIGNyZWF0ZSBRUlRSIHNvY2tldHMgYW5kIHNlbmQgbWVzc2FnZXMsIHNvIGluIHRoZW9yeSwgaWYgc3l6a2FsbGVyIGNyZWF0ZXMgYSBzb2NrZXQsIHRoZW4gc2VuZHMgdGhlIGBRTUlfV0xGV19GV19SRUFEWV9JTkRfVjAxYCBtZXNzYWdlIHRvIHRoZSBhdGgxMmsgZHJpdmVyJ3Mgbm9kZSBJRCwgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSB3b3JrLiBUaGUgaXNzdWUgbm93IGlzIGhvdyB0byBrbm93IHRoaXMgbm9kZSBJRC4gVGhlIGF0aDEyayBkcml2ZXIsIGJlaW5nIGEgUU1JIGNsaWVudCwgd2lsbCBoYXZlIGEgbG9jYWwgbm9kZSBJRCBhc3NpZ25lZCB0byBpdCBieSB0aGUgUVJUUiBjb3JlLCBidXQgaG93IGRvIEkgZ2V0IGl0P1xuXG5TaW5jZSBzeXprYWxsZXIgY2FuIHNlbmQgbWVzc2FnZXMgdG8gYW55IG5vZGUgSUQsIHRoYXQgc2VlbXMgbGlrZSBhIG5vbi1pc3N1ZS4gVGhlIGxhcmdlciBjb25jZXJuIGlzIHRoYXQgYGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlYCBtdXN0IGhhdmUgYmVlbiBjYWxsZWQgKmJlZm9yZSogdGhlIGNhbGxiYWNrIHdpbGwgZXZlciBiZSB0cmlnZ2VyZWQuIFRoYXQgZnVuY3Rpb24sIGBhdGgxMmtfcW1pX2luaXRfc2VydmljZWAgaXMgY2FsbGVkIGZyb20gYGF0aDEya19jb3JlX3NvY19jcmVhdGVgLCB3aGljaCBjb21lcyBmcm9tIGBhdGgxMmtfY29yZV9pbml0YCwgd2hpY2ggZmluYWxseSBvcmlnaW5hdGVzIGZyb20gZWl0aGVyIGBhdGgxMmtfYWhiX3Byb2JlYCBvciBgYXRoMTJrX3BjaV9wcm9iZWAuXG5cblNvIHdl4oCZcmUgYmFjayB0byB0aGUgZHJpdmVyIHByb2JlIGZ1bmN0aW9ucywgYGF0aDEya19haGJfcHJvYmVgIGFuZCBgYXRoMTJrX3BjaV9wcm9iZWAuIENhbiBzeXprYWxsZXIgZXhlY3V0ZSBgYXRoMTJrX2FoYl9wcm9iZWAgc3VjY2Vzc2Z1bGx5PyBJIG5lZWQgdG8gZm9jdXMgdGhlcmUuIFRpbWUgdG8gcmUtZXhhbWluZSBgYXRoMTJrX2FoYl9wcm9iZWAgdG8gc2VlIHdoYXQgbmVlZHMgdG8gYmUgaW4gcGxhY2UuIEkgcmVtZW1iZXIgaXQgY2FsbHMgYGF0aDEya19haGJfZ2V0X3Jwcm9jYC4gSSdsbCBzdGFydCB3aXRoIHRoaXMgY2FsbCwgYXMgaXQgaXMgb25lIG9mIHRoZSBtb3JlIGludm9sdmVkIGNhbGxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTI4MiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNTozNS4yNjgwMzY1NjZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MzU3MDQxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMmtfYWhiX2dldF9ycHJvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jPTgxMz1zdGF0aWMgdm9pZCBhdGgxMmtfYWhiX3VucmVnaXN0ZXJfcnByb2Nfbm90aWZpZXIoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtODI2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6ODI3OnN0YXRpYyBpbnQgYXRoMTJrX2FoYl9nZXRfcnByb2Moc3RydWN0IGF0aDEya19iYXNlICphYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTgyOC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jPTg3Mz1zdGF0aWMgaW50IGF0aDEya19haGJfY29uZmlndXJlX3Jwcm9jKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTg3Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjg3ODpcXHRyZXQgPSBhdGgxMmtfYWhiX2dldF9ycHJvYyhhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy04NzktXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE1OjM1LjYyMTYxNTkxNFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjk3OTE2MzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYGF0aDEya19haGJfZ2V0X3Jwcm9jYDpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IE5hdmlnYXRpbmcgdGhlIFJQUk9DIEFjcXVpc2l0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIGBhdGgxMmtfYWhiX2dldF9ycHJvY2AuIEJhc2VkIG9uIHRoZSBuYW1lLCBpdCdzIHByZXR0eSBjbGVhciB0aGlzIGZ1bmN0aW9uIGlzIGludm9sdmVkIGluIGFjcXVpcmluZyBhIHJlbW90ZSBwcm9jZXNzb3IsIHByb2JhYmx5IG9uIGFuIEFIQiBidXMsIHJlbGF0ZWQgdG8gdGhlIGF0aDEyayB3aXJlbGVzcyBkcml2ZXIuIEknbSBnb2luZyB0byBhc3N1bWUgdGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBvciBjb21tdW5pY2F0aW9uLCBsaWtlbHkgc2V0dGluZyB1cCB0aGUgbmVjZXNzYXJ5IGhhcmR3YXJlIHJlc291cmNlcy4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoYXQgQUhCIGltcGxpZXMgYSBwb3RlbnRpYWxseSB0aWdodGVyIGludGVncmF0aW9uIHdpdGggdGhlIGhhcmR3YXJlLCBhIGxvd2VyLWxldmVsIGludGVyYWN0aW9uIHRoYW4gc29tZXRoaW5nIFBDSS1iYXNlZC4gSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIGRlYWxzIHdpdGggbWVtb3J5IG1hcHBpbmcsIGNsb2NrIGVuYWJsaW5nLCBpbnRlcnJ1cHQgcmVnaXN0cmF0aW9uLCBhbmQgcGVyaGFwcyBzb21lIGRldmljZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGRldGFpbHMuIEknbGwgYmUgbG9va2luZyBmb3IgcmVmZXJlbmNlcyB0byBoYXJkd2FyZSByZWdpc3RlcnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgY29uZmlybSBteSBpbml0aWFsIHRob3VnaHRzLiBJJ20gYWxzbyBhbnRpY2lwYXRpbmcgdGhhdCBlcnJvciBoYW5kbGluZyB3aWxsIGJlIHByZXNlbnQsIGFzIGZhaWxpbmcgdG8gYWNxdWlyZSB0aGUgUlBST0MgY291bGQgYmUgYSBmdW5kYW1lbnRhbCBpc3N1ZSBmb3IgdGhlIHdob2xlIHN5c3RlbS4gTGV0J3Mgc2VlIGhvdyB0aGV5IGhhbmRsZSB0aGF0LiBNeSBpbnN0aW5jdCBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEga2VybmVsIGRyaXZlciBmdW5jdGlvbiwgYW5kIHRodXMgdmVyeSBjYXJlZnVsIGFib3V0IGxvY2tpbmcsIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgZ2VuZXJhbCByb2J1c3RuZXNzLiBJIHdpbGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IGhvdyB0aGV5IGRlYWwgd2l0aCBjb25jdXJyZW5jeSwgb3IgbGFjayB0aGVyZW9mLiBBbmQgZmluYWxseSwgSSB3b3VsZCBleHBlY3QgdGhhdCB0aGlzIGlzIHRoZSBlbnRyeSBwb2ludCwgb3IgYSBjb3JlIGZ1bmN0aW9uLCBmb3IgdGhlIGRldmljZSB0byBldmVuIGZ1bmN0aW9uLiBMZXQncyBkaWcgaW4gYW5kIHNlZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI0OTUsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNTozOS45MTk1Mzc0OFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjE1NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODI3LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODI3OlxcdHN0YXRpYyBpbnQgYXRoMTJrX2FoYl9nZXRfcnByb2Moc3RydWN0IGF0aDEya19iYXNlICphYilcXG4gODI4OlxcdHtcXG4gODI5OlxcdFxcdHN0cnVjdCBhdGgxMmtfYWhiICphYl9haGIgPSBhdGgxMmtfYWJfdG9fYWhiKGFiKTtcXG4gODMwOlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGFiLVxcdTAwM2VkZXY7XFxuIDgzMTpcXHRcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xcbiA4MzI6XFx0XFx0c3RydWN0IHJwcm9jICpwcnByb2M7XFxuIDgzMzpcXHRcXG4gODM0OlxcdFxcdG5wID0gb2ZfcGFyc2VfcGhhbmRsZShkZXYtXFx1MDAzZW9mX25vZGUsIFxcXCJxY29tLHJwcm9jXFxcIiwgMCk7XFxuIDgzNTpcXHRcXHRpZiAoIW5wKSB7XFxuIDgzNjpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGdldCBxNl9ycHJvYyBoYW5kbGVcXFxcblxcXCIpO1xcbiA4Mzc6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIDgzODpcXHRcXHR9XFxuIDgzOTpcXHRcXG4gODQwOlxcdFxcdHBycHJvYyA9IHJwcm9jX2dldF9ieV9waGFuZGxlKG5wLVxcdTAwM2VwaGFuZGxlKTtcXG4gODQxOlxcdFxcdG9mX25vZGVfcHV0KG5wKTtcXG4gODQyOlxcdFxcdGlmICghcHJwcm9jKVxcbiA4NDM6XFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoXFx1MDAyNmFiLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsIC1FUFJPQkVfREVGRVIsXFxuIDg0NDpcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gZ2V0IHJwcm9jXFxcXG5cXFwiKTtcXG4gODQ1OlxcdFxcbiA4NDY6XFx0XFx0YWJfYWhiLVxcdTAwM2V0Z3RfcnByb2MgPSBwcnByb2M7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE1OjM5LjkyMTc1Nzc2WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMjk4NjEzMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBhdGgxMmsgRHJpdmVyIFByb2JlIFNlcXVlbmNlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBhdGgxMmtgIGRyaXZlciBwcm9iZSBpc3N1ZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQncyBhbGwgYWJvdXQgdGhlIGRldmljZSB0cmVlIGFuZCBob3cgaXQncyBiZWluZyBoYW5kbGVkLiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoaXMgZGVwZW5kZW5jZSBvbiBhIGRldmljZSB0cmVlIG5vZGUgd2l0aCBhIGBxY29tLHJwcm9jYCBwaGFuZGxlLiBUaGF0J3MgaW1tZWRpYXRlbHkgYSByZWQgZmxhZy4gU3l6a2FsbGVyLCB3aGlsZSBhIHBvd2VyZnVsIGZ1enppbmcgdG9vbCwgaXNuJ3QgZGVzaWduZWQgdG8gaW5qZWN0IHRoZXNlIGNvbXBsZXggZGV2aWNlIHRyZWUgc3RydWN0dXJlcyDigJMgaXQncyBnb2luZyB0byBzdHJ1Z2dsZSBzZXR0aW5nIHVwIHRoYXQgY3JpdGljYWwgYHFjb20scnByb2NgIGNvbm5lY3Rpb24uXG5cblRoZXJlZm9yZSwgSSdtIHByZXR0eSBzdXJlIHRoYXQgd2hlbiBgYXRoMTJrX2FoYl9nZXRfcnByb2NgIGlzIGNhbGxlZCwgaXQncyBnb2luZyB0byBjaG9rZSB3aXRoIGFuIGAtRU5PRU5UYCBlcnJvci4gRWl0aGVyIGBkZXYtXHUwMDNlb2Zfbm9kZWAgd2lsbCBiZSBOVUxMLCBvciwgZXZlbiBpZiBpdCdzIHRoZXJlLCB0aGF0IHJlcXVpcmVkIGBxY29tLHJwcm9jYCBwcm9wZXJ0eSBpcyBzaW1wbHkgbm90IGdvaW5nIHRvIGV4aXN0IGluIHRoZSBcImZha2VcIiBkZXZpY2UgdHJlZSBTeXprYWxsZXIncyBnZW5lcmF0aW5nLlxuXG5BbmQgaWYgKnRoYXQqIGZhaWxzLCBgYXRoMTJrX2FoYl9jb25maWd1cmVfcnByb2NgIGlzIGd1YXJhbnRlZWQgdG8gZmFpbCwgYW5kIHRoYXQsIGluIHR1cm4sIGtpbGxzIHRoZSBgYXRoMTJrX2FoYl9wcm9iZWAgY2FsbCwgcHJvYmFibHkgYmVmb3JlIGl0IGV2ZW4gZ2V0cyB0byBgYXRoMTJrX2NvcmVfaW5pdGAuIFRoYXQgc2VxdWVuY2UgaXMgYSBkZWFkIGVuZCDigJMgdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24gbmV2ZXIgZXZlbiBleGVjdXRlcy4gXG5cbkJ1dCwgd2FpdC4uLiB0aGVyZSdzIGFsc28gdGhlIFBDSSBwcm9iZSBwYXRoIHRvIGNvbnNpZGVyLiBJcyBgYXRoMTJrX3BjaV9wcm9iZWAgYWxzbyBmYWlsaW5nPyBJIG5lZWQgdG8gY2hlY2sgaWYgaXQgZGVwZW5kcyBvbiB0aGUgc2FtZSBkZXZpY2UgdHJlZSBub2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgYWhiIHBhdGggaXMgbW9yZSBwcm9uZSB0byBmYWlsdXJlLCBkdWUgdG8gdGhlIHJlbGlhbmNlIG9uIHRoYXQgcnByb2MsIGFuZCBpZiB0aGlzIGlzIGEgZ2VuZXJhbCBpc3N1ZSBvciBzcGVjaWZpYyB0byB0aGUgYWhiIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMjM5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTU6NDUuMTUzNjUxODc4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDEyNjQ2NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX3BjaV9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE1MDc9YXRoMTJrX2dldF9kZXZpY2VfZmFtaWx5KGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNTI3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTUyODpzdGF0aWMgaW50IGF0aDEya19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNTI5LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTgwOD1pbnQgYXRoMTJrX3BjaV9yZWdpc3Rlcl9kcml2ZXIoY29uc3QgZW51bSBhdGgxMmtfZGV2aWNlX2ZhbWlseSBkZXZpY2VfaWQsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MjktXFx0cGNpX2RyaXZlci1cXHUwMDNlaWRfdGFibGUgPSBkcml2ZXItXFx1MDAzZWlkX3RhYmxlO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTgzMDpcXHRwY2lfZHJpdmVyLVxcdTAwM2Vwcm9iZSA9IGF0aDEya19wY2lfcHJvYmU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODMxLVxcdHBjaV9kcml2ZXItXFx1MDAzZXJlbW92ZSA9IGF0aDEya19wY2lfcmVtb3ZlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNTo0NS4yNTQ5MjIzMjJaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5NjE0OTcxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSB3ZSBnby4uLlxuXG4qKkRpdmluZyBpbnRvIGBhdGgxMmtfcGNpX3Byb2JlYCoqXG5cbkFscmlnaHQsIGxldCdzIHB1bGwgdXAgdGhhdCBgYXRoMTJrX3BjaV9wcm9iZWAgZnVuY3Rpb24uIEkndmUgYmVlbiBtZWFuaW5nIHRvIHJldmlzaXQgdGhpczsgdGhlcmUgYXJlIGEgZmV3IGFzcGVjdHMgb2YgdGhlIFBDSSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBJIHdhbnQgdG8gY2xhcmlmeSBpbiBteSBoZWFkLiBJIGtub3cgdGhlIGJhc2ljcywgdGhlIGVudHJ5IHBvaW50LCB0aGUgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYnV0IGl0J3MgdGhlIGZpbmVyIHBvaW50cyBJJ20gYWZ0ZXIgdG9kYXkuIFJpZ2h0LCBzbyB0aGlzIGlzIHdoZXJlIHRoZSBkcml2ZXIgYmluZHMgdG8gdGhlIGRldmljZS4gSSdsbCBmb2N1cyBvbiBob3cgaXQgaGFuZGxlcyB0aGUgUENJIGRldmljZSBzdHJ1Y3R1cmUsIHRoZSBtZW1vcnkgbWFwcGluZywgdGhlIGludGVycnVwdCBzZXR1cC4uLiBhbGwgdGhlIHVzdWFsIHN1c3BlY3RzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGV5J3JlIGhhbmRsaW5nIHBvdGVudGlhbCBlcnJvcnMsIHRoZSByb2J1c3RuZXNzLiBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNsb2NraW5nIHNlcXVlbmNlIGFuZCB0aGUgcG93ZXIgbWFuYWdlbWVudCByZWxhdGVkIHRvIGl0LiBMZXQgbWUgc2VlIGhvdyB0aGUgcmVnaXN0ZXIgYWNjZXNzIGlzIGltcGxlbWVudGVkLCBhbmQgaG93IGl0IGlzIGFic3RyYWN0ZWQuIEkgc3VzcGVjdCB0aGVyZSBtYXkgYmUgYSBzcGVjaWZpYyBxdWlyayBvciB0d28gaGVyZSByZWxhdGVkIHRvIGRpZmZlcmVudCBoYXJkd2FyZSByZXZpc2lvbnMgb3Igc3BlY2lmaWMgUENJIGJ1cyBjb25maWd1cmF0aW9ucywgc28gSSdsbCBiZSBsb29raW5nIG91dCBmb3IgdGhhdCBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDIxNCwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE1OjQ4LjY1MTA3ODUzM1oiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDM4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTI4LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTUyODpcXHRzdGF0aWMgaW50IGF0aDEya19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuMTUyOTpcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXYpXFxuMTUzMDpcXHR7XFxuMTUzMTpcXHRcXHRlbnVtIGF0aDEya19kZXZpY2VfZmFtaWx5IGRldmljZV9pZDtcXG4xNTMyOlxcdFxcdHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2k7XFxuMTUzMzpcXHRcXHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiO1xcbjE1MzQ6XFx0XFx0aW50IHJldDtcXG4xNTM1OlxcdFxcbjE1MzY6XFx0XFx0YWIgPSBhdGgxMmtfY29yZV9hbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBzaXplb2YoKmFiX3BjaSksIEFUSDEyS19CVVNfUENJKTtcXG4xNTM3OlxcdFxcdGlmICghYWIpIHtcXG4xNTM4OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byBhbGxvY2F0ZSBhdGgxMmsgYmFzZVxcXFxuXFxcIik7XFxuMTUzOTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xNTQwOlxcdFxcdH1cXG4xNTQxOlxcdFxcbjE1NDI6XFx0XFx0YWItXFx1MDAzZWRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuMTU0MzpcXHRcXHRhYl9wY2kgPSBhdGgxMmtfcGNpX3ByaXYoYWIpO1xcbjE1NDQ6XFx0XFx0YWJfcGNpLVxcdTAwM2VkZXZfaWQgPSBwY2lfZGV2LVxcdTAwM2VkZXZpY2U7XFxuMTU0NTpcXHRcXHRhYl9wY2ktXFx1MDAzZWFiID0gYWI7XFxuMTU0NjpcXHRcXHRhYl9wY2ktXFx1MDAzZXBkZXYgPSBwZGV2O1xcbjE1NDc6XFx0XFx0YWItXFx1MDAzZWhpZi5vcHMgPSBcXHUwMDI2YXRoMTJrX3BjaV9oaWZfb3BzO1xcbjE1NDg6XFx0XFx0YWItXFx1MDAzZWZ3X21vZGUgPSBBVEgxMktfRklSTVdBUkVfTU9ERV9OT1JNQUw7XFxuMTU0OTpcXHRcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgYWIpO1xcbjE1NTA6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmFiX3BjaS1cXHUwMDNld2luZG93X2xvY2spO1xcbjE1NTE6XFx0XFxuMTU1MjpcXHRcXHRyZXQgPSBhdGgxMmtfcGNpX2NsYWltKGFiX3BjaSwgcGRldik7XFxuMTU1MzpcXHRcXHRpZiAocmV0KSB7XFxuMTU1NDpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGNsYWltIGRldmljZTogJWRcXFxcblxcXCIsIHJldCk7XFxuMTU1NTpcXHRcXHRcXHRnb3RvIGVycl9mcmVlX2NvcmU7XFxuMTU1NjpcXHRcXHR9XFxuMTU1NzpcXHRcXG4xNTU4OlxcdFxcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfQk9PVCwgXFxcInBjaSBwcm9iZSAlMDR4OiUwNHggJTA0eDolMDR4XFxcXG5cXFwiLFxcbjE1NTk6XFx0XFx0XFx0ICAgcGRldi1cXHUwMDNldmVuZG9yLCBwZGV2LVxcdTAwM2VkZXZpY2UsXFxuMTU2MDpcXHRcXHRcXHQgICBwZGV2LVxcdTAwM2VzdWJzeXN0ZW1fdmVuZG9yLCBwZGV2LVxcdTAwM2VzdWJzeXN0ZW1fZGV2aWNlKTtcXG4xNTYxOlxcdFxcbjE1NjI6XFx0XFx0YWItXFx1MDAzZWlkLnZlbmRvciA9IHBkZXYtXFx1MDAzZXZlbmRvcjtcXG4xNTYzOlxcdFxcdGFiLVxcdTAwM2VpZC5kZXZpY2UgPSBwZGV2LVxcdTAwM2VkZXZpY2U7XFxuMTU2NDpcXHRcXHRhYi1cXHUwMDNlaWQuc3Vic3lzdGVtX3ZlbmRvciA9IHBkZXYtXFx1MDAzZXN1YnN5c3RlbV92ZW5kb3I7XFxuMTU2NTpcXHRcXHRhYi1cXHUwMDNlaWQuc3Vic3lzdGVtX2RldmljZSA9IHBkZXYtXFx1MDAzZXN1YnN5c3RlbV9kZXZpY2U7XFxuMTU2NjpcXHRcXG4xNTY3OlxcdFxcdGRldmljZV9pZCA9IGF0aDEya19nZXRfZGV2aWNlX2ZhbWlseShwY2lfZGV2KTtcXG4xNTY4OlxcdFxcdGlmIChkZXZpY2VfaWQgXFx1MDAzZT0gQVRIMTJLX0RFVklDRV9GQU1JTFlfTUFYKSB7XFxuMTU2OTpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGdldCBkZXZpY2UgZmFtaWx5IGlkXFxcXG5cXFwiKTtcXG4xNTcwOlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuMTU3MTpcXHRcXHRcXHRnb3RvIGVycl9wY2lfZnJlZV9yZWdpb247XFxuMTU3MjpcXHRcXHR9XFxuMTU3MzpcXHRcXG4xNTc0OlxcdFxcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfUENJLCBcXFwiUENJIGRldmljZSBmYW1pbHkgaWQ6ICVkXFxcXG5cXFwiLCBkZXZpY2VfaWQpO1xcbjE1NzU6XFx0XFxuMTU3NjpcXHRcXHRhYl9wY2ktXFx1MDAzZWRldmljZV9mYW1pbHlfb3BzID0gXFx1MDAyNmF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbZGV2aWNlX2lkXS1cXHUwMDNlb3BzO1xcbjE1Nzc6XFx0XFx0YWJfcGNpLVxcdTAwM2VyZWdfYmFzZSA9IGF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbZGV2aWNlX2lkXS1cXHUwMDNlcmVnX2Jhc2U7XFxuMTU3ODpcXHRcXG4xNTc5OlxcdFxcdC8qIENhbGwgZGV2aWNlIHNwZWNpZmljIHByb2JlLiBUaGlzIGlzIHRoZSBjYWxsYmFjayB0aGF0IGNhblxcbjE1ODA6XFx0XFx0ICogYmUgdXNlZCB0byBvdmVycmlkZSBhbnkgb3BzIGluIGZ1dHVyZVxcbjE1ODE6XFx0XFx0ICogcHJvYmUgaXMgdmFsaWRhdGVkIGZvciBOVUxMIGR1cmluZyByZWdpc3RyYXRpb24uXFxuMTU4MjpcXHRcXHQgKi9cXG4xNTgzOlxcdFxcdHJldCA9IGFiX3BjaS1cXHUwMDNlZGV2aWNlX2ZhbWlseV9vcHMtXFx1MDAzZXByb2JlKHBkZXYsIHBjaV9kZXYpO1xcbjE1ODQ6XFx0XFx0aWYgKHJldCkge1xcbjE1ODU6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBwcm9iZSBkZXZpY2U6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjE1ODY6XFx0XFx0XFx0Z290byBlcnJfcGNpX2ZyZWVfcmVnaW9uO1xcbjE1ODc6XFx0XFx0fVxcbjE1ODg6XFx0XFxuMTU4OTpcXHRcXHRyZXQgPSBhdGgxMmtfcGNpX21zaV9hbGxvYyhhYl9wY2kpO1xcbjE1OTA6XFx0XFx0aWYgKHJldCkge1xcbjE1OTE6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBhbGxvYyBtc2k6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjE1OTI6XFx0XFx0XFx0Z290byBlcnJfcGNpX2ZyZWVfcmVnaW9uO1xcbjE1OTM6XFx0XFx0fVxcbjE1OTQ6XFx0XFxuMTU5NTpcXHRcXHRyZXQgPSBhdGgxMmtfY29yZV9wcmVfaW5pdChhYik7XFxuMTU5NjpcXHRcXHRpZiAocmV0KVxcbjE1OTc6XFx0XFx0XFx0Z290byBlcnJfcGNpX21zaV9mcmVlO1xcbjE1OTg6XFx0XFxuMTU5OTpcXHRcXHRyZXQgPSBhdGgxMmtfcGNpX3NldF9pcnFfYWZmaW5pdHlfaGludChhYl9wY2ksIGNwdW1hc2tfb2YoMCkpO1xcbjE2MDA6XFx0XFx0aWYgKHJldCkge1xcbjE2MDE6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBzZXQgaXJxIGFmZmluaXR5ICVkXFxcXG5cXFwiLCByZXQpO1xcbjE2MDI6XFx0XFx0XFx0Z290byBlcnJfcGNpX21zaV9mcmVlO1xcbjE2MDM6XFx0XFx0fVxcbjE2MDQ6XFx0XFxuMTYwNTpcXHRcXHRyZXQgPSBhdGgxMmtfbWhpX3JlZ2lzdGVyKGFiX3BjaSk7XFxuMTYwNjpcXHRcXHRpZiAocmV0KSB7XFxuMTYwNzpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIHJlZ2lzdGVyIG1oaTogJWRcXFxcblxcXCIsIHJldCk7XFxuMTYwODpcXHRcXHRcXHRnb3RvIGVycl9pcnFfYWZmaW5pdHlfY2xlYW51cDtcXG4xNjA5OlxcdFxcdH1cXG4xNjEwOlxcdFxcbjE2MTE6XFx0XFx0cmV0ID0gYXRoMTJrX2hhbF9zcm5nX2luaXQoYWIpO1xcbjE2MTI6XFx0XFx0aWYgKHJldClcXG4xNjEzOlxcdFxcdFxcdGdvdG8gZXJyX21oaV91bnJlZ2lzdGVyO1xcbjE2MTQ6XFx0XFxuMTYxNTpcXHRcXHRyZXQgPSBhdGgxMmtfY2VfYWxsb2NfcGlwZXMoYWIpO1xcbjE2MTY6XFx0XFx0aWYgKHJldCkge1xcbjE2MTc6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBhbGxvY2F0ZSBjZSBwaXBlczogJWRcXFxcblxcXCIsIHJldCk7XFxuMTYxODpcXHRcXHRcXHRnb3RvIGVycl9oYWxfc3JuZ19kZWluaXQ7XFxuMTYxOTpcXHRcXHR9XFxuMTYyMDpcXHRcXG4xNjIxOlxcdFxcdGF0aDEya19wY2lfaW5pdF9xbWlfY2VfY29uZmlnKGFiKTtcXG4xNjIyOlxcdFxcbjE2MjM6XFx0XFx0cmV0ID0gYXRoMTJrX3BjaV9jb25maWdfaXJxKGFiKTtcXG4xNjI0OlxcdFxcdGlmIChyZXQpIHtcXG4xNjI1OlxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gY29uZmlnIGlycTogJWRcXFxcblxcXCIsIHJldCk7XFxuMTYyNjpcXHRcXHRcXHRnb3RvIGVycl9jZV9mcmVlO1xcbjE2Mjc6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNTo0OC42NTE0MjQ5MzNaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE0NjkwOTU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBNSEkgSW50ZXJmYWNlIHdpdGggYXRoMTJrIGFuZCBTeXprYWxsZXIqKlxuXG5Pa2F5LCBzbyBgYXRoMTJrX3BjaV9wcm9iZWAgaXMgd2hlcmUgaXQgYWxsIHN0YXJ0cy4gSXQncyBjYWxsaW5nIGBhdGgxMmtfbWhpX3JlZ2lzdGVyYCwgd2hpY2ggaW5zdGFudGx5IGZsYWdzIG15IGF0dGVudGlvbi4gTUhJLCBNb2RlbSBIb3N0IEludGVyZmFjZeKApiByaWdodC4gTm93LCBjYW4gd2UgYWN0dWFsbHkgKm1vY2sqIHRoZSBNSEkgd2l0aCBTeXprYWxsZXI/IERvZXMgU3l6a2FsbGVyIGhhdmUgYSBnZW5lcmljIE1ISSBkZXZpY2UgZW11bGF0b3I/IFRoYXQncyB0aGUgcmVhbCBxdWVzdGlvbi4gSSBkb24ndCByZWNhbGwgc2VlaW5nIGFueXRoaW5nIGxpa2UgdGhhdCBpbiBpdHMgc3RhbmRhcmQgcmVwZXJ0b2lyZS5cblxuSG1tLCBpZiBgYXRoMTJrX21oaV9yZWdpc3RlcmAgZmFpbHMsIHRoZSB3aG9sZSBwcm9iZSBiYWlscy4gVGhhdCdzIGEgY3JpdGljYWwgcGF0aC4gSXQgbWVhbnMgdGhpcyBNSEkgcmVnaXN0cmF0aW9uIGlzIGEgcG90ZW50aWFsIHBvaW50IG9mIGZhaWx1cmUgd2UgbmVlZCB0byB1bmRlcnN0YW5kIGFuZCBwb3RlbnRpYWxseSBleHBsb2l0LiBBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgZGVlcGVyIGFuZCB0YWtlIGEgY2xvc2UgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGF0aDEya19taGlfcmVnaXN0ZXJgLiBOZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgTUhJLCB3aGF0IGVycm9ycyBjYW4gaGFwcGVuLCBhbmQgaG93IGl0IGhhbmRsZXMgdGhlbS4gVGhpcyBpcyB3aGVyZSB0aGUgdnVsbmVyYWJpbGl0eSBodW50aW5nIGJlZ2lucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYyOTQsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE1OjUyLjc5ODMzODYwOFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2ODQzODMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDEya19taGlfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYz0xODA9c3RhdGljIHZvaWQgYXRoMTJrX21oaV9vcF93cml0ZV9yZWcoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTE4Ni1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jOjE4NzppbnQgYXRoMTJrX21oaV9yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtMTg4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmg9MzU9dm9pZCBhdGgxMmtfbWhpX3N0b3Aoc3RydWN0IGF0aDEya19wY2kgKmFyX3BjaSwgYm9vbCBpc19zdXNwZW5kKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5oOjM2OmludCBhdGgxMmtfbWhpX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfcGNpICphcl9wY2kpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmgtMzctdm9pZCBhdGgxMmtfbWhpX3VucmVnaXN0ZXIoc3RydWN0IGF0aDEya19wY2kgKmFyX3BjaSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE1Mjg9c3RhdGljIGludCBhdGgxMmtfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNjA0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTYwNTpcXHRyZXQgPSBhdGgxMmtfbWhpX3JlZ2lzdGVyKGFiX3BjaSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNjA2LVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTU6NTIuOTI1MTg5NDZaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgxMTA5OTE0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIGBhdGgxMmtfbWhpX3JlZ2lzdGVyYCwgYXNzdW1pbmcgSSBoYXZlIGEgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHdpcmVsZXNzIGRyaXZlcnMgYW5kIE1ISSAoTXVsdGktSW50ZXJmYWNlIEhhcmR3YXJlKS5cblxuKipEaXNzZWN0aW5nIGBhdGgxMmtfbWhpX3JlZ2lzdGVyYCAtIEEgRGVlcCBEaXZlKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSBgYXRoMTJrX21oaV9yZWdpc3RlcmAuIE15IG1pbmQgaXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhlIGNvcmUgcHVycG9zZTogcmVnaXN0cmF0aW9uLiBUaGlzIGZ1bmN0aW9uLCBieSBpdHMgdmVyeSBuYW1lLCBpbXBsaWVzIGl0J3MgdGhlIGdhdGV3YXkgZm9yIGluY29ycG9yYXRpbmcgdGhlIE1ISSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBBdGhlcm9zIDEyayBkcml2ZXIuIEknbSB0aGlua2luZywgXCJ3aGF0IGV4YWN0bHkgaXMgYmVpbmcgcmVnaXN0ZXJlZD9cIiBJcyBpdCB0aGUgTUhJIGRldmljZSBpdHNlbGY/IEFyZSB3ZSBlc3RhYmxpc2hpbmcgcmVzb3VyY2UgYWxsb2NhdGlvbiBvciBpbnRlcnJ1cHQgaGFuZGxlcnM/XG5cbkkgZXhwZWN0IHRvIHNlZSB0aGUgY29kZSBoYW5kbGluZyB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgTUhJIGhhcmR3YXJlIOKAkyBtb3N0IGxpa2VseSwgaW5pdGlhbGl6aW5nIGRhdGEgc3RydWN0dXJlcywgc2V0dGluZyB1cCBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIChwcm9iYWJseSB0aHJvdWdoIERNQSBvciBzaGFyZWQgbWVtb3J5KSwgYW5kIHBvdGVudGlhbGx5IGNvbmZpZ3VyaW5nIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHJlZ2lzdGVycyBiYXNlZCBvbiB0aGUgc3BlY2lmaWMgY2FwYWJpbGl0aWVzIGFkdmVydGlzZWQgYnkgdGhlIE1ISSBjb250cm9sbGVyLiBJ4oCZbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBwb3RlbnRpYWwgaGFyZHdhcmUgdmFyaWF0aW9ucyBvciBkaWZmZXJlbnQgTUhJIGltcGxlbWVudGF0aW9ucywgYXMgd2VsbCBhcyBob3cgdGhpcyByZWdpc3RyYXRpb24gcmVsYXRlcyB0byB0aGUgbGFyZ2VyIGZyYW1ld29yayBvZiBhdGgxMmsuXG5cbknigJltIHBhcnRpY3VsYXJseSBjdXJpb3VzIGFib3V0IHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gR2l2ZW4gdGhlIGNvbXBsZXhpdGllcyBvZiBoYXJkd2FyZSBpbnRlcmZhY2VzLCBJIGFudGljaXBhdGUgcm9idXN0IGNoZWNrcyBmb3IgZmFpbHVyZSBjb25kaXRpb25zIGR1cmluZyBpbml0aWFsaXphdGlvbiwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW5kIGNvbW11bmljYXRpb24gc2V0dXAuIEhvdyBncmFjZWZ1bGx5IGRvZXMgaXQgaGFuZGxlIGEgc2NlbmFyaW8gd2hlcmUgdGhlIE1ISSBkZXZpY2UgaXNuJ3QgcmVzcG9uZGluZyBvciB0aGUgbmVjZXNzYXJ5IHJlc291cmNlcyBhcmUgdW5hdmFpbGFibGU/IERvZXMgaXQgaW5jbHVkZSBzcGVjaWZpYyBlcnJvciBjb2RlcyBhbmQgbG9nZ2luZyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzPyBUaGUgZWxlZ2FuY2Ugb2YgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGRldGVybWluZWQgYnkgaXRzIGFiaWxpdHkgdG8gcmVjb3ZlciBmcm9tIGVycm9ycywgYXQgdGhlIHNhbWUgdGltZSBiZWluZyBlZmZpY2llbnQuIFxuXG5JJ20gcHJlcGFyZWQgdG8gZGlzc2VjdCB0aGUgZnVuY3Rpb27igJlzIGFyZ3VtZW50cyBhbmQgc2NydXRpbml6ZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMuIEknbSBleHBlY3RpbmcgdG8gbG9vayBhdCBkZXRhaWxzIGxpa2UgdGhlIE1ISSBkZXZpY2UgcG9pbnRlciwgYW55IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBwYXNzZWQgaW4sIGFuZCBwb2ludGVycyB0byB0aGUgZHJpdmVy4oCZcyBwcml2YXRlIGRhdGEgc3RydWN0dXJlLiBJdCBpcyB2aXRhbCB0byBzZWUgaG93IHRoZXNlIGFyZ3VtZW50cyBhcmUgdXNlZCB0byBjb21tdW5pY2F0ZSBpbmZvcm1hdGlvbiB0byB0aGUgTUhJIGRldmljZS4gXG5cbkluIHNob3J0LCBJJ20gZXhwZWN0aW5nIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSwgYSBmb3VuZGF0aW9uYWwgZnVuY3Rpb24sIHRoYXQgbXVzdCBiZSBzb2xpZCwgZWZmaWNpZW50LCBhbmQgd2VsbC1kb2N1bWVudGVkIGlmIHRoZSBvdmVyYWxsIGRyaXZlciBpcyB0byBiZSByZXNpbGllbnQuIExldCdzIHNlZSBob3cgd2VsbCB0aGV5J3ZlIGRvbmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTA3LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTU6NTcuNzM2MjkyNTU0WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4NzpcXHRpbnQgYXRoMTJrX21oaV9yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpKVxcbiAxODg6XFx0e1xcbiAxODk6XFx0XFx0c3RydWN0IGF0aDEya19iYXNlICphYiA9IGFiX3BjaS1cXHUwMDNlYWI7XFxuIDE5MDpcXHRcXHRzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jdHJsO1xcbiAxOTE6XFx0XFx0dW5zaWduZWQgaW50IGJvYXJkX2lkO1xcbiAxOTI6XFx0XFx0aW50IHJldDtcXG4gMTkzOlxcdFxcdGJvb2wgZHVhbG1hYyA9IGZhbHNlO1xcbiAxOTQ6XFx0XFxuIDE5NTpcXHRcXHRtaGlfY3RybCA9IG1oaV9hbGxvY19jb250cm9sbGVyKCk7XFxuIDE5NjpcXHRcXHRpZiAoIW1oaV9jdHJsKVxcbiAxOTc6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDE5ODpcXHRcXG4gMTk5OlxcdFxcdGFiX3BjaS1cXHUwMDNlbWhpX3ByZV9jYiA9IE1ISV9DQl9JTlZBTElEO1xcbiAyMDA6XFx0XFx0YWJfcGNpLVxcdTAwM2VtaGlfY3RybCA9IG1oaV9jdHJsO1xcbiAyMDE6XFx0XFx0bWhpX2N0cmwtXFx1MDAzZWNudHJsX2RldiA9IGFiLVxcdTAwM2VkZXY7XFxuIDIwMjpcXHRcXHRtaGlfY3RybC1cXHUwMDNlcmVncyA9IGFiLVxcdTAwM2VtZW07XFxuIDIwMzpcXHRcXHRtaGlfY3RybC1cXHUwMDNlcmVnX2xlbiA9IGFiLVxcdTAwM2VtZW1fbGVuO1xcbiAyMDQ6XFx0XFx0bWhpX2N0cmwtXFx1MDAzZXJkZG1fc2l6ZSA9IGFiLVxcdTAwM2Vod19wYXJhbXMtXFx1MDAzZXJkZG1fc2l6ZTtcXG4gMjA1OlxcdFxcbiAyMDY6XFx0XFx0aWYgKGFiLVxcdTAwM2Vod19wYXJhbXMtXFx1MDAzZW90cF9ib2FyZF9pZF9yZWdpc3Rlcikge1xcbiAyMDc6XFx0XFx0XFx0Ym9hcmRfaWQgPVxcbiAyMDg6XFx0XFx0XFx0XFx0YXRoMTJrX3BjaV9yZWFkMzIoYWIsIGFiLVxcdTAwM2Vod19wYXJhbXMtXFx1MDAzZW90cF9ib2FyZF9pZF9yZWdpc3Rlcik7XFxuIDIwOTpcXHRcXHRcXHRib2FyZF9pZCA9IHUzMl9nZXRfYml0cyhib2FyZF9pZCwgT1RQX0JPQVJEX0lEX01BU0spO1xcbiAyMTA6XFx0XFxuIDIxMTpcXHRcXHRcXHRpZiAoIWJvYXJkX2lkIHx8IChib2FyZF9pZCA9PSBPVFBfSU5WQUxJRF9CT0FSRF9JRCkpIHtcXG4gMjEyOlxcdFxcdFxcdFxcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfQk9PVCxcXG4gMjEzOlxcdFxcdFxcdFxcdFxcdCAgIFxcXCJmYWlsZWQgdG8gcmVhZCBib2FyZCBpZFxcXFxuXFxcIik7XFxuIDIxNDpcXHRcXHRcXHR9IGVsc2UgaWYgKGJvYXJkX2lkIFxcdTAwMjYgT1RQX1ZBTElEX0RVQUxNQUNfQk9BUkRfSURfTUFTSykge1xcbiAyMTU6XFx0XFx0XFx0XFx0ZHVhbG1hYyA9IHRydWU7XFxuIDIxNjpcXHRcXHRcXHRcXHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX0JPT1QsXFxuIDIxNzpcXHRcXHRcXHRcXHRcXHQgICBcXFwiZHVhbG1hYyBmdyBzZWxlY3RlZCBmb3IgYm9hcmQgaWQ6ICV4XFxcXG5cXFwiLCBib2FyZF9pZCk7XFxuIDIxODpcXHRcXHRcXHR9XFxuIDIxOTpcXHRcXHR9XFxuIDIyMDpcXHRcXG4gMjIxOlxcdFxcdGlmIChkdWFsbWFjKSB7XFxuIDIyMjpcXHRcXHRcXHRpZiAoYWItXFx1MDAzZWZ3LmFtc3NfZHVhbG1hY19kYXRhIFxcdTAwMjZcXHUwMDI2IGFiLVxcdTAwM2Vmdy5hbXNzX2R1YWxtYWNfbGVuIFxcdTAwM2UgMCkge1xcbiAyMjM6XFx0XFx0XFx0XFx0LyogdXNlIE1ISSBmaXJtd2FyZSBmaWxlIGZyb20gZmlybXdhcmUtTi5iaW4gKi9cXG4gMjI0OlxcdFxcdFxcdFxcdG1oaV9jdHJsLVxcdTAwM2Vmd19kYXRhID0gYWItXFx1MDAzZWZ3LmFtc3NfZHVhbG1hY19kYXRhO1xcbiAyMjU6XFx0XFx0XFx0XFx0bWhpX2N0cmwtXFx1MDAzZWZ3X3N6ID0gYWItXFx1MDAzZWZ3LmFtc3NfZHVhbG1hY19sZW47XFxuIDIyNjpcXHRcXHRcXHR9IGVsc2Uge1xcbiAyMjc6XFx0XFx0XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJkdWFsbWFjIGZpcm13YXJlIElFIG5vdCBwcmVzZW50IGluIGZpcm13YXJlLU4uYmluXFxcXG5cXFwiKTtcXG4gMjI4OlxcdFxcdFxcdFxcdHJldCA9IC1FTk9FTlQ7XFxuIDIyOTpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfY29udHJvbGxlcjtcXG4gMjMwOlxcdFxcdFxcdH1cXG4gMjMxOlxcdFxcdH0gZWxzZSB7XFxuIDIzMjpcXHRcXHRcXHRpZiAoYWItXFx1MDAzZWZ3LmFtc3NfZGF0YSBcXHUwMDI2XFx1MDAyNiBhYi1cXHUwMDNlZncuYW1zc19sZW4gXFx1MDAzZSAwKSB7XFxuIDIzMzpcXHRcXHRcXHRcXHQvKiB1c2UgTUhJIGZpcm13YXJlIGZpbGUgZnJvbSBmaXJtd2FyZS1OLmJpbiAqL1xcbiAyMzQ6XFx0XFx0XFx0XFx0bWhpX2N0cmwtXFx1MDAzZWZ3X2RhdGEgPSBhYi1cXHUwMDNlZncuYW1zc19kYXRhO1xcbiAyMzU6XFx0XFx0XFx0XFx0bWhpX2N0cmwtXFx1MDAzZWZ3X3N6ID0gYWItXFx1MDAzZWZ3LmFtc3NfbGVuO1xcbiAyMzY6XFx0XFx0XFx0fSBlbHNlIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTU6NTcuNzM2NDI2NDE0WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NzU3NDUzMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipOYXZpZ2F0aW5nIHRoZSBgYWItXHUwMDNlZncuYW1zc19kYXRhYCBDb250ZXh0KipcblxuT2theSwgSSdtIHRyYWNpbmcgdGhpcyBhY2Nlc3M6IGBhYi1cdTAwM2Vmdy5hbXNzX2RhdGFgLiBJbW1lZGlhdGVseSwgbXkgbWVudGFsIG1hcCBraWNrcyBpbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBgYWItXHUwMDNlZndgIHBvaW50ZXIgZ2V0cyBwb3B1bGF0ZWQuIE15IGd1dCBmZWVsaW5nIGlzIHNvbWV0aGluZyB3aXRoaW4gdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCBwZXJoYXBzIGR1cmluZyB0aGUgc2V0dXAgcGhhc2Ugb2YgdGhlIGZpcm13YXJlLiBJcyBpdCBgYXRoMTJrX2NvcmVfcHJlX2luaXRgIG9yIHNvbWV0aGluZyBzaW1pbGFyP1xuXG5XYWl0LCBuby4gV2Fzbid0IGBhdGgxMmtfY29yZV9wcmVfaW5pdGAgY2FsbGVkICpiZWZvcmUqIGBhdGgxMmtfbWhpX3JlZ2lzdGVyYD8gWWVzLCBJIHJlbWVtYmVyLiBTbywgSSBuZWVkIHRvIHpvb20gaW4gb24gd2hhdCBoYXBwZW5zIGR1cmluZyB0aGF0IHByZS1pbml0aWFsaXphdGlvbiBzdGFnZS4gTGV0J3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhlIGZ1bmN0aW9uIGBhdGgxMmtfY29yZV9wcmVfaW5pdGAgYmVjYXVzZSB0aGF0J3MgbW9zdCBsaWtlbHkgd2hlcmUgdGhlIHJlbGV2YW50IGRhdGEgaXMgYmVpbmcgZXN0YWJsaXNoZWQuIFRpbWUgdG8gZGlnIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODU5MSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTY6MDEuNTEyMTc2NDYxWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM1NTgzMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX2NvcmVfcHJlX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYz0xMDE5PXN0YXRpYyBpbnQgYXRoMTJrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xMDcxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MTA3MjpcXHRyZXQgPSBhdGgxMmtfY29yZV9wcmVfaW5pdChhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xMDczLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYz0xNzg1PUVYUE9SVF9TWU1CT0woYXRoMTJrX2NvcmVfZ2V0X21lbW9yeV9tb2RlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0xNzg2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jOjE3ODc6aW50IGF0aDEya19jb3JlX3ByZV9pbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMTc4OC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaD0xMjY2PXZvaWQgYXRoMTJrX2NvcmVfaHdfZ3JvdXBfY2xlYW51cChzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphZyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmg6MTI2NzppbnQgYXRoMTJrX2NvcmVfcHJlX2luaXQoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmgtMTI2OC1pbnQgYXRoMTJrX2NvcmVfaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmF0aDEyayk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE1Mjg9c3RhdGljIGludCBhdGgxMmtfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNTk0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTU5NTpcXHRyZXQgPSBhdGgxMmtfY29yZV9wcmVfaW5pdChhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNTk2LVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE2OjAxLjYyNTc0OTg5NFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzE4MDY3OTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgYXRoMTJrX2NvcmVfcHJlX2luaXRgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gd29yay4gTGV0J3Mgc2VlIHdoYXQgd2UncmUgZGVhbGluZyB3aXRoIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBncmFiIGBhdGgxMmtfY29yZV9wcmVfaW5pdGAgYW5kIGdldCBhIGZlZWwgZm9yIHdoYXQncyBnb2luZyBvbi4gVGhpcyBmdW5jdGlvbiBuYW1lIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoaXMgaXMgYSBwcmVsaW1pbmFyeSBpbml0aWFsaXphdGlvbiBzdGFnZSwgcHJvYmFibHkgY3JpdGljYWwgZm9yIHNldHRpbmcgdXAgdGhlIGhhcmR3YXJlIGFuZCBwcmVwYXJpbmcgaXQgZm9yIG9wZXJhdGlvbi4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgZXNzZW50aWFsIGNvbmZpZ3VyYXRpb24gc3RlcHMsIHBvc3NpYmx5IHJlZ2lzdGVyIGFjY2Vzc2VzLCBwb3dlciBtYW5hZ2VtZW50IGNvbnNpZGVyYXRpb25zLCBhbmQgcG90ZW50aWFsbHkgc29tZSBiYXNpYyBoYXJkd2FyZSBkaXNjb3ZlcnkuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zLCBhcyB0aGUgc2VxdWVuY2UgaXMgb2Z0ZW4gY3J1Y2lhbCBpbiB0aGVzZSBsb3ctbGV2ZWwgaW5pdGlhbGl6YXRpb25zLiBJJ2xsIGFsc28gYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIG9mIGVycm9yIGhhbmRsaW5nIG9yIGZhbGxiYWNrIG1lY2hhbmlzbXMsIGFzIGFueSBpbml0aWFsaXphdGlvbiByb3V0aW5lIG11c3QgYmUgcm9idXN0LiBVbmRlcnN0YW5kaW5nIHdoYXQncyBoYXBwZW5pbmcgKmJlZm9yZSogdGhlIG1haW4gZHJpdmVyIGxvZ2ljIGtpY2tzIGluIGlzIHZpdGFsIGZvciB0cm91Ymxlc2hvb3RpbmcgbGF0ZXIgb24sIGFuZCBjYW4gaW5mb3JtIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBkb3duIHRoZSBsaW5lLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDk4LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTY6MDUuMzQzODIxMjE2WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzg3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzg3OlxcdGludCBhdGgxMmtfY29yZV9wcmVfaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbjE3ODg6XFx0e1xcbjE3ODk6XFx0XFx0Y29uc3Qgc3RydWN0IGF0aDEya19tZW1fcHJvZmlsZV9iYXNlZF9wYXJhbSAqcGFyYW07XFxuMTc5MDpcXHRcXG4xNzkxOlxcdFxcdHBhcmFtID0gXFx1MDAyNmF0aDEya19tZW1fcHJvZmlsZV9iYXNlZF9wYXJhbVthYi1cXHUwMDNldGFyZ2V0X21lbV9tb2RlXTtcXG4xNzkyOlxcdFxcdGFiLVxcdTAwM2Vwcm9maWxlX3BhcmFtID0gcGFyYW07XFxuMTc5MzpcXHRcXHRhdGgxMmtfZndfbWFwKGFiKTtcXG4xNzk0OlxcdFxcbjE3OTU6XFx0XFx0cmV0dXJuIDA7XFxuMTc5NjpcXHR9XFxuMTc5NzpcXHRcXG4xNzk4OlxcdHN0YXRpYyBpbnQgYXRoMTJrX2NvcmVfcGFuaWNfaGFuZGxlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbjE3OTk6XFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqZGF0YSlcXG4xODAwOlxcdHtcXG4xODAxOlxcdFxcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBjb250YWluZXJfb2YobmIsIHN0cnVjdCBhdGgxMmtfYmFzZSxcXG4xODAyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHBhbmljX25iKTtcXG4xODAzOlxcdFxcbjE4MDQ6XFx0XFx0cmV0dXJuIGF0aDEya19oaWZfcGFuaWNfaGFuZGxlcihhYik7XFxuMTgwNTpcXHR9XFxuMTgwNjpcXHRcXG4xODA3OlxcdHN0YXRpYyBpbnQgYXRoMTJrX2NvcmVfcGFuaWNfbm90aWZpZXJfcmVnaXN0ZXIoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4xODA4OlxcdHtcXG4xODA5OlxcdFxcdGFiLVxcdTAwM2VwYW5pY19uYi5ub3RpZmllcl9jYWxsID0gYXRoMTJrX2NvcmVfcGFuaWNfaGFuZGxlcjtcXG4xODEwOlxcdFxcbjE4MTE6XFx0XFx0cmV0dXJuIGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcihcXHUwMDI2cGFuaWNfbm90aWZpZXJfbGlzdCxcXG4xODEyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZhYi1cXHUwMDNlcGFuaWNfbmIpO1xcbjE4MTM6XFx0fVxcbjE4MTQ6XFx0XFxuMTgxNTpcXHRzdGF0aWMgdm9pZCBhdGgxMmtfY29yZV9wYW5pY19ub3RpZmllcl91bnJlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuMTgxNjpcXHR7XFxuMTgxNzpcXHRcXHRhdG9taWNfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcihcXHUwMDI2cGFuaWNfbm90aWZpZXJfbGlzdCxcXG4xODE4OlxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2YWItXFx1MDAzZXBhbmljX25iKTtcXG4xODE5OlxcdH1cXG4xODIwOlxcdFxcbjE4MjE6XFx0c3RhdGljIGlubGluZVxcbjE4MjI6XFx0Ym9vbCBhdGgxMmtfY29yZV9od19ncm91cF9jcmVhdGVfcmVhZHkoc3RydWN0IGF0aDEya19od19ncm91cCAqYWcpXFxuMTgyMzpcXHR7XFxuMTgyNDpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZhZy1cXHUwMDNlbXV0ZXgpO1xcbjE4MjU6XFx0XFxuMTgyNjpcXHRcXHRyZXR1cm4gKGFnLVxcdTAwM2VudW1fcHJvYmVkID09IGFnLVxcdTAwM2VudW1fZGV2aWNlcyk7XFxuMTgyNzpcXHR9XFxuMTgyODpcXHRcXG4xODI5OlxcdHN0YXRpYyBzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphdGgxMmtfY29yZV9od19ncm91cF9hbGxvYyhzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbjE4MzA6XFx0e1xcbjE4MzE6XFx0XFx0c3RydWN0IGF0aDEya19od19ncm91cCAqYWc7XFxuMTgzMjpcXHRcXHRpbnQgY291bnQgPSAwO1xcbjE4MzM6XFx0XFxuMTgzNDpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZhdGgxMmtfaHdfZ3JvdXBfbXV0ZXgpO1xcbjE4MzU6XFx0XFxuMTgzNjpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGFnLCBcXHUwMDI2YXRoMTJrX2h3X2dyb3VwX2xpc3QsIGxpc3QpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE2OjA1LjM0NDAzMjA4NloiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDU1NjY3MTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYXRoMTJrIEZpcm13YXJlIE1hcHBpbmcgYW5kIE1ISSBSZWdpc3RyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgYXRoMTJrX2Z3X21hcGAsIHdoaWNoIEkga25vdyBoYW5kbGVzIGZpcm13YXJlIG1hcHBpbmcuIEJ1dCB3aGF0J3MgcmVhbGx5IGNhdGNoaW5nIG15IGF0dGVudGlvbiBpcyB0aGF0IGBhdGgxMmtfbWhpX3JlZ2lzdGVyYCBjYWxscyBgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXJgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgZG9lcyBzeXprYWxsZXIgZXZlbiAqZW11bGF0ZSogTUhJPyBObywgcmlnaHQ/IEknbSBwcmV0dHkgc3VyZSBpdCBkb2Vzbid0LlxuXG5TbywgaWYgc3l6a2FsbGVyICpkb2Vzbid0KiBoYXZlIGFuIE1ISSBlbXVsYXRvciwgYG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyYCBpcyBnb2luZyB0byBiZSB0cnlpbmcgdG8gdGFsayB0byBhIGRldmljZSB2aWEgaXRzIFBDSSBtZW1vcnktbWFwcGVkIHJlZ2lzdGVycywgYG1oaV9jdHJsLVx1MDAzZXJlZ3NgLiBJIGtub3cgdGhhdCBpZiBzeXprYWxsZXIgc2V0cyB1cCBhIGZha2UgUENJIGRldmljZSwgaXQgKmNvdWxkKiBwcm92aWRlIHRob3NlIGZha2UgbWVtb3J5IHJlZ2lvbnMuIEJ1dCBNSEkgaXMgYSBiaXQgbW9yZSBpbnZvbHZlZCwgaXNuJ3QgaXQ/IFdlIG5lZWQgYSBzcGVjaWZpYyBzdGF0ZSBtYWNoaW5lIGFuZCB0aG9zZSBwZXNreSBpbnRlcnJ1cHRzIHRvIGdldCB0aGUgZGV2aWNlIGludG8gYW4gYE1ISV9SRUFEWWAgc3RhdGUuIFdpdGhvdXQgYSByZWFsIGRldmljZSBvciBhIGN1c3RvbSBlbXVsYXRvciBmb3IgTUhJLCBgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXJgIGlzIGxpa2VseSB0byB0aW1lIG91dCBvciBmYWlsIG91dHJpZ2h0LlxuXG5IYW5nIG9uLi4uIEknbSBtaXNzaW5nIHNvbWV0aGluZyBoZXJlLiBgYXRoMTJrX21oaV9yZWdpc3RlcmAgY2FsbHMgYG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyYCwgYnV0IEkgZG9uJ3QgcmVjYWxsIGl0IHdhaXRpbmcgZm9yIHRoZSBkZXZpY2UgdG8gYWN0dWFsbHkgKmJlY29tZSogcmVhZHkuIEkgbmVlZCB0byB0YWtlIGFub3RoZXIgbG9vayBhdCBgYXRoMTJrX21oaV9yZWdpc3RlcmAgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBvdmVybG9va2VkIHNvbWV0aGluZyBjcnVjaWFsLiBHb3R0YSBnbyBiYWNrIGFuZCBjaGVjayB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA1ODksIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNjoxMC43OTk3MDUxMloiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODI2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzcsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjM3OlxcdFxcdFxcdFxcdC8qIHVzZSB0aGUgb2xkIHNlcGFyYXRlIG1oaS5iaW4gTUhJIGZpcm13YXJlIGZpbGUgKi9cXG4gMjM4OlxcdFxcdFxcdFxcdGF0aDEya19jb3JlX2NyZWF0ZV9maXJtd2FyZV9wYXRoKGFiLCBBVEgxMktfQU1TU19GSUxFLFxcbiAyMzk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGFiX3BjaS1cXHUwMDNlYW1zc19wYXRoLFxcbiAyNDA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHNpemVvZihhYl9wY2ktXFx1MDAzZWFtc3NfcGF0aCkpO1xcbiAyNDE6XFx0XFx0XFx0XFx0bWhpX2N0cmwtXFx1MDAzZWZ3X2ltYWdlID0gYWJfcGNpLVxcdTAwM2VhbXNzX3BhdGg7XFxuIDI0MjpcXHRcXHRcXHR9XFxuIDI0MzpcXHRcXHR9XFxuIDI0NDpcXHRcXG4gMjQ1OlxcdFxcdHJldCA9IGF0aDEya19taGlfZ2V0X21zaShhYl9wY2kpO1xcbiAyNDY6XFx0XFx0aWYgKHJldCkge1xcbiAyNDc6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBnZXQgbXNpIGZvciBtaGlcXFxcblxcXCIpO1xcbiAyNDg6XFx0XFx0XFx0Z290byBmcmVlX2NvbnRyb2xsZXI7XFxuIDI0OTpcXHRcXHR9XFxuIDI1MDpcXHRcXG4gMjUxOlxcdFxcdGlmICghdGVzdF9iaXQoQVRIMTJLX1BDSV9GTEFHX01VTFRJX01TSV9WRUNUT1JTLCBcXHUwMDI2YWJfcGNpLVxcdTAwM2VmbGFncykpXFxuIDI1MjpcXHRcXHRcXHRtaGlfY3RybC1cXHUwMDNlaXJxX2ZsYWdzID0gSVJRRl9TSEFSRUQgfCBJUlFGX05PQkFMQU5DSU5HO1xcbiAyNTM6XFx0XFxuIDI1NDpcXHRcXHRtaGlfY3RybC1cXHUwMDNlaW92YV9zdGFydCA9IDA7XFxuIDI1NTpcXHRcXHRtaGlfY3RybC1cXHUwMDNlaW92YV9zdG9wID0gYWJfcGNpLVxcdTAwM2VkbWFfbWFzaztcXG4gMjU2OlxcdFxcdG1oaV9jdHJsLVxcdTAwM2VzYmxfc2l6ZSA9IFNaXzUxMks7XFxuIDI1NzpcXHRcXHRtaGlfY3RybC1cXHUwMDNlc2VnX2xlbiA9IFNaXzUxMks7XFxuIDI1ODpcXHRcXHRtaGlfY3RybC1cXHUwMDNlZmJjX2Rvd25sb2FkID0gdHJ1ZTtcXG4gMjU5OlxcdFxcdG1oaV9jdHJsLVxcdTAwM2VydW50aW1lX2dldCA9IGF0aDEya19taGlfb3BfcnVudGltZV9nZXQ7XFxuIDI2MDpcXHRcXHRtaGlfY3RybC1cXHUwMDNlcnVudGltZV9wdXQgPSBhdGgxMmtfbWhpX29wX3J1bnRpbWVfcHV0O1xcbiAyNjE6XFx0XFx0bWhpX2N0cmwtXFx1MDAzZXN0YXR1c19jYiA9IGF0aDEya19taGlfb3Bfc3RhdHVzX2NiO1xcbiAyNjI6XFx0XFx0bWhpX2N0cmwtXFx1MDAzZXJlYWRfcmVnID0gYXRoMTJrX21oaV9vcF9yZWFkX3JlZztcXG4gMjYzOlxcdFxcdG1oaV9jdHJsLVxcdTAwM2V3cml0ZV9yZWcgPSBhdGgxMmtfbWhpX29wX3dyaXRlX3JlZztcXG4gMjY0OlxcdFxcbiAyNjU6XFx0XFx0cmV0ID0gbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIobWhpX2N0cmwsIGFiLVxcdTAwM2Vod19wYXJhbXMtXFx1MDAzZW1oaV9jb25maWcpO1xcbiAyNjY6XFx0XFx0aWYgKHJldCkge1xcbiAyNjc6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byByZWdpc3RlciB0byBtaGkgYnVzLCBlcnIgPSAlZFxcXFxuXFxcIiwgcmV0KTtcXG4gMjY4OlxcdFxcdFxcdGdvdG8gZnJlZV9jb250cm9sbGVyO1xcbiAyNjk6XFx0XFx0fVxcbiAyNzA6XFx0XFxuIDI3MTpcXHRcXHRyZXR1cm4gMDtcXG4gMjcyOlxcdFxcbiAyNzM6XFx0ZnJlZV9jb250cm9sbGVyOlxcbiAyNzQ6XFx0XFx0bWhpX2ZyZWVfY29udHJvbGxlcihtaGlfY3RybCk7XFxuIDI3NTpcXHRcXHRhYl9wY2ktXFx1MDAzZW1oaV9jdHJsID0gTlVMTDtcXG4gMjc2OlxcdFxcdHJldHVybiByZXQ7XFxuIDI3NzpcXHR9XFxuIDI3ODpcXHRcXG4gMjc5OlxcdHZvaWQgYXRoMTJrX21oaV91bnJlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2kpXFxuIDI4MDpcXHR7XFxuIDI4MTpcXHRcXHRzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jdHJsID0gYWJfcGNpLVxcdTAwM2VtaGlfY3RybDtcXG4gMjgyOlxcdFxcbiAyODM6XFx0XFx0bWhpX3VucmVnaXN0ZXJfY29udHJvbGxlcihtaGlfY3RybCk7XFxuIDI4NDpcXHRcXHRrZnJlZShtaGlfY3RybC1cXHUwMDNlaXJxKTtcXG4gMjg1OlxcdFxcdG1oaV9mcmVlX2NvbnRyb2xsZXIobWhpX2N0cmwpO1xcbiAyODY6XFx0XFx0YWJfcGNpLVxcdTAwM2VtaGlfY3RybCA9IE5VTEw7XFxuIDI4NzpcXHR9XFxuIDI4ODpcXHRcXG4gMjg5OlxcdHN0YXRpYyBjaGFyICphdGgxMmtfbWhpX3N0YXRlX3RvX3N0cihlbnVtIGF0aDEya19taGlfc3RhdGUgbWhpX3N0YXRlKVxcbiAyOTA6XFx0e1xcbiAyOTE6XFx0XFx0c3dpdGNoIChtaGlfc3RhdGUpIHtcXG4gMjkyOlxcdFxcdGNhc2UgQVRIMTJLX01ISV9JTklUOlxcbiAyOTM6XFx0XFx0XFx0cmV0dXJuIFxcXCJJTklUXFxcIjtcXG4gMjk0OlxcdFxcdGNhc2UgQVRIMTJLX01ISV9ERUlOSVQ6XFxuIDI5NTpcXHRcXHRcXHRyZXR1cm4gXFxcIkRFSU5JVFxcXCI7XFxuIDI5NjpcXHRcXHRjYXNlIEFUSDEyS19NSElfUE9XRVJfT046XFxuIDI5NzpcXHRcXHRcXHRyZXR1cm4gXFxcIlBPV0VSX09OXFxcIjtcXG4gMjk4OlxcdFxcdGNhc2UgQVRIMTJLX01ISV9QT1dFUl9PRkY6XFxuIDI5OTpcXHRcXHRcXHRyZXR1cm4gXFxcIlBPV0VSX09GRlxcXCI7XFxuIDMwMDpcXHRcXHRjYXNlIEFUSDEyS19NSElfUE9XRVJfT0ZGX0tFRVBfREVWOlxcbiAzMDE6XFx0XFx0XFx0cmV0dXJuIFxcXCJQT1dFUl9PRkZfS0VFUF9ERVZcXFwiO1xcbiAzMDI6XFx0XFx0Y2FzZSBBVEgxMktfTUhJX0ZPUkNFX1BPV0VSX09GRjpcXG4gMzAzOlxcdFxcdFxcdHJldHVybiBcXFwiRk9SQ0VfUE9XRVJfT0ZGXFxcIjtcXG4gMzA0OlxcdFxcdGNhc2UgQVRIMTJLX01ISV9TVVNQRU5EOlxcbiAzMDU6XFx0XFx0XFx0cmV0dXJuIFxcXCJTVVNQRU5EXFxcIjtcXG4gMzA2OlxcdFxcdGNhc2UgQVRIMTJLX01ISV9SRVNVTUU6XFxuIDMwNzpcXHRcXHRcXHRyZXR1cm4gXFxcIlJFU1VNRVxcXCI7XFxuIDMwODpcXHRcXHRjYXNlIEFUSDEyS19NSElfVFJJR0dFUl9SRERNOlxcbiAzMDk6XFx0XFx0XFx0cmV0dXJuIFxcXCJUUklHR0VSX1JERE1cXFwiO1xcbiAzMTA6XFx0XFx0Y2FzZSBBVEgxMktfTUhJX1JERE1fRE9ORTpcXG4gMzExOlxcdFxcdFxcdHJldHVybiBcXFwiUkRETV9ET05FXFxcIjtcXG4gMzEyOlxcdFxcdGRlZmF1bHQ6XFxuIDMxMzpcXHRcXHRcXHRyZXR1cm4gXFxcIlVOS05PV05cXFwiO1xcbiAzMTQ6XFx0XFx0fVxcbiAzMTU6XFx0fTtcXG4gMzE2OlxcdFxcbiAzMTc6XFx0c3RhdGljIHZvaWQgYXRoMTJrX21oaV9zZXRfc3RhdGVfYml0KHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2ksXFxuIDMxODpcXHRcXHRcXHRcXHRcXHQgICAgIGVudW0gYXRoMTJrX21oaV9zdGF0ZSBtaGlfc3RhdGUpXFxuIDMxOTpcXHR7XFxuIDMyMDpcXHRcXHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiID0gYWJfcGNpLVxcdTAwM2VhYjtcXG4gMzIxOlxcdFxcbiAzMjI6XFx0XFx0c3dpdGNoIChtaGlfc3RhdGUpIHtcXG4gMzIzOlxcdFxcdGNhc2UgQVRIMTJLX01ISV9JTklUOlxcbiAzMjQ6XFx0XFx0XFx0c2V0X2JpdChBVEgxMktfTUhJX0lOSVQsIFxcdTAwMjZhYl9wY2ktXFx1MDAzZW1oaV9zdGF0ZSk7XFxuIDMyNTpcXHRcXHRcXHRicmVhaztcXG4gMzI2OlxcdFxcdGNhc2UgQVRIMTJLX01ISV9ERUlOSVQ6XFxuIDMyNzpcXHRcXHRcXHRjbGVhcl9iaXQoQVRIMTJLX01ISV9JTklULCBcXHUwMDI2YWJfcGNpLVxcdTAwM2VtaGlfc3RhdGUpO1xcbiAzMjg6XFx0XFx0XFx0YnJlYWs7XFxuIDMyOTpcXHRcXHRjYXNlIEFUSDEyS19NSElfUE9XRVJfT046XFxuIDMzMDpcXHRcXHRcXHRzZXRfYml0KEFUSDEyS19NSElfUE9XRVJfT04sIFxcdTAwMjZhYl9wY2ktXFx1MDAzZW1oaV9zdGF0ZSk7XFxuIDMzMTpcXHRcXHRcXHRicmVhaztcXG4gMzMyOlxcdFxcdGNhc2UgQVRIMTJLX01ISV9QT1dFUl9PRkY6XFxuIDMzMzpcXHRcXHRjYXNlIEFUSDEyS19NSElfUE9XRVJfT0ZGX0tFRVBfREVWOlxcbiAzMzQ6XFx0XFx0Y2FzZSBBVEgxMktfTUhJX0ZPUkNFX1BPV0VSX09GRjpcXG4gMzM1OlxcdFxcdFxcdGNsZWFyX2JpdChBVEgxMktfTUhJX1BPV0VSX09OLCBcXHUwMDI2YWJfcGNpLVxcdTAwM2VtaGlfc3RhdGUpO1xcbiAzMzY6XFx0XFx0XFx0Y2xlYXJfYml0KEFUSDEyS19NSElfVFJJR0dFUl9SRERNLCBcXHUwMDI2YWJfcGNpLVxcdTAwM2VtaGlfc3RhdGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNjoxMC43OTk5OTE3MloiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDU5NTk2NDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgQW5hbHlzaXMgb2YgdGhlIE1ISSBEZXZpY2UgU3RhcnR1cCBTZXF1ZW5jZSoqXG5cbk9rYXksIHNvIGBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcmAgcmVnaXN0ZXJzIHRoZSBjb250cm9sbGVyIOKAkyB0aGF0IG11Y2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBCdXQgdGhlIGNydWNpYWwgcXVlc3Rpb24gbmFnczogd2hlcmUgaW4gdGhlIGNvZGUgaXMgdGhlIGFjdHVhbCBNSEkgZGV2aWNlIHBvd2VyZWQgb24/IFRoYXQncyB0aGUgY3JpdGljYWwgcGllY2UgSSdtIG1pc3NpbmcuIEdpdmVuIHRoZSBuYW1lLCBteSBpbnR1aXRpb24gc2F5cyB0aGUgcmVhbCB3b3JrIHByb2JhYmx5IGhhcHBlbnMgaW4gYGF0aDEya19taGlfc3RhcnRgLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoYXQgZnVuY3Rpb24gYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiB0byB2ZXJpZnkgbXkgdGhvdWdodCBwcm9jZXNzLiBMZXQncyBzZWUgaWYgdGhpcyBodW5jaCBpcyBjb3JyZWN0LCBvciBpZiB0aGVyZSdzIGFub3RoZXIgbG9jYXRpb24gdG8gaW52ZXN0aWdhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMDAyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNjoxMy44NTk1OTI3NzJaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjI0NDAxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMmtfbWhpX3N0YXJ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM9NDA2PXN0YXRpYyBpbnQgYXRoMTJrX21oaV9zZXRfc3RhdGUoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtNDgxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM6NDgyOmludCBhdGgxMmtfbWhpX3N0YXJ0KHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2kpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy00ODMte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuaD0yMD1lbnVtIGF0aDEya19taGlfc3RhdGUge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuaC0zMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5oOjM0OmludCBhdGgxMmtfbWhpX3N0YXJ0KHN0cnVjdCBhdGgxMmtfcGNpICphcl9wY2kpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmgtMzUtdm9pZCBhdGgxMmtfbWhpX3N0b3Aoc3RydWN0IGF0aDEya19wY2kgKmFyX3BjaSwgYm9vbCBpc19zdXNwZW5kKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTQyOD1pbnQgYXRoMTJrX3BjaV9wb3dlcl91cChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNDQ2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTQ0NzpcXHRyZXQgPSBhdGgxMmtfbWhpX3N0YXJ0KGFiX3BjaSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNDQ4LVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTY6MTMuOTgxODQ1MTU0WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODA2MTQ5NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFBvd2VyLVVwIFNlcXVlbmNlIG9mIHRoZSBhdGgxMmsgUENJIERyaXZlcioqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gdGhlIHBvd2VyLXVwIHNlcXVlbmNlIG9mIHRoZSBgYXRoMTJrYCBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciBQQ0ktYmFzZWQgZGV2aWNlcy4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBhdGgxMmtfcGNpX3Bvd2VyX3VwYCBpcyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHRoYXQgcHJvY2Vzcy4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLCBzbyBJIG5vdGUgdGhhdCBpdCBjYWxscyBgYXRoMTJrX21oaV9zdGFydGAuIFRoYXQncyBpbnRlcmVzdGluZzsgaXQgc3VnZ2VzdHMgYSBtb2R1bGFyIGFwcHJvYWNoLCBsaWtlbHkgaW5kaWNhdGluZyB0aGF0IHRoZSBNSEkgKHByZXN1bWFibHkgTW9iaWxlIEhvc3QgSW50ZXJmYWNlKSBjb21wb25lbnQgaGFuZGxlcyB0aGUgY29tbXVuaWNhdGlvbiBhc3BlY3RzIGR1cmluZyBwb3dlci11cC5cblxuQnV0IHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdoZXJlIGlzIGBhdGgxMmtfcGNpX3Bvd2VyX3VwYCBpdHNlbGYgYmVpbmcgY2FsbGVkIGZyb20/IEkgbmVlZCB0byB0cmFjZSBiYWNrIHRoZSBjYWxsIHN0YWNrIHRvIHNlZSB0aGUgYnJvYWRlciBjb250ZXh0LiBJcyBpdCBjYWxsZWQgZGlyZWN0bHkgZnJvbSB0aGUgUENJIHByb2JlIGZ1bmN0aW9uPyBJcyBpdCBiZWluZyBjYWxsZWQgZnJvbSBhIHBvd2VyIG1hbmFnZW1lbnQgY2FsbGJhY2s/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb21wbGV0ZSBwb3dlci11cCBwcm9jZXNzIGFuZCBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgZHJpdmVyLiBEZXRlcm1pbmluZyB0aGlzIGNvbnRleHQgaXMgdGhlIGNyaXRpY2FsIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM2NzcsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNzoxNjoxNy41NjI0NjM0NjRaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTczODI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMmtfcGNpX3Bvd2VyX3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTMxNj1zdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2NvcmVkdW1wX2Rvd25sb2FkKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE0MjctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNDI4OmludCBhdGgxMmtfcGNpX3Bvd2VyX3VwKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNDI5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTQ4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19oaWZfb3BzIGF0aDEya19wY2lfaGlmX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTQ4OC1cXHQucG93ZXJfZG93biA9IGF0aDEya19wY2lfcG93ZXJfZG93bixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE0ODk6XFx0LnBvd2VyX3VwID0gYXRoMTJrX3BjaV9wb3dlcl91cCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE0OTAtXFx0LnN1c3BlbmQgPSBhdGgxMmtfcGNpX2hpZl9zdXNwZW5kLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaD0xNzQ9aW50IGF0aDEya19wY2lfc3RhcnQoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaDoxNzU6aW50IGF0aDEya19wY2lfcG93ZXJfdXAoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaC0xNzYtdm9pZCBhdGgxMmtfcGNpX3Bvd2VyX2Rvd24oc3RydWN0IGF0aDEya19iYXNlICphYiwgYm9vbCBpc19zdXNwZW5kKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTY6MTcuNzI0MjA3MzQ0WiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTQ4NzQ3MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgYGhpZl9vcHNgIENhbGxiYWNrKipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBpbnRvIHRoaXMgc2VjdGlvbiBvZiBjb2RlLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkFoLCB0aGlzIGlzIGFuIGBoaWZfb3BzYCBjYWxsYmFjay5cIiBUaGF0IGltbWVkaWF0ZWx5IHNldHMgdGhlIHN0YWdlLiBOb3csIHRoZSBuZXh0IGNydWNpYWwgcXVlc3Rpb24gcG9wcyB1cDogV2hlcmUgdGhlIGhlbGwgaXMgYHBvd2VyX3VwYCBiZWluZyBjYWxsZWQ/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgZ3JhcGgsIGVzcGVjaWFsbHkgYXJvdW5kIHRoZXNlIGNhbGxiYWNrIHN0cnVjdHVyZXMsIGlzIHBhcmFtb3VudC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIHBvaW50IHRvIGZpZ3VyZSBvdXQgd2hhdCdzIHRyaWdnZXJpbmcgaXQuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBpbnNpZ2h0cyB3aWxsIGJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDQ5OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE2OjIwLjc3OTA4NTQxNloiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMzQwNzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBvd2VyX3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM9MzI0PXN0YXRpYyB2b2lkIGF0aDEya19haGJfc3RvcChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zMzMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzozMzQ6c3RhdGljIGludCBhdGgxMmtfYWhiX3Bvd2VyX3VwKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zMzUte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYz03MDY9c3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaGlmX29wcyBhdGgxMmtfYWhiX2hpZl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTcxMy1cXHQubWFwX3NlcnZpY2VfdG9fcGlwZSA9IGF0aDEya19haGJfbWFwX3NlcnZpY2VfdG9fcGlwZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjcxNDpcXHQucG93ZXJfdXAgPSBhdGgxMmtfYWhiX3Bvd2VyX3VwLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtNzE1LVxcdC5wb3dlcl9kb3duID0gYXRoMTJrX2FoYl9wb3dlcl9kb3duLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM9MTgxPWludCBhdGgxMmtfY29yZV9yZXN1bWVfZWFybHkoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTE4OS1cXHRyZWluaXRfY29tcGxldGlvbihcXHUwMDI2YWItXFx1MDAzZXJlc3RhcnRfY29tcGxldGVkKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYzoxOTA6XFx0cmV0ID0gYXRoMTJrX2hpZl9wb3dlcl91cChhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMTkxLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYz04MTU9c3RhdGljIGludCBhdGgxMmtfY29yZV9zb2NfY3JlYXRlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy04MzEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6ODMyOlxcdHJldCA9IGF0aDEya19oaWZfcG93ZXJfdXAoYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTgzMy1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYz0xNjc5PXN0YXRpYyB2b2lkIGF0aDEya19jb3JlX3Jlc2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTE3NjQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6MTc2NTpcXHRcXHRhdGgxMmtfaGlmX3Bvd2VyX3VwKGFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0xNzY2LVxcdFxcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfQk9PVCwgXFxcInJlc2V0IHN0YXJ0ZWRcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmg9NjI0PXN0cnVjdCBhdGgxMmsge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmgtNzY5LVxcdHN0cnVjdCBhdGgxMmtfZndfc3RhdHMgZndfc3RhdHM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmg6NzcwOlxcdHVuc2lnbmVkIGxvbmcgbGFzdF90eF9wb3dlcl91cGRhdGU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmgtNzcxLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaD0xMj1zdHJ1Y3QgYXRoMTJrX2hpZl9vcHMge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaC0xOC1cXHR2b2lkICgqc3RvcCkoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaDoxOTpcXHRpbnQgKCpwb3dlcl91cCkoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaC0yMC1cXHR2b2lkICgqcG93ZXJfZG93bikoc3RydWN0IGF0aDEya19iYXNlICphYiwgYm9vbCBpc19zdXNwZW5kKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmg9MTMwPXN0YXRpYyBpbmxpbmUgdm9pZCBhdGgxMmtfaGlmX3dyaXRlMzIoc3RydWN0IGF0aDEya19iYXNlICphYiwgdTMyIGFkZHJlc3MsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oLTEzNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oOjEzNjpzdGF0aWMgaW5saW5lIGludCBhdGgxMmtfaGlmX3Bvd2VyX3VwKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaC0xMzcte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmg6MTM4OlxcdGlmICghYWItXFx1MDAzZWhpZi5vcHMtXFx1MDAzZXBvd2VyX3VwKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmgtMTM5LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oLTE0MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oOjE0MTpcXHRyZXR1cm4gYWItXFx1MDAzZWhpZi5vcHMtXFx1MDAzZXBvd2VyX3VwKGFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oLTE0Mi19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jPTU0NzE9aW50IGF0aDEya19tYWNfb3BfZ2V0X3R4cG93ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jLTU1MDgtXFx0XFx0XFx0bXNlY3NfdG9famlmZmllcyhBVEgxMktfUERFVl9UWF9QT1dFUl9SRUZSRVNIX1RJTUVfTVNFQ1MpICtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jOjU1MDk6XFx0XFx0XFx0XFx0XFx0IGFyLVxcdTAwM2VsYXN0X3R4X3Bvd2VyX3VwZGF0ZSkpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy01NTEwLVxcdFxcdGdvdG8gc2VuZF90eF9wb3dlcjtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtNTUzMS1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2YXItXFx1MDAzZWRhdGFfbG9jayk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYzo1NTMyOlxcdGFyLVxcdTAwM2VsYXN0X3R4X3Bvd2VyX3VwZGF0ZSA9IGppZmZpZXM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy01NTMzLVxcdGF0aDEya19md19zdGF0c19yZXNldChhcik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jPTQwNj1zdGF0aWMgaW50IGF0aDEya19taGlfc2V0X3N0YXRlKHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2ksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTQyMC1cXHRjYXNlIEFUSDEyS19NSElfSU5JVDpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jOjQyMTpcXHRcXHRyZXQgPSBtaGlfcHJlcGFyZV9mb3JfcG93ZXJfdXAoYWJfcGNpLVxcdTAwM2VtaGlfY3RybCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy00MjItXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTQzOC1cXHRcXHQgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jOjQzOTpcXHRcXHRyZXQgPSBtaGlfc3luY19wb3dlcl91cChhYl9wY2ktXFx1MDAzZW1oaV9jdHJsKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTQ0MC1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTMxNj1zdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2NvcmVkdW1wX2Rvd25sb2FkKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE0MjctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNDI4OmludCBhdGgxMmtfcGNpX3Bvd2VyX3VwKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNDI5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTQ4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19oaWZfb3BzIGF0aDEya19wY2lfaGlmX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTQ4OC1cXHQucG93ZXJfZG93biA9IGF0aDEya19wY2lfcG93ZXJfZG93bixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE0ODk6XFx0LnBvd2VyX3VwID0gYXRoMTJrX3BjaV9wb3dlcl91cCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE0OTAtXFx0LnN1c3BlbmQgPSBhdGgxMmtfcGNpX2hpZl9zdXNwZW5kLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaD0xNzQ9aW50IGF0aDEya19wY2lfc3RhcnQoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaDoxNzU6aW50IGF0aDEya19wY2lfcG93ZXJfdXAoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaC0xNzYtdm9pZCBhdGgxMmtfcGNpX3Bvd2VyX2Rvd24oc3RydWN0IGF0aDEya19iYXNlICphYiwgYm9vbCBpc19zdXNwZW5kKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTY6MjAuOTA5NDMwNzE4WiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3MjgxMDAyMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGF0aDEyayBEcml2ZXIgSW5pdGlhbGl6YXRpb24gUGF0aCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBgYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlc2AgaXMgdW5yZWFjaGFibGUgaW4gdGhpcyBlbXVsYXRlZCBlbnZpcm9ubWVudC4gVGhlIGNhbGwgY2hhaW4gaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogYGF0aDEya19jb3JlX2luaXRgIGtpY2tzIGV2ZXJ5dGhpbmcgb2ZmLCBjYWxsaW5nIGBhdGgxMmtfY29yZV9zb2NfY3JlYXRlYCwgd2hpY2ggdGhlbiBkaXZlcyBpbnRvIHRoZSBwb3dlci11cCBzZXF1ZW5jZSB3aXRoIGBhdGgxMmtfaGlmX3Bvd2VyX3VwYC4gVGhpcyBsZWFkcyB0byBgYXRoMTJrX3BjaV9wb3dlcl91cGAsIGFuZCB1bHRpbWF0ZWx5IGBhdGgxMmtfbWhpX3N0YXJ0YCwgd2hpY2ggcmVsaWVzIG9uIGBtaGlfc3luY19wb3dlcl91cGAuXG5cbkhlcmUncyB0aGUgcHJvYmxlbTogYG1oaV9zeW5jX3Bvd2VyX3VwYCBpcyBkZXNpZ25lZCB0byB3YWl0IGZvciB0aGUgTUhJIGRldmljZSB0byBiZWNvbWUgcmVhZHksIGJ1dCBiZWNhdXNlIHdlJ3JlIGluIGEgdmlydHVhbGl6YXRpb24gc2V0dXAg4oCTIHNwZWNpZmljYWxseSwgd2l0aCBzeXprYWxsZXIg4oCTIHRoZSBNSEkgZGV2aWNlIGlzbid0IGFjdHVhbGx5IGVtdWxhdGVkLiAgVGhpcyBtZWFucyB0aGF0IGBtaGlfc3luY19wb3dlcl91cGAgd2lsbCBpbmV2aXRhYmx5IHRpbWUgb3V0IG9yIGZhaWwgd2l0aCBhbiBlcnJvci5cblxuVGhlIHJpcHBsZSBlZmZlY3QgaXMgY2xlYXI6IGEgZmFpbHVyZSBpbiBgbWhpX3N5bmNfcG93ZXJfdXBgIGltbWVkaWF0ZWx5IGNhc2NhZGVzIHVwd2FyZHMsIGNhdXNpbmcgYGF0aDEya19taGlfc3RhcnRgLCBgYXRoMTJrX3BjaV9wb3dlcl91cGAsIGBhdGgxMmtfY29yZV9zb2NfY3JlYXRlYCwgYW5kIHVsdGltYXRlbHkgYGF0aDEya19jb3JlX2luaXRgIHRvIGFsbCBmYWlsLiBUaGlzIGVhcmx5IGFib3J0aW9uIG9mIHRoZSBpbml0aWFsaXphdGlvbiBwcmV2ZW50cyB1cyBmcm9tIGV2ZXIgcmVhY2hpbmcgYGF0aDEya19jb3JlX3FtaV9maXJtd2FyZV9yZWFkeWAsIHRodXMgYGF0aDEya19jb3JlX2h3X2dyb3VwX3N0YXJ0YCwgdGhlbiBgYXRoMTJrX21hY19yZWdpc3RlcmAsIGBhdGgxMmtfbWFjX2h3X3JlZ2lzdGVyYCwgYGF0aDEya19tYWNfc2V0dXBfcmVnaXN0ZXJgIGFuZCBtb3N0IGltcG9ydGFudGx5IGBhdGgxMmtfbWFjX3NldHVwX2NoYW5uZWxzX3JhdGVzYC5cblxuU28sIHRoZSBjb2RlIGluIGBhdGgxMmtfbWFjX3NldHVwX2NoYW5uZWxzX3JhdGVzYCBpcyBjb21wbGV0ZWx5IGRlYWQgY29kZSBpbiB0aGlzIGVudmlyb25tZW50LCBnaXZlbiB0aGUgbGFjayBvZiBwcm9wZXIgTUhJIGVtdWxhdGlvbi4gVGhlcmVmb3JlLCBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmdgIHRvIGBmYWxzZWAgZm9yIHRoaXMgdGFyZ2V0LiBJdCdzIGEgd2FzdGUgb2YgcmVzb3VyY2VzIHRvIHRhcmdldCB0aGF0IGZ1bmN0aW9uLCBhdCBsZWFzdCBpbiB0aGlzIHNwZWNpZmljIHNjZW5hcmlvLlxuXG5CZWZvcmUgSSBjb21taXQgdG8gdGhpcywgdGhvdWdoLCBJJ20gZ29pbmcgdG8gZG8gYSBxdWljayBzY2FuIG9mIHRoZSBjb2RlIHRvIHNlZSBpZiB0aGVyZSdzIGFueSAqb3RoZXIqIHdheSB0byByZWFjaCBgYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlc2AuIEdvdHRhIGJlIHRob3JvdWdoLCBhZnRlciBhbGwhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MDc3LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE2OjI4LjYzNzUzNDcxMloiLCJTZXEiOjYwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2ODIzNDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDEya19tYWNfc2V0dXBfY2hhbm5lbHNfcmF0ZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYz0xNDE4Nj1zdGF0aWMgdm9pZCBhdGgxMmtfbWFjX3VwZGF0ZV81XzlfZ2h6X2NoX2xpc3Qoc3RydWN0IGF0aDEyayAqYXIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jLTE0MjA1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM6MTQyMDY6c3RhdGljIGludCBhdGgxMmtfbWFjX3NldHVwX2NoYW5uZWxzX3JhdGVzKHN0cnVjdCBhdGgxMmsgKmFyLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTQyMDctXFx0XFx0XFx0XFx0XFx0ICAgdTMyIHN1cHBvcnRlZF9iYW5kcyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM9MTQ3NDM9c3RhdGljIGludCBhdGgxMmtfbWFjX3NldHVwX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMmsgKmFyLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNDc1NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jOjE0NzU2OlxcdHJldCA9IGF0aDEya19tYWNfc2V0dXBfY2hhbm5lbHNfcmF0ZXMoYXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNDc1Ny1cXHRcXHRcXHRcXHRcXHQgICAgICBjYXAtXFx1MDAzZXN1cHBvcnRlZF9iYW5kcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTc6MTY6MjguODM0MzYzOTZaIiwiU2VxIjo2MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc3OTIwNjU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBDb2RlIFBhdGggQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgY29kZSBwYXRoLCBzcGVjaWZpY2FsbHkgdGhlIHNlY3Rpb24gc3RhcnRpbmcgd2l0aCBgYXRoMTJrX21hY19zZXR1cF9yZWdpc3RlcmAsIGlzIGNvbXBsZXRlbHkgZGVhZC4gSSd2ZSB0cmFjZWQgdGhlIGNhbGwgY2hhaW4sIGFuZCBoZXJlJ3Mgd2hhdCBJJ3ZlIGZvdW5kOiBgYXRoMTJrX21hY19zZXR1cF9yZWdpc3RlcmAgaXMgb25seSBldmVyIGludm9rZWQgZnJvbSBgYXRoMTJrX21hY19od19yZWdpc3RlcmAuICBgYXRoMTJrX21hY19od19yZWdpc3RlcmAgaXMsIGluIHR1cm4sIG9ubHkgY2FsbGVkIGZyb20gYGF0aDEya19tYWNfcmVnaXN0ZXJgLiAgVGhhdCBmdW5jdGlvbiBpcyBvbmx5IGludm9rZWQgYnkgYGF0aDEya19jb3JlX2h3X2dyb3VwX3N0YXJ0YCwgd2hpY2ggaXMgb25seSBjYWxsZWQgZnJvbSBgYXRoMTJrX2NvcmVfcW1pX2Zpcm13YXJlX3JlYWR5YC4gQW5kLCBjcml0aWNhbGx5LCBgYXRoMTJrX2NvcmVfcW1pX2Zpcm13YXJlX3JlYWR5YCBpcyBvbmx5IHRyaWdnZXJlZCB3aGVuIHRoZSBmaXJtd2FyZSBpcyBhY3R1YWxseSByZWFkeSwgdXNpbmcgdGhlIFFNSSBpbnRlcmZhY2UuXG5cbkdpdmVuIHRoZSBjb250ZXh0LCB0aGUgZmlybXdhcmUgaXNuJ3QgcHJlc2VudCwgYW5kIHRoZSBNSEkgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiAgVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBlbnRpcmUgc2VxdWVuY2Ug4oCTIGFuZCB0aHVzLCB0aGUgY2FsbCB0byBgYXRoMTJrX21hY19zZXR1cF9yZWdpc3RlcmAg4oCTIHdpbGwgKm5ldmVyKiBiZSBleGVjdXRlZC4gR2l2ZW4gdGhlc2UgY29uc3RyYWludHMsIHRoZXJlJ3Mgbm8gd2F5IHRvIG1lYW5pbmdmdWxseSBmdXp6IHRoaXMsIHNvIEkgd2lsbCBtYXJrIHRoaXMgcGF0aCBhcyBub3Qgd29ydGggZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg1MzIsIk91dHB1dFRva2VucyI6MTYwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE3OjE2OjM0LjYxMzU3MzcyNVoiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2ODAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBtb2RpZmllZCBjb2RlIGlzIGxvY2F0ZWQgaW4gdGhlIGF0aDEyayBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFF1YWxjb21tIFdpLUZpIDcgaGFyZHdhcmUgKFBDSWUgb3IgQUhCKSBhbmQgZmlybXdhcmUgdG8gaW5pdGlhbGl6ZS4gVGhlIGRyaXZlciByZWxpZXMgb24gdGhlIE1vZGVtIEhvc3QgSW50ZXJmYWNlIChNSEkpIGFuZCBRdWFsY29tbSBNZXNzYWdlIEludGVyZmFjZSAoUU1JKSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBmaXJtd2FyZS4gSW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRpb24sIHRoZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZmFpbHMgZWFybHkgZHVyaW5nIE1ISSBwb3dlci11cCAoYG1oaV9zeW5jX3Bvd2VyX3VwYCksIG1lYW5pbmcgdGhlIGZpcm13YXJlIHJlYWR5IGV2ZW50IGlzIG5ldmVyIHRyaWdnZXJlZC4gQ29uc2VxdWVudGx5LCB0aGUgTUFDIHJlZ2lzdHJhdGlvbiBwYXRoIChgYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlc2ApIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBtb2RpZmllZCBjb2RlIGlzIGxvY2F0ZWQgaW4gdGhlIGF0aDEyayBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFF1YWxjb21tIFdpLUZpIDcgaGFyZHdhcmUgKFBDSWUgb3IgQUhCKSBhbmQgZmlybXdhcmUgdG8gaW5pdGlhbGl6ZS4gVGhlIGRyaXZlciByZWxpZXMgb24gdGhlIE1vZGVtIEhvc3QgSW50ZXJmYWNlIChNSEkpIGFuZCBRdWFsY29tbSBNZXNzYWdlIEludGVyZmFjZSAoUU1JKSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBmaXJtd2FyZS4gSW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRpb24sIHRoZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZmFpbHMgZWFybHkgZHVyaW5nIE1ISSBwb3dlci11cCAoYG1oaV9zeW5jX3Bvd2VyX3VwYCksIG1lYW5pbmcgdGhlIGZpcm13YXJlIHJlYWR5IGV2ZW50IGlzIG5ldmVyIHRyaWdnZXJlZC4gQ29uc2VxdWVudGx5LCB0aGUgTUFDIHJlZ2lzdHJhdGlvbiBwYXRoIChgYXRoMTJrX21hY19zZXR1cF9jaGFubmVsc19yYXRlc2ApIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7bctj[1] Phase: Running StartedAt: 2026-08-01 17:16:46 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bctj[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-01 17:16:47 +0000 UTC FinishedAt: 2026-08-01 17:17:04 +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,}