Name: series-workflowgnf4f Phase: Failed StartedAt: 2026-07-29 04:16:20 +0000 UTC FinishedAt: 2026-07-29 04:40:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnf4f[0] Phase: Succeeded StartedAt: 2026-07-29 04:16:20 +0000 UTC FinishedAt: 2026-07-29 04:40:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnf4f[0].run-triage Phase: Succeeded StartedAt: 2026-07-29 04:16:20 +0000 UTC FinishedAt: 2026-07-29 04:40:02 +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+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhbiBleHRyYSBjb2x1bW4gdG8gdGhlIC9wcm9jL25ldC9wcHBvZSBzZXFfZmlsZSBvdXRwdXQuIFRoaXMgaXMgYSBwdXJlbHkgaW5mb3JtYXRpb25hbC9kZWNvcmF0aXZlIGNoYW5nZSB0aGF0IGRvZXMgbm90IGFsdGVyIHRoZSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZThiNzk5NGZkZWVkYWE5YTgwMzMwNDBiMjVmOTQ2YjNhZTQ2NWZkNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDI5IDA0OjM4OjMyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcbmluZGV4IDY4NzRhMWE4ZWRhZjEuLmNiMzFmNWRiNDNlODEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcbkBAIC05NjMsMTcgJiM0Mzs5NjMsMTkgQEAgc3RhdGljIGludCBwcHBvZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbiB7XG4gXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG87XG4gXHRjaGFyICpkZXZfbmFtZTtcbiYjNDM7XHRjaGFyICpwcHBfbmFtZTtcbiBcbiBcdGlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikge1xuLVx0XHRzZXFfcHV0cyhzZXEsIFwmIzM0O0lkICAgICAgIEFkZHJlc3MgICAgICAgICAgICAgIERldmljZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRzZXFfcHV0cyhzZXEsIFwmIzM0O0lkICAgICAgIEFkZHJlc3MgICAgICAgICAgICAgIERldmljZSAgIFBQUC1EZXZpY2VcXG5cJiMzNDspO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbiBcdHBvID0gdjtcbiBcdGRldl9uYW1lID0gcG8tXHUwMDNlcHBwb2VfcGEuZGV2O1xuJiM0MztcdHBwcF9uYW1lID0gcHBwX2Rldl9uYW1lKFx1MDAyNnBvLVx1MDAzZWNoYW4pO1xuIFxuLVx0c2VxX3ByaW50ZihzZXEsIFwmIzM0OyUwOFggJXBNICU4c1xcblwmIzM0Oyxcbi1cdFx0cG8tXHUwMDNlcHBwb2VfcGEuc2lkLCBwby1cdTAwM2VwcHBvZV9wYS5yZW1vdGUsIGRldl9uYW1lKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHNlcSwgXCYjMzQ7JTA4WCAlcE0gJThzICUxMHNcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBwby1cdTAwM2VwcHBvZV9wYS5zaWQsIHBvLVx1MDAzZXBwcG9lX3BhLnJlbW90ZSwgZGV2X25hbWUsIHBwcF9uYW1lID8gcHBwX25hbWUgOiBcJiMzNDtcJiMzNDspO1xuIG91dDpcbiBcdHJldHVybiAwO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIGFuIGV4dHJhIGNvbHVtbiB0byB0aGUgL3Byb2MvbmV0L3BwcG9lIHNlcV9maWxlIG91dHB1dC4gVGhpcyBpcyBhIHB1cmVseSBpbmZvcm1hdGlvbmFsL2RlY29yYXRpdmUgY2hhbmdlIHRoYXQgZG9lcyBub3QgYWx0ZXIgdGhlIGZ1bmN0aW9uYWwgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlOGI3OTk0ZmRlZWRhYTlhODAzMzA0MGIyNWY5NDZiM2FlNDY1ZmQ0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjkgMDQ6Mzg6MzIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCmluZGV4IDY4NzRhMWE4ZWRhZjEuLmNiMzFmNWRiNDNlODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCkBAIC05NjMsMTcgJiM0Mzs5NjMsMTkgQEAgc3RhdGljIGludCBwcHBvZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG87CiAJY2hhciAqZGV2X25hbWU7CiYjNDM7CWNoYXIgKnBwcF9uYW1lOwogCiAJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7Ci0JCXNlcV9wdXRzKHNlcSwgJiMzNDtJZCAgICAgICBBZGRyZXNzICAgICAgICAgICAgICBEZXZpY2VcbiYjMzQ7KTsKJiM0MzsJCXNlcV9wdXRzKHNlcSwgJiMzNDtJZCAgICAgICBBZGRyZXNzICAgICAgICAgICAgICBEZXZpY2UgICBQUFAtRGV2aWNlXG4mIzM0Oyk7CiAJCWdvdG8gb3V0OwogCX0KIAogCXBvID0gdjsKIAlkZXZfbmFtZSA9IHBvLSZndDtwcHBvZV9wYS5kZXY7CiYjNDM7CXBwcF9uYW1lID0gcHBwX2Rldl9uYW1lKCZhbXA7cG8tJmd0O2NoYW4pOwogCi0Jc2VxX3ByaW50ZihzZXEsICYjMzQ7JTA4WCAlcE0gJThzXG4mIzM0OywKLQkJcG8tJmd0O3BwcG9lX3BhLnNpZCwgcG8tJmd0O3BwcG9lX3BhLnJlbW90ZSwgZGV2X25hbWUpOwomIzQzOwlzZXFfcHJpbnRmKHNlcSwgJiMzNDslMDhYICVwTSAlOHMgJTEwc1xuJiMzNDssCiYjNDM7CQkgICBwby0mZ3Q7cHBwb2VfcGEuc2lkLCBwby0mZ3Q7cHBwb2VfcGEucmVtb3RlLCBkZXZfbmFtZSwgcHBwX25hbWUgPyBwcHBfbmFtZSA6ICYjMzQ7JiMzNDspOwogb3V0OgogCXJldHVybiAwOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjM5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogcHBvcGVfc2VxX3Nob3cgYW5kIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hlZCBgZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBwcHBvZV9zZXFfc2hvd2AgZnVuY3Rpb24uIEZyb20gdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgdGhpcyBpcyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcgdGhlIG91dHB1dCB5b3Ugc2VlIGluIGAvcHJvYy9uZXQvcHBwb2VgIG9yIGEgc2ltaWxhciBzZXFfZmlsZSBpbnRlcmZhY2UuIFRoZSBjaGFuZ2UgaXRzZWxmIGlzIHByZXR0eSBzaW1wbGU6IGl0JiMzOTtzIGFkZGluZyBgcHBwX25hbWUgPSBwcHBfZGV2X25hbWUoJmFtcDtwby0mZ3Q7Y2hhbik7YCBhbmQgdGhlbiBwcmludGluZyB0aGF0IG5hbWUuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBzb21ldGhpbmcgd2UgbmVlZCB0byB3b3JyeSBhYm91dCBpbiB0ZXJtcyBvZiBmdXp6aW5nPyYjMzQ7IEl0JiMzOTtzIGEgYHNlcV9zaG93YCBmdW5jdGlvbiwgd2hpY2ggZ2VuZXJhbGx5IG1lYW5zIGl0JiMzOTtzIHJlYWQtb25seSBvdXRwdXQuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdHlwaWNhbGx5IG5vdCB0aGUgaGlnaGVzdC1wcmlvcml0eSB0YXJnZXRzIGZvciBmdXp6aW5nIHVubGVzcyB0aGV5IGV4cG9zZSBhIHBhcnRpY3VsYXJseSBqdWljeSB2dWxuZXJhYmlsaXR5LiBIb3dldmVyLCB0aGUgdXNlIG9mIGBwcHBfZGV2X25hbWUoJmFtcDtwby0mZ3Q7Y2hhbilgIGRvZXMgbWFrZSBtZSBwYXVzZS4gVGhlcmUmIzM5O3MgYWx3YXlzIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWJ0bGUgbG9ja2luZyBpc3N1ZXMgb3IgbGlmZXRpbWUgY29uY2VybnMgd2hlbiBkZWFsaW5nIHdpdGggZGV2aWNlIG5hbWVzLCBldmVuIGluIGEgc2VlbWluZ2x5IHNpbXBsZSByZWFkIG9wZXJhdGlvbi4KClNvLCBJIHRoaW5rIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gYm90aCBgcHBwX2Rldl9uYW1lYCBhbmQgdGhlIGBwcHBvZV9zZXFfc2hvd2AgZnVuY3Rpb24gaXRzZWxmLiBUaGUgZmFjdCB0aGF0IHRoZSBuYW1lIGlzIGJlaW5nIHJlYWQgbGlrZSB0aGlzIG1ha2VzIG1lIHdvbmRlciBpZiB0aGVyZSYjMzk7cyBhbnkgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgd2l0aGluIHRoZSBwcHAgZGV2aWNlIG5hbWUgbG9va3VwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgcHBwX2Rldl9uYW1lYCBpcyBiZWluZyBjYWxsZWQgd2l0aCBwcm9wZXIgbG9ja2luZyBpbiBwbGFjZS4gVGhhdOKAmXMgd2hlcmUgSSYjMzk7bGwgY29uY2VudHJhdGUgbXkgZm9jdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHBwb2Vfc2VxX3Nob3cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwb2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwb2UuYz05MzY9c3RhdGljIGludCBwcHBvZV9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTYxLSNpZmRlZiBDT05GSUdfUFJPQ19GU1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6OTYyOnN0YXRpYyBpbnQgcHBwb2Vfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05NjMte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jPTEwNDY9c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcHBvZV9zZXFfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTEwNDktXHQuc3RvcFx0XHQ9IHBwcG9lX3NlcV9zdG9wLFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MTA1MDpcdC5zaG93XHRcdD0gcHBwb2Vfc2VxX3Nob3csXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xMDUxLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA2NAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDExOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQUFBvRSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIGBwcHBvZV9zZXFfc2hvd2AuIExvb2tzIGxpa2UgaXQmIzM5O3MganVzdCBhZGRpbmcgdGhlIG91dHB1dCBvZiBgcHBwX2Rldl9uYW1lKCZhbXA7cG8tJmd0O2NoYW4pYCB0byB0aGUgYC9wcm9jL25ldC9wcHBvZWAgcHJvY2ZzIGZpbGUuIFB1cmVseSBpbmZvcm1hdGlvbmFsLCByaWdodD8gTm8gcmVhbCBmdW5jdGlvbmFsIGltcGFjdCBiZXlvbmQgcmVhZGluZyBhbmQgZGlzcGxheWluZyB0aGlzIG5ldyBmaWVsZC4gVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgd2FycmFudCBmdXp6aW5nPyBPbiB0aGUgc3VyZmFjZSwgaXQgc2VlbXMgbGlrZSBvdmVya2lsbCBmb3IgYSBgc2VxX3Nob3dgIGZ1bmN0aW9uLiBCdXQgd2FpdC4uLiBgcHBwX2Rldl9uYW1lYC4uLiB0aGF0IGZ1bmN0aW9uIG1pZ2h0IGJlIGRvaW5nIHNvbWV0aGluZyBpbnRlcmVzdGluZywgcG90ZW50aWFsbHkgZGVyZWZlcmVuY2luZyBzb21ldGhpbmcuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICpkb2luZyogYmVmb3JlIEkgZGlzbWlzcyB0aGlzIG91dHJpZ2h0LiBCZXR0ZXIgdG8gYmUgc2FmZSB0aGFuIHNvcnJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BwcF9kZXZfbmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0yOTUzPWludCBwcHBfdW5pdF9udW1iZXIoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTI5NzItICovXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoyOTczOmNoYXIgKnBwcF9kZXZfbmFtZShzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yOTc0LXtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0zNjYyPUVYUE9SVF9TWU1CT0wocHBwX3VuaXRfbnVtYmVyKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjM2NjM6RVhQT1JUX1NZTUJPTChwcHBfZGV2X25hbWUpO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMzY2NC1FWFBPUlRfU1lNQk9MKHBwcF9pbnB1dCk7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9OTYyPXN0YXRpYyBpbnQgcHBwb2Vfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTc0LVx0ZGV2X25hbWUgPSBwby1cdTAwM2VwcHBvZV9wYS5kZXY7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo5NzU6XHRwcHBfbmFtZSA9IHBwcF9kZXZfbmFtZShcdTAwMjZwby1cdTAwM2VjaGFuKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTk3Ni1cbi0tXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmg9NzM9ZXh0ZXJuIGludCBwcHBfdW5pdF9udW1iZXIoc3RydWN0IHBwcF9jaGFubmVsICopO1xuLS1cbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaC03Ny0gKi9cbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaDo3ODpleHRlcm4gY2hhciAqcHBwX2Rldl9uYW1lKHN0cnVjdCBwcHBfY2hhbm5lbCAqKTtcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaC03OS1cbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTQ5OD1zdGF0aWMgdm9pZCBwcHBvbDJ0cF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqYXJnKVxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmMtNTA3LVxubmV0L2wydHAvbDJ0cF9wcHAuYzo1MDg6XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7ICAgaW50ZXJmYWNlICVzXFxuXCYjMzQ7LCBwcHBfZGV2X25hbWUoXHUwMDI2cG8tXHUwMDNlY2hhbikpO1xubmV0L2wydHAvbDJ0cF9wcHAuYy01MDktXHR9XG4tLVxubmV0L2wydHAvbDJ0cF9wcHAuYz0xNTEzPXN0YXRpYyB2b2lkIHBwcG9sMnRwX3NlcV9zZXNzaW9uX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmMtMTU2NC1cbm5ldC9sMnRwL2wydHBfcHBwLmM6MTU2NTpcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDsgICBpbnRlcmZhY2UgJXNcXG5cJiMzNDssIHBwcF9kZXZfbmFtZShcdTAwMjZwby1cdTAwM2VjaGFuKSk7XG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTE1NjYtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA1MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIGl0JiMzOTtzICpteSogdHJhaW4gb2YgdGhvdWdodDoKCioqRGl2aW5nIGludG8gdGhlIGBwcHBfZGV2X25hbWVgIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB1bmRlcnN0YW5kIHByZWNpc2VseSBob3cgdGhlIGBwcHBfZGV2X25hbWVgIGlzIGltcGxlbWVudGVkLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgZGV0YWlscywgdGhlIGNydWNpYWwgcGFydHMgdGhhdCBtYWtlIHRoaXMgc3BlY2lmaWMgbmFtZSBnZW5lcmF0aW9uIHdvcmsuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGludHJpY2FjaWVzOiB0aGUgYXNzaWdubWVudCwgYW55IGVkZ2UgY2FzZXMgdGhhdCB3ZXJlIGhhbmRsZWQsIHRoZSBwb3RlbnRpYWwgcGl0ZmFsbHMgYW5kIHRoZSBhcmVhcyB3aGVyZSBwZXJmb3JtYW5jZSBtaWdodCBiZSBvcHRpbWl6ZWQuIFdoYXQgZXhhY3RseSBhcmUgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtcyBmb3IgbmFtZSBjcmVhdGlvbj8gRG9lcyBpdCBmb2xsb3cgYSBzdGFuZGFyZCBvciBhcmUgdGhlcmUgY3VzdG9taXNhdGlvbnM/IEFueSB1bmlxdWUgYXBwcm9hY2hlcz8gSSB3aWxsIGNoZWNrIGZvciBhbnkgdW51c3VhbCBkYXRhIHN0cnVjdHVyZXMgb3IgYWxnb3JpdGhtcyBlbXBsb3llZCwgbWF5YmUgc29tZSBzdWJ0bGUgY29uY3VycmVuY3kgaXNzdWVzIG9yIHJhY2UgY29uZGl0aW9ucyBpbiBuYW1lIGdlbmVyYXRpb24gdGhhdCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBJIG5lZWQgdG8gZW5zdXJlIGEgcm9idXN0IHVuZGVyc3RhbmRpbmcgb2YgaXRzIGJlaGF2aW9yIHVuZGVyIHZhcmlvdXMgc2NlbmFyaW9zLCBpbmNsdWRpbmcgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBsaW1pdGF0aW9ucyB3aXRoaW4gdGhlIFBQUCBlbnZpcm9ubWVudCBpdHNlbGYuIEdvdCB0byBtYWtlIHN1cmUgdGhlIGltcGxlbWVudGF0aW9uIGlzIHNvbGlkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTczLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI5NzM6XHRjaGFyICpwcHBfZGV2X25hbWUoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKVxuMjk3NDpcdHtcbjI5NzU6XHRcdHN0cnVjdCBjaGFubmVsICpwY2ggPSBjaGFuLVx1MDAzZXBwcDtcbjI5NzY6XHRcdGNoYXIgKm5hbWUgPSBOVUxMO1xuMjk3NzpcdFx0c3RydWN0IHBwcCAqcHBwO1xuMjk3ODpcdFxuMjk3OTpcdFx0aWYgKHBjaCkge1xuMjk4MDpcdFx0XHRwcHAgPSByY3VfZGVyZWZlcmVuY2UocGNoLVx1MDAzZXBwcCk7XG4yOTgxOlx0XHRcdGlmIChwcHAgXHUwMDI2XHUwMDI2IHBwcC1cdTAwM2VkZXYpXG4yOTgyOlx0XHRcdFx0bmFtZSA9IHBwcC1cdTAwM2VkZXYtXHUwMDNlbmFtZTtcbjI5ODM6XHRcdH1cbjI5ODQ6XHRcdHJldHVybiBuYW1lO1xuMjk4NTpcdH1cbjI5ODY6XHRcbjI5ODc6XHRcbjI5ODg6XHQvKlxuMjk4OTpcdCAqIERpc2Nvbm5lY3QgYSBjaGFubmVsIGZyb20gdGhlIGdlbmVyaWMgbGF5ZXIuXG4yOTkwOlx0ICogVGhpcyBtdXN0IGJlIGNhbGxlZCBpbiBwcm9jZXNzIGNvbnRleHQuXG4yOTkxOlx0ICovXG4yOTkyOlx0dm9pZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NzYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSQ1UgRGVyZWZlcmVuY2UgQ29udW5kcnVtKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgcHBwX2Rldl9uYW1lYCBhbmQgaXQmIzM5O3MgdXNpbmcgYHJjdV9kZXJlZmVyZW5jZShwY2gtJmd0O3BwcClgLiBUaGF0JiMzOTtzIHN0YW5kYXJkIGFuZCBleHBlY3RlZCwgYnV0Li4uIEkmIzM5O3ZlIGdvdCBhIG5hZ2dpbmcgZmVlbGluZyBhYm91dCBzb21ldGhpbmcuIE5vdywgSSBzZWUgdGhhdCBgcHBwb2Vfc2VxX3Nob3dgIGNhbGxzIHRoaXMgZnVuY3Rpb24sIGJ1dCBpdCYjMzk7cyAqbm90KiB1c2luZyBhbiBgcmN1X3JlYWRfbG9jaygpYCBiZWZvcmVoYW5kPyBUaGF0JiMzOTtzIGEgaHVnZSByZWQgZmxhZy4gTXkgdW5kZXJzdGFuZGluZyBpcywgYW5kIEkmIzM5O2QgYmV0IG1vc3QgZXhwZXJ0cyB3b3VsZCBhZ3JlZSwgdGhhdCBhY2Nlc3NpbmcgYW4gUkNVLXByb3RlY3RlZCBwb2ludGVyIHJlcXVpcmVzIHRoZSBSQ1UgcmVhZCBsb2NrLiBgcHBwb2Vfc2VxX3Nob3dgIGlzIGNhbGxlZCBmcm9tIHRoZSBzZXFfZmlsZSBmcmFtZXdvcmssIGFuZCBteSBndXQgdGVsbHMgbWUgdGhhdCBzZXFfZmlsZSBtaWdodCBub3QgYXV0b21hdGljYWxseSBob2xkIHRoZSBSQ1UgcmVhZCBsb2NrLiBUaGlzIGNvdWxkIGJlIGEgcmFjZSBjb25kaXRpb24gd2FpdGluZyB0byBoYXBwZW4uIEkgbmVlZCB0byBjb25maXJtIHRoaXMgcXVpY2tseS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgcHBwb2Vfc2VxX3Nob3dgIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aGF0IGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTYyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NjI6XHRzdGF0aWMgaW50IHBwcG9lX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIDk2MzpcdHtcbiA5NjQ6XHRcdHN0cnVjdCBwcHBveF9zb2NrICpwbztcbiA5NjU6XHRcdGNoYXIgKmRldl9uYW1lO1xuIDk2NjpcdFx0Y2hhciAqcHBwX25hbWU7XG4gOTY3Olx0XG4gOTY4Olx0XHRpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pIHtcbiA5Njk6XHRcdFx0c2VxX3B1dHMoc2VxLCBcJiMzNDtJZCAgICAgICBBZGRyZXNzICAgICAgICAgICAgICBEZXZpY2UgICBQUFAtRGV2aWNlXFxuXCYjMzQ7KTtcbiA5NzA6XHRcdFx0Z290byBvdXQ7XG4gOTcxOlx0XHR9XG4gOTcyOlx0XG4gOTczOlx0XHRwbyA9IHY7XG4gOTc0Olx0XHRkZXZfbmFtZSA9IHBvLVx1MDAzZXBwcG9lX3BhLmRldjtcbiA5NzU6XHRcdHBwcF9uYW1lID0gcHBwX2Rldl9uYW1lKFx1MDAyNnBvLVx1MDAzZWNoYW4pO1xuIDk3NjpcdFxuIDk3NzpcdFx0c2VxX3ByaW50ZihzZXEsIFwmIzM0OyUwOFggJXBNICU4cyAlMTBzXFxuXCYjMzQ7LFxuIDk3ODpcdFx0XHQgICBwby1cdTAwM2VwcHBvZV9wYS5zaWQsIHBvLVx1MDAzZXBwcG9lX3BhLnJlbW90ZSwgZGV2X25hbWUsIHBwcF9uYW1lID8gcHBwX25hbWUgOiBcJiMzNDtcJiMzNDspO1xuIDk3OTpcdG91dDpcbiA5ODA6XHRcdHJldHVybiAwO1xuIDk4MTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI1MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEZWJ1Z2dpbmcgYSBQb3RlbnRpYWwgUFBQb0UgTG9jayoqCgpPa2F5LCBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGlzc3VlIGFuZCBhIGh1bmNoIGp1c3QgaGl0IG1lLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBwcHBvZV9zZXFfc3RhcnRgLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBpbiB0aGUgUFBQb0Ugc2VxdWVuY2UsIGFuZCBpdCYjMzk7cyBwb3NzaWJsZeKAlG1heWJlIGV2ZW4gbGlrZWx54oCUdGhhdCBpdCBjb250YWlucyBzb21lIHNvcnQgb2YgbXV0ZXggb3Igb3RoZXIgbG9jayB0aGF0IGNvdWxkIGJlIGNhdXNpbmcgYSBib3R0bGVuZWNrIG9yIGV2ZW4gYSBkZWFkbG9jay4gVGhpcyBjb3VsZCBiZSB0aGUgcm9vdCBvZiB0aGUgcHJvYmxlbSBJJiMzOTttIHNlZWluZy4gSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIHRoZSBsb2NrIGlzIHByb3Blcmx5IGltcGxlbWVudGVkIGFuZCByZWxlYXNlZCBpbiBhbGwgc2NlbmFyaW9zLCBhbmQgdW5kZXJzdGFuZCB3aGF0IHRoZSBjcml0aWNhbCBzZWN0aW9uIHByb3RlY3RzLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc3RhcnQgdHJhY2luZyB0aGUgZXhlY3V0aW9uIGZsb3cgYXJvdW5kIGBwcHBvZV9zZXFfc3RhcnRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDAzOlx0e1xuMTAwNDpcdFx0c3RydWN0IHBwcG9lX25ldCAqcG4gPSBwcHBvZV9wZXJuZXQoc2VxX2ZpbGVfbmV0KHNlcSkpO1xuMTAwNTpcdFx0bG9mZl90IGwgPSAqcG9zO1xuMTAwNjpcdFxuMTAwNzpcdFx0cmN1X3JlYWRfbG9jaygpO1xuMTAwODpcdFx0cmV0dXJuIGwgPyBwcHBvZV9nZXRfaWR4KHBuLCAtLWwpIDogU0VRX1NUQVJUX1RPS0VOO1xuMTAwOTpcdH1cbjEwMTA6XHRcbjEwMTE6XHRzdGF0aWMgdm9pZCAqcHBwb2Vfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxuMTAxMjpcdHtcbjEwMTM6XHRcdHN0cnVjdCBwcHBvZV9uZXQgKnBuID0gcHBwb2VfcGVybmV0KHNlcV9maWxlX25ldChzZXEpKTtcbjEwMTQ6XHRcdHN0cnVjdCBwcHBveF9zb2NrICpwbywgKm5leHQ7XG4xMDE1Olx0XG4xMDE2Olx0XHQmIzQzOyYjNDM7KnBvcztcbjEwMTc6XHRcdGlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikge1xuMTAxODpcdFx0XHRwbyA9IHBwcG9lX2dldF9pZHgocG4sIDApO1xuMTAxOTpcdFx0XHRnb3RvIG91dDtcbjEwMjA6XHRcdH1cbjEwMjE6XHRcdHBvID0gdjtcbjEwMjI6XHRcdG5leHQgPSByY3VfZGVyZWZlcmVuY2UocG8tXHUwMDNlbmV4dCk7XG4xMDIzOlx0XHRpZiAobmV4dClcbjEwMjQ6XHRcdFx0cG8gPSBuZXh0O1xuMTAyNTpcdFx0ZWxzZSB7XG4xMDI2Olx0XHRcdGludCBoYXNoID0gaGFzaF9pdGVtKHBvLVx1MDAzZXBwcG9lX3BhLnNpZCwgcG8tXHUwMDNlcHBwb2VfcGEucmVtb3RlKTtcbjEwMjc6XHRcbjEwMjg6XHRcdFx0cG8gPSBOVUxMO1xuMTAyOTpcdFx0XHR3aGlsZSAoJiM0MzsmIzQzO2hhc2ggXHUwMDNjIFBQUE9FX0hBU0hfU0laRSkge1xuMTAzMDpcdFx0XHRcdHBvID0gcmN1X2RlcmVmZXJlbmNlKHBuLVx1MDAzZWhhc2hfdGFibGVbaGFzaF0pO1xuMTAzMTpcdFx0XHRcdGlmIChwbylcbjEwMzI6XHRcdFx0XHRcdGJyZWFrO1xuMTAzMzpcdFx0XHR9XG4xMDM0Olx0XHR9XG4xMDM1Olx0XG4xMDM2Olx0b3V0OlxuMTAzNzpcdFx0cmV0dXJuIHBvO1xuMTAzODpcdH1cbjEwMzk6XHRcbjEwNDA6XHRzdGF0aWMgdm9pZCBwcHBvZV9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbjEwNDE6XHRcdF9fcmVsZWFzZXMoUkNVKVxuMTA0MjpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA2NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25jZXJucyBSZWdhcmRpbmcgUkNVIFByb3RlY3Rpb24gaW4gUFBQb0UgU2VxdWVuY2UgT3BlcmF0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IGBwcHBvZV9zZXFfc3RhcnRgIGhvbGRzIGFuIGByY3VfcmVhZF9sb2NrKClgLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gVGhlbiwgd2UgaGF2ZSBhIGNhbGwgdG8gYHBwcF9kZXZfbmFtZWAgd2hpY2gsIGxvZ2ljYWxseSwgc2hvdWxkIGJlIHNhZmUgYmVjYXVzZSBpdCYjMzk7cyB1bmRlciB0aGUgUkNVIHJlYWQgbG9jay4gSG93ZXZlciwgYHBwcF9kZXZfbmFtZWAgaXRzZWxmIHVzZXMgYHJjdV9kZXJlZmVyZW5jZShwY2gtJmd0O3BwcClgLiBPa2F5LCB0aGF0IHN1Z2dlc3RzIGBwY2gtJmd0O3BwcGAgaXMgUkNVIHByb3RlY3RlZCwgd2hpY2ggaXMgZ29vZC4gQnV0IHRoZW4gdGhlIHF1ZXN0aW9uIGJlY29tZXM6IGlzIGBwcHAtJmd0O2RldmAgc2FmZSB0byBhY2Nlc3MgKmFmdGVyKiB0aGF0IGRlcmVmZXJlbmNlPwoKVGhlIGNvcmUgb2YgbXkgY29uY2VybiByZXZvbHZlcyBhcm91bmQgdGhlIHBvdGVudGlhbCBmb3IgYSByYWNlIGNvbmRpdGlvbi4gSWYgYHBwcGAgaXMgZnJlZWQgY29uY3VycmVudGx5LCB0aGVuIGBwcHAtJmd0O2RldmAgd291bGQgbGlrZWx5IGFsc28gYmUgZnJlZWQsIGJlY29taW5nIHVudXNhYmxlLiBCdXQgYHBwcF9kZXZfbmFtZWAgcmV0dXJucyBgcHBwLSZndDtkZXYtJmd0O25hbWVgLiBOb3cgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGBjaGFyYCBhcnJheSB3aXRoaW4gYSBgc3RydWN0IG5ldF9kZXZpY2VgLiBJZiBgcHBwYCBpcyBmcmVlZCB3aGlsZSB0aGUgY29kZSBpcyBydW5uaW5nLCBhbmQgaWYgYHBwcC0mZ3Q7ZGV2YCBpcyBzdWJzZXF1ZW50bHkgZnJlZWQsIHRoZW4gdGhhdCBwb2ludGVyIGBwcHAtJmd0O2Rldi0mZ3Q7bmFtZWAgaXMgZGFuZ2xpbmcsIGFuZCBjb3VsZCBjYXVzZSBtYWpvciBpc3N1ZXMuCgpTcGVjaWZpY2FsbHksIHRoZSBmYWN0IHRoYXQgYHBwcF9kZXZfbmFtZWAgaXMgcmV0dXJuaW5nIGEgcG9pbnRlciBgbmFtZWAgdG8gYHBwcC0mZ3Q7ZGV2LSZndDtuYW1lYCBpcyB0cm91YmxpbmcuIExhdGVyLCBgcHBwb2Vfc2VxX3Nob3dgIHRoZW4gdXNlcyB0aGlzIHJldHVybmVkIGBwcHBfbmFtZWAgcG9pbnRlciBpbiBgc2VxX3ByaW50ZmAuIElmIGBwcHBgIG9yIGBwcHAtJmd0O2RldmAgaXMgZnJlZWQgY29uY3VycmVudGx5IGJldHdlZW4gd2hlbiBgcHBwX2Rldl9uYW1lYCBpcyBjYWxsZWQgYW5kIHdoZW4gYHNlcV9wcmludGZgIGFjdHVhbGx5IHVzZXMgdGhlIHBvaW50ZXIsIHRoZSBmdW5jdGlvbiBpcyBnb2luZyB0byByZWFkIGZyb20gZnJlZWQgbWVtb3J5LiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5IQoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgcHBwYCBpcywgaW5kZWVkLCBwcm90ZWN0ZWQgYnkgUkNVIHRvIHByb3ZpZGUgbWVtb3J5IHNhZmV0eS4gVG8gYmUgc3VyZSBhYm91dCB0aGlzLCBJIHNob3VsZCBleGFtaW5lIGBwcHBfZGVzdHJveV9pbnRlcmZhY2VgIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBQUFBvRSBpbnRlcmZhY2UgaXMgY2xlYW5lZCB1cCBhbmQgaG93IHRoZSBgcHBwYCBzdHJ1Y3R1cmUgaXMgaGFuZGxlZC4gVGhpcyBpcyB0aGUgY3JpdGljYWwgcGllY2UgdGhhdCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcHBfZGVzdHJveV9pbnRlcmZhY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTE1NDc9c3RhdGljIGludCBwcHBfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xNTU0LVx0LyogTGV0IHRoZSBuZXRkZXZpY2UgdGFrZSBhIHJlZmVyZW5jZSBvbiB0aGUgcHBwIGZpbGUuIFRoaXMgZW5zdXJlc1xuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MTU1NTpcdCAqIHRoYXQgcHBwX2Rlc3Ryb3lfaW50ZXJmYWNlKCkgd29uJiMzOTt0IHJ1biBiZWZvcmUgdGhlIGRldmljZSBnZXRzXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xNTU2LVx0ICogdW5yZWdpc3RlcmVkLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTU5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBwcHBfZGV2X25hbWVgIFZhcmlhYmxlKioKCk9rYXksIHRpbWUgdG8gY2lyY2xlIGJhY2sgYW5kIHJlLWV4YW1pbmUgdGhlIGBwcHBfZGV2X25hbWVgIHZhcmlhYmxlLiBJIG5lZWQgdG8gZW5zdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwuIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyBzdGlsbCBzb3VuZCwgYnV0IGluIGNvbXBsZXggc3lzdGVtcyBsaWtlIHRoaXMsIGFzc3VtcHRpb25zIGNhbiBiZSBkYW5nZXJvdXMuIExldCBtZSBxdWlja2x5IHJlZnJlc2ggdGhlIGNvbnRleHQ6IGlzIGl0IHN0aWxsIHBvaW50aW5nIHRvIHRoZSBleHBlY3RlZCBpbnRlcmZhY2U/IEhhcyBhbnl0aGluZyB1cHN0cmVhbSBvciBkb3duc3RyZWFtIHBvdGVudGlhbGx5IG1vZGlmaWVkIGl0cyB2YWx1ZSwgZWl0aGVyIGludGVudGlvbmFsbHkgb3IgdGhyb3VnaCBzb21lIHN1YnRsZSBpbnRlcmFjdGlvbiBJIGRpZG4mIzM5O3QgYW50aWNpcGF0ZT8gSeKAmWxsIG1lbnRhbGx5IHdhbGsgdGhyb3VnaCB0aGUgY29kZSBwYXRoIGFnYWluLCBmb2N1c2luZyBvbiBhbnkgcG9pbnRzIHdoZXJlIGBwcHBfZGV2X25hbWVgIGlzIHNldCwgYWNjZXNzZWQsIG9yIHBvc3NpYmx5IG92ZXJ3cml0dGVuLiBBcmUgdGhlcmUgYW55IHJhY2UgY29uZGl0aW9ucyBsdXJraW5nPyBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIHNjZW5hcmlvcz8gSSB3YW50IHRvIG1ha2UgY2VydGFpbiB0aGF0IGl0cyBzdGF0ZSBpcyBib3RoIGNvcnJlY3QgYW5kIGNvbnNpc3RlbnQgYXQgdGhpcyBwb2ludCBpbiB0aGUgZXhlY3V0aW9uLiBMZXQgbWUgbWFrZSBjZXJ0YWluIHRoYXQgdGhlcmUgd2VyZSBubyByZWNlbnQgY2hhbmdlcyB0byB0aGUgbW9kdWxlLiBJZiBJJiMzOTttIGx1Y2t5LCBhIHF1aWNrIHZpc3VhbCBjaGVjayB3aWxsIHN1ZmZpY2UuIEhvd2V2ZXIsIGlmIEkgc3VzcGVjdCBhIG1vcmUgaW50cmljYXRlIGlzc3VlLCBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCBkZWJ1Z2dpbmcgdG9vbHMgdG8gZGl2ZSBkZWVwZXIg4oCTIHBlcmhhcHMgc3RlcHBpbmcgdGhyb3VnaCB0aGUgcmVsZXZhbnQgY29kZSB3aXRoIGEgZGVidWdnZXIgb3IgdGVtcG9yYXJpbHkgYWRkaW5nIHNvbWUgaW5zdHJ1bWVudGF0aW9uLiBJIHdhbnQgdG8gYnVpbGQgYSBoaWdoIGxldmVsIG9mIGNvbmZpZGVuY2UgYXJvdW5kIHRoaXMgdmFyaWFibGUmIzM5O3MgY29ycmVjdG5lc3MgYmVmb3JlIEkgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5NzMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjk3MzpcdGNoYXIgKnBwcF9kZXZfbmFtZShzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXG4yOTc0Olx0e1xuMjk3NTpcdFx0c3RydWN0IGNoYW5uZWwgKnBjaCA9IGNoYW4tXHUwMDNlcHBwO1xuMjk3NjpcdFx0Y2hhciAqbmFtZSA9IE5VTEw7XG4yOTc3Olx0XHRzdHJ1Y3QgcHBwICpwcHA7XG4yOTc4Olx0XG4yOTc5Olx0XHRpZiAocGNoKSB7XG4yOTgwOlx0XHRcdHBwcCA9IHJjdV9kZXJlZmVyZW5jZShwY2gtXHUwMDNlcHBwKTtcbjI5ODE6XHRcdFx0aWYgKHBwcCBcdTAwMjZcdTAwMjYgcHBwLVx1MDAzZWRldilcbjI5ODI6XHRcdFx0XHRuYW1lID0gcHBwLVx1MDAzZWRldi1cdTAwM2VuYW1lO1xuMjk4MzpcdFx0fVxuMjk4NDpcdFx0cmV0dXJuIG5hbWU7XG4yOTg1Olx0fVxuMjk4NjpcdFxuMjk4NzpcdFxuMjk4ODpcdC8qXG4yOTg5Olx0ICogRGlzY29ubmVjdCBhIGNoYW5uZWwgZnJvbSB0aGUgZ2VuZXJpYyBsYXllci5cbjI5OTA6XHQgKiBUaGlzIG11c3QgYmUgY2FsbGVkIGluIHByb2Nlc3MgY29udGV4dC5cbjI5OTE6XHQgKi9cbjI5OTI6XHR2b2lkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1MzgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5IG9mIHRoZSBwcm92aWRlZCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlJDVSBSZWxlYXNlIFN0cmF0ZWd5IGZvciBgcHBwYCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBvZiB0aGlzIGBwcHBgIG9iamVjdCwgYW5kIGEga2V5IHF1ZXN0aW9uIHBvcHMgdXA6IHdoZW4gYHBwcGAgaXMgZGVhbGxvY2F0ZWQsIGlzIHRoYXQgb3BlcmF0aW9uIFJDVS1wcm90ZWN0ZWQ/IEdpdmVuIHRoZSBjb250ZXh0LCBpdCYjMzk7cyBhIGNyaXRpY2FsIGFzc3VtcHRpb24gdG8gY2xhcmlmeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gZW5zdXJlcyB0aGF0IHJlYWRlcnMgdXNpbmcgYHBwcGAgc2VlIGNvbnNpc3RlbnQgZGF0YSBldmVuIGR1cmluZyByZWxlYXNlLgoKVG8gY29uZmlybSB0aGlzLCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZnJlZWluZyBwYXRoLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gdGhlIGRlZmluaXRpb24gb2YgYHBwcF9yZWxlYXNlYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBtZWNoYW5pc20g4oCTIG9yIHRoZSBhYnNlbmNlIG9mIGl0LiBUaGUgYHBwcF9yZWxlYXNlYCBmdW5jdGlvbiBpcyB0aGUgZ2F0ZWtlZXBlciBoZXJlLCB0aGUgZGVmaW5pdGl2ZSBwb2ludCB3aGVyZSByZXNvdXJjZSBtYW5hZ2VtZW50IGhhcHBlbnMuIEkgbmVlZCB0byBzY3J1dGluaXplIHRoYXQgZnVuY3Rpb24gY2FyZWZ1bGx5IHRvIGRldGVybWluZSBpZiBpdCB1c2VzIGBjYWxsX3JjdWAsIGBzeW5jaHJvbml6ZV9yY3VgLCBvciBzaW1pbGFyIFJDVSBwcmltaXRpdmVzLCBvciBpZiBpdCB1dGlsaXplcyBhIGxvY2sgaW5zdGVhZCwgb3IgZXZlbiBpZiB0aGVyZSBpcyBubyBwcm90ZWN0aW9uIGF0IGFsbC4gS25vd2luZyB0aGUgc3RyYXRlZ3kgb2YgdGhlIHJlbGVhc2UgZnVuY3Rpb24gd2lsbCB0ZWxsIG1lIHRoZSBSQ1Ugc3Rvcnkgb2YgYHBwcGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2ZyZWVfcmN1LipwcHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg1OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIFBQUCBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgbGlrZWx5IHNvdXJjZSBvZiB0aGlzIG1lbW9yeSBpc3N1ZS4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgaW1tZWRpYXRlbHkgdGhpbmssICYjMzQ7TGV0JiMzOTtzIHplcm8gaW4gb24gYGtmcmVlYCBjYWxscyB3aXRoaW4gdGhlIGBwcHBfZ2VuZXJpYy5jYCBmaWxlLiYjMzQ7IFRoZSBgcHBwYCBjb21wb25lbnQgaXMgYSBjbGFzc2ljIGFyZWEgZm9yIHRoZXNlIGtpbmRzIG9mIHByb2JsZW1zLCBhbmQgYGtmcmVlYCwgc3BlY2lmaWNhbGx5LCBpbmRpY2F0ZXMgbWVtb3J5IGRlYWxsb2NhdGlvbiwgd2hpY2ggaXMgd2hlcmUgdGhpbmdzIG9mdGVuIGdvIHdyb25nLiBTbywgSSB3YW50IHRvIHNlZSBob3cgdGhlIGNvZGUgaXMgaGFuZGxpbmcgbWVtb3J5IGluIHRoZXJlLiBJdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2ZyZWUuKnBwcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjEtICogMDQwODAwIDpcdFJlc3BlY3QgcmVmZXJlbmNlIGNvdW50IG1lY2hhbmlzbXMgb24gbmV0LWRldmljZXMuXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoyMjogKiAyMDA4MDAgOlx0Zml4IGtmcmVlKHNrYikgaW4gcHBwb2VfcmN2IChhY21lKVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjMtICpcdFx0TW9kdWxlIHJlZmVyZW5jZSBjb3VudCBpcyBkZWNyZW1lbnRlZCBpbiB0aGUgcmlnaHQgc3BvdCBub3csXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxNTgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIGBwcHBfZGVzdHJveV9pbnRlcmZhY2VgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGZ1bmN0aW9uIG5hbWUsIGBwcHBfZGVzdHJveV9pbnRlcmZhY2VgLCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGUgc2NvcGU6IGl0JiMzOTtzIGludm9sdmVkIGluIHRlYXJpbmcgZG93biBhIFBvaW50LXRvLVBvaW50IFByb3RvY29sIChQUFApIGludGVyZmFjZS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSBsYXllcnMgb2YgdGhlIG5ldHdvcmsgc3RhY2sgYWZmZWN0ZWQgYnkgdGhpcyBwcm9jZXNzLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGxpbmsgbGF5ZXIsIG5ldHdvcmsgbGF5ZXIsIG1heWJlIGV2ZW4gdHJhbnNwb3J0IGxheWVyIGltcGxpY2F0aW9ucywgZGVwZW5kaW5nIG9uIGhvdyByb2J1c3QgdGhlIGltcGxlbWVudGF0aW9uIGlzLiBJIGV4cGVjdCBpdCYjMzk7bGwgaW52b2x2ZSBjbGVhbmluZyB1cCByZXNvdXJjZXM6IG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoZSBpbnRlcmZhY2Ugc3RydWN0dXJlLCBhbnkgYXNzb2NpYXRlZCBidWZmZXJzIG9yIHNvY2tldHMsIHBvdGVudGlhbGx5IHJlbW92aW5nIGVudHJpZXMgZnJvbSByb3V0aW5nIHRhYmxlcyBvciBBUlAgY2FjaGVzLCBhbmQgc2lnbmFsaW5nIHRvIHRoZSBoYXJkd2FyZSB0aGF0IHRoaXMgaW50ZXJmYWNlIGlzIG5vIGxvbmdlciBhY3RpdmUuIEkmIzM5O20gYWxzbyBjb25zaWRlcmluZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgaW50ZXJmYWNlIGJlaW5nIGRlc3Ryb3llZCB3aGlsZSBjb25uZWN0aW9ucyBhcmUgYWN0aXZlLiBXZXJlIHRoZXNlIGdyYWNlZnVsbHkgY2xvc2VkIG9yIGFicnVwdGx5IHRlcm1pbmF0ZWQ/IElzIHRoZXJlIGFueSBtZWNoYW5pc20gZm9yIHByZXZlbnRpbmcgZGF0YSBsb3NzIG9yIGNvcnJ1cHRpb24gZHVyaW5nIHRoZSB0ZWFyZG93bj8gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBpc3N1ZXMgdGhhdCBjb3VsZCBhcmlzZSB3aGVuIG11bHRpcGxlIHByb2Nlc3NlcyBvciB0aHJlYWRzIG1pZ2h0IGJlIHRyeWluZyB0byBtYW5pcHVsYXRlIG9yIGFjY2VzcyB0aGlzIGludGVyZmFjZSBzaW11bHRhbmVvdXNseS4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIHNhZmUgdG8gdXNlIGluIHRoZSBjb250ZXh0IG9mIG11bHRpdGhyZWFkZWQgb3BlcmF0aW9ucy4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgc29tZSBjb21wbGV4IGludGVyYWN0aW9ucyB3aXRoIHZhcmlvdXMga2VybmVsIHN1YnN5c3RlbXMsIGVzcGVjaWFsbHkgaWYgdGhlcmUgYXJlIGFueSBuZXR3b3JrIG5hbWVzcGFjZXMgb3IgY29udGFpbmVyaXphdGlvbiBpbnZvbHZlZC4gQW5kIG9mIGNvdXJzZSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiwgaWYgZG9uZSBjb3JyZWN0bHksIHRvIGJlIHJvYnVzdCB0byBlcnJvcnMsIGFuZCBoYW5kbGUgdmFyaW91cyBzY2VuYXJpb3MgZ3JhY2VmdWxseSBzdWNoIGFzIHRoZSBpbnRlcmZhY2UgYmVpbmcgYWxyZWFkeSBkZXN0cm95ZWQuIExldCYjMzk7cyBzZWUgaG93IGl0IGFsbCBwbGF5cyBvdXQgaW4gcHJhY3RpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BwcF9kZXN0cm95X2ludGVyZmFjZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MTU0Nz1zdGF0aWMgaW50IHBwcF9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTE1NTQtXHQvKiBMZXQgdGhlIG5ldGRldmljZSB0YWtlIGEgcmVmZXJlbmNlIG9uIHRoZSBwcHAgZmlsZS4gVGhpcyBlbnN1cmVzXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoxNTU1Olx0ICogdGhhdCBwcHBfZGVzdHJveV9pbnRlcmZhY2UoKSB3b24mIzM5O3QgcnVuIGJlZm9yZSB0aGUgZGV2aWNlIGdldHNcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTE1NTYtXHQgKiB1bnJlZ2lzdGVyZWQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NzAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYHBwcGAmIzM5O3MgRGVhbGxvY2F0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyB0byBkaXZlIGludG8gdGhlIHNwZWNpZmljcyBvZiBob3cgYHBwcGAgZ2V0cyBmcmVlZC4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IG1lY2hhbmlzbSwgYmVjYXVzZSBJIGtub3cgdGhlcmUmIzM5O3MgYSBsb3Qgb2YgbnVhbmNlIGluIGhvdyB5b3UgbWFuYWdlIG1lbW9yeSBhbmQgZGVhbGxvY2F0ZSByZXNvdXJjZXMuIEkgd2FudCB0byBzZWUgaWYgdGhlIGRlYWxsb2NhdGlvbiBpcyBtYW51YWwgb3IgYXV0b21hdGljLCB3aGF0IHRlY2huaXF1ZXMgYXJlIGVtcGxveWVkLiBJcyBpdCByZWZlcmVuY2UgY291bnRpbmcsIGdhcmJhZ2UgY29sbGVjdGlvbiwgZXhwbGljaXQgYGZyZWUoKWAgY2FsbHMsIG9yIHNvbWUga2luZCBvZiBzY29wZWQgcmVzb3VyY2UgbWFuYWdlbWVudD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgZ290Y2hhcyBvciBlZGdlIGNhc2VzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBuZWVkIHRvIGNvbnNpZGVyIGFueSBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYW5kIHdoZXRoZXIgdGhlcmUgbWlnaHQgYmUgYW55IHBvdGVudGlhbCBmb3IgbWVtb3J5IGxlYWtzLCBkb3VibGUgZnJlZXMsIG9yIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBpbnZlc3RpZ2F0aW9uIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgc3RhYmlsaXR5IGFuZCByZXNvdXJjZSBlZmZpY2llbmN5IG9mIHRoaXMgcGFydCBvZiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tmcmVlLipwcHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5NDAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgcHBwX2dlbmVyaWMuY2AqKgoKT2theSwgSSBuZWVkIHRvIGludmVzdGlnYXRlIGEgbWVtb3J5LXJlbGF0ZWQgaXNzdWUsIGFuZCBteSBpbnR1aXRpb24gaXMgcG9pbnRpbmcgbWUgdG93YXJkcyB0aGUgUG9pbnQtdG8tUG9pbnQgUHJvdG9jb2wgKFBQUCkgZ2VuZXJpYyBjb2RlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IGRlYWxsb2NhdGlvbiwgc28gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGBrZnJlZWAgZnVuY3Rpb24gY2FsbHMgd2l0aGluIGBwcHBfZ2VuZXJpYy5jYC4gVGhpcyBzZWVtcyBsaWtlIGEgbG9naWNhbCBmaXJzdCBzdGVwIHRvIHNlZSBob3cgbWVtb3J5IGlzIGJlaW5nIGhhbmRsZWQgYW5kIGxvb2sgZm9yIHBvdGVudGlhbCBkb3VibGUgZnJlZXMsIHVzZS1hZnRlci1mcmVlcywgb3IgbWVtb3J5IGxlYWtzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tmcmVlXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9NTgwPXN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2cgKmdldF9maWx0ZXIoc3RydWN0IHNvY2tfZnByb2cgKnVwcm9nKVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTU5Ni1cdGVyciA9IGJwZl9wcm9nX2NyZWF0ZShcdTAwMjZyZXMsIFx1MDAyNmZwcm9nKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjU5NzpcdGtmcmVlKGZwcm9nLmZpbHRlcik7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy01OTgtXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MzI3NT1wcHBfdW5yZWdpc3Rlcl9jb21wcmVzc29yKHN0cnVjdCBjb21wcmVzc29yICpjcClcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0zMjgyLVx0XHRsaXN0X2RlbChcdTAwMjZjZS1cdTAwM2VsaXN0KTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjMyODM6XHRcdGtmcmVlKGNlKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTMyODQtXHR9XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MzU3NT1zdGF0aWMgdm9pZCBwcHBfcmVsZWFzZV9jaGFubmVsX2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMzU4MC1cdHNrYl9xdWV1ZV9wdXJnZShcdTAwMjZwY2gtXHUwMDNlZmlsZS5ycSk7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzozNTgxOlx0a2ZyZWUocGNoKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTM1ODItfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDcxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBwcHBgIFN0cnVjdHVyZSBhbmQgSXRzIFJlbGF0aW9uc2hpcCB0byBgbmV0X2RldmljZWAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgY2VudGVyZWQgYXJvdW5kIHVuZGVyc3RhbmRpbmcgdGhlIHByZWNpc2UgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGBwcHBgIHN0cnVjdHVyZSAobGlrZWx5IHJlcHJlc2VudGluZyBhIFBvaW50LXRvLVBvaW50IFByb3RvY29sIGltcGxlbWVudGF0aW9uKSBhbmQgdGhlIGBuZXRfZGV2aWNlYCBzdHJ1Y3R1cmUgKHRoZSBmdW5kYW1lbnRhbCBuZXR3b3JrIGludGVyZmFjZSBhYnN0cmFjdGlvbikuCgpUaGUgcXVlc3Rpb24gaXMsIHNwZWNpZmljYWxseSwgaG93IGlzIGBwcHBgICptYW5hZ2VkKiBpbiBtZW1vcnk/IElzIGBzdHJ1Y3QgcHBwYCBpbmhlcmVudGx5IGVtYmVkZGVkICp3aXRoaW4qIGBzdHJ1Y3QgbmV0X2RldmljZWA/IFRoYXQgd291bGQgaW1wbHkgYSB0aWdodCBjb3VwbGluZywgYSBzaW5nbGUgYWxsb2NhdGlvbiBzdHJhdGVneSB3aGVyZSB0aGUgUFBQLXNwZWNpZmljIGRhdGEgaXMgZGlyZWN0bHkgcGFydCBvZiB0aGUgaW50ZXJmYWNlIGRlc2NyaXB0b3IuIE9yLCBpcyBgcHBwYCBhbGxvY2F0ZWQgc2VwYXJhdGVseSwgbGlrZWx5IGxpbmtlZCB0byBhIGBuZXRfZGV2aWNlYCBpbnN0YW5jZSB2aWEgYSBwb2ludGVyPyBBIG1vcmUgbW9kdWxhciBhcHByb2FjaCB0aGF0IGFsbG93cyBmb3IgcG90ZW50aWFsbHkgbW9yZSBkeW5hbWljIGNvbmZpZ3VyYXRpb25zLiBUaGUgJiMzNDtvciYjMzQ7IGltcGxpZXMgdGhpcy4KCkkgbmVlZCB0byBjb25maXJtIHRoaXM6IFVuZGVyc3RhbmRpbmcgdGhlIG1lbW9yeSBtb2RlbCBkaXJlY3RseSBpbXBhY3RzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIGNlcnRhaW4gdGFza3M6IGRldmljZSBkcml2ZXIgZGV2ZWxvcG1lbnQsIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgZGVidWdnaW5nLCBvciBvcHRpbWl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX25ldGRldiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTMzNTU9c3RhdGljIGludCBwcHBfY3JlYXRlX2ludGVyZmFjZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgKnVuaXQpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMzM2NS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjMzNjY6XHRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBwcHApLCBcJiMzNDtcJiMzNDssIE5FVF9OQU1FX0VOVU0sIHBwcF9zZXR1cCk7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0zMzY3LVx0aWYgKCFkZXYpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkwMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDYxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgS2VybmVsIFBhdGNoIGZvciBQUFBvRSBJbmZvcm1hdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgc3RydWN0IHBwcGAgaXMgY2xvc2VseSB0aWVkIHRvIGBzdHJ1Y3QgbmV0X2RldmljZWAsIG1lYW5pbmcgd2hlbiB0aGUgbmV0IGRldmljZSBnb2VzLCBzbyBkb2VzIHRoZSBQUFAgZGF0YS4gVGhlIGtleSBpcyB0aGF0IGBuZXRfZGV2aWNlYCBjbGVhbnVwIHVzZXMgUkNVLiBUaGlzIHRlbGxzIG1lIHRoYXQgYW55IGFjY2VzcyB0byBgcHBwYCBkYXRhIHVuZGVyIGFuIFJDVSByZWFkIGxvY2sgaXMgcHJvYmFibHkgc2FmZSwgYXMgYGZyZWVfbmV0ZGV2YCB1c2VzIFJDVS4gSSYjMzk7bSBlc3BlY2lhbGx5IGZvY3VzZWQgb24gYHBwcC0mZ3Q7ZGV2LSZndDtuYW1lYCwgYSBjaGFyYWN0ZXIgYXJyYXkgd2l0aGluIHRoZSBgbmV0X2RldmljZWAgc3RydWN0LiBTaW5jZSBgcHBwX2Rldl9uYW1lYCByZXR1cm5zIGEgcG9pbnRlciB0byBgcHBwLSZndDtkZXYtJmd0O25hbWVgIGFuZCB0aGlzIGRhdGEgaXMgdXNlZCBpbiBgcHBwb2Vfc2VxX3Nob3dgLCB3aGljaCBpcyBjYWxsZWQgd2l0aGluIGFuIFJDVSByZWFkIGxvY2sgY29udGV4dCAoYHNlcV9zdGFydGAgYWNxdWlyZXMgYW5kIGBzZXFfc3RvcGAgcmVsZWFzZXMgdGhlIGxvY2spLCB0aGUgcG9pbnRlciBzaG91bGQgYmUgdmFsaWQgZHVyaW5nIHRoZSBgc2VxX3ByaW50ZmAgY2FsbC4KClNvLCB0aGUgZnVuY3Rpb25hbCBjaGFuZ2Ugc2VlbXMgbWluaW1hbCDigJMganVzdCBhZGRpbmcgdGhpcyBgcHBwX2Rldl9uYW1lYCB0byB0aGUgYC9wcm9jL25ldC9wcHBvZWAgb3V0cHV0LiBUaGlzIGlzIGEgcHVyZWx5IGluZm9ybWF0aW9uYWwgYWRkaXRpb24gdG8gYSBwcm9jZnMgZmlsZS4gTm93LCB0aGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgZXZlbiB3b3J0aCBmdXp6aW5nPwoKVGhlIGluc3RydWN0aW9ucyBnaXZlIG1lIGEgc29saWQgc2V0IG9mIHJlYXNvbnMgKm5vdCogdG8gZnV6ei4gVGhleSBzcGVjaWZpY2FsbHkgZXhjbHVkZSBtb2RpZmljYXRpb25zIHRvIGRvY3VtZW50YXRpb24sIEtjb25maWcsIGNvbW1lbnRzLCBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzIGxpa2UgbG9nZ2luZywgYW5kIGNoYW5nZXMgdGhhdCBkb24mIzM5O3QgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuIFRoaXMgcHJvY2ZzIGNoYW5nZSAqaXMqIGluZm9ybWF0aW9uYWwuIEl0JiMzOTtzIGp1c3QgYWRkaW5nIGEgY29sdW1uLCBzbyBpdCBzZWVtcyBsaWtlIGl0IHdvdWxkbiYjMzk7dCBjaGFuZ2UgYW55IGNvZGUmIzM5O3MgYmVoYXZpb3IuCgpJIGJyaWVmbHkgaGFkIGEgY29uY2VybiB0aGF0IGBwcHBfbmFtZWAgY291bGQgYmUgTlVMTCBhbmQgY2F1c2UgYSBzZWN1cml0eSBpc3N1ZS4gQnV0IGl0IGlzIGhhbmRsZWQgYnkgdGhlIGNvbmRpdGlvbmFsIGluIHRoZSBjb2RlLiBJIGFsc28gY29uc2lkZXJlZCBhIHVzZS1hZnRlci1mcmVlIGlzc3VlLCBidXQgd2UmIzM5O3ZlIGVzdGFibGlzaGVkIHRoYXQgdGhlIGFjY2VzcyBpcyBwcm90ZWN0ZWQgYnkgYW4gUkNVIHJlYWQgbG9jay4gVGhlcmVmb3JlLCB0aGUgbWVtb3J5IGlzIHN0aWxsIHZhbGlkLiBJJiMzOTttIGdvaW5nIHRvIHJldmlldyB0aGUgZGlmZiBhZ2FpbiB0byBtYWtlIHN1cmUgdGhhdCBJIGRpZG4mIzM5O3QgbWlzcyBzb21ldGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BwcF9kZXZfbmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jPTk2Mj1zdGF0aWMgaW50IHBwcG9lX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTk3NC1cdGRldl9uYW1lID0gcG8tXHUwMDNlcHBwb2VfcGEuZGV2O1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6OTc1Olx0cHBwX25hbWUgPSBwcHBfZGV2X25hbWUoXHUwMDI2cG8tXHUwMDNlY2hhbik7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05NzYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTAzCgkJCQkJCQlvdXRwdXQ6IDczCgkJCQkJCQl0aG91Z2h0czogNDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBQUG9FIFByb2NmcyBDaGFuZ2UqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcuIFRoaXMgZGlmZi4uLiB5ZXAsIGl0JiMzOTtzIHByZWNpc2VseSB0aGUgY2hhbmdlIEkgZXhwZWN0ZWQuIFdlJiMzOTtyZSBqdXN0IGFkZGluZyBhIG5ldyBjb2x1bW4gdG8gdGhlIGAvcHJvY2AgZmlsZXN5c3RlbSBlbnRyeSBmb3IgUFBQb0UgY29ubmVjdGlvbnMuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZ29pbmcgdG8gZGlzcGxheSB0aGUgUFBQIGRldmljZSBuYW1lLgoKVGhpcyBpcyBhIHJlYWQtb25seSBpbnRlcmZhY2UsIHRoYXQgbXVjaCBpcyBjbGVhci4gVGhlIHByaW1hcnkgcHVycG9zZSBvZiB0aGlzIGNoYW5nZSBzZWVtcyB0byBiZSBmb3IgaW5mb3JtYXRpb25hbCBkaXNwbGF5LCBwb3RlbnRpYWxseSBkZWJ1Z2dpbmcgb3IgbW9uaXRvcmluZy4gSXQmIzM5O3MgcmVhbGx5IGp1c3QgZm9yIHByZXNlbnRhdGlvbiBpbiBgL3Byb2NgLiBJbXBvcnRhbnRseSwgdGhlcmUmIzM5O3Mgbm90aGluZyBoZXJlIHRoYXQgYWx0ZXJzIHRoZSBjb3JlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuIFRoaXMgaXNuJiMzOTt0IHRvdWNoaW5nIGFueSBjcml0aWNhbCBwYXRoIG9yIGFkZGluZyBhbnkgbmV3IGV4dGVybmFsIGlucHV0cy4KCkdpdmVuIHRoYXQgaXQmIzM5O3MgcHVyZWx5IGluZm9ybWF0aW9uYWwsIEkgZG9uJiMzOTt0IHNlZSBhbnkgcmVhbCB2YWx1ZSBpbiBmdXp6aW5nIHRoaXMuIFRoZXJlJiMzOTtzIG5vIGlucHV0IHRoYXQgdGhpcyBjaGFuZ2UgaXMgZXhwb3NlZCB0bywgdGhhdCBjYW4gY2F1c2UgaXQgdG8gY29ycnVwdCB0aGUgc3lzdGVtIGluIGFueSB3YXkuCgpUaGVyZWZvcmUsIEkmIzM5O20gY29tZm9ydGFibGUgc2F5aW5nIHRoYXQgdGhpcyBpcyBub3Qgc29tZXRoaW5nIHRoYXQgd291bGQgYmVuZWZpdCBmcm9tIGZ1enppbmcuIE15IGNvbmNsdXNpb246IGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhbiBleHRyYSBjb2x1bW4gdG8gdGhlIC9wcm9jL25ldC9wcHBvZSBzZXFfZmlsZSBvdXRwdXQuIFRoaXMgaXMgYSBwdXJlbHkgaW5mb3JtYXRpb25hbC9kZWNvcmF0aXZlIGNoYW5nZSB0aGF0IGRvZXMgbm90IGFsdGVyIHRoZSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgYW4gZXh0cmEgY29sdW1uIHRvIHRoZSAvcHJvYy9uZXQvcHBwb2Ugc2VxX2ZpbGUgb3V0cHV0LiBUaGlzIGlzIGEgcHVyZWx5IGluZm9ybWF0aW9uYWwvZGVjb3JhdGl2ZSBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBhbHRlciB0aGUgZnVuY3Rpb25hbCBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjM4OjMzLjg2NDQzNDY2MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MjE3Mjc5ODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgYW4gZXh0cmEgY29sdW1uIHRvIHRoZSAvcHJvYy9uZXQvcHBwb2Ugc2VxX2ZpbGUgb3V0cHV0LiBUaGlzIGlzIGEgcHVyZWx5IGluZm9ybWF0aW9uYWwvZGVjb3JhdGl2ZSBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBhbHRlciB0aGUgZnVuY3Rpb25hbCBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6Mzg6MzMuODY0NDQzMTYxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA5MzE1ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlOGI3OTk0ZmRlZWRhYTlhODAzMzA0MGIyNWY5NDZiM2FlNDY1ZmQ0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDI5IDA0OjM4OjMyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcXG5pbmRleCA2ODc0YTFhOGVkYWYxLi5jYjMxZjVkYjQzZTgxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcXG5AQCAtOTYzLDE3ICs5NjMsMTkgQEAgc3RhdGljIGludCBwcHBvZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4ge1xcbiBcXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG87XFxuIFxcdGNoYXIgKmRldl9uYW1lO1xcbitcXHRjaGFyICpwcHBfbmFtZTtcXG4gXFxuIFxcdGlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikge1xcbi1cXHRcXHRzZXFfcHV0cyhzZXEsIFxcXCJJZCAgICAgICBBZGRyZXNzICAgICAgICAgICAgICBEZXZpY2VcXFxcblxcXCIpO1xcbitcXHRcXHRzZXFfcHV0cyhzZXEsIFxcXCJJZCAgICAgICBBZGRyZXNzICAgICAgICAgICAgICBEZXZpY2UgICBQUFAtRGV2aWNlXFxcXG5cXFwiKTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuIFxcdHBvID0gdjtcXG4gXFx0ZGV2X25hbWUgPSBwby1cXHUwMDNlcHBwb2VfcGEuZGV2O1xcbitcXHRwcHBfbmFtZSA9IHBwcF9kZXZfbmFtZShcXHUwMDI2cG8tXFx1MDAzZWNoYW4pO1xcbiBcXG4tXFx0c2VxX3ByaW50ZihzZXEsIFxcXCIlMDhYICVwTSAlOHNcXFxcblxcXCIsXFxuLVxcdFxcdHBvLVxcdTAwM2VwcHBvZV9wYS5zaWQsIHBvLVxcdTAwM2VwcHBvZV9wYS5yZW1vdGUsIGRldl9uYW1lKTtcXG4rXFx0c2VxX3ByaW50ZihzZXEsIFxcXCIlMDhYICVwTSAlOHMgJTEwc1xcXFxuXFxcIixcXG4rXFx0XFx0ICAgcG8tXFx1MDAzZXBwcG9lX3BhLnNpZCwgcG8tXFx1MDAzZXBwcG9lX3BhLnJlbW90ZSwgZGV2X25hbWUsIHBwcF9uYW1lID8gcHBwX25hbWUgOiBcXFwiXFxcIik7XFxuIG91dDpcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6Mzg6MzQuMzI2MTg5NjcyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjQ3NTU1MTkzNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBhbiBleHRyYSBjb2x1bW4gdG8gdGhlIC9wcm9jL25ldC9wcHBvZSBzZXFfZmlsZSBvdXRwdXQuIFRoaXMgaXMgYSBwdXJlbHkgaW5mb3JtYXRpb25hbC9kZWNvcmF0aXZlIGNoYW5nZSB0aGF0IGRvZXMgbm90IGFsdGVyIHRoZSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlOGI3OTk0ZmRlZWRhYTlhODAzMzA0MGIyNWY5NDZiM2FlNDY1ZmQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjkgMDQ6Mzg6MzIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXG5pbmRleCA2ODc0YTFhOGVkYWYxLi5jYjMxZjVkYjQzZTgxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXG5AQCAtOTYzLDE3ICs5NjMsMTkgQEAgc3RhdGljIGludCBwcHBvZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbiB7XG4gXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG87XG4gXHRjaGFyICpkZXZfbmFtZTtcbitcdGNoYXIgKnBwcF9uYW1lO1xuIFxuIFx0aWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7XG4tXHRcdHNlcV9wdXRzKHNlcSwgXCJJZCAgICAgICBBZGRyZXNzICAgICAgICAgICAgICBEZXZpY2VcXG5cIik7XG4rXHRcdHNlcV9wdXRzKHNlcSwgXCJJZCAgICAgICBBZGRyZXNzICAgICAgICAgICAgICBEZXZpY2UgICBQUFAtRGV2aWNlXFxuXCIpO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbiBcdHBvID0gdjtcbiBcdGRldl9uYW1lID0gcG8tXHUwMDNlcHBwb2VfcGEuZGV2O1xuK1x0cHBwX25hbWUgPSBwcHBfZGV2X25hbWUoXHUwMDI2cG8tXHUwMDNlY2hhbik7XG4gXG4tXHRzZXFfcHJpbnRmKHNlcSwgXCIlMDhYICVwTSAlOHNcXG5cIixcbi1cdFx0cG8tXHUwMDNlcHBwb2VfcGEuc2lkLCBwby1cdTAwM2VwcHBvZV9wYS5yZW1vdGUsIGRldl9uYW1lKTtcbitcdHNlcV9wcmludGYoc2VxLCBcIiUwOFggJXBNICU4cyAlMTBzXFxuXCIsXG4rXHRcdCAgIHBvLVx1MDAzZXBwcG9lX3BhLnNpZCwgcG8tXHUwMDNlcHBwb2VfcGEucmVtb3RlLCBkZXZfbmFtZSwgcHBwX25hbWUgPyBwcHBfbmFtZSA6IFwiXCIpO1xuIG91dDpcbiBcdHJldHVybiAwO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjM4OjM0LjMyNjE5MDgzMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MzMwNzczNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBwcG9wZV9zZXFfc2hvdyBhbmQgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyB0b3VjaGVkIGBkcml2ZXJzL25ldC9wcHAvcHBwb2UuY2AsIHNwZWNpZmljYWxseSB0aGUgYHBwcG9lX3NlcV9zaG93YCBmdW5jdGlvbi4gRnJvbSB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSB0aGlzIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGluZyB0aGUgb3V0cHV0IHlvdSBzZWUgaW4gYC9wcm9jL25ldC9wcHBvZWAgb3IgYSBzaW1pbGFyIHNlcV9maWxlIGludGVyZmFjZS4gVGhlIGNoYW5nZSBpdHNlbGYgaXMgcHJldHR5IHNpbXBsZTogaXQncyBhZGRpbmcgYHBwcF9uYW1lID0gcHBwX2Rldl9uYW1lKFx1MDAyNnBvLVx1MDAzZWNoYW4pO2AgYW5kIHRoZW4gcHJpbnRpbmcgdGhhdCBuYW1lLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiSXMgdGhpcyBzb21ldGhpbmcgd2UgbmVlZCB0byB3b3JyeSBhYm91dCBpbiB0ZXJtcyBvZiBmdXp6aW5nP1wiIEl0J3MgYSBgc2VxX3Nob3dgIGZ1bmN0aW9uLCB3aGljaCBnZW5lcmFsbHkgbWVhbnMgaXQncyByZWFkLW9ubHkgb3V0cHV0LiBUaGVzZSBmdW5jdGlvbnMgYXJlIHR5cGljYWxseSBub3QgdGhlIGhpZ2hlc3QtcHJpb3JpdHkgdGFyZ2V0cyBmb3IgZnV6emluZyB1bmxlc3MgdGhleSBleHBvc2UgYSBwYXJ0aWN1bGFybHkganVpY3kgdnVsbmVyYWJpbGl0eS4gSG93ZXZlciwgdGhlIHVzZSBvZiBgcHBwX2Rldl9uYW1lKFx1MDAyNnBvLVx1MDAzZWNoYW4pYCBkb2VzIG1ha2UgbWUgcGF1c2UuIFRoZXJlJ3MgYWx3YXlzIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWJ0bGUgbG9ja2luZyBpc3N1ZXMgb3IgbGlmZXRpbWUgY29uY2VybnMgd2hlbiBkZWFsaW5nIHdpdGggZGV2aWNlIG5hbWVzLCBldmVuIGluIGEgc2VlbWluZ2x5IHNpbXBsZSByZWFkIG9wZXJhdGlvbi5cblxuU28sIEkgdGhpbmsgSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byBib3RoIGBwcHBfZGV2X25hbWVgIGFuZCB0aGUgYHBwcG9lX3NlcV9zaG93YCBmdW5jdGlvbiBpdHNlbGYuIFRoZSBmYWN0IHRoYXQgdGhlIG5hbWUgaXMgYmVpbmcgcmVhZCBsaWtlIHRoaXMgbWFrZXMgbWUgd29uZGVyIGlmIHRoZXJlJ3MgYW55IHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIHdpdGhpbiB0aGUgcHBwIGRldmljZSBuYW1lIGxvb2t1cC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYHBwcF9kZXZfbmFtZWAgaXMgYmVpbmcgY2FsbGVkIHdpdGggcHJvcGVyIGxvY2tpbmcgaW4gcGxhY2UuIFRoYXTigJlzIHdoZXJlIEknbGwgY29uY2VudHJhdGUgbXkgZm9jdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDozODozOS4xNTkyNzA1MDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwNzQ4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHBwb2Vfc2VxX3Nob3dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9OTM2PXN0YXRpYyBpbnQgcHBwb2VfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTYxLSNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjk2MjpzdGF0aWMgaW50IHBwcG9lX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTk2My17XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz0xMDQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcHBwb2Vfc2VxX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTEwNDktXFx0LnN0b3BcXHRcXHQ9IHBwcG9lX3NlcV9zdG9wLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjEwNTA6XFx0LnNob3dcXHRcXHQ9IHBwcG9lX3NlcV9zaG93LFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTEwNTEtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6Mzg6MzkuMjAyMzQ5ODA5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxMjUzNDY2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQUFBvRSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgYHBwcG9lX3NlcV9zaG93YC4gTG9va3MgbGlrZSBpdCdzIGp1c3QgYWRkaW5nIHRoZSBvdXRwdXQgb2YgYHBwcF9kZXZfbmFtZShcdTAwMjZwby1cdTAwM2VjaGFuKWAgdG8gdGhlIGAvcHJvYy9uZXQvcHBwb2VgIHByb2NmcyBmaWxlLiBQdXJlbHkgaW5mb3JtYXRpb25hbCwgcmlnaHQ/IE5vIHJlYWwgZnVuY3Rpb25hbCBpbXBhY3QgYmV5b25kIHJlYWRpbmcgYW5kIGRpc3BsYXlpbmcgdGhpcyBuZXcgZmllbGQuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHdhcnJhbnQgZnV6emluZz8gT24gdGhlIHN1cmZhY2UsIGl0IHNlZW1zIGxpa2Ugb3ZlcmtpbGwgZm9yIGEgYHNlcV9zaG93YCBmdW5jdGlvbi4gQnV0IHdhaXQuLi4gYHBwcF9kZXZfbmFtZWAuLi4gdGhhdCBmdW5jdGlvbiBtaWdodCBiZSBkb2luZyBzb21ldGhpbmcgaW50ZXJlc3RpbmcsIHBvdGVudGlhbGx5IGRlcmVmZXJlbmNpbmcgc29tZXRoaW5nLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBhY3R1YWxseSAqZG9pbmcqIGJlZm9yZSBJIGRpc21pc3MgdGhpcyBvdXRyaWdodC4gQmV0dGVyIHRvIGJlIHNhZmUgdGhhbiBzb3JyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA2NCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDozODo0Mi41MTQ4ODg2MjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MDc2NzA5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcHBfZGV2X25hbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTI5NTM9aW50IHBwcF91bml0X251bWJlcihzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yOTcyLSAqL1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjI5NzM6Y2hhciAqcHBwX2Rldl9uYW1lKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbilcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yOTc0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTM2NjI9RVhQT1JUX1NZTUJPTChwcHBfdW5pdF9udW1iZXIpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjM2NjM6RVhQT1JUX1NZTUJPTChwcHBfZGV2X25hbWUpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTM2NjQtRVhQT1JUX1NZTUJPTChwcHBfaW5wdXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9OTYyPXN0YXRpYyBpbnQgcHBwb2Vfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05NzQtXFx0ZGV2X25hbWUgPSBwby1cXHUwMDNlcHBwb2VfcGEuZGV2O1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjk3NTpcXHRwcHBfbmFtZSA9IHBwcF9kZXZfbmFtZShcXHUwMDI2cG8tXFx1MDAzZWNoYW4pO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTk3Ni1cXG4tLVxcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaD03Mz1leHRlcm4gaW50IHBwcF91bml0X251bWJlcihzdHJ1Y3QgcHBwX2NoYW5uZWwgKik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtNzctICovXFxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oOjc4OmV4dGVybiBjaGFyICpwcHBfZGV2X25hbWUoc3RydWN0IHBwcF9jaGFubmVsICopO1xcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaC03OS1cXG4tLVxcbm5ldC9sMnRwL2wydHBfcHBwLmM9NDk4PXN0YXRpYyB2b2lkIHBwcG9sMnRwX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICphcmcpXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTUwNy1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjUwODpcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIgICBpbnRlcmZhY2UgJXNcXFxcblxcXCIsIHBwcF9kZXZfbmFtZShcXHUwMDI2cG8tXFx1MDAzZWNoYW4pKTtcXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTUwOS1cXHR9XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTE1MTM9c3RhdGljIHZvaWQgcHBwb2wydHBfc2VxX3Nlc3Npb25fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTE1NjQtXFxubmV0L2wydHAvbDJ0cF9wcHAuYzoxNTY1OlxcdFxcdHNlcV9wcmludGYobSwgXFxcIiAgIGludGVyZmFjZSAlc1xcXFxuXFxcIiwgcHBwX2Rldl9uYW1lKFxcdTAwMjZwby1cXHUwMDNlY2hhbikpO1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTU2Ni1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjM4OjQ0LjI1NTY2MDg1N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTY5NTc3NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBpdCdzICpteSogdHJhaW4gb2YgdGhvdWdodDpcblxuKipEaXZpbmcgaW50byB0aGUgYHBwcF9kZXZfbmFtZWAgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB1bmRlcnN0YW5kIHByZWNpc2VseSBob3cgdGhlIGBwcHBfZGV2X25hbWVgIGlzIGltcGxlbWVudGVkLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBkZXRhaWxzLCB0aGUgY3J1Y2lhbCBwYXJ0cyB0aGF0IG1ha2UgdGhpcyBzcGVjaWZpYyBuYW1lIGdlbmVyYXRpb24gd29yay4gSSdtIGZvY3VzaW5nIG9uIHRoZSBpbnRyaWNhY2llczogdGhlIGFzc2lnbm1lbnQsIGFueSBlZGdlIGNhc2VzIHRoYXQgd2VyZSBoYW5kbGVkLCB0aGUgcG90ZW50aWFsIHBpdGZhbGxzIGFuZCB0aGUgYXJlYXMgd2hlcmUgcGVyZm9ybWFuY2UgbWlnaHQgYmUgb3B0aW1pemVkLiBXaGF0IGV4YWN0bHkgYXJlIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbXMgZm9yIG5hbWUgY3JlYXRpb24/IERvZXMgaXQgZm9sbG93IGEgc3RhbmRhcmQgb3IgYXJlIHRoZXJlIGN1c3RvbWlzYXRpb25zPyBBbnkgdW5pcXVlIGFwcHJvYWNoZXM/IEkgd2lsbCBjaGVjayBmb3IgYW55IHVudXN1YWwgZGF0YSBzdHJ1Y3R1cmVzIG9yIGFsZ29yaXRobXMgZW1wbG95ZWQsIG1heWJlIHNvbWUgc3VidGxlIGNvbmN1cnJlbmN5IGlzc3VlcyBvciByYWNlIGNvbmRpdGlvbnMgaW4gbmFtZSBnZW5lcmF0aW9uIHRoYXQgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gSSBuZWVkIHRvIGVuc3VyZSBhIHJvYnVzdCB1bmRlcnN0YW5kaW5nIG9mIGl0cyBiZWhhdmlvciB1bmRlciB2YXJpb3VzIHNjZW5hcmlvcywgaW5jbHVkaW5nIHBvdGVudGlhbCBjb25mbGljdHMgb3IgbGltaXRhdGlvbnMgd2l0aGluIHRoZSBQUFAgZW52aXJvbm1lbnQgaXRzZWxmLiBHb3QgdG8gbWFrZSBzdXJlIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBzb2xpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA1MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjM4OjQ3LjY3MjYyMDc5OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTczLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyOTczOlxcdGNoYXIgKnBwcF9kZXZfbmFtZShzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXFxuMjk3NDpcXHR7XFxuMjk3NTpcXHRcXHRzdHJ1Y3QgY2hhbm5lbCAqcGNoID0gY2hhbi1cXHUwMDNlcHBwO1xcbjI5NzY6XFx0XFx0Y2hhciAqbmFtZSA9IE5VTEw7XFxuMjk3NzpcXHRcXHRzdHJ1Y3QgcHBwICpwcHA7XFxuMjk3ODpcXHRcXG4yOTc5OlxcdFxcdGlmIChwY2gpIHtcXG4yOTgwOlxcdFxcdFxcdHBwcCA9IHJjdV9kZXJlZmVyZW5jZShwY2gtXFx1MDAzZXBwcCk7XFxuMjk4MTpcXHRcXHRcXHRpZiAocHBwIFxcdTAwMjZcXHUwMDI2IHBwcC1cXHUwMDNlZGV2KVxcbjI5ODI6XFx0XFx0XFx0XFx0bmFtZSA9IHBwcC1cXHUwMDNlZGV2LVxcdTAwM2VuYW1lO1xcbjI5ODM6XFx0XFx0fVxcbjI5ODQ6XFx0XFx0cmV0dXJuIG5hbWU7XFxuMjk4NTpcXHR9XFxuMjk4NjpcXHRcXG4yOTg3OlxcdFxcbjI5ODg6XFx0LypcXG4yOTg5OlxcdCAqIERpc2Nvbm5lY3QgYSBjaGFubmVsIGZyb20gdGhlIGdlbmVyaWMgbGF5ZXIuXFxuMjk5MDpcXHQgKiBUaGlzIG11c3QgYmUgY2FsbGVkIGluIHByb2Nlc3MgY29udGV4dC5cXG4yOTkxOlxcdCAqL1xcbjI5OTI6XFx0dm9pZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDozODo0Ny42NzI3ODA1ODlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjAzMzgyNjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJDVSBEZXJlZmVyZW5jZSBDb251bmRydW0qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgcHBwX2Rldl9uYW1lYCBhbmQgaXQncyB1c2luZyBgcmN1X2RlcmVmZXJlbmNlKHBjaC1cdTAwM2VwcHApYC4gVGhhdCdzIHN0YW5kYXJkIGFuZCBleHBlY3RlZCwgYnV0Li4uIEkndmUgZ290IGEgbmFnZ2luZyBmZWVsaW5nIGFib3V0IHNvbWV0aGluZy4gTm93LCBJIHNlZSB0aGF0IGBwcHBvZV9zZXFfc2hvd2AgY2FsbHMgdGhpcyBmdW5jdGlvbiwgYnV0IGl0J3MgKm5vdCogdXNpbmcgYW4gYHJjdV9yZWFkX2xvY2soKWAgYmVmb3JlaGFuZD8gVGhhdCdzIGEgaHVnZSByZWQgZmxhZy4gTXkgdW5kZXJzdGFuZGluZyBpcywgYW5kIEknZCBiZXQgbW9zdCBleHBlcnRzIHdvdWxkIGFncmVlLCB0aGF0IGFjY2Vzc2luZyBhbiBSQ1UtcHJvdGVjdGVkIHBvaW50ZXIgcmVxdWlyZXMgdGhlIFJDVSByZWFkIGxvY2suIGBwcHBvZV9zZXFfc2hvd2AgaXMgY2FsbGVkIGZyb20gdGhlIHNlcV9maWxlIGZyYW1ld29yaywgYW5kIG15IGd1dCB0ZWxscyBtZSB0aGF0IHNlcV9maWxlIG1pZ2h0IG5vdCBhdXRvbWF0aWNhbGx5IGhvbGQgdGhlIFJDVSByZWFkIGxvY2suIFRoaXMgY291bGQgYmUgYSByYWNlIGNvbmRpdGlvbiB3YWl0aW5nIHRvIGhhcHBlbi4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBxdWlja2x5LiBMZXQncyBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHBwcG9lX3NlcV9zaG93YCBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aGF0IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTc2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDozODo1MS44NzYxNjYyNDVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTYyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTYyOlxcdHN0YXRpYyBpbnQgcHBwb2Vfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuIDk2MzpcXHR7XFxuIDk2NDpcXHRcXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG87XFxuIDk2NTpcXHRcXHRjaGFyICpkZXZfbmFtZTtcXG4gOTY2OlxcdFxcdGNoYXIgKnBwcF9uYW1lO1xcbiA5Njc6XFx0XFxuIDk2ODpcXHRcXHRpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pIHtcXG4gOTY5OlxcdFxcdFxcdHNlcV9wdXRzKHNlcSwgXFxcIklkICAgICAgIEFkZHJlc3MgICAgICAgICAgICAgIERldmljZSAgIFBQUC1EZXZpY2VcXFxcblxcXCIpO1xcbiA5NzA6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDk3MTpcXHRcXHR9XFxuIDk3MjpcXHRcXG4gOTczOlxcdFxcdHBvID0gdjtcXG4gOTc0OlxcdFxcdGRldl9uYW1lID0gcG8tXFx1MDAzZXBwcG9lX3BhLmRldjtcXG4gOTc1OlxcdFxcdHBwcF9uYW1lID0gcHBwX2Rldl9uYW1lKFxcdTAwMjZwby1cXHUwMDNlY2hhbik7XFxuIDk3NjpcXHRcXG4gOTc3OlxcdFxcdHNlcV9wcmludGYoc2VxLCBcXFwiJTA4WCAlcE0gJThzICUxMHNcXFxcblxcXCIsXFxuIDk3ODpcXHRcXHRcXHQgICBwby1cXHUwMDNlcHBwb2VfcGEuc2lkLCBwby1cXHUwMDNlcHBwb2VfcGEucmVtb3RlLCBkZXZfbmFtZSwgcHBwX25hbWUgPyBwcHBfbmFtZSA6IFxcXCJcXFwiKTtcXG4gOTc5OlxcdG91dDpcXG4gOTgwOlxcdFxcdHJldHVybiAwO1xcbiA5ODE6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDozODo1MS44NzYyNjQyNjVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5NTI3NDQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlYnVnZ2luZyBhIFBvdGVudGlhbCBQUFBvRSBMb2NrKipcblxuT2theSwgSSdtIGRpZ2dpbmcgaW50byB0aGlzIGlzc3VlIGFuZCBhIGh1bmNoIGp1c3QgaGl0IG1lLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBwcHBvZV9zZXFfc3RhcnRgLiBJdCdzIGEga2V5IGZ1bmN0aW9uIGluIHRoZSBQUFBvRSBzZXF1ZW5jZSwgYW5kIGl0J3MgcG9zc2libGXigJRtYXliZSBldmVuIGxpa2VseeKAlHRoYXQgaXQgY29udGFpbnMgc29tZSBzb3J0IG9mIG11dGV4IG9yIG90aGVyIGxvY2sgdGhhdCBjb3VsZCBiZSBjYXVzaW5nIGEgYm90dGxlbmVjayBvciBldmVuIGEgZGVhZGxvY2suIFRoaXMgY291bGQgYmUgdGhlIHJvb3Qgb2YgdGhlIHByb2JsZW0gSSdtIHNlZWluZy4gSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIHRoZSBsb2NrIGlzIHByb3Blcmx5IGltcGxlbWVudGVkIGFuZCByZWxlYXNlZCBpbiBhbGwgc2NlbmFyaW9zLCBhbmQgdW5kZXJzdGFuZCB3aGF0IHRoZSBjcml0aWNhbCBzZWN0aW9uIHByb3RlY3RzLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc3RhcnQgdHJhY2luZyB0aGUgZXhlY3V0aW9uIGZsb3cgYXJvdW5kIGBwcHBvZV9zZXFfc3RhcnRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjUxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDozODo1NC44NzE1NDIwMDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzOTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMDMsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMDM6XFx0e1xcbjEwMDQ6XFx0XFx0c3RydWN0IHBwcG9lX25ldCAqcG4gPSBwcHBvZV9wZXJuZXQoc2VxX2ZpbGVfbmV0KHNlcSkpO1xcbjEwMDU6XFx0XFx0bG9mZl90IGwgPSAqcG9zO1xcbjEwMDY6XFx0XFxuMTAwNzpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMTAwODpcXHRcXHRyZXR1cm4gbCA/IHBwcG9lX2dldF9pZHgocG4sIC0tbCkgOiBTRVFfU1RBUlRfVE9LRU47XFxuMTAwOTpcXHR9XFxuMTAxMDpcXHRcXG4xMDExOlxcdHN0YXRpYyB2b2lkICpwcHBvZV9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpXFxuMTAxMjpcXHR7XFxuMTAxMzpcXHRcXHRzdHJ1Y3QgcHBwb2VfbmV0ICpwbiA9IHBwcG9lX3Blcm5ldChzZXFfZmlsZV9uZXQoc2VxKSk7XFxuMTAxNDpcXHRcXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG8sICpuZXh0O1xcbjEwMTU6XFx0XFxuMTAxNjpcXHRcXHQrKypwb3M7XFxuMTAxNzpcXHRcXHRpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pIHtcXG4xMDE4OlxcdFxcdFxcdHBvID0gcHBwb2VfZ2V0X2lkeChwbiwgMCk7XFxuMTAxOTpcXHRcXHRcXHRnb3RvIG91dDtcXG4xMDIwOlxcdFxcdH1cXG4xMDIxOlxcdFxcdHBvID0gdjtcXG4xMDIyOlxcdFxcdG5leHQgPSByY3VfZGVyZWZlcmVuY2UocG8tXFx1MDAzZW5leHQpO1xcbjEwMjM6XFx0XFx0aWYgKG5leHQpXFxuMTAyNDpcXHRcXHRcXHRwbyA9IG5leHQ7XFxuMTAyNTpcXHRcXHRlbHNlIHtcXG4xMDI2OlxcdFxcdFxcdGludCBoYXNoID0gaGFzaF9pdGVtKHBvLVxcdTAwM2VwcHBvZV9wYS5zaWQsIHBvLVxcdTAwM2VwcHBvZV9wYS5yZW1vdGUpO1xcbjEwMjc6XFx0XFxuMTAyODpcXHRcXHRcXHRwbyA9IE5VTEw7XFxuMTAyOTpcXHRcXHRcXHR3aGlsZSAoKytoYXNoIFxcdTAwM2MgUFBQT0VfSEFTSF9TSVpFKSB7XFxuMTAzMDpcXHRcXHRcXHRcXHRwbyA9IHJjdV9kZXJlZmVyZW5jZShwbi1cXHUwMDNlaGFzaF90YWJsZVtoYXNoXSk7XFxuMTAzMTpcXHRcXHRcXHRcXHRpZiAocG8pXFxuMTAzMjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4xMDMzOlxcdFxcdFxcdH1cXG4xMDM0OlxcdFxcdH1cXG4xMDM1OlxcdFxcbjEwMzY6XFx0b3V0OlxcbjEwMzc6XFx0XFx0cmV0dXJuIHBvO1xcbjEwMzg6XFx0fVxcbjEwMzk6XFx0XFxuMTA0MDpcXHRzdGF0aWMgdm9pZCBwcHBvZV9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4xMDQxOlxcdFxcdF9fcmVsZWFzZXMoUkNVKVxcbjEwNDI6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDozODo1NC44NzE2NDc0MDVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM0ODg1OTY0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25jZXJucyBSZWdhcmRpbmcgUkNVIFByb3RlY3Rpb24gaW4gUFBQb0UgU2VxdWVuY2UgT3BlcmF0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgdGhhdCBgcHBwb2Vfc2VxX3N0YXJ0YCBob2xkcyBhbiBgcmN1X3JlYWRfbG9jaygpYC4gVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gVGhlbiwgd2UgaGF2ZSBhIGNhbGwgdG8gYHBwcF9kZXZfbmFtZWAgd2hpY2gsIGxvZ2ljYWxseSwgc2hvdWxkIGJlIHNhZmUgYmVjYXVzZSBpdCdzIHVuZGVyIHRoZSBSQ1UgcmVhZCBsb2NrLiBIb3dldmVyLCBgcHBwX2Rldl9uYW1lYCBpdHNlbGYgdXNlcyBgcmN1X2RlcmVmZXJlbmNlKHBjaC1cdTAwM2VwcHApYC4gT2theSwgdGhhdCBzdWdnZXN0cyBgcGNoLVx1MDAzZXBwcGAgaXMgUkNVIHByb3RlY3RlZCwgd2hpY2ggaXMgZ29vZC4gQnV0IHRoZW4gdGhlIHF1ZXN0aW9uIGJlY29tZXM6IGlzIGBwcHAtXHUwMDNlZGV2YCBzYWZlIHRvIGFjY2VzcyAqYWZ0ZXIqIHRoYXQgZGVyZWZlcmVuY2U/XG5cblRoZSBjb3JlIG9mIG15IGNvbmNlcm4gcmV2b2x2ZXMgYXJvdW5kIHRoZSBwb3RlbnRpYWwgZm9yIGEgcmFjZSBjb25kaXRpb24uIElmIGBwcHBgIGlzIGZyZWVkIGNvbmN1cnJlbnRseSwgdGhlbiBgcHBwLVx1MDAzZWRldmAgd291bGQgbGlrZWx5IGFsc28gYmUgZnJlZWQsIGJlY29taW5nIHVudXNhYmxlLiBCdXQgYHBwcF9kZXZfbmFtZWAgcmV0dXJucyBgcHBwLVx1MDAzZWRldi1cdTAwM2VuYW1lYC4gTm93IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGBjaGFyYCBhcnJheSB3aXRoaW4gYSBgc3RydWN0IG5ldF9kZXZpY2VgLiBJZiBgcHBwYCBpcyBmcmVlZCB3aGlsZSB0aGUgY29kZSBpcyBydW5uaW5nLCBhbmQgaWYgYHBwcC1cdTAwM2VkZXZgIGlzIHN1YnNlcXVlbnRseSBmcmVlZCwgdGhlbiB0aGF0IHBvaW50ZXIgYHBwcC1cdTAwM2VkZXYtXHUwMDNlbmFtZWAgaXMgZGFuZ2xpbmcsIGFuZCBjb3VsZCBjYXVzZSBtYWpvciBpc3N1ZXMuXG5cblNwZWNpZmljYWxseSwgdGhlIGZhY3QgdGhhdCBgcHBwX2Rldl9uYW1lYCBpcyByZXR1cm5pbmcgYSBwb2ludGVyIGBuYW1lYCB0byBgcHBwLVx1MDAzZWRldi1cdTAwM2VuYW1lYCBpcyB0cm91YmxpbmcuIExhdGVyLCBgcHBwb2Vfc2VxX3Nob3dgIHRoZW4gdXNlcyB0aGlzIHJldHVybmVkIGBwcHBfbmFtZWAgcG9pbnRlciBpbiBgc2VxX3ByaW50ZmAuIElmIGBwcHBgIG9yIGBwcHAtXHUwMDNlZGV2YCBpcyBmcmVlZCBjb25jdXJyZW50bHkgYmV0d2VlbiB3aGVuIGBwcHBfZGV2X25hbWVgIGlzIGNhbGxlZCBhbmQgd2hlbiBgc2VxX3ByaW50ZmAgYWN0dWFsbHkgdXNlcyB0aGUgcG9pbnRlciwgdGhlIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIHJlYWQgZnJvbSBmcmVlZCBtZW1vcnkuIFdlJ3JlIGxvb2tpbmcgYXQgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSFcblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgcHBwYCBpcywgaW5kZWVkLCBwcm90ZWN0ZWQgYnkgUkNVIHRvIHByb3ZpZGUgbWVtb3J5IHNhZmV0eS4gVG8gYmUgc3VyZSBhYm91dCB0aGlzLCBJIHNob3VsZCBleGFtaW5lIGBwcHBfZGVzdHJveV9pbnRlcmZhY2VgIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBQUFBvRSBpbnRlcmZhY2UgaXMgY2xlYW5lZCB1cCBhbmQgaG93IHRoZSBgcHBwYCBzdHJ1Y3R1cmUgaXMgaGFuZGxlZC4gVGhpcyBpcyB0aGUgY3JpdGljYWwgcGllY2UgdGhhdCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDY0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6Mzk6MDAuMjIwNTA5Njk4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzc0MzcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcHBfZGVzdHJveV9pbnRlcmZhY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0xNTQ3PXN0YXRpYyBpbnQgcHBwX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xNTU0LVxcdC8qIExldCB0aGUgbmV0ZGV2aWNlIHRha2UgYSByZWZlcmVuY2Ugb24gdGhlIHBwcCBmaWxlLiBUaGlzIGVuc3VyZXNcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoxNTU1OlxcdCAqIHRoYXQgcHBwX2Rlc3Ryb3lfaW50ZXJmYWNlKCkgd29uJ3QgcnVuIGJlZm9yZSB0aGUgZGV2aWNlIGdldHNcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xNTU2LVxcdCAqIHVucmVnaXN0ZXJlZC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6Mzk6MDAuMjY0MjU5Mzg3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NzE0NjIyMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgcHBwX2Rldl9uYW1lYCBWYXJpYWJsZSoqXG5cbk9rYXksIHRpbWUgdG8gY2lyY2xlIGJhY2sgYW5kIHJlLWV4YW1pbmUgdGhlIGBwcHBfZGV2X25hbWVgIHZhcmlhYmxlLiBJIG5lZWQgdG8gZW5zdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbC4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIHN0aWxsIHNvdW5kLCBidXQgaW4gY29tcGxleCBzeXN0ZW1zIGxpa2UgdGhpcywgYXNzdW1wdGlvbnMgY2FuIGJlIGRhbmdlcm91cy4gTGV0IG1lIHF1aWNrbHkgcmVmcmVzaCB0aGUgY29udGV4dDogaXMgaXQgc3RpbGwgcG9pbnRpbmcgdG8gdGhlIGV4cGVjdGVkIGludGVyZmFjZT8gSGFzIGFueXRoaW5nIHVwc3RyZWFtIG9yIGRvd25zdHJlYW0gcG90ZW50aWFsbHkgbW9kaWZpZWQgaXRzIHZhbHVlLCBlaXRoZXIgaW50ZW50aW9uYWxseSBvciB0aHJvdWdoIHNvbWUgc3VidGxlIGludGVyYWN0aW9uIEkgZGlkbid0IGFudGljaXBhdGU/IEnigJlsbCBtZW50YWxseSB3YWxrIHRocm91Z2ggdGhlIGNvZGUgcGF0aCBhZ2FpbiwgZm9jdXNpbmcgb24gYW55IHBvaW50cyB3aGVyZSBgcHBwX2Rldl9uYW1lYCBpcyBzZXQsIGFjY2Vzc2VkLCBvciBwb3NzaWJseSBvdmVyd3JpdHRlbi4gQXJlIHRoZXJlIGFueSByYWNlIGNvbmRpdGlvbnMgbHVya2luZz8gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBzY2VuYXJpb3M/IEkgd2FudCB0byBtYWtlIGNlcnRhaW4gdGhhdCBpdHMgc3RhdGUgaXMgYm90aCBjb3JyZWN0IGFuZCBjb25zaXN0ZW50IGF0IHRoaXMgcG9pbnQgaW4gdGhlIGV4ZWN1dGlvbi4gTGV0IG1lIG1ha2UgY2VydGFpbiB0aGF0IHRoZXJlIHdlcmUgbm8gcmVjZW50IGNoYW5nZXMgdG8gdGhlIG1vZHVsZS4gSWYgSSdtIGx1Y2t5LCBhIHF1aWNrIHZpc3VhbCBjaGVjayB3aWxsIHN1ZmZpY2UuIEhvd2V2ZXIsIGlmIEkgc3VzcGVjdCBhIG1vcmUgaW50cmljYXRlIGlzc3VlLCBJJ2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIGRlYnVnZ2luZyB0b29scyB0byBkaXZlIGRlZXBlciDigJMgcGVyaGFwcyBzdGVwcGluZyB0aHJvdWdoIHRoZSByZWxldmFudCBjb2RlIHdpdGggYSBkZWJ1Z2dlciBvciB0ZW1wb3JhcmlseSBhZGRpbmcgc29tZSBpbnN0cnVtZW50YXRpb24uIEkgd2FudCB0byBidWlsZCBhIGhpZ2ggbGV2ZWwgb2YgY29uZmlkZW5jZSBhcm91bmQgdGhpcyB2YXJpYWJsZSdzIGNvcnJlY3RuZXNzIGJlZm9yZSBJIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NTksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDozOTowNC4wMzU3MjQyNTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyMTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5NzMsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI5NzM6XFx0Y2hhciAqcHBwX2Rldl9uYW1lKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbilcXG4yOTc0OlxcdHtcXG4yOTc1OlxcdFxcdHN0cnVjdCBjaGFubmVsICpwY2ggPSBjaGFuLVxcdTAwM2VwcHA7XFxuMjk3NjpcXHRcXHRjaGFyICpuYW1lID0gTlVMTDtcXG4yOTc3OlxcdFxcdHN0cnVjdCBwcHAgKnBwcDtcXG4yOTc4OlxcdFxcbjI5Nzk6XFx0XFx0aWYgKHBjaCkge1xcbjI5ODA6XFx0XFx0XFx0cHBwID0gcmN1X2RlcmVmZXJlbmNlKHBjaC1cXHUwMDNlcHBwKTtcXG4yOTgxOlxcdFxcdFxcdGlmIChwcHAgXFx1MDAyNlxcdTAwMjYgcHBwLVxcdTAwM2VkZXYpXFxuMjk4MjpcXHRcXHRcXHRcXHRuYW1lID0gcHBwLVxcdTAwM2VkZXYtXFx1MDAzZW5hbWU7XFxuMjk4MzpcXHRcXHR9XFxuMjk4NDpcXHRcXHRyZXR1cm4gbmFtZTtcXG4yOTg1OlxcdH1cXG4yOTg2OlxcdFxcbjI5ODc6XFx0XFxuMjk4ODpcXHQvKlxcbjI5ODk6XFx0ICogRGlzY29ubmVjdCBhIGNoYW5uZWwgZnJvbSB0aGUgZ2VuZXJpYyBsYXllci5cXG4yOTkwOlxcdCAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgaW4gcHJvY2VzcyBjb250ZXh0LlxcbjI5OTE6XFx0ICovXFxuMjk5MjpcXHR2b2lkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjM5OjA0LjAzNTkwODQ5MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODM0MDE3OTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlJDVSBSZWxlYXNlIFN0cmF0ZWd5IGZvciBgcHBwYCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gd3JhcCBteSBoZWFkIGFyb3VuZCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgb2YgdGhpcyBgcHBwYCBvYmplY3QsIGFuZCBhIGtleSBxdWVzdGlvbiBwb3BzIHVwOiB3aGVuIGBwcHBgIGlzIGRlYWxsb2NhdGVkLCBpcyB0aGF0IG9wZXJhdGlvbiBSQ1UtcHJvdGVjdGVkPyBHaXZlbiB0aGUgY29udGV4dCwgaXQncyBhIGNyaXRpY2FsIGFzc3VtcHRpb24gdG8gY2xhcmlmeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gZW5zdXJlcyB0aGF0IHJlYWRlcnMgdXNpbmcgYHBwcGAgc2VlIGNvbnNpc3RlbnQgZGF0YSBldmVuIGR1cmluZyByZWxlYXNlLlxuXG5UbyBjb25maXJtIHRoaXMsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBmcmVlaW5nIHBhdGguIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIHRoZSBkZWZpbml0aW9uIG9mIGBwcHBfcmVsZWFzZWAuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBtZWNoYW5pc20g4oCTIG9yIHRoZSBhYnNlbmNlIG9mIGl0LiBUaGUgYHBwcF9yZWxlYXNlYCBmdW5jdGlvbiBpcyB0aGUgZ2F0ZWtlZXBlciBoZXJlLCB0aGUgZGVmaW5pdGl2ZSBwb2ludCB3aGVyZSByZXNvdXJjZSBtYW5hZ2VtZW50IGhhcHBlbnMuIEkgbmVlZCB0byBzY3J1dGluaXplIHRoYXQgZnVuY3Rpb24gY2FyZWZ1bGx5IHRvIGRldGVybWluZSBpZiBpdCB1c2VzIGBjYWxsX3JjdWAsIGBzeW5jaHJvbml6ZV9yY3VgLCBvciBzaW1pbGFyIFJDVSBwcmltaXRpdmVzLCBvciBpZiBpdCB1dGlsaXplcyBhIGxvY2sgaW5zdGVhZCwgb3IgZXZlbiBpZiB0aGVyZSBpcyBubyBwcm90ZWN0aW9uIGF0IGFsbC4gS25vd2luZyB0aGUgc3RyYXRlZ3kgb2YgdGhlIHJlbGVhc2UgZnVuY3Rpb24gd2lsbCB0ZWxsIG1lIHRoZSBSQ1Ugc3Rvcnkgb2YgYHBwcGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MzgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjM5OjA3Ljg2OTkyOTU5NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4NjcyMjksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmcmVlX3JjdS4qcHBwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BwcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjM5OjA3LjkxNDgyNDAwNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTUyNjI0NTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBQUFAgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgbGlrZWx5IHNvdXJjZSBvZiB0aGlzIG1lbW9yeSBpc3N1ZS4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgaW1tZWRpYXRlbHkgdGhpbmssIFwiTGV0J3MgemVybyBpbiBvbiBga2ZyZWVgIGNhbGxzIHdpdGhpbiB0aGUgYHBwcF9nZW5lcmljLmNgIGZpbGUuXCIgVGhlIGBwcHBgIGNvbXBvbmVudCBpcyBhIGNsYXNzaWMgYXJlYSBmb3IgdGhlc2Uga2luZHMgb2YgcHJvYmxlbXMsIGFuZCBga2ZyZWVgLCBzcGVjaWZpY2FsbHksIGluZGljYXRlcyBtZW1vcnkgZGVhbGxvY2F0aW9uLCB3aGljaCBpcyB3aGVyZSB0aGluZ3Mgb2Z0ZW4gZ28gd3JvbmcuIFNvLCBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgY29kZSBpcyBoYW5kbGluZyBtZW1vcnkgaW4gdGhlcmUuIEl0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIG15IGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4NTgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDozOToxMC44Njc0NTExNDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTQ0MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmcmVlLipwcHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yMS0gKiAwNDA4MDAgOlxcdFJlc3BlY3QgcmVmZXJlbmNlIGNvdW50IG1lY2hhbmlzbXMgb24gbmV0LWRldmljZXMuXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MjI6ICogMjAwODAwIDpcXHRmaXgga2ZyZWUoc2tiKSBpbiBwcHBvZV9yY3YgKGFjbWUpXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjMtICpcXHRcXHRNb2R1bGUgcmVmZXJlbmNlIGNvdW50IGlzIGRlY3JlbWVudGVkIGluIHRoZSByaWdodCBzcG90IG5vdyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6Mzk6MTAuOTEwOTk5MTY0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDU1NTAxMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYHBwcF9kZXN0cm95X2ludGVyZmFjZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGZ1bmN0aW9uIG5hbWUsIGBwcHBfZGVzdHJveV9pbnRlcmZhY2VgLCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGUgc2NvcGU6IGl0J3MgaW52b2x2ZWQgaW4gdGVhcmluZyBkb3duIGEgUG9pbnQtdG8tUG9pbnQgUHJvdG9jb2wgKFBQUCkgaW50ZXJmYWNlLiBHaXZlbiBteSBleHBlcnRpc2UsIEknbSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgbGF5ZXJzIG9mIHRoZSBuZXR3b3JrIHN0YWNrIGFmZmVjdGVkIGJ5IHRoaXMgcHJvY2Vzcy4gSSdtIHRoaW5raW5nIGFib3V0IGxpbmsgbGF5ZXIsIG5ldHdvcmsgbGF5ZXIsIG1heWJlIGV2ZW4gdHJhbnNwb3J0IGxheWVyIGltcGxpY2F0aW9ucywgZGVwZW5kaW5nIG9uIGhvdyByb2J1c3QgdGhlIGltcGxlbWVudGF0aW9uIGlzLiBJIGV4cGVjdCBpdCdsbCBpbnZvbHZlIGNsZWFuaW5nIHVwIHJlc291cmNlczogbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIGludGVyZmFjZSBzdHJ1Y3R1cmUsIGFueSBhc3NvY2lhdGVkIGJ1ZmZlcnMgb3Igc29ja2V0cywgcG90ZW50aWFsbHkgcmVtb3ZpbmcgZW50cmllcyBmcm9tIHJvdXRpbmcgdGFibGVzIG9yIEFSUCBjYWNoZXMsIGFuZCBzaWduYWxpbmcgdG8gdGhlIGhhcmR3YXJlIHRoYXQgdGhpcyBpbnRlcmZhY2UgaXMgbm8gbG9uZ2VyIGFjdGl2ZS4gSSdtIGFsc28gY29uc2lkZXJpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGludGVyZmFjZSBiZWluZyBkZXN0cm95ZWQgd2hpbGUgY29ubmVjdGlvbnMgYXJlIGFjdGl2ZS4gV2VyZSB0aGVzZSBncmFjZWZ1bGx5IGNsb3NlZCBvciBhYnJ1cHRseSB0ZXJtaW5hdGVkPyBJcyB0aGVyZSBhbnkgbWVjaGFuaXNtIGZvciBwcmV2ZW50aW5nIGRhdGEgbG9zcyBvciBjb3JydXB0aW9uIGR1cmluZyB0aGUgdGVhcmRvd24/IEknbGwgbmVlZCB0byBjaGVjayBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBpc3N1ZXMgdGhhdCBjb3VsZCBhcmlzZSB3aGVuIG11bHRpcGxlIHByb2Nlc3NlcyBvciB0aHJlYWRzIG1pZ2h0IGJlIHRyeWluZyB0byBtYW5pcHVsYXRlIG9yIGFjY2VzcyB0aGlzIGludGVyZmFjZSBzaW11bHRhbmVvdXNseS4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIHNhZmUgdG8gdXNlIGluIHRoZSBjb250ZXh0IG9mIG11bHRpdGhyZWFkZWQgb3BlcmF0aW9ucy4gSSdtIGFudGljaXBhdGluZyBzb21lIGNvbXBsZXggaW50ZXJhY3Rpb25zIHdpdGggdmFyaW91cyBrZXJuZWwgc3Vic3lzdGVtcywgZXNwZWNpYWxseSBpZiB0aGVyZSBhcmUgYW55IG5ldHdvcmsgbmFtZXNwYWNlcyBvciBjb250YWluZXJpemF0aW9uIGludm9sdmVkLiBBbmQgb2YgY291cnNlLCBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24sIGlmIGRvbmUgY29ycmVjdGx5LCB0byBiZSByb2J1c3QgdG8gZXJyb3JzLCBhbmQgaGFuZGxlIHZhcmlvdXMgc2NlbmFyaW9zIGdyYWNlZnVsbHkgc3VjaCBhcyB0aGUgaW50ZXJmYWNlIGJlaW5nIGFscmVhZHkgZGVzdHJveWVkLiBMZXQncyBzZWUgaG93IGl0IGFsbCBwbGF5cyBvdXQgaW4gcHJhY3RpY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNTgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDozOToxNC44NTY1NTIzNTVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MzY4MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBwcF9kZXN0cm95X2ludGVyZmFjZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wcHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTE1NDc9c3RhdGljIGludCBwcHBfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTE1NTQtXFx0LyogTGV0IHRoZSBuZXRkZXZpY2UgdGFrZSBhIHJlZmVyZW5jZSBvbiB0aGUgcHBwIGZpbGUuIFRoaXMgZW5zdXJlc1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjE1NTU6XFx0ICogdGhhdCBwcHBfZGVzdHJveV9pbnRlcmZhY2UoKSB3b24ndCBydW4gYmVmb3JlIHRoZSBkZXZpY2UgZ2V0c1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTE1NTYtXFx0ICogdW5yZWdpc3RlcmVkLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDozOToxNC45MDI5MjU1NzRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwOTQ3NjkwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYHBwcGAncyBEZWFsbG9jYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgaG93IGBwcHBgIGdldHMgZnJlZWQuIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IG1lY2hhbmlzbSwgYmVjYXVzZSBJIGtub3cgdGhlcmUncyBhIGxvdCBvZiBudWFuY2UgaW4gaG93IHlvdSBtYW5hZ2UgbWVtb3J5IGFuZCBkZWFsbG9jYXRlIHJlc291cmNlcy4gSSB3YW50IHRvIHNlZSBpZiB0aGUgZGVhbGxvY2F0aW9uIGlzIG1hbnVhbCBvciBhdXRvbWF0aWMsIHdoYXQgdGVjaG5pcXVlcyBhcmUgZW1wbG95ZWQuIElzIGl0IHJlZmVyZW5jZSBjb3VudGluZywgZ2FyYmFnZSBjb2xsZWN0aW9uLCBleHBsaWNpdCBgZnJlZSgpYCBjYWxscywgb3Igc29tZSBraW5kIG9mIHNjb3BlZCByZXNvdXJjZSBtYW5hZ2VtZW50PyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBnb3RjaGFzIG9yIGVkZ2UgY2FzZXMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgbmVlZCB0byBjb25zaWRlciBhbnkgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFuZCB3aGV0aGVyIHRoZXJlIG1pZ2h0IGJlIGFueSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBsZWFrcywgZG91YmxlIGZyZWVzLCBvciB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXRpZXMuIFRoaXMgaW52ZXN0aWdhdGlvbiB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHN0YWJpbGl0eSBhbmQgcmVzb3VyY2UgZWZmaWNpZW5jeSBvZiB0aGlzIHBhcnQgb2YgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY3MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjM5OjE4LjExMjQwNTcyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTIxNDc4OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2ZyZWUuKnBwcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6Mzk6MTguMTU3NjI5MTE5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1NzY0NjQyMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBwcHBfZ2VuZXJpYy5jYCoqXG5cbk9rYXksIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBhIG1lbW9yeS1yZWxhdGVkIGlzc3VlLCBhbmQgbXkgaW50dWl0aW9uIGlzIHBvaW50aW5nIG1lIHRvd2FyZHMgdGhlIFBvaW50LXRvLVBvaW50IFByb3RvY29sIChQUFApIGdlbmVyaWMgY29kZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IGRlYWxsb2NhdGlvbiwgc28gSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgYGtmcmVlYCBmdW5jdGlvbiBjYWxscyB3aXRoaW4gYHBwcF9nZW5lcmljLmNgLiBUaGlzIHNlZW1zIGxpa2UgYSBsb2dpY2FsIGZpcnN0IHN0ZXAgdG8gc2VlIGhvdyBtZW1vcnkgaXMgYmVpbmcgaGFuZGxlZCBhbmQgbG9vayBmb3IgcG90ZW50aWFsIGRvdWJsZSBmcmVlcywgdXNlLWFmdGVyLWZyZWVzLCBvciBtZW1vcnkgbGVha3MuIExldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NDAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDozOToyMC43MzQwOTU3MjdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzOTI4NjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmcmVlXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9NTgwPXN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2cgKmdldF9maWx0ZXIoc3RydWN0IHNvY2tfZnByb2cgKnVwcm9nKVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtNTk2LVxcdGVyciA9IGJwZl9wcm9nX2NyZWF0ZShcXHUwMDI2cmVzLCBcXHUwMDI2ZnByb2cpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjU5NzpcXHRrZnJlZShmcHJvZy5maWx0ZXIpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTU5OC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTMyNzU9cHBwX3VucmVnaXN0ZXJfY29tcHJlc3NvcihzdHJ1Y3QgY29tcHJlc3NvciAqY3ApXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0zMjgyLVxcdFxcdGxpc3RfZGVsKFxcdTAwMjZjZS1cXHUwMDNlbGlzdCk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MzI4MzpcXHRcXHRrZnJlZShjZSk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMzI4NC1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0zNTc1PXN0YXRpYyB2b2lkIHBwcF9yZWxlYXNlX2NoYW5uZWxfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTM1ODAtXFx0c2tiX3F1ZXVlX3B1cmdlKFxcdTAwMjZwY2gtXFx1MDAzZWZpbGUucnEpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjM1ODE6XFx0a2ZyZWUocGNoKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0zNTgyLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6Mzk6MjAuNzc4MDMyMTg3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjM2OTY2OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgcHBwYCBTdHJ1Y3R1cmUgYW5kIEl0cyBSZWxhdGlvbnNoaXAgdG8gYG5ldF9kZXZpY2VgKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBjZW50ZXJlZCBhcm91bmQgdW5kZXJzdGFuZGluZyB0aGUgcHJlY2lzZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgYHBwcGAgc3RydWN0dXJlIChsaWtlbHkgcmVwcmVzZW50aW5nIGEgUG9pbnQtdG8tUG9pbnQgUHJvdG9jb2wgaW1wbGVtZW50YXRpb24pIGFuZCB0aGUgYG5ldF9kZXZpY2VgIHN0cnVjdHVyZSAodGhlIGZ1bmRhbWVudGFsIG5ldHdvcmsgaW50ZXJmYWNlIGFic3RyYWN0aW9uKS5cblxuVGhlIHF1ZXN0aW9uIGlzLCBzcGVjaWZpY2FsbHksIGhvdyBpcyBgcHBwYCAqbWFuYWdlZCogaW4gbWVtb3J5PyBJcyBgc3RydWN0IHBwcGAgaW5oZXJlbnRseSBlbWJlZGRlZCAqd2l0aGluKiBgc3RydWN0IG5ldF9kZXZpY2VgPyBUaGF0IHdvdWxkIGltcGx5IGEgdGlnaHQgY291cGxpbmcsIGEgc2luZ2xlIGFsbG9jYXRpb24gc3RyYXRlZ3kgd2hlcmUgdGhlIFBQUC1zcGVjaWZpYyBkYXRhIGlzIGRpcmVjdGx5IHBhcnQgb2YgdGhlIGludGVyZmFjZSBkZXNjcmlwdG9yLiBPciwgaXMgYHBwcGAgYWxsb2NhdGVkIHNlcGFyYXRlbHksIGxpa2VseSBsaW5rZWQgdG8gYSBgbmV0X2RldmljZWAgaW5zdGFuY2UgdmlhIGEgcG9pbnRlcj8gQSBtb3JlIG1vZHVsYXIgYXBwcm9hY2ggdGhhdCBhbGxvd3MgZm9yIHBvdGVudGlhbGx5IG1vcmUgZHluYW1pYyBjb25maWd1cmF0aW9ucy4gVGhlIFwib3JcIiBpbXBsaWVzIHRoaXMuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoaXM6IFVuZGVyc3RhbmRpbmcgdGhlIG1lbW9yeSBtb2RlbCBkaXJlY3RseSBpbXBhY3RzIGhvdyBJJ2QgYXBwcm9hY2ggY2VydGFpbiB0YXNrczogZGV2aWNlIGRyaXZlciBkZXZlbG9wbWVudCwgbmV0d29yayBjb25maWd1cmF0aW9uLCBkZWJ1Z2dpbmcsIG9yIG9wdGltaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ3MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjM5OjI0LjA0MTczMjEyMVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxODk1NjEyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19uZXRkZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MzM1NT1zdGF0aWMgaW50IHBwcF9jcmVhdGVfaW50ZXJmYWNlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIGludCAqdW5pdClcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTMzNjUtXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MzM2NjpcXHRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBwcHApLCBcXFwiXFxcIiwgTkVUX05BTUVfRU5VTSwgcHBwX3NldHVwKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0zMzY3LVxcdGlmICghZGV2KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjM5OjI1Ljc2MDY5MzgxN1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTQ2MzA1NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBLZXJuZWwgUGF0Y2ggZm9yIFBQUG9FIEluZm9ybWF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgc3RydWN0IHBwcGAgaXMgY2xvc2VseSB0aWVkIHRvIGBzdHJ1Y3QgbmV0X2RldmljZWAsIG1lYW5pbmcgd2hlbiB0aGUgbmV0IGRldmljZSBnb2VzLCBzbyBkb2VzIHRoZSBQUFAgZGF0YS4gVGhlIGtleSBpcyB0aGF0IGBuZXRfZGV2aWNlYCBjbGVhbnVwIHVzZXMgUkNVLiBUaGlzIHRlbGxzIG1lIHRoYXQgYW55IGFjY2VzcyB0byBgcHBwYCBkYXRhIHVuZGVyIGFuIFJDVSByZWFkIGxvY2sgaXMgcHJvYmFibHkgc2FmZSwgYXMgYGZyZWVfbmV0ZGV2YCB1c2VzIFJDVS4gSSdtIGVzcGVjaWFsbHkgZm9jdXNlZCBvbiBgcHBwLVx1MDAzZWRldi1cdTAwM2VuYW1lYCwgYSBjaGFyYWN0ZXIgYXJyYXkgd2l0aGluIHRoZSBgbmV0X2RldmljZWAgc3RydWN0LiBTaW5jZSBgcHBwX2Rldl9uYW1lYCByZXR1cm5zIGEgcG9pbnRlciB0byBgcHBwLVx1MDAzZWRldi1cdTAwM2VuYW1lYCBhbmQgdGhpcyBkYXRhIGlzIHVzZWQgaW4gYHBwcG9lX3NlcV9zaG93YCwgd2hpY2ggaXMgY2FsbGVkIHdpdGhpbiBhbiBSQ1UgcmVhZCBsb2NrIGNvbnRleHQgKGBzZXFfc3RhcnRgIGFjcXVpcmVzIGFuZCBgc2VxX3N0b3BgIHJlbGVhc2VzIHRoZSBsb2NrKSwgdGhlIHBvaW50ZXIgc2hvdWxkIGJlIHZhbGlkIGR1cmluZyB0aGUgYHNlcV9wcmludGZgIGNhbGwuXG5cblNvLCB0aGUgZnVuY3Rpb25hbCBjaGFuZ2Ugc2VlbXMgbWluaW1hbCDigJMganVzdCBhZGRpbmcgdGhpcyBgcHBwX2Rldl9uYW1lYCB0byB0aGUgYC9wcm9jL25ldC9wcHBvZWAgb3V0cHV0LiBUaGlzIGlzIGEgcHVyZWx5IGluZm9ybWF0aW9uYWwgYWRkaXRpb24gdG8gYSBwcm9jZnMgZmlsZS4gTm93LCB0aGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgZXZlbiB3b3J0aCBmdXp6aW5nP1xuXG5UaGUgaW5zdHJ1Y3Rpb25zIGdpdmUgbWUgYSBzb2xpZCBzZXQgb2YgcmVhc29ucyAqbm90KiB0byBmdXp6LiBUaGV5IHNwZWNpZmljYWxseSBleGNsdWRlIG1vZGlmaWNhdGlvbnMgdG8gZG9jdW1lbnRhdGlvbiwgS2NvbmZpZywgY29tbWVudHMsIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMgbGlrZSBsb2dnaW5nLCBhbmQgY2hhbmdlcyB0aGF0IGRvbid0IGFsdGVyIGV4ZWN1dGlvbiBmbG93LiBUaGlzIHByb2NmcyBjaGFuZ2UgKmlzKiBpbmZvcm1hdGlvbmFsLiBJdCdzIGp1c3QgYWRkaW5nIGEgY29sdW1uLCBzbyBpdCBzZWVtcyBsaWtlIGl0IHdvdWxkbid0IGNoYW5nZSBhbnkgY29kZSdzIGJlaGF2aW9yLlxuXG5JIGJyaWVmbHkgaGFkIGEgY29uY2VybiB0aGF0IGBwcHBfbmFtZWAgY291bGQgYmUgTlVMTCBhbmQgY2F1c2UgYSBzZWN1cml0eSBpc3N1ZS4gQnV0IGl0IGlzIGhhbmRsZWQgYnkgdGhlIGNvbmRpdGlvbmFsIGluIHRoZSBjb2RlLiBJIGFsc28gY29uc2lkZXJlZCBhIHVzZS1hZnRlci1mcmVlIGlzc3VlLCBidXQgd2UndmUgZXN0YWJsaXNoZWQgdGhhdCB0aGUgYWNjZXNzIGlzIHByb3RlY3RlZCBieSBhbiBSQ1UgcmVhZCBsb2NrLiBUaGVyZWZvcmUsIHRoZSBtZW1vcnkgaXMgc3RpbGwgdmFsaWQuIEknbSBnb2luZyB0byByZXZpZXcgdGhlIGRpZmYgYWdhaW4gdG8gbWFrZSBzdXJlIHRoYXQgSSBkaWRuJ3QgbWlzcyBzb21ldGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MDAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6Mzk6MzIuNzA3MDAxNjc4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjMwNTIwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcHBfZGV2X25hbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9OTYyPXN0YXRpYyBpbnQgcHBwb2Vfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05NzQtXFx0ZGV2X25hbWUgPSBwby1cXHUwMDNlcHBwb2VfcGEuZGV2O1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjk3NTpcXHRwcHBfbmFtZSA9IHBwcF9kZXZfbmFtZShcXHUwMDI2cG8tXFx1MDAzZWNoYW4pO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTk3Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6Mzk6MzIuNzQ5MzEwNDg3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMzIzNjk4NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUFBQb0UgUHJvY2ZzIENoYW5nZSoqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSB0aGlua2luZy4gVGhpcyBkaWZmLi4uIHllcCwgaXQncyBwcmVjaXNlbHkgdGhlIGNoYW5nZSBJIGV4cGVjdGVkLiBXZSdyZSBqdXN0IGFkZGluZyBhIG5ldyBjb2x1bW4gdG8gdGhlIGAvcHJvY2AgZmlsZXN5c3RlbSBlbnRyeSBmb3IgUFBQb0UgY29ubmVjdGlvbnMuIEl0IGxvb2tzIGxpa2UgaXQncyBnb2luZyB0byBkaXNwbGF5IHRoZSBQUFAgZGV2aWNlIG5hbWUuXG5cblRoaXMgaXMgYSByZWFkLW9ubHkgaW50ZXJmYWNlLCB0aGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBwcmltYXJ5IHB1cnBvc2Ugb2YgdGhpcyBjaGFuZ2Ugc2VlbXMgdG8gYmUgZm9yIGluZm9ybWF0aW9uYWwgZGlzcGxheSwgcG90ZW50aWFsbHkgZGVidWdnaW5nIG9yIG1vbml0b3JpbmcuIEl0J3MgcmVhbGx5IGp1c3QgZm9yIHByZXNlbnRhdGlvbiBpbiBgL3Byb2NgLiBJbXBvcnRhbnRseSwgdGhlcmUncyBub3RoaW5nIGhlcmUgdGhhdCBhbHRlcnMgdGhlIGNvcmUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbC4gVGhpcyBpc24ndCB0b3VjaGluZyBhbnkgY3JpdGljYWwgcGF0aCBvciBhZGRpbmcgYW55IG5ldyBleHRlcm5hbCBpbnB1dHMuXG5cbkdpdmVuIHRoYXQgaXQncyBwdXJlbHkgaW5mb3JtYXRpb25hbCwgSSBkb24ndCBzZWUgYW55IHJlYWwgdmFsdWUgaW4gZnV6emluZyB0aGlzLiBUaGVyZSdzIG5vIGlucHV0IHRoYXQgdGhpcyBjaGFuZ2UgaXMgZXhwb3NlZCB0bywgdGhhdCBjYW4gY2F1c2UgaXQgdG8gY29ycnVwdCB0aGUgc3lzdGVtIGluIGFueSB3YXkuXG5cblRoZXJlZm9yZSwgSSdtIGNvbWZvcnRhYmxlIHNheWluZyB0aGF0IHRoaXMgaXMgbm90IHNvbWV0aGluZyB0aGF0IHdvdWxkIGJlbmVmaXQgZnJvbSBmdXp6aW5nLiBNeSBjb25jbHVzaW9uOiBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExMDMsIk91dHB1dFRva2VucyI6NzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6Mzk6MzkuMDgxNjgzNjUxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGFuIGV4dHJhIGNvbHVtbiB0byB0aGUgL3Byb2MvbmV0L3BwcG9lIHNlcV9maWxlIG91dHB1dC4gVGhpcyBpcyBhIHB1cmVseSBpbmZvcm1hdGlvbmFsL2RlY29yYXRpdmUgY2hhbmdlIHRoYXQgZG9lcyBub3QgYWx0ZXIgdGhlIGZ1bmN0aW9uYWwgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBhbiBleHRyYSBjb2x1bW4gdG8gdGhlIC9wcm9jL25ldC9wcHBvZSBzZXFfZmlsZSBvdXRwdXQuIFRoaXMgaXMgYSBwdXJlbHkgaW5mb3JtYXRpb25hbC9kZWNvcmF0aXZlIGNoYW5nZSB0aGF0IGRvZXMgbm90IGFsdGVyIHRoZSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgnf4f[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-29 04:16:20 +0000 UTC FinishedAt: 2026-07-29 04:39:40 +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+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhbiBleHRyYSBjb2x1bW4gdG8gdGhlIC9wcm9jL25ldC9wcHBvZSBzZXFfZmlsZSBvdXRwdXQuIFRoaXMgaXMgYSBwdXJlbHkgaW5mb3JtYXRpb25hbC9kZWNvcmF0aXZlIGNoYW5nZSB0aGF0IGRvZXMgbm90IGFsdGVyIHRoZSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZThiNzk5NGZkZWVkYWE5YTgwMzMwNDBiMjVmOTQ2YjNhZTQ2NWZkNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDI5IDA0OjM4OjMyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcbmluZGV4IDY4NzRhMWE4ZWRhZjEuLmNiMzFmNWRiNDNlODEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcbkBAIC05NjMsMTcgJiM0Mzs5NjMsMTkgQEAgc3RhdGljIGludCBwcHBvZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbiB7XG4gXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG87XG4gXHRjaGFyICpkZXZfbmFtZTtcbiYjNDM7XHRjaGFyICpwcHBfbmFtZTtcbiBcbiBcdGlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikge1xuLVx0XHRzZXFfcHV0cyhzZXEsIFwmIzM0O0lkICAgICAgIEFkZHJlc3MgICAgICAgICAgICAgIERldmljZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRzZXFfcHV0cyhzZXEsIFwmIzM0O0lkICAgICAgIEFkZHJlc3MgICAgICAgICAgICAgIERldmljZSAgIFBQUC1EZXZpY2VcXG5cJiMzNDspO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbiBcdHBvID0gdjtcbiBcdGRldl9uYW1lID0gcG8tXHUwMDNlcHBwb2VfcGEuZGV2O1xuJiM0MztcdHBwcF9uYW1lID0gcHBwX2Rldl9uYW1lKFx1MDAyNnBvLVx1MDAzZWNoYW4pO1xuIFxuLVx0c2VxX3ByaW50ZihzZXEsIFwmIzM0OyUwOFggJXBNICU4c1xcblwmIzM0Oyxcbi1cdFx0cG8tXHUwMDNlcHBwb2VfcGEuc2lkLCBwby1cdTAwM2VwcHBvZV9wYS5yZW1vdGUsIGRldl9uYW1lKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHNlcSwgXCYjMzQ7JTA4WCAlcE0gJThzICUxMHNcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBwby1cdTAwM2VwcHBvZV9wYS5zaWQsIHBvLVx1MDAzZXBwcG9lX3BhLnJlbW90ZSwgZGV2X25hbWUsIHBwcF9uYW1lID8gcHBwX25hbWUgOiBcJiMzNDtcJiMzNDspO1xuIG91dDpcbiBcdHJldHVybiAwO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIGFuIGV4dHJhIGNvbHVtbiB0byB0aGUgL3Byb2MvbmV0L3BwcG9lIHNlcV9maWxlIG91dHB1dC4gVGhpcyBpcyBhIHB1cmVseSBpbmZvcm1hdGlvbmFsL2RlY29yYXRpdmUgY2hhbmdlIHRoYXQgZG9lcyBub3QgYWx0ZXIgdGhlIGZ1bmN0aW9uYWwgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlOGI3OTk0ZmRlZWRhYTlhODAzMzA0MGIyNWY5NDZiM2FlNDY1ZmQ0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjkgMDQ6Mzg6MzIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCmluZGV4IDY4NzRhMWE4ZWRhZjEuLmNiMzFmNWRiNDNlODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCkBAIC05NjMsMTcgJiM0Mzs5NjMsMTkgQEAgc3RhdGljIGludCBwcHBvZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG87CiAJY2hhciAqZGV2X25hbWU7CiYjNDM7CWNoYXIgKnBwcF9uYW1lOwogCiAJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7Ci0JCXNlcV9wdXRzKHNlcSwgJiMzNDtJZCAgICAgICBBZGRyZXNzICAgICAgICAgICAgICBEZXZpY2VcbiYjMzQ7KTsKJiM0MzsJCXNlcV9wdXRzKHNlcSwgJiMzNDtJZCAgICAgICBBZGRyZXNzICAgICAgICAgICAgICBEZXZpY2UgICBQUFAtRGV2aWNlXG4mIzM0Oyk7CiAJCWdvdG8gb3V0OwogCX0KIAogCXBvID0gdjsKIAlkZXZfbmFtZSA9IHBvLSZndDtwcHBvZV9wYS5kZXY7CiYjNDM7CXBwcF9uYW1lID0gcHBwX2Rldl9uYW1lKCZhbXA7cG8tJmd0O2NoYW4pOwogCi0Jc2VxX3ByaW50ZihzZXEsICYjMzQ7JTA4WCAlcE0gJThzXG4mIzM0OywKLQkJcG8tJmd0O3BwcG9lX3BhLnNpZCwgcG8tJmd0O3BwcG9lX3BhLnJlbW90ZSwgZGV2X25hbWUpOwomIzQzOwlzZXFfcHJpbnRmKHNlcSwgJiMzNDslMDhYICVwTSAlOHMgJTEwc1xuJiMzNDssCiYjNDM7CQkgICBwby0mZ3Q7cHBwb2VfcGEuc2lkLCBwby0mZ3Q7cHBwb2VfcGEucmVtb3RlLCBkZXZfbmFtZSwgcHBwX25hbWUgPyBwcHBfbmFtZSA6ICYjMzQ7JiMzNDspOwogb3V0OgogCXJldHVybiAwOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjM5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogcHBvcGVfc2VxX3Nob3cgYW5kIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hlZCBgZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBwcHBvZV9zZXFfc2hvd2AgZnVuY3Rpb24uIEZyb20gdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgdGhpcyBpcyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcgdGhlIG91dHB1dCB5b3Ugc2VlIGluIGAvcHJvYy9uZXQvcHBwb2VgIG9yIGEgc2ltaWxhciBzZXFfZmlsZSBpbnRlcmZhY2UuIFRoZSBjaGFuZ2UgaXRzZWxmIGlzIHByZXR0eSBzaW1wbGU6IGl0JiMzOTtzIGFkZGluZyBgcHBwX25hbWUgPSBwcHBfZGV2X25hbWUoJmFtcDtwby0mZ3Q7Y2hhbik7YCBhbmQgdGhlbiBwcmludGluZyB0aGF0IG5hbWUuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBzb21ldGhpbmcgd2UgbmVlZCB0byB3b3JyeSBhYm91dCBpbiB0ZXJtcyBvZiBmdXp6aW5nPyYjMzQ7IEl0JiMzOTtzIGEgYHNlcV9zaG93YCBmdW5jdGlvbiwgd2hpY2ggZ2VuZXJhbGx5IG1lYW5zIGl0JiMzOTtzIHJlYWQtb25seSBvdXRwdXQuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdHlwaWNhbGx5IG5vdCB0aGUgaGlnaGVzdC1wcmlvcml0eSB0YXJnZXRzIGZvciBmdXp6aW5nIHVubGVzcyB0aGV5IGV4cG9zZSBhIHBhcnRpY3VsYXJseSBqdWljeSB2dWxuZXJhYmlsaXR5LiBIb3dldmVyLCB0aGUgdXNlIG9mIGBwcHBfZGV2X25hbWUoJmFtcDtwby0mZ3Q7Y2hhbilgIGRvZXMgbWFrZSBtZSBwYXVzZS4gVGhlcmUmIzM5O3MgYWx3YXlzIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWJ0bGUgbG9ja2luZyBpc3N1ZXMgb3IgbGlmZXRpbWUgY29uY2VybnMgd2hlbiBkZWFsaW5nIHdpdGggZGV2aWNlIG5hbWVzLCBldmVuIGluIGEgc2VlbWluZ2x5IHNpbXBsZSByZWFkIG9wZXJhdGlvbi4KClNvLCBJIHRoaW5rIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gYm90aCBgcHBwX2Rldl9uYW1lYCBhbmQgdGhlIGBwcHBvZV9zZXFfc2hvd2AgZnVuY3Rpb24gaXRzZWxmLiBUaGUgZmFjdCB0aGF0IHRoZSBuYW1lIGlzIGJlaW5nIHJlYWQgbGlrZSB0aGlzIG1ha2VzIG1lIHdvbmRlciBpZiB0aGVyZSYjMzk7cyBhbnkgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgd2l0aGluIHRoZSBwcHAgZGV2aWNlIG5hbWUgbG9va3VwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgcHBwX2Rldl9uYW1lYCBpcyBiZWluZyBjYWxsZWQgd2l0aCBwcm9wZXIgbG9ja2luZyBpbiBwbGFjZS4gVGhhdOKAmXMgd2hlcmUgSSYjMzk7bGwgY29uY2VudHJhdGUgbXkgZm9jdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHBwb2Vfc2VxX3Nob3cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwb2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwb2UuYz05MzY9c3RhdGljIGludCBwcHBvZV9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTYxLSNpZmRlZiBDT05GSUdfUFJPQ19GU1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6OTYyOnN0YXRpYyBpbnQgcHBwb2Vfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05NjMte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jPTEwNDY9c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcHBvZV9zZXFfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTEwNDktXHQuc3RvcFx0XHQ9IHBwcG9lX3NlcV9zdG9wLFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MTA1MDpcdC5zaG93XHRcdD0gcHBwb2Vfc2VxX3Nob3csXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xMDUxLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA2NAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDExOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQUFBvRSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIGBwcHBvZV9zZXFfc2hvd2AuIExvb2tzIGxpa2UgaXQmIzM5O3MganVzdCBhZGRpbmcgdGhlIG91dHB1dCBvZiBgcHBwX2Rldl9uYW1lKCZhbXA7cG8tJmd0O2NoYW4pYCB0byB0aGUgYC9wcm9jL25ldC9wcHBvZWAgcHJvY2ZzIGZpbGUuIFB1cmVseSBpbmZvcm1hdGlvbmFsLCByaWdodD8gTm8gcmVhbCBmdW5jdGlvbmFsIGltcGFjdCBiZXlvbmQgcmVhZGluZyBhbmQgZGlzcGxheWluZyB0aGlzIG5ldyBmaWVsZC4gVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgd2FycmFudCBmdXp6aW5nPyBPbiB0aGUgc3VyZmFjZSwgaXQgc2VlbXMgbGlrZSBvdmVya2lsbCBmb3IgYSBgc2VxX3Nob3dgIGZ1bmN0aW9uLiBCdXQgd2FpdC4uLiBgcHBwX2Rldl9uYW1lYC4uLiB0aGF0IGZ1bmN0aW9uIG1pZ2h0IGJlIGRvaW5nIHNvbWV0aGluZyBpbnRlcmVzdGluZywgcG90ZW50aWFsbHkgZGVyZWZlcmVuY2luZyBzb21ldGhpbmcuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICpkb2luZyogYmVmb3JlIEkgZGlzbWlzcyB0aGlzIG91dHJpZ2h0LiBCZXR0ZXIgdG8gYmUgc2FmZSB0aGFuIHNvcnJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BwcF9kZXZfbmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0yOTUzPWludCBwcHBfdW5pdF9udW1iZXIoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTI5NzItICovXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoyOTczOmNoYXIgKnBwcF9kZXZfbmFtZShzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yOTc0LXtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0zNjYyPUVYUE9SVF9TWU1CT0wocHBwX3VuaXRfbnVtYmVyKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjM2NjM6RVhQT1JUX1NZTUJPTChwcHBfZGV2X25hbWUpO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMzY2NC1FWFBPUlRfU1lNQk9MKHBwcF9pbnB1dCk7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9OTYyPXN0YXRpYyBpbnQgcHBwb2Vfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTc0LVx0ZGV2X25hbWUgPSBwby1cdTAwM2VwcHBvZV9wYS5kZXY7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo5NzU6XHRwcHBfbmFtZSA9IHBwcF9kZXZfbmFtZShcdTAwMjZwby1cdTAwM2VjaGFuKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTk3Ni1cbi0tXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmg9NzM9ZXh0ZXJuIGludCBwcHBfdW5pdF9udW1iZXIoc3RydWN0IHBwcF9jaGFubmVsICopO1xuLS1cbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaC03Ny0gKi9cbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaDo3ODpleHRlcm4gY2hhciAqcHBwX2Rldl9uYW1lKHN0cnVjdCBwcHBfY2hhbm5lbCAqKTtcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaC03OS1cbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTQ5OD1zdGF0aWMgdm9pZCBwcHBvbDJ0cF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqYXJnKVxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmMtNTA3LVxubmV0L2wydHAvbDJ0cF9wcHAuYzo1MDg6XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7ICAgaW50ZXJmYWNlICVzXFxuXCYjMzQ7LCBwcHBfZGV2X25hbWUoXHUwMDI2cG8tXHUwMDNlY2hhbikpO1xubmV0L2wydHAvbDJ0cF9wcHAuYy01MDktXHR9XG4tLVxubmV0L2wydHAvbDJ0cF9wcHAuYz0xNTEzPXN0YXRpYyB2b2lkIHBwcG9sMnRwX3NlcV9zZXNzaW9uX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmMtMTU2NC1cbm5ldC9sMnRwL2wydHBfcHBwLmM6MTU2NTpcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDsgICBpbnRlcmZhY2UgJXNcXG5cJiMzNDssIHBwcF9kZXZfbmFtZShcdTAwMjZwby1cdTAwM2VjaGFuKSk7XG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTE1NjYtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA1MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIGl0JiMzOTtzICpteSogdHJhaW4gb2YgdGhvdWdodDoKCioqRGl2aW5nIGludG8gdGhlIGBwcHBfZGV2X25hbWVgIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB1bmRlcnN0YW5kIHByZWNpc2VseSBob3cgdGhlIGBwcHBfZGV2X25hbWVgIGlzIGltcGxlbWVudGVkLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgZGV0YWlscywgdGhlIGNydWNpYWwgcGFydHMgdGhhdCBtYWtlIHRoaXMgc3BlY2lmaWMgbmFtZSBnZW5lcmF0aW9uIHdvcmsuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGludHJpY2FjaWVzOiB0aGUgYXNzaWdubWVudCwgYW55IGVkZ2UgY2FzZXMgdGhhdCB3ZXJlIGhhbmRsZWQsIHRoZSBwb3RlbnRpYWwgcGl0ZmFsbHMgYW5kIHRoZSBhcmVhcyB3aGVyZSBwZXJmb3JtYW5jZSBtaWdodCBiZSBvcHRpbWl6ZWQuIFdoYXQgZXhhY3RseSBhcmUgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtcyBmb3IgbmFtZSBjcmVhdGlvbj8gRG9lcyBpdCBmb2xsb3cgYSBzdGFuZGFyZCBvciBhcmUgdGhlcmUgY3VzdG9taXNhdGlvbnM/IEFueSB1bmlxdWUgYXBwcm9hY2hlcz8gSSB3aWxsIGNoZWNrIGZvciBhbnkgdW51c3VhbCBkYXRhIHN0cnVjdHVyZXMgb3IgYWxnb3JpdGhtcyBlbXBsb3llZCwgbWF5YmUgc29tZSBzdWJ0bGUgY29uY3VycmVuY3kgaXNzdWVzIG9yIHJhY2UgY29uZGl0aW9ucyBpbiBuYW1lIGdlbmVyYXRpb24gdGhhdCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBJIG5lZWQgdG8gZW5zdXJlIGEgcm9idXN0IHVuZGVyc3RhbmRpbmcgb2YgaXRzIGJlaGF2aW9yIHVuZGVyIHZhcmlvdXMgc2NlbmFyaW9zLCBpbmNsdWRpbmcgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBsaW1pdGF0aW9ucyB3aXRoaW4gdGhlIFBQUCBlbnZpcm9ubWVudCBpdHNlbGYuIEdvdCB0byBtYWtlIHN1cmUgdGhlIGltcGxlbWVudGF0aW9uIGlzIHNvbGlkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTczLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI5NzM6XHRjaGFyICpwcHBfZGV2X25hbWUoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKVxuMjk3NDpcdHtcbjI5NzU6XHRcdHN0cnVjdCBjaGFubmVsICpwY2ggPSBjaGFuLVx1MDAzZXBwcDtcbjI5NzY6XHRcdGNoYXIgKm5hbWUgPSBOVUxMO1xuMjk3NzpcdFx0c3RydWN0IHBwcCAqcHBwO1xuMjk3ODpcdFxuMjk3OTpcdFx0aWYgKHBjaCkge1xuMjk4MDpcdFx0XHRwcHAgPSByY3VfZGVyZWZlcmVuY2UocGNoLVx1MDAzZXBwcCk7XG4yOTgxOlx0XHRcdGlmIChwcHAgXHUwMDI2XHUwMDI2IHBwcC1cdTAwM2VkZXYpXG4yOTgyOlx0XHRcdFx0bmFtZSA9IHBwcC1cdTAwM2VkZXYtXHUwMDNlbmFtZTtcbjI5ODM6XHRcdH1cbjI5ODQ6XHRcdHJldHVybiBuYW1lO1xuMjk4NTpcdH1cbjI5ODY6XHRcbjI5ODc6XHRcbjI5ODg6XHQvKlxuMjk4OTpcdCAqIERpc2Nvbm5lY3QgYSBjaGFubmVsIGZyb20gdGhlIGdlbmVyaWMgbGF5ZXIuXG4yOTkwOlx0ICogVGhpcyBtdXN0IGJlIGNhbGxlZCBpbiBwcm9jZXNzIGNvbnRleHQuXG4yOTkxOlx0ICovXG4yOTkyOlx0dm9pZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NzYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSQ1UgRGVyZWZlcmVuY2UgQ29udW5kcnVtKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgcHBwX2Rldl9uYW1lYCBhbmQgaXQmIzM5O3MgdXNpbmcgYHJjdV9kZXJlZmVyZW5jZShwY2gtJmd0O3BwcClgLiBUaGF0JiMzOTtzIHN0YW5kYXJkIGFuZCBleHBlY3RlZCwgYnV0Li4uIEkmIzM5O3ZlIGdvdCBhIG5hZ2dpbmcgZmVlbGluZyBhYm91dCBzb21ldGhpbmcuIE5vdywgSSBzZWUgdGhhdCBgcHBwb2Vfc2VxX3Nob3dgIGNhbGxzIHRoaXMgZnVuY3Rpb24sIGJ1dCBpdCYjMzk7cyAqbm90KiB1c2luZyBhbiBgcmN1X3JlYWRfbG9jaygpYCBiZWZvcmVoYW5kPyBUaGF0JiMzOTtzIGEgaHVnZSByZWQgZmxhZy4gTXkgdW5kZXJzdGFuZGluZyBpcywgYW5kIEkmIzM5O2QgYmV0IG1vc3QgZXhwZXJ0cyB3b3VsZCBhZ3JlZSwgdGhhdCBhY2Nlc3NpbmcgYW4gUkNVLXByb3RlY3RlZCBwb2ludGVyIHJlcXVpcmVzIHRoZSBSQ1UgcmVhZCBsb2NrLiBgcHBwb2Vfc2VxX3Nob3dgIGlzIGNhbGxlZCBmcm9tIHRoZSBzZXFfZmlsZSBmcmFtZXdvcmssIGFuZCBteSBndXQgdGVsbHMgbWUgdGhhdCBzZXFfZmlsZSBtaWdodCBub3QgYXV0b21hdGljYWxseSBob2xkIHRoZSBSQ1UgcmVhZCBsb2NrLiBUaGlzIGNvdWxkIGJlIGEgcmFjZSBjb25kaXRpb24gd2FpdGluZyB0byBoYXBwZW4uIEkgbmVlZCB0byBjb25maXJtIHRoaXMgcXVpY2tseS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgcHBwb2Vfc2VxX3Nob3dgIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aGF0IGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTYyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NjI6XHRzdGF0aWMgaW50IHBwcG9lX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIDk2MzpcdHtcbiA5NjQ6XHRcdHN0cnVjdCBwcHBveF9zb2NrICpwbztcbiA5NjU6XHRcdGNoYXIgKmRldl9uYW1lO1xuIDk2NjpcdFx0Y2hhciAqcHBwX25hbWU7XG4gOTY3Olx0XG4gOTY4Olx0XHRpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pIHtcbiA5Njk6XHRcdFx0c2VxX3B1dHMoc2VxLCBcJiMzNDtJZCAgICAgICBBZGRyZXNzICAgICAgICAgICAgICBEZXZpY2UgICBQUFAtRGV2aWNlXFxuXCYjMzQ7KTtcbiA5NzA6XHRcdFx0Z290byBvdXQ7XG4gOTcxOlx0XHR9XG4gOTcyOlx0XG4gOTczOlx0XHRwbyA9IHY7XG4gOTc0Olx0XHRkZXZfbmFtZSA9IHBvLVx1MDAzZXBwcG9lX3BhLmRldjtcbiA5NzU6XHRcdHBwcF9uYW1lID0gcHBwX2Rldl9uYW1lKFx1MDAyNnBvLVx1MDAzZWNoYW4pO1xuIDk3NjpcdFxuIDk3NzpcdFx0c2VxX3ByaW50ZihzZXEsIFwmIzM0OyUwOFggJXBNICU4cyAlMTBzXFxuXCYjMzQ7LFxuIDk3ODpcdFx0XHQgICBwby1cdTAwM2VwcHBvZV9wYS5zaWQsIHBvLVx1MDAzZXBwcG9lX3BhLnJlbW90ZSwgZGV2X25hbWUsIHBwcF9uYW1lID8gcHBwX25hbWUgOiBcJiMzNDtcJiMzNDspO1xuIDk3OTpcdG91dDpcbiA5ODA6XHRcdHJldHVybiAwO1xuIDk4MTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI1MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEZWJ1Z2dpbmcgYSBQb3RlbnRpYWwgUFBQb0UgTG9jayoqCgpPa2F5LCBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGlzc3VlIGFuZCBhIGh1bmNoIGp1c3QgaGl0IG1lLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBwcHBvZV9zZXFfc3RhcnRgLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBpbiB0aGUgUFBQb0Ugc2VxdWVuY2UsIGFuZCBpdCYjMzk7cyBwb3NzaWJsZeKAlG1heWJlIGV2ZW4gbGlrZWx54oCUdGhhdCBpdCBjb250YWlucyBzb21lIHNvcnQgb2YgbXV0ZXggb3Igb3RoZXIgbG9jayB0aGF0IGNvdWxkIGJlIGNhdXNpbmcgYSBib3R0bGVuZWNrIG9yIGV2ZW4gYSBkZWFkbG9jay4gVGhpcyBjb3VsZCBiZSB0aGUgcm9vdCBvZiB0aGUgcHJvYmxlbSBJJiMzOTttIHNlZWluZy4gSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIHRoZSBsb2NrIGlzIHByb3Blcmx5IGltcGxlbWVudGVkIGFuZCByZWxlYXNlZCBpbiBhbGwgc2NlbmFyaW9zLCBhbmQgdW5kZXJzdGFuZCB3aGF0IHRoZSBjcml0aWNhbCBzZWN0aW9uIHByb3RlY3RzLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc3RhcnQgdHJhY2luZyB0aGUgZXhlY3V0aW9uIGZsb3cgYXJvdW5kIGBwcHBvZV9zZXFfc3RhcnRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDAzOlx0e1xuMTAwNDpcdFx0c3RydWN0IHBwcG9lX25ldCAqcG4gPSBwcHBvZV9wZXJuZXQoc2VxX2ZpbGVfbmV0KHNlcSkpO1xuMTAwNTpcdFx0bG9mZl90IGwgPSAqcG9zO1xuMTAwNjpcdFxuMTAwNzpcdFx0cmN1X3JlYWRfbG9jaygpO1xuMTAwODpcdFx0cmV0dXJuIGwgPyBwcHBvZV9nZXRfaWR4KHBuLCAtLWwpIDogU0VRX1NUQVJUX1RPS0VOO1xuMTAwOTpcdH1cbjEwMTA6XHRcbjEwMTE6XHRzdGF0aWMgdm9pZCAqcHBwb2Vfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxuMTAxMjpcdHtcbjEwMTM6XHRcdHN0cnVjdCBwcHBvZV9uZXQgKnBuID0gcHBwb2VfcGVybmV0KHNlcV9maWxlX25ldChzZXEpKTtcbjEwMTQ6XHRcdHN0cnVjdCBwcHBveF9zb2NrICpwbywgKm5leHQ7XG4xMDE1Olx0XG4xMDE2Olx0XHQmIzQzOyYjNDM7KnBvcztcbjEwMTc6XHRcdGlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikge1xuMTAxODpcdFx0XHRwbyA9IHBwcG9lX2dldF9pZHgocG4sIDApO1xuMTAxOTpcdFx0XHRnb3RvIG91dDtcbjEwMjA6XHRcdH1cbjEwMjE6XHRcdHBvID0gdjtcbjEwMjI6XHRcdG5leHQgPSByY3VfZGVyZWZlcmVuY2UocG8tXHUwMDNlbmV4dCk7XG4xMDIzOlx0XHRpZiAobmV4dClcbjEwMjQ6XHRcdFx0cG8gPSBuZXh0O1xuMTAyNTpcdFx0ZWxzZSB7XG4xMDI2Olx0XHRcdGludCBoYXNoID0gaGFzaF9pdGVtKHBvLVx1MDAzZXBwcG9lX3BhLnNpZCwgcG8tXHUwMDNlcHBwb2VfcGEucmVtb3RlKTtcbjEwMjc6XHRcbjEwMjg6XHRcdFx0cG8gPSBOVUxMO1xuMTAyOTpcdFx0XHR3aGlsZSAoJiM0MzsmIzQzO2hhc2ggXHUwMDNjIFBQUE9FX0hBU0hfU0laRSkge1xuMTAzMDpcdFx0XHRcdHBvID0gcmN1X2RlcmVmZXJlbmNlKHBuLVx1MDAzZWhhc2hfdGFibGVbaGFzaF0pO1xuMTAzMTpcdFx0XHRcdGlmIChwbylcbjEwMzI6XHRcdFx0XHRcdGJyZWFrO1xuMTAzMzpcdFx0XHR9XG4xMDM0Olx0XHR9XG4xMDM1Olx0XG4xMDM2Olx0b3V0OlxuMTAzNzpcdFx0cmV0dXJuIHBvO1xuMTAzODpcdH1cbjEwMzk6XHRcbjEwNDA6XHRzdGF0aWMgdm9pZCBwcHBvZV9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbjEwNDE6XHRcdF9fcmVsZWFzZXMoUkNVKVxuMTA0MjpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA2NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25jZXJucyBSZWdhcmRpbmcgUkNVIFByb3RlY3Rpb24gaW4gUFBQb0UgU2VxdWVuY2UgT3BlcmF0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IGBwcHBvZV9zZXFfc3RhcnRgIGhvbGRzIGFuIGByY3VfcmVhZF9sb2NrKClgLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gVGhlbiwgd2UgaGF2ZSBhIGNhbGwgdG8gYHBwcF9kZXZfbmFtZWAgd2hpY2gsIGxvZ2ljYWxseSwgc2hvdWxkIGJlIHNhZmUgYmVjYXVzZSBpdCYjMzk7cyB1bmRlciB0aGUgUkNVIHJlYWQgbG9jay4gSG93ZXZlciwgYHBwcF9kZXZfbmFtZWAgaXRzZWxmIHVzZXMgYHJjdV9kZXJlZmVyZW5jZShwY2gtJmd0O3BwcClgLiBPa2F5LCB0aGF0IHN1Z2dlc3RzIGBwY2gtJmd0O3BwcGAgaXMgUkNVIHByb3RlY3RlZCwgd2hpY2ggaXMgZ29vZC4gQnV0IHRoZW4gdGhlIHF1ZXN0aW9uIGJlY29tZXM6IGlzIGBwcHAtJmd0O2RldmAgc2FmZSB0byBhY2Nlc3MgKmFmdGVyKiB0aGF0IGRlcmVmZXJlbmNlPwoKVGhlIGNvcmUgb2YgbXkgY29uY2VybiByZXZvbHZlcyBhcm91bmQgdGhlIHBvdGVudGlhbCBmb3IgYSByYWNlIGNvbmRpdGlvbi4gSWYgYHBwcGAgaXMgZnJlZWQgY29uY3VycmVudGx5LCB0aGVuIGBwcHAtJmd0O2RldmAgd291bGQgbGlrZWx5IGFsc28gYmUgZnJlZWQsIGJlY29taW5nIHVudXNhYmxlLiBCdXQgYHBwcF9kZXZfbmFtZWAgcmV0dXJucyBgcHBwLSZndDtkZXYtJmd0O25hbWVgLiBOb3cgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGBjaGFyYCBhcnJheSB3aXRoaW4gYSBgc3RydWN0IG5ldF9kZXZpY2VgLiBJZiBgcHBwYCBpcyBmcmVlZCB3aGlsZSB0aGUgY29kZSBpcyBydW5uaW5nLCBhbmQgaWYgYHBwcC0mZ3Q7ZGV2YCBpcyBzdWJzZXF1ZW50bHkgZnJlZWQsIHRoZW4gdGhhdCBwb2ludGVyIGBwcHAtJmd0O2Rldi0mZ3Q7bmFtZWAgaXMgZGFuZ2xpbmcsIGFuZCBjb3VsZCBjYXVzZSBtYWpvciBpc3N1ZXMuCgpTcGVjaWZpY2FsbHksIHRoZSBmYWN0IHRoYXQgYHBwcF9kZXZfbmFtZWAgaXMgcmV0dXJuaW5nIGEgcG9pbnRlciBgbmFtZWAgdG8gYHBwcC0mZ3Q7ZGV2LSZndDtuYW1lYCBpcyB0cm91YmxpbmcuIExhdGVyLCBgcHBwb2Vfc2VxX3Nob3dgIHRoZW4gdXNlcyB0aGlzIHJldHVybmVkIGBwcHBfbmFtZWAgcG9pbnRlciBpbiBgc2VxX3ByaW50ZmAuIElmIGBwcHBgIG9yIGBwcHAtJmd0O2RldmAgaXMgZnJlZWQgY29uY3VycmVudGx5IGJldHdlZW4gd2hlbiBgcHBwX2Rldl9uYW1lYCBpcyBjYWxsZWQgYW5kIHdoZW4gYHNlcV9wcmludGZgIGFjdHVhbGx5IHVzZXMgdGhlIHBvaW50ZXIsIHRoZSBmdW5jdGlvbiBpcyBnb2luZyB0byByZWFkIGZyb20gZnJlZWQgbWVtb3J5LiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5IQoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgcHBwYCBpcywgaW5kZWVkLCBwcm90ZWN0ZWQgYnkgUkNVIHRvIHByb3ZpZGUgbWVtb3J5IHNhZmV0eS4gVG8gYmUgc3VyZSBhYm91dCB0aGlzLCBJIHNob3VsZCBleGFtaW5lIGBwcHBfZGVzdHJveV9pbnRlcmZhY2VgIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBQUFBvRSBpbnRlcmZhY2UgaXMgY2xlYW5lZCB1cCBhbmQgaG93IHRoZSBgcHBwYCBzdHJ1Y3R1cmUgaXMgaGFuZGxlZC4gVGhpcyBpcyB0aGUgY3JpdGljYWwgcGllY2UgdGhhdCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcHBfZGVzdHJveV9pbnRlcmZhY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTE1NDc9c3RhdGljIGludCBwcHBfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xNTU0LVx0LyogTGV0IHRoZSBuZXRkZXZpY2UgdGFrZSBhIHJlZmVyZW5jZSBvbiB0aGUgcHBwIGZpbGUuIFRoaXMgZW5zdXJlc1xuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MTU1NTpcdCAqIHRoYXQgcHBwX2Rlc3Ryb3lfaW50ZXJmYWNlKCkgd29uJiMzOTt0IHJ1biBiZWZvcmUgdGhlIGRldmljZSBnZXRzXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xNTU2LVx0ICogdW5yZWdpc3RlcmVkLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTU5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBwcHBfZGV2X25hbWVgIFZhcmlhYmxlKioKCk9rYXksIHRpbWUgdG8gY2lyY2xlIGJhY2sgYW5kIHJlLWV4YW1pbmUgdGhlIGBwcHBfZGV2X25hbWVgIHZhcmlhYmxlLiBJIG5lZWQgdG8gZW5zdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwuIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyBzdGlsbCBzb3VuZCwgYnV0IGluIGNvbXBsZXggc3lzdGVtcyBsaWtlIHRoaXMsIGFzc3VtcHRpb25zIGNhbiBiZSBkYW5nZXJvdXMuIExldCBtZSBxdWlja2x5IHJlZnJlc2ggdGhlIGNvbnRleHQ6IGlzIGl0IHN0aWxsIHBvaW50aW5nIHRvIHRoZSBleHBlY3RlZCBpbnRlcmZhY2U/IEhhcyBhbnl0aGluZyB1cHN0cmVhbSBvciBkb3duc3RyZWFtIHBvdGVudGlhbGx5IG1vZGlmaWVkIGl0cyB2YWx1ZSwgZWl0aGVyIGludGVudGlvbmFsbHkgb3IgdGhyb3VnaCBzb21lIHN1YnRsZSBpbnRlcmFjdGlvbiBJIGRpZG4mIzM5O3QgYW50aWNpcGF0ZT8gSeKAmWxsIG1lbnRhbGx5IHdhbGsgdGhyb3VnaCB0aGUgY29kZSBwYXRoIGFnYWluLCBmb2N1c2luZyBvbiBhbnkgcG9pbnRzIHdoZXJlIGBwcHBfZGV2X25hbWVgIGlzIHNldCwgYWNjZXNzZWQsIG9yIHBvc3NpYmx5IG92ZXJ3cml0dGVuLiBBcmUgdGhlcmUgYW55IHJhY2UgY29uZGl0aW9ucyBsdXJraW5nPyBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIHNjZW5hcmlvcz8gSSB3YW50IHRvIG1ha2UgY2VydGFpbiB0aGF0IGl0cyBzdGF0ZSBpcyBib3RoIGNvcnJlY3QgYW5kIGNvbnNpc3RlbnQgYXQgdGhpcyBwb2ludCBpbiB0aGUgZXhlY3V0aW9uLiBMZXQgbWUgbWFrZSBjZXJ0YWluIHRoYXQgdGhlcmUgd2VyZSBubyByZWNlbnQgY2hhbmdlcyB0byB0aGUgbW9kdWxlLiBJZiBJJiMzOTttIGx1Y2t5LCBhIHF1aWNrIHZpc3VhbCBjaGVjayB3aWxsIHN1ZmZpY2UuIEhvd2V2ZXIsIGlmIEkgc3VzcGVjdCBhIG1vcmUgaW50cmljYXRlIGlzc3VlLCBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCBkZWJ1Z2dpbmcgdG9vbHMgdG8gZGl2ZSBkZWVwZXIg4oCTIHBlcmhhcHMgc3RlcHBpbmcgdGhyb3VnaCB0aGUgcmVsZXZhbnQgY29kZSB3aXRoIGEgZGVidWdnZXIgb3IgdGVtcG9yYXJpbHkgYWRkaW5nIHNvbWUgaW5zdHJ1bWVudGF0aW9uLiBJIHdhbnQgdG8gYnVpbGQgYSBoaWdoIGxldmVsIG9mIGNvbmZpZGVuY2UgYXJvdW5kIHRoaXMgdmFyaWFibGUmIzM5O3MgY29ycmVjdG5lc3MgYmVmb3JlIEkgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5NzMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjk3MzpcdGNoYXIgKnBwcF9kZXZfbmFtZShzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXG4yOTc0Olx0e1xuMjk3NTpcdFx0c3RydWN0IGNoYW5uZWwgKnBjaCA9IGNoYW4tXHUwMDNlcHBwO1xuMjk3NjpcdFx0Y2hhciAqbmFtZSA9IE5VTEw7XG4yOTc3Olx0XHRzdHJ1Y3QgcHBwICpwcHA7XG4yOTc4Olx0XG4yOTc5Olx0XHRpZiAocGNoKSB7XG4yOTgwOlx0XHRcdHBwcCA9IHJjdV9kZXJlZmVyZW5jZShwY2gtXHUwMDNlcHBwKTtcbjI5ODE6XHRcdFx0aWYgKHBwcCBcdTAwMjZcdTAwMjYgcHBwLVx1MDAzZWRldilcbjI5ODI6XHRcdFx0XHRuYW1lID0gcHBwLVx1MDAzZWRldi1cdTAwM2VuYW1lO1xuMjk4MzpcdFx0fVxuMjk4NDpcdFx0cmV0dXJuIG5hbWU7XG4yOTg1Olx0fVxuMjk4NjpcdFxuMjk4NzpcdFxuMjk4ODpcdC8qXG4yOTg5Olx0ICogRGlzY29ubmVjdCBhIGNoYW5uZWwgZnJvbSB0aGUgZ2VuZXJpYyBsYXllci5cbjI5OTA6XHQgKiBUaGlzIG11c3QgYmUgY2FsbGVkIGluIHByb2Nlc3MgY29udGV4dC5cbjI5OTE6XHQgKi9cbjI5OTI6XHR2b2lkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1MzgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5IG9mIHRoZSBwcm92aWRlZCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlJDVSBSZWxlYXNlIFN0cmF0ZWd5IGZvciBgcHBwYCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBvZiB0aGlzIGBwcHBgIG9iamVjdCwgYW5kIGEga2V5IHF1ZXN0aW9uIHBvcHMgdXA6IHdoZW4gYHBwcGAgaXMgZGVhbGxvY2F0ZWQsIGlzIHRoYXQgb3BlcmF0aW9uIFJDVS1wcm90ZWN0ZWQ/IEdpdmVuIHRoZSBjb250ZXh0LCBpdCYjMzk7cyBhIGNyaXRpY2FsIGFzc3VtcHRpb24gdG8gY2xhcmlmeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gZW5zdXJlcyB0aGF0IHJlYWRlcnMgdXNpbmcgYHBwcGAgc2VlIGNvbnNpc3RlbnQgZGF0YSBldmVuIGR1cmluZyByZWxlYXNlLgoKVG8gY29uZmlybSB0aGlzLCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZnJlZWluZyBwYXRoLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gdGhlIGRlZmluaXRpb24gb2YgYHBwcF9yZWxlYXNlYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBtZWNoYW5pc20g4oCTIG9yIHRoZSBhYnNlbmNlIG9mIGl0LiBUaGUgYHBwcF9yZWxlYXNlYCBmdW5jdGlvbiBpcyB0aGUgZ2F0ZWtlZXBlciBoZXJlLCB0aGUgZGVmaW5pdGl2ZSBwb2ludCB3aGVyZSByZXNvdXJjZSBtYW5hZ2VtZW50IGhhcHBlbnMuIEkgbmVlZCB0byBzY3J1dGluaXplIHRoYXQgZnVuY3Rpb24gY2FyZWZ1bGx5IHRvIGRldGVybWluZSBpZiBpdCB1c2VzIGBjYWxsX3JjdWAsIGBzeW5jaHJvbml6ZV9yY3VgLCBvciBzaW1pbGFyIFJDVSBwcmltaXRpdmVzLCBvciBpZiBpdCB1dGlsaXplcyBhIGxvY2sgaW5zdGVhZCwgb3IgZXZlbiBpZiB0aGVyZSBpcyBubyBwcm90ZWN0aW9uIGF0IGFsbC4gS25vd2luZyB0aGUgc3RyYXRlZ3kgb2YgdGhlIHJlbGVhc2UgZnVuY3Rpb24gd2lsbCB0ZWxsIG1lIHRoZSBSQ1Ugc3Rvcnkgb2YgYHBwcGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2ZyZWVfcmN1LipwcHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg1OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIFBQUCBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgbGlrZWx5IHNvdXJjZSBvZiB0aGlzIG1lbW9yeSBpc3N1ZS4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgaW1tZWRpYXRlbHkgdGhpbmssICYjMzQ7TGV0JiMzOTtzIHplcm8gaW4gb24gYGtmcmVlYCBjYWxscyB3aXRoaW4gdGhlIGBwcHBfZ2VuZXJpYy5jYCBmaWxlLiYjMzQ7IFRoZSBgcHBwYCBjb21wb25lbnQgaXMgYSBjbGFzc2ljIGFyZWEgZm9yIHRoZXNlIGtpbmRzIG9mIHByb2JsZW1zLCBhbmQgYGtmcmVlYCwgc3BlY2lmaWNhbGx5LCBpbmRpY2F0ZXMgbWVtb3J5IGRlYWxsb2NhdGlvbiwgd2hpY2ggaXMgd2hlcmUgdGhpbmdzIG9mdGVuIGdvIHdyb25nLiBTbywgSSB3YW50IHRvIHNlZSBob3cgdGhlIGNvZGUgaXMgaGFuZGxpbmcgbWVtb3J5IGluIHRoZXJlLiBJdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2ZyZWUuKnBwcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjEtICogMDQwODAwIDpcdFJlc3BlY3QgcmVmZXJlbmNlIGNvdW50IG1lY2hhbmlzbXMgb24gbmV0LWRldmljZXMuXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoyMjogKiAyMDA4MDAgOlx0Zml4IGtmcmVlKHNrYikgaW4gcHBwb2VfcmN2IChhY21lKVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjMtICpcdFx0TW9kdWxlIHJlZmVyZW5jZSBjb3VudCBpcyBkZWNyZW1lbnRlZCBpbiB0aGUgcmlnaHQgc3BvdCBub3csXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxNTgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIGBwcHBfZGVzdHJveV9pbnRlcmZhY2VgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGZ1bmN0aW9uIG5hbWUsIGBwcHBfZGVzdHJveV9pbnRlcmZhY2VgLCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGUgc2NvcGU6IGl0JiMzOTtzIGludm9sdmVkIGluIHRlYXJpbmcgZG93biBhIFBvaW50LXRvLVBvaW50IFByb3RvY29sIChQUFApIGludGVyZmFjZS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSBsYXllcnMgb2YgdGhlIG5ldHdvcmsgc3RhY2sgYWZmZWN0ZWQgYnkgdGhpcyBwcm9jZXNzLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGxpbmsgbGF5ZXIsIG5ldHdvcmsgbGF5ZXIsIG1heWJlIGV2ZW4gdHJhbnNwb3J0IGxheWVyIGltcGxpY2F0aW9ucywgZGVwZW5kaW5nIG9uIGhvdyByb2J1c3QgdGhlIGltcGxlbWVudGF0aW9uIGlzLiBJIGV4cGVjdCBpdCYjMzk7bGwgaW52b2x2ZSBjbGVhbmluZyB1cCByZXNvdXJjZXM6IG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoZSBpbnRlcmZhY2Ugc3RydWN0dXJlLCBhbnkgYXNzb2NpYXRlZCBidWZmZXJzIG9yIHNvY2tldHMsIHBvdGVudGlhbGx5IHJlbW92aW5nIGVudHJpZXMgZnJvbSByb3V0aW5nIHRhYmxlcyBvciBBUlAgY2FjaGVzLCBhbmQgc2lnbmFsaW5nIHRvIHRoZSBoYXJkd2FyZSB0aGF0IHRoaXMgaW50ZXJmYWNlIGlzIG5vIGxvbmdlciBhY3RpdmUuIEkmIzM5O20gYWxzbyBjb25zaWRlcmluZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgaW50ZXJmYWNlIGJlaW5nIGRlc3Ryb3llZCB3aGlsZSBjb25uZWN0aW9ucyBhcmUgYWN0aXZlLiBXZXJlIHRoZXNlIGdyYWNlZnVsbHkgY2xvc2VkIG9yIGFicnVwdGx5IHRlcm1pbmF0ZWQ/IElzIHRoZXJlIGFueSBtZWNoYW5pc20gZm9yIHByZXZlbnRpbmcgZGF0YSBsb3NzIG9yIGNvcnJ1cHRpb24gZHVyaW5nIHRoZSB0ZWFyZG93bj8gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBpc3N1ZXMgdGhhdCBjb3VsZCBhcmlzZSB3aGVuIG11bHRpcGxlIHByb2Nlc3NlcyBvciB0aHJlYWRzIG1pZ2h0IGJlIHRyeWluZyB0byBtYW5pcHVsYXRlIG9yIGFjY2VzcyB0aGlzIGludGVyZmFjZSBzaW11bHRhbmVvdXNseS4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIHNhZmUgdG8gdXNlIGluIHRoZSBjb250ZXh0IG9mIG11bHRpdGhyZWFkZWQgb3BlcmF0aW9ucy4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgc29tZSBjb21wbGV4IGludGVyYWN0aW9ucyB3aXRoIHZhcmlvdXMga2VybmVsIHN1YnN5c3RlbXMsIGVzcGVjaWFsbHkgaWYgdGhlcmUgYXJlIGFueSBuZXR3b3JrIG5hbWVzcGFjZXMgb3IgY29udGFpbmVyaXphdGlvbiBpbnZvbHZlZC4gQW5kIG9mIGNvdXJzZSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiwgaWYgZG9uZSBjb3JyZWN0bHksIHRvIGJlIHJvYnVzdCB0byBlcnJvcnMsIGFuZCBoYW5kbGUgdmFyaW91cyBzY2VuYXJpb3MgZ3JhY2VmdWxseSBzdWNoIGFzIHRoZSBpbnRlcmZhY2UgYmVpbmcgYWxyZWFkeSBkZXN0cm95ZWQuIExldCYjMzk7cyBzZWUgaG93IGl0IGFsbCBwbGF5cyBvdXQgaW4gcHJhY3RpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BwcF9kZXN0cm95X2ludGVyZmFjZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MTU0Nz1zdGF0aWMgaW50IHBwcF9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTE1NTQtXHQvKiBMZXQgdGhlIG5ldGRldmljZSB0YWtlIGEgcmVmZXJlbmNlIG9uIHRoZSBwcHAgZmlsZS4gVGhpcyBlbnN1cmVzXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoxNTU1Olx0ICogdGhhdCBwcHBfZGVzdHJveV9pbnRlcmZhY2UoKSB3b24mIzM5O3QgcnVuIGJlZm9yZSB0aGUgZGV2aWNlIGdldHNcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTE1NTYtXHQgKiB1bnJlZ2lzdGVyZWQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NzAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYHBwcGAmIzM5O3MgRGVhbGxvY2F0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyB0byBkaXZlIGludG8gdGhlIHNwZWNpZmljcyBvZiBob3cgYHBwcGAgZ2V0cyBmcmVlZC4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IG1lY2hhbmlzbSwgYmVjYXVzZSBJIGtub3cgdGhlcmUmIzM5O3MgYSBsb3Qgb2YgbnVhbmNlIGluIGhvdyB5b3UgbWFuYWdlIG1lbW9yeSBhbmQgZGVhbGxvY2F0ZSByZXNvdXJjZXMuIEkgd2FudCB0byBzZWUgaWYgdGhlIGRlYWxsb2NhdGlvbiBpcyBtYW51YWwgb3IgYXV0b21hdGljLCB3aGF0IHRlY2huaXF1ZXMgYXJlIGVtcGxveWVkLiBJcyBpdCByZWZlcmVuY2UgY291bnRpbmcsIGdhcmJhZ2UgY29sbGVjdGlvbiwgZXhwbGljaXQgYGZyZWUoKWAgY2FsbHMsIG9yIHNvbWUga2luZCBvZiBzY29wZWQgcmVzb3VyY2UgbWFuYWdlbWVudD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgZ290Y2hhcyBvciBlZGdlIGNhc2VzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBuZWVkIHRvIGNvbnNpZGVyIGFueSBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYW5kIHdoZXRoZXIgdGhlcmUgbWlnaHQgYmUgYW55IHBvdGVudGlhbCBmb3IgbWVtb3J5IGxlYWtzLCBkb3VibGUgZnJlZXMsIG9yIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBpbnZlc3RpZ2F0aW9uIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgc3RhYmlsaXR5IGFuZCByZXNvdXJjZSBlZmZpY2llbmN5IG9mIHRoaXMgcGFydCBvZiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tmcmVlLipwcHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5NDAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgcHBwX2dlbmVyaWMuY2AqKgoKT2theSwgSSBuZWVkIHRvIGludmVzdGlnYXRlIGEgbWVtb3J5LXJlbGF0ZWQgaXNzdWUsIGFuZCBteSBpbnR1aXRpb24gaXMgcG9pbnRpbmcgbWUgdG93YXJkcyB0aGUgUG9pbnQtdG8tUG9pbnQgUHJvdG9jb2wgKFBQUCkgZ2VuZXJpYyBjb2RlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IGRlYWxsb2NhdGlvbiwgc28gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGBrZnJlZWAgZnVuY3Rpb24gY2FsbHMgd2l0aGluIGBwcHBfZ2VuZXJpYy5jYC4gVGhpcyBzZWVtcyBsaWtlIGEgbG9naWNhbCBmaXJzdCBzdGVwIHRvIHNlZSBob3cgbWVtb3J5IGlzIGJlaW5nIGhhbmRsZWQgYW5kIGxvb2sgZm9yIHBvdGVudGlhbCBkb3VibGUgZnJlZXMsIHVzZS1hZnRlci1mcmVlcywgb3IgbWVtb3J5IGxlYWtzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tmcmVlXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9NTgwPXN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2cgKmdldF9maWx0ZXIoc3RydWN0IHNvY2tfZnByb2cgKnVwcm9nKVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTU5Ni1cdGVyciA9IGJwZl9wcm9nX2NyZWF0ZShcdTAwMjZyZXMsIFx1MDAyNmZwcm9nKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjU5NzpcdGtmcmVlKGZwcm9nLmZpbHRlcik7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy01OTgtXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MzI3NT1wcHBfdW5yZWdpc3Rlcl9jb21wcmVzc29yKHN0cnVjdCBjb21wcmVzc29yICpjcClcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0zMjgyLVx0XHRsaXN0X2RlbChcdTAwMjZjZS1cdTAwM2VsaXN0KTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjMyODM6XHRcdGtmcmVlKGNlKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTMyODQtXHR9XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MzU3NT1zdGF0aWMgdm9pZCBwcHBfcmVsZWFzZV9jaGFubmVsX2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMzU4MC1cdHNrYl9xdWV1ZV9wdXJnZShcdTAwMjZwY2gtXHUwMDNlZmlsZS5ycSk7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzozNTgxOlx0a2ZyZWUocGNoKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTM1ODItfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDcxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBwcHBgIFN0cnVjdHVyZSBhbmQgSXRzIFJlbGF0aW9uc2hpcCB0byBgbmV0X2RldmljZWAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgY2VudGVyZWQgYXJvdW5kIHVuZGVyc3RhbmRpbmcgdGhlIHByZWNpc2UgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGBwcHBgIHN0cnVjdHVyZSAobGlrZWx5IHJlcHJlc2VudGluZyBhIFBvaW50LXRvLVBvaW50IFByb3RvY29sIGltcGxlbWVudGF0aW9uKSBhbmQgdGhlIGBuZXRfZGV2aWNlYCBzdHJ1Y3R1cmUgKHRoZSBmdW5kYW1lbnRhbCBuZXR3b3JrIGludGVyZmFjZSBhYnN0cmFjdGlvbikuCgpUaGUgcXVlc3Rpb24gaXMsIHNwZWNpZmljYWxseSwgaG93IGlzIGBwcHBgICptYW5hZ2VkKiBpbiBtZW1vcnk/IElzIGBzdHJ1Y3QgcHBwYCBpbmhlcmVudGx5IGVtYmVkZGVkICp3aXRoaW4qIGBzdHJ1Y3QgbmV0X2RldmljZWA/IFRoYXQgd291bGQgaW1wbHkgYSB0aWdodCBjb3VwbGluZywgYSBzaW5nbGUgYWxsb2NhdGlvbiBzdHJhdGVneSB3aGVyZSB0aGUgUFBQLXNwZWNpZmljIGRhdGEgaXMgZGlyZWN0bHkgcGFydCBvZiB0aGUgaW50ZXJmYWNlIGRlc2NyaXB0b3IuIE9yLCBpcyBgcHBwYCBhbGxvY2F0ZWQgc2VwYXJhdGVseSwgbGlrZWx5IGxpbmtlZCB0byBhIGBuZXRfZGV2aWNlYCBpbnN0YW5jZSB2aWEgYSBwb2ludGVyPyBBIG1vcmUgbW9kdWxhciBhcHByb2FjaCB0aGF0IGFsbG93cyBmb3IgcG90ZW50aWFsbHkgbW9yZSBkeW5hbWljIGNvbmZpZ3VyYXRpb25zLiBUaGUgJiMzNDtvciYjMzQ7IGltcGxpZXMgdGhpcy4KCkkgbmVlZCB0byBjb25maXJtIHRoaXM6IFVuZGVyc3RhbmRpbmcgdGhlIG1lbW9yeSBtb2RlbCBkaXJlY3RseSBpbXBhY3RzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIGNlcnRhaW4gdGFza3M6IGRldmljZSBkcml2ZXIgZGV2ZWxvcG1lbnQsIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgZGVidWdnaW5nLCBvciBvcHRpbWl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX25ldGRldiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTMzNTU9c3RhdGljIGludCBwcHBfY3JlYXRlX2ludGVyZmFjZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgKnVuaXQpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMzM2NS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjMzNjY6XHRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBwcHApLCBcJiMzNDtcJiMzNDssIE5FVF9OQU1FX0VOVU0sIHBwcF9zZXR1cCk7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0zMzY3LVx0aWYgKCFkZXYpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkwMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDYxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgS2VybmVsIFBhdGNoIGZvciBQUFBvRSBJbmZvcm1hdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgc3RydWN0IHBwcGAgaXMgY2xvc2VseSB0aWVkIHRvIGBzdHJ1Y3QgbmV0X2RldmljZWAsIG1lYW5pbmcgd2hlbiB0aGUgbmV0IGRldmljZSBnb2VzLCBzbyBkb2VzIHRoZSBQUFAgZGF0YS4gVGhlIGtleSBpcyB0aGF0IGBuZXRfZGV2aWNlYCBjbGVhbnVwIHVzZXMgUkNVLiBUaGlzIHRlbGxzIG1lIHRoYXQgYW55IGFjY2VzcyB0byBgcHBwYCBkYXRhIHVuZGVyIGFuIFJDVSByZWFkIGxvY2sgaXMgcHJvYmFibHkgc2FmZSwgYXMgYGZyZWVfbmV0ZGV2YCB1c2VzIFJDVS4gSSYjMzk7bSBlc3BlY2lhbGx5IGZvY3VzZWQgb24gYHBwcC0mZ3Q7ZGV2LSZndDtuYW1lYCwgYSBjaGFyYWN0ZXIgYXJyYXkgd2l0aGluIHRoZSBgbmV0X2RldmljZWAgc3RydWN0LiBTaW5jZSBgcHBwX2Rldl9uYW1lYCByZXR1cm5zIGEgcG9pbnRlciB0byBgcHBwLSZndDtkZXYtJmd0O25hbWVgIGFuZCB0aGlzIGRhdGEgaXMgdXNlZCBpbiBgcHBwb2Vfc2VxX3Nob3dgLCB3aGljaCBpcyBjYWxsZWQgd2l0aGluIGFuIFJDVSByZWFkIGxvY2sgY29udGV4dCAoYHNlcV9zdGFydGAgYWNxdWlyZXMgYW5kIGBzZXFfc3RvcGAgcmVsZWFzZXMgdGhlIGxvY2spLCB0aGUgcG9pbnRlciBzaG91bGQgYmUgdmFsaWQgZHVyaW5nIHRoZSBgc2VxX3ByaW50ZmAgY2FsbC4KClNvLCB0aGUgZnVuY3Rpb25hbCBjaGFuZ2Ugc2VlbXMgbWluaW1hbCDigJMganVzdCBhZGRpbmcgdGhpcyBgcHBwX2Rldl9uYW1lYCB0byB0aGUgYC9wcm9jL25ldC9wcHBvZWAgb3V0cHV0LiBUaGlzIGlzIGEgcHVyZWx5IGluZm9ybWF0aW9uYWwgYWRkaXRpb24gdG8gYSBwcm9jZnMgZmlsZS4gTm93LCB0aGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgZXZlbiB3b3J0aCBmdXp6aW5nPwoKVGhlIGluc3RydWN0aW9ucyBnaXZlIG1lIGEgc29saWQgc2V0IG9mIHJlYXNvbnMgKm5vdCogdG8gZnV6ei4gVGhleSBzcGVjaWZpY2FsbHkgZXhjbHVkZSBtb2RpZmljYXRpb25zIHRvIGRvY3VtZW50YXRpb24sIEtjb25maWcsIGNvbW1lbnRzLCBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzIGxpa2UgbG9nZ2luZywgYW5kIGNoYW5nZXMgdGhhdCBkb24mIzM5O3QgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuIFRoaXMgcHJvY2ZzIGNoYW5nZSAqaXMqIGluZm9ybWF0aW9uYWwuIEl0JiMzOTtzIGp1c3QgYWRkaW5nIGEgY29sdW1uLCBzbyBpdCBzZWVtcyBsaWtlIGl0IHdvdWxkbiYjMzk7dCBjaGFuZ2UgYW55IGNvZGUmIzM5O3MgYmVoYXZpb3IuCgpJIGJyaWVmbHkgaGFkIGEgY29uY2VybiB0aGF0IGBwcHBfbmFtZWAgY291bGQgYmUgTlVMTCBhbmQgY2F1c2UgYSBzZWN1cml0eSBpc3N1ZS4gQnV0IGl0IGlzIGhhbmRsZWQgYnkgdGhlIGNvbmRpdGlvbmFsIGluIHRoZSBjb2RlLiBJIGFsc28gY29uc2lkZXJlZCBhIHVzZS1hZnRlci1mcmVlIGlzc3VlLCBidXQgd2UmIzM5O3ZlIGVzdGFibGlzaGVkIHRoYXQgdGhlIGFjY2VzcyBpcyBwcm90ZWN0ZWQgYnkgYW4gUkNVIHJlYWQgbG9jay4gVGhlcmVmb3JlLCB0aGUgbWVtb3J5IGlzIHN0aWxsIHZhbGlkLiBJJiMzOTttIGdvaW5nIHRvIHJldmlldyB0aGUgZGlmZiBhZ2FpbiB0byBtYWtlIHN1cmUgdGhhdCBJIGRpZG4mIzM5O3QgbWlzcyBzb21ldGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BwcF9kZXZfbmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jPTk2Mj1zdGF0aWMgaW50IHBwcG9lX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTk3NC1cdGRldl9uYW1lID0gcG8tXHUwMDNlcHBwb2VfcGEuZGV2O1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6OTc1Olx0cHBwX25hbWUgPSBwcHBfZGV2X25hbWUoXHUwMDI2cG8tXHUwMDNlY2hhbik7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05NzYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTAzCgkJCQkJCQlvdXRwdXQ6IDczCgkJCQkJCQl0aG91Z2h0czogNDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBQUG9FIFByb2NmcyBDaGFuZ2UqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcuIFRoaXMgZGlmZi4uLiB5ZXAsIGl0JiMzOTtzIHByZWNpc2VseSB0aGUgY2hhbmdlIEkgZXhwZWN0ZWQuIFdlJiMzOTtyZSBqdXN0IGFkZGluZyBhIG5ldyBjb2x1bW4gdG8gdGhlIGAvcHJvY2AgZmlsZXN5c3RlbSBlbnRyeSBmb3IgUFBQb0UgY29ubmVjdGlvbnMuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZ29pbmcgdG8gZGlzcGxheSB0aGUgUFBQIGRldmljZSBuYW1lLgoKVGhpcyBpcyBhIHJlYWQtb25seSBpbnRlcmZhY2UsIHRoYXQgbXVjaCBpcyBjbGVhci4gVGhlIHByaW1hcnkgcHVycG9zZSBvZiB0aGlzIGNoYW5nZSBzZWVtcyB0byBiZSBmb3IgaW5mb3JtYXRpb25hbCBkaXNwbGF5LCBwb3RlbnRpYWxseSBkZWJ1Z2dpbmcgb3IgbW9uaXRvcmluZy4gSXQmIzM5O3MgcmVhbGx5IGp1c3QgZm9yIHByZXNlbnRhdGlvbiBpbiBgL3Byb2NgLiBJbXBvcnRhbnRseSwgdGhlcmUmIzM5O3Mgbm90aGluZyBoZXJlIHRoYXQgYWx0ZXJzIHRoZSBjb3JlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuIFRoaXMgaXNuJiMzOTt0IHRvdWNoaW5nIGFueSBjcml0aWNhbCBwYXRoIG9yIGFkZGluZyBhbnkgbmV3IGV4dGVybmFsIGlucHV0cy4KCkdpdmVuIHRoYXQgaXQmIzM5O3MgcHVyZWx5IGluZm9ybWF0aW9uYWwsIEkgZG9uJiMzOTt0IHNlZSBhbnkgcmVhbCB2YWx1ZSBpbiBmdXp6aW5nIHRoaXMuIFRoZXJlJiMzOTtzIG5vIGlucHV0IHRoYXQgdGhpcyBjaGFuZ2UgaXMgZXhwb3NlZCB0bywgdGhhdCBjYW4gY2F1c2UgaXQgdG8gY29ycnVwdCB0aGUgc3lzdGVtIGluIGFueSB3YXkuCgpUaGVyZWZvcmUsIEkmIzM5O20gY29tZm9ydGFibGUgc2F5aW5nIHRoYXQgdGhpcyBpcyBub3Qgc29tZXRoaW5nIHRoYXQgd291bGQgYmVuZWZpdCBmcm9tIGZ1enppbmcuIE15IGNvbmNsdXNpb246IGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhbiBleHRyYSBjb2x1bW4gdG8gdGhlIC9wcm9jL25ldC9wcHBvZSBzZXFfZmlsZSBvdXRwdXQuIFRoaXMgaXMgYSBwdXJlbHkgaW5mb3JtYXRpb25hbC9kZWNvcmF0aXZlIGNoYW5nZSB0aGF0IGRvZXMgbm90IGFsdGVyIHRoZSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgYW4gZXh0cmEgY29sdW1uIHRvIHRoZSAvcHJvYy9uZXQvcHBwb2Ugc2VxX2ZpbGUgb3V0cHV0LiBUaGlzIGlzIGEgcHVyZWx5IGluZm9ybWF0aW9uYWwvZGVjb3JhdGl2ZSBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBhbHRlciB0aGUgZnVuY3Rpb25hbCBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjM4OjMzLjg2NDQzNDY2MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MjE3Mjc5ODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgYW4gZXh0cmEgY29sdW1uIHRvIHRoZSAvcHJvYy9uZXQvcHBwb2Ugc2VxX2ZpbGUgb3V0cHV0LiBUaGlzIGlzIGEgcHVyZWx5IGluZm9ybWF0aW9uYWwvZGVjb3JhdGl2ZSBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBhbHRlciB0aGUgZnVuY3Rpb25hbCBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6Mzg6MzMuODY0NDQzMTYxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA5MzE1ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlOGI3OTk0ZmRlZWRhYTlhODAzMzA0MGIyNWY5NDZiM2FlNDY1ZmQ0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDI5IDA0OjM4OjMyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcXG5pbmRleCA2ODc0YTFhOGVkYWYxLi5jYjMxZjVkYjQzZTgxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcXG5AQCAtOTYzLDE3ICs5NjMsMTkgQEAgc3RhdGljIGludCBwcHBvZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4ge1xcbiBcXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG87XFxuIFxcdGNoYXIgKmRldl9uYW1lO1xcbitcXHRjaGFyICpwcHBfbmFtZTtcXG4gXFxuIFxcdGlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikge1xcbi1cXHRcXHRzZXFfcHV0cyhzZXEsIFxcXCJJZCAgICAgICBBZGRyZXNzICAgICAgICAgICAgICBEZXZpY2VcXFxcblxcXCIpO1xcbitcXHRcXHRzZXFfcHV0cyhzZXEsIFxcXCJJZCAgICAgICBBZGRyZXNzICAgICAgICAgICAgICBEZXZpY2UgICBQUFAtRGV2aWNlXFxcXG5cXFwiKTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuIFxcdHBvID0gdjtcXG4gXFx0ZGV2X25hbWUgPSBwby1cXHUwMDNlcHBwb2VfcGEuZGV2O1xcbitcXHRwcHBfbmFtZSA9IHBwcF9kZXZfbmFtZShcXHUwMDI2cG8tXFx1MDAzZWNoYW4pO1xcbiBcXG4tXFx0c2VxX3ByaW50ZihzZXEsIFxcXCIlMDhYICVwTSAlOHNcXFxcblxcXCIsXFxuLVxcdFxcdHBvLVxcdTAwM2VwcHBvZV9wYS5zaWQsIHBvLVxcdTAwM2VwcHBvZV9wYS5yZW1vdGUsIGRldl9uYW1lKTtcXG4rXFx0c2VxX3ByaW50ZihzZXEsIFxcXCIlMDhYICVwTSAlOHMgJTEwc1xcXFxuXFxcIixcXG4rXFx0XFx0ICAgcG8tXFx1MDAzZXBwcG9lX3BhLnNpZCwgcG8tXFx1MDAzZXBwcG9lX3BhLnJlbW90ZSwgZGV2X25hbWUsIHBwcF9uYW1lID8gcHBwX25hbWUgOiBcXFwiXFxcIik7XFxuIG91dDpcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6Mzg6MzQuMzI2MTg5NjcyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjQ3NTU1MTkzNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBhbiBleHRyYSBjb2x1bW4gdG8gdGhlIC9wcm9jL25ldC9wcHBvZSBzZXFfZmlsZSBvdXRwdXQuIFRoaXMgaXMgYSBwdXJlbHkgaW5mb3JtYXRpb25hbC9kZWNvcmF0aXZlIGNoYW5nZSB0aGF0IGRvZXMgbm90IGFsdGVyIHRoZSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlOGI3OTk0ZmRlZWRhYTlhODAzMzA0MGIyNWY5NDZiM2FlNDY1ZmQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjkgMDQ6Mzg6MzIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXG5pbmRleCA2ODc0YTFhOGVkYWYxLi5jYjMxZjVkYjQzZTgxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXG5AQCAtOTYzLDE3ICs5NjMsMTkgQEAgc3RhdGljIGludCBwcHBvZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbiB7XG4gXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG87XG4gXHRjaGFyICpkZXZfbmFtZTtcbitcdGNoYXIgKnBwcF9uYW1lO1xuIFxuIFx0aWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7XG4tXHRcdHNlcV9wdXRzKHNlcSwgXCJJZCAgICAgICBBZGRyZXNzICAgICAgICAgICAgICBEZXZpY2VcXG5cIik7XG4rXHRcdHNlcV9wdXRzKHNlcSwgXCJJZCAgICAgICBBZGRyZXNzICAgICAgICAgICAgICBEZXZpY2UgICBQUFAtRGV2aWNlXFxuXCIpO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbiBcdHBvID0gdjtcbiBcdGRldl9uYW1lID0gcG8tXHUwMDNlcHBwb2VfcGEuZGV2O1xuK1x0cHBwX25hbWUgPSBwcHBfZGV2X25hbWUoXHUwMDI2cG8tXHUwMDNlY2hhbik7XG4gXG4tXHRzZXFfcHJpbnRmKHNlcSwgXCIlMDhYICVwTSAlOHNcXG5cIixcbi1cdFx0cG8tXHUwMDNlcHBwb2VfcGEuc2lkLCBwby1cdTAwM2VwcHBvZV9wYS5yZW1vdGUsIGRldl9uYW1lKTtcbitcdHNlcV9wcmludGYoc2VxLCBcIiUwOFggJXBNICU4cyAlMTBzXFxuXCIsXG4rXHRcdCAgIHBvLVx1MDAzZXBwcG9lX3BhLnNpZCwgcG8tXHUwMDNlcHBwb2VfcGEucmVtb3RlLCBkZXZfbmFtZSwgcHBwX25hbWUgPyBwcHBfbmFtZSA6IFwiXCIpO1xuIG91dDpcbiBcdHJldHVybiAwO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjM4OjM0LjMyNjE5MDgzMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MzMwNzczNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBwcG9wZV9zZXFfc2hvdyBhbmQgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyB0b3VjaGVkIGBkcml2ZXJzL25ldC9wcHAvcHBwb2UuY2AsIHNwZWNpZmljYWxseSB0aGUgYHBwcG9lX3NlcV9zaG93YCBmdW5jdGlvbi4gRnJvbSB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSB0aGlzIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGluZyB0aGUgb3V0cHV0IHlvdSBzZWUgaW4gYC9wcm9jL25ldC9wcHBvZWAgb3IgYSBzaW1pbGFyIHNlcV9maWxlIGludGVyZmFjZS4gVGhlIGNoYW5nZSBpdHNlbGYgaXMgcHJldHR5IHNpbXBsZTogaXQncyBhZGRpbmcgYHBwcF9uYW1lID0gcHBwX2Rldl9uYW1lKFx1MDAyNnBvLVx1MDAzZWNoYW4pO2AgYW5kIHRoZW4gcHJpbnRpbmcgdGhhdCBuYW1lLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiSXMgdGhpcyBzb21ldGhpbmcgd2UgbmVlZCB0byB3b3JyeSBhYm91dCBpbiB0ZXJtcyBvZiBmdXp6aW5nP1wiIEl0J3MgYSBgc2VxX3Nob3dgIGZ1bmN0aW9uLCB3aGljaCBnZW5lcmFsbHkgbWVhbnMgaXQncyByZWFkLW9ubHkgb3V0cHV0LiBUaGVzZSBmdW5jdGlvbnMgYXJlIHR5cGljYWxseSBub3QgdGhlIGhpZ2hlc3QtcHJpb3JpdHkgdGFyZ2V0cyBmb3IgZnV6emluZyB1bmxlc3MgdGhleSBleHBvc2UgYSBwYXJ0aWN1bGFybHkganVpY3kgdnVsbmVyYWJpbGl0eS4gSG93ZXZlciwgdGhlIHVzZSBvZiBgcHBwX2Rldl9uYW1lKFx1MDAyNnBvLVx1MDAzZWNoYW4pYCBkb2VzIG1ha2UgbWUgcGF1c2UuIFRoZXJlJ3MgYWx3YXlzIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWJ0bGUgbG9ja2luZyBpc3N1ZXMgb3IgbGlmZXRpbWUgY29uY2VybnMgd2hlbiBkZWFsaW5nIHdpdGggZGV2aWNlIG5hbWVzLCBldmVuIGluIGEgc2VlbWluZ2x5IHNpbXBsZSByZWFkIG9wZXJhdGlvbi5cblxuU28sIEkgdGhpbmsgSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byBib3RoIGBwcHBfZGV2X25hbWVgIGFuZCB0aGUgYHBwcG9lX3NlcV9zaG93YCBmdW5jdGlvbiBpdHNlbGYuIFRoZSBmYWN0IHRoYXQgdGhlIG5hbWUgaXMgYmVpbmcgcmVhZCBsaWtlIHRoaXMgbWFrZXMgbWUgd29uZGVyIGlmIHRoZXJlJ3MgYW55IHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIHdpdGhpbiB0aGUgcHBwIGRldmljZSBuYW1lIGxvb2t1cC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYHBwcF9kZXZfbmFtZWAgaXMgYmVpbmcgY2FsbGVkIHdpdGggcHJvcGVyIGxvY2tpbmcgaW4gcGxhY2UuIFRoYXTigJlzIHdoZXJlIEknbGwgY29uY2VudHJhdGUgbXkgZm9jdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDozODozOS4xNTkyNzA1MDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwNzQ4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHBwb2Vfc2VxX3Nob3dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9OTM2PXN0YXRpYyBpbnQgcHBwb2VfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTYxLSNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjk2MjpzdGF0aWMgaW50IHBwcG9lX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTk2My17XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz0xMDQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcHBwb2Vfc2VxX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTEwNDktXFx0LnN0b3BcXHRcXHQ9IHBwcG9lX3NlcV9zdG9wLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjEwNTA6XFx0LnNob3dcXHRcXHQ9IHBwcG9lX3NlcV9zaG93LFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTEwNTEtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6Mzg6MzkuMjAyMzQ5ODA5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxMjUzNDY2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQUFBvRSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgYHBwcG9lX3NlcV9zaG93YC4gTG9va3MgbGlrZSBpdCdzIGp1c3QgYWRkaW5nIHRoZSBvdXRwdXQgb2YgYHBwcF9kZXZfbmFtZShcdTAwMjZwby1cdTAwM2VjaGFuKWAgdG8gdGhlIGAvcHJvYy9uZXQvcHBwb2VgIHByb2NmcyBmaWxlLiBQdXJlbHkgaW5mb3JtYXRpb25hbCwgcmlnaHQ/IE5vIHJlYWwgZnVuY3Rpb25hbCBpbXBhY3QgYmV5b25kIHJlYWRpbmcgYW5kIGRpc3BsYXlpbmcgdGhpcyBuZXcgZmllbGQuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHdhcnJhbnQgZnV6emluZz8gT24gdGhlIHN1cmZhY2UsIGl0IHNlZW1zIGxpa2Ugb3ZlcmtpbGwgZm9yIGEgYHNlcV9zaG93YCBmdW5jdGlvbi4gQnV0IHdhaXQuLi4gYHBwcF9kZXZfbmFtZWAuLi4gdGhhdCBmdW5jdGlvbiBtaWdodCBiZSBkb2luZyBzb21ldGhpbmcgaW50ZXJlc3RpbmcsIHBvdGVudGlhbGx5IGRlcmVmZXJlbmNpbmcgc29tZXRoaW5nLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBhY3R1YWxseSAqZG9pbmcqIGJlZm9yZSBJIGRpc21pc3MgdGhpcyBvdXRyaWdodC4gQmV0dGVyIHRvIGJlIHNhZmUgdGhhbiBzb3JyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA2NCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDozODo0Mi41MTQ4ODg2MjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MDc2NzA5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcHBfZGV2X25hbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTI5NTM9aW50IHBwcF91bml0X251bWJlcihzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yOTcyLSAqL1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjI5NzM6Y2hhciAqcHBwX2Rldl9uYW1lKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbilcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yOTc0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTM2NjI9RVhQT1JUX1NZTUJPTChwcHBfdW5pdF9udW1iZXIpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjM2NjM6RVhQT1JUX1NZTUJPTChwcHBfZGV2X25hbWUpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTM2NjQtRVhQT1JUX1NZTUJPTChwcHBfaW5wdXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9OTYyPXN0YXRpYyBpbnQgcHBwb2Vfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05NzQtXFx0ZGV2X25hbWUgPSBwby1cXHUwMDNlcHBwb2VfcGEuZGV2O1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjk3NTpcXHRwcHBfbmFtZSA9IHBwcF9kZXZfbmFtZShcXHUwMDI2cG8tXFx1MDAzZWNoYW4pO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTk3Ni1cXG4tLVxcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaD03Mz1leHRlcm4gaW50IHBwcF91bml0X251bWJlcihzdHJ1Y3QgcHBwX2NoYW5uZWwgKik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtNzctICovXFxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oOjc4OmV4dGVybiBjaGFyICpwcHBfZGV2X25hbWUoc3RydWN0IHBwcF9jaGFubmVsICopO1xcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaC03OS1cXG4tLVxcbm5ldC9sMnRwL2wydHBfcHBwLmM9NDk4PXN0YXRpYyB2b2lkIHBwcG9sMnRwX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICphcmcpXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTUwNy1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjUwODpcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIgICBpbnRlcmZhY2UgJXNcXFxcblxcXCIsIHBwcF9kZXZfbmFtZShcXHUwMDI2cG8tXFx1MDAzZWNoYW4pKTtcXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTUwOS1cXHR9XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTE1MTM9c3RhdGljIHZvaWQgcHBwb2wydHBfc2VxX3Nlc3Npb25fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTE1NjQtXFxubmV0L2wydHAvbDJ0cF9wcHAuYzoxNTY1OlxcdFxcdHNlcV9wcmludGYobSwgXFxcIiAgIGludGVyZmFjZSAlc1xcXFxuXFxcIiwgcHBwX2Rldl9uYW1lKFxcdTAwMjZwby1cXHUwMDNlY2hhbikpO1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTU2Ni1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjM4OjQ0LjI1NTY2MDg1N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTY5NTc3NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBpdCdzICpteSogdHJhaW4gb2YgdGhvdWdodDpcblxuKipEaXZpbmcgaW50byB0aGUgYHBwcF9kZXZfbmFtZWAgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB1bmRlcnN0YW5kIHByZWNpc2VseSBob3cgdGhlIGBwcHBfZGV2X25hbWVgIGlzIGltcGxlbWVudGVkLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBkZXRhaWxzLCB0aGUgY3J1Y2lhbCBwYXJ0cyB0aGF0IG1ha2UgdGhpcyBzcGVjaWZpYyBuYW1lIGdlbmVyYXRpb24gd29yay4gSSdtIGZvY3VzaW5nIG9uIHRoZSBpbnRyaWNhY2llczogdGhlIGFzc2lnbm1lbnQsIGFueSBlZGdlIGNhc2VzIHRoYXQgd2VyZSBoYW5kbGVkLCB0aGUgcG90ZW50aWFsIHBpdGZhbGxzIGFuZCB0aGUgYXJlYXMgd2hlcmUgcGVyZm9ybWFuY2UgbWlnaHQgYmUgb3B0aW1pemVkLiBXaGF0IGV4YWN0bHkgYXJlIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbXMgZm9yIG5hbWUgY3JlYXRpb24/IERvZXMgaXQgZm9sbG93IGEgc3RhbmRhcmQgb3IgYXJlIHRoZXJlIGN1c3RvbWlzYXRpb25zPyBBbnkgdW5pcXVlIGFwcHJvYWNoZXM/IEkgd2lsbCBjaGVjayBmb3IgYW55IHVudXN1YWwgZGF0YSBzdHJ1Y3R1cmVzIG9yIGFsZ29yaXRobXMgZW1wbG95ZWQsIG1heWJlIHNvbWUgc3VidGxlIGNvbmN1cnJlbmN5IGlzc3VlcyBvciByYWNlIGNvbmRpdGlvbnMgaW4gbmFtZSBnZW5lcmF0aW9uIHRoYXQgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gSSBuZWVkIHRvIGVuc3VyZSBhIHJvYnVzdCB1bmRlcnN0YW5kaW5nIG9mIGl0cyBiZWhhdmlvciB1bmRlciB2YXJpb3VzIHNjZW5hcmlvcywgaW5jbHVkaW5nIHBvdGVudGlhbCBjb25mbGljdHMgb3IgbGltaXRhdGlvbnMgd2l0aGluIHRoZSBQUFAgZW52aXJvbm1lbnQgaXRzZWxmLiBHb3QgdG8gbWFrZSBzdXJlIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBzb2xpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA1MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjM4OjQ3LjY3MjYyMDc5OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTczLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyOTczOlxcdGNoYXIgKnBwcF9kZXZfbmFtZShzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXFxuMjk3NDpcXHR7XFxuMjk3NTpcXHRcXHRzdHJ1Y3QgY2hhbm5lbCAqcGNoID0gY2hhbi1cXHUwMDNlcHBwO1xcbjI5NzY6XFx0XFx0Y2hhciAqbmFtZSA9IE5VTEw7XFxuMjk3NzpcXHRcXHRzdHJ1Y3QgcHBwICpwcHA7XFxuMjk3ODpcXHRcXG4yOTc5OlxcdFxcdGlmIChwY2gpIHtcXG4yOTgwOlxcdFxcdFxcdHBwcCA9IHJjdV9kZXJlZmVyZW5jZShwY2gtXFx1MDAzZXBwcCk7XFxuMjk4MTpcXHRcXHRcXHRpZiAocHBwIFxcdTAwMjZcXHUwMDI2IHBwcC1cXHUwMDNlZGV2KVxcbjI5ODI6XFx0XFx0XFx0XFx0bmFtZSA9IHBwcC1cXHUwMDNlZGV2LVxcdTAwM2VuYW1lO1xcbjI5ODM6XFx0XFx0fVxcbjI5ODQ6XFx0XFx0cmV0dXJuIG5hbWU7XFxuMjk4NTpcXHR9XFxuMjk4NjpcXHRcXG4yOTg3OlxcdFxcbjI5ODg6XFx0LypcXG4yOTg5OlxcdCAqIERpc2Nvbm5lY3QgYSBjaGFubmVsIGZyb20gdGhlIGdlbmVyaWMgbGF5ZXIuXFxuMjk5MDpcXHQgKiBUaGlzIG11c3QgYmUgY2FsbGVkIGluIHByb2Nlc3MgY29udGV4dC5cXG4yOTkxOlxcdCAqL1xcbjI5OTI6XFx0dm9pZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDozODo0Ny42NzI3ODA1ODlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjAzMzgyNjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJDVSBEZXJlZmVyZW5jZSBDb251bmRydW0qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgcHBwX2Rldl9uYW1lYCBhbmQgaXQncyB1c2luZyBgcmN1X2RlcmVmZXJlbmNlKHBjaC1cdTAwM2VwcHApYC4gVGhhdCdzIHN0YW5kYXJkIGFuZCBleHBlY3RlZCwgYnV0Li4uIEkndmUgZ290IGEgbmFnZ2luZyBmZWVsaW5nIGFib3V0IHNvbWV0aGluZy4gTm93LCBJIHNlZSB0aGF0IGBwcHBvZV9zZXFfc2hvd2AgY2FsbHMgdGhpcyBmdW5jdGlvbiwgYnV0IGl0J3MgKm5vdCogdXNpbmcgYW4gYHJjdV9yZWFkX2xvY2soKWAgYmVmb3JlaGFuZD8gVGhhdCdzIGEgaHVnZSByZWQgZmxhZy4gTXkgdW5kZXJzdGFuZGluZyBpcywgYW5kIEknZCBiZXQgbW9zdCBleHBlcnRzIHdvdWxkIGFncmVlLCB0aGF0IGFjY2Vzc2luZyBhbiBSQ1UtcHJvdGVjdGVkIHBvaW50ZXIgcmVxdWlyZXMgdGhlIFJDVSByZWFkIGxvY2suIGBwcHBvZV9zZXFfc2hvd2AgaXMgY2FsbGVkIGZyb20gdGhlIHNlcV9maWxlIGZyYW1ld29yaywgYW5kIG15IGd1dCB0ZWxscyBtZSB0aGF0IHNlcV9maWxlIG1pZ2h0IG5vdCBhdXRvbWF0aWNhbGx5IGhvbGQgdGhlIFJDVSByZWFkIGxvY2suIFRoaXMgY291bGQgYmUgYSByYWNlIGNvbmRpdGlvbiB3YWl0aW5nIHRvIGhhcHBlbi4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBxdWlja2x5LiBMZXQncyBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHBwcG9lX3NlcV9zaG93YCBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aGF0IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTc2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDozODo1MS44NzYxNjYyNDVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTYyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTYyOlxcdHN0YXRpYyBpbnQgcHBwb2Vfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuIDk2MzpcXHR7XFxuIDk2NDpcXHRcXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG87XFxuIDk2NTpcXHRcXHRjaGFyICpkZXZfbmFtZTtcXG4gOTY2OlxcdFxcdGNoYXIgKnBwcF9uYW1lO1xcbiA5Njc6XFx0XFxuIDk2ODpcXHRcXHRpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pIHtcXG4gOTY5OlxcdFxcdFxcdHNlcV9wdXRzKHNlcSwgXFxcIklkICAgICAgIEFkZHJlc3MgICAgICAgICAgICAgIERldmljZSAgIFBQUC1EZXZpY2VcXFxcblxcXCIpO1xcbiA5NzA6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDk3MTpcXHRcXHR9XFxuIDk3MjpcXHRcXG4gOTczOlxcdFxcdHBvID0gdjtcXG4gOTc0OlxcdFxcdGRldl9uYW1lID0gcG8tXFx1MDAzZXBwcG9lX3BhLmRldjtcXG4gOTc1OlxcdFxcdHBwcF9uYW1lID0gcHBwX2Rldl9uYW1lKFxcdTAwMjZwby1cXHUwMDNlY2hhbik7XFxuIDk3NjpcXHRcXG4gOTc3OlxcdFxcdHNlcV9wcmludGYoc2VxLCBcXFwiJTA4WCAlcE0gJThzICUxMHNcXFxcblxcXCIsXFxuIDk3ODpcXHRcXHRcXHQgICBwby1cXHUwMDNlcHBwb2VfcGEuc2lkLCBwby1cXHUwMDNlcHBwb2VfcGEucmVtb3RlLCBkZXZfbmFtZSwgcHBwX25hbWUgPyBwcHBfbmFtZSA6IFxcXCJcXFwiKTtcXG4gOTc5OlxcdG91dDpcXG4gOTgwOlxcdFxcdHJldHVybiAwO1xcbiA5ODE6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDozODo1MS44NzYyNjQyNjVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5NTI3NDQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlYnVnZ2luZyBhIFBvdGVudGlhbCBQUFBvRSBMb2NrKipcblxuT2theSwgSSdtIGRpZ2dpbmcgaW50byB0aGlzIGlzc3VlIGFuZCBhIGh1bmNoIGp1c3QgaGl0IG1lLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBwcHBvZV9zZXFfc3RhcnRgLiBJdCdzIGEga2V5IGZ1bmN0aW9uIGluIHRoZSBQUFBvRSBzZXF1ZW5jZSwgYW5kIGl0J3MgcG9zc2libGXigJRtYXliZSBldmVuIGxpa2VseeKAlHRoYXQgaXQgY29udGFpbnMgc29tZSBzb3J0IG9mIG11dGV4IG9yIG90aGVyIGxvY2sgdGhhdCBjb3VsZCBiZSBjYXVzaW5nIGEgYm90dGxlbmVjayBvciBldmVuIGEgZGVhZGxvY2suIFRoaXMgY291bGQgYmUgdGhlIHJvb3Qgb2YgdGhlIHByb2JsZW0gSSdtIHNlZWluZy4gSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIHRoZSBsb2NrIGlzIHByb3Blcmx5IGltcGxlbWVudGVkIGFuZCByZWxlYXNlZCBpbiBhbGwgc2NlbmFyaW9zLCBhbmQgdW5kZXJzdGFuZCB3aGF0IHRoZSBjcml0aWNhbCBzZWN0aW9uIHByb3RlY3RzLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc3RhcnQgdHJhY2luZyB0aGUgZXhlY3V0aW9uIGZsb3cgYXJvdW5kIGBwcHBvZV9zZXFfc3RhcnRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjUxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDozODo1NC44NzE1NDIwMDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzOTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMDMsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMDM6XFx0e1xcbjEwMDQ6XFx0XFx0c3RydWN0IHBwcG9lX25ldCAqcG4gPSBwcHBvZV9wZXJuZXQoc2VxX2ZpbGVfbmV0KHNlcSkpO1xcbjEwMDU6XFx0XFx0bG9mZl90IGwgPSAqcG9zO1xcbjEwMDY6XFx0XFxuMTAwNzpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMTAwODpcXHRcXHRyZXR1cm4gbCA/IHBwcG9lX2dldF9pZHgocG4sIC0tbCkgOiBTRVFfU1RBUlRfVE9LRU47XFxuMTAwOTpcXHR9XFxuMTAxMDpcXHRcXG4xMDExOlxcdHN0YXRpYyB2b2lkICpwcHBvZV9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpXFxuMTAxMjpcXHR7XFxuMTAxMzpcXHRcXHRzdHJ1Y3QgcHBwb2VfbmV0ICpwbiA9IHBwcG9lX3Blcm5ldChzZXFfZmlsZV9uZXQoc2VxKSk7XFxuMTAxNDpcXHRcXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG8sICpuZXh0O1xcbjEwMTU6XFx0XFxuMTAxNjpcXHRcXHQrKypwb3M7XFxuMTAxNzpcXHRcXHRpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pIHtcXG4xMDE4OlxcdFxcdFxcdHBvID0gcHBwb2VfZ2V0X2lkeChwbiwgMCk7XFxuMTAxOTpcXHRcXHRcXHRnb3RvIG91dDtcXG4xMDIwOlxcdFxcdH1cXG4xMDIxOlxcdFxcdHBvID0gdjtcXG4xMDIyOlxcdFxcdG5leHQgPSByY3VfZGVyZWZlcmVuY2UocG8tXFx1MDAzZW5leHQpO1xcbjEwMjM6XFx0XFx0aWYgKG5leHQpXFxuMTAyNDpcXHRcXHRcXHRwbyA9IG5leHQ7XFxuMTAyNTpcXHRcXHRlbHNlIHtcXG4xMDI2OlxcdFxcdFxcdGludCBoYXNoID0gaGFzaF9pdGVtKHBvLVxcdTAwM2VwcHBvZV9wYS5zaWQsIHBvLVxcdTAwM2VwcHBvZV9wYS5yZW1vdGUpO1xcbjEwMjc6XFx0XFxuMTAyODpcXHRcXHRcXHRwbyA9IE5VTEw7XFxuMTAyOTpcXHRcXHRcXHR3aGlsZSAoKytoYXNoIFxcdTAwM2MgUFBQT0VfSEFTSF9TSVpFKSB7XFxuMTAzMDpcXHRcXHRcXHRcXHRwbyA9IHJjdV9kZXJlZmVyZW5jZShwbi1cXHUwMDNlaGFzaF90YWJsZVtoYXNoXSk7XFxuMTAzMTpcXHRcXHRcXHRcXHRpZiAocG8pXFxuMTAzMjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4xMDMzOlxcdFxcdFxcdH1cXG4xMDM0OlxcdFxcdH1cXG4xMDM1OlxcdFxcbjEwMzY6XFx0b3V0OlxcbjEwMzc6XFx0XFx0cmV0dXJuIHBvO1xcbjEwMzg6XFx0fVxcbjEwMzk6XFx0XFxuMTA0MDpcXHRzdGF0aWMgdm9pZCBwcHBvZV9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4xMDQxOlxcdFxcdF9fcmVsZWFzZXMoUkNVKVxcbjEwNDI6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDozODo1NC44NzE2NDc0MDVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM0ODg1OTY0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25jZXJucyBSZWdhcmRpbmcgUkNVIFByb3RlY3Rpb24gaW4gUFBQb0UgU2VxdWVuY2UgT3BlcmF0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgdGhhdCBgcHBwb2Vfc2VxX3N0YXJ0YCBob2xkcyBhbiBgcmN1X3JlYWRfbG9jaygpYC4gVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gVGhlbiwgd2UgaGF2ZSBhIGNhbGwgdG8gYHBwcF9kZXZfbmFtZWAgd2hpY2gsIGxvZ2ljYWxseSwgc2hvdWxkIGJlIHNhZmUgYmVjYXVzZSBpdCdzIHVuZGVyIHRoZSBSQ1UgcmVhZCBsb2NrLiBIb3dldmVyLCBgcHBwX2Rldl9uYW1lYCBpdHNlbGYgdXNlcyBgcmN1X2RlcmVmZXJlbmNlKHBjaC1cdTAwM2VwcHApYC4gT2theSwgdGhhdCBzdWdnZXN0cyBgcGNoLVx1MDAzZXBwcGAgaXMgUkNVIHByb3RlY3RlZCwgd2hpY2ggaXMgZ29vZC4gQnV0IHRoZW4gdGhlIHF1ZXN0aW9uIGJlY29tZXM6IGlzIGBwcHAtXHUwMDNlZGV2YCBzYWZlIHRvIGFjY2VzcyAqYWZ0ZXIqIHRoYXQgZGVyZWZlcmVuY2U/XG5cblRoZSBjb3JlIG9mIG15IGNvbmNlcm4gcmV2b2x2ZXMgYXJvdW5kIHRoZSBwb3RlbnRpYWwgZm9yIGEgcmFjZSBjb25kaXRpb24uIElmIGBwcHBgIGlzIGZyZWVkIGNvbmN1cnJlbnRseSwgdGhlbiBgcHBwLVx1MDAzZWRldmAgd291bGQgbGlrZWx5IGFsc28gYmUgZnJlZWQsIGJlY29taW5nIHVudXNhYmxlLiBCdXQgYHBwcF9kZXZfbmFtZWAgcmV0dXJucyBgcHBwLVx1MDAzZWRldi1cdTAwM2VuYW1lYC4gTm93IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGBjaGFyYCBhcnJheSB3aXRoaW4gYSBgc3RydWN0IG5ldF9kZXZpY2VgLiBJZiBgcHBwYCBpcyBmcmVlZCB3aGlsZSB0aGUgY29kZSBpcyBydW5uaW5nLCBhbmQgaWYgYHBwcC1cdTAwM2VkZXZgIGlzIHN1YnNlcXVlbnRseSBmcmVlZCwgdGhlbiB0aGF0IHBvaW50ZXIgYHBwcC1cdTAwM2VkZXYtXHUwMDNlbmFtZWAgaXMgZGFuZ2xpbmcsIGFuZCBjb3VsZCBjYXVzZSBtYWpvciBpc3N1ZXMuXG5cblNwZWNpZmljYWxseSwgdGhlIGZhY3QgdGhhdCBgcHBwX2Rldl9uYW1lYCBpcyByZXR1cm5pbmcgYSBwb2ludGVyIGBuYW1lYCB0byBgcHBwLVx1MDAzZWRldi1cdTAwM2VuYW1lYCBpcyB0cm91YmxpbmcuIExhdGVyLCBgcHBwb2Vfc2VxX3Nob3dgIHRoZW4gdXNlcyB0aGlzIHJldHVybmVkIGBwcHBfbmFtZWAgcG9pbnRlciBpbiBgc2VxX3ByaW50ZmAuIElmIGBwcHBgIG9yIGBwcHAtXHUwMDNlZGV2YCBpcyBmcmVlZCBjb25jdXJyZW50bHkgYmV0d2VlbiB3aGVuIGBwcHBfZGV2X25hbWVgIGlzIGNhbGxlZCBhbmQgd2hlbiBgc2VxX3ByaW50ZmAgYWN0dWFsbHkgdXNlcyB0aGUgcG9pbnRlciwgdGhlIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIHJlYWQgZnJvbSBmcmVlZCBtZW1vcnkuIFdlJ3JlIGxvb2tpbmcgYXQgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSFcblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgcHBwYCBpcywgaW5kZWVkLCBwcm90ZWN0ZWQgYnkgUkNVIHRvIHByb3ZpZGUgbWVtb3J5IHNhZmV0eS4gVG8gYmUgc3VyZSBhYm91dCB0aGlzLCBJIHNob3VsZCBleGFtaW5lIGBwcHBfZGVzdHJveV9pbnRlcmZhY2VgIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBQUFBvRSBpbnRlcmZhY2UgaXMgY2xlYW5lZCB1cCBhbmQgaG93IHRoZSBgcHBwYCBzdHJ1Y3R1cmUgaXMgaGFuZGxlZC4gVGhpcyBpcyB0aGUgY3JpdGljYWwgcGllY2UgdGhhdCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDY0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6Mzk6MDAuMjIwNTA5Njk4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzc0MzcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcHBfZGVzdHJveV9pbnRlcmZhY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0xNTQ3PXN0YXRpYyBpbnQgcHBwX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xNTU0LVxcdC8qIExldCB0aGUgbmV0ZGV2aWNlIHRha2UgYSByZWZlcmVuY2Ugb24gdGhlIHBwcCBmaWxlLiBUaGlzIGVuc3VyZXNcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoxNTU1OlxcdCAqIHRoYXQgcHBwX2Rlc3Ryb3lfaW50ZXJmYWNlKCkgd29uJ3QgcnVuIGJlZm9yZSB0aGUgZGV2aWNlIGdldHNcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xNTU2LVxcdCAqIHVucmVnaXN0ZXJlZC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6Mzk6MDAuMjY0MjU5Mzg3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NzE0NjIyMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgcHBwX2Rldl9uYW1lYCBWYXJpYWJsZSoqXG5cbk9rYXksIHRpbWUgdG8gY2lyY2xlIGJhY2sgYW5kIHJlLWV4YW1pbmUgdGhlIGBwcHBfZGV2X25hbWVgIHZhcmlhYmxlLiBJIG5lZWQgdG8gZW5zdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbC4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIHN0aWxsIHNvdW5kLCBidXQgaW4gY29tcGxleCBzeXN0ZW1zIGxpa2UgdGhpcywgYXNzdW1wdGlvbnMgY2FuIGJlIGRhbmdlcm91cy4gTGV0IG1lIHF1aWNrbHkgcmVmcmVzaCB0aGUgY29udGV4dDogaXMgaXQgc3RpbGwgcG9pbnRpbmcgdG8gdGhlIGV4cGVjdGVkIGludGVyZmFjZT8gSGFzIGFueXRoaW5nIHVwc3RyZWFtIG9yIGRvd25zdHJlYW0gcG90ZW50aWFsbHkgbW9kaWZpZWQgaXRzIHZhbHVlLCBlaXRoZXIgaW50ZW50aW9uYWxseSBvciB0aHJvdWdoIHNvbWUgc3VidGxlIGludGVyYWN0aW9uIEkgZGlkbid0IGFudGljaXBhdGU/IEnigJlsbCBtZW50YWxseSB3YWxrIHRocm91Z2ggdGhlIGNvZGUgcGF0aCBhZ2FpbiwgZm9jdXNpbmcgb24gYW55IHBvaW50cyB3aGVyZSBgcHBwX2Rldl9uYW1lYCBpcyBzZXQsIGFjY2Vzc2VkLCBvciBwb3NzaWJseSBvdmVyd3JpdHRlbi4gQXJlIHRoZXJlIGFueSByYWNlIGNvbmRpdGlvbnMgbHVya2luZz8gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBzY2VuYXJpb3M/IEkgd2FudCB0byBtYWtlIGNlcnRhaW4gdGhhdCBpdHMgc3RhdGUgaXMgYm90aCBjb3JyZWN0IGFuZCBjb25zaXN0ZW50IGF0IHRoaXMgcG9pbnQgaW4gdGhlIGV4ZWN1dGlvbi4gTGV0IG1lIG1ha2UgY2VydGFpbiB0aGF0IHRoZXJlIHdlcmUgbm8gcmVjZW50IGNoYW5nZXMgdG8gdGhlIG1vZHVsZS4gSWYgSSdtIGx1Y2t5LCBhIHF1aWNrIHZpc3VhbCBjaGVjayB3aWxsIHN1ZmZpY2UuIEhvd2V2ZXIsIGlmIEkgc3VzcGVjdCBhIG1vcmUgaW50cmljYXRlIGlzc3VlLCBJJ2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIGRlYnVnZ2luZyB0b29scyB0byBkaXZlIGRlZXBlciDigJMgcGVyaGFwcyBzdGVwcGluZyB0aHJvdWdoIHRoZSByZWxldmFudCBjb2RlIHdpdGggYSBkZWJ1Z2dlciBvciB0ZW1wb3JhcmlseSBhZGRpbmcgc29tZSBpbnN0cnVtZW50YXRpb24uIEkgd2FudCB0byBidWlsZCBhIGhpZ2ggbGV2ZWwgb2YgY29uZmlkZW5jZSBhcm91bmQgdGhpcyB2YXJpYWJsZSdzIGNvcnJlY3RuZXNzIGJlZm9yZSBJIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NTksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDozOTowNC4wMzU3MjQyNTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyMTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5NzMsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI5NzM6XFx0Y2hhciAqcHBwX2Rldl9uYW1lKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbilcXG4yOTc0OlxcdHtcXG4yOTc1OlxcdFxcdHN0cnVjdCBjaGFubmVsICpwY2ggPSBjaGFuLVxcdTAwM2VwcHA7XFxuMjk3NjpcXHRcXHRjaGFyICpuYW1lID0gTlVMTDtcXG4yOTc3OlxcdFxcdHN0cnVjdCBwcHAgKnBwcDtcXG4yOTc4OlxcdFxcbjI5Nzk6XFx0XFx0aWYgKHBjaCkge1xcbjI5ODA6XFx0XFx0XFx0cHBwID0gcmN1X2RlcmVmZXJlbmNlKHBjaC1cXHUwMDNlcHBwKTtcXG4yOTgxOlxcdFxcdFxcdGlmIChwcHAgXFx1MDAyNlxcdTAwMjYgcHBwLVxcdTAwM2VkZXYpXFxuMjk4MjpcXHRcXHRcXHRcXHRuYW1lID0gcHBwLVxcdTAwM2VkZXYtXFx1MDAzZW5hbWU7XFxuMjk4MzpcXHRcXHR9XFxuMjk4NDpcXHRcXHRyZXR1cm4gbmFtZTtcXG4yOTg1OlxcdH1cXG4yOTg2OlxcdFxcbjI5ODc6XFx0XFxuMjk4ODpcXHQvKlxcbjI5ODk6XFx0ICogRGlzY29ubmVjdCBhIGNoYW5uZWwgZnJvbSB0aGUgZ2VuZXJpYyBsYXllci5cXG4yOTkwOlxcdCAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgaW4gcHJvY2VzcyBjb250ZXh0LlxcbjI5OTE6XFx0ICovXFxuMjk5MjpcXHR2b2lkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjM5OjA0LjAzNTkwODQ5MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODM0MDE3OTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlJDVSBSZWxlYXNlIFN0cmF0ZWd5IGZvciBgcHBwYCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gd3JhcCBteSBoZWFkIGFyb3VuZCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgb2YgdGhpcyBgcHBwYCBvYmplY3QsIGFuZCBhIGtleSBxdWVzdGlvbiBwb3BzIHVwOiB3aGVuIGBwcHBgIGlzIGRlYWxsb2NhdGVkLCBpcyB0aGF0IG9wZXJhdGlvbiBSQ1UtcHJvdGVjdGVkPyBHaXZlbiB0aGUgY29udGV4dCwgaXQncyBhIGNyaXRpY2FsIGFzc3VtcHRpb24gdG8gY2xhcmlmeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gZW5zdXJlcyB0aGF0IHJlYWRlcnMgdXNpbmcgYHBwcGAgc2VlIGNvbnNpc3RlbnQgZGF0YSBldmVuIGR1cmluZyByZWxlYXNlLlxuXG5UbyBjb25maXJtIHRoaXMsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBmcmVlaW5nIHBhdGguIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIHRoZSBkZWZpbml0aW9uIG9mIGBwcHBfcmVsZWFzZWAuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBtZWNoYW5pc20g4oCTIG9yIHRoZSBhYnNlbmNlIG9mIGl0LiBUaGUgYHBwcF9yZWxlYXNlYCBmdW5jdGlvbiBpcyB0aGUgZ2F0ZWtlZXBlciBoZXJlLCB0aGUgZGVmaW5pdGl2ZSBwb2ludCB3aGVyZSByZXNvdXJjZSBtYW5hZ2VtZW50IGhhcHBlbnMuIEkgbmVlZCB0byBzY3J1dGluaXplIHRoYXQgZnVuY3Rpb24gY2FyZWZ1bGx5IHRvIGRldGVybWluZSBpZiBpdCB1c2VzIGBjYWxsX3JjdWAsIGBzeW5jaHJvbml6ZV9yY3VgLCBvciBzaW1pbGFyIFJDVSBwcmltaXRpdmVzLCBvciBpZiBpdCB1dGlsaXplcyBhIGxvY2sgaW5zdGVhZCwgb3IgZXZlbiBpZiB0aGVyZSBpcyBubyBwcm90ZWN0aW9uIGF0IGFsbC4gS25vd2luZyB0aGUgc3RyYXRlZ3kgb2YgdGhlIHJlbGVhc2UgZnVuY3Rpb24gd2lsbCB0ZWxsIG1lIHRoZSBSQ1Ugc3Rvcnkgb2YgYHBwcGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MzgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjM5OjA3Ljg2OTkyOTU5NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4NjcyMjksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmcmVlX3JjdS4qcHBwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BwcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjM5OjA3LjkxNDgyNDAwNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTUyNjI0NTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBQUFAgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgbGlrZWx5IHNvdXJjZSBvZiB0aGlzIG1lbW9yeSBpc3N1ZS4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgaW1tZWRpYXRlbHkgdGhpbmssIFwiTGV0J3MgemVybyBpbiBvbiBga2ZyZWVgIGNhbGxzIHdpdGhpbiB0aGUgYHBwcF9nZW5lcmljLmNgIGZpbGUuXCIgVGhlIGBwcHBgIGNvbXBvbmVudCBpcyBhIGNsYXNzaWMgYXJlYSBmb3IgdGhlc2Uga2luZHMgb2YgcHJvYmxlbXMsIGFuZCBga2ZyZWVgLCBzcGVjaWZpY2FsbHksIGluZGljYXRlcyBtZW1vcnkgZGVhbGxvY2F0aW9uLCB3aGljaCBpcyB3aGVyZSB0aGluZ3Mgb2Z0ZW4gZ28gd3JvbmcuIFNvLCBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgY29kZSBpcyBoYW5kbGluZyBtZW1vcnkgaW4gdGhlcmUuIEl0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIG15IGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4NTgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDozOToxMC44Njc0NTExNDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTQ0MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmcmVlLipwcHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yMS0gKiAwNDA4MDAgOlxcdFJlc3BlY3QgcmVmZXJlbmNlIGNvdW50IG1lY2hhbmlzbXMgb24gbmV0LWRldmljZXMuXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MjI6ICogMjAwODAwIDpcXHRmaXgga2ZyZWUoc2tiKSBpbiBwcHBvZV9yY3YgKGFjbWUpXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjMtICpcXHRcXHRNb2R1bGUgcmVmZXJlbmNlIGNvdW50IGlzIGRlY3JlbWVudGVkIGluIHRoZSByaWdodCBzcG90IG5vdyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6Mzk6MTAuOTEwOTk5MTY0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDU1NTAxMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYHBwcF9kZXN0cm95X2ludGVyZmFjZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGZ1bmN0aW9uIG5hbWUsIGBwcHBfZGVzdHJveV9pbnRlcmZhY2VgLCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGUgc2NvcGU6IGl0J3MgaW52b2x2ZWQgaW4gdGVhcmluZyBkb3duIGEgUG9pbnQtdG8tUG9pbnQgUHJvdG9jb2wgKFBQUCkgaW50ZXJmYWNlLiBHaXZlbiBteSBleHBlcnRpc2UsIEknbSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgbGF5ZXJzIG9mIHRoZSBuZXR3b3JrIHN0YWNrIGFmZmVjdGVkIGJ5IHRoaXMgcHJvY2Vzcy4gSSdtIHRoaW5raW5nIGFib3V0IGxpbmsgbGF5ZXIsIG5ldHdvcmsgbGF5ZXIsIG1heWJlIGV2ZW4gdHJhbnNwb3J0IGxheWVyIGltcGxpY2F0aW9ucywgZGVwZW5kaW5nIG9uIGhvdyByb2J1c3QgdGhlIGltcGxlbWVudGF0aW9uIGlzLiBJIGV4cGVjdCBpdCdsbCBpbnZvbHZlIGNsZWFuaW5nIHVwIHJlc291cmNlczogbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIGludGVyZmFjZSBzdHJ1Y3R1cmUsIGFueSBhc3NvY2lhdGVkIGJ1ZmZlcnMgb3Igc29ja2V0cywgcG90ZW50aWFsbHkgcmVtb3ZpbmcgZW50cmllcyBmcm9tIHJvdXRpbmcgdGFibGVzIG9yIEFSUCBjYWNoZXMsIGFuZCBzaWduYWxpbmcgdG8gdGhlIGhhcmR3YXJlIHRoYXQgdGhpcyBpbnRlcmZhY2UgaXMgbm8gbG9uZ2VyIGFjdGl2ZS4gSSdtIGFsc28gY29uc2lkZXJpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGludGVyZmFjZSBiZWluZyBkZXN0cm95ZWQgd2hpbGUgY29ubmVjdGlvbnMgYXJlIGFjdGl2ZS4gV2VyZSB0aGVzZSBncmFjZWZ1bGx5IGNsb3NlZCBvciBhYnJ1cHRseSB0ZXJtaW5hdGVkPyBJcyB0aGVyZSBhbnkgbWVjaGFuaXNtIGZvciBwcmV2ZW50aW5nIGRhdGEgbG9zcyBvciBjb3JydXB0aW9uIGR1cmluZyB0aGUgdGVhcmRvd24/IEknbGwgbmVlZCB0byBjaGVjayBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBpc3N1ZXMgdGhhdCBjb3VsZCBhcmlzZSB3aGVuIG11bHRpcGxlIHByb2Nlc3NlcyBvciB0aHJlYWRzIG1pZ2h0IGJlIHRyeWluZyB0byBtYW5pcHVsYXRlIG9yIGFjY2VzcyB0aGlzIGludGVyZmFjZSBzaW11bHRhbmVvdXNseS4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIHNhZmUgdG8gdXNlIGluIHRoZSBjb250ZXh0IG9mIG11bHRpdGhyZWFkZWQgb3BlcmF0aW9ucy4gSSdtIGFudGljaXBhdGluZyBzb21lIGNvbXBsZXggaW50ZXJhY3Rpb25zIHdpdGggdmFyaW91cyBrZXJuZWwgc3Vic3lzdGVtcywgZXNwZWNpYWxseSBpZiB0aGVyZSBhcmUgYW55IG5ldHdvcmsgbmFtZXNwYWNlcyBvciBjb250YWluZXJpemF0aW9uIGludm9sdmVkLiBBbmQgb2YgY291cnNlLCBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24sIGlmIGRvbmUgY29ycmVjdGx5LCB0byBiZSByb2J1c3QgdG8gZXJyb3JzLCBhbmQgaGFuZGxlIHZhcmlvdXMgc2NlbmFyaW9zIGdyYWNlZnVsbHkgc3VjaCBhcyB0aGUgaW50ZXJmYWNlIGJlaW5nIGFscmVhZHkgZGVzdHJveWVkLiBMZXQncyBzZWUgaG93IGl0IGFsbCBwbGF5cyBvdXQgaW4gcHJhY3RpY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNTgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDozOToxNC44NTY1NTIzNTVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MzY4MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBwcF9kZXN0cm95X2ludGVyZmFjZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wcHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTE1NDc9c3RhdGljIGludCBwcHBfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTE1NTQtXFx0LyogTGV0IHRoZSBuZXRkZXZpY2UgdGFrZSBhIHJlZmVyZW5jZSBvbiB0aGUgcHBwIGZpbGUuIFRoaXMgZW5zdXJlc1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjE1NTU6XFx0ICogdGhhdCBwcHBfZGVzdHJveV9pbnRlcmZhY2UoKSB3b24ndCBydW4gYmVmb3JlIHRoZSBkZXZpY2UgZ2V0c1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTE1NTYtXFx0ICogdW5yZWdpc3RlcmVkLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDozOToxNC45MDI5MjU1NzRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwOTQ3NjkwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYHBwcGAncyBEZWFsbG9jYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgaG93IGBwcHBgIGdldHMgZnJlZWQuIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IG1lY2hhbmlzbSwgYmVjYXVzZSBJIGtub3cgdGhlcmUncyBhIGxvdCBvZiBudWFuY2UgaW4gaG93IHlvdSBtYW5hZ2UgbWVtb3J5IGFuZCBkZWFsbG9jYXRlIHJlc291cmNlcy4gSSB3YW50IHRvIHNlZSBpZiB0aGUgZGVhbGxvY2F0aW9uIGlzIG1hbnVhbCBvciBhdXRvbWF0aWMsIHdoYXQgdGVjaG5pcXVlcyBhcmUgZW1wbG95ZWQuIElzIGl0IHJlZmVyZW5jZSBjb3VudGluZywgZ2FyYmFnZSBjb2xsZWN0aW9uLCBleHBsaWNpdCBgZnJlZSgpYCBjYWxscywgb3Igc29tZSBraW5kIG9mIHNjb3BlZCByZXNvdXJjZSBtYW5hZ2VtZW50PyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBnb3RjaGFzIG9yIGVkZ2UgY2FzZXMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgbmVlZCB0byBjb25zaWRlciBhbnkgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFuZCB3aGV0aGVyIHRoZXJlIG1pZ2h0IGJlIGFueSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBsZWFrcywgZG91YmxlIGZyZWVzLCBvciB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXRpZXMuIFRoaXMgaW52ZXN0aWdhdGlvbiB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHN0YWJpbGl0eSBhbmQgcmVzb3VyY2UgZWZmaWNpZW5jeSBvZiB0aGlzIHBhcnQgb2YgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY3MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjM5OjE4LjExMjQwNTcyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTIxNDc4OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2ZyZWUuKnBwcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6Mzk6MTguMTU3NjI5MTE5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1NzY0NjQyMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBwcHBfZ2VuZXJpYy5jYCoqXG5cbk9rYXksIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBhIG1lbW9yeS1yZWxhdGVkIGlzc3VlLCBhbmQgbXkgaW50dWl0aW9uIGlzIHBvaW50aW5nIG1lIHRvd2FyZHMgdGhlIFBvaW50LXRvLVBvaW50IFByb3RvY29sIChQUFApIGdlbmVyaWMgY29kZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IGRlYWxsb2NhdGlvbiwgc28gSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgYGtmcmVlYCBmdW5jdGlvbiBjYWxscyB3aXRoaW4gYHBwcF9nZW5lcmljLmNgLiBUaGlzIHNlZW1zIGxpa2UgYSBsb2dpY2FsIGZpcnN0IHN0ZXAgdG8gc2VlIGhvdyBtZW1vcnkgaXMgYmVpbmcgaGFuZGxlZCBhbmQgbG9vayBmb3IgcG90ZW50aWFsIGRvdWJsZSBmcmVlcywgdXNlLWFmdGVyLWZyZWVzLCBvciBtZW1vcnkgbGVha3MuIExldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NDAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDozOToyMC43MzQwOTU3MjdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzOTI4NjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmcmVlXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9NTgwPXN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2cgKmdldF9maWx0ZXIoc3RydWN0IHNvY2tfZnByb2cgKnVwcm9nKVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtNTk2LVxcdGVyciA9IGJwZl9wcm9nX2NyZWF0ZShcXHUwMDI2cmVzLCBcXHUwMDI2ZnByb2cpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjU5NzpcXHRrZnJlZShmcHJvZy5maWx0ZXIpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTU5OC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTMyNzU9cHBwX3VucmVnaXN0ZXJfY29tcHJlc3NvcihzdHJ1Y3QgY29tcHJlc3NvciAqY3ApXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0zMjgyLVxcdFxcdGxpc3RfZGVsKFxcdTAwMjZjZS1cXHUwMDNlbGlzdCk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MzI4MzpcXHRcXHRrZnJlZShjZSk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMzI4NC1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0zNTc1PXN0YXRpYyB2b2lkIHBwcF9yZWxlYXNlX2NoYW5uZWxfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTM1ODAtXFx0c2tiX3F1ZXVlX3B1cmdlKFxcdTAwMjZwY2gtXFx1MDAzZWZpbGUucnEpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjM1ODE6XFx0a2ZyZWUocGNoKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0zNTgyLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6Mzk6MjAuNzc4MDMyMTg3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjM2OTY2OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgcHBwYCBTdHJ1Y3R1cmUgYW5kIEl0cyBSZWxhdGlvbnNoaXAgdG8gYG5ldF9kZXZpY2VgKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBjZW50ZXJlZCBhcm91bmQgdW5kZXJzdGFuZGluZyB0aGUgcHJlY2lzZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgYHBwcGAgc3RydWN0dXJlIChsaWtlbHkgcmVwcmVzZW50aW5nIGEgUG9pbnQtdG8tUG9pbnQgUHJvdG9jb2wgaW1wbGVtZW50YXRpb24pIGFuZCB0aGUgYG5ldF9kZXZpY2VgIHN0cnVjdHVyZSAodGhlIGZ1bmRhbWVudGFsIG5ldHdvcmsgaW50ZXJmYWNlIGFic3RyYWN0aW9uKS5cblxuVGhlIHF1ZXN0aW9uIGlzLCBzcGVjaWZpY2FsbHksIGhvdyBpcyBgcHBwYCAqbWFuYWdlZCogaW4gbWVtb3J5PyBJcyBgc3RydWN0IHBwcGAgaW5oZXJlbnRseSBlbWJlZGRlZCAqd2l0aGluKiBgc3RydWN0IG5ldF9kZXZpY2VgPyBUaGF0IHdvdWxkIGltcGx5IGEgdGlnaHQgY291cGxpbmcsIGEgc2luZ2xlIGFsbG9jYXRpb24gc3RyYXRlZ3kgd2hlcmUgdGhlIFBQUC1zcGVjaWZpYyBkYXRhIGlzIGRpcmVjdGx5IHBhcnQgb2YgdGhlIGludGVyZmFjZSBkZXNjcmlwdG9yLiBPciwgaXMgYHBwcGAgYWxsb2NhdGVkIHNlcGFyYXRlbHksIGxpa2VseSBsaW5rZWQgdG8gYSBgbmV0X2RldmljZWAgaW5zdGFuY2UgdmlhIGEgcG9pbnRlcj8gQSBtb3JlIG1vZHVsYXIgYXBwcm9hY2ggdGhhdCBhbGxvd3MgZm9yIHBvdGVudGlhbGx5IG1vcmUgZHluYW1pYyBjb25maWd1cmF0aW9ucy4gVGhlIFwib3JcIiBpbXBsaWVzIHRoaXMuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoaXM6IFVuZGVyc3RhbmRpbmcgdGhlIG1lbW9yeSBtb2RlbCBkaXJlY3RseSBpbXBhY3RzIGhvdyBJJ2QgYXBwcm9hY2ggY2VydGFpbiB0YXNrczogZGV2aWNlIGRyaXZlciBkZXZlbG9wbWVudCwgbmV0d29yayBjb25maWd1cmF0aW9uLCBkZWJ1Z2dpbmcsIG9yIG9wdGltaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ3MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjM5OjI0LjA0MTczMjEyMVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxODk1NjEyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19uZXRkZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MzM1NT1zdGF0aWMgaW50IHBwcF9jcmVhdGVfaW50ZXJmYWNlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIGludCAqdW5pdClcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTMzNjUtXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MzM2NjpcXHRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBwcHApLCBcXFwiXFxcIiwgTkVUX05BTUVfRU5VTSwgcHBwX3NldHVwKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0zMzY3LVxcdGlmICghZGV2KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjM5OjI1Ljc2MDY5MzgxN1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTQ2MzA1NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBLZXJuZWwgUGF0Y2ggZm9yIFBQUG9FIEluZm9ybWF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgc3RydWN0IHBwcGAgaXMgY2xvc2VseSB0aWVkIHRvIGBzdHJ1Y3QgbmV0X2RldmljZWAsIG1lYW5pbmcgd2hlbiB0aGUgbmV0IGRldmljZSBnb2VzLCBzbyBkb2VzIHRoZSBQUFAgZGF0YS4gVGhlIGtleSBpcyB0aGF0IGBuZXRfZGV2aWNlYCBjbGVhbnVwIHVzZXMgUkNVLiBUaGlzIHRlbGxzIG1lIHRoYXQgYW55IGFjY2VzcyB0byBgcHBwYCBkYXRhIHVuZGVyIGFuIFJDVSByZWFkIGxvY2sgaXMgcHJvYmFibHkgc2FmZSwgYXMgYGZyZWVfbmV0ZGV2YCB1c2VzIFJDVS4gSSdtIGVzcGVjaWFsbHkgZm9jdXNlZCBvbiBgcHBwLVx1MDAzZWRldi1cdTAwM2VuYW1lYCwgYSBjaGFyYWN0ZXIgYXJyYXkgd2l0aGluIHRoZSBgbmV0X2RldmljZWAgc3RydWN0LiBTaW5jZSBgcHBwX2Rldl9uYW1lYCByZXR1cm5zIGEgcG9pbnRlciB0byBgcHBwLVx1MDAzZWRldi1cdTAwM2VuYW1lYCBhbmQgdGhpcyBkYXRhIGlzIHVzZWQgaW4gYHBwcG9lX3NlcV9zaG93YCwgd2hpY2ggaXMgY2FsbGVkIHdpdGhpbiBhbiBSQ1UgcmVhZCBsb2NrIGNvbnRleHQgKGBzZXFfc3RhcnRgIGFjcXVpcmVzIGFuZCBgc2VxX3N0b3BgIHJlbGVhc2VzIHRoZSBsb2NrKSwgdGhlIHBvaW50ZXIgc2hvdWxkIGJlIHZhbGlkIGR1cmluZyB0aGUgYHNlcV9wcmludGZgIGNhbGwuXG5cblNvLCB0aGUgZnVuY3Rpb25hbCBjaGFuZ2Ugc2VlbXMgbWluaW1hbCDigJMganVzdCBhZGRpbmcgdGhpcyBgcHBwX2Rldl9uYW1lYCB0byB0aGUgYC9wcm9jL25ldC9wcHBvZWAgb3V0cHV0LiBUaGlzIGlzIGEgcHVyZWx5IGluZm9ybWF0aW9uYWwgYWRkaXRpb24gdG8gYSBwcm9jZnMgZmlsZS4gTm93LCB0aGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgZXZlbiB3b3J0aCBmdXp6aW5nP1xuXG5UaGUgaW5zdHJ1Y3Rpb25zIGdpdmUgbWUgYSBzb2xpZCBzZXQgb2YgcmVhc29ucyAqbm90KiB0byBmdXp6LiBUaGV5IHNwZWNpZmljYWxseSBleGNsdWRlIG1vZGlmaWNhdGlvbnMgdG8gZG9jdW1lbnRhdGlvbiwgS2NvbmZpZywgY29tbWVudHMsIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMgbGlrZSBsb2dnaW5nLCBhbmQgY2hhbmdlcyB0aGF0IGRvbid0IGFsdGVyIGV4ZWN1dGlvbiBmbG93LiBUaGlzIHByb2NmcyBjaGFuZ2UgKmlzKiBpbmZvcm1hdGlvbmFsLiBJdCdzIGp1c3QgYWRkaW5nIGEgY29sdW1uLCBzbyBpdCBzZWVtcyBsaWtlIGl0IHdvdWxkbid0IGNoYW5nZSBhbnkgY29kZSdzIGJlaGF2aW9yLlxuXG5JIGJyaWVmbHkgaGFkIGEgY29uY2VybiB0aGF0IGBwcHBfbmFtZWAgY291bGQgYmUgTlVMTCBhbmQgY2F1c2UgYSBzZWN1cml0eSBpc3N1ZS4gQnV0IGl0IGlzIGhhbmRsZWQgYnkgdGhlIGNvbmRpdGlvbmFsIGluIHRoZSBjb2RlLiBJIGFsc28gY29uc2lkZXJlZCBhIHVzZS1hZnRlci1mcmVlIGlzc3VlLCBidXQgd2UndmUgZXN0YWJsaXNoZWQgdGhhdCB0aGUgYWNjZXNzIGlzIHByb3RlY3RlZCBieSBhbiBSQ1UgcmVhZCBsb2NrLiBUaGVyZWZvcmUsIHRoZSBtZW1vcnkgaXMgc3RpbGwgdmFsaWQuIEknbSBnb2luZyB0byByZXZpZXcgdGhlIGRpZmYgYWdhaW4gdG8gbWFrZSBzdXJlIHRoYXQgSSBkaWRuJ3QgbWlzcyBzb21ldGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MDAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6Mzk6MzIuNzA3MDAxNjc4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjMwNTIwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcHBfZGV2X25hbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9OTYyPXN0YXRpYyBpbnQgcHBwb2Vfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05NzQtXFx0ZGV2X25hbWUgPSBwby1cXHUwMDNlcHBwb2VfcGEuZGV2O1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjk3NTpcXHRwcHBfbmFtZSA9IHBwcF9kZXZfbmFtZShcXHUwMDI2cG8tXFx1MDAzZWNoYW4pO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTk3Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6Mzk6MzIuNzQ5MzEwNDg3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMzIzNjk4NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUFBQb0UgUHJvY2ZzIENoYW5nZSoqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSB0aGlua2luZy4gVGhpcyBkaWZmLi4uIHllcCwgaXQncyBwcmVjaXNlbHkgdGhlIGNoYW5nZSBJIGV4cGVjdGVkLiBXZSdyZSBqdXN0IGFkZGluZyBhIG5ldyBjb2x1bW4gdG8gdGhlIGAvcHJvY2AgZmlsZXN5c3RlbSBlbnRyeSBmb3IgUFBQb0UgY29ubmVjdGlvbnMuIEl0IGxvb2tzIGxpa2UgaXQncyBnb2luZyB0byBkaXNwbGF5IHRoZSBQUFAgZGV2aWNlIG5hbWUuXG5cblRoaXMgaXMgYSByZWFkLW9ubHkgaW50ZXJmYWNlLCB0aGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBwcmltYXJ5IHB1cnBvc2Ugb2YgdGhpcyBjaGFuZ2Ugc2VlbXMgdG8gYmUgZm9yIGluZm9ybWF0aW9uYWwgZGlzcGxheSwgcG90ZW50aWFsbHkgZGVidWdnaW5nIG9yIG1vbml0b3JpbmcuIEl0J3MgcmVhbGx5IGp1c3QgZm9yIHByZXNlbnRhdGlvbiBpbiBgL3Byb2NgLiBJbXBvcnRhbnRseSwgdGhlcmUncyBub3RoaW5nIGhlcmUgdGhhdCBhbHRlcnMgdGhlIGNvcmUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbC4gVGhpcyBpc24ndCB0b3VjaGluZyBhbnkgY3JpdGljYWwgcGF0aCBvciBhZGRpbmcgYW55IG5ldyBleHRlcm5hbCBpbnB1dHMuXG5cbkdpdmVuIHRoYXQgaXQncyBwdXJlbHkgaW5mb3JtYXRpb25hbCwgSSBkb24ndCBzZWUgYW55IHJlYWwgdmFsdWUgaW4gZnV6emluZyB0aGlzLiBUaGVyZSdzIG5vIGlucHV0IHRoYXQgdGhpcyBjaGFuZ2UgaXMgZXhwb3NlZCB0bywgdGhhdCBjYW4gY2F1c2UgaXQgdG8gY29ycnVwdCB0aGUgc3lzdGVtIGluIGFueSB3YXkuXG5cblRoZXJlZm9yZSwgSSdtIGNvbWZvcnRhYmxlIHNheWluZyB0aGF0IHRoaXMgaXMgbm90IHNvbWV0aGluZyB0aGF0IHdvdWxkIGJlbmVmaXQgZnJvbSBmdXp6aW5nLiBNeSBjb25jbHVzaW9uOiBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExMDMsIk91dHB1dFRva2VucyI6NzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6Mzk6MzkuMDgxNjgzNjUxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGFuIGV4dHJhIGNvbHVtbiB0byB0aGUgL3Byb2MvbmV0L3BwcG9lIHNlcV9maWxlIG91dHB1dC4gVGhpcyBpcyBhIHB1cmVseSBpbmZvcm1hdGlvbmFsL2RlY29yYXRpdmUgY2hhbmdlIHRoYXQgZG9lcyBub3QgYWx0ZXIgdGhlIGZ1bmN0aW9uYWwgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBhbiBleHRyYSBjb2x1bW4gdG8gdGhlIC9wcm9jL25ldC9wcHBvZSBzZXFfZmlsZSBvdXRwdXQuIFRoaXMgaXMgYSBwdXJlbHkgaW5mb3JtYXRpb25hbC9kZWNvcmF0aXZlIGNoYW5nZSB0aGF0IGRvZXMgbm90IGFsdGVyIHRoZSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgnf4f[1] Phase: Running StartedAt: 2026-07-29 04:40:02 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnf4f[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-29 04:40:02 +0000 UTC FinishedAt: 2026-07-29 04:40:07 +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,}