Name: series-workflowlktf6 Phase: Failed StartedAt: 2026-09-07 02:32:59 +0000 UTC FinishedAt: 2026-09-07 03:14:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlktf6[0] Phase: Succeeded StartedAt: 2026-09-07 02:32:59 +0000 UTC FinishedAt: 2026-09-07 03:13:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlktf6[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 02:32:59 +0000 UTC FinishedAt: 2026-09-07 03:13:56 +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+CgkJCTx0ZD4yMDI2LzA5LzA3IDAzOjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgbW9kaWZpZWQgY29kZSBpcyBpbiB0aGUgU2lsaWNvbiBMYWJzIFdGMjAwIFdpLUZpIGRyaXZlciAoZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeCksIHdoaWNoIG9wZXJhdGVzIG92ZXIgU1BJIG9yIFNESU8gYnVzZXMgYW5kIHJlcXVpcmVzIHBoeXNpY2FsIFNpbGljb24gTGFicyBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKHN1Y2ggYXMgUUVNVS9HQ0UpLiBDb25zZXF1ZW50bHksIHRoZXNlIHByb2JlIGFuZCByZWxlYXNlIHBhdGhzIGFyZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAzOjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzQ5YmRkMGVkNjYyMzYwNmZlNGI3M2NlN2E3YzI0MmU2NDRmNjdhMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDM6MTM6MTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uY1xuaW5kZXggNGU5OWZlN2U1YmI3OC4uMTZkNWI1MWY2ZjAzYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uY1xuQEAgLTQxMSw2ICYjNDM7NDExLDcgQEAgaW50IHdmeF9wcm9iZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldilcbiBcbiBcdGlmICh3ZGV2LVx1MDAzZWh3X2NhcHMubGlua19tb2RlID09IFNFQ19MSU5LX0VORk9SQ0VEKSB7XG4gXHRcdGRldl9lcnIod2Rldi1cdTAwM2VkZXYsIFwmIzM0O2NoaXAgcmVxdWlyZSBzZWN1cmVfbGluaywgYnV0IGNhbiYjMzk7dCBuZWdvdGlhdGUgaXRcXG5cJiMzNDspO1xuJiM0MztcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4gXHRcdGdvdG8gaXJxX3Vuc3Vic2NyaWJlO1xuIFx0fVxuIFxuQEAgLTQ4Nyw2ICYjNDM7NDg4LDcgQEAgaW50IHdmeF9wcm9iZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldilcbiBcdFx0d2Rldi1cdTAwM2Vod2J1c19vcHMtXHUwMDNlaXJxX3Vuc3Vic2NyaWJlKHdkZXYtXHUwMDNlaHdidXNfcHJpdik7XG4gYmhfdW5yZWdpc3RlcjpcbiBcdHdmeF9iaF91bnJlZ2lzdGVyKHdkZXYpO1xuJiM0MztcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZ3ZGV2LVx1MDAzZWNvb2xpbmdfdGltZW91dF93b3JrKTtcbiBcdGRlc3Ryb3lfd29ya3F1ZXVlKHdkZXYtXHUwMDNlYmhfd3EpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG5AQCAtNDk3LDYgJiM0Mzs0OTksNyBAQCB2b2lkIHdmeF9yZWxlYXNlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KVxuIFx0d2Z4X2hpZl9zaHV0ZG93bih3ZGV2KTtcbiBcdHdkZXYtXHUwMDNlaHdidXNfb3BzLVx1MDAzZWlycV91bnN1YnNjcmliZSh3ZGV2LVx1MDAzZWh3YnVzX3ByaXYpO1xuIFx0d2Z4X2JoX3VucmVnaXN0ZXIod2Rldik7XG4mIzQzO1x0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNndkZXYtXHUwMDNlY29vbGluZ190aW1lb3V0X3dvcmspO1xuIFx0ZGVzdHJveV93b3JrcXVldWUod2Rldi1cdTAwM2ViaF93cSk7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAzOjEzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIG1vZGlmaWVkIGNvZGUgaXMgaW4gdGhlIFNpbGljb24gTGFicyBXRjIwMCBXaS1GaSBkcml2ZXIgKGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngpLCB3aGljaCBvcGVyYXRlcyBvdmVyIFNQSSBvciBTRElPIGJ1c2VzIGFuZCByZXF1aXJlcyBwaHlzaWNhbCBTaWxpY29uIExhYnMgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChzdWNoIGFzIFFFTVUvR0NFKS4gQ29uc2VxdWVudGx5LCB0aGVzZSBwcm9iZSBhbmQgcmVsZWFzZSBwYXRocyBhcmUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM0OWJkZDBlZDY2MjM2MDZmZTRiNzNjZTdhN2MyNDJlNjQ0ZjY3YTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDAzOjEzOjEzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYwppbmRleCA0ZTk5ZmU3ZTViYjc4Li4xNmQ1YjUxZjZmMDNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYwpAQCAtNDExLDYgJiM0Mzs0MTEsNyBAQCBpbnQgd2Z4X3Byb2JlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQogCiAJaWYgKHdkZXYtJmd0O2h3X2NhcHMubGlua19tb2RlID09IFNFQ19MSU5LX0VORk9SQ0VEKSB7CiAJCWRldl9lcnIod2Rldi0mZ3Q7ZGV2LCAmIzM0O2NoaXAgcmVxdWlyZSBzZWN1cmVfbGluaywgYnV0IGNhbiYjMzk7dCBuZWdvdGlhdGUgaXRcbiYjMzQ7KTsKJiM0MzsJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIGlycV91bnN1YnNjcmliZTsKIAl9CiAKQEAgLTQ4Nyw2ICYjNDM7NDg4LDcgQEAgaW50IHdmeF9wcm9iZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKIAkJd2Rldi0mZ3Q7aHdidXNfb3BzLSZndDtpcnFfdW5zdWJzY3JpYmUod2Rldi0mZ3Q7aHdidXNfcHJpdik7CiBiaF91bnJlZ2lzdGVyOgogCXdmeF9iaF91bnJlZ2lzdGVyKHdkZXYpOwomIzQzOwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDt3ZGV2LSZndDtjb29saW5nX3RpbWVvdXRfd29yayk7CiAJZGVzdHJveV93b3JrcXVldWUod2Rldi0mZ3Q7Ymhfd3EpOwogCXJldHVybiBlcnI7CiB9CkBAIC00OTcsNiAmIzQzOzQ5OSw3IEBAIHZvaWQgd2Z4X3JlbGVhc2Uoc3RydWN0IHdmeF9kZXYgKndkZXYpCiAJd2Z4X2hpZl9zaHV0ZG93bih3ZGV2KTsKIAl3ZGV2LSZndDtod2J1c19vcHMtJmd0O2lycV91bnN1YnNjcmliZSh3ZGV2LSZndDtod2J1c19wcml2KTsKIAl3ZnhfYmhfdW5yZWdpc3Rlcih3ZGV2KTsKJiM0MzsJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhbXA7d2Rldi0mZ3Q7Y29vbGluZ190aW1lb3V0X3dvcmspOwogCWRlc3Ryb3lfd29ya3F1ZXVlKHdkZXYtJmd0O2JoX3dxKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTE4CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgd2Z4YCBEcml2ZXIgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoaXMgcGF0Y2ggYW5kIHRoZSBhc3NvY2lhdGVkIGRyaXZlci4gVGhlIGZpbGUgbW9kaWZpZWQgaXMgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGB3ZnhgIGRyaXZlciBpdHNlbGYuIFdoYXQgaXMgaXQsIGFuZCBjcnVjaWFsbHksIHdoYXQgYnVzIGRvZXMgaXQgb3BlcmF0ZSBvbj8gVG8gZ2V0IGEgcXVpY2sgaGFuZGxlIG9uIHRoaXMsIEkmIzM5O2xsIGxldmVyYWdlIG15IHVzdWFsIHRvb2xraXQuIEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYGdyZXBwZXJgLCBidXQgaWYgdGhhdCBwcm92ZXMgdG9vIGJyb2FkLCBJJiMzOTtsbCBzd2l0Y2ggdG8gc29tZXRoaW5nIG1vcmUgdGFyZ2V0ZWQgbGlrZSBgY29kZXNlYXJjaC1kaXItaW5kZXhgIG9yIGV2ZW4gYSBzaW1wbGUgYHJlYWQtZmlsZWAgb24gcmVsZXZhbnQgZmlsZXMgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9gIGRpcmVjdG9yeSB0byBwaW5wb2ludCB0aGUgZHJpdmVyJiMzOTtzIHB1cnBvc2UgYW5kIGl0cyBidXMgaW50ZXJhY3Rpb24uIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0dWFsIGZvdW5kYXRpb24gSSBuZWVkIHRvIHByb3Blcmx5IGV2YWx1YXRlIHRoZSBwYXRjaCYjMzk7cyBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O2JoLmMmIzM0OywKICAgICYjMzQ7YmguaCYjMzQ7LAogICAgJiMzNDtidXMuaCYjMzQ7LAogICAgJiMzNDtidXNfc2Rpby5jJiMzNDssCiAgICAmIzM0O2J1c19zcGkuYyYjMzQ7LAogICAgJiMzNDtkYXRhX3J4LmMmIzM0OywKICAgICYjMzQ7ZGF0YV9yeC5oJiMzNDssCiAgICAmIzM0O2RhdGFfdHguYyYjMzQ7LAogICAgJiMzNDtkYXRhX3R4LmgmIzM0OywKICAgICYjMzQ7ZGVidWcuYyYjMzQ7LAogICAgJiMzNDtkZWJ1Zy5oJiMzNDssCiAgICAmIzM0O2Z3aW8uYyYjMzQ7LAogICAgJiMzNDtmd2lvLmgmIzM0OywKICAgICYjMzQ7aGlmX2FwaV9jbWQuaCYjMzQ7LAogICAgJiMzNDtoaWZfYXBpX2dlbmVyYWwuaCYjMzQ7LAogICAgJiMzNDtoaWZfYXBpX21pYi5oJiMzNDssCiAgICAmIzM0O2hpZl9yeC5jJiMzNDssCiAgICAmIzM0O2hpZl9yeC5oJiMzNDssCiAgICAmIzM0O2hpZl90eC5jJiMzNDssCiAgICAmIzM0O2hpZl90eC5oJiMzNDssCiAgICAmIzM0O2hpZl90eF9taWIuYyYjMzQ7LAogICAgJiMzNDtoaWZfdHhfbWliLmgmIzM0OywKICAgICYjMzQ7aHdpby5jJiMzNDssCiAgICAmIzM0O2h3aW8uaCYjMzQ7LAogICAgJiMzNDtrZXkuYyYjMzQ7LAogICAgJiMzNDtrZXkuaCYjMzQ7LAogICAgJiMzNDttYWluLmMmIzM0OywKICAgICYjMzQ7bWFpbi5oJiMzNDssCiAgICAmIzM0O3F1ZXVlLmMmIzM0OywKICAgICYjMzQ7cXVldWUuaCYjMzQ7LAogICAgJiMzNDtzY2FuLmMmIzM0OywKICAgICYjMzQ7c2Nhbi5oJiMzNDssCiAgICAmIzM0O3N0YS5jJiMzNDssCiAgICAmIzM0O3N0YS5oJiMzNDssCiAgICAmIzM0O3RyYWNlcy5oJiMzNDssCiAgICAmIzM0O3dmeC5oJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzE0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpczoKCioqSW52ZXN0aWdhdGluZyB0aGUgU2lsaWNvbiBMYWJzIFdpLUZpIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBTaWxpY29uIExhYnMgV2ktRmkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2AgZGlyZWN0b3J5LiBNeSBpbml0aWFsIHN0ZXAgaGVyZSBpcyBwcmV0dHkgc3RhbmRhcmQ6IEkgbmVlZCB0byB2ZXJpZnkgaG93IHRoaXMgZHJpdmVyIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB3aGVyZSBJIGNhbiBmaW5kIGFsbCB0aGUgb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgZGVmYXVsdCBzZXR0aW5ncyB0aGF0IGRldGVybWluZSB3aGV0aGVyIHRoaXMgZHJpdmVyLCBhbmQgc3BlY2lmaWMgZmVhdHVyZXMgd2l0aGluIGl0LCB3aWxsIGJlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjb250cm9scyBpdHMgaW5jbHVzaW9uIGFuZCBwb3RlbnRpYWxseSBhbnkgYnVpbGQtdGltZSBkZWNpc2lvbnMgdGhhdCBhZmZlY3QgdGhlIGRyaXZlciYjMzk7cyBiZWhhdmlvci4gVGhpcyBgS2NvbmZpZ2AgZmlsZSBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIGNvbXBpbGUtdGltZSBmb290cHJpbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7V0ZYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy9NYWtlZmlsZS0yLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX1dGWCkgICAgICAmIzQzOz0gd2Z4L1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9LY29uZmlnOjI6Y29uZmlnIFdGWFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTaWxpY29uIExhYnMgd2lyZWxlc3MgY2hpcHMgV0YyMDAgYW5kIGZ1cnRoZXJcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvS2NvbmZpZy00LVx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9LY29uZmlnOjU6XHRkZXBlbmRzIG9uIE1NQyB8fCAhTU1DICMgZG8gbm90IGFsbG93IFdGWD15IGlmIE1NQz1tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L0tjb25maWctNi1cdGRlcGVuZHMgb24gKFNQSSB8fCBNTUMpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9NYWtlZmlsZT0yMz13ZngtJChzdWJzdCBtLHksJChDT05GSUdfTU1DKSkgJiM0Mzs9IGJ1c19zZGlvLm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvTWFrZWZpbGUtMjQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19XRlgpICYjNDM7PSB3Zngub1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYmguaC03LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9iaC5oOjg6I2lmbmRlZiBXRlhfQkhfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9iaC5oOjk6I2RlZmluZSBXRlhfQkhfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9iaC5oLTEwLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzLmgtNy0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzLmg6ODojaWZuZGVmIFdGWF9CVVNfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXMuaDo5OiNkZWZpbmUgV0ZYX0JVU19IXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1cy5oLTEwLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzLmgtMTMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1cy5oOjE0OiNkZWZpbmUgV0ZYX1JFR19DT05GSUcgICAgICAgIDB4MFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXMuaDoxNTojZGVmaW5lIFdGWF9SRUdfQ09OVFJPTCAgICAgICAweDFcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzLmg6MTY6I2RlZmluZSBXRlhfUkVHX0lOX09VVF9RVUVVRSAgMHgyXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1cy5oOjE3OiNkZWZpbmUgV0ZYX1JFR19BSEJfRFBPUlQgICAgIDB4M1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXMuaDoxODojZGVmaW5lIFdGWF9SRUdfQkFTRV9BRERSICAgICAweDRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzLmg6MTk6I2RlZmluZSBXRlhfUkVHX1NSQU1fRFBPUlQgICAgMHg1XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1cy5oOjIwOiNkZWZpbmUgV0ZYX1JFR19TRVRfR0VOX1JfVyAgIDB4NlxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXMuaDoyMTojZGVmaW5lIFdGWF9SRUdfRlJBTUVfT1VUICAgICAweDdcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzLmgtMjItXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc2Rpby5jPTUzPXN0YXRpYyBpbnQgd2Z4X3NkaW9fY29weV9mcm9tX2lvKHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCByZWdfaWQsIHZvaWQgKmRzdCwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NkaW8uYy02My1cdC8qIFVzZSBxdWV1ZSBtb2RlIGJ1ZmZlcnMgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NkaW8uYzo2NDpcdGlmIChyZWdfaWQgPT0gV0ZYX1JFR19JTl9PVVRfUVVFVUUpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmMtNjUtXHRcdHNkaW9fYWRkciB8PSAoYnVzLVx1MDAzZWJ1Zl9pZF9yeCAmIzQzOyAxKSBcdTAwM2NcdTAwM2MgNztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NkaW8uYy02Ni1cdHJldCA9IHNkaW9fbWVtY3B5X2Zyb21pbyhidXMtXHUwMDNlZnVuYywgZHN0LCBzZGlvX2FkZHIsIGNvdW50KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NkaW8uYzo2NzpcdGlmICghcmV0IFx1MDAyNlx1MDAyNiByZWdfaWQgPT0gV0ZYX1JFR19JTl9PVVRfUVVFVUUpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmMtNjgtXHRcdGJ1cy1cdTAwM2VidWZfaWRfcnggPSAoYnVzLVx1MDAzZWJ1Zl9pZF9yeCAmIzQzOyAxKSAlIDQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc2Rpby5jPTczPXN0YXRpYyBpbnQgd2Z4X3NkaW9fY29weV90b19pbyh2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgcmVnX2lkLCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmMtODMtXHQvKiBVc2UgcXVldWUgbW9kZSBidWZmZXJzICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmM6ODQ6XHRpZiAocmVnX2lkID09IFdGWF9SRUdfSU5fT1VUX1FVRVVFKVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc2Rpby5jLTg1LVx0XHRzZGlvX2FkZHIgfD0gYnVzLVx1MDAzZWJ1Zl9pZF90eCBcdTAwM2NcdTAwM2MgNztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmMtODctXHRyZXQgPSBzZGlvX21lbWNweV90b2lvKGJ1cy1cdTAwM2VmdW5jLCBzZGlvX2FkZHIsICh2b2lkICopc3JjLCBjb3VudCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmM6ODg6XHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgcmVnX2lkID09IFdGWF9SRUdfSU5fT1VUX1FVRVVFKVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc2Rpby5jLTg5LVx0XHRidXMtXHUwMDNlYnVmX2lkX3R4ID0gKGJ1cy1cdTAwM2VidWZfaWRfdHggJiM0MzsgMSkgJSAzMjtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zcGkuYz02NT1zdGF0aWMgaW50IHdmeF9zcGlfY29weV9mcm9tX2lvKHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBhZGRyLCB2b2lkICpkc3QsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zcGkuYy05MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NwaS5jOjkyOlx0aWYgKGJ1cy1cdTAwM2VuZWVkX3N3YWIgXHUwMDI2XHUwMDI2IGFkZHIgPT0gV0ZYX1JFR19DT05GSUcpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zcGkuYy05My1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY291bnQgLyAyOyBpJiM0MzsmIzQzOylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zcGkuYz05OD1zdGF0aWMgaW50IHdmeF9zcGlfY29weV90b19pbyh2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgYWRkciwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc3BpLmMtMTI0LVx0XHRzd2FiMTZzKFx1MDAyNnJlZ2FkZHIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc3BpLmM6MTI1Olx0aWYgKGJ1cy1cdTAwM2VuZWVkX3N3YWIgXHUwMDI2XHUwMDI2IGFkZHIgPT0gV0ZYX1JFR19DT05GSUcpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zcGkuYy0xMjYtXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50IC8gMjsgaSYjNDM7JiM0MzspXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc3BpLmMtMTMzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc3BpLmM6MTM0Olx0aWYgKGJ1cy1cdTAwM2VuZWVkX3N3YWIgXHUwMDI2XHUwMDI2IGFkZHIgPT0gV0ZYX1JFR19DT05GSUcpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zcGkuYy0xMzUtXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50IC8gMjsgaSYjNDM7JiM0MzspXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9kYXRhX3J4LmgtNy0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZGF0YV9yeC5oOjg6I2lmbmRlZiBXRlhfREFUQV9SWF9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2RhdGFfcnguaDo5OiNkZWZpbmUgV0ZYX0RBVEFfUlhfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9kYXRhX3J4LmgtMTAtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9kYXRhX3R4LmgtNy0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZGF0YV90eC5oOjg6I2lmbmRlZiBXRlhfREFUQV9UWF9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2RhdGFfdHguaDo5OiNkZWZpbmUgV0ZYX0RBVEFfVFhfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9kYXRhX3R4LmgtMTAtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9kZWJ1Zy5oLTctICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2RlYnVnLmg6ODojaWZuZGVmIFdGWF9ERUJVR19IXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2RlYnVnLmg6OTojZGVmaW5lIFdGWF9ERUJVR19IXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2RlYnVnLmgtMTAtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMTgtLyogQWRkcmVzc2VzIGJlbG93IGFyZSBpbiBTUkFNIGFyZWEgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjE5OiNkZWZpbmUgV0ZYX0ROTERfRklGTyAgICAgICAgICAgICAweDA5MDA0MDAwXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yMC0jZGVmaW5lICAgICBETkxEX0JMT0NLX1NJWkUgICAgICAgICAgIDB4MDQwMFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTIyLS8qIERvd25sb2FkIENvbnRyb2wgQXJlYSAoRENBKSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6MjM6I2RlZmluZSBXRlhfRENBX0lNQUdFX1NJWkUgICAgICAgIDB4MDkwMEMwMDBcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjI0OiNkZWZpbmUgV0ZYX0RDQV9QVVQgICAgICAgICAgICAgICAweDA5MDBDMDA0XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzoyNTojZGVmaW5lIFdGWF9EQ0FfR0VUICAgICAgICAgICAgICAgMHgwOTAwQzAwOFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6MjY6I2RlZmluZSBXRlhfRENBX0hPU1RfU1RBVFVTICAgICAgIDB4MDkwMEMwMENcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTI3LSNkZWZpbmUgICAgIEhPU1RfUkVBRFkgICAgICAgICAgICAgICAgMHg4NzY1NDMyMVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTMxLSNkZWZpbmUgICAgIEhPU1RfT0tfVE9fSlVNUCAgICAgICAgICAgMHgxNzRGQzg4MlxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6MzI6I2RlZmluZSBXRlhfRENBX05DUF9TVEFUVVMgICAgICAgIDB4MDkwMEMwMTBcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTMzLSNkZWZpbmUgICAgIE5DUF9OT1RfUkVBRFkgICAgICAgICAgICAgMHgxMjM0NTY3OFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTQwLSNkZWZpbmUgICAgIE5DUF9QVUJfS0VZX1JEWSAgICAgICAgICAgMHg3QUI0MUQxOVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6NDE6I2RlZmluZSBXRlhfRENBX0ZXX1NJR05BVFVSRSAgICAgIDB4MDkwMEMwMTRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTQyLSNkZWZpbmUgICAgIEZXX1NJR05BVFVSRV9TSVpFICAgICAgICAgMHg0MFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6NDM6I2RlZmluZSBXRlhfRENBX0ZXX0hBU0ggICAgICAgICAgIDB4MDkwMEMwNTRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTQ0LSNkZWZpbmUgICAgIEZXX0hBU0hfU0laRSAgICAgICAgICAgICAgMHgwOFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6NDU6I2RlZmluZSBXRlhfRENBX0ZXX1ZFUlNJT04gICAgICAgIDB4MDkwMEMwNUNcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTQ2LSNkZWZpbmUgICAgIEZXX1ZFUlNJT05fU0laRSAgICAgICAgICAgMHgwNFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6NDc6I2RlZmluZSBXRlhfRENBX1JFU0VSVkVEICAgICAgICAgIDB4MDkwMEMwNjBcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTQ4LSNkZWZpbmUgICAgIERDQV9SRVNFUlZFRF9TSVpFICAgICAgICAgMHgyMFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6NDk6I2RlZmluZSBXRlhfU1RBVFVTX0lORk8gICAgICAgICAgIDB4MDkwMEMwODBcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjUwOiNkZWZpbmUgV0ZYX0JPT1RMT0FERVJfTEFCRUwgICAgICAweDA5MDBDMDg0XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy01MS0jZGVmaW5lICAgICBCT09UTE9BREVSX0xBQkVMX1NJWkUgICAgIDB4M0NcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjUyOiNkZWZpbmUgV0ZYX1BURV9JTkZPICAgICAgICAgICAgICAweDA5MDBDMEMwXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy01My0jZGVmaW5lICAgICBQVEVfSU5GT19LRVlTRVRfSURYICAgICAgIDB4MERcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTU0LSNkZWZpbmUgICAgIFBURV9JTkZPX1NJWkUgICAgICAgICAgICAgMHgxMFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6NTU6I2RlZmluZSBXRlhfRVJSX0lORk8gICAgICAgICAgICAgIDB4MDkwMEMwRDBcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTU2LSNkZWZpbmUgICAgIEVSUl9JTlZBTElEX1NFQ19UWVBFICAgICAgMHgwNVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jPTE0OD1zdGF0aWMgaW50IHdhaXRfbmNwX3N0YXR1cyhzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIHN0YXR1cylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0xNTUtXHRmb3IgKDs7KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzoxNTY6XHRcdHJldCA9IHdmeF9zcmFtX3JlZ19yZWFkKHdkZXYsIFdGWF9EQ0FfTkNQX1NUQVRVUywgXHUwMDI2cmVnKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTE1Ny1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYz0xNzI9c3RhdGljIGludCB1cGxvYWRfZmlybXdhcmUoc3RydWN0IHdmeF9kZXYgKndkZXYsIGNvbnN0IHU4ICpkYXRhLCBzaXplX3QgbGVuKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTE5MC1cdFx0XHRcdHJldHVybiAtRVRJTUVET1VUO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6MTkxOlx0XHRcdHJldCA9IHdmeF9zcmFtX3JlZ19yZWFkKHdkZXYsIFdGWF9EQ0FfR0VULCBcdTAwMjZieXRlc19kb25lKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTE5Mi1cdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTE5Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjE5ODpcdFx0cmV0ID0gd2Z4X3NyYW1fd3JpdGVfZG1hX3NhZmUod2RldiwgV0ZYX0ROTERfRklGTyAmIzQzOyAob2ZmcyAlIEROTERfRklGT19TSVpFKSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTE5OS1cdFx0XHRcdFx0ICAgICAgZGF0YSAmIzQzOyBvZmZzLCBETkxEX0JMT0NLX1NJWkUpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTIwNC1cdFx0b2ZmcyAmIzQzOz0gRE5MRF9CTE9DS19TSVpFO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6MjA1Olx0XHRyZXQgPSB3Znhfc3JhbV9yZWdfd3JpdGUod2RldiwgV0ZYX0RDQV9QVVQsIG9mZnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMjA2LVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jPTIxMj1zdGF0aWMgdm9pZCBwcmludF9ib290X3N0YXR1cyhzdHJ1Y3Qgd2Z4X2RldiAqd2Rldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yMTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzoyMTY6XHR3Znhfc3JhbV9yZWdfcmVhZCh3ZGV2LCBXRlhfU1RBVFVTX0lORk8sIFx1MDAyNnJlZyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yMTctXHRpZiAocmVnID09IDB4MTIzNDU2NzgpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yMTgtXHRcdHJldHVybjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjIxOTpcdHdmeF9zcmFtX3JlZ19yZWFkKHdkZXYsIFdGWF9FUlJfSU5GTywgXHUwMDI2cmVnKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTIyMC1cdGlmIChyZWcgXHUwMDNjIEFSUkFZX1NJWkUoZndpb19lcnJvcnMpIFx1MDAyNlx1MDAyNiBmd2lvX2Vycm9yc1tyZWddKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jPTIyNj1zdGF0aWMgaW50IGxvYWRfZmlybXdhcmVfc2VjdXJlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTIzOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjI0MDpcdHdmeF9zcmFtX3JlZ193cml0ZSh3ZGV2LCBXRlhfRENBX0hPU1RfU1RBVFVTLCBIT1NUX1JFQURZKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTI0MS1cdHJldCA9IHdhaXRfbmNwX3N0YXR1cyh3ZGV2LCBOQ1BfSU5GT19SRUFEWSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMjQ0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6MjQ1Olx0d2Z4X3NyYW1fYnVmX3JlYWQod2RldiwgV0ZYX0JPT1RMT0FERVJfTEFCRUwsIGJ1ZiwgQk9PVExPQURFUl9MQUJFTF9TSVpFKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTI0Ni1cdGJ1ZltCT09UTE9BREVSX0xBQkVMX1NJWkVdID0gMDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yNDgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzoyNDk6XHR3Znhfc3JhbV9idWZfcmVhZCh3ZGV2LCBXRlhfUFRFX0lORk8sIGJ1ZiwgUFRFX0lORk9fU0laRSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yNTAtXHRyZXQgPSBnZXRfZmlybXdhcmUod2RldiwgYnVmW1BURV9JTkZPX0tFWVNFVF9JRFhdLCBcdTAwMjZmdywgXHUwMDI2Zndfb2Zmc2V0KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yNTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzoyNTU6XHR3Znhfc3JhbV9yZWdfd3JpdGUod2RldiwgV0ZYX0RDQV9IT1NUX1NUQVRVUywgSE9TVF9JTkZPX1JFQUQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMjU2LVx0cmV0ID0gd2FpdF9uY3Bfc3RhdHVzKHdkZXYsIE5DUF9SRUFEWSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMjU5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6MjYwOlx0d2Z4X3NyYW1fcmVnX3dyaXRlKHdkZXYsIFdGWF9ETkxEX0ZJRk8sIDB4RkZGRkZGRkYpOyAvKiBGaWZvIGluaXQgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjI2MTpcdHdmeF9zcmFtX3dyaXRlX2RtYV9zYWZlKHdkZXYsIFdGWF9EQ0FfRldfVkVSU0lPTiwgXCYjMzQ7XFx4MDFcXHgwMFxceDAwXFx4MDBcJiMzNDssIEZXX1ZFUlNJT05fU0laRSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzoyNjI6XHR3Znhfc3JhbV93cml0ZV9kbWFfc2FmZSh3ZGV2LCBXRlhfRENBX0ZXX1NJR05BVFVSRSwgZnctXHUwMDNlZGF0YSAmIzQzOyBmd19vZmZzZXQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yNjMtXHRcdFx0XHRGV19TSUdOQVRVUkVfU0laRSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzoyNjQ6XHR3Znhfc3JhbV93cml0ZV9kbWFfc2FmZSh3ZGV2LCBXRlhfRENBX0ZXX0hBU0gsIGZ3LVx1MDAzZWRhdGEgJiM0MzsgZndfb2Zmc2V0ICYjNDM7IEZXX1NJR05BVFVSRV9TSVpFLFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMjY1LVx0XHRcdFx0RldfSEFTSF9TSVpFKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjI2NjpcdHdmeF9zcmFtX3JlZ193cml0ZSh3ZGV2LCBXRlhfRENBX0lNQUdFX1NJWkUsIGZ3LVx1MDAzZXNpemUgLSBoZWFkZXJfc2l6ZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzoyNjc6XHR3Znhfc3JhbV9yZWdfd3JpdGUod2RldiwgV0ZYX0RDQV9IT1NUX1NUQVRVUywgSE9TVF9VUExPQURfUEVORElORyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yNjgtXHRyZXQgPSB3YWl0X25jcF9zdGF0dXMod2RldiwgTkNQX0RPV05MT0FEX1BFTkRJTkcpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTI3OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjI3OTpcdHdmeF9zcmFtX3JlZ193cml0ZSh3ZGV2LCBXRlhfRENBX0hPU1RfU1RBVFVTLCBIT1NUX1VQTE9BRF9DT01QTEVURSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yODAtXHRyZXQgPSB3YWl0X25jcF9zdGF0dXMod2RldiwgTkNQX0FVVEhfT0spO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTI4NS1cdFx0Z290byBlcnJvcjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjI4NjpcdHdmeF9zcmFtX3JlZ193cml0ZSh3ZGV2LCBXRlhfRENBX0hPU1RfU1RBVFVTLCBIT1NUX09LX1RPX0pVTVApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMjg3LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5oLTctICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uaDo4OiNpZm5kZWYgV0ZYX0ZXSU9fSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmg6OTojZGVmaW5lIFdGWF9GV0lPX0hcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5oLTEwLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX2FwaV9jbWQuaC03LVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfYXBpX2NtZC5oOjg6I2lmbmRlZiBXRlhfSElGX0FQSV9DTURfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfYXBpX2NtZC5oOjk6I2RlZmluZSBXRlhfSElGX0FQSV9DTURfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfYXBpX2NtZC5oLTEwLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX2FwaV9nZW5lcmFsLmgtNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX2FwaV9nZW5lcmFsLmg6ODojaWZuZGVmIFdGWF9ISUZfQVBJX0dFTkVSQUxfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfYXBpX2dlbmVyYWwuaDo5OiNkZWZpbmUgV0ZYX0hJRl9BUElfR0VORVJBTF9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl9hcGlfZ2VuZXJhbC5oLTEwLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX2FwaV9taWIuaC03LVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfYXBpX21pYi5oOjg6I2lmbmRlZiBXRlhfSElGX0FQSV9NSUJfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfYXBpX21pYi5oOjk6I2RlZmluZSBXRlhfSElGX0FQSV9NSUJfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfYXBpX21pYi5oLTEwLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX3J4LmgtOC0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX3J4Lmg6OTojaWZuZGVmIFdGWF9ISUZfUlhfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfcnguaDoxMDojZGVmaW5lIFdGWF9ISUZfUlhfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfcnguaC0xMS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl90eC5oLTktICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl90eC5oOjEwOiNpZm5kZWYgV0ZYX0hJRl9UWF9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl90eC5oOjExOiNkZWZpbmUgV0ZYX0hJRl9UWF9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl90eC5oLTEyLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX3R4X21pYi5oLTgtICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl90eF9taWIuaDo5OiNpZm5kZWYgV0ZYX0hJRl9UWF9NSUJfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfdHhfbWliLmg6MTA6I2RlZmluZSBXRlhfSElGX1RYX01JQl9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl90eF9taWIuaC0xMS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0xNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjE4OiNkZWZpbmUgV0ZYX0hJRl9CVUZGRVJfU0laRSAweDIwMDBcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTE5LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTk2PXN0YXRpYyBpbnQgd2Z4X2luZGlyZWN0X3JlYWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCByZWcsIHUzMiBhZGRyLCB2b2lkICpidWYsIHNpemVfdCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMTAyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MTAzOlx0V0FSTl9PTihsZW4gXHUwMDNlPSBXRlhfSElGX0JVRkZFUl9TSVpFKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjEwNDpcdFdBUk5fT04ocmVnICE9IFdGWF9SRUdfQUhCX0RQT1JUIFx1MDAyNlx1MDAyNiByZWcgIT0gV0ZYX1JFR19TUkFNX0RQT1JUKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTEwNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjEwNjpcdGlmIChyZWcgPT0gV0ZYX1JFR19BSEJfRFBPUlQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0xMDctXHRcdHByZWZldGNoID0gQ0ZHX1BSRUZFVENIX0FIQjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjEwODpcdGVsc2UgaWYgKHJlZyA9PSBXRlhfUkVHX1NSQU1fRFBPUlQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0xMDktXHRcdHByZWZldGNoID0gQ0ZHX1BSRUZFVENIX1NSQU07XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMTEyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MTEzOlx0cmV0ID0gd2Z4X3dyaXRlMzIod2RldiwgV0ZYX1JFR19CQVNFX0FERFIsIGFkZHIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMTE0LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0xMTYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoxMTc6XHRyZXQgPSB3ZnhfcmVhZDMyKHdkZXYsIFdGWF9SRUdfQ09ORklHLCBcdTAwMjZjZmcpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMTE4LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0xMjAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoxMjE6XHRyZXQgPSB3Znhfd3JpdGUzMih3ZGV2LCBXRlhfUkVHX0NPTkZJRywgY2ZnIHwgcHJlZmV0Y2gpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMTIyLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0xMjUtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAyMDsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjEyNjpcdFx0cmV0ID0gd2Z4X3JlYWQzMih3ZGV2LCBXRlhfUkVHX0NPTkZJRywgXHUwMDI2Y2ZnKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTEyNy1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYz0xNDY9c3RhdGljIGludCB3ZnhfaW5kaXJlY3Rfd3JpdGUoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCByZWcsIHUzMiBhZGRyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTE1MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjE1MTpcdFdBUk5fT04obGVuIFx1MDAzZT0gV0ZYX0hJRl9CVUZGRVJfU0laRSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoxNTI6XHRXQVJOX09OKHJlZyAhPSBXRlhfUkVHX0FIQl9EUE9SVCBcdTAwMjZcdTAwMjYgcmVnICE9IFdGWF9SRUdfU1JBTV9EUE9SVCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoxNTM6XHRyZXQgPSB3Znhfd3JpdGUzMih3ZGV2LCBXRlhfUkVHX0JBU0VfQUREUiwgYWRkcik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0xNTQtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTIxNj1pbnQgd2Z4X2RhdGFfcmVhZChzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTIyMS1cdHdkZXYtXHUwMDNlaHdidXNfb3BzLVx1MDAzZWxvY2sod2Rldi1cdTAwM2Vod2J1c19wcml2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjIyMjpcdHJldCA9IHdkZXYtXHUwMDNlaHdidXNfb3BzLVx1MDAzZWNvcHlfZnJvbV9pbyh3ZGV2LVx1MDAzZWh3YnVzX3ByaXYsIFdGWF9SRUdfSU5fT1VUX1FVRVVFLCBidWYsIGxlbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoyMjM6XHRfdHJhY2VfaW9fcmVhZChXRlhfUkVHX0lOX09VVF9RVUVVRSwgYnVmLCBsZW4pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMjI0LVx0d2Rldi1cdTAwM2Vod2J1c19vcHMtXHUwMDNldW5sb2NrKHdkZXYtXHUwMDNlaHdidXNfcHJpdik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM9MjMwPWludCB3ZnhfZGF0YV93cml0ZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTIzNS1cdHdkZXYtXHUwMDNlaHdidXNfb3BzLVx1MDAzZWxvY2sod2Rldi1cdTAwM2Vod2J1c19wcml2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjIzNjpcdHJldCA9IHdkZXYtXHUwMDNlaHdidXNfb3BzLVx1MDAzZWNvcHlfdG9faW8od2Rldi1cdTAwM2Vod2J1c19wcml2LCBXRlhfUkVHX0lOX09VVF9RVUVVRSwgYnVmLCBsZW4pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MjM3Olx0X3RyYWNlX2lvX3dyaXRlKFdGWF9SRUdfSU5fT1VUX1FVRVVFLCBidWYsIGxlbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yMzgtXHR3ZGV2LVx1MDAzZWh3YnVzX29wcy1cdTAwM2V1bmxvY2sod2Rldi1cdTAwM2Vod2J1c19wcml2KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYz0yNDQ9aW50IHdmeF9zcmFtX2J1Zl9yZWFkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgYWRkciwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMjQ1LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjI0NjpcdHJldHVybiB3ZnhfaW5kaXJlY3RfcmVhZF9sb2NrZWQod2RldiwgV0ZYX1JFR19TUkFNX0RQT1JULCBhZGRyLCBidWYsIGxlbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yNDctfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTI0OT1pbnQgd2Z4X2FoYl9idWZfcmVhZChzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTI1MC17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoyNTE6XHRyZXR1cm4gd2Z4X2luZGlyZWN0X3JlYWRfbG9ja2VkKHdkZXYsIFdGWF9SRUdfQUhCX0RQT1JULCBhZGRyLCBidWYsIGxlbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yNTItfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTI1ND1pbnQgd2Z4X3NyYW1fYnVmX3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgYWRkciwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMjU1LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjI1NjpcdHJldHVybiB3ZnhfaW5kaXJlY3Rfd3JpdGVfbG9ja2VkKHdkZXYsIFdGWF9SRUdfU1JBTV9EUE9SVCwgYWRkciwgYnVmLCBsZW4pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMjU3LX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYz0yNTk9aW50IHdmeF9haGJfYnVmX3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgYWRkciwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMjYwLXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjI2MTpcdHJldHVybiB3ZnhfaW5kaXJlY3Rfd3JpdGVfbG9ja2VkKHdkZXYsIFdGWF9SRUdfQUhCX0RQT1JULCBhZGRyLCBidWYsIGxlbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yNjItfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTI2ND1pbnQgd2Z4X3NyYW1fcmVnX3JlYWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiBhZGRyLCB1MzIgKnZhbClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTI2NS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoyNjY6XHRyZXR1cm4gd2Z4X2luZGlyZWN0X3JlYWQzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19TUkFNX0RQT1JULCBhZGRyLCB2YWwpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMjY3LX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYz0yNjk9aW50IHdmeF9haGJfcmVnX3JlYWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiBhZGRyLCB1MzIgKnZhbClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTI3MC17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoyNzE6XHRyZXR1cm4gd2Z4X2luZGlyZWN0X3JlYWQzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19BSEJfRFBPUlQsIGFkZHIsIHZhbCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yNzItfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTI3ND1pbnQgd2Z4X3NyYW1fcmVnX3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgYWRkciwgdTMyIHZhbClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTI3NS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoyNzY6XHRyZXR1cm4gd2Z4X2luZGlyZWN0X3dyaXRlMzJfbG9ja2VkKHdkZXYsIFdGWF9SRUdfU1JBTV9EUE9SVCwgYWRkciwgdmFsKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTI3Ny19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM9Mjc5PWludCB3ZnhfYWhiX3JlZ193cml0ZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIGFkZHIsIHUzMiB2YWwpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yODAte1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MjgxOlx0cmV0dXJuIHdmeF9pbmRpcmVjdF93cml0ZTMyX2xvY2tlZCh3ZGV2LCBXRlhfUkVHX0FIQl9EUE9SVCwgYWRkciwgdmFsKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTI4Mi19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM9Mjg0PWludCB3ZnhfY29uZmlnX3JlZ19yZWFkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgKnZhbClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTI4NS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoyODY6XHRyZXR1cm4gd2Z4X3JlYWQzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19DT05GSUcsIHZhbCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yODctfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTI4OT1pbnQgd2Z4X2NvbmZpZ19yZWdfd3JpdGUoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiB2YWwpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yOTAte1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MjkxOlx0cmV0dXJuIHdmeF93cml0ZTMyX2xvY2tlZCh3ZGV2LCBXRlhfUkVHX0NPTkZJRywgdmFsKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTI5Mi19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM9Mjk0PWludCB3ZnhfY29uZmlnX3JlZ193cml0ZV9iaXRzKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgbWFzaywgdTMyIHZhbClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTI5NS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoyOTY6XHRyZXR1cm4gd2Z4X3dyaXRlMzJfYml0c19sb2NrZWQod2RldiwgV0ZYX1JFR19DT05GSUcsIG1hc2ssIHZhbCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yOTctfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTI5OT1pbnQgd2Z4X2NvbnRyb2xfcmVnX3JlYWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiAqdmFsKVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMzAwLXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjMwMTpcdHJldHVybiB3ZnhfcmVhZDMyX2xvY2tlZCh3ZGV2LCBXRlhfUkVHX0NPTlRST0wsIHZhbCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0zMDItfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTMwND1pbnQgd2Z4X2NvbnRyb2xfcmVnX3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgdmFsKVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMzA1LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjMwNjpcdHJldHVybiB3Znhfd3JpdGUzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19DT05UUk9MLCB2YWwpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMzA3LX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYz0zMDk9aW50IHdmeF9jb250cm9sX3JlZ193cml0ZV9iaXRzKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgbWFzaywgdTMyIHZhbClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTMxMC17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzozMTE6XHRyZXR1cm4gd2Z4X3dyaXRlMzJfYml0c19sb2NrZWQod2RldiwgV0ZYX1JFR19DT05UUk9MLCBtYXNrLCB2YWwpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMzEyLX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYz0zMTQ9aW50IHdmeF9pZ3ByX3JlZ19yZWFkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgaW5kZXgsIHUzMiAqdmFsKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTMxOC1cdCp2YWwgPSB+MDsgLyogTmV2ZXIgcmV0dXJuIHVuZGVmaW5lZCB2YWx1ZSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MzE5Olx0cmV0ID0gd2Z4X3dyaXRlMzJfbG9ja2VkKHdkZXYsIFdGWF9SRUdfU0VUX0dFTl9SX1csIElHUFJfUlcgfCBpbmRleCBcdTAwM2NcdTAwM2MgMjQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMzIwLVx0aWYgKHJldClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTMyMS1cdFx0cmV0dXJuIHJldDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjMyMjpcdHJldCA9IHdmeF9yZWFkMzJfbG9ja2VkKHdkZXYsIFdGWF9SRUdfU0VUX0dFTl9SX1csIHZhbCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0zMjMtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTMyOT1pbnQgd2Z4X2lncHJfcmVnX3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgaW5kZXgsIHUzMiB2YWwpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0zMzAte1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MzMxOlx0cmV0dXJuIHdmeF93cml0ZTMyX2xvY2tlZCh3ZGV2LCBXRlhfUkVHX1NFVF9HRU5fUl9XLCBpbmRleCBcdTAwM2NcdTAwM2MgMjQgfCB2YWwpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMzMyLX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uaC03LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmg6ODojaWZuZGVmIFdGWF9IV0lPX0hcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5oOjk6I2RlZmluZSBXRlhfSFdJT19IXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uaC0xMC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2tleS5oLTctICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2tleS5oOjg6I2lmbmRlZiBXRlhfS0VZX0hcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngva2V5Lmg6OTojZGVmaW5lIFdGWF9LRVlfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9rZXkuaC0xMC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYy0zNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jOjM2OiNkZWZpbmUgV0ZYX1BEU19UTFZfVFlQRSAweDQ0NTAgLy8gXCYjMzQ7UERcJiMzNDsgKFBsYXRmb3JtIERhdGEpIGluIGFzY2lpIGxpdHRsZS1lbmRpYW5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jOjM3OiNkZWZpbmUgV0ZYX1BEU19NQVhfQ0hVTktfU0laRSAxNTAwXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYy0zOC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYz0xODc9aW50IHdmeF9zZW5kX3BkcyhzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTggKmJ1Ziwgc2l6ZV90IGxlbilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYy0yMDEtXHRcdH1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jOjIwMjpcdFx0aWYgKGNodW5rX3R5cGUgIT0gV0ZYX1BEU19UTFZfVFlQRSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmMtMjAzLVx0XHRcdGRldl9pbmZvKHdkZXYtXHUwMDNlZGV2LCBcJiMzNDtQRFM6JWQ6IHNraXAgdW5rbm93biBkYXRhXFxuXCYjMzQ7LCBjaHVua19udW0pO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jLTIwNS1cdFx0fVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmM6MjA2Olx0XHRpZiAoY2h1bmtfbGVuIFx1MDAzZSBXRlhfUERTX01BWF9DSFVOS19TSVpFKVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmMtMjA3LVx0XHRcdGRldl93YXJuKHdkZXYtXHUwMDNlZGV2LCBcJiMzNDtQRFM6JWQ6IHVuZXhwZWN0ZWRseSBsYXJnZSBjaHVua1xcblwmIzM0OywgY2h1bmtfbnVtKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uaC05LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmg6MTA6I2lmbmRlZiBXRlhfTUFJTl9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uaDoxMTojZGVmaW5lIFdGWF9NQUlOX0hcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5oLTEyLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvcXVldWUuaC03LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9xdWV1ZS5oOjg6I2lmbmRlZiBXRlhfUVVFVUVfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9xdWV1ZS5oOjk6I2RlZmluZSBXRlhfUVVFVUVfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9xdWV1ZS5oLTEwLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc2Nhbi5oLTctICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3NjYW4uaDo4OiNpZm5kZWYgV0ZYX1NDQU5fSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9zY2FuLmg6OTojZGVmaW5lIFdGWF9TQ0FOX0hcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc2Nhbi5oLTEwLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmgtNy0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmg6ODojaWZuZGVmIFdGWF9TVEFfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9zdGEuaDo5OiNkZWZpbmUgV0ZYX1NUQV9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5oLTEwLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvdHJhY2VzLmgtMTAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjExOiNpZiAhZGVmaW5lZChfV0ZYX1RSQUNFX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjEyOiNkZWZpbmUgX1dGWF9UUkFDRV9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oLTEzLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvdHJhY2VzLmg9MjEzPURFRklORV9FVkVOVChoaWZfZGF0YSwgaGlmX3JlY3YsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC90cmFjZXMuaC0yMTktI2RlZmluZSB3ZnhfcmVnX2xpc3RfZW51bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjIyMDpcdHdmeF9yZWdfbmFtZShXRlhfUkVHX0NPTkZJRywgICAgICAgXCYjMzQ7Q09ORklHXCYjMzQ7KSAgICAgIFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjIyMTpcdHdmeF9yZWdfbmFtZShXRlhfUkVHX0NPTlRST0wsICAgICAgXCYjMzQ7Q09OVFJPTFwmIzM0OykgICAgIFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjIyMjpcdHdmeF9yZWdfbmFtZShXRlhfUkVHX0lOX09VVF9RVUVVRSwgXCYjMzQ7UVVFVUVcJiMzNDspICAgICAgIFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjIyMzpcdHdmeF9yZWdfbmFtZShXRlhfUkVHX0FIQl9EUE9SVCwgICAgXCYjMzQ7QUhCXCYjMzQ7KSAgICAgICAgIFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjIyNDpcdHdmeF9yZWdfbmFtZShXRlhfUkVHX0JBU0VfQUREUiwgICAgXCYjMzQ7QkFTRV9BRERSXCYjMzQ7KSAgIFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjIyNTpcdHdmeF9yZWdfbmFtZShXRlhfUkVHX1NSQU1fRFBPUlQsICAgXCYjMzQ7U1JBTVwmIzM0OykgICAgICAgIFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjIyNjpcdHdmeF9yZWdfbmFtZShXRlhfUkVHX1NFVF9HRU5fUl9XLCAgXCYjMzQ7U0VUX0dFTl9SX1dcJiMzNDspIFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjIyNzpcdHdmeF9yZWdfbmFtZShXRlhfUkVHX0ZSQU1FX09VVCwgICAgXCYjMzQ7RlJBTUVfT1VUXCYjMzQ7KVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC90cmFjZXMuaC0yMjgtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC93ZnguaC05LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC93ZnguaDoxMDojaWZuZGVmIFdGWF9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3dmeC5oOjExOiNkZWZpbmUgV0ZYX0hcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvd2Z4LmgtMTItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4MjYKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIFNpbGljb24gTGFicyBXaXJlbGVzcyBJbnRlcmZhY2UgQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZSBTaWxpY29uIExhYnMgd2lyZWxlc3MgY2hpcHMsIHBhcnRpY3VsYXJseSB0aGUgV0YyMDAgc2VyaWVzLCBhcmUgaGFuZGxlZCBhdCB0aGUgYnVzIGxldmVsLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyBgYnVzX3NkaW8uY2AgYW5kIGBidXNfc3BpLmNgLiBUaGVzZSBmaWxlcyBzaG91bGQgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZXkgaW50ZXJmYWNlIHdpdGggdGhlIHN5c3RlbS4KClJpZ2h0LCB0aGVzZSBjaGlwcyBwcmltYXJpbHkgYXR0YWNoIHZpYSBTUEkgb3IgU0RJTyAoTU1DKSwgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvciBjb25maWd1cmF0aW9uLiBTbywgbXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gaG93IHRoZSBwcm9iZSBmdW5jdGlvbnMgYW5kIGJ1cyByZWdpc3RyYXRpb24gYXJlIGltcGxlbWVudGVkIGluIGVhY2ggb2YgdGhvc2UgZmlsZXM6IGBidXNfc2Rpby5jYCBhbmQgYGJ1c19zcGkuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGRldGVjdHMgdGhlIGRldmljZSwgaW5pdGlhbGl6ZXMgdGhlIGludGVyZmFjZSwgYW5kIHJlZ2lzdGVycyBpdHNlbGYgd2l0aCB0aGUgYXBwcm9wcmlhdGUgYnVzLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgbG93LWxldmVsIG9wZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NkaW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQvKlxuICAgMzpcdCAqIFNESU8gaW50ZXJmYWNlLlxuICAgNDpcdCAqXG4gICA1Olx0ICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuXG4gICA2Olx0ICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3NvblxuICAgNzpcdCAqL1xuICAgODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gICA5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW1jL3NkaW8uaFx1MDAzZVxuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYy9zZGlvX2Z1bmMuaFx1MDAzZVxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYy9jYXJkLmhcdTAwM2VcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9pcnEuaFx1MDAzZVxuICAxNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycS5oXHUwMDNlXG4gIDE2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYWxpZ24uaFx1MDAzZVxuICAxNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtLmhcdTAwM2VcbiAgMTg6XHRcbiAgMTk6XHQjaW5jbHVkZSBcJiMzNDtidXMuaFwmIzM0O1xuICAyMDpcdCNpbmNsdWRlIFwmIzM0O3dmeC5oXCYjMzQ7XG4gIDIxOlx0I2luY2x1ZGUgXCYjMzQ7aHdpby5oXCYjMzQ7XG4gIDIyOlx0I2luY2x1ZGUgXCYjMzQ7bWFpbi5oXCYjMzQ7XG4gIDIzOlx0I2luY2x1ZGUgXCYjMzQ7YmguaFwmIzM0O1xuICAyNDpcdFxuICAyNTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Z4X3BsYXRmb3JtX2RhdGEgcGRhdGFfd2YyMDAgPSB7XG4gIDI2Olx0XHQuZmlsZV9mdyA9IFwmIzM0O3dmeC93Zm1fd2YyMDBcJiMzNDssXG4gIDI3Olx0XHQuZmlsZV9wZHMgPSBcJiMzNDt3Zngvd2YyMDAucGRzXCYjMzQ7LFxuICAyODpcdH07XG4gIDI5Olx0XG4gIDMwOlx0c3RhdGljIGNvbnN0IHN0cnVjdCB3ZnhfcGxhdGZvcm1fZGF0YSBwZGF0YV9icmQ0MDAxYSA9IHtcbiAgMzE6XHRcdC5maWxlX2Z3ID0gXCYjMzQ7d2Z4L3dmbV93ZjIwMFwmIzM0OyxcbiAgMzI6XHRcdC5maWxlX3BkcyA9IFwmIzM0O3dmeC9icmQ0MDAxYS5wZHNcJiMzNDssXG4gIDMzOlx0fTtcbiAgMzQ6XHRcbiAgMzU6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhIHBkYXRhX2JyZDgwMjJhID0ge1xuICAzNjpcdFx0LmZpbGVfZncgPSBcJiMzNDt3Zngvd2ZtX3dmMjAwXCYjMzQ7LFxuICAzNzpcdFx0LmZpbGVfcGRzID0gXCYjMzQ7d2Z4L2JyZDgwMjJhLnBkc1wmIzM0OyxcbiAgMzg6XHR9O1xuICAzOTpcdFxuICA0MDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Z4X3BsYXRmb3JtX2RhdGEgcGRhdGFfYnJkODAyM2EgPSB7XG4gIDQxOlx0XHQuZmlsZV9mdyA9IFwmIzM0O3dmeC93Zm1fd2YyMDBcJiMzNDssXG4gIDQyOlx0XHQuZmlsZV9wZHMgPSBcJiMzNDt3ZngvYnJkODAyM2EucGRzXCYjMzQ7LFxuICA0MzpcdH07XG4gIDQ0Olx0XG4gIDQ1Olx0c3RydWN0IHdmeF9zZGlvX3ByaXYge1xuICA0NjpcdFx0c3RydWN0IHNkaW9fZnVuYyAqZnVuYztcbiAgNDc6XHRcdHN0cnVjdCB3ZnhfZGV2ICpjb3JlO1xuICA0ODpcdFx0dTggYnVmX2lkX3R4O1xuICA0OTpcdFx0dTggYnVmX2lkX3J4O1xuICA1MDpcdFx0aW50IG9mX2lycTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkyNAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIERlZXBlciBpbnRvIHRoZSBCdXMgRHJpdmVycyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGZvY3VzaW5nIG9uIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBvZiB0aGlzIGVtYmVkZGVkIHN5c3RlbSwgYnV0IG5vdyBJIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoZXNlIGJ1cyBkcml2ZXJzIGFyZSBpbXBsZW1lbnRlZC4gSSYjMzk7dmUgYWxyZWFkeSBnb3QgYSBnb29kIGdyYXNwIG9uIHRoZSBjb25jZXB0dWFsIGZyYW1ld29yaywgYnV0IHVuZGVyc3RhbmRpbmcgdGhlIGFjdHVhbCBjb2RlIGluIGBidXNfc2Rpby5jYCBhbmQgYGJ1c19zcGkuY2AgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIHNlZSBob3cgdGhleSYjMzk7dmUgaGFuZGxlZCB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgU0RJTyBhbmQgU1BJIGNvbW11bmljYXRpb24uIFRoaW5ncyBsaWtlIGNsb2NrIGNvbmZpZ3VyYXRpb24sIERNQSBzZXR1cCwgaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgdGhlIHNwZWNpZmljIHJlZ2lzdGVyIGludGVyYWN0aW9ucyBhcmUgd2hhdCBJJiMzOTttIGFmdGVyLiBJdCYjMzk7cyB0aW1lIHRvIGFuYWx5emUgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiB0byBzZWUgaG93IHRoZSBzb2Z0d2FyZSBpbnRlcmFjdHMgd2l0aCB0aGUgaGFyZHdhcmUgYXQgYSBncmFudWxhciBsZXZlbC4gSSB3YW50IHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGluZWZmaWNpZW5jaWVzLCBvciBjbGV2ZXIgb3B0aW1pemF0aW9ucyB0aGV5JiMzOTt2ZSBlbXBsb3llZC4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSYjMzk7dmUgYWJzdHJhY3RlZCB0aGUgaGFyZHdhcmUgZGlmZmVyZW5jZXMgYmV0d2VlbiB2YXJpb3VzIFNESU8gb3IgU1BJIGNvbnRyb2xsZXJzLCBhbmQgaG93IHRoZXkgZGVhbCB3aXRoIHRoZSB0aW1pbmcgY29uc3RyYWludHMgdGhhdCBhcmUgc28gY3JpdGljYWwgZm9yIGJ1cyBzdGFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc2Rpby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDA6XHRcdGlmICghZmxhZ3MpXG4gMTQxOlx0XHRcdGZsYWdzID0gSVJRRl9UUklHR0VSX0hJR0g7XG4gMTQyOlx0XHRmbGFncyB8PSBJUlFGX09ORVNIT1Q7XG4gMTQzOlx0XHRyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKFx1MDAyNmJ1cy1cdTAwM2VmdW5jLVx1MDAzZWRldiwgYnVzLVx1MDAzZW9mX2lycSwgTlVMTCxcbiAxNDQ6XHRcdFx0XHRcdFx0d2Z4X3NkaW9faXJxX2hhbmRsZXJfZXh0LCBmbGFncywgXCYjMzQ7d2Z4XCYjMzQ7LCBidXMpO1xuIDE0NTpcdFx0aWYgKHJldClcbiAxNDY6XHRcdFx0cmV0dXJuIHJldDtcbiAxNDc6XHRcdHNkaW9fY2xhaW1faG9zdChidXMtXHUwMDNlZnVuYyk7XG4gMTQ4Olx0XHRjY2NyID0gc2Rpb19mMF9yZWFkYihidXMtXHUwMDNlZnVuYywgU0RJT19DQ0NSX0lFTngsIE5VTEwpO1xuIDE0OTpcdFx0Y2NjciB8PSBCSVQoMCk7XG4gMTUwOlx0XHRjY2NyIHw9IEJJVChidXMtXHUwMDNlZnVuYy1cdTAwM2VudW0pO1xuIDE1MTpcdFx0c2Rpb19mMF93cml0ZWIoYnVzLVx1MDAzZWZ1bmMsIGNjY3IsIFNESU9fQ0NDUl9JRU54LCBOVUxMKTtcbiAxNTI6XHRcdHNkaW9fcmVsZWFzZV9ob3N0KGJ1cy1cdTAwM2VmdW5jKTtcbiAxNTM6XHRcdHJldHVybiAwO1xuIDE1NDpcdH1cbiAxNTU6XHRcbiAxNTY6XHRzdGF0aWMgaW50IHdmeF9zZGlvX2lycV91bnN1YnNjcmliZSh2b2lkICpwcml2KVxuIDE1NzpcdHtcbiAxNTg6XHRcdHN0cnVjdCB3Znhfc2Rpb19wcml2ICpidXMgPSBwcml2O1xuIDE1OTpcdFx0aW50IHJldDtcbiAxNjA6XHRcbiAxNjE6XHRcdGlmIChidXMtXHUwMDNlb2ZfaXJxKVxuIDE2MjpcdFx0XHRkZXZtX2ZyZWVfaXJxKFx1MDAyNmJ1cy1cdTAwM2VmdW5jLVx1MDAzZWRldiwgYnVzLVx1MDAzZW9mX2lycSwgYnVzKTtcbiAxNjM6XHRcdHNkaW9fY2xhaW1faG9zdChidXMtXHUwMDNlZnVuYyk7XG4gMTY0Olx0XHRyZXQgPSBzZGlvX3JlbGVhc2VfaXJxKGJ1cy1cdTAwM2VmdW5jKTtcbiAxNjU6XHRcdHNkaW9fcmVsZWFzZV9ob3N0KGJ1cy1cdTAwM2VmdW5jKTtcbiAxNjY6XHRcdHJldHVybiByZXQ7XG4gMTY3Olx0fVxuIDE2ODpcdFxuIDE2OTpcdHN0YXRpYyBzaXplX3Qgd2Z4X3NkaW9fYWxpZ25fc2l6ZSh2b2lkICpwcml2LCBzaXplX3Qgc2l6ZSlcbiAxNzA6XHR7XG4gMTcxOlx0XHRzdHJ1Y3Qgd2Z4X3NkaW9fcHJpdiAqYnVzID0gcHJpdjtcbiAxNzI6XHRcbiAxNzM6XHRcdHJldHVybiBzZGlvX2FsaWduX3NpemUoYnVzLVx1MDAzZWZ1bmMsIHNpemUpO1xuIDE3NDpcdH1cbiAxNzU6XHRcbiAxNzY6XHRzdGF0aWMgdm9pZCB3Znhfc2Rpb19zZXRfd2FrZXVwKHZvaWQgKnByaXYsIGJvb2wgZW5hYmxlZClcbiAxNzc6XHR7XG4gMTc4Olx0XHRzdHJ1Y3Qgd2Z4X3NkaW9fcHJpdiAqYnVzID0gcHJpdjtcbiAxNzk6XHRcbiAxODA6XHRcdGRldmljZV9zZXRfd2FrZXVwX2VuYWJsZShcdTAwMjZidXMtXHUwMDNlZnVuYy1cdTAwM2VkZXYsIGVuYWJsZWQpO1xuIDE4MTpcdH1cbiAxODI6XHRcbiAxODM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHdmeF9od2J1c19vcHMgd2Z4X3NkaW9faHdidXNfb3BzID0ge1xuIDE4NDpcdFx0LmNvcHlfZnJvbV9pbyAgICA9IHdmeF9zZGlvX2NvcHlfZnJvbV9pbyxcbiAxODU6XHRcdC5jb3B5X3RvX2lvICAgICAgPSB3Znhfc2Rpb19jb3B5X3RvX2lvLFxuIDE4NjpcdFx0LmlycV9zdWJzY3JpYmUgICA9IHdmeF9zZGlvX2lycV9zdWJzY3JpYmUsXG4gMTg3Olx0XHQuaXJxX3Vuc3Vic2NyaWJlID0gd2Z4X3NkaW9faXJxX3Vuc3Vic2NyaWJlLFxuIDE4ODpcdFx0LmxvY2sgICAgICAgICAgICA9IHdmeF9zZGlvX2xvY2ssXG4gMTg5Olx0XHQudW5sb2NrICAgICAgICAgID0gd2Z4X3NkaW9fdW5sb2NrLFxuIDE5MDpcdFx0LmFsaWduX3NpemUgICAgICA9IHdmeF9zZGlvX2FsaWduX3NpemUsXG4gMTkxOlx0XHQuc2V0X3dha2V1cCAgICAgID0gd2Z4X3NkaW9fc2V0X3dha2V1cCxcbiAxOTI6XHR9O1xuIDE5MzpcdFxuIDE5NDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHdmeF9zZGlvX29mX21hdGNoW10gPSB7XG4gMTk1Olx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7c2lsYWJzLHdmMjAwXCYjMzQ7LCAgICAuZGF0YSA9IFx1MDAyNnBkYXRhX3dmMjAwIH0sXG4gMTk2Olx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7c2lsYWJzLGJyZDQwMDFhXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNnBkYXRhX2JyZDQwMDFhIH0sXG4gMTk3Olx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7c2lsYWJzLGJyZDgwMjJhXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNnBkYXRhX2JyZDgwMjJhIH0sXG4gMTk4Olx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7c2lsYWJzLGJyZDgwMjNhXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNnBkYXRhX2JyZDgwMjNhIH0sXG4gMTk5Olx0XHR7IH0sXG4gMjAwOlx0fTtcbiAyMDE6XHRNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB3Znhfc2Rpb19vZl9tYXRjaCk7XG4gMjAyOlx0XG4gMjAzOlx0c3RhdGljIGludCB3Znhfc2Rpb19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcbiAyMDQ6XHR7XG4gMjA1Olx0XHRzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jID0gZGV2X3RvX3NkaW9fZnVuYyhkZXYpO1xuIDIwNjpcdFx0c3RydWN0IHdmeF9zZGlvX3ByaXYgKmJ1cyA9IHNkaW9fZ2V0X2RydmRhdGEoZnVuYyk7XG4gMjA3Olx0XHRpbnQgcmV0O1xuIDIwODpcdFxuIDIwOTpcdFx0aWYgKCFkZXZpY2VfbWF5X3dha2V1cChkZXYpKVxuIDIxMDpcdFx0XHRyZXR1cm4gMDtcbiAyMTE6XHRcbiAyMTI6XHRcdGZsdXNoX3dvcmsoXHUwMDI2YnVzLVx1MDAzZWNvcmUtXHUwMDNlaGlmLmJoKTtcbiAyMTM6XHRcdC8qIEVpdGhlciBcJiMzNDt3YWtldXAtc291cmNlXCYjMzQ7IGF0dHJpYnV0ZSBvciBvdXQtb2YtYmFuZCBJUlEgaXMgcmVxdWlyZWQgZm9yXG4gMjE0Olx0XHQgKiBXb1dMQU5cbiAyMTU6XHRcdCAqL1xuIDIxNjpcdFx0aWYgKGJ1cy1cdTAwM2VvZl9pcnEpIHtcbiAyMTc6XHRcdFx0cmV0ID0gZW5hYmxlX2lycV93YWtlKGJ1cy1cdTAwM2VvZl9pcnEpO1xuIDIxODpcdFx0XHRpZiAocmV0KVxuIDIxOTpcdFx0XHRcdHJldHVybiByZXQ7XG4gMjIwOlx0XHR9IGVsc2Uge1xuIDIyMTpcdFx0XHRyZXQgPSBzZGlvX3NldF9ob3N0X3BtX2ZsYWdzKGZ1bmMsIE1NQ19QTV9XQUtFX1NESU9fSVJRKTtcbiAyMjI6XHRcdFx0aWYgKHJldClcbiAyMjM6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDIyNDpcdFx0fVxuIDIyNTpcdFx0cmV0dXJuIHNkaW9fc2V0X2hvc3RfcG1fZmxhZ3MoZnVuYywgTU1DX1BNX0tFRVBfUE9XRVIpO1xuIDIyNjpcdH1cbiAyMjc6XHRcbiAyMjg6XHRzdGF0aWMgaW50IHdmeF9zZGlvX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gMjI5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODc4MgoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYnVzX3NkaW8uYyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB6ZXJvaW5nIGluIG9uIHRoZSB2ZXJ5IGJvdHRvbSBvZiB0aGUgYGJ1c19zZGlvLmNgIGZpbGUuIE5vIG5lZWQgZm9yIGEgY29tcHJlaGVuc2l2ZSBvdmVydmlldyByaWdodCBub3c7IEkmIzM5O20gYmV0dGluZyB0aGUgcm9vdCBvZiB0aGUgcHJvYmxlbSwgb3IgYXQgbGVhc3QgYSBjcml0aWNhbCBjbHVlLCBpcyBidXJpZWQgZGVlcC4gSSBoYXZlIGEgaHVuY2ggaXQmIzM5O3MgYSByZWNlbnQgY2hhbmdlLCBhIGJvdW5kYXJ5IGNvbmRpdGlvbiBpc3N1ZSwgb3IgbWF5YmUgc29tZSBvdmVybG9va2VkIGluaXRpYWxpemF0aW9uIG5lYXIgdGhlIGVuZCBvZiB0aGUgZmlsZS4gSXTigJlzIHVzdWFsbHkgd2hlcmUgSSBzdGFydCBsb29raW5nIGluIGNhc2VzIGxpa2UgdGhpcy4gTGV04oCZcyBzZWUgd2hhdCBnZW1zIGFyZSB3YWl0aW5nIHRvIGJlIHVuY292ZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIzMDpcdFx0c3RydWN0IHNkaW9fZnVuYyAqZnVuYyA9IGRldl90b19zZGlvX2Z1bmMoZGV2KTtcbiAyMzE6XHRcdHN0cnVjdCB3Znhfc2Rpb19wcml2ICpidXMgPSBzZGlvX2dldF9kcnZkYXRhKGZ1bmMpO1xuIDIzMjpcdFxuIDIzMzpcdFx0aWYgKCFkZXZpY2VfbWF5X3dha2V1cChkZXYpKVxuIDIzNDpcdFx0XHRyZXR1cm4gMDtcbiAyMzU6XHRcdGlmIChidXMtXHUwMDNlb2ZfaXJxKVxuIDIzNjpcdFx0XHRyZXR1cm4gZGlzYWJsZV9pcnFfd2FrZShidXMtXHUwMDNlb2ZfaXJxKTtcbiAyMzc6XHRcdGVsc2VcbiAyMzg6XHRcdFx0cmV0dXJuIDA7XG4gMjM5Olx0fVxuIDI0MDpcdFxuIDI0MTpcdHN0YXRpYyBpbnQgd2Z4X3NkaW9fcHJvYmUoc3RydWN0IHNkaW9fZnVuYyAqZnVuYywgY29uc3Qgc3RydWN0IHNkaW9fZGV2aWNlX2lkICppZClcbiAyNDI6XHR7XG4gMjQzOlx0XHRjb25zdCBzdHJ1Y3Qgd2Z4X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKFx1MDAyNmZ1bmMtXHUwMDNlZGV2KTtcbiAyNDQ6XHRcdG1tY19wbV9mbGFnX3QgcG1fZmxhZyA9IHNkaW9fZ2V0X2hvc3RfcG1fY2FwcyhmdW5jKTtcbiAyNDU6XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBmdW5jLVx1MDAzZWRldi5vZl9ub2RlO1xuIDI0NjpcdFx0c3RydWN0IHdmeF9zZGlvX3ByaXYgKmJ1cztcbiAyNDc6XHRcdGludCByZXQ7XG4gMjQ4Olx0XG4gMjQ5Olx0XHRpZiAoZnVuYy1cdTAwM2VudW0gIT0gMSkge1xuIDI1MDpcdFx0XHRkZXZfZXJyKFx1MDAyNmZ1bmMtXHUwMDNlZGV2LCBcJiMzNDtTRElPIGZ1bmN0aW9uIG51bWJlciBpcyAlZCB3aGlsZSBpdCBzaG91bGQgYWx3YXlzIGJlIDEgKHVuc3VwcG9ydGVkIGNoaXA/KVxcblwmIzM0OyxcbiAyNTE6XHRcdFx0XHRmdW5jLVx1MDAzZW51bSk7XG4gMjUyOlx0XHRcdHJldHVybiAtRU5PREVWO1xuIDI1MzpcdFx0fVxuIDI1NDpcdFxuIDI1NTpcdFx0aWYgKCFwZGF0YSkge1xuIDI1NjpcdFx0XHRkZXZfd2FybihcdTAwMjZmdW5jLVx1MDAzZWRldiwgXCYjMzQ7bm8gY29tcGF0aWJsZSBkZXZpY2UgZm91bmQgaW4gRFRcXG5cJiMzNDspO1xuIDI1NzpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiAyNTg6XHRcdH1cbiAyNTk6XHRcbiAyNjA6XHRcdGJ1cyA9IGRldm1fa3phbGxvYyhcdTAwMjZmdW5jLVx1MDAzZWRldiwgc2l6ZW9mKCpidXMpLCBHRlBfS0VSTkVMKTtcbiAyNjE6XHRcdGlmICghYnVzKVxuIDI2MjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAyNjM6XHRcbiAyNjQ6XHRcdGJ1cy1cdTAwM2VmdW5jID0gZnVuYztcbiAyNjU6XHRcdGJ1cy1cdTAwM2VvZl9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7XG4gMjY2Olx0XHRzZGlvX3NldF9kcnZkYXRhKGZ1bmMsIGJ1cyk7XG4gMjY3Olx0XG4gMjY4Olx0XHRzZGlvX2NsYWltX2hvc3QoZnVuYyk7XG4gMjY5Olx0XHRyZXQgPSBzZGlvX2VuYWJsZV9mdW5jKGZ1bmMpO1xuIDI3MDpcdFx0LyogQmxvY2sgb2YgNjQgYnl0ZXMgaXMgbW9yZSBlZmZpY2llbnQgdGhhbiA1MTJCIGZvciBmcmFtZSBzaXplcyBcdTAwM2MgNGsgKi9cbiAyNzE6XHRcdHNkaW9fc2V0X2Jsb2NrX3NpemUoZnVuYywgNjQpO1xuIDI3MjpcdFx0c2Rpb19yZWxlYXNlX2hvc3QoZnVuYyk7XG4gMjczOlx0XHRpZiAocmV0KVxuIDI3NDpcdFx0XHRyZXR1cm4gcmV0O1xuIDI3NTpcdFxuIDI3NjpcdFx0YnVzLVx1MDAzZWNvcmUgPSB3ZnhfaW5pdF9jb21tb24oXHUwMDI2ZnVuYy1cdTAwM2VkZXYsIHBkYXRhLCBcdTAwMjZ3Znhfc2Rpb19od2J1c19vcHMsIGJ1cyk7XG4gMjc3Olx0XHRpZiAoIWJ1cy1cdTAwM2Vjb3JlKSB7XG4gMjc4Olx0XHRcdHJldCA9IC1FSU87XG4gMjc5Olx0XHRcdGdvdG8gc2Rpb19yZWxlYXNlO1xuIDI4MDpcdFx0fVxuIDI4MTpcdFxuIDI4MjpcdFx0YnVzLVx1MDAzZWNvcmUtXHUwMDNlcG9sbF9pcnEgPSAhIWJ1cy1cdTAwM2VvZl9pcnE7XG4gMjgzOlx0XHRyZXQgPSB3ZnhfcHJvYmUoYnVzLVx1MDAzZWNvcmUpO1xuIDI4NDpcdFx0aWYgKHJldClcbiAyODU6XHRcdFx0Z290byBzZGlvX3JlbGVhc2U7XG4gMjg2Olx0XG4gMjg3Olx0XHRpZiAocG1fZmxhZyBcdTAwMjYgTU1DX1BNX0tFRVBfUE9XRVIpXG4gMjg4Olx0XHRcdGRldmljZV9zZXRfd2FrZXVwX2NhcGFibGUoXHUwMDI2ZnVuYy1cdTAwM2VkZXYsIHRydWUpO1xuIDI4OTpcdFxuIDI5MDpcdFx0cmV0dXJuIDA7XG4gMjkxOlx0XG4gMjkyOlx0c2Rpb19yZWxlYXNlOlxuIDI5MzpcdFx0c2Rpb19jbGFpbV9ob3N0KGZ1bmMpO1xuIDI5NDpcdFx0c2Rpb19kaXNhYmxlX2Z1bmMoZnVuYyk7XG4gMjk1Olx0XHRzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTtcbiAyOTY6XHRcdHJldHVybiByZXQ7XG4gMjk3Olx0fVxuIDI5ODpcdFxuIDI5OTpcdHN0YXRpYyB2b2lkIHdmeF9zZGlvX3JlbW92ZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKVxuIDMwMDpcdHtcbiAzMDE6XHRcdHN0cnVjdCB3Znhfc2Rpb19wcml2ICpidXMgPSBzZGlvX2dldF9kcnZkYXRhKGZ1bmMpO1xuIDMwMjpcdFxuIDMwMzpcdFx0d2Z4X3JlbGVhc2UoYnVzLVx1MDAzZWNvcmUpO1xuIDMwNDpcdFx0c2Rpb19jbGFpbV9ob3N0KGZ1bmMpO1xuIDMwNTpcdFx0c2Rpb19kaXNhYmxlX2Z1bmMoZnVuYyk7XG4gMzA2Olx0XHRzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTtcbiAzMDc6XHR9XG4gMzA4Olx0XG4gMzA5Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBzZGlvX2RldmljZV9pZCB3Znhfc2Rpb19pZHNbXSA9IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNDIKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHByb3ZpZGVkIGluc3RydWN0aW9uOgoKKipEaXZpbmcgaW50byB0aGUgU1BJIEJ1cyBDb2RlKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBsb29rZWQgYXQgdGhlIG90aGVyIGNvcmUgY29tcG9uZW50cywgYW5kIG5vdyBpdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgYnVzX3NwaS5jYCBmaWxlLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIFNQSSBwcm90b2NvbHMgYW5kIGxvdy1sZXZlbCBoYXJkd2FyZSBpbnRlcmFjdGlvbnMsIEkgZXhwZWN0IHRoaXMgZmlsZSB0byBiZSBjcml0aWNhbCBmb3IgYWN0dWFsbHkgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBwZXJpcGhlcmFsIGRldmljZXMuIEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgaXQgd2lsbCBjb250YWluIHRoZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIGNvbmZpZ3VyaW5nIHRoZSBTUEkgY29udHJvbGxlciwgc2V0dGluZyB1cCB0aGUgY2xvY2sgZnJlcXVlbmNpZXMsIG1hbmFnaW5nIHRoZSBjaGlwIHNlbGVjdCBsaW5lcywgYW5kIGhhbmRsaW5nIHRoZSBkYXRhIHRyYW5zZmVyIGl0c2VsZiDigJMgYm90aCB0aGUgdHJhbnNtaXNzaW9uIGFuZCByZWNlcHRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGJ1ZmZlciBtYW5hZ2VtZW50LCBpbnRlcnJ1cHQgaGFuZGxpbmcgKGlmIGl0JiMzOTtzIGludGVycnVwdC1kcml2ZW4pLCBhbmQgYW55IGVycm9yIGNoZWNraW5nIG9yIHJldHJ5IG1lY2hhbmlzbXMuIEkmIzM5O2xsIGFsc28gYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBjb2RlIGhhbmRsZXMgZGlmZmVyZW50IFNQSSBtb2RlcyBhbmQgZGF0YSBmcmFtZSBzaXplcywgYW5kIGlmIHRoZXJlJiMzOTtzIGFueSBhYnN0cmFjdGlvbiBsYXllciBvdmVyIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBncmFzcCB0aGUgZnVuZGFtZW50YWwgZmxvdyBvZiBkYXRhIGFuZCBjb250cm9sIHdpdGhpbiB0aGUgU1BJIGJ1cyBkcml2ZXIgdG8gZGV0ZXJtaW5lIGl0cyBlZmZpY2llbmN5LCBmbGV4aWJpbGl0eSwgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIHNvIHRoYXQgaXQgY2FuIGJlIG9wdGltaXNlZCBpZiBuZWNlc3NhcnkuIEkmIzM5O2xsIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGZ1bmN0aW9uIGNhbGxzIHJlbGF0ZWQgdG8gZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCB0aGVuIHRyYWNlIHRoZSBkYXRhIHRyYW5zZmVyLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbGVhbiBhbmQgY29uY2lzZSBpbXBsZW1lbnRhdGlvbnMsIG9yIGFueXRoaW5nIGNsdW5reSB0aGF0IG5lZWRzIGF0dGVudGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc3BpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0LypcbiAgIDM6XHQgKiBTUEkgaW50ZXJmYWNlLlxuICAgNDpcdCAqXG4gICA1Olx0ICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuXG4gICA2Olx0ICogQ29weXJpZ2h0IChjKSAyMDExLCBTYWdyYWQgSW5jLlxuICAgNzpcdCAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb25cbiAgIDg6XHQgKi9cbiAgIDk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAgMTE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9ncGlvL2NvbnN1bWVyLmhcdTAwM2VcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGkvc3BpLmhcdTAwM2VcbiAgMTM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFx1MDAzZVxuICAxNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycS5oXHUwMDNlXG4gIDE1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuICAxNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtLmhcdTAwM2VcbiAgMTc6XHRcbiAgMTg6XHQjaW5jbHVkZSBcJiMzNDtidXMuaFwmIzM0O1xuICAxOTpcdCNpbmNsdWRlIFwmIzM0O3dmeC5oXCYjMzQ7XG4gIDIwOlx0I2luY2x1ZGUgXCYjMzQ7aHdpby5oXCYjMzQ7XG4gIDIxOlx0I2luY2x1ZGUgXCYjMzQ7bWFpbi5oXCYjMzQ7XG4gIDIyOlx0I2luY2x1ZGUgXCYjMzQ7YmguaFwmIzM0O1xuICAyMzpcdFxuICAyNDpcdCNkZWZpbmUgU0VUX1dSSVRFIDB4N0ZGRiAgICAgICAgLyogdXNhZ2U6IGFuZCBvcGVyYXRpb24gKi9cbiAgMjU6XHQjZGVmaW5lIFNFVF9SRUFEIDB4ODAwMCAgICAgICAgIC8qIHVzYWdlOiBvciBvcGVyYXRpb24gKi9cbiAgMjY6XHRcbiAgMjc6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhIHBkYXRhX3dmMjAwID0ge1xuICAyODpcdFx0LmZpbGVfZncgPSBcJiMzNDt3Zngvd2ZtX3dmMjAwXCYjMzQ7LFxuICAyOTpcdFx0LmZpbGVfcGRzID0gXCYjMzQ7d2Z4L3dmMjAwLnBkc1wmIzM0OyxcbiAgMzA6XHRcdC51c2VfcmlzaW5nX2NsayA9IHRydWUsXG4gIDMxOlx0fTtcbiAgMzI6XHRcbiAgMzM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhIHBkYXRhX2JyZDQwMDFhID0ge1xuICAzNDpcdFx0LmZpbGVfZncgPSBcJiMzNDt3Zngvd2ZtX3dmMjAwXCYjMzQ7LFxuICAzNTpcdFx0LmZpbGVfcGRzID0gXCYjMzQ7d2Z4L2JyZDQwMDFhLnBkc1wmIzM0OyxcbiAgMzY6XHRcdC51c2VfcmlzaW5nX2NsayA9IHRydWUsXG4gIDM3Olx0fTtcbiAgMzg6XHRcbiAgMzk6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhIHBkYXRhX2JyZDgwMjJhID0ge1xuICA0MDpcdFx0LmZpbGVfZncgPSBcJiMzNDt3Zngvd2ZtX3dmMjAwXCYjMzQ7LFxuICA0MTpcdFx0LmZpbGVfcGRzID0gXCYjMzQ7d2Z4L2JyZDgwMjJhLnBkc1wmIzM0OyxcbiAgNDI6XHRcdC51c2VfcmlzaW5nX2NsayA9IHRydWUsXG4gIDQzOlx0fTtcbiAgNDQ6XHRcbiAgNDU6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhIHBkYXRhX2JyZDgwMjNhID0ge1xuICA0NjpcdFx0LmZpbGVfZncgPSBcJiMzNDt3Zngvd2ZtX3dmMjAwXCYjMzQ7LFxuICA0NzpcdFx0LmZpbGVfcGRzID0gXCYjMzQ7d2Z4L2JyZDgwMjNhLnBkc1wmIzM0OyxcbiAgNDg6XHRcdC51c2VfcmlzaW5nX2NsayA9IHRydWUsXG4gIDQ5Olx0fTtcbiAgNTA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzNzYKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwbHkgZmFtaWxpYXIgd2l0aCBlbWJlZGRlZCBzeXN0ZW1zIGFuZCBTUEkgY29tbXVuaWNhdGlvbjoKCioqRGl2aW5nIERlZXBlciBpbnRvIGJ1c1xfc3BpLmMqKgoKQWxyaWdodCwgc28gdGhlIGZvY3VzIGlzIGNsZWFybHkgb24gdGhlIHJlc3Qgb2YgYGJ1c19zcGkuY2AuIFRoYXQgbWVhbnMgSSYjMzk7dmUgYWxyZWFkeSBlc3RhYmxpc2hlZCB0aGUgY29udGV4dCwgcGVyaGFwcyBieSBnbGFuY2luZyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIG9yIGhhdmluZyBhIGdlbmVyYWwgdW5kZXJzdGFuZGluZyBvZiB0aGUgcHJvamVjdC4gTm93LCBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHJlbWFpbmluZyBwYXJ0cyBvZiB0aGlzIG1vZHVsZS4gSSYjMzk7bSBsaWtlbHkgbG9va2luZyBmb3IgdGhlIG1lYXQgb2YgdGhlIFNQSSBidXMgaW1wbGVtZW50YXRpb24uIFdoYXQgYXJlIHRoZSBrZXkgZnVuY3Rpb25zLCBzdHJ1Y3R1cmVzLCBhbmQgZGF0YSBmbG93IHJlbGF0ZWQgdG8gaW50ZXJmYWNpbmcgd2l0aCBhbiBTUEkgcGVyaXBoZXJhbD8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdG8gc2VlIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGluZ3MgbGlrZSBpbml0aWFsaXphdGlvbiwgdHJhbnNtaXNzaW9uLCByZWNlcHRpb24sIGNsb2NrIGNvbnRyb2wsIGNoaXAgc2VsZWN0IG1hbmFnZW1lbnQsIGFuZCBlcnJvciBoYW5kbGluZy4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhlcmUgYXJlIGFueSBpbnRlcmVzdGluZyBvcHRpbWl6YXRpb25zIG9yIHBsYXRmb3JtLXNwZWNpZmljIGNvbnNpZGVyYXRpb25zIGltcGxlbWVudGVkIGluIHRoZSBjb2RlLiBJJiMzOTttIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc3BpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE4MDpcdFx0cmV0dXJuIEFMSUdOKHNpemUsIDQpO1xuIDE4MTpcdH1cbiAxODI6XHRcbiAxODM6XHRzdGF0aWMgdm9pZCB3Znhfc3BpX3NldF93YWtldXAodm9pZCAqcHJpdiwgYm9vbCBlbmFibGVkKVxuIDE4NDpcdHtcbiAxODU6XHRcdHN0cnVjdCB3Znhfc3BpX3ByaXYgKmJ1cyA9IHByaXY7XG4gMTg2Olx0XG4gMTg3Olx0XHRkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUoXHUwMDI2YnVzLVx1MDAzZWZ1bmMtXHUwMDNlZGV2LCBlbmFibGVkKTtcbiAxODg6XHR9XG4gMTg5Olx0XG4gMTkwOlx0c3RhdGljIGNvbnN0IHN0cnVjdCB3ZnhfaHdidXNfb3BzIHdmeF9zcGlfaHdidXNfb3BzID0ge1xuIDE5MTpcdFx0LmNvcHlfZnJvbV9pbyAgICA9IHdmeF9zcGlfY29weV9mcm9tX2lvLFxuIDE5MjpcdFx0LmNvcHlfdG9faW8gICAgICA9IHdmeF9zcGlfY29weV90b19pbyxcbiAxOTM6XHRcdC5pcnFfc3Vic2NyaWJlICAgPSB3Znhfc3BpX2lycV9zdWJzY3JpYmUsXG4gMTk0Olx0XHQuaXJxX3Vuc3Vic2NyaWJlID0gd2Z4X3NwaV9pcnFfdW5zdWJzY3JpYmUsXG4gMTk1Olx0XHQubG9jayAgICAgICAgICAgID0gd2Z4X3NwaV9sb2NrLFxuIDE5NjpcdFx0LnVubG9jayAgICAgICAgICA9IHdmeF9zcGlfdW5sb2NrLFxuIDE5NzpcdFx0LmFsaWduX3NpemUgICAgICA9IHdmeF9zcGlfYWxpZ25fc2l6ZSxcbiAxOTg6XHRcdC5zZXRfd2FrZXVwICAgICAgPSB3Znhfc3BpX3NldF93YWtldXAsXG4gMTk5Olx0fTtcbiAyMDA6XHRcbiAyMDE6XHRzdGF0aWMgaW50IHdmeF9zcGlfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gMjAyOlx0e1xuIDIwMzpcdFx0c3RydWN0IHNwaV9kZXZpY2UgKmZ1bmMgPSB0b19zcGlfZGV2aWNlKGRldik7XG4gMjA0Olx0XHRzdHJ1Y3Qgd2Z4X3NwaV9wcml2ICpidXMgPSBzcGlfZ2V0X2RydmRhdGEoZnVuYyk7XG4gMjA1Olx0XG4gMjA2Olx0XHRpZiAoIWRldmljZV9tYXlfd2FrZXVwKGRldikpXG4gMjA3Olx0XHRcdHJldHVybiAwO1xuIDIwODpcdFx0Zmx1c2hfd29yayhcdTAwMjZidXMtXHUwMDNlY29yZS1cdTAwM2VoaWYuYmgpO1xuIDIwOTpcdFx0cmV0dXJuIGVuYWJsZV9pcnFfd2FrZShmdW5jLVx1MDAzZWlycSk7XG4gMjEwOlx0fVxuIDIxMTpcdFxuIDIxMjpcdHN0YXRpYyBpbnQgd2Z4X3NwaV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuIDIxMzpcdHtcbiAyMTQ6XHRcdHN0cnVjdCBzcGlfZGV2aWNlICpmdW5jID0gdG9fc3BpX2RldmljZShkZXYpO1xuIDIxNTpcdFxuIDIxNjpcdFx0aWYgKCFkZXZpY2VfbWF5X3dha2V1cChkZXYpKVxuIDIxNzpcdFx0XHRyZXR1cm4gMDtcbiAyMTg6XHRcdHJldHVybiBkaXNhYmxlX2lycV93YWtlKGZ1bmMtXHUwMDNlaXJxKTtcbiAyMTk6XHR9XG4gMjIwOlx0XG4gMjIxOlx0c3RhdGljIGludCB3Znhfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpmdW5jKVxuIDIyMjpcdHtcbiAyMjM6XHRcdHN0cnVjdCB3ZnhfcGxhdGZvcm1fZGF0YSAqcGRhdGE7XG4gMjI0Olx0XHRzdHJ1Y3Qgd2Z4X3NwaV9wcml2ICpidXM7XG4gMjI1Olx0XHRpbnQgcmV0O1xuIDIyNjpcdFxuIDIyNzpcdFx0aWYgKCFmdW5jLVx1MDAzZWJpdHNfcGVyX3dvcmQpXG4gMjI4Olx0XHRcdGZ1bmMtXHUwMDNlYml0c19wZXJfd29yZCA9IDE2O1xuIDIyOTpcdFx0cmV0ID0gc3BpX3NldHVwKGZ1bmMpO1xuIDIzMDpcdFx0aWYgKHJldClcbiAyMzE6XHRcdFx0cmV0dXJuIHJldDtcbiAyMzI6XHRcdHBkYXRhID0gKHN0cnVjdCB3ZnhfcGxhdGZvcm1fZGF0YSAqKXNwaV9nZXRfZGV2aWNlX2lkKGZ1bmMpLVx1MDAzZWRyaXZlcl9kYXRhO1xuIDIzMzpcdFx0aWYgKCFwZGF0YSkge1xuIDIzNDpcdFx0XHRkZXZfZXJyKFx1MDAyNmZ1bmMtXHUwMDNlZGV2LCBcJiMzNDt1bmFibGUgdG8gcmV0cmlldmUgZHJpdmVyIGRhdGEgKHBsZWFzZSByZXBvcnQpXFxuXCYjMzQ7KTtcbiAyMzU6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gMjM2Olx0XHR9XG4gMjM3Olx0XG4gMjM4Olx0XHQvKiBUcmFjZSBiZWxvdyBpcyBhbHNvIGRpc3BsYXllZCBieSBzcGlfc2V0dXAoKSBpZiBjb21waWxlZCB3aXRoIERFQlVHICovXG4gMjM5Olx0XHRkZXZfZGJnKFx1MDAyNmZ1bmMtXHUwMDNlZGV2LCBcJiMzNDtTUEkgcGFyYW1zOiBDUz0lZCwgbW9kZT0lZCBiaXRzL3dvcmQ9JWQgc3BlZWQ9JWRcXG5cJiMzNDssXG4gMjQwOlx0XHRcdHNwaV9nZXRfY2hpcHNlbGVjdChmdW5jLCAwKSwgZnVuYy1cdTAwM2Vtb2RlLCBmdW5jLVx1MDAzZWJpdHNfcGVyX3dvcmQsIGZ1bmMtXHUwMDNlbWF4X3NwZWVkX2h6KTtcbiAyNDE6XHRcdGlmIChmdW5jLVx1MDAzZWJpdHNfcGVyX3dvcmQgIT0gMTYgXHUwMDI2XHUwMDI2IGZ1bmMtXHUwMDNlYml0c19wZXJfd29yZCAhPSA4KVxuIDI0MjpcdFx0XHRkZXZfd2FybihcdTAwMjZmdW5jLVx1MDAzZWRldiwgXCYjMzQ7dW51c3VhbCBiaXRzL3dvcmQgdmFsdWU6ICVkXFxuXCYjMzQ7LCBmdW5jLVx1MDAzZWJpdHNfcGVyX3dvcmQpO1xuIDI0MzpcdFx0aWYgKGZ1bmMtXHUwMDNlbWF4X3NwZWVkX2h6IFx1MDAzZSA1MDAwMDAwMClcbiAyNDQ6XHRcdFx0ZGV2X3dhcm4oXHUwMDI2ZnVuYy1cdTAwM2VkZXYsIFwmIzM0OyVkSHogaXMgYSB2ZXJ5IGhpZ2ggc3BlZWRcXG5cJiMzNDssIGZ1bmMtXHUwMDNlbWF4X3NwZWVkX2h6KTtcbiAyNDU6XHRcbiAyNDY6XHRcdGJ1cyA9IGRldm1fa3phbGxvYyhcdTAwMjZmdW5jLVx1MDAzZWRldiwgc2l6ZW9mKCpidXMpLCBHRlBfS0VSTkVMKTtcbiAyNDc6XHRcdGlmICghYnVzKVxuIDI0ODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAyNDk6XHRcdGJ1cy1cdTAwM2VmdW5jID0gZnVuYztcbiAyNTA6XHRcdGlmIChmdW5jLVx1MDAzZWJpdHNfcGVyX3dvcmQgPT0gOCB8fCBJU19FTkFCTEVEKENPTkZJR19DUFVfQklHX0VORElBTikpXG4gMjUxOlx0XHRcdGJ1cy1cdTAwM2VuZWVkX3N3YWIgPSB0cnVlO1xuIDI1MjpcdFx0c3BpX3NldF9kcnZkYXRhKGZ1bmMsIGJ1cyk7XG4gMjUzOlx0XG4gMjU0Olx0XHRidXMtXHUwMDNlZ3Bpb19yZXNldCA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKFx1MDAyNmZ1bmMtXHUwMDNlZGV2LCBcJiMzNDtyZXNldFwmIzM0OywgR1BJT0RfT1VUX0xPVyk7XG4gMjU1Olx0XHRpZiAoSVNfRVJSKGJ1cy1cdTAwM2VncGlvX3Jlc2V0KSlcbiAyNTY6XHRcdFx0cmV0dXJuIFBUUl9FUlIoYnVzLVx1MDAzZWdwaW9fcmVzZXQpO1xuIDI1NzpcdFx0aWYgKCFidXMtXHUwMDNlZ3Bpb19yZXNldCkge1xuIDI1ODpcdFx0XHRkZXZfd2FybihcdTAwMjZmdW5jLVx1MDAzZWRldiwgXCYjMzQ7Z3BpbyByZXNldCBpcyBub3QgZGVmaW5lZCwgdHJ5aW5nIHRvIGxvYWQgZmlybXdhcmUgYW55d2F5XFxuXCYjMzQ7KTtcbiAyNTk6XHRcdH0gZWxzZSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDQyCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFNpbGljb24gTGFicyBXRjIwMCBGdXp6aW5nIEZlYXNpYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBXRjIwMCBmcm9tIFNpbGljb24gTGFicyBpcyBhbiBTRElPL1NQSSB3aXJlbGVzcyBjaGlwLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzOiBjYW4gd2UgZXZlbiBmdXp6IGl0PyBEb2VzIHN0YW5kYXJkIFFFTVUgb3Igc3l6a2FsbGVyIG9mZmVyIGFueSBlbXVsYXRpb24gb3IgaW5zdGFudGlhdGlvbiBvZiBTRElPL1NQSSB3aXJlbGVzcyBoYXJkd2FyZT8gVGhhdCYjMzk7cyB0aGUgY3J1eCBvZiBpdC4gQmVmb3JlIEkgZ2V0IGFoZWFkIG9mIG15c2VsZiwgSSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBnb2xkZW4gcnVsZTogKipyZWFjaGFiaWxpdHkgaXMgdGhlIHByaW1hcnkgZ2F0ZS4qKiBNeSBmdXp6ZXIgY2FuICpvbmx5KiBmaW5kIGJ1Z3MgaW4gY29kZSB0aGF0ICpleGVjdXRlcyogaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUuIFRoaW5ncyBsaWtlIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIGFyZSBvdXQgYmVjYXVzZSB0aGV5IG5lZWQgcGh5c2ljYWwgaGFyZHdhcmUgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlLgoKU28sIGNhbiB3ZSBpbnN0YW50aWF0ZSBvciBwcm9iZSB0aGUgV0YyMDAgdXNpbmcgc3l6a2FsbGVyIG9yIHN0YW5kYXJkIFFFTVU/IENhbiBzeXprYWxsZXIgcHJvYmUgU1BJIG9yIFNESU8gZGV2aWNlcywgcGVyaW9kPyBJIGtub3cgc3l6a2FsbGVyICpkb2VzKiBoYXZlIHNvbWUgVVNCIGVtdWxhdGlvbiB2aWEgdGhlIFJhdyBHYWRnZXQgbWVjaGFuaXNtLiBCdXQgZG9lcyB0aGF0IGV4dGVuZCB0byBTRElPIG9yIFNQST8gTm8uIFNESU8gY2FyZHMgYXJlIHR5cGljYWxseSBkaXNjb3ZlcmVkIHZpYSB0aGUgTU1DIGJ1cyBhbmQgZGV2aWNlIHRyZWUgKERUKSBvbiBpbnNlcnRpb24uIFNQSSBkZXZpY2VzIGFyZSBzaW1pbGFybHkgRFQgb3IgQUNQSSBvciBib2FyZC1pbnN0YW50aWF0ZWQuIFRoZXkgaW5oZXJlbnRseSBuZWVkIGEgcGh5c2ljYWwgU1BJIGJ1cyBhbmQgc2xhdmUuCgpBbHJpZ2h0LCBiYWNrIHRvIHRoZSBjb3JlIHF1ZXN0aW9uOiBkb2VzIHN5emthbGxlciBoYXZlIHN1cHBvcnQgZm9yIFNESU8vU1BJPyBEbyB0aGV5IGhhdmUgYW55IHBzZXVkby1zeXNjYWxscyBvciBzdXBwb3J0IGZvciBtYWM4MDIxMSBod3NpbSBvciByYXcgZGV2aWNlcz8gTm9wZSwgaXQgc2VlbXMgY2xlYXIgdGhlIGFuc3dlciBpcyBuby4gVGhpcyBkb2VzbiYjMzk7dCBsb29rIHByb21pc2luZyBmb3Igc2ltcGxlIGZ1enppbmcuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgcGF0Y2ggaXRzZWxmLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jYCBhbmQgZmlndXJlIG91dCB3aGF0IHRoZSBwYXRjaCBpcyAqYWN0dWFsbHkqIGRvaW5nIGluIHRoYXQgY29udGV4dC4gVGhhdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwMDpcdFx0XHQgXCYjMzQ7JWQuJWQuJWRcJiMzNDssXG4gNDAxOlx0XHRcdCB3ZGV2LVx1MDAzZWh3X2NhcHMuZmlybXdhcmVfbWFqb3IsXG4gNDAyOlx0XHRcdCB3ZGV2LVx1MDAzZWh3X2NhcHMuZmlybXdhcmVfbWlub3IsXG4gNDAzOlx0XHRcdCB3ZGV2LVx1MDAzZWh3X2NhcHMuZmlybXdhcmVfYnVpbGQpO1xuIDQwNDpcdFxuIDQwNTpcdFx0aWYgKHdmeF9hcGlfb2xkZXJfdGhhbih3ZGV2LCAxLCAwKSkge1xuIDQwNjpcdFx0XHRkZXZfZXJyKHdkZXYtXHUwMDNlZGV2LCBcJiMzNDt1bnN1cHBvcnRlZCBmaXJtd2FyZSBBUEkgdmVyc2lvbiAoZXhwZWN0IDEgd2hpbGUgZmlybXdhcmUgcmV0dXJucyAlZClcXG5cJiMzNDssXG4gNDA3Olx0XHRcdFx0d2Rldi1cdTAwM2Vod19jYXBzLmFwaV92ZXJzaW9uX21ham9yKTtcbiA0MDg6XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4gNDA5Olx0XHRcdGdvdG8gaXJxX3Vuc3Vic2NyaWJlO1xuIDQxMDpcdFx0fVxuIDQxMTpcdFxuIDQxMjpcdFx0aWYgKHdkZXYtXHUwMDNlaHdfY2Fwcy5saW5rX21vZGUgPT0gU0VDX0xJTktfRU5GT1JDRUQpIHtcbiA0MTM6XHRcdFx0ZGV2X2Vycih3ZGV2LVx1MDAzZWRldiwgXCYjMzQ7Y2hpcCByZXF1aXJlIHNlY3VyZV9saW5rLCBidXQgY2FuJiMzOTt0IG5lZ290aWF0ZSBpdFxcblwmIzM0Oyk7XG4gNDE0Olx0XHRcdGVyciA9IC1FT1BOT1RTVVBQO1xuIDQxNTpcdFx0XHRnb3RvIGlycV91bnN1YnNjcmliZTtcbiA0MTY6XHRcdH1cbiA0MTc6XHRcbiA0MTg6XHRcdGlmICh3ZGV2LVx1MDAzZWh3X2NhcHMucmVnaW9uX3NlbF9tb2RlKSB7XG4gNDE5Olx0XHRcdHdkZXYtXHUwMDNlaHctXHUwMDNld2lwaHktXHUwMDNlcmVndWxhdG9yeV9mbGFncyB8PSBSRUdVTEFUT1JZX0RJU0FCTEVfQkVBQ09OX0hJTlRTO1xuIDQyMDpcdFx0XHR3ZGV2LVx1MDAzZWh3LVx1MDAzZXdpcGh5LVx1MDAzZWJhbmRzW05MODAyMTFfQkFORF8yR0haXS1cdTAwM2VjaGFubmVsc1sxMV0uZmxhZ3MgfD1cbiA0MjE6XHRcdFx0XHRJRUVFODAyMTFfQ0hBTl9OT19JUjtcbiA0MjI6XHRcdFx0d2Rldi1cdTAwM2Vody1cdTAwM2V3aXBoeS1cdTAwM2ViYW5kc1tOTDgwMjExX0JBTkRfMkdIWl0tXHUwMDNlY2hhbm5lbHNbMTJdLmZsYWdzIHw9XG4gNDIzOlx0XHRcdFx0SUVFRTgwMjExX0NIQU5fTk9fSVI7XG4gNDI0Olx0XHRcdHdkZXYtXHUwMDNlaHctXHUwMDNld2lwaHktXHUwMDNlYmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLVx1MDAzZWNoYW5uZWxzWzEzXS5mbGFncyB8PVxuIDQyNTpcdFx0XHRcdElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEO1xuIDQyNjpcdFx0fVxuIDQyNzpcdFxuIDQyODpcdFx0ZGV2X2RiZyh3ZGV2LVx1MDAzZWRldiwgXCYjMzQ7c2VuZGluZyBjb25maWd1cmF0aW9uIGZpbGUgJXNcXG5cJiMzNDssIHdkZXYtXHUwMDNlcGRhdGEuZmlsZV9wZHMpO1xuIDQyOTpcdFx0ZXJyID0gd2Z4X3NlbmRfcGRhdGFfcGRzKHdkZXYpO1xuIDQzMDpcdFx0aWYgKGVyciBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJyICE9IC1FTk9FTlQpXG4gNDMxOlx0XHRcdGdvdG8gaXJxX3Vuc3Vic2NyaWJlO1xuIDQzMjpcdFxuIDQzMzpcdFx0aWYgKHdkZXYtXHUwMDNlcG9sbF9pcnEpIHtcbiA0MzQ6XHRcdFx0ZXJyID0gd2Rldi1cdTAwM2Vod2J1c19vcHMtXHUwMDNlaXJxX3N1YnNjcmliZSh3ZGV2LVx1MDAzZWh3YnVzX3ByaXYpO1xuIDQzNTpcdFx0XHRpZiAoZXJyKVxuIDQzNjpcdFx0XHRcdGdvdG8gYmhfdW5yZWdpc3RlcjtcbiA0Mzc6XHRcdFx0d2Rldi1cdTAwM2Vwb2xsX2lycSA9IGZhbHNlO1xuIDQzODpcdFx0fVxuIDQzOTpcdFxuIDQ0MDpcdFx0ZXJyID0gd2Z4X2hpZl91c2VfbXVsdGlfdHhfY29uZih3ZGV2LCB0cnVlKTtcbiA0NDE6XHRcdGlmIChlcnIpXG4gNDQyOlx0XHRcdGRldl9lcnIod2Rldi1cdTAwM2VkZXYsIFwmIzM0O21pc2NvbmZpZ3VyZWQgSVJRP1xcblwmIzM0Oyk7XG4gNDQzOlx0XG4gNDQ0Olx0XHR3ZGV2LVx1MDAzZXBkYXRhLmdwaW9fd2FrZXVwID0gZ3Bpb19zYXZlZDtcbiA0NDU6XHRcdGlmICh3ZGV2LVx1MDAzZXBkYXRhLmdwaW9fd2FrZXVwKSB7XG4gNDQ2Olx0XHRcdGRldl9kYmcod2Rldi1cdTAwM2VkZXYsIFwmIzM0O2VuYWJsZSAmIzM5O3F1aWVzY2VudCYjMzk7IHBvd2VyIG1vZGUgd2l0aCB3YWtldXAgR1BJTyBhbmQgUERTIGZpbGUgJXNcXG5cJiMzNDssXG4gNDQ3Olx0XHRcdFx0d2Rldi1cdTAwM2VwZGF0YS5maWxlX3Bkcyk7XG4gNDQ4Olx0XHRcdGdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcCh3ZGV2LVx1MDAzZXBkYXRhLmdwaW9fd2FrZXVwLCAxKTtcbiA0NDk6XHRcdFx0d2Z4X2NvbnRyb2xfcmVnX3dyaXRlKHdkZXYsIDApO1xuIDQ1MDpcdFx0XHR3ZnhfaGlmX3NldF9vcGVyYXRpb25hbF9tb2RlKHdkZXYsIEhJRl9PUF9QT1dFUl9NT0RFX1FVSUVTQ0VOVCk7XG4gNDUxOlx0XHR9IGVsc2Uge1xuIDQ1MjpcdFx0XHR3ZnhfaGlmX3NldF9vcGVyYXRpb25hbF9tb2RlKHdkZXYsIEhJRl9PUF9QT1dFUl9NT0RFX0RPWkUpO1xuIDQ1MzpcdFx0fVxuIDQ1NDpcdFxuIDQ1NTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh3ZGV2LVx1MDAzZWFkZHJlc3Nlcyk7IGkmIzQzOyYjNDM7KSB7XG4gNDU2Olx0XHRcdGV0aF96ZXJvX2FkZHIod2Rldi1cdTAwM2VhZGRyZXNzZXNbaV0uYWRkcik7XG4gNDU3Olx0XHRcdGVyciA9IG9mX2dldF9tYWNfYWRkcmVzcyh3ZGV2LVx1MDAzZWRldi1cdTAwM2VvZl9ub2RlLCB3ZGV2LVx1MDAzZWFkZHJlc3Nlc1tpXS5hZGRyKTtcbiA0NTg6XHRcdFx0aWYgKCFlcnIpXG4gNDU5Olx0XHRcdFx0d2Rldi1cdTAwM2VhZGRyZXNzZXNbaV0uYWRkcltFVEhfQUxFTiAtIDFdICYjNDM7PSBpO1xuIDQ2MDpcdFx0XHRlbHNlXG4gNDYxOlx0XHRcdFx0ZXRoZXJfYWRkcl9jb3B5KHdkZXYtXHUwMDNlYWRkcmVzc2VzW2ldLmFkZHIsIHdkZXYtXHUwMDNlaHdfY2Fwcy5tYWNfYWRkcltpXSk7XG4gNDYyOlx0XHRcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcih3ZGV2LVx1MDAzZWFkZHJlc3Nlc1tpXS5hZGRyKSkge1xuIDQ2MzpcdFx0XHRcdGRldl93YXJuKHdkZXYtXHUwMDNlZGV2LCBcJiMzNDt1c2luZyByYW5kb20gTUFDIGFkZHJlc3NcXG5cJiMzNDspO1xuIDQ2NDpcdFx0XHRcdGV0aF9yYW5kb21fYWRkcih3ZGV2LVx1MDAzZWFkZHJlc3Nlc1tpXS5hZGRyKTtcbiA0NjU6XHRcdFx0fVxuIDQ2NjpcdFx0XHRkZXZfaW5mbyh3ZGV2LVx1MDAzZWRldiwgXCYjMzQ7TUFDIGFkZHJlc3MgJWQ6ICVwTVxcblwmIzM0OywgaSwgd2Rldi1cdTAwM2VhZGRyZXNzZXNbaV0uYWRkcik7XG4gNDY3Olx0XHR9XG4gNDY4Olx0XHR3ZGV2LVx1MDAzZWh3LVx1MDAzZXdpcGh5LVx1MDAzZW5fYWRkcmVzc2VzID0gQVJSQVlfU0laRSh3ZGV2LVx1MDAzZWFkZHJlc3Nlcyk7XG4gNDY5Olx0XHR3ZGV2LVx1MDAzZWh3LVx1MDAzZXdpcGh5LVx1MDAzZWFkZHJlc3NlcyA9IHdkZXYtXHUwMDNlYWRkcmVzc2VzO1xuIDQ3MDpcdFxuIDQ3MTpcdFx0aWYgKCF3ZnhfYXBpX29sZGVyX3RoYW4od2RldiwgMywgOCkpXG4gNDcyOlx0XHRcdHdkZXYtXHUwMDNlaHctXHUwMDNld2lwaHktXHUwMDNlZmxhZ3MgfD0gV0lQSFlfRkxBR19TVVBQT1JUU19URExTO1xuIDQ3MzpcdFxuIDQ3NDpcdFx0ZXJyID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KHdkZXYtXHUwMDNlaHcpO1xuIDQ3NTpcdFx0aWYgKGVycilcbiA0NzY6XHRcdFx0Z290byBpcnFfdW5zdWJzY3JpYmU7XG4gNDc3Olx0XG4gNDc4Olx0XHRlcnIgPSB3ZnhfZGVidWdfaW5pdCh3ZGV2KTtcbiA0Nzk6XHRcdGlmIChlcnIpXG4gNDgwOlx0XHRcdGdvdG8gaWVlZTgwMjExX3VucmVnaXN0ZXI7XG4gNDgxOlx0XG4gNDgyOlx0XHRyZXR1cm4gMDtcbiA0ODM6XHRcbiA0ODQ6XHRpZWVlODAyMTFfdW5yZWdpc3RlcjpcbiA0ODU6XHRcdGllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KHdkZXYtXHUwMDNlaHcpO1xuIDQ4NjpcdGlycV91bnN1YnNjcmliZTpcbiA0ODc6XHRcdGlmICghd2Rldi1cdTAwM2Vwb2xsX2lycSlcbiA0ODg6XHRcdFx0d2Rldi1cdTAwM2Vod2J1c19vcHMtXHUwMDNlaXJxX3Vuc3Vic2NyaWJlKHdkZXYtXHUwMDNlaHdidXNfcHJpdik7XG4gNDg5Olx0YmhfdW5yZWdpc3RlcjpcbiA0OTA6XHRcdHdmeF9iaF91bnJlZ2lzdGVyKHdkZXYpO1xuIDQ5MTpcdFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNndkZXYtXHUwMDNlY29vbGluZ190aW1lb3V0X3dvcmspO1xuIDQ5MjpcdFx0ZGVzdHJveV93b3JrcXVldWUod2Rldi1cdTAwM2ViaF93cSk7XG4gNDkzOlx0XHRyZXR1cm4gZXJyO1xuIDQ5NDpcdH1cbiA0OTU6XHRcbiA0OTY6XHR2b2lkIHdmeF9yZWxlYXNlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KVxuIDQ5NzpcdHtcbiA0OTg6XHRcdGllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KHdkZXYtXHUwMDNlaHcpO1xuIDQ5OTpcdFx0d2Z4X2hpZl9zaHV0ZG93bih3ZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU3ODgKCQkJCQkJCW91dHB1dDogMTA1CgkJCQkJCQl0aG91Z2h0czogNzUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGB3ZnhgIERyaXZlciBNb2RpZmljYXRpb24mIzM5O3MgRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGB3ZnhfcHJvYmUoKWAgYW5kIGB3ZnhfcmVsZWFzZSgpYCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBlcnJvciBwYXRocy4gIEkgc2VlIGEgY2hlY2sgZm9yIGBTRUNfTElOS19FTkZPUkNFRGAgYW5kIGEgYGNhbmNlbF9kZWxheWVkX3dvcmtfc3luY2AgY2FsbCBpbiBib3RoIHRoZSBlcnJvciBwYXRoIG9mIHByb2JlIGFuZCBpbiB0aGUgcmVsZWFzZSBmdW5jdGlvbi4gIFRoZSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7Y2FuIHRoaXMgZXZlbiAqYmUqIGZ1enplZD8mIzM0OwoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIGB3ZnhgIGRyaXZlciBpdHNlbGYuIEkga25vdyB0aGlzIGRyaXZlciBpcyBmb3IgU2lsaWNvbiBMYWJzIFdGMjAwL1dGTTIwMCBXaS1GaSB0cmFuc2NlaXZlcnMsIGFuZCBpdCByZWxpZXMgb24gZWl0aGVyIFNQSSBvciBTRElPIChNTUMpIGNvbm5lY3Rpb25zLiAgQ3J1Y2lhbGx5LCBpdCByZXF1aXJlcyBkZXZpY2UtdHJlZSBwbGF0Zm9ybSBiaW5kaW5ncyBmb3IgdGhlIGhhcmR3YXJlLiAgCgpUaGUgUkVBQ0hBQklMSVRZIHNlY3Rpb24gaXMgdGhlIGNyaXRpY2FsIHBpZWNlIG9mIHRoaXMgcHV6emxlLiBJdCYjMzk7cyBleHBsaWNpdGx5IHN0YXRlZCB0aGF0IGZ1enppbmcgaXMgb25seSBlZmZlY3RpdmUgb24gY29kZSB0aGF0IGV4ZWN1dGVzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcy4gVGhlIHByb2JsZW0gaXMsIGFuZCBJICprbm93KiB0aGlzLCB0aGVyZSYjMzk7cyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoZSBTaWxpY29uIExhYnMgV0YyMDAgaGFyZHdhcmUgd2l0aGluIHRoZXNlIHN0YW5kYXJkIGVudmlyb25tZW50cy4gIFRoZSBkcml2ZXIgcmVsaWVzIG9uIGEgcGh5c2ljYWwgQVNJQyBjb25uZWN0ZWQgdmlhIFNQSSBvciBTRElPLCB3aGljaCB3ZSBhYnNvbHV0ZWx5IGNhbm5vdCBlbXVsYXRlIHdpdGhpbiBhIHN0YW5kYXJkIGZ1enppbmcgc2V0dXAuCgpUaGVyZWZvcmUsIHNpbmNlIHRoZSBjaGFuZ2VzIGFyZSBpbiB0aGUgYHByb2JlYCBlcnJvciBwYXRoICh3aGljaCB3ZSYjMzk7ZCBvbmx5IGhpdCBvbiBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBmYWlsdXJlKSBhbmQgdGhlIGByZWxlYXNlYCBmdW5jdGlvbiAod2hpY2ggaXMgdHJpZ2dlcmVkIG9uIGRyaXZlciByZW1vdmFsKSwgYm90aCBvZiB0aGVzZSBleGVjdXRpb24gcGF0aHMgYXJlIGVudGlyZWx5IHVucmVhY2hhYmxlIGluIHRoZSBjb250ZXh0IG9mIG91ciBzdGFuZGFyZCBmdXp6aW5nIHNldHVwLCB3aGljaCBtZWFucyB0aGlzIGNvZGUgaXMgbm90IGFtZW5hYmxlIHRvIGZ1enppbmcuCgpJJiMzOTttIGNvbmZpZGVudCBpbiB0aGlzIGNvbmNsdXNpb24uIExldCYjMzk7cyBtYWtlIHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgbW9kaWZpZWQgY29kZSBpcyBpbiB0aGUgU2lsaWNvbiBMYWJzIFdGMjAwIFdpLUZpIGRyaXZlciAoZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeCksIHdoaWNoIG9wZXJhdGVzIG92ZXIgU1BJIG9yIFNESU8gYnVzZXMgYW5kIHJlcXVpcmVzIHBoeXNpY2FsIFNpbGljb24gTGFicyBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKHN1Y2ggYXMgUUVNVS9HQ0UpLiBDb25zZXF1ZW50bHksIHRoZXNlIHByb2JlIGFuZCByZWxlYXNlIHBhdGhzIGFyZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBtb2RpZmllZCBjb2RlIGlzIGluIHRoZSBTaWxpY29uIExhYnMgV0YyMDAgV2ktRmkgZHJpdmVyIChkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4KSwgd2hpY2ggb3BlcmF0ZXMgb3ZlciBTUEkgb3IgU0RJTyBidXNlcyBhbmQgcmVxdWlyZXMgcGh5c2ljYWwgU2lsaWNvbiBMYWJzIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoc3VjaCBhcyBRRU1VL0dDRSkuIENvbnNlcXVlbnRseSwgdGhlc2UgcHJvYmUgYW5kIHJlbGVhc2UgcGF0aHMgYXJlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAzOjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMzoxMzoxNC4zMjIyODI0MDNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTA2ODQ4NzQxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIG1vZGlmaWVkIGNvZGUgaXMgaW4gdGhlIFNpbGljb24gTGFicyBXRjIwMCBXaS1GaSBkcml2ZXIgKGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngpLCB3aGljaCBvcGVyYXRlcyBvdmVyIFNQSSBvciBTRElPIGJ1c2VzIGFuZCByZXF1aXJlcyBwaHlzaWNhbCBTaWxpY29uIExhYnMgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChzdWNoIGFzIFFFTVUvR0NFKS4gQ29uc2VxdWVudGx5LCB0aGVzZSBwcm9iZSBhbmQgcmVsZWFzZSBwYXRocyBhcmUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDM6MTM6MTQuMzIyMjg5NTMyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDI2OTIyODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzNDliZGQwZWQ2NjIzNjA2ZmU0YjczY2U3YTdjMjQyZTY0NGY2N2ExXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMDM6MTM6MTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uY1xcbmluZGV4IDRlOTlmZTdlNWJiNzguLjE2ZDViNTFmNmYwM2EgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uY1xcbkBAIC00MTEsNiArNDExLDcgQEAgaW50IHdmeF9wcm9iZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldilcXG4gXFxuIFxcdGlmICh3ZGV2LVxcdTAwM2Vod19jYXBzLmxpbmtfbW9kZSA9PSBTRUNfTElOS19FTkZPUkNFRCkge1xcbiBcXHRcXHRkZXZfZXJyKHdkZXYtXFx1MDAzZWRldiwgXFxcImNoaXAgcmVxdWlyZSBzZWN1cmVfbGluaywgYnV0IGNhbid0IG5lZ290aWF0ZSBpdFxcXFxuXFxcIik7XFxuK1xcdFxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbiBcXHRcXHRnb3RvIGlycV91bnN1YnNjcmliZTtcXG4gXFx0fVxcbiBcXG5AQCAtNDg3LDYgKzQ4OCw3IEBAIGludCB3ZnhfcHJvYmUoc3RydWN0IHdmeF9kZXYgKndkZXYpXFxuIFxcdFxcdHdkZXYtXFx1MDAzZWh3YnVzX29wcy1cXHUwMDNlaXJxX3Vuc3Vic2NyaWJlKHdkZXYtXFx1MDAzZWh3YnVzX3ByaXYpO1xcbiBiaF91bnJlZ2lzdGVyOlxcbiBcXHR3ZnhfYmhfdW5yZWdpc3Rlcih3ZGV2KTtcXG4rXFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZ3ZGV2LVxcdTAwM2Vjb29saW5nX3RpbWVvdXRfd29yayk7XFxuIFxcdGRlc3Ryb3lfd29ya3F1ZXVlKHdkZXYtXFx1MDAzZWJoX3dxKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbkBAIC00OTcsNiArNDk5LDcgQEAgdm9pZCB3ZnhfcmVsZWFzZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldilcXG4gXFx0d2Z4X2hpZl9zaHV0ZG93bih3ZGV2KTtcXG4gXFx0d2Rldi1cXHUwMDNlaHdidXNfb3BzLVxcdTAwM2VpcnFfdW5zdWJzY3JpYmUod2Rldi1cXHUwMDNlaHdidXNfcHJpdik7XFxuIFxcdHdmeF9iaF91bnJlZ2lzdGVyKHdkZXYpO1xcbitcXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXFx1MDAyNndkZXYtXFx1MDAzZWNvb2xpbmdfdGltZW91dF93b3JrKTtcXG4gXFx0ZGVzdHJveV93b3JrcXVldWUod2Rldi1cXHUwMDNlYmhfd3EpO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMzoxMzoxNC45NjU3NTA3NzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMwNDI1MDAxMTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBtb2RpZmllZCBjb2RlIGlzIGluIHRoZSBTaWxpY29uIExhYnMgV0YyMDAgV2ktRmkgZHJpdmVyIChkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4KSwgd2hpY2ggb3BlcmF0ZXMgb3ZlciBTUEkgb3IgU0RJTyBidXNlcyBhbmQgcmVxdWlyZXMgcGh5c2ljYWwgU2lsaWNvbiBMYWJzIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoc3VjaCBhcyBRRU1VL0dDRSkuIENvbnNlcXVlbnRseSwgdGhlc2UgcHJvYmUgYW5kIHJlbGVhc2UgcGF0aHMgYXJlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzQ5YmRkMGVkNjYyMzYwNmZlNGI3M2NlN2E3YzI0MmU2NDRmNjdhMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDM6MTM6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jXG5pbmRleCA0ZTk5ZmU3ZTViYjc4Li4xNmQ1YjUxZjZmMDNhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jXG5AQCAtNDExLDYgKzQxMSw3IEBAIGludCB3ZnhfcHJvYmUoc3RydWN0IHdmeF9kZXYgKndkZXYpXG4gXG4gXHRpZiAod2Rldi1cdTAwM2Vod19jYXBzLmxpbmtfbW9kZSA9PSBTRUNfTElOS19FTkZPUkNFRCkge1xuIFx0XHRkZXZfZXJyKHdkZXYtXHUwMDNlZGV2LCBcImNoaXAgcmVxdWlyZSBzZWN1cmVfbGluaywgYnV0IGNhbid0IG5lZ290aWF0ZSBpdFxcblwiKTtcbitcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4gXHRcdGdvdG8gaXJxX3Vuc3Vic2NyaWJlO1xuIFx0fVxuIFxuQEAgLTQ4Nyw2ICs0ODgsNyBAQCBpbnQgd2Z4X3Byb2JlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KVxuIFx0XHR3ZGV2LVx1MDAzZWh3YnVzX29wcy1cdTAwM2VpcnFfdW5zdWJzY3JpYmUod2Rldi1cdTAwM2Vod2J1c19wcml2KTtcbiBiaF91bnJlZ2lzdGVyOlxuIFx0d2Z4X2JoX3VucmVnaXN0ZXIod2Rldik7XG4rXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2d2Rldi1cdTAwM2Vjb29saW5nX3RpbWVvdXRfd29yayk7XG4gXHRkZXN0cm95X3dvcmtxdWV1ZSh3ZGV2LVx1MDAzZWJoX3dxKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuQEAgLTQ5Nyw2ICs0OTksNyBAQCB2b2lkIHdmeF9yZWxlYXNlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KVxuIFx0d2Z4X2hpZl9zaHV0ZG93bih3ZGV2KTtcbiBcdHdkZXYtXHUwMDNlaHdidXNfb3BzLVx1MDAzZWlycV91bnN1YnNjcmliZSh3ZGV2LVx1MDAzZWh3YnVzX3ByaXYpO1xuIFx0d2Z4X2JoX3VucmVnaXN0ZXIod2Rldik7XG4rXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2d2Rldi1cdTAwM2Vjb29saW5nX3RpbWVvdXRfd29yayk7XG4gXHRkZXN0cm95X3dvcmtxdWV1ZSh3ZGV2LVx1MDAzZWJoX3dxKTtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMzoxMzoxNC45NjU3NTI4OTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDE1ODA4NDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHdmeGAgRHJpdmVyIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhpcyBwYXRjaCBhbmQgdGhlIGFzc29jaWF0ZWQgZHJpdmVyLiBUaGUgZmlsZSBtb2RpZmllZCBpcyBgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgYHdmeGAgZHJpdmVyIGl0c2VsZi4gV2hhdCBpcyBpdCwgYW5kIGNydWNpYWxseSwgd2hhdCBidXMgZG9lcyBpdCBvcGVyYXRlIG9uPyBUbyBnZXQgYSBxdWljayBoYW5kbGUgb24gdGhpcywgSSdsbCBsZXZlcmFnZSBteSB1c3VhbCB0b29sa2l0LiBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYGdyZXBwZXJgLCBidXQgaWYgdGhhdCBwcm92ZXMgdG9vIGJyb2FkLCBJJ2xsIHN3aXRjaCB0byBzb21ldGhpbmcgbW9yZSB0YXJnZXRlZCBsaWtlIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAgb3IgZXZlbiBhIHNpbXBsZSBgcmVhZC1maWxlYCBvbiByZWxldmFudCBmaWxlcyB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2AgZGlyZWN0b3J5IHRvIHBpbnBvaW50IHRoZSBkcml2ZXIncyBwdXJwb3NlIGFuZCBpdHMgYnVzIGludGVyYWN0aW9uLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dHVhbCBmb3VuZGF0aW9uIEkgbmVlZCB0byBwcm9wZXJseSBldmFsdWF0ZSB0aGUgcGF0Y2gncyBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMTgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAzOjEzOjIwLjM4MTU2NjM0MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcImJoLmNcIixcbiAgICBcImJoLmhcIixcbiAgICBcImJ1cy5oXCIsXG4gICAgXCJidXNfc2Rpby5jXCIsXG4gICAgXCJidXNfc3BpLmNcIixcbiAgICBcImRhdGFfcnguY1wiLFxuICAgIFwiZGF0YV9yeC5oXCIsXG4gICAgXCJkYXRhX3R4LmNcIixcbiAgICBcImRhdGFfdHguaFwiLFxuICAgIFwiZGVidWcuY1wiLFxuICAgIFwiZGVidWcuaFwiLFxuICAgIFwiZndpby5jXCIsXG4gICAgXCJmd2lvLmhcIixcbiAgICBcImhpZl9hcGlfY21kLmhcIixcbiAgICBcImhpZl9hcGlfZ2VuZXJhbC5oXCIsXG4gICAgXCJoaWZfYXBpX21pYi5oXCIsXG4gICAgXCJoaWZfcnguY1wiLFxuICAgIFwiaGlmX3J4LmhcIixcbiAgICBcImhpZl90eC5jXCIsXG4gICAgXCJoaWZfdHguaFwiLFxuICAgIFwiaGlmX3R4X21pYi5jXCIsXG4gICAgXCJoaWZfdHhfbWliLmhcIixcbiAgICBcImh3aW8uY1wiLFxuICAgIFwiaHdpby5oXCIsXG4gICAgXCJrZXkuY1wiLFxuICAgIFwia2V5LmhcIixcbiAgICBcIm1haW4uY1wiLFxuICAgIFwibWFpbi5oXCIsXG4gICAgXCJxdWV1ZS5jXCIsXG4gICAgXCJxdWV1ZS5oXCIsXG4gICAgXCJzY2FuLmNcIixcbiAgICBcInNjYW4uaFwiLFxuICAgIFwic3RhLmNcIixcbiAgICBcInN0YS5oXCIsXG4gICAgXCJ0cmFjZXMuaFwiLFxuICAgIFwid2Z4LmhcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogbnVsbFxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDM6MTM6MjAuMzgxNjY2NzAxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc0ODk2MTUwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgU2lsaWNvbiBMYWJzIFdpLUZpIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIFNpbGljb24gTGFicyBXaS1GaSBkcml2ZXIsIHNwZWNpZmljYWxseSBpbiB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYCBkaXJlY3RvcnkuIE15IGluaXRpYWwgc3RlcCBoZXJlIGlzIHByZXR0eSBzdGFuZGFyZDogSSBuZWVkIHRvIHZlcmlmeSBob3cgdGhpcyBkcml2ZXIgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGJ1aWxkIHN5c3RlbS4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBLY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgSSBjYW4gZmluZCBhbGwgdGhlIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGRlZmF1bHQgc2V0dGluZ3MgdGhhdCBkZXRlcm1pbmUgd2hldGhlciB0aGlzIGRyaXZlciwgYW5kIHNwZWNpZmljIGZlYXR1cmVzIHdpdGhpbiBpdCwgd2lsbCBiZSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29udHJvbHMgaXRzIGluY2x1c2lvbiBhbmQgcG90ZW50aWFsbHkgYW55IGJ1aWxkLXRpbWUgZGVjaXNpb25zIHRoYXQgYWZmZWN0IHRoZSBkcml2ZXIncyBiZWhhdmlvci4gVGhpcyBgS2NvbmZpZ2AgZmlsZSBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIGNvbXBpbGUtdGltZSBmb290cHJpbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MTQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImNvZGVzZWFyY2gtZGlyLWluZGV4Il19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDM6MTM6MjMuMTMwNjMyNjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkyNDkzODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiV0ZYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFic1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvTWFrZWZpbGUtMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvTWFrZWZpbGU6MzpvYmotJChDT05GSUdfV0ZYKSAgICAgICs9IHdmeC9cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvS2NvbmZpZzoyOmNvbmZpZyBXRlhcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiU2lsaWNvbiBMYWJzIHdpcmVsZXNzIGNoaXBzIFdGMjAwIGFuZCBmdXJ0aGVyXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvS2NvbmZpZy00LVxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L0tjb25maWc6NTpcXHRkZXBlbmRzIG9uIE1NQyB8fCAhTU1DICMgZG8gbm90IGFsbG93IFdGWD15IGlmIE1NQz1tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9LY29uZmlnLTYtXFx0ZGVwZW5kcyBvbiAoU1BJIHx8IE1NQylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvTWFrZWZpbGU9MjM9d2Z4LSQoc3Vic3QgbSx5LCQoQ09ORklHX01NQykpICs9IGJ1c19zZGlvLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L01ha2VmaWxlLTI0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX1dGWCkgKz0gd2Z4Lm9cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYmguaC03LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYmguaDo4OiNpZm5kZWYgV0ZYX0JIX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2JoLmg6OTojZGVmaW5lIFdGWF9CSF9IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9iaC5oLTEwLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXMuaC03LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzLmg6ODojaWZuZGVmIFdGWF9CVVNfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzLmg6OTojZGVmaW5lIFdGWF9CVVNfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzLmgtMTAtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1cy5oLTEzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzLmg6MTQ6I2RlZmluZSBXRlhfUkVHX0NPTkZJRyAgICAgICAgMHgwXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXMuaDoxNTojZGVmaW5lIFdGWF9SRUdfQ09OVFJPTCAgICAgICAweDFcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1cy5oOjE2OiNkZWZpbmUgV0ZYX1JFR19JTl9PVVRfUVVFVUUgIDB4MlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzLmg6MTc6I2RlZmluZSBXRlhfUkVHX0FIQl9EUE9SVCAgICAgMHgzXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXMuaDoxODojZGVmaW5lIFdGWF9SRUdfQkFTRV9BRERSICAgICAweDRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1cy5oOjE5OiNkZWZpbmUgV0ZYX1JFR19TUkFNX0RQT1JUICAgIDB4NVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzLmg6MjA6I2RlZmluZSBXRlhfUkVHX1NFVF9HRU5fUl9XICAgMHg2XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXMuaDoyMTojZGVmaW5lIFdGWF9SRUdfRlJBTUVfT1VUICAgICAweDdcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1cy5oLTIyLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc2Rpby5jPTUzPXN0YXRpYyBpbnQgd2Z4X3NkaW9fY29weV9mcm9tX2lvKHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCByZWdfaWQsIHZvaWQgKmRzdCwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc2Rpby5jLTYzLVxcdC8qIFVzZSBxdWV1ZSBtb2RlIGJ1ZmZlcnMgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmM6NjQ6XFx0aWYgKHJlZ19pZCA9PSBXRlhfUkVHX0lOX09VVF9RVUVVRSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmMtNjUtXFx0XFx0c2Rpb19hZGRyIHw9IChidXMtXFx1MDAzZWJ1Zl9pZF9yeCArIDEpIFxcdTAwM2NcXHUwMDNjIDc7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc2Rpby5jLTY2LVxcdHJldCA9IHNkaW9fbWVtY3B5X2Zyb21pbyhidXMtXFx1MDAzZWZ1bmMsIGRzdCwgc2Rpb19hZGRyLCBjb3VudCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc2Rpby5jOjY3OlxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IHJlZ19pZCA9PSBXRlhfUkVHX0lOX09VVF9RVUVVRSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmMtNjgtXFx0XFx0YnVzLVxcdTAwM2VidWZfaWRfcnggPSAoYnVzLVxcdTAwM2VidWZfaWRfcnggKyAxKSAlIDQ7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmM9NzM9c3RhdGljIGludCB3Znhfc2Rpb19jb3B5X3RvX2lvKHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCByZWdfaWQsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc2Rpby5jLTgzLVxcdC8qIFVzZSBxdWV1ZSBtb2RlIGJ1ZmZlcnMgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmM6ODQ6XFx0aWYgKHJlZ19pZCA9PSBXRlhfUkVHX0lOX09VVF9RVUVVRSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmMtODUtXFx0XFx0c2Rpb19hZGRyIHw9IGJ1cy1cXHUwMDNlYnVmX2lkX3R4IFxcdTAwM2NcXHUwMDNjIDc7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmMtODctXFx0cmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhidXMtXFx1MDAzZWZ1bmMsIHNkaW9fYWRkciwgKHZvaWQgKilzcmMsIGNvdW50KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmM6ODg6XFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgcmVnX2lkID09IFdGWF9SRUdfSU5fT1VUX1FVRVVFKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NkaW8uYy04OS1cXHRcXHRidXMtXFx1MDAzZWJ1Zl9pZF90eCA9IChidXMtXFx1MDAzZWJ1Zl9pZF90eCArIDEpICUgMzI7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zcGkuYz02NT1zdGF0aWMgaW50IHdmeF9zcGlfY29weV9mcm9tX2lvKHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBhZGRyLCB2b2lkICpkc3QsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NwaS5jLTkxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NwaS5jOjkyOlxcdGlmIChidXMtXFx1MDAzZW5lZWRfc3dhYiBcXHUwMDI2XFx1MDAyNiBhZGRyID09IFdGWF9SRUdfQ09ORklHKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NwaS5jLTkzLVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjb3VudCAvIDI7IGkrKylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NwaS5jPTk4PXN0YXRpYyBpbnQgd2Z4X3NwaV9jb3B5X3RvX2lvKHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBhZGRyLCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NwaS5jLTEyNC1cXHRcXHRzd2FiMTZzKFxcdTAwMjZyZWdhZGRyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zcGkuYzoxMjU6XFx0aWYgKGJ1cy1cXHUwMDNlbmVlZF9zd2FiIFxcdTAwMjZcXHUwMDI2IGFkZHIgPT0gV0ZYX1JFR19DT05GSUcpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc3BpLmMtMTI2LVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjb3VudCAvIDI7IGkrKylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NwaS5jLTEzMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zcGkuYzoxMzQ6XFx0aWYgKGJ1cy1cXHUwMDNlbmVlZF9zd2FiIFxcdTAwMjZcXHUwMDI2IGFkZHIgPT0gV0ZYX1JFR19DT05GSUcpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc3BpLmMtMTM1LVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjb3VudCAvIDI7IGkrKylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZGF0YV9yeC5oLTctICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9kYXRhX3J4Lmg6ODojaWZuZGVmIFdGWF9EQVRBX1JYX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2RhdGFfcnguaDo5OiNkZWZpbmUgV0ZYX0RBVEFfUlhfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZGF0YV9yeC5oLTEwLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9kYXRhX3R4LmgtNy0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2RhdGFfdHguaDo4OiNpZm5kZWYgV0ZYX0RBVEFfVFhfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZGF0YV90eC5oOjk6I2RlZmluZSBXRlhfREFUQV9UWF9IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9kYXRhX3R4LmgtMTAtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2RlYnVnLmgtNy0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2RlYnVnLmg6ODojaWZuZGVmIFdGWF9ERUJVR19IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9kZWJ1Zy5oOjk6I2RlZmluZSBXRlhfREVCVUdfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZGVidWcuaC0xMC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTE4LS8qIEFkZHJlc3NlcyBiZWxvdyBhcmUgaW4gU1JBTSBhcmVhICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6MTk6I2RlZmluZSBXRlhfRE5MRF9GSUZPICAgICAgICAgICAgIDB4MDkwMDQwMDBcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yMC0jZGVmaW5lICAgICBETkxEX0JMT0NLX1NJWkUgICAgICAgICAgIDB4MDQwMFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMjItLyogRG93bmxvYWQgQ29udHJvbCBBcmVhIChEQ0EpICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6MjM6I2RlZmluZSBXRlhfRENBX0lNQUdFX1NJWkUgICAgICAgIDB4MDkwMEMwMDBcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzoyNDojZGVmaW5lIFdGWF9EQ0FfUFVUICAgICAgICAgICAgICAgMHgwOTAwQzAwNFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjI1OiNkZWZpbmUgV0ZYX0RDQV9HRVQgICAgICAgICAgICAgICAweDA5MDBDMDA4XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6MjY6I2RlZmluZSBXRlhfRENBX0hPU1RfU1RBVFVTICAgICAgIDB4MDkwMEMwMENcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yNy0jZGVmaW5lICAgICBIT1NUX1JFQURZICAgICAgICAgICAgICAgIDB4ODc2NTQzMjFcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTMxLSNkZWZpbmUgICAgIEhPU1RfT0tfVE9fSlVNUCAgICAgICAgICAgMHgxNzRGQzg4MlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjMyOiNkZWZpbmUgV0ZYX0RDQV9OQ1BfU1RBVFVTICAgICAgICAweDA5MDBDMDEwXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMzMtI2RlZmluZSAgICAgTkNQX05PVF9SRUFEWSAgICAgICAgICAgICAweDEyMzQ1Njc4XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy00MC0jZGVmaW5lICAgICBOQ1BfUFVCX0tFWV9SRFkgICAgICAgICAgIDB4N0FCNDFEMTlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzo0MTojZGVmaW5lIFdGWF9EQ0FfRldfU0lHTkFUVVJFICAgICAgMHgwOTAwQzAxNFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTQyLSNkZWZpbmUgICAgIEZXX1NJR05BVFVSRV9TSVpFICAgICAgICAgMHg0MFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjQzOiNkZWZpbmUgV0ZYX0RDQV9GV19IQVNIICAgICAgICAgICAweDA5MDBDMDU0XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtNDQtI2RlZmluZSAgICAgRldfSEFTSF9TSVpFICAgICAgICAgICAgICAweDA4XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6NDU6I2RlZmluZSBXRlhfRENBX0ZXX1ZFUlNJT04gICAgICAgIDB4MDkwMEMwNUNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy00Ni0jZGVmaW5lICAgICBGV19WRVJTSU9OX1NJWkUgICAgICAgICAgIDB4MDRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzo0NzojZGVmaW5lIFdGWF9EQ0FfUkVTRVJWRUQgICAgICAgICAgMHgwOTAwQzA2MFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTQ4LSNkZWZpbmUgICAgIERDQV9SRVNFUlZFRF9TSVpFICAgICAgICAgMHgyMFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjQ5OiNkZWZpbmUgV0ZYX1NUQVRVU19JTkZPICAgICAgICAgICAweDA5MDBDMDgwXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6NTA6I2RlZmluZSBXRlhfQk9PVExPQURFUl9MQUJFTCAgICAgIDB4MDkwMEMwODRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy01MS0jZGVmaW5lICAgICBCT09UTE9BREVSX0xBQkVMX1NJWkUgICAgIDB4M0NcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzo1MjojZGVmaW5lIFdGWF9QVEVfSU5GTyAgICAgICAgICAgICAgMHgwOTAwQzBDMFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTUzLSNkZWZpbmUgICAgIFBURV9JTkZPX0tFWVNFVF9JRFggICAgICAgMHgwRFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTU0LSNkZWZpbmUgICAgIFBURV9JTkZPX1NJWkUgICAgICAgICAgICAgMHgxMFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjU1OiNkZWZpbmUgV0ZYX0VSUl9JTkZPICAgICAgICAgICAgICAweDA5MDBDMEQwXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtNTYtI2RlZmluZSAgICAgRVJSX0lOVkFMSURfU0VDX1RZUEUgICAgICAweDA1XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYz0xNDg9c3RhdGljIGludCB3YWl0X25jcF9zdGF0dXMoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiBzdGF0dXMpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0xNTUtXFx0Zm9yICg7Oykge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjE1NjpcXHRcXHRyZXQgPSB3Znhfc3JhbV9yZWdfcmVhZCh3ZGV2LCBXRlhfRENBX05DUF9TVEFUVVMsIFxcdTAwMjZyZWcpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTE1Ny1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jPTE3Mj1zdGF0aWMgaW50IHVwbG9hZF9maXJtd2FyZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgY29uc3QgdTggKmRhdGEsIHNpemVfdCBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0xOTAtXFx0XFx0XFx0XFx0cmV0dXJuIC1FVElNRURPVVQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6MTkxOlxcdFxcdFxcdHJldCA9IHdmeF9zcmFtX3JlZ19yZWFkKHdkZXYsIFdGWF9EQ0FfR0VULCBcXHUwMDI2Ynl0ZXNfZG9uZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMTkyLVxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMTk3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjE5ODpcXHRcXHRyZXQgPSB3Znhfc3JhbV93cml0ZV9kbWFfc2FmZSh3ZGV2LCBXRlhfRE5MRF9GSUZPICsgKG9mZnMgJSBETkxEX0ZJRk9fU0laRSksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMTk5LVxcdFxcdFxcdFxcdFxcdCAgICAgIGRhdGEgKyBvZmZzLCBETkxEX0JMT0NLX1NJWkUpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMjA0LVxcdFxcdG9mZnMgKz0gRE5MRF9CTE9DS19TSVpFO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjIwNTpcXHRcXHRyZXQgPSB3Znhfc3JhbV9yZWdfd3JpdGUod2RldiwgV0ZYX0RDQV9QVVQsIG9mZnMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTIwNi1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jPTIxMj1zdGF0aWMgdm9pZCBwcmludF9ib290X3N0YXR1cyhzdHJ1Y3Qgd2Z4X2RldiAqd2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTIxNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzoyMTY6XFx0d2Z4X3NyYW1fcmVnX3JlYWQod2RldiwgV0ZYX1NUQVRVU19JTkZPLCBcXHUwMDI2cmVnKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yMTctXFx0aWYgKHJlZyA9PSAweDEyMzQ1Njc4KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTIxOC1cXHRcXHRyZXR1cm47XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6MjE5OlxcdHdmeF9zcmFtX3JlZ19yZWFkKHdkZXYsIFdGWF9FUlJfSU5GTywgXFx1MDAyNnJlZyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMjIwLVxcdGlmIChyZWcgXFx1MDAzYyBBUlJBWV9TSVpFKGZ3aW9fZXJyb3JzKSBcXHUwMDI2XFx1MDAyNiBmd2lvX2Vycm9yc1tyZWddKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM9MjI2PXN0YXRpYyBpbnQgbG9hZF9maXJtd2FyZV9zZWN1cmUoc3RydWN0IHdmeF9kZXYgKndkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yMzktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6MjQwOlxcdHdmeF9zcmFtX3JlZ193cml0ZSh3ZGV2LCBXRlhfRENBX0hPU1RfU1RBVFVTLCBIT1NUX1JFQURZKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yNDEtXFx0cmV0ID0gd2FpdF9uY3Bfc3RhdHVzKHdkZXYsIE5DUF9JTkZPX1JFQURZKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTI0NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzoyNDU6XFx0d2Z4X3NyYW1fYnVmX3JlYWQod2RldiwgV0ZYX0JPT1RMT0FERVJfTEFCRUwsIGJ1ZiwgQk9PVExPQURFUl9MQUJFTF9TSVpFKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yNDYtXFx0YnVmW0JPT1RMT0FERVJfTEFCRUxfU0laRV0gPSAwO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMjQ4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjI0OTpcXHR3Znhfc3JhbV9idWZfcmVhZCh3ZGV2LCBXRlhfUFRFX0lORk8sIGJ1ZiwgUFRFX0lORk9fU0laRSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMjUwLVxcdHJldCA9IGdldF9maXJtd2FyZSh3ZGV2LCBidWZbUFRFX0lORk9fS0VZU0VUX0lEWF0sIFxcdTAwMjZmdywgXFx1MDAyNmZ3X29mZnNldCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yNTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6MjU1OlxcdHdmeF9zcmFtX3JlZ193cml0ZSh3ZGV2LCBXRlhfRENBX0hPU1RfU1RBVFVTLCBIT1NUX0lORk9fUkVBRCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMjU2LVxcdHJldCA9IHdhaXRfbmNwX3N0YXR1cyh3ZGV2LCBOQ1BfUkVBRFkpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMjU5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjI2MDpcXHR3Znhfc3JhbV9yZWdfd3JpdGUod2RldiwgV0ZYX0ROTERfRklGTywgMHhGRkZGRkZGRik7IC8qIEZpZm8gaW5pdCAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjI2MTpcXHR3Znhfc3JhbV93cml0ZV9kbWFfc2FmZSh3ZGV2LCBXRlhfRENBX0ZXX1ZFUlNJT04sIFxcXCJcXFxceDAxXFxcXHgwMFxcXFx4MDBcXFxceDAwXFxcIiwgRldfVkVSU0lPTl9TSVpFKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzoyNjI6XFx0d2Z4X3NyYW1fd3JpdGVfZG1hX3NhZmUod2RldiwgV0ZYX0RDQV9GV19TSUdOQVRVUkUsIGZ3LVxcdTAwM2VkYXRhICsgZndfb2Zmc2V0LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTI2My1cXHRcXHRcXHRcXHRGV19TSUdOQVRVUkVfU0laRSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6MjY0OlxcdHdmeF9zcmFtX3dyaXRlX2RtYV9zYWZlKHdkZXYsIFdGWF9EQ0FfRldfSEFTSCwgZnctXFx1MDAzZWRhdGEgKyBmd19vZmZzZXQgKyBGV19TSUdOQVRVUkVfU0laRSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yNjUtXFx0XFx0XFx0XFx0RldfSEFTSF9TSVpFKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzoyNjY6XFx0d2Z4X3NyYW1fcmVnX3dyaXRlKHdkZXYsIFdGWF9EQ0FfSU1BR0VfU0laRSwgZnctXFx1MDAzZXNpemUgLSBoZWFkZXJfc2l6ZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6MjY3OlxcdHdmeF9zcmFtX3JlZ193cml0ZSh3ZGV2LCBXRlhfRENBX0hPU1RfU1RBVFVTLCBIT1NUX1VQTE9BRF9QRU5ESU5HKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yNjgtXFx0cmV0ID0gd2FpdF9uY3Bfc3RhdHVzKHdkZXYsIE5DUF9ET1dOTE9BRF9QRU5ESU5HKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTI3OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzoyNzk6XFx0d2Z4X3NyYW1fcmVnX3dyaXRlKHdkZXYsIFdGWF9EQ0FfSE9TVF9TVEFUVVMsIEhPU1RfVVBMT0FEX0NPTVBMRVRFKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yODAtXFx0cmV0ID0gd2FpdF9uY3Bfc3RhdHVzKHdkZXYsIE5DUF9BVVRIX09LKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTI4NS1cXHRcXHRnb3RvIGVycm9yO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjI4NjpcXHR3Znhfc3JhbV9yZWdfd3JpdGUod2RldiwgV0ZYX0RDQV9IT1NUX1NUQVRVUywgSE9TVF9PS19UT19KVU1QKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yODctXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uaC03LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5oOjg6I2lmbmRlZiBXRlhfRldJT19IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmg6OTojZGVmaW5lIFdGWF9GV0lPX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uaC0xMC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX2FwaV9jbWQuaC03LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX2FwaV9jbWQuaDo4OiNpZm5kZWYgV0ZYX0hJRl9BUElfQ01EX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl9hcGlfY21kLmg6OTojZGVmaW5lIFdGWF9ISUZfQVBJX0NNRF9IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfYXBpX2NtZC5oLTEwLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfYXBpX2dlbmVyYWwuaC03LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX2FwaV9nZW5lcmFsLmg6ODojaWZuZGVmIFdGWF9ISUZfQVBJX0dFTkVSQUxfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX2FwaV9nZW5lcmFsLmg6OTojZGVmaW5lIFdGWF9ISUZfQVBJX0dFTkVSQUxfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX2FwaV9nZW5lcmFsLmgtMTAtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl9hcGlfbWliLmgtNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl9hcGlfbWliLmg6ODojaWZuZGVmIFdGWF9ISUZfQVBJX01JQl9IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfYXBpX21pYi5oOjk6I2RlZmluZSBXRlhfSElGX0FQSV9NSUJfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX2FwaV9taWIuaC0xMC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX3J4LmgtOC0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl9yeC5oOjk6I2lmbmRlZiBXRlhfSElGX1JYX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl9yeC5oOjEwOiNkZWZpbmUgV0ZYX0hJRl9SWF9IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfcnguaC0xMS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX3R4LmgtOS0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl90eC5oOjEwOiNpZm5kZWYgV0ZYX0hJRl9UWF9IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfdHguaDoxMTojZGVmaW5lIFdGWF9ISUZfVFhfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX3R4LmgtMTItXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl90eF9taWIuaC04LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX3R4X21pYi5oOjk6I2lmbmRlZiBXRlhfSElGX1RYX01JQl9IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfdHhfbWliLmg6MTA6I2RlZmluZSBXRlhfSElGX1RYX01JQl9IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfdHhfbWliLmgtMTEtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0xNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoxODojZGVmaW5lIFdGWF9ISUZfQlVGRkVSX1NJWkUgMHgyMDAwXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMTktXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYz05Nj1zdGF0aWMgaW50IHdmeF9pbmRpcmVjdF9yZWFkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgcmVnLCB1MzIgYWRkciwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMTAyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjEwMzpcXHRXQVJOX09OKGxlbiBcXHUwMDNlPSBXRlhfSElGX0JVRkZFUl9TSVpFKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoxMDQ6XFx0V0FSTl9PTihyZWcgIT0gV0ZYX1JFR19BSEJfRFBPUlQgXFx1MDAyNlxcdTAwMjYgcmVnICE9IFdGWF9SRUdfU1JBTV9EUE9SVCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMTA1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjEwNjpcXHRpZiAocmVnID09IFdGWF9SRUdfQUhCX0RQT1JUKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTEwNy1cXHRcXHRwcmVmZXRjaCA9IENGR19QUkVGRVRDSF9BSEI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MTA4OlxcdGVsc2UgaWYgKHJlZyA9PSBXRlhfUkVHX1NSQU1fRFBPUlQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMTA5LVxcdFxcdHByZWZldGNoID0gQ0ZHX1BSRUZFVENIX1NSQU07XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0xMTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MTEzOlxcdHJldCA9IHdmeF93cml0ZTMyKHdkZXYsIFdGWF9SRUdfQkFTRV9BRERSLCBhZGRyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0xMTQtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0xMTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MTE3OlxcdHJldCA9IHdmeF9yZWFkMzIod2RldiwgV0ZYX1JFR19DT05GSUcsIFxcdTAwMjZjZmcpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTExOC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTEyMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoxMjE6XFx0cmV0ID0gd2Z4X3dyaXRlMzIod2RldiwgV0ZYX1JFR19DT05GSUcsIGNmZyB8IHByZWZldGNoKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0xMjItXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0xMjUtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDIwOyBpKyspIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoxMjY6XFx0XFx0cmV0ID0gd2Z4X3JlYWQzMih3ZGV2LCBXRlhfUkVHX0NPTkZJRywgXFx1MDAyNmNmZyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMTI3LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM9MTQ2PXN0YXRpYyBpbnQgd2Z4X2luZGlyZWN0X3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgcmVnLCB1MzIgYWRkcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTE1MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoxNTE6XFx0V0FSTl9PTihsZW4gXFx1MDAzZT0gV0ZYX0hJRl9CVUZGRVJfU0laRSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MTUyOlxcdFdBUk5fT04ocmVnICE9IFdGWF9SRUdfQUhCX0RQT1JUIFxcdTAwMjZcXHUwMDI2IHJlZyAhPSBXRlhfUkVHX1NSQU1fRFBPUlQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjE1MzpcXHRyZXQgPSB3Znhfd3JpdGUzMih3ZGV2LCBXRlhfUkVHX0JBU0VfQUREUiwgYWRkcik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMTU0LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM9MjE2PWludCB3ZnhfZGF0YV9yZWFkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB2b2lkICpidWYsIHNpemVfdCBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yMjEtXFx0d2Rldi1cXHUwMDNlaHdidXNfb3BzLVxcdTAwM2Vsb2NrKHdkZXYtXFx1MDAzZWh3YnVzX3ByaXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjIyMjpcXHRyZXQgPSB3ZGV2LVxcdTAwM2Vod2J1c19vcHMtXFx1MDAzZWNvcHlfZnJvbV9pbyh3ZGV2LVxcdTAwM2Vod2J1c19wcml2LCBXRlhfUkVHX0lOX09VVF9RVUVVRSwgYnVmLCBsZW4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjIyMzpcXHRfdHJhY2VfaW9fcmVhZChXRlhfUkVHX0lOX09VVF9RVUVVRSwgYnVmLCBsZW4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTIyNC1cXHR3ZGV2LVxcdTAwM2Vod2J1c19vcHMtXFx1MDAzZXVubG9jayh3ZGV2LVxcdTAwM2Vod2J1c19wcml2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTIzMD1pbnQgd2Z4X2RhdGFfd3JpdGUoc3RydWN0IHdmeF9kZXYgKndkZXYsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTIzNS1cXHR3ZGV2LVxcdTAwM2Vod2J1c19vcHMtXFx1MDAzZWxvY2sod2Rldi1cXHUwMDNlaHdidXNfcHJpdik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MjM2OlxcdHJldCA9IHdkZXYtXFx1MDAzZWh3YnVzX29wcy1cXHUwMDNlY29weV90b19pbyh3ZGV2LVxcdTAwM2Vod2J1c19wcml2LCBXRlhfUkVHX0lOX09VVF9RVUVVRSwgYnVmLCBsZW4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjIzNzpcXHRfdHJhY2VfaW9fd3JpdGUoV0ZYX1JFR19JTl9PVVRfUVVFVUUsIGJ1ZiwgbGVuKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yMzgtXFx0d2Rldi1cXHUwMDNlaHdidXNfb3BzLVxcdTAwM2V1bmxvY2sod2Rldi1cXHUwMDNlaHdidXNfcHJpdik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYz0yNDQ9aW50IHdmeF9zcmFtX2J1Zl9yZWFkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgYWRkciwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTI0NS17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MjQ2OlxcdHJldHVybiB3ZnhfaW5kaXJlY3RfcmVhZF9sb2NrZWQod2RldiwgV0ZYX1JFR19TUkFNX0RQT1JULCBhZGRyLCBidWYsIGxlbik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMjQ3LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTI0OT1pbnQgd2Z4X2FoYl9idWZfcmVhZChzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yNTAte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjI1MTpcXHRyZXR1cm4gd2Z4X2luZGlyZWN0X3JlYWRfbG9ja2VkKHdkZXYsIFdGWF9SRUdfQUhCX0RQT1JULCBhZGRyLCBidWYsIGxlbik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMjUyLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTI1ND1pbnQgd2Z4X3NyYW1fYnVmX3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgYWRkciwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTI1NS17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MjU2OlxcdHJldHVybiB3ZnhfaW5kaXJlY3Rfd3JpdGVfbG9ja2VkKHdkZXYsIFdGWF9SRUdfU1JBTV9EUE9SVCwgYWRkciwgYnVmLCBsZW4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTI1Ny19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYz0yNTk9aW50IHdmeF9haGJfYnVmX3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgYWRkciwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTI2MC17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MjYxOlxcdHJldHVybiB3ZnhfaW5kaXJlY3Rfd3JpdGVfbG9ja2VkKHdkZXYsIFdGWF9SRUdfQUhCX0RQT1JULCBhZGRyLCBidWYsIGxlbik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMjYyLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTI2ND1pbnQgd2Z4X3NyYW1fcmVnX3JlYWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiBhZGRyLCB1MzIgKnZhbClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yNjUte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjI2NjpcXHRyZXR1cm4gd2Z4X2luZGlyZWN0X3JlYWQzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19TUkFNX0RQT1JULCBhZGRyLCB2YWwpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTI2Ny19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYz0yNjk9aW50IHdmeF9haGJfcmVnX3JlYWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiBhZGRyLCB1MzIgKnZhbClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yNzAte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjI3MTpcXHRyZXR1cm4gd2Z4X2luZGlyZWN0X3JlYWQzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19BSEJfRFBPUlQsIGFkZHIsIHZhbCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMjcyLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTI3ND1pbnQgd2Z4X3NyYW1fcmVnX3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgYWRkciwgdTMyIHZhbClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yNzUte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjI3NjpcXHRyZXR1cm4gd2Z4X2luZGlyZWN0X3dyaXRlMzJfbG9ja2VkKHdkZXYsIFdGWF9SRUdfU1JBTV9EUE9SVCwgYWRkciwgdmFsKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yNzctfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM9Mjc5PWludCB3ZnhfYWhiX3JlZ193cml0ZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIGFkZHIsIHUzMiB2YWwpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMjgwLXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoyODE6XFx0cmV0dXJuIHdmeF9pbmRpcmVjdF93cml0ZTMyX2xvY2tlZCh3ZGV2LCBXRlhfUkVHX0FIQl9EUE9SVCwgYWRkciwgdmFsKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yODItfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM9Mjg0PWludCB3ZnhfY29uZmlnX3JlZ19yZWFkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgKnZhbClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yODUte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjI4NjpcXHRyZXR1cm4gd2Z4X3JlYWQzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19DT05GSUcsIHZhbCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMjg3LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTI4OT1pbnQgd2Z4X2NvbmZpZ19yZWdfd3JpdGUoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiB2YWwpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMjkwLXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoyOTE6XFx0cmV0dXJuIHdmeF93cml0ZTMyX2xvY2tlZCh3ZGV2LCBXRlhfUkVHX0NPTkZJRywgdmFsKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yOTItfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM9Mjk0PWludCB3ZnhfY29uZmlnX3JlZ193cml0ZV9iaXRzKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgbWFzaywgdTMyIHZhbClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yOTUte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjI5NjpcXHRyZXR1cm4gd2Z4X3dyaXRlMzJfYml0c19sb2NrZWQod2RldiwgV0ZYX1JFR19DT05GSUcsIG1hc2ssIHZhbCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMjk3LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTI5OT1pbnQgd2Z4X2NvbnRyb2xfcmVnX3JlYWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiAqdmFsKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTMwMC17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MzAxOlxcdHJldHVybiB3ZnhfcmVhZDMyX2xvY2tlZCh3ZGV2LCBXRlhfUkVHX0NPTlRST0wsIHZhbCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMzAyLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTMwND1pbnQgd2Z4X2NvbnRyb2xfcmVnX3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgdmFsKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTMwNS17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MzA2OlxcdHJldHVybiB3Znhfd3JpdGUzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19DT05UUk9MLCB2YWwpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTMwNy19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYz0zMDk9aW50IHdmeF9jb250cm9sX3JlZ193cml0ZV9iaXRzKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgbWFzaywgdTMyIHZhbClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0zMTAte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjMxMTpcXHRyZXR1cm4gd2Z4X3dyaXRlMzJfYml0c19sb2NrZWQod2RldiwgV0ZYX1JFR19DT05UUk9MLCBtYXNrLCB2YWwpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTMxMi19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYz0zMTQ9aW50IHdmeF9pZ3ByX3JlZ19yZWFkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgaW5kZXgsIHUzMiAqdmFsKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMzE4LVxcdCp2YWwgPSB+MDsgLyogTmV2ZXIgcmV0dXJuIHVuZGVmaW5lZCB2YWx1ZSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjMxOTpcXHRyZXQgPSB3Znhfd3JpdGUzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19TRVRfR0VOX1JfVywgSUdQUl9SVyB8IGluZGV4IFxcdTAwM2NcXHUwMDNjIDI0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0zMjAtXFx0aWYgKHJldClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0zMjEtXFx0XFx0cmV0dXJuIHJldDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzozMjI6XFx0cmV0ID0gd2Z4X3JlYWQzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19TRVRfR0VOX1JfVywgdmFsKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0zMjMtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTMyOT1pbnQgd2Z4X2lncHJfcmVnX3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgaW5kZXgsIHUzMiB2YWwpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMzMwLXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzozMzE6XFx0cmV0dXJuIHdmeF93cml0ZTMyX2xvY2tlZCh3ZGV2LCBXRlhfUkVHX1NFVF9HRU5fUl9XLCBpbmRleCBcXHUwMDNjXFx1MDAzYyAyNCB8IHZhbCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMzMyLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5oLTctICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmg6ODojaWZuZGVmIFdGWF9IV0lPX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uaDo5OiNkZWZpbmUgV0ZYX0hXSU9fSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5oLTEwLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9rZXkuaC03LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngva2V5Lmg6ODojaWZuZGVmIFdGWF9LRVlfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngva2V5Lmg6OTojZGVmaW5lIFdGWF9LRVlfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngva2V5LmgtMTAtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYy0zNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYzozNjojZGVmaW5lIFdGWF9QRFNfVExWX1RZUEUgMHg0NDUwIC8vIFxcXCJQRFxcXCIgKFBsYXRmb3JtIERhdGEpIGluIGFzY2lpIGxpdHRsZS1lbmRpYW5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYzozNzojZGVmaW5lIFdGWF9QRFNfTUFYX0NIVU5LX1NJWkUgMTUwMFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jLTM4LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmM9MTg3PWludCB3Znhfc2VuZF9wZHMoc3RydWN0IHdmeF9kZXYgKndkZXYsIHU4ICpidWYsIHNpemVfdCBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYy0yMDEtXFx0XFx0fVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jOjIwMjpcXHRcXHRpZiAoY2h1bmtfdHlwZSAhPSBXRlhfUERTX1RMVl9UWVBFKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmMtMjAzLVxcdFxcdFxcdGRldl9pbmZvKHdkZXYtXFx1MDAzZWRldiwgXFxcIlBEUzolZDogc2tpcCB1bmtub3duIGRhdGFcXFxcblxcXCIsIGNodW5rX251bSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYy0yMDUtXFx0XFx0fVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jOjIwNjpcXHRcXHRpZiAoY2h1bmtfbGVuIFxcdTAwM2UgV0ZYX1BEU19NQVhfQ0hVTktfU0laRSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYy0yMDctXFx0XFx0XFx0ZGV2X3dhcm4od2Rldi1cXHUwMDNlZGV2LCBcXFwiUERTOiVkOiB1bmV4cGVjdGVkbHkgbGFyZ2UgY2h1bmtcXFxcblxcXCIsIGNodW5rX251bSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uaC05LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5oOjEwOiNpZm5kZWYgV0ZYX01BSU5fSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5oOjExOiNkZWZpbmUgV0ZYX01BSU5fSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5oLTEyLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9xdWV1ZS5oLTctICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9xdWV1ZS5oOjg6I2lmbmRlZiBXRlhfUVVFVUVfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvcXVldWUuaDo5OiNkZWZpbmUgV0ZYX1FVRVVFX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3F1ZXVlLmgtMTAtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3NjYW4uaC03LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc2Nhbi5oOjg6I2lmbmRlZiBXRlhfU0NBTl9IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9zY2FuLmg6OTojZGVmaW5lIFdGWF9TQ0FOX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3NjYW4uaC0xMC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmgtNy0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5oOjg6I2lmbmRlZiBXRlhfU1RBX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5oOjk6I2RlZmluZSBXRlhfU1RBX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5oLTEwLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC90cmFjZXMuaC0xMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjExOiNpZiAhZGVmaW5lZChfV0ZYX1RSQUNFX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC90cmFjZXMuaDoxMjojZGVmaW5lIF9XRlhfVFJBQ0VfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvdHJhY2VzLmgtMTMtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oPTIxMz1ERUZJTkVfRVZFTlQoaGlmX2RhdGEsIGhpZl9yZWN2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC90cmFjZXMuaC0yMTktI2RlZmluZSB3ZnhfcmVnX2xpc3RfZW51bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjIyMDpcXHR3ZnhfcmVnX25hbWUoV0ZYX1JFR19DT05GSUcsICAgICAgIFxcXCJDT05GSUdcXFwiKSAgICAgIFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjIyMTpcXHR3ZnhfcmVnX25hbWUoV0ZYX1JFR19DT05UUk9MLCAgICAgIFxcXCJDT05UUk9MXFxcIikgICAgIFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjIyMjpcXHR3ZnhfcmVnX25hbWUoV0ZYX1JFR19JTl9PVVRfUVVFVUUsIFxcXCJRVUVVRVxcXCIpICAgICAgIFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjIyMzpcXHR3ZnhfcmVnX25hbWUoV0ZYX1JFR19BSEJfRFBPUlQsICAgIFxcXCJBSEJcXFwiKSAgICAgICAgIFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjIyNDpcXHR3ZnhfcmVnX25hbWUoV0ZYX1JFR19CQVNFX0FERFIsICAgIFxcXCJCQVNFX0FERFJcXFwiKSAgIFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjIyNTpcXHR3ZnhfcmVnX25hbWUoV0ZYX1JFR19TUkFNX0RQT1JULCAgIFxcXCJTUkFNXFxcIikgICAgICAgIFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjIyNjpcXHR3ZnhfcmVnX25hbWUoV0ZYX1JFR19TRVRfR0VOX1JfVywgIFxcXCJTRVRfR0VOX1JfV1xcXCIpIFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjIyNzpcXHR3ZnhfcmVnX25hbWUoV0ZYX1JFR19GUkFNRV9PVVQsICAgIFxcXCJGUkFNRV9PVVRcXFwiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvdHJhY2VzLmgtMjI4LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC93ZnguaC05LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvd2Z4Lmg6MTA6I2lmbmRlZiBXRlhfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvd2Z4Lmg6MTE6I2RlZmluZSBXRlhfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvd2Z4LmgtMTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAzOjEzOjIzLjIyOTg5MzI2OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5MTUzNDIzNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBTaWxpY29uIExhYnMgV2lyZWxlc3MgSW50ZXJmYWNlIENvZGUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGNvZGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIFNpbGljb24gTGFicyB3aXJlbGVzcyBjaGlwcywgcGFydGljdWxhcmx5IHRoZSBXRjIwMCBzZXJpZXMsIGFyZSBoYW5kbGVkIGF0IHRoZSBidXMgbGV2ZWwuIEknbSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgYGJ1c19zZGlvLmNgIGFuZCBgYnVzX3NwaS5jYC4gVGhlc2UgZmlsZXMgc2hvdWxkIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGV5IGludGVyZmFjZSB3aXRoIHRoZSBzeXN0ZW0uXG5cblJpZ2h0LCB0aGVzZSBjaGlwcyBwcmltYXJpbHkgYXR0YWNoIHZpYSBTUEkgb3IgU0RJTyAoTU1DKSwgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvciBjb25maWd1cmF0aW9uLiBTbywgbXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gaG93IHRoZSBwcm9iZSBmdW5jdGlvbnMgYW5kIGJ1cyByZWdpc3RyYXRpb24gYXJlIGltcGxlbWVudGVkIGluIGVhY2ggb2YgdGhvc2UgZmlsZXM6IGBidXNfc2Rpby5jYCBhbmQgYGJ1c19zcGkuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGRldGVjdHMgdGhlIGRldmljZSwgaW5pdGlhbGl6ZXMgdGhlIGludGVyZmFjZSwgYW5kIHJlZ2lzdGVycyBpdHNlbGYgd2l0aCB0aGUgYXBwcm9wcmlhdGUgYnVzLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBsb3ctbGV2ZWwgb3BlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTgyNiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAzOjEzOjI2LjE0NTIzODc5NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogU0RJTyBpbnRlcmZhY2UuXFxuICAgNDpcXHQgKlxcbiAgIDU6XFx0ICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuXFxuICAgNjpcXHQgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uXFxuICAgNzpcXHQgKi9cXG4gICA4OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gICA5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWMvc2Rpby5oXFx1MDAzZVxcbiAgMTA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9zZGlvX2Z1bmMuaFxcdTAwM2VcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWMvY2FyZC5oXFx1MDAzZVxcbiAgMTI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfaXJxLmhcXHUwMDNlXFxuICAxNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaXJxLmhcXHUwMDNlXFxuICAxNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYWxpZ24uaFxcdTAwM2VcXG4gIDE3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbS5oXFx1MDAzZVxcbiAgMTg6XFx0XFxuICAxOTpcXHQjaW5jbHVkZSBcXFwiYnVzLmhcXFwiXFxuICAyMDpcXHQjaW5jbHVkZSBcXFwid2Z4LmhcXFwiXFxuICAyMTpcXHQjaW5jbHVkZSBcXFwiaHdpby5oXFxcIlxcbiAgMjI6XFx0I2luY2x1ZGUgXFxcIm1haW4uaFxcXCJcXG4gIDIzOlxcdCNpbmNsdWRlIFxcXCJiaC5oXFxcIlxcbiAgMjQ6XFx0XFxuICAyNTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhIHBkYXRhX3dmMjAwID0ge1xcbiAgMjY6XFx0XFx0LmZpbGVfZncgPSBcXFwid2Z4L3dmbV93ZjIwMFxcXCIsXFxuICAyNzpcXHRcXHQuZmlsZV9wZHMgPSBcXFwid2Z4L3dmMjAwLnBkc1xcXCIsXFxuICAyODpcXHR9O1xcbiAgMjk6XFx0XFxuICAzMDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhIHBkYXRhX2JyZDQwMDFhID0ge1xcbiAgMzE6XFx0XFx0LmZpbGVfZncgPSBcXFwid2Z4L3dmbV93ZjIwMFxcXCIsXFxuICAzMjpcXHRcXHQuZmlsZV9wZHMgPSBcXFwid2Z4L2JyZDQwMDFhLnBkc1xcXCIsXFxuICAzMzpcXHR9O1xcbiAgMzQ6XFx0XFxuICAzNTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhIHBkYXRhX2JyZDgwMjJhID0ge1xcbiAgMzY6XFx0XFx0LmZpbGVfZncgPSBcXFwid2Z4L3dmbV93ZjIwMFxcXCIsXFxuICAzNzpcXHRcXHQuZmlsZV9wZHMgPSBcXFwid2Z4L2JyZDgwMjJhLnBkc1xcXCIsXFxuICAzODpcXHR9O1xcbiAgMzk6XFx0XFxuICA0MDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhIHBkYXRhX2JyZDgwMjNhID0ge1xcbiAgNDE6XFx0XFx0LmZpbGVfZncgPSBcXFwid2Z4L3dmbV93ZjIwMFxcXCIsXFxuICA0MjpcXHRcXHQuZmlsZV9wZHMgPSBcXFwid2Z4L2JyZDgwMjNhLnBkc1xcXCIsXFxuICA0MzpcXHR9O1xcbiAgNDQ6XFx0XFxuICA0NTpcXHRzdHJ1Y3Qgd2Z4X3NkaW9fcHJpdiB7XFxuICA0NjpcXHRcXHRzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jO1xcbiAgNDc6XFx0XFx0c3RydWN0IHdmeF9kZXYgKmNvcmU7XFxuICA0ODpcXHRcXHR1OCBidWZfaWRfdHg7XFxuICA0OTpcXHRcXHR1OCBidWZfaWRfcng7XFxuICA1MDpcXHRcXHRpbnQgb2ZfaXJxO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMzoxMzoyNi4xNDUzNDEzMjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzM1MTg1MzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byB0aGUgQnVzIERyaXZlcnMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZm9jdXNpbmcgb24gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIG9mIHRoaXMgZW1iZWRkZWQgc3lzdGVtLCBidXQgbm93IEkgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIHNwZWNpZmljcyBvZiBob3cgdGhlc2UgYnVzIGRyaXZlcnMgYXJlIGltcGxlbWVudGVkLiBJJ3ZlIGFscmVhZHkgZ290IGEgZ29vZCBncmFzcCBvbiB0aGUgY29uY2VwdHVhbCBmcmFtZXdvcmssIGJ1dCB1bmRlcnN0YW5kaW5nIHRoZSBhY3R1YWwgY29kZSBpbiBgYnVzX3NkaW8uY2AgYW5kIGBidXNfc3BpLmNgIGlzIGNydWNpYWwuIEkgbmVlZCB0byBzZWUgaG93IHRoZXkndmUgaGFuZGxlZCB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgU0RJTyBhbmQgU1BJIGNvbW11bmljYXRpb24uIFRoaW5ncyBsaWtlIGNsb2NrIGNvbmZpZ3VyYXRpb24sIERNQSBzZXR1cCwgaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgdGhlIHNwZWNpZmljIHJlZ2lzdGVyIGludGVyYWN0aW9ucyBhcmUgd2hhdCBJJ20gYWZ0ZXIuIEl0J3MgdGltZSB0byBhbmFseXplIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gdG8gc2VlIGhvdyB0aGUgc29mdHdhcmUgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlIGF0IGEgZ3JhbnVsYXIgbGV2ZWwuIEkgd2FudCB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBpbmVmZmljaWVuY2llcywgb3IgY2xldmVyIG9wdGltaXphdGlvbnMgdGhleSd2ZSBlbXBsb3llZC4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5J3ZlIGFic3RyYWN0ZWQgdGhlIGhhcmR3YXJlIGRpZmZlcmVuY2VzIGJldHdlZW4gdmFyaW91cyBTRElPIG9yIFNQSSBjb250cm9sbGVycywgYW5kIGhvdyB0aGV5IGRlYWwgd2l0aCB0aGUgdGltaW5nIGNvbnN0cmFpbnRzIHRoYXQgYXJlIHNvIGNyaXRpY2FsIGZvciBidXMgc3RhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjkyNCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDM6MTM6MjguNDgwNTMwOTc5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NkaW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDAsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDA6XFx0XFx0aWYgKCFmbGFncylcXG4gMTQxOlxcdFxcdFxcdGZsYWdzID0gSVJRRl9UUklHR0VSX0hJR0g7XFxuIDE0MjpcXHRcXHRmbGFncyB8PSBJUlFGX09ORVNIT1Q7XFxuIDE0MzpcXHRcXHRyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKFxcdTAwMjZidXMtXFx1MDAzZWZ1bmMtXFx1MDAzZWRldiwgYnVzLVxcdTAwM2VvZl9pcnEsIE5VTEwsXFxuIDE0NDpcXHRcXHRcXHRcXHRcXHRcXHR3Znhfc2Rpb19pcnFfaGFuZGxlcl9leHQsIGZsYWdzLCBcXFwid2Z4XFxcIiwgYnVzKTtcXG4gMTQ1OlxcdFxcdGlmIChyZXQpXFxuIDE0NjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxNDc6XFx0XFx0c2Rpb19jbGFpbV9ob3N0KGJ1cy1cXHUwMDNlZnVuYyk7XFxuIDE0ODpcXHRcXHRjY2NyID0gc2Rpb19mMF9yZWFkYihidXMtXFx1MDAzZWZ1bmMsIFNESU9fQ0NDUl9JRU54LCBOVUxMKTtcXG4gMTQ5OlxcdFxcdGNjY3IgfD0gQklUKDApO1xcbiAxNTA6XFx0XFx0Y2NjciB8PSBCSVQoYnVzLVxcdTAwM2VmdW5jLVxcdTAwM2VudW0pO1xcbiAxNTE6XFx0XFx0c2Rpb19mMF93cml0ZWIoYnVzLVxcdTAwM2VmdW5jLCBjY2NyLCBTRElPX0NDQ1JfSUVOeCwgTlVMTCk7XFxuIDE1MjpcXHRcXHRzZGlvX3JlbGVhc2VfaG9zdChidXMtXFx1MDAzZWZ1bmMpO1xcbiAxNTM6XFx0XFx0cmV0dXJuIDA7XFxuIDE1NDpcXHR9XFxuIDE1NTpcXHRcXG4gMTU2OlxcdHN0YXRpYyBpbnQgd2Z4X3NkaW9faXJxX3Vuc3Vic2NyaWJlKHZvaWQgKnByaXYpXFxuIDE1NzpcXHR7XFxuIDE1ODpcXHRcXHRzdHJ1Y3Qgd2Z4X3NkaW9fcHJpdiAqYnVzID0gcHJpdjtcXG4gMTU5OlxcdFxcdGludCByZXQ7XFxuIDE2MDpcXHRcXG4gMTYxOlxcdFxcdGlmIChidXMtXFx1MDAzZW9mX2lycSlcXG4gMTYyOlxcdFxcdFxcdGRldm1fZnJlZV9pcnEoXFx1MDAyNmJ1cy1cXHUwMDNlZnVuYy1cXHUwMDNlZGV2LCBidXMtXFx1MDAzZW9mX2lycSwgYnVzKTtcXG4gMTYzOlxcdFxcdHNkaW9fY2xhaW1faG9zdChidXMtXFx1MDAzZWZ1bmMpO1xcbiAxNjQ6XFx0XFx0cmV0ID0gc2Rpb19yZWxlYXNlX2lycShidXMtXFx1MDAzZWZ1bmMpO1xcbiAxNjU6XFx0XFx0c2Rpb19yZWxlYXNlX2hvc3QoYnVzLVxcdTAwM2VmdW5jKTtcXG4gMTY2OlxcdFxcdHJldHVybiByZXQ7XFxuIDE2NzpcXHR9XFxuIDE2ODpcXHRcXG4gMTY5OlxcdHN0YXRpYyBzaXplX3Qgd2Z4X3NkaW9fYWxpZ25fc2l6ZSh2b2lkICpwcml2LCBzaXplX3Qgc2l6ZSlcXG4gMTcwOlxcdHtcXG4gMTcxOlxcdFxcdHN0cnVjdCB3Znhfc2Rpb19wcml2ICpidXMgPSBwcml2O1xcbiAxNzI6XFx0XFxuIDE3MzpcXHRcXHRyZXR1cm4gc2Rpb19hbGlnbl9zaXplKGJ1cy1cXHUwMDNlZnVuYywgc2l6ZSk7XFxuIDE3NDpcXHR9XFxuIDE3NTpcXHRcXG4gMTc2OlxcdHN0YXRpYyB2b2lkIHdmeF9zZGlvX3NldF93YWtldXAodm9pZCAqcHJpdiwgYm9vbCBlbmFibGVkKVxcbiAxNzc6XFx0e1xcbiAxNzg6XFx0XFx0c3RydWN0IHdmeF9zZGlvX3ByaXYgKmJ1cyA9IHByaXY7XFxuIDE3OTpcXHRcXG4gMTgwOlxcdFxcdGRldmljZV9zZXRfd2FrZXVwX2VuYWJsZShcXHUwMDI2YnVzLVxcdTAwM2VmdW5jLVxcdTAwM2VkZXYsIGVuYWJsZWQpO1xcbiAxODE6XFx0fVxcbiAxODI6XFx0XFxuIDE4MzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHdmeF9od2J1c19vcHMgd2Z4X3NkaW9faHdidXNfb3BzID0ge1xcbiAxODQ6XFx0XFx0LmNvcHlfZnJvbV9pbyAgICA9IHdmeF9zZGlvX2NvcHlfZnJvbV9pbyxcXG4gMTg1OlxcdFxcdC5jb3B5X3RvX2lvICAgICAgPSB3Znhfc2Rpb19jb3B5X3RvX2lvLFxcbiAxODY6XFx0XFx0LmlycV9zdWJzY3JpYmUgICA9IHdmeF9zZGlvX2lycV9zdWJzY3JpYmUsXFxuIDE4NzpcXHRcXHQuaXJxX3Vuc3Vic2NyaWJlID0gd2Z4X3NkaW9faXJxX3Vuc3Vic2NyaWJlLFxcbiAxODg6XFx0XFx0LmxvY2sgICAgICAgICAgICA9IHdmeF9zZGlvX2xvY2ssXFxuIDE4OTpcXHRcXHQudW5sb2NrICAgICAgICAgID0gd2Z4X3NkaW9fdW5sb2NrLFxcbiAxOTA6XFx0XFx0LmFsaWduX3NpemUgICAgICA9IHdmeF9zZGlvX2FsaWduX3NpemUsXFxuIDE5MTpcXHRcXHQuc2V0X3dha2V1cCAgICAgID0gd2Z4X3NkaW9fc2V0X3dha2V1cCxcXG4gMTkyOlxcdH07XFxuIDE5MzpcXHRcXG4gMTk0OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHdmeF9zZGlvX29mX21hdGNoW10gPSB7XFxuIDE5NTpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcInNpbGFicyx3ZjIwMFxcXCIsICAgIC5kYXRhID0gXFx1MDAyNnBkYXRhX3dmMjAwIH0sXFxuIDE5NjpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcInNpbGFicyxicmQ0MDAxYVxcXCIsIC5kYXRhID0gXFx1MDAyNnBkYXRhX2JyZDQwMDFhIH0sXFxuIDE5NzpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcInNpbGFicyxicmQ4MDIyYVxcXCIsIC5kYXRhID0gXFx1MDAyNnBkYXRhX2JyZDgwMjJhIH0sXFxuIDE5ODpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcInNpbGFicyxicmQ4MDIzYVxcXCIsIC5kYXRhID0gXFx1MDAyNnBkYXRhX2JyZDgwMjNhIH0sXFxuIDE5OTpcXHRcXHR7IH0sXFxuIDIwMDpcXHR9O1xcbiAyMDE6XFx0TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgd2Z4X3NkaW9fb2ZfbWF0Y2gpO1xcbiAyMDI6XFx0XFxuIDIwMzpcXHRzdGF0aWMgaW50IHdmeF9zZGlvX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxcbiAyMDQ6XFx0e1xcbiAyMDU6XFx0XFx0c3RydWN0IHNkaW9fZnVuYyAqZnVuYyA9IGRldl90b19zZGlvX2Z1bmMoZGV2KTtcXG4gMjA2OlxcdFxcdHN0cnVjdCB3Znhfc2Rpb19wcml2ICpidXMgPSBzZGlvX2dldF9kcnZkYXRhKGZ1bmMpO1xcbiAyMDc6XFx0XFx0aW50IHJldDtcXG4gMjA4OlxcdFxcbiAyMDk6XFx0XFx0aWYgKCFkZXZpY2VfbWF5X3dha2V1cChkZXYpKVxcbiAyMTA6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDIxMTpcXHRcXG4gMjEyOlxcdFxcdGZsdXNoX3dvcmsoXFx1MDAyNmJ1cy1cXHUwMDNlY29yZS1cXHUwMDNlaGlmLmJoKTtcXG4gMjEzOlxcdFxcdC8qIEVpdGhlciBcXFwid2FrZXVwLXNvdXJjZVxcXCIgYXR0cmlidXRlIG9yIG91dC1vZi1iYW5kIElSUSBpcyByZXF1aXJlZCBmb3JcXG4gMjE0OlxcdFxcdCAqIFdvV0xBTlxcbiAyMTU6XFx0XFx0ICovXFxuIDIxNjpcXHRcXHRpZiAoYnVzLVxcdTAwM2VvZl9pcnEpIHtcXG4gMjE3OlxcdFxcdFxcdHJldCA9IGVuYWJsZV9pcnFfd2FrZShidXMtXFx1MDAzZW9mX2lycSk7XFxuIDIxODpcXHRcXHRcXHRpZiAocmV0KVxcbiAyMTk6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMjIwOlxcdFxcdH0gZWxzZSB7XFxuIDIyMTpcXHRcXHRcXHRyZXQgPSBzZGlvX3NldF9ob3N0X3BtX2ZsYWdzKGZ1bmMsIE1NQ19QTV9XQUtFX1NESU9fSVJRKTtcXG4gMjIyOlxcdFxcdFxcdGlmIChyZXQpXFxuIDIyMzpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAyMjQ6XFx0XFx0fVxcbiAyMjU6XFx0XFx0cmV0dXJuIHNkaW9fc2V0X2hvc3RfcG1fZmxhZ3MoZnVuYywgTU1DX1BNX0tFRVBfUE9XRVIpO1xcbiAyMjY6XFx0fVxcbiAyMjc6XFx0XFxuIDIyODpcXHRzdGF0aWMgaW50IHdmeF9zZGlvX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIDIyOTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAzOjEzOjI4LjQ4MDYzMjIzOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTE0NzEzNjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGJ1c19zZGlvLmMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gdGhlIHZlcnkgYm90dG9tIG9mIHRoZSBgYnVzX3NkaW8uY2AgZmlsZS4gTm8gbmVlZCBmb3IgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3IHJpZ2h0IG5vdzsgSSdtIGJldHRpbmcgdGhlIHJvb3Qgb2YgdGhlIHByb2JsZW0sIG9yIGF0IGxlYXN0IGEgY3JpdGljYWwgY2x1ZSwgaXMgYnVyaWVkIGRlZXAuIEkgaGF2ZSBhIGh1bmNoIGl0J3MgYSByZWNlbnQgY2hhbmdlLCBhIGJvdW5kYXJ5IGNvbmRpdGlvbiBpc3N1ZSwgb3IgbWF5YmUgc29tZSBvdmVybG9va2VkIGluaXRpYWxpemF0aW9uIG5lYXIgdGhlIGVuZCBvZiB0aGUgZmlsZS4gSXTigJlzIHVzdWFsbHkgd2hlcmUgSSBzdGFydCBsb29raW5nIGluIGNhc2VzIGxpa2UgdGhpcy4gTGV04oCZcyBzZWUgd2hhdCBnZW1zIGFyZSB3YWl0aW5nIHRvIGJlIHVuY292ZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3ODIsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAzOjEzOjMwLjM5NTM1MDczWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjMwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjMwOlxcdFxcdHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMgPSBkZXZfdG9fc2Rpb19mdW5jKGRldik7XFxuIDIzMTpcXHRcXHRzdHJ1Y3Qgd2Z4X3NkaW9fcHJpdiAqYnVzID0gc2Rpb19nZXRfZHJ2ZGF0YShmdW5jKTtcXG4gMjMyOlxcdFxcbiAyMzM6XFx0XFx0aWYgKCFkZXZpY2VfbWF5X3dha2V1cChkZXYpKVxcbiAyMzQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDIzNTpcXHRcXHRpZiAoYnVzLVxcdTAwM2VvZl9pcnEpXFxuIDIzNjpcXHRcXHRcXHRyZXR1cm4gZGlzYWJsZV9pcnFfd2FrZShidXMtXFx1MDAzZW9mX2lycSk7XFxuIDIzNzpcXHRcXHRlbHNlXFxuIDIzODpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjM5OlxcdH1cXG4gMjQwOlxcdFxcbiAyNDE6XFx0c3RhdGljIGludCB3Znhfc2Rpb19wcm9iZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jLCBjb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgKmlkKVxcbiAyNDI6XFx0e1xcbiAyNDM6XFx0XFx0Y29uc3Qgc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShcXHUwMDI2ZnVuYy1cXHUwMDNlZGV2KTtcXG4gMjQ0OlxcdFxcdG1tY19wbV9mbGFnX3QgcG1fZmxhZyA9IHNkaW9fZ2V0X2hvc3RfcG1fY2FwcyhmdW5jKTtcXG4gMjQ1OlxcdFxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBmdW5jLVxcdTAwM2VkZXYub2Zfbm9kZTtcXG4gMjQ2OlxcdFxcdHN0cnVjdCB3Znhfc2Rpb19wcml2ICpidXM7XFxuIDI0NzpcXHRcXHRpbnQgcmV0O1xcbiAyNDg6XFx0XFxuIDI0OTpcXHRcXHRpZiAoZnVuYy1cXHUwMDNlbnVtICE9IDEpIHtcXG4gMjUwOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNmZ1bmMtXFx1MDAzZWRldiwgXFxcIlNESU8gZnVuY3Rpb24gbnVtYmVyIGlzICVkIHdoaWxlIGl0IHNob3VsZCBhbHdheXMgYmUgMSAodW5zdXBwb3J0ZWQgY2hpcD8pXFxcXG5cXFwiLFxcbiAyNTE6XFx0XFx0XFx0XFx0ZnVuYy1cXHUwMDNlbnVtKTtcXG4gMjUyOlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiAyNTM6XFx0XFx0fVxcbiAyNTQ6XFx0XFxuIDI1NTpcXHRcXHRpZiAoIXBkYXRhKSB7XFxuIDI1NjpcXHRcXHRcXHRkZXZfd2FybihcXHUwMDI2ZnVuYy1cXHUwMDNlZGV2LCBcXFwibm8gY29tcGF0aWJsZSBkZXZpY2UgZm91bmQgaW4gRFRcXFxcblxcXCIpO1xcbiAyNTc6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDI1ODpcXHRcXHR9XFxuIDI1OTpcXHRcXG4gMjYwOlxcdFxcdGJ1cyA9IGRldm1fa3phbGxvYyhcXHUwMDI2ZnVuYy1cXHUwMDNlZGV2LCBzaXplb2YoKmJ1cyksIEdGUF9LRVJORUwpO1xcbiAyNjE6XFx0XFx0aWYgKCFidXMpXFxuIDI2MjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMjYzOlxcdFxcbiAyNjQ6XFx0XFx0YnVzLVxcdTAwM2VmdW5jID0gZnVuYztcXG4gMjY1OlxcdFxcdGJ1cy1cXHUwMDNlb2ZfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApO1xcbiAyNjY6XFx0XFx0c2Rpb19zZXRfZHJ2ZGF0YShmdW5jLCBidXMpO1xcbiAyNjc6XFx0XFxuIDI2ODpcXHRcXHRzZGlvX2NsYWltX2hvc3QoZnVuYyk7XFxuIDI2OTpcXHRcXHRyZXQgPSBzZGlvX2VuYWJsZV9mdW5jKGZ1bmMpO1xcbiAyNzA6XFx0XFx0LyogQmxvY2sgb2YgNjQgYnl0ZXMgaXMgbW9yZSBlZmZpY2llbnQgdGhhbiA1MTJCIGZvciBmcmFtZSBzaXplcyBcXHUwMDNjIDRrICovXFxuIDI3MTpcXHRcXHRzZGlvX3NldF9ibG9ja19zaXplKGZ1bmMsIDY0KTtcXG4gMjcyOlxcdFxcdHNkaW9fcmVsZWFzZV9ob3N0KGZ1bmMpO1xcbiAyNzM6XFx0XFx0aWYgKHJldClcXG4gMjc0OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDI3NTpcXHRcXG4gMjc2OlxcdFxcdGJ1cy1cXHUwMDNlY29yZSA9IHdmeF9pbml0X2NvbW1vbihcXHUwMDI2ZnVuYy1cXHUwMDNlZGV2LCBwZGF0YSwgXFx1MDAyNndmeF9zZGlvX2h3YnVzX29wcywgYnVzKTtcXG4gMjc3OlxcdFxcdGlmICghYnVzLVxcdTAwM2Vjb3JlKSB7XFxuIDI3ODpcXHRcXHRcXHRyZXQgPSAtRUlPO1xcbiAyNzk6XFx0XFx0XFx0Z290byBzZGlvX3JlbGVhc2U7XFxuIDI4MDpcXHRcXHR9XFxuIDI4MTpcXHRcXG4gMjgyOlxcdFxcdGJ1cy1cXHUwMDNlY29yZS1cXHUwMDNlcG9sbF9pcnEgPSAhIWJ1cy1cXHUwMDNlb2ZfaXJxO1xcbiAyODM6XFx0XFx0cmV0ID0gd2Z4X3Byb2JlKGJ1cy1cXHUwMDNlY29yZSk7XFxuIDI4NDpcXHRcXHRpZiAocmV0KVxcbiAyODU6XFx0XFx0XFx0Z290byBzZGlvX3JlbGVhc2U7XFxuIDI4NjpcXHRcXG4gMjg3OlxcdFxcdGlmIChwbV9mbGFnIFxcdTAwMjYgTU1DX1BNX0tFRVBfUE9XRVIpXFxuIDI4ODpcXHRcXHRcXHRkZXZpY2Vfc2V0X3dha2V1cF9jYXBhYmxlKFxcdTAwMjZmdW5jLVxcdTAwM2VkZXYsIHRydWUpO1xcbiAyODk6XFx0XFxuIDI5MDpcXHRcXHRyZXR1cm4gMDtcXG4gMjkxOlxcdFxcbiAyOTI6XFx0c2Rpb19yZWxlYXNlOlxcbiAyOTM6XFx0XFx0c2Rpb19jbGFpbV9ob3N0KGZ1bmMpO1xcbiAyOTQ6XFx0XFx0c2Rpb19kaXNhYmxlX2Z1bmMoZnVuYyk7XFxuIDI5NTpcXHRcXHRzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTtcXG4gMjk2OlxcdFxcdHJldHVybiByZXQ7XFxuIDI5NzpcXHR9XFxuIDI5ODpcXHRcXG4gMjk5OlxcdHN0YXRpYyB2b2lkIHdmeF9zZGlvX3JlbW92ZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKVxcbiAzMDA6XFx0e1xcbiAzMDE6XFx0XFx0c3RydWN0IHdmeF9zZGlvX3ByaXYgKmJ1cyA9IHNkaW9fZ2V0X2RydmRhdGEoZnVuYyk7XFxuIDMwMjpcXHRcXG4gMzAzOlxcdFxcdHdmeF9yZWxlYXNlKGJ1cy1cXHUwMDNlY29yZSk7XFxuIDMwNDpcXHRcXHRzZGlvX2NsYWltX2hvc3QoZnVuYyk7XFxuIDMwNTpcXHRcXHRzZGlvX2Rpc2FibGVfZnVuYyhmdW5jKTtcXG4gMzA2OlxcdFxcdHNkaW9fcmVsZWFzZV9ob3N0KGZ1bmMpO1xcbiAzMDc6XFx0fVxcbiAzMDg6XFx0XFxuIDMwOTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHNkaW9fZGV2aWNlX2lkIHdmeF9zZGlvX2lkc1tdID0ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMzoxMzozMC4zOTU0NjU4OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDQwMjg3MDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBwcm92aWRlZCBpbnN0cnVjdGlvbjpcblxuKipEaXZpbmcgaW50byB0aGUgU1BJIEJ1cyBDb2RlKipcblxuT2theSwgc28gd2UndmUgbG9va2VkIGF0IHRoZSBvdGhlciBjb3JlIGNvbXBvbmVudHMsIGFuZCBub3cgaXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgYnVzX3NwaS5jYCBmaWxlLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIFNQSSBwcm90b2NvbHMgYW5kIGxvdy1sZXZlbCBoYXJkd2FyZSBpbnRlcmFjdGlvbnMsIEkgZXhwZWN0IHRoaXMgZmlsZSB0byBiZSBjcml0aWNhbCBmb3IgYWN0dWFsbHkgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBwZXJpcGhlcmFsIGRldmljZXMuIEknbSBhbnRpY2lwYXRpbmcgdGhhdCBpdCB3aWxsIGNvbnRhaW4gdGhlIGZ1bmN0aW9ucyByZXNwb25zaWJsZSBmb3IgY29uZmlndXJpbmcgdGhlIFNQSSBjb250cm9sbGVyLCBzZXR0aW5nIHVwIHRoZSBjbG9jayBmcmVxdWVuY2llcywgbWFuYWdpbmcgdGhlIGNoaXAgc2VsZWN0IGxpbmVzLCBhbmQgaGFuZGxpbmcgdGhlIGRhdGEgdHJhbnNmZXIgaXRzZWxmIOKAkyBib3RoIHRoZSB0cmFuc21pc3Npb24gYW5kIHJlY2VwdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBidWZmZXIgbWFuYWdlbWVudCwgaW50ZXJydXB0IGhhbmRsaW5nIChpZiBpdCdzIGludGVycnVwdC1kcml2ZW4pLCBhbmQgYW55IGVycm9yIGNoZWNraW5nIG9yIHJldHJ5IG1lY2hhbmlzbXMuIEknbGwgYWxzbyBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGNvZGUgaGFuZGxlcyBkaWZmZXJlbnQgU1BJIG1vZGVzIGFuZCBkYXRhIGZyYW1lIHNpemVzLCBhbmQgaWYgdGhlcmUncyBhbnkgYWJzdHJhY3Rpb24gbGF5ZXIgb3ZlciB0aGUgaGFyZHdhcmUgcmVnaXN0ZXJzLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGZ1bmRhbWVudGFsIGZsb3cgb2YgZGF0YSBhbmQgY29udHJvbCB3aXRoaW4gdGhlIFNQSSBidXMgZHJpdmVyIHRvIGRldGVybWluZSBpdHMgZWZmaWNpZW5jeSwgZmxleGliaWxpdHksIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBzbyB0aGF0IGl0IGNhbiBiZSBvcHRpbWlzZWQgaWYgbmVjZXNzYXJ5LiBJJ2xsIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGZ1bmN0aW9uIGNhbGxzIHJlbGF0ZWQgdG8gZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCB0aGVuIHRyYWNlIHRoZSBkYXRhIHRyYW5zZmVyLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsZWFuIGFuZCBjb25jaXNlIGltcGxlbWVudGF0aW9ucywgb3IgYW55dGhpbmcgY2x1bmt5IHRoYXQgbmVlZHMgYXR0ZW50aW9uLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjQyLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMzoxMzozMi44MzU3NTY0NjRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc3BpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogU1BJIGludGVyZmFjZS5cXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy5cXG4gICA2OlxcdCAqIENvcHlyaWdodCAoYykgMjAxMSwgU2FncmFkIEluYy5cXG4gICA3OlxcdCAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb25cXG4gICA4OlxcdCAqL1xcbiAgIDk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgMTA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZ3Bpby9jb25zdW1lci5oXFx1MDAzZVxcbiAgMTI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaS9zcGkuaFxcdTAwM2VcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcnEuaFxcdTAwM2VcXG4gIDE1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbiAgMTY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BtLmhcXHUwMDNlXFxuICAxNzpcXHRcXG4gIDE4OlxcdCNpbmNsdWRlIFxcXCJidXMuaFxcXCJcXG4gIDE5OlxcdCNpbmNsdWRlIFxcXCJ3ZnguaFxcXCJcXG4gIDIwOlxcdCNpbmNsdWRlIFxcXCJod2lvLmhcXFwiXFxuICAyMTpcXHQjaW5jbHVkZSBcXFwibWFpbi5oXFxcIlxcbiAgMjI6XFx0I2luY2x1ZGUgXFxcImJoLmhcXFwiXFxuICAyMzpcXHRcXG4gIDI0OlxcdCNkZWZpbmUgU0VUX1dSSVRFIDB4N0ZGRiAgICAgICAgLyogdXNhZ2U6IGFuZCBvcGVyYXRpb24gKi9cXG4gIDI1OlxcdCNkZWZpbmUgU0VUX1JFQUQgMHg4MDAwICAgICAgICAgLyogdXNhZ2U6IG9yIG9wZXJhdGlvbiAqL1xcbiAgMjY6XFx0XFxuICAyNzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhIHBkYXRhX3dmMjAwID0ge1xcbiAgMjg6XFx0XFx0LmZpbGVfZncgPSBcXFwid2Z4L3dmbV93ZjIwMFxcXCIsXFxuICAyOTpcXHRcXHQuZmlsZV9wZHMgPSBcXFwid2Z4L3dmMjAwLnBkc1xcXCIsXFxuICAzMDpcXHRcXHQudXNlX3Jpc2luZ19jbGsgPSB0cnVlLFxcbiAgMzE6XFx0fTtcXG4gIDMyOlxcdFxcbiAgMzM6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCB3ZnhfcGxhdGZvcm1fZGF0YSBwZGF0YV9icmQ0MDAxYSA9IHtcXG4gIDM0OlxcdFxcdC5maWxlX2Z3ID0gXFxcIndmeC93Zm1fd2YyMDBcXFwiLFxcbiAgMzU6XFx0XFx0LmZpbGVfcGRzID0gXFxcIndmeC9icmQ0MDAxYS5wZHNcXFwiLFxcbiAgMzY6XFx0XFx0LnVzZV9yaXNpbmdfY2xrID0gdHJ1ZSxcXG4gIDM3OlxcdH07XFxuICAzODpcXHRcXG4gIDM5OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Z4X3BsYXRmb3JtX2RhdGEgcGRhdGFfYnJkODAyMmEgPSB7XFxuICA0MDpcXHRcXHQuZmlsZV9mdyA9IFxcXCJ3Zngvd2ZtX3dmMjAwXFxcIixcXG4gIDQxOlxcdFxcdC5maWxlX3BkcyA9IFxcXCJ3ZngvYnJkODAyMmEucGRzXFxcIixcXG4gIDQyOlxcdFxcdC51c2VfcmlzaW5nX2NsayA9IHRydWUsXFxuICA0MzpcXHR9O1xcbiAgNDQ6XFx0XFxuICA0NTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhIHBkYXRhX2JyZDgwMjNhID0ge1xcbiAgNDY6XFx0XFx0LmZpbGVfZncgPSBcXFwid2Z4L3dmbV93ZjIwMFxcXCIsXFxuICA0NzpcXHRcXHQuZmlsZV9wZHMgPSBcXFwid2Z4L2JyZDgwMjNhLnBkc1xcXCIsXFxuICA0ODpcXHRcXHQudXNlX3Jpc2luZ19jbGsgPSB0cnVlLFxcbiAgNDk6XFx0fTtcXG4gIDUwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMzoxMzozMi44MzU4NTIzMDRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcxNDcwOTY0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcGx5IGZhbWlsaWFyIHdpdGggZW1iZWRkZWQgc3lzdGVtcyBhbmQgU1BJIGNvbW11bmljYXRpb246XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIGJ1c1xcX3NwaS5jKipcblxuQWxyaWdodCwgc28gdGhlIGZvY3VzIGlzIGNsZWFybHkgb24gdGhlIHJlc3Qgb2YgYGJ1c19zcGkuY2AuIFRoYXQgbWVhbnMgSSd2ZSBhbHJlYWR5IGVzdGFibGlzaGVkIHRoZSBjb250ZXh0LCBwZXJoYXBzIGJ5IGdsYW5jaW5nIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUgb3IgaGF2aW5nIGEgZ2VuZXJhbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcm9qZWN0LiBOb3csIEkgbmVlZCB0byBkaWcgaW50byB0aGUgcmVtYWluaW5nIHBhcnRzIG9mIHRoaXMgbW9kdWxlLiBJJ20gbGlrZWx5IGxvb2tpbmcgZm9yIHRoZSBtZWF0IG9mIHRoZSBTUEkgYnVzIGltcGxlbWVudGF0aW9uLiBXaGF0IGFyZSB0aGUga2V5IGZ1bmN0aW9ucywgc3RydWN0dXJlcywgYW5kIGRhdGEgZmxvdyByZWxhdGVkIHRvIGludGVyZmFjaW5nIHdpdGggYW4gU1BJIHBlcmlwaGVyYWw/IEknbSBhbnRpY2lwYXRpbmcgdG8gc2VlIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGluZ3MgbGlrZSBpbml0aWFsaXphdGlvbiwgdHJhbnNtaXNzaW9uLCByZWNlcHRpb24sIGNsb2NrIGNvbnRyb2wsIGNoaXAgc2VsZWN0IG1hbmFnZW1lbnQsIGFuZCBlcnJvciBoYW5kbGluZy4gSSdtIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IGludGVyZXN0aW5nIG9wdGltaXphdGlvbnMgb3IgcGxhdGZvcm0tc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMgaW1wbGVtZW50ZWQgaW4gdGhlIGNvZGUuIEknbSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTM3NiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDM6MTM6MzUuNTUwNTY1ODEzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODA6XFx0XFx0cmV0dXJuIEFMSUdOKHNpemUsIDQpO1xcbiAxODE6XFx0fVxcbiAxODI6XFx0XFxuIDE4MzpcXHRzdGF0aWMgdm9pZCB3Znhfc3BpX3NldF93YWtldXAodm9pZCAqcHJpdiwgYm9vbCBlbmFibGVkKVxcbiAxODQ6XFx0e1xcbiAxODU6XFx0XFx0c3RydWN0IHdmeF9zcGlfcHJpdiAqYnVzID0gcHJpdjtcXG4gMTg2OlxcdFxcbiAxODc6XFx0XFx0ZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKFxcdTAwMjZidXMtXFx1MDAzZWZ1bmMtXFx1MDAzZWRldiwgZW5hYmxlZCk7XFxuIDE4ODpcXHR9XFxuIDE4OTpcXHRcXG4gMTkwOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Z4X2h3YnVzX29wcyB3Znhfc3BpX2h3YnVzX29wcyA9IHtcXG4gMTkxOlxcdFxcdC5jb3B5X2Zyb21faW8gICAgPSB3Znhfc3BpX2NvcHlfZnJvbV9pbyxcXG4gMTkyOlxcdFxcdC5jb3B5X3RvX2lvICAgICAgPSB3Znhfc3BpX2NvcHlfdG9faW8sXFxuIDE5MzpcXHRcXHQuaXJxX3N1YnNjcmliZSAgID0gd2Z4X3NwaV9pcnFfc3Vic2NyaWJlLFxcbiAxOTQ6XFx0XFx0LmlycV91bnN1YnNjcmliZSA9IHdmeF9zcGlfaXJxX3Vuc3Vic2NyaWJlLFxcbiAxOTU6XFx0XFx0LmxvY2sgICAgICAgICAgICA9IHdmeF9zcGlfbG9jayxcXG4gMTk2OlxcdFxcdC51bmxvY2sgICAgICAgICAgPSB3Znhfc3BpX3VubG9jayxcXG4gMTk3OlxcdFxcdC5hbGlnbl9zaXplICAgICAgPSB3Znhfc3BpX2FsaWduX3NpemUsXFxuIDE5ODpcXHRcXHQuc2V0X3dha2V1cCAgICAgID0gd2Z4X3NwaV9zZXRfd2FrZXVwLFxcbiAxOTk6XFx0fTtcXG4gMjAwOlxcdFxcbiAyMDE6XFx0c3RhdGljIGludCB3Znhfc3BpX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxcbiAyMDI6XFx0e1xcbiAyMDM6XFx0XFx0c3RydWN0IHNwaV9kZXZpY2UgKmZ1bmMgPSB0b19zcGlfZGV2aWNlKGRldik7XFxuIDIwNDpcXHRcXHRzdHJ1Y3Qgd2Z4X3NwaV9wcml2ICpidXMgPSBzcGlfZ2V0X2RydmRhdGEoZnVuYyk7XFxuIDIwNTpcXHRcXG4gMjA2OlxcdFxcdGlmICghZGV2aWNlX21heV93YWtldXAoZGV2KSlcXG4gMjA3OlxcdFxcdFxcdHJldHVybiAwO1xcbiAyMDg6XFx0XFx0Zmx1c2hfd29yayhcXHUwMDI2YnVzLVxcdTAwM2Vjb3JlLVxcdTAwM2VoaWYuYmgpO1xcbiAyMDk6XFx0XFx0cmV0dXJuIGVuYWJsZV9pcnFfd2FrZShmdW5jLVxcdTAwM2VpcnEpO1xcbiAyMTA6XFx0fVxcbiAyMTE6XFx0XFxuIDIxMjpcXHRzdGF0aWMgaW50IHdmeF9zcGlfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gMjEzOlxcdHtcXG4gMjE0OlxcdFxcdHN0cnVjdCBzcGlfZGV2aWNlICpmdW5jID0gdG9fc3BpX2RldmljZShkZXYpO1xcbiAyMTU6XFx0XFxuIDIxNjpcXHRcXHRpZiAoIWRldmljZV9tYXlfd2FrZXVwKGRldikpXFxuIDIxNzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjE4OlxcdFxcdHJldHVybiBkaXNhYmxlX2lycV93YWtlKGZ1bmMtXFx1MDAzZWlycSk7XFxuIDIxOTpcXHR9XFxuIDIyMDpcXHRcXG4gMjIxOlxcdHN0YXRpYyBpbnQgd2Z4X3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqZnVuYylcXG4gMjIyOlxcdHtcXG4gMjIzOlxcdFxcdHN0cnVjdCB3ZnhfcGxhdGZvcm1fZGF0YSAqcGRhdGE7XFxuIDIyNDpcXHRcXHRzdHJ1Y3Qgd2Z4X3NwaV9wcml2ICpidXM7XFxuIDIyNTpcXHRcXHRpbnQgcmV0O1xcbiAyMjY6XFx0XFxuIDIyNzpcXHRcXHRpZiAoIWZ1bmMtXFx1MDAzZWJpdHNfcGVyX3dvcmQpXFxuIDIyODpcXHRcXHRcXHRmdW5jLVxcdTAwM2ViaXRzX3Blcl93b3JkID0gMTY7XFxuIDIyOTpcXHRcXHRyZXQgPSBzcGlfc2V0dXAoZnVuYyk7XFxuIDIzMDpcXHRcXHRpZiAocmV0KVxcbiAyMzE6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMjMyOlxcdFxcdHBkYXRhID0gKHN0cnVjdCB3ZnhfcGxhdGZvcm1fZGF0YSAqKXNwaV9nZXRfZGV2aWNlX2lkKGZ1bmMpLVxcdTAwM2Vkcml2ZXJfZGF0YTtcXG4gMjMzOlxcdFxcdGlmICghcGRhdGEpIHtcXG4gMjM0OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNmZ1bmMtXFx1MDAzZWRldiwgXFxcInVuYWJsZSB0byByZXRyaWV2ZSBkcml2ZXIgZGF0YSAocGxlYXNlIHJlcG9ydClcXFxcblxcXCIpO1xcbiAyMzU6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDIzNjpcXHRcXHR9XFxuIDIzNzpcXHRcXG4gMjM4OlxcdFxcdC8qIFRyYWNlIGJlbG93IGlzIGFsc28gZGlzcGxheWVkIGJ5IHNwaV9zZXR1cCgpIGlmIGNvbXBpbGVkIHdpdGggREVCVUcgKi9cXG4gMjM5OlxcdFxcdGRldl9kYmcoXFx1MDAyNmZ1bmMtXFx1MDAzZWRldiwgXFxcIlNQSSBwYXJhbXM6IENTPSVkLCBtb2RlPSVkIGJpdHMvd29yZD0lZCBzcGVlZD0lZFxcXFxuXFxcIixcXG4gMjQwOlxcdFxcdFxcdHNwaV9nZXRfY2hpcHNlbGVjdChmdW5jLCAwKSwgZnVuYy1cXHUwMDNlbW9kZSwgZnVuYy1cXHUwMDNlYml0c19wZXJfd29yZCwgZnVuYy1cXHUwMDNlbWF4X3NwZWVkX2h6KTtcXG4gMjQxOlxcdFxcdGlmIChmdW5jLVxcdTAwM2ViaXRzX3Blcl93b3JkICE9IDE2IFxcdTAwMjZcXHUwMDI2IGZ1bmMtXFx1MDAzZWJpdHNfcGVyX3dvcmQgIT0gOClcXG4gMjQyOlxcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZmdW5jLVxcdTAwM2VkZXYsIFxcXCJ1bnVzdWFsIGJpdHMvd29yZCB2YWx1ZTogJWRcXFxcblxcXCIsIGZ1bmMtXFx1MDAzZWJpdHNfcGVyX3dvcmQpO1xcbiAyNDM6XFx0XFx0aWYgKGZ1bmMtXFx1MDAzZW1heF9zcGVlZF9oeiBcXHUwMDNlIDUwMDAwMDAwKVxcbiAyNDQ6XFx0XFx0XFx0ZGV2X3dhcm4oXFx1MDAyNmZ1bmMtXFx1MDAzZWRldiwgXFxcIiVkSHogaXMgYSB2ZXJ5IGhpZ2ggc3BlZWRcXFxcblxcXCIsIGZ1bmMtXFx1MDAzZW1heF9zcGVlZF9oeik7XFxuIDI0NTpcXHRcXG4gMjQ2OlxcdFxcdGJ1cyA9IGRldm1fa3phbGxvYyhcXHUwMDI2ZnVuYy1cXHUwMDNlZGV2LCBzaXplb2YoKmJ1cyksIEdGUF9LRVJORUwpO1xcbiAyNDc6XFx0XFx0aWYgKCFidXMpXFxuIDI0ODpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMjQ5OlxcdFxcdGJ1cy1cXHUwMDNlZnVuYyA9IGZ1bmM7XFxuIDI1MDpcXHRcXHRpZiAoZnVuYy1cXHUwMDNlYml0c19wZXJfd29yZCA9PSA4IHx8IElTX0VOQUJMRUQoQ09ORklHX0NQVV9CSUdfRU5ESUFOKSlcXG4gMjUxOlxcdFxcdFxcdGJ1cy1cXHUwMDNlbmVlZF9zd2FiID0gdHJ1ZTtcXG4gMjUyOlxcdFxcdHNwaV9zZXRfZHJ2ZGF0YShmdW5jLCBidXMpO1xcbiAyNTM6XFx0XFxuIDI1NDpcXHRcXHRidXMtXFx1MDAzZWdwaW9fcmVzZXQgPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChcXHUwMDI2ZnVuYy1cXHUwMDNlZGV2LCBcXFwicmVzZXRcXFwiLCBHUElPRF9PVVRfTE9XKTtcXG4gMjU1OlxcdFxcdGlmIChJU19FUlIoYnVzLVxcdTAwM2VncGlvX3Jlc2V0KSlcXG4gMjU2OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGJ1cy1cXHUwMDNlZ3Bpb19yZXNldCk7XFxuIDI1NzpcXHRcXHRpZiAoIWJ1cy1cXHUwMDNlZ3Bpb19yZXNldCkge1xcbiAyNTg6XFx0XFx0XFx0ZGV2X3dhcm4oXFx1MDAyNmZ1bmMtXFx1MDAzZWRldiwgXFxcImdwaW8gcmVzZXQgaXMgbm90IGRlZmluZWQsIHRyeWluZyB0byBsb2FkIGZpcm13YXJlIGFueXdheVxcXFxuXFxcIik7XFxuIDI1OTpcXHRcXHR9IGVsc2Uge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMzoxMzozNS41NTA2OTY0NTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU2MDExMTYxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTaWxpY29uIExhYnMgV0YyMDAgRnV6emluZyBGZWFzaWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIFdGMjAwIGZyb20gU2lsaWNvbiBMYWJzIGlzIGFuIFNESU8vU1BJIHdpcmVsZXNzIGNoaXAuIE15IGluaXRpYWwgcXVlc3Rpb24gaXM6IGNhbiB3ZSBldmVuIGZ1enogaXQ/IERvZXMgc3RhbmRhcmQgUUVNVSBvciBzeXprYWxsZXIgb2ZmZXIgYW55IGVtdWxhdGlvbiBvciBpbnN0YW50aWF0aW9uIG9mIFNESU8vU1BJIHdpcmVsZXNzIGhhcmR3YXJlPyBUaGF0J3MgdGhlIGNydXggb2YgaXQuIEJlZm9yZSBJIGdldCBhaGVhZCBvZiBteXNlbGYsIEkgbmVlZCB0byByZW1lbWJlciB0aGUgZ29sZGVuIHJ1bGU6ICoqcmVhY2hhYmlsaXR5IGlzIHRoZSBwcmltYXJ5IGdhdGUuKiogTXkgZnV6emVyIGNhbiAqb25seSogZmluZCBidWdzIGluIGNvZGUgdGhhdCAqZXhlY3V0ZXMqIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VLiBUaGluZ3MgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyBhcmUgb3V0IGJlY2F1c2UgdGhleSBuZWVkIHBoeXNpY2FsIGhhcmR3YXJlIFFFTVUgZG9lc24ndCBlbXVsYXRlLlxuXG5TbywgY2FuIHdlIGluc3RhbnRpYXRlIG9yIHByb2JlIHRoZSBXRjIwMCB1c2luZyBzeXprYWxsZXIgb3Igc3RhbmRhcmQgUUVNVT8gQ2FuIHN5emthbGxlciBwcm9iZSBTUEkgb3IgU0RJTyBkZXZpY2VzLCBwZXJpb2Q/IEkga25vdyBzeXprYWxsZXIgKmRvZXMqIGhhdmUgc29tZSBVU0IgZW11bGF0aW9uIHZpYSB0aGUgUmF3IEdhZGdldCBtZWNoYW5pc20uIEJ1dCBkb2VzIHRoYXQgZXh0ZW5kIHRvIFNESU8gb3IgU1BJPyBOby4gU0RJTyBjYXJkcyBhcmUgdHlwaWNhbGx5IGRpc2NvdmVyZWQgdmlhIHRoZSBNTUMgYnVzIGFuZCBkZXZpY2UgdHJlZSAoRFQpIG9uIGluc2VydGlvbi4gU1BJIGRldmljZXMgYXJlIHNpbWlsYXJseSBEVCBvciBBQ1BJIG9yIGJvYXJkLWluc3RhbnRpYXRlZC4gVGhleSBpbmhlcmVudGx5IG5lZWQgYSBwaHlzaWNhbCBTUEkgYnVzIGFuZCBzbGF2ZS5cblxuQWxyaWdodCwgYmFjayB0byB0aGUgY29yZSBxdWVzdGlvbjogZG9lcyBzeXprYWxsZXIgaGF2ZSBzdXBwb3J0IGZvciBTRElPL1NQST8gRG8gdGhleSBoYXZlIGFueSBwc2V1ZG8tc3lzY2FsbHMgb3Igc3VwcG9ydCBmb3IgbWFjODAyMTEgaHdzaW0gb3IgcmF3IGRldmljZXM/IE5vcGUsIGl0IHNlZW1zIGNsZWFyIHRoZSBhbnN3ZXIgaXMgbm8uIFRoaXMgZG9lc24ndCBsb29rIHByb21pc2luZyBmb3Igc2ltcGxlIGZ1enppbmcuXG5cbk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBwYXRjaCBpdHNlbGYuIEknbSBnb2luZyB0byBsb29rIGF0IGBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uY2AgYW5kIGZpZ3VyZSBvdXQgd2hhdCB0aGUgcGF0Y2ggaXMgKmFjdHVhbGx5KiBkb2luZyBpbiB0aGF0IGNvbnRleHQuIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDQyLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDM6MTM6NDAuMTEwODExNTE0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNTI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MDAsXG4gIFwiTGluZUNvdW50XCI6IDExMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDAwOlxcdFxcdFxcdCBcXFwiJWQuJWQuJWRcXFwiLFxcbiA0MDE6XFx0XFx0XFx0IHdkZXYtXFx1MDAzZWh3X2NhcHMuZmlybXdhcmVfbWFqb3IsXFxuIDQwMjpcXHRcXHRcXHQgd2Rldi1cXHUwMDNlaHdfY2Fwcy5maXJtd2FyZV9taW5vcixcXG4gNDAzOlxcdFxcdFxcdCB3ZGV2LVxcdTAwM2Vod19jYXBzLmZpcm13YXJlX2J1aWxkKTtcXG4gNDA0OlxcdFxcbiA0MDU6XFx0XFx0aWYgKHdmeF9hcGlfb2xkZXJfdGhhbih3ZGV2LCAxLCAwKSkge1xcbiA0MDY6XFx0XFx0XFx0ZGV2X2Vycih3ZGV2LVxcdTAwM2VkZXYsIFxcXCJ1bnN1cHBvcnRlZCBmaXJtd2FyZSBBUEkgdmVyc2lvbiAoZXhwZWN0IDEgd2hpbGUgZmlybXdhcmUgcmV0dXJucyAlZClcXFxcblxcXCIsXFxuIDQwNzpcXHRcXHRcXHRcXHR3ZGV2LVxcdTAwM2Vod19jYXBzLmFwaV92ZXJzaW9uX21ham9yKTtcXG4gNDA4OlxcdFxcdFxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbiA0MDk6XFx0XFx0XFx0Z290byBpcnFfdW5zdWJzY3JpYmU7XFxuIDQxMDpcXHRcXHR9XFxuIDQxMTpcXHRcXG4gNDEyOlxcdFxcdGlmICh3ZGV2LVxcdTAwM2Vod19jYXBzLmxpbmtfbW9kZSA9PSBTRUNfTElOS19FTkZPUkNFRCkge1xcbiA0MTM6XFx0XFx0XFx0ZGV2X2Vycih3ZGV2LVxcdTAwM2VkZXYsIFxcXCJjaGlwIHJlcXVpcmUgc2VjdXJlX2xpbmssIGJ1dCBjYW4ndCBuZWdvdGlhdGUgaXRcXFxcblxcXCIpO1xcbiA0MTQ6XFx0XFx0XFx0ZXJyID0gLUVPUE5PVFNVUFA7XFxuIDQxNTpcXHRcXHRcXHRnb3RvIGlycV91bnN1YnNjcmliZTtcXG4gNDE2OlxcdFxcdH1cXG4gNDE3OlxcdFxcbiA0MTg6XFx0XFx0aWYgKHdkZXYtXFx1MDAzZWh3X2NhcHMucmVnaW9uX3NlbF9tb2RlKSB7XFxuIDQxOTpcXHRcXHRcXHR3ZGV2LVxcdTAwM2Vody1cXHUwMDNld2lwaHktXFx1MDAzZXJlZ3VsYXRvcnlfZmxhZ3MgfD0gUkVHVUxBVE9SWV9ESVNBQkxFX0JFQUNPTl9ISU5UUztcXG4gNDIwOlxcdFxcdFxcdHdkZXYtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeS1cXHUwMDNlYmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLVxcdTAwM2VjaGFubmVsc1sxMV0uZmxhZ3MgfD1cXG4gNDIxOlxcdFxcdFxcdFxcdElFRUU4MDIxMV9DSEFOX05PX0lSO1xcbiA0MjI6XFx0XFx0XFx0d2Rldi1cXHUwMDNlaHctXFx1MDAzZXdpcGh5LVxcdTAwM2ViYW5kc1tOTDgwMjExX0JBTkRfMkdIWl0tXFx1MDAzZWNoYW5uZWxzWzEyXS5mbGFncyB8PVxcbiA0MjM6XFx0XFx0XFx0XFx0SUVFRTgwMjExX0NIQU5fTk9fSVI7XFxuIDQyNDpcXHRcXHRcXHR3ZGV2LVxcdTAwM2Vody1cXHUwMDNld2lwaHktXFx1MDAzZWJhbmRzW05MODAyMTFfQkFORF8yR0haXS1cXHUwMDNlY2hhbm5lbHNbMTNdLmZsYWdzIHw9XFxuIDQyNTpcXHRcXHRcXHRcXHRJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRDtcXG4gNDI2OlxcdFxcdH1cXG4gNDI3OlxcdFxcbiA0Mjg6XFx0XFx0ZGV2X2RiZyh3ZGV2LVxcdTAwM2VkZXYsIFxcXCJzZW5kaW5nIGNvbmZpZ3VyYXRpb24gZmlsZSAlc1xcXFxuXFxcIiwgd2Rldi1cXHUwMDNlcGRhdGEuZmlsZV9wZHMpO1xcbiA0Mjk6XFx0XFx0ZXJyID0gd2Z4X3NlbmRfcGRhdGFfcGRzKHdkZXYpO1xcbiA0MzA6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgZXJyICE9IC1FTk9FTlQpXFxuIDQzMTpcXHRcXHRcXHRnb3RvIGlycV91bnN1YnNjcmliZTtcXG4gNDMyOlxcdFxcbiA0MzM6XFx0XFx0aWYgKHdkZXYtXFx1MDAzZXBvbGxfaXJxKSB7XFxuIDQzNDpcXHRcXHRcXHRlcnIgPSB3ZGV2LVxcdTAwM2Vod2J1c19vcHMtXFx1MDAzZWlycV9zdWJzY3JpYmUod2Rldi1cXHUwMDNlaHdidXNfcHJpdik7XFxuIDQzNTpcXHRcXHRcXHRpZiAoZXJyKVxcbiA0MzY6XFx0XFx0XFx0XFx0Z290byBiaF91bnJlZ2lzdGVyO1xcbiA0Mzc6XFx0XFx0XFx0d2Rldi1cXHUwMDNlcG9sbF9pcnEgPSBmYWxzZTtcXG4gNDM4OlxcdFxcdH1cXG4gNDM5OlxcdFxcbiA0NDA6XFx0XFx0ZXJyID0gd2Z4X2hpZl91c2VfbXVsdGlfdHhfY29uZih3ZGV2LCB0cnVlKTtcXG4gNDQxOlxcdFxcdGlmIChlcnIpXFxuIDQ0MjpcXHRcXHRcXHRkZXZfZXJyKHdkZXYtXFx1MDAzZWRldiwgXFxcIm1pc2NvbmZpZ3VyZWQgSVJRP1xcXFxuXFxcIik7XFxuIDQ0MzpcXHRcXG4gNDQ0OlxcdFxcdHdkZXYtXFx1MDAzZXBkYXRhLmdwaW9fd2FrZXVwID0gZ3Bpb19zYXZlZDtcXG4gNDQ1OlxcdFxcdGlmICh3ZGV2LVxcdTAwM2VwZGF0YS5ncGlvX3dha2V1cCkge1xcbiA0NDY6XFx0XFx0XFx0ZGV2X2RiZyh3ZGV2LVxcdTAwM2VkZXYsIFxcXCJlbmFibGUgJ3F1aWVzY2VudCcgcG93ZXIgbW9kZSB3aXRoIHdha2V1cCBHUElPIGFuZCBQRFMgZmlsZSAlc1xcXFxuXFxcIixcXG4gNDQ3OlxcdFxcdFxcdFxcdHdkZXYtXFx1MDAzZXBkYXRhLmZpbGVfcGRzKTtcXG4gNDQ4OlxcdFxcdFxcdGdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcCh3ZGV2LVxcdTAwM2VwZGF0YS5ncGlvX3dha2V1cCwgMSk7XFxuIDQ0OTpcXHRcXHRcXHR3ZnhfY29udHJvbF9yZWdfd3JpdGUod2RldiwgMCk7XFxuIDQ1MDpcXHRcXHRcXHR3ZnhfaGlmX3NldF9vcGVyYXRpb25hbF9tb2RlKHdkZXYsIEhJRl9PUF9QT1dFUl9NT0RFX1FVSUVTQ0VOVCk7XFxuIDQ1MTpcXHRcXHR9IGVsc2Uge1xcbiA0NTI6XFx0XFx0XFx0d2Z4X2hpZl9zZXRfb3BlcmF0aW9uYWxfbW9kZSh3ZGV2LCBISUZfT1BfUE9XRVJfTU9ERV9ET1pFKTtcXG4gNDUzOlxcdFxcdH1cXG4gNDU0OlxcdFxcbiA0NTU6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUod2Rldi1cXHUwMDNlYWRkcmVzc2VzKTsgaSsrKSB7XFxuIDQ1NjpcXHRcXHRcXHRldGhfemVyb19hZGRyKHdkZXYtXFx1MDAzZWFkZHJlc3Nlc1tpXS5hZGRyKTtcXG4gNDU3OlxcdFxcdFxcdGVyciA9IG9mX2dldF9tYWNfYWRkcmVzcyh3ZGV2LVxcdTAwM2VkZXYtXFx1MDAzZW9mX25vZGUsIHdkZXYtXFx1MDAzZWFkZHJlc3Nlc1tpXS5hZGRyKTtcXG4gNDU4OlxcdFxcdFxcdGlmICghZXJyKVxcbiA0NTk6XFx0XFx0XFx0XFx0d2Rldi1cXHUwMDNlYWRkcmVzc2VzW2ldLmFkZHJbRVRIX0FMRU4gLSAxXSArPSBpO1xcbiA0NjA6XFx0XFx0XFx0ZWxzZVxcbiA0NjE6XFx0XFx0XFx0XFx0ZXRoZXJfYWRkcl9jb3B5KHdkZXYtXFx1MDAzZWFkZHJlc3Nlc1tpXS5hZGRyLCB3ZGV2LVxcdTAwM2Vod19jYXBzLm1hY19hZGRyW2ldKTtcXG4gNDYyOlxcdFxcdFxcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcih3ZGV2LVxcdTAwM2VhZGRyZXNzZXNbaV0uYWRkcikpIHtcXG4gNDYzOlxcdFxcdFxcdFxcdGRldl93YXJuKHdkZXYtXFx1MDAzZWRldiwgXFxcInVzaW5nIHJhbmRvbSBNQUMgYWRkcmVzc1xcXFxuXFxcIik7XFxuIDQ2NDpcXHRcXHRcXHRcXHRldGhfcmFuZG9tX2FkZHIod2Rldi1cXHUwMDNlYWRkcmVzc2VzW2ldLmFkZHIpO1xcbiA0NjU6XFx0XFx0XFx0fVxcbiA0NjY6XFx0XFx0XFx0ZGV2X2luZm8od2Rldi1cXHUwMDNlZGV2LCBcXFwiTUFDIGFkZHJlc3MgJWQ6ICVwTVxcXFxuXFxcIiwgaSwgd2Rldi1cXHUwMDNlYWRkcmVzc2VzW2ldLmFkZHIpO1xcbiA0Njc6XFx0XFx0fVxcbiA0Njg6XFx0XFx0d2Rldi1cXHUwMDNlaHctXFx1MDAzZXdpcGh5LVxcdTAwM2VuX2FkZHJlc3NlcyA9IEFSUkFZX1NJWkUod2Rldi1cXHUwMDNlYWRkcmVzc2VzKTtcXG4gNDY5OlxcdFxcdHdkZXYtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeS1cXHUwMDNlYWRkcmVzc2VzID0gd2Rldi1cXHUwMDNlYWRkcmVzc2VzO1xcbiA0NzA6XFx0XFxuIDQ3MTpcXHRcXHRpZiAoIXdmeF9hcGlfb2xkZXJfdGhhbih3ZGV2LCAzLCA4KSlcXG4gNDcyOlxcdFxcdFxcdHdkZXYtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeS1cXHUwMDNlZmxhZ3MgfD0gV0lQSFlfRkxBR19TVVBQT1JUU19URExTO1xcbiA0NzM6XFx0XFxuIDQ3NDpcXHRcXHRlcnIgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcod2Rldi1cXHUwMDNlaHcpO1xcbiA0NzU6XFx0XFx0aWYgKGVycilcXG4gNDc2OlxcdFxcdFxcdGdvdG8gaXJxX3Vuc3Vic2NyaWJlO1xcbiA0Nzc6XFx0XFxuIDQ3ODpcXHRcXHRlcnIgPSB3ZnhfZGVidWdfaW5pdCh3ZGV2KTtcXG4gNDc5OlxcdFxcdGlmIChlcnIpXFxuIDQ4MDpcXHRcXHRcXHRnb3RvIGllZWU4MDIxMV91bnJlZ2lzdGVyO1xcbiA0ODE6XFx0XFxuIDQ4MjpcXHRcXHRyZXR1cm4gMDtcXG4gNDgzOlxcdFxcbiA0ODQ6XFx0aWVlZTgwMjExX3VucmVnaXN0ZXI6XFxuIDQ4NTpcXHRcXHRpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyh3ZGV2LVxcdTAwM2Vodyk7XFxuIDQ4NjpcXHRpcnFfdW5zdWJzY3JpYmU6XFxuIDQ4NzpcXHRcXHRpZiAoIXdkZXYtXFx1MDAzZXBvbGxfaXJxKVxcbiA0ODg6XFx0XFx0XFx0d2Rldi1cXHUwMDNlaHdidXNfb3BzLVxcdTAwM2VpcnFfdW5zdWJzY3JpYmUod2Rldi1cXHUwMDNlaHdidXNfcHJpdik7XFxuIDQ4OTpcXHRiaF91bnJlZ2lzdGVyOlxcbiA0OTA6XFx0XFx0d2Z4X2JoX3VucmVnaXN0ZXIod2Rldik7XFxuIDQ5MTpcXHRcXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXFx1MDAyNndkZXYtXFx1MDAzZWNvb2xpbmdfdGltZW91dF93b3JrKTtcXG4gNDkyOlxcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKHdkZXYtXFx1MDAzZWJoX3dxKTtcXG4gNDkzOlxcdFxcdHJldHVybiBlcnI7XFxuIDQ5NDpcXHR9XFxuIDQ5NTpcXHRcXG4gNDk2OlxcdHZvaWQgd2Z4X3JlbGVhc2Uoc3RydWN0IHdmeF9kZXYgKndkZXYpXFxuIDQ5NzpcXHR7XFxuIDQ5ODpcXHRcXHRpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyh3ZGV2LVxcdTAwM2Vodyk7XFxuIDQ5OTpcXHRcXHR3ZnhfaGlmX3NodXRkb3duKHdkZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMzoxMzo0MC4xMTEyMTk3OTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTI3OTQ5NzYxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgd2Z4YCBEcml2ZXIgTW9kaWZpY2F0aW9uJ3MgRnV6emluZyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgd2Z4X3Byb2JlKClgIGFuZCBgd2Z4X3JlbGVhc2UoKWAgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gZXJyb3IgcGF0aHMuICBJIHNlZSBhIGNoZWNrIGZvciBgU0VDX0xJTktfRU5GT1JDRURgIGFuZCBhIGBjYW5jZWxfZGVsYXllZF93b3JrX3N5bmNgIGNhbGwgaW4gYm90aCB0aGUgZXJyb3IgcGF0aCBvZiBwcm9iZSBhbmQgaW4gdGhlIHJlbGVhc2UgZnVuY3Rpb24uICBUaGUgaW5pdGlhbCB0aG91Z2h0IGlzLCBcImNhbiB0aGlzIGV2ZW4gKmJlKiBmdXp6ZWQ/XCJcblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIGB3ZnhgIGRyaXZlciBpdHNlbGYuIEkga25vdyB0aGlzIGRyaXZlciBpcyBmb3IgU2lsaWNvbiBMYWJzIFdGMjAwL1dGTTIwMCBXaS1GaSB0cmFuc2NlaXZlcnMsIGFuZCBpdCByZWxpZXMgb24gZWl0aGVyIFNQSSBvciBTRElPIChNTUMpIGNvbm5lY3Rpb25zLiAgQ3J1Y2lhbGx5LCBpdCByZXF1aXJlcyBkZXZpY2UtdHJlZSBwbGF0Zm9ybSBiaW5kaW5ncyBmb3IgdGhlIGhhcmR3YXJlLiAgXG5cblRoZSBSRUFDSEFCSUxJVFkgc2VjdGlvbiBpcyB0aGUgY3JpdGljYWwgcGllY2Ugb2YgdGhpcyBwdXp6bGUuIEl0J3MgZXhwbGljaXRseSBzdGF0ZWQgdGhhdCBmdXp6aW5nIGlzIG9ubHkgZWZmZWN0aXZlIG9uIGNvZGUgdGhhdCBleGVjdXRlcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMuIFRoZSBwcm9ibGVtIGlzLCBhbmQgSSAqa25vdyogdGhpcywgdGhlcmUncyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoZSBTaWxpY29uIExhYnMgV0YyMDAgaGFyZHdhcmUgd2l0aGluIHRoZXNlIHN0YW5kYXJkIGVudmlyb25tZW50cy4gIFRoZSBkcml2ZXIgcmVsaWVzIG9uIGEgcGh5c2ljYWwgQVNJQyBjb25uZWN0ZWQgdmlhIFNQSSBvciBTRElPLCB3aGljaCB3ZSBhYnNvbHV0ZWx5IGNhbm5vdCBlbXVsYXRlIHdpdGhpbiBhIHN0YW5kYXJkIGZ1enppbmcgc2V0dXAuXG5cblRoZXJlZm9yZSwgc2luY2UgdGhlIGNoYW5nZXMgYXJlIGluIHRoZSBgcHJvYmVgIGVycm9yIHBhdGggKHdoaWNoIHdlJ2Qgb25seSBoaXQgb24gaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gZmFpbHVyZSkgYW5kIHRoZSBgcmVsZWFzZWAgZnVuY3Rpb24gKHdoaWNoIGlzIHRyaWdnZXJlZCBvbiBkcml2ZXIgcmVtb3ZhbCksIGJvdGggb2YgdGhlc2UgZXhlY3V0aW9uIHBhdGhzIGFyZSBlbnRpcmVseSB1bnJlYWNoYWJsZSBpbiB0aGUgY29udGV4dCBvZiBvdXIgc3RhbmRhcmQgZnV6emluZyBzZXR1cCwgd2hpY2ggbWVhbnMgdGhpcyBjb2RlIGlzIG5vdCBhbWVuYWJsZSB0byBmdXp6aW5nLlxuXG5JJ20gY29uZmlkZW50IGluIHRoaXMgY29uY2x1c2lvbi4gTGV0J3MgbWFrZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTc4OCwiT3V0cHV0VG9rZW5zIjoxMDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMzoxMzo0NS4zOTA3MjIxNDRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBtb2RpZmllZCBjb2RlIGlzIGluIHRoZSBTaWxpY29uIExhYnMgV0YyMDAgV2ktRmkgZHJpdmVyIChkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4KSwgd2hpY2ggb3BlcmF0ZXMgb3ZlciBTUEkgb3IgU0RJTyBidXNlcyBhbmQgcmVxdWlyZXMgcGh5c2ljYWwgU2lsaWNvbiBMYWJzIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoc3VjaCBhcyBRRU1VL0dDRSkuIENvbnNlcXVlbnRseSwgdGhlc2UgcHJvYmUgYW5kIHJlbGVhc2UgcGF0aHMgYXJlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIG1vZGlmaWVkIGNvZGUgaXMgaW4gdGhlIFNpbGljb24gTGFicyBXRjIwMCBXaS1GaSBkcml2ZXIgKGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngpLCB3aGljaCBvcGVyYXRlcyBvdmVyIFNQSSBvciBTRElPIGJ1c2VzIGFuZCByZXF1aXJlcyBwaHlzaWNhbCBTaWxpY29uIExhYnMgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChzdWNoIGFzIFFFTVUvR0NFKS4gQ29uc2VxdWVudGx5LCB0aGVzZSBwcm9iZSBhbmQgcmVsZWFzZSBwYXRocyBhcmUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDM6MTM6NDUuMzkwNzU0NTY0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlktf6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 02:32:59 +0000 UTC FinishedAt: 2026-09-07 03:13: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+CgkJCTx0ZD4yMDI2LzA5LzA3IDAzOjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgbW9kaWZpZWQgY29kZSBpcyBpbiB0aGUgU2lsaWNvbiBMYWJzIFdGMjAwIFdpLUZpIGRyaXZlciAoZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeCksIHdoaWNoIG9wZXJhdGVzIG92ZXIgU1BJIG9yIFNESU8gYnVzZXMgYW5kIHJlcXVpcmVzIHBoeXNpY2FsIFNpbGljb24gTGFicyBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKHN1Y2ggYXMgUUVNVS9HQ0UpLiBDb25zZXF1ZW50bHksIHRoZXNlIHByb2JlIGFuZCByZWxlYXNlIHBhdGhzIGFyZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAzOjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzQ5YmRkMGVkNjYyMzYwNmZlNGI3M2NlN2E3YzI0MmU2NDRmNjdhMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDM6MTM6MTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uY1xuaW5kZXggNGU5OWZlN2U1YmI3OC4uMTZkNWI1MWY2ZjAzYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uY1xuQEAgLTQxMSw2ICYjNDM7NDExLDcgQEAgaW50IHdmeF9wcm9iZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldilcbiBcbiBcdGlmICh3ZGV2LVx1MDAzZWh3X2NhcHMubGlua19tb2RlID09IFNFQ19MSU5LX0VORk9SQ0VEKSB7XG4gXHRcdGRldl9lcnIod2Rldi1cdTAwM2VkZXYsIFwmIzM0O2NoaXAgcmVxdWlyZSBzZWN1cmVfbGluaywgYnV0IGNhbiYjMzk7dCBuZWdvdGlhdGUgaXRcXG5cJiMzNDspO1xuJiM0MztcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4gXHRcdGdvdG8gaXJxX3Vuc3Vic2NyaWJlO1xuIFx0fVxuIFxuQEAgLTQ4Nyw2ICYjNDM7NDg4LDcgQEAgaW50IHdmeF9wcm9iZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldilcbiBcdFx0d2Rldi1cdTAwM2Vod2J1c19vcHMtXHUwMDNlaXJxX3Vuc3Vic2NyaWJlKHdkZXYtXHUwMDNlaHdidXNfcHJpdik7XG4gYmhfdW5yZWdpc3RlcjpcbiBcdHdmeF9iaF91bnJlZ2lzdGVyKHdkZXYpO1xuJiM0MztcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZ3ZGV2LVx1MDAzZWNvb2xpbmdfdGltZW91dF93b3JrKTtcbiBcdGRlc3Ryb3lfd29ya3F1ZXVlKHdkZXYtXHUwMDNlYmhfd3EpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG5AQCAtNDk3LDYgJiM0Mzs0OTksNyBAQCB2b2lkIHdmeF9yZWxlYXNlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KVxuIFx0d2Z4X2hpZl9zaHV0ZG93bih3ZGV2KTtcbiBcdHdkZXYtXHUwMDNlaHdidXNfb3BzLVx1MDAzZWlycV91bnN1YnNjcmliZSh3ZGV2LVx1MDAzZWh3YnVzX3ByaXYpO1xuIFx0d2Z4X2JoX3VucmVnaXN0ZXIod2Rldik7XG4mIzQzO1x0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNndkZXYtXHUwMDNlY29vbGluZ190aW1lb3V0X3dvcmspO1xuIFx0ZGVzdHJveV93b3JrcXVldWUod2Rldi1cdTAwM2ViaF93cSk7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAzOjEzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIG1vZGlmaWVkIGNvZGUgaXMgaW4gdGhlIFNpbGljb24gTGFicyBXRjIwMCBXaS1GaSBkcml2ZXIgKGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngpLCB3aGljaCBvcGVyYXRlcyBvdmVyIFNQSSBvciBTRElPIGJ1c2VzIGFuZCByZXF1aXJlcyBwaHlzaWNhbCBTaWxpY29uIExhYnMgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChzdWNoIGFzIFFFTVUvR0NFKS4gQ29uc2VxdWVudGx5LCB0aGVzZSBwcm9iZSBhbmQgcmVsZWFzZSBwYXRocyBhcmUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM0OWJkZDBlZDY2MjM2MDZmZTRiNzNjZTdhN2MyNDJlNjQ0ZjY3YTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDAzOjEzOjEzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYwppbmRleCA0ZTk5ZmU3ZTViYjc4Li4xNmQ1YjUxZjZmMDNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYwpAQCAtNDExLDYgJiM0Mzs0MTEsNyBAQCBpbnQgd2Z4X3Byb2JlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQogCiAJaWYgKHdkZXYtJmd0O2h3X2NhcHMubGlua19tb2RlID09IFNFQ19MSU5LX0VORk9SQ0VEKSB7CiAJCWRldl9lcnIod2Rldi0mZ3Q7ZGV2LCAmIzM0O2NoaXAgcmVxdWlyZSBzZWN1cmVfbGluaywgYnV0IGNhbiYjMzk7dCBuZWdvdGlhdGUgaXRcbiYjMzQ7KTsKJiM0MzsJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIGlycV91bnN1YnNjcmliZTsKIAl9CiAKQEAgLTQ4Nyw2ICYjNDM7NDg4LDcgQEAgaW50IHdmeF9wcm9iZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKIAkJd2Rldi0mZ3Q7aHdidXNfb3BzLSZndDtpcnFfdW5zdWJzY3JpYmUod2Rldi0mZ3Q7aHdidXNfcHJpdik7CiBiaF91bnJlZ2lzdGVyOgogCXdmeF9iaF91bnJlZ2lzdGVyKHdkZXYpOwomIzQzOwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDt3ZGV2LSZndDtjb29saW5nX3RpbWVvdXRfd29yayk7CiAJZGVzdHJveV93b3JrcXVldWUod2Rldi0mZ3Q7Ymhfd3EpOwogCXJldHVybiBlcnI7CiB9CkBAIC00OTcsNiAmIzQzOzQ5OSw3IEBAIHZvaWQgd2Z4X3JlbGVhc2Uoc3RydWN0IHdmeF9kZXYgKndkZXYpCiAJd2Z4X2hpZl9zaHV0ZG93bih3ZGV2KTsKIAl3ZGV2LSZndDtod2J1c19vcHMtJmd0O2lycV91bnN1YnNjcmliZSh3ZGV2LSZndDtod2J1c19wcml2KTsKIAl3ZnhfYmhfdW5yZWdpc3Rlcih3ZGV2KTsKJiM0MzsJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhbXA7d2Rldi0mZ3Q7Y29vbGluZ190aW1lb3V0X3dvcmspOwogCWRlc3Ryb3lfd29ya3F1ZXVlKHdkZXYtJmd0O2JoX3dxKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTE4CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgd2Z4YCBEcml2ZXIgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoaXMgcGF0Y2ggYW5kIHRoZSBhc3NvY2lhdGVkIGRyaXZlci4gVGhlIGZpbGUgbW9kaWZpZWQgaXMgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGB3ZnhgIGRyaXZlciBpdHNlbGYuIFdoYXQgaXMgaXQsIGFuZCBjcnVjaWFsbHksIHdoYXQgYnVzIGRvZXMgaXQgb3BlcmF0ZSBvbj8gVG8gZ2V0IGEgcXVpY2sgaGFuZGxlIG9uIHRoaXMsIEkmIzM5O2xsIGxldmVyYWdlIG15IHVzdWFsIHRvb2xraXQuIEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYGdyZXBwZXJgLCBidXQgaWYgdGhhdCBwcm92ZXMgdG9vIGJyb2FkLCBJJiMzOTtsbCBzd2l0Y2ggdG8gc29tZXRoaW5nIG1vcmUgdGFyZ2V0ZWQgbGlrZSBgY29kZXNlYXJjaC1kaXItaW5kZXhgIG9yIGV2ZW4gYSBzaW1wbGUgYHJlYWQtZmlsZWAgb24gcmVsZXZhbnQgZmlsZXMgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9gIGRpcmVjdG9yeSB0byBwaW5wb2ludCB0aGUgZHJpdmVyJiMzOTtzIHB1cnBvc2UgYW5kIGl0cyBidXMgaW50ZXJhY3Rpb24uIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0dWFsIGZvdW5kYXRpb24gSSBuZWVkIHRvIHByb3Blcmx5IGV2YWx1YXRlIHRoZSBwYXRjaCYjMzk7cyBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O2JoLmMmIzM0OywKICAgICYjMzQ7YmguaCYjMzQ7LAogICAgJiMzNDtidXMuaCYjMzQ7LAogICAgJiMzNDtidXNfc2Rpby5jJiMzNDssCiAgICAmIzM0O2J1c19zcGkuYyYjMzQ7LAogICAgJiMzNDtkYXRhX3J4LmMmIzM0OywKICAgICYjMzQ7ZGF0YV9yeC5oJiMzNDssCiAgICAmIzM0O2RhdGFfdHguYyYjMzQ7LAogICAgJiMzNDtkYXRhX3R4LmgmIzM0OywKICAgICYjMzQ7ZGVidWcuYyYjMzQ7LAogICAgJiMzNDtkZWJ1Zy5oJiMzNDssCiAgICAmIzM0O2Z3aW8uYyYjMzQ7LAogICAgJiMzNDtmd2lvLmgmIzM0OywKICAgICYjMzQ7aGlmX2FwaV9jbWQuaCYjMzQ7LAogICAgJiMzNDtoaWZfYXBpX2dlbmVyYWwuaCYjMzQ7LAogICAgJiMzNDtoaWZfYXBpX21pYi5oJiMzNDssCiAgICAmIzM0O2hpZl9yeC5jJiMzNDssCiAgICAmIzM0O2hpZl9yeC5oJiMzNDssCiAgICAmIzM0O2hpZl90eC5jJiMzNDssCiAgICAmIzM0O2hpZl90eC5oJiMzNDssCiAgICAmIzM0O2hpZl90eF9taWIuYyYjMzQ7LAogICAgJiMzNDtoaWZfdHhfbWliLmgmIzM0OywKICAgICYjMzQ7aHdpby5jJiMzNDssCiAgICAmIzM0O2h3aW8uaCYjMzQ7LAogICAgJiMzNDtrZXkuYyYjMzQ7LAogICAgJiMzNDtrZXkuaCYjMzQ7LAogICAgJiMzNDttYWluLmMmIzM0OywKICAgICYjMzQ7bWFpbi5oJiMzNDssCiAgICAmIzM0O3F1ZXVlLmMmIzM0OywKICAgICYjMzQ7cXVldWUuaCYjMzQ7LAogICAgJiMzNDtzY2FuLmMmIzM0OywKICAgICYjMzQ7c2Nhbi5oJiMzNDssCiAgICAmIzM0O3N0YS5jJiMzNDssCiAgICAmIzM0O3N0YS5oJiMzNDssCiAgICAmIzM0O3RyYWNlcy5oJiMzNDssCiAgICAmIzM0O3dmeC5oJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzE0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpczoKCioqSW52ZXN0aWdhdGluZyB0aGUgU2lsaWNvbiBMYWJzIFdpLUZpIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBTaWxpY29uIExhYnMgV2ktRmkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2AgZGlyZWN0b3J5LiBNeSBpbml0aWFsIHN0ZXAgaGVyZSBpcyBwcmV0dHkgc3RhbmRhcmQ6IEkgbmVlZCB0byB2ZXJpZnkgaG93IHRoaXMgZHJpdmVyIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB3aGVyZSBJIGNhbiBmaW5kIGFsbCB0aGUgb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgZGVmYXVsdCBzZXR0aW5ncyB0aGF0IGRldGVybWluZSB3aGV0aGVyIHRoaXMgZHJpdmVyLCBhbmQgc3BlY2lmaWMgZmVhdHVyZXMgd2l0aGluIGl0LCB3aWxsIGJlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjb250cm9scyBpdHMgaW5jbHVzaW9uIGFuZCBwb3RlbnRpYWxseSBhbnkgYnVpbGQtdGltZSBkZWNpc2lvbnMgdGhhdCBhZmZlY3QgdGhlIGRyaXZlciYjMzk7cyBiZWhhdmlvci4gVGhpcyBgS2NvbmZpZ2AgZmlsZSBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIGNvbXBpbGUtdGltZSBmb290cHJpbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7V0ZYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy9NYWtlZmlsZS0yLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX1dGWCkgICAgICAmIzQzOz0gd2Z4L1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9LY29uZmlnOjI6Y29uZmlnIFdGWFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTaWxpY29uIExhYnMgd2lyZWxlc3MgY2hpcHMgV0YyMDAgYW5kIGZ1cnRoZXJcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvS2NvbmZpZy00LVx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9LY29uZmlnOjU6XHRkZXBlbmRzIG9uIE1NQyB8fCAhTU1DICMgZG8gbm90IGFsbG93IFdGWD15IGlmIE1NQz1tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L0tjb25maWctNi1cdGRlcGVuZHMgb24gKFNQSSB8fCBNTUMpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9NYWtlZmlsZT0yMz13ZngtJChzdWJzdCBtLHksJChDT05GSUdfTU1DKSkgJiM0Mzs9IGJ1c19zZGlvLm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvTWFrZWZpbGUtMjQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19XRlgpICYjNDM7PSB3Zngub1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYmguaC03LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9iaC5oOjg6I2lmbmRlZiBXRlhfQkhfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9iaC5oOjk6I2RlZmluZSBXRlhfQkhfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9iaC5oLTEwLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzLmgtNy0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzLmg6ODojaWZuZGVmIFdGWF9CVVNfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXMuaDo5OiNkZWZpbmUgV0ZYX0JVU19IXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1cy5oLTEwLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzLmgtMTMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1cy5oOjE0OiNkZWZpbmUgV0ZYX1JFR19DT05GSUcgICAgICAgIDB4MFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXMuaDoxNTojZGVmaW5lIFdGWF9SRUdfQ09OVFJPTCAgICAgICAweDFcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzLmg6MTY6I2RlZmluZSBXRlhfUkVHX0lOX09VVF9RVUVVRSAgMHgyXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1cy5oOjE3OiNkZWZpbmUgV0ZYX1JFR19BSEJfRFBPUlQgICAgIDB4M1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXMuaDoxODojZGVmaW5lIFdGWF9SRUdfQkFTRV9BRERSICAgICAweDRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzLmg6MTk6I2RlZmluZSBXRlhfUkVHX1NSQU1fRFBPUlQgICAgMHg1XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1cy5oOjIwOiNkZWZpbmUgV0ZYX1JFR19TRVRfR0VOX1JfVyAgIDB4NlxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXMuaDoyMTojZGVmaW5lIFdGWF9SRUdfRlJBTUVfT1VUICAgICAweDdcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzLmgtMjItXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc2Rpby5jPTUzPXN0YXRpYyBpbnQgd2Z4X3NkaW9fY29weV9mcm9tX2lvKHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCByZWdfaWQsIHZvaWQgKmRzdCwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NkaW8uYy02My1cdC8qIFVzZSBxdWV1ZSBtb2RlIGJ1ZmZlcnMgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NkaW8uYzo2NDpcdGlmIChyZWdfaWQgPT0gV0ZYX1JFR19JTl9PVVRfUVVFVUUpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmMtNjUtXHRcdHNkaW9fYWRkciB8PSAoYnVzLVx1MDAzZWJ1Zl9pZF9yeCAmIzQzOyAxKSBcdTAwM2NcdTAwM2MgNztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NkaW8uYy02Ni1cdHJldCA9IHNkaW9fbWVtY3B5X2Zyb21pbyhidXMtXHUwMDNlZnVuYywgZHN0LCBzZGlvX2FkZHIsIGNvdW50KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NkaW8uYzo2NzpcdGlmICghcmV0IFx1MDAyNlx1MDAyNiByZWdfaWQgPT0gV0ZYX1JFR19JTl9PVVRfUVVFVUUpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmMtNjgtXHRcdGJ1cy1cdTAwM2VidWZfaWRfcnggPSAoYnVzLVx1MDAzZWJ1Zl9pZF9yeCAmIzQzOyAxKSAlIDQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc2Rpby5jPTczPXN0YXRpYyBpbnQgd2Z4X3NkaW9fY29weV90b19pbyh2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgcmVnX2lkLCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmMtODMtXHQvKiBVc2UgcXVldWUgbW9kZSBidWZmZXJzICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmM6ODQ6XHRpZiAocmVnX2lkID09IFdGWF9SRUdfSU5fT1VUX1FVRVVFKVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc2Rpby5jLTg1LVx0XHRzZGlvX2FkZHIgfD0gYnVzLVx1MDAzZWJ1Zl9pZF90eCBcdTAwM2NcdTAwM2MgNztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmMtODctXHRyZXQgPSBzZGlvX21lbWNweV90b2lvKGJ1cy1cdTAwM2VmdW5jLCBzZGlvX2FkZHIsICh2b2lkICopc3JjLCBjb3VudCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmM6ODg6XHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgcmVnX2lkID09IFdGWF9SRUdfSU5fT1VUX1FVRVVFKVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc2Rpby5jLTg5LVx0XHRidXMtXHUwMDNlYnVmX2lkX3R4ID0gKGJ1cy1cdTAwM2VidWZfaWRfdHggJiM0MzsgMSkgJSAzMjtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zcGkuYz02NT1zdGF0aWMgaW50IHdmeF9zcGlfY29weV9mcm9tX2lvKHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBhZGRyLCB2b2lkICpkc3QsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zcGkuYy05MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NwaS5jOjkyOlx0aWYgKGJ1cy1cdTAwM2VuZWVkX3N3YWIgXHUwMDI2XHUwMDI2IGFkZHIgPT0gV0ZYX1JFR19DT05GSUcpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zcGkuYy05My1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY291bnQgLyAyOyBpJiM0MzsmIzQzOylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zcGkuYz05OD1zdGF0aWMgaW50IHdmeF9zcGlfY29weV90b19pbyh2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgYWRkciwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc3BpLmMtMTI0LVx0XHRzd2FiMTZzKFx1MDAyNnJlZ2FkZHIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc3BpLmM6MTI1Olx0aWYgKGJ1cy1cdTAwM2VuZWVkX3N3YWIgXHUwMDI2XHUwMDI2IGFkZHIgPT0gV0ZYX1JFR19DT05GSUcpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zcGkuYy0xMjYtXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50IC8gMjsgaSYjNDM7JiM0MzspXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc3BpLmMtMTMzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc3BpLmM6MTM0Olx0aWYgKGJ1cy1cdTAwM2VuZWVkX3N3YWIgXHUwMDI2XHUwMDI2IGFkZHIgPT0gV0ZYX1JFR19DT05GSUcpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zcGkuYy0xMzUtXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50IC8gMjsgaSYjNDM7JiM0MzspXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9kYXRhX3J4LmgtNy0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZGF0YV9yeC5oOjg6I2lmbmRlZiBXRlhfREFUQV9SWF9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2RhdGFfcnguaDo5OiNkZWZpbmUgV0ZYX0RBVEFfUlhfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9kYXRhX3J4LmgtMTAtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9kYXRhX3R4LmgtNy0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZGF0YV90eC5oOjg6I2lmbmRlZiBXRlhfREFUQV9UWF9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2RhdGFfdHguaDo5OiNkZWZpbmUgV0ZYX0RBVEFfVFhfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9kYXRhX3R4LmgtMTAtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9kZWJ1Zy5oLTctICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2RlYnVnLmg6ODojaWZuZGVmIFdGWF9ERUJVR19IXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2RlYnVnLmg6OTojZGVmaW5lIFdGWF9ERUJVR19IXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2RlYnVnLmgtMTAtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMTgtLyogQWRkcmVzc2VzIGJlbG93IGFyZSBpbiBTUkFNIGFyZWEgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjE5OiNkZWZpbmUgV0ZYX0ROTERfRklGTyAgICAgICAgICAgICAweDA5MDA0MDAwXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yMC0jZGVmaW5lICAgICBETkxEX0JMT0NLX1NJWkUgICAgICAgICAgIDB4MDQwMFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTIyLS8qIERvd25sb2FkIENvbnRyb2wgQXJlYSAoRENBKSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6MjM6I2RlZmluZSBXRlhfRENBX0lNQUdFX1NJWkUgICAgICAgIDB4MDkwMEMwMDBcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjI0OiNkZWZpbmUgV0ZYX0RDQV9QVVQgICAgICAgICAgICAgICAweDA5MDBDMDA0XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzoyNTojZGVmaW5lIFdGWF9EQ0FfR0VUICAgICAgICAgICAgICAgMHgwOTAwQzAwOFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6MjY6I2RlZmluZSBXRlhfRENBX0hPU1RfU1RBVFVTICAgICAgIDB4MDkwMEMwMENcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTI3LSNkZWZpbmUgICAgIEhPU1RfUkVBRFkgICAgICAgICAgICAgICAgMHg4NzY1NDMyMVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTMxLSNkZWZpbmUgICAgIEhPU1RfT0tfVE9fSlVNUCAgICAgICAgICAgMHgxNzRGQzg4MlxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6MzI6I2RlZmluZSBXRlhfRENBX05DUF9TVEFUVVMgICAgICAgIDB4MDkwMEMwMTBcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTMzLSNkZWZpbmUgICAgIE5DUF9OT1RfUkVBRFkgICAgICAgICAgICAgMHgxMjM0NTY3OFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTQwLSNkZWZpbmUgICAgIE5DUF9QVUJfS0VZX1JEWSAgICAgICAgICAgMHg3QUI0MUQxOVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6NDE6I2RlZmluZSBXRlhfRENBX0ZXX1NJR05BVFVSRSAgICAgIDB4MDkwMEMwMTRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTQyLSNkZWZpbmUgICAgIEZXX1NJR05BVFVSRV9TSVpFICAgICAgICAgMHg0MFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6NDM6I2RlZmluZSBXRlhfRENBX0ZXX0hBU0ggICAgICAgICAgIDB4MDkwMEMwNTRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTQ0LSNkZWZpbmUgICAgIEZXX0hBU0hfU0laRSAgICAgICAgICAgICAgMHgwOFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6NDU6I2RlZmluZSBXRlhfRENBX0ZXX1ZFUlNJT04gICAgICAgIDB4MDkwMEMwNUNcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTQ2LSNkZWZpbmUgICAgIEZXX1ZFUlNJT05fU0laRSAgICAgICAgICAgMHgwNFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6NDc6I2RlZmluZSBXRlhfRENBX1JFU0VSVkVEICAgICAgICAgIDB4MDkwMEMwNjBcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTQ4LSNkZWZpbmUgICAgIERDQV9SRVNFUlZFRF9TSVpFICAgICAgICAgMHgyMFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6NDk6I2RlZmluZSBXRlhfU1RBVFVTX0lORk8gICAgICAgICAgIDB4MDkwMEMwODBcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjUwOiNkZWZpbmUgV0ZYX0JPT1RMT0FERVJfTEFCRUwgICAgICAweDA5MDBDMDg0XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy01MS0jZGVmaW5lICAgICBCT09UTE9BREVSX0xBQkVMX1NJWkUgICAgIDB4M0NcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjUyOiNkZWZpbmUgV0ZYX1BURV9JTkZPICAgICAgICAgICAgICAweDA5MDBDMEMwXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy01My0jZGVmaW5lICAgICBQVEVfSU5GT19LRVlTRVRfSURYICAgICAgIDB4MERcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTU0LSNkZWZpbmUgICAgIFBURV9JTkZPX1NJWkUgICAgICAgICAgICAgMHgxMFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6NTU6I2RlZmluZSBXRlhfRVJSX0lORk8gICAgICAgICAgICAgIDB4MDkwMEMwRDBcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTU2LSNkZWZpbmUgICAgIEVSUl9JTlZBTElEX1NFQ19UWVBFICAgICAgMHgwNVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jPTE0OD1zdGF0aWMgaW50IHdhaXRfbmNwX3N0YXR1cyhzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIHN0YXR1cylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0xNTUtXHRmb3IgKDs7KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzoxNTY6XHRcdHJldCA9IHdmeF9zcmFtX3JlZ19yZWFkKHdkZXYsIFdGWF9EQ0FfTkNQX1NUQVRVUywgXHUwMDI2cmVnKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTE1Ny1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYz0xNzI9c3RhdGljIGludCB1cGxvYWRfZmlybXdhcmUoc3RydWN0IHdmeF9kZXYgKndkZXYsIGNvbnN0IHU4ICpkYXRhLCBzaXplX3QgbGVuKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTE5MC1cdFx0XHRcdHJldHVybiAtRVRJTUVET1VUO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6MTkxOlx0XHRcdHJldCA9IHdmeF9zcmFtX3JlZ19yZWFkKHdkZXYsIFdGWF9EQ0FfR0VULCBcdTAwMjZieXRlc19kb25lKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTE5Mi1cdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTE5Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjE5ODpcdFx0cmV0ID0gd2Z4X3NyYW1fd3JpdGVfZG1hX3NhZmUod2RldiwgV0ZYX0ROTERfRklGTyAmIzQzOyAob2ZmcyAlIEROTERfRklGT19TSVpFKSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTE5OS1cdFx0XHRcdFx0ICAgICAgZGF0YSAmIzQzOyBvZmZzLCBETkxEX0JMT0NLX1NJWkUpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTIwNC1cdFx0b2ZmcyAmIzQzOz0gRE5MRF9CTE9DS19TSVpFO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6MjA1Olx0XHRyZXQgPSB3Znhfc3JhbV9yZWdfd3JpdGUod2RldiwgV0ZYX0RDQV9QVVQsIG9mZnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMjA2LVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jPTIxMj1zdGF0aWMgdm9pZCBwcmludF9ib290X3N0YXR1cyhzdHJ1Y3Qgd2Z4X2RldiAqd2Rldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yMTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzoyMTY6XHR3Znhfc3JhbV9yZWdfcmVhZCh3ZGV2LCBXRlhfU1RBVFVTX0lORk8sIFx1MDAyNnJlZyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yMTctXHRpZiAocmVnID09IDB4MTIzNDU2NzgpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yMTgtXHRcdHJldHVybjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjIxOTpcdHdmeF9zcmFtX3JlZ19yZWFkKHdkZXYsIFdGWF9FUlJfSU5GTywgXHUwMDI2cmVnKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTIyMC1cdGlmIChyZWcgXHUwMDNjIEFSUkFZX1NJWkUoZndpb19lcnJvcnMpIFx1MDAyNlx1MDAyNiBmd2lvX2Vycm9yc1tyZWddKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jPTIyNj1zdGF0aWMgaW50IGxvYWRfZmlybXdhcmVfc2VjdXJlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTIzOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjI0MDpcdHdmeF9zcmFtX3JlZ193cml0ZSh3ZGV2LCBXRlhfRENBX0hPU1RfU1RBVFVTLCBIT1NUX1JFQURZKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTI0MS1cdHJldCA9IHdhaXRfbmNwX3N0YXR1cyh3ZGV2LCBOQ1BfSU5GT19SRUFEWSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMjQ0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6MjQ1Olx0d2Z4X3NyYW1fYnVmX3JlYWQod2RldiwgV0ZYX0JPT1RMT0FERVJfTEFCRUwsIGJ1ZiwgQk9PVExPQURFUl9MQUJFTF9TSVpFKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTI0Ni1cdGJ1ZltCT09UTE9BREVSX0xBQkVMX1NJWkVdID0gMDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yNDgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzoyNDk6XHR3Znhfc3JhbV9idWZfcmVhZCh3ZGV2LCBXRlhfUFRFX0lORk8sIGJ1ZiwgUFRFX0lORk9fU0laRSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yNTAtXHRyZXQgPSBnZXRfZmlybXdhcmUod2RldiwgYnVmW1BURV9JTkZPX0tFWVNFVF9JRFhdLCBcdTAwMjZmdywgXHUwMDI2Zndfb2Zmc2V0KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yNTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzoyNTU6XHR3Znhfc3JhbV9yZWdfd3JpdGUod2RldiwgV0ZYX0RDQV9IT1NUX1NUQVRVUywgSE9TVF9JTkZPX1JFQUQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMjU2LVx0cmV0ID0gd2FpdF9uY3Bfc3RhdHVzKHdkZXYsIE5DUF9SRUFEWSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMjU5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6MjYwOlx0d2Z4X3NyYW1fcmVnX3dyaXRlKHdkZXYsIFdGWF9ETkxEX0ZJRk8sIDB4RkZGRkZGRkYpOyAvKiBGaWZvIGluaXQgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjI2MTpcdHdmeF9zcmFtX3dyaXRlX2RtYV9zYWZlKHdkZXYsIFdGWF9EQ0FfRldfVkVSU0lPTiwgXCYjMzQ7XFx4MDFcXHgwMFxceDAwXFx4MDBcJiMzNDssIEZXX1ZFUlNJT05fU0laRSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzoyNjI6XHR3Znhfc3JhbV93cml0ZV9kbWFfc2FmZSh3ZGV2LCBXRlhfRENBX0ZXX1NJR05BVFVSRSwgZnctXHUwMDNlZGF0YSAmIzQzOyBmd19vZmZzZXQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yNjMtXHRcdFx0XHRGV19TSUdOQVRVUkVfU0laRSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzoyNjQ6XHR3Znhfc3JhbV93cml0ZV9kbWFfc2FmZSh3ZGV2LCBXRlhfRENBX0ZXX0hBU0gsIGZ3LVx1MDAzZWRhdGEgJiM0MzsgZndfb2Zmc2V0ICYjNDM7IEZXX1NJR05BVFVSRV9TSVpFLFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMjY1LVx0XHRcdFx0RldfSEFTSF9TSVpFKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjI2NjpcdHdmeF9zcmFtX3JlZ193cml0ZSh3ZGV2LCBXRlhfRENBX0lNQUdFX1NJWkUsIGZ3LVx1MDAzZXNpemUgLSBoZWFkZXJfc2l6ZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzoyNjc6XHR3Znhfc3JhbV9yZWdfd3JpdGUod2RldiwgV0ZYX0RDQV9IT1NUX1NUQVRVUywgSE9TVF9VUExPQURfUEVORElORyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yNjgtXHRyZXQgPSB3YWl0X25jcF9zdGF0dXMod2RldiwgTkNQX0RPV05MT0FEX1BFTkRJTkcpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTI3OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjI3OTpcdHdmeF9zcmFtX3JlZ193cml0ZSh3ZGV2LCBXRlhfRENBX0hPU1RfU1RBVFVTLCBIT1NUX1VQTE9BRF9DT01QTEVURSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yODAtXHRyZXQgPSB3YWl0X25jcF9zdGF0dXMod2RldiwgTkNQX0FVVEhfT0spO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTI4NS1cdFx0Z290byBlcnJvcjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjI4NjpcdHdmeF9zcmFtX3JlZ193cml0ZSh3ZGV2LCBXRlhfRENBX0hPU1RfU1RBVFVTLCBIT1NUX09LX1RPX0pVTVApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMjg3LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5oLTctICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uaDo4OiNpZm5kZWYgV0ZYX0ZXSU9fSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmg6OTojZGVmaW5lIFdGWF9GV0lPX0hcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5oLTEwLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX2FwaV9jbWQuaC03LVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfYXBpX2NtZC5oOjg6I2lmbmRlZiBXRlhfSElGX0FQSV9DTURfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfYXBpX2NtZC5oOjk6I2RlZmluZSBXRlhfSElGX0FQSV9DTURfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfYXBpX2NtZC5oLTEwLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX2FwaV9nZW5lcmFsLmgtNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX2FwaV9nZW5lcmFsLmg6ODojaWZuZGVmIFdGWF9ISUZfQVBJX0dFTkVSQUxfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfYXBpX2dlbmVyYWwuaDo5OiNkZWZpbmUgV0ZYX0hJRl9BUElfR0VORVJBTF9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl9hcGlfZ2VuZXJhbC5oLTEwLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX2FwaV9taWIuaC03LVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfYXBpX21pYi5oOjg6I2lmbmRlZiBXRlhfSElGX0FQSV9NSUJfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfYXBpX21pYi5oOjk6I2RlZmluZSBXRlhfSElGX0FQSV9NSUJfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfYXBpX21pYi5oLTEwLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX3J4LmgtOC0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX3J4Lmg6OTojaWZuZGVmIFdGWF9ISUZfUlhfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfcnguaDoxMDojZGVmaW5lIFdGWF9ISUZfUlhfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfcnguaC0xMS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl90eC5oLTktICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl90eC5oOjEwOiNpZm5kZWYgV0ZYX0hJRl9UWF9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl90eC5oOjExOiNkZWZpbmUgV0ZYX0hJRl9UWF9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl90eC5oLTEyLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX3R4X21pYi5oLTgtICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl90eF9taWIuaDo5OiNpZm5kZWYgV0ZYX0hJRl9UWF9NSUJfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfdHhfbWliLmg6MTA6I2RlZmluZSBXRlhfSElGX1RYX01JQl9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl90eF9taWIuaC0xMS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0xNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjE4OiNkZWZpbmUgV0ZYX0hJRl9CVUZGRVJfU0laRSAweDIwMDBcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTE5LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTk2PXN0YXRpYyBpbnQgd2Z4X2luZGlyZWN0X3JlYWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCByZWcsIHUzMiBhZGRyLCB2b2lkICpidWYsIHNpemVfdCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMTAyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MTAzOlx0V0FSTl9PTihsZW4gXHUwMDNlPSBXRlhfSElGX0JVRkZFUl9TSVpFKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjEwNDpcdFdBUk5fT04ocmVnICE9IFdGWF9SRUdfQUhCX0RQT1JUIFx1MDAyNlx1MDAyNiByZWcgIT0gV0ZYX1JFR19TUkFNX0RQT1JUKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTEwNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjEwNjpcdGlmIChyZWcgPT0gV0ZYX1JFR19BSEJfRFBPUlQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0xMDctXHRcdHByZWZldGNoID0gQ0ZHX1BSRUZFVENIX0FIQjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjEwODpcdGVsc2UgaWYgKHJlZyA9PSBXRlhfUkVHX1NSQU1fRFBPUlQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0xMDktXHRcdHByZWZldGNoID0gQ0ZHX1BSRUZFVENIX1NSQU07XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMTEyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MTEzOlx0cmV0ID0gd2Z4X3dyaXRlMzIod2RldiwgV0ZYX1JFR19CQVNFX0FERFIsIGFkZHIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMTE0LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0xMTYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoxMTc6XHRyZXQgPSB3ZnhfcmVhZDMyKHdkZXYsIFdGWF9SRUdfQ09ORklHLCBcdTAwMjZjZmcpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMTE4LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0xMjAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoxMjE6XHRyZXQgPSB3Znhfd3JpdGUzMih3ZGV2LCBXRlhfUkVHX0NPTkZJRywgY2ZnIHwgcHJlZmV0Y2gpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMTIyLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0xMjUtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAyMDsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjEyNjpcdFx0cmV0ID0gd2Z4X3JlYWQzMih3ZGV2LCBXRlhfUkVHX0NPTkZJRywgXHUwMDI2Y2ZnKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTEyNy1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYz0xNDY9c3RhdGljIGludCB3ZnhfaW5kaXJlY3Rfd3JpdGUoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCByZWcsIHUzMiBhZGRyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTE1MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjE1MTpcdFdBUk5fT04obGVuIFx1MDAzZT0gV0ZYX0hJRl9CVUZGRVJfU0laRSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoxNTI6XHRXQVJOX09OKHJlZyAhPSBXRlhfUkVHX0FIQl9EUE9SVCBcdTAwMjZcdTAwMjYgcmVnICE9IFdGWF9SRUdfU1JBTV9EUE9SVCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoxNTM6XHRyZXQgPSB3Znhfd3JpdGUzMih3ZGV2LCBXRlhfUkVHX0JBU0VfQUREUiwgYWRkcik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0xNTQtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTIxNj1pbnQgd2Z4X2RhdGFfcmVhZChzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTIyMS1cdHdkZXYtXHUwMDNlaHdidXNfb3BzLVx1MDAzZWxvY2sod2Rldi1cdTAwM2Vod2J1c19wcml2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjIyMjpcdHJldCA9IHdkZXYtXHUwMDNlaHdidXNfb3BzLVx1MDAzZWNvcHlfZnJvbV9pbyh3ZGV2LVx1MDAzZWh3YnVzX3ByaXYsIFdGWF9SRUdfSU5fT1VUX1FVRVVFLCBidWYsIGxlbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoyMjM6XHRfdHJhY2VfaW9fcmVhZChXRlhfUkVHX0lOX09VVF9RVUVVRSwgYnVmLCBsZW4pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMjI0LVx0d2Rldi1cdTAwM2Vod2J1c19vcHMtXHUwMDNldW5sb2NrKHdkZXYtXHUwMDNlaHdidXNfcHJpdik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM9MjMwPWludCB3ZnhfZGF0YV93cml0ZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTIzNS1cdHdkZXYtXHUwMDNlaHdidXNfb3BzLVx1MDAzZWxvY2sod2Rldi1cdTAwM2Vod2J1c19wcml2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjIzNjpcdHJldCA9IHdkZXYtXHUwMDNlaHdidXNfb3BzLVx1MDAzZWNvcHlfdG9faW8od2Rldi1cdTAwM2Vod2J1c19wcml2LCBXRlhfUkVHX0lOX09VVF9RVUVVRSwgYnVmLCBsZW4pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MjM3Olx0X3RyYWNlX2lvX3dyaXRlKFdGWF9SRUdfSU5fT1VUX1FVRVVFLCBidWYsIGxlbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yMzgtXHR3ZGV2LVx1MDAzZWh3YnVzX29wcy1cdTAwM2V1bmxvY2sod2Rldi1cdTAwM2Vod2J1c19wcml2KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYz0yNDQ9aW50IHdmeF9zcmFtX2J1Zl9yZWFkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgYWRkciwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMjQ1LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjI0NjpcdHJldHVybiB3ZnhfaW5kaXJlY3RfcmVhZF9sb2NrZWQod2RldiwgV0ZYX1JFR19TUkFNX0RQT1JULCBhZGRyLCBidWYsIGxlbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yNDctfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTI0OT1pbnQgd2Z4X2FoYl9idWZfcmVhZChzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTI1MC17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoyNTE6XHRyZXR1cm4gd2Z4X2luZGlyZWN0X3JlYWRfbG9ja2VkKHdkZXYsIFdGWF9SRUdfQUhCX0RQT1JULCBhZGRyLCBidWYsIGxlbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yNTItfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTI1ND1pbnQgd2Z4X3NyYW1fYnVmX3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgYWRkciwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMjU1LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjI1NjpcdHJldHVybiB3ZnhfaW5kaXJlY3Rfd3JpdGVfbG9ja2VkKHdkZXYsIFdGWF9SRUdfU1JBTV9EUE9SVCwgYWRkciwgYnVmLCBsZW4pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMjU3LX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYz0yNTk9aW50IHdmeF9haGJfYnVmX3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgYWRkciwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMjYwLXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjI2MTpcdHJldHVybiB3ZnhfaW5kaXJlY3Rfd3JpdGVfbG9ja2VkKHdkZXYsIFdGWF9SRUdfQUhCX0RQT1JULCBhZGRyLCBidWYsIGxlbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yNjItfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTI2ND1pbnQgd2Z4X3NyYW1fcmVnX3JlYWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiBhZGRyLCB1MzIgKnZhbClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTI2NS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoyNjY6XHRyZXR1cm4gd2Z4X2luZGlyZWN0X3JlYWQzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19TUkFNX0RQT1JULCBhZGRyLCB2YWwpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMjY3LX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYz0yNjk9aW50IHdmeF9haGJfcmVnX3JlYWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiBhZGRyLCB1MzIgKnZhbClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTI3MC17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoyNzE6XHRyZXR1cm4gd2Z4X2luZGlyZWN0X3JlYWQzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19BSEJfRFBPUlQsIGFkZHIsIHZhbCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yNzItfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTI3ND1pbnQgd2Z4X3NyYW1fcmVnX3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgYWRkciwgdTMyIHZhbClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTI3NS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoyNzY6XHRyZXR1cm4gd2Z4X2luZGlyZWN0X3dyaXRlMzJfbG9ja2VkKHdkZXYsIFdGWF9SRUdfU1JBTV9EUE9SVCwgYWRkciwgdmFsKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTI3Ny19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM9Mjc5PWludCB3ZnhfYWhiX3JlZ193cml0ZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIGFkZHIsIHUzMiB2YWwpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yODAte1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MjgxOlx0cmV0dXJuIHdmeF9pbmRpcmVjdF93cml0ZTMyX2xvY2tlZCh3ZGV2LCBXRlhfUkVHX0FIQl9EUE9SVCwgYWRkciwgdmFsKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTI4Mi19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM9Mjg0PWludCB3ZnhfY29uZmlnX3JlZ19yZWFkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgKnZhbClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTI4NS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoyODY6XHRyZXR1cm4gd2Z4X3JlYWQzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19DT05GSUcsIHZhbCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yODctfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTI4OT1pbnQgd2Z4X2NvbmZpZ19yZWdfd3JpdGUoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiB2YWwpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yOTAte1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MjkxOlx0cmV0dXJuIHdmeF93cml0ZTMyX2xvY2tlZCh3ZGV2LCBXRlhfUkVHX0NPTkZJRywgdmFsKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTI5Mi19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM9Mjk0PWludCB3ZnhfY29uZmlnX3JlZ193cml0ZV9iaXRzKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgbWFzaywgdTMyIHZhbClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTI5NS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoyOTY6XHRyZXR1cm4gd2Z4X3dyaXRlMzJfYml0c19sb2NrZWQod2RldiwgV0ZYX1JFR19DT05GSUcsIG1hc2ssIHZhbCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yOTctfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTI5OT1pbnQgd2Z4X2NvbnRyb2xfcmVnX3JlYWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiAqdmFsKVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMzAwLXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjMwMTpcdHJldHVybiB3ZnhfcmVhZDMyX2xvY2tlZCh3ZGV2LCBXRlhfUkVHX0NPTlRST0wsIHZhbCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0zMDItfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTMwND1pbnQgd2Z4X2NvbnRyb2xfcmVnX3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgdmFsKVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMzA1LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjMwNjpcdHJldHVybiB3Znhfd3JpdGUzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19DT05UUk9MLCB2YWwpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMzA3LX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYz0zMDk9aW50IHdmeF9jb250cm9sX3JlZ193cml0ZV9iaXRzKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgbWFzaywgdTMyIHZhbClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTMxMC17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzozMTE6XHRyZXR1cm4gd2Z4X3dyaXRlMzJfYml0c19sb2NrZWQod2RldiwgV0ZYX1JFR19DT05UUk9MLCBtYXNrLCB2YWwpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMzEyLX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYz0zMTQ9aW50IHdmeF9pZ3ByX3JlZ19yZWFkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgaW5kZXgsIHUzMiAqdmFsKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTMxOC1cdCp2YWwgPSB+MDsgLyogTmV2ZXIgcmV0dXJuIHVuZGVmaW5lZCB2YWx1ZSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MzE5Olx0cmV0ID0gd2Z4X3dyaXRlMzJfbG9ja2VkKHdkZXYsIFdGWF9SRUdfU0VUX0dFTl9SX1csIElHUFJfUlcgfCBpbmRleCBcdTAwM2NcdTAwM2MgMjQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMzIwLVx0aWYgKHJldClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTMyMS1cdFx0cmV0dXJuIHJldDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjMyMjpcdHJldCA9IHdmeF9yZWFkMzJfbG9ja2VkKHdkZXYsIFdGWF9SRUdfU0VUX0dFTl9SX1csIHZhbCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0zMjMtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTMyOT1pbnQgd2Z4X2lncHJfcmVnX3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgaW5kZXgsIHUzMiB2YWwpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0zMzAte1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MzMxOlx0cmV0dXJuIHdmeF93cml0ZTMyX2xvY2tlZCh3ZGV2LCBXRlhfUkVHX1NFVF9HRU5fUl9XLCBpbmRleCBcdTAwM2NcdTAwM2MgMjQgfCB2YWwpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMzMyLX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uaC03LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmg6ODojaWZuZGVmIFdGWF9IV0lPX0hcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5oOjk6I2RlZmluZSBXRlhfSFdJT19IXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uaC0xMC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2tleS5oLTctICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2tleS5oOjg6I2lmbmRlZiBXRlhfS0VZX0hcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngva2V5Lmg6OTojZGVmaW5lIFdGWF9LRVlfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9rZXkuaC0xMC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYy0zNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jOjM2OiNkZWZpbmUgV0ZYX1BEU19UTFZfVFlQRSAweDQ0NTAgLy8gXCYjMzQ7UERcJiMzNDsgKFBsYXRmb3JtIERhdGEpIGluIGFzY2lpIGxpdHRsZS1lbmRpYW5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jOjM3OiNkZWZpbmUgV0ZYX1BEU19NQVhfQ0hVTktfU0laRSAxNTAwXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYy0zOC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYz0xODc9aW50IHdmeF9zZW5kX3BkcyhzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTggKmJ1Ziwgc2l6ZV90IGxlbilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYy0yMDEtXHRcdH1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jOjIwMjpcdFx0aWYgKGNodW5rX3R5cGUgIT0gV0ZYX1BEU19UTFZfVFlQRSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmMtMjAzLVx0XHRcdGRldl9pbmZvKHdkZXYtXHUwMDNlZGV2LCBcJiMzNDtQRFM6JWQ6IHNraXAgdW5rbm93biBkYXRhXFxuXCYjMzQ7LCBjaHVua19udW0pO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jLTIwNS1cdFx0fVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmM6MjA2Olx0XHRpZiAoY2h1bmtfbGVuIFx1MDAzZSBXRlhfUERTX01BWF9DSFVOS19TSVpFKVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmMtMjA3LVx0XHRcdGRldl93YXJuKHdkZXYtXHUwMDNlZGV2LCBcJiMzNDtQRFM6JWQ6IHVuZXhwZWN0ZWRseSBsYXJnZSBjaHVua1xcblwmIzM0OywgY2h1bmtfbnVtKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uaC05LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmg6MTA6I2lmbmRlZiBXRlhfTUFJTl9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uaDoxMTojZGVmaW5lIFdGWF9NQUlOX0hcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5oLTEyLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvcXVldWUuaC03LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9xdWV1ZS5oOjg6I2lmbmRlZiBXRlhfUVVFVUVfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9xdWV1ZS5oOjk6I2RlZmluZSBXRlhfUVVFVUVfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9xdWV1ZS5oLTEwLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc2Nhbi5oLTctICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3NjYW4uaDo4OiNpZm5kZWYgV0ZYX1NDQU5fSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9zY2FuLmg6OTojZGVmaW5lIFdGWF9TQ0FOX0hcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc2Nhbi5oLTEwLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmgtNy0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmg6ODojaWZuZGVmIFdGWF9TVEFfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9zdGEuaDo5OiNkZWZpbmUgV0ZYX1NUQV9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5oLTEwLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvdHJhY2VzLmgtMTAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjExOiNpZiAhZGVmaW5lZChfV0ZYX1RSQUNFX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjEyOiNkZWZpbmUgX1dGWF9UUkFDRV9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oLTEzLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvdHJhY2VzLmg9MjEzPURFRklORV9FVkVOVChoaWZfZGF0YSwgaGlmX3JlY3YsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC90cmFjZXMuaC0yMTktI2RlZmluZSB3ZnhfcmVnX2xpc3RfZW51bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjIyMDpcdHdmeF9yZWdfbmFtZShXRlhfUkVHX0NPTkZJRywgICAgICAgXCYjMzQ7Q09ORklHXCYjMzQ7KSAgICAgIFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjIyMTpcdHdmeF9yZWdfbmFtZShXRlhfUkVHX0NPTlRST0wsICAgICAgXCYjMzQ7Q09OVFJPTFwmIzM0OykgICAgIFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjIyMjpcdHdmeF9yZWdfbmFtZShXRlhfUkVHX0lOX09VVF9RVUVVRSwgXCYjMzQ7UVVFVUVcJiMzNDspICAgICAgIFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjIyMzpcdHdmeF9yZWdfbmFtZShXRlhfUkVHX0FIQl9EUE9SVCwgICAgXCYjMzQ7QUhCXCYjMzQ7KSAgICAgICAgIFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjIyNDpcdHdmeF9yZWdfbmFtZShXRlhfUkVHX0JBU0VfQUREUiwgICAgXCYjMzQ7QkFTRV9BRERSXCYjMzQ7KSAgIFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjIyNTpcdHdmeF9yZWdfbmFtZShXRlhfUkVHX1NSQU1fRFBPUlQsICAgXCYjMzQ7U1JBTVwmIzM0OykgICAgICAgIFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjIyNjpcdHdmeF9yZWdfbmFtZShXRlhfUkVHX1NFVF9HRU5fUl9XLCAgXCYjMzQ7U0VUX0dFTl9SX1dcJiMzNDspIFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjIyNzpcdHdmeF9yZWdfbmFtZShXRlhfUkVHX0ZSQU1FX09VVCwgICAgXCYjMzQ7RlJBTUVfT1VUXCYjMzQ7KVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC90cmFjZXMuaC0yMjgtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC93ZnguaC05LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC93ZnguaDoxMDojaWZuZGVmIFdGWF9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3dmeC5oOjExOiNkZWZpbmUgV0ZYX0hcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvd2Z4LmgtMTItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4MjYKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIFNpbGljb24gTGFicyBXaXJlbGVzcyBJbnRlcmZhY2UgQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZSBTaWxpY29uIExhYnMgd2lyZWxlc3MgY2hpcHMsIHBhcnRpY3VsYXJseSB0aGUgV0YyMDAgc2VyaWVzLCBhcmUgaGFuZGxlZCBhdCB0aGUgYnVzIGxldmVsLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyBgYnVzX3NkaW8uY2AgYW5kIGBidXNfc3BpLmNgLiBUaGVzZSBmaWxlcyBzaG91bGQgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZXkgaW50ZXJmYWNlIHdpdGggdGhlIHN5c3RlbS4KClJpZ2h0LCB0aGVzZSBjaGlwcyBwcmltYXJpbHkgYXR0YWNoIHZpYSBTUEkgb3IgU0RJTyAoTU1DKSwgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvciBjb25maWd1cmF0aW9uLiBTbywgbXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gaG93IHRoZSBwcm9iZSBmdW5jdGlvbnMgYW5kIGJ1cyByZWdpc3RyYXRpb24gYXJlIGltcGxlbWVudGVkIGluIGVhY2ggb2YgdGhvc2UgZmlsZXM6IGBidXNfc2Rpby5jYCBhbmQgYGJ1c19zcGkuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGRldGVjdHMgdGhlIGRldmljZSwgaW5pdGlhbGl6ZXMgdGhlIGludGVyZmFjZSwgYW5kIHJlZ2lzdGVycyBpdHNlbGYgd2l0aCB0aGUgYXBwcm9wcmlhdGUgYnVzLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgbG93LWxldmVsIG9wZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NkaW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQvKlxuICAgMzpcdCAqIFNESU8gaW50ZXJmYWNlLlxuICAgNDpcdCAqXG4gICA1Olx0ICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuXG4gICA2Olx0ICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3NvblxuICAgNzpcdCAqL1xuICAgODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gICA5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW1jL3NkaW8uaFx1MDAzZVxuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYy9zZGlvX2Z1bmMuaFx1MDAzZVxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYy9jYXJkLmhcdTAwM2VcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9pcnEuaFx1MDAzZVxuICAxNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycS5oXHUwMDNlXG4gIDE2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYWxpZ24uaFx1MDAzZVxuICAxNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtLmhcdTAwM2VcbiAgMTg6XHRcbiAgMTk6XHQjaW5jbHVkZSBcJiMzNDtidXMuaFwmIzM0O1xuICAyMDpcdCNpbmNsdWRlIFwmIzM0O3dmeC5oXCYjMzQ7XG4gIDIxOlx0I2luY2x1ZGUgXCYjMzQ7aHdpby5oXCYjMzQ7XG4gIDIyOlx0I2luY2x1ZGUgXCYjMzQ7bWFpbi5oXCYjMzQ7XG4gIDIzOlx0I2luY2x1ZGUgXCYjMzQ7YmguaFwmIzM0O1xuICAyNDpcdFxuICAyNTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Z4X3BsYXRmb3JtX2RhdGEgcGRhdGFfd2YyMDAgPSB7XG4gIDI2Olx0XHQuZmlsZV9mdyA9IFwmIzM0O3dmeC93Zm1fd2YyMDBcJiMzNDssXG4gIDI3Olx0XHQuZmlsZV9wZHMgPSBcJiMzNDt3Zngvd2YyMDAucGRzXCYjMzQ7LFxuICAyODpcdH07XG4gIDI5Olx0XG4gIDMwOlx0c3RhdGljIGNvbnN0IHN0cnVjdCB3ZnhfcGxhdGZvcm1fZGF0YSBwZGF0YV9icmQ0MDAxYSA9IHtcbiAgMzE6XHRcdC5maWxlX2Z3ID0gXCYjMzQ7d2Z4L3dmbV93ZjIwMFwmIzM0OyxcbiAgMzI6XHRcdC5maWxlX3BkcyA9IFwmIzM0O3dmeC9icmQ0MDAxYS5wZHNcJiMzNDssXG4gIDMzOlx0fTtcbiAgMzQ6XHRcbiAgMzU6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhIHBkYXRhX2JyZDgwMjJhID0ge1xuICAzNjpcdFx0LmZpbGVfZncgPSBcJiMzNDt3Zngvd2ZtX3dmMjAwXCYjMzQ7LFxuICAzNzpcdFx0LmZpbGVfcGRzID0gXCYjMzQ7d2Z4L2JyZDgwMjJhLnBkc1wmIzM0OyxcbiAgMzg6XHR9O1xuICAzOTpcdFxuICA0MDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Z4X3BsYXRmb3JtX2RhdGEgcGRhdGFfYnJkODAyM2EgPSB7XG4gIDQxOlx0XHQuZmlsZV9mdyA9IFwmIzM0O3dmeC93Zm1fd2YyMDBcJiMzNDssXG4gIDQyOlx0XHQuZmlsZV9wZHMgPSBcJiMzNDt3ZngvYnJkODAyM2EucGRzXCYjMzQ7LFxuICA0MzpcdH07XG4gIDQ0Olx0XG4gIDQ1Olx0c3RydWN0IHdmeF9zZGlvX3ByaXYge1xuICA0NjpcdFx0c3RydWN0IHNkaW9fZnVuYyAqZnVuYztcbiAgNDc6XHRcdHN0cnVjdCB3ZnhfZGV2ICpjb3JlO1xuICA0ODpcdFx0dTggYnVmX2lkX3R4O1xuICA0OTpcdFx0dTggYnVmX2lkX3J4O1xuICA1MDpcdFx0aW50IG9mX2lycTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkyNAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIERlZXBlciBpbnRvIHRoZSBCdXMgRHJpdmVycyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGZvY3VzaW5nIG9uIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBvZiB0aGlzIGVtYmVkZGVkIHN5c3RlbSwgYnV0IG5vdyBJIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoZXNlIGJ1cyBkcml2ZXJzIGFyZSBpbXBsZW1lbnRlZC4gSSYjMzk7dmUgYWxyZWFkeSBnb3QgYSBnb29kIGdyYXNwIG9uIHRoZSBjb25jZXB0dWFsIGZyYW1ld29yaywgYnV0IHVuZGVyc3RhbmRpbmcgdGhlIGFjdHVhbCBjb2RlIGluIGBidXNfc2Rpby5jYCBhbmQgYGJ1c19zcGkuY2AgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIHNlZSBob3cgdGhleSYjMzk7dmUgaGFuZGxlZCB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgU0RJTyBhbmQgU1BJIGNvbW11bmljYXRpb24uIFRoaW5ncyBsaWtlIGNsb2NrIGNvbmZpZ3VyYXRpb24sIERNQSBzZXR1cCwgaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgdGhlIHNwZWNpZmljIHJlZ2lzdGVyIGludGVyYWN0aW9ucyBhcmUgd2hhdCBJJiMzOTttIGFmdGVyLiBJdCYjMzk7cyB0aW1lIHRvIGFuYWx5emUgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiB0byBzZWUgaG93IHRoZSBzb2Z0d2FyZSBpbnRlcmFjdHMgd2l0aCB0aGUgaGFyZHdhcmUgYXQgYSBncmFudWxhciBsZXZlbC4gSSB3YW50IHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGluZWZmaWNpZW5jaWVzLCBvciBjbGV2ZXIgb3B0aW1pemF0aW9ucyB0aGV5JiMzOTt2ZSBlbXBsb3llZC4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSYjMzk7dmUgYWJzdHJhY3RlZCB0aGUgaGFyZHdhcmUgZGlmZmVyZW5jZXMgYmV0d2VlbiB2YXJpb3VzIFNESU8gb3IgU1BJIGNvbnRyb2xsZXJzLCBhbmQgaG93IHRoZXkgZGVhbCB3aXRoIHRoZSB0aW1pbmcgY29uc3RyYWludHMgdGhhdCBhcmUgc28gY3JpdGljYWwgZm9yIGJ1cyBzdGFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc2Rpby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDA6XHRcdGlmICghZmxhZ3MpXG4gMTQxOlx0XHRcdGZsYWdzID0gSVJRRl9UUklHR0VSX0hJR0g7XG4gMTQyOlx0XHRmbGFncyB8PSBJUlFGX09ORVNIT1Q7XG4gMTQzOlx0XHRyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKFx1MDAyNmJ1cy1cdTAwM2VmdW5jLVx1MDAzZWRldiwgYnVzLVx1MDAzZW9mX2lycSwgTlVMTCxcbiAxNDQ6XHRcdFx0XHRcdFx0d2Z4X3NkaW9faXJxX2hhbmRsZXJfZXh0LCBmbGFncywgXCYjMzQ7d2Z4XCYjMzQ7LCBidXMpO1xuIDE0NTpcdFx0aWYgKHJldClcbiAxNDY6XHRcdFx0cmV0dXJuIHJldDtcbiAxNDc6XHRcdHNkaW9fY2xhaW1faG9zdChidXMtXHUwMDNlZnVuYyk7XG4gMTQ4Olx0XHRjY2NyID0gc2Rpb19mMF9yZWFkYihidXMtXHUwMDNlZnVuYywgU0RJT19DQ0NSX0lFTngsIE5VTEwpO1xuIDE0OTpcdFx0Y2NjciB8PSBCSVQoMCk7XG4gMTUwOlx0XHRjY2NyIHw9IEJJVChidXMtXHUwMDNlZnVuYy1cdTAwM2VudW0pO1xuIDE1MTpcdFx0c2Rpb19mMF93cml0ZWIoYnVzLVx1MDAzZWZ1bmMsIGNjY3IsIFNESU9fQ0NDUl9JRU54LCBOVUxMKTtcbiAxNTI6XHRcdHNkaW9fcmVsZWFzZV9ob3N0KGJ1cy1cdTAwM2VmdW5jKTtcbiAxNTM6XHRcdHJldHVybiAwO1xuIDE1NDpcdH1cbiAxNTU6XHRcbiAxNTY6XHRzdGF0aWMgaW50IHdmeF9zZGlvX2lycV91bnN1YnNjcmliZSh2b2lkICpwcml2KVxuIDE1NzpcdHtcbiAxNTg6XHRcdHN0cnVjdCB3Znhfc2Rpb19wcml2ICpidXMgPSBwcml2O1xuIDE1OTpcdFx0aW50IHJldDtcbiAxNjA6XHRcbiAxNjE6XHRcdGlmIChidXMtXHUwMDNlb2ZfaXJxKVxuIDE2MjpcdFx0XHRkZXZtX2ZyZWVfaXJxKFx1MDAyNmJ1cy1cdTAwM2VmdW5jLVx1MDAzZWRldiwgYnVzLVx1MDAzZW9mX2lycSwgYnVzKTtcbiAxNjM6XHRcdHNkaW9fY2xhaW1faG9zdChidXMtXHUwMDNlZnVuYyk7XG4gMTY0Olx0XHRyZXQgPSBzZGlvX3JlbGVhc2VfaXJxKGJ1cy1cdTAwM2VmdW5jKTtcbiAxNjU6XHRcdHNkaW9fcmVsZWFzZV9ob3N0KGJ1cy1cdTAwM2VmdW5jKTtcbiAxNjY6XHRcdHJldHVybiByZXQ7XG4gMTY3Olx0fVxuIDE2ODpcdFxuIDE2OTpcdHN0YXRpYyBzaXplX3Qgd2Z4X3NkaW9fYWxpZ25fc2l6ZSh2b2lkICpwcml2LCBzaXplX3Qgc2l6ZSlcbiAxNzA6XHR7XG4gMTcxOlx0XHRzdHJ1Y3Qgd2Z4X3NkaW9fcHJpdiAqYnVzID0gcHJpdjtcbiAxNzI6XHRcbiAxNzM6XHRcdHJldHVybiBzZGlvX2FsaWduX3NpemUoYnVzLVx1MDAzZWZ1bmMsIHNpemUpO1xuIDE3NDpcdH1cbiAxNzU6XHRcbiAxNzY6XHRzdGF0aWMgdm9pZCB3Znhfc2Rpb19zZXRfd2FrZXVwKHZvaWQgKnByaXYsIGJvb2wgZW5hYmxlZClcbiAxNzc6XHR7XG4gMTc4Olx0XHRzdHJ1Y3Qgd2Z4X3NkaW9fcHJpdiAqYnVzID0gcHJpdjtcbiAxNzk6XHRcbiAxODA6XHRcdGRldmljZV9zZXRfd2FrZXVwX2VuYWJsZShcdTAwMjZidXMtXHUwMDNlZnVuYy1cdTAwM2VkZXYsIGVuYWJsZWQpO1xuIDE4MTpcdH1cbiAxODI6XHRcbiAxODM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHdmeF9od2J1c19vcHMgd2Z4X3NkaW9faHdidXNfb3BzID0ge1xuIDE4NDpcdFx0LmNvcHlfZnJvbV9pbyAgICA9IHdmeF9zZGlvX2NvcHlfZnJvbV9pbyxcbiAxODU6XHRcdC5jb3B5X3RvX2lvICAgICAgPSB3Znhfc2Rpb19jb3B5X3RvX2lvLFxuIDE4NjpcdFx0LmlycV9zdWJzY3JpYmUgICA9IHdmeF9zZGlvX2lycV9zdWJzY3JpYmUsXG4gMTg3Olx0XHQuaXJxX3Vuc3Vic2NyaWJlID0gd2Z4X3NkaW9faXJxX3Vuc3Vic2NyaWJlLFxuIDE4ODpcdFx0LmxvY2sgICAgICAgICAgICA9IHdmeF9zZGlvX2xvY2ssXG4gMTg5Olx0XHQudW5sb2NrICAgICAgICAgID0gd2Z4X3NkaW9fdW5sb2NrLFxuIDE5MDpcdFx0LmFsaWduX3NpemUgICAgICA9IHdmeF9zZGlvX2FsaWduX3NpemUsXG4gMTkxOlx0XHQuc2V0X3dha2V1cCAgICAgID0gd2Z4X3NkaW9fc2V0X3dha2V1cCxcbiAxOTI6XHR9O1xuIDE5MzpcdFxuIDE5NDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHdmeF9zZGlvX29mX21hdGNoW10gPSB7XG4gMTk1Olx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7c2lsYWJzLHdmMjAwXCYjMzQ7LCAgICAuZGF0YSA9IFx1MDAyNnBkYXRhX3dmMjAwIH0sXG4gMTk2Olx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7c2lsYWJzLGJyZDQwMDFhXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNnBkYXRhX2JyZDQwMDFhIH0sXG4gMTk3Olx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7c2lsYWJzLGJyZDgwMjJhXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNnBkYXRhX2JyZDgwMjJhIH0sXG4gMTk4Olx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7c2lsYWJzLGJyZDgwMjNhXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNnBkYXRhX2JyZDgwMjNhIH0sXG4gMTk5Olx0XHR7IH0sXG4gMjAwOlx0fTtcbiAyMDE6XHRNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB3Znhfc2Rpb19vZl9tYXRjaCk7XG4gMjAyOlx0XG4gMjAzOlx0c3RhdGljIGludCB3Znhfc2Rpb19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcbiAyMDQ6XHR7XG4gMjA1Olx0XHRzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jID0gZGV2X3RvX3NkaW9fZnVuYyhkZXYpO1xuIDIwNjpcdFx0c3RydWN0IHdmeF9zZGlvX3ByaXYgKmJ1cyA9IHNkaW9fZ2V0X2RydmRhdGEoZnVuYyk7XG4gMjA3Olx0XHRpbnQgcmV0O1xuIDIwODpcdFxuIDIwOTpcdFx0aWYgKCFkZXZpY2VfbWF5X3dha2V1cChkZXYpKVxuIDIxMDpcdFx0XHRyZXR1cm4gMDtcbiAyMTE6XHRcbiAyMTI6XHRcdGZsdXNoX3dvcmsoXHUwMDI2YnVzLVx1MDAzZWNvcmUtXHUwMDNlaGlmLmJoKTtcbiAyMTM6XHRcdC8qIEVpdGhlciBcJiMzNDt3YWtldXAtc291cmNlXCYjMzQ7IGF0dHJpYnV0ZSBvciBvdXQtb2YtYmFuZCBJUlEgaXMgcmVxdWlyZWQgZm9yXG4gMjE0Olx0XHQgKiBXb1dMQU5cbiAyMTU6XHRcdCAqL1xuIDIxNjpcdFx0aWYgKGJ1cy1cdTAwM2VvZl9pcnEpIHtcbiAyMTc6XHRcdFx0cmV0ID0gZW5hYmxlX2lycV93YWtlKGJ1cy1cdTAwM2VvZl9pcnEpO1xuIDIxODpcdFx0XHRpZiAocmV0KVxuIDIxOTpcdFx0XHRcdHJldHVybiByZXQ7XG4gMjIwOlx0XHR9IGVsc2Uge1xuIDIyMTpcdFx0XHRyZXQgPSBzZGlvX3NldF9ob3N0X3BtX2ZsYWdzKGZ1bmMsIE1NQ19QTV9XQUtFX1NESU9fSVJRKTtcbiAyMjI6XHRcdFx0aWYgKHJldClcbiAyMjM6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDIyNDpcdFx0fVxuIDIyNTpcdFx0cmV0dXJuIHNkaW9fc2V0X2hvc3RfcG1fZmxhZ3MoZnVuYywgTU1DX1BNX0tFRVBfUE9XRVIpO1xuIDIyNjpcdH1cbiAyMjc6XHRcbiAyMjg6XHRzdGF0aWMgaW50IHdmeF9zZGlvX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gMjI5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODc4MgoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYnVzX3NkaW8uYyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB6ZXJvaW5nIGluIG9uIHRoZSB2ZXJ5IGJvdHRvbSBvZiB0aGUgYGJ1c19zZGlvLmNgIGZpbGUuIE5vIG5lZWQgZm9yIGEgY29tcHJlaGVuc2l2ZSBvdmVydmlldyByaWdodCBub3c7IEkmIzM5O20gYmV0dGluZyB0aGUgcm9vdCBvZiB0aGUgcHJvYmxlbSwgb3IgYXQgbGVhc3QgYSBjcml0aWNhbCBjbHVlLCBpcyBidXJpZWQgZGVlcC4gSSBoYXZlIGEgaHVuY2ggaXQmIzM5O3MgYSByZWNlbnQgY2hhbmdlLCBhIGJvdW5kYXJ5IGNvbmRpdGlvbiBpc3N1ZSwgb3IgbWF5YmUgc29tZSBvdmVybG9va2VkIGluaXRpYWxpemF0aW9uIG5lYXIgdGhlIGVuZCBvZiB0aGUgZmlsZS4gSXTigJlzIHVzdWFsbHkgd2hlcmUgSSBzdGFydCBsb29raW5nIGluIGNhc2VzIGxpa2UgdGhpcy4gTGV04oCZcyBzZWUgd2hhdCBnZW1zIGFyZSB3YWl0aW5nIHRvIGJlIHVuY292ZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIzMDpcdFx0c3RydWN0IHNkaW9fZnVuYyAqZnVuYyA9IGRldl90b19zZGlvX2Z1bmMoZGV2KTtcbiAyMzE6XHRcdHN0cnVjdCB3Znhfc2Rpb19wcml2ICpidXMgPSBzZGlvX2dldF9kcnZkYXRhKGZ1bmMpO1xuIDIzMjpcdFxuIDIzMzpcdFx0aWYgKCFkZXZpY2VfbWF5X3dha2V1cChkZXYpKVxuIDIzNDpcdFx0XHRyZXR1cm4gMDtcbiAyMzU6XHRcdGlmIChidXMtXHUwMDNlb2ZfaXJxKVxuIDIzNjpcdFx0XHRyZXR1cm4gZGlzYWJsZV9pcnFfd2FrZShidXMtXHUwMDNlb2ZfaXJxKTtcbiAyMzc6XHRcdGVsc2VcbiAyMzg6XHRcdFx0cmV0dXJuIDA7XG4gMjM5Olx0fVxuIDI0MDpcdFxuIDI0MTpcdHN0YXRpYyBpbnQgd2Z4X3NkaW9fcHJvYmUoc3RydWN0IHNkaW9fZnVuYyAqZnVuYywgY29uc3Qgc3RydWN0IHNkaW9fZGV2aWNlX2lkICppZClcbiAyNDI6XHR7XG4gMjQzOlx0XHRjb25zdCBzdHJ1Y3Qgd2Z4X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKFx1MDAyNmZ1bmMtXHUwMDNlZGV2KTtcbiAyNDQ6XHRcdG1tY19wbV9mbGFnX3QgcG1fZmxhZyA9IHNkaW9fZ2V0X2hvc3RfcG1fY2FwcyhmdW5jKTtcbiAyNDU6XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBmdW5jLVx1MDAzZWRldi5vZl9ub2RlO1xuIDI0NjpcdFx0c3RydWN0IHdmeF9zZGlvX3ByaXYgKmJ1cztcbiAyNDc6XHRcdGludCByZXQ7XG4gMjQ4Olx0XG4gMjQ5Olx0XHRpZiAoZnVuYy1cdTAwM2VudW0gIT0gMSkge1xuIDI1MDpcdFx0XHRkZXZfZXJyKFx1MDAyNmZ1bmMtXHUwMDNlZGV2LCBcJiMzNDtTRElPIGZ1bmN0aW9uIG51bWJlciBpcyAlZCB3aGlsZSBpdCBzaG91bGQgYWx3YXlzIGJlIDEgKHVuc3VwcG9ydGVkIGNoaXA/KVxcblwmIzM0OyxcbiAyNTE6XHRcdFx0XHRmdW5jLVx1MDAzZW51bSk7XG4gMjUyOlx0XHRcdHJldHVybiAtRU5PREVWO1xuIDI1MzpcdFx0fVxuIDI1NDpcdFxuIDI1NTpcdFx0aWYgKCFwZGF0YSkge1xuIDI1NjpcdFx0XHRkZXZfd2FybihcdTAwMjZmdW5jLVx1MDAzZWRldiwgXCYjMzQ7bm8gY29tcGF0aWJsZSBkZXZpY2UgZm91bmQgaW4gRFRcXG5cJiMzNDspO1xuIDI1NzpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiAyNTg6XHRcdH1cbiAyNTk6XHRcbiAyNjA6XHRcdGJ1cyA9IGRldm1fa3phbGxvYyhcdTAwMjZmdW5jLVx1MDAzZWRldiwgc2l6ZW9mKCpidXMpLCBHRlBfS0VSTkVMKTtcbiAyNjE6XHRcdGlmICghYnVzKVxuIDI2MjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAyNjM6XHRcbiAyNjQ6XHRcdGJ1cy1cdTAwM2VmdW5jID0gZnVuYztcbiAyNjU6XHRcdGJ1cy1cdTAwM2VvZl9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7XG4gMjY2Olx0XHRzZGlvX3NldF9kcnZkYXRhKGZ1bmMsIGJ1cyk7XG4gMjY3Olx0XG4gMjY4Olx0XHRzZGlvX2NsYWltX2hvc3QoZnVuYyk7XG4gMjY5Olx0XHRyZXQgPSBzZGlvX2VuYWJsZV9mdW5jKGZ1bmMpO1xuIDI3MDpcdFx0LyogQmxvY2sgb2YgNjQgYnl0ZXMgaXMgbW9yZSBlZmZpY2llbnQgdGhhbiA1MTJCIGZvciBmcmFtZSBzaXplcyBcdTAwM2MgNGsgKi9cbiAyNzE6XHRcdHNkaW9fc2V0X2Jsb2NrX3NpemUoZnVuYywgNjQpO1xuIDI3MjpcdFx0c2Rpb19yZWxlYXNlX2hvc3QoZnVuYyk7XG4gMjczOlx0XHRpZiAocmV0KVxuIDI3NDpcdFx0XHRyZXR1cm4gcmV0O1xuIDI3NTpcdFxuIDI3NjpcdFx0YnVzLVx1MDAzZWNvcmUgPSB3ZnhfaW5pdF9jb21tb24oXHUwMDI2ZnVuYy1cdTAwM2VkZXYsIHBkYXRhLCBcdTAwMjZ3Znhfc2Rpb19od2J1c19vcHMsIGJ1cyk7XG4gMjc3Olx0XHRpZiAoIWJ1cy1cdTAwM2Vjb3JlKSB7XG4gMjc4Olx0XHRcdHJldCA9IC1FSU87XG4gMjc5Olx0XHRcdGdvdG8gc2Rpb19yZWxlYXNlO1xuIDI4MDpcdFx0fVxuIDI4MTpcdFxuIDI4MjpcdFx0YnVzLVx1MDAzZWNvcmUtXHUwMDNlcG9sbF9pcnEgPSAhIWJ1cy1cdTAwM2VvZl9pcnE7XG4gMjgzOlx0XHRyZXQgPSB3ZnhfcHJvYmUoYnVzLVx1MDAzZWNvcmUpO1xuIDI4NDpcdFx0aWYgKHJldClcbiAyODU6XHRcdFx0Z290byBzZGlvX3JlbGVhc2U7XG4gMjg2Olx0XG4gMjg3Olx0XHRpZiAocG1fZmxhZyBcdTAwMjYgTU1DX1BNX0tFRVBfUE9XRVIpXG4gMjg4Olx0XHRcdGRldmljZV9zZXRfd2FrZXVwX2NhcGFibGUoXHUwMDI2ZnVuYy1cdTAwM2VkZXYsIHRydWUpO1xuIDI4OTpcdFxuIDI5MDpcdFx0cmV0dXJuIDA7XG4gMjkxOlx0XG4gMjkyOlx0c2Rpb19yZWxlYXNlOlxuIDI5MzpcdFx0c2Rpb19jbGFpbV9ob3N0KGZ1bmMpO1xuIDI5NDpcdFx0c2Rpb19kaXNhYmxlX2Z1bmMoZnVuYyk7XG4gMjk1Olx0XHRzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTtcbiAyOTY6XHRcdHJldHVybiByZXQ7XG4gMjk3Olx0fVxuIDI5ODpcdFxuIDI5OTpcdHN0YXRpYyB2b2lkIHdmeF9zZGlvX3JlbW92ZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKVxuIDMwMDpcdHtcbiAzMDE6XHRcdHN0cnVjdCB3Znhfc2Rpb19wcml2ICpidXMgPSBzZGlvX2dldF9kcnZkYXRhKGZ1bmMpO1xuIDMwMjpcdFxuIDMwMzpcdFx0d2Z4X3JlbGVhc2UoYnVzLVx1MDAzZWNvcmUpO1xuIDMwNDpcdFx0c2Rpb19jbGFpbV9ob3N0KGZ1bmMpO1xuIDMwNTpcdFx0c2Rpb19kaXNhYmxlX2Z1bmMoZnVuYyk7XG4gMzA2Olx0XHRzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTtcbiAzMDc6XHR9XG4gMzA4Olx0XG4gMzA5Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBzZGlvX2RldmljZV9pZCB3Znhfc2Rpb19pZHNbXSA9IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNDIKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHByb3ZpZGVkIGluc3RydWN0aW9uOgoKKipEaXZpbmcgaW50byB0aGUgU1BJIEJ1cyBDb2RlKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBsb29rZWQgYXQgdGhlIG90aGVyIGNvcmUgY29tcG9uZW50cywgYW5kIG5vdyBpdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgYnVzX3NwaS5jYCBmaWxlLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIFNQSSBwcm90b2NvbHMgYW5kIGxvdy1sZXZlbCBoYXJkd2FyZSBpbnRlcmFjdGlvbnMsIEkgZXhwZWN0IHRoaXMgZmlsZSB0byBiZSBjcml0aWNhbCBmb3IgYWN0dWFsbHkgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBwZXJpcGhlcmFsIGRldmljZXMuIEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgaXQgd2lsbCBjb250YWluIHRoZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIGNvbmZpZ3VyaW5nIHRoZSBTUEkgY29udHJvbGxlciwgc2V0dGluZyB1cCB0aGUgY2xvY2sgZnJlcXVlbmNpZXMsIG1hbmFnaW5nIHRoZSBjaGlwIHNlbGVjdCBsaW5lcywgYW5kIGhhbmRsaW5nIHRoZSBkYXRhIHRyYW5zZmVyIGl0c2VsZiDigJMgYm90aCB0aGUgdHJhbnNtaXNzaW9uIGFuZCByZWNlcHRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGJ1ZmZlciBtYW5hZ2VtZW50LCBpbnRlcnJ1cHQgaGFuZGxpbmcgKGlmIGl0JiMzOTtzIGludGVycnVwdC1kcml2ZW4pLCBhbmQgYW55IGVycm9yIGNoZWNraW5nIG9yIHJldHJ5IG1lY2hhbmlzbXMuIEkmIzM5O2xsIGFsc28gYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBjb2RlIGhhbmRsZXMgZGlmZmVyZW50IFNQSSBtb2RlcyBhbmQgZGF0YSBmcmFtZSBzaXplcywgYW5kIGlmIHRoZXJlJiMzOTtzIGFueSBhYnN0cmFjdGlvbiBsYXllciBvdmVyIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBncmFzcCB0aGUgZnVuZGFtZW50YWwgZmxvdyBvZiBkYXRhIGFuZCBjb250cm9sIHdpdGhpbiB0aGUgU1BJIGJ1cyBkcml2ZXIgdG8gZGV0ZXJtaW5lIGl0cyBlZmZpY2llbmN5LCBmbGV4aWJpbGl0eSwgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIHNvIHRoYXQgaXQgY2FuIGJlIG9wdGltaXNlZCBpZiBuZWNlc3NhcnkuIEkmIzM5O2xsIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGZ1bmN0aW9uIGNhbGxzIHJlbGF0ZWQgdG8gZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCB0aGVuIHRyYWNlIHRoZSBkYXRhIHRyYW5zZmVyLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbGVhbiBhbmQgY29uY2lzZSBpbXBsZW1lbnRhdGlvbnMsIG9yIGFueXRoaW5nIGNsdW5reSB0aGF0IG5lZWRzIGF0dGVudGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc3BpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0LypcbiAgIDM6XHQgKiBTUEkgaW50ZXJmYWNlLlxuICAgNDpcdCAqXG4gICA1Olx0ICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuXG4gICA2Olx0ICogQ29weXJpZ2h0IChjKSAyMDExLCBTYWdyYWQgSW5jLlxuICAgNzpcdCAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb25cbiAgIDg6XHQgKi9cbiAgIDk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAgMTE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9ncGlvL2NvbnN1bWVyLmhcdTAwM2VcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGkvc3BpLmhcdTAwM2VcbiAgMTM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFx1MDAzZVxuICAxNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycS5oXHUwMDNlXG4gIDE1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuICAxNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtLmhcdTAwM2VcbiAgMTc6XHRcbiAgMTg6XHQjaW5jbHVkZSBcJiMzNDtidXMuaFwmIzM0O1xuICAxOTpcdCNpbmNsdWRlIFwmIzM0O3dmeC5oXCYjMzQ7XG4gIDIwOlx0I2luY2x1ZGUgXCYjMzQ7aHdpby5oXCYjMzQ7XG4gIDIxOlx0I2luY2x1ZGUgXCYjMzQ7bWFpbi5oXCYjMzQ7XG4gIDIyOlx0I2luY2x1ZGUgXCYjMzQ7YmguaFwmIzM0O1xuICAyMzpcdFxuICAyNDpcdCNkZWZpbmUgU0VUX1dSSVRFIDB4N0ZGRiAgICAgICAgLyogdXNhZ2U6IGFuZCBvcGVyYXRpb24gKi9cbiAgMjU6XHQjZGVmaW5lIFNFVF9SRUFEIDB4ODAwMCAgICAgICAgIC8qIHVzYWdlOiBvciBvcGVyYXRpb24gKi9cbiAgMjY6XHRcbiAgMjc6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhIHBkYXRhX3dmMjAwID0ge1xuICAyODpcdFx0LmZpbGVfZncgPSBcJiMzNDt3Zngvd2ZtX3dmMjAwXCYjMzQ7LFxuICAyOTpcdFx0LmZpbGVfcGRzID0gXCYjMzQ7d2Z4L3dmMjAwLnBkc1wmIzM0OyxcbiAgMzA6XHRcdC51c2VfcmlzaW5nX2NsayA9IHRydWUsXG4gIDMxOlx0fTtcbiAgMzI6XHRcbiAgMzM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhIHBkYXRhX2JyZDQwMDFhID0ge1xuICAzNDpcdFx0LmZpbGVfZncgPSBcJiMzNDt3Zngvd2ZtX3dmMjAwXCYjMzQ7LFxuICAzNTpcdFx0LmZpbGVfcGRzID0gXCYjMzQ7d2Z4L2JyZDQwMDFhLnBkc1wmIzM0OyxcbiAgMzY6XHRcdC51c2VfcmlzaW5nX2NsayA9IHRydWUsXG4gIDM3Olx0fTtcbiAgMzg6XHRcbiAgMzk6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhIHBkYXRhX2JyZDgwMjJhID0ge1xuICA0MDpcdFx0LmZpbGVfZncgPSBcJiMzNDt3Zngvd2ZtX3dmMjAwXCYjMzQ7LFxuICA0MTpcdFx0LmZpbGVfcGRzID0gXCYjMzQ7d2Z4L2JyZDgwMjJhLnBkc1wmIzM0OyxcbiAgNDI6XHRcdC51c2VfcmlzaW5nX2NsayA9IHRydWUsXG4gIDQzOlx0fTtcbiAgNDQ6XHRcbiAgNDU6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhIHBkYXRhX2JyZDgwMjNhID0ge1xuICA0NjpcdFx0LmZpbGVfZncgPSBcJiMzNDt3Zngvd2ZtX3dmMjAwXCYjMzQ7LFxuICA0NzpcdFx0LmZpbGVfcGRzID0gXCYjMzQ7d2Z4L2JyZDgwMjNhLnBkc1wmIzM0OyxcbiAgNDg6XHRcdC51c2VfcmlzaW5nX2NsayA9IHRydWUsXG4gIDQ5Olx0fTtcbiAgNTA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzNzYKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwbHkgZmFtaWxpYXIgd2l0aCBlbWJlZGRlZCBzeXN0ZW1zIGFuZCBTUEkgY29tbXVuaWNhdGlvbjoKCioqRGl2aW5nIERlZXBlciBpbnRvIGJ1c1xfc3BpLmMqKgoKQWxyaWdodCwgc28gdGhlIGZvY3VzIGlzIGNsZWFybHkgb24gdGhlIHJlc3Qgb2YgYGJ1c19zcGkuY2AuIFRoYXQgbWVhbnMgSSYjMzk7dmUgYWxyZWFkeSBlc3RhYmxpc2hlZCB0aGUgY29udGV4dCwgcGVyaGFwcyBieSBnbGFuY2luZyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIG9yIGhhdmluZyBhIGdlbmVyYWwgdW5kZXJzdGFuZGluZyBvZiB0aGUgcHJvamVjdC4gTm93LCBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHJlbWFpbmluZyBwYXJ0cyBvZiB0aGlzIG1vZHVsZS4gSSYjMzk7bSBsaWtlbHkgbG9va2luZyBmb3IgdGhlIG1lYXQgb2YgdGhlIFNQSSBidXMgaW1wbGVtZW50YXRpb24uIFdoYXQgYXJlIHRoZSBrZXkgZnVuY3Rpb25zLCBzdHJ1Y3R1cmVzLCBhbmQgZGF0YSBmbG93IHJlbGF0ZWQgdG8gaW50ZXJmYWNpbmcgd2l0aCBhbiBTUEkgcGVyaXBoZXJhbD8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdG8gc2VlIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGluZ3MgbGlrZSBpbml0aWFsaXphdGlvbiwgdHJhbnNtaXNzaW9uLCByZWNlcHRpb24sIGNsb2NrIGNvbnRyb2wsIGNoaXAgc2VsZWN0IG1hbmFnZW1lbnQsIGFuZCBlcnJvciBoYW5kbGluZy4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhlcmUgYXJlIGFueSBpbnRlcmVzdGluZyBvcHRpbWl6YXRpb25zIG9yIHBsYXRmb3JtLXNwZWNpZmljIGNvbnNpZGVyYXRpb25zIGltcGxlbWVudGVkIGluIHRoZSBjb2RlLiBJJiMzOTttIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc3BpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE4MDpcdFx0cmV0dXJuIEFMSUdOKHNpemUsIDQpO1xuIDE4MTpcdH1cbiAxODI6XHRcbiAxODM6XHRzdGF0aWMgdm9pZCB3Znhfc3BpX3NldF93YWtldXAodm9pZCAqcHJpdiwgYm9vbCBlbmFibGVkKVxuIDE4NDpcdHtcbiAxODU6XHRcdHN0cnVjdCB3Znhfc3BpX3ByaXYgKmJ1cyA9IHByaXY7XG4gMTg2Olx0XG4gMTg3Olx0XHRkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUoXHUwMDI2YnVzLVx1MDAzZWZ1bmMtXHUwMDNlZGV2LCBlbmFibGVkKTtcbiAxODg6XHR9XG4gMTg5Olx0XG4gMTkwOlx0c3RhdGljIGNvbnN0IHN0cnVjdCB3ZnhfaHdidXNfb3BzIHdmeF9zcGlfaHdidXNfb3BzID0ge1xuIDE5MTpcdFx0LmNvcHlfZnJvbV9pbyAgICA9IHdmeF9zcGlfY29weV9mcm9tX2lvLFxuIDE5MjpcdFx0LmNvcHlfdG9faW8gICAgICA9IHdmeF9zcGlfY29weV90b19pbyxcbiAxOTM6XHRcdC5pcnFfc3Vic2NyaWJlICAgPSB3Znhfc3BpX2lycV9zdWJzY3JpYmUsXG4gMTk0Olx0XHQuaXJxX3Vuc3Vic2NyaWJlID0gd2Z4X3NwaV9pcnFfdW5zdWJzY3JpYmUsXG4gMTk1Olx0XHQubG9jayAgICAgICAgICAgID0gd2Z4X3NwaV9sb2NrLFxuIDE5NjpcdFx0LnVubG9jayAgICAgICAgICA9IHdmeF9zcGlfdW5sb2NrLFxuIDE5NzpcdFx0LmFsaWduX3NpemUgICAgICA9IHdmeF9zcGlfYWxpZ25fc2l6ZSxcbiAxOTg6XHRcdC5zZXRfd2FrZXVwICAgICAgPSB3Znhfc3BpX3NldF93YWtldXAsXG4gMTk5Olx0fTtcbiAyMDA6XHRcbiAyMDE6XHRzdGF0aWMgaW50IHdmeF9zcGlfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gMjAyOlx0e1xuIDIwMzpcdFx0c3RydWN0IHNwaV9kZXZpY2UgKmZ1bmMgPSB0b19zcGlfZGV2aWNlKGRldik7XG4gMjA0Olx0XHRzdHJ1Y3Qgd2Z4X3NwaV9wcml2ICpidXMgPSBzcGlfZ2V0X2RydmRhdGEoZnVuYyk7XG4gMjA1Olx0XG4gMjA2Olx0XHRpZiAoIWRldmljZV9tYXlfd2FrZXVwKGRldikpXG4gMjA3Olx0XHRcdHJldHVybiAwO1xuIDIwODpcdFx0Zmx1c2hfd29yayhcdTAwMjZidXMtXHUwMDNlY29yZS1cdTAwM2VoaWYuYmgpO1xuIDIwOTpcdFx0cmV0dXJuIGVuYWJsZV9pcnFfd2FrZShmdW5jLVx1MDAzZWlycSk7XG4gMjEwOlx0fVxuIDIxMTpcdFxuIDIxMjpcdHN0YXRpYyBpbnQgd2Z4X3NwaV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuIDIxMzpcdHtcbiAyMTQ6XHRcdHN0cnVjdCBzcGlfZGV2aWNlICpmdW5jID0gdG9fc3BpX2RldmljZShkZXYpO1xuIDIxNTpcdFxuIDIxNjpcdFx0aWYgKCFkZXZpY2VfbWF5X3dha2V1cChkZXYpKVxuIDIxNzpcdFx0XHRyZXR1cm4gMDtcbiAyMTg6XHRcdHJldHVybiBkaXNhYmxlX2lycV93YWtlKGZ1bmMtXHUwMDNlaXJxKTtcbiAyMTk6XHR9XG4gMjIwOlx0XG4gMjIxOlx0c3RhdGljIGludCB3Znhfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpmdW5jKVxuIDIyMjpcdHtcbiAyMjM6XHRcdHN0cnVjdCB3ZnhfcGxhdGZvcm1fZGF0YSAqcGRhdGE7XG4gMjI0Olx0XHRzdHJ1Y3Qgd2Z4X3NwaV9wcml2ICpidXM7XG4gMjI1Olx0XHRpbnQgcmV0O1xuIDIyNjpcdFxuIDIyNzpcdFx0aWYgKCFmdW5jLVx1MDAzZWJpdHNfcGVyX3dvcmQpXG4gMjI4Olx0XHRcdGZ1bmMtXHUwMDNlYml0c19wZXJfd29yZCA9IDE2O1xuIDIyOTpcdFx0cmV0ID0gc3BpX3NldHVwKGZ1bmMpO1xuIDIzMDpcdFx0aWYgKHJldClcbiAyMzE6XHRcdFx0cmV0dXJuIHJldDtcbiAyMzI6XHRcdHBkYXRhID0gKHN0cnVjdCB3ZnhfcGxhdGZvcm1fZGF0YSAqKXNwaV9nZXRfZGV2aWNlX2lkKGZ1bmMpLVx1MDAzZWRyaXZlcl9kYXRhO1xuIDIzMzpcdFx0aWYgKCFwZGF0YSkge1xuIDIzNDpcdFx0XHRkZXZfZXJyKFx1MDAyNmZ1bmMtXHUwMDNlZGV2LCBcJiMzNDt1bmFibGUgdG8gcmV0cmlldmUgZHJpdmVyIGRhdGEgKHBsZWFzZSByZXBvcnQpXFxuXCYjMzQ7KTtcbiAyMzU6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gMjM2Olx0XHR9XG4gMjM3Olx0XG4gMjM4Olx0XHQvKiBUcmFjZSBiZWxvdyBpcyBhbHNvIGRpc3BsYXllZCBieSBzcGlfc2V0dXAoKSBpZiBjb21waWxlZCB3aXRoIERFQlVHICovXG4gMjM5Olx0XHRkZXZfZGJnKFx1MDAyNmZ1bmMtXHUwMDNlZGV2LCBcJiMzNDtTUEkgcGFyYW1zOiBDUz0lZCwgbW9kZT0lZCBiaXRzL3dvcmQ9JWQgc3BlZWQ9JWRcXG5cJiMzNDssXG4gMjQwOlx0XHRcdHNwaV9nZXRfY2hpcHNlbGVjdChmdW5jLCAwKSwgZnVuYy1cdTAwM2Vtb2RlLCBmdW5jLVx1MDAzZWJpdHNfcGVyX3dvcmQsIGZ1bmMtXHUwMDNlbWF4X3NwZWVkX2h6KTtcbiAyNDE6XHRcdGlmIChmdW5jLVx1MDAzZWJpdHNfcGVyX3dvcmQgIT0gMTYgXHUwMDI2XHUwMDI2IGZ1bmMtXHUwMDNlYml0c19wZXJfd29yZCAhPSA4KVxuIDI0MjpcdFx0XHRkZXZfd2FybihcdTAwMjZmdW5jLVx1MDAzZWRldiwgXCYjMzQ7dW51c3VhbCBiaXRzL3dvcmQgdmFsdWU6ICVkXFxuXCYjMzQ7LCBmdW5jLVx1MDAzZWJpdHNfcGVyX3dvcmQpO1xuIDI0MzpcdFx0aWYgKGZ1bmMtXHUwMDNlbWF4X3NwZWVkX2h6IFx1MDAzZSA1MDAwMDAwMClcbiAyNDQ6XHRcdFx0ZGV2X3dhcm4oXHUwMDI2ZnVuYy1cdTAwM2VkZXYsIFwmIzM0OyVkSHogaXMgYSB2ZXJ5IGhpZ2ggc3BlZWRcXG5cJiMzNDssIGZ1bmMtXHUwMDNlbWF4X3NwZWVkX2h6KTtcbiAyNDU6XHRcbiAyNDY6XHRcdGJ1cyA9IGRldm1fa3phbGxvYyhcdTAwMjZmdW5jLVx1MDAzZWRldiwgc2l6ZW9mKCpidXMpLCBHRlBfS0VSTkVMKTtcbiAyNDc6XHRcdGlmICghYnVzKVxuIDI0ODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAyNDk6XHRcdGJ1cy1cdTAwM2VmdW5jID0gZnVuYztcbiAyNTA6XHRcdGlmIChmdW5jLVx1MDAzZWJpdHNfcGVyX3dvcmQgPT0gOCB8fCBJU19FTkFCTEVEKENPTkZJR19DUFVfQklHX0VORElBTikpXG4gMjUxOlx0XHRcdGJ1cy1cdTAwM2VuZWVkX3N3YWIgPSB0cnVlO1xuIDI1MjpcdFx0c3BpX3NldF9kcnZkYXRhKGZ1bmMsIGJ1cyk7XG4gMjUzOlx0XG4gMjU0Olx0XHRidXMtXHUwMDNlZ3Bpb19yZXNldCA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKFx1MDAyNmZ1bmMtXHUwMDNlZGV2LCBcJiMzNDtyZXNldFwmIzM0OywgR1BJT0RfT1VUX0xPVyk7XG4gMjU1Olx0XHRpZiAoSVNfRVJSKGJ1cy1cdTAwM2VncGlvX3Jlc2V0KSlcbiAyNTY6XHRcdFx0cmV0dXJuIFBUUl9FUlIoYnVzLVx1MDAzZWdwaW9fcmVzZXQpO1xuIDI1NzpcdFx0aWYgKCFidXMtXHUwMDNlZ3Bpb19yZXNldCkge1xuIDI1ODpcdFx0XHRkZXZfd2FybihcdTAwMjZmdW5jLVx1MDAzZWRldiwgXCYjMzQ7Z3BpbyByZXNldCBpcyBub3QgZGVmaW5lZCwgdHJ5aW5nIHRvIGxvYWQgZmlybXdhcmUgYW55d2F5XFxuXCYjMzQ7KTtcbiAyNTk6XHRcdH0gZWxzZSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDQyCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFNpbGljb24gTGFicyBXRjIwMCBGdXp6aW5nIEZlYXNpYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBXRjIwMCBmcm9tIFNpbGljb24gTGFicyBpcyBhbiBTRElPL1NQSSB3aXJlbGVzcyBjaGlwLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzOiBjYW4gd2UgZXZlbiBmdXp6IGl0PyBEb2VzIHN0YW5kYXJkIFFFTVUgb3Igc3l6a2FsbGVyIG9mZmVyIGFueSBlbXVsYXRpb24gb3IgaW5zdGFudGlhdGlvbiBvZiBTRElPL1NQSSB3aXJlbGVzcyBoYXJkd2FyZT8gVGhhdCYjMzk7cyB0aGUgY3J1eCBvZiBpdC4gQmVmb3JlIEkgZ2V0IGFoZWFkIG9mIG15c2VsZiwgSSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBnb2xkZW4gcnVsZTogKipyZWFjaGFiaWxpdHkgaXMgdGhlIHByaW1hcnkgZ2F0ZS4qKiBNeSBmdXp6ZXIgY2FuICpvbmx5KiBmaW5kIGJ1Z3MgaW4gY29kZSB0aGF0ICpleGVjdXRlcyogaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUuIFRoaW5ncyBsaWtlIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIGFyZSBvdXQgYmVjYXVzZSB0aGV5IG5lZWQgcGh5c2ljYWwgaGFyZHdhcmUgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlLgoKU28sIGNhbiB3ZSBpbnN0YW50aWF0ZSBvciBwcm9iZSB0aGUgV0YyMDAgdXNpbmcgc3l6a2FsbGVyIG9yIHN0YW5kYXJkIFFFTVU/IENhbiBzeXprYWxsZXIgcHJvYmUgU1BJIG9yIFNESU8gZGV2aWNlcywgcGVyaW9kPyBJIGtub3cgc3l6a2FsbGVyICpkb2VzKiBoYXZlIHNvbWUgVVNCIGVtdWxhdGlvbiB2aWEgdGhlIFJhdyBHYWRnZXQgbWVjaGFuaXNtLiBCdXQgZG9lcyB0aGF0IGV4dGVuZCB0byBTRElPIG9yIFNQST8gTm8uIFNESU8gY2FyZHMgYXJlIHR5cGljYWxseSBkaXNjb3ZlcmVkIHZpYSB0aGUgTU1DIGJ1cyBhbmQgZGV2aWNlIHRyZWUgKERUKSBvbiBpbnNlcnRpb24uIFNQSSBkZXZpY2VzIGFyZSBzaW1pbGFybHkgRFQgb3IgQUNQSSBvciBib2FyZC1pbnN0YW50aWF0ZWQuIFRoZXkgaW5oZXJlbnRseSBuZWVkIGEgcGh5c2ljYWwgU1BJIGJ1cyBhbmQgc2xhdmUuCgpBbHJpZ2h0LCBiYWNrIHRvIHRoZSBjb3JlIHF1ZXN0aW9uOiBkb2VzIHN5emthbGxlciBoYXZlIHN1cHBvcnQgZm9yIFNESU8vU1BJPyBEbyB0aGV5IGhhdmUgYW55IHBzZXVkby1zeXNjYWxscyBvciBzdXBwb3J0IGZvciBtYWM4MDIxMSBod3NpbSBvciByYXcgZGV2aWNlcz8gTm9wZSwgaXQgc2VlbXMgY2xlYXIgdGhlIGFuc3dlciBpcyBuby4gVGhpcyBkb2VzbiYjMzk7dCBsb29rIHByb21pc2luZyBmb3Igc2ltcGxlIGZ1enppbmcuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgcGF0Y2ggaXRzZWxmLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jYCBhbmQgZmlndXJlIG91dCB3aGF0IHRoZSBwYXRjaCBpcyAqYWN0dWFsbHkqIGRvaW5nIGluIHRoYXQgY29udGV4dC4gVGhhdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwMDpcdFx0XHQgXCYjMzQ7JWQuJWQuJWRcJiMzNDssXG4gNDAxOlx0XHRcdCB3ZGV2LVx1MDAzZWh3X2NhcHMuZmlybXdhcmVfbWFqb3IsXG4gNDAyOlx0XHRcdCB3ZGV2LVx1MDAzZWh3X2NhcHMuZmlybXdhcmVfbWlub3IsXG4gNDAzOlx0XHRcdCB3ZGV2LVx1MDAzZWh3X2NhcHMuZmlybXdhcmVfYnVpbGQpO1xuIDQwNDpcdFxuIDQwNTpcdFx0aWYgKHdmeF9hcGlfb2xkZXJfdGhhbih3ZGV2LCAxLCAwKSkge1xuIDQwNjpcdFx0XHRkZXZfZXJyKHdkZXYtXHUwMDNlZGV2LCBcJiMzNDt1bnN1cHBvcnRlZCBmaXJtd2FyZSBBUEkgdmVyc2lvbiAoZXhwZWN0IDEgd2hpbGUgZmlybXdhcmUgcmV0dXJucyAlZClcXG5cJiMzNDssXG4gNDA3Olx0XHRcdFx0d2Rldi1cdTAwM2Vod19jYXBzLmFwaV92ZXJzaW9uX21ham9yKTtcbiA0MDg6XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4gNDA5Olx0XHRcdGdvdG8gaXJxX3Vuc3Vic2NyaWJlO1xuIDQxMDpcdFx0fVxuIDQxMTpcdFxuIDQxMjpcdFx0aWYgKHdkZXYtXHUwMDNlaHdfY2Fwcy5saW5rX21vZGUgPT0gU0VDX0xJTktfRU5GT1JDRUQpIHtcbiA0MTM6XHRcdFx0ZGV2X2Vycih3ZGV2LVx1MDAzZWRldiwgXCYjMzQ7Y2hpcCByZXF1aXJlIHNlY3VyZV9saW5rLCBidXQgY2FuJiMzOTt0IG5lZ290aWF0ZSBpdFxcblwmIzM0Oyk7XG4gNDE0Olx0XHRcdGVyciA9IC1FT1BOT1RTVVBQO1xuIDQxNTpcdFx0XHRnb3RvIGlycV91bnN1YnNjcmliZTtcbiA0MTY6XHRcdH1cbiA0MTc6XHRcbiA0MTg6XHRcdGlmICh3ZGV2LVx1MDAzZWh3X2NhcHMucmVnaW9uX3NlbF9tb2RlKSB7XG4gNDE5Olx0XHRcdHdkZXYtXHUwMDNlaHctXHUwMDNld2lwaHktXHUwMDNlcmVndWxhdG9yeV9mbGFncyB8PSBSRUdVTEFUT1JZX0RJU0FCTEVfQkVBQ09OX0hJTlRTO1xuIDQyMDpcdFx0XHR3ZGV2LVx1MDAzZWh3LVx1MDAzZXdpcGh5LVx1MDAzZWJhbmRzW05MODAyMTFfQkFORF8yR0haXS1cdTAwM2VjaGFubmVsc1sxMV0uZmxhZ3MgfD1cbiA0MjE6XHRcdFx0XHRJRUVFODAyMTFfQ0hBTl9OT19JUjtcbiA0MjI6XHRcdFx0d2Rldi1cdTAwM2Vody1cdTAwM2V3aXBoeS1cdTAwM2ViYW5kc1tOTDgwMjExX0JBTkRfMkdIWl0tXHUwMDNlY2hhbm5lbHNbMTJdLmZsYWdzIHw9XG4gNDIzOlx0XHRcdFx0SUVFRTgwMjExX0NIQU5fTk9fSVI7XG4gNDI0Olx0XHRcdHdkZXYtXHUwMDNlaHctXHUwMDNld2lwaHktXHUwMDNlYmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLVx1MDAzZWNoYW5uZWxzWzEzXS5mbGFncyB8PVxuIDQyNTpcdFx0XHRcdElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEO1xuIDQyNjpcdFx0fVxuIDQyNzpcdFxuIDQyODpcdFx0ZGV2X2RiZyh3ZGV2LVx1MDAzZWRldiwgXCYjMzQ7c2VuZGluZyBjb25maWd1cmF0aW9uIGZpbGUgJXNcXG5cJiMzNDssIHdkZXYtXHUwMDNlcGRhdGEuZmlsZV9wZHMpO1xuIDQyOTpcdFx0ZXJyID0gd2Z4X3NlbmRfcGRhdGFfcGRzKHdkZXYpO1xuIDQzMDpcdFx0aWYgKGVyciBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJyICE9IC1FTk9FTlQpXG4gNDMxOlx0XHRcdGdvdG8gaXJxX3Vuc3Vic2NyaWJlO1xuIDQzMjpcdFxuIDQzMzpcdFx0aWYgKHdkZXYtXHUwMDNlcG9sbF9pcnEpIHtcbiA0MzQ6XHRcdFx0ZXJyID0gd2Rldi1cdTAwM2Vod2J1c19vcHMtXHUwMDNlaXJxX3N1YnNjcmliZSh3ZGV2LVx1MDAzZWh3YnVzX3ByaXYpO1xuIDQzNTpcdFx0XHRpZiAoZXJyKVxuIDQzNjpcdFx0XHRcdGdvdG8gYmhfdW5yZWdpc3RlcjtcbiA0Mzc6XHRcdFx0d2Rldi1cdTAwM2Vwb2xsX2lycSA9IGZhbHNlO1xuIDQzODpcdFx0fVxuIDQzOTpcdFxuIDQ0MDpcdFx0ZXJyID0gd2Z4X2hpZl91c2VfbXVsdGlfdHhfY29uZih3ZGV2LCB0cnVlKTtcbiA0NDE6XHRcdGlmIChlcnIpXG4gNDQyOlx0XHRcdGRldl9lcnIod2Rldi1cdTAwM2VkZXYsIFwmIzM0O21pc2NvbmZpZ3VyZWQgSVJRP1xcblwmIzM0Oyk7XG4gNDQzOlx0XG4gNDQ0Olx0XHR3ZGV2LVx1MDAzZXBkYXRhLmdwaW9fd2FrZXVwID0gZ3Bpb19zYXZlZDtcbiA0NDU6XHRcdGlmICh3ZGV2LVx1MDAzZXBkYXRhLmdwaW9fd2FrZXVwKSB7XG4gNDQ2Olx0XHRcdGRldl9kYmcod2Rldi1cdTAwM2VkZXYsIFwmIzM0O2VuYWJsZSAmIzM5O3F1aWVzY2VudCYjMzk7IHBvd2VyIG1vZGUgd2l0aCB3YWtldXAgR1BJTyBhbmQgUERTIGZpbGUgJXNcXG5cJiMzNDssXG4gNDQ3Olx0XHRcdFx0d2Rldi1cdTAwM2VwZGF0YS5maWxlX3Bkcyk7XG4gNDQ4Olx0XHRcdGdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcCh3ZGV2LVx1MDAzZXBkYXRhLmdwaW9fd2FrZXVwLCAxKTtcbiA0NDk6XHRcdFx0d2Z4X2NvbnRyb2xfcmVnX3dyaXRlKHdkZXYsIDApO1xuIDQ1MDpcdFx0XHR3ZnhfaGlmX3NldF9vcGVyYXRpb25hbF9tb2RlKHdkZXYsIEhJRl9PUF9QT1dFUl9NT0RFX1FVSUVTQ0VOVCk7XG4gNDUxOlx0XHR9IGVsc2Uge1xuIDQ1MjpcdFx0XHR3ZnhfaGlmX3NldF9vcGVyYXRpb25hbF9tb2RlKHdkZXYsIEhJRl9PUF9QT1dFUl9NT0RFX0RPWkUpO1xuIDQ1MzpcdFx0fVxuIDQ1NDpcdFxuIDQ1NTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh3ZGV2LVx1MDAzZWFkZHJlc3Nlcyk7IGkmIzQzOyYjNDM7KSB7XG4gNDU2Olx0XHRcdGV0aF96ZXJvX2FkZHIod2Rldi1cdTAwM2VhZGRyZXNzZXNbaV0uYWRkcik7XG4gNDU3Olx0XHRcdGVyciA9IG9mX2dldF9tYWNfYWRkcmVzcyh3ZGV2LVx1MDAzZWRldi1cdTAwM2VvZl9ub2RlLCB3ZGV2LVx1MDAzZWFkZHJlc3Nlc1tpXS5hZGRyKTtcbiA0NTg6XHRcdFx0aWYgKCFlcnIpXG4gNDU5Olx0XHRcdFx0d2Rldi1cdTAwM2VhZGRyZXNzZXNbaV0uYWRkcltFVEhfQUxFTiAtIDFdICYjNDM7PSBpO1xuIDQ2MDpcdFx0XHRlbHNlXG4gNDYxOlx0XHRcdFx0ZXRoZXJfYWRkcl9jb3B5KHdkZXYtXHUwMDNlYWRkcmVzc2VzW2ldLmFkZHIsIHdkZXYtXHUwMDNlaHdfY2Fwcy5tYWNfYWRkcltpXSk7XG4gNDYyOlx0XHRcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcih3ZGV2LVx1MDAzZWFkZHJlc3Nlc1tpXS5hZGRyKSkge1xuIDQ2MzpcdFx0XHRcdGRldl93YXJuKHdkZXYtXHUwMDNlZGV2LCBcJiMzNDt1c2luZyByYW5kb20gTUFDIGFkZHJlc3NcXG5cJiMzNDspO1xuIDQ2NDpcdFx0XHRcdGV0aF9yYW5kb21fYWRkcih3ZGV2LVx1MDAzZWFkZHJlc3Nlc1tpXS5hZGRyKTtcbiA0NjU6XHRcdFx0fVxuIDQ2NjpcdFx0XHRkZXZfaW5mbyh3ZGV2LVx1MDAzZWRldiwgXCYjMzQ7TUFDIGFkZHJlc3MgJWQ6ICVwTVxcblwmIzM0OywgaSwgd2Rldi1cdTAwM2VhZGRyZXNzZXNbaV0uYWRkcik7XG4gNDY3Olx0XHR9XG4gNDY4Olx0XHR3ZGV2LVx1MDAzZWh3LVx1MDAzZXdpcGh5LVx1MDAzZW5fYWRkcmVzc2VzID0gQVJSQVlfU0laRSh3ZGV2LVx1MDAzZWFkZHJlc3Nlcyk7XG4gNDY5Olx0XHR3ZGV2LVx1MDAzZWh3LVx1MDAzZXdpcGh5LVx1MDAzZWFkZHJlc3NlcyA9IHdkZXYtXHUwMDNlYWRkcmVzc2VzO1xuIDQ3MDpcdFxuIDQ3MTpcdFx0aWYgKCF3ZnhfYXBpX29sZGVyX3RoYW4od2RldiwgMywgOCkpXG4gNDcyOlx0XHRcdHdkZXYtXHUwMDNlaHctXHUwMDNld2lwaHktXHUwMDNlZmxhZ3MgfD0gV0lQSFlfRkxBR19TVVBQT1JUU19URExTO1xuIDQ3MzpcdFxuIDQ3NDpcdFx0ZXJyID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KHdkZXYtXHUwMDNlaHcpO1xuIDQ3NTpcdFx0aWYgKGVycilcbiA0NzY6XHRcdFx0Z290byBpcnFfdW5zdWJzY3JpYmU7XG4gNDc3Olx0XG4gNDc4Olx0XHRlcnIgPSB3ZnhfZGVidWdfaW5pdCh3ZGV2KTtcbiA0Nzk6XHRcdGlmIChlcnIpXG4gNDgwOlx0XHRcdGdvdG8gaWVlZTgwMjExX3VucmVnaXN0ZXI7XG4gNDgxOlx0XG4gNDgyOlx0XHRyZXR1cm4gMDtcbiA0ODM6XHRcbiA0ODQ6XHRpZWVlODAyMTFfdW5yZWdpc3RlcjpcbiA0ODU6XHRcdGllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KHdkZXYtXHUwMDNlaHcpO1xuIDQ4NjpcdGlycV91bnN1YnNjcmliZTpcbiA0ODc6XHRcdGlmICghd2Rldi1cdTAwM2Vwb2xsX2lycSlcbiA0ODg6XHRcdFx0d2Rldi1cdTAwM2Vod2J1c19vcHMtXHUwMDNlaXJxX3Vuc3Vic2NyaWJlKHdkZXYtXHUwMDNlaHdidXNfcHJpdik7XG4gNDg5Olx0YmhfdW5yZWdpc3RlcjpcbiA0OTA6XHRcdHdmeF9iaF91bnJlZ2lzdGVyKHdkZXYpO1xuIDQ5MTpcdFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNndkZXYtXHUwMDNlY29vbGluZ190aW1lb3V0X3dvcmspO1xuIDQ5MjpcdFx0ZGVzdHJveV93b3JrcXVldWUod2Rldi1cdTAwM2ViaF93cSk7XG4gNDkzOlx0XHRyZXR1cm4gZXJyO1xuIDQ5NDpcdH1cbiA0OTU6XHRcbiA0OTY6XHR2b2lkIHdmeF9yZWxlYXNlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KVxuIDQ5NzpcdHtcbiA0OTg6XHRcdGllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KHdkZXYtXHUwMDNlaHcpO1xuIDQ5OTpcdFx0d2Z4X2hpZl9zaHV0ZG93bih3ZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU3ODgKCQkJCQkJCW91dHB1dDogMTA1CgkJCQkJCQl0aG91Z2h0czogNzUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGB3ZnhgIERyaXZlciBNb2RpZmljYXRpb24mIzM5O3MgRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGB3ZnhfcHJvYmUoKWAgYW5kIGB3ZnhfcmVsZWFzZSgpYCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBlcnJvciBwYXRocy4gIEkgc2VlIGEgY2hlY2sgZm9yIGBTRUNfTElOS19FTkZPUkNFRGAgYW5kIGEgYGNhbmNlbF9kZWxheWVkX3dvcmtfc3luY2AgY2FsbCBpbiBib3RoIHRoZSBlcnJvciBwYXRoIG9mIHByb2JlIGFuZCBpbiB0aGUgcmVsZWFzZSBmdW5jdGlvbi4gIFRoZSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7Y2FuIHRoaXMgZXZlbiAqYmUqIGZ1enplZD8mIzM0OwoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIGB3ZnhgIGRyaXZlciBpdHNlbGYuIEkga25vdyB0aGlzIGRyaXZlciBpcyBmb3IgU2lsaWNvbiBMYWJzIFdGMjAwL1dGTTIwMCBXaS1GaSB0cmFuc2NlaXZlcnMsIGFuZCBpdCByZWxpZXMgb24gZWl0aGVyIFNQSSBvciBTRElPIChNTUMpIGNvbm5lY3Rpb25zLiAgQ3J1Y2lhbGx5LCBpdCByZXF1aXJlcyBkZXZpY2UtdHJlZSBwbGF0Zm9ybSBiaW5kaW5ncyBmb3IgdGhlIGhhcmR3YXJlLiAgCgpUaGUgUkVBQ0hBQklMSVRZIHNlY3Rpb24gaXMgdGhlIGNyaXRpY2FsIHBpZWNlIG9mIHRoaXMgcHV6emxlLiBJdCYjMzk7cyBleHBsaWNpdGx5IHN0YXRlZCB0aGF0IGZ1enppbmcgaXMgb25seSBlZmZlY3RpdmUgb24gY29kZSB0aGF0IGV4ZWN1dGVzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcy4gVGhlIHByb2JsZW0gaXMsIGFuZCBJICprbm93KiB0aGlzLCB0aGVyZSYjMzk7cyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoZSBTaWxpY29uIExhYnMgV0YyMDAgaGFyZHdhcmUgd2l0aGluIHRoZXNlIHN0YW5kYXJkIGVudmlyb25tZW50cy4gIFRoZSBkcml2ZXIgcmVsaWVzIG9uIGEgcGh5c2ljYWwgQVNJQyBjb25uZWN0ZWQgdmlhIFNQSSBvciBTRElPLCB3aGljaCB3ZSBhYnNvbHV0ZWx5IGNhbm5vdCBlbXVsYXRlIHdpdGhpbiBhIHN0YW5kYXJkIGZ1enppbmcgc2V0dXAuCgpUaGVyZWZvcmUsIHNpbmNlIHRoZSBjaGFuZ2VzIGFyZSBpbiB0aGUgYHByb2JlYCBlcnJvciBwYXRoICh3aGljaCB3ZSYjMzk7ZCBvbmx5IGhpdCBvbiBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBmYWlsdXJlKSBhbmQgdGhlIGByZWxlYXNlYCBmdW5jdGlvbiAod2hpY2ggaXMgdHJpZ2dlcmVkIG9uIGRyaXZlciByZW1vdmFsKSwgYm90aCBvZiB0aGVzZSBleGVjdXRpb24gcGF0aHMgYXJlIGVudGlyZWx5IHVucmVhY2hhYmxlIGluIHRoZSBjb250ZXh0IG9mIG91ciBzdGFuZGFyZCBmdXp6aW5nIHNldHVwLCB3aGljaCBtZWFucyB0aGlzIGNvZGUgaXMgbm90IGFtZW5hYmxlIHRvIGZ1enppbmcuCgpJJiMzOTttIGNvbmZpZGVudCBpbiB0aGlzIGNvbmNsdXNpb24uIExldCYjMzk7cyBtYWtlIHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgbW9kaWZpZWQgY29kZSBpcyBpbiB0aGUgU2lsaWNvbiBMYWJzIFdGMjAwIFdpLUZpIGRyaXZlciAoZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeCksIHdoaWNoIG9wZXJhdGVzIG92ZXIgU1BJIG9yIFNESU8gYnVzZXMgYW5kIHJlcXVpcmVzIHBoeXNpY2FsIFNpbGljb24gTGFicyBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKHN1Y2ggYXMgUUVNVS9HQ0UpLiBDb25zZXF1ZW50bHksIHRoZXNlIHByb2JlIGFuZCByZWxlYXNlIHBhdGhzIGFyZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBtb2RpZmllZCBjb2RlIGlzIGluIHRoZSBTaWxpY29uIExhYnMgV0YyMDAgV2ktRmkgZHJpdmVyIChkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4KSwgd2hpY2ggb3BlcmF0ZXMgb3ZlciBTUEkgb3IgU0RJTyBidXNlcyBhbmQgcmVxdWlyZXMgcGh5c2ljYWwgU2lsaWNvbiBMYWJzIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoc3VjaCBhcyBRRU1VL0dDRSkuIENvbnNlcXVlbnRseSwgdGhlc2UgcHJvYmUgYW5kIHJlbGVhc2UgcGF0aHMgYXJlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAzOjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMzoxMzoxNC4zMjIyODI0MDNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTA2ODQ4NzQxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIG1vZGlmaWVkIGNvZGUgaXMgaW4gdGhlIFNpbGljb24gTGFicyBXRjIwMCBXaS1GaSBkcml2ZXIgKGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngpLCB3aGljaCBvcGVyYXRlcyBvdmVyIFNQSSBvciBTRElPIGJ1c2VzIGFuZCByZXF1aXJlcyBwaHlzaWNhbCBTaWxpY29uIExhYnMgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChzdWNoIGFzIFFFTVUvR0NFKS4gQ29uc2VxdWVudGx5LCB0aGVzZSBwcm9iZSBhbmQgcmVsZWFzZSBwYXRocyBhcmUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDM6MTM6MTQuMzIyMjg5NTMyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDI2OTIyODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzNDliZGQwZWQ2NjIzNjA2ZmU0YjczY2U3YTdjMjQyZTY0NGY2N2ExXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMDM6MTM6MTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uY1xcbmluZGV4IDRlOTlmZTdlNWJiNzguLjE2ZDViNTFmNmYwM2EgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uY1xcbkBAIC00MTEsNiArNDExLDcgQEAgaW50IHdmeF9wcm9iZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldilcXG4gXFxuIFxcdGlmICh3ZGV2LVxcdTAwM2Vod19jYXBzLmxpbmtfbW9kZSA9PSBTRUNfTElOS19FTkZPUkNFRCkge1xcbiBcXHRcXHRkZXZfZXJyKHdkZXYtXFx1MDAzZWRldiwgXFxcImNoaXAgcmVxdWlyZSBzZWN1cmVfbGluaywgYnV0IGNhbid0IG5lZ290aWF0ZSBpdFxcXFxuXFxcIik7XFxuK1xcdFxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbiBcXHRcXHRnb3RvIGlycV91bnN1YnNjcmliZTtcXG4gXFx0fVxcbiBcXG5AQCAtNDg3LDYgKzQ4OCw3IEBAIGludCB3ZnhfcHJvYmUoc3RydWN0IHdmeF9kZXYgKndkZXYpXFxuIFxcdFxcdHdkZXYtXFx1MDAzZWh3YnVzX29wcy1cXHUwMDNlaXJxX3Vuc3Vic2NyaWJlKHdkZXYtXFx1MDAzZWh3YnVzX3ByaXYpO1xcbiBiaF91bnJlZ2lzdGVyOlxcbiBcXHR3ZnhfYmhfdW5yZWdpc3Rlcih3ZGV2KTtcXG4rXFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZ3ZGV2LVxcdTAwM2Vjb29saW5nX3RpbWVvdXRfd29yayk7XFxuIFxcdGRlc3Ryb3lfd29ya3F1ZXVlKHdkZXYtXFx1MDAzZWJoX3dxKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbkBAIC00OTcsNiArNDk5LDcgQEAgdm9pZCB3ZnhfcmVsZWFzZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldilcXG4gXFx0d2Z4X2hpZl9zaHV0ZG93bih3ZGV2KTtcXG4gXFx0d2Rldi1cXHUwMDNlaHdidXNfb3BzLVxcdTAwM2VpcnFfdW5zdWJzY3JpYmUod2Rldi1cXHUwMDNlaHdidXNfcHJpdik7XFxuIFxcdHdmeF9iaF91bnJlZ2lzdGVyKHdkZXYpO1xcbitcXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXFx1MDAyNndkZXYtXFx1MDAzZWNvb2xpbmdfdGltZW91dF93b3JrKTtcXG4gXFx0ZGVzdHJveV93b3JrcXVldWUod2Rldi1cXHUwMDNlYmhfd3EpO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMzoxMzoxNC45NjU3NTA3NzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMwNDI1MDAxMTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBtb2RpZmllZCBjb2RlIGlzIGluIHRoZSBTaWxpY29uIExhYnMgV0YyMDAgV2ktRmkgZHJpdmVyIChkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4KSwgd2hpY2ggb3BlcmF0ZXMgb3ZlciBTUEkgb3IgU0RJTyBidXNlcyBhbmQgcmVxdWlyZXMgcGh5c2ljYWwgU2lsaWNvbiBMYWJzIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoc3VjaCBhcyBRRU1VL0dDRSkuIENvbnNlcXVlbnRseSwgdGhlc2UgcHJvYmUgYW5kIHJlbGVhc2UgcGF0aHMgYXJlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzQ5YmRkMGVkNjYyMzYwNmZlNGI3M2NlN2E3YzI0MmU2NDRmNjdhMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDM6MTM6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jXG5pbmRleCA0ZTk5ZmU3ZTViYjc4Li4xNmQ1YjUxZjZmMDNhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jXG5AQCAtNDExLDYgKzQxMSw3IEBAIGludCB3ZnhfcHJvYmUoc3RydWN0IHdmeF9kZXYgKndkZXYpXG4gXG4gXHRpZiAod2Rldi1cdTAwM2Vod19jYXBzLmxpbmtfbW9kZSA9PSBTRUNfTElOS19FTkZPUkNFRCkge1xuIFx0XHRkZXZfZXJyKHdkZXYtXHUwMDNlZGV2LCBcImNoaXAgcmVxdWlyZSBzZWN1cmVfbGluaywgYnV0IGNhbid0IG5lZ290aWF0ZSBpdFxcblwiKTtcbitcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4gXHRcdGdvdG8gaXJxX3Vuc3Vic2NyaWJlO1xuIFx0fVxuIFxuQEAgLTQ4Nyw2ICs0ODgsNyBAQCBpbnQgd2Z4X3Byb2JlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KVxuIFx0XHR3ZGV2LVx1MDAzZWh3YnVzX29wcy1cdTAwM2VpcnFfdW5zdWJzY3JpYmUod2Rldi1cdTAwM2Vod2J1c19wcml2KTtcbiBiaF91bnJlZ2lzdGVyOlxuIFx0d2Z4X2JoX3VucmVnaXN0ZXIod2Rldik7XG4rXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2d2Rldi1cdTAwM2Vjb29saW5nX3RpbWVvdXRfd29yayk7XG4gXHRkZXN0cm95X3dvcmtxdWV1ZSh3ZGV2LVx1MDAzZWJoX3dxKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuQEAgLTQ5Nyw2ICs0OTksNyBAQCB2b2lkIHdmeF9yZWxlYXNlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KVxuIFx0d2Z4X2hpZl9zaHV0ZG93bih3ZGV2KTtcbiBcdHdkZXYtXHUwMDNlaHdidXNfb3BzLVx1MDAzZWlycV91bnN1YnNjcmliZSh3ZGV2LVx1MDAzZWh3YnVzX3ByaXYpO1xuIFx0d2Z4X2JoX3VucmVnaXN0ZXIod2Rldik7XG4rXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2d2Rldi1cdTAwM2Vjb29saW5nX3RpbWVvdXRfd29yayk7XG4gXHRkZXN0cm95X3dvcmtxdWV1ZSh3ZGV2LVx1MDAzZWJoX3dxKTtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMzoxMzoxNC45NjU3NTI4OTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDE1ODA4NDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHdmeGAgRHJpdmVyIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhpcyBwYXRjaCBhbmQgdGhlIGFzc29jaWF0ZWQgZHJpdmVyLiBUaGUgZmlsZSBtb2RpZmllZCBpcyBgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgYHdmeGAgZHJpdmVyIGl0c2VsZi4gV2hhdCBpcyBpdCwgYW5kIGNydWNpYWxseSwgd2hhdCBidXMgZG9lcyBpdCBvcGVyYXRlIG9uPyBUbyBnZXQgYSBxdWljayBoYW5kbGUgb24gdGhpcywgSSdsbCBsZXZlcmFnZSBteSB1c3VhbCB0b29sa2l0LiBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYGdyZXBwZXJgLCBidXQgaWYgdGhhdCBwcm92ZXMgdG9vIGJyb2FkLCBJJ2xsIHN3aXRjaCB0byBzb21ldGhpbmcgbW9yZSB0YXJnZXRlZCBsaWtlIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAgb3IgZXZlbiBhIHNpbXBsZSBgcmVhZC1maWxlYCBvbiByZWxldmFudCBmaWxlcyB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2AgZGlyZWN0b3J5IHRvIHBpbnBvaW50IHRoZSBkcml2ZXIncyBwdXJwb3NlIGFuZCBpdHMgYnVzIGludGVyYWN0aW9uLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dHVhbCBmb3VuZGF0aW9uIEkgbmVlZCB0byBwcm9wZXJseSBldmFsdWF0ZSB0aGUgcGF0Y2gncyBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMTgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAzOjEzOjIwLjM4MTU2NjM0MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcImJoLmNcIixcbiAgICBcImJoLmhcIixcbiAgICBcImJ1cy5oXCIsXG4gICAgXCJidXNfc2Rpby5jXCIsXG4gICAgXCJidXNfc3BpLmNcIixcbiAgICBcImRhdGFfcnguY1wiLFxuICAgIFwiZGF0YV9yeC5oXCIsXG4gICAgXCJkYXRhX3R4LmNcIixcbiAgICBcImRhdGFfdHguaFwiLFxuICAgIFwiZGVidWcuY1wiLFxuICAgIFwiZGVidWcuaFwiLFxuICAgIFwiZndpby5jXCIsXG4gICAgXCJmd2lvLmhcIixcbiAgICBcImhpZl9hcGlfY21kLmhcIixcbiAgICBcImhpZl9hcGlfZ2VuZXJhbC5oXCIsXG4gICAgXCJoaWZfYXBpX21pYi5oXCIsXG4gICAgXCJoaWZfcnguY1wiLFxuICAgIFwiaGlmX3J4LmhcIixcbiAgICBcImhpZl90eC5jXCIsXG4gICAgXCJoaWZfdHguaFwiLFxuICAgIFwiaGlmX3R4X21pYi5jXCIsXG4gICAgXCJoaWZfdHhfbWliLmhcIixcbiAgICBcImh3aW8uY1wiLFxuICAgIFwiaHdpby5oXCIsXG4gICAgXCJrZXkuY1wiLFxuICAgIFwia2V5LmhcIixcbiAgICBcIm1haW4uY1wiLFxuICAgIFwibWFpbi5oXCIsXG4gICAgXCJxdWV1ZS5jXCIsXG4gICAgXCJxdWV1ZS5oXCIsXG4gICAgXCJzY2FuLmNcIixcbiAgICBcInNjYW4uaFwiLFxuICAgIFwic3RhLmNcIixcbiAgICBcInN0YS5oXCIsXG4gICAgXCJ0cmFjZXMuaFwiLFxuICAgIFwid2Z4LmhcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogbnVsbFxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDM6MTM6MjAuMzgxNjY2NzAxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc0ODk2MTUwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgU2lsaWNvbiBMYWJzIFdpLUZpIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIFNpbGljb24gTGFicyBXaS1GaSBkcml2ZXIsIHNwZWNpZmljYWxseSBpbiB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYCBkaXJlY3RvcnkuIE15IGluaXRpYWwgc3RlcCBoZXJlIGlzIHByZXR0eSBzdGFuZGFyZDogSSBuZWVkIHRvIHZlcmlmeSBob3cgdGhpcyBkcml2ZXIgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGJ1aWxkIHN5c3RlbS4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBLY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgSSBjYW4gZmluZCBhbGwgdGhlIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGRlZmF1bHQgc2V0dGluZ3MgdGhhdCBkZXRlcm1pbmUgd2hldGhlciB0aGlzIGRyaXZlciwgYW5kIHNwZWNpZmljIGZlYXR1cmVzIHdpdGhpbiBpdCwgd2lsbCBiZSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29udHJvbHMgaXRzIGluY2x1c2lvbiBhbmQgcG90ZW50aWFsbHkgYW55IGJ1aWxkLXRpbWUgZGVjaXNpb25zIHRoYXQgYWZmZWN0IHRoZSBkcml2ZXIncyBiZWhhdmlvci4gVGhpcyBgS2NvbmZpZ2AgZmlsZSBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIGNvbXBpbGUtdGltZSBmb290cHJpbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MTQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImNvZGVzZWFyY2gtZGlyLWluZGV4Il19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDM6MTM6MjMuMTMwNjMyNjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkyNDkzODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiV0ZYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFic1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvTWFrZWZpbGUtMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvTWFrZWZpbGU6MzpvYmotJChDT05GSUdfV0ZYKSAgICAgICs9IHdmeC9cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvS2NvbmZpZzoyOmNvbmZpZyBXRlhcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiU2lsaWNvbiBMYWJzIHdpcmVsZXNzIGNoaXBzIFdGMjAwIGFuZCBmdXJ0aGVyXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvS2NvbmZpZy00LVxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L0tjb25maWc6NTpcXHRkZXBlbmRzIG9uIE1NQyB8fCAhTU1DICMgZG8gbm90IGFsbG93IFdGWD15IGlmIE1NQz1tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9LY29uZmlnLTYtXFx0ZGVwZW5kcyBvbiAoU1BJIHx8IE1NQylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvTWFrZWZpbGU9MjM9d2Z4LSQoc3Vic3QgbSx5LCQoQ09ORklHX01NQykpICs9IGJ1c19zZGlvLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L01ha2VmaWxlLTI0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX1dGWCkgKz0gd2Z4Lm9cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYmguaC03LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYmguaDo4OiNpZm5kZWYgV0ZYX0JIX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2JoLmg6OTojZGVmaW5lIFdGWF9CSF9IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9iaC5oLTEwLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXMuaC03LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzLmg6ODojaWZuZGVmIFdGWF9CVVNfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzLmg6OTojZGVmaW5lIFdGWF9CVVNfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzLmgtMTAtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1cy5oLTEzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzLmg6MTQ6I2RlZmluZSBXRlhfUkVHX0NPTkZJRyAgICAgICAgMHgwXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXMuaDoxNTojZGVmaW5lIFdGWF9SRUdfQ09OVFJPTCAgICAgICAweDFcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1cy5oOjE2OiNkZWZpbmUgV0ZYX1JFR19JTl9PVVRfUVVFVUUgIDB4MlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzLmg6MTc6I2RlZmluZSBXRlhfUkVHX0FIQl9EUE9SVCAgICAgMHgzXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXMuaDoxODojZGVmaW5lIFdGWF9SRUdfQkFTRV9BRERSICAgICAweDRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1cy5oOjE5OiNkZWZpbmUgV0ZYX1JFR19TUkFNX0RQT1JUICAgIDB4NVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzLmg6MjA6I2RlZmluZSBXRlhfUkVHX1NFVF9HRU5fUl9XICAgMHg2XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXMuaDoyMTojZGVmaW5lIFdGWF9SRUdfRlJBTUVfT1VUICAgICAweDdcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1cy5oLTIyLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc2Rpby5jPTUzPXN0YXRpYyBpbnQgd2Z4X3NkaW9fY29weV9mcm9tX2lvKHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCByZWdfaWQsIHZvaWQgKmRzdCwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc2Rpby5jLTYzLVxcdC8qIFVzZSBxdWV1ZSBtb2RlIGJ1ZmZlcnMgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmM6NjQ6XFx0aWYgKHJlZ19pZCA9PSBXRlhfUkVHX0lOX09VVF9RVUVVRSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmMtNjUtXFx0XFx0c2Rpb19hZGRyIHw9IChidXMtXFx1MDAzZWJ1Zl9pZF9yeCArIDEpIFxcdTAwM2NcXHUwMDNjIDc7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc2Rpby5jLTY2LVxcdHJldCA9IHNkaW9fbWVtY3B5X2Zyb21pbyhidXMtXFx1MDAzZWZ1bmMsIGRzdCwgc2Rpb19hZGRyLCBjb3VudCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc2Rpby5jOjY3OlxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IHJlZ19pZCA9PSBXRlhfUkVHX0lOX09VVF9RVUVVRSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmMtNjgtXFx0XFx0YnVzLVxcdTAwM2VidWZfaWRfcnggPSAoYnVzLVxcdTAwM2VidWZfaWRfcnggKyAxKSAlIDQ7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmM9NzM9c3RhdGljIGludCB3Znhfc2Rpb19jb3B5X3RvX2lvKHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCByZWdfaWQsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc2Rpby5jLTgzLVxcdC8qIFVzZSBxdWV1ZSBtb2RlIGJ1ZmZlcnMgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmM6ODQ6XFx0aWYgKHJlZ19pZCA9PSBXRlhfUkVHX0lOX09VVF9RVUVVRSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmMtODUtXFx0XFx0c2Rpb19hZGRyIHw9IGJ1cy1cXHUwMDNlYnVmX2lkX3R4IFxcdTAwM2NcXHUwMDNjIDc7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmMtODctXFx0cmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhidXMtXFx1MDAzZWZ1bmMsIHNkaW9fYWRkciwgKHZvaWQgKilzcmMsIGNvdW50KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmM6ODg6XFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgcmVnX2lkID09IFdGWF9SRUdfSU5fT1VUX1FVRVVFKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NkaW8uYy04OS1cXHRcXHRidXMtXFx1MDAzZWJ1Zl9pZF90eCA9IChidXMtXFx1MDAzZWJ1Zl9pZF90eCArIDEpICUgMzI7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zcGkuYz02NT1zdGF0aWMgaW50IHdmeF9zcGlfY29weV9mcm9tX2lvKHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBhZGRyLCB2b2lkICpkc3QsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NwaS5jLTkxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NwaS5jOjkyOlxcdGlmIChidXMtXFx1MDAzZW5lZWRfc3dhYiBcXHUwMDI2XFx1MDAyNiBhZGRyID09IFdGWF9SRUdfQ09ORklHKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NwaS5jLTkzLVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjb3VudCAvIDI7IGkrKylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NwaS5jPTk4PXN0YXRpYyBpbnQgd2Z4X3NwaV9jb3B5X3RvX2lvKHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBhZGRyLCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NwaS5jLTEyNC1cXHRcXHRzd2FiMTZzKFxcdTAwMjZyZWdhZGRyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zcGkuYzoxMjU6XFx0aWYgKGJ1cy1cXHUwMDNlbmVlZF9zd2FiIFxcdTAwMjZcXHUwMDI2IGFkZHIgPT0gV0ZYX1JFR19DT05GSUcpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc3BpLmMtMTI2LVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjb3VudCAvIDI7IGkrKylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NwaS5jLTEzMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zcGkuYzoxMzQ6XFx0aWYgKGJ1cy1cXHUwMDNlbmVlZF9zd2FiIFxcdTAwMjZcXHUwMDI2IGFkZHIgPT0gV0ZYX1JFR19DT05GSUcpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc3BpLmMtMTM1LVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjb3VudCAvIDI7IGkrKylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZGF0YV9yeC5oLTctICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9kYXRhX3J4Lmg6ODojaWZuZGVmIFdGWF9EQVRBX1JYX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2RhdGFfcnguaDo5OiNkZWZpbmUgV0ZYX0RBVEFfUlhfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZGF0YV9yeC5oLTEwLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9kYXRhX3R4LmgtNy0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2RhdGFfdHguaDo4OiNpZm5kZWYgV0ZYX0RBVEFfVFhfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZGF0YV90eC5oOjk6I2RlZmluZSBXRlhfREFUQV9UWF9IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9kYXRhX3R4LmgtMTAtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2RlYnVnLmgtNy0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2RlYnVnLmg6ODojaWZuZGVmIFdGWF9ERUJVR19IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9kZWJ1Zy5oOjk6I2RlZmluZSBXRlhfREVCVUdfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZGVidWcuaC0xMC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTE4LS8qIEFkZHJlc3NlcyBiZWxvdyBhcmUgaW4gU1JBTSBhcmVhICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6MTk6I2RlZmluZSBXRlhfRE5MRF9GSUZPICAgICAgICAgICAgIDB4MDkwMDQwMDBcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yMC0jZGVmaW5lICAgICBETkxEX0JMT0NLX1NJWkUgICAgICAgICAgIDB4MDQwMFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMjItLyogRG93bmxvYWQgQ29udHJvbCBBcmVhIChEQ0EpICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6MjM6I2RlZmluZSBXRlhfRENBX0lNQUdFX1NJWkUgICAgICAgIDB4MDkwMEMwMDBcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzoyNDojZGVmaW5lIFdGWF9EQ0FfUFVUICAgICAgICAgICAgICAgMHgwOTAwQzAwNFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjI1OiNkZWZpbmUgV0ZYX0RDQV9HRVQgICAgICAgICAgICAgICAweDA5MDBDMDA4XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6MjY6I2RlZmluZSBXRlhfRENBX0hPU1RfU1RBVFVTICAgICAgIDB4MDkwMEMwMENcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yNy0jZGVmaW5lICAgICBIT1NUX1JFQURZICAgICAgICAgICAgICAgIDB4ODc2NTQzMjFcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTMxLSNkZWZpbmUgICAgIEhPU1RfT0tfVE9fSlVNUCAgICAgICAgICAgMHgxNzRGQzg4MlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjMyOiNkZWZpbmUgV0ZYX0RDQV9OQ1BfU1RBVFVTICAgICAgICAweDA5MDBDMDEwXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMzMtI2RlZmluZSAgICAgTkNQX05PVF9SRUFEWSAgICAgICAgICAgICAweDEyMzQ1Njc4XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy00MC0jZGVmaW5lICAgICBOQ1BfUFVCX0tFWV9SRFkgICAgICAgICAgIDB4N0FCNDFEMTlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzo0MTojZGVmaW5lIFdGWF9EQ0FfRldfU0lHTkFUVVJFICAgICAgMHgwOTAwQzAxNFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTQyLSNkZWZpbmUgICAgIEZXX1NJR05BVFVSRV9TSVpFICAgICAgICAgMHg0MFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjQzOiNkZWZpbmUgV0ZYX0RDQV9GV19IQVNIICAgICAgICAgICAweDA5MDBDMDU0XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtNDQtI2RlZmluZSAgICAgRldfSEFTSF9TSVpFICAgICAgICAgICAgICAweDA4XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6NDU6I2RlZmluZSBXRlhfRENBX0ZXX1ZFUlNJT04gICAgICAgIDB4MDkwMEMwNUNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy00Ni0jZGVmaW5lICAgICBGV19WRVJTSU9OX1NJWkUgICAgICAgICAgIDB4MDRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzo0NzojZGVmaW5lIFdGWF9EQ0FfUkVTRVJWRUQgICAgICAgICAgMHgwOTAwQzA2MFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTQ4LSNkZWZpbmUgICAgIERDQV9SRVNFUlZFRF9TSVpFICAgICAgICAgMHgyMFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjQ5OiNkZWZpbmUgV0ZYX1NUQVRVU19JTkZPICAgICAgICAgICAweDA5MDBDMDgwXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6NTA6I2RlZmluZSBXRlhfQk9PVExPQURFUl9MQUJFTCAgICAgIDB4MDkwMEMwODRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy01MS0jZGVmaW5lICAgICBCT09UTE9BREVSX0xBQkVMX1NJWkUgICAgIDB4M0NcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzo1MjojZGVmaW5lIFdGWF9QVEVfSU5GTyAgICAgICAgICAgICAgMHgwOTAwQzBDMFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTUzLSNkZWZpbmUgICAgIFBURV9JTkZPX0tFWVNFVF9JRFggICAgICAgMHgwRFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTU0LSNkZWZpbmUgICAgIFBURV9JTkZPX1NJWkUgICAgICAgICAgICAgMHgxMFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjU1OiNkZWZpbmUgV0ZYX0VSUl9JTkZPICAgICAgICAgICAgICAweDA5MDBDMEQwXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtNTYtI2RlZmluZSAgICAgRVJSX0lOVkFMSURfU0VDX1RZUEUgICAgICAweDA1XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYz0xNDg9c3RhdGljIGludCB3YWl0X25jcF9zdGF0dXMoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiBzdGF0dXMpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0xNTUtXFx0Zm9yICg7Oykge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjE1NjpcXHRcXHRyZXQgPSB3Znhfc3JhbV9yZWdfcmVhZCh3ZGV2LCBXRlhfRENBX05DUF9TVEFUVVMsIFxcdTAwMjZyZWcpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTE1Ny1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jPTE3Mj1zdGF0aWMgaW50IHVwbG9hZF9maXJtd2FyZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgY29uc3QgdTggKmRhdGEsIHNpemVfdCBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0xOTAtXFx0XFx0XFx0XFx0cmV0dXJuIC1FVElNRURPVVQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6MTkxOlxcdFxcdFxcdHJldCA9IHdmeF9zcmFtX3JlZ19yZWFkKHdkZXYsIFdGWF9EQ0FfR0VULCBcXHUwMDI2Ynl0ZXNfZG9uZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMTkyLVxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMTk3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjE5ODpcXHRcXHRyZXQgPSB3Znhfc3JhbV93cml0ZV9kbWFfc2FmZSh3ZGV2LCBXRlhfRE5MRF9GSUZPICsgKG9mZnMgJSBETkxEX0ZJRk9fU0laRSksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMTk5LVxcdFxcdFxcdFxcdFxcdCAgICAgIGRhdGEgKyBvZmZzLCBETkxEX0JMT0NLX1NJWkUpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMjA0LVxcdFxcdG9mZnMgKz0gRE5MRF9CTE9DS19TSVpFO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjIwNTpcXHRcXHRyZXQgPSB3Znhfc3JhbV9yZWdfd3JpdGUod2RldiwgV0ZYX0RDQV9QVVQsIG9mZnMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTIwNi1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jPTIxMj1zdGF0aWMgdm9pZCBwcmludF9ib290X3N0YXR1cyhzdHJ1Y3Qgd2Z4X2RldiAqd2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTIxNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzoyMTY6XFx0d2Z4X3NyYW1fcmVnX3JlYWQod2RldiwgV0ZYX1NUQVRVU19JTkZPLCBcXHUwMDI2cmVnKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yMTctXFx0aWYgKHJlZyA9PSAweDEyMzQ1Njc4KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTIxOC1cXHRcXHRyZXR1cm47XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6MjE5OlxcdHdmeF9zcmFtX3JlZ19yZWFkKHdkZXYsIFdGWF9FUlJfSU5GTywgXFx1MDAyNnJlZyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMjIwLVxcdGlmIChyZWcgXFx1MDAzYyBBUlJBWV9TSVpFKGZ3aW9fZXJyb3JzKSBcXHUwMDI2XFx1MDAyNiBmd2lvX2Vycm9yc1tyZWddKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM9MjI2PXN0YXRpYyBpbnQgbG9hZF9maXJtd2FyZV9zZWN1cmUoc3RydWN0IHdmeF9kZXYgKndkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yMzktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6MjQwOlxcdHdmeF9zcmFtX3JlZ193cml0ZSh3ZGV2LCBXRlhfRENBX0hPU1RfU1RBVFVTLCBIT1NUX1JFQURZKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yNDEtXFx0cmV0ID0gd2FpdF9uY3Bfc3RhdHVzKHdkZXYsIE5DUF9JTkZPX1JFQURZKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTI0NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzoyNDU6XFx0d2Z4X3NyYW1fYnVmX3JlYWQod2RldiwgV0ZYX0JPT1RMT0FERVJfTEFCRUwsIGJ1ZiwgQk9PVExPQURFUl9MQUJFTF9TSVpFKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yNDYtXFx0YnVmW0JPT1RMT0FERVJfTEFCRUxfU0laRV0gPSAwO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMjQ4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjI0OTpcXHR3Znhfc3JhbV9idWZfcmVhZCh3ZGV2LCBXRlhfUFRFX0lORk8sIGJ1ZiwgUFRFX0lORk9fU0laRSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMjUwLVxcdHJldCA9IGdldF9maXJtd2FyZSh3ZGV2LCBidWZbUFRFX0lORk9fS0VZU0VUX0lEWF0sIFxcdTAwMjZmdywgXFx1MDAyNmZ3X29mZnNldCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yNTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6MjU1OlxcdHdmeF9zcmFtX3JlZ193cml0ZSh3ZGV2LCBXRlhfRENBX0hPU1RfU1RBVFVTLCBIT1NUX0lORk9fUkVBRCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMjU2LVxcdHJldCA9IHdhaXRfbmNwX3N0YXR1cyh3ZGV2LCBOQ1BfUkVBRFkpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmMtMjU5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjI2MDpcXHR3Znhfc3JhbV9yZWdfd3JpdGUod2RldiwgV0ZYX0ROTERfRklGTywgMHhGRkZGRkZGRik7IC8qIEZpZm8gaW5pdCAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjI2MTpcXHR3Znhfc3JhbV93cml0ZV9kbWFfc2FmZSh3ZGV2LCBXRlhfRENBX0ZXX1ZFUlNJT04sIFxcXCJcXFxceDAxXFxcXHgwMFxcXFx4MDBcXFxceDAwXFxcIiwgRldfVkVSU0lPTl9TSVpFKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzoyNjI6XFx0d2Z4X3NyYW1fd3JpdGVfZG1hX3NhZmUod2RldiwgV0ZYX0RDQV9GV19TSUdOQVRVUkUsIGZ3LVxcdTAwM2VkYXRhICsgZndfb2Zmc2V0LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTI2My1cXHRcXHRcXHRcXHRGV19TSUdOQVRVUkVfU0laRSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6MjY0OlxcdHdmeF9zcmFtX3dyaXRlX2RtYV9zYWZlKHdkZXYsIFdGWF9EQ0FfRldfSEFTSCwgZnctXFx1MDAzZWRhdGEgKyBmd19vZmZzZXQgKyBGV19TSUdOQVRVUkVfU0laRSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yNjUtXFx0XFx0XFx0XFx0RldfSEFTSF9TSVpFKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzoyNjY6XFx0d2Z4X3NyYW1fcmVnX3dyaXRlKHdkZXYsIFdGWF9EQ0FfSU1BR0VfU0laRSwgZnctXFx1MDAzZXNpemUgLSBoZWFkZXJfc2l6ZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmM6MjY3OlxcdHdmeF9zcmFtX3JlZ193cml0ZSh3ZGV2LCBXRlhfRENBX0hPU1RfU1RBVFVTLCBIT1NUX1VQTE9BRF9QRU5ESU5HKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yNjgtXFx0cmV0ID0gd2FpdF9uY3Bfc3RhdHVzKHdkZXYsIE5DUF9ET1dOTE9BRF9QRU5ESU5HKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTI3OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYzoyNzk6XFx0d2Z4X3NyYW1fcmVnX3dyaXRlKHdkZXYsIFdGWF9EQ0FfSE9TVF9TVEFUVVMsIEhPU1RfVVBMT0FEX0NPTVBMRVRFKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yODAtXFx0cmV0ID0gd2FpdF9uY3Bfc3RhdHVzKHdkZXYsIE5DUF9BVVRIX09LKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jLTI4NS1cXHRcXHRnb3RvIGVycm9yO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5jOjI4NjpcXHR3Znhfc3JhbV9yZWdfd3JpdGUod2RldiwgV0ZYX0RDQV9IT1NUX1NUQVRVUywgSE9TVF9PS19UT19KVU1QKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uYy0yODctXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uaC03LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvZndpby5oOjg6I2lmbmRlZiBXRlhfRldJT19IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9md2lvLmg6OTojZGVmaW5lIFdGWF9GV0lPX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2Z3aW8uaC0xMC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX2FwaV9jbWQuaC03LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX2FwaV9jbWQuaDo4OiNpZm5kZWYgV0ZYX0hJRl9BUElfQ01EX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl9hcGlfY21kLmg6OTojZGVmaW5lIFdGWF9ISUZfQVBJX0NNRF9IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfYXBpX2NtZC5oLTEwLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfYXBpX2dlbmVyYWwuaC03LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX2FwaV9nZW5lcmFsLmg6ODojaWZuZGVmIFdGWF9ISUZfQVBJX0dFTkVSQUxfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX2FwaV9nZW5lcmFsLmg6OTojZGVmaW5lIFdGWF9ISUZfQVBJX0dFTkVSQUxfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX2FwaV9nZW5lcmFsLmgtMTAtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl9hcGlfbWliLmgtNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl9hcGlfbWliLmg6ODojaWZuZGVmIFdGWF9ISUZfQVBJX01JQl9IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfYXBpX21pYi5oOjk6I2RlZmluZSBXRlhfSElGX0FQSV9NSUJfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX2FwaV9taWIuaC0xMC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX3J4LmgtOC0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl9yeC5oOjk6I2lmbmRlZiBXRlhfSElGX1JYX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl9yeC5oOjEwOiNkZWZpbmUgV0ZYX0hJRl9SWF9IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfcnguaC0xMS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX3R4LmgtOS0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl90eC5oOjEwOiNpZm5kZWYgV0ZYX0hJRl9UWF9IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfdHguaDoxMTojZGVmaW5lIFdGWF9ISUZfVFhfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX3R4LmgtMTItXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl90eF9taWIuaC04LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX3R4X21pYi5oOjk6I2lmbmRlZiBXRlhfSElGX1RYX01JQl9IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfdHhfbWliLmg6MTA6I2RlZmluZSBXRlhfSElGX1RYX01JQl9IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfdHhfbWliLmgtMTEtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0xNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoxODojZGVmaW5lIFdGWF9ISUZfQlVGRkVSX1NJWkUgMHgyMDAwXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMTktXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYz05Nj1zdGF0aWMgaW50IHdmeF9pbmRpcmVjdF9yZWFkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgcmVnLCB1MzIgYWRkciwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMTAyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjEwMzpcXHRXQVJOX09OKGxlbiBcXHUwMDNlPSBXRlhfSElGX0JVRkZFUl9TSVpFKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoxMDQ6XFx0V0FSTl9PTihyZWcgIT0gV0ZYX1JFR19BSEJfRFBPUlQgXFx1MDAyNlxcdTAwMjYgcmVnICE9IFdGWF9SRUdfU1JBTV9EUE9SVCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMTA1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjEwNjpcXHRpZiAocmVnID09IFdGWF9SRUdfQUhCX0RQT1JUKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTEwNy1cXHRcXHRwcmVmZXRjaCA9IENGR19QUkVGRVRDSF9BSEI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MTA4OlxcdGVsc2UgaWYgKHJlZyA9PSBXRlhfUkVHX1NSQU1fRFBPUlQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMTA5LVxcdFxcdHByZWZldGNoID0gQ0ZHX1BSRUZFVENIX1NSQU07XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0xMTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MTEzOlxcdHJldCA9IHdmeF93cml0ZTMyKHdkZXYsIFdGWF9SRUdfQkFTRV9BRERSLCBhZGRyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0xMTQtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0xMTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MTE3OlxcdHJldCA9IHdmeF9yZWFkMzIod2RldiwgV0ZYX1JFR19DT05GSUcsIFxcdTAwMjZjZmcpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTExOC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTEyMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoxMjE6XFx0cmV0ID0gd2Z4X3dyaXRlMzIod2RldiwgV0ZYX1JFR19DT05GSUcsIGNmZyB8IHByZWZldGNoKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0xMjItXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0xMjUtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDIwOyBpKyspIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoxMjY6XFx0XFx0cmV0ID0gd2Z4X3JlYWQzMih3ZGV2LCBXRlhfUkVHX0NPTkZJRywgXFx1MDAyNmNmZyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMTI3LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM9MTQ2PXN0YXRpYyBpbnQgd2Z4X2luZGlyZWN0X3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgcmVnLCB1MzIgYWRkcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTE1MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoxNTE6XFx0V0FSTl9PTihsZW4gXFx1MDAzZT0gV0ZYX0hJRl9CVUZGRVJfU0laRSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MTUyOlxcdFdBUk5fT04ocmVnICE9IFdGWF9SRUdfQUhCX0RQT1JUIFxcdTAwMjZcXHUwMDI2IHJlZyAhPSBXRlhfUkVHX1NSQU1fRFBPUlQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjE1MzpcXHRyZXQgPSB3Znhfd3JpdGUzMih3ZGV2LCBXRlhfUkVHX0JBU0VfQUREUiwgYWRkcik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMTU0LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM9MjE2PWludCB3ZnhfZGF0YV9yZWFkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB2b2lkICpidWYsIHNpemVfdCBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yMjEtXFx0d2Rldi1cXHUwMDNlaHdidXNfb3BzLVxcdTAwM2Vsb2NrKHdkZXYtXFx1MDAzZWh3YnVzX3ByaXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjIyMjpcXHRyZXQgPSB3ZGV2LVxcdTAwM2Vod2J1c19vcHMtXFx1MDAzZWNvcHlfZnJvbV9pbyh3ZGV2LVxcdTAwM2Vod2J1c19wcml2LCBXRlhfUkVHX0lOX09VVF9RVUVVRSwgYnVmLCBsZW4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjIyMzpcXHRfdHJhY2VfaW9fcmVhZChXRlhfUkVHX0lOX09VVF9RVUVVRSwgYnVmLCBsZW4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTIyNC1cXHR3ZGV2LVxcdTAwM2Vod2J1c19vcHMtXFx1MDAzZXVubG9jayh3ZGV2LVxcdTAwM2Vod2J1c19wcml2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTIzMD1pbnQgd2Z4X2RhdGFfd3JpdGUoc3RydWN0IHdmeF9kZXYgKndkZXYsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTIzNS1cXHR3ZGV2LVxcdTAwM2Vod2J1c19vcHMtXFx1MDAzZWxvY2sod2Rldi1cXHUwMDNlaHdidXNfcHJpdik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MjM2OlxcdHJldCA9IHdkZXYtXFx1MDAzZWh3YnVzX29wcy1cXHUwMDNlY29weV90b19pbyh3ZGV2LVxcdTAwM2Vod2J1c19wcml2LCBXRlhfUkVHX0lOX09VVF9RVUVVRSwgYnVmLCBsZW4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjIzNzpcXHRfdHJhY2VfaW9fd3JpdGUoV0ZYX1JFR19JTl9PVVRfUVVFVUUsIGJ1ZiwgbGVuKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yMzgtXFx0d2Rldi1cXHUwMDNlaHdidXNfb3BzLVxcdTAwM2V1bmxvY2sod2Rldi1cXHUwMDNlaHdidXNfcHJpdik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYz0yNDQ9aW50IHdmeF9zcmFtX2J1Zl9yZWFkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgYWRkciwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTI0NS17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MjQ2OlxcdHJldHVybiB3ZnhfaW5kaXJlY3RfcmVhZF9sb2NrZWQod2RldiwgV0ZYX1JFR19TUkFNX0RQT1JULCBhZGRyLCBidWYsIGxlbik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMjQ3LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTI0OT1pbnQgd2Z4X2FoYl9idWZfcmVhZChzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yNTAte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjI1MTpcXHRyZXR1cm4gd2Z4X2luZGlyZWN0X3JlYWRfbG9ja2VkKHdkZXYsIFdGWF9SRUdfQUhCX0RQT1JULCBhZGRyLCBidWYsIGxlbik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMjUyLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTI1ND1pbnQgd2Z4X3NyYW1fYnVmX3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgYWRkciwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTI1NS17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MjU2OlxcdHJldHVybiB3ZnhfaW5kaXJlY3Rfd3JpdGVfbG9ja2VkKHdkZXYsIFdGWF9SRUdfU1JBTV9EUE9SVCwgYWRkciwgYnVmLCBsZW4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTI1Ny19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYz0yNTk9aW50IHdmeF9haGJfYnVmX3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgYWRkciwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTI2MC17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MjYxOlxcdHJldHVybiB3ZnhfaW5kaXJlY3Rfd3JpdGVfbG9ja2VkKHdkZXYsIFdGWF9SRUdfQUhCX0RQT1JULCBhZGRyLCBidWYsIGxlbik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMjYyLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTI2ND1pbnQgd2Z4X3NyYW1fcmVnX3JlYWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiBhZGRyLCB1MzIgKnZhbClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yNjUte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjI2NjpcXHRyZXR1cm4gd2Z4X2luZGlyZWN0X3JlYWQzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19TUkFNX0RQT1JULCBhZGRyLCB2YWwpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTI2Ny19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYz0yNjk9aW50IHdmeF9haGJfcmVnX3JlYWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiBhZGRyLCB1MzIgKnZhbClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yNzAte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjI3MTpcXHRyZXR1cm4gd2Z4X2luZGlyZWN0X3JlYWQzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19BSEJfRFBPUlQsIGFkZHIsIHZhbCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMjcyLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTI3ND1pbnQgd2Z4X3NyYW1fcmVnX3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgYWRkciwgdTMyIHZhbClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yNzUte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjI3NjpcXHRyZXR1cm4gd2Z4X2luZGlyZWN0X3dyaXRlMzJfbG9ja2VkKHdkZXYsIFdGWF9SRUdfU1JBTV9EUE9SVCwgYWRkciwgdmFsKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yNzctfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM9Mjc5PWludCB3ZnhfYWhiX3JlZ193cml0ZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIGFkZHIsIHUzMiB2YWwpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMjgwLXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoyODE6XFx0cmV0dXJuIHdmeF9pbmRpcmVjdF93cml0ZTMyX2xvY2tlZCh3ZGV2LCBXRlhfUkVHX0FIQl9EUE9SVCwgYWRkciwgdmFsKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yODItfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM9Mjg0PWludCB3ZnhfY29uZmlnX3JlZ19yZWFkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgKnZhbClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yODUte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjI4NjpcXHRyZXR1cm4gd2Z4X3JlYWQzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19DT05GSUcsIHZhbCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMjg3LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTI4OT1pbnQgd2Z4X2NvbmZpZ19yZWdfd3JpdGUoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiB2YWwpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMjkwLXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzoyOTE6XFx0cmV0dXJuIHdmeF93cml0ZTMyX2xvY2tlZCh3ZGV2LCBXRlhfUkVHX0NPTkZJRywgdmFsKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yOTItfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM9Mjk0PWludCB3ZnhfY29uZmlnX3JlZ193cml0ZV9iaXRzKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgbWFzaywgdTMyIHZhbClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0yOTUte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjI5NjpcXHRyZXR1cm4gd2Z4X3dyaXRlMzJfYml0c19sb2NrZWQod2RldiwgV0ZYX1JFR19DT05GSUcsIG1hc2ssIHZhbCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMjk3LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTI5OT1pbnQgd2Z4X2NvbnRyb2xfcmVnX3JlYWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiAqdmFsKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTMwMC17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MzAxOlxcdHJldHVybiB3ZnhfcmVhZDMyX2xvY2tlZCh3ZGV2LCBXRlhfUkVHX0NPTlRST0wsIHZhbCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMzAyLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTMwND1pbnQgd2Z4X2NvbnRyb2xfcmVnX3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgdmFsKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTMwNS17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmM6MzA2OlxcdHJldHVybiB3Znhfd3JpdGUzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19DT05UUk9MLCB2YWwpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTMwNy19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYz0zMDk9aW50IHdmeF9jb250cm9sX3JlZ193cml0ZV9iaXRzKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgbWFzaywgdTMyIHZhbClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0zMTAte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjMxMTpcXHRyZXR1cm4gd2Z4X3dyaXRlMzJfYml0c19sb2NrZWQod2RldiwgV0ZYX1JFR19DT05UUk9MLCBtYXNrLCB2YWwpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jLTMxMi19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYz0zMTQ9aW50IHdmeF9pZ3ByX3JlZ19yZWFkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgaW5kZXgsIHUzMiAqdmFsKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMzE4LVxcdCp2YWwgPSB+MDsgLyogTmV2ZXIgcmV0dXJuIHVuZGVmaW5lZCB2YWx1ZSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jOjMxOTpcXHRyZXQgPSB3Znhfd3JpdGUzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19TRVRfR0VOX1JfVywgSUdQUl9SVyB8IGluZGV4IFxcdTAwM2NcXHUwMDNjIDI0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0zMjAtXFx0aWYgKHJldClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0zMjEtXFx0XFx0cmV0dXJuIHJldDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzozMjI6XFx0cmV0ID0gd2Z4X3JlYWQzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19TRVRfR0VOX1JfVywgdmFsKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYy0zMjMtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5jPTMyOT1pbnQgd2Z4X2lncHJfcmVnX3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgaW5kZXgsIHUzMiB2YWwpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMzMwLXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uYzozMzE6XFx0cmV0dXJuIHdmeF93cml0ZTMyX2xvY2tlZCh3ZGV2LCBXRlhfUkVHX1NFVF9HRU5fUl9XLCBpbmRleCBcXHUwMDNjXFx1MDAzYyAyNCB8IHZhbCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmMtMzMyLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5oLTctICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9od2lvLmg6ODojaWZuZGVmIFdGWF9IV0lPX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2h3aW8uaDo5OiNkZWZpbmUgV0ZYX0hXSU9fSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaHdpby5oLTEwLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9rZXkuaC03LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngva2V5Lmg6ODojaWZuZGVmIFdGWF9LRVlfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngva2V5Lmg6OTojZGVmaW5lIFdGWF9LRVlfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngva2V5LmgtMTAtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYy0zNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYzozNjojZGVmaW5lIFdGWF9QRFNfVExWX1RZUEUgMHg0NDUwIC8vIFxcXCJQRFxcXCIgKFBsYXRmb3JtIERhdGEpIGluIGFzY2lpIGxpdHRsZS1lbmRpYW5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYzozNzojZGVmaW5lIFdGWF9QRFNfTUFYX0NIVU5LX1NJWkUgMTUwMFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jLTM4LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmM9MTg3PWludCB3Znhfc2VuZF9wZHMoc3RydWN0IHdmeF9kZXYgKndkZXYsIHU4ICpidWYsIHNpemVfdCBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYy0yMDEtXFx0XFx0fVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jOjIwMjpcXHRcXHRpZiAoY2h1bmtfdHlwZSAhPSBXRlhfUERTX1RMVl9UWVBFKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmMtMjAzLVxcdFxcdFxcdGRldl9pbmZvKHdkZXYtXFx1MDAzZWRldiwgXFxcIlBEUzolZDogc2tpcCB1bmtub3duIGRhdGFcXFxcblxcXCIsIGNodW5rX251bSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYy0yMDUtXFx0XFx0fVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jOjIwNjpcXHRcXHRpZiAoY2h1bmtfbGVuIFxcdTAwM2UgV0ZYX1BEU19NQVhfQ0hVTktfU0laRSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYy0yMDctXFx0XFx0XFx0ZGV2X3dhcm4od2Rldi1cXHUwMDNlZGV2LCBcXFwiUERTOiVkOiB1bmV4cGVjdGVkbHkgbGFyZ2UgY2h1bmtcXFxcblxcXCIsIGNodW5rX251bSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uaC05LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5oOjEwOiNpZm5kZWYgV0ZYX01BSU5fSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5oOjExOiNkZWZpbmUgV0ZYX01BSU5fSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5oLTEyLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9xdWV1ZS5oLTctICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9xdWV1ZS5oOjg6I2lmbmRlZiBXRlhfUVVFVUVfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvcXVldWUuaDo5OiNkZWZpbmUgV0ZYX1FVRVVFX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3F1ZXVlLmgtMTAtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3NjYW4uaC03LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc2Nhbi5oOjg6I2lmbmRlZiBXRlhfU0NBTl9IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9zY2FuLmg6OTojZGVmaW5lIFdGWF9TQ0FOX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3NjYW4uaC0xMC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmgtNy0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5oOjg6I2lmbmRlZiBXRlhfU1RBX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5oOjk6I2RlZmluZSBXRlhfU1RBX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5oLTEwLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC90cmFjZXMuaC0xMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjExOiNpZiAhZGVmaW5lZChfV0ZYX1RSQUNFX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC90cmFjZXMuaDoxMjojZGVmaW5lIF9XRlhfVFJBQ0VfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvdHJhY2VzLmgtMTMtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oPTIxMz1ERUZJTkVfRVZFTlQoaGlmX2RhdGEsIGhpZl9yZWN2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC90cmFjZXMuaC0yMTktI2RlZmluZSB3ZnhfcmVnX2xpc3RfZW51bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjIyMDpcXHR3ZnhfcmVnX25hbWUoV0ZYX1JFR19DT05GSUcsICAgICAgIFxcXCJDT05GSUdcXFwiKSAgICAgIFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjIyMTpcXHR3ZnhfcmVnX25hbWUoV0ZYX1JFR19DT05UUk9MLCAgICAgIFxcXCJDT05UUk9MXFxcIikgICAgIFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjIyMjpcXHR3ZnhfcmVnX25hbWUoV0ZYX1JFR19JTl9PVVRfUVVFVUUsIFxcXCJRVUVVRVxcXCIpICAgICAgIFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjIyMzpcXHR3ZnhfcmVnX25hbWUoV0ZYX1JFR19BSEJfRFBPUlQsICAgIFxcXCJBSEJcXFwiKSAgICAgICAgIFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjIyNDpcXHR3ZnhfcmVnX25hbWUoV0ZYX1JFR19CQVNFX0FERFIsICAgIFxcXCJCQVNFX0FERFJcXFwiKSAgIFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjIyNTpcXHR3ZnhfcmVnX25hbWUoV0ZYX1JFR19TUkFNX0RQT1JULCAgIFxcXCJTUkFNXFxcIikgICAgICAgIFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjIyNjpcXHR3ZnhfcmVnX25hbWUoV0ZYX1JFR19TRVRfR0VOX1JfVywgIFxcXCJTRVRfR0VOX1JfV1xcXCIpIFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3RyYWNlcy5oOjIyNzpcXHR3ZnhfcmVnX25hbWUoV0ZYX1JFR19GUkFNRV9PVVQsICAgIFxcXCJGUkFNRV9PVVRcXFwiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvdHJhY2VzLmgtMjI4LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC93ZnguaC05LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvd2Z4Lmg6MTA6I2lmbmRlZiBXRlhfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvd2Z4Lmg6MTE6I2RlZmluZSBXRlhfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvd2Z4LmgtMTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAzOjEzOjIzLjIyOTg5MzI2OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5MTUzNDIzNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBTaWxpY29uIExhYnMgV2lyZWxlc3MgSW50ZXJmYWNlIENvZGUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGNvZGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIFNpbGljb24gTGFicyB3aXJlbGVzcyBjaGlwcywgcGFydGljdWxhcmx5IHRoZSBXRjIwMCBzZXJpZXMsIGFyZSBoYW5kbGVkIGF0IHRoZSBidXMgbGV2ZWwuIEknbSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgYGJ1c19zZGlvLmNgIGFuZCBgYnVzX3NwaS5jYC4gVGhlc2UgZmlsZXMgc2hvdWxkIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGV5IGludGVyZmFjZSB3aXRoIHRoZSBzeXN0ZW0uXG5cblJpZ2h0LCB0aGVzZSBjaGlwcyBwcmltYXJpbHkgYXR0YWNoIHZpYSBTUEkgb3IgU0RJTyAoTU1DKSwgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvciBjb25maWd1cmF0aW9uLiBTbywgbXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gaG93IHRoZSBwcm9iZSBmdW5jdGlvbnMgYW5kIGJ1cyByZWdpc3RyYXRpb24gYXJlIGltcGxlbWVudGVkIGluIGVhY2ggb2YgdGhvc2UgZmlsZXM6IGBidXNfc2Rpby5jYCBhbmQgYGJ1c19zcGkuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGRldGVjdHMgdGhlIGRldmljZSwgaW5pdGlhbGl6ZXMgdGhlIGludGVyZmFjZSwgYW5kIHJlZ2lzdGVycyBpdHNlbGYgd2l0aCB0aGUgYXBwcm9wcmlhdGUgYnVzLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBsb3ctbGV2ZWwgb3BlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTgyNiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAzOjEzOjI2LjE0NTIzODc5NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogU0RJTyBpbnRlcmZhY2UuXFxuICAgNDpcXHQgKlxcbiAgIDU6XFx0ICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuXFxuICAgNjpcXHQgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uXFxuICAgNzpcXHQgKi9cXG4gICA4OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gICA5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWMvc2Rpby5oXFx1MDAzZVxcbiAgMTA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9zZGlvX2Z1bmMuaFxcdTAwM2VcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWMvY2FyZC5oXFx1MDAzZVxcbiAgMTI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfaXJxLmhcXHUwMDNlXFxuICAxNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaXJxLmhcXHUwMDNlXFxuICAxNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYWxpZ24uaFxcdTAwM2VcXG4gIDE3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbS5oXFx1MDAzZVxcbiAgMTg6XFx0XFxuICAxOTpcXHQjaW5jbHVkZSBcXFwiYnVzLmhcXFwiXFxuICAyMDpcXHQjaW5jbHVkZSBcXFwid2Z4LmhcXFwiXFxuICAyMTpcXHQjaW5jbHVkZSBcXFwiaHdpby5oXFxcIlxcbiAgMjI6XFx0I2luY2x1ZGUgXFxcIm1haW4uaFxcXCJcXG4gIDIzOlxcdCNpbmNsdWRlIFxcXCJiaC5oXFxcIlxcbiAgMjQ6XFx0XFxuICAyNTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhIHBkYXRhX3dmMjAwID0ge1xcbiAgMjY6XFx0XFx0LmZpbGVfZncgPSBcXFwid2Z4L3dmbV93ZjIwMFxcXCIsXFxuICAyNzpcXHRcXHQuZmlsZV9wZHMgPSBcXFwid2Z4L3dmMjAwLnBkc1xcXCIsXFxuICAyODpcXHR9O1xcbiAgMjk6XFx0XFxuICAzMDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhIHBkYXRhX2JyZDQwMDFhID0ge1xcbiAgMzE6XFx0XFx0LmZpbGVfZncgPSBcXFwid2Z4L3dmbV93ZjIwMFxcXCIsXFxuICAzMjpcXHRcXHQuZmlsZV9wZHMgPSBcXFwid2Z4L2JyZDQwMDFhLnBkc1xcXCIsXFxuICAzMzpcXHR9O1xcbiAgMzQ6XFx0XFxuICAzNTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhIHBkYXRhX2JyZDgwMjJhID0ge1xcbiAgMzY6XFx0XFx0LmZpbGVfZncgPSBcXFwid2Z4L3dmbV93ZjIwMFxcXCIsXFxuICAzNzpcXHRcXHQuZmlsZV9wZHMgPSBcXFwid2Z4L2JyZDgwMjJhLnBkc1xcXCIsXFxuICAzODpcXHR9O1xcbiAgMzk6XFx0XFxuICA0MDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhIHBkYXRhX2JyZDgwMjNhID0ge1xcbiAgNDE6XFx0XFx0LmZpbGVfZncgPSBcXFwid2Z4L3dmbV93ZjIwMFxcXCIsXFxuICA0MjpcXHRcXHQuZmlsZV9wZHMgPSBcXFwid2Z4L2JyZDgwMjNhLnBkc1xcXCIsXFxuICA0MzpcXHR9O1xcbiAgNDQ6XFx0XFxuICA0NTpcXHRzdHJ1Y3Qgd2Z4X3NkaW9fcHJpdiB7XFxuICA0NjpcXHRcXHRzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jO1xcbiAgNDc6XFx0XFx0c3RydWN0IHdmeF9kZXYgKmNvcmU7XFxuICA0ODpcXHRcXHR1OCBidWZfaWRfdHg7XFxuICA0OTpcXHRcXHR1OCBidWZfaWRfcng7XFxuICA1MDpcXHRcXHRpbnQgb2ZfaXJxO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMzoxMzoyNi4xNDUzNDEzMjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzM1MTg1MzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byB0aGUgQnVzIERyaXZlcnMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZm9jdXNpbmcgb24gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIG9mIHRoaXMgZW1iZWRkZWQgc3lzdGVtLCBidXQgbm93IEkgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIHNwZWNpZmljcyBvZiBob3cgdGhlc2UgYnVzIGRyaXZlcnMgYXJlIGltcGxlbWVudGVkLiBJJ3ZlIGFscmVhZHkgZ290IGEgZ29vZCBncmFzcCBvbiB0aGUgY29uY2VwdHVhbCBmcmFtZXdvcmssIGJ1dCB1bmRlcnN0YW5kaW5nIHRoZSBhY3R1YWwgY29kZSBpbiBgYnVzX3NkaW8uY2AgYW5kIGBidXNfc3BpLmNgIGlzIGNydWNpYWwuIEkgbmVlZCB0byBzZWUgaG93IHRoZXkndmUgaGFuZGxlZCB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgU0RJTyBhbmQgU1BJIGNvbW11bmljYXRpb24uIFRoaW5ncyBsaWtlIGNsb2NrIGNvbmZpZ3VyYXRpb24sIERNQSBzZXR1cCwgaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgdGhlIHNwZWNpZmljIHJlZ2lzdGVyIGludGVyYWN0aW9ucyBhcmUgd2hhdCBJJ20gYWZ0ZXIuIEl0J3MgdGltZSB0byBhbmFseXplIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gdG8gc2VlIGhvdyB0aGUgc29mdHdhcmUgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlIGF0IGEgZ3JhbnVsYXIgbGV2ZWwuIEkgd2FudCB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBpbmVmZmljaWVuY2llcywgb3IgY2xldmVyIG9wdGltaXphdGlvbnMgdGhleSd2ZSBlbXBsb3llZC4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5J3ZlIGFic3RyYWN0ZWQgdGhlIGhhcmR3YXJlIGRpZmZlcmVuY2VzIGJldHdlZW4gdmFyaW91cyBTRElPIG9yIFNQSSBjb250cm9sbGVycywgYW5kIGhvdyB0aGV5IGRlYWwgd2l0aCB0aGUgdGltaW5nIGNvbnN0cmFpbnRzIHRoYXQgYXJlIHNvIGNyaXRpY2FsIGZvciBidXMgc3RhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjkyNCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDM6MTM6MjguNDgwNTMwOTc5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYnVzX3NkaW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDAsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDA6XFx0XFx0aWYgKCFmbGFncylcXG4gMTQxOlxcdFxcdFxcdGZsYWdzID0gSVJRRl9UUklHR0VSX0hJR0g7XFxuIDE0MjpcXHRcXHRmbGFncyB8PSBJUlFGX09ORVNIT1Q7XFxuIDE0MzpcXHRcXHRyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKFxcdTAwMjZidXMtXFx1MDAzZWZ1bmMtXFx1MDAzZWRldiwgYnVzLVxcdTAwM2VvZl9pcnEsIE5VTEwsXFxuIDE0NDpcXHRcXHRcXHRcXHRcXHRcXHR3Znhfc2Rpb19pcnFfaGFuZGxlcl9leHQsIGZsYWdzLCBcXFwid2Z4XFxcIiwgYnVzKTtcXG4gMTQ1OlxcdFxcdGlmIChyZXQpXFxuIDE0NjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxNDc6XFx0XFx0c2Rpb19jbGFpbV9ob3N0KGJ1cy1cXHUwMDNlZnVuYyk7XFxuIDE0ODpcXHRcXHRjY2NyID0gc2Rpb19mMF9yZWFkYihidXMtXFx1MDAzZWZ1bmMsIFNESU9fQ0NDUl9JRU54LCBOVUxMKTtcXG4gMTQ5OlxcdFxcdGNjY3IgfD0gQklUKDApO1xcbiAxNTA6XFx0XFx0Y2NjciB8PSBCSVQoYnVzLVxcdTAwM2VmdW5jLVxcdTAwM2VudW0pO1xcbiAxNTE6XFx0XFx0c2Rpb19mMF93cml0ZWIoYnVzLVxcdTAwM2VmdW5jLCBjY2NyLCBTRElPX0NDQ1JfSUVOeCwgTlVMTCk7XFxuIDE1MjpcXHRcXHRzZGlvX3JlbGVhc2VfaG9zdChidXMtXFx1MDAzZWZ1bmMpO1xcbiAxNTM6XFx0XFx0cmV0dXJuIDA7XFxuIDE1NDpcXHR9XFxuIDE1NTpcXHRcXG4gMTU2OlxcdHN0YXRpYyBpbnQgd2Z4X3NkaW9faXJxX3Vuc3Vic2NyaWJlKHZvaWQgKnByaXYpXFxuIDE1NzpcXHR7XFxuIDE1ODpcXHRcXHRzdHJ1Y3Qgd2Z4X3NkaW9fcHJpdiAqYnVzID0gcHJpdjtcXG4gMTU5OlxcdFxcdGludCByZXQ7XFxuIDE2MDpcXHRcXG4gMTYxOlxcdFxcdGlmIChidXMtXFx1MDAzZW9mX2lycSlcXG4gMTYyOlxcdFxcdFxcdGRldm1fZnJlZV9pcnEoXFx1MDAyNmJ1cy1cXHUwMDNlZnVuYy1cXHUwMDNlZGV2LCBidXMtXFx1MDAzZW9mX2lycSwgYnVzKTtcXG4gMTYzOlxcdFxcdHNkaW9fY2xhaW1faG9zdChidXMtXFx1MDAzZWZ1bmMpO1xcbiAxNjQ6XFx0XFx0cmV0ID0gc2Rpb19yZWxlYXNlX2lycShidXMtXFx1MDAzZWZ1bmMpO1xcbiAxNjU6XFx0XFx0c2Rpb19yZWxlYXNlX2hvc3QoYnVzLVxcdTAwM2VmdW5jKTtcXG4gMTY2OlxcdFxcdHJldHVybiByZXQ7XFxuIDE2NzpcXHR9XFxuIDE2ODpcXHRcXG4gMTY5OlxcdHN0YXRpYyBzaXplX3Qgd2Z4X3NkaW9fYWxpZ25fc2l6ZSh2b2lkICpwcml2LCBzaXplX3Qgc2l6ZSlcXG4gMTcwOlxcdHtcXG4gMTcxOlxcdFxcdHN0cnVjdCB3Znhfc2Rpb19wcml2ICpidXMgPSBwcml2O1xcbiAxNzI6XFx0XFxuIDE3MzpcXHRcXHRyZXR1cm4gc2Rpb19hbGlnbl9zaXplKGJ1cy1cXHUwMDNlZnVuYywgc2l6ZSk7XFxuIDE3NDpcXHR9XFxuIDE3NTpcXHRcXG4gMTc2OlxcdHN0YXRpYyB2b2lkIHdmeF9zZGlvX3NldF93YWtldXAodm9pZCAqcHJpdiwgYm9vbCBlbmFibGVkKVxcbiAxNzc6XFx0e1xcbiAxNzg6XFx0XFx0c3RydWN0IHdmeF9zZGlvX3ByaXYgKmJ1cyA9IHByaXY7XFxuIDE3OTpcXHRcXG4gMTgwOlxcdFxcdGRldmljZV9zZXRfd2FrZXVwX2VuYWJsZShcXHUwMDI2YnVzLVxcdTAwM2VmdW5jLVxcdTAwM2VkZXYsIGVuYWJsZWQpO1xcbiAxODE6XFx0fVxcbiAxODI6XFx0XFxuIDE4MzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHdmeF9od2J1c19vcHMgd2Z4X3NkaW9faHdidXNfb3BzID0ge1xcbiAxODQ6XFx0XFx0LmNvcHlfZnJvbV9pbyAgICA9IHdmeF9zZGlvX2NvcHlfZnJvbV9pbyxcXG4gMTg1OlxcdFxcdC5jb3B5X3RvX2lvICAgICAgPSB3Znhfc2Rpb19jb3B5X3RvX2lvLFxcbiAxODY6XFx0XFx0LmlycV9zdWJzY3JpYmUgICA9IHdmeF9zZGlvX2lycV9zdWJzY3JpYmUsXFxuIDE4NzpcXHRcXHQuaXJxX3Vuc3Vic2NyaWJlID0gd2Z4X3NkaW9faXJxX3Vuc3Vic2NyaWJlLFxcbiAxODg6XFx0XFx0LmxvY2sgICAgICAgICAgICA9IHdmeF9zZGlvX2xvY2ssXFxuIDE4OTpcXHRcXHQudW5sb2NrICAgICAgICAgID0gd2Z4X3NkaW9fdW5sb2NrLFxcbiAxOTA6XFx0XFx0LmFsaWduX3NpemUgICAgICA9IHdmeF9zZGlvX2FsaWduX3NpemUsXFxuIDE5MTpcXHRcXHQuc2V0X3dha2V1cCAgICAgID0gd2Z4X3NkaW9fc2V0X3dha2V1cCxcXG4gMTkyOlxcdH07XFxuIDE5MzpcXHRcXG4gMTk0OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHdmeF9zZGlvX29mX21hdGNoW10gPSB7XFxuIDE5NTpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcInNpbGFicyx3ZjIwMFxcXCIsICAgIC5kYXRhID0gXFx1MDAyNnBkYXRhX3dmMjAwIH0sXFxuIDE5NjpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcInNpbGFicyxicmQ0MDAxYVxcXCIsIC5kYXRhID0gXFx1MDAyNnBkYXRhX2JyZDQwMDFhIH0sXFxuIDE5NzpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcInNpbGFicyxicmQ4MDIyYVxcXCIsIC5kYXRhID0gXFx1MDAyNnBkYXRhX2JyZDgwMjJhIH0sXFxuIDE5ODpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcInNpbGFicyxicmQ4MDIzYVxcXCIsIC5kYXRhID0gXFx1MDAyNnBkYXRhX2JyZDgwMjNhIH0sXFxuIDE5OTpcXHRcXHR7IH0sXFxuIDIwMDpcXHR9O1xcbiAyMDE6XFx0TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgd2Z4X3NkaW9fb2ZfbWF0Y2gpO1xcbiAyMDI6XFx0XFxuIDIwMzpcXHRzdGF0aWMgaW50IHdmeF9zZGlvX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxcbiAyMDQ6XFx0e1xcbiAyMDU6XFx0XFx0c3RydWN0IHNkaW9fZnVuYyAqZnVuYyA9IGRldl90b19zZGlvX2Z1bmMoZGV2KTtcXG4gMjA2OlxcdFxcdHN0cnVjdCB3Znhfc2Rpb19wcml2ICpidXMgPSBzZGlvX2dldF9kcnZkYXRhKGZ1bmMpO1xcbiAyMDc6XFx0XFx0aW50IHJldDtcXG4gMjA4OlxcdFxcbiAyMDk6XFx0XFx0aWYgKCFkZXZpY2VfbWF5X3dha2V1cChkZXYpKVxcbiAyMTA6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDIxMTpcXHRcXG4gMjEyOlxcdFxcdGZsdXNoX3dvcmsoXFx1MDAyNmJ1cy1cXHUwMDNlY29yZS1cXHUwMDNlaGlmLmJoKTtcXG4gMjEzOlxcdFxcdC8qIEVpdGhlciBcXFwid2FrZXVwLXNvdXJjZVxcXCIgYXR0cmlidXRlIG9yIG91dC1vZi1iYW5kIElSUSBpcyByZXF1aXJlZCBmb3JcXG4gMjE0OlxcdFxcdCAqIFdvV0xBTlxcbiAyMTU6XFx0XFx0ICovXFxuIDIxNjpcXHRcXHRpZiAoYnVzLVxcdTAwM2VvZl9pcnEpIHtcXG4gMjE3OlxcdFxcdFxcdHJldCA9IGVuYWJsZV9pcnFfd2FrZShidXMtXFx1MDAzZW9mX2lycSk7XFxuIDIxODpcXHRcXHRcXHRpZiAocmV0KVxcbiAyMTk6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMjIwOlxcdFxcdH0gZWxzZSB7XFxuIDIyMTpcXHRcXHRcXHRyZXQgPSBzZGlvX3NldF9ob3N0X3BtX2ZsYWdzKGZ1bmMsIE1NQ19QTV9XQUtFX1NESU9fSVJRKTtcXG4gMjIyOlxcdFxcdFxcdGlmIChyZXQpXFxuIDIyMzpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAyMjQ6XFx0XFx0fVxcbiAyMjU6XFx0XFx0cmV0dXJuIHNkaW9fc2V0X2hvc3RfcG1fZmxhZ3MoZnVuYywgTU1DX1BNX0tFRVBfUE9XRVIpO1xcbiAyMjY6XFx0fVxcbiAyMjc6XFx0XFxuIDIyODpcXHRzdGF0aWMgaW50IHdmeF9zZGlvX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIDIyOTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAzOjEzOjI4LjQ4MDYzMjIzOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTE0NzEzNjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGJ1c19zZGlvLmMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gdGhlIHZlcnkgYm90dG9tIG9mIHRoZSBgYnVzX3NkaW8uY2AgZmlsZS4gTm8gbmVlZCBmb3IgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3IHJpZ2h0IG5vdzsgSSdtIGJldHRpbmcgdGhlIHJvb3Qgb2YgdGhlIHByb2JsZW0sIG9yIGF0IGxlYXN0IGEgY3JpdGljYWwgY2x1ZSwgaXMgYnVyaWVkIGRlZXAuIEkgaGF2ZSBhIGh1bmNoIGl0J3MgYSByZWNlbnQgY2hhbmdlLCBhIGJvdW5kYXJ5IGNvbmRpdGlvbiBpc3N1ZSwgb3IgbWF5YmUgc29tZSBvdmVybG9va2VkIGluaXRpYWxpemF0aW9uIG5lYXIgdGhlIGVuZCBvZiB0aGUgZmlsZS4gSXTigJlzIHVzdWFsbHkgd2hlcmUgSSBzdGFydCBsb29raW5nIGluIGNhc2VzIGxpa2UgdGhpcy4gTGV04oCZcyBzZWUgd2hhdCBnZW1zIGFyZSB3YWl0aW5nIHRvIGJlIHVuY292ZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3ODIsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAzOjEzOjMwLjM5NTM1MDczWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zZGlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjMwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjMwOlxcdFxcdHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMgPSBkZXZfdG9fc2Rpb19mdW5jKGRldik7XFxuIDIzMTpcXHRcXHRzdHJ1Y3Qgd2Z4X3NkaW9fcHJpdiAqYnVzID0gc2Rpb19nZXRfZHJ2ZGF0YShmdW5jKTtcXG4gMjMyOlxcdFxcbiAyMzM6XFx0XFx0aWYgKCFkZXZpY2VfbWF5X3dha2V1cChkZXYpKVxcbiAyMzQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDIzNTpcXHRcXHRpZiAoYnVzLVxcdTAwM2VvZl9pcnEpXFxuIDIzNjpcXHRcXHRcXHRyZXR1cm4gZGlzYWJsZV9pcnFfd2FrZShidXMtXFx1MDAzZW9mX2lycSk7XFxuIDIzNzpcXHRcXHRlbHNlXFxuIDIzODpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjM5OlxcdH1cXG4gMjQwOlxcdFxcbiAyNDE6XFx0c3RhdGljIGludCB3Znhfc2Rpb19wcm9iZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jLCBjb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgKmlkKVxcbiAyNDI6XFx0e1xcbiAyNDM6XFx0XFx0Y29uc3Qgc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShcXHUwMDI2ZnVuYy1cXHUwMDNlZGV2KTtcXG4gMjQ0OlxcdFxcdG1tY19wbV9mbGFnX3QgcG1fZmxhZyA9IHNkaW9fZ2V0X2hvc3RfcG1fY2FwcyhmdW5jKTtcXG4gMjQ1OlxcdFxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBmdW5jLVxcdTAwM2VkZXYub2Zfbm9kZTtcXG4gMjQ2OlxcdFxcdHN0cnVjdCB3Znhfc2Rpb19wcml2ICpidXM7XFxuIDI0NzpcXHRcXHRpbnQgcmV0O1xcbiAyNDg6XFx0XFxuIDI0OTpcXHRcXHRpZiAoZnVuYy1cXHUwMDNlbnVtICE9IDEpIHtcXG4gMjUwOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNmZ1bmMtXFx1MDAzZWRldiwgXFxcIlNESU8gZnVuY3Rpb24gbnVtYmVyIGlzICVkIHdoaWxlIGl0IHNob3VsZCBhbHdheXMgYmUgMSAodW5zdXBwb3J0ZWQgY2hpcD8pXFxcXG5cXFwiLFxcbiAyNTE6XFx0XFx0XFx0XFx0ZnVuYy1cXHUwMDNlbnVtKTtcXG4gMjUyOlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiAyNTM6XFx0XFx0fVxcbiAyNTQ6XFx0XFxuIDI1NTpcXHRcXHRpZiAoIXBkYXRhKSB7XFxuIDI1NjpcXHRcXHRcXHRkZXZfd2FybihcXHUwMDI2ZnVuYy1cXHUwMDNlZGV2LCBcXFwibm8gY29tcGF0aWJsZSBkZXZpY2UgZm91bmQgaW4gRFRcXFxcblxcXCIpO1xcbiAyNTc6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDI1ODpcXHRcXHR9XFxuIDI1OTpcXHRcXG4gMjYwOlxcdFxcdGJ1cyA9IGRldm1fa3phbGxvYyhcXHUwMDI2ZnVuYy1cXHUwMDNlZGV2LCBzaXplb2YoKmJ1cyksIEdGUF9LRVJORUwpO1xcbiAyNjE6XFx0XFx0aWYgKCFidXMpXFxuIDI2MjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMjYzOlxcdFxcbiAyNjQ6XFx0XFx0YnVzLVxcdTAwM2VmdW5jID0gZnVuYztcXG4gMjY1OlxcdFxcdGJ1cy1cXHUwMDNlb2ZfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApO1xcbiAyNjY6XFx0XFx0c2Rpb19zZXRfZHJ2ZGF0YShmdW5jLCBidXMpO1xcbiAyNjc6XFx0XFxuIDI2ODpcXHRcXHRzZGlvX2NsYWltX2hvc3QoZnVuYyk7XFxuIDI2OTpcXHRcXHRyZXQgPSBzZGlvX2VuYWJsZV9mdW5jKGZ1bmMpO1xcbiAyNzA6XFx0XFx0LyogQmxvY2sgb2YgNjQgYnl0ZXMgaXMgbW9yZSBlZmZpY2llbnQgdGhhbiA1MTJCIGZvciBmcmFtZSBzaXplcyBcXHUwMDNjIDRrICovXFxuIDI3MTpcXHRcXHRzZGlvX3NldF9ibG9ja19zaXplKGZ1bmMsIDY0KTtcXG4gMjcyOlxcdFxcdHNkaW9fcmVsZWFzZV9ob3N0KGZ1bmMpO1xcbiAyNzM6XFx0XFx0aWYgKHJldClcXG4gMjc0OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDI3NTpcXHRcXG4gMjc2OlxcdFxcdGJ1cy1cXHUwMDNlY29yZSA9IHdmeF9pbml0X2NvbW1vbihcXHUwMDI2ZnVuYy1cXHUwMDNlZGV2LCBwZGF0YSwgXFx1MDAyNndmeF9zZGlvX2h3YnVzX29wcywgYnVzKTtcXG4gMjc3OlxcdFxcdGlmICghYnVzLVxcdTAwM2Vjb3JlKSB7XFxuIDI3ODpcXHRcXHRcXHRyZXQgPSAtRUlPO1xcbiAyNzk6XFx0XFx0XFx0Z290byBzZGlvX3JlbGVhc2U7XFxuIDI4MDpcXHRcXHR9XFxuIDI4MTpcXHRcXG4gMjgyOlxcdFxcdGJ1cy1cXHUwMDNlY29yZS1cXHUwMDNlcG9sbF9pcnEgPSAhIWJ1cy1cXHUwMDNlb2ZfaXJxO1xcbiAyODM6XFx0XFx0cmV0ID0gd2Z4X3Byb2JlKGJ1cy1cXHUwMDNlY29yZSk7XFxuIDI4NDpcXHRcXHRpZiAocmV0KVxcbiAyODU6XFx0XFx0XFx0Z290byBzZGlvX3JlbGVhc2U7XFxuIDI4NjpcXHRcXG4gMjg3OlxcdFxcdGlmIChwbV9mbGFnIFxcdTAwMjYgTU1DX1BNX0tFRVBfUE9XRVIpXFxuIDI4ODpcXHRcXHRcXHRkZXZpY2Vfc2V0X3dha2V1cF9jYXBhYmxlKFxcdTAwMjZmdW5jLVxcdTAwM2VkZXYsIHRydWUpO1xcbiAyODk6XFx0XFxuIDI5MDpcXHRcXHRyZXR1cm4gMDtcXG4gMjkxOlxcdFxcbiAyOTI6XFx0c2Rpb19yZWxlYXNlOlxcbiAyOTM6XFx0XFx0c2Rpb19jbGFpbV9ob3N0KGZ1bmMpO1xcbiAyOTQ6XFx0XFx0c2Rpb19kaXNhYmxlX2Z1bmMoZnVuYyk7XFxuIDI5NTpcXHRcXHRzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTtcXG4gMjk2OlxcdFxcdHJldHVybiByZXQ7XFxuIDI5NzpcXHR9XFxuIDI5ODpcXHRcXG4gMjk5OlxcdHN0YXRpYyB2b2lkIHdmeF9zZGlvX3JlbW92ZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKVxcbiAzMDA6XFx0e1xcbiAzMDE6XFx0XFx0c3RydWN0IHdmeF9zZGlvX3ByaXYgKmJ1cyA9IHNkaW9fZ2V0X2RydmRhdGEoZnVuYyk7XFxuIDMwMjpcXHRcXG4gMzAzOlxcdFxcdHdmeF9yZWxlYXNlKGJ1cy1cXHUwMDNlY29yZSk7XFxuIDMwNDpcXHRcXHRzZGlvX2NsYWltX2hvc3QoZnVuYyk7XFxuIDMwNTpcXHRcXHRzZGlvX2Rpc2FibGVfZnVuYyhmdW5jKTtcXG4gMzA2OlxcdFxcdHNkaW9fcmVsZWFzZV9ob3N0KGZ1bmMpO1xcbiAzMDc6XFx0fVxcbiAzMDg6XFx0XFxuIDMwOTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHNkaW9fZGV2aWNlX2lkIHdmeF9zZGlvX2lkc1tdID0ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMzoxMzozMC4zOTU0NjU4OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDQwMjg3MDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBwcm92aWRlZCBpbnN0cnVjdGlvbjpcblxuKipEaXZpbmcgaW50byB0aGUgU1BJIEJ1cyBDb2RlKipcblxuT2theSwgc28gd2UndmUgbG9va2VkIGF0IHRoZSBvdGhlciBjb3JlIGNvbXBvbmVudHMsIGFuZCBub3cgaXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgYnVzX3NwaS5jYCBmaWxlLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIFNQSSBwcm90b2NvbHMgYW5kIGxvdy1sZXZlbCBoYXJkd2FyZSBpbnRlcmFjdGlvbnMsIEkgZXhwZWN0IHRoaXMgZmlsZSB0byBiZSBjcml0aWNhbCBmb3IgYWN0dWFsbHkgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBwZXJpcGhlcmFsIGRldmljZXMuIEknbSBhbnRpY2lwYXRpbmcgdGhhdCBpdCB3aWxsIGNvbnRhaW4gdGhlIGZ1bmN0aW9ucyByZXNwb25zaWJsZSBmb3IgY29uZmlndXJpbmcgdGhlIFNQSSBjb250cm9sbGVyLCBzZXR0aW5nIHVwIHRoZSBjbG9jayBmcmVxdWVuY2llcywgbWFuYWdpbmcgdGhlIGNoaXAgc2VsZWN0IGxpbmVzLCBhbmQgaGFuZGxpbmcgdGhlIGRhdGEgdHJhbnNmZXIgaXRzZWxmIOKAkyBib3RoIHRoZSB0cmFuc21pc3Npb24gYW5kIHJlY2VwdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBidWZmZXIgbWFuYWdlbWVudCwgaW50ZXJydXB0IGhhbmRsaW5nIChpZiBpdCdzIGludGVycnVwdC1kcml2ZW4pLCBhbmQgYW55IGVycm9yIGNoZWNraW5nIG9yIHJldHJ5IG1lY2hhbmlzbXMuIEknbGwgYWxzbyBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGNvZGUgaGFuZGxlcyBkaWZmZXJlbnQgU1BJIG1vZGVzIGFuZCBkYXRhIGZyYW1lIHNpemVzLCBhbmQgaWYgdGhlcmUncyBhbnkgYWJzdHJhY3Rpb24gbGF5ZXIgb3ZlciB0aGUgaGFyZHdhcmUgcmVnaXN0ZXJzLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGZ1bmRhbWVudGFsIGZsb3cgb2YgZGF0YSBhbmQgY29udHJvbCB3aXRoaW4gdGhlIFNQSSBidXMgZHJpdmVyIHRvIGRldGVybWluZSBpdHMgZWZmaWNpZW5jeSwgZmxleGliaWxpdHksIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBzbyB0aGF0IGl0IGNhbiBiZSBvcHRpbWlzZWQgaWYgbmVjZXNzYXJ5LiBJJ2xsIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGZ1bmN0aW9uIGNhbGxzIHJlbGF0ZWQgdG8gZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCB0aGVuIHRyYWNlIHRoZSBkYXRhIHRyYW5zZmVyLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsZWFuIGFuZCBjb25jaXNlIGltcGxlbWVudGF0aW9ucywgb3IgYW55dGhpbmcgY2x1bmt5IHRoYXQgbmVlZHMgYXR0ZW50aW9uLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjQyLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMzoxMzozMi44MzU3NTY0NjRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9idXNfc3BpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogU1BJIGludGVyZmFjZS5cXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy5cXG4gICA2OlxcdCAqIENvcHlyaWdodCAoYykgMjAxMSwgU2FncmFkIEluYy5cXG4gICA3OlxcdCAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb25cXG4gICA4OlxcdCAqL1xcbiAgIDk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgMTA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZ3Bpby9jb25zdW1lci5oXFx1MDAzZVxcbiAgMTI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaS9zcGkuaFxcdTAwM2VcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcnEuaFxcdTAwM2VcXG4gIDE1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbiAgMTY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BtLmhcXHUwMDNlXFxuICAxNzpcXHRcXG4gIDE4OlxcdCNpbmNsdWRlIFxcXCJidXMuaFxcXCJcXG4gIDE5OlxcdCNpbmNsdWRlIFxcXCJ3ZnguaFxcXCJcXG4gIDIwOlxcdCNpbmNsdWRlIFxcXCJod2lvLmhcXFwiXFxuICAyMTpcXHQjaW5jbHVkZSBcXFwibWFpbi5oXFxcIlxcbiAgMjI6XFx0I2luY2x1ZGUgXFxcImJoLmhcXFwiXFxuICAyMzpcXHRcXG4gIDI0OlxcdCNkZWZpbmUgU0VUX1dSSVRFIDB4N0ZGRiAgICAgICAgLyogdXNhZ2U6IGFuZCBvcGVyYXRpb24gKi9cXG4gIDI1OlxcdCNkZWZpbmUgU0VUX1JFQUQgMHg4MDAwICAgICAgICAgLyogdXNhZ2U6IG9yIG9wZXJhdGlvbiAqL1xcbiAgMjY6XFx0XFxuICAyNzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhIHBkYXRhX3dmMjAwID0ge1xcbiAgMjg6XFx0XFx0LmZpbGVfZncgPSBcXFwid2Z4L3dmbV93ZjIwMFxcXCIsXFxuICAyOTpcXHRcXHQuZmlsZV9wZHMgPSBcXFwid2Z4L3dmMjAwLnBkc1xcXCIsXFxuICAzMDpcXHRcXHQudXNlX3Jpc2luZ19jbGsgPSB0cnVlLFxcbiAgMzE6XFx0fTtcXG4gIDMyOlxcdFxcbiAgMzM6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCB3ZnhfcGxhdGZvcm1fZGF0YSBwZGF0YV9icmQ0MDAxYSA9IHtcXG4gIDM0OlxcdFxcdC5maWxlX2Z3ID0gXFxcIndmeC93Zm1fd2YyMDBcXFwiLFxcbiAgMzU6XFx0XFx0LmZpbGVfcGRzID0gXFxcIndmeC9icmQ0MDAxYS5wZHNcXFwiLFxcbiAgMzY6XFx0XFx0LnVzZV9yaXNpbmdfY2xrID0gdHJ1ZSxcXG4gIDM3OlxcdH07XFxuICAzODpcXHRcXG4gIDM5OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Z4X3BsYXRmb3JtX2RhdGEgcGRhdGFfYnJkODAyMmEgPSB7XFxuICA0MDpcXHRcXHQuZmlsZV9mdyA9IFxcXCJ3Zngvd2ZtX3dmMjAwXFxcIixcXG4gIDQxOlxcdFxcdC5maWxlX3BkcyA9IFxcXCJ3ZngvYnJkODAyMmEucGRzXFxcIixcXG4gIDQyOlxcdFxcdC51c2VfcmlzaW5nX2NsayA9IHRydWUsXFxuICA0MzpcXHR9O1xcbiAgNDQ6XFx0XFxuICA0NTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhIHBkYXRhX2JyZDgwMjNhID0ge1xcbiAgNDY6XFx0XFx0LmZpbGVfZncgPSBcXFwid2Z4L3dmbV93ZjIwMFxcXCIsXFxuICA0NzpcXHRcXHQuZmlsZV9wZHMgPSBcXFwid2Z4L2JyZDgwMjNhLnBkc1xcXCIsXFxuICA0ODpcXHRcXHQudXNlX3Jpc2luZ19jbGsgPSB0cnVlLFxcbiAgNDk6XFx0fTtcXG4gIDUwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMzoxMzozMi44MzU4NTIzMDRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcxNDcwOTY0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcGx5IGZhbWlsaWFyIHdpdGggZW1iZWRkZWQgc3lzdGVtcyBhbmQgU1BJIGNvbW11bmljYXRpb246XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIGJ1c1xcX3NwaS5jKipcblxuQWxyaWdodCwgc28gdGhlIGZvY3VzIGlzIGNsZWFybHkgb24gdGhlIHJlc3Qgb2YgYGJ1c19zcGkuY2AuIFRoYXQgbWVhbnMgSSd2ZSBhbHJlYWR5IGVzdGFibGlzaGVkIHRoZSBjb250ZXh0LCBwZXJoYXBzIGJ5IGdsYW5jaW5nIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUgb3IgaGF2aW5nIGEgZ2VuZXJhbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcm9qZWN0LiBOb3csIEkgbmVlZCB0byBkaWcgaW50byB0aGUgcmVtYWluaW5nIHBhcnRzIG9mIHRoaXMgbW9kdWxlLiBJJ20gbGlrZWx5IGxvb2tpbmcgZm9yIHRoZSBtZWF0IG9mIHRoZSBTUEkgYnVzIGltcGxlbWVudGF0aW9uLiBXaGF0IGFyZSB0aGUga2V5IGZ1bmN0aW9ucywgc3RydWN0dXJlcywgYW5kIGRhdGEgZmxvdyByZWxhdGVkIHRvIGludGVyZmFjaW5nIHdpdGggYW4gU1BJIHBlcmlwaGVyYWw/IEknbSBhbnRpY2lwYXRpbmcgdG8gc2VlIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGluZ3MgbGlrZSBpbml0aWFsaXphdGlvbiwgdHJhbnNtaXNzaW9uLCByZWNlcHRpb24sIGNsb2NrIGNvbnRyb2wsIGNoaXAgc2VsZWN0IG1hbmFnZW1lbnQsIGFuZCBlcnJvciBoYW5kbGluZy4gSSdtIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IGludGVyZXN0aW5nIG9wdGltaXphdGlvbnMgb3IgcGxhdGZvcm0tc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMgaW1wbGVtZW50ZWQgaW4gdGhlIGNvZGUuIEknbSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTM3NiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDM6MTM6MzUuNTUwNTY1ODEzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2J1c19zcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODA6XFx0XFx0cmV0dXJuIEFMSUdOKHNpemUsIDQpO1xcbiAxODE6XFx0fVxcbiAxODI6XFx0XFxuIDE4MzpcXHRzdGF0aWMgdm9pZCB3Znhfc3BpX3NldF93YWtldXAodm9pZCAqcHJpdiwgYm9vbCBlbmFibGVkKVxcbiAxODQ6XFx0e1xcbiAxODU6XFx0XFx0c3RydWN0IHdmeF9zcGlfcHJpdiAqYnVzID0gcHJpdjtcXG4gMTg2OlxcdFxcbiAxODc6XFx0XFx0ZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKFxcdTAwMjZidXMtXFx1MDAzZWZ1bmMtXFx1MDAzZWRldiwgZW5hYmxlZCk7XFxuIDE4ODpcXHR9XFxuIDE4OTpcXHRcXG4gMTkwOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Z4X2h3YnVzX29wcyB3Znhfc3BpX2h3YnVzX29wcyA9IHtcXG4gMTkxOlxcdFxcdC5jb3B5X2Zyb21faW8gICAgPSB3Znhfc3BpX2NvcHlfZnJvbV9pbyxcXG4gMTkyOlxcdFxcdC5jb3B5X3RvX2lvICAgICAgPSB3Znhfc3BpX2NvcHlfdG9faW8sXFxuIDE5MzpcXHRcXHQuaXJxX3N1YnNjcmliZSAgID0gd2Z4X3NwaV9pcnFfc3Vic2NyaWJlLFxcbiAxOTQ6XFx0XFx0LmlycV91bnN1YnNjcmliZSA9IHdmeF9zcGlfaXJxX3Vuc3Vic2NyaWJlLFxcbiAxOTU6XFx0XFx0LmxvY2sgICAgICAgICAgICA9IHdmeF9zcGlfbG9jayxcXG4gMTk2OlxcdFxcdC51bmxvY2sgICAgICAgICAgPSB3Znhfc3BpX3VubG9jayxcXG4gMTk3OlxcdFxcdC5hbGlnbl9zaXplICAgICAgPSB3Znhfc3BpX2FsaWduX3NpemUsXFxuIDE5ODpcXHRcXHQuc2V0X3dha2V1cCAgICAgID0gd2Z4X3NwaV9zZXRfd2FrZXVwLFxcbiAxOTk6XFx0fTtcXG4gMjAwOlxcdFxcbiAyMDE6XFx0c3RhdGljIGludCB3Znhfc3BpX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxcbiAyMDI6XFx0e1xcbiAyMDM6XFx0XFx0c3RydWN0IHNwaV9kZXZpY2UgKmZ1bmMgPSB0b19zcGlfZGV2aWNlKGRldik7XFxuIDIwNDpcXHRcXHRzdHJ1Y3Qgd2Z4X3NwaV9wcml2ICpidXMgPSBzcGlfZ2V0X2RydmRhdGEoZnVuYyk7XFxuIDIwNTpcXHRcXG4gMjA2OlxcdFxcdGlmICghZGV2aWNlX21heV93YWtldXAoZGV2KSlcXG4gMjA3OlxcdFxcdFxcdHJldHVybiAwO1xcbiAyMDg6XFx0XFx0Zmx1c2hfd29yayhcXHUwMDI2YnVzLVxcdTAwM2Vjb3JlLVxcdTAwM2VoaWYuYmgpO1xcbiAyMDk6XFx0XFx0cmV0dXJuIGVuYWJsZV9pcnFfd2FrZShmdW5jLVxcdTAwM2VpcnEpO1xcbiAyMTA6XFx0fVxcbiAyMTE6XFx0XFxuIDIxMjpcXHRzdGF0aWMgaW50IHdmeF9zcGlfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gMjEzOlxcdHtcXG4gMjE0OlxcdFxcdHN0cnVjdCBzcGlfZGV2aWNlICpmdW5jID0gdG9fc3BpX2RldmljZShkZXYpO1xcbiAyMTU6XFx0XFxuIDIxNjpcXHRcXHRpZiAoIWRldmljZV9tYXlfd2FrZXVwKGRldikpXFxuIDIxNzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjE4OlxcdFxcdHJldHVybiBkaXNhYmxlX2lycV93YWtlKGZ1bmMtXFx1MDAzZWlycSk7XFxuIDIxOTpcXHR9XFxuIDIyMDpcXHRcXG4gMjIxOlxcdHN0YXRpYyBpbnQgd2Z4X3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqZnVuYylcXG4gMjIyOlxcdHtcXG4gMjIzOlxcdFxcdHN0cnVjdCB3ZnhfcGxhdGZvcm1fZGF0YSAqcGRhdGE7XFxuIDIyNDpcXHRcXHRzdHJ1Y3Qgd2Z4X3NwaV9wcml2ICpidXM7XFxuIDIyNTpcXHRcXHRpbnQgcmV0O1xcbiAyMjY6XFx0XFxuIDIyNzpcXHRcXHRpZiAoIWZ1bmMtXFx1MDAzZWJpdHNfcGVyX3dvcmQpXFxuIDIyODpcXHRcXHRcXHRmdW5jLVxcdTAwM2ViaXRzX3Blcl93b3JkID0gMTY7XFxuIDIyOTpcXHRcXHRyZXQgPSBzcGlfc2V0dXAoZnVuYyk7XFxuIDIzMDpcXHRcXHRpZiAocmV0KVxcbiAyMzE6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMjMyOlxcdFxcdHBkYXRhID0gKHN0cnVjdCB3ZnhfcGxhdGZvcm1fZGF0YSAqKXNwaV9nZXRfZGV2aWNlX2lkKGZ1bmMpLVxcdTAwM2Vkcml2ZXJfZGF0YTtcXG4gMjMzOlxcdFxcdGlmICghcGRhdGEpIHtcXG4gMjM0OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNmZ1bmMtXFx1MDAzZWRldiwgXFxcInVuYWJsZSB0byByZXRyaWV2ZSBkcml2ZXIgZGF0YSAocGxlYXNlIHJlcG9ydClcXFxcblxcXCIpO1xcbiAyMzU6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDIzNjpcXHRcXHR9XFxuIDIzNzpcXHRcXG4gMjM4OlxcdFxcdC8qIFRyYWNlIGJlbG93IGlzIGFsc28gZGlzcGxheWVkIGJ5IHNwaV9zZXR1cCgpIGlmIGNvbXBpbGVkIHdpdGggREVCVUcgKi9cXG4gMjM5OlxcdFxcdGRldl9kYmcoXFx1MDAyNmZ1bmMtXFx1MDAzZWRldiwgXFxcIlNQSSBwYXJhbXM6IENTPSVkLCBtb2RlPSVkIGJpdHMvd29yZD0lZCBzcGVlZD0lZFxcXFxuXFxcIixcXG4gMjQwOlxcdFxcdFxcdHNwaV9nZXRfY2hpcHNlbGVjdChmdW5jLCAwKSwgZnVuYy1cXHUwMDNlbW9kZSwgZnVuYy1cXHUwMDNlYml0c19wZXJfd29yZCwgZnVuYy1cXHUwMDNlbWF4X3NwZWVkX2h6KTtcXG4gMjQxOlxcdFxcdGlmIChmdW5jLVxcdTAwM2ViaXRzX3Blcl93b3JkICE9IDE2IFxcdTAwMjZcXHUwMDI2IGZ1bmMtXFx1MDAzZWJpdHNfcGVyX3dvcmQgIT0gOClcXG4gMjQyOlxcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZmdW5jLVxcdTAwM2VkZXYsIFxcXCJ1bnVzdWFsIGJpdHMvd29yZCB2YWx1ZTogJWRcXFxcblxcXCIsIGZ1bmMtXFx1MDAzZWJpdHNfcGVyX3dvcmQpO1xcbiAyNDM6XFx0XFx0aWYgKGZ1bmMtXFx1MDAzZW1heF9zcGVlZF9oeiBcXHUwMDNlIDUwMDAwMDAwKVxcbiAyNDQ6XFx0XFx0XFx0ZGV2X3dhcm4oXFx1MDAyNmZ1bmMtXFx1MDAzZWRldiwgXFxcIiVkSHogaXMgYSB2ZXJ5IGhpZ2ggc3BlZWRcXFxcblxcXCIsIGZ1bmMtXFx1MDAzZW1heF9zcGVlZF9oeik7XFxuIDI0NTpcXHRcXG4gMjQ2OlxcdFxcdGJ1cyA9IGRldm1fa3phbGxvYyhcXHUwMDI2ZnVuYy1cXHUwMDNlZGV2LCBzaXplb2YoKmJ1cyksIEdGUF9LRVJORUwpO1xcbiAyNDc6XFx0XFx0aWYgKCFidXMpXFxuIDI0ODpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMjQ5OlxcdFxcdGJ1cy1cXHUwMDNlZnVuYyA9IGZ1bmM7XFxuIDI1MDpcXHRcXHRpZiAoZnVuYy1cXHUwMDNlYml0c19wZXJfd29yZCA9PSA4IHx8IElTX0VOQUJMRUQoQ09ORklHX0NQVV9CSUdfRU5ESUFOKSlcXG4gMjUxOlxcdFxcdFxcdGJ1cy1cXHUwMDNlbmVlZF9zd2FiID0gdHJ1ZTtcXG4gMjUyOlxcdFxcdHNwaV9zZXRfZHJ2ZGF0YShmdW5jLCBidXMpO1xcbiAyNTM6XFx0XFxuIDI1NDpcXHRcXHRidXMtXFx1MDAzZWdwaW9fcmVzZXQgPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChcXHUwMDI2ZnVuYy1cXHUwMDNlZGV2LCBcXFwicmVzZXRcXFwiLCBHUElPRF9PVVRfTE9XKTtcXG4gMjU1OlxcdFxcdGlmIChJU19FUlIoYnVzLVxcdTAwM2VncGlvX3Jlc2V0KSlcXG4gMjU2OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGJ1cy1cXHUwMDNlZ3Bpb19yZXNldCk7XFxuIDI1NzpcXHRcXHRpZiAoIWJ1cy1cXHUwMDNlZ3Bpb19yZXNldCkge1xcbiAyNTg6XFx0XFx0XFx0ZGV2X3dhcm4oXFx1MDAyNmZ1bmMtXFx1MDAzZWRldiwgXFxcImdwaW8gcmVzZXQgaXMgbm90IGRlZmluZWQsIHRyeWluZyB0byBsb2FkIGZpcm13YXJlIGFueXdheVxcXFxuXFxcIik7XFxuIDI1OTpcXHRcXHR9IGVsc2Uge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMzoxMzozNS41NTA2OTY0NTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU2MDExMTYxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTaWxpY29uIExhYnMgV0YyMDAgRnV6emluZyBGZWFzaWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIFdGMjAwIGZyb20gU2lsaWNvbiBMYWJzIGlzIGFuIFNESU8vU1BJIHdpcmVsZXNzIGNoaXAuIE15IGluaXRpYWwgcXVlc3Rpb24gaXM6IGNhbiB3ZSBldmVuIGZ1enogaXQ/IERvZXMgc3RhbmRhcmQgUUVNVSBvciBzeXprYWxsZXIgb2ZmZXIgYW55IGVtdWxhdGlvbiBvciBpbnN0YW50aWF0aW9uIG9mIFNESU8vU1BJIHdpcmVsZXNzIGhhcmR3YXJlPyBUaGF0J3MgdGhlIGNydXggb2YgaXQuIEJlZm9yZSBJIGdldCBhaGVhZCBvZiBteXNlbGYsIEkgbmVlZCB0byByZW1lbWJlciB0aGUgZ29sZGVuIHJ1bGU6ICoqcmVhY2hhYmlsaXR5IGlzIHRoZSBwcmltYXJ5IGdhdGUuKiogTXkgZnV6emVyIGNhbiAqb25seSogZmluZCBidWdzIGluIGNvZGUgdGhhdCAqZXhlY3V0ZXMqIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VLiBUaGluZ3MgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyBhcmUgb3V0IGJlY2F1c2UgdGhleSBuZWVkIHBoeXNpY2FsIGhhcmR3YXJlIFFFTVUgZG9lc24ndCBlbXVsYXRlLlxuXG5TbywgY2FuIHdlIGluc3RhbnRpYXRlIG9yIHByb2JlIHRoZSBXRjIwMCB1c2luZyBzeXprYWxsZXIgb3Igc3RhbmRhcmQgUUVNVT8gQ2FuIHN5emthbGxlciBwcm9iZSBTUEkgb3IgU0RJTyBkZXZpY2VzLCBwZXJpb2Q/IEkga25vdyBzeXprYWxsZXIgKmRvZXMqIGhhdmUgc29tZSBVU0IgZW11bGF0aW9uIHZpYSB0aGUgUmF3IEdhZGdldCBtZWNoYW5pc20uIEJ1dCBkb2VzIHRoYXQgZXh0ZW5kIHRvIFNESU8gb3IgU1BJPyBOby4gU0RJTyBjYXJkcyBhcmUgdHlwaWNhbGx5IGRpc2NvdmVyZWQgdmlhIHRoZSBNTUMgYnVzIGFuZCBkZXZpY2UgdHJlZSAoRFQpIG9uIGluc2VydGlvbi4gU1BJIGRldmljZXMgYXJlIHNpbWlsYXJseSBEVCBvciBBQ1BJIG9yIGJvYXJkLWluc3RhbnRpYXRlZC4gVGhleSBpbmhlcmVudGx5IG5lZWQgYSBwaHlzaWNhbCBTUEkgYnVzIGFuZCBzbGF2ZS5cblxuQWxyaWdodCwgYmFjayB0byB0aGUgY29yZSBxdWVzdGlvbjogZG9lcyBzeXprYWxsZXIgaGF2ZSBzdXBwb3J0IGZvciBTRElPL1NQST8gRG8gdGhleSBoYXZlIGFueSBwc2V1ZG8tc3lzY2FsbHMgb3Igc3VwcG9ydCBmb3IgbWFjODAyMTEgaHdzaW0gb3IgcmF3IGRldmljZXM/IE5vcGUsIGl0IHNlZW1zIGNsZWFyIHRoZSBhbnN3ZXIgaXMgbm8uIFRoaXMgZG9lc24ndCBsb29rIHByb21pc2luZyBmb3Igc2ltcGxlIGZ1enppbmcuXG5cbk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBwYXRjaCBpdHNlbGYuIEknbSBnb2luZyB0byBsb29rIGF0IGBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uY2AgYW5kIGZpZ3VyZSBvdXQgd2hhdCB0aGUgcGF0Y2ggaXMgKmFjdHVhbGx5KiBkb2luZyBpbiB0aGF0IGNvbnRleHQuIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDQyLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDM6MTM6NDAuMTEwODExNTE0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNTI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MDAsXG4gIFwiTGluZUNvdW50XCI6IDExMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDAwOlxcdFxcdFxcdCBcXFwiJWQuJWQuJWRcXFwiLFxcbiA0MDE6XFx0XFx0XFx0IHdkZXYtXFx1MDAzZWh3X2NhcHMuZmlybXdhcmVfbWFqb3IsXFxuIDQwMjpcXHRcXHRcXHQgd2Rldi1cXHUwMDNlaHdfY2Fwcy5maXJtd2FyZV9taW5vcixcXG4gNDAzOlxcdFxcdFxcdCB3ZGV2LVxcdTAwM2Vod19jYXBzLmZpcm13YXJlX2J1aWxkKTtcXG4gNDA0OlxcdFxcbiA0MDU6XFx0XFx0aWYgKHdmeF9hcGlfb2xkZXJfdGhhbih3ZGV2LCAxLCAwKSkge1xcbiA0MDY6XFx0XFx0XFx0ZGV2X2Vycih3ZGV2LVxcdTAwM2VkZXYsIFxcXCJ1bnN1cHBvcnRlZCBmaXJtd2FyZSBBUEkgdmVyc2lvbiAoZXhwZWN0IDEgd2hpbGUgZmlybXdhcmUgcmV0dXJucyAlZClcXFxcblxcXCIsXFxuIDQwNzpcXHRcXHRcXHRcXHR3ZGV2LVxcdTAwM2Vod19jYXBzLmFwaV92ZXJzaW9uX21ham9yKTtcXG4gNDA4OlxcdFxcdFxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbiA0MDk6XFx0XFx0XFx0Z290byBpcnFfdW5zdWJzY3JpYmU7XFxuIDQxMDpcXHRcXHR9XFxuIDQxMTpcXHRcXG4gNDEyOlxcdFxcdGlmICh3ZGV2LVxcdTAwM2Vod19jYXBzLmxpbmtfbW9kZSA9PSBTRUNfTElOS19FTkZPUkNFRCkge1xcbiA0MTM6XFx0XFx0XFx0ZGV2X2Vycih3ZGV2LVxcdTAwM2VkZXYsIFxcXCJjaGlwIHJlcXVpcmUgc2VjdXJlX2xpbmssIGJ1dCBjYW4ndCBuZWdvdGlhdGUgaXRcXFxcblxcXCIpO1xcbiA0MTQ6XFx0XFx0XFx0ZXJyID0gLUVPUE5PVFNVUFA7XFxuIDQxNTpcXHRcXHRcXHRnb3RvIGlycV91bnN1YnNjcmliZTtcXG4gNDE2OlxcdFxcdH1cXG4gNDE3OlxcdFxcbiA0MTg6XFx0XFx0aWYgKHdkZXYtXFx1MDAzZWh3X2NhcHMucmVnaW9uX3NlbF9tb2RlKSB7XFxuIDQxOTpcXHRcXHRcXHR3ZGV2LVxcdTAwM2Vody1cXHUwMDNld2lwaHktXFx1MDAzZXJlZ3VsYXRvcnlfZmxhZ3MgfD0gUkVHVUxBVE9SWV9ESVNBQkxFX0JFQUNPTl9ISU5UUztcXG4gNDIwOlxcdFxcdFxcdHdkZXYtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeS1cXHUwMDNlYmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLVxcdTAwM2VjaGFubmVsc1sxMV0uZmxhZ3MgfD1cXG4gNDIxOlxcdFxcdFxcdFxcdElFRUU4MDIxMV9DSEFOX05PX0lSO1xcbiA0MjI6XFx0XFx0XFx0d2Rldi1cXHUwMDNlaHctXFx1MDAzZXdpcGh5LVxcdTAwM2ViYW5kc1tOTDgwMjExX0JBTkRfMkdIWl0tXFx1MDAzZWNoYW5uZWxzWzEyXS5mbGFncyB8PVxcbiA0MjM6XFx0XFx0XFx0XFx0SUVFRTgwMjExX0NIQU5fTk9fSVI7XFxuIDQyNDpcXHRcXHRcXHR3ZGV2LVxcdTAwM2Vody1cXHUwMDNld2lwaHktXFx1MDAzZWJhbmRzW05MODAyMTFfQkFORF8yR0haXS1cXHUwMDNlY2hhbm5lbHNbMTNdLmZsYWdzIHw9XFxuIDQyNTpcXHRcXHRcXHRcXHRJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRDtcXG4gNDI2OlxcdFxcdH1cXG4gNDI3OlxcdFxcbiA0Mjg6XFx0XFx0ZGV2X2RiZyh3ZGV2LVxcdTAwM2VkZXYsIFxcXCJzZW5kaW5nIGNvbmZpZ3VyYXRpb24gZmlsZSAlc1xcXFxuXFxcIiwgd2Rldi1cXHUwMDNlcGRhdGEuZmlsZV9wZHMpO1xcbiA0Mjk6XFx0XFx0ZXJyID0gd2Z4X3NlbmRfcGRhdGFfcGRzKHdkZXYpO1xcbiA0MzA6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgZXJyICE9IC1FTk9FTlQpXFxuIDQzMTpcXHRcXHRcXHRnb3RvIGlycV91bnN1YnNjcmliZTtcXG4gNDMyOlxcdFxcbiA0MzM6XFx0XFx0aWYgKHdkZXYtXFx1MDAzZXBvbGxfaXJxKSB7XFxuIDQzNDpcXHRcXHRcXHRlcnIgPSB3ZGV2LVxcdTAwM2Vod2J1c19vcHMtXFx1MDAzZWlycV9zdWJzY3JpYmUod2Rldi1cXHUwMDNlaHdidXNfcHJpdik7XFxuIDQzNTpcXHRcXHRcXHRpZiAoZXJyKVxcbiA0MzY6XFx0XFx0XFx0XFx0Z290byBiaF91bnJlZ2lzdGVyO1xcbiA0Mzc6XFx0XFx0XFx0d2Rldi1cXHUwMDNlcG9sbF9pcnEgPSBmYWxzZTtcXG4gNDM4OlxcdFxcdH1cXG4gNDM5OlxcdFxcbiA0NDA6XFx0XFx0ZXJyID0gd2Z4X2hpZl91c2VfbXVsdGlfdHhfY29uZih3ZGV2LCB0cnVlKTtcXG4gNDQxOlxcdFxcdGlmIChlcnIpXFxuIDQ0MjpcXHRcXHRcXHRkZXZfZXJyKHdkZXYtXFx1MDAzZWRldiwgXFxcIm1pc2NvbmZpZ3VyZWQgSVJRP1xcXFxuXFxcIik7XFxuIDQ0MzpcXHRcXG4gNDQ0OlxcdFxcdHdkZXYtXFx1MDAzZXBkYXRhLmdwaW9fd2FrZXVwID0gZ3Bpb19zYXZlZDtcXG4gNDQ1OlxcdFxcdGlmICh3ZGV2LVxcdTAwM2VwZGF0YS5ncGlvX3dha2V1cCkge1xcbiA0NDY6XFx0XFx0XFx0ZGV2X2RiZyh3ZGV2LVxcdTAwM2VkZXYsIFxcXCJlbmFibGUgJ3F1aWVzY2VudCcgcG93ZXIgbW9kZSB3aXRoIHdha2V1cCBHUElPIGFuZCBQRFMgZmlsZSAlc1xcXFxuXFxcIixcXG4gNDQ3OlxcdFxcdFxcdFxcdHdkZXYtXFx1MDAzZXBkYXRhLmZpbGVfcGRzKTtcXG4gNDQ4OlxcdFxcdFxcdGdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcCh3ZGV2LVxcdTAwM2VwZGF0YS5ncGlvX3dha2V1cCwgMSk7XFxuIDQ0OTpcXHRcXHRcXHR3ZnhfY29udHJvbF9yZWdfd3JpdGUod2RldiwgMCk7XFxuIDQ1MDpcXHRcXHRcXHR3ZnhfaGlmX3NldF9vcGVyYXRpb25hbF9tb2RlKHdkZXYsIEhJRl9PUF9QT1dFUl9NT0RFX1FVSUVTQ0VOVCk7XFxuIDQ1MTpcXHRcXHR9IGVsc2Uge1xcbiA0NTI6XFx0XFx0XFx0d2Z4X2hpZl9zZXRfb3BlcmF0aW9uYWxfbW9kZSh3ZGV2LCBISUZfT1BfUE9XRVJfTU9ERV9ET1pFKTtcXG4gNDUzOlxcdFxcdH1cXG4gNDU0OlxcdFxcbiA0NTU6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUod2Rldi1cXHUwMDNlYWRkcmVzc2VzKTsgaSsrKSB7XFxuIDQ1NjpcXHRcXHRcXHRldGhfemVyb19hZGRyKHdkZXYtXFx1MDAzZWFkZHJlc3Nlc1tpXS5hZGRyKTtcXG4gNDU3OlxcdFxcdFxcdGVyciA9IG9mX2dldF9tYWNfYWRkcmVzcyh3ZGV2LVxcdTAwM2VkZXYtXFx1MDAzZW9mX25vZGUsIHdkZXYtXFx1MDAzZWFkZHJlc3Nlc1tpXS5hZGRyKTtcXG4gNDU4OlxcdFxcdFxcdGlmICghZXJyKVxcbiA0NTk6XFx0XFx0XFx0XFx0d2Rldi1cXHUwMDNlYWRkcmVzc2VzW2ldLmFkZHJbRVRIX0FMRU4gLSAxXSArPSBpO1xcbiA0NjA6XFx0XFx0XFx0ZWxzZVxcbiA0NjE6XFx0XFx0XFx0XFx0ZXRoZXJfYWRkcl9jb3B5KHdkZXYtXFx1MDAzZWFkZHJlc3Nlc1tpXS5hZGRyLCB3ZGV2LVxcdTAwM2Vod19jYXBzLm1hY19hZGRyW2ldKTtcXG4gNDYyOlxcdFxcdFxcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcih3ZGV2LVxcdTAwM2VhZGRyZXNzZXNbaV0uYWRkcikpIHtcXG4gNDYzOlxcdFxcdFxcdFxcdGRldl93YXJuKHdkZXYtXFx1MDAzZWRldiwgXFxcInVzaW5nIHJhbmRvbSBNQUMgYWRkcmVzc1xcXFxuXFxcIik7XFxuIDQ2NDpcXHRcXHRcXHRcXHRldGhfcmFuZG9tX2FkZHIod2Rldi1cXHUwMDNlYWRkcmVzc2VzW2ldLmFkZHIpO1xcbiA0NjU6XFx0XFx0XFx0fVxcbiA0NjY6XFx0XFx0XFx0ZGV2X2luZm8od2Rldi1cXHUwMDNlZGV2LCBcXFwiTUFDIGFkZHJlc3MgJWQ6ICVwTVxcXFxuXFxcIiwgaSwgd2Rldi1cXHUwMDNlYWRkcmVzc2VzW2ldLmFkZHIpO1xcbiA0Njc6XFx0XFx0fVxcbiA0Njg6XFx0XFx0d2Rldi1cXHUwMDNlaHctXFx1MDAzZXdpcGh5LVxcdTAwM2VuX2FkZHJlc3NlcyA9IEFSUkFZX1NJWkUod2Rldi1cXHUwMDNlYWRkcmVzc2VzKTtcXG4gNDY5OlxcdFxcdHdkZXYtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeS1cXHUwMDNlYWRkcmVzc2VzID0gd2Rldi1cXHUwMDNlYWRkcmVzc2VzO1xcbiA0NzA6XFx0XFxuIDQ3MTpcXHRcXHRpZiAoIXdmeF9hcGlfb2xkZXJfdGhhbih3ZGV2LCAzLCA4KSlcXG4gNDcyOlxcdFxcdFxcdHdkZXYtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeS1cXHUwMDNlZmxhZ3MgfD0gV0lQSFlfRkxBR19TVVBQT1JUU19URExTO1xcbiA0NzM6XFx0XFxuIDQ3NDpcXHRcXHRlcnIgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcod2Rldi1cXHUwMDNlaHcpO1xcbiA0NzU6XFx0XFx0aWYgKGVycilcXG4gNDc2OlxcdFxcdFxcdGdvdG8gaXJxX3Vuc3Vic2NyaWJlO1xcbiA0Nzc6XFx0XFxuIDQ3ODpcXHRcXHRlcnIgPSB3ZnhfZGVidWdfaW5pdCh3ZGV2KTtcXG4gNDc5OlxcdFxcdGlmIChlcnIpXFxuIDQ4MDpcXHRcXHRcXHRnb3RvIGllZWU4MDIxMV91bnJlZ2lzdGVyO1xcbiA0ODE6XFx0XFxuIDQ4MjpcXHRcXHRyZXR1cm4gMDtcXG4gNDgzOlxcdFxcbiA0ODQ6XFx0aWVlZTgwMjExX3VucmVnaXN0ZXI6XFxuIDQ4NTpcXHRcXHRpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyh3ZGV2LVxcdTAwM2Vodyk7XFxuIDQ4NjpcXHRpcnFfdW5zdWJzY3JpYmU6XFxuIDQ4NzpcXHRcXHRpZiAoIXdkZXYtXFx1MDAzZXBvbGxfaXJxKVxcbiA0ODg6XFx0XFx0XFx0d2Rldi1cXHUwMDNlaHdidXNfb3BzLVxcdTAwM2VpcnFfdW5zdWJzY3JpYmUod2Rldi1cXHUwMDNlaHdidXNfcHJpdik7XFxuIDQ4OTpcXHRiaF91bnJlZ2lzdGVyOlxcbiA0OTA6XFx0XFx0d2Z4X2JoX3VucmVnaXN0ZXIod2Rldik7XFxuIDQ5MTpcXHRcXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXFx1MDAyNndkZXYtXFx1MDAzZWNvb2xpbmdfdGltZW91dF93b3JrKTtcXG4gNDkyOlxcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKHdkZXYtXFx1MDAzZWJoX3dxKTtcXG4gNDkzOlxcdFxcdHJldHVybiBlcnI7XFxuIDQ5NDpcXHR9XFxuIDQ5NTpcXHRcXG4gNDk2OlxcdHZvaWQgd2Z4X3JlbGVhc2Uoc3RydWN0IHdmeF9kZXYgKndkZXYpXFxuIDQ5NzpcXHR7XFxuIDQ5ODpcXHRcXHRpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyh3ZGV2LVxcdTAwM2Vodyk7XFxuIDQ5OTpcXHRcXHR3ZnhfaGlmX3NodXRkb3duKHdkZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMzoxMzo0MC4xMTEyMTk3OTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTI3OTQ5NzYxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgd2Z4YCBEcml2ZXIgTW9kaWZpY2F0aW9uJ3MgRnV6emluZyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgd2Z4X3Byb2JlKClgIGFuZCBgd2Z4X3JlbGVhc2UoKWAgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gZXJyb3IgcGF0aHMuICBJIHNlZSBhIGNoZWNrIGZvciBgU0VDX0xJTktfRU5GT1JDRURgIGFuZCBhIGBjYW5jZWxfZGVsYXllZF93b3JrX3N5bmNgIGNhbGwgaW4gYm90aCB0aGUgZXJyb3IgcGF0aCBvZiBwcm9iZSBhbmQgaW4gdGhlIHJlbGVhc2UgZnVuY3Rpb24uICBUaGUgaW5pdGlhbCB0aG91Z2h0IGlzLCBcImNhbiB0aGlzIGV2ZW4gKmJlKiBmdXp6ZWQ/XCJcblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIGB3ZnhgIGRyaXZlciBpdHNlbGYuIEkga25vdyB0aGlzIGRyaXZlciBpcyBmb3IgU2lsaWNvbiBMYWJzIFdGMjAwL1dGTTIwMCBXaS1GaSB0cmFuc2NlaXZlcnMsIGFuZCBpdCByZWxpZXMgb24gZWl0aGVyIFNQSSBvciBTRElPIChNTUMpIGNvbm5lY3Rpb25zLiAgQ3J1Y2lhbGx5LCBpdCByZXF1aXJlcyBkZXZpY2UtdHJlZSBwbGF0Zm9ybSBiaW5kaW5ncyBmb3IgdGhlIGhhcmR3YXJlLiAgXG5cblRoZSBSRUFDSEFCSUxJVFkgc2VjdGlvbiBpcyB0aGUgY3JpdGljYWwgcGllY2Ugb2YgdGhpcyBwdXp6bGUuIEl0J3MgZXhwbGljaXRseSBzdGF0ZWQgdGhhdCBmdXp6aW5nIGlzIG9ubHkgZWZmZWN0aXZlIG9uIGNvZGUgdGhhdCBleGVjdXRlcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMuIFRoZSBwcm9ibGVtIGlzLCBhbmQgSSAqa25vdyogdGhpcywgdGhlcmUncyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoZSBTaWxpY29uIExhYnMgV0YyMDAgaGFyZHdhcmUgd2l0aGluIHRoZXNlIHN0YW5kYXJkIGVudmlyb25tZW50cy4gIFRoZSBkcml2ZXIgcmVsaWVzIG9uIGEgcGh5c2ljYWwgQVNJQyBjb25uZWN0ZWQgdmlhIFNQSSBvciBTRElPLCB3aGljaCB3ZSBhYnNvbHV0ZWx5IGNhbm5vdCBlbXVsYXRlIHdpdGhpbiBhIHN0YW5kYXJkIGZ1enppbmcgc2V0dXAuXG5cblRoZXJlZm9yZSwgc2luY2UgdGhlIGNoYW5nZXMgYXJlIGluIHRoZSBgcHJvYmVgIGVycm9yIHBhdGggKHdoaWNoIHdlJ2Qgb25seSBoaXQgb24gaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gZmFpbHVyZSkgYW5kIHRoZSBgcmVsZWFzZWAgZnVuY3Rpb24gKHdoaWNoIGlzIHRyaWdnZXJlZCBvbiBkcml2ZXIgcmVtb3ZhbCksIGJvdGggb2YgdGhlc2UgZXhlY3V0aW9uIHBhdGhzIGFyZSBlbnRpcmVseSB1bnJlYWNoYWJsZSBpbiB0aGUgY29udGV4dCBvZiBvdXIgc3RhbmRhcmQgZnV6emluZyBzZXR1cCwgd2hpY2ggbWVhbnMgdGhpcyBjb2RlIGlzIG5vdCBhbWVuYWJsZSB0byBmdXp6aW5nLlxuXG5JJ20gY29uZmlkZW50IGluIHRoaXMgY29uY2x1c2lvbi4gTGV0J3MgbWFrZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTc4OCwiT3V0cHV0VG9rZW5zIjoxMDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMzoxMzo0NS4zOTA3MjIxNDRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBtb2RpZmllZCBjb2RlIGlzIGluIHRoZSBTaWxpY29uIExhYnMgV0YyMDAgV2ktRmkgZHJpdmVyIChkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4KSwgd2hpY2ggb3BlcmF0ZXMgb3ZlciBTUEkgb3IgU0RJTyBidXNlcyBhbmQgcmVxdWlyZXMgcGh5c2ljYWwgU2lsaWNvbiBMYWJzIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoc3VjaCBhcyBRRU1VL0dDRSkuIENvbnNlcXVlbnRseSwgdGhlc2UgcHJvYmUgYW5kIHJlbGVhc2UgcGF0aHMgYXJlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIG1vZGlmaWVkIGNvZGUgaXMgaW4gdGhlIFNpbGljb24gTGFicyBXRjIwMCBXaS1GaSBkcml2ZXIgKGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngpLCB3aGljaCBvcGVyYXRlcyBvdmVyIFNQSSBvciBTRElPIGJ1c2VzIGFuZCByZXF1aXJlcyBwaHlzaWNhbCBTaWxpY29uIExhYnMgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChzdWNoIGFzIFFFTVUvR0NFKS4gQ29uc2VxdWVudGx5LCB0aGVzZSBwcm9iZSBhbmQgcmVsZWFzZSBwYXRocyBhcmUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDM6MTM6NDUuMzkwNzU0NTY0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlktf6[1] Phase: Running StartedAt: 2026-09-07 03:13:56 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlktf6[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-07 03:13:56 +0000 UTC FinishedAt: 2026-09-07 03:14:01 +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,}