Name: series-workflowfhkqk Phase: Failed StartedAt: 2026-08-08 02:20:47 +0000 UTC FinishedAt: 2026-08-08 03:06:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhkqk[0] Phase: Succeeded StartedAt: 2026-08-08 02:20:47 +0000 UTC FinishedAt: 2026-08-08 03:06:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhkqk[0].run-triage Phase: Succeeded StartedAt: 2026-08-08 02:20:47 +0000 UTC FinishedAt: 2026-08-08 03:06:35 +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+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJIHRvIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGluIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKCkuIFRoaXMgaW50ZXJmYWNlIG1vZGUgcmVwcmVzZW50cyBhIGhhcmR3YXJlLWxldmVsIGNvbm5lY3Rpb24gYmV0d2VlbiBhIE1BQyBhbmQgYSBQSFkgKFBlbnRhIFNHTUlJKS4gSXQgaXMgb25seSBjb25maWd1cmVkIHZpYSBkZXZpY2UgdHJlZSBwcm9wZXJ0aWVzIChlLmcuLCBwaHktbW9kZSA9IFwmIzM0O3BzZ21paVwmIzM0Oykgb3IgaGFyZGNvZGVkIGluIHNwZWNpZmljIGhhcmR3YXJlIGRyaXZlcnMgKGxpa2UgdGhlIFF1YWxjb21tIHFjYTgwN3ggUEhZIGRyaXZlcikuIFNpbmNlIGl0IHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIG9yIGRldmljZSB0cmVlIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIG5vdCBwcmVzZW50IG9yIGR5bmFtaWNhbGx5IGluamVjdGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VKSwgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWVlMDg4ZDUzNWUyN2JiMWUxZTk1NTE2MjE1YTZkYzI4MjI3NDhhOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDggMDM6MDQ6NDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcbmluZGV4IDE4ZDJlYWQ5N2FhNTQuLjk4M2ExYTNjZWUzNzQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXG5AQCAtMTA0MCw2ICYjNDM7MTA0MCw3IEBAIHN0YXRpYyBlbnVtIGluYmFuZF90eXBlIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4ge1xuIFx0c3dpdGNoIChpbnRlcmZhY2UpIHtcbiBcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxuJiM0MztcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcbiBcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FTR01JSTpcbiBcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FVU0dNSUk6XG4gXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUkgdG8gdGhlIHN3aXRjaCBzdGF0ZW1lbnQgaW4gcGh5bGlua19nZXRfaW5iYW5kX3R5cGUoKS4gVGhpcyBpbnRlcmZhY2UgbW9kZSByZXByZXNlbnRzIGEgaGFyZHdhcmUtbGV2ZWwgY29ubmVjdGlvbiBiZXR3ZWVuIGEgTUFDIGFuZCBhIFBIWSAoUGVudGEgU0dNSUkpLiBJdCBpcyBvbmx5IGNvbmZpZ3VyZWQgdmlhIGRldmljZSB0cmVlIHByb3BlcnRpZXMgKGUuZy4sIHBoeS1tb2RlID0gXCYjMzQ7cHNnbWlpXCYjMzQ7KSBvciBoYXJkY29kZWQgaW4gc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVycyAobGlrZSB0aGUgUXVhbGNvbW0gcWNhODA3eCBQSFkgZHJpdmVyKS4gU2luY2UgaXQgcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgb3IgZGV2aWNlIHRyZWUgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgbm90IHByZXNlbnQgb3IgZHluYW1pY2FsbHkgaW5qZWN0YWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUpLCB0aGlzIGNvZGUgcGF0aCBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1ZWUwODhkNTM1ZTI3YmIxZTFlOTU1MTYyMTVhNmRjMjgyMjc0OGE5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgOCAwMzowNDo0NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jCmluZGV4IDE4ZDJlYWQ5N2FhNTQuLjk4M2ExYTNjZWUzNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYwpAQCAtMTA0MCw2ICYjNDM7MTA0MCw3IEBAIHN0YXRpYyBlbnVtIGluYmFuZF90eXBlIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpCiB7CiAJc3dpdGNoIChpbnRlcmZhY2UpIHsKIAljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSToKJiM0MzsJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOgogCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FTR01JSToKIAljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RVVNHTUlJOgogCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkV4YW1pbmluZyBhIFBIWUxJTksgUGF0Y2gqKgoKQWxyaWdodCwgYSBwYXRjaCBqdXN0IGNyb3NzZWQgbXkgZGVzayB0aGF0IHRvdWNoZXMgYGRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGludm9sdmUgYWRkaW5nIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYCB0byB0aGUgYHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlYCBzd2l0Y2ggc3RhdGVtZW50LiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBkaXZlIGludG8gdGhhdCBmdW5jdGlvbiBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgcGh5bGlua19nZXRfaW5iYW5kX3R5cGVgIHdvcmtzLiBXaGF0IGlzIGl0cyBjdXJyZW50IGltcGxlbWVudGF0aW9uPyBXaGF0IGFyZSB0aGUgZXhpc3RpbmcgaW50ZXJmYWNlIG1vZGVzIGl0IGhhbmRsZXMsIGFuZCBob3cgZG9lcyBgUFNHTUlJYCBmaXQgaW50byB0aGF0IGVjb3N5c3RlbT8gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGhvdyB0aGlzIG5ldyBhZGRpdGlvbiBtaWdodCBhZmZlY3QgdGhlIG92ZXJhbGwgbG9naWMsIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLCBhbmQgaWYgdGhlIGV4aXN0aW5nIGNvZGUgaGFuZGxlcyB0aGlzIG5ldyBtb2RlIGdyYWNlZnVsbHkuIE15IG1haW4gZm9jdXMgYXQgdGhpcyBwb2ludCBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBmdW5kYW1lbnRhbCBjaGFuZ2UgYW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9uIHRoZSBsaW5rIHRyYWluaW5nIGFuZCBuZWdvdGlhdGlvbiBwcm9jZXNzLCBnaXZlbiBteSBleHBlcmllbmNlIHdpdGggdGhpcyB0eXBlIG9mIFBIWSBkcml2ZXIgbW9kaWZpY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeWxpbmtfZ2V0X2luYmFuZF90eXBlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTEwMzM9ZW51bSBpbmJhbmRfdHlwZSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xMDM4LVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxMDM5OnN0YXRpYyBlbnVtIGluYmFuZF90eXBlIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwNDAte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTA5MD1zdGF0aWMgdm9pZCBwaHlsaW5rX3Bjc19uZWdfbW9kZShzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTA5OC1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTA5OTpcdHR5cGUgPSBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZShpbnRlcmZhY2UpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xMTAwLVx0aWYgKHR5cGUgPT0gSU5CQU5EX05PTkUpIHtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTM3NTY9c3RhdGljIGludCBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbChzdHJ1Y3QgcGh5bGluayAqcGwpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zODA2LVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozODA3Olx0aW5iYW5kX3R5cGUgPSBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZShpbnRlcmZhY2UpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zODA4LVx0aWYgKGluYmFuZF90eXBlID09IElOQkFORF9OT05FKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY4MgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW5uZXIgbW9ub2xvZ3VlOgoKKipRdWljayBBdWRpdCBvZiBgcGh5bGlua19nZXRfaW5iYW5kX3R5cGVgKioKCkFscmlnaHQsIGEgc21hbGwgY2hhbmdlIGluIGBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZWAuIEludGVyZXN0aW5nLiBMZXQmIzM5O3Mgbm90IGdldCBhaGVhZCBvZiBvdXJzZWx2ZXMsIHRob3VnaC4gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBleGFjdGx5IHRoaXMgZnVuY3Rpb24gZG9lcy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGh5bGluayBlY29zeXN0ZW0gYmVmb3JlIEkgZXZlbiBjb25zaWRlciB3aGF0IHRoaXMgbW9kaWZpY2F0aW9uICptZWFucyouIEdvdHRhIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGZ1bGwgY29udGV4dCBiZWZvcmUgZGl2aW5nIGludG8gdGhlIGRldGFpbHMuIFRpbWUgdG8gcHVsbCB1cCB0aGUgY29kZSBhbmQgam9nIG15IG1lbW9yeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDM5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwMzk6XHRzdGF0aWMgZW51bSBpbmJhbmRfdHlwZSBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZShwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuMTA0MDpcdHtcbjEwNDE6XHRcdHN3aXRjaCAoaW50ZXJmYWNlKSB7XG4xMDQyOlx0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSTpcbjEwNDM6XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcbjEwNDQ6XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FTR01JSTpcbjEwNDU6XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FVU0dNSUk6XG4xMDQ2Olx0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJOlxuMTA0NzpcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTBHX1FYR01JSTpcbjEwNDg6XHRcdFx0LyogVGhlc2UgcHJvdG9jb2xzIGFyZSBkZXNpZ25lZCBmb3IgdXNlIHdpdGggYSBQSFkgd2hpY2hcbjEwNDk6XHRcdFx0ICogY29tbXVuaWNhdGVzIGl0cyBuZWdvdGlhdGlvbiByZXN1bHQgYmFjayB0byB0aGUgTUFDIHZpYVxuMTA1MDpcdFx0XHQgKiBpbmJhbmQgY29tbXVuaWNhdGlvbi4gTm90ZTogdGhlcmUgZXhpc3QgUEhZcyB0aGF0IHJ1blxuMTA1MTpcdFx0XHQgKiB3aXRoIFNHTUlJIGJ1dCBkbyBub3Qgc2VuZCB0aGUgaW5iYW5kIGRhdGEuXG4xMDUyOlx0XHRcdCAqL1xuMTA1MzpcdFx0XHRyZXR1cm4gSU5CQU5EX0NJU0NPX1NHTUlJO1xuMTA1NDpcdFxuMTA1NTpcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYOlxuMTA1NjpcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMjUwMEJBU0VYOlxuMTA1NzpcdFx0XHQvKiAxMDAwYmFzZS1YIGlzIGRlc2lnbmVkIGZvciB1c2UgbWVkaWEtc2lkZSBmb3IgRmlicmVcbjEwNTg6XHRcdFx0ICogY29ubmVjdGlvbnMsIGFuZCB0aHVzIHRoZSBBdXRvbmVnIGJpdCBuZWVkcyB0byBiZVxuMTA1OTpcdFx0XHQgKiB0YWtlbiBpbnRvIGFjY291bnQuIFdlIGFsc28gZG8gdGhpcyBmb3IgMjUwMGJhc2UtWFxuMTA2MDpcdFx0XHQgKiBhcyB3ZWxsLCBidXQgZHJpdmVycyBtYXkgbm90IHN1cHBvcnQgdGhpcywgc28gbWF5XG4xMDYxOlx0XHRcdCAqIG5lZWQgdG8gb3ZlcnJpZGUgdGhpcy5cbjEwNjI6XHRcdFx0ICovXG4xMDYzOlx0XHRcdHJldHVybiBJTkJBTkRfQkFTRVg7XG4xMDY0Olx0XG4xMDY1Olx0XHRkZWZhdWx0OlxuMTA2NjpcdFx0XHRyZXR1cm4gSU5CQU5EX05PTkU7XG4xMDY3Olx0XHR9XG4xMDY4Olx0fVxuMTA2OTpcdFxuMTA3MDpcdC8qKlxuMTA3MTpcdCAqIHBoeWxpbmtfcGNzX25lZ19tb2RlKCkgLSBoZWxwZXIgdG8gZGV0ZXJtaW5lIFBDUyBpbmJhbmQgbW9kZVxuMTA3MjpcdCAqIEBwbDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXG4xMDczOlx0ICogQHBjczogYSBwb2ludGVyIHRvIFx1MDAyNnN0cnVjdCBwaHlsaW5rX3Bjc1xuMTA3NDpcdCAqIEBpbnRlcmZhY2U6IGludGVyZmFjZSBtb2RlIHRvIGJlIHVzZWRcbjEwNzU6XHQgKiBAYWR2ZXJ0aXNpbmc6IGFkZXJ0aXNlbWVudCBldGh0b29sIGxpbmsgbW9kZSBtYXNrXG4xMDc2Olx0ICpcbjEwNzc6XHQgKiBEZXRlcm1pbmVzIHRoZSBuZWdvdGlhdGlvbiBtb2RlIHRvIGJlIHVzZWQgYnkgdGhlIFBDUywgYW5kIHJldHVybnNcbjEwNzg6XHQgKiBvbmUgb2Y6XG4xMDc5Olx0ICpcbjEwODA6XHQgKiAtICVQSFlMSU5LX1BDU19ORUdfTk9ORTogaW50ZXJmYWNlIG1vZGUgZG9lcyBub3Qgc3VwcG9ydCBpbmJhbmRcbjEwODE6XHQgKiAtICVQSFlMSU5LX1BDU19ORUdfT1VUQkFORDogYW4gb3V0IG9mIGJhbmQgbW9kZSAoZS5nLiByZWFkaW5nIHRoZSBQSFkpXG4xMDgyOlx0ICogICB3aWxsIGJlIHVzZWQuXG4xMDgzOlx0ICogLSAlUEhZTElOS19QQ1NfTkVHX0lOQkFORF9ESVNBQkxFRDogaW5iYW5kIG1vZGUgc2VsZWN0ZWQgYnV0IGF1dG9uZWdcbjEwODQ6XHQgKiAgIGRpc2FibGVkXG4xMDg1Olx0ICogLSAlUEhZTElOS19QQ1NfTkVHX0lOQkFORF9FTkFCTEVEOiBpbmJhbmQgbW9kZSBzZWxlY3RlZCBhbmQgYXV0b25lZyBlbmFibGVkXG4xMDg2Olx0ICpcbjEwODc6XHQgKiBOb3RlOiB0aGlzIGlzIGZvciBjYXNlcyB3aGVyZSB0aGUgUENTIGl0c2VsZiBpcyBpbnZvbHZlZCBpbiBuZWdvdGlhdGlvblxuMTA4ODpcdCAqIChlLmcuIENsYXVzZSAzNywgU0dNSUkgYW5kIHNpbWlsYXIpIG5vdCBDbGF1c2UgNzMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc2NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTd2l0Y2ggU3RhdGVtZW50IENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyB0aW55IGNoYW5nZSBpbiBhIHN3aXRjaCBzdGF0ZW1lbnQsIGFuZCBteSBmaXJzdCB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoaXMgZXZlbiB3b3J0aCBmdXp6aW5nPyYjMzQ7IEl0JiMzOTtzIGEgc21hbGwgbW9kaWZpY2F0aW9uLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBgcGh5bGlua19nZXRfaW5iYW5kX3R5cGVgIHdoZW4gdGhlIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYCBjYXNlIGlzIGhpdC4gSW5zdGVhZCBvZiByZXR1cm5pbmcgYElOQkFORF9OT05FYCwgaXQgbm93IHJldHVybnMgYElOQkFORF9DSVNDT19TR01JSWAuCgpSaWdodCBhd2F5LCBJIHNlZSB0aGlzIGltcGFjdHMgYHBoeWxpbmtfcGNzX25lZ19tb2RlYCBhbmQgYHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsYC4gTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBjb2RlIHBhdGggaXMgZXZlbiByZWFjaGFibGUuIExldCYjMzk7cyBzZWUuLi4gYHBoeWxpbmtfcGNzX25lZ19tb2RlYCBpcyBjYWxsZWQgYnkgYHBoeWxpbmtfbWFjX2NvbmZpZ2AuIEFuZCBgcGh5bGlua19zZnBfY29uZmlnX29wdGljYWxgIGlzIHRyaWdnZXJlZCBieSBgcGh5bGlua19zZnBfbW9kdWxlX2luc2VydGAuCgpUaGUgYmlnIHF1ZXN0aW9uIG5vdyBpcywgZG9lcyBgcGh5bGlua2AgZXZlbiAqZ2V0KiB1c2VkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gSXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZSBvZiBuZXR3b3JraW5nLCBzbyBJJiMzOTtkIGltYWdpbmUgdGhlIGFuc3dlciBpcyB5ZXMsIGdpdmVuIGhvdyBtYW55IG5ldHdvcmsgZHJpdmVycyB1dGlsaXplIGl0LiBJIGtub3cgaXQmIzM5O3MgYSBjb21tb24gZGVwZW5kZW5jeS4KCkFscmlnaHQsIEkmIzM5O2xsIGRlbHZlIGZ1cnRoZXIgYnkgY2hlY2tpbmcgdGhlIGNhbGxlcnMgb2YgYHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlYCB0byBnYWluIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeWxpbmtfZ2V0X2luYmFuZF90eXBlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTEwMzM9ZW51bSBpbmJhbmRfdHlwZSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xMDM4LVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxMDM5OnN0YXRpYyBlbnVtIGluYmFuZF90eXBlIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwNDAte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTA5MD1zdGF0aWMgdm9pZCBwaHlsaW5rX3Bjc19uZWdfbW9kZShzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTA5OC1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTA5OTpcdHR5cGUgPSBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZShpbnRlcmZhY2UpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xMTAwLVx0aWYgKHR5cGUgPT0gSU5CQU5EX05PTkUpIHtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTM3NTY9c3RhdGljIGludCBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbChzdHJ1Y3QgcGh5bGluayAqcGwpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zODA2LVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozODA3Olx0aW5iYW5kX3R5cGUgPSBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZShpbnRlcmZhY2UpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zODA4LVx0aWYgKGluYmFuZF90eXBlID09IElOQkFORF9OT05FKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY0NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipOYXZpZ2F0aW5nIFBIWUxJTksgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBoZXJlLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBQSFlMSU5LIGRyaXZlci4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBzZWUgaWYgYW55IHNwZWNpZmljIGNvbmZpZ3MgbmVlZCB0byBiZSBkZWZpbmVkIGZvciB0aGUgZHJpdmVyIHRvIGJlIGluY2x1ZGVkLiBJJiMzOTttIGdvaW5nIHRvIGNoZWNrIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIGRyaXZlciBpdHNlbGYsIHN0YXJ0aW5nIHdpdGggYGRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNgLiBJIGtub3cgdGhhdCBmaWxlIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19QSFlMSU5LYCBpcyBzZXQuIE5vdyBJIG5lZWQgdG8gc2VlICp3aGVyZSogdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkLiBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLiBFaXRoZXIgYGRyaXZlcnMvbmV0L3BoeS9LY29uZmlnYCBvciBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgaXMgd2hlcmUgSSYjMzk7bGwgbG9vayBmb3IgYFBIWUxJTktgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZXMgcmV2ZWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEhZTElOSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo2OmNvbmZpZyBQSFlMSU5LXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy03LVx0dHJpc3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk4NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFBIWUxJTksgLSBBIFF1aWNrIEFzc2Vzc21lbnQqKgoKT2theSwgc28gYFBIWUxJTktgLi4uIGl0JiMzOTtzIG9uZSBvZiB0aG9zZSB0cmlzdGF0ZSBvcHRpb25zLCB0eXBpY2FsbHkgaGFuZGxlZCBieSBuZXR3b3JrIGRyaXZlcnMuIE15IGluaXRpYWwgdGhvdWdodCBpcywgaXMgdGhpcyBldmVuIHdvcnRoIHRoZSBmdXp6aW5nIGVmZm9ydD8gSXQgc291bmRzIGxpa2UgYSBwcmV0dHkgbWlub3IgY2hhbmdlLCBlc3NlbnRpYWxseSBqdXN0IGFkZGluZyBhIG5ldyBjYXNlIHRvIGEgc3dpdGNoIHN0YXRlbWVudC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBjaGFuZ2UgdG8gdGhlIGluYmFuZCB0eXBlIHNwZWNpZmljYWxseSBmb3IgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgLgoKQnV0IHdhaXQsIGRvZXMgdGhpcyBhY3R1YWxseSBoYXZlIGFueSAqZnVuY3Rpb25hbCogaW1wYWN0PyBBaCwgeWVzLCBpdCBkb2VzLiBUaGlzIHNlZW1zIHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgYHBoeWxpbmtfcGNzX25lZ19tb2RlYCBhbmQgYHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsYCB3aGVuIHRoYXQgc3BlY2lmaWMgaW50ZXJmYWNlIG1vZGUgaXMgaW4gcGxheS4gT2theSwgdGhhdCBtYWtlcyBpdCBtb3JlIGludGVyZXN0aW5nLgoKVGhlIG5leHQgcXVlc3Rpb24gaXMgYWx3YXlzIHJlYWNoYWJpbGl0eS4gQ2FuIEkgYWN0dWFsbHkgaGl0IHRoaXMgaW4gYSBRRU1VIGVudmlyb25tZW50PyBJZiBhIG5ldHdvcmsgZHJpdmVyIGlzIHVzaW5nIGBwaHlsaW5rYCAqYW5kKiBzdXBwb3J0cyBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAsIHRoZW4geWVzLCBpdCYjMzk7cyBwb3NzaWJsZS4gU28sIGFyZSB0aGVyZSBhbnkgZHJpdmVycyBpbiBteSBRRU1VIHNldHVwIHRoYXQgbWVldCBib3RoIG9mIHRob3NlIGNyaXRlcmlhPyBUaW1lIHRvIGdvIGh1bnRpbmcgZm9yIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgcmVhY2hhYmxlIGFuZCBpZiBpdCBpcywgdGhlbiB0aGUgZnV6emluZyBlZmZvcnQgaXMgbW9yZSBqdXN0aWZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM9MTU5PWludCBwaHlfaW50ZXJmYWNlX251bV9wb3J0cyhwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTIwMS1cdFx0cmV0dXJuIDQ7XG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYzoyMDI6XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy0yMDMtXHRcdHJldHVybiA1O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jPTI5ND11bnNpZ25lZCBsb25nIHBoeV9jYXBzX2Zyb21faW50ZXJmYWNlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMtMzEwLVx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYzozMTE6XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy0zMTItXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yMzg9c3RhdGljIGludCBwaHlsaW5rX2ludGVyZmFjZV9tYXhfc3BlZWQocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI1OS1cdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOlxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNjA6XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI2MS1cdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FTR01JSTpcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTc3ND1zdGF0aWMgaW50IHBoeWxpbmtfcGFyc2VfbW9kZShzdHJ1Y3QgcGh5bGluayAqcGwsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy04MDgtXHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzo4MDk6XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtODEwLVx0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0xMDM5PXN0YXRpYyBlbnVtIGluYmFuZF90eXBlIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xMDQyLVx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjEwNDM6XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwNDQtXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XG4tLVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jPTQ5MD1zdGF0aWMgaW50IHFjYTgwN3hfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYy01NDktXHRcdGlmICghc3RyY2FzZWNtcChwYWNrYWdlX21vZGVfbmFtZSxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYzo1NTA6XHRcdFx0XHRwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSSkpKVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jOjU1MTpcdFx0XHRwcml2LVx1MDAzZXBhY2thZ2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk7XG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNTUyLVx0XHRlbHNlIGlmICghc3RyY2FzZWNtcChwYWNrYWdlX21vZGVfbmFtZSxcbi0tXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM9NTYyPXN0YXRpYyBpbnQgcWNhODA3eF9waHlfcGFja2FnZV9jb25maWdfaW5pdF9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTU4NS1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM6NTg2Olx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTU4Ny1cdGRlZmF1bHQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MzgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIHRoZSBRQ0E4MDd4IFBIWSBEcml2ZXIgaW4gYSBRRU1VIEVudmlyb25tZW50KioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIHRoaXMgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgIGRlZmluZSwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGBxY2E4MDd4YCBQSFkgZHJpdmVyIGlzIHRoZSBwcmltYXJ5IHVzZXIuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgY2FuIEkgZXZlbiAqZ2V0KiB0byB0aGF0IGRyaXZlciBpbnNpZGUgUUVNVT8gSSBrbm93IGl0JiMzOTtzIGEgUXVhbGNvbW0gUEhZLCB3aGljaCBtZWFucyBpdCYjMzk7cyBwcm9iYWJseSBub3QgZ29pbmcgdG8gYmUgcGFydCBvZiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAuIFVubGVzcywgb2YgY291cnNlLCB0aGVyZSYjMzk7cyBleHBsaWNpdCBlbXVsYXRpb24gZm9yIGl0LCBvciB0aGUgUEhZIGZyYW1ld29yayBpdHNlbGYgb2ZmZXJzIGEgd2F5IHRvIGluc3RhbnRpYXRlIGFyYml0cmFyeSBQSFlzIHRocm91Z2ggbmV0bGluayBvciBzeXNmcy4gQnV0IHRoYXQmIzM5O3MgdXN1YWxseSBub3QgaG93IGl0IHdvcmtzOyBQSFlzIGFyZSB0eXBpY2FsbHkgcHJvYmVkIHZpYSB0aGUgTURJTyBidXMuCgpOb3csIHRoYXQgZ2V0cyBtZSB0aGlua2luZy4uLiBjYW4gSSAqaW5zdGFudGlhdGUqIGFuIE1ESU8gZGV2aWNlIG9yIGEgUEhZIGRldmljZSB2aWEgc3lzZnMgb3IgbmV0bGluaz8gSGlzdG9yaWNhbGx5LCBNRElPIGRldmljZXMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgZGV2aWNlIHRyZWUgb3IgQUNQSSBvciBhcmUgcmVnaXN0ZXJlZCBieSB0aGUgTUFDIGRyaXZlci4gSSByZW1lbWJlciBzZWVpbmcgZHJpdmVycyBsaWtlIGBtZGlvLWJjbS11bmltYWNgLCBgbWRpby1ncGlvYCwgYW5kIGBtZGlvLW1vY2t1cGAuCgpBaGEhIERpZG4mIzM5O3QgYHN5emthbGxlcmAgaGF2ZSBzb21lIHN1cHBvcnQgZm9yIGluamVjdGluZyBNRElPIGRldmljZXMgb3IgbWF5YmUgdXNpbmcgYG1kaW8tbW9ja3VwYD8gTGV0IG1lIGNoZWNrIGZvciBgbWRpby1tb2NrdXBgLiBUaGlzIGNvdWxkIGJlIGEgdmlhYmxlIHBhdGggdG8gdGVzdGluZyB0aGF0IGRyaXZlciB3aXRob3V0IGEgc3BlY2lhbGl6ZWQgaGFyZHdhcmUgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpby1tb2NrdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDAzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTttIGhpdHRpbmcgYSByb2FkYmxvY2suIEkgY2FuJiMzOTt0IHNlZW0gdG8gZ2V0IHRvIHRoZSBgbWRpby1tb2NrdXBgIGVudmlyb25tZW50IGRpcmVjdGx5LCBhbmQgdGhhdCYjMzk7cyBtYWtpbmcgdGhpbmdzIHRyaWNreS4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byB1c2UgdGhlIGBwaHlsaW5rYCBmdW5jdGlvbnMsIHNpbmNlIE1BQyBkcml2ZXJzIGNhbGwgdGhlbS4gQnV0IHJlYWNoaW5nIHRoZSBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAgbW9kZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGlzIHByb3ZpbmcgZGlmZmljdWx0LiBQZXJoYXBzIGl0JiMzOTtzIG5vdCB3b3J0aCB0aGUgZWZmb3J0IGZvciBmdXp6aW5nIGlmIGl0JiMzOTtzIHRvbyBjdW1iZXJzb21lIHRvIHNldCB1cC4KCkhvbGQgb24sIEkganVzdCByZW1lbWJlcmVkOiBgcGh5bGlua19nZXRfaW5iYW5kX3R5cGVgIGlzIGNhbGxlZCBmcm9tIGBwaHlsaW5rX3Bjc19uZWdfbW9kZWAgYW5kIGBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbGAuIE5vdyB3ZSYjMzk7cmUgZ2V0dGluZyBzb21ld2hlcmUhIGBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbGAgaXMgY2FsbGVkIHdoZW4gYW4gU0ZQIG1vZHVsZSBnZXRzIGluc2VydGVkLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCBjYW4gSSAqc2ltdWxhdGUqIFNGUCBtb2R1bGUgaW5zZXJ0aW9uPyBUaGF0IHNlZW1zIGxpa2UgYSBtb3JlIHBsYXVzaWJsZSBwYXRoLgoKVGhlcmUmIzM5O3MgdGhlIGBzZnBgIGRyaXZlciBpbiBgZHJpdmVycy9uZXQvcGh5L3NmcC5jYCwgYnV0IHRoYXQgc3RpbGwgbGlrZWx5IGRlbWFuZHMgZWl0aGVyIGhhcmR3YXJlIG9yIHNvbWUgdmVyeSBzcGVjaWZpYyBlbXVsYXRpb24uIExldCBtZSBiYWNrIHVwIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSAqdmlydHVhbCogZHJpdmVycyB0aGF0IHV0aWxpemUgYHBoeWxpbmtg4oCmIG1heWJlIEkgY2FuIGV4cGxvaXQgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5bGlua19jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jPTExMjg9c3RhdGljIGludCBhbHRlcmFfdHNlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jLTE0MTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmM6MTQxNjpcdHByaXYtXHUwMDNlcGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFx1MDAyNnByaXYtXHUwMDNlcGh5bGlua19jb25maWcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmMtMTQxNy1cdFx0XHRcdCAgICAgICBvZl9md25vZGVfaGFuZGxlKHByaXYtXHUwMDNlZGV2aWNlLVx1MDAzZW9mX25vZGUpLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmM9MTA3ND1zdGF0aWMgaW50IGFnNzF4eF9waHlsaW5rX3NldHVwKHN0cnVjdCBhZzcxeHggKmFnKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmMtMTEwOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmM6MTEwOTpcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcdTAwMjZhZy1cdTAwM2VwaHlsaW5rX2NvbmZpZywgYWctXHUwMDNlcGRldi1cdTAwM2VkZXYuZndub2RlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYy0xMTEwLVx0XHRcdFx0IGFnLVx1MDAzZXBoeV9pZl9tb2RlLCBcdTAwMjZhZzcxeHhfcGh5bGlua19tYWNfb3BzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTEwMjM9c3RhdGljIGludCBtYWNiX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTA4NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTA4NjpcdGJwLVx1MDAzZXBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcdTAwMjZicC1cdTAwM2VwaHlsaW5rX2NvbmZpZywgYnAtXHUwMDNlcGRldi1cdTAwM2VkZXYuZndub2RlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMDg3LVx0XHRcdFx0ICAgICBicC1cdTAwM2VwaHlfaW50ZXJmYWNlLCBcdTAwMjZtYWNiX3BoeWxpbmtfb3BzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYS9kcGFhX2V0aC5jPTIwMT1zdGF0aWMgaW50IGRwYWFfbmV0ZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEvZHBhYV9ldGguYy0yNzQtXHRtYWNfZGV2LVx1MDAzZXVwZGF0ZV9zcGVlZCA9IGRwYWFfZXRoX2Nncl9zZXRfc3BlZWQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYS9kcGFhX2V0aC5jOjI3NTpcdG1hY19kZXYtXHUwMDNlcGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFx1MDAyNm1hY19kZXYtXHUwMDNlcGh5bGlua19jb25maWcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYS9kcGFhX2V0aC5jLTI3Ni1cdFx0XHRcdFx0ICBkZXZfZndub2RlKG1hY19kZXYtXHUwMDNlZGV2KSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItbWFjLmM9NTYwPWludCBkcGFhMl9tYWNfY29ubmVjdChzdHJ1Y3QgZHBhYTJfbWFjICptYWMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLW1hYy5jLTYyNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1tYWMuYzo2MjU6XHRwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXHUwMDI2bWFjLVx1MDAzZXBoeWxpbmtfY29uZmlnLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLW1hYy5jLTYyNi1cdFx0XHRcdCBkcG1hY19ub2RlLCBtYWMtXHUwMDNlaWZfbW9kZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmM9OTcxPXN0YXRpYyBpbnQgZW5ldGM0X2xpbmtfaW5pdChzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfcGYuYy05ODktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmM6OTkwOlx0ZXJyID0gZW5ldGNfcGh5bGlua19jcmVhdGUocHJpdiwgbm9kZSwgXHUwMDI2ZW5ldGNfcGxfbWFjX29wcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMtOTkxLVx0aWYgKGVycikge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jLTk5Mi1cdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBjcmVhdGUgcGh5bGlua1xcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmM6OTkzOlx0XHRnb3RvIGVycl9waHlsaW5rX2NyZWF0ZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfcGYuYy05OTQtXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jLTk5Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfcGYuYzo5OTg6ZXJyX3BoeWxpbmtfY3JlYXRlOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jLTk5OS1cdGVuZXRjX21kaW9idXNfZGVzdHJveShwZik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmM9ODQ3PXN0YXRpYyBpbnQgZW5ldGNfcGZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmMtOTI5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmM6OTMwOlx0ZXJyID0gZW5ldGNfcGh5bGlua19jcmVhdGUocHJpdiwgbm9kZSwgXHUwMDI2ZW5ldGNfbWFjX3BoeWxpbmtfb3BzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5jLTkzMS1cdGlmIChlcnIpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuYzo5MzI6XHRcdGdvdG8gZXJyX3BoeWxpbmtfY3JlYXRlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmMtOTMzLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5jLTk0MS1cdGVuZXRjX3BoeWxpbmtfZGVzdHJveShwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5jOjk0MjplcnJfcGh5bGlua19jcmVhdGU6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuYy05NDMtXHRlbmV0Y19tZGlvYnVzX2Rlc3Ryb3kocGYpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYz0zMTI9RVhQT1JUX1NZTUJPTF9HUEwoZW5ldGNfbWRpb2J1c19kZXN0cm95KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy0zMTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmM6MzE0OmludCBlbmV0Y19waHlsaW5rX2NyZWF0ZShzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMzE1LVx0XHRcdCBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzICpvcHMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTMzNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYzozMzg6XHRwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXHUwMDI2cGYtXHUwMDNlcGh5bGlua19jb25maWcsIG9mX2Z3bm9kZV9oYW5kbGUobm9kZSksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMzM5LVx0XHRcdFx0IHBmLVx1MDAzZWlmX21vZGUsIG9wcyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTM0OC19XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmM6MzQ5OkVYUE9SVF9TWU1CT0xfR1BMKGVuZXRjX3BoeWxpbmtfY3JlYXRlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy0zNTAtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5oPTEyPXZvaWQgZW5ldGNfbWRpb2J1c19kZXN0cm95KHN0cnVjdCBlbmV0Y19wZiAqcGYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5oOjEzOmludCBlbmV0Y19waHlsaW5rX2NyZWF0ZShzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmgtMTQtXHRcdFx0IGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgKm9wcyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvZnNfZW5ldC1tYWluLmM9ODUzPXN0YXRpYyBpbnQgZnNfZW5ldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9mc19lbmV0LW1haW4uYy05MzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9mc19lbmV0LW1haW4uYzo5MzM6XHRwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXHUwMDI2ZmVwLVx1MDAzZXBoeWxpbmtfY29uZmlnLCBkZXZfZndub2RlKGZlcC1cdTAwM2VkZXYpLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMtOTM0LVx0XHRcdFx0IHBoeV9tb2RlLCBcdTAwMjZmc19lbmV0X3BoeWxpbmtfbWFjX29wcyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3VjY19nZXRoLmM9MzQxOT1zdGF0aWMgaW50IHVjY19nZXRoX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UqIG9mZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS91Y2NfZ2V0aC5jLTM1NzMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvdWNjX2dldGguYzozNTc0Olx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFx1MDAyNnVnZXRoLVx1MDAzZXBoeWxpbmtfY29uZmlnLCBkZXZfZndub2RlKFx1MDAyNmRldi1cdTAwM2VkZXYpLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3VjY19nZXRoLmMtMzU3NS1cdFx0XHRcdCBwaHlfaW50ZXJmYWNlLCBcdTAwMjZ1Z2V0aF9tYWNfb3BzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jPTU0ODA9c3RhdGljIGludCBtdm5ldGFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jLTU1OTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jOjU1OTk6XHRwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXHUwMDI2cHAtXHUwMDNlcGh5bGlua19jb25maWcsIHBkZXYtXHUwMDNlZGV2LmZ3bm9kZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmMtNTYwMC1cdFx0XHRcdCBwaHlfbW9kZSwgXHUwMDI2bXZuZXRhX3BoeWxpbmtfb3BzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uYz02ODQwPXN0YXRpYyBpbnQgbXZwcDJfcG9ydF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jLTcxNDctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uYzo3MTQ4Olx0XHRwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXHUwMDI2cG9ydC1cdTAwM2VwaHlsaW5rX2NvbmZpZywgcG9ydF9md25vZGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uYy03MTQ5LVx0XHRcdFx0XHQgcGh5X21vZGUsIFx1MDAyNm12cHAyX3BoeWxpbmtfb3BzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX21haW4uYz0zNzA9c3RhdGljIGludCBwcmVzdGVyYV9wb3J0X3NmcF9iaW5kKHN0cnVjdCBwcmVzdGVyYV9wb3J0ICpwb3J0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfbWFpbi5jLTQxNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfbWFpbi5jOjQxNzpcdFx0cGh5X2xpbmsgPSBwaHlsaW5rX2NyZWF0ZShcdTAwMjZwb3J0LVx1MDAzZXBoeV9jb25maWcsIGZ3bm9kZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfbWFpbi5jLTQxOC1cdFx0XHRcdFx0ICBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYz00ODIzPXN0YXRpYyBpbnQgbXRrX2FkZF9tYWMoc3RydWN0IG10a19ldGggKmV0aCwgc3RydWN0IGRldmljZV9ub2RlICpucClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTQ5NjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jOjQ5Njg6XHRwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXHUwMDI2bWFjLVx1MDAzZXBoeWxpbmtfY29uZmlnLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYy00OTY5LVx0XHRcdFx0IG9mX2Z3bm9kZV9oYW5kbGUobWFjLVx1MDAzZW9mX25vZGUpLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbmV0ZGV2LmM9NzQ2PXN0cnVjdCBuZXRfZGV2aWNlICpmYm5pY19uZXRkZXZfYWxsb2Moc3RydWN0IGZibmljX2RldiAqZmJkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbmV0ZGV2LmMtODM0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19uZXRkZXYuYzo4MzU6XHRpZiAoZmJuaWNfcGh5bGlua19jcmVhdGUobmV0ZGV2KSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19uZXRkZXYuYy04MzYtXHRcdGZyZWVfbmV0ZGV2KG5ldGRldik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19uZXRkZXYuaD0xMTE9aW50IGZibmljX3BoeWxpbmtfZ2V0X2ZlY3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5oLTExMi1cdFx0XHQgICAgICAgc3RydWN0IGV0aHRvb2xfZmVjcGFyYW0gKmZlY3BhcmFtKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbmV0ZGV2Lmg6MTEzOmludCBmYm5pY19waHlsaW5rX2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbmV0ZGV2LmgtMTE0LXZvaWQgZmJuaWNfcGh5bGlua19kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGh5bGluay5jPTE3Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyBmYm5pY19waHlsaW5rX21hY19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19waHlsaW5rLmMtMTg2LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19waHlsaW5rLmM6MTg3OiAqIGZibmljX3BoeWxpbmtfY3JlYXRlIC0gUGh5bGluayBkZXZpY2UgY3JlYXRpb25cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGh5bGluay5jLTE4OC0gKiBAbmV0ZGV2OiBOZXR3b3JrIERldmljZSBzdHJ1Y3QgdG8gYXR0YWNoIHBoeWxpbmsgZGV2aWNlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19waHlsaW5rLmMtMTk2LSAqKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGh5bGluay5jOjE5NzppbnQgZmJuaWNfcGh5bGlua19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGh5bGluay5jLTE5OC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19waHlsaW5rLmMtMjMxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19waHlsaW5rLmM6MjMyOlx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFx1MDAyNmZibi1cdTAwM2VwaHlsaW5rX2NvbmZpZywgTlVMTCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGh5bGluay5jLTIzMy1cdFx0XHRcdCBmYm5pY19waHlsaW5rX3NlbGVjdF9pbnRlcmZhY2UoZmJuLVx1MDAzZWF1aSksXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjc0M3hfbWFpbi5jPTMxNDI9c3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgbGFuNzQzeF9waHlsaW5rX21hY19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjc0M3hfbWFpbi5jLTMxNDktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmM6MzE1MDpzdGF0aWMgaW50IGxhbjc0M3hfcGh5bGlua19jcmVhdGUoc3RydWN0IGxhbjc0M3hfYWRhcHRlciAqYWRhcHRlcilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYy0zMTUxLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmMtMzE5Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYzozMTkzOlx0cGwgPSBwaHlsaW5rX2NyZWF0ZShcdTAwMjZhZGFwdGVyLVx1MDAzZXBoeWxpbmtfY29uZmlnLCBOVUxMLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjc0M3hfbWFpbi5jLTMxOTQtXHRcdFx0ICAgIGFkYXB0ZXItXHUwMDNlcGh5X2ludGVyZmFjZSwgXHUwMDI2bGFuNzQzeF9waHlsaW5rX21hY19vcHMpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYz0zNjY0PXN0YXRpYyBpbnQgbGFuNzQzeF9wY2lkZXZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjc0M3hfbWFpbi5jLTM3MjMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmM6MzcyNDpcdHJldCA9IGxhbjc0M3hfcGh5bGlua19jcmVhdGUoYWRhcHRlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmMtMzcyNS1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9sYW45NjZ4X21haW4uYz03OTE9c3RhdGljIGludCBsYW45NjZ4X3Byb2JlX3BvcnQoc3RydWN0IGxhbjk2NnggKmxhbjk2NngsIHUzMiBwLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW45NjZ4L2xhbjk2NnhfbWFpbi5jLTg1NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW45NjZ4L2xhbjk2NnhfbWFpbi5jOjg1NjpcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcdTAwMjZwb3J0LVx1MDAzZXBoeWxpbmtfY29uZmlnLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvbGFuOTY2eF9tYWluLmMtODU3LVx0XHRcdFx0IHBvcnRucCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L3NwYXJ4NV9tYWluLmM9MzEyPXN0YXRpYyBpbnQgc3Bhcng1X2NyZWF0ZV9wb3J0KHN0cnVjdCBzcGFyeDUgKnNwYXJ4NSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L3NwYXJ4NV9tYWluLmMtMzg4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfbWFpbi5jOjM4OTpcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcdTAwMjZzcHg1X3BvcnQtXHUwMDNlcGh5bGlua19jb25maWcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L3NwYXJ4NV9tYWluLmMtMzkwLVx0XHRcdFx0IG9mX2Z3bm9kZV9oYW5kbGUoY29uZmlnLVx1MDAzZW5vZGUpLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X25ldC5jPTE3NzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgb2NlbG90X3BoeWxpbmtfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X25ldC5jLTE3NzktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9uZXQuYzoxNzgwOnN0YXRpYyBpbnQgb2NlbG90X3BvcnRfcGh5bGlua19jcmVhdGUoc3RydWN0IG9jZWxvdCAqb2NlbG90LCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X25ldC5jLTE3ODEtXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBvcnRucClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9uZXQuYy0xODIwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfbmV0LmM6MTgyMTpcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcdTAwMjZwcml2LVx1MDAzZXBoeWxpbmtfY29uZmlnLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfbmV0LmMtMTgyMi1cdFx0XHRcdCBvZl9md25vZGVfaGFuZGxlKHBvcnRucCksXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfbmV0LmM9MTg0Mz1pbnQgb2NlbG90X3Byb2JlX3BvcnQoc3RydWN0IG9jZWxvdCAqb2NlbG90LCBpbnQgcG9ydCwgc3RydWN0IHJlZ21hcCAqdGFyZ2V0LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X25ldC5jLTE4NzktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9uZXQuYzoxODgwOlx0ZXJyID0gb2NlbG90X3BvcnRfcGh5bGlua19jcmVhdGUob2NlbG90LCBwb3J0LCBwb3J0bnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfbmV0LmMtMTg4MS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz0xMzcwPXN0YXRpYyBpbnQgc3RtbWFjX3BoeWxpbmtfc2V0dXAoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMTQ2MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6MTQ2MjpcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShjb25maWcsIGRldl9md25vZGUocHJpdi1cdTAwM2VkZXZpY2UpLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy0xNDYzLVx0XHRcdFx0IHByaXYtXHUwMDNlcGxhdC1cdTAwM2VwaHlfaW50ZXJmYWNlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS90bjQwX3BoeS5jPTQ1PWludCB0bjQwX3BoeV9yZWdpc3RlcihzdHJ1Y3QgdG40MF9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS90bjQwX3BoeS5jLTYyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL3RuNDBfcGh5LmM6NjM6XHRwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoY29uZmlnLCBOVUxMLCBQSFlfSU5URVJGQUNFX01PREVfWEFVSSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS90bjQwX3BoeS5jLTY0LVx0XHRcdFx0IFx1MDAyNnRuNDBfbWFjX29wcyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvYW02NS1jcHN3LW51c3MuYz0yNzU3PWFtNjVfY3Bzd19udXNzX2luaXRfcG9ydF9uZGV2KHN0cnVjdCBhbTY1X2Nwc3dfY29tbW9uICpjb21tb24sIHUzMiBwb3J0X2lkeClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9hbTY1LWNwc3ctbnVzcy5jLTI4NDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9hbTY1LWNwc3ctbnVzcy5jOjI4NDI6XHRwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXHUwMDI2cG9ydC1cdTAwM2VzbGF2ZS5waHlsaW5rX2NvbmZpZyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2FtNjUtY3Bzdy1udXNzLmMtMjg0My1cdFx0XHRcdCBvZl9md25vZGVfaGFuZGxlKHBvcnQtXHUwMDNlc2xhdmUucG9ydF9ucCksXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jPTEzMD1zdGF0aWMgaW50IG5nYmVfcGh5bGlua19pbml0KHN0cnVjdCB3eCAqd3gpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jLTE0OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYzoxNTA6XHRwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoY29uZmlnLCBOVUxMLCBwaHlfbW9kZSwgXHUwMDI2bmdiZV9tYWNfb3BzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYy0xNTEtXHRpZiAoSVNfRVJSKHBoeWxpbmspKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmM9NDgyPWludCB0eGdiZV9waHlsaW5rX2luaXRfYW1sKHN0cnVjdCB0eGdiZSAqdHhnYmUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYy01MTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jOjUxMzpcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShjb25maWcsIE5VTEwsIHBoeV9tb2RlLCBcdTAwMjZ0eGdiZV9tYWNfb3BzX2FtbCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jLTUxNC1cdGlmIChJU19FUlIocGh5bGluaykpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYz0yNjg9c3RhdGljIGludCB0eGdiZV9waHlsaW5rX2luaXQoc3RydWN0IHR4Z2JlICp0eGdiZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTI5Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MjkzOlx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKGNvbmZpZywgZndub2RlLCBwaHlfbW9kZSwgXHUwMDI2dHhnYmVfbWFjX29wcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTI5NC1cdGlmIChJU19FUlIocGh5bGluaykpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X21haW4uYz0yNzk1PXN0YXRpYyBpbnQgYXhpZW5ldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF9tYWluLmMtMzExNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF9tYWluLmM6MzExODpcdGxwLVx1MDAzZXBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcdTAwMjZscC1cdTAwM2VwaHlsaW5rX2NvbmZpZywgcGRldi1cdTAwM2VkZXYuZndub2RlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X21haW4uYy0zMTE5LVx0XHRcdFx0ICAgICBscC1cdTAwM2VwaHlfbW9kZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfbWFpbi5jLTMxMjItXHRcdHJldCA9IFBUUl9FUlIobHAtXHUwMDNlcGh5bGluayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfbWFpbi5jOjMxMjM6XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O3BoeWxpbmtfY3JlYXRlIGVycm9yICglaSlcXG5cJiMzNDssIHJldCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfbWFpbi5jLTMxMjQtXHRcdGdvdG8gY2xlYW51cF9tZGlvO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9NTE2PXN0YXRpYyBpbnQgcGh5bGlua192YWxpZGF0ZV9tYWNfYW5kX3BjcyhzdHJ1Y3QgcGh5bGluayAqcGwsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy01MzEtXHRpZiAocGNzKSB7XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjUzMjpcdFx0LyogVGhlIFBDUywgaWYgcHJlc2VudCwgbXVzdCBiZSBzZXR1cCBiZWZvcmUgcGh5bGlua19jcmVhdGUoKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy01MzMtXHRcdCAqIGhhcyBiZWVuIGNhbGxlZC4gSWYgdGhlIG9wcyBpcyBub3QgaW5pdGlhbGlzZWQsIHByaW50IGFuXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0xMDM5PXN0YXRpYyBlbnVtIGluYmFuZF90eXBlIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xMDcxLSAqIHBoeWxpbmtfcGNzX25lZ19tb2RlKCkgLSBoZWxwZXIgdG8gZGV0ZXJtaW5lIFBDUyBpbmJhbmQgbW9kZVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxMDcyOiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwNzMtICogQHBjczogYSBwb2ludGVyIHRvIFx1MDAyNnN0cnVjdCBwaHlsaW5rX3Bjc1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTc2OT1zdGF0aWMgaW50IHBoeWxpbmtfcmVnaXN0ZXJfc2ZwKHN0cnVjdCBwaHlsaW5rICpwbCxcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE3OTMtICogcGh5bGlua19zZXRfZml4ZWRfbGluaygpIC0gc2V0IHRoZSBmaXhlZCBsaW5rXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE3OTQ6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTc5NS0gKiBAc3RhdGU6IGEgcG9pbnRlciB0byBhIHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUuXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0xODMxPUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfc2V0X2ZpeGVkX2xpbmspO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTgzMy0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTgzNDogKiBwaHlsaW5rX2NyZWF0ZSgpIC0gY3JlYXRlIGEgcGh5bGluayBpbnN0YW5jZVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xODM1LSAqIEBjb25maWc6IGEgcG9pbnRlciB0byB0aGUgdGFyZ2V0IFx1MDAyNnN0cnVjdCBwaHlsaW5rX2NvbmZpZ1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTg0OC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTg0OTpzdHJ1Y3QgcGh5bGluayAqcGh5bGlua19jcmVhdGUoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE4NTAtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xOTM2LX1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTkzNzpFWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2NyZWF0ZSk7XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE5MzgtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xOTQwLSAqIHBoeWxpbmtfZGVzdHJveSgpIC0gY2xlYW51cCBhbmQgZGVzdHJveSB0aGUgcGh5bGluayBpbnN0YW5jZVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxOTQxOiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE5NDItICpcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTE5NTc9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19kZXN0cm95KTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE5NjAtICogcGh5bGlua19leHBlY3RzX3BoeSgpIC0gRGV0ZXJtaW5lIGlmIHBoeWxpbmsgZXhwZWN0cyBhIHBoeSB0byBiZSBhdHRhY2hlZFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxOTYxOiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE5NjItICpcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTIyMDY9c3RhdGljIGludCBwaHlsaW5rX2F0dGFjaF9waHkoc3RydWN0IHBoeWxpbmsgKnBsLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjIyNi0gKiBwaHlsaW5rX2Nvbm5lY3RfcGh5KCkgLSBjb25uZWN0IGEgUEhZIHRvIHRoZSBwaHlsaW5rIGluc3RhbmNlXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjIyMjc6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjIyOC0gKiBAcGh5OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZS5cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTIyNjA9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19jb25uZWN0X3BoeSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMjYzLSAqIHBoeWxpbmtfb2ZfcGh5X2Nvbm5lY3QoKSAtIGNvbm5lY3QgdGhlIFBIWSBzcGVjaWZpZWQgaW4gdGhlIERUIG1vZGUuXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjIyNjQ6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjI2NS0gKiBAZG46IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBkZXZpY2Vfbm9kZS5cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTIyNzk9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19vZl9waHlfY29ubmVjdCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMjgyLSAqIHBoeWxpbmtfZndub2RlX3BoeV9jb25uZWN0KCkgLSBjb25uZWN0IHRoZSBQSFkgc3BlY2lmaWVkIGluIHRoZSBmd25vZGUuXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjIyODM6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjI4NC0gKiBAZndub2RlOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgZndub2RlX2hhbmRsZS5cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTIzMzg9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19md25vZGVfcGh5X2Nvbm5lY3QpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjM0Mi0gKiAgIGluc3RhbmNlLlxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyMzQzOiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIzNDQtICpcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTIzNzM9c3RhdGljIHZvaWQgcGh5bGlua19saW5rX2NoYW5nZWQoc3RydWN0IHBoeWxpbmsgKnBsLCBib29sIHVwLCBjb25zdCBjaGFyICp3aGF0KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjM4Mi0gKiBwaHlsaW5rX21hY19jaGFuZ2UoKSAtIG5vdGlmeSBwaHlsaW5rIG9mIGEgY2hhbmdlIGluIE1BQyBzdGF0ZVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyMzgzOiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIzODQtICogQHVwOiBpbmRpY2F0ZXMgd2hldGhlciB0aGUgbGluayBpcyBjdXJyZW50bHkgdXAuXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yNDE1PXN0YXRpYyBpcnFyZXR1cm5fdCBwaHlsaW5rX2xpbmtfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjQyNS0gKiBwaHlsaW5rX3N0YXJ0KCkgLSBzdGFydCBhIHBoeWxpbmsgaW5zdGFuY2VcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjQyNjogKiBAcGw6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNDI3LSAqXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yNDg4PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfc3RhcnQpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjQ5MS0gKiBwaHlsaW5rX3N0b3AoKSAtIHN0b3AgYSBwaHlsaW5rIGluc3RhbmNlXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI0OTI6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjQ5My0gKlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjUyMj1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3N0b3ApO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjUyNS0gKiBwaHlsaW5rX3J4X2Nsa19zdG9wX2Jsb2NrKCkgLSBibG9jayBQSFkgYWJpbGl0eSB0byBzdG9wIHJlY2VpdmUgY2xvY2sgaW4gTFBJXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI1MjY6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjUyNy0gKlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjU1MT1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3J4X2Nsa19zdG9wX2Jsb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI1NTQtICogcGh5bGlua19yeF9jbGtfc3RvcF91bmJsb2NrKCkgLSB1bmJsb2NrIFBIWSBhYmlsaXR5IHRvIHN0b3AgcmVjZWl2ZSBjbG9ja1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNTU1OiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI1NTYtICpcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI1OTM9c3RhdGljIGJvb2wgcGh5bGlua19waHlfcG1fc3BlZWRfY3RybChzdHJ1Y3QgcGh5bGluayAqcGwpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNjAwLSAqIHBoeWxpbmtfc3VzcGVuZCgpIC0gaGFuZGxlIGEgbmV0d29yayBkZXZpY2Ugc3VzcGVuZCBldmVudFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNjAxOiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI2MDItICogQG1hY193b2w6IHRydWUgaWYgdGhlIE1BQyBuZWVkcyB0byByZWNlaXZlIHBhY2tldHMgZm9yIFdha2Utb24tTGFuXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yNjUyPUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfc3VzcGVuZCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNjU1LSAqIHBoeWxpbmtfcHJlcGFyZV9yZXN1bWUoKSAtIHByZXBhcmUgdG8gcmVzdW1lIGEgbmV0d29yayBkZXZpY2VcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjY1NjogKiBAcGw6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNjU3LSAqXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yNjc3PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfcHJlcGFyZV9yZXN1bWUpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjY4MC0gKiBwaHlsaW5rX3Jlc3VtZSgpIC0gaGFuZGxlIGEgbmV0d29yayBkZXZpY2UgcmVzdW1lIGV2ZW50XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI2ODE6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjY4Mi0gKlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjcyMD1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3Jlc3VtZSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNzIzLSAqIHBoeWxpbmtfZXRodG9vbF9nZXRfd29sKCkgLSBnZXQgdGhlIHdha2Ugb24gbGFuIHBhcmFtZXRlcnMgZm9yIHRoZSBQSFlcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjcyNDogKiBAcGw6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNzI1LSAqIEB3b2w6IGEgcG9pbnRlciB0byBcdTAwMjZzdHJ1Y3QgZXRodG9vbF93b2xpbmZvIHRvIGhvbGQgdGhlIHJlYWQgcGFyYW1ldGVyc1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9Mjc1Nz1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2V0aHRvb2xfZ2V0X3dvbCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNzYwLSAqIHBoeWxpbmtfZXRodG9vbF9zZXRfd29sKCkgLSBzZXQgd2FrZSBvbiBsYW4gcGFyYW1ldGVyc1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNzYxOiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI3NjItICogQHdvbDogYSBwb2ludGVyIHRvIFx1MDAyNnN0cnVjdCBldGh0b29sX3dvbGluZm8gZm9yIHRoZSBkZXNpcmVkIHBhcmFtZXRlcnNcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI4ODk9c3RhdGljIHZvaWQgcGh5bGlua19nZXRfa3NldHRpbmdzKGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjkwNC0gKiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX2dldCgpIC0gZ2V0IHRoZSBjdXJyZW50IGxpbmsgc2V0dGluZ3NcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjkwNTogKiBAcGw6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yOTA2LSAqIEBrc2V0OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyB0byBob2xkIGxpbmsgc2V0dGluZ3Ncbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI5NTc9c3RhdGljIGJvb2wgcGh5bGlua192YWxpZGF0ZV9wY3NfaW5iYW5kX2F1dG9uZWcoc3RydWN0IHBoeWxpbmsgKnBsLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjk3OC0gKiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldCgpIC0gc2V0IHRoZSBsaW5rIHNldHRpbmdzXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI5Nzk6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjk4MC0gKiBAa3NldDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgZm9yIHRoZSBkZXNpcmVkIG1vZGVzXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMTQ1PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMxNDgtICogcGh5bGlua19ldGh0b29sX253YXlfcmVzZXQoKSAtIHJlc3RhcnQgbmVnb3RpYXRpb25cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzE0OTogKiBAcGw6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMTUwLSAqXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMTcwPUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZXRodG9vbF9ud2F5X3Jlc2V0KTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMxNzMtICogcGh5bGlua19ldGh0b29sX2dldF9wYXVzZXBhcmFtKCkgLSBnZXQgdGhlIGN1cnJlbnQgcGF1c2UgcGFyYW1ldGVyc1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozMTc0OiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMxNzUtICogQHBhdXNlOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMTg2PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZXRodG9vbF9nZXRfcGF1c2VwYXJhbSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMTg5LSAqIHBoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbSgpIC0gc2V0IHRoZSBjdXJyZW50IHBhdXNlIHBhcmFtZXRlcnNcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzE5MDogKiBAcGw6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMTkxLSAqIEBwYXVzZTogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzI3Mj1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0pO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzI3Ni0gKiAgIGNvdW50ZXJcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzI3NzogKiBAcGw6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKS5cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzI3OC0gKlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzI5NT1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2dldF9lZWVfZXJyKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMyOTgtICogcGh5bGlua19ldGh0b29sX2dldF9lZWUoKSAtIHJlYWQgdGhlIGVuZXJneSBlZmZpY2llbnQgZXRoZXJuZXQgcGFyYW1ldGVyc1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozMjk5OiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMzMDAtICogQGVlZTogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IGV0aHRvb2xfa2VlZSBmb3IgdGhlIHJlYWQgcGFyYW1ldGVyc1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzMyMT1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2V0aHRvb2xfZ2V0X2VlZSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzI0LSAqIHBoeWxpbmtfZXRodG9vbF9zZXRfZWVlKCkgLSBzZXQgdGhlIGVuZXJneSBlZmZpY2llbnQgZXRoZXJuZXQgcGFyYW1ldGVyc1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozMzI1OiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMzMjYtICogQGVlZTogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IGV0aHRvb2xfa2VlZSBmb3IgdGhlIGRlc2lyZWQgcGFyYW1ldGVyc1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzQ5NT1zdGF0aWMgaW50IHBoeWxpbmtfbWlpX3dyaXRlKHN0cnVjdCBwaHlsaW5rICpwbCwgdW5zaWduZWQgaW50IHBoeV9pZCxcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTM1MTMtICogcGh5bGlua19taWlfaW9jdGwoKSAtIGdlbmVyaWMgbWlpIGlvY3RsIGludGVyZmFjZVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozNTE0OiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTM1MTUtICogQGlmcjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IGlmcmVxIGZvciBzb2NrZXQgaW9jdGxzXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zNTg4PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfbWlpX2lvY3RsKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTM1OTItICogICBsaW5rIHBhcnRuZXJzXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjM1OTM6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzU5NC0gKiBAc3luYzogcGVyZm9ybSBhY3Rpb24gc3luY2hyb25vdXNseVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzYxMz1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3NwZWVkX2Rvd24pO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzYxNy0gKiAgIHBoeWxpbmtfc3BlZWRfZG93bigpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjM2MTg6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzYxOS0gKlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9NDM3MD1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX21paV9jNDVfcGNzX2dldF9zdGF0ZSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00Mzc0LSAqXHRcdFx0XHQgd2hpY2ggbG9zZXMgc3RhdGVcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6NDM3NTogKiBAcGw6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00Mzc2LSAqXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz00MzkxPUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfcmVwbGF5X2xpbmtfYmVnaW4pO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDM5NS0gKlx0XHRcdCAgICAgICB3aGljaCBsb3N0IHN0YXRlXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjQzOTY6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDM5Ny0gKlxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz03OTk9c3RhdGljIGludCBheDg4NzcyX3BoeWxpbmtfc2V0dXAoc3RydWN0IHVzYm5ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy04MTktXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6ODIwOlx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFx1MDAyNnByaXYtXHUwMDNlcGh5bGlua19jb25maWcsIGRldi1cdTAwM2VuZXQtXHUwMDNlZGV2LmZ3bm9kZSxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy04MjEtXHRcdFx0XHQgcGh5X2lmX21vZGUsIFx1MDAyNmF4ODg3NzJfcGh5bGlua19tYWNfb3BzKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTI3OTk9c3RhdGljIGludCBsYW43OHh4X3BoeWxpbmtfc2V0dXAoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yODM4LVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyODM5Olx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKHBjLCBkZXYtXHUwMDNlbmV0LVx1MDAzZWRldi5md25vZGUsXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTI4NDAtXHRcdFx0XHQgZGV2LVx1MDAzZWludGVyZmFjZSwgXHUwMDI2bGFuNzh4eF9waHlsaW5rX21hY19vcHMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODQzMwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUkgU3VwcG9ydCoqCgpPa2F5LCBzbyBgcGh5bGlua19jcmVhdGVgIGlzIGEgcHJldHR5IHdpZGVseSB1c2VkIGZ1bmN0aW9uLCBjYWxsZWQgYnkgYSBidW5jaCBvZiBuZXR3b3JrIGRyaXZlcnM6IGBsYW43OHh4YCwgYGFzaXhfZGV2aWNlc2AsIGBzdG1tYWNgLCB0aGUgd2hvbGUgbGlzdC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBjYW4gKmFueSogb2YgdGhlc2UgZHJpdmVycyBhY3R1YWxseSBjb25maWd1cmUgYSBQSFkgdXNpbmcgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgPyBUaGF0JiMzOTtzIHdoYXQgSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dC4KClJpZ2h0LCBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAgaXMgZWl0aGVyIGFuIGFyZ3VtZW50IHRvIGBwaHlsaW5rX2NyZWF0ZWAgKm9yKiBpdCYjMzk7cyBzZXQgbGF0ZXIgdmlhIGBwaHlsaW5rX3NldF9wb3J0X21vZGVzYC4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSBpZiB0aGVzZSBkcml2ZXJzIGV2ZW4gKnN1cHBvcnQqIHRoYXQgbW9kZS4gSSBrbm93IEkgYWxyZWFkeSBncmVwcGVkIHRoZSBgZHJpdmVycy9uZXQvYCBkaXJlY3RvcnkgZm9yIGl0LiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBncmVwIHJlc3VsdHMgd2VyZSBwcmV0dHkgdW5pbnRlcmVzdGluZzsgYHBoeS1jb3JlLmNgLCBgcGh5X2NhcHMuY2AsIGFuZCBgcGh5bGluay5jYCBhbmQgYHFjYTgwN3guY2AuIFNvIHRoZSBkcml2ZXIgc2VlbXMgbGlrZSBpdCBpc24mIzM5O3QgZGlyZWN0bHkgc3VwcG9ydGluZyB0aGlzLgoKSWYgbm8gTUFDIGRyaXZlciBleHBsaWNpdGx5IHN1cHBvcnRzIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYCwgaG93IGNvdWxkIGl0IHBvc3NpYmx5IGJlIHJlYWNoZWQ/IFRoYXQmIzM5O3MgdGhlIHJlYWwgcHV6emxlLiBBaGEsIG1heWJlIGl0JiMzOTtzIHBhcnNlZCBmcm9tIHRoZSBkZXZpY2UgdHJlZT8gSW4gYHBoeWxpbmtfcGFyc2VfbW9kZWAsIGl0IGxvb2tzIGxpa2UgYHBoeS1tb2RlYCBpcyBwYXJzZWQgZnJvbSB0aGUgZGV2aWNlIHRyZWUsIHRoYXQgbWlnaHQgZG8gdGhlIHRyaWNrLiBJZiBJIGNvdWxkIGluamVjdCBhIGRldmljZSB0cmVlIG5vZGUgd2l0aCBgcGh5LW1vZGUgPSAmIzM0O3BzZ21paSYjMzQ7YCwgdGhlbiBgcGh5bGlua19jcmVhdGVgICptaWdodCogcGFyc2UgaXQgYW5kIHNldCBgcGwtJmd0O2xpbmtfY29uZmlnLmludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgLgoKTm93LCB3YWl0IGEgbWludXRlLCBgcGh5bGlua19jcmVhdGVgIHRha2VzIGFuIGBwaHlfaW50ZXJmYWNlX3QgaWZhY2VgIGFyZ3VtZW50LiBJZiB0aGF0IGFyZ3VtZW50IGlzIGBQSFlfSU5URVJGQUNFX01PREVfTkFgLCB0aGVuIGl0IG1pZ2h0IHBhcnNlIGl0IGZyb20gdGhlIGZ3bm9kZS4gT2theSwgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gbG9vayBjbG9zZXIuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBjb2RlIGFyb3VuZCBgcGh5bGlua19jcmVhdGVgIGZvciBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODQ5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NDk6XHRzdHJ1Y3QgcGh5bGluayAqcGh5bGlua19jcmVhdGUoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4xODUwOlx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsXG4xODUxOlx0XHRcdFx0ICAgICAgIHBoeV9pbnRlcmZhY2VfdCBpZmFjZSxcbjE4NTI6XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyAqbWFjX29wcylcbjE4NTM6XHR7XG4xODU0Olx0XHRzdHJ1Y3QgcGh5bGluayAqcGw7XG4xODU1Olx0XHRpbnQgcmV0O1xuMTg1NjpcdFxuMTg1NzpcdFx0LyogVmFsaWRhdGUgdGhlIHN1cHBsaWVkIGNvbmZpZ3VyYXRpb24gKi9cbjE4NTg6XHRcdGlmIChwaHlfaW50ZXJmYWNlX2VtcHR5KGNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcykpIHtcbjE4NTk6XHRcdFx0ZGV2X2Vycihjb25maWctXHUwMDNlZGV2LFxuMTg2MDpcdFx0XHRcdFwmIzM0O3BoeWxpbms6IGVycm9yOiBlbXB0eSBzdXBwb3J0ZWRfaW50ZXJmYWNlc1xcblwmIzM0Oyk7XG4xODYxOlx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuMTg2MjpcdFx0fVxuMTg2MzpcdFxuMTg2NDpcdFx0cGwgPSBremFsbG9jX29iaigqcGwpO1xuMTg2NTpcdFx0aWYgKCFwbClcbjE4NjY6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4xODY3Olx0XG4xODY4Olx0XHRtdXRleF9pbml0KFx1MDAyNnBsLVx1MDAzZXBoeWRldl9tdXRleCk7XG4xODY5Olx0XHRtdXRleF9pbml0KFx1MDAyNnBsLVx1MDAzZXN0YXRlX211dGV4KTtcbjE4NzA6XHRcdElOSVRfV09SSyhcdTAwMjZwbC1cdTAwM2VyZXNvbHZlLCBwaHlsaW5rX3Jlc29sdmUpO1xuMTg3MTpcdFxuMTg3MjpcdFx0cGwtXHUwMDNlY29uZmlnID0gY29uZmlnO1xuMTg3MzpcdFx0aWYgKGNvbmZpZy1cdTAwM2V0eXBlID09IFBIWUxJTktfTkVUREVWKSB7XG4xODc0Olx0XHRcdHBsLVx1MDAzZW5ldGRldiA9IHRvX25ldF9kZXYoY29uZmlnLVx1MDAzZWRldik7XG4xODc1Olx0XHRcdG5ldGlmX2NhcnJpZXJfb2ZmKHBsLVx1MDAzZW5ldGRldik7XG4xODc2Olx0XHR9IGVsc2UgaWYgKGNvbmZpZy1cdTAwM2V0eXBlID09IFBIWUxJTktfREVWKSB7XG4xODc3Olx0XHRcdHBsLVx1MDAzZWRldiA9IGNvbmZpZy1cdTAwM2VkZXY7XG4xODc4Olx0XHR9IGVsc2Uge1xuMTg3OTpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuMTg4MDpcdFx0XHRnb3RvIGZyZWVfcGw7XG4xODgxOlx0XHR9XG4xODgyOlx0XG4xODgzOlx0XHRwbC1cdTAwM2VtYWNfc3VwcG9ydHNfZWVlX29wcyA9IHBoeWxpbmtfbWFjX2ltcGxlbWVudHNfbHBpKG1hY19vcHMpO1xuMTg4NDpcdFx0cGwtXHUwMDNlbWFjX3N1cHBvcnRzX2VlZSA9IHBsLVx1MDAzZW1hY19zdXBwb3J0c19lZWVfb3BzIFx1MDAyNlx1MDAyNlxuMTg4NTpcdFx0XHRcdCAgICAgICBwbC1cdTAwM2Vjb25maWctXHUwMDNlbHBpX2NhcGFiaWxpdGllcyBcdTAwMjZcdTAwMjZcbjE4ODY6XHRcdFx0XHQgICAgICAgIXBoeV9pbnRlcmZhY2VfZW1wdHkocGwtXHUwMDNlY29uZmlnLVx1MDAzZWxwaV9pbnRlcmZhY2VzKTtcbjE4ODc6XHRcbjE4ODg6XHRcdC8qIFNldCB0aGUgZGVmYXVsdCBFRUUgY29uZmlndXJhdGlvbiAqL1xuMTg4OTpcdFx0cGwtXHUwMDNlZWVlX2NmZy5lZWVfZW5hYmxlZCA9IHBsLVx1MDAzZWNvbmZpZy1cdTAwM2VlZWVfZW5hYmxlZF9kZWZhdWx0O1xuMTg5MDpcdFx0cGwtXHUwMDNlZWVlX2NmZy50eF9scGlfZW5hYmxlZCA9IHBsLVx1MDAzZWVlZV9jZmcuZWVlX2VuYWJsZWQ7XG4xODkxOlx0XHRwbC1cdTAwM2VlZWVfY2ZnLnR4X2xwaV90aW1lciA9IHBsLVx1MDAzZWNvbmZpZy1cdTAwM2VscGlfdGltZXJfZGVmYXVsdDtcbjE4OTI6XHRcbjE4OTM6XHRcdHBsLVx1MDAzZXBoeV9zdGF0ZS5pbnRlcmZhY2UgPSBpZmFjZTtcbjE4OTQ6XHRcdHBsLVx1MDAzZWxpbmtfaW50ZXJmYWNlID0gaWZhY2U7XG4xODk1Olx0XHRpZiAoaWZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX01PQ0EpXG4xODk2Olx0XHRcdHBsLVx1MDAzZWxpbmtfcG9ydCA9IFBPUlRfQk5DO1xuMTg5NzpcdFx0ZWxzZVxuMTg5ODpcdFx0XHRwbC1cdTAwM2VsaW5rX3BvcnQgPSBQT1JUX01JSTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxMzUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBoeUxpbmsgQ3JlYXRpb24gUHJvY2VzcyoqCgpPa2F5LCBzbyBgcGh5bGlua19jcmVhdGVgIGlzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgYSBQaHlMaW5rIHN0cnVjdHVyZS4gSSBzZWUgaXQgdGFrZXMgYW4gYGlmYWNlYCBhcmd1bWVudCBhbmQgaW1tZWRpYXRlbHkgc2V0cyB0aGUgYHBsLSZndDtwaHlfc3RhdGUuaW50ZXJmYWNlYCBtZW1iZXIgdG8gdGhhdCB2YWx1ZS4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQ7IGl0JiMzOTtzIGFzc29jaWF0aW5nIHRoZSBQaHlMaW5rIHdpdGggYSBzcGVjaWZpYyBuZXR3b3JrIGludGVyZmFjZS4gTm93LCB0aGUgbmV4dCBzdGVwIGluIHRoZSBmbG93IGlzIGNhbGxpbmcgYHBoeWxpbmtfcGFyc2VfbW9kZWAgd2l0aCB0aGUgUGh5TGluayBzdHJ1Y3R1cmUgYW5kIGEgZmlybXdhcmUgbm9kZSAoYGZ3bm9kZWApLiBUaGlzIGBwaHlsaW5rX3BhcnNlX21vZGVgIGNhbGwgaXMgY3JpdGljYWwgYmVjYXVzZSB0aGlzIGlzIHdoZXJlIHRoZSBsaW5rJiMzOTtzIG9wZXJhdGluZyBwYXJhbWV0ZXJzIG11c3QgYmUgZGV0ZXJtaW5lZC4gSXTigJlzIHdoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlIG5leHQgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhlIFBoeUxpbmsgZ2V0cyBjb25maWd1cmVkIGFmdGVyIGNyZWF0aW9uLiBMZXTigJlzIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoYXQgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc3NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzc0Olx0c3RhdGljIGludCBwaHlsaW5rX3BhcnNlX21vZGUoc3RydWN0IHBoeWxpbmsgKnBsLFxuIDc3NTpcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXG4gNzc2Olx0e1xuIDc3NzpcdFx0c3RydWN0IGZ3bm9kZV9oYW5kbGUgKmRuO1xuIDc3ODpcdFx0Y29uc3QgY2hhciAqbWFuYWdlZDtcbiA3Nzk6XHRcdHVuc2lnbmVkIGxvbmcgY2FwcztcbiA3ODA6XHRcbiA3ODE6XHRcdGlmIChwbC1cdTAwM2Vjb25maWctXHUwMDNlZGVmYXVsdF9hbl9pbmJhbmQpXG4gNzgyOlx0XHRcdHBsLVx1MDAzZWNmZ19saW5rX2FuX21vZGUgPSBNTE9fQU5fSU5CQU5EO1xuIDc4MzpcdFxuIDc4NDpcdFx0ZG4gPSBmd25vZGVfZ2V0X25hbWVkX2NoaWxkX25vZGUoZndub2RlLCBcJiMzNDtmaXhlZC1saW5rXCYjMzQ7KTtcbiA3ODU6XHRcdGlmIChkbiB8fCBmd25vZGVfcHJvcGVydHlfcHJlc2VudChmd25vZGUsIFwmIzM0O2ZpeGVkLWxpbmtcJiMzNDspKVxuIDc4NjpcdFx0XHRwbC1cdTAwM2VjZmdfbGlua19hbl9tb2RlID0gTUxPX0FOX0ZJWEVEO1xuIDc4NzpcdFx0Zndub2RlX2hhbmRsZV9wdXQoZG4pO1xuIDc4ODpcdFxuIDc4OTpcdFx0aWYgKChmd25vZGVfcHJvcGVydHlfcmVhZF9zdHJpbmcoZndub2RlLCBcJiMzNDttYW5hZ2VkXCYjMzQ7LCBcdTAwMjZtYW5hZ2VkKSA9PSAwIFx1MDAyNlx1MDAyNlxuIDc5MDpcdFx0ICAgICBzdHJjbXAobWFuYWdlZCwgXCYjMzQ7aW4tYmFuZC1zdGF0dXNcJiMzNDspID09IDApKSB7XG4gNzkxOlx0XHRcdGlmIChwbC1cdTAwM2VjZmdfbGlua19hbl9tb2RlID09IE1MT19BTl9GSVhFRCkge1xuIDc5MjpcdFx0XHRcdHBoeWxpbmtfZXJyKHBsLFxuIDc5MzpcdFx0XHRcdFx0ICAgIFwmIzM0O2NhbiYjMzk7dCB1c2UgYm90aCBmaXhlZC1saW5rIGFuZCBpbi1iYW5kLXN0YXR1c1xcblwmIzM0Oyk7XG4gNzk0Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNzk1Olx0XHRcdH1cbiA3OTY6XHRcbiA3OTc6XHRcdFx0cGwtXHUwMDNlY2ZnX2xpbmtfYW5fbW9kZSA9IE1MT19BTl9JTkJBTkQ7XG4gNzk4Olx0XHR9XG4gNzk5Olx0XG4gODAwOlx0XHRpZiAocGwtXHUwMDNlY2ZnX2xpbmtfYW5fbW9kZSA9PSBNTE9fQU5fSU5CQU5EKSB7XG4gODAxOlx0XHRcdGxpbmttb2RlX3plcm8ocGwtXHUwMDNlc3VwcG9ydGVkKTtcbiA4MDI6XHRcdFx0cGh5bGlua19zZXQocGwtXHUwMDNlc3VwcG9ydGVkLCBNSUkpO1xuIDgwMzpcdFx0XHRwaHlsaW5rX3NldChwbC1cdTAwM2VzdXBwb3J0ZWQsIEF1dG9uZWcpO1xuIDgwNDpcdFx0XHRwaHlsaW5rX3NldChwbC1cdTAwM2VzdXBwb3J0ZWQsIEFzeW1fUGF1c2UpO1xuIDgwNTpcdFx0XHRwaHlsaW5rX3NldChwbC1cdTAwM2VzdXBwb3J0ZWQsIFBhdXNlKTtcbiA4MDY6XHRcbiA4MDc6XHRcdFx0c3dpdGNoIChwbC1cdTAwM2VsaW5rX2NvbmZpZy5pbnRlcmZhY2UpIHtcbiA4MDg6XHRcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XG4gODA5Olx0XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcbiA4MTA6XHRcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxuIDgxMTpcdFx0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RVVNHTUlJOlxuIDgxMjpcdFx0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSTpcbiA4MTM6XHRcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfSUQ6XG4gODE0Olx0XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1JYSUQ6XG4gODE1Olx0XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1RYSUQ6XG4gODE2Olx0XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JUQkk6XG4gODE3Olx0XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWDpcbiA4MTg6XHRcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMjUwMEJBU0VYOlxuIDgxOTpcdFx0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV81R0JBU0VSOlxuIDgyMDpcdFx0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8yNUdCQVNFUjpcbiA4MjE6XHRcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSTpcbiA4MjI6XHRcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTBHX1FYR01JSTpcbiA4MjM6XHRcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTBHS1I6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzA5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgUGh5bGluayBJbnRlcmZhY2UqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgcGh5bGlua19wYXJzZV9tb2RlYCBmdW5jdGlvbiBhbmQgaXQmIzM5O3MgdXNpbmcgYHBsLSZndDtsaW5rX2NvbmZpZy5pbnRlcmZhY2VgLiBSaWdodCwgcmlnaHQsIG1ha2VzIHNlbnNlLiBCdXQgdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0JiMzOTtzIHBvcHBlZCBpbnRvIG15IGhlYWQgaXMgKndoZXJlKiBpcyB0aGF0IGBwbC0mZ3Q7bGlua19jb25maWcuaW50ZXJmYWNlYCB2YXJpYWJsZSBhY3R1YWxseSBnZXR0aW5nIHNldD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBoZXJlLiBMZXQmIzM5O3MgYmFja3RyYWNrIGFuZCByZXZpc2l0IGBwaHlsaW5rX2NyZWF0ZWAuIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJlLWV4YW1pbmUgdGhhdCBmdW5jdGlvbiBhbmQgc2VlIGlmIHRoZSBpbml0aWFsaXphdGlvbiBvciBhc3NpZ25tZW50IHRvIHRoaXMgcGFydGljdWxhciBmaWVsZCBpcyBoYW5kbGVkIHRoZXJlLiBJJiMzOTttIGdvaW5nIHRvIG1ldGljdWxvdXNseSBjaGVjayBldmVyeSBsaW5lIG9mIHRoYXQgZnVuY3Rpb24gdG8gbWFrZSBzdXJlIHRoYXQgZmllbGQgaXMgYmVpbmcgY29ycmVjdGx5IGFzc2lnbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODk5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4OTk6XHRcdHBsLVx1MDAzZWxpbmtfY29uZmlnLmludGVyZmFjZSA9IGlmYWNlO1xuMTkwMDpcdFx0cGwtXHUwMDNlbGlua19jb25maWcucGF1c2UgPSBNTE9fUEFVU0VfQU47XG4xOTAxOlx0XHRwbC1cdTAwM2VsaW5rX2NvbmZpZy5zcGVlZCA9IFNQRUVEX1VOS05PV047XG4xOTAyOlx0XHRwbC1cdTAwM2VsaW5rX2NvbmZpZy5kdXBsZXggPSBEVVBMRVhfVU5LTk9XTjtcbjE5MDM6XHRcdHBsLVx1MDAzZXBjc19zdGF0ZSA9IFBDU19TVEFURV9ET1dOO1xuMTkwNDpcdFx0cGwtXHUwMDNlbWFjX29wcyA9IG1hY19vcHM7XG4xOTA1Olx0XHRfX3NldF9iaXQoUEhZTElOS19ESVNBQkxFX1NUT1BQRUQsIFx1MDAyNnBsLVx1MDAzZXBoeWxpbmtfZGlzYWJsZV9zdGF0ZSk7XG4xOTA2Olx0XHR0aW1lcl9zZXR1cChcdTAwMjZwbC1cdTAwM2VsaW5rX3BvbGwsIHBoeWxpbmtfZml4ZWRfcG9sbCwgMCk7XG4xOTA3Olx0XG4xOTA4Olx0XHRsaW5rbW9kZV9maWxsKHBsLVx1MDAzZXN1cHBvcnRlZCk7XG4xOTA5Olx0XHRsaW5rbW9kZV9jb3B5KHBsLVx1MDAzZWxpbmtfY29uZmlnLmFkdmVydGlzaW5nLCBwbC1cdTAwM2VzdXBwb3J0ZWQpO1xuMTkxMDpcdFx0cGh5bGlua192YWxpZGF0ZShwbCwgcGwtXHUwMDNlc3VwcG9ydGVkLCBcdTAwMjZwbC1cdTAwM2VsaW5rX2NvbmZpZyk7XG4xOTExOlx0XG4xOTEyOlx0XHRyZXQgPSBwaHlsaW5rX3BhcnNlX21vZGUocGwsIGZ3bm9kZSk7XG4xOTEzOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTkxNDpcdFx0XHRnb3RvIGZyZWVfcGw7XG4xOTE1Olx0XG4xOTE2Olx0XHRpZiAocGwtXHUwMDNlY2ZnX2xpbmtfYW5fbW9kZSA9PSBNTE9fQU5fRklYRUQpIHtcbjE5MTc6XHRcdFx0cmV0ID0gcGh5bGlua19wYXJzZV9maXhlZGxpbmsocGwsIGZ3bm9kZSk7XG4xOTE4Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xOTE5Olx0XHRcdFx0Z290byByZWxlYXNlX2xpbmtfZ3BpbztcbjE5MjA6XHRcdH1cbjE5MjE6XHRcbjE5MjI6XHRcdHBsLVx1MDAzZXJlcV9saW5rX2FuX21vZGUgPSBwbC1cdTAwM2VjZmdfbGlua19hbl9tb2RlO1xuMTkyMzpcdFxuMTkyNDpcdFx0cmV0ID0gcGh5bGlua19yZWdpc3Rlcl9zZnAocGwsIGZ3bm9kZSk7XG4xOTI1Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTkyNjpcdFx0XHRnb3RvIHJlbGVhc2VfbGlua19ncGlvO1xuMTkyNzpcdFxuMTkyODpcdFx0cmV0dXJuIHBsO1xuMTkyOTpcdFxuMTkzMDpcdHJlbGVhc2VfbGlua19ncGlvOlxuMTkzMTpcdFx0aWYgKHBsLVx1MDAzZWxpbmtfZ3BpbylcbjE5MzI6XHRcdFx0Z3Bpb2RfcHV0KHBsLVx1MDAzZWxpbmtfZ3Bpbyk7XG4xOTMzOlx0ZnJlZV9wbDpcbjE5MzQ6XHRcdGtmcmVlKHBsKTtcbjE5MzU6XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4xOTM2Olx0fVxuMTkzNzpcdEVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfY3JlYXRlKTtcbjE5Mzg6XHRcbjE5Mzk6XHQvKipcbjE5NDA6XHQgKiBwaHlsaW5rX2Rlc3Ryb3koKSAtIGNsZWFudXAgYW5kIGRlc3Ryb3kgdGhlIHBoeWxpbmsgaW5zdGFuY2VcbjE5NDE6XHQgKiBAcGw6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxuMTk0MjpcdCAqXG4xOTQzOlx0ICogRGVzdHJveSBhIHBoeWxpbmsgaW5zdGFuY2UuIEFueSBQSFkgdGhhdCBoYXMgYmVlbiBhdHRhY2hlZCBtdXN0IGhhdmUgYmVlblxuMTk0NDpcdCAqIGNsZWFuZWQgdXAgdmlhIHBoeWxpbmtfZGlzY29ubmVjdF9waHkoKSBwcmlvciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXG4xOTQ1Olx0ICpcbjE5NDY6XHQgKiBOb3RlOiB0aGUgcnRubCBsb2NrIG11c3Qgbm90IGJlIGhlbGQgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXG4xOTQ3Olx0ICovXG4xOTQ4Olx0dm9pZCBwaHlsaW5rX2Rlc3Ryb3koc3RydWN0IHBoeWxpbmsgKnBsKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjM1NQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIFJlYXNvbmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhpcyBgcGwtJmd0O2xpbmtfY29uZmlnLmludGVyZmFjZWAgdmFyaWFibGUgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYmVpbmcgYXNzaWduZWQgYGlmYWNlYCwgd2hpY2ggZ2V0cyBwYXNzZWQgaW50byBgcGh5bGlua19jcmVhdGVgLiBUaGUgY3J1Y2lhbCBwb2ludCBpcyBpZiBgaWZhY2VgIGlzIGBQSFlfSU5URVJGQUNFX01PREVfTkFgLiBJZiB0aGF0JiMzOTtzIHRoZSBjYXNlLCB0aGVuIGBwaHlsaW5rX3BhcnNlX21vZGVgIHdvbiYjMzk7dCBtYXRjaCBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAuIFRoYXQmIzM5O3MgcHJvYmxlbWF0aWMuIEJ1dCB3YWl0Li4uIGlzbiYjMzk7dCBgaWZhY2VgIHR5cGljYWxseSBkZXRlcm1pbmVkIGJ5IHRoZSBNQUMgZHJpdmVyLCBiZWZvcmUgZXZlbiBnZXR0aW5nIHRvIGBwaHlsaW5rX2NyZWF0ZWA/IEkgdGhpbmsgb2YgaG93IHRoYXQgd29ya3MgaW4gcHJhY3RpY2UsIGZvciBleGFtcGxlLCB1c2luZyBzb21ldGhpbmcgbGlrZSBgb2ZfZ2V0X3BoeV9tb2RlYC4KClRoZSBxdWVzdGlvbiBiZWNvbWVzLCBjYW4gSSBtYW5pcHVsYXRlIHRoYXQgYGlmYWNlYCB2YWx1ZT8gSWYgSSBjb3VsZCBpbmplY3QgYSBkZXZpY2UgdHJlZSB3aXRoIGBwaHktbW9kZSA9ICYjMzQ7cHNnbWlpJiMzNDtgLCB0aGVuIGBwaHlfbW9kZWAgd291bGQgZGVmaW5pdGVseSBiZSBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAuIE5vdywgdGhlIHRyaWNreSBwYXJ0Li4uIGNhbiBJIGRvIHRoYXQgaW4gc3l6a2FsbGVyPyBJdCBzZWVtcyBsaWtlIHRoZXJlJiMzOTtzIHNvbWUgZGV2aWNlIHRyZWUgaW5qZWN0aW9uIHN1cHBvcnQgdmlhIHRoaW5ncyBsaWtlIGBzeXpfbW91bnRfaW1hZ2VgIG9yIG90aGVyIHBzZXVkby1zeXNjYWxscy4gQnV0IEkgcmVjYWxsIGRldmljZSB0cmVlcyBiZWluZyB1c3VhbGx5IHN0YXRpYyBpbiBRRU1VLCB1bmxlc3MgdGhlcmUgYXJlIG92ZXJsYXlzIG9yIHNvbWV0aGluZyBjbGV2ZXIgYXQgcGxheS4KCk9uIHNlY29uZCB0aG91Z2h0LCBJIGRvbiYjMzk7dCB0aGluayBzeXprYWxsZXIgKm5vcm1hbGx5KiBpbmplY3RzIGRldmljZSB0cmVlIG92ZXJsYXlzIGZvciBuZXR3b3JrIGRldmljZXMgb24gdGhlIGZseS4gSG93ZXZlciwgaXQgKmNhbiogdXNlIGBuZXRsaW5rYCB0byBjcmVhdGUgdmlydHVhbCBpbnRlcmZhY2VzLiBDb3VsZCBJIGNyZWF0ZSBhIHZpcnR1YWwgaW50ZXJmYWNlIHRoYXQgbGV2ZXJhZ2VzIGBwaHlsaW5rYCBhbmQsIGltcG9ydGFudGx5LCBhbGxvd3MgbWUgdG8gY29udHJvbCBvciBzZXQgdGhlIHBoeSBpbnRlcmZhY2UgbW9kZT8gVGhhdCYjMzk7cyB0aGUga2V5LgoKU28sIGxldCYjMzk7cyBzZWUgaWYgYW55IHZpcnR1YWwgZHJpdmVycyBhcmUgZXZlbiAqdXNpbmcqIGBwaHlsaW5rYC4gSSBjYW1lIGFjcm9zcyBgZmJuaWNgIHByZXZpb3VzbHksIGFuZCBJIGtub3cgdGhhdCB1c2VzIGBwaHlsaW5rX2NyZWF0ZWAuIEJ1dCBpcyB0aGF0IGEgdmlydHVhbCBkcml2ZXI/IEkgcmVtZW1iZXIgYGZibmljYCBiZWluZyBhIE1ldGEgbmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciwgYW5kIG1vcmUgc3BlY2lmaWNhbGx5IGEgUENJIGRldmljZSwgc28gdGhhdCYjMzk7cyBwcm9iYWJseSBub3QgdGhlIHJvdXRlIHRvIGdvLiBXaGF0IGFib3V0IHNvbWV0aGluZyBsaWtlIGBsYW43OHh4YD8gVGhhdCYjMzk7cyBhIFVTQiBkZXZpY2UuIFN5emthbGxlciBlbXVsYXRlcyBVU0IgZGV2aWNlcy4gSXQgY2FuIGRvIHRoaXMgd2l0aCBgZHVtbXlfaGNkYCBhbmQgYHN5el91c2JfY29ubmVjdGAuIFNvIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBsYW43OHh4X3BoeWxpbmtfc2V0dXBgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzk5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI3OTk6XHRzdGF0aWMgaW50IGxhbjc4eHhfcGh5bGlua19zZXR1cChzdHJ1Y3QgbGFuNzh4eF9uZXQgKmRldilcbjI4MDA6XHR7XG4yODAxOlx0XHRzdHJ1Y3QgcGh5bGlua19jb25maWcgKnBjID0gXHUwMDI2ZGV2LVx1MDAzZXBoeWxpbmtfY29uZmlnO1xuMjgwMjpcdFx0c3RydWN0IHBoeWxpbmsgKnBoeWxpbms7XG4yODAzOlx0XG4yODA0Olx0XHRwYy1cdTAwM2VkZXYgPSBcdTAwMjZkZXYtXHUwMDNlbmV0LVx1MDAzZWRldjtcbjI4MDU6XHRcdHBjLVx1MDAzZXR5cGUgPSBQSFlMSU5LX05FVERFVjtcbjI4MDY6XHRcdHBjLVx1MDAzZW1hY19jYXBhYmlsaXRpZXMgPSBNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UgfCBNQUNfMTAgfFxuMjgwNzpcdFx0XHRcdCAgICAgICBNQUNfMTAwIHwgTUFDXzEwMDBGRDtcbjI4MDg6XHRcdHBjLVx1MDAzZW1hY19tYW5hZ2VkX3BtID0gdHJ1ZTtcbjI4MDk6XHRcdHBjLVx1MDAzZWxwaV9jYXBhYmlsaXRpZXMgPSBNQUNfMTAwRkQgfCBNQUNfMTAwMEZEO1xuMjgxMDpcdFx0LypcbjI4MTE6XHRcdCAqIERlZmF1bHQgVFggTFBJIChMb3cgUG93ZXIgSWRsZSkgcmVxdWVzdCBkZWxheSBjb3VudCBpcyBzZXQgdG8gNTB1cy5cbjI4MTI6XHRcdCAqXG4yODEzOlx0XHQgKiBTb3VyY2U6IExBTjc4MDAgRG9jdW1lbnRhdGlvbiwgRFMwMDAwMTk5MkgsIFNlY3Rpb24gMTUuMS41NywgUGFnZSAyMDQuXG4yODE0Olx0XHQgKlxuMjgxNTpcdFx0ICogUmVhc29uaW5nOlxuMjgxNjpcdFx0ICogQWNjb3JkaW5nIHRvIHRoZSBhcHBsaWNhdGlvbiBub3RlIGluIHRoZSBMQU43ODAwIGRvY3VtZW50YXRpb24sIGFcbjI4MTc6XHRcdCAqIHplcm8gZGVsYXkgbWF5IG5lZ2F0aXZlbHkgaW1wYWN0IHRoZSBUWCBkYXRhIHBhdGjigJlzIGFiaWxpdHkgdG9cbjI4MTg6XHRcdCAqIHN1cHBvcnQgR2lnYWJpdCBvcGVyYXRpb24uIEEgdmFsdWUgb2YgNTB1cyBpcyByZWNvbW1lbmRlZCBhcyBhXG4yODE5Olx0XHQgKiByZWFzb25hYmxlIGRlZmF1bHQgd2hlbiB0aGUgcGFydCBvcGVyYXRlcyBhdCBHaWdhYml0IHNwZWVkcyxcbjI4MjA6XHRcdCAqIGJhbGFuY2luZyBzdGFiaWxpdHkgYW5kIHBvd2VyIGVmZmljaWVuY3kgaW4gRUVFIG1vZGUuIFRoaXMgZGVsYXkgY2FuXG4yODIxOlx0XHQgKiBiZSBpbmNyZWFzZWQgYmFzZWQgb24gcGVyZm9ybWFuY2UgdGVzdGluZywgYXMgRUVFIGlzIGRlc2lnbmVkIGZvclxuMjgyMjpcdFx0ICogc2NlbmFyaW9zIHdpdGggbW9zdGx5IGlkbGUgbGlua3MgYW5kIG9jY2FzaW9uYWwgYnVyc3RzIG9mIGZ1bGxcbjI4MjM6XHRcdCAqIGJhbmR3aWR0aCB0cmFuc21pc3Npb24uIFRoZSBnb2FsIGlzIHRvIGVuc3VyZSByZWxpYWJsZSBHaWdhYml0XG4yODI0Olx0XHQgKiBwZXJmb3JtYW5jZSB3aXRob3V0IG92ZXJseSBhZ2dyZXNzaXZlIHBvd2VyIG9wdGltaXphdGlvbiBkdXJpbmdcbjI4MjU6XHRcdCAqIGluYWN0aXZlIHBlcmlvZHMuXG4yODI2Olx0XHQgKi9cbjI4Mjc6XHRcdHBjLVx1MDAzZWxwaV90aW1lcl9kZWZhdWx0ID0gNTA7XG4yODI4Olx0XHRwYy1cdTAwM2VlZWVfZW5hYmxlZF9kZWZhdWx0ID0gdHJ1ZTtcbjI4Mjk6XHRcbjI4MzA6XHRcdGlmIChkZXYtXHUwMDNlY2hpcGlkID09IElEX1JFVl9DSElQX0lEXzc4MDFfKVxuMjgzMTpcdFx0XHRwaHlfaW50ZXJmYWNlX3NldF9yZ21paShwYy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4yODMyOlx0XHRlbHNlXG4yODMzOlx0XHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfR01JSSwgcGMtXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuMjgzNDpcdFxuMjgzNTpcdFx0bWVtY3B5KGRldi1cdTAwM2VwaHlsaW5rX2NvbmZpZy5scGlfaW50ZXJmYWNlcyxcbjI4MzY6XHRcdCAgICAgICBkZXYtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMsXG4yODM3Olx0XHQgICAgICAgc2l6ZW9mKGRldi1cdTAwM2VwaHlsaW5rX2NvbmZpZy5scGlfaW50ZXJmYWNlcykpO1xuMjgzODpcdFxuMjgzOTpcdFx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKHBjLCBkZXYtXHUwMDNlbmV0LVx1MDAzZWRldi5md25vZGUsXG4yODQwOlx0XHRcdFx0XHQgZGV2LVx1MDAzZWludGVyZmFjZSwgXHUwMDI2bGFuNzh4eF9waHlsaW5rX21hY19vcHMpO1xuMjg0MTpcdFx0aWYgKElTX0VSUihwaHlsaW5rKSlcbjI4NDI6XHRcdFx0cmV0dXJuIFBUUl9FUlIocGh5bGluayk7XG4yODQzOlx0XG4yODQ0Olx0XHRkZXYtXHUwMDNlcGh5bGluayA9IHBoeWxpbms7XG4yODQ1Olx0XG4yODQ2Olx0XHRyZXR1cm4gMDtcbjI4NDc6XHR9XG4yODQ4Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTUyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6CgoqKk5ldHdvcmsgSW50ZXJmYWNlIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYWJvdXQgaG93IHRoZSBgbGFuNzh4eGAgZHJpdmVyIGhhbmRsZXMgaXRzIGludGVyZmFjZSBjb25maWd1cmF0aW9uLiBJdCBzZWVtcyBwcmV0dHkgY2xlYXIgdGhhdCB0aGUgZHJpdmVyIGlzIGV4cGxpY2l0bHkgc2V0dGluZyBgZGV2LSZndDtpbnRlcmZhY2VgIHRvIGVpdGhlciBgUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUlgIG9yIGBSR01JSWAuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkLCBhbmQgaXQgZG9lc24mIzM5O3QgYXBwZWFyIHRvIGJlIHRvdWNoaW5nICphbnkqIGBQU0dNSUlgIGNvbmZpZ3VyYXRpb25zLiBJIHdvbmRlciB3aGF0IHRoZSByYXRpb25hbGUgaXMgYmVoaW5kIHRoaXMgc3BlY2lmaWMgYXBwcm9hY2guIElzIGl0IGEgaGFyZHdhcmUgbGltaXRhdGlvbiwgb3IgYSBkZXNpZ24gY2hvaWNlIGZvciBzb21lIG90aGVyIHJlYXNvbj8gSSYjMzk7bGwgcHJvYmFibHkgaGF2ZSB0byBkaWcgaW50byB0aGUgZGF0YXNoZWV0IGZvciB0aGF0IG9uZS4KCk5vdywgdGhhdCBicmluZ3MgdXAgYW5vdGhlciByZWxhdGVkIHBvaW50IC0gSSBzaG91bGQgcHJvYmFibHkgYWxzbyBxdWlja2x5IHJldmlldyBob3cgdGhlIGBhc2l4X2RldmljZXNgIGhhbmRsZSB0aGlzIHNhbWUgYXJlYS4gQXJlIHRoZXkgdXNpbmcgdGhlIHNhbWUgbWV0aG9kcywgb3IgZG8gdGhleSBkaXZlcmdlIGluIHRoZWlyIGludGVyZmFjZSBtb2RlIHNldHVwPyBJIGhhdmUgYSBmZWVsaW5nIHRoYXQgdGhleSYjMzk7bGwgdXNlIHNvbWV0aGluZyBzaW1pbGFyLCBvciBwZXJoYXBzIGhhdmUgc29tZSBjb21tb24gdXRpbGl0eSBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgZHJpdmVyIGNvZGUgaW4gdGhhdCBmYW1pbHkgZm9yIGNvbXBhcmlzb24uIEl0JiMzOTtzIGFsd2F5cyBiZW5lZmljaWFsIHRvIGNvbXBhcmUgdGhlIGRpZmZlcmVudCBkcml2ZXJzJiMzOTsgYXBwcm9hY2hlcyB0byBlbnN1cmUgdGhlIGJlc3QgZGVzaWduIGlzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzk5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3OTk6XHRzdGF0aWMgaW50IGF4ODg3NzJfcGh5bGlua19zZXR1cChzdHJ1Y3QgdXNibmV0ICpkZXYpXG4gODAwOlx0e1xuIDgwMTpcdFx0c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4gODAyOlx0XHRwaHlfaW50ZXJmYWNlX3QgcGh5X2lmX21vZGU7XG4gODAzOlx0XHRzdHJ1Y3QgcGh5bGluayAqcGh5bGluaztcbiA4MDQ6XHRcbiA4MDU6XHRcdHByaXYtXHUwMDNlcGh5bGlua19jb25maWcuZGV2ID0gXHUwMDI2ZGV2LVx1MDAzZW5ldC1cdTAwM2VkZXY7XG4gODA2Olx0XHRwcml2LVx1MDAzZXBoeWxpbmtfY29uZmlnLnR5cGUgPSBQSFlMSU5LX05FVERFVjtcbiA4MDc6XHRcdHByaXYtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyA9IE1BQ19TWU1fUEFVU0UgfCBNQUNfQVNZTV9QQVVTRSB8XG4gODA4Olx0XHRcdE1BQ18xMCB8IE1BQ18xMDA7XG4gODA5Olx0XG4gODEwOlx0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMLFxuIDgxMTpcdFx0XHQgIHByaXYtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuIDgxMjpcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJLFxuIDgxMzpcdFx0XHQgIHByaXYtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuIDgxNDpcdFxuIDgxNTpcdFx0aWYgKHByaXYtXHUwMDNlZW1iZF9waHkpXG4gODE2Olx0XHRcdHBoeV9pZl9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xuIDgxNzpcdFx0ZWxzZVxuIDgxODpcdFx0XHRwaHlfaWZfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJO1xuIDgxOTpcdFxuIDgyMDpcdFx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFx1MDAyNnByaXYtXHUwMDNlcGh5bGlua19jb25maWcsIGRldi1cdTAwM2VuZXQtXHUwMDNlZGV2LmZ3bm9kZSxcbiA4MjE6XHRcdFx0XHRcdCBwaHlfaWZfbW9kZSwgXHUwMDI2YXg4ODc3Ml9waHlsaW5rX21hY19vcHMpO1xuIDgyMjpcdFx0aWYgKElTX0VSUihwaHlsaW5rKSlcbiA4MjM6XHRcdFx0cmV0dXJuIFBUUl9FUlIocGh5bGluayk7XG4gODI0Olx0XG4gODI1Olx0XHRwcml2LVx1MDAzZXBoeWxpbmsgPSBwaHlsaW5rO1xuIDgyNjpcdFx0cmV0dXJuIDA7XG4gODI3Olx0fVxuIDgyODpcdFxuIDgyOTpcdHN0YXRpYyBpbnQgYXg4ODc3Ml9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4gODMwOlx0e1xuIDgzMTpcdFx0c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKnByaXY7XG4gODMyOlx0XHR1OCBidWZbRVRIX0FMRU5dID0gezB9O1xuIDgzMzpcdFx0aW50IHJldCwgaTtcbiA4MzQ6XHRcbiA4MzU6XHRcdHByaXYgPSBkZXZtX2t6YWxsb2MoXHUwMDI2ZGV2LVx1MDAzZXVkZXYtXHUwMDNlZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbiA4MzY6XHRcdGlmICghcHJpdilcbiA4Mzc6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gODM4Olx0XG4gODM5Olx0XHRkZXYtXHUwMDNlZHJpdmVyX3ByaXYgPSBwcml2O1xuIDg0MDpcdFxuIDg0MTpcdFx0cmV0ID0gdXNibmV0X2dldF9lbmRwb2ludHMoZGV2LCBpbnRmKTtcbiA4NDI6XHRcdGlmIChyZXQpXG4gODQzOlx0XHRcdHJldHVybiByZXQ7XG4gODQ0Olx0XG4gODQ1Olx0XHQvKiBNYXliZSB0aGUgYm9vdCBsb2FkZXIgcGFzc2VkIHRoZSBNQUMgYWRkcmVzcyB2aWEgZGV2aWNlIHRyZWUgKi9cbiA4NDY6XHRcdGlmICghZXRoX3BsYXRmb3JtX2dldF9tYWNfYWRkcmVzcyhcdTAwMjZkZXYtXHUwMDNldWRldi1cdTAwM2VkZXYsIGJ1ZikpIHtcbiA4NDc6XHRcdFx0bmV0aWZfZGJnKGRldiwgaWZ1cCwgZGV2LVx1MDAzZW5ldCxcbiA4NDg6XHRcdFx0XHQgIFwmIzM0O01BQyBhZGRyZXNzIHJlYWQgZnJvbSBkZXZpY2UgdHJlZVwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MzE1CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHN1bW1hcnk6CgoqKkFuYWx5emluZyBOZXR3b3JrIEludGVyZmFjZSBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIG5ldHdvcmsgaW50ZXJmYWNlIGlzIGNvbmZpZ3VyZWQuIE15IGluaXRpYWwgY2x1ZSBpcyB0aGUgbWVudGlvbiBvZiBlaXRoZXIgYElOVEVSTkFMYCBvciBgUk1JSWAg4oCTIHRoYXQgdGVsbHMgbWUgaXQmIzM5O3MgbGlrZWx5IGFuIGludGVybmFsIFBIWSBvciB1c2luZyBhIFJlZHVjZWQgTWVkaWEgSW5kZXBlbmRlbnQgSW50ZXJmYWNlLiBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGRyaXZlciBmaWxlIGBxY2E4MDd4LmNgIGFzIGEgbGlrZWx5IGNhbmRpZGF0ZSwgYW5kIGZyb20gdGhlcmUgSSB3aWxsIHZlcmlmeSB0aGUgUEhZIGNvbmZpZ3VyYXRpb24gdG8gc2VlIGlmIGl0IG1ha2VzIHVzZSBvZiBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAuIEJhc2VkIG9uIHRoYXQsIEkgY2FuIGRlZHVjZSB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gYW5kIGludGVyZmFjZSBtb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTQwOlx0XHRcdHByaXYtXHUwMDNldHhfZHJpdmVfc3RyZW5ndGggPSBQUVNHTUlJX1RYX0RSSVZFUl82MDBNVjtcbiA1NDE6XHRcdFx0YnJlYWs7XG4gNTQyOlx0XHRkZWZhdWx0OlxuIDU0MzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1NDQ6XHRcdH1cbiA1NDU6XHRcbiA1NDY6XHRcdHByaXYtXHUwMDNlcGFja2FnZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX05BO1xuIDU0NzpcdFx0aWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgXCYjMzQ7cWNvbSxwYWNrYWdlLW1vZGVcJiMzNDssXG4gNTQ4Olx0XHRcdFx0XHQgICAgIFx1MDAyNnBhY2thZ2VfbW9kZV9uYW1lKSkge1xuIDU0OTpcdFx0XHRpZiAoIXN0cmNhc2VjbXAocGFja2FnZV9tb2RlX25hbWUsXG4gNTUwOlx0XHRcdFx0XHRwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSSkpKVxuIDU1MTpcdFx0XHRcdHByaXYtXHUwMDNlcGFja2FnZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTtcbiA1NTI6XHRcdFx0ZWxzZSBpZiAoIXN0cmNhc2VjbXAocGFja2FnZV9tb2RlX25hbWUsXG4gNTUzOlx0XHRcdFx0XHQgICAgIHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJKSkpXG4gNTU0Olx0XHRcdFx0cHJpdi1cdTAwM2VwYWNrYWdlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJO1xuIDU1NTpcdFx0XHRlbHNlXG4gNTU2Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTU3Olx0XHR9XG4gNTU4Olx0XG4gNTU5Olx0XHRyZXR1cm4gMDtcbiA1NjA6XHR9XG4gNTYxOlx0XG4gNTYyOlx0c3RhdGljIGludCBxY2E4MDd4X3BoeV9wYWNrYWdlX2NvbmZpZ19pbml0X29uY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiA1NjM6XHR7XG4gNTY0Olx0XHRzdHJ1Y3QgcWNhODA3eF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4gNTY1Olx0XHRpbnQgdmFsLCByZXQ7XG4gNTY2Olx0XG4gNTY3Olx0XHQvKiBNYWtlIHN1cmUgUEhZIGZvbGxvdyBQSFkgcGFja2FnZSBtb2RlIGlmIGVuZm9yY2VkICovXG4gNTY4Olx0XHRpZiAocHJpdi1cdTAwM2VwYWNrYWdlX21vZGUgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX05BIFx1MDAyNlx1MDAyNlxuIDU2OTpcdFx0ICAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgIT0gcHJpdi1cdTAwM2VwYWNrYWdlX21vZGUpXG4gNTcwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDU3MTpcdFxuIDU3MjpcdFx0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcbiA1NzM6XHRcbiA1NzQ6XHRcdC8qIFNldCBjb3JyZWN0IFBIWSBwYWNrYWdlIG1vZGUgKi9cbiA1NzU6XHRcdHZhbCA9IF9fcGh5X3BhY2thZ2VfcmVhZChwaHlkZXYsIFFDQTgwN1hfQ09NQk9fQUREUixcbiA1NzY6XHRcdFx0XHRcdCBRQ0E4MDdYX0NISVBfQ09ORklHVVJBVElPTik7XG4gNTc3Olx0XHR2YWwgXHUwMDI2PSB+UUNBODA3WF9DSElQX0NPTkZJR1VSQVRJT05fTU9ERV9DRkdfTUFTSztcbiA1Nzg6XHRcdC8qIHBhY2thZ2VfbW9kZSBjYW4gYmUgUVNHTUlJIG9yIFBTR01JSSBhbmQgd2UgdmFsaWRhdGVcbiA1Nzk6XHRcdCAqIHRoaXMgaW4gcHJvYmVfb25jZS5cbiA1ODA6XHRcdCAqIFdpdGggcGFja2FnZV9tb2RlIHRvIE5BLCB3ZSBkZWZhdWx0IHRvIFBTR01JSS5cbiA1ODE6XHRcdCAqL1xuIDU4MjpcdFx0c3dpdGNoIChwcml2LVx1MDAzZXBhY2thZ2VfbW9kZSkge1xuIDU4MzpcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxuIDU4NDpcdFx0XHR2YWwgfD0gUUNBODA3WF9DSElQX0NPTkZJR1VSQVRJT05fTU9ERV9RU0dNSUlfU0dNSUk7XG4gNTg1Olx0XHRcdGJyZWFrO1xuIDU4NjpcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxuIDU4NzpcdFx0ZGVmYXVsdDpcbiA1ODg6XHRcdFx0dmFsIHw9IFFDQTgwN1hfQ0hJUF9DT05GSUdVUkFUSU9OX01PREVfUFNHTUlJX0FMTF9DT1BQRVI7XG4gNTg5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MzgzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogODUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIENvZGUgUGF0aCBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBtb2RpZnlpbmcgYHBoeWxpbmsuY2AsIHdoaWNoIGlzIHRoZSBjb3JlIGZyYW1ld29yayBmb3IgbWFuYWdpbmcgdGhlIGxpbmsgYmV0d2VlbiBhIE1BQyBhbmQgYSBQSFkuIFRoZSBwYXRjaCBhZGRzIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYCB0byB3aGF0IGBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZWAgcmV0dXJucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gSWYgYSBNQUMgZHJpdmVyIHVzZXMgYHBoeWxpbmtgIGFuZCBpdCYjMzk7cyBjb25maWd1cmVkIGZvciBQU0dNSUksIHRoaXMgZnVuY3Rpb24gd2lsbCBub3cgcmVwb3J0IGFuIGBJTkJBTkRfQ0lTQ09fU0dNSUlgIHR5cGUuJiMzNDsKCkJ1dCBoZXJlJiMzOTtzIHRoZSBraWNrZXI6IEkgbmVlZCB0byBmaWd1cmUgb3V0ICpob3cqIGEgTUFDIGRyaXZlciB3b3VsZCBhY3R1YWxseSBnZXQgc2V0IHVwIHdpdGggYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgLiBJIGRpZCBhIHF1aWNrIGdyZXAgb2YgdGhlIGBkcml2ZXJzL25ldC9gIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFueSBtZW50aW9ucyBvZiBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAuIFN1cnByaXNpbmdseSwgdGhlIG9ubHkgaGl0cyB3ZXJlIHdpdGhpbiB0aGUgUEhZIGNvcmUgY29kZSBpdHNlbGYsIG9yIHRoaXMgYHFjYTgwN3hgIFBIWSBkcml2ZXIuIE5vIE1BQyBkcml2ZXJzIHNlZW1lZCB0byBiZSBleHBsaWNpdGx5IHVzaW5nIG9yIHNldHRpbmcgdGhpcyBtb2RlIGRpcmVjdGx5LiBUaGlzIGlzIHJhaXNpbmcgYSByZWQgZmxhZy4KClRoZW4gSSByZW1lbWJlcmVkOiBgb2ZfZ2V0X3BoeV9tb2RlYCEgTUFDIGRyaXZlcnMgZnJlcXVlbnRseSB1c2UgdGhpcyB0byBnZXQgdGhlIFBIWSBpbnRlcmZhY2UgbW9kZSBmcm9tIHRoZSBkZXZpY2UgdHJlZS4gU28sIGlmIHRoZSBkZXZpY2UgdHJlZSBmb3IgYSBzcGVjaWZpYyBoYXJkd2FyZSBoYXMgYHBoeS1tb2RlID0gJiMzNDtwc2dtaWkmIzM0O2AsIGBvZl9nZXRfcGh5X21vZGVgIHdvdWxkIGNvcnJlY3RseSBzZXQgdGhlIGBwaHlfbW9kZWAgdmFyaWFibGUgdG8gYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgLCB3aGljaCB3b3VsZCB0aGVuIGJlIHBhc3NlZCB0byBgcGh5bGlua19jcmVhdGVgLiBUaGF0IG1ha2VzIHNlbnNlLgoKQnV0IHdhaXQsIGhvdyBhbSBJIGdvaW5nIHRvIHRyaWdnZXIgdGhpcyBpbiBhIHRlc3QgZW52aXJvbm1lbnQ/IFN5emthbGxlciBpc24mIzM5O3Qgc2V0IHVwIHRvIGRpcmVjdGx5IGluamVjdCBkZXZpY2UgdHJlZSBub2Rlcywgc28gdGhhdCBhdmVudWUgaXMgY2xvc2VkLiBXaGF0IGFib3V0IHZpcnR1YWwgZHJpdmVycz8gQ291bGQgSSwgc2F5LCBjb25maWd1cmUgYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIHRvIHVzZSBQU0dNSUk/IEkgaW1tZWRpYXRlbHkgc3RhcnRlZCB0aGlua2luZzogYG5ldGRldl9zaW1gLCBgZHVtbXlgLCBgdmV0aGAsIGBtYWNzZWNgLCBgdHVuYCwgYHRhcGAgLi4uIGJ1dCBub25lIG9mIHRoZW0gdXNlIGBwaHlsaW5rYCBhcyBmYXIgYXMgSSBjYW4gdGVsbC4KCk9rYXksIHNvIG5vIGRldmljZSB0cmVlIGluamVjdGlvbiBhbmQgbm8gcmVsZXZhbnQgdmlydHVhbCBkcml2ZXJzLiBUaGF0JiMzOTtzIHN0YXJ0aW5nIHRvIGxvb2sgbGlrZSBhIGRlYWQgZW5kLiBDYW4gYGV0aHRvb2xgIGhlbHA/IEkmIzM5O20gYXdhcmUgdGhhdCBzb21lIG9mIGl0cyBmdW5jdGlvbnMgYXJlIHF1aXRlIHBvd2VyZnVsLiBEb2VzIGl0IGFsbG93IGNoYW5naW5nIHRoZSBNQUMtUEhZIGludGVyZmFjZSBtb2RlIGRpcmVjdGx5LCBmb3IgZXhhbXBsZSBmcm9tIFJHTUlJIHRvIFNHTUlJPyBJIGRvbiYjMzk7dCB0aGluayBzby4gRXRodG9vbCBtYWlubHkgZGVhbHMgd2l0aCBsaW5rIHNwZWVkLCBkdXBsZXgsIGV0Yy4gSXQmIzM5O3Mgbm90IHRoZSByaWdodCB0b29sIGZvciB0aGlzLgoKVGhlbiwgdGhlcmUgd2FzIGEgZ2xpbW1lciBvZiBob3BlLiBJIGxvb2tlZCBhdCBgcGh5bGlua19zZnBfY29uZmlnX29wdGljYWxgIGFuZCBub3RpY2VkIGl0IGNhbGxzIGBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZWAuIEFoLCB0aGF0JiMzOTtzIGNhbGxlZCB3aGVuIGFuIFNGUCBtb2R1bGUgaXMgaW5zZXJ0ZWQsIGJ1dCB0aGVyZSBpc24mIzM5O3QgYSB2aXJ0dWFsIFNGUCBkcml2ZXIgdG8gZW11bGF0ZS4KCkkgdGhlbiBjb25zaWRlcmVkIGBwaHlsaW5rX3Bjc19uZWdfbW9kZWAuIFRoYXQmIzM5O3MgY2FsbGVkIGZyb20gYHBoeWxpbmtfbWFjX2NvbmZpZ2AsIHdoaWNoIGl0c2VsZiBpcyBjYWxsZWQgZnJvbSBlaXRoZXIgYSB3b3JrcXVldWUgaW4gYHBoeWxpbmtfcmVzb2x2ZWAgb3IgZHVyaW5nIGBwaHlsaW5rX3N0YXJ0YC4gU3RpbGwsIHRoZSBxdWVzdGlvbiBpcyBob3cgdG8gZ2V0IHRoZSBgcGh5X21vZGVgIHNldCBjb3JyZWN0bHkuCgpTbyBoZXJlJiMzOTtzIHRoZSBjb25jbHVzaW9uOiBpZiB0aGVyZSYjMzk7cyBubyB3YXkgdG8gcmVhY2ggYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgIGluIGEgUUVNVSBlbnZpcm9ubWVudCDigJMgbm8gZGV2aWNlIHRyZWUgaW5qZWN0aW9uLCBubyBzdWl0YWJsZSB2aXJ0dWFsIGRyaXZlcnMsIG5vIGV0aHRvb2wgbWFnaWMg4oCTIHRoZW4gZnV6emluZyB0aGlzIGNvZGUgcGF0aCBpcyBwcm9iYWJseSBhIHdhc3RlIG9mIHRpbWUuIEkgZGlkIGEgZmluYWwgZG91YmxlIGNoZWNrIHRocm91Z2ggdGhlIG5ldHdvcmtpbmcgZHJpdmVyIGNvZGUsIGJ1dCB0aGUgZ3JlcCB3YXMgYWNjdXJhdGU6IG5vIE1BQyBkcml2ZXJzIGRpcmVjdGx5IHVzZSBvciBpbXBsaWNpdGx5IHNldCBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAuIEFuZCBvZiBjb3Vyc2UsIEkgY2hlY2tlZCB0aGUgZGVmaW5pdGlvbiBpbiBgaW5jbHVkZS9saW51eC9waHkuaGAgdG8gbWFrZSBzdXJlIEkgd2FzbiYjMzk7dCBtaXNzaW5nIHNvbWV0aGluZy4gSXQgbG9va3MgbGlrZSB0aGlzIGNvZGUgaXMgc2ltcGx5IHVucmVhY2hhYmxlLCBhdCBsZWFzdCBhcyBmYXIgYXMgbXkgY3VycmVudCBzZXR1cCBhbmQga25vd2xlZGdlIGFsbG93cyBtZSB0byBqdWRnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdD0yMzg9U29tZSBvZiB0aGUgaW50ZXJmYWNlIG1vZGVzIGFyZSBkZXNjcmliZWQgYmVsb3c6XG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3QtMzI1LVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3Q6MzI2OmBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWBgXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdC0zMjctICAgIFRoaXMgaXMgdGhlIFBlbnRhIFNHTUlJIG1vZGUsIGl0IGlzIHNpbWlsYXIgdG8gUVNHTUlJIGJ1dCBpdCBjb21iaW5lcyA1XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM9MTU5PWludCBwaHlfaW50ZXJmYWNlX251bV9wb3J0cyhwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTIwMS1cdFx0cmV0dXJuIDQ7XG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYzoyMDI6XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy0yMDMtXHRcdHJldHVybiA1O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jPTI5ND11bnNpZ25lZCBsb25nIHBoeV9jYXBzX2Zyb21faW50ZXJmYWNlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMtMzEwLVx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYzozMTE6XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy0zMTItXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yMzg9c3RhdGljIGludCBwaHlsaW5rX2ludGVyZmFjZV9tYXhfc3BlZWQocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI1OS1cdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOlxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNjA6XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI2MS1cdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FTR01JSTpcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTc3ND1zdGF0aWMgaW50IHBoeWxpbmtfcGFyc2VfbW9kZShzdHJ1Y3QgcGh5bGluayAqcGwsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy04MDgtXHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzo4MDk6XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtODEwLVx0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0xMDM5PXN0YXRpYyBlbnVtIGluYmFuZF90eXBlIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xMDQyLVx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjEwNDM6XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwNDQtXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XG4tLVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jPTQ5MD1zdGF0aWMgaW50IHFjYTgwN3hfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYy01NDktXHRcdGlmICghc3RyY2FzZWNtcChwYWNrYWdlX21vZGVfbmFtZSxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYzo1NTA6XHRcdFx0XHRwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSSkpKVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jOjU1MTpcdFx0XHRwcml2LVx1MDAzZXBhY2thZ2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk7XG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNTUyLVx0XHRlbHNlIGlmICghc3RyY2FzZWNtcChwYWNrYWdlX21vZGVfbmFtZSxcbi0tXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM9NTYyPXN0YXRpYyBpbnQgcWNhODA3eF9waHlfcGFja2FnZV9jb25maWdfaW5pdF9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTU4NS1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM6NTg2Olx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTU4Ny1cdGRlZmF1bHQ6XG4tLVxuaW5jbHVkZS9saW51eC9waHkuaD01Mz1leHRlcm4gY29uc3QgaW50IHBoeV9iYXNpY19wb3J0c19hcnJheVszXTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTg5LSAqIEBQSFlfSU5URVJGQUNFX01PREVfTU9DQTogTXVsdGltZWRpYSBvdmVyIENvYXhcbmluY2x1ZGUvbGludXgvcGh5Lmg6OTA6ICogQFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6IFBlbnRhIFNHTUlJXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTkxLSAqIEBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOiBRdWFkIFNHTUlJXG4tLVxuaW5jbHVkZS9saW51eC9waHkuaD0xMTQ9dHlwZWRlZiBlbnVtIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTEzMi1cdFBIWV9JTlRFUkZBQ0VfTU9ERV9NT0NBLFxuaW5jbHVkZS9saW51eC9waHkuaDoxMzM6XHRQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJLFxuaW5jbHVkZS9saW51eC9waHkuaC0xMzQtXHRQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJLFxuLS1cbmluY2x1ZGUvbGludXgvcGh5Lmg9MjEwPXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqcGh5X21vZGVzKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4tLVxuaW5jbHVkZS9saW51eC9waHkuaC0yNDgtXHRcdHJldHVybiBcJiMzNDttb2NhXCYjMzQ7O1xuaW5jbHVkZS9saW51eC9waHkuaDoyNDk6XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XG5pbmNsdWRlL2xpbnV4L3BoeS5oLTI1MC1cdFx0cmV0dXJuIFwmIzM0O3BzZ21paVwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0NTEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBQYXRoIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCBzZWVtcyBsaWtlIGl0JiMzOTtzIHByZXR0eSBpc29sYXRlZC4gSXQmIzM5O3Mgb25seSBzaG93aW5nIHVwIGluIGBxY2E4MDd4LmNgIGFuZCBzb21lIGNvcmUgUEhZL3BoeWxpbmsgZmlsZXMuIFRoZSB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IG5vIHN0YW5kYXJkIE1BQyBkcml2ZXIgaXMgZXhwbGljaXRseSBzZXR0aW5nIHRoaXMgbW9kZS4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyBtYXliZSBpdCYjMzk7cyBiZWluZyBwYXJzZWQgZnJvbSB0aGUgZGV2aWNlIHRyZWUuIEkga25vdyBgb2ZfZ2V0X3BoeV9tb2RlYCBjYW4gaGFuZGxlIHRoYXQsIHBpY2tpbmcgdXAgYCYjMzQ7cHNnbWlpJiMzNDtgIGFzIGEgc3RyaW5nIHZhbHVlLiBCdXQgdGhlbiBJIHJlbWVtYmVyIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc3l6a2FsbGVyIGhlcmUsIGFuZCB0aGVyZSYjMzk7cyBubyB3YXkgdG8gaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzLCBhbmQgdGhlcmUmIzM5O3Mgbm8gc3VpdGFibGUgdmlydHVhbCBkcml2ZXIgdG8gdHJpZ2dlciB0aGlzIHBhdGggaW4gYSBRRU1VIGVudmlyb25tZW50LiBUaGF0IHN0cm9uZ2x5IHN1Z2dlc3RzIHRoaXMgY29kZSBpcyBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBpbiBvdXIgdGVzdGluZy4KCkhvbGQgb24sIHRob3VnaC4gSSYjMzk7bSBtaXNzaW5nIHNvbWV0aGluZywgSSBuZWVkIHRvIGNvbnNpZGVyIGFsbCB0aGUgYW5nbGVzLiBDb3VsZCBzb21ldGhpbmcgZWxzZSByZXF1ZXN0IHRoYXQgbW9kZT8gV2hhdCBhYm91dCBTRlAgbW9kdWxlcz8gVGhleSYjMzk7cmUgb2Z0ZW4gYXNzb2NpYXRlZCB3aXRoIGRpZmZlcmVudCBpbnRlcmZhY2UgbW9kZXMuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGBzZnAuY2AgYW5kIGBzZnAtYnVzLmNgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgbWVjaGFuaXNtIGZvciBhbiBTRlAgbW9kdWxlIHRvIHNwZWNpZnkgb3IgcmVxdWVzdCB0aGlzIG1vZGUuIFRoYXQgc2VlbXMgbGlrZSB0aGUgb25seSBvdGhlciBwb3NzaWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM9MTU5PWludCBwaHlfaW50ZXJmYWNlX251bV9wb3J0cyhwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTIwMS1cdFx0cmV0dXJuIDQ7XG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYzoyMDI6XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy0yMDMtXHRcdHJldHVybiA1O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jPTI5ND11bnNpZ25lZCBsb25nIHBoeV9jYXBzX2Zyb21faW50ZXJmYWNlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMtMzEwLVx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYzozMTE6XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy0zMTItXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yMzg9c3RhdGljIGludCBwaHlsaW5rX2ludGVyZmFjZV9tYXhfc3BlZWQocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI1OS1cdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOlxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNjA6XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI2MS1cdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FTR01JSTpcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTc3ND1zdGF0aWMgaW50IHBoeWxpbmtfcGFyc2VfbW9kZShzdHJ1Y3QgcGh5bGluayAqcGwsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy04MDgtXHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzo4MDk6XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtODEwLVx0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0xMDM5PXN0YXRpYyBlbnVtIGluYmFuZF90eXBlIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xMDQyLVx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjEwNDM6XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwNDQtXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XG4tLVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jPTQ5MD1zdGF0aWMgaW50IHFjYTgwN3hfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYy01NDktXHRcdGlmICghc3RyY2FzZWNtcChwYWNrYWdlX21vZGVfbmFtZSxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYzo1NTA6XHRcdFx0XHRwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSSkpKVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jOjU1MTpcdFx0XHRwcml2LVx1MDAzZXBhY2thZ2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk7XG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNTUyLVx0XHRlbHNlIGlmICghc3RyY2FzZWNtcChwYWNrYWdlX21vZGVfbmFtZSxcbi0tXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM9NTYyPXN0YXRpYyBpbnQgcWNhODA3eF9waHlfcGFja2FnZV9jb25maWdfaW5pdF9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTU4NS1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM6NTg2Olx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTU4Ny1cdGRlZmF1bHQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwOTE5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUFNHTUlJIEludGVyZmFjZSBNb2RlKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYCBjb3VsZCBldmVuIGNvbWUgaW50byBwbGF5IGhlcmUuIEl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIGBzZnBgIGRyaXZlciBpdHNlbGYgZG9lc24mIzM5O3QgdXNlIGl0IGRpcmVjdGx5LiAgVGhlIGxvZ2ljIHNlZW1zIHRvIHBvaW50IHRvIGEgTUFDIGRyaXZlciBhcyB0aGUgc291cmNlLiAgQnV0IGhvbGQgb24uLi4gbm8gTUFDIGRyaXZlciAqZG9lcyogdXNlIGl0LCByaWdodD8gIFRoYXQmIzM5O3MgYSBrZXkgcG9pbnQuCgpXYWl0IGEgc2Vjb25kLCB3aGF0IGFib3V0IHRoZSAqUEhZKiBkcml2ZXI/IENvdWxkIGEgUEhZIGRyaXZlciBiZSBzZXR0aW5nIHRoaXMgbW9kZT8gIEFoLCB5ZXMhIFRoZSBgcWNhODA3eGAgUEhZIGRyaXZlciBkb2VzIGluZGVlZCB1c2UgaXQuIEJ1dCB0aGF0JiMzOTtzIGEgUEhZLCBzbyB0aGF0JiMzOTtzIGEgZGlmZmVyZW50IGNvbnRleHQgZW50aXJlbHkuCgpOb3csIGRvZXMgYHBoeWxpbmtgIGludGVyYWN0IHdpdGggdGhlIFBIWSBkcml2ZXLigJlzIGludGVyZmFjZSBtb2RlIGluIHNvbWUgd2F5PyBMZXQmIzM5O3MgdHJhY2UgaXQgdGhyb3VnaC4gYHBoeWxpbmtfYXR0YWNoX3BoeWAgb3IgYHBoeWxpbmtfY29ubmVjdF9waHlgIHRha2UgYSBgcGh5X2RldmljZWAsIHNvIHRoZXJlICppcyogYSBjb25uZWN0aW9uIHBvaW50LiBCdXQgbG9va2luZyBhdCBgcGh5bGlua19nZXRfaW5iYW5kX3R5cGVgLCB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGBwbC0mZ3Q7bGlua19jb25maWcuaW50ZXJmYWNlYC4gSGFuZyBvbiEgVGhhdCBgcGwtJmd0O2xpbmtfY29uZmlnLmludGVyZmFjZWAgaXMgdGhlIE1BQyYjMzk7cyBpbnRlcmZhY2UgbW9kZSwgbm90IHRoZSBQSFkmIzM5O3MgaW50ZXJmYWNlIG1vZGUuIFRoYXQmIzM5O3MgYSBjcnVjaWFsIGRpc3RpbmN0aW9uLgoKQnV0IHdhaXQgYSBtaW51dGUsIEkgdGhpbmsgSSBzZWUgc29tZXRoaW5nISBJIHJlY2FsbCB0aGF0IGBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbGAgKmRvZXMqIHVzZSB0aGUgYGludGVyZmFjZWAgYXJndW1lbnQuIEl0IGxvb2tzIGxpa2UgaXQgaXMgcGFzc2VkIGluIGFzIGFuIGFyZ3VtZW50LCBzbyB3aGVyZSBpcyB0aGF0IHZhbHVlIGNvbWluZyBmcm9tPyBJIG5lZWQgdG8gY2hlY2sgb3V0IHdoYXQgdGhhdCBmdW5jdGlvbiBkb2VzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaW50ZXJmYWNlIG1vZGUgaXMgYmVpbmcgc2V0LiBMZXQmIzM5O3MgZGVsdmUgaW50byBgcGh5bGlua19zZnBfY29uZmlnX29wdGljYWxgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zNzA1PXN0YXRpYyBpbnQgcGh5bGlua19zZnBfY29uZmlnX3BoeShzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zNzU1LVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozNzU2OnN0YXRpYyBpbnQgcGh5bGlua19zZnBfY29uZmlnX29wdGljYWwoc3RydWN0IHBoeWxpbmsgKnBsKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zNzU3LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTM4NDg9c3RhdGljIGludCBwaHlsaW5rX3NmcF9tb2R1bGVfaW5zZXJ0KHZvaWQgKnVwc3RyZWFtLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzg2NS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6Mzg2NjpcdHJldHVybiBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbChwbCk7XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTM4NjctfVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9Mzg3Nj1zdGF0aWMgaW50IHBoeWxpbmtfc2ZwX21vZHVsZV9zdGFydCh2b2lkICp1cHN0cmVhbSlcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTM4OTEtXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjM4OTI6XHRyZXR1cm4gcGh5bGlua19zZnBfY29uZmlnX29wdGljYWwocGwpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zODkzLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE4ODQKCQkJCQkJCW91dHB1dDogMTU3CgkJCQkJCQl0aG91Z2h0czogMjM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsYCBQYXRoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBgcGh5bGlua19zZnBfY29uZmlnX29wdGljYWxgIGdyYWJzIHRoZSBgaW50ZXJmYWNlYCBmcm9tIGBwbC0mZ3Q7bGlua19jb25maWcuaW50ZXJmYWNlYC4gVGhhdCYjMzk7cyBlc3NlbnRpYWxseSB1c2luZyB0aGUgTUFDJiMzOTtzIGNvbmZpZ3VyZWQgaW50ZXJmYWNlIG1vZGUuIFRoZSByZWFsIHByb2JsZW0gaXMsICpubyogTUFDIGRyaXZlciwgdW5sZXNzIGNvbmZpZ3VyZWQgdGhyb3VnaCBhIGRldmljZSB0cmVlLCBhY3R1YWxseSBzZXRzIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYC4gSSYjMzk7bSBjZXJ0YWluIHRoaXMgbWFrZXMgdGhpcyBwYXJ0aWN1bGFyIGNvZGUgcGF0aCBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VLgoKTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgc29tZXRoaW5nIHRob3VnaC4gQ291bGQgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgICpwb3RlbnRpYWxseSogYmUgc2V0IHZpYSBgZXRodG9vbGAgb3Igc29tZSBgbmV0bGlua2AgbWFnaWM/IE5vLCBubywgbm8uIEludGVyZmFjZSBtb2RlcyBsaWtlIFNHTUlJLCBQU0dNSUksIFJHTUlJIGFyZSBmdW5kYW1lbnRhbGx5ICpoYXJkd2FyZSogY29ubmVjdGlvbnMgYmV0d2VlbiB0aGUgTUFDIGFuZCB0aGUgUEhZLiBUaGV5JiMzOTtyZSBub3Qgc29tZXRoaW5nIHlvdSYjMzk7cmUgZ29pbmcgdG8gY29uZmlndXJlIHRocm91Z2ggc3RhbmRhcmQgdXNlcnNwYWNlIHRvb2xzLiBTdXJlLCBtYXliZSB5b3UgY291bGQgaGFjayBzb21ldGhpbmcgdG9nZXRoZXIgd2l0aCBkZXZpY2UgdHJlZSBvdmVybGF5cyBvciBzb21lIHZlbmRvci1zcGVjaWZpYyB0b29sLCBidXQgdGhvc2UgYXJlbiYjMzk7dCB0aGUgbm9ybS4gQW5kIGRlZmluaXRlbHkgbm90IGluIGEgUUVNVSBzZXR1cC4KClJpZ2h0LCBzbyB0aGF0IGNvbmZpcm1zIG15IGluaXRpYWwgc3VzcGljaW9uLiBUaGlzIGVudGlyZSBtb2RpZmljYXRpb24gaXMgaW5hY2Nlc3NpYmxlIGluIFFFTVUuIExldCBtZSBnbyBiYWNrIGFuZCByZXZpZXcgdGhlIHBhdGNoIGl0c2VsZi4uLiBBaCwgaXQganVzdCBhZGRzIGEgYGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpgIHRvIGBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZWAuIEl0JiMzOTtzIGEgc2luZ2xlIGxpbmUuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGEgbm8tb3AsIGF0IGxlYXN0IGluIG91ciB0ZXN0aW5nIGVudmlyb25tZW50cy4KCkdpdmVuIHRoYXQgaXQmIzM5O3MgZnVuZGFtZW50YWxseSB1bnJlYWNoYWJsZSBpbiBRRU1VLCB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJIHRvIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGluIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKCkuIFRoaXMgaW50ZXJmYWNlIG1vZGUgcmVwcmVzZW50cyBhIGhhcmR3YXJlLWxldmVsIGNvbm5lY3Rpb24gYmV0d2VlbiBhIE1BQyBhbmQgYSBQSFkgKFBlbnRhIFNHTUlJKS4gSXQgaXMgb25seSBjb25maWd1cmVkIHZpYSBkZXZpY2UgdHJlZSBwcm9wZXJ0aWVzIChlLmcuLCBwaHktbW9kZSA9IFwmIzM0O3BzZ21paVwmIzM0Oykgb3IgaGFyZGNvZGVkIGluIHNwZWNpZmljIGhhcmR3YXJlIGRyaXZlcnMgKGxpa2UgdGhlIFF1YWxjb21tIHFjYTgwN3ggUEhZIGRyaXZlcikuIFNpbmNlIGl0IHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIG9yIGRldmljZSB0cmVlIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIG5vdCBwcmVzZW50IG9yIGR5bmFtaWNhbGx5IGluamVjdGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VKSwgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUkgdG8gdGhlIHN3aXRjaCBzdGF0ZW1lbnQgaW4gcGh5bGlua19nZXRfaW5iYW5kX3R5cGUoKS4gVGhpcyBpbnRlcmZhY2UgbW9kZSByZXByZXNlbnRzIGEgaGFyZHdhcmUtbGV2ZWwgY29ubmVjdGlvbiBiZXR3ZWVuIGEgTUFDIGFuZCBhIFBIWSAoUGVudGEgU0dNSUkpLiBJdCBpcyBvbmx5IGNvbmZpZ3VyZWQgdmlhIGRldmljZSB0cmVlIHByb3BlcnRpZXMgKGUuZy4sIHBoeS1tb2RlID0gXCYjMzQ7cHNnbWlpXCYjMzQ7KSBvciBoYXJkY29kZWQgaW4gc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVycyAobGlrZSB0aGUgUXVhbGNvbW0gcWNhODA3eCBQSFkgZHJpdmVyKS4gU2luY2UgaXQgcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgb3IgZGV2aWNlIHRyZWUgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgbm90IHByZXNlbnQgb3IgZHluYW1pY2FsbHkgaW5qZWN0YWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUpLCB0aGlzIGNvZGUgcGF0aCBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMzowNDo0OS42NjAxMTc2MjNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDY5MDk5MzUzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSSB0byB0aGUgc3dpdGNoIHN0YXRlbWVudCBpbiBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZSgpLiBUaGlzIGludGVyZmFjZSBtb2RlIHJlcHJlc2VudHMgYSBoYXJkd2FyZS1sZXZlbCBjb25uZWN0aW9uIGJldHdlZW4gYSBNQUMgYW5kIGEgUEhZIChQZW50YSBTR01JSSkuIEl0IGlzIG9ubHkgY29uZmlndXJlZCB2aWEgZGV2aWNlIHRyZWUgcHJvcGVydGllcyAoZS5nLiwgcGh5LW1vZGUgPSBcXFwicHNnbWlpXFxcIikgb3IgaGFyZGNvZGVkIGluIHNwZWNpZmljIGhhcmR3YXJlIGRyaXZlcnMgKGxpa2UgdGhlIFF1YWxjb21tIHFjYTgwN3ggUEhZIGRyaXZlcikuIFNpbmNlIGl0IHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIG9yIGRldmljZSB0cmVlIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIG5vdCBwcmVzZW50IG9yIGR5bmFtaWNhbGx5IGluamVjdGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VKSwgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMzowNDo0OS42NjAxMjE3MzNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjIxMTc4MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1ZWUwODhkNTM1ZTI3YmIxZTFlOTU1MTYyMTVhNmRjMjgyMjc0OGE5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDggMDM6MDQ6NDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcXG5pbmRleCAxOGQyZWFkOTdhYTU0Li45ODNhMWEzY2VlMzc0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXFxuQEAgLTEwNDAsNiArMTA0MCw3IEBAIHN0YXRpYyBlbnVtIGluYmFuZF90eXBlIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuIHtcXG4gXFx0c3dpdGNoIChpbnRlcmZhY2UpIHtcXG4gXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XFxuK1xcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcXG4gXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxcbiBcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RVVNHTUlJOlxcbiBcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMzowNDo1MS4wODMxNDYwNDFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MzI2Nzk1MTExMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJIHRvIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGluIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKCkuIFRoaXMgaW50ZXJmYWNlIG1vZGUgcmVwcmVzZW50cyBhIGhhcmR3YXJlLWxldmVsIGNvbm5lY3Rpb24gYmV0d2VlbiBhIE1BQyBhbmQgYSBQSFkgKFBlbnRhIFNHTUlJKS4gSXQgaXMgb25seSBjb25maWd1cmVkIHZpYSBkZXZpY2UgdHJlZSBwcm9wZXJ0aWVzIChlLmcuLCBwaHktbW9kZSA9IFxcXCJwc2dtaWlcXFwiKSBvciBoYXJkY29kZWQgaW4gc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVycyAobGlrZSB0aGUgUXVhbGNvbW0gcWNhODA3eCBQSFkgZHJpdmVyKS4gU2luY2UgaXQgcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgb3IgZGV2aWNlIHRyZWUgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgbm90IHByZXNlbnQgb3IgZHluYW1pY2FsbHkgaW5qZWN0YWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUpLCB0aGlzIGNvZGUgcGF0aCBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDVlZTA4OGQ1MzVlMjdiYjFlMWU5NTUxNjIxNWE2ZGMyODIyNzQ4YTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyA4IDAzOjA0OjQ3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcbmluZGV4IDE4ZDJlYWQ5N2FhNTQuLjk4M2ExYTNjZWUzNzQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXG5AQCAtMTA0MCw2ICsxMDQwLDcgQEAgc3RhdGljIGVudW0gaW5iYW5kX3R5cGUgcGh5bGlua19nZXRfaW5iYW5kX3R5cGUocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbiB7XG4gXHRzd2l0Y2ggKGludGVyZmFjZSkge1xuIFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XG4rXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XG4gXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XG4gXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RVVNHTUlJOlxuIFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSTpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAzOjA0OjUxLjA4MzE0NzM4MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDM4MzkzNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqRXhhbWluaW5nIGEgUEhZTElOSyBQYXRjaCoqXG5cbkFscmlnaHQsIGEgcGF0Y2gganVzdCBjcm9zc2VkIG15IGRlc2sgdGhhdCB0b3VjaGVzIGBkcml2ZXJzL25ldC9waHkvcGh5bGluay5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBpbnZvbHZlIGFkZGluZyBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAgdG8gdGhlIGBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZWAgc3dpdGNoIHN0YXRlbWVudC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZGl2ZSBpbnRvIHRoYXQgZnVuY3Rpb24gYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgYHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlYCB3b3Jrcy4gV2hhdCBpcyBpdHMgY3VycmVudCBpbXBsZW1lbnRhdGlvbj8gV2hhdCBhcmUgdGhlIGV4aXN0aW5nIGludGVyZmFjZSBtb2RlcyBpdCBoYW5kbGVzLCBhbmQgaG93IGRvZXMgYFBTR01JSWAgZml0IGludG8gdGhhdCBlY29zeXN0ZW0/IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBob3cgdGhpcyBuZXcgYWRkaXRpb24gbWlnaHQgYWZmZWN0IHRoZSBvdmVyYWxsIGxvZ2ljLCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cywgYW5kIGlmIHRoZSBleGlzdGluZyBjb2RlIGhhbmRsZXMgdGhpcyBuZXcgbW9kZSBncmFjZWZ1bGx5LiBNeSBtYWluIGZvY3VzIGF0IHRoaXMgcG9pbnQgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgZnVuZGFtZW50YWwgY2hhbmdlIGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgbGluayB0cmFpbmluZyBhbmQgbmVnb3RpYXRpb24gcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoaXMgdHlwZSBvZiBQSFkgZHJpdmVyIG1vZGlmaWNhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDM6MDQ6NTQuNTg2OTg5NzM3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NzI1NjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeWxpbmtfZ2V0X2luYmFuZF90eXBlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0xMDMzPWVudW0gaW5iYW5kX3R5cGUge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xMDM4LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTAzOTpzdGF0aWMgZW51bSBpbmJhbmRfdHlwZSBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZShwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTA0MC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTEwOTA9c3RhdGljIHZvaWQgcGh5bGlua19wY3NfbmVnX21vZGUoc3RydWN0IHBoeWxpbmsgKnBsLCBzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcyxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTA5OC1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjEwOTk6XFx0dHlwZSA9IHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKGludGVyZmFjZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xMTAwLVxcdGlmICh0eXBlID09IElOQkFORF9OT05FKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTM3NTY9c3RhdGljIGludCBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbChzdHJ1Y3QgcGh5bGluayAqcGwpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTM4MDYtXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozODA3OlxcdGluYmFuZF90eXBlID0gcGh5bGlua19nZXRfaW5iYW5kX3R5cGUoaW50ZXJmYWNlKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTM4MDgtXFx0aWYgKGluYmFuZF90eXBlID09IElOQkFORF9OT05FKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAzOjA0OjU0LjY2NjcxNzU5MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1NDA4OTEwNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW5uZXIgbW9ub2xvZ3VlOlxuXG4qKlF1aWNrIEF1ZGl0IG9mIGBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZWAqKlxuXG5BbHJpZ2h0LCBhIHNtYWxsIGNoYW5nZSBpbiBgcGh5bGlua19nZXRfaW5iYW5kX3R5cGVgLiBJbnRlcmVzdGluZy4gTGV0J3Mgbm90IGdldCBhaGVhZCBvZiBvdXJzZWx2ZXMsIHRob3VnaC4gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBleGFjdGx5IHRoaXMgZnVuY3Rpb24gZG9lcy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGh5bGluayBlY29zeXN0ZW0gYmVmb3JlIEkgZXZlbiBjb25zaWRlciB3aGF0IHRoaXMgbW9kaWZpY2F0aW9uICptZWFucyouIEdvdHRhIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGZ1bGwgY29udGV4dCBiZWZvcmUgZGl2aW5nIGludG8gdGhlIGRldGFpbHMuIFRpbWUgdG8gcHVsbCB1cCB0aGUgY29kZSBhbmQgam9nIG15IG1lbW9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY4MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAzOjA0OjU3LjIwNzYxMDg5N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMzksXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMzk6XFx0c3RhdGljIGVudW0gaW5iYW5kX3R5cGUgcGh5bGlua19nZXRfaW5iYW5kX3R5cGUocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4xMDQwOlxcdHtcXG4xMDQxOlxcdFxcdHN3aXRjaCAoaW50ZXJmYWNlKSB7XFxuMTA0MjpcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSTpcXG4xMDQzOlxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcXG4xMDQ0OlxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FTR01JSTpcXG4xMDQ1OlxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FVU0dNSUk6XFxuMTA0NjpcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJOlxcbjEwNDc6XFx0XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTBHX1FYR01JSTpcXG4xMDQ4OlxcdFxcdFxcdC8qIFRoZXNlIHByb3RvY29scyBhcmUgZGVzaWduZWQgZm9yIHVzZSB3aXRoIGEgUEhZIHdoaWNoXFxuMTA0OTpcXHRcXHRcXHQgKiBjb21tdW5pY2F0ZXMgaXRzIG5lZ290aWF0aW9uIHJlc3VsdCBiYWNrIHRvIHRoZSBNQUMgdmlhXFxuMTA1MDpcXHRcXHRcXHQgKiBpbmJhbmQgY29tbXVuaWNhdGlvbi4gTm90ZTogdGhlcmUgZXhpc3QgUEhZcyB0aGF0IHJ1blxcbjEwNTE6XFx0XFx0XFx0ICogd2l0aCBTR01JSSBidXQgZG8gbm90IHNlbmQgdGhlIGluYmFuZCBkYXRhLlxcbjEwNTI6XFx0XFx0XFx0ICovXFxuMTA1MzpcXHRcXHRcXHRyZXR1cm4gSU5CQU5EX0NJU0NPX1NHTUlJO1xcbjEwNTQ6XFx0XFxuMTA1NTpcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVg6XFxuMTA1NjpcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8yNTAwQkFTRVg6XFxuMTA1NzpcXHRcXHRcXHQvKiAxMDAwYmFzZS1YIGlzIGRlc2lnbmVkIGZvciB1c2UgbWVkaWEtc2lkZSBmb3IgRmlicmVcXG4xMDU4OlxcdFxcdFxcdCAqIGNvbm5lY3Rpb25zLCBhbmQgdGh1cyB0aGUgQXV0b25lZyBiaXQgbmVlZHMgdG8gYmVcXG4xMDU5OlxcdFxcdFxcdCAqIHRha2VuIGludG8gYWNjb3VudC4gV2UgYWxzbyBkbyB0aGlzIGZvciAyNTAwYmFzZS1YXFxuMTA2MDpcXHRcXHRcXHQgKiBhcyB3ZWxsLCBidXQgZHJpdmVycyBtYXkgbm90IHN1cHBvcnQgdGhpcywgc28gbWF5XFxuMTA2MTpcXHRcXHRcXHQgKiBuZWVkIHRvIG92ZXJyaWRlIHRoaXMuXFxuMTA2MjpcXHRcXHRcXHQgKi9cXG4xMDYzOlxcdFxcdFxcdHJldHVybiBJTkJBTkRfQkFTRVg7XFxuMTA2NDpcXHRcXG4xMDY1OlxcdFxcdGRlZmF1bHQ6XFxuMTA2NjpcXHRcXHRcXHRyZXR1cm4gSU5CQU5EX05PTkU7XFxuMTA2NzpcXHRcXHR9XFxuMTA2ODpcXHR9XFxuMTA2OTpcXHRcXG4xMDcwOlxcdC8qKlxcbjEwNzE6XFx0ICogcGh5bGlua19wY3NfbmVnX21vZGUoKSAtIGhlbHBlciB0byBkZXRlcm1pbmUgUENTIGluYmFuZCBtb2RlXFxuMTA3MjpcXHQgKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG4xMDczOlxcdCAqIEBwY3M6IGEgcG9pbnRlciB0byBcXHUwMDI2c3RydWN0IHBoeWxpbmtfcGNzXFxuMTA3NDpcXHQgKiBAaW50ZXJmYWNlOiBpbnRlcmZhY2UgbW9kZSB0byBiZSB1c2VkXFxuMTA3NTpcXHQgKiBAYWR2ZXJ0aXNpbmc6IGFkZXJ0aXNlbWVudCBldGh0b29sIGxpbmsgbW9kZSBtYXNrXFxuMTA3NjpcXHQgKlxcbjEwNzc6XFx0ICogRGV0ZXJtaW5lcyB0aGUgbmVnb3RpYXRpb24gbW9kZSB0byBiZSB1c2VkIGJ5IHRoZSBQQ1MsIGFuZCByZXR1cm5zXFxuMTA3ODpcXHQgKiBvbmUgb2Y6XFxuMTA3OTpcXHQgKlxcbjEwODA6XFx0ICogLSAlUEhZTElOS19QQ1NfTkVHX05PTkU6IGludGVyZmFjZSBtb2RlIGRvZXMgbm90IHN1cHBvcnQgaW5iYW5kXFxuMTA4MTpcXHQgKiAtICVQSFlMSU5LX1BDU19ORUdfT1VUQkFORDogYW4gb3V0IG9mIGJhbmQgbW9kZSAoZS5nLiByZWFkaW5nIHRoZSBQSFkpXFxuMTA4MjpcXHQgKiAgIHdpbGwgYmUgdXNlZC5cXG4xMDgzOlxcdCAqIC0gJVBIWUxJTktfUENTX05FR19JTkJBTkRfRElTQUJMRUQ6IGluYmFuZCBtb2RlIHNlbGVjdGVkIGJ1dCBhdXRvbmVnXFxuMTA4NDpcXHQgKiAgIGRpc2FibGVkXFxuMTA4NTpcXHQgKiAtICVQSFlMSU5LX1BDU19ORUdfSU5CQU5EX0VOQUJMRUQ6IGluYmFuZCBtb2RlIHNlbGVjdGVkIGFuZCBhdXRvbmVnIGVuYWJsZWRcXG4xMDg2OlxcdCAqXFxuMTA4NzpcXHQgKiBOb3RlOiB0aGlzIGlzIGZvciBjYXNlcyB3aGVyZSB0aGUgUENTIGl0c2VsZiBpcyBpbnZvbHZlZCBpbiBuZWdvdGlhdGlvblxcbjEwODg6XFx0ICogKGUuZy4gQ2xhdXNlIDM3LCBTR01JSSBhbmQgc2ltaWxhcikgbm90IENsYXVzZSA3My5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDM6MDQ6NTcuMjA3Nzc1NjM3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI4MTA3NzE2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTd2l0Y2ggU3RhdGVtZW50IENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgdGlueSBjaGFuZ2UgaW4gYSBzd2l0Y2ggc3RhdGVtZW50LCBhbmQgbXkgZmlyc3QgdGhvdWdodCBpcywgXCJJcyB0aGlzIGV2ZW4gd29ydGggZnV6emluZz9cIiBJdCdzIGEgc21hbGwgbW9kaWZpY2F0aW9uLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBgcGh5bGlua19nZXRfaW5iYW5kX3R5cGVgIHdoZW4gdGhlIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYCBjYXNlIGlzIGhpdC4gSW5zdGVhZCBvZiByZXR1cm5pbmcgYElOQkFORF9OT05FYCwgaXQgbm93IHJldHVybnMgYElOQkFORF9DSVNDT19TR01JSWAuXG5cblJpZ2h0IGF3YXksIEkgc2VlIHRoaXMgaW1wYWN0cyBgcGh5bGlua19wY3NfbmVnX21vZGVgIGFuZCBgcGh5bGlua19zZnBfY29uZmlnX29wdGljYWxgLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGNvZGUgcGF0aCBpcyBldmVuIHJlYWNoYWJsZS4gTGV0J3Mgc2VlLi4uIGBwaHlsaW5rX3Bjc19uZWdfbW9kZWAgaXMgY2FsbGVkIGJ5IGBwaHlsaW5rX21hY19jb25maWdgLiBBbmQgYHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsYCBpcyB0cmlnZ2VyZWQgYnkgYHBoeWxpbmtfc2ZwX21vZHVsZV9pbnNlcnRgLlxuXG5UaGUgYmlnIHF1ZXN0aW9uIG5vdyBpcywgZG9lcyBgcGh5bGlua2AgZXZlbiAqZ2V0KiB1c2VkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gSXQncyBhIGNyaXRpY2FsIHBpZWNlIG9mIG5ldHdvcmtpbmcsIHNvIEknZCBpbWFnaW5lIHRoZSBhbnN3ZXIgaXMgeWVzLCBnaXZlbiBob3cgbWFueSBuZXR3b3JrIGRyaXZlcnMgdXRpbGl6ZSBpdC4gSSBrbm93IGl0J3MgYSBjb21tb24gZGVwZW5kZW5jeS5cblxuQWxyaWdodCwgSSdsbCBkZWx2ZSBmdXJ0aGVyIGJ5IGNoZWNraW5nIHRoZSBjYWxsZXJzIG9mIGBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZWAgdG8gZ2FpbiBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc2NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAzOjA1OjAxLjQ4ODg1NTI2NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzgyMTQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaHlsaW5rX2dldF9pbmJhbmRfdHlwZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTAzMz1lbnVtIGluYmFuZF90eXBlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTAzOC1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjEwMzk6c3RhdGljIGVudW0gaW5iYW5kX3R5cGUgcGh5bGlua19nZXRfaW5iYW5kX3R5cGUocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwNDAte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0xMDkwPXN0YXRpYyB2b2lkIHBoeWxpbmtfcGNzX25lZ19tb2RlKHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwOTgtXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxMDk5OlxcdHR5cGUgPSBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZShpbnRlcmZhY2UpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTEwMC1cXHRpZiAodHlwZSA9PSBJTkJBTkRfTk9ORSkge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zNzU2PXN0YXRpYyBpbnQgcGh5bGlua19zZnBfY29uZmlnX29wdGljYWwoc3RydWN0IHBoeWxpbmsgKnBsKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zODA2LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzgwNzpcXHRpbmJhbmRfdHlwZSA9IHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKGludGVyZmFjZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zODA4LVxcdGlmIChpbmJhbmRfdHlwZSA9PSBJTkJBTkRfTk9ORSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMzowNTowMS41NDI2ODE2MDFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIzMjk1MjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqTmF2aWdhdGluZyBQSFlMSU5LIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBoZXJlLiBJJ20gZm9jdXNpbmcgb24gdGhlIFBIWUxJTksgZHJpdmVyLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHNlZSBpZiBhbnkgc3BlY2lmaWMgY29uZmlncyBuZWVkIHRvIGJlIGRlZmluZWQgZm9yIHRoZSBkcml2ZXIgdG8gYmUgaW5jbHVkZWQuIEknbSBnb2luZyB0byBjaGVjayB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBkcml2ZXIgaXRzZWxmLCBzdGFydGluZyB3aXRoIGBkcml2ZXJzL25ldC9waHkvcGh5bGluay5jYC4gSSBrbm93IHRoYXQgZmlsZSBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfUEhZTElOS2AgaXMgc2V0LiBOb3cgSSBuZWVkIHRvIHNlZSAqd2hlcmUqIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZC4gSSdsbCBuZWVkIHRvIGxvY2F0ZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLiBFaXRoZXIgYGRyaXZlcnMvbmV0L3BoeS9LY29uZmlnYCBvciBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgaXMgd2hlcmUgSSdsbCBsb29rIGZvciBgUEhZTElOS2AuIExldCdzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGVzIHJldmVhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY0NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAzOjA1OjA0Ljk2NTk3OTE4M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxNzMzNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBIWUxJTktcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWctNS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo2OmNvbmZpZyBQSFlMSU5LXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNy1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMzowNTowNS4wMTExNTYxODlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkzMjMwNDM1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBIWUxJTksgLSBBIFF1aWNrIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBgUEhZTElOS2AuLi4gaXQncyBvbmUgb2YgdGhvc2UgdHJpc3RhdGUgb3B0aW9ucywgdHlwaWNhbGx5IGhhbmRsZWQgYnkgbmV0d29yayBkcml2ZXJzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGlzIHRoaXMgZXZlbiB3b3J0aCB0aGUgZnV6emluZyBlZmZvcnQ/IEl0IHNvdW5kcyBsaWtlIGEgcHJldHR5IG1pbm9yIGNoYW5nZSwgZXNzZW50aWFsbHkganVzdCBhZGRpbmcgYSBuZXcgY2FzZSB0byBhIHN3aXRjaCBzdGF0ZW1lbnQuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBjaGFuZ2UgdG8gdGhlIGluYmFuZCB0eXBlIHNwZWNpZmljYWxseSBmb3IgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgLlxuXG5CdXQgd2FpdCwgZG9lcyB0aGlzIGFjdHVhbGx5IGhhdmUgYW55ICpmdW5jdGlvbmFsKiBpbXBhY3Q/IEFoLCB5ZXMsIGl0IGRvZXMuIFRoaXMgc2VlbXMgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZiBgcGh5bGlua19wY3NfbmVnX21vZGVgIGFuZCBgcGh5bGlua19zZnBfY29uZmlnX29wdGljYWxgIHdoZW4gdGhhdCBzcGVjaWZpYyBpbnRlcmZhY2UgbW9kZSBpcyBpbiBwbGF5LiBPa2F5LCB0aGF0IG1ha2VzIGl0IG1vcmUgaW50ZXJlc3RpbmcuXG5cblRoZSBuZXh0IHF1ZXN0aW9uIGlzIGFsd2F5cyByZWFjaGFiaWxpdHkuIENhbiBJIGFjdHVhbGx5IGhpdCB0aGlzIGluIGEgUUVNVSBlbnZpcm9ubWVudD8gSWYgYSBuZXR3b3JrIGRyaXZlciBpcyB1c2luZyBgcGh5bGlua2AgKmFuZCogc3VwcG9ydHMgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgLCB0aGVuIHllcywgaXQncyBwb3NzaWJsZS4gU28sIGFyZSB0aGVyZSBhbnkgZHJpdmVycyBpbiBteSBRRU1VIHNldHVwIHRoYXQgbWVldCBib3RoIG9mIHRob3NlIGNyaXRlcmlhPyBUaW1lIHRvIGdvIGh1bnRpbmcgZm9yIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyByZWFjaGFibGUgYW5kIGlmIGl0IGlzLCB0aGVuIHRoZSBmdXp6aW5nIGVmZm9ydCBpcyBtb3JlIGp1c3RpZmllZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk4NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMzowNTowOC45NDM0NjQ0NzhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDg0OTA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYz0xNTk9aW50IHBoeV9pbnRlcmZhY2VfbnVtX3BvcnRzKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy0yMDEtXFx0XFx0cmV0dXJuIDQ7XFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6MjAyOlxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy0yMDMtXFx0XFx0cmV0dXJuIDU7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYz0yOTQ9dW5zaWduZWQgbG9uZyBwaHlfY2Fwc19mcm9tX2ludGVyZmFjZShwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMtMzEwLVxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jOjMxMTpcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMtMzEyLVxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FTR01JSTpcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjM4PXN0YXRpYyBpbnQgcGh5bGlua19pbnRlcmZhY2VfbWF4X3NwZWVkKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI1OS1cXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI2MDpcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNjEtXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz03NzQ9c3RhdGljIGludCBwaHlsaW5rX3BhcnNlX21vZGUoc3RydWN0IHBoeWxpbmsgKnBsLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy04MDgtXFx0XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzo4MDk6XFx0XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtODEwLVxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FTR01JSTpcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTAzOT1zdGF0aWMgZW51bSBpbmJhbmRfdHlwZSBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZShwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xMDQyLVxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTA0MzpcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xMDQ0LVxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FTR01JSTpcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYz00OTA9c3RhdGljIGludCBxY2E4MDd4X3BoeV9wYWNrYWdlX3Byb2JlX29uY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYy01NDktXFx0XFx0aWYgKCFzdHJjYXNlY21wKHBhY2thZ2VfbW9kZV9uYW1lLFxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYzo1NTA6XFx0XFx0XFx0XFx0cGh5X21vZGVzKFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUkpKSlcXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM6NTUxOlxcdFxcdFxcdHByaXYtXFx1MDAzZXBhY2thZ2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk7XFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTU1Mi1cXHRcXHRlbHNlIGlmICghc3RyY2FzZWNtcChwYWNrYWdlX21vZGVfbmFtZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYz01NjI9c3RhdGljIGludCBxY2E4MDd4X3BoeV9wYWNrYWdlX2NvbmZpZ19pbml0X29uY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYy01ODUtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jOjU4NjpcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTU4Ny1cXHRkZWZhdWx0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMzowNTowOS4wNjgzMTgzMDlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM2Mzc0NTk2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgdGhlIFFDQTgwN3ggUEhZIERyaXZlciBpbiBhIFFFTVUgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIHRoaXMgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgIGRlZmluZSwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGBxY2E4MDd4YCBQSFkgZHJpdmVyIGlzIHRoZSBwcmltYXJ5IHVzZXIuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgY2FuIEkgZXZlbiAqZ2V0KiB0byB0aGF0IGRyaXZlciBpbnNpZGUgUUVNVT8gSSBrbm93IGl0J3MgYSBRdWFsY29tbSBQSFksIHdoaWNoIG1lYW5zIGl0J3MgcHJvYmFibHkgbm90IGdvaW5nIHRvIGJlIHBhcnQgb2YgYSBzdGFuZGFyZCBRRU1VIHNldHVwLiBVbmxlc3MsIG9mIGNvdXJzZSwgdGhlcmUncyBleHBsaWNpdCBlbXVsYXRpb24gZm9yIGl0LCBvciB0aGUgUEhZIGZyYW1ld29yayBpdHNlbGYgb2ZmZXJzIGEgd2F5IHRvIGluc3RhbnRpYXRlIGFyYml0cmFyeSBQSFlzIHRocm91Z2ggbmV0bGluayBvciBzeXNmcy4gQnV0IHRoYXQncyB1c3VhbGx5IG5vdCBob3cgaXQgd29ya3M7IFBIWXMgYXJlIHR5cGljYWxseSBwcm9iZWQgdmlhIHRoZSBNRElPIGJ1cy5cblxuTm93LCB0aGF0IGdldHMgbWUgdGhpbmtpbmcuLi4gY2FuIEkgKmluc3RhbnRpYXRlKiBhbiBNRElPIGRldmljZSBvciBhIFBIWSBkZXZpY2UgdmlhIHN5c2ZzIG9yIG5ldGxpbms/IEhpc3RvcmljYWxseSwgTURJTyBkZXZpY2VzIGFyZSBkZXJpdmVkIGZyb20gdGhlIGRldmljZSB0cmVlIG9yIEFDUEkgb3IgYXJlIHJlZ2lzdGVyZWQgYnkgdGhlIE1BQyBkcml2ZXIuIEkgcmVtZW1iZXIgc2VlaW5nIGRyaXZlcnMgbGlrZSBgbWRpby1iY20tdW5pbWFjYCwgYG1kaW8tZ3Bpb2AsIGFuZCBgbWRpby1tb2NrdXBgLlxuXG5BaGEhIERpZG4ndCBgc3l6a2FsbGVyYCBoYXZlIHNvbWUgc3VwcG9ydCBmb3IgaW5qZWN0aW5nIE1ESU8gZGV2aWNlcyBvciBtYXliZSB1c2luZyBgbWRpby1tb2NrdXBgPyBMZXQgbWUgY2hlY2sgZm9yIGBtZGlvLW1vY2t1cGAuIFRoaXMgY291bGQgYmUgYSB2aWFibGUgcGF0aCB0byB0ZXN0aW5nIHRoYXQgZHJpdmVyIHdpdGhvdXQgYSBzcGVjaWFsaXplZCBoYXJkd2FyZSBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQzOCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMzowNToxNC40MzIwNjY1MjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODM2MTI3NzgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW8tbW9ja3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDM6MDU6MTYuNDE1Njg3MTI3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3ODA0NDE2MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSdtIGhpdHRpbmcgYSByb2FkYmxvY2suIEkgY2FuJ3Qgc2VlbSB0byBnZXQgdG8gdGhlIGBtZGlvLW1vY2t1cGAgZW52aXJvbm1lbnQgZGlyZWN0bHksIGFuZCB0aGF0J3MgbWFraW5nIHRoaW5ncyB0cmlja3kuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gdXNlIHRoZSBgcGh5bGlua2AgZnVuY3Rpb25zLCBzaW5jZSBNQUMgZHJpdmVycyBjYWxsIHRoZW0uIEJ1dCByZWFjaGluZyB0aGUgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgIG1vZGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBpcyBwcm92aW5nIGRpZmZpY3VsdC4gUGVyaGFwcyBpdCdzIG5vdCB3b3J0aCB0aGUgZWZmb3J0IGZvciBmdXp6aW5nIGlmIGl0J3MgdG9vIGN1bWJlcnNvbWUgdG8gc2V0IHVwLlxuXG5Ib2xkIG9uLCBJIGp1c3QgcmVtZW1iZXJlZDogYHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlYCBpcyBjYWxsZWQgZnJvbSBgcGh5bGlua19wY3NfbmVnX21vZGVgIGFuZCBgcGh5bGlua19zZnBfY29uZmlnX29wdGljYWxgLiBOb3cgd2UncmUgZ2V0dGluZyBzb21ld2hlcmUhIGBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbGAgaXMgY2FsbGVkIHdoZW4gYW4gU0ZQIG1vZHVsZSBnZXRzIGluc2VydGVkLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCBjYW4gSSAqc2ltdWxhdGUqIFNGUCBtb2R1bGUgaW5zZXJ0aW9uPyBUaGF0IHNlZW1zIGxpa2UgYSBtb3JlIHBsYXVzaWJsZSBwYXRoLlxuXG5UaGVyZSdzIHRoZSBgc2ZwYCBkcml2ZXIgaW4gYGRyaXZlcnMvbmV0L3BoeS9zZnAuY2AsIGJ1dCB0aGF0IHN0aWxsIGxpa2VseSBkZW1hbmRzIGVpdGhlciBoYXJkd2FyZSBvciBzb21lIHZlcnkgc3BlY2lmaWMgZW11bGF0aW9uLiBMZXQgbWUgYmFjayB1cCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgKnZpcnR1YWwqIGRyaXZlcnMgdGhhdCB1dGlsaXplIGBwaHlsaW5rYOKApiBtYXliZSBJIGNhbiBleHBsb2l0IHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMDMsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDM6MDU6MjEuMTk2MTMwOTYxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY1MTUyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5bGlua19jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYz0xMTI4PXN0YXRpYyBpbnQgYWx0ZXJhX3RzZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jLTE0MTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jOjE0MTY6XFx0cHJpdi1cXHUwMDNlcGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFxcdTAwMjZwcml2LVxcdTAwM2VwaHlsaW5rX2NvbmZpZyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmMtMTQxNy1cXHRcXHRcXHRcXHQgICAgICAgb2ZfZndub2RlX2hhbmRsZShwcml2LVxcdTAwM2VkZXZpY2UtXFx1MDAzZW9mX25vZGUpLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYz0xMDc0PXN0YXRpYyBpbnQgYWc3MXh4X3BoeWxpbmtfc2V0dXAoc3RydWN0IGFnNzF4eCAqYWcpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jLTExMDgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYzoxMTA5OlxcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcXHUwMDI2YWctXFx1MDAzZXBoeWxpbmtfY29uZmlnLCBhZy1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LmZ3bm9kZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jLTExMTAtXFx0XFx0XFx0XFx0IGFnLVxcdTAwM2VwaHlfaWZfbW9kZSwgXFx1MDAyNmFnNzF4eF9waHlsaW5rX21hY19vcHMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0xMDIzPXN0YXRpYyBpbnQgbWFjYl9taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTA4NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjEwODY6XFx0YnAtXFx1MDAzZXBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcXHUwMDI2YnAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLCBicC1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LmZ3bm9kZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTEwODctXFx0XFx0XFx0XFx0ICAgICBicC1cXHUwMDNlcGh5X2ludGVyZmFjZSwgXFx1MDAyNm1hY2JfcGh5bGlua19vcHMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEvZHBhYV9ldGguYz0yMDE9c3RhdGljIGludCBkcGFhX25ldGRldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEvZHBhYV9ldGguYy0yNzQtXFx0bWFjX2Rldi1cXHUwMDNldXBkYXRlX3NwZWVkID0gZHBhYV9ldGhfY2dyX3NldF9zcGVlZDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYS9kcGFhX2V0aC5jOjI3NTpcXHRtYWNfZGV2LVxcdTAwM2VwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXFx1MDAyNm1hY19kZXYtXFx1MDAzZXBoeWxpbmtfY29uZmlnLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhL2RwYWFfZXRoLmMtMjc2LVxcdFxcdFxcdFxcdFxcdCAgZGV2X2Z3bm9kZShtYWNfZGV2LVxcdTAwM2VkZXYpLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLW1hYy5jPTU2MD1pbnQgZHBhYTJfbWFjX2Nvbm5lY3Qoc3RydWN0IGRwYWEyX21hYyAqbWFjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLW1hYy5jLTYyNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItbWFjLmM6NjI1OlxcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcXHUwMDI2bWFjLVxcdTAwM2VwaHlsaW5rX2NvbmZpZyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItbWFjLmMtNjI2LVxcdFxcdFxcdFxcdCBkcG1hY19ub2RlLCBtYWMtXFx1MDAzZWlmX21vZGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmM9OTcxPXN0YXRpYyBpbnQgZW5ldGM0X2xpbmtfaW5pdChzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jLTk4OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmM6OTkwOlxcdGVyciA9IGVuZXRjX3BoeWxpbmtfY3JlYXRlKHByaXYsIG5vZGUsIFxcdTAwMjZlbmV0Y19wbF9tYWNfb3BzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMtOTkxLVxcdGlmIChlcnIpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMtOTkyLVxcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIGNyZWF0ZSBwaHlsaW5rXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmM6OTkzOlxcdFxcdGdvdG8gZXJyX3BoeWxpbmtfY3JlYXRlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfcGYuYy05OTQtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jLTk5Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmM6OTk4OmVycl9waHlsaW5rX2NyZWF0ZTpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMtOTk5LVxcdGVuZXRjX21kaW9idXNfZGVzdHJveShwZik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuYz04NDc9c3RhdGljIGludCBlbmV0Y19wZl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5jLTkyOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuYzo5MzA6XFx0ZXJyID0gZW5ldGNfcGh5bGlua19jcmVhdGUocHJpdiwgbm9kZSwgXFx1MDAyNmVuZXRjX21hY19waHlsaW5rX29wcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmMtOTMxLVxcdGlmIChlcnIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmM6OTMyOlxcdFxcdGdvdG8gZXJyX3BoeWxpbmtfY3JlYXRlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5jLTkzMy1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5jLTk0MS1cXHRlbmV0Y19waHlsaW5rX2Rlc3Ryb3kocHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmM6OTQyOmVycl9waHlsaW5rX2NyZWF0ZTpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuYy05NDMtXFx0ZW5ldGNfbWRpb2J1c19kZXN0cm95KHBmKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYz0zMTI9RVhQT1JUX1NZTUJPTF9HUEwoZW5ldGNfbWRpb2J1c19kZXN0cm95KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMzEzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYzozMTQ6aW50IGVuZXRjX3BoeWxpbmtfY3JlYXRlKHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMzE1LVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzICpvcHMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMzM3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYzozMzg6XFx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFxcdTAwMjZwZi1cXHUwMDNlcGh5bGlua19jb25maWcsIG9mX2Z3bm9kZV9oYW5kbGUobm9kZSksXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTMzOS1cXHRcXHRcXHRcXHQgcGYtXFx1MDAzZWlmX21vZGUsIG9wcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMzQ4LX1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmM6MzQ5OkVYUE9SVF9TWU1CT0xfR1BMKGVuZXRjX3BoeWxpbmtfY3JlYXRlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMzUwLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5oPTEyPXZvaWQgZW5ldGNfbWRpb2J1c19kZXN0cm95KHN0cnVjdCBlbmV0Y19wZiAqcGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uaDoxMzppbnQgZW5ldGNfcGh5bGlua19jcmVhdGUoc3RydWN0IGVuZXRjX25kZXZfcHJpdiAqcHJpdiwgc3RydWN0IGRldmljZV9ub2RlICpub2RlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uaC0xNC1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyAqb3BzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jPTg1Mz1zdGF0aWMgaW50IGZzX2VuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9mc19lbmV0LW1haW4uYy05MzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvZnNfZW5ldC1tYWluLmM6OTMzOlxcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcXHUwMDI2ZmVwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZywgZGV2X2Z3bm9kZShmZXAtXFx1MDAzZWRldiksXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMtOTM0LVxcdFxcdFxcdFxcdCBwaHlfbW9kZSwgXFx1MDAyNmZzX2VuZXRfcGh5bGlua19tYWNfb3BzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS91Y2NfZ2V0aC5jPTM0MTk9c3RhdGljIGludCB1Y2NfZ2V0aF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlKiBvZmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS91Y2NfZ2V0aC5jLTM1NzMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3VjY19nZXRoLmM6MzU3NDpcXHRwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXFx1MDAyNnVnZXRoLVxcdTAwM2VwaHlsaW5rX2NvbmZpZywgZGV2X2Z3bm9kZShcXHUwMDI2ZGV2LVxcdTAwM2VkZXYpLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS91Y2NfZ2V0aC5jLTM1NzUtXFx0XFx0XFx0XFx0IHBoeV9pbnRlcmZhY2UsIFxcdTAwMjZ1Z2V0aF9tYWNfb3BzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmM9NTQ4MD1zdGF0aWMgaW50IG12bmV0YV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYy01NTk4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmM6NTU5OTpcXHRwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXFx1MDAyNnBwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZywgcGRldi1cXHUwMDNlZGV2LmZ3bm9kZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jLTU2MDAtXFx0XFx0XFx0XFx0IHBoeV9tb2RlLCBcXHUwMDI2bXZuZXRhX3BoeWxpbmtfb3BzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jPTY4NDA9c3RhdGljIGludCBtdnBwMl9wb3J0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uYy03MTQ3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jOjcxNDg6XFx0XFx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFxcdTAwMjZwb3J0LVxcdTAwM2VwaHlsaW5rX2NvbmZpZywgcG9ydF9md25vZGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmMtNzE0OS1cXHRcXHRcXHRcXHRcXHQgcGh5X21vZGUsIFxcdTAwMjZtdnBwMl9waHlsaW5rX29wcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX21haW4uYz0zNzA9c3RhdGljIGludCBwcmVzdGVyYV9wb3J0X3NmcF9iaW5kKHN0cnVjdCBwcmVzdGVyYV9wb3J0ICpwb3J0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9tYWluLmMtNDE2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfbWFpbi5jOjQxNzpcXHRcXHRwaHlfbGluayA9IHBoeWxpbmtfY3JlYXRlKFxcdTAwMjZwb3J0LVxcdTAwM2VwaHlfY29uZmlnLCBmd25vZGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9tYWluLmMtNDE4LVxcdFxcdFxcdFxcdFxcdCAgUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYz00ODIzPXN0YXRpYyBpbnQgbXRrX2FkZF9tYWMoc3RydWN0IG10a19ldGggKmV0aCwgc3RydWN0IGRldmljZV9ub2RlICpucClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmMtNDk2Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jOjQ5Njg6XFx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFxcdTAwMjZtYWMtXFx1MDAzZXBoeWxpbmtfY29uZmlnLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmMtNDk2OS1cXHRcXHRcXHRcXHQgb2ZfZndub2RlX2hhbmRsZShtYWMtXFx1MDAzZW9mX25vZGUpLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19uZXRkZXYuYz03NDY9c3RydWN0IG5ldF9kZXZpY2UgKmZibmljX25ldGRldl9hbGxvYyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5jLTgzNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5jOjgzNTpcXHRpZiAoZmJuaWNfcGh5bGlua19jcmVhdGUobmV0ZGV2KSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbmV0ZGV2LmMtODM2LVxcdFxcdGZyZWVfbmV0ZGV2KG5ldGRldik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5oPTExMT1pbnQgZmJuaWNfcGh5bGlua19nZXRfZmVjcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5oLTExMi1cXHRcXHRcXHQgICAgICAgc3RydWN0IGV0aHRvb2xfZmVjcGFyYW0gKmZlY3BhcmFtKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5oOjExMzppbnQgZmJuaWNfcGh5bGlua19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19uZXRkZXYuaC0xMTQtdm9pZCBmYm5pY19waHlsaW5rX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BoeWxpbmsuYz0xNzc9c3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgZmJuaWNfcGh5bGlua19tYWNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19waHlsaW5rLmMtMTg2LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGh5bGluay5jOjE4NzogKiBmYm5pY19waHlsaW5rX2NyZWF0ZSAtIFBoeWxpbmsgZGV2aWNlIGNyZWF0aW9uXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19waHlsaW5rLmMtMTg4LSAqIEBuZXRkZXY6IE5ldHdvcmsgRGV2aWNlIHN0cnVjdCB0byBhdHRhY2ggcGh5bGluayBkZXZpY2VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGh5bGluay5jLTE5Ni0gKiovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19waHlsaW5rLmM6MTk3OmludCBmYm5pY19waHlsaW5rX2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGh5bGluay5jLTE5OC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BoeWxpbmsuYy0yMzEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19waHlsaW5rLmM6MjMyOlxcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcXHUwMDI2ZmJuLVxcdTAwM2VwaHlsaW5rX2NvbmZpZywgTlVMTCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BoeWxpbmsuYy0yMzMtXFx0XFx0XFx0XFx0IGZibmljX3BoeWxpbmtfc2VsZWN0X2ludGVyZmFjZShmYm4tXFx1MDAzZWF1aSksXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmM9MzE0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyBsYW43NDN4X3BoeWxpbmtfbWFjX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYy0zMTQ5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYzozMTUwOnN0YXRpYyBpbnQgbGFuNzQzeF9waHlsaW5rX2NyZWF0ZShzdHJ1Y3QgbGFuNzQzeF9hZGFwdGVyICphZGFwdGVyKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYy0zMTUxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYy0zMTkyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYzozMTkzOlxcdHBsID0gcGh5bGlua19jcmVhdGUoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXBoeWxpbmtfY29uZmlnLCBOVUxMLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYy0zMTk0LVxcdFxcdFxcdCAgICBhZGFwdGVyLVxcdTAwM2VwaHlfaW50ZXJmYWNlLCBcXHUwMDI2bGFuNzQzeF9waHlsaW5rX21hY19vcHMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjc0M3hfbWFpbi5jPTM2NjQ9c3RhdGljIGludCBsYW43NDN4X3BjaWRldl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYy0zNzIzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYzozNzI0OlxcdHJldCA9IGxhbjc0M3hfcGh5bGlua19jcmVhdGUoYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjc0M3hfbWFpbi5jLTM3MjUtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW45NjZ4L2xhbjk2NnhfbWFpbi5jPTc5MT1zdGF0aWMgaW50IGxhbjk2NnhfcHJvYmVfcG9ydChzdHJ1Y3QgbGFuOTY2eCAqbGFuOTY2eCwgdTMyIHAsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9sYW45NjZ4X21haW4uYy04NTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvbGFuOTY2eF9tYWluLmM6ODU2OlxcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcXHUwMDI2cG9ydC1cXHUwMDNlcGh5bGlua19jb25maWcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvbGFuOTY2eF9tYWluLmMtODU3LVxcdFxcdFxcdFxcdCBwb3J0bnAsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L3NwYXJ4NV9tYWluLmM9MzEyPXN0YXRpYyBpbnQgc3Bhcng1X2NyZWF0ZV9wb3J0KHN0cnVjdCBzcGFyeDUgKnNwYXJ4NSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvc3Bhcng1X21haW4uYy0zODgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfbWFpbi5jOjM4OTpcXHRwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXFx1MDAyNnNweDVfcG9ydC1cXHUwMDNlcGh5bGlua19jb25maWcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfbWFpbi5jLTM5MC1cXHRcXHRcXHRcXHQgb2ZfZndub2RlX2hhbmRsZShjb25maWctXFx1MDAzZW5vZGUpLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfbmV0LmM9MTc3ND1zdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyBvY2Vsb3RfcGh5bGlua19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9uZXQuYy0xNzc5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X25ldC5jOjE3ODA6c3RhdGljIGludCBvY2Vsb3RfcG9ydF9waHlsaW5rX2NyZWF0ZShzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X25ldC5jLTE3ODEtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwb3J0bnApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9uZXQuYy0xODIwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X25ldC5jOjE4MjE6XFx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFxcdTAwMjZwcml2LVxcdTAwM2VwaHlsaW5rX2NvbmZpZyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9uZXQuYy0xODIyLVxcdFxcdFxcdFxcdCBvZl9md25vZGVfaGFuZGxlKHBvcnRucCksXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9uZXQuYz0xODQzPWludCBvY2Vsb3RfcHJvYmVfcG9ydChzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QsIGludCBwb3J0LCBzdHJ1Y3QgcmVnbWFwICp0YXJnZXQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9uZXQuYy0xODc5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X25ldC5jOjE4ODA6XFx0ZXJyID0gb2NlbG90X3BvcnRfcGh5bGlua19jcmVhdGUob2NlbG90LCBwb3J0LCBwb3J0bnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X25ldC5jLTE4ODEtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9MTM3MD1zdGF0aWMgaW50IHN0bW1hY19waHlsaW5rX3NldHVwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMTQ2MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjE0NjI6XFx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKGNvbmZpZywgZGV2X2Z3bm9kZShwcml2LVxcdTAwM2VkZXZpY2UpLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMTQ2My1cXHRcXHRcXHRcXHQgcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcGh5X2ludGVyZmFjZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS90bjQwX3BoeS5jPTQ1PWludCB0bjQwX3BoeV9yZWdpc3RlcihzdHJ1Y3QgdG40MF9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL3RuNDBfcGh5LmMtNjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL3RuNDBfcGh5LmM6NjM6XFx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKGNvbmZpZywgTlVMTCwgUEhZX0lOVEVSRkFDRV9NT0RFX1hBVUksXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL3RuNDBfcGh5LmMtNjQtXFx0XFx0XFx0XFx0IFxcdTAwMjZ0bjQwX21hY19vcHMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvYW02NS1jcHN3LW51c3MuYz0yNzU3PWFtNjVfY3Bzd19udXNzX2luaXRfcG9ydF9uZGV2KHN0cnVjdCBhbTY1X2Nwc3dfY29tbW9uICpjb21tb24sIHUzMiBwb3J0X2lkeClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2FtNjUtY3Bzdy1udXNzLmMtMjg0MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9hbTY1LWNwc3ctbnVzcy5jOjI4NDI6XFx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFxcdTAwMjZwb3J0LVxcdTAwM2VzbGF2ZS5waHlsaW5rX2NvbmZpZyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9hbTY1LWNwc3ctbnVzcy5jLTI4NDMtXFx0XFx0XFx0XFx0IG9mX2Z3bm9kZV9oYW5kbGUocG9ydC1cXHUwMDNlc2xhdmUucG9ydF9ucCksXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmM9MTMwPXN0YXRpYyBpbnQgbmdiZV9waHlsaW5rX2luaXQoc3RydWN0IHd4ICp3eClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYy0xNDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jOjE1MDpcXHRwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoY29uZmlnLCBOVUxMLCBwaHlfbW9kZSwgXFx1MDAyNm5nYmVfbWFjX29wcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jLTE1MS1cXHRpZiAoSVNfRVJSKHBoeWxpbmspKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYz00ODI9aW50IHR4Z2JlX3BoeWxpbmtfaW5pdF9hbWwoc3RydWN0IHR4Z2JlICp0eGdiZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmMtNTEyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmM6NTEzOlxcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShjb25maWcsIE5VTEwsIHBoeV9tb2RlLCBcXHUwMDI2dHhnYmVfbWFjX29wc19hbWwpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmMtNTE0LVxcdGlmIChJU19FUlIocGh5bGluaykpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jPTI2OD1zdGF0aWMgaW50IHR4Z2JlX3BoeWxpbmtfaW5pdChzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0yOTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzoyOTM6XFx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKGNvbmZpZywgZndub2RlLCBwaHlfbW9kZSwgXFx1MDAyNnR4Z2JlX21hY19vcHMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMjk0LVxcdGlmIChJU19FUlIocGh5bGluaykpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfbWFpbi5jPTI3OTU9c3RhdGljIGludCBheGllbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfbWFpbi5jLTMxMTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X21haW4uYzozMTE4OlxcdGxwLVxcdTAwM2VwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXFx1MDAyNmxwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZywgcGRldi1cXHUwMDNlZGV2LmZ3bm9kZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfbWFpbi5jLTMxMTktXFx0XFx0XFx0XFx0ICAgICBscC1cXHUwMDNlcGh5X21vZGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfbWFpbi5jLTMxMjItXFx0XFx0cmV0ID0gUFRSX0VSUihscC1cXHUwMDNlcGh5bGluayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X21haW4uYzozMTIzOlxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcInBoeWxpbmtfY3JlYXRlIGVycm9yICglaSlcXFxcblxcXCIsIHJldCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X21haW4uYy0zMTI0LVxcdFxcdGdvdG8gY2xlYW51cF9tZGlvO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz01MTY9c3RhdGljIGludCBwaHlsaW5rX3ZhbGlkYXRlX21hY19hbmRfcGNzKHN0cnVjdCBwaHlsaW5rICpwbCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNTMxLVxcdGlmIChwY3MpIHtcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjUzMjpcXHRcXHQvKiBUaGUgUENTLCBpZiBwcmVzZW50LCBtdXN0IGJlIHNldHVwIGJlZm9yZSBwaHlsaW5rX2NyZWF0ZSgpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy01MzMtXFx0XFx0ICogaGFzIGJlZW4gY2FsbGVkLiBJZiB0aGUgb3BzIGlzIG5vdCBpbml0aWFsaXNlZCwgcHJpbnQgYW5cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTAzOT1zdGF0aWMgZW51bSBpbmJhbmRfdHlwZSBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZShwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xMDcxLSAqIHBoeWxpbmtfcGNzX25lZ19tb2RlKCkgLSBoZWxwZXIgdG8gZGV0ZXJtaW5lIFBDUyBpbmJhbmQgbW9kZVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTA3MjogKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwNzMtICogQHBjczogYSBwb2ludGVyIHRvIFxcdTAwMjZzdHJ1Y3QgcGh5bGlua19wY3NcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTc2OT1zdGF0aWMgaW50IHBoeWxpbmtfcmVnaXN0ZXJfc2ZwKHN0cnVjdCBwaHlsaW5rICpwbCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTc5My0gKiBwaHlsaW5rX3NldF9maXhlZF9saW5rKCkgLSBzZXQgdGhlIGZpeGVkIGxpbmtcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE3OTQ6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xNzk1LSAqIEBzdGF0ZTogYSBwb2ludGVyIHRvIGEgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZS5cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTgzMT1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3NldF9maXhlZF9saW5rKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTgzMy0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE4MzQ6ICogcGh5bGlua19jcmVhdGUoKSAtIGNyZWF0ZSBhIHBoeWxpbmsgaW5zdGFuY2VcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE4MzUtICogQGNvbmZpZzogYSBwb2ludGVyIHRvIHRoZSB0YXJnZXQgXFx1MDAyNnN0cnVjdCBwaHlsaW5rX2NvbmZpZ1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xODQ4LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTg0OTpzdHJ1Y3QgcGh5bGluayAqcGh5bGlua19jcmVhdGUoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xODUwLVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xOTM2LX1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE5Mzc6RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19jcmVhdGUpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTkzOC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTk0MC0gKiBwaHlsaW5rX2Rlc3Ryb3koKSAtIGNsZWFudXAgYW5kIGRlc3Ryb3kgdGhlIHBoeWxpbmsgaW5zdGFuY2VcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE5NDE6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xOTQyLSAqXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTE5NTc9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19kZXN0cm95KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTk2MC0gKiBwaHlsaW5rX2V4cGVjdHNfcGh5KCkgLSBEZXRlcm1pbmUgaWYgcGh5bGluayBleHBlY3RzIGEgcGh5IHRvIGJlIGF0dGFjaGVkXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxOTYxOiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTk2Mi0gKlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yMjA2PXN0YXRpYyBpbnQgcGh5bGlua19hdHRhY2hfcGh5KHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjIyNi0gKiBwaHlsaW5rX2Nvbm5lY3RfcGh5KCkgLSBjb25uZWN0IGEgUEhZIHRvIHRoZSBwaHlsaW5rIGluc3RhbmNlXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyMjI3OiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjIyOC0gKiBAcGh5OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2UuXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTIyNjA9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19jb25uZWN0X3BoeSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIyNjMtICogcGh5bGlua19vZl9waHlfY29ubmVjdCgpIC0gY29ubmVjdCB0aGUgUEhZIHNwZWNpZmllZCBpbiB0aGUgRFQgbW9kZS5cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjIyNjQ6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMjY1LSAqIEBkbjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBkZXZpY2Vfbm9kZS5cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjI3OT1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX29mX3BoeV9jb25uZWN0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjI4Mi0gKiBwaHlsaW5rX2Z3bm9kZV9waHlfY29ubmVjdCgpIC0gY29ubmVjdCB0aGUgUEhZIHNwZWNpZmllZCBpbiB0aGUgZndub2RlLlxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjI4MzogKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIyODQtICogQGZ3bm9kZTogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBmd25vZGVfaGFuZGxlLlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yMzM4PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZndub2RlX3BoeV9jb25uZWN0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjM0Mi0gKiAgIGluc3RhbmNlLlxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjM0MzogKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIzNDQtICpcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjM3Mz1zdGF0aWMgdm9pZCBwaHlsaW5rX2xpbmtfY2hhbmdlZChzdHJ1Y3QgcGh5bGluayAqcGwsIGJvb2wgdXAsIGNvbnN0IGNoYXIgKndoYXQpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIzODItICogcGh5bGlua19tYWNfY2hhbmdlKCkgLSBub3RpZnkgcGh5bGluayBvZiBhIGNoYW5nZSBpbiBNQUMgc3RhdGVcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjIzODM6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMzg0LSAqIEB1cDogaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGxpbmsgaXMgY3VycmVudGx5IHVwLlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yNDE1PXN0YXRpYyBpcnFyZXR1cm5fdCBwaHlsaW5rX2xpbmtfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNDI1LSAqIHBoeWxpbmtfc3RhcnQoKSAtIHN0YXJ0IGEgcGh5bGluayBpbnN0YW5jZVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjQyNjogKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI0MjctICpcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjQ4OD1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3N0YXJ0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjQ5MS0gKiBwaHlsaW5rX3N0b3AoKSAtIHN0b3AgYSBwaHlsaW5rIGluc3RhbmNlXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNDkyOiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjQ5My0gKlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yNTIyPUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfc3RvcCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI1MjUtICogcGh5bGlua19yeF9jbGtfc3RvcF9ibG9jaygpIC0gYmxvY2sgUEhZIGFiaWxpdHkgdG8gc3RvcCByZWNlaXZlIGNsb2NrIGluIExQSVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjUyNjogKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI1MjctICpcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjU1MT1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3J4X2Nsa19zdG9wX2Jsb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjU1NC0gKiBwaHlsaW5rX3J4X2Nsa19zdG9wX3VuYmxvY2soKSAtIHVuYmxvY2sgUEhZIGFiaWxpdHkgdG8gc3RvcCByZWNlaXZlIGNsb2NrXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNTU1OiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjU1Ni0gKlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yNTkzPXN0YXRpYyBib29sIHBoeWxpbmtfcGh5X3BtX3NwZWVkX2N0cmwoc3RydWN0IHBoeWxpbmsgKnBsKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNjAwLSAqIHBoeWxpbmtfc3VzcGVuZCgpIC0gaGFuZGxlIGEgbmV0d29yayBkZXZpY2Ugc3VzcGVuZCBldmVudFxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjYwMTogKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI2MDItICogQG1hY193b2w6IHRydWUgaWYgdGhlIE1BQyBuZWVkcyB0byByZWNlaXZlIHBhY2tldHMgZm9yIFdha2Utb24tTGFuXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI2NTI9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19zdXNwZW5kKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjY1NS0gKiBwaHlsaW5rX3ByZXBhcmVfcmVzdW1lKCkgLSBwcmVwYXJlIHRvIHJlc3VtZSBhIG5ldHdvcmsgZGV2aWNlXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNjU2OiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjY1Ny0gKlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yNjc3PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfcHJlcGFyZV9yZXN1bWUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNjgwLSAqIHBoeWxpbmtfcmVzdW1lKCkgLSBoYW5kbGUgYSBuZXR3b3JrIGRldmljZSByZXN1bWUgZXZlbnRcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI2ODE6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNjgyLSAqXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI3MjA9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19yZXN1bWUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNzIzLSAqIHBoeWxpbmtfZXRodG9vbF9nZXRfd29sKCkgLSBnZXQgdGhlIHdha2Ugb24gbGFuIHBhcmFtZXRlcnMgZm9yIHRoZSBQSFlcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI3MjQ6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNzI1LSAqIEB3b2w6IGEgcG9pbnRlciB0byBcXHUwMDI2c3RydWN0IGV0aHRvb2xfd29saW5mbyB0byBob2xkIHRoZSByZWFkIHBhcmFtZXRlcnNcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9Mjc1Nz1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2V0aHRvb2xfZ2V0X3dvbCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI3NjAtICogcGh5bGlua19ldGh0b29sX3NldF93b2woKSAtIHNldCB3YWtlIG9uIGxhbiBwYXJhbWV0ZXJzXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNzYxOiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjc2Mi0gKiBAd29sOiBhIHBvaW50ZXIgdG8gXFx1MDAyNnN0cnVjdCBldGh0b29sX3dvbGluZm8gZm9yIHRoZSBkZXNpcmVkIHBhcmFtZXRlcnNcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9Mjg4OT1zdGF0aWMgdm9pZCBwaHlsaW5rX2dldF9rc2V0dGluZ3MoY29uc3Qgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI5MDQtICogcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19nZXQoKSAtIGdldCB0aGUgY3VycmVudCBsaW5rIHNldHRpbmdzXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyOTA1OiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjkwNi0gKiBAa3NldDogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIHRvIGhvbGQgbGluayBzZXR0aW5nc1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yOTU3PXN0YXRpYyBib29sIHBoeWxpbmtfdmFsaWRhdGVfcGNzX2luYmFuZF9hdXRvbmVnKHN0cnVjdCBwaHlsaW5rICpwbCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjk3OC0gKiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldCgpIC0gc2V0IHRoZSBsaW5rIHNldHRpbmdzXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyOTc5OiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjk4MC0gKiBAa3NldDogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGZvciB0aGUgZGVzaXJlZCBtb2Rlc1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMTQ1PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzE0OC0gKiBwaHlsaW5rX2V0aHRvb2xfbndheV9yZXNldCgpIC0gcmVzdGFydCBuZWdvdGlhdGlvblxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzE0OTogKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMxNTAtICpcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzE3MD1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2V0aHRvb2xfbndheV9yZXNldCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMxNzMtICogcGh5bGlua19ldGh0b29sX2dldF9wYXVzZXBhcmFtKCkgLSBnZXQgdGhlIGN1cnJlbnQgcGF1c2UgcGFyYW1ldGVyc1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzE3NDogKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMxNzUtICogQHBhdXNlOiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMTg2PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZXRodG9vbF9nZXRfcGF1c2VwYXJhbSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMxODktICogcGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtKCkgLSBzZXQgdGhlIGN1cnJlbnQgcGF1c2UgcGFyYW1ldGVyc1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzE5MDogKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMxOTEtICogQHBhdXNlOiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMjcyPUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMyNzYtICogICBjb3VudGVyXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozMjc3OiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKS5cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMyNzgtICpcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzI5NT1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2dldF9lZWVfZXJyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzI5OC0gKiBwaHlsaW5rX2V0aHRvb2xfZ2V0X2VlZSgpIC0gcmVhZCB0aGUgZW5lcmd5IGVmZmljaWVudCBldGhlcm5ldCBwYXJhbWV0ZXJzXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozMjk5OiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzMwMC0gKiBAZWVlOiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IGV0aHRvb2xfa2VlZSBmb3IgdGhlIHJlYWQgcGFyYW1ldGVyc1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMzIxPUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZXRodG9vbF9nZXRfZWVlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzMyNC0gKiBwaHlsaW5rX2V0aHRvb2xfc2V0X2VlZSgpIC0gc2V0IHRoZSBlbmVyZ3kgZWZmaWNpZW50IGV0aGVybmV0IHBhcmFtZXRlcnNcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjMzMjU6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzI2LSAqIEBlZWU6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgZXRodG9vbF9rZWVlIGZvciB0aGUgZGVzaXJlZCBwYXJhbWV0ZXJzXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTM0OTU9c3RhdGljIGludCBwaHlsaW5rX21paV93cml0ZShzdHJ1Y3QgcGh5bGluayAqcGwsIHVuc2lnbmVkIGludCBwaHlfaWQsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTM1MTMtICogcGh5bGlua19taWlfaW9jdGwoKSAtIGdlbmVyaWMgbWlpIGlvY3RsIGludGVyZmFjZVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzUxNDogKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTM1MTUtICogQGlmcjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBpZnJlcSBmb3Igc29ja2V0IGlvY3Rsc1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zNTg4PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfbWlpX2lvY3RsKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzU5Mi0gKiAgIGxpbmsgcGFydG5lcnNcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjM1OTM6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zNTk0LSAqIEBzeW5jOiBwZXJmb3JtIGFjdGlvbiBzeW5jaHJvbm91c2x5XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTM2MTM9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19zcGVlZF9kb3duKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzYxNy0gKiAgIHBoeWxpbmtfc3BlZWRfZG93bigpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozNjE4OiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzYxOS0gKlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz00MzcwPUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfbWlpX2M0NV9wY3NfZ2V0X3N0YXRlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDM3NC0gKlxcdFxcdFxcdFxcdCB3aGljaCBsb3NlcyBzdGF0ZVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6NDM3NTogKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTQzNzYtICpcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9NDM5MT1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3JlcGxheV9saW5rX2JlZ2luKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDM5NS0gKlxcdFxcdFxcdCAgICAgICB3aGljaCBsb3N0IHN0YXRlXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzo0Mzk2OiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDM5Ny0gKlxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTc5OT1zdGF0aWMgaW50IGF4ODg3NzJfcGh5bGlua19zZXR1cChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtODE5LVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo4MjA6XFx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFxcdTAwMjZwcml2LVxcdTAwM2VwaHlsaW5rX2NvbmZpZywgZGV2LVxcdTAwM2VuZXQtXFx1MDAzZWRldi5md25vZGUsXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTgyMS1cXHRcXHRcXHRcXHQgcGh5X2lmX21vZGUsIFxcdTAwMjZheDg4NzcyX3BoeWxpbmtfbWFjX29wcyk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTI3OTk9c3RhdGljIGludCBsYW43OHh4X3BoeWxpbmtfc2V0dXAoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTI4MzgtXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyODM5OlxcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShwYywgZGV2LVxcdTAwM2VuZXQtXFx1MDAzZWRldi5md25vZGUsXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yODQwLVxcdFxcdFxcdFxcdCBkZXYtXFx1MDAzZWludGVyZmFjZSwgXFx1MDAyNmxhbjc4eHhfcGh5bGlua19tYWNfb3BzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDM6MDU6MjEuMzMyNjUwMzIxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2MDc4NjY4MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJIFN1cHBvcnQqKlxuXG5Pa2F5LCBzbyBgcGh5bGlua19jcmVhdGVgIGlzIGEgcHJldHR5IHdpZGVseSB1c2VkIGZ1bmN0aW9uLCBjYWxsZWQgYnkgYSBidW5jaCBvZiBuZXR3b3JrIGRyaXZlcnM6IGBsYW43OHh4YCwgYGFzaXhfZGV2aWNlc2AsIGBzdG1tYWNgLCB0aGUgd2hvbGUgbGlzdC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBjYW4gKmFueSogb2YgdGhlc2UgZHJpdmVycyBhY3R1YWxseSBjb25maWd1cmUgYSBQSFkgdXNpbmcgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgPyBUaGF0J3Mgd2hhdCBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQuXG5cblJpZ2h0LCBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAgaXMgZWl0aGVyIGFuIGFyZ3VtZW50IHRvIGBwaHlsaW5rX2NyZWF0ZWAgKm9yKiBpdCdzIHNldCBsYXRlciB2aWEgYHBoeWxpbmtfc2V0X3BvcnRfbW9kZXNgLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gc2VlIGlmIHRoZXNlIGRyaXZlcnMgZXZlbiAqc3VwcG9ydCogdGhhdCBtb2RlLiBJIGtub3cgSSBhbHJlYWR5IGdyZXBwZWQgdGhlIGBkcml2ZXJzL25ldC9gIGRpcmVjdG9yeSBmb3IgaXQuIExldCdzIHNlZS4uLiB0aGUgZ3JlcCByZXN1bHRzIHdlcmUgcHJldHR5IHVuaW50ZXJlc3Rpbmc7IGBwaHktY29yZS5jYCwgYHBoeV9jYXBzLmNgLCBhbmQgYHBoeWxpbmsuY2AgYW5kIGBxY2E4MDd4LmNgLiBTbyB0aGUgZHJpdmVyIHNlZW1zIGxpa2UgaXQgaXNuJ3QgZGlyZWN0bHkgc3VwcG9ydGluZyB0aGlzLlxuXG5JZiBubyBNQUMgZHJpdmVyIGV4cGxpY2l0bHkgc3VwcG9ydHMgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgLCBob3cgY291bGQgaXQgcG9zc2libHkgYmUgcmVhY2hlZD8gVGhhdCdzIHRoZSByZWFsIHB1enpsZS4gQWhhLCBtYXliZSBpdCdzIHBhcnNlZCBmcm9tIHRoZSBkZXZpY2UgdHJlZT8gSW4gYHBoeWxpbmtfcGFyc2VfbW9kZWAsIGl0IGxvb2tzIGxpa2UgYHBoeS1tb2RlYCBpcyBwYXJzZWQgZnJvbSB0aGUgZGV2aWNlIHRyZWUsIHRoYXQgbWlnaHQgZG8gdGhlIHRyaWNrLiBJZiBJIGNvdWxkIGluamVjdCBhIGRldmljZSB0cmVlIG5vZGUgd2l0aCBgcGh5LW1vZGUgPSBcInBzZ21paVwiYCwgdGhlbiBgcGh5bGlua19jcmVhdGVgICptaWdodCogcGFyc2UgaXQgYW5kIHNldCBgcGwtXHUwMDNlbGlua19jb25maWcuaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAuXG5cbk5vdywgd2FpdCBhIG1pbnV0ZSwgYHBoeWxpbmtfY3JlYXRlYCB0YWtlcyBhbiBgcGh5X2ludGVyZmFjZV90IGlmYWNlYCBhcmd1bWVudC4gSWYgdGhhdCBhcmd1bWVudCBpcyBgUEhZX0lOVEVSRkFDRV9NT0RFX05BYCwgdGhlbiBpdCBtaWdodCBwYXJzZSBpdCBmcm9tIHRoZSBmd25vZGUuIE9rYXksIHNvIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gbG9vayBjbG9zZXIuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGNvZGUgYXJvdW5kIGBwaHlsaW5rX2NyZWF0ZWAgZm9yIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDMzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAzOjA1OjI4Ljk0MDUxOTc2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NzY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NDksXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NDk6XFx0c3RydWN0IHBoeWxpbmsgKnBoeWxpbmtfY3JlYXRlKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxcbjE4NTA6XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsXFxuMTg1MTpcXHRcXHRcXHRcXHQgICAgICAgcGh5X2ludGVyZmFjZV90IGlmYWNlLFxcbjE4NTI6XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgKm1hY19vcHMpXFxuMTg1MzpcXHR7XFxuMTg1NDpcXHRcXHRzdHJ1Y3QgcGh5bGluayAqcGw7XFxuMTg1NTpcXHRcXHRpbnQgcmV0O1xcbjE4NTY6XFx0XFxuMTg1NzpcXHRcXHQvKiBWYWxpZGF0ZSB0aGUgc3VwcGxpZWQgY29uZmlndXJhdGlvbiAqL1xcbjE4NTg6XFx0XFx0aWYgKHBoeV9pbnRlcmZhY2VfZW1wdHkoY29uZmlnLVxcdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcykpIHtcXG4xODU5OlxcdFxcdFxcdGRldl9lcnIoY29uZmlnLVxcdTAwM2VkZXYsXFxuMTg2MDpcXHRcXHRcXHRcXHRcXFwicGh5bGluazogZXJyb3I6IGVtcHR5IHN1cHBvcnRlZF9pbnRlcmZhY2VzXFxcXG5cXFwiKTtcXG4xODYxOlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbjE4NjI6XFx0XFx0fVxcbjE4NjM6XFx0XFxuMTg2NDpcXHRcXHRwbCA9IGt6YWxsb2Nfb2JqKCpwbCk7XFxuMTg2NTpcXHRcXHRpZiAoIXBsKVxcbjE4NjY6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuMTg2NzpcXHRcXG4xODY4OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNnBsLVxcdTAwM2VwaHlkZXZfbXV0ZXgpO1xcbjE4Njk6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2cGwtXFx1MDAzZXN0YXRlX211dGV4KTtcXG4xODcwOlxcdFxcdElOSVRfV09SSyhcXHUwMDI2cGwtXFx1MDAzZXJlc29sdmUsIHBoeWxpbmtfcmVzb2x2ZSk7XFxuMTg3MTpcXHRcXG4xODcyOlxcdFxcdHBsLVxcdTAwM2Vjb25maWcgPSBjb25maWc7XFxuMTg3MzpcXHRcXHRpZiAoY29uZmlnLVxcdTAwM2V0eXBlID09IFBIWUxJTktfTkVUREVWKSB7XFxuMTg3NDpcXHRcXHRcXHRwbC1cXHUwMDNlbmV0ZGV2ID0gdG9fbmV0X2Rldihjb25maWctXFx1MDAzZWRldik7XFxuMTg3NTpcXHRcXHRcXHRuZXRpZl9jYXJyaWVyX29mZihwbC1cXHUwMDNlbmV0ZGV2KTtcXG4xODc2OlxcdFxcdH0gZWxzZSBpZiAoY29uZmlnLVxcdTAwM2V0eXBlID09IFBIWUxJTktfREVWKSB7XFxuMTg3NzpcXHRcXHRcXHRwbC1cXHUwMDNlZGV2ID0gY29uZmlnLVxcdTAwM2VkZXY7XFxuMTg3ODpcXHRcXHR9IGVsc2Uge1xcbjE4Nzk6XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4xODgwOlxcdFxcdFxcdGdvdG8gZnJlZV9wbDtcXG4xODgxOlxcdFxcdH1cXG4xODgyOlxcdFxcbjE4ODM6XFx0XFx0cGwtXFx1MDAzZW1hY19zdXBwb3J0c19lZWVfb3BzID0gcGh5bGlua19tYWNfaW1wbGVtZW50c19scGkobWFjX29wcyk7XFxuMTg4NDpcXHRcXHRwbC1cXHUwMDNlbWFjX3N1cHBvcnRzX2VlZSA9IHBsLVxcdTAwM2VtYWNfc3VwcG9ydHNfZWVlX29wcyBcXHUwMDI2XFx1MDAyNlxcbjE4ODU6XFx0XFx0XFx0XFx0ICAgICAgIHBsLVxcdTAwM2Vjb25maWctXFx1MDAzZWxwaV9jYXBhYmlsaXRpZXMgXFx1MDAyNlxcdTAwMjZcXG4xODg2OlxcdFxcdFxcdFxcdCAgICAgICAhcGh5X2ludGVyZmFjZV9lbXB0eShwbC1cXHUwMDNlY29uZmlnLVxcdTAwM2VscGlfaW50ZXJmYWNlcyk7XFxuMTg4NzpcXHRcXG4xODg4OlxcdFxcdC8qIFNldCB0aGUgZGVmYXVsdCBFRUUgY29uZmlndXJhdGlvbiAqL1xcbjE4ODk6XFx0XFx0cGwtXFx1MDAzZWVlZV9jZmcuZWVlX2VuYWJsZWQgPSBwbC1cXHUwMDNlY29uZmlnLVxcdTAwM2VlZWVfZW5hYmxlZF9kZWZhdWx0O1xcbjE4OTA6XFx0XFx0cGwtXFx1MDAzZWVlZV9jZmcudHhfbHBpX2VuYWJsZWQgPSBwbC1cXHUwMDNlZWVlX2NmZy5lZWVfZW5hYmxlZDtcXG4xODkxOlxcdFxcdHBsLVxcdTAwM2VlZWVfY2ZnLnR4X2xwaV90aW1lciA9IHBsLVxcdTAwM2Vjb25maWctXFx1MDAzZWxwaV90aW1lcl9kZWZhdWx0O1xcbjE4OTI6XFx0XFxuMTg5MzpcXHRcXHRwbC1cXHUwMDNlcGh5X3N0YXRlLmludGVyZmFjZSA9IGlmYWNlO1xcbjE4OTQ6XFx0XFx0cGwtXFx1MDAzZWxpbmtfaW50ZXJmYWNlID0gaWZhY2U7XFxuMTg5NTpcXHRcXHRpZiAoaWZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX01PQ0EpXFxuMTg5NjpcXHRcXHRcXHRwbC1cXHUwMDNlbGlua19wb3J0ID0gUE9SVF9CTkM7XFxuMTg5NzpcXHRcXHRlbHNlXFxuMTg5ODpcXHRcXHRcXHRwbC1cXHUwMDNlbGlua19wb3J0ID0gUE9SVF9NSUk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAzOjA1OjI4Ljk0MDc3OTIzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTAxMjA4OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQaHlMaW5rIENyZWF0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBgcGh5bGlua19jcmVhdGVgIGlzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgYSBQaHlMaW5rIHN0cnVjdHVyZS4gSSBzZWUgaXQgdGFrZXMgYW4gYGlmYWNlYCBhcmd1bWVudCBhbmQgaW1tZWRpYXRlbHkgc2V0cyB0aGUgYHBsLVx1MDAzZXBoeV9zdGF0ZS5pbnRlcmZhY2VgIG1lbWJlciB0byB0aGF0IHZhbHVlLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDsgaXQncyBhc3NvY2lhdGluZyB0aGUgUGh5TGluayB3aXRoIGEgc3BlY2lmaWMgbmV0d29yayBpbnRlcmZhY2UuIE5vdywgdGhlIG5leHQgc3RlcCBpbiB0aGUgZmxvdyBpcyBjYWxsaW5nIGBwaHlsaW5rX3BhcnNlX21vZGVgIHdpdGggdGhlIFBoeUxpbmsgc3RydWN0dXJlIGFuZCBhIGZpcm13YXJlIG5vZGUgKGBmd25vZGVgKS4gVGhpcyBgcGh5bGlua19wYXJzZV9tb2RlYCBjYWxsIGlzIGNyaXRpY2FsIGJlY2F1c2UgdGhpcyBpcyB3aGVyZSB0aGUgbGluaydzIG9wZXJhdGluZyBwYXJhbWV0ZXJzIG11c3QgYmUgZGV0ZXJtaW5lZC4gSXTigJlzIHdoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlIG5leHQgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhlIFBoeUxpbmsgZ2V0cyBjb25maWd1cmVkIGFmdGVyIGNyZWF0aW9uLiBMZXTigJlzIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTM1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMzowNTozMi4xNTA5MDMxMDZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxNzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzc0LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzc0OlxcdHN0YXRpYyBpbnQgcGh5bGlua19wYXJzZV9tb2RlKHN0cnVjdCBwaHlsaW5rICpwbCxcXG4gNzc1OlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXFxuIDc3NjpcXHR7XFxuIDc3NzpcXHRcXHRzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZG47XFxuIDc3ODpcXHRcXHRjb25zdCBjaGFyICptYW5hZ2VkO1xcbiA3Nzk6XFx0XFx0dW5zaWduZWQgbG9uZyBjYXBzO1xcbiA3ODA6XFx0XFxuIDc4MTpcXHRcXHRpZiAocGwtXFx1MDAzZWNvbmZpZy1cXHUwMDNlZGVmYXVsdF9hbl9pbmJhbmQpXFxuIDc4MjpcXHRcXHRcXHRwbC1cXHUwMDNlY2ZnX2xpbmtfYW5fbW9kZSA9IE1MT19BTl9JTkJBTkQ7XFxuIDc4MzpcXHRcXG4gNzg0OlxcdFxcdGRuID0gZndub2RlX2dldF9uYW1lZF9jaGlsZF9ub2RlKGZ3bm9kZSwgXFxcImZpeGVkLWxpbmtcXFwiKTtcXG4gNzg1OlxcdFxcdGlmIChkbiB8fCBmd25vZGVfcHJvcGVydHlfcHJlc2VudChmd25vZGUsIFxcXCJmaXhlZC1saW5rXFxcIikpXFxuIDc4NjpcXHRcXHRcXHRwbC1cXHUwMDNlY2ZnX2xpbmtfYW5fbW9kZSA9IE1MT19BTl9GSVhFRDtcXG4gNzg3OlxcdFxcdGZ3bm9kZV9oYW5kbGVfcHV0KGRuKTtcXG4gNzg4OlxcdFxcbiA3ODk6XFx0XFx0aWYgKChmd25vZGVfcHJvcGVydHlfcmVhZF9zdHJpbmcoZndub2RlLCBcXFwibWFuYWdlZFxcXCIsIFxcdTAwMjZtYW5hZ2VkKSA9PSAwIFxcdTAwMjZcXHUwMDI2XFxuIDc5MDpcXHRcXHQgICAgIHN0cmNtcChtYW5hZ2VkLCBcXFwiaW4tYmFuZC1zdGF0dXNcXFwiKSA9PSAwKSkge1xcbiA3OTE6XFx0XFx0XFx0aWYgKHBsLVxcdTAwM2VjZmdfbGlua19hbl9tb2RlID09IE1MT19BTl9GSVhFRCkge1xcbiA3OTI6XFx0XFx0XFx0XFx0cGh5bGlua19lcnIocGwsXFxuIDc5MzpcXHRcXHRcXHRcXHRcXHQgICAgXFxcImNhbid0IHVzZSBib3RoIGZpeGVkLWxpbmsgYW5kIGluLWJhbmQtc3RhdHVzXFxcXG5cXFwiKTtcXG4gNzk0OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3OTU6XFx0XFx0XFx0fVxcbiA3OTY6XFx0XFxuIDc5NzpcXHRcXHRcXHRwbC1cXHUwMDNlY2ZnX2xpbmtfYW5fbW9kZSA9IE1MT19BTl9JTkJBTkQ7XFxuIDc5ODpcXHRcXHR9XFxuIDc5OTpcXHRcXG4gODAwOlxcdFxcdGlmIChwbC1cXHUwMDNlY2ZnX2xpbmtfYW5fbW9kZSA9PSBNTE9fQU5fSU5CQU5EKSB7XFxuIDgwMTpcXHRcXHRcXHRsaW5rbW9kZV96ZXJvKHBsLVxcdTAwM2VzdXBwb3J0ZWQpO1xcbiA4MDI6XFx0XFx0XFx0cGh5bGlua19zZXQocGwtXFx1MDAzZXN1cHBvcnRlZCwgTUlJKTtcXG4gODAzOlxcdFxcdFxcdHBoeWxpbmtfc2V0KHBsLVxcdTAwM2VzdXBwb3J0ZWQsIEF1dG9uZWcpO1xcbiA4MDQ6XFx0XFx0XFx0cGh5bGlua19zZXQocGwtXFx1MDAzZXN1cHBvcnRlZCwgQXN5bV9QYXVzZSk7XFxuIDgwNTpcXHRcXHRcXHRwaHlsaW5rX3NldChwbC1cXHUwMDNlc3VwcG9ydGVkLCBQYXVzZSk7XFxuIDgwNjpcXHRcXG4gODA3OlxcdFxcdFxcdHN3aXRjaCAocGwtXFx1MDAzZWxpbmtfY29uZmlnLmludGVyZmFjZSkge1xcbiA4MDg6XFx0XFx0XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XFxuIDgwOTpcXHRcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XFxuIDgxMDpcXHRcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XFxuIDgxMTpcXHRcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RVVNHTUlJOlxcbiA4MTI6XFx0XFx0XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk6XFxuIDgxMzpcXHRcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9JRDpcXG4gODE0OlxcdFxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1JYSUQ6XFxuIDgxNTpcXHRcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9UWElEOlxcbiA4MTY6XFx0XFx0XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUlRCSTpcXG4gODE3OlxcdFxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWDpcXG4gODE4OlxcdFxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWDpcXG4gODE5OlxcdFxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzVHQkFTRVI6XFxuIDgyMDpcXHRcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8yNUdCQVNFUjpcXG4gODIxOlxcdFxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk6XFxuIDgyMjpcXHRcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdfUVhHTUlJOlxcbiA4MjM6XFx0XFx0XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTBHS1I6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAzOjA1OjMyLjE1MTA5NTk2NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDUwOTI3NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgdGhlIFBoeWxpbmsgSW50ZXJmYWNlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBwaHlsaW5rX3BhcnNlX21vZGVgIGZ1bmN0aW9uIGFuZCBpdCdzIHVzaW5nIGBwbC1cdTAwM2VsaW5rX2NvbmZpZy5pbnRlcmZhY2VgLiBSaWdodCwgcmlnaHQsIG1ha2VzIHNlbnNlLiBCdXQgdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0J3MgcG9wcGVkIGludG8gbXkgaGVhZCBpcyAqd2hlcmUqIGlzIHRoYXQgYHBsLVx1MDAzZWxpbmtfY29uZmlnLmludGVyZmFjZWAgdmFyaWFibGUgYWN0dWFsbHkgZ2V0dGluZyBzZXQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cgaGVyZS4gTGV0J3MgYmFja3RyYWNrIGFuZCByZXZpc2l0IGBwaHlsaW5rX2NyZWF0ZWAuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgcmUtZXhhbWluZSB0aGF0IGZ1bmN0aW9uIGFuZCBzZWUgaWYgdGhlIGluaXRpYWxpemF0aW9uIG9yIGFzc2lnbm1lbnQgdG8gdGhpcyBwYXJ0aWN1bGFyIGZpZWxkIGlzIGhhbmRsZWQgdGhlcmUuIEknbSBnb2luZyB0byBtZXRpY3Vsb3VzbHkgY2hlY2sgZXZlcnkgbGluZSBvZiB0aGF0IGZ1bmN0aW9uIHRvIG1ha2Ugc3VyZSB0aGF0IGZpZWxkIGlzIGJlaW5nIGNvcnJlY3RseSBhc3NpZ25lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzMDksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAzOjA1OjM1LjIwMjAyNjA2NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODk5LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODk5OlxcdFxcdHBsLVxcdTAwM2VsaW5rX2NvbmZpZy5pbnRlcmZhY2UgPSBpZmFjZTtcXG4xOTAwOlxcdFxcdHBsLVxcdTAwM2VsaW5rX2NvbmZpZy5wYXVzZSA9IE1MT19QQVVTRV9BTjtcXG4xOTAxOlxcdFxcdHBsLVxcdTAwM2VsaW5rX2NvbmZpZy5zcGVlZCA9IFNQRUVEX1VOS05PV047XFxuMTkwMjpcXHRcXHRwbC1cXHUwMDNlbGlua19jb25maWcuZHVwbGV4ID0gRFVQTEVYX1VOS05PV047XFxuMTkwMzpcXHRcXHRwbC1cXHUwMDNlcGNzX3N0YXRlID0gUENTX1NUQVRFX0RPV047XFxuMTkwNDpcXHRcXHRwbC1cXHUwMDNlbWFjX29wcyA9IG1hY19vcHM7XFxuMTkwNTpcXHRcXHRfX3NldF9iaXQoUEhZTElOS19ESVNBQkxFX1NUT1BQRUQsIFxcdTAwMjZwbC1cXHUwMDNlcGh5bGlua19kaXNhYmxlX3N0YXRlKTtcXG4xOTA2OlxcdFxcdHRpbWVyX3NldHVwKFxcdTAwMjZwbC1cXHUwMDNlbGlua19wb2xsLCBwaHlsaW5rX2ZpeGVkX3BvbGwsIDApO1xcbjE5MDc6XFx0XFxuMTkwODpcXHRcXHRsaW5rbW9kZV9maWxsKHBsLVxcdTAwM2VzdXBwb3J0ZWQpO1xcbjE5MDk6XFx0XFx0bGlua21vZGVfY29weShwbC1cXHUwMDNlbGlua19jb25maWcuYWR2ZXJ0aXNpbmcsIHBsLVxcdTAwM2VzdXBwb3J0ZWQpO1xcbjE5MTA6XFx0XFx0cGh5bGlua192YWxpZGF0ZShwbCwgcGwtXFx1MDAzZXN1cHBvcnRlZCwgXFx1MDAyNnBsLVxcdTAwM2VsaW5rX2NvbmZpZyk7XFxuMTkxMTpcXHRcXG4xOTEyOlxcdFxcdHJldCA9IHBoeWxpbmtfcGFyc2VfbW9kZShwbCwgZndub2RlKTtcXG4xOTEzOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjE5MTQ6XFx0XFx0XFx0Z290byBmcmVlX3BsO1xcbjE5MTU6XFx0XFxuMTkxNjpcXHRcXHRpZiAocGwtXFx1MDAzZWNmZ19saW5rX2FuX21vZGUgPT0gTUxPX0FOX0ZJWEVEKSB7XFxuMTkxNzpcXHRcXHRcXHRyZXQgPSBwaHlsaW5rX3BhcnNlX2ZpeGVkbGluayhwbCwgZndub2RlKTtcXG4xOTE4OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjE5MTk6XFx0XFx0XFx0XFx0Z290byByZWxlYXNlX2xpbmtfZ3BpbztcXG4xOTIwOlxcdFxcdH1cXG4xOTIxOlxcdFxcbjE5MjI6XFx0XFx0cGwtXFx1MDAzZXJlcV9saW5rX2FuX21vZGUgPSBwbC1cXHUwMDNlY2ZnX2xpbmtfYW5fbW9kZTtcXG4xOTIzOlxcdFxcbjE5MjQ6XFx0XFx0cmV0ID0gcGh5bGlua19yZWdpc3Rlcl9zZnAocGwsIGZ3bm9kZSk7XFxuMTkyNTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xOTI2OlxcdFxcdFxcdGdvdG8gcmVsZWFzZV9saW5rX2dwaW87XFxuMTkyNzpcXHRcXG4xOTI4OlxcdFxcdHJldHVybiBwbDtcXG4xOTI5OlxcdFxcbjE5MzA6XFx0cmVsZWFzZV9saW5rX2dwaW86XFxuMTkzMTpcXHRcXHRpZiAocGwtXFx1MDAzZWxpbmtfZ3BpbylcXG4xOTMyOlxcdFxcdFxcdGdwaW9kX3B1dChwbC1cXHUwMDNlbGlua19ncGlvKTtcXG4xOTMzOlxcdGZyZWVfcGw6XFxuMTkzNDpcXHRcXHRrZnJlZShwbCk7XFxuMTkzNTpcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbjE5MzY6XFx0fVxcbjE5Mzc6XFx0RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19jcmVhdGUpO1xcbjE5Mzg6XFx0XFxuMTkzOTpcXHQvKipcXG4xOTQwOlxcdCAqIHBoeWxpbmtfZGVzdHJveSgpIC0gY2xlYW51cCBhbmQgZGVzdHJveSB0aGUgcGh5bGluayBpbnN0YW5jZVxcbjE5NDE6XFx0ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXFxuMTk0MjpcXHQgKlxcbjE5NDM6XFx0ICogRGVzdHJveSBhIHBoeWxpbmsgaW5zdGFuY2UuIEFueSBQSFkgdGhhdCBoYXMgYmVlbiBhdHRhY2hlZCBtdXN0IGhhdmUgYmVlblxcbjE5NDQ6XFx0ICogY2xlYW5lZCB1cCB2aWEgcGh5bGlua19kaXNjb25uZWN0X3BoeSgpIHByaW9yIHRvIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi5cXG4xOTQ1OlxcdCAqXFxuMTk0NjpcXHQgKiBOb3RlOiB0aGUgcnRubCBsb2NrIG11c3Qgbm90IGJlIGhlbGQgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXFxuMTk0NzpcXHQgKi9cXG4xOTQ4OlxcdHZvaWQgcGh5bGlua19kZXN0cm95KHN0cnVjdCBwaHlsaW5rICpwbClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDM6MDU6MzUuMjAyMjIzMzA2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4ODQ4NzU0NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBSZWFzb25pbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGlzIGBwbC1cdTAwM2VsaW5rX2NvbmZpZy5pbnRlcmZhY2VgIHZhcmlhYmxlIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgYmVpbmcgYXNzaWduZWQgYGlmYWNlYCwgd2hpY2ggZ2V0cyBwYXNzZWQgaW50byBgcGh5bGlua19jcmVhdGVgLiBUaGUgY3J1Y2lhbCBwb2ludCBpcyBpZiBgaWZhY2VgIGlzIGBQSFlfSU5URVJGQUNFX01PREVfTkFgLiBJZiB0aGF0J3MgdGhlIGNhc2UsIHRoZW4gYHBoeWxpbmtfcGFyc2VfbW9kZWAgd29uJ3QgbWF0Y2ggYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgLiBUaGF0J3MgcHJvYmxlbWF0aWMuIEJ1dCB3YWl0Li4uIGlzbid0IGBpZmFjZWAgdHlwaWNhbGx5IGRldGVybWluZWQgYnkgdGhlIE1BQyBkcml2ZXIsIGJlZm9yZSBldmVuIGdldHRpbmcgdG8gYHBoeWxpbmtfY3JlYXRlYD8gSSB0aGluayBvZiBob3cgdGhhdCB3b3JrcyBpbiBwcmFjdGljZSwgZm9yIGV4YW1wbGUsIHVzaW5nIHNvbWV0aGluZyBsaWtlIGBvZl9nZXRfcGh5X21vZGVgLlxuXG5UaGUgcXVlc3Rpb24gYmVjb21lcywgY2FuIEkgbWFuaXB1bGF0ZSB0aGF0IGBpZmFjZWAgdmFsdWU/IElmIEkgY291bGQgaW5qZWN0IGEgZGV2aWNlIHRyZWUgd2l0aCBgcGh5LW1vZGUgPSBcInBzZ21paVwiYCwgdGhlbiBgcGh5X21vZGVgIHdvdWxkIGRlZmluaXRlbHkgYmUgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgLiBOb3csIHRoZSB0cmlja3kgcGFydC4uLiBjYW4gSSBkbyB0aGF0IGluIHN5emthbGxlcj8gSXQgc2VlbXMgbGlrZSB0aGVyZSdzIHNvbWUgZGV2aWNlIHRyZWUgaW5qZWN0aW9uIHN1cHBvcnQgdmlhIHRoaW5ncyBsaWtlIGBzeXpfbW91bnRfaW1hZ2VgIG9yIG90aGVyIHBzZXVkby1zeXNjYWxscy4gQnV0IEkgcmVjYWxsIGRldmljZSB0cmVlcyBiZWluZyB1c3VhbGx5IHN0YXRpYyBpbiBRRU1VLCB1bmxlc3MgdGhlcmUgYXJlIG92ZXJsYXlzIG9yIHNvbWV0aGluZyBjbGV2ZXIgYXQgcGxheS5cblxuT24gc2Vjb25kIHRob3VnaHQsIEkgZG9uJ3QgdGhpbmsgc3l6a2FsbGVyICpub3JtYWxseSogaW5qZWN0cyBkZXZpY2UgdHJlZSBvdmVybGF5cyBmb3IgbmV0d29yayBkZXZpY2VzIG9uIHRoZSBmbHkuIEhvd2V2ZXIsIGl0ICpjYW4qIHVzZSBgbmV0bGlua2AgdG8gY3JlYXRlIHZpcnR1YWwgaW50ZXJmYWNlcy4gQ291bGQgSSBjcmVhdGUgYSB2aXJ0dWFsIGludGVyZmFjZSB0aGF0IGxldmVyYWdlcyBgcGh5bGlua2AgYW5kLCBpbXBvcnRhbnRseSwgYWxsb3dzIG1lIHRvIGNvbnRyb2wgb3Igc2V0IHRoZSBwaHkgaW50ZXJmYWNlIG1vZGU/IFRoYXQncyB0aGUga2V5LlxuXG5TbywgbGV0J3Mgc2VlIGlmIGFueSB2aXJ0dWFsIGRyaXZlcnMgYXJlIGV2ZW4gKnVzaW5nKiBgcGh5bGlua2AuIEkgY2FtZSBhY3Jvc3MgYGZibmljYCBwcmV2aW91c2x5LCBhbmQgSSBrbm93IHRoYXQgdXNlcyBgcGh5bGlua19jcmVhdGVgLiBCdXQgaXMgdGhhdCBhIHZpcnR1YWwgZHJpdmVyPyBJIHJlbWVtYmVyIGBmYm5pY2AgYmVpbmcgYSBNZXRhIG5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIsIGFuZCBtb3JlIHNwZWNpZmljYWxseSBhIFBDSSBkZXZpY2UsIHNvIHRoYXQncyBwcm9iYWJseSBub3QgdGhlIHJvdXRlIHRvIGdvLiBXaGF0IGFib3V0IHNvbWV0aGluZyBsaWtlIGBsYW43OHh4YD8gVGhhdCdzIGEgVVNCIGRldmljZS4gU3l6a2FsbGVyIGVtdWxhdGVzIFVTQiBkZXZpY2VzLiBJdCBjYW4gZG8gdGhpcyB3aXRoIGBkdW1teV9oY2RgIGFuZCBgc3l6X3VzYl9jb25uZWN0YC4gU28gbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGxhbjc4eHhfcGh5bGlua19zZXR1cGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzU1LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDM6MDU6NDMuMDg3MTAwOTgzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MjUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3OTksXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3OTk6XFx0c3RhdGljIGludCBsYW43OHh4X3BoeWxpbmtfc2V0dXAoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXFxuMjgwMDpcXHR7XFxuMjgwMTpcXHRcXHRzdHJ1Y3QgcGh5bGlua19jb25maWcgKnBjID0gXFx1MDAyNmRldi1cXHUwMDNlcGh5bGlua19jb25maWc7XFxuMjgwMjpcXHRcXHRzdHJ1Y3QgcGh5bGluayAqcGh5bGluaztcXG4yODAzOlxcdFxcbjI4MDQ6XFx0XFx0cGMtXFx1MDAzZWRldiA9IFxcdTAwMjZkZXYtXFx1MDAzZW5ldC1cXHUwMDNlZGV2O1xcbjI4MDU6XFx0XFx0cGMtXFx1MDAzZXR5cGUgPSBQSFlMSU5LX05FVERFVjtcXG4yODA2OlxcdFxcdHBjLVxcdTAwM2VtYWNfY2FwYWJpbGl0aWVzID0gTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFIHwgTUFDXzEwIHxcXG4yODA3OlxcdFxcdFxcdFxcdCAgICAgICBNQUNfMTAwIHwgTUFDXzEwMDBGRDtcXG4yODA4OlxcdFxcdHBjLVxcdTAwM2VtYWNfbWFuYWdlZF9wbSA9IHRydWU7XFxuMjgwOTpcXHRcXHRwYy1cXHUwMDNlbHBpX2NhcGFiaWxpdGllcyA9IE1BQ18xMDBGRCB8IE1BQ18xMDAwRkQ7XFxuMjgxMDpcXHRcXHQvKlxcbjI4MTE6XFx0XFx0ICogRGVmYXVsdCBUWCBMUEkgKExvdyBQb3dlciBJZGxlKSByZXF1ZXN0IGRlbGF5IGNvdW50IGlzIHNldCB0byA1MHVzLlxcbjI4MTI6XFx0XFx0ICpcXG4yODEzOlxcdFxcdCAqIFNvdXJjZTogTEFONzgwMCBEb2N1bWVudGF0aW9uLCBEUzAwMDAxOTkySCwgU2VjdGlvbiAxNS4xLjU3LCBQYWdlIDIwNC5cXG4yODE0OlxcdFxcdCAqXFxuMjgxNTpcXHRcXHQgKiBSZWFzb25pbmc6XFxuMjgxNjpcXHRcXHQgKiBBY2NvcmRpbmcgdG8gdGhlIGFwcGxpY2F0aW9uIG5vdGUgaW4gdGhlIExBTjc4MDAgZG9jdW1lbnRhdGlvbiwgYVxcbjI4MTc6XFx0XFx0ICogemVybyBkZWxheSBtYXkgbmVnYXRpdmVseSBpbXBhY3QgdGhlIFRYIGRhdGEgcGF0aOKAmXMgYWJpbGl0eSB0b1xcbjI4MTg6XFx0XFx0ICogc3VwcG9ydCBHaWdhYml0IG9wZXJhdGlvbi4gQSB2YWx1ZSBvZiA1MHVzIGlzIHJlY29tbWVuZGVkIGFzIGFcXG4yODE5OlxcdFxcdCAqIHJlYXNvbmFibGUgZGVmYXVsdCB3aGVuIHRoZSBwYXJ0IG9wZXJhdGVzIGF0IEdpZ2FiaXQgc3BlZWRzLFxcbjI4MjA6XFx0XFx0ICogYmFsYW5jaW5nIHN0YWJpbGl0eSBhbmQgcG93ZXIgZWZmaWNpZW5jeSBpbiBFRUUgbW9kZS4gVGhpcyBkZWxheSBjYW5cXG4yODIxOlxcdFxcdCAqIGJlIGluY3JlYXNlZCBiYXNlZCBvbiBwZXJmb3JtYW5jZSB0ZXN0aW5nLCBhcyBFRUUgaXMgZGVzaWduZWQgZm9yXFxuMjgyMjpcXHRcXHQgKiBzY2VuYXJpb3Mgd2l0aCBtb3N0bHkgaWRsZSBsaW5rcyBhbmQgb2NjYXNpb25hbCBidXJzdHMgb2YgZnVsbFxcbjI4MjM6XFx0XFx0ICogYmFuZHdpZHRoIHRyYW5zbWlzc2lvbi4gVGhlIGdvYWwgaXMgdG8gZW5zdXJlIHJlbGlhYmxlIEdpZ2FiaXRcXG4yODI0OlxcdFxcdCAqIHBlcmZvcm1hbmNlIHdpdGhvdXQgb3Zlcmx5IGFnZ3Jlc3NpdmUgcG93ZXIgb3B0aW1pemF0aW9uIGR1cmluZ1xcbjI4MjU6XFx0XFx0ICogaW5hY3RpdmUgcGVyaW9kcy5cXG4yODI2OlxcdFxcdCAqL1xcbjI4Mjc6XFx0XFx0cGMtXFx1MDAzZWxwaV90aW1lcl9kZWZhdWx0ID0gNTA7XFxuMjgyODpcXHRcXHRwYy1cXHUwMDNlZWVlX2VuYWJsZWRfZGVmYXVsdCA9IHRydWU7XFxuMjgyOTpcXHRcXG4yODMwOlxcdFxcdGlmIChkZXYtXFx1MDAzZWNoaXBpZCA9PSBJRF9SRVZfQ0hJUF9JRF83ODAxXylcXG4yODMxOlxcdFxcdFxcdHBoeV9pbnRlcmZhY2Vfc2V0X3JnbWlpKHBjLVxcdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuMjgzMjpcXHRcXHRlbHNlXFxuMjgzMzpcXHRcXHRcXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUksIHBjLVxcdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuMjgzNDpcXHRcXG4yODM1OlxcdFxcdG1lbWNweShkZXYtXFx1MDAzZXBoeWxpbmtfY29uZmlnLmxwaV9pbnRlcmZhY2VzLFxcbjI4MzY6XFx0XFx0ICAgICAgIGRldi1cXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMsXFxuMjgzNzpcXHRcXHQgICAgICAgc2l6ZW9mKGRldi1cXHUwMDNlcGh5bGlua19jb25maWcubHBpX2ludGVyZmFjZXMpKTtcXG4yODM4OlxcdFxcbjI4Mzk6XFx0XFx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKHBjLCBkZXYtXFx1MDAzZW5ldC1cXHUwMDNlZGV2LmZ3bm9kZSxcXG4yODQwOlxcdFxcdFxcdFxcdFxcdCBkZXYtXFx1MDAzZWludGVyZmFjZSwgXFx1MDAyNmxhbjc4eHhfcGh5bGlua19tYWNfb3BzKTtcXG4yODQxOlxcdFxcdGlmIChJU19FUlIocGh5bGluaykpXFxuMjg0MjpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihwaHlsaW5rKTtcXG4yODQzOlxcdFxcbjI4NDQ6XFx0XFx0ZGV2LVxcdTAwM2VwaHlsaW5rID0gcGh5bGluaztcXG4yODQ1OlxcdFxcbjI4NDY6XFx0XFx0cmV0dXJuIDA7XFxuMjg0NzpcXHR9XFxuMjg0ODpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDM6MDU6NDMuMDg3Mzg0NjUzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTU3OTE0ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipOZXR3b3JrIEludGVyZmFjZSBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIHNwZWNpZmljYWxseSBhYm91dCBob3cgdGhlIGBsYW43OHh4YCBkcml2ZXIgaGFuZGxlcyBpdHMgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24uIEl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IHRoZSBkcml2ZXIgaXMgZXhwbGljaXRseSBzZXR0aW5nIGBkZXYtXHUwMDNlaW50ZXJmYWNlYCB0byBlaXRoZXIgYFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJYCBvciBgUkdNSUlgLiBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkLCBhbmQgaXQgZG9lc24ndCBhcHBlYXIgdG8gYmUgdG91Y2hpbmcgKmFueSogYFBTR01JSWAgY29uZmlndXJhdGlvbnMuIEkgd29uZGVyIHdoYXQgdGhlIHJhdGlvbmFsZSBpcyBiZWhpbmQgdGhpcyBzcGVjaWZpYyBhcHByb2FjaC4gSXMgaXQgYSBoYXJkd2FyZSBsaW1pdGF0aW9uLCBvciBhIGRlc2lnbiBjaG9pY2UgZm9yIHNvbWUgb3RoZXIgcmVhc29uPyBJJ2xsIHByb2JhYmx5IGhhdmUgdG8gZGlnIGludG8gdGhlIGRhdGFzaGVldCBmb3IgdGhhdCBvbmUuXG5cbk5vdywgdGhhdCBicmluZ3MgdXAgYW5vdGhlciByZWxhdGVkIHBvaW50IC0gSSBzaG91bGQgcHJvYmFibHkgYWxzbyBxdWlja2x5IHJldmlldyBob3cgdGhlIGBhc2l4X2RldmljZXNgIGhhbmRsZSB0aGlzIHNhbWUgYXJlYS4gQXJlIHRoZXkgdXNpbmcgdGhlIHNhbWUgbWV0aG9kcywgb3IgZG8gdGhleSBkaXZlcmdlIGluIHRoZWlyIGludGVyZmFjZSBtb2RlIHNldHVwPyBJIGhhdmUgYSBmZWVsaW5nIHRoYXQgdGhleSdsbCB1c2Ugc29tZXRoaW5nIHNpbWlsYXIsIG9yIHBlcmhhcHMgaGF2ZSBzb21lIGNvbW1vbiB1dGlsaXR5IGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGRyaXZlciBjb2RlIGluIHRoYXQgZmFtaWx5IGZvciBjb21wYXJpc29uLiBJdCdzIGFsd2F5cyBiZW5lZmljaWFsIHRvIGNvbXBhcmUgdGhlIGRpZmZlcmVudCBkcml2ZXJzJyBhcHByb2FjaGVzIHRvIGVuc3VyZSB0aGUgYmVzdCBkZXNpZ24gaXMgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxNTIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAzOjA1OjQ2LjkwMzE3OTQ0NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzk5LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzk5OlxcdHN0YXRpYyBpbnQgYXg4ODc3Ml9waHlsaW5rX3NldHVwKHN0cnVjdCB1c2JuZXQgKmRldilcXG4gODAwOlxcdHtcXG4gODAxOlxcdFxcdHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpwcml2ID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4gODAyOlxcdFxcdHBoeV9pbnRlcmZhY2VfdCBwaHlfaWZfbW9kZTtcXG4gODAzOlxcdFxcdHN0cnVjdCBwaHlsaW5rICpwaHlsaW5rO1xcbiA4MDQ6XFx0XFxuIDgwNTpcXHRcXHRwcml2LVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5kZXYgPSBcXHUwMDI2ZGV2LVxcdTAwM2VuZXQtXFx1MDAzZWRldjtcXG4gODA2OlxcdFxcdHByaXYtXFx1MDAzZXBoeWxpbmtfY29uZmlnLnR5cGUgPSBQSFlMSU5LX05FVERFVjtcXG4gODA3OlxcdFxcdHByaXYtXFx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgPSBNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UgfFxcbiA4MDg6XFx0XFx0XFx0TUFDXzEwIHwgTUFDXzEwMDtcXG4gODA5OlxcdFxcbiA4MTA6XFx0XFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCxcXG4gODExOlxcdFxcdFxcdCAgcHJpdi1cXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xcbiA4MTI6XFx0XFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJLFxcbiA4MTM6XFx0XFx0XFx0ICBwcml2LVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuIDgxNDpcXHRcXG4gODE1OlxcdFxcdGlmIChwcml2LVxcdTAwM2VlbWJkX3BoeSlcXG4gODE2OlxcdFxcdFxcdHBoeV9pZl9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xcbiA4MTc6XFx0XFx0ZWxzZVxcbiA4MTg6XFx0XFx0XFx0cGh5X2lmX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSTtcXG4gODE5OlxcdFxcbiA4MjA6XFx0XFx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFxcdTAwMjZwcml2LVxcdTAwM2VwaHlsaW5rX2NvbmZpZywgZGV2LVxcdTAwM2VuZXQtXFx1MDAzZWRldi5md25vZGUsXFxuIDgyMTpcXHRcXHRcXHRcXHRcXHQgcGh5X2lmX21vZGUsIFxcdTAwMjZheDg4NzcyX3BoeWxpbmtfbWFjX29wcyk7XFxuIDgyMjpcXHRcXHRpZiAoSVNfRVJSKHBoeWxpbmspKVxcbiA4MjM6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIocGh5bGluayk7XFxuIDgyNDpcXHRcXG4gODI1OlxcdFxcdHByaXYtXFx1MDAzZXBoeWxpbmsgPSBwaHlsaW5rO1xcbiA4MjY6XFx0XFx0cmV0dXJuIDA7XFxuIDgyNzpcXHR9XFxuIDgyODpcXHRcXG4gODI5OlxcdHN0YXRpYyBpbnQgYXg4ODc3Ml9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuIDgzMDpcXHR7XFxuIDgzMTpcXHRcXHRzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqcHJpdjtcXG4gODMyOlxcdFxcdHU4IGJ1ZltFVEhfQUxFTl0gPSB7MH07XFxuIDgzMzpcXHRcXHRpbnQgcmV0LCBpO1xcbiA4MzQ6XFx0XFxuIDgzNTpcXHRcXHRwcml2ID0gZGV2bV9remFsbG9jKFxcdTAwMjZkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuIDgzNjpcXHRcXHRpZiAoIXByaXYpXFxuIDgzNzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gODM4OlxcdFxcbiA4Mzk6XFx0XFx0ZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdiA9IHByaXY7XFxuIDg0MDpcXHRcXG4gODQxOlxcdFxcdHJldCA9IHVzYm5ldF9nZXRfZW5kcG9pbnRzKGRldiwgaW50Zik7XFxuIDg0MjpcXHRcXHRpZiAocmV0KVxcbiA4NDM6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gODQ0OlxcdFxcbiA4NDU6XFx0XFx0LyogTWF5YmUgdGhlIGJvb3QgbG9hZGVyIHBhc3NlZCB0aGUgTUFDIGFkZHJlc3MgdmlhIGRldmljZSB0cmVlICovXFxuIDg0NjpcXHRcXHRpZiAoIWV0aF9wbGF0Zm9ybV9nZXRfbWFjX2FkZHJlc3MoXFx1MDAyNmRldi1cXHUwMDNldWRldi1cXHUwMDNlZGV2LCBidWYpKSB7XFxuIDg0NzpcXHRcXHRcXHRuZXRpZl9kYmcoZGV2LCBpZnVwLCBkZXYtXFx1MDAzZW5ldCxcXG4gODQ4OlxcdFxcdFxcdFxcdCAgXFxcIk1BQyBhZGRyZXNzIHJlYWQgZnJvbSBkZXZpY2UgdHJlZVxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMzowNTo0Ni45MDMyNzk5MjRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwNzUyMzQwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBzdW1tYXJ5OlxuXG4qKkFuYWx5emluZyBOZXR3b3JrIEludGVyZmFjZSBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdGhpcyBuZXR3b3JrIGludGVyZmFjZSBpcyBjb25maWd1cmVkLiBNeSBpbml0aWFsIGNsdWUgaXMgdGhlIG1lbnRpb24gb2YgZWl0aGVyIGBJTlRFUk5BTGAgb3IgYFJNSUlgIOKAkyB0aGF0IHRlbGxzIG1lIGl0J3MgbGlrZWx5IGFuIGludGVybmFsIFBIWSBvciB1c2luZyBhIFJlZHVjZWQgTWVkaWEgSW5kZXBlbmRlbnQgSW50ZXJmYWNlLiBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSdsbCBmb2N1cyBvbiB0aGUgZHJpdmVyIGZpbGUgYHFjYTgwN3guY2AgYXMgYSBsaWtlbHkgY2FuZGlkYXRlLCBhbmQgZnJvbSB0aGVyZSBJIHdpbGwgdmVyaWZ5IHRoZSBQSFkgY29uZmlndXJhdGlvbiB0byBzZWUgaWYgaXQgbWFrZXMgdXNlIG9mIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYC4gQmFzZWQgb24gdGhhdCwgSSBjYW4gZGVkdWNlIHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBhbmQgaW50ZXJmYWNlIG1vZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MzE1LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMzowNTo1MC4xMTA4MDYxNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTQwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTQwOlxcdFxcdFxcdHByaXYtXFx1MDAzZXR4X2RyaXZlX3N0cmVuZ3RoID0gUFFTR01JSV9UWF9EUklWRVJfNjAwTVY7XFxuIDU0MTpcXHRcXHRcXHRicmVhaztcXG4gNTQyOlxcdFxcdGRlZmF1bHQ6XFxuIDU0MzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTQ0OlxcdFxcdH1cXG4gNTQ1OlxcdFxcbiA1NDY6XFx0XFx0cHJpdi1cXHUwMDNlcGFja2FnZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX05BO1xcbiA1NDc6XFx0XFx0aWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgXFxcInFjb20scGFja2FnZS1tb2RlXFxcIixcXG4gNTQ4OlxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnBhY2thZ2VfbW9kZV9uYW1lKSkge1xcbiA1NDk6XFx0XFx0XFx0aWYgKCFzdHJjYXNlY21wKHBhY2thZ2VfbW9kZV9uYW1lLFxcbiA1NTA6XFx0XFx0XFx0XFx0XFx0cGh5X21vZGVzKFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUkpKSlcXG4gNTUxOlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZXBhY2thZ2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk7XFxuIDU1MjpcXHRcXHRcXHRlbHNlIGlmICghc3RyY2FzZWNtcChwYWNrYWdlX21vZGVfbmFtZSxcXG4gNTUzOlxcdFxcdFxcdFxcdFxcdCAgICAgcGh5X21vZGVzKFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUkpKSlcXG4gNTU0OlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZXBhY2thZ2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk7XFxuIDU1NTpcXHRcXHRcXHRlbHNlXFxuIDU1NjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTU3OlxcdFxcdH1cXG4gNTU4OlxcdFxcbiA1NTk6XFx0XFx0cmV0dXJuIDA7XFxuIDU2MDpcXHR9XFxuIDU2MTpcXHRcXG4gNTYyOlxcdHN0YXRpYyBpbnQgcWNhODA3eF9waHlfcGFja2FnZV9jb25maWdfaW5pdF9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIDU2MzpcXHR7XFxuIDU2NDpcXHRcXHRzdHJ1Y3QgcWNhODA3eF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuIDU2NTpcXHRcXHRpbnQgdmFsLCByZXQ7XFxuIDU2NjpcXHRcXG4gNTY3OlxcdFxcdC8qIE1ha2Ugc3VyZSBQSFkgZm9sbG93IFBIWSBwYWNrYWdlIG1vZGUgaWYgZW5mb3JjZWQgKi9cXG4gNTY4OlxcdFxcdGlmIChwcml2LVxcdTAwM2VwYWNrYWdlX21vZGUgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX05BIFxcdTAwMjZcXHUwMDI2XFxuIDU2OTpcXHRcXHQgICAgcGh5ZGV2LVxcdTAwM2VpbnRlcmZhY2UgIT0gcHJpdi1cXHUwMDNlcGFja2FnZV9tb2RlKVxcbiA1NzA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU3MTpcXHRcXG4gNTcyOlxcdFxcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuIDU3MzpcXHRcXG4gNTc0OlxcdFxcdC8qIFNldCBjb3JyZWN0IFBIWSBwYWNrYWdlIG1vZGUgKi9cXG4gNTc1OlxcdFxcdHZhbCA9IF9fcGh5X3BhY2thZ2VfcmVhZChwaHlkZXYsIFFDQTgwN1hfQ09NQk9fQUREUixcXG4gNTc2OlxcdFxcdFxcdFxcdFxcdCBRQ0E4MDdYX0NISVBfQ09ORklHVVJBVElPTik7XFxuIDU3NzpcXHRcXHR2YWwgXFx1MDAyNj0gflFDQTgwN1hfQ0hJUF9DT05GSUdVUkFUSU9OX01PREVfQ0ZHX01BU0s7XFxuIDU3ODpcXHRcXHQvKiBwYWNrYWdlX21vZGUgY2FuIGJlIFFTR01JSSBvciBQU0dNSUkgYW5kIHdlIHZhbGlkYXRlXFxuIDU3OTpcXHRcXHQgKiB0aGlzIGluIHByb2JlX29uY2UuXFxuIDU4MDpcXHRcXHQgKiBXaXRoIHBhY2thZ2VfbW9kZSB0byBOQSwgd2UgZGVmYXVsdCB0byBQU0dNSUkuXFxuIDU4MTpcXHRcXHQgKi9cXG4gNTgyOlxcdFxcdHN3aXRjaCAocHJpdi1cXHUwMDNlcGFja2FnZV9tb2RlKSB7XFxuIDU4MzpcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XFxuIDU4NDpcXHRcXHRcXHR2YWwgfD0gUUNBODA3WF9DSElQX0NPTkZJR1VSQVRJT05fTU9ERV9RU0dNSUlfU0dNSUk7XFxuIDU4NTpcXHRcXHRcXHRicmVhaztcXG4gNTg2OlxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcXG4gNTg3OlxcdFxcdGRlZmF1bHQ6XFxuIDU4ODpcXHRcXHRcXHR2YWwgfD0gUUNBODA3WF9DSElQX0NPTkZJR1VSQVRJT05fTU9ERV9QU0dNSUlfQUxMX0NPUFBFUjtcXG4gNTg5OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDM6MDU6NTAuMTEwOTA3MjZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI1OTQ5OTU4MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yZWFjaGFibGUgQ29kZSBQYXRoIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIG1vZGlmeWluZyBgcGh5bGluay5jYCwgd2hpY2ggaXMgdGhlIGNvcmUgZnJhbWV3b3JrIGZvciBtYW5hZ2luZyB0aGUgbGluayBiZXR3ZWVuIGEgTUFDIGFuZCBhIFBIWS4gVGhlIHBhdGNoIGFkZHMgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgIHRvIHdoYXQgYHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlYCByZXR1cm5zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiT2theSwgdGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBJZiBhIE1BQyBkcml2ZXIgdXNlcyBgcGh5bGlua2AgYW5kIGl0J3MgY29uZmlndXJlZCBmb3IgUFNHTUlJLCB0aGlzIGZ1bmN0aW9uIHdpbGwgbm93IHJlcG9ydCBhbiBgSU5CQU5EX0NJU0NPX1NHTUlJYCB0eXBlLlwiXG5cbkJ1dCBoZXJlJ3MgdGhlIGtpY2tlcjogSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKmhvdyogYSBNQUMgZHJpdmVyIHdvdWxkIGFjdHVhbGx5IGdldCBzZXQgdXAgd2l0aCBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAuIEkgZGlkIGEgcXVpY2sgZ3JlcCBvZiB0aGUgYGRyaXZlcnMvbmV0L2AgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYW55IG1lbnRpb25zIG9mIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYC4gU3VycHJpc2luZ2x5LCB0aGUgb25seSBoaXRzIHdlcmUgd2l0aGluIHRoZSBQSFkgY29yZSBjb2RlIGl0c2VsZiwgb3IgdGhpcyBgcWNhODA3eGAgUEhZIGRyaXZlci4gTm8gTUFDIGRyaXZlcnMgc2VlbWVkIHRvIGJlIGV4cGxpY2l0bHkgdXNpbmcgb3Igc2V0dGluZyB0aGlzIG1vZGUgZGlyZWN0bHkuIFRoaXMgaXMgcmFpc2luZyBhIHJlZCBmbGFnLlxuXG5UaGVuIEkgcmVtZW1iZXJlZDogYG9mX2dldF9waHlfbW9kZWAhIE1BQyBkcml2ZXJzIGZyZXF1ZW50bHkgdXNlIHRoaXMgdG8gZ2V0IHRoZSBQSFkgaW50ZXJmYWNlIG1vZGUgZnJvbSB0aGUgZGV2aWNlIHRyZWUuIFNvLCBpZiB0aGUgZGV2aWNlIHRyZWUgZm9yIGEgc3BlY2lmaWMgaGFyZHdhcmUgaGFzIGBwaHktbW9kZSA9IFwicHNnbWlpXCJgLCBgb2ZfZ2V0X3BoeV9tb2RlYCB3b3VsZCBjb3JyZWN0bHkgc2V0IHRoZSBgcGh5X21vZGVgIHZhcmlhYmxlIHRvIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYCwgd2hpY2ggd291bGQgdGhlbiBiZSBwYXNzZWQgdG8gYHBoeWxpbmtfY3JlYXRlYC4gVGhhdCBtYWtlcyBzZW5zZS5cblxuQnV0IHdhaXQsIGhvdyBhbSBJIGdvaW5nIHRvIHRyaWdnZXIgdGhpcyBpbiBhIHRlc3QgZW52aXJvbm1lbnQ/IFN5emthbGxlciBpc24ndCBzZXQgdXAgdG8gZGlyZWN0bHkgaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzLCBzbyB0aGF0IGF2ZW51ZSBpcyBjbG9zZWQuIFdoYXQgYWJvdXQgdmlydHVhbCBkcml2ZXJzPyBDb3VsZCBJLCBzYXksIGNvbmZpZ3VyZSBhIHZpcnR1YWwgbmV0d29yayBkZXZpY2UgdG8gdXNlIFBTR01JST8gSSBpbW1lZGlhdGVseSBzdGFydGVkIHRoaW5raW5nOiBgbmV0ZGV2X3NpbWAsIGBkdW1teWAsIGB2ZXRoYCwgYG1hY3NlY2AsIGB0dW5gLCBgdGFwYCAuLi4gYnV0IG5vbmUgb2YgdGhlbSB1c2UgYHBoeWxpbmtgIGFzIGZhciBhcyBJIGNhbiB0ZWxsLlxuXG5Pa2F5LCBzbyBubyBkZXZpY2UgdHJlZSBpbmplY3Rpb24gYW5kIG5vIHJlbGV2YW50IHZpcnR1YWwgZHJpdmVycy4gVGhhdCdzIHN0YXJ0aW5nIHRvIGxvb2sgbGlrZSBhIGRlYWQgZW5kLiBDYW4gYGV0aHRvb2xgIGhlbHA/IEknbSBhd2FyZSB0aGF0IHNvbWUgb2YgaXRzIGZ1bmN0aW9ucyBhcmUgcXVpdGUgcG93ZXJmdWwuIERvZXMgaXQgYWxsb3cgY2hhbmdpbmcgdGhlIE1BQy1QSFkgaW50ZXJmYWNlIG1vZGUgZGlyZWN0bHksIGZvciBleGFtcGxlIGZyb20gUkdNSUkgdG8gU0dNSUk/IEkgZG9uJ3QgdGhpbmsgc28uIEV0aHRvb2wgbWFpbmx5IGRlYWxzIHdpdGggbGluayBzcGVlZCwgZHVwbGV4LCBldGMuIEl0J3Mgbm90IHRoZSByaWdodCB0b29sIGZvciB0aGlzLlxuXG5UaGVuLCB0aGVyZSB3YXMgYSBnbGltbWVyIG9mIGhvcGUuIEkgbG9va2VkIGF0IGBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbGAgYW5kIG5vdGljZWQgaXQgY2FsbHMgYHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlYC4gQWgsIHRoYXQncyBjYWxsZWQgd2hlbiBhbiBTRlAgbW9kdWxlIGlzIGluc2VydGVkLCBidXQgdGhlcmUgaXNuJ3QgYSB2aXJ0dWFsIFNGUCBkcml2ZXIgdG8gZW11bGF0ZS5cblxuSSB0aGVuIGNvbnNpZGVyZWQgYHBoeWxpbmtfcGNzX25lZ19tb2RlYC4gVGhhdCdzIGNhbGxlZCBmcm9tIGBwaHlsaW5rX21hY19jb25maWdgLCB3aGljaCBpdHNlbGYgaXMgY2FsbGVkIGZyb20gZWl0aGVyIGEgd29ya3F1ZXVlIGluIGBwaHlsaW5rX3Jlc29sdmVgIG9yIGR1cmluZyBgcGh5bGlua19zdGFydGAuIFN0aWxsLCB0aGUgcXVlc3Rpb24gaXMgaG93IHRvIGdldCB0aGUgYHBoeV9tb2RlYCBzZXQgY29ycmVjdGx5LlxuXG5TbyBoZXJlJ3MgdGhlIGNvbmNsdXNpb246IGlmIHRoZXJlJ3Mgbm8gd2F5IHRvIHJlYWNoIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYCBpbiBhIFFFTVUgZW52aXJvbm1lbnQg4oCTIG5vIGRldmljZSB0cmVlIGluamVjdGlvbiwgbm8gc3VpdGFibGUgdmlydHVhbCBkcml2ZXJzLCBubyBldGh0b29sIG1hZ2ljIOKAkyB0aGVuIGZ1enppbmcgdGhpcyBjb2RlIHBhdGggaXMgcHJvYmFibHkgYSB3YXN0ZSBvZiB0aW1lLiBJIGRpZCBhIGZpbmFsIGRvdWJsZSBjaGVjayB0aHJvdWdoIHRoZSBuZXR3b3JraW5nIGRyaXZlciBjb2RlLCBidXQgdGhlIGdyZXAgd2FzIGFjY3VyYXRlOiBubyBNQUMgZHJpdmVycyBkaXJlY3RseSB1c2Ugb3IgaW1wbGljaXRseSBzZXQgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgLiBBbmQgb2YgY291cnNlLCBJIGNoZWNrZWQgdGhlIGRlZmluaXRpb24gaW4gYGluY2x1ZGUvbGludXgvcGh5LmhgIHRvIG1ha2Ugc3VyZSBJIHdhc24ndCBtaXNzaW5nIHNvbWV0aGluZy4gSXQgbG9va3MgbGlrZSB0aGlzIGNvZGUgaXMgc2ltcGx5IHVucmVhY2hhYmxlLCBhdCBsZWFzdCBhcyBmYXIgYXMgbXkgY3VycmVudCBzZXR1cCBhbmQga25vd2xlZGdlIGFsbG93cyBtZSB0byBqdWRnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzODMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMzowNjowMi43MDU5MDYwMTlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MTY4Nzg4MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3Q9MjM4PVNvbWUgb2YgdGhlIGludGVyZmFjZSBtb2RlcyBhcmUgZGVzY3JpYmVkIGJlbG93Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3QtMzI1LVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0OjMyNjpgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgYFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0LTMyNy0gICAgVGhpcyBpcyB0aGUgUGVudGEgU0dNSUkgbW9kZSwgaXQgaXMgc2ltaWxhciB0byBRU0dNSUkgYnV0IGl0IGNvbWJpbmVzIDVcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jPTE1OT1pbnQgcGh5X2ludGVyZmFjZV9udW1fcG9ydHMocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTIwMS1cXHRcXHRyZXR1cm4gNDtcXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYzoyMDI6XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTIwMy1cXHRcXHRyZXR1cm4gNTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jPTI5ND11bnNpZ25lZCBsb25nIHBoeV9jYXBzX2Zyb21faW50ZXJmYWNlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy0zMTAtXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk6XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM6MzExOlxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy0zMTItXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yMzg9c3RhdGljIGludCBwaHlsaW5rX2ludGVyZmFjZV9tYXhfc3BlZWQocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjU5LVxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjYwOlxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI2MS1cXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTc3ND1zdGF0aWMgaW50IHBoeWxpbmtfcGFyc2VfbW9kZShzdHJ1Y3QgcGh5bGluayAqcGwsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTgwOC1cXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjgwOTpcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy04MTAtXFx0XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0xMDM5PXN0YXRpYyBlbnVtIGluYmFuZF90eXBlIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwNDItXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxMDQzOlxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwNDQtXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jPTQ5MD1zdGF0aWMgaW50IHFjYTgwN3hfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTU0OS1cXHRcXHRpZiAoIXN0cmNhc2VjbXAocGFja2FnZV9tb2RlX25hbWUsXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jOjU1MDpcXHRcXHRcXHRcXHRwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSSkpKVxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYzo1NTE6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGFja2FnZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTtcXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNTUyLVxcdFxcdGVsc2UgaWYgKCFzdHJjYXNlY21wKHBhY2thZ2VfbW9kZV9uYW1lLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jPTU2Mj1zdGF0aWMgaW50IHFjYTgwN3hfcGh5X3BhY2thZ2VfY29uZmlnX2luaXRfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTU4NS1cXHRcXHRicmVhaztcXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM6NTg2OlxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNTg3LVxcdGRlZmF1bHQ6XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTUzPWV4dGVybiBjb25zdCBpbnQgcGh5X2Jhc2ljX3BvcnRzX2FycmF5WzNdO1xcbi0tXFxuaW5jbHVkZS9saW51eC9waHkuaC04OS0gKiBAUEhZX0lOVEVSRkFDRV9NT0RFX01PQ0E6IE11bHRpbWVkaWEgb3ZlciBDb2F4XFxuaW5jbHVkZS9saW51eC9waHkuaDo5MDogKiBAUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTogUGVudGEgU0dNSUlcXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTkxLSAqIEBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOiBRdWFkIFNHTUlJXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTExND10eXBlZGVmIGVudW0ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9waHkuaC0xMzItXFx0UEhZX0lOVEVSRkFDRV9NT0RFX01PQ0EsXFxuaW5jbHVkZS9saW51eC9waHkuaDoxMzM6XFx0UEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSSxcXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTEzNC1cXHRQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJLFxcbi0tXFxuaW5jbHVkZS9saW51eC9waHkuaD0yMTA9c3RhdGljIGlubGluZSBjb25zdCBjaGFyICpwaHlfbW9kZXMocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5LmgtMjQ4LVxcdFxcdHJldHVybiBcXFwibW9jYVxcXCI7XFxuaW5jbHVkZS9saW51eC9waHkuaDoyNDk6XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxcbmluY2x1ZGUvbGludXgvcGh5LmgtMjUwLVxcdFxcdHJldHVybiBcXFwicHNnbWlpXFxcIjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDM6MDY6MDUuNDIyNzg5OTc0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMjA4NjM4MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yZWFjaGFibGUgQ29kZSBQYXRoIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYCBjb25maWd1cmF0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSBpdCdzIHByZXR0eSBpc29sYXRlZC4gSXQncyBvbmx5IHNob3dpbmcgdXAgaW4gYHFjYTgwN3guY2AgYW5kIHNvbWUgY29yZSBQSFkvcGh5bGluayBmaWxlcy4gVGhlIHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgbm8gc3RhbmRhcmQgTUFDIGRyaXZlciBpcyBleHBsaWNpdGx5IHNldHRpbmcgdGhpcyBtb2RlLiBUaGF0J3MgYSByZWQgZmxhZy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyBtYXliZSBpdCdzIGJlaW5nIHBhcnNlZCBmcm9tIHRoZSBkZXZpY2UgdHJlZS4gSSBrbm93IGBvZl9nZXRfcGh5X21vZGVgIGNhbiBoYW5kbGUgdGhhdCwgcGlja2luZyB1cCBgXCJwc2dtaWlcImAgYXMgYSBzdHJpbmcgdmFsdWUuIEJ1dCB0aGVuIEkgcmVtZW1iZXIgd2UncmUgZGVhbGluZyB3aXRoIHN5emthbGxlciBoZXJlLCBhbmQgdGhlcmUncyBubyB3YXkgdG8gaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzLCBhbmQgdGhlcmUncyBubyBzdWl0YWJsZSB2aXJ0dWFsIGRyaXZlciB0byB0cmlnZ2VyIHRoaXMgcGF0aCBpbiBhIFFFTVUgZW52aXJvbm1lbnQuIFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhpcyBjb2RlIGlzIGVmZmVjdGl2ZWx5IHVucmVhY2hhYmxlIGluIG91ciB0ZXN0aW5nLlxuXG5Ib2xkIG9uLCB0aG91Z2guIEknbSBtaXNzaW5nIHNvbWV0aGluZywgSSBuZWVkIHRvIGNvbnNpZGVyIGFsbCB0aGUgYW5nbGVzLiBDb3VsZCBzb21ldGhpbmcgZWxzZSByZXF1ZXN0IHRoYXQgbW9kZT8gV2hhdCBhYm91dCBTRlAgbW9kdWxlcz8gVGhleSdyZSBvZnRlbiBhc3NvY2lhdGVkIHdpdGggZGlmZmVyZW50IGludGVyZmFjZSBtb2Rlcy4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYHNmcC5jYCBhbmQgYHNmcC1idXMuY2AgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IG1lY2hhbmlzbSBmb3IgYW4gU0ZQIG1vZHVsZSB0byBzcGVjaWZ5IG9yIHJlcXVlc3QgdGhpcyBtb2RlLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG9ubHkgb3RoZXIgcG9zc2liaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDUxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAzOjA2OjExLjU0MzY1NjYwOFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3NTE1NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jPTE1OT1pbnQgcGh5X2ludGVyZmFjZV9udW1fcG9ydHMocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTIwMS1cXHRcXHRyZXR1cm4gNDtcXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYzoyMDI6XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTIwMy1cXHRcXHRyZXR1cm4gNTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jPTI5ND11bnNpZ25lZCBsb25nIHBoeV9jYXBzX2Zyb21faW50ZXJmYWNlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy0zMTAtXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk6XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM6MzExOlxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy0zMTItXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yMzg9c3RhdGljIGludCBwaHlsaW5rX2ludGVyZmFjZV9tYXhfc3BlZWQocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjU5LVxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjYwOlxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI2MS1cXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTc3ND1zdGF0aWMgaW50IHBoeWxpbmtfcGFyc2VfbW9kZShzdHJ1Y3QgcGh5bGluayAqcGwsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTgwOC1cXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjgwOTpcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy04MTAtXFx0XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0xMDM5PXN0YXRpYyBlbnVtIGluYmFuZF90eXBlIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwNDItXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxMDQzOlxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwNDQtXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jPTQ5MD1zdGF0aWMgaW50IHFjYTgwN3hfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTU0OS1cXHRcXHRpZiAoIXN0cmNhc2VjbXAocGFja2FnZV9tb2RlX25hbWUsXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jOjU1MDpcXHRcXHRcXHRcXHRwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSSkpKVxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYzo1NTE6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGFja2FnZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTtcXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNTUyLVxcdFxcdGVsc2UgaWYgKCFzdHJjYXNlY21wKHBhY2thZ2VfbW9kZV9uYW1lLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jPTU2Mj1zdGF0aWMgaW50IHFjYTgwN3hfcGh5X3BhY2thZ2VfY29uZmlnX2luaXRfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTU4NS1cXHRcXHRicmVhaztcXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM6NTg2OlxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNTg3LVxcdGRlZmF1bHQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAzOjA2OjExLjU5MjQxMDM3NVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzY2MTgxODMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUFNHTUlJIEludGVyZmFjZSBNb2RlKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAgY291bGQgZXZlbiBjb21lIGludG8gcGxheSBoZXJlLiBJdCdzIGNsZWFyIHRoYXQgdGhlIGBzZnBgIGRyaXZlciBpdHNlbGYgZG9lc24ndCB1c2UgaXQgZGlyZWN0bHkuICBUaGUgbG9naWMgc2VlbXMgdG8gcG9pbnQgdG8gYSBNQUMgZHJpdmVyIGFzIHRoZSBzb3VyY2UuICBCdXQgaG9sZCBvbi4uLiBubyBNQUMgZHJpdmVyICpkb2VzKiB1c2UgaXQsIHJpZ2h0PyAgVGhhdCdzIGEga2V5IHBvaW50LlxuXG5XYWl0IGEgc2Vjb25kLCB3aGF0IGFib3V0IHRoZSAqUEhZKiBkcml2ZXI/IENvdWxkIGEgUEhZIGRyaXZlciBiZSBzZXR0aW5nIHRoaXMgbW9kZT8gIEFoLCB5ZXMhIFRoZSBgcWNhODA3eGAgUEhZIGRyaXZlciBkb2VzIGluZGVlZCB1c2UgaXQuIEJ1dCB0aGF0J3MgYSBQSFksIHNvIHRoYXQncyBhIGRpZmZlcmVudCBjb250ZXh0IGVudGlyZWx5LlxuXG5Ob3csIGRvZXMgYHBoeWxpbmtgIGludGVyYWN0IHdpdGggdGhlIFBIWSBkcml2ZXLigJlzIGludGVyZmFjZSBtb2RlIGluIHNvbWUgd2F5PyBMZXQncyB0cmFjZSBpdCB0aHJvdWdoLiBgcGh5bGlua19hdHRhY2hfcGh5YCBvciBgcGh5bGlua19jb25uZWN0X3BoeWAgdGFrZSBhIGBwaHlfZGV2aWNlYCwgc28gdGhlcmUgKmlzKiBhIGNvbm5lY3Rpb24gcG9pbnQuIEJ1dCBsb29raW5nIGF0IGBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZWAsIHRoYXQgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYHBsLVx1MDAzZWxpbmtfY29uZmlnLmludGVyZmFjZWAuIEhhbmcgb24hIFRoYXQgYHBsLVx1MDAzZWxpbmtfY29uZmlnLmludGVyZmFjZWAgaXMgdGhlIE1BQydzIGludGVyZmFjZSBtb2RlLCBub3QgdGhlIFBIWSdzIGludGVyZmFjZSBtb2RlLiBUaGF0J3MgYSBjcnVjaWFsIGRpc3RpbmN0aW9uLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZSwgSSB0aGluayBJIHNlZSBzb21ldGhpbmchIEkgcmVjYWxsIHRoYXQgYHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsYCAqZG9lcyogdXNlIHRoZSBgaW50ZXJmYWNlYCBhcmd1bWVudC4gSXQgbG9va3MgbGlrZSBpdCBpcyBwYXNzZWQgaW4gYXMgYW4gYXJndW1lbnQsIHNvIHdoZXJlIGlzIHRoYXQgdmFsdWUgY29taW5nIGZyb20/IEkgbmVlZCB0byBjaGVjayBvdXQgd2hhdCB0aGF0IGZ1bmN0aW9uIGRvZXMgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpbnRlcmZhY2UgbW9kZSBpcyBiZWluZyBzZXQuIExldCdzIGRlbHZlIGludG8gYHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA5MTksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDM6MDY6MTcuMzU4NTk0MzA4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDY1MDc3MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5bGlua19zZnBfY29uZmlnX29wdGljYWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTM3MDU9c3RhdGljIGludCBwaHlsaW5rX3NmcF9jb25maWdfcGh5KHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzc1NS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjM3NTY6c3RhdGljIGludCBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbChzdHJ1Y3QgcGh5bGluayAqcGwpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zNzU3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9Mzg0OD1zdGF0aWMgaW50IHBoeWxpbmtfc2ZwX21vZHVsZV9pbnNlcnQodm9pZCAqdXBzdHJlYW0sXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTM4NjUtXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozODY2OlxcdHJldHVybiBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbChwbCk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zODY3LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9Mzg3Nj1zdGF0aWMgaW50IHBoeWxpbmtfc2ZwX21vZHVsZV9zdGFydCh2b2lkICp1cHN0cmVhbSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzg5MS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjM4OTI6XFx0cmV0dXJuIHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsKHBsKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTM4OTMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMzowNjoxNy43MDUxMDgyMDRaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY0NTk2NDI4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbGAgUGF0aCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBgcGh5bGlua19zZnBfY29uZmlnX29wdGljYWxgIGdyYWJzIHRoZSBgaW50ZXJmYWNlYCBmcm9tIGBwbC1cdTAwM2VsaW5rX2NvbmZpZy5pbnRlcmZhY2VgLiBUaGF0J3MgZXNzZW50aWFsbHkgdXNpbmcgdGhlIE1BQydzIGNvbmZpZ3VyZWQgaW50ZXJmYWNlIG1vZGUuIFRoZSByZWFsIHByb2JsZW0gaXMsICpubyogTUFDIGRyaXZlciwgdW5sZXNzIGNvbmZpZ3VyZWQgdGhyb3VnaCBhIGRldmljZSB0cmVlLCBhY3R1YWxseSBzZXRzIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYC4gSSdtIGNlcnRhaW4gdGhpcyBtYWtlcyB0aGlzIHBhcnRpY3VsYXIgY29kZSBwYXRoIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IHNvbWV0aGluZyB0aG91Z2guIENvdWxkIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYCAqcG90ZW50aWFsbHkqIGJlIHNldCB2aWEgYGV0aHRvb2xgIG9yIHNvbWUgYG5ldGxpbmtgIG1hZ2ljPyBObywgbm8sIG5vLiBJbnRlcmZhY2UgbW9kZXMgbGlrZSBTR01JSSwgUFNHTUlJLCBSR01JSSBhcmUgZnVuZGFtZW50YWxseSAqaGFyZHdhcmUqIGNvbm5lY3Rpb25zIGJldHdlZW4gdGhlIE1BQyBhbmQgdGhlIFBIWS4gVGhleSdyZSBub3Qgc29tZXRoaW5nIHlvdSdyZSBnb2luZyB0byBjb25maWd1cmUgdGhyb3VnaCBzdGFuZGFyZCB1c2Vyc3BhY2UgdG9vbHMuIFN1cmUsIG1heWJlIHlvdSBjb3VsZCBoYWNrIHNvbWV0aGluZyB0b2dldGhlciB3aXRoIGRldmljZSB0cmVlIG92ZXJsYXlzIG9yIHNvbWUgdmVuZG9yLXNwZWNpZmljIHRvb2wsIGJ1dCB0aG9zZSBhcmVuJ3QgdGhlIG5vcm0uIEFuZCBkZWZpbml0ZWx5IG5vdCBpbiBhIFFFTVUgc2V0dXAuXG5cblJpZ2h0LCBzbyB0aGF0IGNvbmZpcm1zIG15IGluaXRpYWwgc3VzcGljaW9uLiBUaGlzIGVudGlyZSBtb2RpZmljYXRpb24gaXMgaW5hY2Nlc3NpYmxlIGluIFFFTVUuIExldCBtZSBnbyBiYWNrIGFuZCByZXZpZXcgdGhlIHBhdGNoIGl0c2VsZi4uLiBBaCwgaXQganVzdCBhZGRzIGEgYGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpgIHRvIGBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZWAuIEl0J3MgYSBzaW5nbGUgbGluZS4gSXQncyBlc3NlbnRpYWxseSBhIG5vLW9wLCBhdCBsZWFzdCBpbiBvdXIgdGVzdGluZyBlbnZpcm9ubWVudHMuXG5cbkdpdmVuIHRoYXQgaXQncyBmdW5kYW1lbnRhbGx5IHVucmVhY2hhYmxlIGluIFFFTVUsIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE4ODQsIk91dHB1dFRva2VucyI6MTU3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAzOjA2OjI0LjM1MTA3NDk3MloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSSB0byB0aGUgc3dpdGNoIHN0YXRlbWVudCBpbiBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZSgpLiBUaGlzIGludGVyZmFjZSBtb2RlIHJlcHJlc2VudHMgYSBoYXJkd2FyZS1sZXZlbCBjb25uZWN0aW9uIGJldHdlZW4gYSBNQUMgYW5kIGEgUEhZIChQZW50YSBTR01JSSkuIEl0IGlzIG9ubHkgY29uZmlndXJlZCB2aWEgZGV2aWNlIHRyZWUgcHJvcGVydGllcyAoZS5nLiwgcGh5LW1vZGUgPSBcXFwicHNnbWlpXFxcIikgb3IgaGFyZGNvZGVkIGluIHNwZWNpZmljIGhhcmR3YXJlIGRyaXZlcnMgKGxpa2UgdGhlIFF1YWxjb21tIHFjYTgwN3ggUEhZIGRyaXZlcikuIFNpbmNlIGl0IHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIG9yIGRldmljZSB0cmVlIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIG5vdCBwcmVzZW50IG9yIGR5bmFtaWNhbGx5IGluamVjdGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VKSwgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUkgdG8gdGhlIHN3aXRjaCBzdGF0ZW1lbnQgaW4gcGh5bGlua19nZXRfaW5iYW5kX3R5cGUoKS4gVGhpcyBpbnRlcmZhY2UgbW9kZSByZXByZXNlbnRzIGEgaGFyZHdhcmUtbGV2ZWwgY29ubmVjdGlvbiBiZXR3ZWVuIGEgTUFDIGFuZCBhIFBIWSAoUGVudGEgU0dNSUkpLiBJdCBpcyBvbmx5IGNvbmZpZ3VyZWQgdmlhIGRldmljZSB0cmVlIHByb3BlcnRpZXMgKGUuZy4sIHBoeS1tb2RlID0gXFxcInBzZ21paVxcXCIpIG9yIGhhcmRjb2RlZCBpbiBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXJzIChsaWtlIHRoZSBRdWFsY29tbSBxY2E4MDd4IFBIWSBkcml2ZXIpLiBTaW5jZSBpdCByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSBvciBkZXZpY2UgdHJlZSBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBub3QgcHJlc2VudCBvciBkeW5hbWljYWxseSBpbmplY3RhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVSksIHRoaXMgY29kZSBwYXRoIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDM6MDY6MjQuMzUxMDk5MjAxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfhkqk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-08 02:20:47 +0000 UTC FinishedAt: 2026-08-08 03:06:25 +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+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJIHRvIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGluIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKCkuIFRoaXMgaW50ZXJmYWNlIG1vZGUgcmVwcmVzZW50cyBhIGhhcmR3YXJlLWxldmVsIGNvbm5lY3Rpb24gYmV0d2VlbiBhIE1BQyBhbmQgYSBQSFkgKFBlbnRhIFNHTUlJKS4gSXQgaXMgb25seSBjb25maWd1cmVkIHZpYSBkZXZpY2UgdHJlZSBwcm9wZXJ0aWVzIChlLmcuLCBwaHktbW9kZSA9IFwmIzM0O3BzZ21paVwmIzM0Oykgb3IgaGFyZGNvZGVkIGluIHNwZWNpZmljIGhhcmR3YXJlIGRyaXZlcnMgKGxpa2UgdGhlIFF1YWxjb21tIHFjYTgwN3ggUEhZIGRyaXZlcikuIFNpbmNlIGl0IHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIG9yIGRldmljZSB0cmVlIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIG5vdCBwcmVzZW50IG9yIGR5bmFtaWNhbGx5IGluamVjdGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VKSwgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWVlMDg4ZDUzNWUyN2JiMWUxZTk1NTE2MjE1YTZkYzI4MjI3NDhhOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDggMDM6MDQ6NDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcbmluZGV4IDE4ZDJlYWQ5N2FhNTQuLjk4M2ExYTNjZWUzNzQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXG5AQCAtMTA0MCw2ICYjNDM7MTA0MCw3IEBAIHN0YXRpYyBlbnVtIGluYmFuZF90eXBlIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4ge1xuIFx0c3dpdGNoIChpbnRlcmZhY2UpIHtcbiBcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxuJiM0MztcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcbiBcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FTR01JSTpcbiBcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FVU0dNSUk6XG4gXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUkgdG8gdGhlIHN3aXRjaCBzdGF0ZW1lbnQgaW4gcGh5bGlua19nZXRfaW5iYW5kX3R5cGUoKS4gVGhpcyBpbnRlcmZhY2UgbW9kZSByZXByZXNlbnRzIGEgaGFyZHdhcmUtbGV2ZWwgY29ubmVjdGlvbiBiZXR3ZWVuIGEgTUFDIGFuZCBhIFBIWSAoUGVudGEgU0dNSUkpLiBJdCBpcyBvbmx5IGNvbmZpZ3VyZWQgdmlhIGRldmljZSB0cmVlIHByb3BlcnRpZXMgKGUuZy4sIHBoeS1tb2RlID0gXCYjMzQ7cHNnbWlpXCYjMzQ7KSBvciBoYXJkY29kZWQgaW4gc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVycyAobGlrZSB0aGUgUXVhbGNvbW0gcWNhODA3eCBQSFkgZHJpdmVyKS4gU2luY2UgaXQgcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgb3IgZGV2aWNlIHRyZWUgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgbm90IHByZXNlbnQgb3IgZHluYW1pY2FsbHkgaW5qZWN0YWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUpLCB0aGlzIGNvZGUgcGF0aCBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1ZWUwODhkNTM1ZTI3YmIxZTFlOTU1MTYyMTVhNmRjMjgyMjc0OGE5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgOCAwMzowNDo0NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jCmluZGV4IDE4ZDJlYWQ5N2FhNTQuLjk4M2ExYTNjZWUzNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYwpAQCAtMTA0MCw2ICYjNDM7MTA0MCw3IEBAIHN0YXRpYyBlbnVtIGluYmFuZF90eXBlIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpCiB7CiAJc3dpdGNoIChpbnRlcmZhY2UpIHsKIAljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSToKJiM0MzsJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOgogCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FTR01JSToKIAljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RVVNHTUlJOgogCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkV4YW1pbmluZyBhIFBIWUxJTksgUGF0Y2gqKgoKQWxyaWdodCwgYSBwYXRjaCBqdXN0IGNyb3NzZWQgbXkgZGVzayB0aGF0IHRvdWNoZXMgYGRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGludm9sdmUgYWRkaW5nIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYCB0byB0aGUgYHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlYCBzd2l0Y2ggc3RhdGVtZW50LiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBkaXZlIGludG8gdGhhdCBmdW5jdGlvbiBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgcGh5bGlua19nZXRfaW5iYW5kX3R5cGVgIHdvcmtzLiBXaGF0IGlzIGl0cyBjdXJyZW50IGltcGxlbWVudGF0aW9uPyBXaGF0IGFyZSB0aGUgZXhpc3RpbmcgaW50ZXJmYWNlIG1vZGVzIGl0IGhhbmRsZXMsIGFuZCBob3cgZG9lcyBgUFNHTUlJYCBmaXQgaW50byB0aGF0IGVjb3N5c3RlbT8gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGhvdyB0aGlzIG5ldyBhZGRpdGlvbiBtaWdodCBhZmZlY3QgdGhlIG92ZXJhbGwgbG9naWMsIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLCBhbmQgaWYgdGhlIGV4aXN0aW5nIGNvZGUgaGFuZGxlcyB0aGlzIG5ldyBtb2RlIGdyYWNlZnVsbHkuIE15IG1haW4gZm9jdXMgYXQgdGhpcyBwb2ludCBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBmdW5kYW1lbnRhbCBjaGFuZ2UgYW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9uIHRoZSBsaW5rIHRyYWluaW5nIGFuZCBuZWdvdGlhdGlvbiBwcm9jZXNzLCBnaXZlbiBteSBleHBlcmllbmNlIHdpdGggdGhpcyB0eXBlIG9mIFBIWSBkcml2ZXIgbW9kaWZpY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeWxpbmtfZ2V0X2luYmFuZF90eXBlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTEwMzM9ZW51bSBpbmJhbmRfdHlwZSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xMDM4LVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxMDM5OnN0YXRpYyBlbnVtIGluYmFuZF90eXBlIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwNDAte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTA5MD1zdGF0aWMgdm9pZCBwaHlsaW5rX3Bjc19uZWdfbW9kZShzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTA5OC1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTA5OTpcdHR5cGUgPSBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZShpbnRlcmZhY2UpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xMTAwLVx0aWYgKHR5cGUgPT0gSU5CQU5EX05PTkUpIHtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTM3NTY9c3RhdGljIGludCBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbChzdHJ1Y3QgcGh5bGluayAqcGwpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zODA2LVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozODA3Olx0aW5iYW5kX3R5cGUgPSBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZShpbnRlcmZhY2UpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zODA4LVx0aWYgKGluYmFuZF90eXBlID09IElOQkFORF9OT05FKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY4MgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW5uZXIgbW9ub2xvZ3VlOgoKKipRdWljayBBdWRpdCBvZiBgcGh5bGlua19nZXRfaW5iYW5kX3R5cGVgKioKCkFscmlnaHQsIGEgc21hbGwgY2hhbmdlIGluIGBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZWAuIEludGVyZXN0aW5nLiBMZXQmIzM5O3Mgbm90IGdldCBhaGVhZCBvZiBvdXJzZWx2ZXMsIHRob3VnaC4gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBleGFjdGx5IHRoaXMgZnVuY3Rpb24gZG9lcy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGh5bGluayBlY29zeXN0ZW0gYmVmb3JlIEkgZXZlbiBjb25zaWRlciB3aGF0IHRoaXMgbW9kaWZpY2F0aW9uICptZWFucyouIEdvdHRhIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGZ1bGwgY29udGV4dCBiZWZvcmUgZGl2aW5nIGludG8gdGhlIGRldGFpbHMuIFRpbWUgdG8gcHVsbCB1cCB0aGUgY29kZSBhbmQgam9nIG15IG1lbW9yeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDM5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwMzk6XHRzdGF0aWMgZW51bSBpbmJhbmRfdHlwZSBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZShwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuMTA0MDpcdHtcbjEwNDE6XHRcdHN3aXRjaCAoaW50ZXJmYWNlKSB7XG4xMDQyOlx0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSTpcbjEwNDM6XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcbjEwNDQ6XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FTR01JSTpcbjEwNDU6XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FVU0dNSUk6XG4xMDQ2Olx0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJOlxuMTA0NzpcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTBHX1FYR01JSTpcbjEwNDg6XHRcdFx0LyogVGhlc2UgcHJvdG9jb2xzIGFyZSBkZXNpZ25lZCBmb3IgdXNlIHdpdGggYSBQSFkgd2hpY2hcbjEwNDk6XHRcdFx0ICogY29tbXVuaWNhdGVzIGl0cyBuZWdvdGlhdGlvbiByZXN1bHQgYmFjayB0byB0aGUgTUFDIHZpYVxuMTA1MDpcdFx0XHQgKiBpbmJhbmQgY29tbXVuaWNhdGlvbi4gTm90ZTogdGhlcmUgZXhpc3QgUEhZcyB0aGF0IHJ1blxuMTA1MTpcdFx0XHQgKiB3aXRoIFNHTUlJIGJ1dCBkbyBub3Qgc2VuZCB0aGUgaW5iYW5kIGRhdGEuXG4xMDUyOlx0XHRcdCAqL1xuMTA1MzpcdFx0XHRyZXR1cm4gSU5CQU5EX0NJU0NPX1NHTUlJO1xuMTA1NDpcdFxuMTA1NTpcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYOlxuMTA1NjpcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMjUwMEJBU0VYOlxuMTA1NzpcdFx0XHQvKiAxMDAwYmFzZS1YIGlzIGRlc2lnbmVkIGZvciB1c2UgbWVkaWEtc2lkZSBmb3IgRmlicmVcbjEwNTg6XHRcdFx0ICogY29ubmVjdGlvbnMsIGFuZCB0aHVzIHRoZSBBdXRvbmVnIGJpdCBuZWVkcyB0byBiZVxuMTA1OTpcdFx0XHQgKiB0YWtlbiBpbnRvIGFjY291bnQuIFdlIGFsc28gZG8gdGhpcyBmb3IgMjUwMGJhc2UtWFxuMTA2MDpcdFx0XHQgKiBhcyB3ZWxsLCBidXQgZHJpdmVycyBtYXkgbm90IHN1cHBvcnQgdGhpcywgc28gbWF5XG4xMDYxOlx0XHRcdCAqIG5lZWQgdG8gb3ZlcnJpZGUgdGhpcy5cbjEwNjI6XHRcdFx0ICovXG4xMDYzOlx0XHRcdHJldHVybiBJTkJBTkRfQkFTRVg7XG4xMDY0Olx0XG4xMDY1Olx0XHRkZWZhdWx0OlxuMTA2NjpcdFx0XHRyZXR1cm4gSU5CQU5EX05PTkU7XG4xMDY3Olx0XHR9XG4xMDY4Olx0fVxuMTA2OTpcdFxuMTA3MDpcdC8qKlxuMTA3MTpcdCAqIHBoeWxpbmtfcGNzX25lZ19tb2RlKCkgLSBoZWxwZXIgdG8gZGV0ZXJtaW5lIFBDUyBpbmJhbmQgbW9kZVxuMTA3MjpcdCAqIEBwbDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXG4xMDczOlx0ICogQHBjczogYSBwb2ludGVyIHRvIFx1MDAyNnN0cnVjdCBwaHlsaW5rX3Bjc1xuMTA3NDpcdCAqIEBpbnRlcmZhY2U6IGludGVyZmFjZSBtb2RlIHRvIGJlIHVzZWRcbjEwNzU6XHQgKiBAYWR2ZXJ0aXNpbmc6IGFkZXJ0aXNlbWVudCBldGh0b29sIGxpbmsgbW9kZSBtYXNrXG4xMDc2Olx0ICpcbjEwNzc6XHQgKiBEZXRlcm1pbmVzIHRoZSBuZWdvdGlhdGlvbiBtb2RlIHRvIGJlIHVzZWQgYnkgdGhlIFBDUywgYW5kIHJldHVybnNcbjEwNzg6XHQgKiBvbmUgb2Y6XG4xMDc5Olx0ICpcbjEwODA6XHQgKiAtICVQSFlMSU5LX1BDU19ORUdfTk9ORTogaW50ZXJmYWNlIG1vZGUgZG9lcyBub3Qgc3VwcG9ydCBpbmJhbmRcbjEwODE6XHQgKiAtICVQSFlMSU5LX1BDU19ORUdfT1VUQkFORDogYW4gb3V0IG9mIGJhbmQgbW9kZSAoZS5nLiByZWFkaW5nIHRoZSBQSFkpXG4xMDgyOlx0ICogICB3aWxsIGJlIHVzZWQuXG4xMDgzOlx0ICogLSAlUEhZTElOS19QQ1NfTkVHX0lOQkFORF9ESVNBQkxFRDogaW5iYW5kIG1vZGUgc2VsZWN0ZWQgYnV0IGF1dG9uZWdcbjEwODQ6XHQgKiAgIGRpc2FibGVkXG4xMDg1Olx0ICogLSAlUEhZTElOS19QQ1NfTkVHX0lOQkFORF9FTkFCTEVEOiBpbmJhbmQgbW9kZSBzZWxlY3RlZCBhbmQgYXV0b25lZyBlbmFibGVkXG4xMDg2Olx0ICpcbjEwODc6XHQgKiBOb3RlOiB0aGlzIGlzIGZvciBjYXNlcyB3aGVyZSB0aGUgUENTIGl0c2VsZiBpcyBpbnZvbHZlZCBpbiBuZWdvdGlhdGlvblxuMTA4ODpcdCAqIChlLmcuIENsYXVzZSAzNywgU0dNSUkgYW5kIHNpbWlsYXIpIG5vdCBDbGF1c2UgNzMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc2NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTd2l0Y2ggU3RhdGVtZW50IENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyB0aW55IGNoYW5nZSBpbiBhIHN3aXRjaCBzdGF0ZW1lbnQsIGFuZCBteSBmaXJzdCB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoaXMgZXZlbiB3b3J0aCBmdXp6aW5nPyYjMzQ7IEl0JiMzOTtzIGEgc21hbGwgbW9kaWZpY2F0aW9uLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBgcGh5bGlua19nZXRfaW5iYW5kX3R5cGVgIHdoZW4gdGhlIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYCBjYXNlIGlzIGhpdC4gSW5zdGVhZCBvZiByZXR1cm5pbmcgYElOQkFORF9OT05FYCwgaXQgbm93IHJldHVybnMgYElOQkFORF9DSVNDT19TR01JSWAuCgpSaWdodCBhd2F5LCBJIHNlZSB0aGlzIGltcGFjdHMgYHBoeWxpbmtfcGNzX25lZ19tb2RlYCBhbmQgYHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsYC4gTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBjb2RlIHBhdGggaXMgZXZlbiByZWFjaGFibGUuIExldCYjMzk7cyBzZWUuLi4gYHBoeWxpbmtfcGNzX25lZ19tb2RlYCBpcyBjYWxsZWQgYnkgYHBoeWxpbmtfbWFjX2NvbmZpZ2AuIEFuZCBgcGh5bGlua19zZnBfY29uZmlnX29wdGljYWxgIGlzIHRyaWdnZXJlZCBieSBgcGh5bGlua19zZnBfbW9kdWxlX2luc2VydGAuCgpUaGUgYmlnIHF1ZXN0aW9uIG5vdyBpcywgZG9lcyBgcGh5bGlua2AgZXZlbiAqZ2V0KiB1c2VkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gSXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZSBvZiBuZXR3b3JraW5nLCBzbyBJJiMzOTtkIGltYWdpbmUgdGhlIGFuc3dlciBpcyB5ZXMsIGdpdmVuIGhvdyBtYW55IG5ldHdvcmsgZHJpdmVycyB1dGlsaXplIGl0LiBJIGtub3cgaXQmIzM5O3MgYSBjb21tb24gZGVwZW5kZW5jeS4KCkFscmlnaHQsIEkmIzM5O2xsIGRlbHZlIGZ1cnRoZXIgYnkgY2hlY2tpbmcgdGhlIGNhbGxlcnMgb2YgYHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlYCB0byBnYWluIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeWxpbmtfZ2V0X2luYmFuZF90eXBlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTEwMzM9ZW51bSBpbmJhbmRfdHlwZSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xMDM4LVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxMDM5OnN0YXRpYyBlbnVtIGluYmFuZF90eXBlIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwNDAte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTA5MD1zdGF0aWMgdm9pZCBwaHlsaW5rX3Bjc19uZWdfbW9kZShzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTA5OC1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTA5OTpcdHR5cGUgPSBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZShpbnRlcmZhY2UpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xMTAwLVx0aWYgKHR5cGUgPT0gSU5CQU5EX05PTkUpIHtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTM3NTY9c3RhdGljIGludCBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbChzdHJ1Y3QgcGh5bGluayAqcGwpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zODA2LVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozODA3Olx0aW5iYW5kX3R5cGUgPSBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZShpbnRlcmZhY2UpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zODA4LVx0aWYgKGluYmFuZF90eXBlID09IElOQkFORF9OT05FKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY0NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipOYXZpZ2F0aW5nIFBIWUxJTksgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBoZXJlLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBQSFlMSU5LIGRyaXZlci4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBzZWUgaWYgYW55IHNwZWNpZmljIGNvbmZpZ3MgbmVlZCB0byBiZSBkZWZpbmVkIGZvciB0aGUgZHJpdmVyIHRvIGJlIGluY2x1ZGVkLiBJJiMzOTttIGdvaW5nIHRvIGNoZWNrIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIGRyaXZlciBpdHNlbGYsIHN0YXJ0aW5nIHdpdGggYGRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNgLiBJIGtub3cgdGhhdCBmaWxlIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19QSFlMSU5LYCBpcyBzZXQuIE5vdyBJIG5lZWQgdG8gc2VlICp3aGVyZSogdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkLiBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLiBFaXRoZXIgYGRyaXZlcnMvbmV0L3BoeS9LY29uZmlnYCBvciBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgaXMgd2hlcmUgSSYjMzk7bGwgbG9vayBmb3IgYFBIWUxJTktgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZXMgcmV2ZWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEhZTElOSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo2OmNvbmZpZyBQSFlMSU5LXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy03LVx0dHJpc3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk4NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFBIWUxJTksgLSBBIFF1aWNrIEFzc2Vzc21lbnQqKgoKT2theSwgc28gYFBIWUxJTktgLi4uIGl0JiMzOTtzIG9uZSBvZiB0aG9zZSB0cmlzdGF0ZSBvcHRpb25zLCB0eXBpY2FsbHkgaGFuZGxlZCBieSBuZXR3b3JrIGRyaXZlcnMuIE15IGluaXRpYWwgdGhvdWdodCBpcywgaXMgdGhpcyBldmVuIHdvcnRoIHRoZSBmdXp6aW5nIGVmZm9ydD8gSXQgc291bmRzIGxpa2UgYSBwcmV0dHkgbWlub3IgY2hhbmdlLCBlc3NlbnRpYWxseSBqdXN0IGFkZGluZyBhIG5ldyBjYXNlIHRvIGEgc3dpdGNoIHN0YXRlbWVudC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBjaGFuZ2UgdG8gdGhlIGluYmFuZCB0eXBlIHNwZWNpZmljYWxseSBmb3IgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgLgoKQnV0IHdhaXQsIGRvZXMgdGhpcyBhY3R1YWxseSBoYXZlIGFueSAqZnVuY3Rpb25hbCogaW1wYWN0PyBBaCwgeWVzLCBpdCBkb2VzLiBUaGlzIHNlZW1zIHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgYHBoeWxpbmtfcGNzX25lZ19tb2RlYCBhbmQgYHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsYCB3aGVuIHRoYXQgc3BlY2lmaWMgaW50ZXJmYWNlIG1vZGUgaXMgaW4gcGxheS4gT2theSwgdGhhdCBtYWtlcyBpdCBtb3JlIGludGVyZXN0aW5nLgoKVGhlIG5leHQgcXVlc3Rpb24gaXMgYWx3YXlzIHJlYWNoYWJpbGl0eS4gQ2FuIEkgYWN0dWFsbHkgaGl0IHRoaXMgaW4gYSBRRU1VIGVudmlyb25tZW50PyBJZiBhIG5ldHdvcmsgZHJpdmVyIGlzIHVzaW5nIGBwaHlsaW5rYCAqYW5kKiBzdXBwb3J0cyBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAsIHRoZW4geWVzLCBpdCYjMzk7cyBwb3NzaWJsZS4gU28sIGFyZSB0aGVyZSBhbnkgZHJpdmVycyBpbiBteSBRRU1VIHNldHVwIHRoYXQgbWVldCBib3RoIG9mIHRob3NlIGNyaXRlcmlhPyBUaW1lIHRvIGdvIGh1bnRpbmcgZm9yIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgcmVhY2hhYmxlIGFuZCBpZiBpdCBpcywgdGhlbiB0aGUgZnV6emluZyBlZmZvcnQgaXMgbW9yZSBqdXN0aWZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM9MTU5PWludCBwaHlfaW50ZXJmYWNlX251bV9wb3J0cyhwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTIwMS1cdFx0cmV0dXJuIDQ7XG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYzoyMDI6XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy0yMDMtXHRcdHJldHVybiA1O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jPTI5ND11bnNpZ25lZCBsb25nIHBoeV9jYXBzX2Zyb21faW50ZXJmYWNlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMtMzEwLVx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYzozMTE6XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy0zMTItXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yMzg9c3RhdGljIGludCBwaHlsaW5rX2ludGVyZmFjZV9tYXhfc3BlZWQocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI1OS1cdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOlxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNjA6XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI2MS1cdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FTR01JSTpcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTc3ND1zdGF0aWMgaW50IHBoeWxpbmtfcGFyc2VfbW9kZShzdHJ1Y3QgcGh5bGluayAqcGwsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy04MDgtXHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzo4MDk6XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtODEwLVx0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0xMDM5PXN0YXRpYyBlbnVtIGluYmFuZF90eXBlIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xMDQyLVx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjEwNDM6XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwNDQtXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XG4tLVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jPTQ5MD1zdGF0aWMgaW50IHFjYTgwN3hfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYy01NDktXHRcdGlmICghc3RyY2FzZWNtcChwYWNrYWdlX21vZGVfbmFtZSxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYzo1NTA6XHRcdFx0XHRwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSSkpKVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jOjU1MTpcdFx0XHRwcml2LVx1MDAzZXBhY2thZ2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk7XG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNTUyLVx0XHRlbHNlIGlmICghc3RyY2FzZWNtcChwYWNrYWdlX21vZGVfbmFtZSxcbi0tXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM9NTYyPXN0YXRpYyBpbnQgcWNhODA3eF9waHlfcGFja2FnZV9jb25maWdfaW5pdF9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTU4NS1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM6NTg2Olx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTU4Ny1cdGRlZmF1bHQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MzgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIHRoZSBRQ0E4MDd4IFBIWSBEcml2ZXIgaW4gYSBRRU1VIEVudmlyb25tZW50KioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIHRoaXMgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgIGRlZmluZSwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGBxY2E4MDd4YCBQSFkgZHJpdmVyIGlzIHRoZSBwcmltYXJ5IHVzZXIuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgY2FuIEkgZXZlbiAqZ2V0KiB0byB0aGF0IGRyaXZlciBpbnNpZGUgUUVNVT8gSSBrbm93IGl0JiMzOTtzIGEgUXVhbGNvbW0gUEhZLCB3aGljaCBtZWFucyBpdCYjMzk7cyBwcm9iYWJseSBub3QgZ29pbmcgdG8gYmUgcGFydCBvZiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAuIFVubGVzcywgb2YgY291cnNlLCB0aGVyZSYjMzk7cyBleHBsaWNpdCBlbXVsYXRpb24gZm9yIGl0LCBvciB0aGUgUEhZIGZyYW1ld29yayBpdHNlbGYgb2ZmZXJzIGEgd2F5IHRvIGluc3RhbnRpYXRlIGFyYml0cmFyeSBQSFlzIHRocm91Z2ggbmV0bGluayBvciBzeXNmcy4gQnV0IHRoYXQmIzM5O3MgdXN1YWxseSBub3QgaG93IGl0IHdvcmtzOyBQSFlzIGFyZSB0eXBpY2FsbHkgcHJvYmVkIHZpYSB0aGUgTURJTyBidXMuCgpOb3csIHRoYXQgZ2V0cyBtZSB0aGlua2luZy4uLiBjYW4gSSAqaW5zdGFudGlhdGUqIGFuIE1ESU8gZGV2aWNlIG9yIGEgUEhZIGRldmljZSB2aWEgc3lzZnMgb3IgbmV0bGluaz8gSGlzdG9yaWNhbGx5LCBNRElPIGRldmljZXMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgZGV2aWNlIHRyZWUgb3IgQUNQSSBvciBhcmUgcmVnaXN0ZXJlZCBieSB0aGUgTUFDIGRyaXZlci4gSSByZW1lbWJlciBzZWVpbmcgZHJpdmVycyBsaWtlIGBtZGlvLWJjbS11bmltYWNgLCBgbWRpby1ncGlvYCwgYW5kIGBtZGlvLW1vY2t1cGAuCgpBaGEhIERpZG4mIzM5O3QgYHN5emthbGxlcmAgaGF2ZSBzb21lIHN1cHBvcnQgZm9yIGluamVjdGluZyBNRElPIGRldmljZXMgb3IgbWF5YmUgdXNpbmcgYG1kaW8tbW9ja3VwYD8gTGV0IG1lIGNoZWNrIGZvciBgbWRpby1tb2NrdXBgLiBUaGlzIGNvdWxkIGJlIGEgdmlhYmxlIHBhdGggdG8gdGVzdGluZyB0aGF0IGRyaXZlciB3aXRob3V0IGEgc3BlY2lhbGl6ZWQgaGFyZHdhcmUgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpby1tb2NrdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDAzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTttIGhpdHRpbmcgYSByb2FkYmxvY2suIEkgY2FuJiMzOTt0IHNlZW0gdG8gZ2V0IHRvIHRoZSBgbWRpby1tb2NrdXBgIGVudmlyb25tZW50IGRpcmVjdGx5LCBhbmQgdGhhdCYjMzk7cyBtYWtpbmcgdGhpbmdzIHRyaWNreS4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byB1c2UgdGhlIGBwaHlsaW5rYCBmdW5jdGlvbnMsIHNpbmNlIE1BQyBkcml2ZXJzIGNhbGwgdGhlbS4gQnV0IHJlYWNoaW5nIHRoZSBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAgbW9kZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGlzIHByb3ZpbmcgZGlmZmljdWx0LiBQZXJoYXBzIGl0JiMzOTtzIG5vdCB3b3J0aCB0aGUgZWZmb3J0IGZvciBmdXp6aW5nIGlmIGl0JiMzOTtzIHRvbyBjdW1iZXJzb21lIHRvIHNldCB1cC4KCkhvbGQgb24sIEkganVzdCByZW1lbWJlcmVkOiBgcGh5bGlua19nZXRfaW5iYW5kX3R5cGVgIGlzIGNhbGxlZCBmcm9tIGBwaHlsaW5rX3Bjc19uZWdfbW9kZWAgYW5kIGBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbGAuIE5vdyB3ZSYjMzk7cmUgZ2V0dGluZyBzb21ld2hlcmUhIGBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbGAgaXMgY2FsbGVkIHdoZW4gYW4gU0ZQIG1vZHVsZSBnZXRzIGluc2VydGVkLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCBjYW4gSSAqc2ltdWxhdGUqIFNGUCBtb2R1bGUgaW5zZXJ0aW9uPyBUaGF0IHNlZW1zIGxpa2UgYSBtb3JlIHBsYXVzaWJsZSBwYXRoLgoKVGhlcmUmIzM5O3MgdGhlIGBzZnBgIGRyaXZlciBpbiBgZHJpdmVycy9uZXQvcGh5L3NmcC5jYCwgYnV0IHRoYXQgc3RpbGwgbGlrZWx5IGRlbWFuZHMgZWl0aGVyIGhhcmR3YXJlIG9yIHNvbWUgdmVyeSBzcGVjaWZpYyBlbXVsYXRpb24uIExldCBtZSBiYWNrIHVwIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSAqdmlydHVhbCogZHJpdmVycyB0aGF0IHV0aWxpemUgYHBoeWxpbmtg4oCmIG1heWJlIEkgY2FuIGV4cGxvaXQgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5bGlua19jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jPTExMjg9c3RhdGljIGludCBhbHRlcmFfdHNlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jLTE0MTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmM6MTQxNjpcdHByaXYtXHUwMDNlcGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFx1MDAyNnByaXYtXHUwMDNlcGh5bGlua19jb25maWcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmMtMTQxNy1cdFx0XHRcdCAgICAgICBvZl9md25vZGVfaGFuZGxlKHByaXYtXHUwMDNlZGV2aWNlLVx1MDAzZW9mX25vZGUpLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmM9MTA3ND1zdGF0aWMgaW50IGFnNzF4eF9waHlsaW5rX3NldHVwKHN0cnVjdCBhZzcxeHggKmFnKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmMtMTEwOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmM6MTEwOTpcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcdTAwMjZhZy1cdTAwM2VwaHlsaW5rX2NvbmZpZywgYWctXHUwMDNlcGRldi1cdTAwM2VkZXYuZndub2RlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYy0xMTEwLVx0XHRcdFx0IGFnLVx1MDAzZXBoeV9pZl9tb2RlLCBcdTAwMjZhZzcxeHhfcGh5bGlua19tYWNfb3BzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTEwMjM9c3RhdGljIGludCBtYWNiX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTA4NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTA4NjpcdGJwLVx1MDAzZXBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcdTAwMjZicC1cdTAwM2VwaHlsaW5rX2NvbmZpZywgYnAtXHUwMDNlcGRldi1cdTAwM2VkZXYuZndub2RlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMDg3LVx0XHRcdFx0ICAgICBicC1cdTAwM2VwaHlfaW50ZXJmYWNlLCBcdTAwMjZtYWNiX3BoeWxpbmtfb3BzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYS9kcGFhX2V0aC5jPTIwMT1zdGF0aWMgaW50IGRwYWFfbmV0ZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEvZHBhYV9ldGguYy0yNzQtXHRtYWNfZGV2LVx1MDAzZXVwZGF0ZV9zcGVlZCA9IGRwYWFfZXRoX2Nncl9zZXRfc3BlZWQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYS9kcGFhX2V0aC5jOjI3NTpcdG1hY19kZXYtXHUwMDNlcGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFx1MDAyNm1hY19kZXYtXHUwMDNlcGh5bGlua19jb25maWcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYS9kcGFhX2V0aC5jLTI3Ni1cdFx0XHRcdFx0ICBkZXZfZndub2RlKG1hY19kZXYtXHUwMDNlZGV2KSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItbWFjLmM9NTYwPWludCBkcGFhMl9tYWNfY29ubmVjdChzdHJ1Y3QgZHBhYTJfbWFjICptYWMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLW1hYy5jLTYyNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1tYWMuYzo2MjU6XHRwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXHUwMDI2bWFjLVx1MDAzZXBoeWxpbmtfY29uZmlnLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLW1hYy5jLTYyNi1cdFx0XHRcdCBkcG1hY19ub2RlLCBtYWMtXHUwMDNlaWZfbW9kZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmM9OTcxPXN0YXRpYyBpbnQgZW5ldGM0X2xpbmtfaW5pdChzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfcGYuYy05ODktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmM6OTkwOlx0ZXJyID0gZW5ldGNfcGh5bGlua19jcmVhdGUocHJpdiwgbm9kZSwgXHUwMDI2ZW5ldGNfcGxfbWFjX29wcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMtOTkxLVx0aWYgKGVycikge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jLTk5Mi1cdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBjcmVhdGUgcGh5bGlua1xcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmM6OTkzOlx0XHRnb3RvIGVycl9waHlsaW5rX2NyZWF0ZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfcGYuYy05OTQtXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jLTk5Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfcGYuYzo5OTg6ZXJyX3BoeWxpbmtfY3JlYXRlOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jLTk5OS1cdGVuZXRjX21kaW9idXNfZGVzdHJveShwZik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmM9ODQ3PXN0YXRpYyBpbnQgZW5ldGNfcGZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmMtOTI5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmM6OTMwOlx0ZXJyID0gZW5ldGNfcGh5bGlua19jcmVhdGUocHJpdiwgbm9kZSwgXHUwMDI2ZW5ldGNfbWFjX3BoeWxpbmtfb3BzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5jLTkzMS1cdGlmIChlcnIpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuYzo5MzI6XHRcdGdvdG8gZXJyX3BoeWxpbmtfY3JlYXRlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmMtOTMzLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5jLTk0MS1cdGVuZXRjX3BoeWxpbmtfZGVzdHJveShwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5jOjk0MjplcnJfcGh5bGlua19jcmVhdGU6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuYy05NDMtXHRlbmV0Y19tZGlvYnVzX2Rlc3Ryb3kocGYpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYz0zMTI9RVhQT1JUX1NZTUJPTF9HUEwoZW5ldGNfbWRpb2J1c19kZXN0cm95KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy0zMTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmM6MzE0OmludCBlbmV0Y19waHlsaW5rX2NyZWF0ZShzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMzE1LVx0XHRcdCBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzICpvcHMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTMzNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYzozMzg6XHRwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXHUwMDI2cGYtXHUwMDNlcGh5bGlua19jb25maWcsIG9mX2Z3bm9kZV9oYW5kbGUobm9kZSksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMzM5LVx0XHRcdFx0IHBmLVx1MDAzZWlmX21vZGUsIG9wcyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTM0OC19XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmM6MzQ5OkVYUE9SVF9TWU1CT0xfR1BMKGVuZXRjX3BoeWxpbmtfY3JlYXRlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy0zNTAtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5oPTEyPXZvaWQgZW5ldGNfbWRpb2J1c19kZXN0cm95KHN0cnVjdCBlbmV0Y19wZiAqcGYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5oOjEzOmludCBlbmV0Y19waHlsaW5rX2NyZWF0ZShzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmgtMTQtXHRcdFx0IGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgKm9wcyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvZnNfZW5ldC1tYWluLmM9ODUzPXN0YXRpYyBpbnQgZnNfZW5ldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9mc19lbmV0LW1haW4uYy05MzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9mc19lbmV0LW1haW4uYzo5MzM6XHRwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXHUwMDI2ZmVwLVx1MDAzZXBoeWxpbmtfY29uZmlnLCBkZXZfZndub2RlKGZlcC1cdTAwM2VkZXYpLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMtOTM0LVx0XHRcdFx0IHBoeV9tb2RlLCBcdTAwMjZmc19lbmV0X3BoeWxpbmtfbWFjX29wcyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3VjY19nZXRoLmM9MzQxOT1zdGF0aWMgaW50IHVjY19nZXRoX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UqIG9mZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS91Y2NfZ2V0aC5jLTM1NzMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvdWNjX2dldGguYzozNTc0Olx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFx1MDAyNnVnZXRoLVx1MDAzZXBoeWxpbmtfY29uZmlnLCBkZXZfZndub2RlKFx1MDAyNmRldi1cdTAwM2VkZXYpLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3VjY19nZXRoLmMtMzU3NS1cdFx0XHRcdCBwaHlfaW50ZXJmYWNlLCBcdTAwMjZ1Z2V0aF9tYWNfb3BzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jPTU0ODA9c3RhdGljIGludCBtdm5ldGFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jLTU1OTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jOjU1OTk6XHRwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXHUwMDI2cHAtXHUwMDNlcGh5bGlua19jb25maWcsIHBkZXYtXHUwMDNlZGV2LmZ3bm9kZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmMtNTYwMC1cdFx0XHRcdCBwaHlfbW9kZSwgXHUwMDI2bXZuZXRhX3BoeWxpbmtfb3BzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uYz02ODQwPXN0YXRpYyBpbnQgbXZwcDJfcG9ydF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jLTcxNDctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uYzo3MTQ4Olx0XHRwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXHUwMDI2cG9ydC1cdTAwM2VwaHlsaW5rX2NvbmZpZywgcG9ydF9md25vZGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uYy03MTQ5LVx0XHRcdFx0XHQgcGh5X21vZGUsIFx1MDAyNm12cHAyX3BoeWxpbmtfb3BzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX21haW4uYz0zNzA9c3RhdGljIGludCBwcmVzdGVyYV9wb3J0X3NmcF9iaW5kKHN0cnVjdCBwcmVzdGVyYV9wb3J0ICpwb3J0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfbWFpbi5jLTQxNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfbWFpbi5jOjQxNzpcdFx0cGh5X2xpbmsgPSBwaHlsaW5rX2NyZWF0ZShcdTAwMjZwb3J0LVx1MDAzZXBoeV9jb25maWcsIGZ3bm9kZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfbWFpbi5jLTQxOC1cdFx0XHRcdFx0ICBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYz00ODIzPXN0YXRpYyBpbnQgbXRrX2FkZF9tYWMoc3RydWN0IG10a19ldGggKmV0aCwgc3RydWN0IGRldmljZV9ub2RlICpucClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTQ5NjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jOjQ5Njg6XHRwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXHUwMDI2bWFjLVx1MDAzZXBoeWxpbmtfY29uZmlnLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYy00OTY5LVx0XHRcdFx0IG9mX2Z3bm9kZV9oYW5kbGUobWFjLVx1MDAzZW9mX25vZGUpLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbmV0ZGV2LmM9NzQ2PXN0cnVjdCBuZXRfZGV2aWNlICpmYm5pY19uZXRkZXZfYWxsb2Moc3RydWN0IGZibmljX2RldiAqZmJkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbmV0ZGV2LmMtODM0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19uZXRkZXYuYzo4MzU6XHRpZiAoZmJuaWNfcGh5bGlua19jcmVhdGUobmV0ZGV2KSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19uZXRkZXYuYy04MzYtXHRcdGZyZWVfbmV0ZGV2KG5ldGRldik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19uZXRkZXYuaD0xMTE9aW50IGZibmljX3BoeWxpbmtfZ2V0X2ZlY3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5oLTExMi1cdFx0XHQgICAgICAgc3RydWN0IGV0aHRvb2xfZmVjcGFyYW0gKmZlY3BhcmFtKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbmV0ZGV2Lmg6MTEzOmludCBmYm5pY19waHlsaW5rX2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbmV0ZGV2LmgtMTE0LXZvaWQgZmJuaWNfcGh5bGlua19kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGh5bGluay5jPTE3Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyBmYm5pY19waHlsaW5rX21hY19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19waHlsaW5rLmMtMTg2LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19waHlsaW5rLmM6MTg3OiAqIGZibmljX3BoeWxpbmtfY3JlYXRlIC0gUGh5bGluayBkZXZpY2UgY3JlYXRpb25cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGh5bGluay5jLTE4OC0gKiBAbmV0ZGV2OiBOZXR3b3JrIERldmljZSBzdHJ1Y3QgdG8gYXR0YWNoIHBoeWxpbmsgZGV2aWNlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19waHlsaW5rLmMtMTk2LSAqKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGh5bGluay5jOjE5NzppbnQgZmJuaWNfcGh5bGlua19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGh5bGluay5jLTE5OC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19waHlsaW5rLmMtMjMxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19waHlsaW5rLmM6MjMyOlx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFx1MDAyNmZibi1cdTAwM2VwaHlsaW5rX2NvbmZpZywgTlVMTCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGh5bGluay5jLTIzMy1cdFx0XHRcdCBmYm5pY19waHlsaW5rX3NlbGVjdF9pbnRlcmZhY2UoZmJuLVx1MDAzZWF1aSksXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjc0M3hfbWFpbi5jPTMxNDI9c3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgbGFuNzQzeF9waHlsaW5rX21hY19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjc0M3hfbWFpbi5jLTMxNDktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmM6MzE1MDpzdGF0aWMgaW50IGxhbjc0M3hfcGh5bGlua19jcmVhdGUoc3RydWN0IGxhbjc0M3hfYWRhcHRlciAqYWRhcHRlcilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYy0zMTUxLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmMtMzE5Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYzozMTkzOlx0cGwgPSBwaHlsaW5rX2NyZWF0ZShcdTAwMjZhZGFwdGVyLVx1MDAzZXBoeWxpbmtfY29uZmlnLCBOVUxMLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjc0M3hfbWFpbi5jLTMxOTQtXHRcdFx0ICAgIGFkYXB0ZXItXHUwMDNlcGh5X2ludGVyZmFjZSwgXHUwMDI2bGFuNzQzeF9waHlsaW5rX21hY19vcHMpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYz0zNjY0PXN0YXRpYyBpbnQgbGFuNzQzeF9wY2lkZXZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjc0M3hfbWFpbi5jLTM3MjMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmM6MzcyNDpcdHJldCA9IGxhbjc0M3hfcGh5bGlua19jcmVhdGUoYWRhcHRlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmMtMzcyNS1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9sYW45NjZ4X21haW4uYz03OTE9c3RhdGljIGludCBsYW45NjZ4X3Byb2JlX3BvcnQoc3RydWN0IGxhbjk2NnggKmxhbjk2NngsIHUzMiBwLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW45NjZ4L2xhbjk2NnhfbWFpbi5jLTg1NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW45NjZ4L2xhbjk2NnhfbWFpbi5jOjg1NjpcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcdTAwMjZwb3J0LVx1MDAzZXBoeWxpbmtfY29uZmlnLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvbGFuOTY2eF9tYWluLmMtODU3LVx0XHRcdFx0IHBvcnRucCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L3NwYXJ4NV9tYWluLmM9MzEyPXN0YXRpYyBpbnQgc3Bhcng1X2NyZWF0ZV9wb3J0KHN0cnVjdCBzcGFyeDUgKnNwYXJ4NSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L3NwYXJ4NV9tYWluLmMtMzg4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfbWFpbi5jOjM4OTpcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcdTAwMjZzcHg1X3BvcnQtXHUwMDNlcGh5bGlua19jb25maWcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L3NwYXJ4NV9tYWluLmMtMzkwLVx0XHRcdFx0IG9mX2Z3bm9kZV9oYW5kbGUoY29uZmlnLVx1MDAzZW5vZGUpLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X25ldC5jPTE3NzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgb2NlbG90X3BoeWxpbmtfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X25ldC5jLTE3NzktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9uZXQuYzoxNzgwOnN0YXRpYyBpbnQgb2NlbG90X3BvcnRfcGh5bGlua19jcmVhdGUoc3RydWN0IG9jZWxvdCAqb2NlbG90LCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X25ldC5jLTE3ODEtXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBvcnRucClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9uZXQuYy0xODIwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfbmV0LmM6MTgyMTpcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcdTAwMjZwcml2LVx1MDAzZXBoeWxpbmtfY29uZmlnLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfbmV0LmMtMTgyMi1cdFx0XHRcdCBvZl9md25vZGVfaGFuZGxlKHBvcnRucCksXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfbmV0LmM9MTg0Mz1pbnQgb2NlbG90X3Byb2JlX3BvcnQoc3RydWN0IG9jZWxvdCAqb2NlbG90LCBpbnQgcG9ydCwgc3RydWN0IHJlZ21hcCAqdGFyZ2V0LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X25ldC5jLTE4NzktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9uZXQuYzoxODgwOlx0ZXJyID0gb2NlbG90X3BvcnRfcGh5bGlua19jcmVhdGUob2NlbG90LCBwb3J0LCBwb3J0bnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfbmV0LmMtMTg4MS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz0xMzcwPXN0YXRpYyBpbnQgc3RtbWFjX3BoeWxpbmtfc2V0dXAoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMTQ2MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6MTQ2MjpcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShjb25maWcsIGRldl9md25vZGUocHJpdi1cdTAwM2VkZXZpY2UpLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy0xNDYzLVx0XHRcdFx0IHByaXYtXHUwMDNlcGxhdC1cdTAwM2VwaHlfaW50ZXJmYWNlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS90bjQwX3BoeS5jPTQ1PWludCB0bjQwX3BoeV9yZWdpc3RlcihzdHJ1Y3QgdG40MF9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS90bjQwX3BoeS5jLTYyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL3RuNDBfcGh5LmM6NjM6XHRwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoY29uZmlnLCBOVUxMLCBQSFlfSU5URVJGQUNFX01PREVfWEFVSSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS90bjQwX3BoeS5jLTY0LVx0XHRcdFx0IFx1MDAyNnRuNDBfbWFjX29wcyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvYW02NS1jcHN3LW51c3MuYz0yNzU3PWFtNjVfY3Bzd19udXNzX2luaXRfcG9ydF9uZGV2KHN0cnVjdCBhbTY1X2Nwc3dfY29tbW9uICpjb21tb24sIHUzMiBwb3J0X2lkeClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9hbTY1LWNwc3ctbnVzcy5jLTI4NDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9hbTY1LWNwc3ctbnVzcy5jOjI4NDI6XHRwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXHUwMDI2cG9ydC1cdTAwM2VzbGF2ZS5waHlsaW5rX2NvbmZpZyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2FtNjUtY3Bzdy1udXNzLmMtMjg0My1cdFx0XHRcdCBvZl9md25vZGVfaGFuZGxlKHBvcnQtXHUwMDNlc2xhdmUucG9ydF9ucCksXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jPTEzMD1zdGF0aWMgaW50IG5nYmVfcGh5bGlua19pbml0KHN0cnVjdCB3eCAqd3gpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jLTE0OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYzoxNTA6XHRwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoY29uZmlnLCBOVUxMLCBwaHlfbW9kZSwgXHUwMDI2bmdiZV9tYWNfb3BzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYy0xNTEtXHRpZiAoSVNfRVJSKHBoeWxpbmspKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmM9NDgyPWludCB0eGdiZV9waHlsaW5rX2luaXRfYW1sKHN0cnVjdCB0eGdiZSAqdHhnYmUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYy01MTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jOjUxMzpcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShjb25maWcsIE5VTEwsIHBoeV9tb2RlLCBcdTAwMjZ0eGdiZV9tYWNfb3BzX2FtbCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jLTUxNC1cdGlmIChJU19FUlIocGh5bGluaykpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYz0yNjg9c3RhdGljIGludCB0eGdiZV9waHlsaW5rX2luaXQoc3RydWN0IHR4Z2JlICp0eGdiZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTI5Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MjkzOlx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKGNvbmZpZywgZndub2RlLCBwaHlfbW9kZSwgXHUwMDI2dHhnYmVfbWFjX29wcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTI5NC1cdGlmIChJU19FUlIocGh5bGluaykpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X21haW4uYz0yNzk1PXN0YXRpYyBpbnQgYXhpZW5ldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF9tYWluLmMtMzExNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF9tYWluLmM6MzExODpcdGxwLVx1MDAzZXBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcdTAwMjZscC1cdTAwM2VwaHlsaW5rX2NvbmZpZywgcGRldi1cdTAwM2VkZXYuZndub2RlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X21haW4uYy0zMTE5LVx0XHRcdFx0ICAgICBscC1cdTAwM2VwaHlfbW9kZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfbWFpbi5jLTMxMjItXHRcdHJldCA9IFBUUl9FUlIobHAtXHUwMDNlcGh5bGluayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfbWFpbi5jOjMxMjM6XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O3BoeWxpbmtfY3JlYXRlIGVycm9yICglaSlcXG5cJiMzNDssIHJldCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfbWFpbi5jLTMxMjQtXHRcdGdvdG8gY2xlYW51cF9tZGlvO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9NTE2PXN0YXRpYyBpbnQgcGh5bGlua192YWxpZGF0ZV9tYWNfYW5kX3BjcyhzdHJ1Y3QgcGh5bGluayAqcGwsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy01MzEtXHRpZiAocGNzKSB7XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjUzMjpcdFx0LyogVGhlIFBDUywgaWYgcHJlc2VudCwgbXVzdCBiZSBzZXR1cCBiZWZvcmUgcGh5bGlua19jcmVhdGUoKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy01MzMtXHRcdCAqIGhhcyBiZWVuIGNhbGxlZC4gSWYgdGhlIG9wcyBpcyBub3QgaW5pdGlhbGlzZWQsIHByaW50IGFuXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0xMDM5PXN0YXRpYyBlbnVtIGluYmFuZF90eXBlIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xMDcxLSAqIHBoeWxpbmtfcGNzX25lZ19tb2RlKCkgLSBoZWxwZXIgdG8gZGV0ZXJtaW5lIFBDUyBpbmJhbmQgbW9kZVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxMDcyOiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwNzMtICogQHBjczogYSBwb2ludGVyIHRvIFx1MDAyNnN0cnVjdCBwaHlsaW5rX3Bjc1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTc2OT1zdGF0aWMgaW50IHBoeWxpbmtfcmVnaXN0ZXJfc2ZwKHN0cnVjdCBwaHlsaW5rICpwbCxcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE3OTMtICogcGh5bGlua19zZXRfZml4ZWRfbGluaygpIC0gc2V0IHRoZSBmaXhlZCBsaW5rXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE3OTQ6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTc5NS0gKiBAc3RhdGU6IGEgcG9pbnRlciB0byBhIHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUuXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0xODMxPUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfc2V0X2ZpeGVkX2xpbmspO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTgzMy0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTgzNDogKiBwaHlsaW5rX2NyZWF0ZSgpIC0gY3JlYXRlIGEgcGh5bGluayBpbnN0YW5jZVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xODM1LSAqIEBjb25maWc6IGEgcG9pbnRlciB0byB0aGUgdGFyZ2V0IFx1MDAyNnN0cnVjdCBwaHlsaW5rX2NvbmZpZ1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTg0OC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTg0OTpzdHJ1Y3QgcGh5bGluayAqcGh5bGlua19jcmVhdGUoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE4NTAtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xOTM2LX1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTkzNzpFWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2NyZWF0ZSk7XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE5MzgtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xOTQwLSAqIHBoeWxpbmtfZGVzdHJveSgpIC0gY2xlYW51cCBhbmQgZGVzdHJveSB0aGUgcGh5bGluayBpbnN0YW5jZVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxOTQxOiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE5NDItICpcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTE5NTc9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19kZXN0cm95KTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE5NjAtICogcGh5bGlua19leHBlY3RzX3BoeSgpIC0gRGV0ZXJtaW5lIGlmIHBoeWxpbmsgZXhwZWN0cyBhIHBoeSB0byBiZSBhdHRhY2hlZFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxOTYxOiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE5NjItICpcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTIyMDY9c3RhdGljIGludCBwaHlsaW5rX2F0dGFjaF9waHkoc3RydWN0IHBoeWxpbmsgKnBsLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjIyNi0gKiBwaHlsaW5rX2Nvbm5lY3RfcGh5KCkgLSBjb25uZWN0IGEgUEhZIHRvIHRoZSBwaHlsaW5rIGluc3RhbmNlXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjIyMjc6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjIyOC0gKiBAcGh5OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZS5cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTIyNjA9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19jb25uZWN0X3BoeSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMjYzLSAqIHBoeWxpbmtfb2ZfcGh5X2Nvbm5lY3QoKSAtIGNvbm5lY3QgdGhlIFBIWSBzcGVjaWZpZWQgaW4gdGhlIERUIG1vZGUuXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjIyNjQ6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjI2NS0gKiBAZG46IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBkZXZpY2Vfbm9kZS5cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTIyNzk9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19vZl9waHlfY29ubmVjdCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMjgyLSAqIHBoeWxpbmtfZndub2RlX3BoeV9jb25uZWN0KCkgLSBjb25uZWN0IHRoZSBQSFkgc3BlY2lmaWVkIGluIHRoZSBmd25vZGUuXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjIyODM6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjI4NC0gKiBAZndub2RlOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgZndub2RlX2hhbmRsZS5cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTIzMzg9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19md25vZGVfcGh5X2Nvbm5lY3QpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjM0Mi0gKiAgIGluc3RhbmNlLlxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyMzQzOiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIzNDQtICpcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTIzNzM9c3RhdGljIHZvaWQgcGh5bGlua19saW5rX2NoYW5nZWQoc3RydWN0IHBoeWxpbmsgKnBsLCBib29sIHVwLCBjb25zdCBjaGFyICp3aGF0KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjM4Mi0gKiBwaHlsaW5rX21hY19jaGFuZ2UoKSAtIG5vdGlmeSBwaHlsaW5rIG9mIGEgY2hhbmdlIGluIE1BQyBzdGF0ZVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyMzgzOiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIzODQtICogQHVwOiBpbmRpY2F0ZXMgd2hldGhlciB0aGUgbGluayBpcyBjdXJyZW50bHkgdXAuXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yNDE1PXN0YXRpYyBpcnFyZXR1cm5fdCBwaHlsaW5rX2xpbmtfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjQyNS0gKiBwaHlsaW5rX3N0YXJ0KCkgLSBzdGFydCBhIHBoeWxpbmsgaW5zdGFuY2VcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjQyNjogKiBAcGw6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNDI3LSAqXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yNDg4PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfc3RhcnQpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjQ5MS0gKiBwaHlsaW5rX3N0b3AoKSAtIHN0b3AgYSBwaHlsaW5rIGluc3RhbmNlXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI0OTI6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjQ5My0gKlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjUyMj1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3N0b3ApO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjUyNS0gKiBwaHlsaW5rX3J4X2Nsa19zdG9wX2Jsb2NrKCkgLSBibG9jayBQSFkgYWJpbGl0eSB0byBzdG9wIHJlY2VpdmUgY2xvY2sgaW4gTFBJXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI1MjY6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjUyNy0gKlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjU1MT1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3J4X2Nsa19zdG9wX2Jsb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI1NTQtICogcGh5bGlua19yeF9jbGtfc3RvcF91bmJsb2NrKCkgLSB1bmJsb2NrIFBIWSBhYmlsaXR5IHRvIHN0b3AgcmVjZWl2ZSBjbG9ja1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNTU1OiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI1NTYtICpcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI1OTM9c3RhdGljIGJvb2wgcGh5bGlua19waHlfcG1fc3BlZWRfY3RybChzdHJ1Y3QgcGh5bGluayAqcGwpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNjAwLSAqIHBoeWxpbmtfc3VzcGVuZCgpIC0gaGFuZGxlIGEgbmV0d29yayBkZXZpY2Ugc3VzcGVuZCBldmVudFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNjAxOiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI2MDItICogQG1hY193b2w6IHRydWUgaWYgdGhlIE1BQyBuZWVkcyB0byByZWNlaXZlIHBhY2tldHMgZm9yIFdha2Utb24tTGFuXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yNjUyPUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfc3VzcGVuZCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNjU1LSAqIHBoeWxpbmtfcHJlcGFyZV9yZXN1bWUoKSAtIHByZXBhcmUgdG8gcmVzdW1lIGEgbmV0d29yayBkZXZpY2VcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjY1NjogKiBAcGw6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNjU3LSAqXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yNjc3PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfcHJlcGFyZV9yZXN1bWUpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjY4MC0gKiBwaHlsaW5rX3Jlc3VtZSgpIC0gaGFuZGxlIGEgbmV0d29yayBkZXZpY2UgcmVzdW1lIGV2ZW50XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI2ODE6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjY4Mi0gKlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjcyMD1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3Jlc3VtZSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNzIzLSAqIHBoeWxpbmtfZXRodG9vbF9nZXRfd29sKCkgLSBnZXQgdGhlIHdha2Ugb24gbGFuIHBhcmFtZXRlcnMgZm9yIHRoZSBQSFlcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjcyNDogKiBAcGw6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNzI1LSAqIEB3b2w6IGEgcG9pbnRlciB0byBcdTAwMjZzdHJ1Y3QgZXRodG9vbF93b2xpbmZvIHRvIGhvbGQgdGhlIHJlYWQgcGFyYW1ldGVyc1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9Mjc1Nz1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2V0aHRvb2xfZ2V0X3dvbCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNzYwLSAqIHBoeWxpbmtfZXRodG9vbF9zZXRfd29sKCkgLSBzZXQgd2FrZSBvbiBsYW4gcGFyYW1ldGVyc1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNzYxOiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI3NjItICogQHdvbDogYSBwb2ludGVyIHRvIFx1MDAyNnN0cnVjdCBldGh0b29sX3dvbGluZm8gZm9yIHRoZSBkZXNpcmVkIHBhcmFtZXRlcnNcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI4ODk9c3RhdGljIHZvaWQgcGh5bGlua19nZXRfa3NldHRpbmdzKGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjkwNC0gKiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX2dldCgpIC0gZ2V0IHRoZSBjdXJyZW50IGxpbmsgc2V0dGluZ3NcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjkwNTogKiBAcGw6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yOTA2LSAqIEBrc2V0OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyB0byBob2xkIGxpbmsgc2V0dGluZ3Ncbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI5NTc9c3RhdGljIGJvb2wgcGh5bGlua192YWxpZGF0ZV9wY3NfaW5iYW5kX2F1dG9uZWcoc3RydWN0IHBoeWxpbmsgKnBsLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjk3OC0gKiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldCgpIC0gc2V0IHRoZSBsaW5rIHNldHRpbmdzXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI5Nzk6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjk4MC0gKiBAa3NldDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgZm9yIHRoZSBkZXNpcmVkIG1vZGVzXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMTQ1PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMxNDgtICogcGh5bGlua19ldGh0b29sX253YXlfcmVzZXQoKSAtIHJlc3RhcnQgbmVnb3RpYXRpb25cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzE0OTogKiBAcGw6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMTUwLSAqXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMTcwPUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZXRodG9vbF9ud2F5X3Jlc2V0KTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMxNzMtICogcGh5bGlua19ldGh0b29sX2dldF9wYXVzZXBhcmFtKCkgLSBnZXQgdGhlIGN1cnJlbnQgcGF1c2UgcGFyYW1ldGVyc1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozMTc0OiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMxNzUtICogQHBhdXNlOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMTg2PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZXRodG9vbF9nZXRfcGF1c2VwYXJhbSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMTg5LSAqIHBoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbSgpIC0gc2V0IHRoZSBjdXJyZW50IHBhdXNlIHBhcmFtZXRlcnNcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzE5MDogKiBAcGw6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMTkxLSAqIEBwYXVzZTogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzI3Mj1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0pO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzI3Ni0gKiAgIGNvdW50ZXJcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzI3NzogKiBAcGw6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKS5cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzI3OC0gKlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzI5NT1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2dldF9lZWVfZXJyKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMyOTgtICogcGh5bGlua19ldGh0b29sX2dldF9lZWUoKSAtIHJlYWQgdGhlIGVuZXJneSBlZmZpY2llbnQgZXRoZXJuZXQgcGFyYW1ldGVyc1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozMjk5OiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMzMDAtICogQGVlZTogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IGV0aHRvb2xfa2VlZSBmb3IgdGhlIHJlYWQgcGFyYW1ldGVyc1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzMyMT1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2V0aHRvb2xfZ2V0X2VlZSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzI0LSAqIHBoeWxpbmtfZXRodG9vbF9zZXRfZWVlKCkgLSBzZXQgdGhlIGVuZXJneSBlZmZpY2llbnQgZXRoZXJuZXQgcGFyYW1ldGVyc1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozMzI1OiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMzMjYtICogQGVlZTogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IGV0aHRvb2xfa2VlZSBmb3IgdGhlIGRlc2lyZWQgcGFyYW1ldGVyc1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzQ5NT1zdGF0aWMgaW50IHBoeWxpbmtfbWlpX3dyaXRlKHN0cnVjdCBwaHlsaW5rICpwbCwgdW5zaWduZWQgaW50IHBoeV9pZCxcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTM1MTMtICogcGh5bGlua19taWlfaW9jdGwoKSAtIGdlbmVyaWMgbWlpIGlvY3RsIGludGVyZmFjZVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozNTE0OiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTM1MTUtICogQGlmcjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IGlmcmVxIGZvciBzb2NrZXQgaW9jdGxzXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zNTg4PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfbWlpX2lvY3RsKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTM1OTItICogICBsaW5rIHBhcnRuZXJzXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjM1OTM6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzU5NC0gKiBAc3luYzogcGVyZm9ybSBhY3Rpb24gc3luY2hyb25vdXNseVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzYxMz1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3NwZWVkX2Rvd24pO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzYxNy0gKiAgIHBoeWxpbmtfc3BlZWRfZG93bigpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjM2MTg6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzYxOS0gKlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9NDM3MD1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX21paV9jNDVfcGNzX2dldF9zdGF0ZSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00Mzc0LSAqXHRcdFx0XHQgd2hpY2ggbG9zZXMgc3RhdGVcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6NDM3NTogKiBAcGw6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy00Mzc2LSAqXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz00MzkxPUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfcmVwbGF5X2xpbmtfYmVnaW4pO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDM5NS0gKlx0XHRcdCAgICAgICB3aGljaCBsb3N0IHN0YXRlXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjQzOTY6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDM5Ny0gKlxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz03OTk9c3RhdGljIGludCBheDg4NzcyX3BoeWxpbmtfc2V0dXAoc3RydWN0IHVzYm5ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy04MTktXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6ODIwOlx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFx1MDAyNnByaXYtXHUwMDNlcGh5bGlua19jb25maWcsIGRldi1cdTAwM2VuZXQtXHUwMDNlZGV2LmZ3bm9kZSxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy04MjEtXHRcdFx0XHQgcGh5X2lmX21vZGUsIFx1MDAyNmF4ODg3NzJfcGh5bGlua19tYWNfb3BzKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTI3OTk9c3RhdGljIGludCBsYW43OHh4X3BoeWxpbmtfc2V0dXAoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yODM4LVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyODM5Olx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKHBjLCBkZXYtXHUwMDNlbmV0LVx1MDAzZWRldi5md25vZGUsXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTI4NDAtXHRcdFx0XHQgZGV2LVx1MDAzZWludGVyZmFjZSwgXHUwMDI2bGFuNzh4eF9waHlsaW5rX21hY19vcHMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODQzMwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUkgU3VwcG9ydCoqCgpPa2F5LCBzbyBgcGh5bGlua19jcmVhdGVgIGlzIGEgcHJldHR5IHdpZGVseSB1c2VkIGZ1bmN0aW9uLCBjYWxsZWQgYnkgYSBidW5jaCBvZiBuZXR3b3JrIGRyaXZlcnM6IGBsYW43OHh4YCwgYGFzaXhfZGV2aWNlc2AsIGBzdG1tYWNgLCB0aGUgd2hvbGUgbGlzdC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBjYW4gKmFueSogb2YgdGhlc2UgZHJpdmVycyBhY3R1YWxseSBjb25maWd1cmUgYSBQSFkgdXNpbmcgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgPyBUaGF0JiMzOTtzIHdoYXQgSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dC4KClJpZ2h0LCBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAgaXMgZWl0aGVyIGFuIGFyZ3VtZW50IHRvIGBwaHlsaW5rX2NyZWF0ZWAgKm9yKiBpdCYjMzk7cyBzZXQgbGF0ZXIgdmlhIGBwaHlsaW5rX3NldF9wb3J0X21vZGVzYC4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSBpZiB0aGVzZSBkcml2ZXJzIGV2ZW4gKnN1cHBvcnQqIHRoYXQgbW9kZS4gSSBrbm93IEkgYWxyZWFkeSBncmVwcGVkIHRoZSBgZHJpdmVycy9uZXQvYCBkaXJlY3RvcnkgZm9yIGl0LiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBncmVwIHJlc3VsdHMgd2VyZSBwcmV0dHkgdW5pbnRlcmVzdGluZzsgYHBoeS1jb3JlLmNgLCBgcGh5X2NhcHMuY2AsIGFuZCBgcGh5bGluay5jYCBhbmQgYHFjYTgwN3guY2AuIFNvIHRoZSBkcml2ZXIgc2VlbXMgbGlrZSBpdCBpc24mIzM5O3QgZGlyZWN0bHkgc3VwcG9ydGluZyB0aGlzLgoKSWYgbm8gTUFDIGRyaXZlciBleHBsaWNpdGx5IHN1cHBvcnRzIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYCwgaG93IGNvdWxkIGl0IHBvc3NpYmx5IGJlIHJlYWNoZWQ/IFRoYXQmIzM5O3MgdGhlIHJlYWwgcHV6emxlLiBBaGEsIG1heWJlIGl0JiMzOTtzIHBhcnNlZCBmcm9tIHRoZSBkZXZpY2UgdHJlZT8gSW4gYHBoeWxpbmtfcGFyc2VfbW9kZWAsIGl0IGxvb2tzIGxpa2UgYHBoeS1tb2RlYCBpcyBwYXJzZWQgZnJvbSB0aGUgZGV2aWNlIHRyZWUsIHRoYXQgbWlnaHQgZG8gdGhlIHRyaWNrLiBJZiBJIGNvdWxkIGluamVjdCBhIGRldmljZSB0cmVlIG5vZGUgd2l0aCBgcGh5LW1vZGUgPSAmIzM0O3BzZ21paSYjMzQ7YCwgdGhlbiBgcGh5bGlua19jcmVhdGVgICptaWdodCogcGFyc2UgaXQgYW5kIHNldCBgcGwtJmd0O2xpbmtfY29uZmlnLmludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgLgoKTm93LCB3YWl0IGEgbWludXRlLCBgcGh5bGlua19jcmVhdGVgIHRha2VzIGFuIGBwaHlfaW50ZXJmYWNlX3QgaWZhY2VgIGFyZ3VtZW50LiBJZiB0aGF0IGFyZ3VtZW50IGlzIGBQSFlfSU5URVJGQUNFX01PREVfTkFgLCB0aGVuIGl0IG1pZ2h0IHBhcnNlIGl0IGZyb20gdGhlIGZ3bm9kZS4gT2theSwgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gbG9vayBjbG9zZXIuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBjb2RlIGFyb3VuZCBgcGh5bGlua19jcmVhdGVgIGZvciBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODQ5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NDk6XHRzdHJ1Y3QgcGh5bGluayAqcGh5bGlua19jcmVhdGUoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4xODUwOlx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsXG4xODUxOlx0XHRcdFx0ICAgICAgIHBoeV9pbnRlcmZhY2VfdCBpZmFjZSxcbjE4NTI6XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyAqbWFjX29wcylcbjE4NTM6XHR7XG4xODU0Olx0XHRzdHJ1Y3QgcGh5bGluayAqcGw7XG4xODU1Olx0XHRpbnQgcmV0O1xuMTg1NjpcdFxuMTg1NzpcdFx0LyogVmFsaWRhdGUgdGhlIHN1cHBsaWVkIGNvbmZpZ3VyYXRpb24gKi9cbjE4NTg6XHRcdGlmIChwaHlfaW50ZXJmYWNlX2VtcHR5KGNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcykpIHtcbjE4NTk6XHRcdFx0ZGV2X2Vycihjb25maWctXHUwMDNlZGV2LFxuMTg2MDpcdFx0XHRcdFwmIzM0O3BoeWxpbms6IGVycm9yOiBlbXB0eSBzdXBwb3J0ZWRfaW50ZXJmYWNlc1xcblwmIzM0Oyk7XG4xODYxOlx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuMTg2MjpcdFx0fVxuMTg2MzpcdFxuMTg2NDpcdFx0cGwgPSBremFsbG9jX29iaigqcGwpO1xuMTg2NTpcdFx0aWYgKCFwbClcbjE4NjY6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4xODY3Olx0XG4xODY4Olx0XHRtdXRleF9pbml0KFx1MDAyNnBsLVx1MDAzZXBoeWRldl9tdXRleCk7XG4xODY5Olx0XHRtdXRleF9pbml0KFx1MDAyNnBsLVx1MDAzZXN0YXRlX211dGV4KTtcbjE4NzA6XHRcdElOSVRfV09SSyhcdTAwMjZwbC1cdTAwM2VyZXNvbHZlLCBwaHlsaW5rX3Jlc29sdmUpO1xuMTg3MTpcdFxuMTg3MjpcdFx0cGwtXHUwMDNlY29uZmlnID0gY29uZmlnO1xuMTg3MzpcdFx0aWYgKGNvbmZpZy1cdTAwM2V0eXBlID09IFBIWUxJTktfTkVUREVWKSB7XG4xODc0Olx0XHRcdHBsLVx1MDAzZW5ldGRldiA9IHRvX25ldF9kZXYoY29uZmlnLVx1MDAzZWRldik7XG4xODc1Olx0XHRcdG5ldGlmX2NhcnJpZXJfb2ZmKHBsLVx1MDAzZW5ldGRldik7XG4xODc2Olx0XHR9IGVsc2UgaWYgKGNvbmZpZy1cdTAwM2V0eXBlID09IFBIWUxJTktfREVWKSB7XG4xODc3Olx0XHRcdHBsLVx1MDAzZWRldiA9IGNvbmZpZy1cdTAwM2VkZXY7XG4xODc4Olx0XHR9IGVsc2Uge1xuMTg3OTpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuMTg4MDpcdFx0XHRnb3RvIGZyZWVfcGw7XG4xODgxOlx0XHR9XG4xODgyOlx0XG4xODgzOlx0XHRwbC1cdTAwM2VtYWNfc3VwcG9ydHNfZWVlX29wcyA9IHBoeWxpbmtfbWFjX2ltcGxlbWVudHNfbHBpKG1hY19vcHMpO1xuMTg4NDpcdFx0cGwtXHUwMDNlbWFjX3N1cHBvcnRzX2VlZSA9IHBsLVx1MDAzZW1hY19zdXBwb3J0c19lZWVfb3BzIFx1MDAyNlx1MDAyNlxuMTg4NTpcdFx0XHRcdCAgICAgICBwbC1cdTAwM2Vjb25maWctXHUwMDNlbHBpX2NhcGFiaWxpdGllcyBcdTAwMjZcdTAwMjZcbjE4ODY6XHRcdFx0XHQgICAgICAgIXBoeV9pbnRlcmZhY2VfZW1wdHkocGwtXHUwMDNlY29uZmlnLVx1MDAzZWxwaV9pbnRlcmZhY2VzKTtcbjE4ODc6XHRcbjE4ODg6XHRcdC8qIFNldCB0aGUgZGVmYXVsdCBFRUUgY29uZmlndXJhdGlvbiAqL1xuMTg4OTpcdFx0cGwtXHUwMDNlZWVlX2NmZy5lZWVfZW5hYmxlZCA9IHBsLVx1MDAzZWNvbmZpZy1cdTAwM2VlZWVfZW5hYmxlZF9kZWZhdWx0O1xuMTg5MDpcdFx0cGwtXHUwMDNlZWVlX2NmZy50eF9scGlfZW5hYmxlZCA9IHBsLVx1MDAzZWVlZV9jZmcuZWVlX2VuYWJsZWQ7XG4xODkxOlx0XHRwbC1cdTAwM2VlZWVfY2ZnLnR4X2xwaV90aW1lciA9IHBsLVx1MDAzZWNvbmZpZy1cdTAwM2VscGlfdGltZXJfZGVmYXVsdDtcbjE4OTI6XHRcbjE4OTM6XHRcdHBsLVx1MDAzZXBoeV9zdGF0ZS5pbnRlcmZhY2UgPSBpZmFjZTtcbjE4OTQ6XHRcdHBsLVx1MDAzZWxpbmtfaW50ZXJmYWNlID0gaWZhY2U7XG4xODk1Olx0XHRpZiAoaWZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX01PQ0EpXG4xODk2Olx0XHRcdHBsLVx1MDAzZWxpbmtfcG9ydCA9IFBPUlRfQk5DO1xuMTg5NzpcdFx0ZWxzZVxuMTg5ODpcdFx0XHRwbC1cdTAwM2VsaW5rX3BvcnQgPSBQT1JUX01JSTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxMzUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBoeUxpbmsgQ3JlYXRpb24gUHJvY2VzcyoqCgpPa2F5LCBzbyBgcGh5bGlua19jcmVhdGVgIGlzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgYSBQaHlMaW5rIHN0cnVjdHVyZS4gSSBzZWUgaXQgdGFrZXMgYW4gYGlmYWNlYCBhcmd1bWVudCBhbmQgaW1tZWRpYXRlbHkgc2V0cyB0aGUgYHBsLSZndDtwaHlfc3RhdGUuaW50ZXJmYWNlYCBtZW1iZXIgdG8gdGhhdCB2YWx1ZS4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQ7IGl0JiMzOTtzIGFzc29jaWF0aW5nIHRoZSBQaHlMaW5rIHdpdGggYSBzcGVjaWZpYyBuZXR3b3JrIGludGVyZmFjZS4gTm93LCB0aGUgbmV4dCBzdGVwIGluIHRoZSBmbG93IGlzIGNhbGxpbmcgYHBoeWxpbmtfcGFyc2VfbW9kZWAgd2l0aCB0aGUgUGh5TGluayBzdHJ1Y3R1cmUgYW5kIGEgZmlybXdhcmUgbm9kZSAoYGZ3bm9kZWApLiBUaGlzIGBwaHlsaW5rX3BhcnNlX21vZGVgIGNhbGwgaXMgY3JpdGljYWwgYmVjYXVzZSB0aGlzIGlzIHdoZXJlIHRoZSBsaW5rJiMzOTtzIG9wZXJhdGluZyBwYXJhbWV0ZXJzIG11c3QgYmUgZGV0ZXJtaW5lZC4gSXTigJlzIHdoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlIG5leHQgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhlIFBoeUxpbmsgZ2V0cyBjb25maWd1cmVkIGFmdGVyIGNyZWF0aW9uLiBMZXTigJlzIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoYXQgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc3NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzc0Olx0c3RhdGljIGludCBwaHlsaW5rX3BhcnNlX21vZGUoc3RydWN0IHBoeWxpbmsgKnBsLFxuIDc3NTpcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXG4gNzc2Olx0e1xuIDc3NzpcdFx0c3RydWN0IGZ3bm9kZV9oYW5kbGUgKmRuO1xuIDc3ODpcdFx0Y29uc3QgY2hhciAqbWFuYWdlZDtcbiA3Nzk6XHRcdHVuc2lnbmVkIGxvbmcgY2FwcztcbiA3ODA6XHRcbiA3ODE6XHRcdGlmIChwbC1cdTAwM2Vjb25maWctXHUwMDNlZGVmYXVsdF9hbl9pbmJhbmQpXG4gNzgyOlx0XHRcdHBsLVx1MDAzZWNmZ19saW5rX2FuX21vZGUgPSBNTE9fQU5fSU5CQU5EO1xuIDc4MzpcdFxuIDc4NDpcdFx0ZG4gPSBmd25vZGVfZ2V0X25hbWVkX2NoaWxkX25vZGUoZndub2RlLCBcJiMzNDtmaXhlZC1saW5rXCYjMzQ7KTtcbiA3ODU6XHRcdGlmIChkbiB8fCBmd25vZGVfcHJvcGVydHlfcHJlc2VudChmd25vZGUsIFwmIzM0O2ZpeGVkLWxpbmtcJiMzNDspKVxuIDc4NjpcdFx0XHRwbC1cdTAwM2VjZmdfbGlua19hbl9tb2RlID0gTUxPX0FOX0ZJWEVEO1xuIDc4NzpcdFx0Zndub2RlX2hhbmRsZV9wdXQoZG4pO1xuIDc4ODpcdFxuIDc4OTpcdFx0aWYgKChmd25vZGVfcHJvcGVydHlfcmVhZF9zdHJpbmcoZndub2RlLCBcJiMzNDttYW5hZ2VkXCYjMzQ7LCBcdTAwMjZtYW5hZ2VkKSA9PSAwIFx1MDAyNlx1MDAyNlxuIDc5MDpcdFx0ICAgICBzdHJjbXAobWFuYWdlZCwgXCYjMzQ7aW4tYmFuZC1zdGF0dXNcJiMzNDspID09IDApKSB7XG4gNzkxOlx0XHRcdGlmIChwbC1cdTAwM2VjZmdfbGlua19hbl9tb2RlID09IE1MT19BTl9GSVhFRCkge1xuIDc5MjpcdFx0XHRcdHBoeWxpbmtfZXJyKHBsLFxuIDc5MzpcdFx0XHRcdFx0ICAgIFwmIzM0O2NhbiYjMzk7dCB1c2UgYm90aCBmaXhlZC1saW5rIGFuZCBpbi1iYW5kLXN0YXR1c1xcblwmIzM0Oyk7XG4gNzk0Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNzk1Olx0XHRcdH1cbiA3OTY6XHRcbiA3OTc6XHRcdFx0cGwtXHUwMDNlY2ZnX2xpbmtfYW5fbW9kZSA9IE1MT19BTl9JTkJBTkQ7XG4gNzk4Olx0XHR9XG4gNzk5Olx0XG4gODAwOlx0XHRpZiAocGwtXHUwMDNlY2ZnX2xpbmtfYW5fbW9kZSA9PSBNTE9fQU5fSU5CQU5EKSB7XG4gODAxOlx0XHRcdGxpbmttb2RlX3plcm8ocGwtXHUwMDNlc3VwcG9ydGVkKTtcbiA4MDI6XHRcdFx0cGh5bGlua19zZXQocGwtXHUwMDNlc3VwcG9ydGVkLCBNSUkpO1xuIDgwMzpcdFx0XHRwaHlsaW5rX3NldChwbC1cdTAwM2VzdXBwb3J0ZWQsIEF1dG9uZWcpO1xuIDgwNDpcdFx0XHRwaHlsaW5rX3NldChwbC1cdTAwM2VzdXBwb3J0ZWQsIEFzeW1fUGF1c2UpO1xuIDgwNTpcdFx0XHRwaHlsaW5rX3NldChwbC1cdTAwM2VzdXBwb3J0ZWQsIFBhdXNlKTtcbiA4MDY6XHRcbiA4MDc6XHRcdFx0c3dpdGNoIChwbC1cdTAwM2VsaW5rX2NvbmZpZy5pbnRlcmZhY2UpIHtcbiA4MDg6XHRcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XG4gODA5Olx0XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcbiA4MTA6XHRcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxuIDgxMTpcdFx0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RVVNHTUlJOlxuIDgxMjpcdFx0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSTpcbiA4MTM6XHRcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfSUQ6XG4gODE0Olx0XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1JYSUQ6XG4gODE1Olx0XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1RYSUQ6XG4gODE2Olx0XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JUQkk6XG4gODE3Olx0XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWDpcbiA4MTg6XHRcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMjUwMEJBU0VYOlxuIDgxOTpcdFx0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV81R0JBU0VSOlxuIDgyMDpcdFx0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8yNUdCQVNFUjpcbiA4MjE6XHRcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSTpcbiA4MjI6XHRcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTBHX1FYR01JSTpcbiA4MjM6XHRcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTBHS1I6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzA5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgUGh5bGluayBJbnRlcmZhY2UqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgcGh5bGlua19wYXJzZV9tb2RlYCBmdW5jdGlvbiBhbmQgaXQmIzM5O3MgdXNpbmcgYHBsLSZndDtsaW5rX2NvbmZpZy5pbnRlcmZhY2VgLiBSaWdodCwgcmlnaHQsIG1ha2VzIHNlbnNlLiBCdXQgdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0JiMzOTtzIHBvcHBlZCBpbnRvIG15IGhlYWQgaXMgKndoZXJlKiBpcyB0aGF0IGBwbC0mZ3Q7bGlua19jb25maWcuaW50ZXJmYWNlYCB2YXJpYWJsZSBhY3R1YWxseSBnZXR0aW5nIHNldD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBoZXJlLiBMZXQmIzM5O3MgYmFja3RyYWNrIGFuZCByZXZpc2l0IGBwaHlsaW5rX2NyZWF0ZWAuIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJlLWV4YW1pbmUgdGhhdCBmdW5jdGlvbiBhbmQgc2VlIGlmIHRoZSBpbml0aWFsaXphdGlvbiBvciBhc3NpZ25tZW50IHRvIHRoaXMgcGFydGljdWxhciBmaWVsZCBpcyBoYW5kbGVkIHRoZXJlLiBJJiMzOTttIGdvaW5nIHRvIG1ldGljdWxvdXNseSBjaGVjayBldmVyeSBsaW5lIG9mIHRoYXQgZnVuY3Rpb24gdG8gbWFrZSBzdXJlIHRoYXQgZmllbGQgaXMgYmVpbmcgY29ycmVjdGx5IGFzc2lnbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODk5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4OTk6XHRcdHBsLVx1MDAzZWxpbmtfY29uZmlnLmludGVyZmFjZSA9IGlmYWNlO1xuMTkwMDpcdFx0cGwtXHUwMDNlbGlua19jb25maWcucGF1c2UgPSBNTE9fUEFVU0VfQU47XG4xOTAxOlx0XHRwbC1cdTAwM2VsaW5rX2NvbmZpZy5zcGVlZCA9IFNQRUVEX1VOS05PV047XG4xOTAyOlx0XHRwbC1cdTAwM2VsaW5rX2NvbmZpZy5kdXBsZXggPSBEVVBMRVhfVU5LTk9XTjtcbjE5MDM6XHRcdHBsLVx1MDAzZXBjc19zdGF0ZSA9IFBDU19TVEFURV9ET1dOO1xuMTkwNDpcdFx0cGwtXHUwMDNlbWFjX29wcyA9IG1hY19vcHM7XG4xOTA1Olx0XHRfX3NldF9iaXQoUEhZTElOS19ESVNBQkxFX1NUT1BQRUQsIFx1MDAyNnBsLVx1MDAzZXBoeWxpbmtfZGlzYWJsZV9zdGF0ZSk7XG4xOTA2Olx0XHR0aW1lcl9zZXR1cChcdTAwMjZwbC1cdTAwM2VsaW5rX3BvbGwsIHBoeWxpbmtfZml4ZWRfcG9sbCwgMCk7XG4xOTA3Olx0XG4xOTA4Olx0XHRsaW5rbW9kZV9maWxsKHBsLVx1MDAzZXN1cHBvcnRlZCk7XG4xOTA5Olx0XHRsaW5rbW9kZV9jb3B5KHBsLVx1MDAzZWxpbmtfY29uZmlnLmFkdmVydGlzaW5nLCBwbC1cdTAwM2VzdXBwb3J0ZWQpO1xuMTkxMDpcdFx0cGh5bGlua192YWxpZGF0ZShwbCwgcGwtXHUwMDNlc3VwcG9ydGVkLCBcdTAwMjZwbC1cdTAwM2VsaW5rX2NvbmZpZyk7XG4xOTExOlx0XG4xOTEyOlx0XHRyZXQgPSBwaHlsaW5rX3BhcnNlX21vZGUocGwsIGZ3bm9kZSk7XG4xOTEzOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTkxNDpcdFx0XHRnb3RvIGZyZWVfcGw7XG4xOTE1Olx0XG4xOTE2Olx0XHRpZiAocGwtXHUwMDNlY2ZnX2xpbmtfYW5fbW9kZSA9PSBNTE9fQU5fRklYRUQpIHtcbjE5MTc6XHRcdFx0cmV0ID0gcGh5bGlua19wYXJzZV9maXhlZGxpbmsocGwsIGZ3bm9kZSk7XG4xOTE4Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xOTE5Olx0XHRcdFx0Z290byByZWxlYXNlX2xpbmtfZ3BpbztcbjE5MjA6XHRcdH1cbjE5MjE6XHRcbjE5MjI6XHRcdHBsLVx1MDAzZXJlcV9saW5rX2FuX21vZGUgPSBwbC1cdTAwM2VjZmdfbGlua19hbl9tb2RlO1xuMTkyMzpcdFxuMTkyNDpcdFx0cmV0ID0gcGh5bGlua19yZWdpc3Rlcl9zZnAocGwsIGZ3bm9kZSk7XG4xOTI1Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTkyNjpcdFx0XHRnb3RvIHJlbGVhc2VfbGlua19ncGlvO1xuMTkyNzpcdFxuMTkyODpcdFx0cmV0dXJuIHBsO1xuMTkyOTpcdFxuMTkzMDpcdHJlbGVhc2VfbGlua19ncGlvOlxuMTkzMTpcdFx0aWYgKHBsLVx1MDAzZWxpbmtfZ3BpbylcbjE5MzI6XHRcdFx0Z3Bpb2RfcHV0KHBsLVx1MDAzZWxpbmtfZ3Bpbyk7XG4xOTMzOlx0ZnJlZV9wbDpcbjE5MzQ6XHRcdGtmcmVlKHBsKTtcbjE5MzU6XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4xOTM2Olx0fVxuMTkzNzpcdEVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfY3JlYXRlKTtcbjE5Mzg6XHRcbjE5Mzk6XHQvKipcbjE5NDA6XHQgKiBwaHlsaW5rX2Rlc3Ryb3koKSAtIGNsZWFudXAgYW5kIGRlc3Ryb3kgdGhlIHBoeWxpbmsgaW5zdGFuY2VcbjE5NDE6XHQgKiBAcGw6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxuMTk0MjpcdCAqXG4xOTQzOlx0ICogRGVzdHJveSBhIHBoeWxpbmsgaW5zdGFuY2UuIEFueSBQSFkgdGhhdCBoYXMgYmVlbiBhdHRhY2hlZCBtdXN0IGhhdmUgYmVlblxuMTk0NDpcdCAqIGNsZWFuZWQgdXAgdmlhIHBoeWxpbmtfZGlzY29ubmVjdF9waHkoKSBwcmlvciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXG4xOTQ1Olx0ICpcbjE5NDY6XHQgKiBOb3RlOiB0aGUgcnRubCBsb2NrIG11c3Qgbm90IGJlIGhlbGQgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXG4xOTQ3Olx0ICovXG4xOTQ4Olx0dm9pZCBwaHlsaW5rX2Rlc3Ryb3koc3RydWN0IHBoeWxpbmsgKnBsKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjM1NQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIFJlYXNvbmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhpcyBgcGwtJmd0O2xpbmtfY29uZmlnLmludGVyZmFjZWAgdmFyaWFibGUgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYmVpbmcgYXNzaWduZWQgYGlmYWNlYCwgd2hpY2ggZ2V0cyBwYXNzZWQgaW50byBgcGh5bGlua19jcmVhdGVgLiBUaGUgY3J1Y2lhbCBwb2ludCBpcyBpZiBgaWZhY2VgIGlzIGBQSFlfSU5URVJGQUNFX01PREVfTkFgLiBJZiB0aGF0JiMzOTtzIHRoZSBjYXNlLCB0aGVuIGBwaHlsaW5rX3BhcnNlX21vZGVgIHdvbiYjMzk7dCBtYXRjaCBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAuIFRoYXQmIzM5O3MgcHJvYmxlbWF0aWMuIEJ1dCB3YWl0Li4uIGlzbiYjMzk7dCBgaWZhY2VgIHR5cGljYWxseSBkZXRlcm1pbmVkIGJ5IHRoZSBNQUMgZHJpdmVyLCBiZWZvcmUgZXZlbiBnZXR0aW5nIHRvIGBwaHlsaW5rX2NyZWF0ZWA/IEkgdGhpbmsgb2YgaG93IHRoYXQgd29ya3MgaW4gcHJhY3RpY2UsIGZvciBleGFtcGxlLCB1c2luZyBzb21ldGhpbmcgbGlrZSBgb2ZfZ2V0X3BoeV9tb2RlYC4KClRoZSBxdWVzdGlvbiBiZWNvbWVzLCBjYW4gSSBtYW5pcHVsYXRlIHRoYXQgYGlmYWNlYCB2YWx1ZT8gSWYgSSBjb3VsZCBpbmplY3QgYSBkZXZpY2UgdHJlZSB3aXRoIGBwaHktbW9kZSA9ICYjMzQ7cHNnbWlpJiMzNDtgLCB0aGVuIGBwaHlfbW9kZWAgd291bGQgZGVmaW5pdGVseSBiZSBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAuIE5vdywgdGhlIHRyaWNreSBwYXJ0Li4uIGNhbiBJIGRvIHRoYXQgaW4gc3l6a2FsbGVyPyBJdCBzZWVtcyBsaWtlIHRoZXJlJiMzOTtzIHNvbWUgZGV2aWNlIHRyZWUgaW5qZWN0aW9uIHN1cHBvcnQgdmlhIHRoaW5ncyBsaWtlIGBzeXpfbW91bnRfaW1hZ2VgIG9yIG90aGVyIHBzZXVkby1zeXNjYWxscy4gQnV0IEkgcmVjYWxsIGRldmljZSB0cmVlcyBiZWluZyB1c3VhbGx5IHN0YXRpYyBpbiBRRU1VLCB1bmxlc3MgdGhlcmUgYXJlIG92ZXJsYXlzIG9yIHNvbWV0aGluZyBjbGV2ZXIgYXQgcGxheS4KCk9uIHNlY29uZCB0aG91Z2h0LCBJIGRvbiYjMzk7dCB0aGluayBzeXprYWxsZXIgKm5vcm1hbGx5KiBpbmplY3RzIGRldmljZSB0cmVlIG92ZXJsYXlzIGZvciBuZXR3b3JrIGRldmljZXMgb24gdGhlIGZseS4gSG93ZXZlciwgaXQgKmNhbiogdXNlIGBuZXRsaW5rYCB0byBjcmVhdGUgdmlydHVhbCBpbnRlcmZhY2VzLiBDb3VsZCBJIGNyZWF0ZSBhIHZpcnR1YWwgaW50ZXJmYWNlIHRoYXQgbGV2ZXJhZ2VzIGBwaHlsaW5rYCBhbmQsIGltcG9ydGFudGx5LCBhbGxvd3MgbWUgdG8gY29udHJvbCBvciBzZXQgdGhlIHBoeSBpbnRlcmZhY2UgbW9kZT8gVGhhdCYjMzk7cyB0aGUga2V5LgoKU28sIGxldCYjMzk7cyBzZWUgaWYgYW55IHZpcnR1YWwgZHJpdmVycyBhcmUgZXZlbiAqdXNpbmcqIGBwaHlsaW5rYC4gSSBjYW1lIGFjcm9zcyBgZmJuaWNgIHByZXZpb3VzbHksIGFuZCBJIGtub3cgdGhhdCB1c2VzIGBwaHlsaW5rX2NyZWF0ZWAuIEJ1dCBpcyB0aGF0IGEgdmlydHVhbCBkcml2ZXI/IEkgcmVtZW1iZXIgYGZibmljYCBiZWluZyBhIE1ldGEgbmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciwgYW5kIG1vcmUgc3BlY2lmaWNhbGx5IGEgUENJIGRldmljZSwgc28gdGhhdCYjMzk7cyBwcm9iYWJseSBub3QgdGhlIHJvdXRlIHRvIGdvLiBXaGF0IGFib3V0IHNvbWV0aGluZyBsaWtlIGBsYW43OHh4YD8gVGhhdCYjMzk7cyBhIFVTQiBkZXZpY2UuIFN5emthbGxlciBlbXVsYXRlcyBVU0IgZGV2aWNlcy4gSXQgY2FuIGRvIHRoaXMgd2l0aCBgZHVtbXlfaGNkYCBhbmQgYHN5el91c2JfY29ubmVjdGAuIFNvIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBsYW43OHh4X3BoeWxpbmtfc2V0dXBgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzk5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI3OTk6XHRzdGF0aWMgaW50IGxhbjc4eHhfcGh5bGlua19zZXR1cChzdHJ1Y3QgbGFuNzh4eF9uZXQgKmRldilcbjI4MDA6XHR7XG4yODAxOlx0XHRzdHJ1Y3QgcGh5bGlua19jb25maWcgKnBjID0gXHUwMDI2ZGV2LVx1MDAzZXBoeWxpbmtfY29uZmlnO1xuMjgwMjpcdFx0c3RydWN0IHBoeWxpbmsgKnBoeWxpbms7XG4yODAzOlx0XG4yODA0Olx0XHRwYy1cdTAwM2VkZXYgPSBcdTAwMjZkZXYtXHUwMDNlbmV0LVx1MDAzZWRldjtcbjI4MDU6XHRcdHBjLVx1MDAzZXR5cGUgPSBQSFlMSU5LX05FVERFVjtcbjI4MDY6XHRcdHBjLVx1MDAzZW1hY19jYXBhYmlsaXRpZXMgPSBNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UgfCBNQUNfMTAgfFxuMjgwNzpcdFx0XHRcdCAgICAgICBNQUNfMTAwIHwgTUFDXzEwMDBGRDtcbjI4MDg6XHRcdHBjLVx1MDAzZW1hY19tYW5hZ2VkX3BtID0gdHJ1ZTtcbjI4MDk6XHRcdHBjLVx1MDAzZWxwaV9jYXBhYmlsaXRpZXMgPSBNQUNfMTAwRkQgfCBNQUNfMTAwMEZEO1xuMjgxMDpcdFx0LypcbjI4MTE6XHRcdCAqIERlZmF1bHQgVFggTFBJIChMb3cgUG93ZXIgSWRsZSkgcmVxdWVzdCBkZWxheSBjb3VudCBpcyBzZXQgdG8gNTB1cy5cbjI4MTI6XHRcdCAqXG4yODEzOlx0XHQgKiBTb3VyY2U6IExBTjc4MDAgRG9jdW1lbnRhdGlvbiwgRFMwMDAwMTk5MkgsIFNlY3Rpb24gMTUuMS41NywgUGFnZSAyMDQuXG4yODE0Olx0XHQgKlxuMjgxNTpcdFx0ICogUmVhc29uaW5nOlxuMjgxNjpcdFx0ICogQWNjb3JkaW5nIHRvIHRoZSBhcHBsaWNhdGlvbiBub3RlIGluIHRoZSBMQU43ODAwIGRvY3VtZW50YXRpb24sIGFcbjI4MTc6XHRcdCAqIHplcm8gZGVsYXkgbWF5IG5lZ2F0aXZlbHkgaW1wYWN0IHRoZSBUWCBkYXRhIHBhdGjigJlzIGFiaWxpdHkgdG9cbjI4MTg6XHRcdCAqIHN1cHBvcnQgR2lnYWJpdCBvcGVyYXRpb24uIEEgdmFsdWUgb2YgNTB1cyBpcyByZWNvbW1lbmRlZCBhcyBhXG4yODE5Olx0XHQgKiByZWFzb25hYmxlIGRlZmF1bHQgd2hlbiB0aGUgcGFydCBvcGVyYXRlcyBhdCBHaWdhYml0IHNwZWVkcyxcbjI4MjA6XHRcdCAqIGJhbGFuY2luZyBzdGFiaWxpdHkgYW5kIHBvd2VyIGVmZmljaWVuY3kgaW4gRUVFIG1vZGUuIFRoaXMgZGVsYXkgY2FuXG4yODIxOlx0XHQgKiBiZSBpbmNyZWFzZWQgYmFzZWQgb24gcGVyZm9ybWFuY2UgdGVzdGluZywgYXMgRUVFIGlzIGRlc2lnbmVkIGZvclxuMjgyMjpcdFx0ICogc2NlbmFyaW9zIHdpdGggbW9zdGx5IGlkbGUgbGlua3MgYW5kIG9jY2FzaW9uYWwgYnVyc3RzIG9mIGZ1bGxcbjI4MjM6XHRcdCAqIGJhbmR3aWR0aCB0cmFuc21pc3Npb24uIFRoZSBnb2FsIGlzIHRvIGVuc3VyZSByZWxpYWJsZSBHaWdhYml0XG4yODI0Olx0XHQgKiBwZXJmb3JtYW5jZSB3aXRob3V0IG92ZXJseSBhZ2dyZXNzaXZlIHBvd2VyIG9wdGltaXphdGlvbiBkdXJpbmdcbjI4MjU6XHRcdCAqIGluYWN0aXZlIHBlcmlvZHMuXG4yODI2Olx0XHQgKi9cbjI4Mjc6XHRcdHBjLVx1MDAzZWxwaV90aW1lcl9kZWZhdWx0ID0gNTA7XG4yODI4Olx0XHRwYy1cdTAwM2VlZWVfZW5hYmxlZF9kZWZhdWx0ID0gdHJ1ZTtcbjI4Mjk6XHRcbjI4MzA6XHRcdGlmIChkZXYtXHUwMDNlY2hpcGlkID09IElEX1JFVl9DSElQX0lEXzc4MDFfKVxuMjgzMTpcdFx0XHRwaHlfaW50ZXJmYWNlX3NldF9yZ21paShwYy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4yODMyOlx0XHRlbHNlXG4yODMzOlx0XHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfR01JSSwgcGMtXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuMjgzNDpcdFxuMjgzNTpcdFx0bWVtY3B5KGRldi1cdTAwM2VwaHlsaW5rX2NvbmZpZy5scGlfaW50ZXJmYWNlcyxcbjI4MzY6XHRcdCAgICAgICBkZXYtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMsXG4yODM3Olx0XHQgICAgICAgc2l6ZW9mKGRldi1cdTAwM2VwaHlsaW5rX2NvbmZpZy5scGlfaW50ZXJmYWNlcykpO1xuMjgzODpcdFxuMjgzOTpcdFx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKHBjLCBkZXYtXHUwMDNlbmV0LVx1MDAzZWRldi5md25vZGUsXG4yODQwOlx0XHRcdFx0XHQgZGV2LVx1MDAzZWludGVyZmFjZSwgXHUwMDI2bGFuNzh4eF9waHlsaW5rX21hY19vcHMpO1xuMjg0MTpcdFx0aWYgKElTX0VSUihwaHlsaW5rKSlcbjI4NDI6XHRcdFx0cmV0dXJuIFBUUl9FUlIocGh5bGluayk7XG4yODQzOlx0XG4yODQ0Olx0XHRkZXYtXHUwMDNlcGh5bGluayA9IHBoeWxpbms7XG4yODQ1Olx0XG4yODQ2Olx0XHRyZXR1cm4gMDtcbjI4NDc6XHR9XG4yODQ4Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTUyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6CgoqKk5ldHdvcmsgSW50ZXJmYWNlIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYWJvdXQgaG93IHRoZSBgbGFuNzh4eGAgZHJpdmVyIGhhbmRsZXMgaXRzIGludGVyZmFjZSBjb25maWd1cmF0aW9uLiBJdCBzZWVtcyBwcmV0dHkgY2xlYXIgdGhhdCB0aGUgZHJpdmVyIGlzIGV4cGxpY2l0bHkgc2V0dGluZyBgZGV2LSZndDtpbnRlcmZhY2VgIHRvIGVpdGhlciBgUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUlgIG9yIGBSR01JSWAuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkLCBhbmQgaXQgZG9lc24mIzM5O3QgYXBwZWFyIHRvIGJlIHRvdWNoaW5nICphbnkqIGBQU0dNSUlgIGNvbmZpZ3VyYXRpb25zLiBJIHdvbmRlciB3aGF0IHRoZSByYXRpb25hbGUgaXMgYmVoaW5kIHRoaXMgc3BlY2lmaWMgYXBwcm9hY2guIElzIGl0IGEgaGFyZHdhcmUgbGltaXRhdGlvbiwgb3IgYSBkZXNpZ24gY2hvaWNlIGZvciBzb21lIG90aGVyIHJlYXNvbj8gSSYjMzk7bGwgcHJvYmFibHkgaGF2ZSB0byBkaWcgaW50byB0aGUgZGF0YXNoZWV0IGZvciB0aGF0IG9uZS4KCk5vdywgdGhhdCBicmluZ3MgdXAgYW5vdGhlciByZWxhdGVkIHBvaW50IC0gSSBzaG91bGQgcHJvYmFibHkgYWxzbyBxdWlja2x5IHJldmlldyBob3cgdGhlIGBhc2l4X2RldmljZXNgIGhhbmRsZSB0aGlzIHNhbWUgYXJlYS4gQXJlIHRoZXkgdXNpbmcgdGhlIHNhbWUgbWV0aG9kcywgb3IgZG8gdGhleSBkaXZlcmdlIGluIHRoZWlyIGludGVyZmFjZSBtb2RlIHNldHVwPyBJIGhhdmUgYSBmZWVsaW5nIHRoYXQgdGhleSYjMzk7bGwgdXNlIHNvbWV0aGluZyBzaW1pbGFyLCBvciBwZXJoYXBzIGhhdmUgc29tZSBjb21tb24gdXRpbGl0eSBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgZHJpdmVyIGNvZGUgaW4gdGhhdCBmYW1pbHkgZm9yIGNvbXBhcmlzb24uIEl0JiMzOTtzIGFsd2F5cyBiZW5lZmljaWFsIHRvIGNvbXBhcmUgdGhlIGRpZmZlcmVudCBkcml2ZXJzJiMzOTsgYXBwcm9hY2hlcyB0byBlbnN1cmUgdGhlIGJlc3QgZGVzaWduIGlzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzk5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3OTk6XHRzdGF0aWMgaW50IGF4ODg3NzJfcGh5bGlua19zZXR1cChzdHJ1Y3QgdXNibmV0ICpkZXYpXG4gODAwOlx0e1xuIDgwMTpcdFx0c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4gODAyOlx0XHRwaHlfaW50ZXJmYWNlX3QgcGh5X2lmX21vZGU7XG4gODAzOlx0XHRzdHJ1Y3QgcGh5bGluayAqcGh5bGluaztcbiA4MDQ6XHRcbiA4MDU6XHRcdHByaXYtXHUwMDNlcGh5bGlua19jb25maWcuZGV2ID0gXHUwMDI2ZGV2LVx1MDAzZW5ldC1cdTAwM2VkZXY7XG4gODA2Olx0XHRwcml2LVx1MDAzZXBoeWxpbmtfY29uZmlnLnR5cGUgPSBQSFlMSU5LX05FVERFVjtcbiA4MDc6XHRcdHByaXYtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyA9IE1BQ19TWU1fUEFVU0UgfCBNQUNfQVNZTV9QQVVTRSB8XG4gODA4Olx0XHRcdE1BQ18xMCB8IE1BQ18xMDA7XG4gODA5Olx0XG4gODEwOlx0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMLFxuIDgxMTpcdFx0XHQgIHByaXYtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuIDgxMjpcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJLFxuIDgxMzpcdFx0XHQgIHByaXYtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuIDgxNDpcdFxuIDgxNTpcdFx0aWYgKHByaXYtXHUwMDNlZW1iZF9waHkpXG4gODE2Olx0XHRcdHBoeV9pZl9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xuIDgxNzpcdFx0ZWxzZVxuIDgxODpcdFx0XHRwaHlfaWZfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJO1xuIDgxOTpcdFxuIDgyMDpcdFx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFx1MDAyNnByaXYtXHUwMDNlcGh5bGlua19jb25maWcsIGRldi1cdTAwM2VuZXQtXHUwMDNlZGV2LmZ3bm9kZSxcbiA4MjE6XHRcdFx0XHRcdCBwaHlfaWZfbW9kZSwgXHUwMDI2YXg4ODc3Ml9waHlsaW5rX21hY19vcHMpO1xuIDgyMjpcdFx0aWYgKElTX0VSUihwaHlsaW5rKSlcbiA4MjM6XHRcdFx0cmV0dXJuIFBUUl9FUlIocGh5bGluayk7XG4gODI0Olx0XG4gODI1Olx0XHRwcml2LVx1MDAzZXBoeWxpbmsgPSBwaHlsaW5rO1xuIDgyNjpcdFx0cmV0dXJuIDA7XG4gODI3Olx0fVxuIDgyODpcdFxuIDgyOTpcdHN0YXRpYyBpbnQgYXg4ODc3Ml9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4gODMwOlx0e1xuIDgzMTpcdFx0c3RydWN0IGFzaXhfY29tbW9uX3ByaXZhdGUgKnByaXY7XG4gODMyOlx0XHR1OCBidWZbRVRIX0FMRU5dID0gezB9O1xuIDgzMzpcdFx0aW50IHJldCwgaTtcbiA4MzQ6XHRcbiA4MzU6XHRcdHByaXYgPSBkZXZtX2t6YWxsb2MoXHUwMDI2ZGV2LVx1MDAzZXVkZXYtXHUwMDNlZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbiA4MzY6XHRcdGlmICghcHJpdilcbiA4Mzc6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gODM4Olx0XG4gODM5Olx0XHRkZXYtXHUwMDNlZHJpdmVyX3ByaXYgPSBwcml2O1xuIDg0MDpcdFxuIDg0MTpcdFx0cmV0ID0gdXNibmV0X2dldF9lbmRwb2ludHMoZGV2LCBpbnRmKTtcbiA4NDI6XHRcdGlmIChyZXQpXG4gODQzOlx0XHRcdHJldHVybiByZXQ7XG4gODQ0Olx0XG4gODQ1Olx0XHQvKiBNYXliZSB0aGUgYm9vdCBsb2FkZXIgcGFzc2VkIHRoZSBNQUMgYWRkcmVzcyB2aWEgZGV2aWNlIHRyZWUgKi9cbiA4NDY6XHRcdGlmICghZXRoX3BsYXRmb3JtX2dldF9tYWNfYWRkcmVzcyhcdTAwMjZkZXYtXHUwMDNldWRldi1cdTAwM2VkZXYsIGJ1ZikpIHtcbiA4NDc6XHRcdFx0bmV0aWZfZGJnKGRldiwgaWZ1cCwgZGV2LVx1MDAzZW5ldCxcbiA4NDg6XHRcdFx0XHQgIFwmIzM0O01BQyBhZGRyZXNzIHJlYWQgZnJvbSBkZXZpY2UgdHJlZVwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MzE1CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHN1bW1hcnk6CgoqKkFuYWx5emluZyBOZXR3b3JrIEludGVyZmFjZSBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIG5ldHdvcmsgaW50ZXJmYWNlIGlzIGNvbmZpZ3VyZWQuIE15IGluaXRpYWwgY2x1ZSBpcyB0aGUgbWVudGlvbiBvZiBlaXRoZXIgYElOVEVSTkFMYCBvciBgUk1JSWAg4oCTIHRoYXQgdGVsbHMgbWUgaXQmIzM5O3MgbGlrZWx5IGFuIGludGVybmFsIFBIWSBvciB1c2luZyBhIFJlZHVjZWQgTWVkaWEgSW5kZXBlbmRlbnQgSW50ZXJmYWNlLiBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGRyaXZlciBmaWxlIGBxY2E4MDd4LmNgIGFzIGEgbGlrZWx5IGNhbmRpZGF0ZSwgYW5kIGZyb20gdGhlcmUgSSB3aWxsIHZlcmlmeSB0aGUgUEhZIGNvbmZpZ3VyYXRpb24gdG8gc2VlIGlmIGl0IG1ha2VzIHVzZSBvZiBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAuIEJhc2VkIG9uIHRoYXQsIEkgY2FuIGRlZHVjZSB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gYW5kIGludGVyZmFjZSBtb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTQwOlx0XHRcdHByaXYtXHUwMDNldHhfZHJpdmVfc3RyZW5ndGggPSBQUVNHTUlJX1RYX0RSSVZFUl82MDBNVjtcbiA1NDE6XHRcdFx0YnJlYWs7XG4gNTQyOlx0XHRkZWZhdWx0OlxuIDU0MzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1NDQ6XHRcdH1cbiA1NDU6XHRcbiA1NDY6XHRcdHByaXYtXHUwMDNlcGFja2FnZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX05BO1xuIDU0NzpcdFx0aWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgXCYjMzQ7cWNvbSxwYWNrYWdlLW1vZGVcJiMzNDssXG4gNTQ4Olx0XHRcdFx0XHQgICAgIFx1MDAyNnBhY2thZ2VfbW9kZV9uYW1lKSkge1xuIDU0OTpcdFx0XHRpZiAoIXN0cmNhc2VjbXAocGFja2FnZV9tb2RlX25hbWUsXG4gNTUwOlx0XHRcdFx0XHRwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSSkpKVxuIDU1MTpcdFx0XHRcdHByaXYtXHUwMDNlcGFja2FnZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTtcbiA1NTI6XHRcdFx0ZWxzZSBpZiAoIXN0cmNhc2VjbXAocGFja2FnZV9tb2RlX25hbWUsXG4gNTUzOlx0XHRcdFx0XHQgICAgIHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJKSkpXG4gNTU0Olx0XHRcdFx0cHJpdi1cdTAwM2VwYWNrYWdlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJO1xuIDU1NTpcdFx0XHRlbHNlXG4gNTU2Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTU3Olx0XHR9XG4gNTU4Olx0XG4gNTU5Olx0XHRyZXR1cm4gMDtcbiA1NjA6XHR9XG4gNTYxOlx0XG4gNTYyOlx0c3RhdGljIGludCBxY2E4MDd4X3BoeV9wYWNrYWdlX2NvbmZpZ19pbml0X29uY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiA1NjM6XHR7XG4gNTY0Olx0XHRzdHJ1Y3QgcWNhODA3eF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4gNTY1Olx0XHRpbnQgdmFsLCByZXQ7XG4gNTY2Olx0XG4gNTY3Olx0XHQvKiBNYWtlIHN1cmUgUEhZIGZvbGxvdyBQSFkgcGFja2FnZSBtb2RlIGlmIGVuZm9yY2VkICovXG4gNTY4Olx0XHRpZiAocHJpdi1cdTAwM2VwYWNrYWdlX21vZGUgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX05BIFx1MDAyNlx1MDAyNlxuIDU2OTpcdFx0ICAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgIT0gcHJpdi1cdTAwM2VwYWNrYWdlX21vZGUpXG4gNTcwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDU3MTpcdFxuIDU3MjpcdFx0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcbiA1NzM6XHRcbiA1NzQ6XHRcdC8qIFNldCBjb3JyZWN0IFBIWSBwYWNrYWdlIG1vZGUgKi9cbiA1NzU6XHRcdHZhbCA9IF9fcGh5X3BhY2thZ2VfcmVhZChwaHlkZXYsIFFDQTgwN1hfQ09NQk9fQUREUixcbiA1NzY6XHRcdFx0XHRcdCBRQ0E4MDdYX0NISVBfQ09ORklHVVJBVElPTik7XG4gNTc3Olx0XHR2YWwgXHUwMDI2PSB+UUNBODA3WF9DSElQX0NPTkZJR1VSQVRJT05fTU9ERV9DRkdfTUFTSztcbiA1Nzg6XHRcdC8qIHBhY2thZ2VfbW9kZSBjYW4gYmUgUVNHTUlJIG9yIFBTR01JSSBhbmQgd2UgdmFsaWRhdGVcbiA1Nzk6XHRcdCAqIHRoaXMgaW4gcHJvYmVfb25jZS5cbiA1ODA6XHRcdCAqIFdpdGggcGFja2FnZV9tb2RlIHRvIE5BLCB3ZSBkZWZhdWx0IHRvIFBTR01JSS5cbiA1ODE6XHRcdCAqL1xuIDU4MjpcdFx0c3dpdGNoIChwcml2LVx1MDAzZXBhY2thZ2VfbW9kZSkge1xuIDU4MzpcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxuIDU4NDpcdFx0XHR2YWwgfD0gUUNBODA3WF9DSElQX0NPTkZJR1VSQVRJT05fTU9ERV9RU0dNSUlfU0dNSUk7XG4gNTg1Olx0XHRcdGJyZWFrO1xuIDU4NjpcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxuIDU4NzpcdFx0ZGVmYXVsdDpcbiA1ODg6XHRcdFx0dmFsIHw9IFFDQTgwN1hfQ0hJUF9DT05GSUdVUkFUSU9OX01PREVfUFNHTUlJX0FMTF9DT1BQRVI7XG4gNTg5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MzgzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogODUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIENvZGUgUGF0aCBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBtb2RpZnlpbmcgYHBoeWxpbmsuY2AsIHdoaWNoIGlzIHRoZSBjb3JlIGZyYW1ld29yayBmb3IgbWFuYWdpbmcgdGhlIGxpbmsgYmV0d2VlbiBhIE1BQyBhbmQgYSBQSFkuIFRoZSBwYXRjaCBhZGRzIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYCB0byB3aGF0IGBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZWAgcmV0dXJucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gSWYgYSBNQUMgZHJpdmVyIHVzZXMgYHBoeWxpbmtgIGFuZCBpdCYjMzk7cyBjb25maWd1cmVkIGZvciBQU0dNSUksIHRoaXMgZnVuY3Rpb24gd2lsbCBub3cgcmVwb3J0IGFuIGBJTkJBTkRfQ0lTQ09fU0dNSUlgIHR5cGUuJiMzNDsKCkJ1dCBoZXJlJiMzOTtzIHRoZSBraWNrZXI6IEkgbmVlZCB0byBmaWd1cmUgb3V0ICpob3cqIGEgTUFDIGRyaXZlciB3b3VsZCBhY3R1YWxseSBnZXQgc2V0IHVwIHdpdGggYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgLiBJIGRpZCBhIHF1aWNrIGdyZXAgb2YgdGhlIGBkcml2ZXJzL25ldC9gIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFueSBtZW50aW9ucyBvZiBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAuIFN1cnByaXNpbmdseSwgdGhlIG9ubHkgaGl0cyB3ZXJlIHdpdGhpbiB0aGUgUEhZIGNvcmUgY29kZSBpdHNlbGYsIG9yIHRoaXMgYHFjYTgwN3hgIFBIWSBkcml2ZXIuIE5vIE1BQyBkcml2ZXJzIHNlZW1lZCB0byBiZSBleHBsaWNpdGx5IHVzaW5nIG9yIHNldHRpbmcgdGhpcyBtb2RlIGRpcmVjdGx5LiBUaGlzIGlzIHJhaXNpbmcgYSByZWQgZmxhZy4KClRoZW4gSSByZW1lbWJlcmVkOiBgb2ZfZ2V0X3BoeV9tb2RlYCEgTUFDIGRyaXZlcnMgZnJlcXVlbnRseSB1c2UgdGhpcyB0byBnZXQgdGhlIFBIWSBpbnRlcmZhY2UgbW9kZSBmcm9tIHRoZSBkZXZpY2UgdHJlZS4gU28sIGlmIHRoZSBkZXZpY2UgdHJlZSBmb3IgYSBzcGVjaWZpYyBoYXJkd2FyZSBoYXMgYHBoeS1tb2RlID0gJiMzNDtwc2dtaWkmIzM0O2AsIGBvZl9nZXRfcGh5X21vZGVgIHdvdWxkIGNvcnJlY3RseSBzZXQgdGhlIGBwaHlfbW9kZWAgdmFyaWFibGUgdG8gYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgLCB3aGljaCB3b3VsZCB0aGVuIGJlIHBhc3NlZCB0byBgcGh5bGlua19jcmVhdGVgLiBUaGF0IG1ha2VzIHNlbnNlLgoKQnV0IHdhaXQsIGhvdyBhbSBJIGdvaW5nIHRvIHRyaWdnZXIgdGhpcyBpbiBhIHRlc3QgZW52aXJvbm1lbnQ/IFN5emthbGxlciBpc24mIzM5O3Qgc2V0IHVwIHRvIGRpcmVjdGx5IGluamVjdCBkZXZpY2UgdHJlZSBub2Rlcywgc28gdGhhdCBhdmVudWUgaXMgY2xvc2VkLiBXaGF0IGFib3V0IHZpcnR1YWwgZHJpdmVycz8gQ291bGQgSSwgc2F5LCBjb25maWd1cmUgYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIHRvIHVzZSBQU0dNSUk/IEkgaW1tZWRpYXRlbHkgc3RhcnRlZCB0aGlua2luZzogYG5ldGRldl9zaW1gLCBgZHVtbXlgLCBgdmV0aGAsIGBtYWNzZWNgLCBgdHVuYCwgYHRhcGAgLi4uIGJ1dCBub25lIG9mIHRoZW0gdXNlIGBwaHlsaW5rYCBhcyBmYXIgYXMgSSBjYW4gdGVsbC4KCk9rYXksIHNvIG5vIGRldmljZSB0cmVlIGluamVjdGlvbiBhbmQgbm8gcmVsZXZhbnQgdmlydHVhbCBkcml2ZXJzLiBUaGF0JiMzOTtzIHN0YXJ0aW5nIHRvIGxvb2sgbGlrZSBhIGRlYWQgZW5kLiBDYW4gYGV0aHRvb2xgIGhlbHA/IEkmIzM5O20gYXdhcmUgdGhhdCBzb21lIG9mIGl0cyBmdW5jdGlvbnMgYXJlIHF1aXRlIHBvd2VyZnVsLiBEb2VzIGl0IGFsbG93IGNoYW5naW5nIHRoZSBNQUMtUEhZIGludGVyZmFjZSBtb2RlIGRpcmVjdGx5LCBmb3IgZXhhbXBsZSBmcm9tIFJHTUlJIHRvIFNHTUlJPyBJIGRvbiYjMzk7dCB0aGluayBzby4gRXRodG9vbCBtYWlubHkgZGVhbHMgd2l0aCBsaW5rIHNwZWVkLCBkdXBsZXgsIGV0Yy4gSXQmIzM5O3Mgbm90IHRoZSByaWdodCB0b29sIGZvciB0aGlzLgoKVGhlbiwgdGhlcmUgd2FzIGEgZ2xpbW1lciBvZiBob3BlLiBJIGxvb2tlZCBhdCBgcGh5bGlua19zZnBfY29uZmlnX29wdGljYWxgIGFuZCBub3RpY2VkIGl0IGNhbGxzIGBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZWAuIEFoLCB0aGF0JiMzOTtzIGNhbGxlZCB3aGVuIGFuIFNGUCBtb2R1bGUgaXMgaW5zZXJ0ZWQsIGJ1dCB0aGVyZSBpc24mIzM5O3QgYSB2aXJ0dWFsIFNGUCBkcml2ZXIgdG8gZW11bGF0ZS4KCkkgdGhlbiBjb25zaWRlcmVkIGBwaHlsaW5rX3Bjc19uZWdfbW9kZWAuIFRoYXQmIzM5O3MgY2FsbGVkIGZyb20gYHBoeWxpbmtfbWFjX2NvbmZpZ2AsIHdoaWNoIGl0c2VsZiBpcyBjYWxsZWQgZnJvbSBlaXRoZXIgYSB3b3JrcXVldWUgaW4gYHBoeWxpbmtfcmVzb2x2ZWAgb3IgZHVyaW5nIGBwaHlsaW5rX3N0YXJ0YC4gU3RpbGwsIHRoZSBxdWVzdGlvbiBpcyBob3cgdG8gZ2V0IHRoZSBgcGh5X21vZGVgIHNldCBjb3JyZWN0bHkuCgpTbyBoZXJlJiMzOTtzIHRoZSBjb25jbHVzaW9uOiBpZiB0aGVyZSYjMzk7cyBubyB3YXkgdG8gcmVhY2ggYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgIGluIGEgUUVNVSBlbnZpcm9ubWVudCDigJMgbm8gZGV2aWNlIHRyZWUgaW5qZWN0aW9uLCBubyBzdWl0YWJsZSB2aXJ0dWFsIGRyaXZlcnMsIG5vIGV0aHRvb2wgbWFnaWMg4oCTIHRoZW4gZnV6emluZyB0aGlzIGNvZGUgcGF0aCBpcyBwcm9iYWJseSBhIHdhc3RlIG9mIHRpbWUuIEkgZGlkIGEgZmluYWwgZG91YmxlIGNoZWNrIHRocm91Z2ggdGhlIG5ldHdvcmtpbmcgZHJpdmVyIGNvZGUsIGJ1dCB0aGUgZ3JlcCB3YXMgYWNjdXJhdGU6IG5vIE1BQyBkcml2ZXJzIGRpcmVjdGx5IHVzZSBvciBpbXBsaWNpdGx5IHNldCBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAuIEFuZCBvZiBjb3Vyc2UsIEkgY2hlY2tlZCB0aGUgZGVmaW5pdGlvbiBpbiBgaW5jbHVkZS9saW51eC9waHkuaGAgdG8gbWFrZSBzdXJlIEkgd2FzbiYjMzk7dCBtaXNzaW5nIHNvbWV0aGluZy4gSXQgbG9va3MgbGlrZSB0aGlzIGNvZGUgaXMgc2ltcGx5IHVucmVhY2hhYmxlLCBhdCBsZWFzdCBhcyBmYXIgYXMgbXkgY3VycmVudCBzZXR1cCBhbmQga25vd2xlZGdlIGFsbG93cyBtZSB0byBqdWRnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdD0yMzg9U29tZSBvZiB0aGUgaW50ZXJmYWNlIG1vZGVzIGFyZSBkZXNjcmliZWQgYmVsb3c6XG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3QtMzI1LVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3Q6MzI2OmBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWBgXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdC0zMjctICAgIFRoaXMgaXMgdGhlIFBlbnRhIFNHTUlJIG1vZGUsIGl0IGlzIHNpbWlsYXIgdG8gUVNHTUlJIGJ1dCBpdCBjb21iaW5lcyA1XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM9MTU5PWludCBwaHlfaW50ZXJmYWNlX251bV9wb3J0cyhwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTIwMS1cdFx0cmV0dXJuIDQ7XG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYzoyMDI6XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy0yMDMtXHRcdHJldHVybiA1O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jPTI5ND11bnNpZ25lZCBsb25nIHBoeV9jYXBzX2Zyb21faW50ZXJmYWNlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMtMzEwLVx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYzozMTE6XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy0zMTItXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yMzg9c3RhdGljIGludCBwaHlsaW5rX2ludGVyZmFjZV9tYXhfc3BlZWQocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI1OS1cdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOlxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNjA6XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI2MS1cdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FTR01JSTpcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTc3ND1zdGF0aWMgaW50IHBoeWxpbmtfcGFyc2VfbW9kZShzdHJ1Y3QgcGh5bGluayAqcGwsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy04MDgtXHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzo4MDk6XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtODEwLVx0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0xMDM5PXN0YXRpYyBlbnVtIGluYmFuZF90eXBlIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xMDQyLVx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjEwNDM6XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwNDQtXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XG4tLVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jPTQ5MD1zdGF0aWMgaW50IHFjYTgwN3hfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYy01NDktXHRcdGlmICghc3RyY2FzZWNtcChwYWNrYWdlX21vZGVfbmFtZSxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYzo1NTA6XHRcdFx0XHRwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSSkpKVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jOjU1MTpcdFx0XHRwcml2LVx1MDAzZXBhY2thZ2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk7XG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNTUyLVx0XHRlbHNlIGlmICghc3RyY2FzZWNtcChwYWNrYWdlX21vZGVfbmFtZSxcbi0tXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM9NTYyPXN0YXRpYyBpbnQgcWNhODA3eF9waHlfcGFja2FnZV9jb25maWdfaW5pdF9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTU4NS1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM6NTg2Olx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTU4Ny1cdGRlZmF1bHQ6XG4tLVxuaW5jbHVkZS9saW51eC9waHkuaD01Mz1leHRlcm4gY29uc3QgaW50IHBoeV9iYXNpY19wb3J0c19hcnJheVszXTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTg5LSAqIEBQSFlfSU5URVJGQUNFX01PREVfTU9DQTogTXVsdGltZWRpYSBvdmVyIENvYXhcbmluY2x1ZGUvbGludXgvcGh5Lmg6OTA6ICogQFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6IFBlbnRhIFNHTUlJXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTkxLSAqIEBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOiBRdWFkIFNHTUlJXG4tLVxuaW5jbHVkZS9saW51eC9waHkuaD0xMTQ9dHlwZWRlZiBlbnVtIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTEzMi1cdFBIWV9JTlRFUkZBQ0VfTU9ERV9NT0NBLFxuaW5jbHVkZS9saW51eC9waHkuaDoxMzM6XHRQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJLFxuaW5jbHVkZS9saW51eC9waHkuaC0xMzQtXHRQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJLFxuLS1cbmluY2x1ZGUvbGludXgvcGh5Lmg9MjEwPXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqcGh5X21vZGVzKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4tLVxuaW5jbHVkZS9saW51eC9waHkuaC0yNDgtXHRcdHJldHVybiBcJiMzNDttb2NhXCYjMzQ7O1xuaW5jbHVkZS9saW51eC9waHkuaDoyNDk6XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XG5pbmNsdWRlL2xpbnV4L3BoeS5oLTI1MC1cdFx0cmV0dXJuIFwmIzM0O3BzZ21paVwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0NTEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBQYXRoIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCBzZWVtcyBsaWtlIGl0JiMzOTtzIHByZXR0eSBpc29sYXRlZC4gSXQmIzM5O3Mgb25seSBzaG93aW5nIHVwIGluIGBxY2E4MDd4LmNgIGFuZCBzb21lIGNvcmUgUEhZL3BoeWxpbmsgZmlsZXMuIFRoZSB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IG5vIHN0YW5kYXJkIE1BQyBkcml2ZXIgaXMgZXhwbGljaXRseSBzZXR0aW5nIHRoaXMgbW9kZS4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyBtYXliZSBpdCYjMzk7cyBiZWluZyBwYXJzZWQgZnJvbSB0aGUgZGV2aWNlIHRyZWUuIEkga25vdyBgb2ZfZ2V0X3BoeV9tb2RlYCBjYW4gaGFuZGxlIHRoYXQsIHBpY2tpbmcgdXAgYCYjMzQ7cHNnbWlpJiMzNDtgIGFzIGEgc3RyaW5nIHZhbHVlLiBCdXQgdGhlbiBJIHJlbWVtYmVyIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc3l6a2FsbGVyIGhlcmUsIGFuZCB0aGVyZSYjMzk7cyBubyB3YXkgdG8gaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzLCBhbmQgdGhlcmUmIzM5O3Mgbm8gc3VpdGFibGUgdmlydHVhbCBkcml2ZXIgdG8gdHJpZ2dlciB0aGlzIHBhdGggaW4gYSBRRU1VIGVudmlyb25tZW50LiBUaGF0IHN0cm9uZ2x5IHN1Z2dlc3RzIHRoaXMgY29kZSBpcyBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBpbiBvdXIgdGVzdGluZy4KCkhvbGQgb24sIHRob3VnaC4gSSYjMzk7bSBtaXNzaW5nIHNvbWV0aGluZywgSSBuZWVkIHRvIGNvbnNpZGVyIGFsbCB0aGUgYW5nbGVzLiBDb3VsZCBzb21ldGhpbmcgZWxzZSByZXF1ZXN0IHRoYXQgbW9kZT8gV2hhdCBhYm91dCBTRlAgbW9kdWxlcz8gVGhleSYjMzk7cmUgb2Z0ZW4gYXNzb2NpYXRlZCB3aXRoIGRpZmZlcmVudCBpbnRlcmZhY2UgbW9kZXMuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGBzZnAuY2AgYW5kIGBzZnAtYnVzLmNgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgbWVjaGFuaXNtIGZvciBhbiBTRlAgbW9kdWxlIHRvIHNwZWNpZnkgb3IgcmVxdWVzdCB0aGlzIG1vZGUuIFRoYXQgc2VlbXMgbGlrZSB0aGUgb25seSBvdGhlciBwb3NzaWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM9MTU5PWludCBwaHlfaW50ZXJmYWNlX251bV9wb3J0cyhwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTIwMS1cdFx0cmV0dXJuIDQ7XG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYzoyMDI6XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy0yMDMtXHRcdHJldHVybiA1O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jPTI5ND11bnNpZ25lZCBsb25nIHBoeV9jYXBzX2Zyb21faW50ZXJmYWNlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMtMzEwLVx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYzozMTE6XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy0zMTItXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yMzg9c3RhdGljIGludCBwaHlsaW5rX2ludGVyZmFjZV9tYXhfc3BlZWQocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI1OS1cdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOlxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNjA6XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI2MS1cdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FTR01JSTpcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTc3ND1zdGF0aWMgaW50IHBoeWxpbmtfcGFyc2VfbW9kZShzdHJ1Y3QgcGh5bGluayAqcGwsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy04MDgtXHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzo4MDk6XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtODEwLVx0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0xMDM5PXN0YXRpYyBlbnVtIGluYmFuZF90eXBlIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xMDQyLVx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjEwNDM6XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwNDQtXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XG4tLVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jPTQ5MD1zdGF0aWMgaW50IHFjYTgwN3hfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYy01NDktXHRcdGlmICghc3RyY2FzZWNtcChwYWNrYWdlX21vZGVfbmFtZSxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYzo1NTA6XHRcdFx0XHRwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSSkpKVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jOjU1MTpcdFx0XHRwcml2LVx1MDAzZXBhY2thZ2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk7XG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNTUyLVx0XHRlbHNlIGlmICghc3RyY2FzZWNtcChwYWNrYWdlX21vZGVfbmFtZSxcbi0tXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM9NTYyPXN0YXRpYyBpbnQgcWNhODA3eF9waHlfcGFja2FnZV9jb25maWdfaW5pdF9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTU4NS1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM6NTg2Olx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTU4Ny1cdGRlZmF1bHQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwOTE5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUFNHTUlJIEludGVyZmFjZSBNb2RlKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYCBjb3VsZCBldmVuIGNvbWUgaW50byBwbGF5IGhlcmUuIEl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIGBzZnBgIGRyaXZlciBpdHNlbGYgZG9lc24mIzM5O3QgdXNlIGl0IGRpcmVjdGx5LiAgVGhlIGxvZ2ljIHNlZW1zIHRvIHBvaW50IHRvIGEgTUFDIGRyaXZlciBhcyB0aGUgc291cmNlLiAgQnV0IGhvbGQgb24uLi4gbm8gTUFDIGRyaXZlciAqZG9lcyogdXNlIGl0LCByaWdodD8gIFRoYXQmIzM5O3MgYSBrZXkgcG9pbnQuCgpXYWl0IGEgc2Vjb25kLCB3aGF0IGFib3V0IHRoZSAqUEhZKiBkcml2ZXI/IENvdWxkIGEgUEhZIGRyaXZlciBiZSBzZXR0aW5nIHRoaXMgbW9kZT8gIEFoLCB5ZXMhIFRoZSBgcWNhODA3eGAgUEhZIGRyaXZlciBkb2VzIGluZGVlZCB1c2UgaXQuIEJ1dCB0aGF0JiMzOTtzIGEgUEhZLCBzbyB0aGF0JiMzOTtzIGEgZGlmZmVyZW50IGNvbnRleHQgZW50aXJlbHkuCgpOb3csIGRvZXMgYHBoeWxpbmtgIGludGVyYWN0IHdpdGggdGhlIFBIWSBkcml2ZXLigJlzIGludGVyZmFjZSBtb2RlIGluIHNvbWUgd2F5PyBMZXQmIzM5O3MgdHJhY2UgaXQgdGhyb3VnaC4gYHBoeWxpbmtfYXR0YWNoX3BoeWAgb3IgYHBoeWxpbmtfY29ubmVjdF9waHlgIHRha2UgYSBgcGh5X2RldmljZWAsIHNvIHRoZXJlICppcyogYSBjb25uZWN0aW9uIHBvaW50LiBCdXQgbG9va2luZyBhdCBgcGh5bGlua19nZXRfaW5iYW5kX3R5cGVgLCB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGBwbC0mZ3Q7bGlua19jb25maWcuaW50ZXJmYWNlYC4gSGFuZyBvbiEgVGhhdCBgcGwtJmd0O2xpbmtfY29uZmlnLmludGVyZmFjZWAgaXMgdGhlIE1BQyYjMzk7cyBpbnRlcmZhY2UgbW9kZSwgbm90IHRoZSBQSFkmIzM5O3MgaW50ZXJmYWNlIG1vZGUuIFRoYXQmIzM5O3MgYSBjcnVjaWFsIGRpc3RpbmN0aW9uLgoKQnV0IHdhaXQgYSBtaW51dGUsIEkgdGhpbmsgSSBzZWUgc29tZXRoaW5nISBJIHJlY2FsbCB0aGF0IGBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbGAgKmRvZXMqIHVzZSB0aGUgYGludGVyZmFjZWAgYXJndW1lbnQuIEl0IGxvb2tzIGxpa2UgaXQgaXMgcGFzc2VkIGluIGFzIGFuIGFyZ3VtZW50LCBzbyB3aGVyZSBpcyB0aGF0IHZhbHVlIGNvbWluZyBmcm9tPyBJIG5lZWQgdG8gY2hlY2sgb3V0IHdoYXQgdGhhdCBmdW5jdGlvbiBkb2VzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaW50ZXJmYWNlIG1vZGUgaXMgYmVpbmcgc2V0LiBMZXQmIzM5O3MgZGVsdmUgaW50byBgcGh5bGlua19zZnBfY29uZmlnX29wdGljYWxgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zNzA1PXN0YXRpYyBpbnQgcGh5bGlua19zZnBfY29uZmlnX3BoeShzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zNzU1LVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozNzU2OnN0YXRpYyBpbnQgcGh5bGlua19zZnBfY29uZmlnX29wdGljYWwoc3RydWN0IHBoeWxpbmsgKnBsKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zNzU3LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTM4NDg9c3RhdGljIGludCBwaHlsaW5rX3NmcF9tb2R1bGVfaW5zZXJ0KHZvaWQgKnVwc3RyZWFtLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzg2NS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6Mzg2NjpcdHJldHVybiBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbChwbCk7XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTM4NjctfVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9Mzg3Nj1zdGF0aWMgaW50IHBoeWxpbmtfc2ZwX21vZHVsZV9zdGFydCh2b2lkICp1cHN0cmVhbSlcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTM4OTEtXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjM4OTI6XHRyZXR1cm4gcGh5bGlua19zZnBfY29uZmlnX29wdGljYWwocGwpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zODkzLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE4ODQKCQkJCQkJCW91dHB1dDogMTU3CgkJCQkJCQl0aG91Z2h0czogMjM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsYCBQYXRoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBgcGh5bGlua19zZnBfY29uZmlnX29wdGljYWxgIGdyYWJzIHRoZSBgaW50ZXJmYWNlYCBmcm9tIGBwbC0mZ3Q7bGlua19jb25maWcuaW50ZXJmYWNlYC4gVGhhdCYjMzk7cyBlc3NlbnRpYWxseSB1c2luZyB0aGUgTUFDJiMzOTtzIGNvbmZpZ3VyZWQgaW50ZXJmYWNlIG1vZGUuIFRoZSByZWFsIHByb2JsZW0gaXMsICpubyogTUFDIGRyaXZlciwgdW5sZXNzIGNvbmZpZ3VyZWQgdGhyb3VnaCBhIGRldmljZSB0cmVlLCBhY3R1YWxseSBzZXRzIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYC4gSSYjMzk7bSBjZXJ0YWluIHRoaXMgbWFrZXMgdGhpcyBwYXJ0aWN1bGFyIGNvZGUgcGF0aCBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VLgoKTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgc29tZXRoaW5nIHRob3VnaC4gQ291bGQgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgICpwb3RlbnRpYWxseSogYmUgc2V0IHZpYSBgZXRodG9vbGAgb3Igc29tZSBgbmV0bGlua2AgbWFnaWM/IE5vLCBubywgbm8uIEludGVyZmFjZSBtb2RlcyBsaWtlIFNHTUlJLCBQU0dNSUksIFJHTUlJIGFyZSBmdW5kYW1lbnRhbGx5ICpoYXJkd2FyZSogY29ubmVjdGlvbnMgYmV0d2VlbiB0aGUgTUFDIGFuZCB0aGUgUEhZLiBUaGV5JiMzOTtyZSBub3Qgc29tZXRoaW5nIHlvdSYjMzk7cmUgZ29pbmcgdG8gY29uZmlndXJlIHRocm91Z2ggc3RhbmRhcmQgdXNlcnNwYWNlIHRvb2xzLiBTdXJlLCBtYXliZSB5b3UgY291bGQgaGFjayBzb21ldGhpbmcgdG9nZXRoZXIgd2l0aCBkZXZpY2UgdHJlZSBvdmVybGF5cyBvciBzb21lIHZlbmRvci1zcGVjaWZpYyB0b29sLCBidXQgdGhvc2UgYXJlbiYjMzk7dCB0aGUgbm9ybS4gQW5kIGRlZmluaXRlbHkgbm90IGluIGEgUUVNVSBzZXR1cC4KClJpZ2h0LCBzbyB0aGF0IGNvbmZpcm1zIG15IGluaXRpYWwgc3VzcGljaW9uLiBUaGlzIGVudGlyZSBtb2RpZmljYXRpb24gaXMgaW5hY2Nlc3NpYmxlIGluIFFFTVUuIExldCBtZSBnbyBiYWNrIGFuZCByZXZpZXcgdGhlIHBhdGNoIGl0c2VsZi4uLiBBaCwgaXQganVzdCBhZGRzIGEgYGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpgIHRvIGBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZWAuIEl0JiMzOTtzIGEgc2luZ2xlIGxpbmUuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGEgbm8tb3AsIGF0IGxlYXN0IGluIG91ciB0ZXN0aW5nIGVudmlyb25tZW50cy4KCkdpdmVuIHRoYXQgaXQmIzM5O3MgZnVuZGFtZW50YWxseSB1bnJlYWNoYWJsZSBpbiBRRU1VLCB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJIHRvIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGluIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKCkuIFRoaXMgaW50ZXJmYWNlIG1vZGUgcmVwcmVzZW50cyBhIGhhcmR3YXJlLWxldmVsIGNvbm5lY3Rpb24gYmV0d2VlbiBhIE1BQyBhbmQgYSBQSFkgKFBlbnRhIFNHTUlJKS4gSXQgaXMgb25seSBjb25maWd1cmVkIHZpYSBkZXZpY2UgdHJlZSBwcm9wZXJ0aWVzIChlLmcuLCBwaHktbW9kZSA9IFwmIzM0O3BzZ21paVwmIzM0Oykgb3IgaGFyZGNvZGVkIGluIHNwZWNpZmljIGhhcmR3YXJlIGRyaXZlcnMgKGxpa2UgdGhlIFF1YWxjb21tIHFjYTgwN3ggUEhZIGRyaXZlcikuIFNpbmNlIGl0IHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIG9yIGRldmljZSB0cmVlIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIG5vdCBwcmVzZW50IG9yIGR5bmFtaWNhbGx5IGluamVjdGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VKSwgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUkgdG8gdGhlIHN3aXRjaCBzdGF0ZW1lbnQgaW4gcGh5bGlua19nZXRfaW5iYW5kX3R5cGUoKS4gVGhpcyBpbnRlcmZhY2UgbW9kZSByZXByZXNlbnRzIGEgaGFyZHdhcmUtbGV2ZWwgY29ubmVjdGlvbiBiZXR3ZWVuIGEgTUFDIGFuZCBhIFBIWSAoUGVudGEgU0dNSUkpLiBJdCBpcyBvbmx5IGNvbmZpZ3VyZWQgdmlhIGRldmljZSB0cmVlIHByb3BlcnRpZXMgKGUuZy4sIHBoeS1tb2RlID0gXCYjMzQ7cHNnbWlpXCYjMzQ7KSBvciBoYXJkY29kZWQgaW4gc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVycyAobGlrZSB0aGUgUXVhbGNvbW0gcWNhODA3eCBQSFkgZHJpdmVyKS4gU2luY2UgaXQgcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgb3IgZGV2aWNlIHRyZWUgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgbm90IHByZXNlbnQgb3IgZHluYW1pY2FsbHkgaW5qZWN0YWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUpLCB0aGlzIGNvZGUgcGF0aCBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAzOjA2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMzowNDo0OS42NjAxMTc2MjNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDY5MDk5MzUzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSSB0byB0aGUgc3dpdGNoIHN0YXRlbWVudCBpbiBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZSgpLiBUaGlzIGludGVyZmFjZSBtb2RlIHJlcHJlc2VudHMgYSBoYXJkd2FyZS1sZXZlbCBjb25uZWN0aW9uIGJldHdlZW4gYSBNQUMgYW5kIGEgUEhZIChQZW50YSBTR01JSSkuIEl0IGlzIG9ubHkgY29uZmlndXJlZCB2aWEgZGV2aWNlIHRyZWUgcHJvcGVydGllcyAoZS5nLiwgcGh5LW1vZGUgPSBcXFwicHNnbWlpXFxcIikgb3IgaGFyZGNvZGVkIGluIHNwZWNpZmljIGhhcmR3YXJlIGRyaXZlcnMgKGxpa2UgdGhlIFF1YWxjb21tIHFjYTgwN3ggUEhZIGRyaXZlcikuIFNpbmNlIGl0IHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIG9yIGRldmljZSB0cmVlIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIG5vdCBwcmVzZW50IG9yIGR5bmFtaWNhbGx5IGluamVjdGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VKSwgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMzowNDo0OS42NjAxMjE3MzNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjIxMTc4MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1ZWUwODhkNTM1ZTI3YmIxZTFlOTU1MTYyMTVhNmRjMjgyMjc0OGE5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDggMDM6MDQ6NDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcXG5pbmRleCAxOGQyZWFkOTdhYTU0Li45ODNhMWEzY2VlMzc0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXFxuQEAgLTEwNDAsNiArMTA0MCw3IEBAIHN0YXRpYyBlbnVtIGluYmFuZF90eXBlIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuIHtcXG4gXFx0c3dpdGNoIChpbnRlcmZhY2UpIHtcXG4gXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XFxuK1xcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcXG4gXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxcbiBcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RVVNHTUlJOlxcbiBcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMzowNDo1MS4wODMxNDYwNDFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MzI2Nzk1MTExMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJIHRvIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGluIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKCkuIFRoaXMgaW50ZXJmYWNlIG1vZGUgcmVwcmVzZW50cyBhIGhhcmR3YXJlLWxldmVsIGNvbm5lY3Rpb24gYmV0d2VlbiBhIE1BQyBhbmQgYSBQSFkgKFBlbnRhIFNHTUlJKS4gSXQgaXMgb25seSBjb25maWd1cmVkIHZpYSBkZXZpY2UgdHJlZSBwcm9wZXJ0aWVzIChlLmcuLCBwaHktbW9kZSA9IFxcXCJwc2dtaWlcXFwiKSBvciBoYXJkY29kZWQgaW4gc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVycyAobGlrZSB0aGUgUXVhbGNvbW0gcWNhODA3eCBQSFkgZHJpdmVyKS4gU2luY2UgaXQgcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgb3IgZGV2aWNlIHRyZWUgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgbm90IHByZXNlbnQgb3IgZHluYW1pY2FsbHkgaW5qZWN0YWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUpLCB0aGlzIGNvZGUgcGF0aCBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDVlZTA4OGQ1MzVlMjdiYjFlMWU5NTUxNjIxNWE2ZGMyODIyNzQ4YTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyA4IDAzOjA0OjQ3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcbmluZGV4IDE4ZDJlYWQ5N2FhNTQuLjk4M2ExYTNjZWUzNzQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXG5AQCAtMTA0MCw2ICsxMDQwLDcgQEAgc3RhdGljIGVudW0gaW5iYW5kX3R5cGUgcGh5bGlua19nZXRfaW5iYW5kX3R5cGUocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbiB7XG4gXHRzd2l0Y2ggKGludGVyZmFjZSkge1xuIFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XG4rXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XG4gXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XG4gXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RVVNHTUlJOlxuIFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSTpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAzOjA0OjUxLjA4MzE0NzM4MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDM4MzkzNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqRXhhbWluaW5nIGEgUEhZTElOSyBQYXRjaCoqXG5cbkFscmlnaHQsIGEgcGF0Y2gganVzdCBjcm9zc2VkIG15IGRlc2sgdGhhdCB0b3VjaGVzIGBkcml2ZXJzL25ldC9waHkvcGh5bGluay5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBpbnZvbHZlIGFkZGluZyBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAgdG8gdGhlIGBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZWAgc3dpdGNoIHN0YXRlbWVudC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZGl2ZSBpbnRvIHRoYXQgZnVuY3Rpb24gYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgYHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlYCB3b3Jrcy4gV2hhdCBpcyBpdHMgY3VycmVudCBpbXBsZW1lbnRhdGlvbj8gV2hhdCBhcmUgdGhlIGV4aXN0aW5nIGludGVyZmFjZSBtb2RlcyBpdCBoYW5kbGVzLCBhbmQgaG93IGRvZXMgYFBTR01JSWAgZml0IGludG8gdGhhdCBlY29zeXN0ZW0/IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBob3cgdGhpcyBuZXcgYWRkaXRpb24gbWlnaHQgYWZmZWN0IHRoZSBvdmVyYWxsIGxvZ2ljLCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cywgYW5kIGlmIHRoZSBleGlzdGluZyBjb2RlIGhhbmRsZXMgdGhpcyBuZXcgbW9kZSBncmFjZWZ1bGx5LiBNeSBtYWluIGZvY3VzIGF0IHRoaXMgcG9pbnQgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgZnVuZGFtZW50YWwgY2hhbmdlIGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgbGluayB0cmFpbmluZyBhbmQgbmVnb3RpYXRpb24gcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoaXMgdHlwZSBvZiBQSFkgZHJpdmVyIG1vZGlmaWNhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDM6MDQ6NTQuNTg2OTg5NzM3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NzI1NjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeWxpbmtfZ2V0X2luYmFuZF90eXBlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0xMDMzPWVudW0gaW5iYW5kX3R5cGUge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xMDM4LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTAzOTpzdGF0aWMgZW51bSBpbmJhbmRfdHlwZSBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZShwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTA0MC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTEwOTA9c3RhdGljIHZvaWQgcGh5bGlua19wY3NfbmVnX21vZGUoc3RydWN0IHBoeWxpbmsgKnBsLCBzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcyxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTA5OC1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjEwOTk6XFx0dHlwZSA9IHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKGludGVyZmFjZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xMTAwLVxcdGlmICh0eXBlID09IElOQkFORF9OT05FKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTM3NTY9c3RhdGljIGludCBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbChzdHJ1Y3QgcGh5bGluayAqcGwpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTM4MDYtXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozODA3OlxcdGluYmFuZF90eXBlID0gcGh5bGlua19nZXRfaW5iYW5kX3R5cGUoaW50ZXJmYWNlKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTM4MDgtXFx0aWYgKGluYmFuZF90eXBlID09IElOQkFORF9OT05FKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAzOjA0OjU0LjY2NjcxNzU5MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1NDA4OTEwNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW5uZXIgbW9ub2xvZ3VlOlxuXG4qKlF1aWNrIEF1ZGl0IG9mIGBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZWAqKlxuXG5BbHJpZ2h0LCBhIHNtYWxsIGNoYW5nZSBpbiBgcGh5bGlua19nZXRfaW5iYW5kX3R5cGVgLiBJbnRlcmVzdGluZy4gTGV0J3Mgbm90IGdldCBhaGVhZCBvZiBvdXJzZWx2ZXMsIHRob3VnaC4gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBleGFjdGx5IHRoaXMgZnVuY3Rpb24gZG9lcy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGh5bGluayBlY29zeXN0ZW0gYmVmb3JlIEkgZXZlbiBjb25zaWRlciB3aGF0IHRoaXMgbW9kaWZpY2F0aW9uICptZWFucyouIEdvdHRhIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGZ1bGwgY29udGV4dCBiZWZvcmUgZGl2aW5nIGludG8gdGhlIGRldGFpbHMuIFRpbWUgdG8gcHVsbCB1cCB0aGUgY29kZSBhbmQgam9nIG15IG1lbW9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY4MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAzOjA0OjU3LjIwNzYxMDg5N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMzksXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMzk6XFx0c3RhdGljIGVudW0gaW5iYW5kX3R5cGUgcGh5bGlua19nZXRfaW5iYW5kX3R5cGUocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4xMDQwOlxcdHtcXG4xMDQxOlxcdFxcdHN3aXRjaCAoaW50ZXJmYWNlKSB7XFxuMTA0MjpcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSTpcXG4xMDQzOlxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcXG4xMDQ0OlxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FTR01JSTpcXG4xMDQ1OlxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FVU0dNSUk6XFxuMTA0NjpcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJOlxcbjEwNDc6XFx0XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTBHX1FYR01JSTpcXG4xMDQ4OlxcdFxcdFxcdC8qIFRoZXNlIHByb3RvY29scyBhcmUgZGVzaWduZWQgZm9yIHVzZSB3aXRoIGEgUEhZIHdoaWNoXFxuMTA0OTpcXHRcXHRcXHQgKiBjb21tdW5pY2F0ZXMgaXRzIG5lZ290aWF0aW9uIHJlc3VsdCBiYWNrIHRvIHRoZSBNQUMgdmlhXFxuMTA1MDpcXHRcXHRcXHQgKiBpbmJhbmQgY29tbXVuaWNhdGlvbi4gTm90ZTogdGhlcmUgZXhpc3QgUEhZcyB0aGF0IHJ1blxcbjEwNTE6XFx0XFx0XFx0ICogd2l0aCBTR01JSSBidXQgZG8gbm90IHNlbmQgdGhlIGluYmFuZCBkYXRhLlxcbjEwNTI6XFx0XFx0XFx0ICovXFxuMTA1MzpcXHRcXHRcXHRyZXR1cm4gSU5CQU5EX0NJU0NPX1NHTUlJO1xcbjEwNTQ6XFx0XFxuMTA1NTpcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVg6XFxuMTA1NjpcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8yNTAwQkFTRVg6XFxuMTA1NzpcXHRcXHRcXHQvKiAxMDAwYmFzZS1YIGlzIGRlc2lnbmVkIGZvciB1c2UgbWVkaWEtc2lkZSBmb3IgRmlicmVcXG4xMDU4OlxcdFxcdFxcdCAqIGNvbm5lY3Rpb25zLCBhbmQgdGh1cyB0aGUgQXV0b25lZyBiaXQgbmVlZHMgdG8gYmVcXG4xMDU5OlxcdFxcdFxcdCAqIHRha2VuIGludG8gYWNjb3VudC4gV2UgYWxzbyBkbyB0aGlzIGZvciAyNTAwYmFzZS1YXFxuMTA2MDpcXHRcXHRcXHQgKiBhcyB3ZWxsLCBidXQgZHJpdmVycyBtYXkgbm90IHN1cHBvcnQgdGhpcywgc28gbWF5XFxuMTA2MTpcXHRcXHRcXHQgKiBuZWVkIHRvIG92ZXJyaWRlIHRoaXMuXFxuMTA2MjpcXHRcXHRcXHQgKi9cXG4xMDYzOlxcdFxcdFxcdHJldHVybiBJTkJBTkRfQkFTRVg7XFxuMTA2NDpcXHRcXG4xMDY1OlxcdFxcdGRlZmF1bHQ6XFxuMTA2NjpcXHRcXHRcXHRyZXR1cm4gSU5CQU5EX05PTkU7XFxuMTA2NzpcXHRcXHR9XFxuMTA2ODpcXHR9XFxuMTA2OTpcXHRcXG4xMDcwOlxcdC8qKlxcbjEwNzE6XFx0ICogcGh5bGlua19wY3NfbmVnX21vZGUoKSAtIGhlbHBlciB0byBkZXRlcm1pbmUgUENTIGluYmFuZCBtb2RlXFxuMTA3MjpcXHQgKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG4xMDczOlxcdCAqIEBwY3M6IGEgcG9pbnRlciB0byBcXHUwMDI2c3RydWN0IHBoeWxpbmtfcGNzXFxuMTA3NDpcXHQgKiBAaW50ZXJmYWNlOiBpbnRlcmZhY2UgbW9kZSB0byBiZSB1c2VkXFxuMTA3NTpcXHQgKiBAYWR2ZXJ0aXNpbmc6IGFkZXJ0aXNlbWVudCBldGh0b29sIGxpbmsgbW9kZSBtYXNrXFxuMTA3NjpcXHQgKlxcbjEwNzc6XFx0ICogRGV0ZXJtaW5lcyB0aGUgbmVnb3RpYXRpb24gbW9kZSB0byBiZSB1c2VkIGJ5IHRoZSBQQ1MsIGFuZCByZXR1cm5zXFxuMTA3ODpcXHQgKiBvbmUgb2Y6XFxuMTA3OTpcXHQgKlxcbjEwODA6XFx0ICogLSAlUEhZTElOS19QQ1NfTkVHX05PTkU6IGludGVyZmFjZSBtb2RlIGRvZXMgbm90IHN1cHBvcnQgaW5iYW5kXFxuMTA4MTpcXHQgKiAtICVQSFlMSU5LX1BDU19ORUdfT1VUQkFORDogYW4gb3V0IG9mIGJhbmQgbW9kZSAoZS5nLiByZWFkaW5nIHRoZSBQSFkpXFxuMTA4MjpcXHQgKiAgIHdpbGwgYmUgdXNlZC5cXG4xMDgzOlxcdCAqIC0gJVBIWUxJTktfUENTX05FR19JTkJBTkRfRElTQUJMRUQ6IGluYmFuZCBtb2RlIHNlbGVjdGVkIGJ1dCBhdXRvbmVnXFxuMTA4NDpcXHQgKiAgIGRpc2FibGVkXFxuMTA4NTpcXHQgKiAtICVQSFlMSU5LX1BDU19ORUdfSU5CQU5EX0VOQUJMRUQ6IGluYmFuZCBtb2RlIHNlbGVjdGVkIGFuZCBhdXRvbmVnIGVuYWJsZWRcXG4xMDg2OlxcdCAqXFxuMTA4NzpcXHQgKiBOb3RlOiB0aGlzIGlzIGZvciBjYXNlcyB3aGVyZSB0aGUgUENTIGl0c2VsZiBpcyBpbnZvbHZlZCBpbiBuZWdvdGlhdGlvblxcbjEwODg6XFx0ICogKGUuZy4gQ2xhdXNlIDM3LCBTR01JSSBhbmQgc2ltaWxhcikgbm90IENsYXVzZSA3My5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDM6MDQ6NTcuMjA3Nzc1NjM3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI4MTA3NzE2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTd2l0Y2ggU3RhdGVtZW50IENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgdGlueSBjaGFuZ2UgaW4gYSBzd2l0Y2ggc3RhdGVtZW50LCBhbmQgbXkgZmlyc3QgdGhvdWdodCBpcywgXCJJcyB0aGlzIGV2ZW4gd29ydGggZnV6emluZz9cIiBJdCdzIGEgc21hbGwgbW9kaWZpY2F0aW9uLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBgcGh5bGlua19nZXRfaW5iYW5kX3R5cGVgIHdoZW4gdGhlIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYCBjYXNlIGlzIGhpdC4gSW5zdGVhZCBvZiByZXR1cm5pbmcgYElOQkFORF9OT05FYCwgaXQgbm93IHJldHVybnMgYElOQkFORF9DSVNDT19TR01JSWAuXG5cblJpZ2h0IGF3YXksIEkgc2VlIHRoaXMgaW1wYWN0cyBgcGh5bGlua19wY3NfbmVnX21vZGVgIGFuZCBgcGh5bGlua19zZnBfY29uZmlnX29wdGljYWxgLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGNvZGUgcGF0aCBpcyBldmVuIHJlYWNoYWJsZS4gTGV0J3Mgc2VlLi4uIGBwaHlsaW5rX3Bjc19uZWdfbW9kZWAgaXMgY2FsbGVkIGJ5IGBwaHlsaW5rX21hY19jb25maWdgLiBBbmQgYHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsYCBpcyB0cmlnZ2VyZWQgYnkgYHBoeWxpbmtfc2ZwX21vZHVsZV9pbnNlcnRgLlxuXG5UaGUgYmlnIHF1ZXN0aW9uIG5vdyBpcywgZG9lcyBgcGh5bGlua2AgZXZlbiAqZ2V0KiB1c2VkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gSXQncyBhIGNyaXRpY2FsIHBpZWNlIG9mIG5ldHdvcmtpbmcsIHNvIEknZCBpbWFnaW5lIHRoZSBhbnN3ZXIgaXMgeWVzLCBnaXZlbiBob3cgbWFueSBuZXR3b3JrIGRyaXZlcnMgdXRpbGl6ZSBpdC4gSSBrbm93IGl0J3MgYSBjb21tb24gZGVwZW5kZW5jeS5cblxuQWxyaWdodCwgSSdsbCBkZWx2ZSBmdXJ0aGVyIGJ5IGNoZWNraW5nIHRoZSBjYWxsZXJzIG9mIGBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZWAgdG8gZ2FpbiBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc2NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAzOjA1OjAxLjQ4ODg1NTI2NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzgyMTQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaHlsaW5rX2dldF9pbmJhbmRfdHlwZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTAzMz1lbnVtIGluYmFuZF90eXBlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTAzOC1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjEwMzk6c3RhdGljIGVudW0gaW5iYW5kX3R5cGUgcGh5bGlua19nZXRfaW5iYW5kX3R5cGUocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwNDAte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0xMDkwPXN0YXRpYyB2b2lkIHBoeWxpbmtfcGNzX25lZ19tb2RlKHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwOTgtXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxMDk5OlxcdHR5cGUgPSBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZShpbnRlcmZhY2UpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTEwMC1cXHRpZiAodHlwZSA9PSBJTkJBTkRfTk9ORSkge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zNzU2PXN0YXRpYyBpbnQgcGh5bGlua19zZnBfY29uZmlnX29wdGljYWwoc3RydWN0IHBoeWxpbmsgKnBsKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zODA2LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzgwNzpcXHRpbmJhbmRfdHlwZSA9IHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKGludGVyZmFjZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zODA4LVxcdGlmIChpbmJhbmRfdHlwZSA9PSBJTkJBTkRfTk9ORSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMzowNTowMS41NDI2ODE2MDFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIzMjk1MjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqTmF2aWdhdGluZyBQSFlMSU5LIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBoZXJlLiBJJ20gZm9jdXNpbmcgb24gdGhlIFBIWUxJTksgZHJpdmVyLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHNlZSBpZiBhbnkgc3BlY2lmaWMgY29uZmlncyBuZWVkIHRvIGJlIGRlZmluZWQgZm9yIHRoZSBkcml2ZXIgdG8gYmUgaW5jbHVkZWQuIEknbSBnb2luZyB0byBjaGVjayB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBkcml2ZXIgaXRzZWxmLCBzdGFydGluZyB3aXRoIGBkcml2ZXJzL25ldC9waHkvcGh5bGluay5jYC4gSSBrbm93IHRoYXQgZmlsZSBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfUEhZTElOS2AgaXMgc2V0LiBOb3cgSSBuZWVkIHRvIHNlZSAqd2hlcmUqIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZC4gSSdsbCBuZWVkIHRvIGxvY2F0ZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLiBFaXRoZXIgYGRyaXZlcnMvbmV0L3BoeS9LY29uZmlnYCBvciBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgaXMgd2hlcmUgSSdsbCBsb29rIGZvciBgUEhZTElOS2AuIExldCdzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGVzIHJldmVhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY0NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAzOjA1OjA0Ljk2NTk3OTE4M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxNzMzNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBIWUxJTktcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWctNS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo2OmNvbmZpZyBQSFlMSU5LXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNy1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMzowNTowNS4wMTExNTYxODlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkzMjMwNDM1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBIWUxJTksgLSBBIFF1aWNrIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBgUEhZTElOS2AuLi4gaXQncyBvbmUgb2YgdGhvc2UgdHJpc3RhdGUgb3B0aW9ucywgdHlwaWNhbGx5IGhhbmRsZWQgYnkgbmV0d29yayBkcml2ZXJzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGlzIHRoaXMgZXZlbiB3b3J0aCB0aGUgZnV6emluZyBlZmZvcnQ/IEl0IHNvdW5kcyBsaWtlIGEgcHJldHR5IG1pbm9yIGNoYW5nZSwgZXNzZW50aWFsbHkganVzdCBhZGRpbmcgYSBuZXcgY2FzZSB0byBhIHN3aXRjaCBzdGF0ZW1lbnQuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBjaGFuZ2UgdG8gdGhlIGluYmFuZCB0eXBlIHNwZWNpZmljYWxseSBmb3IgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgLlxuXG5CdXQgd2FpdCwgZG9lcyB0aGlzIGFjdHVhbGx5IGhhdmUgYW55ICpmdW5jdGlvbmFsKiBpbXBhY3Q/IEFoLCB5ZXMsIGl0IGRvZXMuIFRoaXMgc2VlbXMgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZiBgcGh5bGlua19wY3NfbmVnX21vZGVgIGFuZCBgcGh5bGlua19zZnBfY29uZmlnX29wdGljYWxgIHdoZW4gdGhhdCBzcGVjaWZpYyBpbnRlcmZhY2UgbW9kZSBpcyBpbiBwbGF5LiBPa2F5LCB0aGF0IG1ha2VzIGl0IG1vcmUgaW50ZXJlc3RpbmcuXG5cblRoZSBuZXh0IHF1ZXN0aW9uIGlzIGFsd2F5cyByZWFjaGFiaWxpdHkuIENhbiBJIGFjdHVhbGx5IGhpdCB0aGlzIGluIGEgUUVNVSBlbnZpcm9ubWVudD8gSWYgYSBuZXR3b3JrIGRyaXZlciBpcyB1c2luZyBgcGh5bGlua2AgKmFuZCogc3VwcG9ydHMgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgLCB0aGVuIHllcywgaXQncyBwb3NzaWJsZS4gU28sIGFyZSB0aGVyZSBhbnkgZHJpdmVycyBpbiBteSBRRU1VIHNldHVwIHRoYXQgbWVldCBib3RoIG9mIHRob3NlIGNyaXRlcmlhPyBUaW1lIHRvIGdvIGh1bnRpbmcgZm9yIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyByZWFjaGFibGUgYW5kIGlmIGl0IGlzLCB0aGVuIHRoZSBmdXp6aW5nIGVmZm9ydCBpcyBtb3JlIGp1c3RpZmllZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk4NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMzowNTowOC45NDM0NjQ0NzhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDg0OTA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYz0xNTk9aW50IHBoeV9pbnRlcmZhY2VfbnVtX3BvcnRzKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy0yMDEtXFx0XFx0cmV0dXJuIDQ7XFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6MjAyOlxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy0yMDMtXFx0XFx0cmV0dXJuIDU7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYz0yOTQ9dW5zaWduZWQgbG9uZyBwaHlfY2Fwc19mcm9tX2ludGVyZmFjZShwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMtMzEwLVxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jOjMxMTpcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMtMzEyLVxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FTR01JSTpcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjM4PXN0YXRpYyBpbnQgcGh5bGlua19pbnRlcmZhY2VfbWF4X3NwZWVkKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI1OS1cXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI2MDpcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNjEtXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz03NzQ9c3RhdGljIGludCBwaHlsaW5rX3BhcnNlX21vZGUoc3RydWN0IHBoeWxpbmsgKnBsLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy04MDgtXFx0XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzo4MDk6XFx0XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtODEwLVxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FTR01JSTpcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTAzOT1zdGF0aWMgZW51bSBpbmJhbmRfdHlwZSBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZShwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xMDQyLVxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTA0MzpcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xMDQ0LVxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FTR01JSTpcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYz00OTA9c3RhdGljIGludCBxY2E4MDd4X3BoeV9wYWNrYWdlX3Byb2JlX29uY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYy01NDktXFx0XFx0aWYgKCFzdHJjYXNlY21wKHBhY2thZ2VfbW9kZV9uYW1lLFxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYzo1NTA6XFx0XFx0XFx0XFx0cGh5X21vZGVzKFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUkpKSlcXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM6NTUxOlxcdFxcdFxcdHByaXYtXFx1MDAzZXBhY2thZ2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk7XFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTU1Mi1cXHRcXHRlbHNlIGlmICghc3RyY2FzZWNtcChwYWNrYWdlX21vZGVfbmFtZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYz01NjI9c3RhdGljIGludCBxY2E4MDd4X3BoeV9wYWNrYWdlX2NvbmZpZ19pbml0X29uY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYy01ODUtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jOjU4NjpcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTU4Ny1cXHRkZWZhdWx0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMzowNTowOS4wNjgzMTgzMDlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM2Mzc0NTk2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgdGhlIFFDQTgwN3ggUEhZIERyaXZlciBpbiBhIFFFTVUgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIHRoaXMgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgIGRlZmluZSwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGBxY2E4MDd4YCBQSFkgZHJpdmVyIGlzIHRoZSBwcmltYXJ5IHVzZXIuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgY2FuIEkgZXZlbiAqZ2V0KiB0byB0aGF0IGRyaXZlciBpbnNpZGUgUUVNVT8gSSBrbm93IGl0J3MgYSBRdWFsY29tbSBQSFksIHdoaWNoIG1lYW5zIGl0J3MgcHJvYmFibHkgbm90IGdvaW5nIHRvIGJlIHBhcnQgb2YgYSBzdGFuZGFyZCBRRU1VIHNldHVwLiBVbmxlc3MsIG9mIGNvdXJzZSwgdGhlcmUncyBleHBsaWNpdCBlbXVsYXRpb24gZm9yIGl0LCBvciB0aGUgUEhZIGZyYW1ld29yayBpdHNlbGYgb2ZmZXJzIGEgd2F5IHRvIGluc3RhbnRpYXRlIGFyYml0cmFyeSBQSFlzIHRocm91Z2ggbmV0bGluayBvciBzeXNmcy4gQnV0IHRoYXQncyB1c3VhbGx5IG5vdCBob3cgaXQgd29ya3M7IFBIWXMgYXJlIHR5cGljYWxseSBwcm9iZWQgdmlhIHRoZSBNRElPIGJ1cy5cblxuTm93LCB0aGF0IGdldHMgbWUgdGhpbmtpbmcuLi4gY2FuIEkgKmluc3RhbnRpYXRlKiBhbiBNRElPIGRldmljZSBvciBhIFBIWSBkZXZpY2UgdmlhIHN5c2ZzIG9yIG5ldGxpbms/IEhpc3RvcmljYWxseSwgTURJTyBkZXZpY2VzIGFyZSBkZXJpdmVkIGZyb20gdGhlIGRldmljZSB0cmVlIG9yIEFDUEkgb3IgYXJlIHJlZ2lzdGVyZWQgYnkgdGhlIE1BQyBkcml2ZXIuIEkgcmVtZW1iZXIgc2VlaW5nIGRyaXZlcnMgbGlrZSBgbWRpby1iY20tdW5pbWFjYCwgYG1kaW8tZ3Bpb2AsIGFuZCBgbWRpby1tb2NrdXBgLlxuXG5BaGEhIERpZG4ndCBgc3l6a2FsbGVyYCBoYXZlIHNvbWUgc3VwcG9ydCBmb3IgaW5qZWN0aW5nIE1ESU8gZGV2aWNlcyBvciBtYXliZSB1c2luZyBgbWRpby1tb2NrdXBgPyBMZXQgbWUgY2hlY2sgZm9yIGBtZGlvLW1vY2t1cGAuIFRoaXMgY291bGQgYmUgYSB2aWFibGUgcGF0aCB0byB0ZXN0aW5nIHRoYXQgZHJpdmVyIHdpdGhvdXQgYSBzcGVjaWFsaXplZCBoYXJkd2FyZSBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQzOCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMzowNToxNC40MzIwNjY1MjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODM2MTI3NzgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW8tbW9ja3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDM6MDU6MTYuNDE1Njg3MTI3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3ODA0NDE2MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSdtIGhpdHRpbmcgYSByb2FkYmxvY2suIEkgY2FuJ3Qgc2VlbSB0byBnZXQgdG8gdGhlIGBtZGlvLW1vY2t1cGAgZW52aXJvbm1lbnQgZGlyZWN0bHksIGFuZCB0aGF0J3MgbWFraW5nIHRoaW5ncyB0cmlja3kuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gdXNlIHRoZSBgcGh5bGlua2AgZnVuY3Rpb25zLCBzaW5jZSBNQUMgZHJpdmVycyBjYWxsIHRoZW0uIEJ1dCByZWFjaGluZyB0aGUgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgIG1vZGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBpcyBwcm92aW5nIGRpZmZpY3VsdC4gUGVyaGFwcyBpdCdzIG5vdCB3b3J0aCB0aGUgZWZmb3J0IGZvciBmdXp6aW5nIGlmIGl0J3MgdG9vIGN1bWJlcnNvbWUgdG8gc2V0IHVwLlxuXG5Ib2xkIG9uLCBJIGp1c3QgcmVtZW1iZXJlZDogYHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlYCBpcyBjYWxsZWQgZnJvbSBgcGh5bGlua19wY3NfbmVnX21vZGVgIGFuZCBgcGh5bGlua19zZnBfY29uZmlnX29wdGljYWxgLiBOb3cgd2UncmUgZ2V0dGluZyBzb21ld2hlcmUhIGBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbGAgaXMgY2FsbGVkIHdoZW4gYW4gU0ZQIG1vZHVsZSBnZXRzIGluc2VydGVkLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCBjYW4gSSAqc2ltdWxhdGUqIFNGUCBtb2R1bGUgaW5zZXJ0aW9uPyBUaGF0IHNlZW1zIGxpa2UgYSBtb3JlIHBsYXVzaWJsZSBwYXRoLlxuXG5UaGVyZSdzIHRoZSBgc2ZwYCBkcml2ZXIgaW4gYGRyaXZlcnMvbmV0L3BoeS9zZnAuY2AsIGJ1dCB0aGF0IHN0aWxsIGxpa2VseSBkZW1hbmRzIGVpdGhlciBoYXJkd2FyZSBvciBzb21lIHZlcnkgc3BlY2lmaWMgZW11bGF0aW9uLiBMZXQgbWUgYmFjayB1cCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgKnZpcnR1YWwqIGRyaXZlcnMgdGhhdCB1dGlsaXplIGBwaHlsaW5rYOKApiBtYXliZSBJIGNhbiBleHBsb2l0IHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMDMsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDM6MDU6MjEuMTk2MTMwOTYxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY1MTUyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5bGlua19jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYz0xMTI4PXN0YXRpYyBpbnQgYWx0ZXJhX3RzZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jLTE0MTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jOjE0MTY6XFx0cHJpdi1cXHUwMDNlcGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFxcdTAwMjZwcml2LVxcdTAwM2VwaHlsaW5rX2NvbmZpZyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmMtMTQxNy1cXHRcXHRcXHRcXHQgICAgICAgb2ZfZndub2RlX2hhbmRsZShwcml2LVxcdTAwM2VkZXZpY2UtXFx1MDAzZW9mX25vZGUpLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYz0xMDc0PXN0YXRpYyBpbnQgYWc3MXh4X3BoeWxpbmtfc2V0dXAoc3RydWN0IGFnNzF4eCAqYWcpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jLTExMDgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYzoxMTA5OlxcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcXHUwMDI2YWctXFx1MDAzZXBoeWxpbmtfY29uZmlnLCBhZy1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LmZ3bm9kZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jLTExMTAtXFx0XFx0XFx0XFx0IGFnLVxcdTAwM2VwaHlfaWZfbW9kZSwgXFx1MDAyNmFnNzF4eF9waHlsaW5rX21hY19vcHMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0xMDIzPXN0YXRpYyBpbnQgbWFjYl9taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTA4NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjEwODY6XFx0YnAtXFx1MDAzZXBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcXHUwMDI2YnAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLCBicC1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LmZ3bm9kZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTEwODctXFx0XFx0XFx0XFx0ICAgICBicC1cXHUwMDNlcGh5X2ludGVyZmFjZSwgXFx1MDAyNm1hY2JfcGh5bGlua19vcHMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEvZHBhYV9ldGguYz0yMDE9c3RhdGljIGludCBkcGFhX25ldGRldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEvZHBhYV9ldGguYy0yNzQtXFx0bWFjX2Rldi1cXHUwMDNldXBkYXRlX3NwZWVkID0gZHBhYV9ldGhfY2dyX3NldF9zcGVlZDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYS9kcGFhX2V0aC5jOjI3NTpcXHRtYWNfZGV2LVxcdTAwM2VwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXFx1MDAyNm1hY19kZXYtXFx1MDAzZXBoeWxpbmtfY29uZmlnLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhL2RwYWFfZXRoLmMtMjc2LVxcdFxcdFxcdFxcdFxcdCAgZGV2X2Z3bm9kZShtYWNfZGV2LVxcdTAwM2VkZXYpLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLW1hYy5jPTU2MD1pbnQgZHBhYTJfbWFjX2Nvbm5lY3Qoc3RydWN0IGRwYWEyX21hYyAqbWFjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLW1hYy5jLTYyNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItbWFjLmM6NjI1OlxcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcXHUwMDI2bWFjLVxcdTAwM2VwaHlsaW5rX2NvbmZpZyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItbWFjLmMtNjI2LVxcdFxcdFxcdFxcdCBkcG1hY19ub2RlLCBtYWMtXFx1MDAzZWlmX21vZGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmM9OTcxPXN0YXRpYyBpbnQgZW5ldGM0X2xpbmtfaW5pdChzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jLTk4OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmM6OTkwOlxcdGVyciA9IGVuZXRjX3BoeWxpbmtfY3JlYXRlKHByaXYsIG5vZGUsIFxcdTAwMjZlbmV0Y19wbF9tYWNfb3BzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMtOTkxLVxcdGlmIChlcnIpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMtOTkyLVxcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIGNyZWF0ZSBwaHlsaW5rXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmM6OTkzOlxcdFxcdGdvdG8gZXJyX3BoeWxpbmtfY3JlYXRlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfcGYuYy05OTQtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jLTk5Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmM6OTk4OmVycl9waHlsaW5rX2NyZWF0ZTpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMtOTk5LVxcdGVuZXRjX21kaW9idXNfZGVzdHJveShwZik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuYz04NDc9c3RhdGljIGludCBlbmV0Y19wZl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5jLTkyOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuYzo5MzA6XFx0ZXJyID0gZW5ldGNfcGh5bGlua19jcmVhdGUocHJpdiwgbm9kZSwgXFx1MDAyNmVuZXRjX21hY19waHlsaW5rX29wcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmMtOTMxLVxcdGlmIChlcnIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmM6OTMyOlxcdFxcdGdvdG8gZXJyX3BoeWxpbmtfY3JlYXRlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5jLTkzMy1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5jLTk0MS1cXHRlbmV0Y19waHlsaW5rX2Rlc3Ryb3kocHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmM6OTQyOmVycl9waHlsaW5rX2NyZWF0ZTpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuYy05NDMtXFx0ZW5ldGNfbWRpb2J1c19kZXN0cm95KHBmKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYz0zMTI9RVhQT1JUX1NZTUJPTF9HUEwoZW5ldGNfbWRpb2J1c19kZXN0cm95KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMzEzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYzozMTQ6aW50IGVuZXRjX3BoeWxpbmtfY3JlYXRlKHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMzE1LVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzICpvcHMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMzM3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYzozMzg6XFx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFxcdTAwMjZwZi1cXHUwMDNlcGh5bGlua19jb25maWcsIG9mX2Z3bm9kZV9oYW5kbGUobm9kZSksXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTMzOS1cXHRcXHRcXHRcXHQgcGYtXFx1MDAzZWlmX21vZGUsIG9wcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMzQ4LX1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmM6MzQ5OkVYUE9SVF9TWU1CT0xfR1BMKGVuZXRjX3BoeWxpbmtfY3JlYXRlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMzUwLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5oPTEyPXZvaWQgZW5ldGNfbWRpb2J1c19kZXN0cm95KHN0cnVjdCBlbmV0Y19wZiAqcGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uaDoxMzppbnQgZW5ldGNfcGh5bGlua19jcmVhdGUoc3RydWN0IGVuZXRjX25kZXZfcHJpdiAqcHJpdiwgc3RydWN0IGRldmljZV9ub2RlICpub2RlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uaC0xNC1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyAqb3BzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jPTg1Mz1zdGF0aWMgaW50IGZzX2VuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9mc19lbmV0LW1haW4uYy05MzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvZnNfZW5ldC1tYWluLmM6OTMzOlxcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcXHUwMDI2ZmVwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZywgZGV2X2Z3bm9kZShmZXAtXFx1MDAzZWRldiksXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMtOTM0LVxcdFxcdFxcdFxcdCBwaHlfbW9kZSwgXFx1MDAyNmZzX2VuZXRfcGh5bGlua19tYWNfb3BzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS91Y2NfZ2V0aC5jPTM0MTk9c3RhdGljIGludCB1Y2NfZ2V0aF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlKiBvZmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS91Y2NfZ2V0aC5jLTM1NzMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3VjY19nZXRoLmM6MzU3NDpcXHRwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXFx1MDAyNnVnZXRoLVxcdTAwM2VwaHlsaW5rX2NvbmZpZywgZGV2X2Z3bm9kZShcXHUwMDI2ZGV2LVxcdTAwM2VkZXYpLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS91Y2NfZ2V0aC5jLTM1NzUtXFx0XFx0XFx0XFx0IHBoeV9pbnRlcmZhY2UsIFxcdTAwMjZ1Z2V0aF9tYWNfb3BzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmM9NTQ4MD1zdGF0aWMgaW50IG12bmV0YV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYy01NTk4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmM6NTU5OTpcXHRwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXFx1MDAyNnBwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZywgcGRldi1cXHUwMDNlZGV2LmZ3bm9kZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jLTU2MDAtXFx0XFx0XFx0XFx0IHBoeV9tb2RlLCBcXHUwMDI2bXZuZXRhX3BoeWxpbmtfb3BzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jPTY4NDA9c3RhdGljIGludCBtdnBwMl9wb3J0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uYy03MTQ3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jOjcxNDg6XFx0XFx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFxcdTAwMjZwb3J0LVxcdTAwM2VwaHlsaW5rX2NvbmZpZywgcG9ydF9md25vZGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmMtNzE0OS1cXHRcXHRcXHRcXHRcXHQgcGh5X21vZGUsIFxcdTAwMjZtdnBwMl9waHlsaW5rX29wcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX21haW4uYz0zNzA9c3RhdGljIGludCBwcmVzdGVyYV9wb3J0X3NmcF9iaW5kKHN0cnVjdCBwcmVzdGVyYV9wb3J0ICpwb3J0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9tYWluLmMtNDE2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfbWFpbi5jOjQxNzpcXHRcXHRwaHlfbGluayA9IHBoeWxpbmtfY3JlYXRlKFxcdTAwMjZwb3J0LVxcdTAwM2VwaHlfY29uZmlnLCBmd25vZGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9tYWluLmMtNDE4LVxcdFxcdFxcdFxcdFxcdCAgUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYz00ODIzPXN0YXRpYyBpbnQgbXRrX2FkZF9tYWMoc3RydWN0IG10a19ldGggKmV0aCwgc3RydWN0IGRldmljZV9ub2RlICpucClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmMtNDk2Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jOjQ5Njg6XFx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFxcdTAwMjZtYWMtXFx1MDAzZXBoeWxpbmtfY29uZmlnLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmMtNDk2OS1cXHRcXHRcXHRcXHQgb2ZfZndub2RlX2hhbmRsZShtYWMtXFx1MDAzZW9mX25vZGUpLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19uZXRkZXYuYz03NDY9c3RydWN0IG5ldF9kZXZpY2UgKmZibmljX25ldGRldl9hbGxvYyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5jLTgzNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5jOjgzNTpcXHRpZiAoZmJuaWNfcGh5bGlua19jcmVhdGUobmV0ZGV2KSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbmV0ZGV2LmMtODM2LVxcdFxcdGZyZWVfbmV0ZGV2KG5ldGRldik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5oPTExMT1pbnQgZmJuaWNfcGh5bGlua19nZXRfZmVjcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5oLTExMi1cXHRcXHRcXHQgICAgICAgc3RydWN0IGV0aHRvb2xfZmVjcGFyYW0gKmZlY3BhcmFtKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5oOjExMzppbnQgZmJuaWNfcGh5bGlua19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19uZXRkZXYuaC0xMTQtdm9pZCBmYm5pY19waHlsaW5rX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BoeWxpbmsuYz0xNzc9c3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgZmJuaWNfcGh5bGlua19tYWNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19waHlsaW5rLmMtMTg2LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGh5bGluay5jOjE4NzogKiBmYm5pY19waHlsaW5rX2NyZWF0ZSAtIFBoeWxpbmsgZGV2aWNlIGNyZWF0aW9uXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19waHlsaW5rLmMtMTg4LSAqIEBuZXRkZXY6IE5ldHdvcmsgRGV2aWNlIHN0cnVjdCB0byBhdHRhY2ggcGh5bGluayBkZXZpY2VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGh5bGluay5jLTE5Ni0gKiovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19waHlsaW5rLmM6MTk3OmludCBmYm5pY19waHlsaW5rX2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGh5bGluay5jLTE5OC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BoeWxpbmsuYy0yMzEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19waHlsaW5rLmM6MjMyOlxcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcXHUwMDI2ZmJuLVxcdTAwM2VwaHlsaW5rX2NvbmZpZywgTlVMTCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BoeWxpbmsuYy0yMzMtXFx0XFx0XFx0XFx0IGZibmljX3BoeWxpbmtfc2VsZWN0X2ludGVyZmFjZShmYm4tXFx1MDAzZWF1aSksXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9tYWluLmM9MzE0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyBsYW43NDN4X3BoeWxpbmtfbWFjX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYy0zMTQ5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYzozMTUwOnN0YXRpYyBpbnQgbGFuNzQzeF9waHlsaW5rX2NyZWF0ZShzdHJ1Y3QgbGFuNzQzeF9hZGFwdGVyICphZGFwdGVyKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYy0zMTUxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYy0zMTkyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYzozMTkzOlxcdHBsID0gcGh5bGlua19jcmVhdGUoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXBoeWxpbmtfY29uZmlnLCBOVUxMLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYy0zMTk0LVxcdFxcdFxcdCAgICBhZGFwdGVyLVxcdTAwM2VwaHlfaW50ZXJmYWNlLCBcXHUwMDI2bGFuNzQzeF9waHlsaW5rX21hY19vcHMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjc0M3hfbWFpbi5jPTM2NjQ9c3RhdGljIGludCBsYW43NDN4X3BjaWRldl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYy0zNzIzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X21haW4uYzozNzI0OlxcdHJldCA9IGxhbjc0M3hfcGh5bGlua19jcmVhdGUoYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjc0M3hfbWFpbi5jLTM3MjUtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW45NjZ4L2xhbjk2NnhfbWFpbi5jPTc5MT1zdGF0aWMgaW50IGxhbjk2NnhfcHJvYmVfcG9ydChzdHJ1Y3QgbGFuOTY2eCAqbGFuOTY2eCwgdTMyIHAsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9sYW45NjZ4X21haW4uYy04NTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvbGFuOTY2eF9tYWluLmM6ODU2OlxcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcXHUwMDI2cG9ydC1cXHUwMDNlcGh5bGlua19jb25maWcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvbGFuOTY2eF9tYWluLmMtODU3LVxcdFxcdFxcdFxcdCBwb3J0bnAsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L3NwYXJ4NV9tYWluLmM9MzEyPXN0YXRpYyBpbnQgc3Bhcng1X2NyZWF0ZV9wb3J0KHN0cnVjdCBzcGFyeDUgKnNwYXJ4NSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvc3Bhcng1X21haW4uYy0zODgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfbWFpbi5jOjM4OTpcXHRwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXFx1MDAyNnNweDVfcG9ydC1cXHUwMDNlcGh5bGlua19jb25maWcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfbWFpbi5jLTM5MC1cXHRcXHRcXHRcXHQgb2ZfZndub2RlX2hhbmRsZShjb25maWctXFx1MDAzZW5vZGUpLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfbmV0LmM9MTc3ND1zdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyBvY2Vsb3RfcGh5bGlua19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9uZXQuYy0xNzc5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X25ldC5jOjE3ODA6c3RhdGljIGludCBvY2Vsb3RfcG9ydF9waHlsaW5rX2NyZWF0ZShzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X25ldC5jLTE3ODEtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwb3J0bnApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9uZXQuYy0xODIwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X25ldC5jOjE4MjE6XFx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFxcdTAwMjZwcml2LVxcdTAwM2VwaHlsaW5rX2NvbmZpZyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9uZXQuYy0xODIyLVxcdFxcdFxcdFxcdCBvZl9md25vZGVfaGFuZGxlKHBvcnRucCksXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9uZXQuYz0xODQzPWludCBvY2Vsb3RfcHJvYmVfcG9ydChzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QsIGludCBwb3J0LCBzdHJ1Y3QgcmVnbWFwICp0YXJnZXQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9uZXQuYy0xODc5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X25ldC5jOjE4ODA6XFx0ZXJyID0gb2NlbG90X3BvcnRfcGh5bGlua19jcmVhdGUob2NlbG90LCBwb3J0LCBwb3J0bnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X25ldC5jLTE4ODEtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9MTM3MD1zdGF0aWMgaW50IHN0bW1hY19waHlsaW5rX3NldHVwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMTQ2MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjE0NjI6XFx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKGNvbmZpZywgZGV2X2Z3bm9kZShwcml2LVxcdTAwM2VkZXZpY2UpLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMTQ2My1cXHRcXHRcXHRcXHQgcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcGh5X2ludGVyZmFjZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS90bjQwX3BoeS5jPTQ1PWludCB0bjQwX3BoeV9yZWdpc3RlcihzdHJ1Y3QgdG40MF9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL3RuNDBfcGh5LmMtNjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL3RuNDBfcGh5LmM6NjM6XFx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKGNvbmZpZywgTlVMTCwgUEhZX0lOVEVSRkFDRV9NT0RFX1hBVUksXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL3RuNDBfcGh5LmMtNjQtXFx0XFx0XFx0XFx0IFxcdTAwMjZ0bjQwX21hY19vcHMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvYW02NS1jcHN3LW51c3MuYz0yNzU3PWFtNjVfY3Bzd19udXNzX2luaXRfcG9ydF9uZGV2KHN0cnVjdCBhbTY1X2Nwc3dfY29tbW9uICpjb21tb24sIHUzMiBwb3J0X2lkeClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2FtNjUtY3Bzdy1udXNzLmMtMjg0MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9hbTY1LWNwc3ctbnVzcy5jOjI4NDI6XFx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFxcdTAwMjZwb3J0LVxcdTAwM2VzbGF2ZS5waHlsaW5rX2NvbmZpZyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9hbTY1LWNwc3ctbnVzcy5jLTI4NDMtXFx0XFx0XFx0XFx0IG9mX2Z3bm9kZV9oYW5kbGUocG9ydC1cXHUwMDNlc2xhdmUucG9ydF9ucCksXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmM9MTMwPXN0YXRpYyBpbnQgbmdiZV9waHlsaW5rX2luaXQoc3RydWN0IHd4ICp3eClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYy0xNDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jOjE1MDpcXHRwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoY29uZmlnLCBOVUxMLCBwaHlfbW9kZSwgXFx1MDAyNm5nYmVfbWFjX29wcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jLTE1MS1cXHRpZiAoSVNfRVJSKHBoeWxpbmspKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYz00ODI9aW50IHR4Z2JlX3BoeWxpbmtfaW5pdF9hbWwoc3RydWN0IHR4Z2JlICp0eGdiZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmMtNTEyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmM6NTEzOlxcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShjb25maWcsIE5VTEwsIHBoeV9tb2RlLCBcXHUwMDI2dHhnYmVfbWFjX29wc19hbWwpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmMtNTE0LVxcdGlmIChJU19FUlIocGh5bGluaykpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jPTI2OD1zdGF0aWMgaW50IHR4Z2JlX3BoeWxpbmtfaW5pdChzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0yOTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzoyOTM6XFx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKGNvbmZpZywgZndub2RlLCBwaHlfbW9kZSwgXFx1MDAyNnR4Z2JlX21hY19vcHMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMjk0LVxcdGlmIChJU19FUlIocGh5bGluaykpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfbWFpbi5jPTI3OTU9c3RhdGljIGludCBheGllbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfbWFpbi5jLTMxMTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X21haW4uYzozMTE4OlxcdGxwLVxcdTAwM2VwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXFx1MDAyNmxwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZywgcGRldi1cXHUwMDNlZGV2LmZ3bm9kZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfbWFpbi5jLTMxMTktXFx0XFx0XFx0XFx0ICAgICBscC1cXHUwMDNlcGh5X21vZGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfbWFpbi5jLTMxMjItXFx0XFx0cmV0ID0gUFRSX0VSUihscC1cXHUwMDNlcGh5bGluayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X21haW4uYzozMTIzOlxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcInBoeWxpbmtfY3JlYXRlIGVycm9yICglaSlcXFxcblxcXCIsIHJldCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X21haW4uYy0zMTI0LVxcdFxcdGdvdG8gY2xlYW51cF9tZGlvO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz01MTY9c3RhdGljIGludCBwaHlsaW5rX3ZhbGlkYXRlX21hY19hbmRfcGNzKHN0cnVjdCBwaHlsaW5rICpwbCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNTMxLVxcdGlmIChwY3MpIHtcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjUzMjpcXHRcXHQvKiBUaGUgUENTLCBpZiBwcmVzZW50LCBtdXN0IGJlIHNldHVwIGJlZm9yZSBwaHlsaW5rX2NyZWF0ZSgpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy01MzMtXFx0XFx0ICogaGFzIGJlZW4gY2FsbGVkLiBJZiB0aGUgb3BzIGlzIG5vdCBpbml0aWFsaXNlZCwgcHJpbnQgYW5cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTAzOT1zdGF0aWMgZW51bSBpbmJhbmRfdHlwZSBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZShwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xMDcxLSAqIHBoeWxpbmtfcGNzX25lZ19tb2RlKCkgLSBoZWxwZXIgdG8gZGV0ZXJtaW5lIFBDUyBpbmJhbmQgbW9kZVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTA3MjogKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwNzMtICogQHBjczogYSBwb2ludGVyIHRvIFxcdTAwMjZzdHJ1Y3QgcGh5bGlua19wY3NcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTc2OT1zdGF0aWMgaW50IHBoeWxpbmtfcmVnaXN0ZXJfc2ZwKHN0cnVjdCBwaHlsaW5rICpwbCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTc5My0gKiBwaHlsaW5rX3NldF9maXhlZF9saW5rKCkgLSBzZXQgdGhlIGZpeGVkIGxpbmtcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE3OTQ6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xNzk1LSAqIEBzdGF0ZTogYSBwb2ludGVyIHRvIGEgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZS5cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTgzMT1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3NldF9maXhlZF9saW5rKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTgzMy0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE4MzQ6ICogcGh5bGlua19jcmVhdGUoKSAtIGNyZWF0ZSBhIHBoeWxpbmsgaW5zdGFuY2VcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE4MzUtICogQGNvbmZpZzogYSBwb2ludGVyIHRvIHRoZSB0YXJnZXQgXFx1MDAyNnN0cnVjdCBwaHlsaW5rX2NvbmZpZ1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xODQ4LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTg0OTpzdHJ1Y3QgcGh5bGluayAqcGh5bGlua19jcmVhdGUoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xODUwLVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xOTM2LX1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE5Mzc6RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19jcmVhdGUpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTkzOC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTk0MC0gKiBwaHlsaW5rX2Rlc3Ryb3koKSAtIGNsZWFudXAgYW5kIGRlc3Ryb3kgdGhlIHBoeWxpbmsgaW5zdGFuY2VcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE5NDE6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xOTQyLSAqXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTE5NTc9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19kZXN0cm95KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTk2MC0gKiBwaHlsaW5rX2V4cGVjdHNfcGh5KCkgLSBEZXRlcm1pbmUgaWYgcGh5bGluayBleHBlY3RzIGEgcGh5IHRvIGJlIGF0dGFjaGVkXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxOTYxOiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTk2Mi0gKlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yMjA2PXN0YXRpYyBpbnQgcGh5bGlua19hdHRhY2hfcGh5KHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjIyNi0gKiBwaHlsaW5rX2Nvbm5lY3RfcGh5KCkgLSBjb25uZWN0IGEgUEhZIHRvIHRoZSBwaHlsaW5rIGluc3RhbmNlXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyMjI3OiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjIyOC0gKiBAcGh5OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2UuXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTIyNjA9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19jb25uZWN0X3BoeSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIyNjMtICogcGh5bGlua19vZl9waHlfY29ubmVjdCgpIC0gY29ubmVjdCB0aGUgUEhZIHNwZWNpZmllZCBpbiB0aGUgRFQgbW9kZS5cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjIyNjQ6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMjY1LSAqIEBkbjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBkZXZpY2Vfbm9kZS5cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjI3OT1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX29mX3BoeV9jb25uZWN0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjI4Mi0gKiBwaHlsaW5rX2Z3bm9kZV9waHlfY29ubmVjdCgpIC0gY29ubmVjdCB0aGUgUEhZIHNwZWNpZmllZCBpbiB0aGUgZndub2RlLlxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjI4MzogKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIyODQtICogQGZ3bm9kZTogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBmd25vZGVfaGFuZGxlLlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yMzM4PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZndub2RlX3BoeV9jb25uZWN0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjM0Mi0gKiAgIGluc3RhbmNlLlxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjM0MzogKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIzNDQtICpcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjM3Mz1zdGF0aWMgdm9pZCBwaHlsaW5rX2xpbmtfY2hhbmdlZChzdHJ1Y3QgcGh5bGluayAqcGwsIGJvb2wgdXAsIGNvbnN0IGNoYXIgKndoYXQpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIzODItICogcGh5bGlua19tYWNfY2hhbmdlKCkgLSBub3RpZnkgcGh5bGluayBvZiBhIGNoYW5nZSBpbiBNQUMgc3RhdGVcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjIzODM6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMzg0LSAqIEB1cDogaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGxpbmsgaXMgY3VycmVudGx5IHVwLlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yNDE1PXN0YXRpYyBpcnFyZXR1cm5fdCBwaHlsaW5rX2xpbmtfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNDI1LSAqIHBoeWxpbmtfc3RhcnQoKSAtIHN0YXJ0IGEgcGh5bGluayBpbnN0YW5jZVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjQyNjogKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI0MjctICpcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjQ4OD1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3N0YXJ0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjQ5MS0gKiBwaHlsaW5rX3N0b3AoKSAtIHN0b3AgYSBwaHlsaW5rIGluc3RhbmNlXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNDkyOiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjQ5My0gKlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yNTIyPUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfc3RvcCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI1MjUtICogcGh5bGlua19yeF9jbGtfc3RvcF9ibG9jaygpIC0gYmxvY2sgUEhZIGFiaWxpdHkgdG8gc3RvcCByZWNlaXZlIGNsb2NrIGluIExQSVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjUyNjogKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI1MjctICpcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjU1MT1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3J4X2Nsa19zdG9wX2Jsb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjU1NC0gKiBwaHlsaW5rX3J4X2Nsa19zdG9wX3VuYmxvY2soKSAtIHVuYmxvY2sgUEhZIGFiaWxpdHkgdG8gc3RvcCByZWNlaXZlIGNsb2NrXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNTU1OiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjU1Ni0gKlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yNTkzPXN0YXRpYyBib29sIHBoeWxpbmtfcGh5X3BtX3NwZWVkX2N0cmwoc3RydWN0IHBoeWxpbmsgKnBsKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNjAwLSAqIHBoeWxpbmtfc3VzcGVuZCgpIC0gaGFuZGxlIGEgbmV0d29yayBkZXZpY2Ugc3VzcGVuZCBldmVudFxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjYwMTogKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI2MDItICogQG1hY193b2w6IHRydWUgaWYgdGhlIE1BQyBuZWVkcyB0byByZWNlaXZlIHBhY2tldHMgZm9yIFdha2Utb24tTGFuXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI2NTI9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19zdXNwZW5kKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjY1NS0gKiBwaHlsaW5rX3ByZXBhcmVfcmVzdW1lKCkgLSBwcmVwYXJlIHRvIHJlc3VtZSBhIG5ldHdvcmsgZGV2aWNlXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNjU2OiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjY1Ny0gKlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yNjc3PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfcHJlcGFyZV9yZXN1bWUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNjgwLSAqIHBoeWxpbmtfcmVzdW1lKCkgLSBoYW5kbGUgYSBuZXR3b3JrIGRldmljZSByZXN1bWUgZXZlbnRcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI2ODE6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNjgyLSAqXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI3MjA9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19yZXN1bWUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNzIzLSAqIHBoeWxpbmtfZXRodG9vbF9nZXRfd29sKCkgLSBnZXQgdGhlIHdha2Ugb24gbGFuIHBhcmFtZXRlcnMgZm9yIHRoZSBQSFlcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI3MjQ6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNzI1LSAqIEB3b2w6IGEgcG9pbnRlciB0byBcXHUwMDI2c3RydWN0IGV0aHRvb2xfd29saW5mbyB0byBob2xkIHRoZSByZWFkIHBhcmFtZXRlcnNcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9Mjc1Nz1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2V0aHRvb2xfZ2V0X3dvbCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI3NjAtICogcGh5bGlua19ldGh0b29sX3NldF93b2woKSAtIHNldCB3YWtlIG9uIGxhbiBwYXJhbWV0ZXJzXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNzYxOiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjc2Mi0gKiBAd29sOiBhIHBvaW50ZXIgdG8gXFx1MDAyNnN0cnVjdCBldGh0b29sX3dvbGluZm8gZm9yIHRoZSBkZXNpcmVkIHBhcmFtZXRlcnNcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9Mjg4OT1zdGF0aWMgdm9pZCBwaHlsaW5rX2dldF9rc2V0dGluZ3MoY29uc3Qgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI5MDQtICogcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19nZXQoKSAtIGdldCB0aGUgY3VycmVudCBsaW5rIHNldHRpbmdzXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyOTA1OiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjkwNi0gKiBAa3NldDogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIHRvIGhvbGQgbGluayBzZXR0aW5nc1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yOTU3PXN0YXRpYyBib29sIHBoeWxpbmtfdmFsaWRhdGVfcGNzX2luYmFuZF9hdXRvbmVnKHN0cnVjdCBwaHlsaW5rICpwbCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjk3OC0gKiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldCgpIC0gc2V0IHRoZSBsaW5rIHNldHRpbmdzXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyOTc5OiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjk4MC0gKiBAa3NldDogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGZvciB0aGUgZGVzaXJlZCBtb2Rlc1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMTQ1PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzE0OC0gKiBwaHlsaW5rX2V0aHRvb2xfbndheV9yZXNldCgpIC0gcmVzdGFydCBuZWdvdGlhdGlvblxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzE0OTogKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMxNTAtICpcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzE3MD1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2V0aHRvb2xfbndheV9yZXNldCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMxNzMtICogcGh5bGlua19ldGh0b29sX2dldF9wYXVzZXBhcmFtKCkgLSBnZXQgdGhlIGN1cnJlbnQgcGF1c2UgcGFyYW1ldGVyc1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzE3NDogKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMxNzUtICogQHBhdXNlOiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMTg2PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZXRodG9vbF9nZXRfcGF1c2VwYXJhbSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMxODktICogcGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtKCkgLSBzZXQgdGhlIGN1cnJlbnQgcGF1c2UgcGFyYW1ldGVyc1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzE5MDogKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMxOTEtICogQHBhdXNlOiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMjcyPUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMyNzYtICogICBjb3VudGVyXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozMjc3OiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKS5cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMyNzgtICpcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzI5NT1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2dldF9lZWVfZXJyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzI5OC0gKiBwaHlsaW5rX2V0aHRvb2xfZ2V0X2VlZSgpIC0gcmVhZCB0aGUgZW5lcmd5IGVmZmljaWVudCBldGhlcm5ldCBwYXJhbWV0ZXJzXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozMjk5OiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzMwMC0gKiBAZWVlOiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IGV0aHRvb2xfa2VlZSBmb3IgdGhlIHJlYWQgcGFyYW1ldGVyc1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMzIxPUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZXRodG9vbF9nZXRfZWVlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzMyNC0gKiBwaHlsaW5rX2V0aHRvb2xfc2V0X2VlZSgpIC0gc2V0IHRoZSBlbmVyZ3kgZWZmaWNpZW50IGV0aGVybmV0IHBhcmFtZXRlcnNcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjMzMjU6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzI2LSAqIEBlZWU6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgZXRodG9vbF9rZWVlIGZvciB0aGUgZGVzaXJlZCBwYXJhbWV0ZXJzXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTM0OTU9c3RhdGljIGludCBwaHlsaW5rX21paV93cml0ZShzdHJ1Y3QgcGh5bGluayAqcGwsIHVuc2lnbmVkIGludCBwaHlfaWQsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTM1MTMtICogcGh5bGlua19taWlfaW9jdGwoKSAtIGdlbmVyaWMgbWlpIGlvY3RsIGludGVyZmFjZVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzUxNDogKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTM1MTUtICogQGlmcjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBpZnJlcSBmb3Igc29ja2V0IGlvY3Rsc1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zNTg4PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfbWlpX2lvY3RsKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzU5Mi0gKiAgIGxpbmsgcGFydG5lcnNcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjM1OTM6ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zNTk0LSAqIEBzeW5jOiBwZXJmb3JtIGFjdGlvbiBzeW5jaHJvbm91c2x5XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTM2MTM9RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19zcGVlZF9kb3duKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzYxNy0gKiAgIHBoeWxpbmtfc3BlZWRfZG93bigpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozNjE4OiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzYxOS0gKlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz00MzcwPUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfbWlpX2M0NV9wY3NfZ2V0X3N0YXRlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDM3NC0gKlxcdFxcdFxcdFxcdCB3aGljaCBsb3NlcyBzdGF0ZVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6NDM3NTogKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTQzNzYtICpcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9NDM5MT1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3JlcGxheV9saW5rX2JlZ2luKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDM5NS0gKlxcdFxcdFxcdCAgICAgICB3aGljaCBsb3N0IHN0YXRlXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzo0Mzk2OiAqIEBwbDogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtNDM5Ny0gKlxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTc5OT1zdGF0aWMgaW50IGF4ODg3NzJfcGh5bGlua19zZXR1cChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtODE5LVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo4MjA6XFx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFxcdTAwMjZwcml2LVxcdTAwM2VwaHlsaW5rX2NvbmZpZywgZGV2LVxcdTAwM2VuZXQtXFx1MDAzZWRldi5md25vZGUsXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTgyMS1cXHRcXHRcXHRcXHQgcGh5X2lmX21vZGUsIFxcdTAwMjZheDg4NzcyX3BoeWxpbmtfbWFjX29wcyk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTI3OTk9c3RhdGljIGludCBsYW43OHh4X3BoeWxpbmtfc2V0dXAoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTI4MzgtXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyODM5OlxcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShwYywgZGV2LVxcdTAwM2VuZXQtXFx1MDAzZWRldi5md25vZGUsXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yODQwLVxcdFxcdFxcdFxcdCBkZXYtXFx1MDAzZWludGVyZmFjZSwgXFx1MDAyNmxhbjc4eHhfcGh5bGlua19tYWNfb3BzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDM6MDU6MjEuMzMyNjUwMzIxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2MDc4NjY4MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJIFN1cHBvcnQqKlxuXG5Pa2F5LCBzbyBgcGh5bGlua19jcmVhdGVgIGlzIGEgcHJldHR5IHdpZGVseSB1c2VkIGZ1bmN0aW9uLCBjYWxsZWQgYnkgYSBidW5jaCBvZiBuZXR3b3JrIGRyaXZlcnM6IGBsYW43OHh4YCwgYGFzaXhfZGV2aWNlc2AsIGBzdG1tYWNgLCB0aGUgd2hvbGUgbGlzdC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBjYW4gKmFueSogb2YgdGhlc2UgZHJpdmVycyBhY3R1YWxseSBjb25maWd1cmUgYSBQSFkgdXNpbmcgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgPyBUaGF0J3Mgd2hhdCBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQuXG5cblJpZ2h0LCBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAgaXMgZWl0aGVyIGFuIGFyZ3VtZW50IHRvIGBwaHlsaW5rX2NyZWF0ZWAgKm9yKiBpdCdzIHNldCBsYXRlciB2aWEgYHBoeWxpbmtfc2V0X3BvcnRfbW9kZXNgLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gc2VlIGlmIHRoZXNlIGRyaXZlcnMgZXZlbiAqc3VwcG9ydCogdGhhdCBtb2RlLiBJIGtub3cgSSBhbHJlYWR5IGdyZXBwZWQgdGhlIGBkcml2ZXJzL25ldC9gIGRpcmVjdG9yeSBmb3IgaXQuIExldCdzIHNlZS4uLiB0aGUgZ3JlcCByZXN1bHRzIHdlcmUgcHJldHR5IHVuaW50ZXJlc3Rpbmc7IGBwaHktY29yZS5jYCwgYHBoeV9jYXBzLmNgLCBhbmQgYHBoeWxpbmsuY2AgYW5kIGBxY2E4MDd4LmNgLiBTbyB0aGUgZHJpdmVyIHNlZW1zIGxpa2UgaXQgaXNuJ3QgZGlyZWN0bHkgc3VwcG9ydGluZyB0aGlzLlxuXG5JZiBubyBNQUMgZHJpdmVyIGV4cGxpY2l0bHkgc3VwcG9ydHMgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgLCBob3cgY291bGQgaXQgcG9zc2libHkgYmUgcmVhY2hlZD8gVGhhdCdzIHRoZSByZWFsIHB1enpsZS4gQWhhLCBtYXliZSBpdCdzIHBhcnNlZCBmcm9tIHRoZSBkZXZpY2UgdHJlZT8gSW4gYHBoeWxpbmtfcGFyc2VfbW9kZWAsIGl0IGxvb2tzIGxpa2UgYHBoeS1tb2RlYCBpcyBwYXJzZWQgZnJvbSB0aGUgZGV2aWNlIHRyZWUsIHRoYXQgbWlnaHQgZG8gdGhlIHRyaWNrLiBJZiBJIGNvdWxkIGluamVjdCBhIGRldmljZSB0cmVlIG5vZGUgd2l0aCBgcGh5LW1vZGUgPSBcInBzZ21paVwiYCwgdGhlbiBgcGh5bGlua19jcmVhdGVgICptaWdodCogcGFyc2UgaXQgYW5kIHNldCBgcGwtXHUwMDNlbGlua19jb25maWcuaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAuXG5cbk5vdywgd2FpdCBhIG1pbnV0ZSwgYHBoeWxpbmtfY3JlYXRlYCB0YWtlcyBhbiBgcGh5X2ludGVyZmFjZV90IGlmYWNlYCBhcmd1bWVudC4gSWYgdGhhdCBhcmd1bWVudCBpcyBgUEhZX0lOVEVSRkFDRV9NT0RFX05BYCwgdGhlbiBpdCBtaWdodCBwYXJzZSBpdCBmcm9tIHRoZSBmd25vZGUuIE9rYXksIHNvIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gbG9vayBjbG9zZXIuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGNvZGUgYXJvdW5kIGBwaHlsaW5rX2NyZWF0ZWAgZm9yIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDMzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAzOjA1OjI4Ljk0MDUxOTc2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NzY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NDksXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NDk6XFx0c3RydWN0IHBoeWxpbmsgKnBoeWxpbmtfY3JlYXRlKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxcbjE4NTA6XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsXFxuMTg1MTpcXHRcXHRcXHRcXHQgICAgICAgcGh5X2ludGVyZmFjZV90IGlmYWNlLFxcbjE4NTI6XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgKm1hY19vcHMpXFxuMTg1MzpcXHR7XFxuMTg1NDpcXHRcXHRzdHJ1Y3QgcGh5bGluayAqcGw7XFxuMTg1NTpcXHRcXHRpbnQgcmV0O1xcbjE4NTY6XFx0XFxuMTg1NzpcXHRcXHQvKiBWYWxpZGF0ZSB0aGUgc3VwcGxpZWQgY29uZmlndXJhdGlvbiAqL1xcbjE4NTg6XFx0XFx0aWYgKHBoeV9pbnRlcmZhY2VfZW1wdHkoY29uZmlnLVxcdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcykpIHtcXG4xODU5OlxcdFxcdFxcdGRldl9lcnIoY29uZmlnLVxcdTAwM2VkZXYsXFxuMTg2MDpcXHRcXHRcXHRcXHRcXFwicGh5bGluazogZXJyb3I6IGVtcHR5IHN1cHBvcnRlZF9pbnRlcmZhY2VzXFxcXG5cXFwiKTtcXG4xODYxOlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbjE4NjI6XFx0XFx0fVxcbjE4NjM6XFx0XFxuMTg2NDpcXHRcXHRwbCA9IGt6YWxsb2Nfb2JqKCpwbCk7XFxuMTg2NTpcXHRcXHRpZiAoIXBsKVxcbjE4NjY6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuMTg2NzpcXHRcXG4xODY4OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNnBsLVxcdTAwM2VwaHlkZXZfbXV0ZXgpO1xcbjE4Njk6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2cGwtXFx1MDAzZXN0YXRlX211dGV4KTtcXG4xODcwOlxcdFxcdElOSVRfV09SSyhcXHUwMDI2cGwtXFx1MDAzZXJlc29sdmUsIHBoeWxpbmtfcmVzb2x2ZSk7XFxuMTg3MTpcXHRcXG4xODcyOlxcdFxcdHBsLVxcdTAwM2Vjb25maWcgPSBjb25maWc7XFxuMTg3MzpcXHRcXHRpZiAoY29uZmlnLVxcdTAwM2V0eXBlID09IFBIWUxJTktfTkVUREVWKSB7XFxuMTg3NDpcXHRcXHRcXHRwbC1cXHUwMDNlbmV0ZGV2ID0gdG9fbmV0X2Rldihjb25maWctXFx1MDAzZWRldik7XFxuMTg3NTpcXHRcXHRcXHRuZXRpZl9jYXJyaWVyX29mZihwbC1cXHUwMDNlbmV0ZGV2KTtcXG4xODc2OlxcdFxcdH0gZWxzZSBpZiAoY29uZmlnLVxcdTAwM2V0eXBlID09IFBIWUxJTktfREVWKSB7XFxuMTg3NzpcXHRcXHRcXHRwbC1cXHUwMDNlZGV2ID0gY29uZmlnLVxcdTAwM2VkZXY7XFxuMTg3ODpcXHRcXHR9IGVsc2Uge1xcbjE4Nzk6XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4xODgwOlxcdFxcdFxcdGdvdG8gZnJlZV9wbDtcXG4xODgxOlxcdFxcdH1cXG4xODgyOlxcdFxcbjE4ODM6XFx0XFx0cGwtXFx1MDAzZW1hY19zdXBwb3J0c19lZWVfb3BzID0gcGh5bGlua19tYWNfaW1wbGVtZW50c19scGkobWFjX29wcyk7XFxuMTg4NDpcXHRcXHRwbC1cXHUwMDNlbWFjX3N1cHBvcnRzX2VlZSA9IHBsLVxcdTAwM2VtYWNfc3VwcG9ydHNfZWVlX29wcyBcXHUwMDI2XFx1MDAyNlxcbjE4ODU6XFx0XFx0XFx0XFx0ICAgICAgIHBsLVxcdTAwM2Vjb25maWctXFx1MDAzZWxwaV9jYXBhYmlsaXRpZXMgXFx1MDAyNlxcdTAwMjZcXG4xODg2OlxcdFxcdFxcdFxcdCAgICAgICAhcGh5X2ludGVyZmFjZV9lbXB0eShwbC1cXHUwMDNlY29uZmlnLVxcdTAwM2VscGlfaW50ZXJmYWNlcyk7XFxuMTg4NzpcXHRcXG4xODg4OlxcdFxcdC8qIFNldCB0aGUgZGVmYXVsdCBFRUUgY29uZmlndXJhdGlvbiAqL1xcbjE4ODk6XFx0XFx0cGwtXFx1MDAzZWVlZV9jZmcuZWVlX2VuYWJsZWQgPSBwbC1cXHUwMDNlY29uZmlnLVxcdTAwM2VlZWVfZW5hYmxlZF9kZWZhdWx0O1xcbjE4OTA6XFx0XFx0cGwtXFx1MDAzZWVlZV9jZmcudHhfbHBpX2VuYWJsZWQgPSBwbC1cXHUwMDNlZWVlX2NmZy5lZWVfZW5hYmxlZDtcXG4xODkxOlxcdFxcdHBsLVxcdTAwM2VlZWVfY2ZnLnR4X2xwaV90aW1lciA9IHBsLVxcdTAwM2Vjb25maWctXFx1MDAzZWxwaV90aW1lcl9kZWZhdWx0O1xcbjE4OTI6XFx0XFxuMTg5MzpcXHRcXHRwbC1cXHUwMDNlcGh5X3N0YXRlLmludGVyZmFjZSA9IGlmYWNlO1xcbjE4OTQ6XFx0XFx0cGwtXFx1MDAzZWxpbmtfaW50ZXJmYWNlID0gaWZhY2U7XFxuMTg5NTpcXHRcXHRpZiAoaWZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX01PQ0EpXFxuMTg5NjpcXHRcXHRcXHRwbC1cXHUwMDNlbGlua19wb3J0ID0gUE9SVF9CTkM7XFxuMTg5NzpcXHRcXHRlbHNlXFxuMTg5ODpcXHRcXHRcXHRwbC1cXHUwMDNlbGlua19wb3J0ID0gUE9SVF9NSUk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAzOjA1OjI4Ljk0MDc3OTIzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTAxMjA4OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQaHlMaW5rIENyZWF0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBgcGh5bGlua19jcmVhdGVgIGlzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgYSBQaHlMaW5rIHN0cnVjdHVyZS4gSSBzZWUgaXQgdGFrZXMgYW4gYGlmYWNlYCBhcmd1bWVudCBhbmQgaW1tZWRpYXRlbHkgc2V0cyB0aGUgYHBsLVx1MDAzZXBoeV9zdGF0ZS5pbnRlcmZhY2VgIG1lbWJlciB0byB0aGF0IHZhbHVlLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDsgaXQncyBhc3NvY2lhdGluZyB0aGUgUGh5TGluayB3aXRoIGEgc3BlY2lmaWMgbmV0d29yayBpbnRlcmZhY2UuIE5vdywgdGhlIG5leHQgc3RlcCBpbiB0aGUgZmxvdyBpcyBjYWxsaW5nIGBwaHlsaW5rX3BhcnNlX21vZGVgIHdpdGggdGhlIFBoeUxpbmsgc3RydWN0dXJlIGFuZCBhIGZpcm13YXJlIG5vZGUgKGBmd25vZGVgKS4gVGhpcyBgcGh5bGlua19wYXJzZV9tb2RlYCBjYWxsIGlzIGNyaXRpY2FsIGJlY2F1c2UgdGhpcyBpcyB3aGVyZSB0aGUgbGluaydzIG9wZXJhdGluZyBwYXJhbWV0ZXJzIG11c3QgYmUgZGV0ZXJtaW5lZC4gSXTigJlzIHdoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlIG5leHQgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhlIFBoeUxpbmsgZ2V0cyBjb25maWd1cmVkIGFmdGVyIGNyZWF0aW9uLiBMZXTigJlzIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTM1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMzowNTozMi4xNTA5MDMxMDZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxNzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzc0LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzc0OlxcdHN0YXRpYyBpbnQgcGh5bGlua19wYXJzZV9tb2RlKHN0cnVjdCBwaHlsaW5rICpwbCxcXG4gNzc1OlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXFxuIDc3NjpcXHR7XFxuIDc3NzpcXHRcXHRzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZG47XFxuIDc3ODpcXHRcXHRjb25zdCBjaGFyICptYW5hZ2VkO1xcbiA3Nzk6XFx0XFx0dW5zaWduZWQgbG9uZyBjYXBzO1xcbiA3ODA6XFx0XFxuIDc4MTpcXHRcXHRpZiAocGwtXFx1MDAzZWNvbmZpZy1cXHUwMDNlZGVmYXVsdF9hbl9pbmJhbmQpXFxuIDc4MjpcXHRcXHRcXHRwbC1cXHUwMDNlY2ZnX2xpbmtfYW5fbW9kZSA9IE1MT19BTl9JTkJBTkQ7XFxuIDc4MzpcXHRcXG4gNzg0OlxcdFxcdGRuID0gZndub2RlX2dldF9uYW1lZF9jaGlsZF9ub2RlKGZ3bm9kZSwgXFxcImZpeGVkLWxpbmtcXFwiKTtcXG4gNzg1OlxcdFxcdGlmIChkbiB8fCBmd25vZGVfcHJvcGVydHlfcHJlc2VudChmd25vZGUsIFxcXCJmaXhlZC1saW5rXFxcIikpXFxuIDc4NjpcXHRcXHRcXHRwbC1cXHUwMDNlY2ZnX2xpbmtfYW5fbW9kZSA9IE1MT19BTl9GSVhFRDtcXG4gNzg3OlxcdFxcdGZ3bm9kZV9oYW5kbGVfcHV0KGRuKTtcXG4gNzg4OlxcdFxcbiA3ODk6XFx0XFx0aWYgKChmd25vZGVfcHJvcGVydHlfcmVhZF9zdHJpbmcoZndub2RlLCBcXFwibWFuYWdlZFxcXCIsIFxcdTAwMjZtYW5hZ2VkKSA9PSAwIFxcdTAwMjZcXHUwMDI2XFxuIDc5MDpcXHRcXHQgICAgIHN0cmNtcChtYW5hZ2VkLCBcXFwiaW4tYmFuZC1zdGF0dXNcXFwiKSA9PSAwKSkge1xcbiA3OTE6XFx0XFx0XFx0aWYgKHBsLVxcdTAwM2VjZmdfbGlua19hbl9tb2RlID09IE1MT19BTl9GSVhFRCkge1xcbiA3OTI6XFx0XFx0XFx0XFx0cGh5bGlua19lcnIocGwsXFxuIDc5MzpcXHRcXHRcXHRcXHRcXHQgICAgXFxcImNhbid0IHVzZSBib3RoIGZpeGVkLWxpbmsgYW5kIGluLWJhbmQtc3RhdHVzXFxcXG5cXFwiKTtcXG4gNzk0OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3OTU6XFx0XFx0XFx0fVxcbiA3OTY6XFx0XFxuIDc5NzpcXHRcXHRcXHRwbC1cXHUwMDNlY2ZnX2xpbmtfYW5fbW9kZSA9IE1MT19BTl9JTkJBTkQ7XFxuIDc5ODpcXHRcXHR9XFxuIDc5OTpcXHRcXG4gODAwOlxcdFxcdGlmIChwbC1cXHUwMDNlY2ZnX2xpbmtfYW5fbW9kZSA9PSBNTE9fQU5fSU5CQU5EKSB7XFxuIDgwMTpcXHRcXHRcXHRsaW5rbW9kZV96ZXJvKHBsLVxcdTAwM2VzdXBwb3J0ZWQpO1xcbiA4MDI6XFx0XFx0XFx0cGh5bGlua19zZXQocGwtXFx1MDAzZXN1cHBvcnRlZCwgTUlJKTtcXG4gODAzOlxcdFxcdFxcdHBoeWxpbmtfc2V0KHBsLVxcdTAwM2VzdXBwb3J0ZWQsIEF1dG9uZWcpO1xcbiA4MDQ6XFx0XFx0XFx0cGh5bGlua19zZXQocGwtXFx1MDAzZXN1cHBvcnRlZCwgQXN5bV9QYXVzZSk7XFxuIDgwNTpcXHRcXHRcXHRwaHlsaW5rX3NldChwbC1cXHUwMDNlc3VwcG9ydGVkLCBQYXVzZSk7XFxuIDgwNjpcXHRcXG4gODA3OlxcdFxcdFxcdHN3aXRjaCAocGwtXFx1MDAzZWxpbmtfY29uZmlnLmludGVyZmFjZSkge1xcbiA4MDg6XFx0XFx0XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XFxuIDgwOTpcXHRcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XFxuIDgxMDpcXHRcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XFxuIDgxMTpcXHRcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RVVNHTUlJOlxcbiA4MTI6XFx0XFx0XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk6XFxuIDgxMzpcXHRcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9JRDpcXG4gODE0OlxcdFxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1JYSUQ6XFxuIDgxNTpcXHRcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9UWElEOlxcbiA4MTY6XFx0XFx0XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUlRCSTpcXG4gODE3OlxcdFxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWDpcXG4gODE4OlxcdFxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWDpcXG4gODE5OlxcdFxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzVHQkFTRVI6XFxuIDgyMDpcXHRcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8yNUdCQVNFUjpcXG4gODIxOlxcdFxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk6XFxuIDgyMjpcXHRcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdfUVhHTUlJOlxcbiA4MjM6XFx0XFx0XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTBHS1I6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAzOjA1OjMyLjE1MTA5NTk2NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDUwOTI3NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgdGhlIFBoeWxpbmsgSW50ZXJmYWNlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBwaHlsaW5rX3BhcnNlX21vZGVgIGZ1bmN0aW9uIGFuZCBpdCdzIHVzaW5nIGBwbC1cdTAwM2VsaW5rX2NvbmZpZy5pbnRlcmZhY2VgLiBSaWdodCwgcmlnaHQsIG1ha2VzIHNlbnNlLiBCdXQgdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0J3MgcG9wcGVkIGludG8gbXkgaGVhZCBpcyAqd2hlcmUqIGlzIHRoYXQgYHBsLVx1MDAzZWxpbmtfY29uZmlnLmludGVyZmFjZWAgdmFyaWFibGUgYWN0dWFsbHkgZ2V0dGluZyBzZXQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cgaGVyZS4gTGV0J3MgYmFja3RyYWNrIGFuZCByZXZpc2l0IGBwaHlsaW5rX2NyZWF0ZWAuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgcmUtZXhhbWluZSB0aGF0IGZ1bmN0aW9uIGFuZCBzZWUgaWYgdGhlIGluaXRpYWxpemF0aW9uIG9yIGFzc2lnbm1lbnQgdG8gdGhpcyBwYXJ0aWN1bGFyIGZpZWxkIGlzIGhhbmRsZWQgdGhlcmUuIEknbSBnb2luZyB0byBtZXRpY3Vsb3VzbHkgY2hlY2sgZXZlcnkgbGluZSBvZiB0aGF0IGZ1bmN0aW9uIHRvIG1ha2Ugc3VyZSB0aGF0IGZpZWxkIGlzIGJlaW5nIGNvcnJlY3RseSBhc3NpZ25lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzMDksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAzOjA1OjM1LjIwMjAyNjA2NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODk5LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODk5OlxcdFxcdHBsLVxcdTAwM2VsaW5rX2NvbmZpZy5pbnRlcmZhY2UgPSBpZmFjZTtcXG4xOTAwOlxcdFxcdHBsLVxcdTAwM2VsaW5rX2NvbmZpZy5wYXVzZSA9IE1MT19QQVVTRV9BTjtcXG4xOTAxOlxcdFxcdHBsLVxcdTAwM2VsaW5rX2NvbmZpZy5zcGVlZCA9IFNQRUVEX1VOS05PV047XFxuMTkwMjpcXHRcXHRwbC1cXHUwMDNlbGlua19jb25maWcuZHVwbGV4ID0gRFVQTEVYX1VOS05PV047XFxuMTkwMzpcXHRcXHRwbC1cXHUwMDNlcGNzX3N0YXRlID0gUENTX1NUQVRFX0RPV047XFxuMTkwNDpcXHRcXHRwbC1cXHUwMDNlbWFjX29wcyA9IG1hY19vcHM7XFxuMTkwNTpcXHRcXHRfX3NldF9iaXQoUEhZTElOS19ESVNBQkxFX1NUT1BQRUQsIFxcdTAwMjZwbC1cXHUwMDNlcGh5bGlua19kaXNhYmxlX3N0YXRlKTtcXG4xOTA2OlxcdFxcdHRpbWVyX3NldHVwKFxcdTAwMjZwbC1cXHUwMDNlbGlua19wb2xsLCBwaHlsaW5rX2ZpeGVkX3BvbGwsIDApO1xcbjE5MDc6XFx0XFxuMTkwODpcXHRcXHRsaW5rbW9kZV9maWxsKHBsLVxcdTAwM2VzdXBwb3J0ZWQpO1xcbjE5MDk6XFx0XFx0bGlua21vZGVfY29weShwbC1cXHUwMDNlbGlua19jb25maWcuYWR2ZXJ0aXNpbmcsIHBsLVxcdTAwM2VzdXBwb3J0ZWQpO1xcbjE5MTA6XFx0XFx0cGh5bGlua192YWxpZGF0ZShwbCwgcGwtXFx1MDAzZXN1cHBvcnRlZCwgXFx1MDAyNnBsLVxcdTAwM2VsaW5rX2NvbmZpZyk7XFxuMTkxMTpcXHRcXG4xOTEyOlxcdFxcdHJldCA9IHBoeWxpbmtfcGFyc2VfbW9kZShwbCwgZndub2RlKTtcXG4xOTEzOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjE5MTQ6XFx0XFx0XFx0Z290byBmcmVlX3BsO1xcbjE5MTU6XFx0XFxuMTkxNjpcXHRcXHRpZiAocGwtXFx1MDAzZWNmZ19saW5rX2FuX21vZGUgPT0gTUxPX0FOX0ZJWEVEKSB7XFxuMTkxNzpcXHRcXHRcXHRyZXQgPSBwaHlsaW5rX3BhcnNlX2ZpeGVkbGluayhwbCwgZndub2RlKTtcXG4xOTE4OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjE5MTk6XFx0XFx0XFx0XFx0Z290byByZWxlYXNlX2xpbmtfZ3BpbztcXG4xOTIwOlxcdFxcdH1cXG4xOTIxOlxcdFxcbjE5MjI6XFx0XFx0cGwtXFx1MDAzZXJlcV9saW5rX2FuX21vZGUgPSBwbC1cXHUwMDNlY2ZnX2xpbmtfYW5fbW9kZTtcXG4xOTIzOlxcdFxcbjE5MjQ6XFx0XFx0cmV0ID0gcGh5bGlua19yZWdpc3Rlcl9zZnAocGwsIGZ3bm9kZSk7XFxuMTkyNTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xOTI2OlxcdFxcdFxcdGdvdG8gcmVsZWFzZV9saW5rX2dwaW87XFxuMTkyNzpcXHRcXG4xOTI4OlxcdFxcdHJldHVybiBwbDtcXG4xOTI5OlxcdFxcbjE5MzA6XFx0cmVsZWFzZV9saW5rX2dwaW86XFxuMTkzMTpcXHRcXHRpZiAocGwtXFx1MDAzZWxpbmtfZ3BpbylcXG4xOTMyOlxcdFxcdFxcdGdwaW9kX3B1dChwbC1cXHUwMDNlbGlua19ncGlvKTtcXG4xOTMzOlxcdGZyZWVfcGw6XFxuMTkzNDpcXHRcXHRrZnJlZShwbCk7XFxuMTkzNTpcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbjE5MzY6XFx0fVxcbjE5Mzc6XFx0RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19jcmVhdGUpO1xcbjE5Mzg6XFx0XFxuMTkzOTpcXHQvKipcXG4xOTQwOlxcdCAqIHBoeWxpbmtfZGVzdHJveSgpIC0gY2xlYW51cCBhbmQgZGVzdHJveSB0aGUgcGh5bGluayBpbnN0YW5jZVxcbjE5NDE6XFx0ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXFxuMTk0MjpcXHQgKlxcbjE5NDM6XFx0ICogRGVzdHJveSBhIHBoeWxpbmsgaW5zdGFuY2UuIEFueSBQSFkgdGhhdCBoYXMgYmVlbiBhdHRhY2hlZCBtdXN0IGhhdmUgYmVlblxcbjE5NDQ6XFx0ICogY2xlYW5lZCB1cCB2aWEgcGh5bGlua19kaXNjb25uZWN0X3BoeSgpIHByaW9yIHRvIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi5cXG4xOTQ1OlxcdCAqXFxuMTk0NjpcXHQgKiBOb3RlOiB0aGUgcnRubCBsb2NrIG11c3Qgbm90IGJlIGhlbGQgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXFxuMTk0NzpcXHQgKi9cXG4xOTQ4OlxcdHZvaWQgcGh5bGlua19kZXN0cm95KHN0cnVjdCBwaHlsaW5rICpwbClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDM6MDU6MzUuMjAyMjIzMzA2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4ODQ4NzU0NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBSZWFzb25pbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGlzIGBwbC1cdTAwM2VsaW5rX2NvbmZpZy5pbnRlcmZhY2VgIHZhcmlhYmxlIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgYmVpbmcgYXNzaWduZWQgYGlmYWNlYCwgd2hpY2ggZ2V0cyBwYXNzZWQgaW50byBgcGh5bGlua19jcmVhdGVgLiBUaGUgY3J1Y2lhbCBwb2ludCBpcyBpZiBgaWZhY2VgIGlzIGBQSFlfSU5URVJGQUNFX01PREVfTkFgLiBJZiB0aGF0J3MgdGhlIGNhc2UsIHRoZW4gYHBoeWxpbmtfcGFyc2VfbW9kZWAgd29uJ3QgbWF0Y2ggYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgLiBUaGF0J3MgcHJvYmxlbWF0aWMuIEJ1dCB3YWl0Li4uIGlzbid0IGBpZmFjZWAgdHlwaWNhbGx5IGRldGVybWluZWQgYnkgdGhlIE1BQyBkcml2ZXIsIGJlZm9yZSBldmVuIGdldHRpbmcgdG8gYHBoeWxpbmtfY3JlYXRlYD8gSSB0aGluayBvZiBob3cgdGhhdCB3b3JrcyBpbiBwcmFjdGljZSwgZm9yIGV4YW1wbGUsIHVzaW5nIHNvbWV0aGluZyBsaWtlIGBvZl9nZXRfcGh5X21vZGVgLlxuXG5UaGUgcXVlc3Rpb24gYmVjb21lcywgY2FuIEkgbWFuaXB1bGF0ZSB0aGF0IGBpZmFjZWAgdmFsdWU/IElmIEkgY291bGQgaW5qZWN0IGEgZGV2aWNlIHRyZWUgd2l0aCBgcGh5LW1vZGUgPSBcInBzZ21paVwiYCwgdGhlbiBgcGh5X21vZGVgIHdvdWxkIGRlZmluaXRlbHkgYmUgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgLiBOb3csIHRoZSB0cmlja3kgcGFydC4uLiBjYW4gSSBkbyB0aGF0IGluIHN5emthbGxlcj8gSXQgc2VlbXMgbGlrZSB0aGVyZSdzIHNvbWUgZGV2aWNlIHRyZWUgaW5qZWN0aW9uIHN1cHBvcnQgdmlhIHRoaW5ncyBsaWtlIGBzeXpfbW91bnRfaW1hZ2VgIG9yIG90aGVyIHBzZXVkby1zeXNjYWxscy4gQnV0IEkgcmVjYWxsIGRldmljZSB0cmVlcyBiZWluZyB1c3VhbGx5IHN0YXRpYyBpbiBRRU1VLCB1bmxlc3MgdGhlcmUgYXJlIG92ZXJsYXlzIG9yIHNvbWV0aGluZyBjbGV2ZXIgYXQgcGxheS5cblxuT24gc2Vjb25kIHRob3VnaHQsIEkgZG9uJ3QgdGhpbmsgc3l6a2FsbGVyICpub3JtYWxseSogaW5qZWN0cyBkZXZpY2UgdHJlZSBvdmVybGF5cyBmb3IgbmV0d29yayBkZXZpY2VzIG9uIHRoZSBmbHkuIEhvd2V2ZXIsIGl0ICpjYW4qIHVzZSBgbmV0bGlua2AgdG8gY3JlYXRlIHZpcnR1YWwgaW50ZXJmYWNlcy4gQ291bGQgSSBjcmVhdGUgYSB2aXJ0dWFsIGludGVyZmFjZSB0aGF0IGxldmVyYWdlcyBgcGh5bGlua2AgYW5kLCBpbXBvcnRhbnRseSwgYWxsb3dzIG1lIHRvIGNvbnRyb2wgb3Igc2V0IHRoZSBwaHkgaW50ZXJmYWNlIG1vZGU/IFRoYXQncyB0aGUga2V5LlxuXG5TbywgbGV0J3Mgc2VlIGlmIGFueSB2aXJ0dWFsIGRyaXZlcnMgYXJlIGV2ZW4gKnVzaW5nKiBgcGh5bGlua2AuIEkgY2FtZSBhY3Jvc3MgYGZibmljYCBwcmV2aW91c2x5LCBhbmQgSSBrbm93IHRoYXQgdXNlcyBgcGh5bGlua19jcmVhdGVgLiBCdXQgaXMgdGhhdCBhIHZpcnR1YWwgZHJpdmVyPyBJIHJlbWVtYmVyIGBmYm5pY2AgYmVpbmcgYSBNZXRhIG5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIsIGFuZCBtb3JlIHNwZWNpZmljYWxseSBhIFBDSSBkZXZpY2UsIHNvIHRoYXQncyBwcm9iYWJseSBub3QgdGhlIHJvdXRlIHRvIGdvLiBXaGF0IGFib3V0IHNvbWV0aGluZyBsaWtlIGBsYW43OHh4YD8gVGhhdCdzIGEgVVNCIGRldmljZS4gU3l6a2FsbGVyIGVtdWxhdGVzIFVTQiBkZXZpY2VzLiBJdCBjYW4gZG8gdGhpcyB3aXRoIGBkdW1teV9oY2RgIGFuZCBgc3l6X3VzYl9jb25uZWN0YC4gU28gbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGxhbjc4eHhfcGh5bGlua19zZXR1cGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzU1LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDM6MDU6NDMuMDg3MTAwOTgzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MjUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3OTksXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3OTk6XFx0c3RhdGljIGludCBsYW43OHh4X3BoeWxpbmtfc2V0dXAoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXFxuMjgwMDpcXHR7XFxuMjgwMTpcXHRcXHRzdHJ1Y3QgcGh5bGlua19jb25maWcgKnBjID0gXFx1MDAyNmRldi1cXHUwMDNlcGh5bGlua19jb25maWc7XFxuMjgwMjpcXHRcXHRzdHJ1Y3QgcGh5bGluayAqcGh5bGluaztcXG4yODAzOlxcdFxcbjI4MDQ6XFx0XFx0cGMtXFx1MDAzZWRldiA9IFxcdTAwMjZkZXYtXFx1MDAzZW5ldC1cXHUwMDNlZGV2O1xcbjI4MDU6XFx0XFx0cGMtXFx1MDAzZXR5cGUgPSBQSFlMSU5LX05FVERFVjtcXG4yODA2OlxcdFxcdHBjLVxcdTAwM2VtYWNfY2FwYWJpbGl0aWVzID0gTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFIHwgTUFDXzEwIHxcXG4yODA3OlxcdFxcdFxcdFxcdCAgICAgICBNQUNfMTAwIHwgTUFDXzEwMDBGRDtcXG4yODA4OlxcdFxcdHBjLVxcdTAwM2VtYWNfbWFuYWdlZF9wbSA9IHRydWU7XFxuMjgwOTpcXHRcXHRwYy1cXHUwMDNlbHBpX2NhcGFiaWxpdGllcyA9IE1BQ18xMDBGRCB8IE1BQ18xMDAwRkQ7XFxuMjgxMDpcXHRcXHQvKlxcbjI4MTE6XFx0XFx0ICogRGVmYXVsdCBUWCBMUEkgKExvdyBQb3dlciBJZGxlKSByZXF1ZXN0IGRlbGF5IGNvdW50IGlzIHNldCB0byA1MHVzLlxcbjI4MTI6XFx0XFx0ICpcXG4yODEzOlxcdFxcdCAqIFNvdXJjZTogTEFONzgwMCBEb2N1bWVudGF0aW9uLCBEUzAwMDAxOTkySCwgU2VjdGlvbiAxNS4xLjU3LCBQYWdlIDIwNC5cXG4yODE0OlxcdFxcdCAqXFxuMjgxNTpcXHRcXHQgKiBSZWFzb25pbmc6XFxuMjgxNjpcXHRcXHQgKiBBY2NvcmRpbmcgdG8gdGhlIGFwcGxpY2F0aW9uIG5vdGUgaW4gdGhlIExBTjc4MDAgZG9jdW1lbnRhdGlvbiwgYVxcbjI4MTc6XFx0XFx0ICogemVybyBkZWxheSBtYXkgbmVnYXRpdmVseSBpbXBhY3QgdGhlIFRYIGRhdGEgcGF0aOKAmXMgYWJpbGl0eSB0b1xcbjI4MTg6XFx0XFx0ICogc3VwcG9ydCBHaWdhYml0IG9wZXJhdGlvbi4gQSB2YWx1ZSBvZiA1MHVzIGlzIHJlY29tbWVuZGVkIGFzIGFcXG4yODE5OlxcdFxcdCAqIHJlYXNvbmFibGUgZGVmYXVsdCB3aGVuIHRoZSBwYXJ0IG9wZXJhdGVzIGF0IEdpZ2FiaXQgc3BlZWRzLFxcbjI4MjA6XFx0XFx0ICogYmFsYW5jaW5nIHN0YWJpbGl0eSBhbmQgcG93ZXIgZWZmaWNpZW5jeSBpbiBFRUUgbW9kZS4gVGhpcyBkZWxheSBjYW5cXG4yODIxOlxcdFxcdCAqIGJlIGluY3JlYXNlZCBiYXNlZCBvbiBwZXJmb3JtYW5jZSB0ZXN0aW5nLCBhcyBFRUUgaXMgZGVzaWduZWQgZm9yXFxuMjgyMjpcXHRcXHQgKiBzY2VuYXJpb3Mgd2l0aCBtb3N0bHkgaWRsZSBsaW5rcyBhbmQgb2NjYXNpb25hbCBidXJzdHMgb2YgZnVsbFxcbjI4MjM6XFx0XFx0ICogYmFuZHdpZHRoIHRyYW5zbWlzc2lvbi4gVGhlIGdvYWwgaXMgdG8gZW5zdXJlIHJlbGlhYmxlIEdpZ2FiaXRcXG4yODI0OlxcdFxcdCAqIHBlcmZvcm1hbmNlIHdpdGhvdXQgb3Zlcmx5IGFnZ3Jlc3NpdmUgcG93ZXIgb3B0aW1pemF0aW9uIGR1cmluZ1xcbjI4MjU6XFx0XFx0ICogaW5hY3RpdmUgcGVyaW9kcy5cXG4yODI2OlxcdFxcdCAqL1xcbjI4Mjc6XFx0XFx0cGMtXFx1MDAzZWxwaV90aW1lcl9kZWZhdWx0ID0gNTA7XFxuMjgyODpcXHRcXHRwYy1cXHUwMDNlZWVlX2VuYWJsZWRfZGVmYXVsdCA9IHRydWU7XFxuMjgyOTpcXHRcXG4yODMwOlxcdFxcdGlmIChkZXYtXFx1MDAzZWNoaXBpZCA9PSBJRF9SRVZfQ0hJUF9JRF83ODAxXylcXG4yODMxOlxcdFxcdFxcdHBoeV9pbnRlcmZhY2Vfc2V0X3JnbWlpKHBjLVxcdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuMjgzMjpcXHRcXHRlbHNlXFxuMjgzMzpcXHRcXHRcXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUksIHBjLVxcdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuMjgzNDpcXHRcXG4yODM1OlxcdFxcdG1lbWNweShkZXYtXFx1MDAzZXBoeWxpbmtfY29uZmlnLmxwaV9pbnRlcmZhY2VzLFxcbjI4MzY6XFx0XFx0ICAgICAgIGRldi1cXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMsXFxuMjgzNzpcXHRcXHQgICAgICAgc2l6ZW9mKGRldi1cXHUwMDNlcGh5bGlua19jb25maWcubHBpX2ludGVyZmFjZXMpKTtcXG4yODM4OlxcdFxcbjI4Mzk6XFx0XFx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKHBjLCBkZXYtXFx1MDAzZW5ldC1cXHUwMDNlZGV2LmZ3bm9kZSxcXG4yODQwOlxcdFxcdFxcdFxcdFxcdCBkZXYtXFx1MDAzZWludGVyZmFjZSwgXFx1MDAyNmxhbjc4eHhfcGh5bGlua19tYWNfb3BzKTtcXG4yODQxOlxcdFxcdGlmIChJU19FUlIocGh5bGluaykpXFxuMjg0MjpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihwaHlsaW5rKTtcXG4yODQzOlxcdFxcbjI4NDQ6XFx0XFx0ZGV2LVxcdTAwM2VwaHlsaW5rID0gcGh5bGluaztcXG4yODQ1OlxcdFxcbjI4NDY6XFx0XFx0cmV0dXJuIDA7XFxuMjg0NzpcXHR9XFxuMjg0ODpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDM6MDU6NDMuMDg3Mzg0NjUzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTU3OTE0ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipOZXR3b3JrIEludGVyZmFjZSBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIHNwZWNpZmljYWxseSBhYm91dCBob3cgdGhlIGBsYW43OHh4YCBkcml2ZXIgaGFuZGxlcyBpdHMgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24uIEl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IHRoZSBkcml2ZXIgaXMgZXhwbGljaXRseSBzZXR0aW5nIGBkZXYtXHUwMDNlaW50ZXJmYWNlYCB0byBlaXRoZXIgYFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJYCBvciBgUkdNSUlgLiBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkLCBhbmQgaXQgZG9lc24ndCBhcHBlYXIgdG8gYmUgdG91Y2hpbmcgKmFueSogYFBTR01JSWAgY29uZmlndXJhdGlvbnMuIEkgd29uZGVyIHdoYXQgdGhlIHJhdGlvbmFsZSBpcyBiZWhpbmQgdGhpcyBzcGVjaWZpYyBhcHByb2FjaC4gSXMgaXQgYSBoYXJkd2FyZSBsaW1pdGF0aW9uLCBvciBhIGRlc2lnbiBjaG9pY2UgZm9yIHNvbWUgb3RoZXIgcmVhc29uPyBJJ2xsIHByb2JhYmx5IGhhdmUgdG8gZGlnIGludG8gdGhlIGRhdGFzaGVldCBmb3IgdGhhdCBvbmUuXG5cbk5vdywgdGhhdCBicmluZ3MgdXAgYW5vdGhlciByZWxhdGVkIHBvaW50IC0gSSBzaG91bGQgcHJvYmFibHkgYWxzbyBxdWlja2x5IHJldmlldyBob3cgdGhlIGBhc2l4X2RldmljZXNgIGhhbmRsZSB0aGlzIHNhbWUgYXJlYS4gQXJlIHRoZXkgdXNpbmcgdGhlIHNhbWUgbWV0aG9kcywgb3IgZG8gdGhleSBkaXZlcmdlIGluIHRoZWlyIGludGVyZmFjZSBtb2RlIHNldHVwPyBJIGhhdmUgYSBmZWVsaW5nIHRoYXQgdGhleSdsbCB1c2Ugc29tZXRoaW5nIHNpbWlsYXIsIG9yIHBlcmhhcHMgaGF2ZSBzb21lIGNvbW1vbiB1dGlsaXR5IGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGRyaXZlciBjb2RlIGluIHRoYXQgZmFtaWx5IGZvciBjb21wYXJpc29uLiBJdCdzIGFsd2F5cyBiZW5lZmljaWFsIHRvIGNvbXBhcmUgdGhlIGRpZmZlcmVudCBkcml2ZXJzJyBhcHByb2FjaGVzIHRvIGVuc3VyZSB0aGUgYmVzdCBkZXNpZ24gaXMgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxNTIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAzOjA1OjQ2LjkwMzE3OTQ0NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzk5LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzk5OlxcdHN0YXRpYyBpbnQgYXg4ODc3Ml9waHlsaW5rX3NldHVwKHN0cnVjdCB1c2JuZXQgKmRldilcXG4gODAwOlxcdHtcXG4gODAxOlxcdFxcdHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpwcml2ID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4gODAyOlxcdFxcdHBoeV9pbnRlcmZhY2VfdCBwaHlfaWZfbW9kZTtcXG4gODAzOlxcdFxcdHN0cnVjdCBwaHlsaW5rICpwaHlsaW5rO1xcbiA4MDQ6XFx0XFxuIDgwNTpcXHRcXHRwcml2LVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5kZXYgPSBcXHUwMDI2ZGV2LVxcdTAwM2VuZXQtXFx1MDAzZWRldjtcXG4gODA2OlxcdFxcdHByaXYtXFx1MDAzZXBoeWxpbmtfY29uZmlnLnR5cGUgPSBQSFlMSU5LX05FVERFVjtcXG4gODA3OlxcdFxcdHByaXYtXFx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgPSBNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UgfFxcbiA4MDg6XFx0XFx0XFx0TUFDXzEwIHwgTUFDXzEwMDtcXG4gODA5OlxcdFxcbiA4MTA6XFx0XFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCxcXG4gODExOlxcdFxcdFxcdCAgcHJpdi1cXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xcbiA4MTI6XFx0XFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJLFxcbiA4MTM6XFx0XFx0XFx0ICBwcml2LVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuIDgxNDpcXHRcXG4gODE1OlxcdFxcdGlmIChwcml2LVxcdTAwM2VlbWJkX3BoeSlcXG4gODE2OlxcdFxcdFxcdHBoeV9pZl9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xcbiA4MTc6XFx0XFx0ZWxzZVxcbiA4MTg6XFx0XFx0XFx0cGh5X2lmX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSTtcXG4gODE5OlxcdFxcbiA4MjA6XFx0XFx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFxcdTAwMjZwcml2LVxcdTAwM2VwaHlsaW5rX2NvbmZpZywgZGV2LVxcdTAwM2VuZXQtXFx1MDAzZWRldi5md25vZGUsXFxuIDgyMTpcXHRcXHRcXHRcXHRcXHQgcGh5X2lmX21vZGUsIFxcdTAwMjZheDg4NzcyX3BoeWxpbmtfbWFjX29wcyk7XFxuIDgyMjpcXHRcXHRpZiAoSVNfRVJSKHBoeWxpbmspKVxcbiA4MjM6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIocGh5bGluayk7XFxuIDgyNDpcXHRcXG4gODI1OlxcdFxcdHByaXYtXFx1MDAzZXBoeWxpbmsgPSBwaHlsaW5rO1xcbiA4MjY6XFx0XFx0cmV0dXJuIDA7XFxuIDgyNzpcXHR9XFxuIDgyODpcXHRcXG4gODI5OlxcdHN0YXRpYyBpbnQgYXg4ODc3Ml9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuIDgzMDpcXHR7XFxuIDgzMTpcXHRcXHRzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqcHJpdjtcXG4gODMyOlxcdFxcdHU4IGJ1ZltFVEhfQUxFTl0gPSB7MH07XFxuIDgzMzpcXHRcXHRpbnQgcmV0LCBpO1xcbiA4MzQ6XFx0XFxuIDgzNTpcXHRcXHRwcml2ID0gZGV2bV9remFsbG9jKFxcdTAwMjZkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuIDgzNjpcXHRcXHRpZiAoIXByaXYpXFxuIDgzNzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gODM4OlxcdFxcbiA4Mzk6XFx0XFx0ZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdiA9IHByaXY7XFxuIDg0MDpcXHRcXG4gODQxOlxcdFxcdHJldCA9IHVzYm5ldF9nZXRfZW5kcG9pbnRzKGRldiwgaW50Zik7XFxuIDg0MjpcXHRcXHRpZiAocmV0KVxcbiA4NDM6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gODQ0OlxcdFxcbiA4NDU6XFx0XFx0LyogTWF5YmUgdGhlIGJvb3QgbG9hZGVyIHBhc3NlZCB0aGUgTUFDIGFkZHJlc3MgdmlhIGRldmljZSB0cmVlICovXFxuIDg0NjpcXHRcXHRpZiAoIWV0aF9wbGF0Zm9ybV9nZXRfbWFjX2FkZHJlc3MoXFx1MDAyNmRldi1cXHUwMDNldWRldi1cXHUwMDNlZGV2LCBidWYpKSB7XFxuIDg0NzpcXHRcXHRcXHRuZXRpZl9kYmcoZGV2LCBpZnVwLCBkZXYtXFx1MDAzZW5ldCxcXG4gODQ4OlxcdFxcdFxcdFxcdCAgXFxcIk1BQyBhZGRyZXNzIHJlYWQgZnJvbSBkZXZpY2UgdHJlZVxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMzowNTo0Ni45MDMyNzk5MjRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwNzUyMzQwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBzdW1tYXJ5OlxuXG4qKkFuYWx5emluZyBOZXR3b3JrIEludGVyZmFjZSBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdGhpcyBuZXR3b3JrIGludGVyZmFjZSBpcyBjb25maWd1cmVkLiBNeSBpbml0aWFsIGNsdWUgaXMgdGhlIG1lbnRpb24gb2YgZWl0aGVyIGBJTlRFUk5BTGAgb3IgYFJNSUlgIOKAkyB0aGF0IHRlbGxzIG1lIGl0J3MgbGlrZWx5IGFuIGludGVybmFsIFBIWSBvciB1c2luZyBhIFJlZHVjZWQgTWVkaWEgSW5kZXBlbmRlbnQgSW50ZXJmYWNlLiBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSdsbCBmb2N1cyBvbiB0aGUgZHJpdmVyIGZpbGUgYHFjYTgwN3guY2AgYXMgYSBsaWtlbHkgY2FuZGlkYXRlLCBhbmQgZnJvbSB0aGVyZSBJIHdpbGwgdmVyaWZ5IHRoZSBQSFkgY29uZmlndXJhdGlvbiB0byBzZWUgaWYgaXQgbWFrZXMgdXNlIG9mIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYC4gQmFzZWQgb24gdGhhdCwgSSBjYW4gZGVkdWNlIHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBhbmQgaW50ZXJmYWNlIG1vZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MzE1LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMzowNTo1MC4xMTA4MDYxNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTQwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTQwOlxcdFxcdFxcdHByaXYtXFx1MDAzZXR4X2RyaXZlX3N0cmVuZ3RoID0gUFFTR01JSV9UWF9EUklWRVJfNjAwTVY7XFxuIDU0MTpcXHRcXHRcXHRicmVhaztcXG4gNTQyOlxcdFxcdGRlZmF1bHQ6XFxuIDU0MzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTQ0OlxcdFxcdH1cXG4gNTQ1OlxcdFxcbiA1NDY6XFx0XFx0cHJpdi1cXHUwMDNlcGFja2FnZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX05BO1xcbiA1NDc6XFx0XFx0aWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgXFxcInFjb20scGFja2FnZS1tb2RlXFxcIixcXG4gNTQ4OlxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnBhY2thZ2VfbW9kZV9uYW1lKSkge1xcbiA1NDk6XFx0XFx0XFx0aWYgKCFzdHJjYXNlY21wKHBhY2thZ2VfbW9kZV9uYW1lLFxcbiA1NTA6XFx0XFx0XFx0XFx0XFx0cGh5X21vZGVzKFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUkpKSlcXG4gNTUxOlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZXBhY2thZ2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk7XFxuIDU1MjpcXHRcXHRcXHRlbHNlIGlmICghc3RyY2FzZWNtcChwYWNrYWdlX21vZGVfbmFtZSxcXG4gNTUzOlxcdFxcdFxcdFxcdFxcdCAgICAgcGh5X21vZGVzKFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUkpKSlcXG4gNTU0OlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZXBhY2thZ2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk7XFxuIDU1NTpcXHRcXHRcXHRlbHNlXFxuIDU1NjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTU3OlxcdFxcdH1cXG4gNTU4OlxcdFxcbiA1NTk6XFx0XFx0cmV0dXJuIDA7XFxuIDU2MDpcXHR9XFxuIDU2MTpcXHRcXG4gNTYyOlxcdHN0YXRpYyBpbnQgcWNhODA3eF9waHlfcGFja2FnZV9jb25maWdfaW5pdF9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIDU2MzpcXHR7XFxuIDU2NDpcXHRcXHRzdHJ1Y3QgcWNhODA3eF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuIDU2NTpcXHRcXHRpbnQgdmFsLCByZXQ7XFxuIDU2NjpcXHRcXG4gNTY3OlxcdFxcdC8qIE1ha2Ugc3VyZSBQSFkgZm9sbG93IFBIWSBwYWNrYWdlIG1vZGUgaWYgZW5mb3JjZWQgKi9cXG4gNTY4OlxcdFxcdGlmIChwcml2LVxcdTAwM2VwYWNrYWdlX21vZGUgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX05BIFxcdTAwMjZcXHUwMDI2XFxuIDU2OTpcXHRcXHQgICAgcGh5ZGV2LVxcdTAwM2VpbnRlcmZhY2UgIT0gcHJpdi1cXHUwMDNlcGFja2FnZV9tb2RlKVxcbiA1NzA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU3MTpcXHRcXG4gNTcyOlxcdFxcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuIDU3MzpcXHRcXG4gNTc0OlxcdFxcdC8qIFNldCBjb3JyZWN0IFBIWSBwYWNrYWdlIG1vZGUgKi9cXG4gNTc1OlxcdFxcdHZhbCA9IF9fcGh5X3BhY2thZ2VfcmVhZChwaHlkZXYsIFFDQTgwN1hfQ09NQk9fQUREUixcXG4gNTc2OlxcdFxcdFxcdFxcdFxcdCBRQ0E4MDdYX0NISVBfQ09ORklHVVJBVElPTik7XFxuIDU3NzpcXHRcXHR2YWwgXFx1MDAyNj0gflFDQTgwN1hfQ0hJUF9DT05GSUdVUkFUSU9OX01PREVfQ0ZHX01BU0s7XFxuIDU3ODpcXHRcXHQvKiBwYWNrYWdlX21vZGUgY2FuIGJlIFFTR01JSSBvciBQU0dNSUkgYW5kIHdlIHZhbGlkYXRlXFxuIDU3OTpcXHRcXHQgKiB0aGlzIGluIHByb2JlX29uY2UuXFxuIDU4MDpcXHRcXHQgKiBXaXRoIHBhY2thZ2VfbW9kZSB0byBOQSwgd2UgZGVmYXVsdCB0byBQU0dNSUkuXFxuIDU4MTpcXHRcXHQgKi9cXG4gNTgyOlxcdFxcdHN3aXRjaCAocHJpdi1cXHUwMDNlcGFja2FnZV9tb2RlKSB7XFxuIDU4MzpcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XFxuIDU4NDpcXHRcXHRcXHR2YWwgfD0gUUNBODA3WF9DSElQX0NPTkZJR1VSQVRJT05fTU9ERV9RU0dNSUlfU0dNSUk7XFxuIDU4NTpcXHRcXHRcXHRicmVhaztcXG4gNTg2OlxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcXG4gNTg3OlxcdFxcdGRlZmF1bHQ6XFxuIDU4ODpcXHRcXHRcXHR2YWwgfD0gUUNBODA3WF9DSElQX0NPTkZJR1VSQVRJT05fTU9ERV9QU0dNSUlfQUxMX0NPUFBFUjtcXG4gNTg5OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDM6MDU6NTAuMTEwOTA3MjZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI1OTQ5OTU4MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yZWFjaGFibGUgQ29kZSBQYXRoIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIG1vZGlmeWluZyBgcGh5bGluay5jYCwgd2hpY2ggaXMgdGhlIGNvcmUgZnJhbWV3b3JrIGZvciBtYW5hZ2luZyB0aGUgbGluayBiZXR3ZWVuIGEgTUFDIGFuZCBhIFBIWS4gVGhlIHBhdGNoIGFkZHMgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgIHRvIHdoYXQgYHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlYCByZXR1cm5zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiT2theSwgdGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBJZiBhIE1BQyBkcml2ZXIgdXNlcyBgcGh5bGlua2AgYW5kIGl0J3MgY29uZmlndXJlZCBmb3IgUFNHTUlJLCB0aGlzIGZ1bmN0aW9uIHdpbGwgbm93IHJlcG9ydCBhbiBgSU5CQU5EX0NJU0NPX1NHTUlJYCB0eXBlLlwiXG5cbkJ1dCBoZXJlJ3MgdGhlIGtpY2tlcjogSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKmhvdyogYSBNQUMgZHJpdmVyIHdvdWxkIGFjdHVhbGx5IGdldCBzZXQgdXAgd2l0aCBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAuIEkgZGlkIGEgcXVpY2sgZ3JlcCBvZiB0aGUgYGRyaXZlcnMvbmV0L2AgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYW55IG1lbnRpb25zIG9mIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYC4gU3VycHJpc2luZ2x5LCB0aGUgb25seSBoaXRzIHdlcmUgd2l0aGluIHRoZSBQSFkgY29yZSBjb2RlIGl0c2VsZiwgb3IgdGhpcyBgcWNhODA3eGAgUEhZIGRyaXZlci4gTm8gTUFDIGRyaXZlcnMgc2VlbWVkIHRvIGJlIGV4cGxpY2l0bHkgdXNpbmcgb3Igc2V0dGluZyB0aGlzIG1vZGUgZGlyZWN0bHkuIFRoaXMgaXMgcmFpc2luZyBhIHJlZCBmbGFnLlxuXG5UaGVuIEkgcmVtZW1iZXJlZDogYG9mX2dldF9waHlfbW9kZWAhIE1BQyBkcml2ZXJzIGZyZXF1ZW50bHkgdXNlIHRoaXMgdG8gZ2V0IHRoZSBQSFkgaW50ZXJmYWNlIG1vZGUgZnJvbSB0aGUgZGV2aWNlIHRyZWUuIFNvLCBpZiB0aGUgZGV2aWNlIHRyZWUgZm9yIGEgc3BlY2lmaWMgaGFyZHdhcmUgaGFzIGBwaHktbW9kZSA9IFwicHNnbWlpXCJgLCBgb2ZfZ2V0X3BoeV9tb2RlYCB3b3VsZCBjb3JyZWN0bHkgc2V0IHRoZSBgcGh5X21vZGVgIHZhcmlhYmxlIHRvIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYCwgd2hpY2ggd291bGQgdGhlbiBiZSBwYXNzZWQgdG8gYHBoeWxpbmtfY3JlYXRlYC4gVGhhdCBtYWtlcyBzZW5zZS5cblxuQnV0IHdhaXQsIGhvdyBhbSBJIGdvaW5nIHRvIHRyaWdnZXIgdGhpcyBpbiBhIHRlc3QgZW52aXJvbm1lbnQ/IFN5emthbGxlciBpc24ndCBzZXQgdXAgdG8gZGlyZWN0bHkgaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzLCBzbyB0aGF0IGF2ZW51ZSBpcyBjbG9zZWQuIFdoYXQgYWJvdXQgdmlydHVhbCBkcml2ZXJzPyBDb3VsZCBJLCBzYXksIGNvbmZpZ3VyZSBhIHZpcnR1YWwgbmV0d29yayBkZXZpY2UgdG8gdXNlIFBTR01JST8gSSBpbW1lZGlhdGVseSBzdGFydGVkIHRoaW5raW5nOiBgbmV0ZGV2X3NpbWAsIGBkdW1teWAsIGB2ZXRoYCwgYG1hY3NlY2AsIGB0dW5gLCBgdGFwYCAuLi4gYnV0IG5vbmUgb2YgdGhlbSB1c2UgYHBoeWxpbmtgIGFzIGZhciBhcyBJIGNhbiB0ZWxsLlxuXG5Pa2F5LCBzbyBubyBkZXZpY2UgdHJlZSBpbmplY3Rpb24gYW5kIG5vIHJlbGV2YW50IHZpcnR1YWwgZHJpdmVycy4gVGhhdCdzIHN0YXJ0aW5nIHRvIGxvb2sgbGlrZSBhIGRlYWQgZW5kLiBDYW4gYGV0aHRvb2xgIGhlbHA/IEknbSBhd2FyZSB0aGF0IHNvbWUgb2YgaXRzIGZ1bmN0aW9ucyBhcmUgcXVpdGUgcG93ZXJmdWwuIERvZXMgaXQgYWxsb3cgY2hhbmdpbmcgdGhlIE1BQy1QSFkgaW50ZXJmYWNlIG1vZGUgZGlyZWN0bHksIGZvciBleGFtcGxlIGZyb20gUkdNSUkgdG8gU0dNSUk/IEkgZG9uJ3QgdGhpbmsgc28uIEV0aHRvb2wgbWFpbmx5IGRlYWxzIHdpdGggbGluayBzcGVlZCwgZHVwbGV4LCBldGMuIEl0J3Mgbm90IHRoZSByaWdodCB0b29sIGZvciB0aGlzLlxuXG5UaGVuLCB0aGVyZSB3YXMgYSBnbGltbWVyIG9mIGhvcGUuIEkgbG9va2VkIGF0IGBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbGAgYW5kIG5vdGljZWQgaXQgY2FsbHMgYHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlYC4gQWgsIHRoYXQncyBjYWxsZWQgd2hlbiBhbiBTRlAgbW9kdWxlIGlzIGluc2VydGVkLCBidXQgdGhlcmUgaXNuJ3QgYSB2aXJ0dWFsIFNGUCBkcml2ZXIgdG8gZW11bGF0ZS5cblxuSSB0aGVuIGNvbnNpZGVyZWQgYHBoeWxpbmtfcGNzX25lZ19tb2RlYC4gVGhhdCdzIGNhbGxlZCBmcm9tIGBwaHlsaW5rX21hY19jb25maWdgLCB3aGljaCBpdHNlbGYgaXMgY2FsbGVkIGZyb20gZWl0aGVyIGEgd29ya3F1ZXVlIGluIGBwaHlsaW5rX3Jlc29sdmVgIG9yIGR1cmluZyBgcGh5bGlua19zdGFydGAuIFN0aWxsLCB0aGUgcXVlc3Rpb24gaXMgaG93IHRvIGdldCB0aGUgYHBoeV9tb2RlYCBzZXQgY29ycmVjdGx5LlxuXG5TbyBoZXJlJ3MgdGhlIGNvbmNsdXNpb246IGlmIHRoZXJlJ3Mgbm8gd2F5IHRvIHJlYWNoIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYCBpbiBhIFFFTVUgZW52aXJvbm1lbnQg4oCTIG5vIGRldmljZSB0cmVlIGluamVjdGlvbiwgbm8gc3VpdGFibGUgdmlydHVhbCBkcml2ZXJzLCBubyBldGh0b29sIG1hZ2ljIOKAkyB0aGVuIGZ1enppbmcgdGhpcyBjb2RlIHBhdGggaXMgcHJvYmFibHkgYSB3YXN0ZSBvZiB0aW1lLiBJIGRpZCBhIGZpbmFsIGRvdWJsZSBjaGVjayB0aHJvdWdoIHRoZSBuZXR3b3JraW5nIGRyaXZlciBjb2RlLCBidXQgdGhlIGdyZXAgd2FzIGFjY3VyYXRlOiBubyBNQUMgZHJpdmVycyBkaXJlY3RseSB1c2Ugb3IgaW1wbGljaXRseSBzZXQgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgLiBBbmQgb2YgY291cnNlLCBJIGNoZWNrZWQgdGhlIGRlZmluaXRpb24gaW4gYGluY2x1ZGUvbGludXgvcGh5LmhgIHRvIG1ha2Ugc3VyZSBJIHdhc24ndCBtaXNzaW5nIHNvbWV0aGluZy4gSXQgbG9va3MgbGlrZSB0aGlzIGNvZGUgaXMgc2ltcGx5IHVucmVhY2hhYmxlLCBhdCBsZWFzdCBhcyBmYXIgYXMgbXkgY3VycmVudCBzZXR1cCBhbmQga25vd2xlZGdlIGFsbG93cyBtZSB0byBqdWRnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzODMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMzowNjowMi43MDU5MDYwMTlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MTY4Nzg4MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3Q9MjM4PVNvbWUgb2YgdGhlIGludGVyZmFjZSBtb2RlcyBhcmUgZGVzY3JpYmVkIGJlbG93Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3QtMzI1LVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0OjMyNjpgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgYFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0LTMyNy0gICAgVGhpcyBpcyB0aGUgUGVudGEgU0dNSUkgbW9kZSwgaXQgaXMgc2ltaWxhciB0byBRU0dNSUkgYnV0IGl0IGNvbWJpbmVzIDVcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jPTE1OT1pbnQgcGh5X2ludGVyZmFjZV9udW1fcG9ydHMocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTIwMS1cXHRcXHRyZXR1cm4gNDtcXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYzoyMDI6XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTIwMy1cXHRcXHRyZXR1cm4gNTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jPTI5ND11bnNpZ25lZCBsb25nIHBoeV9jYXBzX2Zyb21faW50ZXJmYWNlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy0zMTAtXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk6XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM6MzExOlxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy0zMTItXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yMzg9c3RhdGljIGludCBwaHlsaW5rX2ludGVyZmFjZV9tYXhfc3BlZWQocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjU5LVxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjYwOlxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI2MS1cXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTc3ND1zdGF0aWMgaW50IHBoeWxpbmtfcGFyc2VfbW9kZShzdHJ1Y3QgcGh5bGluayAqcGwsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTgwOC1cXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjgwOTpcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy04MTAtXFx0XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0xMDM5PXN0YXRpYyBlbnVtIGluYmFuZF90eXBlIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwNDItXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxMDQzOlxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwNDQtXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jPTQ5MD1zdGF0aWMgaW50IHFjYTgwN3hfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTU0OS1cXHRcXHRpZiAoIXN0cmNhc2VjbXAocGFja2FnZV9tb2RlX25hbWUsXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jOjU1MDpcXHRcXHRcXHRcXHRwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSSkpKVxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYzo1NTE6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGFja2FnZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTtcXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNTUyLVxcdFxcdGVsc2UgaWYgKCFzdHJjYXNlY21wKHBhY2thZ2VfbW9kZV9uYW1lLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jPTU2Mj1zdGF0aWMgaW50IHFjYTgwN3hfcGh5X3BhY2thZ2VfY29uZmlnX2luaXRfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTU4NS1cXHRcXHRicmVhaztcXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM6NTg2OlxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNTg3LVxcdGRlZmF1bHQ6XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTUzPWV4dGVybiBjb25zdCBpbnQgcGh5X2Jhc2ljX3BvcnRzX2FycmF5WzNdO1xcbi0tXFxuaW5jbHVkZS9saW51eC9waHkuaC04OS0gKiBAUEhZX0lOVEVSRkFDRV9NT0RFX01PQ0E6IE11bHRpbWVkaWEgb3ZlciBDb2F4XFxuaW5jbHVkZS9saW51eC9waHkuaDo5MDogKiBAUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTogUGVudGEgU0dNSUlcXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTkxLSAqIEBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOiBRdWFkIFNHTUlJXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTExND10eXBlZGVmIGVudW0ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9waHkuaC0xMzItXFx0UEhZX0lOVEVSRkFDRV9NT0RFX01PQ0EsXFxuaW5jbHVkZS9saW51eC9waHkuaDoxMzM6XFx0UEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSSxcXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTEzNC1cXHRQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJLFxcbi0tXFxuaW5jbHVkZS9saW51eC9waHkuaD0yMTA9c3RhdGljIGlubGluZSBjb25zdCBjaGFyICpwaHlfbW9kZXMocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5LmgtMjQ4LVxcdFxcdHJldHVybiBcXFwibW9jYVxcXCI7XFxuaW5jbHVkZS9saW51eC9waHkuaDoyNDk6XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxcbmluY2x1ZGUvbGludXgvcGh5LmgtMjUwLVxcdFxcdHJldHVybiBcXFwicHNnbWlpXFxcIjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDM6MDY6MDUuNDIyNzg5OTc0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMjA4NjM4MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yZWFjaGFibGUgQ29kZSBQYXRoIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYCBjb25maWd1cmF0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSBpdCdzIHByZXR0eSBpc29sYXRlZC4gSXQncyBvbmx5IHNob3dpbmcgdXAgaW4gYHFjYTgwN3guY2AgYW5kIHNvbWUgY29yZSBQSFkvcGh5bGluayBmaWxlcy4gVGhlIHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgbm8gc3RhbmRhcmQgTUFDIGRyaXZlciBpcyBleHBsaWNpdGx5IHNldHRpbmcgdGhpcyBtb2RlLiBUaGF0J3MgYSByZWQgZmxhZy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyBtYXliZSBpdCdzIGJlaW5nIHBhcnNlZCBmcm9tIHRoZSBkZXZpY2UgdHJlZS4gSSBrbm93IGBvZl9nZXRfcGh5X21vZGVgIGNhbiBoYW5kbGUgdGhhdCwgcGlja2luZyB1cCBgXCJwc2dtaWlcImAgYXMgYSBzdHJpbmcgdmFsdWUuIEJ1dCB0aGVuIEkgcmVtZW1iZXIgd2UncmUgZGVhbGluZyB3aXRoIHN5emthbGxlciBoZXJlLCBhbmQgdGhlcmUncyBubyB3YXkgdG8gaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzLCBhbmQgdGhlcmUncyBubyBzdWl0YWJsZSB2aXJ0dWFsIGRyaXZlciB0byB0cmlnZ2VyIHRoaXMgcGF0aCBpbiBhIFFFTVUgZW52aXJvbm1lbnQuIFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhpcyBjb2RlIGlzIGVmZmVjdGl2ZWx5IHVucmVhY2hhYmxlIGluIG91ciB0ZXN0aW5nLlxuXG5Ib2xkIG9uLCB0aG91Z2guIEknbSBtaXNzaW5nIHNvbWV0aGluZywgSSBuZWVkIHRvIGNvbnNpZGVyIGFsbCB0aGUgYW5nbGVzLiBDb3VsZCBzb21ldGhpbmcgZWxzZSByZXF1ZXN0IHRoYXQgbW9kZT8gV2hhdCBhYm91dCBTRlAgbW9kdWxlcz8gVGhleSdyZSBvZnRlbiBhc3NvY2lhdGVkIHdpdGggZGlmZmVyZW50IGludGVyZmFjZSBtb2Rlcy4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYHNmcC5jYCBhbmQgYHNmcC1idXMuY2AgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IG1lY2hhbmlzbSBmb3IgYW4gU0ZQIG1vZHVsZSB0byBzcGVjaWZ5IG9yIHJlcXVlc3QgdGhpcyBtb2RlLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG9ubHkgb3RoZXIgcG9zc2liaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDUxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAzOjA2OjExLjU0MzY1NjYwOFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3NTE1NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jPTE1OT1pbnQgcGh5X2ludGVyZmFjZV9udW1fcG9ydHMocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTIwMS1cXHRcXHRyZXR1cm4gNDtcXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYzoyMDI6XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTIwMy1cXHRcXHRyZXR1cm4gNTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jPTI5ND11bnNpZ25lZCBsb25nIHBoeV9jYXBzX2Zyb21faW50ZXJmYWNlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy0zMTAtXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk6XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM6MzExOlxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy0zMTItXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yMzg9c3RhdGljIGludCBwaHlsaW5rX2ludGVyZmFjZV9tYXhfc3BlZWQocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjU5LVxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjYwOlxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI2MS1cXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTc3ND1zdGF0aWMgaW50IHBoeWxpbmtfcGFyc2VfbW9kZShzdHJ1Y3QgcGh5bGluayAqcGwsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTgwOC1cXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjgwOTpcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy04MTAtXFx0XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0xMDM5PXN0YXRpYyBlbnVtIGluYmFuZF90eXBlIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwNDItXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxMDQzOlxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwNDQtXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jPTQ5MD1zdGF0aWMgaW50IHFjYTgwN3hfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTU0OS1cXHRcXHRpZiAoIXN0cmNhc2VjbXAocGFja2FnZV9tb2RlX25hbWUsXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jOjU1MDpcXHRcXHRcXHRcXHRwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSSkpKVxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYzo1NTE6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGFja2FnZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTtcXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNTUyLVxcdFxcdGVsc2UgaWYgKCFzdHJjYXNlY21wKHBhY2thZ2VfbW9kZV9uYW1lLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jPTU2Mj1zdGF0aWMgaW50IHFjYTgwN3hfcGh5X3BhY2thZ2VfY29uZmlnX2luaXRfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTU4NS1cXHRcXHRicmVhaztcXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM6NTg2OlxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNTg3LVxcdGRlZmF1bHQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAzOjA2OjExLjU5MjQxMDM3NVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzY2MTgxODMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUFNHTUlJIEludGVyZmFjZSBNb2RlKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAgY291bGQgZXZlbiBjb21lIGludG8gcGxheSBoZXJlLiBJdCdzIGNsZWFyIHRoYXQgdGhlIGBzZnBgIGRyaXZlciBpdHNlbGYgZG9lc24ndCB1c2UgaXQgZGlyZWN0bHkuICBUaGUgbG9naWMgc2VlbXMgdG8gcG9pbnQgdG8gYSBNQUMgZHJpdmVyIGFzIHRoZSBzb3VyY2UuICBCdXQgaG9sZCBvbi4uLiBubyBNQUMgZHJpdmVyICpkb2VzKiB1c2UgaXQsIHJpZ2h0PyAgVGhhdCdzIGEga2V5IHBvaW50LlxuXG5XYWl0IGEgc2Vjb25kLCB3aGF0IGFib3V0IHRoZSAqUEhZKiBkcml2ZXI/IENvdWxkIGEgUEhZIGRyaXZlciBiZSBzZXR0aW5nIHRoaXMgbW9kZT8gIEFoLCB5ZXMhIFRoZSBgcWNhODA3eGAgUEhZIGRyaXZlciBkb2VzIGluZGVlZCB1c2UgaXQuIEJ1dCB0aGF0J3MgYSBQSFksIHNvIHRoYXQncyBhIGRpZmZlcmVudCBjb250ZXh0IGVudGlyZWx5LlxuXG5Ob3csIGRvZXMgYHBoeWxpbmtgIGludGVyYWN0IHdpdGggdGhlIFBIWSBkcml2ZXLigJlzIGludGVyZmFjZSBtb2RlIGluIHNvbWUgd2F5PyBMZXQncyB0cmFjZSBpdCB0aHJvdWdoLiBgcGh5bGlua19hdHRhY2hfcGh5YCBvciBgcGh5bGlua19jb25uZWN0X3BoeWAgdGFrZSBhIGBwaHlfZGV2aWNlYCwgc28gdGhlcmUgKmlzKiBhIGNvbm5lY3Rpb24gcG9pbnQuIEJ1dCBsb29raW5nIGF0IGBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZWAsIHRoYXQgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYHBsLVx1MDAzZWxpbmtfY29uZmlnLmludGVyZmFjZWAuIEhhbmcgb24hIFRoYXQgYHBsLVx1MDAzZWxpbmtfY29uZmlnLmludGVyZmFjZWAgaXMgdGhlIE1BQydzIGludGVyZmFjZSBtb2RlLCBub3QgdGhlIFBIWSdzIGludGVyZmFjZSBtb2RlLiBUaGF0J3MgYSBjcnVjaWFsIGRpc3RpbmN0aW9uLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZSwgSSB0aGluayBJIHNlZSBzb21ldGhpbmchIEkgcmVjYWxsIHRoYXQgYHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsYCAqZG9lcyogdXNlIHRoZSBgaW50ZXJmYWNlYCBhcmd1bWVudC4gSXQgbG9va3MgbGlrZSBpdCBpcyBwYXNzZWQgaW4gYXMgYW4gYXJndW1lbnQsIHNvIHdoZXJlIGlzIHRoYXQgdmFsdWUgY29taW5nIGZyb20/IEkgbmVlZCB0byBjaGVjayBvdXQgd2hhdCB0aGF0IGZ1bmN0aW9uIGRvZXMgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpbnRlcmZhY2UgbW9kZSBpcyBiZWluZyBzZXQuIExldCdzIGRlbHZlIGludG8gYHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA5MTksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDM6MDY6MTcuMzU4NTk0MzA4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDY1MDc3MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5bGlua19zZnBfY29uZmlnX29wdGljYWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTM3MDU9c3RhdGljIGludCBwaHlsaW5rX3NmcF9jb25maWdfcGh5KHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzc1NS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjM3NTY6c3RhdGljIGludCBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbChzdHJ1Y3QgcGh5bGluayAqcGwpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zNzU3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9Mzg0OD1zdGF0aWMgaW50IHBoeWxpbmtfc2ZwX21vZHVsZV9pbnNlcnQodm9pZCAqdXBzdHJlYW0sXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTM4NjUtXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozODY2OlxcdHJldHVybiBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbChwbCk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zODY3LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9Mzg3Nj1zdGF0aWMgaW50IHBoeWxpbmtfc2ZwX21vZHVsZV9zdGFydCh2b2lkICp1cHN0cmVhbSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzg5MS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjM4OTI6XFx0cmV0dXJuIHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsKHBsKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTM4OTMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMzowNjoxNy43MDUxMDgyMDRaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY0NTk2NDI4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbGAgUGF0aCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBgcGh5bGlua19zZnBfY29uZmlnX29wdGljYWxgIGdyYWJzIHRoZSBgaW50ZXJmYWNlYCBmcm9tIGBwbC1cdTAwM2VsaW5rX2NvbmZpZy5pbnRlcmZhY2VgLiBUaGF0J3MgZXNzZW50aWFsbHkgdXNpbmcgdGhlIE1BQydzIGNvbmZpZ3VyZWQgaW50ZXJmYWNlIG1vZGUuIFRoZSByZWFsIHByb2JsZW0gaXMsICpubyogTUFDIGRyaXZlciwgdW5sZXNzIGNvbmZpZ3VyZWQgdGhyb3VnaCBhIGRldmljZSB0cmVlLCBhY3R1YWxseSBzZXRzIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYC4gSSdtIGNlcnRhaW4gdGhpcyBtYWtlcyB0aGlzIHBhcnRpY3VsYXIgY29kZSBwYXRoIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IHNvbWV0aGluZyB0aG91Z2guIENvdWxkIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYCAqcG90ZW50aWFsbHkqIGJlIHNldCB2aWEgYGV0aHRvb2xgIG9yIHNvbWUgYG5ldGxpbmtgIG1hZ2ljPyBObywgbm8sIG5vLiBJbnRlcmZhY2UgbW9kZXMgbGlrZSBTR01JSSwgUFNHTUlJLCBSR01JSSBhcmUgZnVuZGFtZW50YWxseSAqaGFyZHdhcmUqIGNvbm5lY3Rpb25zIGJldHdlZW4gdGhlIE1BQyBhbmQgdGhlIFBIWS4gVGhleSdyZSBub3Qgc29tZXRoaW5nIHlvdSdyZSBnb2luZyB0byBjb25maWd1cmUgdGhyb3VnaCBzdGFuZGFyZCB1c2Vyc3BhY2UgdG9vbHMuIFN1cmUsIG1heWJlIHlvdSBjb3VsZCBoYWNrIHNvbWV0aGluZyB0b2dldGhlciB3aXRoIGRldmljZSB0cmVlIG92ZXJsYXlzIG9yIHNvbWUgdmVuZG9yLXNwZWNpZmljIHRvb2wsIGJ1dCB0aG9zZSBhcmVuJ3QgdGhlIG5vcm0uIEFuZCBkZWZpbml0ZWx5IG5vdCBpbiBhIFFFTVUgc2V0dXAuXG5cblJpZ2h0LCBzbyB0aGF0IGNvbmZpcm1zIG15IGluaXRpYWwgc3VzcGljaW9uLiBUaGlzIGVudGlyZSBtb2RpZmljYXRpb24gaXMgaW5hY2Nlc3NpYmxlIGluIFFFTVUuIExldCBtZSBnbyBiYWNrIGFuZCByZXZpZXcgdGhlIHBhdGNoIGl0c2VsZi4uLiBBaCwgaXQganVzdCBhZGRzIGEgYGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpgIHRvIGBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZWAuIEl0J3MgYSBzaW5nbGUgbGluZS4gSXQncyBlc3NlbnRpYWxseSBhIG5vLW9wLCBhdCBsZWFzdCBpbiBvdXIgdGVzdGluZyBlbnZpcm9ubWVudHMuXG5cbkdpdmVuIHRoYXQgaXQncyBmdW5kYW1lbnRhbGx5IHVucmVhY2hhYmxlIGluIFFFTVUsIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE4ODQsIk91dHB1dFRva2VucyI6MTU3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAzOjA2OjI0LjM1MTA3NDk3MloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSSB0byB0aGUgc3dpdGNoIHN0YXRlbWVudCBpbiBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZSgpLiBUaGlzIGludGVyZmFjZSBtb2RlIHJlcHJlc2VudHMgYSBoYXJkd2FyZS1sZXZlbCBjb25uZWN0aW9uIGJldHdlZW4gYSBNQUMgYW5kIGEgUEhZIChQZW50YSBTR01JSSkuIEl0IGlzIG9ubHkgY29uZmlndXJlZCB2aWEgZGV2aWNlIHRyZWUgcHJvcGVydGllcyAoZS5nLiwgcGh5LW1vZGUgPSBcXFwicHNnbWlpXFxcIikgb3IgaGFyZGNvZGVkIGluIHNwZWNpZmljIGhhcmR3YXJlIGRyaXZlcnMgKGxpa2UgdGhlIFF1YWxjb21tIHFjYTgwN3ggUEhZIGRyaXZlcikuIFNpbmNlIGl0IHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIG9yIGRldmljZSB0cmVlIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIG5vdCBwcmVzZW50IG9yIGR5bmFtaWNhbGx5IGluamVjdGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VKSwgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUkgdG8gdGhlIHN3aXRjaCBzdGF0ZW1lbnQgaW4gcGh5bGlua19nZXRfaW5iYW5kX3R5cGUoKS4gVGhpcyBpbnRlcmZhY2UgbW9kZSByZXByZXNlbnRzIGEgaGFyZHdhcmUtbGV2ZWwgY29ubmVjdGlvbiBiZXR3ZWVuIGEgTUFDIGFuZCBhIFBIWSAoUGVudGEgU0dNSUkpLiBJdCBpcyBvbmx5IGNvbmZpZ3VyZWQgdmlhIGRldmljZSB0cmVlIHByb3BlcnRpZXMgKGUuZy4sIHBoeS1tb2RlID0gXFxcInBzZ21paVxcXCIpIG9yIGhhcmRjb2RlZCBpbiBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXJzIChsaWtlIHRoZSBRdWFsY29tbSBxY2E4MDd4IFBIWSBkcml2ZXIpLiBTaW5jZSBpdCByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSBvciBkZXZpY2UgdHJlZSBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBub3QgcHJlc2VudCBvciBkeW5hbWljYWxseSBpbmplY3RhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVSksIHRoaXMgY29kZSBwYXRoIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDM6MDY6MjQuMzUxMDk5MjAxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfhkqk[1] Phase: Running StartedAt: 2026-08-08 03:06:35 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhkqk[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-08 03:06:35 +0000 UTC FinishedAt: 2026-08-08 03:06:40 +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,}