Name: series-workflowkmll2 Phase: Succeeded StartedAt: 2026-07-21 15:29:55 +0000 UTC FinishedAt: 2026-07-21 18:12:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmll2[0] Phase: Succeeded StartedAt: 2026-07-21 15:29:55 +0000 UTC FinishedAt: 2026-07-21 15:51:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmll2[0].run-triage Phase: Succeeded StartedAt: 2026-07-21 15:29:55 +0000 UTC FinishedAt: 2026-07-21 15:51:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "638b41f770ade0dfc45f7f6f25e1cf75a9c89808", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "REALTEK_PHY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "638b41f770ade0dfc45f7f6f25e1cf75a9c89808", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "REALTEK_PHY" ], "series_id": "aeafd26c-8b6c-484b-a75f-302720b2ade2" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "genphy_c45_pma_soft_reset", "genphy_c45_an_setup_master_slave", "genphy_c45_read_master_slave", "rtl8261x_probe", "rtl8261x_get_features", "rtl8261x_read_status", "rtl8261x_verify_firmware", "rtl8261x_fw_execute_entry", "rtl8261x_fw_load", "rtl8261x_config_intr", "rtl8261x_handle_interrupt", "rtl8261x_config_aneg", "rtl8261x_config_init" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JFQUxURUtfUEhZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2VucGh5X2M0NV9wbWFfc29mdF9yZXNldCYjMzQ7LAogICAgJiMzNDtnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZSYjMzQ7LAogICAgJiMzNDtnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X3Byb2JlJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2dldF9mZWF0dXJlcyYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9yZWFkX3N0YXR1cyYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF92ZXJpZnlfZmlybXdhcmUmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeSYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9md19sb2FkJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2NvbmZpZ19pbnRyJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfY29uZmlnX2FuZWcmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfY29uZmlnX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw4MjYxIDEwR2JwcyBQSFkgYW5kIGludHJvZHVjZXMgQ2xhdXNlIDQ1IFBIWSBNYXN0ZXIvU2xhdmUgY29uZmlndXJhdGlvbi4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYnkgZW11bGF0aW5nIGEgVVNCIG5ldHdvcmsgYWRhcHRlciAoZS5nLiwgQVNJWCBvciBTTVNDKSB0aGF0IGV4cG9zZXMgYW4gTURJTyBidXMsIGFuZCByZXNwb25kaW5nIHRvIFBIWSBJRCByZWFkcyB3aXRoIHRoZSBSVEw4MjYxIElELiBUaGUgZHJpdmVyIGFsc28gcGFyc2VzIGZpcm13YXJlLCB3aGljaCBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDVjZDBhZDAwMjNlNTUzNjAyNGRmNGFlYTZhMzZkNjRjYzBkM2NlZTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyMSAxNTo0Nzo1NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuaW5kZXggMTI2OTUxNzQxNDI4OGYuLjg3MDkyMDMxMWY5YTAxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuQEAgLTM4NCw2ICYjNDM7Mzg0LDExOSBAQCBpbnQgZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgcmVzdGFydClcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXQgLSBzb2Z0d2FyZSByZXNldCB0aGUgUEhZIHZpYSBDbGF1c2UgNDUgUE1BL1BNRCBjb250cm9sIHJlZ2lzdGVyXG4mIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO2ludCBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0LCB2YWw7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeV9zZXRfYml0c19tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsIE1ESU9fQ1RSTDEsXG4mIzQzO1x0XHRcdCAgICAgICBNRElPX0NUUkwxX1JFU0VUKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsXG4mIzQzO1x0XHRcdFx0XHQgTURJT19DVFJMMSwgdmFsLFxuJiM0MztcdFx0XHRcdFx0ICEodmFsIFx1MDAyNiBNRElPX0NUUkwxX1JFU0VUKSxcbiYjNDM7XHRcdFx0XHRcdCA1MDAwLCA2MDAwMDAsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXQpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlIC0gQ29uZmlndXJlIE1hc3Rlci9TbGF2ZSBzZXR0aW5nIGZvciBDNDUgUEhZc1xuJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbiYjNDM7ICpcbiYjNDM7ICogRGVzY3JpcHRpb246IENvbmZpZ3VyZSB0aGUgZm9yY2VkIG9yIHByZWZlcnJlZCBNYXN0ZXIvU2xhdmUgcm9sZVxuJiM0MzsgKiAxMEdCQVNFLVQgY29udHJvbCByZWdpc3RlciAoTU1EIDcsIFJlZ2lzdGVyIDB4MDAyMCkgYWNjb3JkaW5nIHRvXG4mIzQzOyAqIElFRUUgODAyLjMgc3RhbmRhcmRzLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IG5lZ2F0aXZlIGVycm5vIGNvZGUgb24gZmFpbHVyZSwgMCBpZiBNYXN0ZXIvU2xhdmUgZGlkbiYjMzk7dCBjaGFuZ2UsXG4mIzQzOyAqIG9yIDEgaWYgTWFzdGVyL1NsYXZlIG1vZGVzIGNoYW5nZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHR1MTYgY3RsID0gMDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3NldCkge1xuJiM0MztcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfUFJFRkVSUkVEOlxuJiM0MztcdFx0Y3RsID0gTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9QUkVGRVJSRUQ6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfTUFTVEVSX0ZPUkNFOlxuJiM0MztcdFx0Y3RsID0gTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRSB8IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9GT1JDRTpcbiYjNDM7XHRcdGN0bCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfVU5LTk9XTjpcbiYjNDM7XHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfVU5TVVBQT1JURUQ6XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcJiMzNDtVbnN1cHBvcnRlZCBNYXN0ZXIvU2xhdmUgbW9kZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICAgICAgTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRSB8XG4mIzQzO1x0XHRcdFx0ICAgICAgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFIHxcbiYjNDM7XHRcdFx0XHQgICAgICBNRElPX0FOXzEwR0JUX0NUUkxfTVNfUE9SVF9UWVBFLCBjdGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZSAtIHJlYWQgbWFzdGVyL3NsYXZlIHN0YXR1c1xuJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbiYjNDM7ICpcbiYjNDM7ICogRGVzY3JpcHRpb246IFJlYWQgdGhlIE1hc3Rlci9TbGF2ZSBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXNcbiYjNDM7ICogZnJvbSAxMEdCQVNFLVQgY29udHJvbC9zdGF0dXMgcmVnaXN0ZXJzIChNTUQgNywgUmVnIDB4MDAyMCBhbmQgMHgwMDIxKS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgdmFsO1xuJiM0MztcbiYjNDM7XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfVU5LTk9XTjtcbiYjNDM7XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX1VOS05PV047XG4mIzQzO1xuJiM0MztcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX0NUUkwpO1xuJiM0MztcdGlmICh2YWwgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gdmFsO1xuJiM0MztcbiYjNDM7XHRpZiAodmFsIFx1MDAyNiBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFKSB7XG4mIzQzO1x0XHRpZiAodmFsIFx1MDAyNiBNRElPX0FOXzEwR0JUX0NUUkxfTVNfVkFMVUUpXG4mIzQzO1x0XHRcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfRk9SQ0U7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9GT1JDRTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aWYgKHZhbCBcdTAwMjYgTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRSlcbiYjNDM7XHRcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX01BU1RFUl9QUkVGRVJSRUQ7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9QUkVGRVJSRUQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9TVEFUKTtcbiYjNDM7XHRpZiAodmFsIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHZhbDtcbiYjNDM7XG4mIzQzO1x0aWYgKHZhbCBcdTAwMjYgTURJT19BTl8xMEdCVF9TVEFUX01TX0ZBVUxUKSB7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX0VSUjtcbiYjNDM7XHR9IGVsc2UgaWYgKHBoeWRldi1cdTAwM2VsaW5rKSB7XG4mIzQzO1x0XHRpZiAodmFsIFx1MDAyNiBNRElPX0FOXzEwR0JUX1NUQVRfTVNfUkVTKVxuJiM0MztcdFx0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX01BU1RFUjtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9TTEFWRTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9VTktOT1dOO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogZ2VucGh5X2M0NV9hbmVnX2RvbmUgLSByZXR1cm4gYXV0by1uZWdvdGlhdGlvbiBjb21wbGV0ZSBzdGF0dXNcbiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbkBAIC0xMTkyLDYgJiM0MzsxMzA1LDEwIEBAIGludCBnZW5waHlfYzQ1X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRcdFx0cmV0ID0gZ2VucGh5X2M0NV9iYXNldDFfcmVhZF9zdGF0dXMocGh5ZGV2KTtcbiBcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHJldCA9IGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmUocGh5ZGV2KTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHR9XG4gXG4gXHRcdHBoeV9yZXNvbHZlX2FuZWdfbGlua21vZGUocGh5ZGV2KTtcbkBAIC0xMjI1LDYgJiM0MzsxMzQyLDE0IEBAIGludCBnZW5waHlfYzQ1X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRpZiAocmV0IFx1MDAzZSAwKVxuIFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbiBcbiYjNDM7XHRpZiAoIWdlbnBoeV9jNDVfYmFzZXQxX2FibGUocGh5ZGV2KSkge1xuJiM0MztcdFx0cmV0ID0gZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmUocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzZSAwKVxuJiM0MztcdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIGdlbnBoeV9jNDVfY2hlY2tfYW5kX3Jlc3RhcnRfYW5lZyhwaHlkZXYsIGNoYW5nZWQpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X2NvbmZpZ19hbmVnKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXG5pbmRleCBiNjVkMGY1ZmExYTAxNC4uMWMwYjljNDBhODFlNTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcbkBAIC04LDcgJiM0Mzs4LDkgQEBcbiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy5cbiAgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRvcHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jcmMzMi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbF9uZXRsaW5rLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZmlybXdhcmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtX3dha2VpcnEuaFx1MDAzZVxuQEAgLTE0MSw2ICYjNDM7MTQzLDEwIEBAXG4gI2RlZmluZSBSVEw4MjExRl9QSFlTSUNBTF9BRERSX1dPUkQxXHRcdDE3XG4gI2RlZmluZSBSVEw4MjExRl9QSFlTSUNBTF9BRERSX1dPUkQyXHRcdDE4XG4gXG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfRVhUX0FERFJfUkVHXHRcdFx0MHhhNDM2XG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfRVhUX0RBVEFfUkVHXHRcdFx0MHhhNDM4XG4mIzQzOyNkZWZpbmUgUlRMXzgyNjFYX1NVQl9QSFlfSURfQUREUlx0XHQweDgwMWRcbiYjNDM7XG4gI2RlZmluZSBSVEw4MjJYX1ZORDFfU0VSREVTX09QVElPTlx0XHRcdDB4Njk3YVxuICNkZWZpbmUgUlRMODIyWF9WTkQxX1NFUkRFU19PUFRJT05fTU9ERV9NQVNLXHRcdEdFTk1BU0soNSwgMClcbiAjZGVmaW5lIFJUTDgyMlhfVk5EMV9TRVJERVNfT1BUSU9OX01PREVfMjUwMEJBU0VYX1NHTUlJXHRcdDBcbkBAIC0yNTEsNiAmIzQzOzI1Nyw3MCBAQFxuICNkZWZpbmUgUlRMXzgyMjFCX1ZNX0NHXHRcdFx0XHQweDAwMWNjODRhXG4gI2RlZmluZSBSVExfODI1MUJcdFx0XHRcdDB4MDAxY2M4NjJcbiAjZGVmaW5lIFJUTF84MjYxQ1x0XHRcdFx0MHgwMDFjYzg5MFxuJiM0MzsjZGVmaW5lIFJUTF84MjYxQ19DR1x0XHRcdFx0MHgwMDFjYzg5OFxuJiM0MztcbiYjNDM7I2RlZmluZSBSVEw4MjYxQ19DRV9NT0RFTFx0XHQweDAwXG4mIzQzOyNkZWZpbmUgUlRMODI2MURfTU9ERUxcdFx0XHQweDgxXG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX0FVVE9ORUdfRVJST1JcdEJJVCgwKVxuJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9QQUdFX1JFQ1ZcdFx0QklUKDIpXG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORVx0QklUKDMpXG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX0xJTktfQ0hHXHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9QSFlfUkVHX0FDQ0VTU1x0QklUKDUpXG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX1BNRVx0XHRCSVQoNylcbiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfQUxEUFNfQ0hHXHRcdEJJVCg5KVxuJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9KQUJCRVJcdFx0QklUKDEwKVxuJiM0MztcbiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfTUFTS19ERUZBVUxUXHQoUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0xJTktfQ0hHIHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfQVVUT05FR19FUlJPUiB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0pBQkJFUilcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX01BU0tfQUxMXHRcdChSVEw4MjYxWF9JTlRfQVVUT05FR19FUlJPUiB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX1BBR0VfUkVDViB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0xJTktfQ0hHIHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfUEhZX1JFR19BQ0NFU1MgfCBcXFxuJiM0MztcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9QTUUgfCBcXFxuJiM0MztcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9BTERQU19DSEcgfCBcXFxuJiM0MztcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9KQUJCRVIpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEZXX01BSU5fTUFHSUNcdFx0XHQweDUyNTQ0QzM4XG4mIzQzOyNkZWZpbmUgRldfU1VCX01BR0lDXzgyNjFDXHRcdDB4MzIzNjMxNDNcbiYjNDM7I2RlZmluZSBSVEw4MjYxWF9QT0xMX1RJTUVPVVRfTVNcdDEwMFxuJiM0MzsjZGVmaW5lIFJUTDgyNjFYX01BWF9NTURfREVWXHRcdDMxXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJUTDgyNjFDX0NFX0ZXX05BTUVcdFwmIzM0O3J0bF9uaWMvcnRsODI2MWMuYmluXCYjMzQ7XG4mIzQzO01PRFVMRV9GSVJNV0FSRShSVEw4MjYxQ19DRV9GV19OQU1FKTtcbiYjNDM7XG4mIzQzO2VudW0gcnRsODI2MXhfZndfb3Age1xuJiM0MztcdE9QX1dSSVRFID0gMHgwMCxcdC8qIFdyaXRlICovXG4mIzQzO1x0T1BfUE9MTCAgPSAweDAyLFx0LyogUG9sbGluZyAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciB7XG4mIzQzO1x0X19sZTMyIG1haW5fbWFnaWM7XHQvKiBNYWluIG1hZ2ljIG51bWJlciAqL1xuJiM0MztcdF9fbGUzMiBzdWJfbWFnaWM7XHQvKiBTdWIgbWFnaWMgbnVtYmVyICovXG4mIzQzO1x0X19sZTE2IHZlcnNpb25fbWFqb3I7XHQvKiBNYWpvciB2ZXJzaW9uICovXG4mIzQzO1x0X19sZTE2IHZlcnNpb25fbWlub3I7XHQvKiBNaW5vciB2ZXJzaW9uICovXG4mIzQzO1x0X19sZTE2IG51bV9lbnRyaWVzO1x0LyogTnVtYmVyIG9mIGVudHJpZXMgKi9cbiYjNDM7XHRfX2xlMTYgcmVzZXJ2ZWQ7XHQvKiBSZXNlcnZlZCAqL1xuJiM0MztcdF9fbGUzMiBjcmMzMjtcdFx0LyogQ1JDMzIgY2hlY2tzdW0gKi9cbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBydGw4MjYxeF9md19lbnRyeSB7XG4mIzQzO1x0X191OCAgdHlwZTtcdFx0LyogT3BlcmF0aW9uIHR5cGUgKE9QXyopICovXG4mIzQzO1x0X191OCAgZGV2O1x0XHQvKiBNTUQgZGV2aWNlICovXG4mIzQzO1x0X19sZTE2IGFkZHI7XHRcdC8qIFJlZ2lzdGVyIGFkZHJlc3MgKi9cbiYjNDM7XHRfX3U4ICBtc2I7XHRcdC8qIE1TQiBiaXQgcG9zaXRpb24gKi9cbiYjNDM7XHRfX3U4ICBsc2I7XHRcdC8qIExTQiBiaXQgcG9zaXRpb24gKi9cbiYjNDM7XHRfX2xlMTYgdmFsdWU7XHRcdC8qIFZhbHVlIHRvIHdyaXRlL2NvbXBhcmUgKi9cbiYjNDM7XHRfX2xlMTYgdGltZW91dF9tcztcdC8qIFBvbGwgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKi9cbiYjNDM7XHRfX3U4ICBwb2xsX3NldDtcdFx0LyogUG9sbCB1bnRpbCBlcXVhbCAoMSkgb3Igbm90IGVxdWFsICgwKSAqL1xuJiM0MztcdF9fdTggIHJlc2VydmVkO1x0XHQvKiBSZXNlcnZlZCAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBGV19IRUFERVJfU0laRVx0XHRzaXplb2Yoc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlcilcbiYjNDM7I2RlZmluZSBGV19FTlRSWV9TSVpFXHRcdHNpemVvZihzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkpXG4gXG4gLyogUlRMODIxMUUgYW5kIFJUTDgyMTFGIHN1cHBvcnQgdXAgdG8gdGhyZWUgTEVEcyAqL1xuICNkZWZpbmUgUlRMODIxMXhfTEVEX0NPVU5UXHRcdFx0M1xuQEAgLTI3MCw2ICYjNDM7MzQwLDExIEBAIHN0cnVjdCBydGw4MjF4X3ByaXYge1xuIFx0dTE2IGluZXI7XG4gfTtcbiBcbiYjNDM7c3RydWN0IHJ0bDgyNjF4X3ByaXYge1xuJiM0MztcdGNvbnN0IGNoYXIgKmZ3X25hbWU7XG4mIzQzO1x0Ym9vbCBmd19sb2FkZWQ7XG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBpbnQgcnRsODIxeF9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4gXHRyZXR1cm4gX19waHlfcmVhZChwaHlkZXYsIFJUTDgyMXhfUEFHRV9TRUxFQ1QpO1xuQEAgLTMxMCw2ICYjNDM7Mzg1LDMyOSBAQCBzdGF0aWMgaW50IHJ0bDgyMXhfbW9kaWZ5X2V4dF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiBleHRfcGFnZSxcbiBcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkcGFnZSwgcmV0KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbiYjNDM7XHRzdHJ1Y3QgcnRsODI2MXhfcHJpdiAqcHJpdjtcbiYjNDM7XHRpbnQgc3ViX3BoeV9pZCwgcmV0O1xuJiM0MztcbiYjNDM7XHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwcml2KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHBoeWRldi1cdTAwM2Vwcml2ID0gcHJpdjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjYxWF9FWFRfQUREUl9SRUcsXG4mIzQzO1x0XHRcdCAgICBSVExfODI2MVhfU1VCX1BIWV9JRF9BRERSKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyNjFYX0VYVF9EQVRBX1JFRyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHN1Yl9waHlfaWQgPSAocmV0IFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgMHhmZjtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChzdWJfcGh5X2lkKSB7XG4mIzQzO1x0Y2FzZSBSVEw4MjYxQ19DRV9NT0RFTDpcbiYjNDM7XHRcdHByaXYtXHUwMDNlZndfbmFtZSA9IFJUTDgyNjFDX0NFX0ZXX05BTUU7XG4mIzQzO1x0XHRwaHlkZXZfaW5mbyhwaHlkZXYsIFwmIzM0O1JUTDgyNjFDIGRldGVjdGVkIChzdWJfaWQgMHglMDJ4KVxcblwmIzM0Oywgc3ViX3BoeV9pZCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0Y2FzZSBSVEw4MjYxRF9NT0RFTDpcbiYjNDM7XHRcdHBoeWRldl9pbmZvKHBoeWRldiwgXCYjMzQ7UlRMODI2MUQgZGV0ZWN0ZWQgKHN1Yl9pZCAweCUwMngpXFxuXCYjMzQ7LCBzdWJfcGh5X2lkKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcJiMzNDtVbmtub3duIHN1Yl9pZCAweCUwMngsIGRlZmF1bHQgYmVoYXZpb3JcXG5cJiMzNDssIHN1Yl9waHlfaWQpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydGw4MjYxeF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGdlbnBoeV9jNDVfcG1hX3JlYWRfYWJpbGl0aWVzKHBoeWRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTdXBwbGVtZW50IE11bHRpLUdpZyBzcGVlZHMgdGhhdCBtYXkgbm90IGJlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWRcbiYjNDM7XHQgKiBSVEw4MjYxWCBzdXBwb3J0cyAyLjVHLzVHIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIDEwR1xuJiM0MztcdCAqL1xuJiM0MztcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULFxuJiM0MztcdFx0XHQgcGh5ZGV2LVx1MDAzZXN1cHBvcnRlZCk7XG4mIzQzO1x0bGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV81MDAwYmFzZVRfRnVsbF9CSVQsXG4mIzQzO1x0XHRcdCBwaHlkZXYtXHUwMDNlc3VwcG9ydGVkKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQsIHZhbCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkge1xuJiM0MztcdFx0cmV0ID0gZ2VucGh5X2M0NV9hbmVnX2RvbmUocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMixcbiYjNDM7XHRcdFx0XHRcdCAgIFJUTDgyMlhfVk5EMl9DMjJfUkVHKE1JSV9TVEFUMTAwMCkpO1xuJiM0MztcdFx0XHRpZiAodmFsIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdHJldHVybiB2YWw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtaWlfc3RhdDEwMDBfbW9kX2xpbmttb2RlX2xwYV90KHBoeWRldi1cdTAwM2VscF9hZHZlcnRpc2luZywgdmFsKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZ2VucGh5X2M0NV9yZWFkX3N0YXR1cyhwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydGw4MjYxeF92ZXJpZnlfZmlybXdhcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgKmhkcjtcbiYjNDM7XHR1MzIgbWFpbl9tYWdpYywgc3ViX21hZ2ljO1xuJiM0MztcdHUzMiBjYWxjX2NyYywgZmlsZV9jcmM7XG4mIzQzO1x0c2l6ZV90IGRhdGFfbGVuO1xuJiM0MztcdHUxNiBudW1fZW50cmllcztcbiYjNDM7XG4mIzQzO1x0aWYgKGZ3LVx1MDAzZXNpemUgXHUwMDNjIEZXX0hFQURFUl9TSVpFKSB7XG4mIzQzO1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7RmlybXdhcmUgdG9vIHNtYWxsOiAlenUgYnl0ZXNcXG5cJiMzNDssIGZ3LVx1MDAzZXNpemUpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRoZHIgPSAoY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciAqKWZ3LVx1MDAzZWRhdGE7XG4mIzQzO1xuJiM0MztcdG1haW5fbWFnaWMgPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlbWFpbl9tYWdpYyk7XG4mIzQzO1x0aWYgKG1haW5fbWFnaWMgIT0gRldfTUFJTl9NQUdJQykge1xuJiM0MztcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O0ludmFsaWQgZmlybXdhcmUgbWFnaWM6IDB4JTA4eFxcblwmIzM0OywgbWFpbl9tYWdpYyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN1Yl9tYWdpYyA9IGxlMzJfdG9fY3B1KGhkci1cdTAwM2VzdWJfbWFnaWMpO1xuJiM0MztcdGlmIChzdWJfbWFnaWMgIT0gRldfU1VCX01BR0lDXzgyNjFDKSB7XG4mIzQzO1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7SW52YWxpZCBzdWIgbWFnaWM6IDB4JTA4eFxcblwmIzM0Oywgc3ViX21hZ2ljKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bnVtX2VudHJpZXMgPSBsZTE2X3RvX2NwdShoZHItXHUwMDNlbnVtX2VudHJpZXMpO1xuJiM0MztcdGRhdGFfbGVuID0gbnVtX2VudHJpZXMgKiBGV19FTlRSWV9TSVpFO1xuJiM0MztcbiYjNDM7XHRpZiAoZnctXHUwMDNlc2l6ZSAhPSBzaXplb2YoKmhkcikgJiM0MzsgZGF0YV9sZW4pIHtcbiYjNDM7XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtGaXJtd2FyZSBzaXplIG1pc21hdGNoXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y2FsY19jcmMgPSBjcmMzMih+MCwgZnctXHUwMDNlZGF0YSAmIzQzOyBGV19IRUFERVJfU0laRSwgZGF0YV9sZW4pIF4gfjA7XG4mIzQzO1x0ZmlsZV9jcmMgPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlY3JjMzIpO1xuJiM0MztcbiYjNDM7XHRpZiAoY2FsY19jcmMgIT0gZmlsZV9jcmMpIHtcbiYjNDM7XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtDUkMzMiBtaXNtYXRjaDogY2FsY3VsYXRlZD0weCUwOHggZmlsZT0weCUwOHhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIGNhbGNfY3JjLCBmaWxlX2NyYyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSAqZW50cnkpXG4mIzQzO3tcbiYjNDM7XHR1MTYgYWRkciwgdmFsdWUsIHRpbWVvdXRfbXM7XG4mIzQzO1x0dTggZGV2LCBtc2IsIGxzYiwgcG9sbF9zZXQ7XG4mIzQzO1x0dTMyIGJpdHMsIGV4cGVjdF92YWw7XG4mIzQzO1x0aW50IHJldCwgdmFsO1xuJiM0MztcbiYjNDM7XHRkZXYgPSBlbnRyeS1cdTAwM2VkZXY7XG4mIzQzO1x0YWRkciA9IGxlMTZfdG9fY3B1KGVudHJ5LVx1MDAzZWFkZHIpO1xuJiM0MztcdG1zYiA9IGVudHJ5LVx1MDAzZW1zYjtcbiYjNDM7XHRsc2IgPSBlbnRyeS1cdTAwM2Vsc2I7XG4mIzQzO1x0dmFsdWUgPSBsZTE2X3RvX2NwdShlbnRyeS1cdTAwM2V2YWx1ZSk7XG4mIzQzO1x0dGltZW91dF9tcyA9IGxlMTZfdG9fY3B1KGVudHJ5LVx1MDAzZXRpbWVvdXRfbXMpO1xuJiM0MztcdHBvbGxfc2V0ID0gZW50cnktXHUwMDNlcG9sbF9zZXQ7XG4mIzQzO1xuJiM0MztcdGlmICh0aW1lb3V0X21zID09IDApXG4mIzQzO1x0XHR0aW1lb3V0X21zID0gUlRMODI2MVhfUE9MTF9USU1FT1VUX01TO1xuJiM0MztcbiYjNDM7XHRpZiAoZGV2IFx1MDAzZSBSVEw4MjYxWF9NQVhfTU1EX0RFVikge1xuJiM0MztcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O2ludmFsaWQgZmlybXdhcmUgTU1EIGRldmljZTogZGV2PSV1XFxuXCYjMzQ7LCBkZXYpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobXNiIFx1MDAzZSAxNSB8fCBsc2IgXHUwMDNlIG1zYikge1xuJiM0MztcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O2ludmFsaWQgZmlybXdhcmUgYml0czogbXNiPSV1LCBsc2I9JXVcXG5cJiMzNDssIG1zYiwgbHNiKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChlbnRyeS1cdTAwM2V0eXBlKSB7XG4mIzQzO1x0Y2FzZSBPUF9XUklURTpcbiYjNDM7XHRcdHJldCA9IHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgZGV2LCBhZGRyLFxuJiM0MztcdFx0XHRcdCAgICAgR0VOTUFTSyhtc2IsIGxzYiksICh2YWx1ZSBcdTAwM2NcdTAwM2MgbHNiKSBcdTAwMjYgR0VOTUFTSyhtc2IsIGxzYikpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIE9QX1BPTEw6XG4mIzQzO1x0XHRiaXRzID0gR0VOTUFTSyhtc2IsIGxzYik7XG4mIzQzO1x0XHRleHBlY3RfdmFsID0gKHZhbHVlIFx1MDAzY1x1MDAzYyBsc2IpIFx1MDAyNiBiaXRzO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwb2xsX3NldClcbiYjNDM7XHRcdFx0cmV0ID0gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIGRldiwgYWRkciwgdmFsLFxuJiM0MztcdFx0XHRcdFx0XHRcdCh2YWwgXHUwMDI2IGJpdHMpID09IGV4cGVjdF92YWwsXG4mIzQzO1x0XHRcdFx0XHRcdFx0MTAwMCwgdGltZW91dF9tcyAqIDEwMDAsIGZhbHNlKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cmV0ID0gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIGRldiwgYWRkciwgdmFsLFxuJiM0MztcdFx0XHRcdFx0XHRcdCh2YWwgXHUwMDI2IGJpdHMpICE9IGV4cGVjdF92YWwsXG4mIzQzO1x0XHRcdFx0XHRcdFx0MTAwMCwgdGltZW91dF9tcyAqIDEwMDAsIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfZndfbG9hZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bDgyNjF4X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkgKmVudHJ5O1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgKmhkcjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xuJiM0MztcdGludCByZXQsIGk7XG4mIzQzO1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2Vmd19uYW1lKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlcXVlc3RfZmlybXdhcmUoXHUwMDI2ZncsIHByaXYtXHUwMDNlZndfbmFtZSwgXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7RmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgJXM6ICVkXFxuXCYjMzQ7LCBwcml2LVx1MDAzZWZ3X25hbWUsIHJldCk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlKHBoeWRldiwgZncpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIHJlbGVhc2VfZnc7XG4mIzQzO1xuJiM0MztcdGhkciA9IChjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICopZnctXHUwMDNlZGF0YTtcbiYjNDM7XG4mIzQzO1x0ZW50cnkgPSAoY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2VudHJ5ICopKGZ3LVx1MDAzZWRhdGEgJiM0MzsgRldfSEVBREVSX1NJWkUpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxlMTZfdG9fY3B1KGhkci1cdTAwM2VudW1fZW50cmllcyk7IGkmIzQzOyYjNDM7LCBlbnRyeSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJldCA9IHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnkocGh5ZGV2LCBlbnRyeSk7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtFbnRyeSAlZCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCBpLCByZXQpO1xuJiM0MztcdFx0XHRnb3RvIHJlbGVhc2VfZnc7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWZ3X2xvYWRlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztyZWxlYXNlX2Z3OlxuJiM0MztcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfY29uZmlnX2ludHIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJydXB0cyA9PSBQSFlfSU5URVJSVVBUX0VOQUJMRUQpIHtcbiYjNDM7XHRcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lOU1IpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5FUixcbiYjNDM7XHRcdFx0XHQgICAgUlRMODI2MVhfSU5UX01BU0tfREVGQVVMVCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5FUiwgMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lOU1IpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGlycV9zdGF0dXM7XG4mIzQzO1xuJiM0MztcdGlycV9zdGF0dXMgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODIyMUJfVk5EMl9JTlNSKTtcbiYjNDM7XHRpZiAoaXJxX3N0YXR1cyBcdTAwM2MgMCkge1xuJiM0MztcdFx0cGh5X2Vycm9yKHBoeWRldik7XG4mIzQzO1x0XHRyZXR1cm4gSVJRX05PTkU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIShpcnFfc3RhdHVzIFx1MDAyNiBSVEw4MjYxWF9JTlRfTUFTS19BTEwpKVxuJiM0MztcdFx0cmV0dXJuIElSUV9OT05FO1xuJiM0MztcbiYjNDM7XHRpZiAoaXJxX3N0YXR1cyBcdTAwMjYgKFJUTDgyNjFYX0lOVF9MSU5LX0NIRyB8IFJUTDgyNjFYX0lOVF9BVVRPTkVHX0RPTkUgfFxuJiM0MztcdCAgICBSVEw4MjYxWF9JTlRfQVVUT05FR19FUlJPUiB8IFJUTDgyNjFYX0lOVF9KQUJCRVIpKVxuJiM0MztcdFx0cGh5X3RyaWdnZXJfbWFjaGluZShwaHlkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHUxNiBhZHZfMWcgPSAwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGdlbnBoeV9jNDVfY29uZmlnX2FuZWcocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VhdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMGJhc2VUX0Z1bGxfQklULFxuJiM0MztcdFx0XHQgICAgICBwaHlkZXYtXHUwMDNlYWR2ZXJ0aXNpbmcpKVxuJiM0MztcdFx0YWR2XzFnID0gQURWRVJUSVNFXzEwMDBGVUxMO1xuJiM0MztcdGlmIChsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV8xMDAwYmFzZVRfSGFsZl9CSVQsXG4mIzQzO1x0XHRcdCAgICAgIHBoeWRldi1cdTAwM2VhZHZlcnRpc2luZykpXG4mIzQzO1x0XHRhZHZfMWcgfD0gQURWRVJUSVNFXzEwMDBIQUxGO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfVkVORDIsXG4mIzQzO1x0XHRcdFx0ICAgICBSVEw4MjJYX1ZORDJfQzIyX1JFRyhNSUlfQ1RSTDEwMDApLFxuJiM0MztcdFx0XHRcdCAgICAgQURWRVJUSVNFXzEwMDBGVUxMIHwgQURWRVJUSVNFXzEwMDBIQUxGLFxuJiM0MztcdFx0XHRcdCAgICAgYWR2XzFnKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZSAwKVxuJiM0MztcdFx0cmV0dXJuIGdlbnBoeV9jNDVfcmVzdGFydF9hbmVnKHBoeWRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRsODI2MXhfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgZmlybXdhcmUgcGFyYW1ldGVycyBhcmUgcHJlc2VydmVkIGFjcm9zcyBJRUVFIHNvZnQgcmVzZXRzIGFuZFxuJiM0MztcdCAqIHN1c3BlbmQvcmVzdW1lIGN5Y2xlcy4gUmVsb2FkaW5nIGlzIG9ubHkgbmVjZXNzYXJ5IGFmdGVyIGEgcG93ZXJcbiYjNDM7XHQgKiBjeWNsZSBvciBoYXJkIHJlc2V0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWZ3X25hbWUgXHUwMDI2XHUwMDI2ICFwcml2LVx1MDAzZWZ3X2xvYWRlZClcbiYjNDM7XHRcdHJldHVybiBydGw4MjYxeF9md19sb2FkKHBoeWRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgcnRsODIxeF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbkBAIC0zMDAyLDYgJiM0MzszNDAwLDE5IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciByZWFsdGVrX2RydnNbXSA9IHtcbiBcdFx0LnJlc3VtZVx0XHQ9IGdlbnBoeV9yZXN1bWUsXG4gXHRcdC5yZWFkX21tZFx0PSBnZW5waHlfcmVhZF9tbWRfdW5zdXBwb3J0ZWQsXG4gXHRcdC53cml0ZV9tbWRcdD0gZ2VucGh5X3dyaXRlX21tZF91bnN1cHBvcnRlZCxcbiYjNDM7XHR9LCB7XG4mIzQzO1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUlRMXzgyNjFDX0NHKSxcbiYjNDM7XHRcdC5uYW1lXHRcdFx0PSBcJiMzNDtSZWFsdGVrIFJUTDgyNjEgMTBHYnBzIFBIWVwmIzM0OyxcbiYjNDM7XHRcdC5wcm9iZVx0XHRcdD0gcnRsODI2MXhfcHJvYmUsXG4mIzQzO1x0XHQuY29uZmlnX2luaXRcdFx0PSBydGw4MjYxeF9jb25maWdfaW5pdCxcbiYjNDM7XHRcdC5nZXRfZmVhdHVyZXNcdFx0PSBydGw4MjYxeF9nZXRfZmVhdHVyZXMsXG4mIzQzO1x0XHQuY29uZmlnX2FuZWdcdFx0PSBydGw4MjYxeF9jb25maWdfYW5lZyxcbiYjNDM7XHRcdC5yZWFkX3N0YXR1c1x0XHQ9IHJ0bDgyNjF4X3JlYWRfc3RhdHVzLFxuJiM0MztcdFx0LmNvbmZpZ19pbnRyXHRcdD0gcnRsODI2MXhfY29uZmlnX2ludHIsXG4mIzQzO1x0XHQuaGFuZGxlX2ludGVycnVwdFx0PSBydGw4MjYxeF9oYW5kbGVfaW50ZXJydXB0LFxuJiM0MztcdFx0LnNvZnRfcmVzZXRcdFx0PSBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0LFxuJiM0MztcdFx0LnN1c3BlbmRcdFx0PSBnZW5waHlfYzQ1X3BtYV9zdXNwZW5kLFxuJiM0MztcdFx0LnJlc3VtZVx0XHRcdD0gZ2VucGh5X2M0NV9wbWFfcmVzdW1lLFxuIFx0fSxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5pbmRleCBiZWZmMWQ2ZmNjN2NkYS4uNTdjZjlhYzM1MjRkMjIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5AQCAtMjMxNCw2ICYjNDM7MjMxNCw3IEBAIGludCBnZW5waHlfYzM3X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgKmNoYW5nZWQpO1xuIC8qIENsYXVzZSA0NSBQSFkgKi9cbiBpbnQgZ2VucGh5X2M0NV9yZXN0YXJ0X2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gaW50IGdlbnBoeV9jNDVfY2hlY2tfYW5kX3Jlc3RhcnRfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIHJlc3RhcnQpO1xuJiM0MztpbnQgZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgZ2VucGh5X2M0NV9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gaW50IGdlbnBoeV9jNDVfcmVhZF9saW5rKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X3JlYWRfbHBhKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG5pbmRleCBiMjU0MWM5NDhmYzFlYi4uMDZmNGJjM2MyMGM3MTcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG5AQCAtMzMyLDggJiM0MzszMzIsMTMgQEBcbiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHXHQweDAwODBcdC8qIEFkdmVydGlzZSAyLjVHQkFTRS1UICovXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfQURWNUdcdDB4MDEwMFx0LyogQWR2ZXJ0aXNlIDVHQkFTRS1UICovXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMTBHXHQweDEwMDBcdC8qIEFkdmVydGlzZSAxMEdCQVNFLVQgKi9cbiYjNDM7I2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFXHQweDgwMDBcdC8qIE1hc3Rlci9zbGF2ZSBtYW51YWwgY29uZmlnIGVuYWJsZSAqL1xuJiM0MzsjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRVx0MHg0MDAwXHQvKiBNYXN0ZXIvc2xhdmUgY29uZmlnIHZhbHVlICgxPU1hc3RlcikgKi9cbiYjNDM7I2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfUE9SVF9UWVBFXHQweDIwMDBcdC8qIE1hc3RlciBQcmVmZXJyZWQgVHlwZSAqL1xuIFxuIC8qIEFOIDEwR0JBU0UtVCBzdGF0dXMgcmVnaXN0ZXIuICovXG4mIzQzOyNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX01TX0ZBVUxUXHQweDgwMDBcdC8qIE1hc3Rlci9zbGF2ZSBmYXVsdCAqL1xuJiM0MzsjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9NU19SRVNcdDB4NDAwMFx0LyogTWFzdGVyL3NsYXZlIHJlc29sdXRpb24gKDE9TWFzdGVyKSAqL1xuICNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX0xQMl81R1x0MHgwMDIwICAvKiBMUCBpcyAyLjVHQlQgY2FwYWJsZSAqL1xuICNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX0xQNUdcdFx0MHgwMDQwICAvKiBMUCBpcyA1R0JUIGNhcGFibGUgKi9cbiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9MUFRSUlx0MHgwMjAwXHQvKiBMUCB0cmFpbmluZyByZXNldCByZXEuICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JFQUxURUtfUEhZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2VucGh5X2M0NV9wbWFfc29mdF9yZXNldCYjMzQ7LAogICAgJiMzNDtnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZSYjMzQ7LAogICAgJiMzNDtnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X3Byb2JlJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2dldF9mZWF0dXJlcyYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9yZWFkX3N0YXR1cyYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF92ZXJpZnlfZmlybXdhcmUmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeSYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9md19sb2FkJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2NvbmZpZ19pbnRyJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfY29uZmlnX2FuZWcmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfY29uZmlnX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw4MjYxIDEwR2JwcyBQSFkgYW5kIGludHJvZHVjZXMgQ2xhdXNlIDQ1IFBIWSBNYXN0ZXIvU2xhdmUgY29uZmlndXJhdGlvbi4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYnkgZW11bGF0aW5nIGEgVVNCIG5ldHdvcmsgYWRhcHRlciAoZS5nLiwgQVNJWCBvciBTTVNDKSB0aGF0IGV4cG9zZXMgYW4gTURJTyBidXMsIGFuZCByZXNwb25kaW5nIHRvIFBIWSBJRCByZWFkcyB3aXRoIHRoZSBSVEw4MjYxIElELiBUaGUgZHJpdmVyIGFsc28gcGFyc2VzIGZpcm13YXJlLCB3aGljaCBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWNkMGFkMDAyM2U1NTM2MDI0ZGY0YWVhNmEzNmQ2NGNjMGQzY2VlNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDIxIDE1OjQ3OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMKaW5kZXggMTI2OTUxNzQxNDI4OGYuLjg3MDkyMDMxMWY5YTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMKQEAgLTM4NCw2ICYjNDM7Mzg0LDExOSBAQCBpbnQgZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgcmVzdGFydCkKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfY2hlY2tfYW5kX3Jlc3RhcnRfYW5lZyk7CiAKJiM0MzsvKioKJiM0MzsgKiBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0IC0gc29mdHdhcmUgcmVzZXQgdGhlIFBIWSB2aWEgQ2xhdXNlIDQ1IFBNQS9QTUQgY29udHJvbCByZWdpc3RlcgomIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdAomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7aW50IGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQsIHZhbDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5X3NldF9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19DVFJMMSwKJiM0MzsJCQkgICAgICAgTURJT19DVFJMMV9SRVNFVCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsCiYjNDM7CQkJCQkgTURJT19DVFJMMSwgdmFsLAomIzQzOwkJCQkJICEodmFsICZhbXA7IE1ESU9fQ1RSTDFfUkVTRVQpLAomIzQzOwkJCQkJIDUwMDAsIDYwMDAwMCwgdHJ1ZSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXQpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlIC0gQ29uZmlndXJlIE1hc3Rlci9TbGF2ZSBzZXR0aW5nIGZvciBDNDUgUEhZcwomIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdAomIzQzOyAqCiYjNDM7ICogRGVzY3JpcHRpb246IENvbmZpZ3VyZSB0aGUgZm9yY2VkIG9yIHByZWZlcnJlZCBNYXN0ZXIvU2xhdmUgcm9sZQomIzQzOyAqIDEwR0JBU0UtVCBjb250cm9sIHJlZ2lzdGVyIChNTUQgNywgUmVnaXN0ZXIgMHgwMDIwKSBhY2NvcmRpbmcgdG8KJiM0MzsgKiBJRUVFIDgwMi4zIHN0YW5kYXJkcy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogbmVnYXRpdmUgZXJybm8gY29kZSBvbiBmYWlsdXJlLCAwIGlmIE1hc3Rlci9TbGF2ZSBkaWRuJiMzOTt0IGNoYW5nZSwKJiM0MzsgKiBvciAxIGlmIE1hc3Rlci9TbGF2ZSBtb2RlcyBjaGFuZ2VkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXUxNiBjdGwgPSAwOwomIzQzOwomIzQzOwlzd2l0Y2ggKHBoeWRldi0mZ3Q7bWFzdGVyX3NsYXZlX3NldCkgewomIzQzOwljYXNlIE1BU1RFUl9TTEFWRV9DRkdfTUFTVEVSX1BSRUZFUlJFRDoKJiM0MzsJCWN0bCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19QT1JUX1RZUEU7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBNQVNURVJfU0xBVkVfQ0ZHX1NMQVZFX1BSRUZFUlJFRDoKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIE1BU1RFUl9TTEFWRV9DRkdfTUFTVEVSX0ZPUkNFOgomIzQzOwkJY3RsID0gTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRSB8IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIE1BU1RFUl9TTEFWRV9DRkdfU0xBVkVfRk9SQ0U6CiYjNDM7CQljdGwgPSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTUFTVEVSX1NMQVZFX0NGR19VTktOT1dOOgomIzQzOwljYXNlIE1BU1RFUl9TTEFWRV9DRkdfVU5TVVBQT1JURUQ6CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXBoeWRldl93YXJuKHBoeWRldiwgJiMzNDtVbnN1cHBvcnRlZCBNYXN0ZXIvU2xhdmUgbW9kZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfQ1RSTCwKJiM0MzsJCQkJICAgICAgTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRSB8CiYjNDM7CQkJCSAgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRSB8CiYjNDM7CQkJCSAgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19QT1JUX1RZUEUsIGN0bCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmUgLSByZWFkIG1hc3Rlci9zbGF2ZSBzdGF0dXMKJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKJiM0MzsgKgomIzQzOyAqIERlc2NyaXB0aW9uOiBSZWFkIHRoZSBNYXN0ZXIvU2xhdmUgY29uZmlndXJhdGlvbiBhbmQgc3RhdHVzCiYjNDM7ICogZnJvbSAxMEdCQVNFLVQgY29udHJvbC9zdGF0dXMgcmVnaXN0ZXJzIChNTUQgNywgUmVnIDB4MDAyMCBhbmQgMHgwMDIxKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCB2YWw7CiYjNDM7CiYjNDM7CXBoeWRldi0mZ3Q7bWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfVU5LTk9XTjsKJiM0MzsJcGh5ZGV2LSZndDttYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfVU5LTk9XTjsKJiM0MzsKJiM0MzsJdmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfQ1RSTCk7CiYjNDM7CWlmICh2YWwgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHZhbDsKJiM0MzsKJiM0MzsJaWYgKHZhbCAmYW1wOyBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFKSB7CiYjNDM7CQlpZiAodmFsICZhbXA7IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRSkKJiM0MzsJCQlwaHlkZXYtJmd0O21hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX01BU1RFUl9GT1JDRTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlwaHlkZXYtJmd0O21hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX1NMQVZFX0ZPUkNFOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKHZhbCAmYW1wOyBNRElPX0FOXzEwR0JUX0NUUkxfTVNfUE9SVF9UWVBFKQomIzQzOwkJCXBoeWRldi0mZ3Q7bWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfTUFTVEVSX1BSRUZFUlJFRDsKJiM0MzsJCWVsc2UKJiM0MzsJCQlwaHlkZXYtJmd0O21hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX1NMQVZFX1BSRUZFUlJFRDsKJiM0MzsJfQomIzQzOwomIzQzOwl2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9TVEFUKTsKJiM0MzsJaWYgKHZhbCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gdmFsOwomIzQzOwomIzQzOwlpZiAodmFsICZhbXA7IE1ESU9fQU5fMTBHQlRfU1RBVF9NU19GQVVMVCkgewomIzQzOwkJcGh5ZGV2LSZndDttYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfRVJSOwomIzQzOwl9IGVsc2UgaWYgKHBoeWRldi0mZ3Q7bGluaykgewomIzQzOwkJaWYgKHZhbCAmYW1wOyBNRElPX0FOXzEwR0JUX1NUQVRfTVNfUkVTKQomIzQzOwkJCXBoeWRldi0mZ3Q7bWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX01BU1RFUjsKJiM0MzsJCWVsc2UKJiM0MzsJCQlwaHlkZXYtJmd0O21hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9TTEFWRTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXBoeWRldi0mZ3Q7bWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX1VOS05PV047CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBnZW5waHlfYzQ1X2FuZWdfZG9uZSAtIHJldHVybiBhdXRvLW5lZ290aWF0aW9uIGNvbXBsZXRlIHN0YXR1cwogICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CkBAIC0xMTkyLDYgJiM0MzsxMzA1LDEwIEBAIGludCBnZW5waHlfYzQ1X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJCQlyZXQgPSBnZW5waHlfYzQ1X2Jhc2V0MV9yZWFkX3N0YXR1cyhwaHlkZXYpOwogCQkJaWYgKHJldCAmbHQ7IDApCiAJCQkJcmV0dXJuIHJldDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcmV0ID0gZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZShwaHlkZXYpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlyZXR1cm4gcmV0OwogCQl9CiAKIAkJcGh5X3Jlc29sdmVfYW5lZ19saW5rbW9kZShwaHlkZXYpOwpAQCAtMTIyNSw2ICYjNDM7MTM0MiwxNCBAQCBpbnQgZ2VucGh5X2M0NV9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogCWlmIChyZXQgJmd0OyAwKQogCQljaGFuZ2VkID0gdHJ1ZTsKIAomIzQzOwlpZiAoIWdlbnBoeV9jNDVfYmFzZXQxX2FibGUocGh5ZGV2KSkgewomIzQzOwkJcmV0ID0gZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmUocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlpZiAocmV0ICZndDsgMCkKJiM0MzsJCQljaGFuZ2VkID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwogCXJldHVybiBnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcocGh5ZGV2LCBjaGFuZ2VkKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfY29uZmlnX2FuZWcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMgYi9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYwppbmRleCBiNjVkMGY1ZmExYTAxNC4uMWMwYjljNDBhODFlNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jCkBAIC04LDcgJiM0Mzs4LDkgQEAKICAqIENvcHlyaWdodCAoYykgMjAwNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgogICovCiAjaW5jbHVkZSAmbHQ7bGludXgvYml0b3BzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NyYzMyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXRodG9vbF9uZXRsaW5rLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Zpcm13YXJlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9waHkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wbV93YWtlaXJxLmgmZ3Q7CkBAIC0xNDEsNiAmIzQzOzE0MywxMCBAQAogI2RlZmluZSBSVEw4MjExRl9QSFlTSUNBTF9BRERSX1dPUkQxCQkxNwogI2RlZmluZSBSVEw4MjExRl9QSFlTSUNBTF9BRERSX1dPUkQyCQkxOAogCiYjNDM7I2RlZmluZSBSVEw4MjYxWF9FWFRfQUREUl9SRUcJCQkweGE0MzYKJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0VYVF9EQVRBX1JFRwkJCTB4YTQzOAomIzQzOyNkZWZpbmUgUlRMXzgyNjFYX1NVQl9QSFlfSURfQUREUgkJMHg4MDFkCiYjNDM7CiAjZGVmaW5lIFJUTDgyMlhfVk5EMV9TRVJERVNfT1BUSU9OCQkJMHg2OTdhCiAjZGVmaW5lIFJUTDgyMlhfVk5EMV9TRVJERVNfT1BUSU9OX01PREVfTUFTSwkJR0VOTUFTSyg1LCAwKQogI2RlZmluZSBSVEw4MjJYX1ZORDFfU0VSREVTX09QVElPTl9NT0RFXzI1MDBCQVNFWF9TR01JSQkJMApAQCAtMjUxLDYgJiM0MzsyNTcsNzAgQEAKICNkZWZpbmUgUlRMXzgyMjFCX1ZNX0NHCQkJCTB4MDAxY2M4NGEKICNkZWZpbmUgUlRMXzgyNTFCCQkJCTB4MDAxY2M4NjIKICNkZWZpbmUgUlRMXzgyNjFDCQkJCTB4MDAxY2M4OTAKJiM0MzsjZGVmaW5lIFJUTF84MjYxQ19DRwkJCQkweDAwMWNjODk4CiYjNDM7CiYjNDM7I2RlZmluZSBSVEw4MjYxQ19DRV9NT0RFTAkJMHgwMAomIzQzOyNkZWZpbmUgUlRMODI2MURfTU9ERUwJCQkweDgxCiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfQVVUT05FR19FUlJPUglCSVQoMCkKJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9QQUdFX1JFQ1YJCUJJVCgyKQomIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORQlCSVQoMykKJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9MSU5LX0NIRwkJQklUKDQpCiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfUEhZX1JFR19BQ0NFU1MJQklUKDUpCiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfUE1FCQlCSVQoNykKJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9BTERQU19DSEcJCUJJVCg5KQomIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX0pBQkJFUgkJQklUKDEwKQomIzQzOwomIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX01BU0tfREVGQVVMVAkoUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8IFwKJiM0MzsJCQkJCSBSVEw4MjYxWF9JTlRfTElOS19DSEcgfCBcCiYjNDM7CQkJCQkgUlRMODI2MVhfSU5UX0FVVE9ORUdfRVJST1IgfCBcCiYjNDM7CQkJCQkgUlRMODI2MVhfSU5UX0pBQkJFUikKJiM0MzsKJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9NQVNLX0FMTAkJKFJUTDgyNjFYX0lOVF9BVVRPTkVHX0VSUk9SIHwgXAomIzQzOwkJCQkJIFJUTDgyNjFYX0lOVF9QQUdFX1JFQ1YgfCBcCiYjNDM7CQkJCQkgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8IFwKJiM0MzsJCQkJCSBSVEw4MjYxWF9JTlRfTElOS19DSEcgfCBcCiYjNDM7CQkJCQkgUlRMODI2MVhfSU5UX1BIWV9SRUdfQUNDRVNTIHwgXAomIzQzOwkJCQkJIFJUTDgyNjFYX0lOVF9QTUUgfCBcCiYjNDM7CQkJCQkgUlRMODI2MVhfSU5UX0FMRFBTX0NIRyB8IFwKJiM0MzsJCQkJCSBSVEw4MjYxWF9JTlRfSkFCQkVSKQomIzQzOwomIzQzOyNkZWZpbmUgRldfTUFJTl9NQUdJQwkJCTB4NTI1NDRDMzgKJiM0MzsjZGVmaW5lIEZXX1NVQl9NQUdJQ184MjYxQwkJMHgzMjM2MzE0MwomIzQzOyNkZWZpbmUgUlRMODI2MVhfUE9MTF9USU1FT1VUX01TCTEwMAomIzQzOyNkZWZpbmUgUlRMODI2MVhfTUFYX01NRF9ERVYJCTMxCiYjNDM7CiYjNDM7I2RlZmluZSBSVEw4MjYxQ19DRV9GV19OQU1FCSYjMzQ7cnRsX25pYy9ydGw4MjYxYy5iaW4mIzM0OwomIzQzO01PRFVMRV9GSVJNV0FSRShSVEw4MjYxQ19DRV9GV19OQU1FKTsKJiM0MzsKJiM0MztlbnVtIHJ0bDgyNjF4X2Z3X29wIHsKJiM0MzsJT1BfV1JJVEUgPSAweDAwLAkvKiBXcml0ZSAqLwomIzQzOwlPUF9QT0xMICA9IDB4MDIsCS8qIFBvbGxpbmcgKi8KJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgewomIzQzOwlfX2xlMzIgbWFpbl9tYWdpYzsJLyogTWFpbiBtYWdpYyBudW1iZXIgKi8KJiM0MzsJX19sZTMyIHN1Yl9tYWdpYzsJLyogU3ViIG1hZ2ljIG51bWJlciAqLwomIzQzOwlfX2xlMTYgdmVyc2lvbl9tYWpvcjsJLyogTWFqb3IgdmVyc2lvbiAqLwomIzQzOwlfX2xlMTYgdmVyc2lvbl9taW5vcjsJLyogTWlub3IgdmVyc2lvbiAqLwomIzQzOwlfX2xlMTYgbnVtX2VudHJpZXM7CS8qIE51bWJlciBvZiBlbnRyaWVzICovCiYjNDM7CV9fbGUxNiByZXNlcnZlZDsJLyogUmVzZXJ2ZWQgKi8KJiM0MzsJX19sZTMyIGNyYzMyOwkJLyogQ1JDMzIgY2hlY2tzdW0gKi8KJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydGw4MjYxeF9md19lbnRyeSB7CiYjNDM7CV9fdTggIHR5cGU7CQkvKiBPcGVyYXRpb24gdHlwZSAoT1BfKikgKi8KJiM0MzsJX191OCAgZGV2OwkJLyogTU1EIGRldmljZSAqLwomIzQzOwlfX2xlMTYgYWRkcjsJCS8qIFJlZ2lzdGVyIGFkZHJlc3MgKi8KJiM0MzsJX191OCAgbXNiOwkJLyogTVNCIGJpdCBwb3NpdGlvbiAqLwomIzQzOwlfX3U4ICBsc2I7CQkvKiBMU0IgYml0IHBvc2l0aW9uICovCiYjNDM7CV9fbGUxNiB2YWx1ZTsJCS8qIFZhbHVlIHRvIHdyaXRlL2NvbXBhcmUgKi8KJiM0MzsJX19sZTE2IHRpbWVvdXRfbXM7CS8qIFBvbGwgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKi8KJiM0MzsJX191OCAgcG9sbF9zZXQ7CQkvKiBQb2xsIHVudGlsIGVxdWFsICgxKSBvciBub3QgZXF1YWwgKDApICovCiYjNDM7CV9fdTggIHJlc2VydmVkOwkJLyogUmVzZXJ2ZWQgKi8KJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgRldfSEVBREVSX1NJWkUJCXNpemVvZihzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyKQomIzQzOyNkZWZpbmUgRldfRU5UUllfU0laRQkJc2l6ZW9mKHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSkKIAogLyogUlRMODIxMUUgYW5kIFJUTDgyMTFGIHN1cHBvcnQgdXAgdG8gdGhyZWUgTEVEcyAqLwogI2RlZmluZSBSVEw4MjExeF9MRURfQ09VTlQJCQkzCkBAIC0yNzAsNiAmIzQzOzM0MCwxMSBAQCBzdHJ1Y3QgcnRsODIxeF9wcml2IHsKIAl1MTYgaW5lcjsKIH07CiAKJiM0MztzdHJ1Y3QgcnRsODI2MXhfcHJpdiB7CiYjNDM7CWNvbnN0IGNoYXIgKmZ3X25hbWU7CiYjNDM7CWJvb2wgZndfbG9hZGVkOwomIzQzO307CiYjNDM7CiBzdGF0aWMgaW50IHJ0bDgyMXhfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CiAJcmV0dXJuIF9fcGh5X3JlYWQocGh5ZGV2LCBSVEw4MjF4X1BBR0VfU0VMRUNUKTsKQEAgLTMxMCw2ICYjNDM7Mzg1LDMyOSBAQCBzdGF0aWMgaW50IHJ0bDgyMXhfbW9kaWZ5X2V4dF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiBleHRfcGFnZSwKIAlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZHBhZ2UsIHJldCk7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXY7CiYjNDM7CXN0cnVjdCBydGw4MjYxeF9wcml2ICpwcml2OwomIzQzOwlpbnQgc3ViX3BoeV9pZCwgcmV0OwomIzQzOwomIzQzOwlwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcHJpdikKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlwaHlkZXYtJmd0O3ByaXYgPSBwcml2OwomIzQzOwomIzQzOwlyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyNjFYX0VYVF9BRERSX1JFRywKJiM0MzsJCQkgICAgUlRMXzgyNjFYX1NVQl9QSFlfSURfQUREUik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyNjFYX0VYVF9EQVRBX1JFRyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJc3ViX3BoeV9pZCA9IChyZXQgJmd0OyZndDsgOCkgJmFtcDsgMHhmZjsKJiM0MzsKJiM0MzsJc3dpdGNoIChzdWJfcGh5X2lkKSB7CiYjNDM7CWNhc2UgUlRMODI2MUNfQ0VfTU9ERUw6CiYjNDM7CQlwcml2LSZndDtmd19uYW1lID0gUlRMODI2MUNfQ0VfRldfTkFNRTsKJiM0MzsJCXBoeWRldl9pbmZvKHBoeWRldiwgJiMzNDtSVEw4MjYxQyBkZXRlY3RlZCAoc3ViX2lkIDB4JTAyeClcbiYjMzQ7LCBzdWJfcGh5X2lkKTsKJiM0MzsJCWJyZWFrOwomIzQzOwomIzQzOwljYXNlIFJUTDgyNjFEX01PREVMOgomIzQzOwkJcGh5ZGV2X2luZm8ocGh5ZGV2LCAmIzM0O1JUTDgyNjFEIGRldGVjdGVkIChzdWJfaWQgMHglMDJ4KVxuJiMzNDssIHN1Yl9waHlfaWQpOwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlwaHlkZXZfd2FybihwaHlkZXYsICYjMzQ7VW5rbm93biBzdWJfaWQgMHglMDJ4LCBkZWZhdWx0IGJlaGF2aW9yXG4mIzM0Oywgc3ViX3BoeV9pZCk7CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MjYxeF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9jNDVfcG1hX3JlYWRfYWJpbGl0aWVzKHBoeWRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwkvKgomIzQzOwkgKiBTdXBwbGVtZW50IE11bHRpLUdpZyBzcGVlZHMgdGhhdCBtYXkgbm90IGJlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQKJiM0MzsJICogUlRMODI2MVggc3VwcG9ydHMgMi41Ry81RyBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCAxMEcKJiM0MzsJICovCiYjNDM7CWxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULAomIzQzOwkJCSBwaHlkZXYtJmd0O3N1cHBvcnRlZCk7CiYjNDM7CWxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfNTAwMGJhc2VUX0Z1bGxfQklULAomIzQzOwkJCSBwaHlkZXYtJmd0O3N1cHBvcnRlZCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0LCB2YWwgPSAwOwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDthdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSB7CiYjNDM7CQlyZXQgPSBnZW5waHlfYzQ1X2FuZWdfZG9uZShwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQl2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwKJiM0MzsJCQkJCSAgIFJUTDgyMlhfVk5EMl9DMjJfUkVHKE1JSV9TVEFUMTAwMCkpOwomIzQzOwkJCWlmICh2YWwgJmx0OyAwKQomIzQzOwkJCQlyZXR1cm4gdmFsOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CW1paV9zdGF0MTAwMF9tb2RfbGlua21vZGVfbHBhX3QocGh5ZGV2LSZndDtscF9hZHZlcnRpc2luZywgdmFsKTsKJiM0MzsKJiM0MzsJcmV0ID0gZ2VucGh5X2M0NV9yZWFkX3N0YXR1cyhwaHlkZXYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciAqaGRyOwomIzQzOwl1MzIgbWFpbl9tYWdpYywgc3ViX21hZ2ljOwomIzQzOwl1MzIgY2FsY19jcmMsIGZpbGVfY3JjOwomIzQzOwlzaXplX3QgZGF0YV9sZW47CiYjNDM7CXUxNiBudW1fZW50cmllczsKJiM0MzsKJiM0MzsJaWYgKGZ3LSZndDtzaXplICZsdDsgRldfSEVBREVSX1NJWkUpIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O0Zpcm13YXJlIHRvbyBzbWFsbDogJXp1IGJ5dGVzXG4mIzM0OywgZnctJmd0O3NpemUpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaGRyID0gKGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgKilmdy0mZ3Q7ZGF0YTsKJiM0MzsKJiM0MzsJbWFpbl9tYWdpYyA9IGxlMzJfdG9fY3B1KGhkci0mZ3Q7bWFpbl9tYWdpYyk7CiYjNDM7CWlmIChtYWluX21hZ2ljICE9IEZXX01BSU5fTUFHSUMpIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O0ludmFsaWQgZmlybXdhcmUgbWFnaWM6IDB4JTA4eFxuJiMzNDssIG1haW5fbWFnaWMpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3ViX21hZ2ljID0gbGUzMl90b19jcHUoaGRyLSZndDtzdWJfbWFnaWMpOwomIzQzOwlpZiAoc3ViX21hZ2ljICE9IEZXX1NVQl9NQUdJQ184MjYxQykgewomIzQzOwkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7SW52YWxpZCBzdWIgbWFnaWM6IDB4JTA4eFxuJiMzNDssIHN1Yl9tYWdpYyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwludW1fZW50cmllcyA9IGxlMTZfdG9fY3B1KGhkci0mZ3Q7bnVtX2VudHJpZXMpOwomIzQzOwlkYXRhX2xlbiA9IG51bV9lbnRyaWVzICogRldfRU5UUllfU0laRTsKJiM0MzsKJiM0MzsJaWYgKGZ3LSZndDtzaXplICE9IHNpemVvZigqaGRyKSAmIzQzOyBkYXRhX2xlbikgewomIzQzOwkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7RmlybXdhcmUgc2l6ZSBtaXNtYXRjaFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY2FsY19jcmMgPSBjcmMzMih+MCwgZnctJmd0O2RhdGEgJiM0MzsgRldfSEVBREVSX1NJWkUsIGRhdGFfbGVuKSBeIH4wOwomIzQzOwlmaWxlX2NyYyA9IGxlMzJfdG9fY3B1KGhkci0mZ3Q7Y3JjMzIpOwomIzQzOwomIzQzOwlpZiAoY2FsY19jcmMgIT0gZmlsZV9jcmMpIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O0NSQzMyIG1pc21hdGNoOiBjYWxjdWxhdGVkPTB4JTA4eCBmaWxlPTB4JTA4eFxuJiMzNDssCiYjNDM7CQkJICAgY2FsY19jcmMsIGZpbGVfY3JjKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKJiM0MzsJCQkJICAgICBjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkgKmVudHJ5KQomIzQzO3sKJiM0MzsJdTE2IGFkZHIsIHZhbHVlLCB0aW1lb3V0X21zOwomIzQzOwl1OCBkZXYsIG1zYiwgbHNiLCBwb2xsX3NldDsKJiM0MzsJdTMyIGJpdHMsIGV4cGVjdF92YWw7CiYjNDM7CWludCByZXQsIHZhbDsKJiM0MzsKJiM0MzsJZGV2ID0gZW50cnktJmd0O2RldjsKJiM0MzsJYWRkciA9IGxlMTZfdG9fY3B1KGVudHJ5LSZndDthZGRyKTsKJiM0MzsJbXNiID0gZW50cnktJmd0O21zYjsKJiM0MzsJbHNiID0gZW50cnktJmd0O2xzYjsKJiM0MzsJdmFsdWUgPSBsZTE2X3RvX2NwdShlbnRyeS0mZ3Q7dmFsdWUpOwomIzQzOwl0aW1lb3V0X21zID0gbGUxNl90b19jcHUoZW50cnktJmd0O3RpbWVvdXRfbXMpOwomIzQzOwlwb2xsX3NldCA9IGVudHJ5LSZndDtwb2xsX3NldDsKJiM0MzsKJiM0MzsJaWYgKHRpbWVvdXRfbXMgPT0gMCkKJiM0MzsJCXRpbWVvdXRfbXMgPSBSVEw4MjYxWF9QT0xMX1RJTUVPVVRfTVM7CiYjNDM7CiYjNDM7CWlmIChkZXYgJmd0OyBSVEw4MjYxWF9NQVhfTU1EX0RFVikgewomIzQzOwkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7aW52YWxpZCBmaXJtd2FyZSBNTUQgZGV2aWNlOiBkZXY9JXVcbiYjMzQ7LCBkZXYpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG1zYiAmZ3Q7IDE1IHx8IGxzYiAmZ3Q7IG1zYikgewomIzQzOwkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7aW52YWxpZCBmaXJtd2FyZSBiaXRzOiBtc2I9JXUsIGxzYj0ldVxuJiMzNDssIG1zYiwgbHNiKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN3aXRjaCAoZW50cnktJmd0O3R5cGUpIHsKJiM0MzsJY2FzZSBPUF9XUklURToKJiM0MzsJCXJldCA9IHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgZGV2LCBhZGRyLAomIzQzOwkJCQkgICAgIEdFTk1BU0sobXNiLCBsc2IpLCAodmFsdWUgJmx0OyZsdDsgbHNiKSAmYW1wOyBHRU5NQVNLKG1zYiwgbHNiKSk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJY2FzZSBPUF9QT0xMOgomIzQzOwkJYml0cyA9IEdFTk1BU0sobXNiLCBsc2IpOwomIzQzOwkJZXhwZWN0X3ZhbCA9ICh2YWx1ZSAmbHQ7Jmx0OyBsc2IpICZhbXA7IGJpdHM7CiYjNDM7CiYjNDM7CQlpZiAocG9sbF9zZXQpCiYjNDM7CQkJcmV0ID0gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIGRldiwgYWRkciwgdmFsLAomIzQzOwkJCQkJCQkodmFsICZhbXA7IGJpdHMpID09IGV4cGVjdF92YWwsCiYjNDM7CQkJCQkJCTEwMDAsIHRpbWVvdXRfbXMgKiAxMDAwLCBmYWxzZSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJcmV0ID0gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIGRldiwgYWRkciwgdmFsLAomIzQzOwkJCQkJCQkodmFsICZhbXA7IGJpdHMpICE9IGV4cGVjdF92YWwsCiYjNDM7CQkJCQkJCTEwMDAsIHRpbWVvdXRfbXMgKiAxMDAwLCBmYWxzZSk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X2Z3X2xvYWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydGw4MjYxeF9wcml2ICpwcml2ID0gcGh5ZGV2LSZndDtwcml2OwomIzQzOwljb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkgKmVudHJ5OwomIzQzOwljb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICpoZHI7CiYjNDM7CWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CiYjNDM7CWludCByZXQsIGk7CiYjNDM7CiYjNDM7CWlmICghcHJpdi0mZ3Q7ZndfbmFtZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZhbXA7ZncsIHByaXYtJmd0O2Z3X25hbWUsICZhbXA7cGh5ZGV2LSZndDttZGlvLmRldik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O0ZhaWxlZCB0byBsb2FkIGZpcm13YXJlICVzOiAlZFxuJiMzNDssIHByaXYtJmd0O2Z3X25hbWUsIHJldCk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZShwaHlkZXYsIGZ3KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gcmVsZWFzZV9mdzsKJiM0MzsKJiM0MzsJaGRyID0gKGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgKilmdy0mZ3Q7ZGF0YTsKJiM0MzsKJiM0MzsJZW50cnkgPSAoY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2VudHJ5ICopKGZ3LSZndDtkYXRhICYjNDM7IEZXX0hFQURFUl9TSVpFKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGxlMTZfdG9fY3B1KGhkci0mZ3Q7bnVtX2VudHJpZXMpOyBpJiM0MzsmIzQzOywgZW50cnkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyZXQgPSBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5KHBoeWRldiwgZW50cnkpOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O0VudHJ5ICVkIGZhaWxlZDogJWRcbiYjMzQ7LCBpLCByZXQpOwomIzQzOwkJCWdvdG8gcmVsZWFzZV9mdzsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlwcml2LSZndDtmd19sb2FkZWQgPSB0cnVlOwomIzQzOwomIzQzO3JlbGVhc2VfZnc6CiYjNDM7CXJlbGVhc2VfZmlybXdhcmUoZncpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X2NvbmZpZ19pbnRyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDtpbnRlcnJ1cHRzID09IFBIWV9JTlRFUlJVUFRfRU5BQkxFRCkgewomIzQzOwkJcmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5TUik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJcmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lORVIsCiYjNDM7CQkJCSAgICBSVEw4MjYxWF9JTlRfTUFTS19ERUZBVUxUKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5FUiwgMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJcmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5TUik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IGlycV9zdGF0dXM7CiYjNDM7CiYjNDM7CWlycV9zdGF0dXMgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODIyMUJfVk5EMl9JTlNSKTsKJiM0MzsJaWYgKGlycV9zdGF0dXMgJmx0OyAwKSB7CiYjNDM7CQlwaHlfZXJyb3IocGh5ZGV2KTsKJiM0MzsJCXJldHVybiBJUlFfTk9ORTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIShpcnFfc3RhdHVzICZhbXA7IFJUTDgyNjFYX0lOVF9NQVNLX0FMTCkpCiYjNDM7CQlyZXR1cm4gSVJRX05PTkU7CiYjNDM7CiYjNDM7CWlmIChpcnFfc3RhdHVzICZhbXA7IChSVEw4MjYxWF9JTlRfTElOS19DSEcgfCBSVEw4MjYxWF9JTlRfQVVUT05FR19ET05FIHwKJiM0MzsJICAgIFJUTDgyNjFYX0lOVF9BVVRPTkVHX0VSUk9SIHwgUlRMODI2MVhfSU5UX0pBQkJFUikpCiYjNDM7CQlwaHlfdHJpZ2dlcl9tYWNoaW5lKHBoeWRldik7CiYjNDM7CiYjNDM7CXJldHVybiBJUlFfSEFORExFRDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MjYxeF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJdTE2IGFkdl8xZyA9IDA7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9jNDVfY29uZmlnX2FuZWcocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDthdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMGJhc2VUX0Z1bGxfQklULAomIzQzOwkJCSAgICAgIHBoeWRldi0mZ3Q7YWR2ZXJ0aXNpbmcpKQomIzQzOwkJYWR2XzFnID0gQURWRVJUSVNFXzEwMDBGVUxMOwomIzQzOwlpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMGJhc2VUX0hhbGZfQklULAomIzQzOwkJCSAgICAgIHBoeWRldi0mZ3Q7YWR2ZXJ0aXNpbmcpKQomIzQzOwkJYWR2XzFnIHw9IEFEVkVSVElTRV8xMDAwSEFMRjsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLAomIzQzOwkJCQkgICAgIFJUTDgyMlhfVk5EMl9DMjJfUkVHKE1JSV9DVFJMMTAwMCksCiYjNDM7CQkJCSAgICAgQURWRVJUSVNFXzEwMDBGVUxMIHwgQURWRVJUSVNFXzEwMDBIQUxGLAomIzQzOwkJCQkgICAgIGFkdl8xZyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJaWYgKHJldCAmZ3Q7IDApCiYjNDM7CQlyZXR1cm4gZ2VucGh5X2M0NV9yZXN0YXJ0X2FuZWcocGh5ZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydGw4MjYxeF9wcml2ICpwcml2ID0gcGh5ZGV2LSZndDtwcml2OwomIzQzOwomIzQzOwkvKiBUaGUgZmlybXdhcmUgcGFyYW1ldGVycyBhcmUgcHJlc2VydmVkIGFjcm9zcyBJRUVFIHNvZnQgcmVzZXRzIGFuZAomIzQzOwkgKiBzdXNwZW5kL3Jlc3VtZSBjeWNsZXMuIFJlbG9hZGluZyBpcyBvbmx5IG5lY2Vzc2FyeSBhZnRlciBhIHBvd2VyCiYjNDM7CSAqIGN5Y2xlIG9yIGhhcmQgcmVzZXQuCiYjNDM7CSAqLwomIzQzOwlpZiAocHJpdi0mZ3Q7ZndfbmFtZSAmYW1wOyZhbXA7ICFwcml2LSZndDtmd19sb2FkZWQpCiYjNDM7CQlyZXR1cm4gcnRsODI2MXhfZndfbG9hZChwaHlkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHJ0bDgyMXhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXY7CkBAIC0zMDAyLDYgJiM0MzszNDAwLDE5IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciByZWFsdGVrX2RydnNbXSA9IHsKIAkJLnJlc3VtZQkJPSBnZW5waHlfcmVzdW1lLAogCQkucmVhZF9tbWQJPSBnZW5waHlfcmVhZF9tbWRfdW5zdXBwb3J0ZWQsCiAJCS53cml0ZV9tbWQJPSBnZW5waHlfd3JpdGVfbW1kX3Vuc3VwcG9ydGVkLAomIzQzOwl9LCB7CiYjNDM7CQlQSFlfSURfTUFUQ0hfRVhBQ1QoUlRMXzgyNjFDX0NHKSwKJiM0MzsJCS5uYW1lCQkJPSAmIzM0O1JlYWx0ZWsgUlRMODI2MSAxMEdicHMgUEhZJiMzNDssCiYjNDM7CQkucHJvYmUJCQk9IHJ0bDgyNjF4X3Byb2JlLAomIzQzOwkJLmNvbmZpZ19pbml0CQk9IHJ0bDgyNjF4X2NvbmZpZ19pbml0LAomIzQzOwkJLmdldF9mZWF0dXJlcwkJPSBydGw4MjYxeF9nZXRfZmVhdHVyZXMsCiYjNDM7CQkuY29uZmlnX2FuZWcJCT0gcnRsODI2MXhfY29uZmlnX2FuZWcsCiYjNDM7CQkucmVhZF9zdGF0dXMJCT0gcnRsODI2MXhfcmVhZF9zdGF0dXMsCiYjNDM7CQkuY29uZmlnX2ludHIJCT0gcnRsODI2MXhfY29uZmlnX2ludHIsCiYjNDM7CQkuaGFuZGxlX2ludGVycnVwdAk9IHJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHQsCiYjNDM7CQkuc29mdF9yZXNldAkJPSBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0LAomIzQzOwkJLnN1c3BlbmQJCT0gZ2VucGh5X2M0NV9wbWFfc3VzcGVuZCwKJiM0MzsJCS5yZXN1bWUJCQk9IGdlbnBoeV9jNDVfcG1hX3Jlc3VtZSwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmgKaW5kZXggYmVmZjFkNmZjYzdjZGEuLjU3Y2Y5YWMzNTI0ZDIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGh5LmgKQEAgLTIzMTQsNiAmIzQzOzIzMTQsNyBAQCBpbnQgZ2VucGh5X2MzN19yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sICpjaGFuZ2VkKTsKIC8qIENsYXVzZSA0NSBQSFkgKi8KIGludCBnZW5waHlfYzQ1X3Jlc3RhcnRfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIGludCBnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCByZXN0YXJ0KTsKJiM0MztpbnQgZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIGludCBnZW5waHlfYzQ1X2FuZWdfZG9uZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIGludCBnZW5waHlfYzQ1X3JlYWRfbGluayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIGludCBnZW5waHlfYzQ1X3JlYWRfbHBhKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmgKaW5kZXggYjI1NDFjOTQ4ZmMxZWIuLjA2ZjRiYzNjMjBjNzE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmgKQEAgLTMzMiw4ICYjNDM7MzMyLDEzIEBACiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHCTB4MDA4MAkvKiBBZHZlcnRpc2UgMi41R0JBU0UtVCAqLwogI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfQURWNUcJMHgwMTAwCS8qIEFkdmVydGlzZSA1R0JBU0UtVCAqLwogI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMTBHCTB4MTAwMAkvKiBBZHZlcnRpc2UgMTBHQkFTRS1UICovCiYjNDM7I2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFCTB4ODAwMAkvKiBNYXN0ZXIvc2xhdmUgbWFudWFsIGNvbmZpZyBlbmFibGUgKi8KJiM0MzsjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRQkweDQwMDAJLyogTWFzdGVyL3NsYXZlIGNvbmZpZyB2YWx1ZSAoMT1NYXN0ZXIpICovCiYjNDM7I2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfUE9SVF9UWVBFCTB4MjAwMAkvKiBNYXN0ZXIgUHJlZmVycmVkIFR5cGUgKi8KIAogLyogQU4gMTBHQkFTRS1UIHN0YXR1cyByZWdpc3Rlci4gKi8KJiM0MzsjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9NU19GQVVMVAkweDgwMDAJLyogTWFzdGVyL3NsYXZlIGZhdWx0ICovCiYjNDM7I2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTVNfUkVTCTB4NDAwMAkvKiBNYXN0ZXIvc2xhdmUgcmVzb2x1dGlvbiAoMT1NYXN0ZXIpICovCiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9MUDJfNUcJMHgwMDIwICAvKiBMUCBpcyAyLjVHQlQgY2FwYWJsZSAqLwogI2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTFA1RwkJMHgwMDQwICAvKiBMUCBpcyA1R0JUIGNhcGFibGUgKi8KICNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX0xQVFJSCTB4MDIwMAkvKiBMUCB0cmFpbmluZyByZXNldCByZXEuICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzY4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQYXRjaCBSZWFjaGFiaWxpdHkgaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBtb2RpZnlpbmcgYGRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNgIGFuZCBgZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNgLiBJdCYjMzk7cyBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFJlYWx0ZWsgUlRMODI2MSAxMEdicHMgUEhZIGFuZCBzb21lIGdlbmVyaWMgQ2xhdXNlIDQ1IE1hc3Rlci9TbGF2ZSBjb25maWd1cmF0aW9uLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGhvdyBlYXNpbHkgY2FuIEkgdHJpZ2dlciB0aGlzIGNvZGUgcGF0aCBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcsIGxpa2UgUUVNVT8KCkkga25vdyBQSFkgZHJpdmVycyBhcmUgdHlwaWNhbGx5IGFzc29jaWF0ZWQgd2l0aCBFdGhlcm5ldCBkcml2ZXJzLiBRRU1VIGhhcyB2YXJpb3VzIGVtdWxhdGVkIG5ldHdvcmsgZGV2aWNlcyBsaWtlIGUxMDAwLCB2aXJ0aW8tbmV0LCBldGMuIFRoZSByZWFsIHF1ZXN0aW9uIGlzLCBkbyAqYW55KiBvZiB0aG9zZSBRRU1VLWVtdWxhdGVkIGRldmljZXMgdXNlIHRoZSBQSFkgc3Vic3lzdGVtLCBhbmQgc3BlY2lmaWNhbGx5LCB0aGUgUmVhbHRlayBkcml2ZXIgb3IgQ2xhdXNlIDQ1IFBIWXM/IFRoYXQmIzM5O3MgdGhlIGtleS4KClBIWXMgdXN1YWxseSBob29rIHVwIHRvIE1ESU8gYnVzZXMuIEluIFFFTVUsIGNhbiB3ZSBlbXVsYXRlIGFuIE1ESU8gYnVzIHNvbWVob3c/IE1heWJlIHRocm91Z2ggY2VydGFpbiBuZXR3b3JrIGRyaXZlcnMgb3IgZHVtbXkgTURJTyBkZXZpY2VzPyBIbW0sIEkga25vdyBzeXprYWxsZXIgaGFzIGEgdmlydHVhbCBNRElPIGJ1cy4uLiBvciBjb3VsZCB3ZSB1c2UgYSBkcml2ZXIgbGlrZSBgbWFjYmAgb3IgYGZlY2AsIGFzc3VtaW5nIHRob3NlIGFyZSBlbXVsYXRlZD8gVGhlIHRyaWNreSBwYXJ0IGlzLCBob3cgZG8geW91IGVhc2lseSAqdHJpZ2dlciogc3BlY2lmaWMgUEhZIGRyaXZlcnMgdW5sZXNzIHlvdSBjYW4gZGlyZWN0bHkgaW5zdGFudGlhdGUgdGhlbSB2aWEgTURJTz8KCkhvbGQgb24uLi4gSSYjMzk7bSB3cmFja2luZyBteSBicmFpbiBmb3Igc3l6a2FsbGVyIHByaW1pdGl2ZXMuLi4gRG9lcyBpdCBoYXZlIGFueXRoaW5nIGxpa2UgYHN5el9nZW5ldGxpbmtfLi4uYCBvciBzb21ldGhpbmcgd2l0aCBgdHVuYD8gTm8sIHRoYXQmIzM5O3Mgbm90IGl0LiBQSFkgZGV2aWNlcyBhcmUgYWxtb3N0IGFsd2F5cyBwcm9iZWQgdmlhIE1ESU8uIFNvLCBjYW4gc3l6a2FsbGVyICppbml0aWF0ZSogTURJTyBidXMgcHJvYmluZz8KCkxldCYjMzk7cyBzZWUuLi4gRG9lcyBzeXprYWxsZXIgb2ZmZXIgYW55IGBzeXpfbWRpb18uLi5gIGNhbGxzPyBBbnkgcHNldWRvLXN5c2NhbGxzIGZvciBNRElPPyBPciwgY2FuIHdlIGV2ZW4gaW5zdGFudGlhdGUgUEhZcyBkaXJlY3RseT8gQWghIE1heWJlIGBuZXRsaW5rYCBjb3VsZCB0YWxrIHRvIGBldGh0b29sYCB3aGljaCBtaWdodCAqcmVhY2gqIHRoZSBQSFlzLCBidXQgd2UmIzM5O2Qgc3RpbGwgbmVlZCBhIFBIWSBkZXZpY2UgdG8gKmV4aXN0KiBpbiB0aGUgZmlyc3QgcGxhY2UuCgpEb2VzIFFFTVUgZXZlbiAqZW11bGF0ZSogdGhlIFJUTDgyNjE/IFByb2JhYmx5IG5vdC4gU28sIHRoZSBiaWdnZXIgcXVlc3Rpb24gaXMsIGNhbiB3ZSBpbnN0YW50aWF0ZSBhIFBIWSBkZXZpY2UgdmlhICpzb21lKiBraW5kIG9mIHNvZnR3YXJlIGludGVyZmFjZT8gSSBuZWVkIHRvIGZpbmQgYSB3YXkgdG8gZ2V0IGEgUEhZIGluc3RhbmNlIGFjdGl2ZS4KCk9rYXksIGxldCYjMzk7cyBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UgZm9yICYjMzQ7bWRpbyYjMzQ7IGFuZCAmIzM0O3BoeSYjMzQ7LiBTZWUgaWYgdGhlcmUmIzM5O3MgYSB2aXJ0dWFsIE1ESU8gYnVzIG9yIHNvbWV0aGluZyBzaW1pbGFyIHRoYXQgd2UgY2FuIGxldmVyYWdlLiBBaGEhIEhlcmUmIzM5O3MgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLW1vY2t1cC5jYCBhbmQgYGRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuY2AuIEludGVyZXN0aW5nLiBNYXliZSB0aGVzZSBhcmUgdGhlIGtleXMgdG8gaW5zdGFudGlhdGluZyBhIFBIWSBkZXZpY2UuIE5vdywgSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHdlIGNhbiBhY3R1YWxseSAqaW5zdGFudGlhdGUqIGEgUEhZIGRldmljZSB1c2luZyB0aGVzZS4gVGhpcyBjb3VsZCBiZSBteSBwYXRoIHRvIHRlc3RpbmcgdGhpcyBwYXRjaCBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDQ3MjcgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT00PWxpYnBoeS15XHRcdFx0Oj0gcGh5Lm8gcGh5LWM0NS5vIHBoeS1jb3JlLm8gcGh5X2RldmljZS5vIFxcXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtNS1cdFx0XHRcdCAgIGxpbmttb2RlLm8gcGh5X2xpbmtfdG9wb2xvZ3kubyBcXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjY6XHRcdFx0XHQgICBwaHlfY2Fwcy5vIG1kaW9fYnVzX3Byb3ZpZGVyLm8gcGh5X3BvcnQubyBcXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjc6XHRcdFx0XHQgICBtZGlvX2RldmljZS5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtOC1cbi0tXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MTY9bGlicGh5LSQoQ09ORklHX09QRU5fQUxMSUFOQ0VfSEVMUEVSUykgJiM0Mzs9IG9wZW5fYWxsaWFuY2VfaGVscGVycy5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMTctXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX1BIWUxJQilcdFx0JiM0Mzs9IG1kaW9fYnVzLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0xOS1vYmotJChDT05GSUdfUEhZTElOSylcdFx0JiM0Mzs9IHBoeWxpbmsub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlPTIwPW9iai0kKENPTkZJR19QSFlMSUIpXHRcdCYjNDM7PSBsaWJwaHkub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjIxOm9iai0kKENPTkZJR19QSFlMSUIpXHRcdCYjNDM7PSBtZGlvX2RldnJlcy5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMjItb2JqLSQoQ09ORklHX1BIWV9QQUNLQUdFKVx0JiM0Mzs9IHBoeV9wYWNrYWdlLm9cbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jPTI1Mj1zdGF0aWMgdTMyIGFkaW5fZ2V0X3JlZ192YWx1ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtMjU2LXtcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6MjU3Olx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy0yNTgtXHR1MzIgdmFsO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM9NTAxPXN0YXRpYyBpbnQgYWRpbl9jb25maWdfY2xrX291dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy01MDIte1xuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo1MDM6XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTUwNC1cdGNvbnN0IGNoYXIgKnZhbCA9IE5VTEw7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYz01Mjg9c3RhdGljIGludCBhZGluX2NvbmZpZ196cHRtMTAwKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTUyOS17XG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjUzMDpcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNTMxLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM9NjQ4PXN0YXRpYyBpbnQgYWRpbl9yZWFkX21tZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgZGV2YWQsIHUxNiByZWdudW0pXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTY0OS17XG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjY1MDpcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXHUwMDNlbWRpby5idXM7XG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjY1MTpcdGludCBwaHlfYWRkciA9IHBoeWRldi1cdTAwM2VtZGlvLmFkZHI7XG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTY1Mi1cdGludCBhZGluX3JlZ251bTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTY1OC1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6NjU5Olx0ZXJyID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5X2FkZHIsIEFESU4xMzAwX01JSV9FWFRfUkVHX1BUUixcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNjYwLVx0XHRcdCAgICAgIGFkaW5fcmVnbnVtKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTY2My1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6NjY0Olx0cmV0dXJuIF9fbWRpb2J1c19yZWFkKGJ1cywgcGh5X2FkZHIsIEFESU4xMzAwX01JSV9FWFRfUkVHX0RBVEEpO1xuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy02NjUtfVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM9NjY3PXN0YXRpYyBpbnQgYWRpbl93cml0ZV9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldmFkLCB1MTYgcmVnbnVtLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNjY5LXtcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6NjcwOlx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cztcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6NjcxOlx0aW50IHBoeV9hZGRyID0gcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcjtcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNjcyLVx0aW50IGFkaW5fcmVnbnVtO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNjc4LVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo2Nzk6XHRlcnIgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBwaHlfYWRkciwgQURJTjEzMDBfTUlJX0VYVF9SRUdfUFRSLFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy02ODAtXHRcdFx0ICAgICAgYWRpbl9yZWdudW0pO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNjgzLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo2ODQ6XHRyZXR1cm4gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5X2FkZHIsIEFESU4xMzAwX01JSV9FWFRfUkVHX0RBVEEsIHZhbCk7XG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTY4NS19XG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYz04OTA9c3RhdGljIGludCBhZGluX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTg5MS17XG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjg5MjpcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtODkzLVx0c3RydWN0IGFkaW5fcHJpdiAqcHJpdjtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jPTEwNTk9bW9kdWxlX3BoeV9kcml2ZXIoYWRpbl9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy0xMDYwLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzoxMDYxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgYWRpbl90YmxbXSA9IHtcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtMTA2Mi1cdHsgUEhZX0lEX01BVENIX01PREVMKFBIWV9JRF9BRElOMTIwMCkgfSxcbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTEwNjYtXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjEwNjc6TU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBhZGluX3RibCk7XG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTEwNjgtTU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0FuYWxvZyBEZXZpY2VzIEluZHVzdHJpYWwgRXRoZXJuZXQgUEhZIGRyaXZlclwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmM9MjQ0PXN0YXRpYyBpbnQgYWRpbl9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0yNDYtXHRzdHJ1Y3QgYWRpbl9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYzoyNDc6XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0yNDgtXHRpbnQgcmV0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jPTMwOT1zdGF0aWMgaW50IGFkaW5fcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTMxMC17XG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYzozMTE6XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0zMTItXHRzdHJ1Y3QgYWRpbl9wcml2ICpwcml2O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jPTM0Mz1tb2R1bGVfcGh5X2RyaXZlcihhZGluX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0zNDQtXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYzozNDU6c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhZGluX3RibFtdID0ge1xuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMzQ2LVx0eyBQSFlfSURfTUFUQ0hfTU9ERUwoUEhZX0lEX0FESU4xMTAwKSB9LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTM1MS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jOjM1MjpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFkaW5fdGJsKTtcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTM1My1NT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7QW5hbG9nIERldmljZXMgSW5kdXN0cmlhbCBFdGhlcm5ldCBUMUwgUEhZIGRyaXZlclwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYz02NTI9c3RhdGljIGlycXJldHVybl90IGFuODgwMXJfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtNjY3LVx0aWYgKGlycV9zdGF0dXMgXHUwMDI2IEFOODgwMV9JUlFfV0FLRV9NQUdJQ1BLVCkge1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzo2Njg6XHRcdHBtX3dha2V1cF9ldmVudChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIDApO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy02NjktXHRcdGlycV9oYW5kbGVkID0gdHJ1ZTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jPTY4MD1zdGF0aWMgdm9pZCBhbjg4MDFyX2dldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTY4OC1cdCAqL1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzo2ODk6XHRpZiAoIWRldmljZV9jYW5fd2FrZXVwKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldikpIHtcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtNjkwLVx0XHR3b2wtXHUwMDNlc3VwcG9ydGVkID0gMDtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jPTcwOD1zdGF0aWMgaW50IGFuODgwMXJfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtNzE2LVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzo3MTc6XHRpZiAoIWRldmljZV9jYW5fd2FrZXVwKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldikpXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTcxOC1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtNzc4LVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzo3Nzk6XHRyZXR1cm4gZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldixcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtNzgwLVx0XHRcdFx0XHRwcml2LVx1MDAzZXdha2VfbWFnaWNfZW5hYmxlZCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYz03ODM9c3RhdGljIGludCBhbjg4MDFyX29mX2luaXRfbGVkcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCAqbGVkX2NmZylcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtNzg0LXtcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM6Nzg1Olx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy03ODYtXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LVx1MDAzZW9mX25vZGU7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYz0xMDM0PXN0YXRpYyBpbnQgYW44ODAxcl9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0xMDM1LXtcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM6MTAzNjpcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtMTAzNy1cdHN0cnVjdCBhbjg4MDFyX3ByaXYgKnByaXY7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYz0xMDYwPXN0YXRpYyBpbnQgYW44ODAxcl9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0xMDY3LVx0ICovXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jOjEwNjg6XHRpZiAoZGV2aWNlX21heV93YWtldXAoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KSkge1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0xMDY5LVx0XHRwcml2LVx1MDAzZXdha2VfbG5rY2hnX2VuYWJsZWQgPSBmYWxzZTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jPTEwOTE9c3RhdGljIGludCBhbjg4MDFyX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtMTEwMi1cdCAqL1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzoxMTAzOlx0aWYgKGRldmljZV9tYXlfd2FrZXVwKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldikpIHtcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtMTEwNC1cdFx0cHJpdi1cdTAwM2V3YWtlX2xua2NoZ19lbmFibGVkID0gdHJ1ZTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jPTExNDY9bW9kdWxlX3BoeV9kcml2ZXIoYWlyb2hhX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTExNDctXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jOjExNDg6c3RhdGljIHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhbjg4MDFfdGJsW10gPSB7XG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTExNDktXHR7IFBIWV9JRF9NQVRDSF9NT0RFTChBTjg4MDFSX1BIWV9JRCkgfSxcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTExNTEtfTtcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM6MTE1MjpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFuODgwMV90YmwpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0xMTUzLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTE5Nz1zdHJ1Y3QgZW44ODExaF9wcml2IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yMDMtXHR1bnNpZ25lZCBpbnRcdFx0Y2tvX2lzX2VuYWJsZWQ7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoyMDQ6XHRzdHJ1Y3QgbWRpb19kZXZpY2VcdCpwYnVzZGV2O1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMjA1LX07XG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9MjM5PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGVuODgxMWhfbGVkX3RyaWcgPSBCSVQoVFJJR0dFUl9ORVRERVZfRlVMTF9EVVBMRVgpIHxcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yNDctXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoyNDg6c3RhdGljIGludCBfX2Fpcl9wYnVzX3JlZ193cml0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yNDktXHRcdFx0XHR1MzIgcGJ1c19yZWcsIHUzMiBwYnVzX2RhdGEpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMjUyLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MjUzOlx0cmV0ID0gX19tZGlvYnVzX3dyaXRlKG1kaW9kZXYtXHUwMDNlYnVzLCBtZGlvZGV2LVx1MDAzZWFkZHIsIEFJUl9FWFRfUEFHRV9BQ0NFU1MsXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yNTQtXHRcdFx0ICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX3JlZykpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTI1Ny1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjI1ODpcdHJldCA9IF9fbWRpb2J1c193cml0ZShtZGlvZGV2LVx1MDAzZWJ1cywgbWRpb2Rldi1cdTAwM2VhZGRyLCBBSVJfUEJVU19BRERSX0hJR0gsXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yNTktXHRcdFx0ICAgICAgRklFTERfR0VUKEFJUl9QQlVTX1JFR19BRERSX0hJR0hfTUFTSywgcGJ1c19yZWcpKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yNjItXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoyNjM6XHRyZXQgPSBfX21kaW9idXNfd3JpdGUobWRpb2Rldi1cdTAwM2VidXMsIG1kaW9kZXYtXHUwMDNlYWRkcixcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTI2NC1cdFx0XHQgICAgICBGSUVMRF9HRVQoQUlSX1BCVVNfUkVHX0FERFJfTE9XX01BU0ssIHBidXNfcmVnKSxcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yNjgtXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoyNjk6XHRyZXR1cm4gX19tZGlvYnVzX3dyaXRlKG1kaW9kZXYtXHUwMDNlYnVzLCBtZGlvZGV2LVx1MDAzZWFkZHIsIEFJUl9QQlVTX0RBVEFfSElHSCxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTI3MC1cdFx0XHQgICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz0zMjc9c3RhdGljIGludCBlbjg4MTFoX3dhaXRfbWN1X3JlYWR5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMzM1LVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MzM2Olx0LyogQmVjYXVzZSBvZiBtZGlvLWxvY2ssIG1heSBoYXZlIHRvIHdhaXQgZm9yIG11bHRpcGxlIGxvYWRzICovXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0zMzctXHRyZXQgPSBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTURJT19NTURfVkVORDEsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9Mzk3PXN0YXRpYyBpbnQgYW44ODExaGJfbG9hZF9maWxlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMzk5LXtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjQwMDpcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTQwMS1cdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9NDEzPXN0YXRpYyBpbnQgYW44ODExaGJfbWN1X2Fzc2VydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTQxNy1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjQxODpcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy00MTktXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNDMyLXVubG9jazpcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjQzMzpcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTQzNC1cdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9NDM3PXN0YXRpYyBpbnQgYW44ODExaGJfbWN1X2RlYXNzZXJ0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNDQxLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NDQyOlx0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTQ0My1cbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy00NTctdW5sb2NrOlxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NDU4Olx0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNDU5LVx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz01MDI9c3RhdGljIGludCBlbjg4MTFoX2xvYWRfZmlybXdhcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTUwMy17XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzo1MDQ6XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MDUtXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3MSwgKmZ3Mjtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz0xMDc0PXN0YXRpYyBpbnQgYW44ODExaGJfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTEwNzUte1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTA3NjpcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldjtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTEwNzctXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTEwNzktXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMDgwOlx0cHJpdiA9IGRldm1fa3phbGxvYyhcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIHNpemVvZihzdHJ1Y3QgZW44ODExaF9wcml2KSxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTEwODEtXHRcdFx0ICAgIEdGUF9LRVJORUwpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTEwOTItXHQgKi9cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjEwOTM6XHRtZGlvZGV2ID0gbWRpb19kZXZpY2VfY3JlYXRlKHBoeWRldi1cdTAwM2VtZGlvLmJ1cyxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjEwOTQ6XHRcdFx0XHQgICAgIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIgJiM0MzsgRU44ODExSF9QQlVTX0FERFJfT0ZGUyk7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMDk1Olx0aWYgKElTX0VSUihtZGlvZGV2KSlcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjEwOTY6XHRcdHJldHVybiBQVFJfRVJSKG1kaW9kZXYpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTA5Ny1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjEwOTg6XHRyZXQgPSBtZGlvX2RldmljZV9yZWdpc3RlcihtZGlvZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTEwOTktXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTExMDEtXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMTAyOlx0cHJpdi1cdTAwM2VwYnVzZGV2ID0gbWRpb2RldjtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTExMDMtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTEyMy1cdC8qIENvLUNsb2NrIE91dHB1dCAqL1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTEyNDpcdHJldCA9IGFuODgxMWhiX2Nsa19wcm92aWRlcl9zZXR1cChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIFx1MDAyNnByaXYtXHUwMDNlaHcpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTEyNS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTEzNy1lcnJfZGV2X2NyZWF0ZTpcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjExMzg6XHRtZGlvX2RldmljZV9yZW1vdmUobWRpb2Rldik7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMTM5LVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTE0MC1lcnJfZGV2X2ZyZWU6XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMTQxOlx0bWRpb19kZXZpY2VfZnJlZShtZGlvZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTExNDItXHRyZXR1cm4gcmV0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTExNDU9c3RhdGljIGludCBlbjg4MTFoX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTE0OS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjExNTA6XHRwcml2ID0gZGV2bV9remFsbG9jKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldiwgc2l6ZW9mKHN0cnVjdCBlbjg4MTFoX3ByaXYpLFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTE1MS1cdFx0XHQgICAgR0ZQX0tFUk5FTCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTE3MS1cdC8qIENvLUNsb2NrIE91dHB1dCAqL1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTE3MjpcdHJldCA9IGVuODgxMWhfY2xrX3Byb3ZpZGVyX3NldHVwKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldiwgXHUwMDI2cHJpdi1cdTAwM2Vodyk7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMTczLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz0xMTg2PXN0YXRpYyBpbnQgYW44ODExaGJfY29uZmlnX3NlcmRlc19wb2xhcml0eShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTE4Ny17XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMTg4Olx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTE4OS1cdHUzMiBwYnVzX3ZhbHVlID0gMDtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz0xMjE3PXN0YXRpYyBpbnQgZW44ODExaF9jb25maWdfc2VyZGVzX3BvbGFyaXR5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMjE4LXtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjEyMTk6XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMjIwLVx0dW5zaWduZWQgaW50IHBvbCwgZGVmYXVsdF9wb2w7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9MTQ5OD1zdGF0aWMgdm9pZCBhbjg4MTFoYl9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xNTAyLVx0aWYgKHByaXYtXHUwMDNlcGJ1c2Rldikge1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTUwMzpcdFx0bWRpb19kZXZpY2VfcmVtb3ZlKHByaXYtXHUwMDNlcGJ1c2Rldik7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxNTA0Olx0XHRtZGlvX2RldmljZV9mcmVlKHByaXYtXHUwMDNlcGJ1c2Rldik7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xNTA1LVx0fVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTE1NTM9bW9kdWxlX3BoeV9kcml2ZXIoZW44ODExaF9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTU1NC1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjE1NTU6c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBlbjg4MTFoX3RibFtdID0ge1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTU1Ni1cdHsgUEhZX0lEX01BVENIX01PREVMKEVOODgxMUhfUEhZX0lEKSB9LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTE1NjAtXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxNTYxOk1PRFVMRV9ERVZJQ0VfVEFCTEUobWRpbywgZW44ODExaF90YmwpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTU2Mi1NT0RVTEVfRklSTVdBUkUoRU44ODExSF9NRDMyX0RNKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYW1kLmM9MTEyPW1vZHVsZV9waHlfZHJpdmVyKGFtNzljX2RyaXZlcnMpO1xuZHJpdmVycy9uZXQvcGh5L2FtZC5jLTExMy1cbmRyaXZlcnMvbmV0L3BoeS9hbWQuYzoxMTQ6c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhbWRfdGJsW10gPSB7XG5kcml2ZXJzL25ldC9waHkvYW1kLmMtMTE1LVx0eyBQSFlfSURfQUMxMDFMLCAweGZmZmZmZmYwIH0sXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FtZC5jLTExOS1cbmRyaXZlcnMvbmV0L3BoeS9hbWQuYzoxMjA6TU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBhbWRfdGJsKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfZmlybXdhcmUuYz0yOTY9c3RhdGljIGludCBhcXJfZmlybXdhcmVfbG9hZF9udm1lbShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9maXJtd2FyZS5jLTMwMi1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9maXJtd2FyZS5jOjMwMzpcdGNlbGwgPSBudm1lbV9jZWxsX2dldChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIFwmIzM0O2Zpcm13YXJlXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9maXJtd2FyZS5jLTMwNC1cdGlmIChJU19FUlIoY2VsbCkpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2Zpcm13YXJlLmM9MzI0PXN0YXRpYyBpbnQgYXFyX2Zpcm13YXJlX2xvYWRfZnMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9maXJtd2FyZS5jLTMyNS17XG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfZmlybXdhcmUuYzozMjY6XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfZmlybXdhcmUuYy0zMjctXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9od21vbi5jPTE5MD1pbnQgYXFyX2h3bW9uX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfaHdtb24uYy0xOTEte1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2h3bW9uLmM6MTkyOlx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2h3bW9uLmMtMTkzLVx0c3RydWN0IGRldmljZSAqaHdtb25fZGV2O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM9NzUwPXN0YXRpYyBpbnQgYXFyMTA3X2NvbmZpZ19tZGkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtNzUxLXtcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6NzUyOlx0c3RydWN0IGRldmljZV9ub2RlICpucCA9IHBoeWRldi1cdTAwM2VtZGlvLmRldi5vZl9ub2RlO1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy03NTMtXHR1MzIgbWRpX2NvbmY7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYz0xMTY0PXN0YXRpYyBpbnQgYXFyMTA3X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0xMTY3LVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzoxMTY4Olx0cGh5ZGV2LVx1MDAzZXByaXYgPSBkZXZtX2t6YWxsb2MoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2LFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0xMTY5LVx0XHRcdFx0ICAgIHNpemVvZihzdHJ1Y3QgYXFyMTA3X3ByaXYpLCBHRlBfS0VSTkVMKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jPTE1NjU9bW9kdWxlX3BoeV9kcml2ZXIoYXFyX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTE1NjYtXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjE1Njc6c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhcXJfdGJsW10gPSB7XG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTE1NjgtXHR7IFBIWV9JRF9NQVRDSF9NT0RFTChQSFlfSURfQVExMjAyKSB9LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMTU4OC1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6MTU4OTpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFxcl90YmwpO1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0xNTkwLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM9Mjk3PXN0YXRpYyBpbnQgYWVvbl9maXJtd2FyZV9ib290KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IHU4ICpkYXRhLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtMzIxLVx0aWYgKHZhbCBcdTAwM2UgMSkge1xuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYzozMjI6XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDt3cm9uZyBvcmlnaW4gbWRpb19pbmRpcmVjdF9zdGF0dXM6ICV4XFxuXCYjMzQ7LCB2YWwpO1xuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy0zMjMtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM9MzUyPXN0YXRpYyBpbnQgYWVvbl9maXJtd2FyZV9sb2FkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTM1My17XG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjM1NDpcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtMzU1LVx0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdztcbi0tXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jPTYwMz1zdGF0aWMgaW50IGFzMjF4eHhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTYwNy1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6NjA4Olx0cHJpdiA9IGRldm1fa3phbGxvYyhcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTYwOS1cdFx0XHQgICAgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy02MTMtXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjYxNDpcdHJldCA9IGRldm1fbXV0ZXhfaW5pdChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTYxNS1cdFx0XHQgICAgICBcdTAwMjZwcml2LVx1MDAzZWlwY19sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jPTEwNzg9bW9kdWxlX3BoeV9kcml2ZXIoYXMyMXh4eF9kcml2ZXJzKTtcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtMTA3OS1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6MTA4MDpzdGF0aWMgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGFzMjF4eHhfdGJsW10gPSB7XG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTEwODEtXHR7IFBIWV9JRF9NQVRDSF9WRU5ET1IoUEhZX1ZFTkRPUl9BRU9OU0VNSSkgfSxcbi0tXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTEwODMtfTtcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6MTA4NDpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFzMjF4eHhfdGJsKTtcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtMTA4NS1cbi0tXG5kcml2ZXJzL25ldC9waHkvYXg4ODc5NmIuYz0xMjE9bW9kdWxlX3BoeV9kcml2ZXIoYXNpeF9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L2F4ODg3OTZiLmMtMTIyLVxuZHJpdmVycy9uZXQvcGh5L2F4ODg3OTZiLmM6MTIzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgYXNpeF90YmxbXSA9IHtcbmRyaXZlcnMvbmV0L3BoeS9heDg4Nzk2Yi5jLTEyNC1cdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9BU0lYX0FYODg3NzJBKSB9LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9heDg4Nzk2Yi5jLTEyOS1cbmRyaXZlcnMvbmV0L3BoeS9heDg4Nzk2Yi5jOjEzMDpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFzaXhfdGJsKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jPTIzMz1zdGF0aWMgaW50IGJjbV9vbWVnYV9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tY3lnbnVzLmMtMjM2LVxuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYzoyMzc6XHRwcml2ID0gZGV2bV9remFsbG9jKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jLTIzOC1cdGlmICghcHJpdilcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jLTI0Mi1cbmRyaXZlcnMvbmV0L3BoeS9iY20tY3lnbnVzLmM6MjQzOlx0cHJpdi1cdTAwM2VzdGF0cyA9IGRldm1fa2NhbGxvYyhcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jLTI0NC1cdFx0XHRcdCAgIGJjbV9waHlfZ2V0X3NzZXRfY291bnQocGh5ZGV2KSwgc2l6ZW9mKHU2NCksXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYz0yNTI9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGJjbV9jeWdudXNfcGh5X2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tY3lnbnVzLmMtMjgwLVxuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYzoyODE6c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBiY21fY3lnbnVzX3BoeV90YmxbXSA9IHtcbmRyaXZlcnMvbmV0L3BoeS9iY20tY3lnbnVzLmMtMjgyLVx0eyBQSFlfSURfQkNNX0NZR05VUywgMHhmZmZmZmZmMCwgfSxcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jLTI4NS19O1xuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYzoyODY6TU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBiY21fY3lnbnVzX3BoeV90YmwpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYy0yODctXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMTAtI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjExOiNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMTItI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYz0zMz1pbnQgYmNtX3BoeV93cml0ZV9leHAoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZywgdTE2IHZhbClcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy0zNi1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjM3Olx0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTM4LVx0cmMgPSBfX2JjbV9waHlfd3JpdGVfZXhwKHBoeWRldiwgcmVnLCB2YWwpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM6Mzk6XHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy00MC1cbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYz02Mj1pbnQgYmNtX3BoeV9yZWFkX2V4cChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTY1LVxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM6NjY6XHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtNjctXHRyYyA9IF9fYmNtX3BoeV9yZWFkX2V4cChwaHlkZXYsIHJlZyk7XG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzo2ODpcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTY5LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jPTk0PWludCBiY21fcGh5X21vZGlmeV9leHAoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZywgdTE2IG1hc2ssIHUxNiBzZXQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtOTctXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzo5ODpcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy05OS1cdHJldCA9IF9fYmNtX3BoeV9tb2RpZnlfZXhwKHBoeWRldiwgcmVnLCBtYXNrLCBzZXQpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM6MTAwOlx0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMTAxLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jPTI3MT1pbnQgYmNtX3BoeV9yZWFkX3JkYihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmRiKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTI3NC1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjI3NTpcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy0yNzYtXHRyZXQgPSBfX2JjbV9waHlfcmVhZF9yZGIocGh5ZGV2LCByZGIpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM6Mjc3Olx0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMjc4LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jPTI5NT1pbnQgYmNtX3BoeV93cml0ZV9yZGIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJkYiwgdTE2IHZhbClcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy0yOTgtXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzoyOTk6XHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMzAwLVx0cmV0ID0gX19iY21fcGh5X3dyaXRlX3JkYihwaHlkZXYsIHJkYiwgdmFsKTtcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjMwMTpcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTMwMi1cbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYz0zMjc9aW50IGJjbV9waHlfbW9kaWZ5X3JkYihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmRiLCB1MTYgbWFzaywgdTE2IHNldClcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy0zMzAtXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzozMzE6XHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMzMyLVx0cmV0ID0gX19iY21fcGh5X21vZGlmeV9yZGIocGh5ZGV2LCByZGIsIG1hc2ssIHNldCk7XG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzozMzM6XHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy0zMzQtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM9NjYwPXN0YXRpYyBpbnQgX2JjbV9waHlfY2FibGVfdGVzdF9zdGFydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGlzX3JkYilcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy02NzEtXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzo2NzI6XHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtNjczLVx0aWYgKGlzX3JkYikge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTY5MC1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjY5MTpcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTY5Mi1cbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYz03NDI9c3RhdGljIGludCBfYmNtX3BoeV9jYWJsZV90ZXN0X2dldF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy03NDgtXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzo3NDk6XHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtNzUwLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTc5OS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjgwMDpcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTgwMS1cbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1wdHAuYz05MjA9c3RydWN0IGJjbV9wdHBfcHJpdmF0ZSAqYmNtX3B0cF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LXB0cC5jLTkzMS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LXB0cC5jOjkzMjpcdHByaXYgPSBkZXZtX2t6YWxsb2MoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LXB0cC5jLTkzMy1cdGlmICghcHJpdilcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1wdHAuYy05NDAtXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1wdHAuYzo5NDE6XHRjbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZwcml2LVx1MDAzZXB0cF9pbmZvLCBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktcHRwLmMtOTQyLVx0aWYgKElTX0VSUihjbG9jaykpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmM9NDE0PXN0YXRpYyBpbnQgYmNtNTQxNDBfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jLTQyMy1cbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jOjQyNDpcdGh3bW9uID0gZGV2bV9od21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9pbmZvKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldixcbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jLTQyNS1cdFx0XHRcdFx0XHQgICAgIFwmIzM0O0JDTTU0MTQwXCYjMzQ7LCBwaHlkZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmM9NDMyPXN0YXRpYyBpbnQgYmNtNTQxNDBfYmFzZV9yZWFkX3JkYihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmRiKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jLTQzNS1cbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jOjQzNjpcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYy00MzctXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgQkNNNTQxNDBfQkFTRV9BRERSLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jLTQ0NS1vdXQ6XG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYzo0NDY6XHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYy00NDctXHRyZXR1cm4gcmV0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jPTQ1MD1zdGF0aWMgaW50IGJjbTU0MTQwX2Jhc2Vfd3JpdGVfcmRiKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmMtNDU0LVxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmM6NDU1Olx0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jLTQ1Ni1cdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCBCQ001NDE0MF9CQVNFX0FERFIsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmMtNDY0LW91dDpcbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jOjQ2NTpcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jLTQ2Ni1cdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmM9NTA1PXN0YXRpYyBpbnQgYmNtNTQxNDBfZ2V0X2Jhc2VfYWRkcl9hbmRfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jLTUwNy1cdHN0cnVjdCBiY201NDE0MF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYzo1MDg6XHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzO1xuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmMtNTA5LVx0aW50IGFkZHIsIG1pbl9hZGRyLCBtYXhfYWRkcjtcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYy01MTMtXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYzo1MTQ6XHRtaW5fYWRkciA9IHBoeWRldi1cdTAwM2VtZGlvLmFkZHI7XG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYzo1MTU6XHRtYXhfYWRkciA9IHBoeWRldi1cdTAwM2VtZGlvLmFkZHI7XG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYzo1MTY6XHRhZGRyID0gcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcjtcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNjQ5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgUEhZIEluc3RhbnRpYXRpb24gTWV0aG9kcyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBQSFkgZGV2aWNlcyBnZXQgaW5zdGFudGlhdGVkIHdpdGhpbiB0aGlzIGNvbnRleHQuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gbG9vayBhdCB0aGluZ3MgbGlrZSBgbWRpby1tb2NrdXAuY2AsIGBmaXhlZF9waHkuY2AsIG9yIHBvdGVudGlhbGx5IGV2ZW4gYG1kaW9fYnVzLmNgLiBJIGZpZ3VyZWQgb25lIG9mIHRob3NlIG1pZ2h0IGhhbmRsZSB0aGUgaW5zdGFudGlhdGlvbiBkaXJlY3RseS4gVGhlbiBJIHN0b3BwZWQgYW5kIHRob3VnaHQsICYjMzQ7SGFuZyBvbiwgZG9lcyBzeXprYWxsZXIgYWN0dWFsbHkgKmluc3RhbnRpYXRlKiBQSFkgZGV2aWNlcz8gQ2FuIGl0IGRvIHRoYXQgdGhyb3VnaCBOZXRsaW5rIHNvbWVob3c/JiMzNDsgVGhlIG1vcmUgSSB0aG91Z2h0IGFib3V0IGl0LCB0aGUgbW9yZSBJIHJlYWxpc2VkIGl0JiMzOTtzIHR5cGljYWxseSBoYW5kbGVkIHdoZW4gYSBuZXR3b3JrIGRyaXZlciBwcm9iZXMgYW5kIHJlZ2lzdGVycyBhbiBNRElPIGJ1cywgb3IsIG9mIGNvdXJzZSwgdGhyb3VnaCB0aGUgZGV2aWNlIHRyZWUuCgpCdXQgdGhlbiBJIHJlbWVtYmVyZWQgc2VlaW5nIHRob3NlIGBzeXpfZ2VuZXRsaW5rXy4uLmAsIGBzeXpfdXNiX2Nvbm5lY3RgLCBgc3l6XzgwMjExXy4uLmAsIGFuZCBgc3l6X21hYzgwMjE1NF8uLi5gIGNhbGxzIGluIHN5emthbGxlci4gQ291bGQgYW55IG9mIHRob3NlIGJlIHJlbGV2YW50PyBQZXJoYXBzIHRoZXkgb2ZmZXIgYW4gaW5kaXJlY3QgbWV0aG9kLgoKV2FpdCBhIHNlY29uZCwgdGhlcmUmIzM5O3MgdGhhdCB2aXJ0dWFsIE1ESU8gYnVzIGRyaXZlciBJIGtlZXAgaGVhcmluZyBhYm91dDogYGRyaXZlcnMvbmV0L3BoeS9tZGlvLW1vY2t1cC5jYC4gSSBrbm93IHRoYXQgY2FuIGJlIGluc3RhbnRpYXRlZCB2aWEgc3lzZnMgb3IgbW9kdWxlIHBhcmFtZXRlcnMsIGNhbiYjMzk7dCBpdD8gQWN0dWFsbHksIEkgdGhpbmsgaXQmIzM5O3MgdXN1YWxseSBkZXZpY2UgdHJlZSBvciBtb2R1bGUgcGFyYW1ldGVycyBhZ2Fpbi4gQnV0IHRoZW4uLi4gaG9sZCBvbiBhIG1pbnV0ZSwgZG9lcyBgZHJpdmVycy9uZXQvcGh5L21kaW8tbW9ja3VwLmNgICphY3R1YWxseSogZXhpc3Q/IEkmIzM5O2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGF0LiBTZWVtcyBsaWtlIGl0IG1pZ2h0IG5vdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW8tbW9ja3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyMzUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgTmV0d29yayBQSFkgRHJpdmVyIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBsZXQgbWUgc2VlLi4uIHRoZXkmIzM5O3JlIHBvaW50aW5nIG1lIHRvd2FyZCBgZHJpdmVycy9uZXQvcGh5L21kaW8tbW9ja3VwLmNgLiBIbW1tLCBzZWVtcyBhIGxpdHRsZSBvZmYuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgY29udGV4dCwgaXMgdGhhdCBhICYjMzQ7bW9ja3VwJiMzNDsgb3IgJiMzNDtkdW1teSYjMzQ7IFBIWSBpbXBsZW1lbnRhdGlvbiwgaWYgaXQgZXhpc3RzLCB3b3VsZG4mIzM5O3QgYmUgZGlyZWN0bHkgdGllZCB0byBNRElPLiBJdCYjMzk7cyBtb3JlIGxpa2VseSB0byBiZSBhIGhpZ2hlci1sZXZlbCBhYnN0cmFjdGlvbi4KClNvLCBsZXQmIzM5O3MgY3V0IHJpZ2h0IHRvIHRoZSBjaGFzZS4gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoZSBgZHJpdmVycy9uZXQvcGh5L2AgZGlyZWN0b3J5LiBJJiMzOTtsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgYW55IGZpbGVzIG5hbWVkIHdpdGggJiMzNDttb2NrdXAmIzM0OyBvciAmIzM0O2R1bW15JiMzNDsgaW4gdGhlIGZpbGVuYW1lLiBUaGF0IHNob3VsZCBxdWlja2x5IHBvaW50IG1lIHRvIHRoZSByZWxldmFudCBjb2RlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBQSFkgc2ltdWxhdG9ycyBhcmUgaW1wbGVtZW50ZWQsIGFuZCB3aGF0IHRoZWlyIGludGVuZGVkIHVzZSBjYXNlcyBhcmUuIFRoaXMgc2hvdWxkIGJlIHF1aWNrLCBhbmQgaG9wZWZ1bGx5IGxlYWQgdG8gdGhlIGNvcnJlY3Qgc291cmNlIGZpbGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9ja3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ1MjgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTmV0d29yayBTdWJzeXN0ZW0qKgoKT2theSwgSSYjMzk7bSBkZWVwIGluIHRoZSBuZXR3b3JrIGRyaXZlciBzcGFjZSBhZ2Fpbi4gV2hlcmUgc2hvdWxkIEkgc3RhcnQgbXkgZXhwbG9yYXRpb24/IEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBoYXJkd2FyZSBpbnRlcmFjdGlvbi4gSG1tLCBsZXQgbWUgdGhpbmsuLi4gZ2l2ZW4gbXkgZm9jdXMgb24gbG93LWxldmVsIGludGVyYWN0aW9ucyBhbmQgdW5kZXJzdGFuZGluZyB0aGUgUEhZIGxheWVyLCBJIHNob3VsZCBpbnZlc3RpZ2F0ZSBgZHJpdmVycy9uZXQvbWRpby9gLiBUaGF0JiMzOTtzIHdoZXJlIEkgY2FuIGxpa2VseSBmaW5kIHRoZSBjb3JlIE1lZGlhIEluZGVwZW5kZW50IEludGVyZmFjZSAoTUlJKSBkcml2ZXIgY29kZSwgYW5kIGhvcGVmdWxseSwgYW55IHNwZWNpZmljcyByZWxhdGVkIHRvIHRoZSBNRElPIGJ1cyB1c2VkIHRvIGNvbnRyb2wgdGhlIFBIWS4gVGhpcyBzZWVtcyBsaWtlIGEgbG9naWNhbCBlbnRyeSBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIG5ldHdvcmsgZHJpdmVycyBjb21tdW5pY2F0ZSB3aXRoIHRoZSBwaHlzaWNhbCBsYXllci4gVGhpcyBkaXJlY3RvcnkgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rIHRvIHVuZGVyc3RhbmQgdGhlIE1ESU8gYnVzIGFuZCBQSFkgaW50ZXJhY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9ja3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDc0MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyBQSFkgRHJpdmVycyB3aXRoIFN5emthbGxlcjogQSBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgd2UgY2FuIGxldmVyYWdlIHN5emthbGxlciB0byB0ZXN0IFBIWSBkcml2ZXJzLiBTeXprYWxsZXImIzM5O3MgYWxyZWFkeSBleGNlbGxlbnQgd2l0aCBVU0IgZGV2aWNlIGZ1enppbmcsIGFuZCBJIGtub3cgc29tZSBVU0IgbmV0d29yayBhZGFwdGVycywgc3BlY2lmaWNhbGx5LCB0aGUgYGF4ODgxNzlfMTc4YWAgYWRhcHRlciwgdXRpbGl6ZSBQSFlzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGNhbiB3ZSBhY3R1YWxseSByZWFjaCB0aGVzZSBQSFkgZHJpdmVycyB0aHJvdWdoIHN5emthbGxlcj8KClRoZSBwYXRoIG9mIGxlYXN0IHJlc2lzdGFuY2UgZmVlbHMgbGlrZSBpbnZlc3RpZ2F0aW5nIHdoZXRoZXIgb3Igbm90IGByZWFsdGVrX21haW4uY2AgaXMgYWNjZXNzaWJsZS4gVGhlIHBhdGNoIG5vdGVzIHJlZmVyZW5jZSBSVEw4MjYxQyBzdXBwb3J0LiBCdXQgY2FuIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIHJlYWxpc3RpY2FsbHkgdHJpZ2dlciBpdHMgZXhlY3V0aW9uPyAKCkxldCYjMzk7cyBhc3N1bWUgd2UgdXNlIGEgVVNCIG5ldHdvcmsgYWRhcHRlciB0aGF0JiMzOTtzIGRyaXZlbiBieSB0aGUgYHI4MTUyYCBkcml2ZXIuIERvZXMgdGhpcyBkcml2ZXIgZXZlbiBkZXBlbmQgb24gYHJlYWx0ZWtfbWFpbi5jYD8gTm8sIGl0IGhhcyBpdHMgb3duIFBIWSBjb2RlIG9yIGxldmVyYWdlcyBwaHlsaWIuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIG5vdyBiZWNvbWVzLCBkb2VzIGByODE1MmAgdXNlIHBoeWxpYj8gVGhpcyBuZWVkcyBjb25maXJtYXRpb24sIHNvIHRoYXQmIzM5O3MgdGhlIG5leHQgYXZlbnVlIHRvIGV4cGxvcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9jb25uZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz0yNjE9c3RhdGljIGludCBheDg4MTcyYV9yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMzEzLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6MzE0Olx0cHJpdi1cdTAwM2VwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYtXHUwMDNlbmV0LCBwcml2LVx1MDAzZXBoeV9uYW1lLFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMzE1LVx0XHRcdFx0ICAgXHUwMDI2YXg4ODE3MmFfYWRqdXN0X2xpbmssXG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTE0Nz1zdGF0aWMgaW50IHNtc2M5NXh4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zilcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjg0LVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTI4NTpcdHJldCA9IHBoeV9jb25uZWN0X2RpcmVjdChkZXYtXHUwMDNlbmV0LCBwZGF0YS1cdTAwM2VwaHlkZXYsXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjg2LVx0XHRcdFx0IFx1MDAyNnNtc2M5NXh4X2hhbmRsZV9saW5rX2NoYW5nZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU0NTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzoKCioqTmV0d29yayBEcml2ZXIgSW52ZXN0aWdhdGlvbioqCgpIbW0sIGBheDg4MTcyYWAgaXMgdXNpbmcgYHBoeV9jb25uZWN0YC4gSW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLiBOb3csIHdoYXQmIzM5O3MgdGhlIGRlYWwgd2l0aCBgcjgxNTJgPyBJcyBpdCBhbHNvIGxldmVyYWdpbmcgYHBoeV9jb25uZWN0YD8gVGhhdCYjMzk7cyB0aGUgcXVlc3Rpb24gSSBoYXZlIHRvIGFuc3dlciByaWdodCBub3cuIEtub3dpbmcgaG93IGRpZmZlcmVudCBkcml2ZXJzIGhhbmRsZSBQSFkgY29ubmVjdGlvbnMgaXMgZXNzZW50aWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyIGFuZCBob3cgdGhlIGRpZmZlcmVudCBkcml2ZXJzIHJlbGF0ZSB0byBlYWNoIG90aGVyLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY29tcGxldGVseSBncm9rIHRoaXMsIGFuZCB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBkcml2ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9jb25uZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU2NjYKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUGxhbiB0byBFeHBsb2l0IHRoZSBSZWFsdGVrIFBIWSBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gdHJpZ2dlciB0aGF0IGByZWFsdGVrX21haW4uY2AgY29kZSB1c2VkIGJ5IHRoZSBgcjgxNTJgIGRyaXZlci4gRGlyZWN0bHkgdXNpbmcgdGhlIGByODE1MmAgaXNuJiMzOTt0IGdvaW5nIHRvIHdvcmsuIENhbiBJIHNvbWVob3cgdHJpY2sgdGhlIHN5c3RlbSBpbnRvIHRoaW5raW5nIGEgUmVhbHRlayBQSFkgaXMgcHJlc2VudD8gTWF5YmUgYSB2aXJ0dWFsIGRldmljZT8KCldhaXQgYSBtaW51dGUuLi4gV2hhdCBpZiBJIHVzZSBgc3l6X3VzYl9jb25uZWN0YCB0byBlbXVsYXRlIGEgVVNCIGRldmljZT8gU3BlY2lmaWNhbGx5LCBpZiBJIGVtdWxhdGUgYW4gYGF4ODgxNzJhYCBkZXZpY2UgKEFTSVggQVg4ODE3MkEpLCBhbmQgY3JhZnQgdGhlIE1ESU8gcmVzcG9uc2VzIHRvIGluY2x1ZGUgYSBQSFkgSUQgdGhhdCBtYXRjaGVzIGBSVExfODI2MUNfQ0dgICgweDAwMWNjODk4KSwgdGhlIGBheDg4MTcyYWAgZHJpdmVyICpzaG91bGQqIHByb2JlIHRoZSBNRElPIGJ1cywgc2VlIHRoYXQgSUQsIGFuZCBwaHlsaWIgd2lsbCB0aGVuIGJpbmQgdGhlIGByZWFsdGVrX21haW4uY2AgZHJpdmVyIHRvIGl0LiBJdCYjMzk7cyBhIGJpdCBvZiBhIGRhbmNlLCBidXQgdGhlIHBpZWNlcyAqc2hvdWxkKiBmaXQuCgpOb3csIGEgY3J1Y2lhbCBxdWVzdGlvbjogZG9lcyBgYXg4ODE3MmFgIGFjdHVhbGx5IGFsbG93IG1lIHRvIHNwZWNpZnkgKmFueSogUEhZIElEIGluIHRoZSBNRElPIHJlc3BvbnNlcz8gVGhhdCYjMzk7cyB0aGUgbmV4dCB0aGluZyB0byBjaGVjay4gSWYgaXQmIzM5O3MgcmVzdHJpY3RpdmUsIHRoaXMgd2hvbGUgaWRlYSBpcyBET0EuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F4ODgxNzJhX3Jlc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9MTE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYXg4ODE3MmFfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMTMwLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6MTMxOnN0YXRpYyBpbnQgYXg4ODE3MmFfcmVzZXRfcGh5KHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IGVtYmRfcGh5KVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMTMyLXtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz0xNTg9c3RhdGljIGludCBheDg4MTcyYV9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMjE1LVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6MjE2Olx0YXg4ODE3MmFfcmVzZXRfcGh5KGRldiwgcHJpdi1cdTAwM2V1c2VfZW1iZHBoeSk7XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0yMTctXG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9MjUzPXN0YXRpYyB2b2lkIGF4ODgxNzJhX3VuYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTI2MC1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjI2MTpzdGF0aWMgaW50IGF4ODgxNzJhX3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldilcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTI2Mi17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMjY3LVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6MjY4Olx0YXg4ODE3MmFfcmVzZXRfcGh5KGRldiwgcHJpdi1cdTAwM2V1c2VfZW1iZHBoeSk7XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0yNjktXG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9MzQ3PWNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBheDg4MTcyYV9pbmZvID0ge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTM0OS1cdC5iaW5kID0gYXg4ODE3MmFfYmluZCxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjM1MDpcdC5yZXNldCA9IGF4ODgxNzJhX3Jlc2V0LFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMzUxLVx0LnN0b3AgPSBheDg4MTcyYV9zdG9wLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjgyMAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kLCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBpZiBJJiMzOTttIHRoZSBvbmUgaGF2aW5nIHRoZXNlIHRob3VnaHRzLgoKKipEaXZpbmcgaW50byB0aGUgQVg4ODE3MkEgRHJpdmVyKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgYXg4ODE3MmFfYmluZGAgYW5kIGBheDg4MTcyYV9yZXNldGAgZnVuY3Rpb25zIHNwZWNpZmljYWxseS4gVGhlc2UgYXJlIHRoZSBjb3JlIGluaXRpYWxpemF0aW9uIGFuZCByZWNvdmVyeSBwb2ludHMuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGRyaXZlciBob29rcyBpbnRvIHRoZSBzeXN0ZW0gYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBoYXJkd2FyZSBnbGl0Y2hlcyBvciBpbml0aWFsaXphdGlvbiBmYWlsdXJlcy4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGRldmljZSBpcyBicm91Z2h0IG9ubGluZSBhbmQgaG93IGl04oCZcyBicm91Z2h0IGJhY2sgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcuIFVuZGVyc3RhbmRpbmcgYGJpbmRgIGlzIGdvaW5nIHRvIGdpdmUgbWUgYSBoaWdoLWxldmVsIHZpZXcgb2YgZGV2aWNlIHByb2JpbmcgYW5kIHJlc291cmNlIGFsbG9jYXRpb24sIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSByZWdpc3RlciBtYXBwaW5nIGFuZCBpbnRlcnJ1cHQgc2V0dXAuIFJlc2V0LCBvbiB0aGUgb3RoZXIgaGFuZCwgc2hvdWxkIHJldmVhbCBob3cgdGhlIGRyaXZlciBkZWFscyB3aXRoIHBvd2VyIGN5Y2xlcyBvciBlcnJvciByZWNvdmVyeS4gVGhpcyB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgdGhlIHJvYnVzdG5lc3Mgb2YgdGhpcyBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSYjMzk7dmUgYXBwcm9hY2hlZCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE1ODpcdHN0YXRpYyBpbnQgYXg4ODE3MmFfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuIDE1OTpcdHtcbiAxNjA6XHRcdGludCByZXQ7XG4gMTYxOlx0XHR1OCBidWZbRVRIX0FMRU5dO1xuIDE2MjpcdFx0c3RydWN0IGF4ODgxNzJhX3ByaXZhdGUgKnByaXY7XG4gMTYzOlx0XG4gMTY0Olx0XHRyZXQgPSB1c2JuZXRfZ2V0X2VuZHBvaW50cyhkZXYsIGludGYpO1xuIDE2NTpcdFx0aWYgKHJldClcbiAxNjY6XHRcdFx0cmV0dXJuIHJldDtcbiAxNjc6XHRcbiAxNjg6XHRcdHByaXYgPSBremFsbG9jX29iaigqcHJpdik7XG4gMTY5Olx0XHRpZiAoIXByaXYpXG4gMTcwOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDE3MTpcdFxuIDE3MjpcdFx0ZGV2LVx1MDAzZWRyaXZlcl9wcml2ID0gcHJpdjtcbiAxNzM6XHRcbiAxNzQ6XHRcdC8qIEdldCB0aGUgTUFDIGFkZHJlc3MgKi9cbiAxNzU6XHRcdHJldCA9IGFzaXhfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9OT0RFX0lELCAwLCAwLCBFVEhfQUxFTiwgYnVmLCAwKTtcbiAxNzY6XHRcdGlmIChyZXQgXHUwMDNjIEVUSF9BTEVOKSB7XG4gMTc3Olx0XHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7RmFpbGVkIHRvIHJlYWQgTUFDIGFkZHJlc3M6ICVkXFxuXCYjMzQ7LCByZXQpO1xuIDE3ODpcdFx0XHRyZXQgPSAtRUlPO1xuIDE3OTpcdFx0XHRnb3RvIGZyZWU7XG4gMTgwOlx0XHR9XG4gMTgxOlx0XHRldGhfaHdfYWRkcl9zZXQoZGV2LVx1MDAzZW5ldCwgYnVmKTtcbiAxODI6XHRcbiAxODM6XHRcdGRldi1cdTAwM2VuZXQtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNmF4ODgxNzJhX25ldGRldl9vcHM7XG4gMTg0Olx0XHRkZXYtXHUwMDNlbmV0LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2YXg4ODE3MmFfZXRodG9vbF9vcHM7XG4gMTg1Olx0XG4gMTg2Olx0XHQvKiBhcmUgd2UgdXNpbmcgdGhlIGludGVybmFsIG9yIHRoZSBleHRlcm5hbCBwaHk/ICovXG4gMTg3Olx0XHRyZXQgPSBhc2l4X3JlYWRfY21kKGRldiwgQVhfQ01EX1NXX1BIWV9TVEFUVVMsIDAsIDAsIDEsIGJ1ZiwgMCk7XG4gMTg4Olx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gMTg5Olx0XHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7RmFpbGVkIHRvIHJlYWQgc29mdHdhcmUgaW50ZXJmYWNlIHNlbGVjdGlvbiByZWdpc3RlcjogJWRcXG5cJiMzNDssXG4gMTkwOlx0XHRcdFx0ICAgcmV0KTtcbiAxOTE6XHRcdFx0Z290byBmcmVlO1xuIDE5MjpcdFx0fVxuIDE5MzpcdFxuIDE5NDpcdFx0bmV0ZGV2X2RiZyhkZXYtXHUwMDNlbmV0LCBcJiMzNDtBWF9DTURfU1dfUEhZX1NUQVRVUyA9IDB4JTAyeFxcblwmIzM0OywgYnVmWzBdKTtcbiAxOTU6XHRcdHN3aXRjaCAoYnVmWzBdIFx1MDAyNiBBWF9QSFlfU0VMRUNUX01BU0spIHtcbiAxOTY6XHRcdGNhc2UgQVhfUEhZX1NFTEVDVF9JTlRFUk5BTDpcbiAxOTc6XHRcdFx0bmV0ZGV2X2RiZyhkZXYtXHUwMDNlbmV0LCBcJiMzNDt1c2UgaW50ZXJuYWwgcGh5XFxuXCYjMzQ7KTtcbiAxOTg6XHRcdFx0cHJpdi1cdTAwM2V1c2VfZW1iZHBoeSA9IDE7XG4gMTk5Olx0XHRcdGJyZWFrO1xuIDIwMDpcdFx0Y2FzZSBBWF9QSFlfU0VMRUNUX0VYVEVSTkFMOlxuIDIwMTpcdFx0XHRuZXRkZXZfZGJnKGRldi1cdTAwM2VuZXQsIFwmIzM0O3VzZSBleHRlcm5hbCBwaHlcXG5cJiMzNDspO1xuIDIwMjpcdFx0XHRwcml2LVx1MDAzZXVzZV9lbWJkcGh5ID0gMDtcbiAyMDM6XHRcdFx0YnJlYWs7XG4gMjA0Olx0XHRkZWZhdWx0OlxuIDIwNTpcdFx0XHRuZXRkZXZfZXJyKGRldi1cdTAwM2VuZXQsIFwmIzM0O0ludGVyZmFjZSBtb2RlIG5vdCBzdXBwb3J0ZWQgYnkgZHJpdmVyXFxuXCYjMzQ7KTtcbiAyMDY6XHRcdFx0cmV0ID0gLUVOT1RTVVBQO1xuIDIwNzpcdFx0XHRnb3RvIGZyZWU7XG4gMjA4Olx0XHR9XG4gMjA5Olx0XG4gMjEwOlx0XHRyZXQgPSBhc2l4X3JlYWRfcGh5X2FkZHIoZGV2LCBwcml2LVx1MDAzZXVzZV9lbWJkcGh5KTtcbiAyMTE6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gMjEyOlx0XHRcdGdvdG8gZnJlZTtcbiAyMTM6XHRcbiAyMTQ6XHRcdHByaXYtXHUwMDNlcGh5X2FkZHIgPSByZXQ7XG4gMjE1Olx0XG4gMjE2Olx0XHRheDg4MTcyYV9yZXNldF9waHkoZGV2LCBwcml2LVx1MDAzZXVzZV9lbWJkcGh5KTtcbiAyMTc6XHRcbiAyMTg6XHRcdC8qIEFzaXggZnJhbWluZyBwYWNrcyBtdWx0aXBsZSBldGggZnJhbWVzIGludG8gYSAySyB1c2IgYnVsayB0cmFuc2ZlciAqL1xuIDIxOTpcdFx0aWYgKGRldi1cdTAwM2Vkcml2ZXJfaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgRkxBR19GUkFNSU5HX0FYKSB7XG4gMjIwOlx0XHRcdC8qIGhhcmRfbXR1ICBpcyBzdGlsbCB0aGUgZGVmYXVsdCAtIHRoZSBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydFxuIDIyMTpcdFx0XHQgICBqdW1ibyBldGggZnJhbWVzICovXG4gMjIyOlx0XHRcdGRldi1cdTAwM2VyeF91cmJfc2l6ZSA9IDIwNDg7XG4gMjIzOlx0XHR9XG4gMjI0Olx0XG4gMjI1Olx0XHQvKiBpbml0IE1ESU8gYnVzICovXG4gMjI2Olx0XHRyZXQgPSBheDg4MTcyYV9pbml0X21kaW8oZGV2KTtcbiAyMjc6XHRcdGlmIChyZXQpXG4gMjI4Olx0XHRcdGdvdG8gZnJlZTtcbiAyMjk6XHRcbiAyMzA6XHRcdHJldHVybiAwO1xuIDIzMTpcdFxuIDIzMjpcdGZyZWU6XG4gMjMzOlx0XHRrZnJlZShwcml2KTtcbiAyMzQ6XHRcdHJldHVybiByZXQ7XG4gMjM1Olx0fVxuIDIzNjpcdFxuIDIzNzpcdHN0YXRpYyBpbnQgYXg4ODE3MmFfc3RvcChzdHJ1Y3QgdXNibmV0ICpkZXYpXG4gMjM4Olx0e1xuIDIzOTpcdFx0c3RydWN0IGF4ODgxNzJhX3ByaXZhdGUgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4gMjQwOlx0XG4gMjQxOlx0XHRuZXRkZXZfZGJnKGRldi1cdTAwM2VuZXQsIFwmIzM0O1N0b3BwaW5nIGludGVyZmFjZVxcblwmIzM0Oyk7XG4gMjQyOlx0XG4gMjQzOlx0XHRpZiAocHJpdi1cdTAwM2VwaHlkZXYpIHtcbiAyNDQ6XHRcdFx0bmV0ZGV2X2luZm8oZGV2LVx1MDAzZW5ldCwgXCYjMzQ7RGlzY29ubmVjdGluZyBmcm9tIHBoeSAlc1xcblwmIzM0OyxcbiAyNDU6XHRcdFx0XHQgICAgcHJpdi1cdTAwM2VwaHlfbmFtZSk7XG4gMjQ2Olx0XHRcdHBoeV9zdG9wKHByaXYtXHUwMDNlcGh5ZGV2KTtcbiAyNDc6XHRcdFx0cGh5X2Rpc2Nvbm5lY3QocHJpdi1cdTAwM2VwaHlkZXYpO1xuIDI0ODpcdFx0fVxuIDI0OTpcdFxuIDI1MDpcdFx0cmV0dXJuIDA7XG4gMjUxOlx0fVxuIDI1MjpcdFxuIDI1MzpcdHN0YXRpYyB2b2lkIGF4ODgxNzJhX3VuYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuIDI1NDpcdHtcbiAyNTU6XHRcdHN0cnVjdCBheDg4MTcyYV9wcml2YXRlICpwcml2ID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuIDI1NjpcdFxuIDI1NzpcdFx0YXg4ODE3MmFfcmVtb3ZlX21kaW8oZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg2NjkKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gdGhlIE1ESU8gSW5pdGlhbGl6YXRpb24qKgoKQWxyaWdodCwgdGhlIGNvZGUmIzM5O3MganVtcGluZyBpbnRvIGBheDg4MTcyYV9pbml0X21kaW9gLiBUaGF0JiMzOTtzIHdoZXJlIGl0IGFsbCBzdGFydHMsIHRoZSBNZWRpYSBJbmRlcGVuZGVudCBJbnRlcmZhY2UgKE1JSSkgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBjaGlwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aGlzIGNydWNpYWwgZW50cnkgcG9pbnQuIFdoYXQgYXJlIHRoZSBzcGVjaWZpYyBzdGVwcyB0aGlzIGZ1bmN0aW9uIHRha2VzIHRvIGdldCB0aGUgTURJTyBpbnRlcmZhY2UgdXAgYW5kIHJ1bm5pbmc/IFdlJiMzOTtyZSB0YWxraW5nIFBIWSByZWdpc3RlciBhY2Nlc3MgaGVyZSwgc28gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgc2VxdWVuY2U6IHNldHRpbmcgdXAgdGhlIE1ESU8gY2xvY2ssIGNvbmZpZ3VyaW5nIGFueSBuZWNlc3NhcnkgR1BJTyBwaW5zIChpZiBpdCYjMzk7cyB1c2luZyBhIEdQSU8tYmFzZWQgTURJTyksIGFuZCB0aGVuIGxpa2VseSBzb21lIGluaXRpYWwgd3JpdGUgb3BlcmF0aW9ucyB0byB0aGUgUEhZIHRvIGNvbmZpZ3VyZSBpdHMgYmFzaWMgb3BlcmF0aW5nIG1vZGUsIGxpbmsgc3BlZWQsIGFuZCBhdXRvbmVnb3RpYXRpb24gc2V0dGluZ3MuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBjbG9jayBkaXZpZGVyIGNhbGN1bGF0aW9ucywgcGluIGRpcmVjdGlvbiBzZXR0aW5ncywgYW5kIHRoZSBhY3R1YWwgcmVnaXN0ZXIgd3JpdGUgY29tbWFuZHMgdXNpbmcgd2hhdGV2ZXIgbG93LWxldmVsIE1ESU8gdHJhbnNhY3Rpb24gZnVuY3Rpb25zIGFyZSBwcm92aWRlZCBieSB0aGUgZHJpdmVyLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGl0JiMzOTtzIHVzaW5nIGEgc3RhbmRhcmQgTURJTyBpbnRlcmZhY2Ugb3IgYSB2YXJpYXRpb24sIGFzIHdlbGwgYXMgdGhlIGV4YWN0IFBIWSBhZGRyZXNzIGl0JiMzOTtzIHRhcmdldGluZy4gTGV0JiMzOTtzIHNlZSBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzIGR1cmluZyB0aGVzZSBpbml0aWFsIGFjY2Vzc2VzLiBJJiMzOTttIGtlZW4gdG8gc3BvdCBhbnkgdW51c3VhbCBpbml0aWFsIHJlZ2lzdGVyIHNldHRpbmdzIG9yIGJpdCBtYW5pcHVsYXRpb25zIHRoYXQgbWlnaHQgYmUgY3JpdGljYWwgdG8gdGhpcyBwYXJ0aWN1bGFyIFBIWSYjMzk7cyBiZWhhdmlvci4gSG9wZWZ1bGx5LCBpdCBpbmNsdWRlcyBhZGVxdWF0ZSBlcnJvciBoYW5kbGluZyDigJMgSSYjMzk7bSBob3BpbmcgdG8gc2VlIGEgc29saWQgc3RhdHVzIGNoZWNrIGFmdGVyIGVhY2ggd3JpdGUgYW5kIHJlYWQgdG8gdGhlIFBIWSByZWdpc3RlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F4ODgxNzJhX2luaXRfbWRpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jPTU1PXN0YXRpYyB2b2lkIGF4ODgxNzJhX3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYilcbi0tXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy02MC0vKiB1c2UgcGh5bGliIGluZnJhc3RydWN0dXJlICovXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYzo2MTpzdGF0aWMgaW50IGF4ODgxNzJhX2luaXRfbWRpbyhzdHJ1Y3QgdXNibmV0ICpkZXYpXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy02Mi17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9MTU4PXN0YXRpYyBpbnQgYXg4ODE3MmFfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTIyNS1cdC8qIGluaXQgTURJTyBidXMgKi9cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjIyNjpcdHJldCA9IGF4ODgxNzJhX2luaXRfbWRpbyhkZXYpO1xuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMjI3LVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzNDMKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBheDg4MTcyYV9pbml0X21kaW9gIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBjaGlwJiMzOTtzIE1ESU8gaW50ZXJmYWNlIGlzIGluaXRpYWxpemVkLiBJJiMzOTttIGFzc3VtaW5nLCBnaXZlbiB0aGUgbmFtaW5nLCB0aGF0IHRoaXMgaXMgc3BlY2lmaWNhbGx5IHRpZWQgdG8gdGhlIEFTSVggQVg4ODE3MkEgZXRoZXJuZXQgY29udHJvbGxlciDigJMgd2hpY2ggSSYjMzk7bSBmYW1pbGlhciB3aXRoLCBnaXZlbiBteSBiYWNrZ3JvdW5kLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGluaXRpYWxpemF0aW9uIHRvIGJlIGEgY3JpdGljYWwgc3RlcC4KCk5vdywgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHJlZ2lzdGVyIGFjY2Vzc2VzIGFuZCBhbnkgZGVsYXlzIHVzZWQsIGFzIHRoZXNlIGFyZSBhbGwgaW1wb3J0YW50LiBJIGFudGljaXBhdGUgdGhhdCBpdCB3aWxsIGludm9sdmUgc2V0dGluZyB1cCBjbG9jayBzcGVlZHMsIHBvdGVudGlhbGx5IGNvbmZpZ3VyaW5nIHRoZSBQSFkgYWRkcmVzcyAoaWYgaXQmIzM5O3MgdXNpbmcgYW4gZXh0ZXJuYWwgUEhZKSwgYW5kIGVuYWJsaW5nIHRoZSBNRElPIGludGVyZmFjZSBpdHNlbGYuIEFueSBlcnJvciBoYW5kbGluZyBvciByZXRyeSBtZWNoYW5pc21zIHdpbGwgYmUgZ29vZCB0byBub3RlLCB0b28sIHNpbmNlIHJlbGlhYmxlIGluaXRpYWxpemF0aW9uIGlzIGNydWNpYWwgZm9yIGEgc3RhYmxlIG5ldHdvcmsgY29ubmVjdGlvbi4gSSYjMzk7bGwgYWxzbyBiZSBvbiB0aGUgbG9va291dCBmb3IgYW55IGRldmljZS1zcGVjaWZpYyBxdWlya3Mgb3Igd29ya2Fyb3VuZHMgdGhlIGRyaXZlciBtaWdodCBlbXBsb3kuIFRoaXMgc2hvdWxkIGhvcGVmdWxseSBiZSBzdHJhaWdodGZvcndhcmQ7IGJ1dCBsZXQmIzM5O3MgdGFrZSBhIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYxOlx0c3RhdGljIGludCBheDg4MTcyYV9pbml0X21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxuICA2MjpcdHtcbiAgNjM6XHRcdHN0cnVjdCBheDg4MTcyYV9wcml2YXRlICpwcml2ID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuICA2NDpcdFx0aW50IHJldDtcbiAgNjU6XHRcbiAgNjY6XHRcdHByaXYtXHUwMDNlbWRpbyA9IG1kaW9idXNfYWxsb2MoKTtcbiAgNjc6XHRcdGlmICghcHJpdi1cdTAwM2VtZGlvKSB7XG4gIDY4Olx0XHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7Q291bGQgbm90IGFsbG9jYXRlIE1ESU8gYnVzXFxuXCYjMzQ7KTtcbiAgNjk6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gIDcwOlx0XHR9XG4gIDcxOlx0XG4gIDcyOlx0XHRwcml2LVx1MDAzZW1kaW8tXHUwMDNlcHJpdiA9ICh2b2lkICopZGV2O1xuICA3MzpcdFx0cHJpdi1cdTAwM2VtZGlvLVx1MDAzZXJlYWQgPSBcdTAwMjZhc2l4X21kaW9fYnVzX3JlYWQ7XG4gIDc0Olx0XHRwcml2LVx1MDAzZW1kaW8tXHUwMDNld3JpdGUgPSBcdTAwMjZhc2l4X21kaW9fYnVzX3dyaXRlO1xuICA3NTpcdFx0cHJpdi1cdTAwM2VtZGlvLVx1MDAzZW5hbWUgPSBcJiMzNDtBc2l4IE1ESU8gQnVzXCYjMzQ7O1xuICA3NjpcdFx0LyogbWlpIGJ1cyBuYW1lIGlzIHVzYi1cdTAwM2N1c2IgYnVzIG51bWJlclx1MDAzZS1cdTAwM2N1c2IgZGV2aWNlIG51bWJlclx1MDAzZSAqL1xuICA3NzpcdFx0c25wcmludGYocHJpdi1cdTAwM2VtZGlvLVx1MDAzZWlkLCBNSUlfQlVTX0lEX1NJWkUsIFwmIzM0O3VzYi0lMDNkOiUwM2RcJiMzNDssXG4gIDc4Olx0XHRcdCBkZXYtXHUwMDNldWRldi1cdTAwM2VidXMtXHUwMDNlYnVzbnVtLCBkZXYtXHUwMDNldWRldi1cdTAwM2VkZXZudW0pO1xuICA3OTpcdFxuICA4MDpcdFx0cmV0ID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZW1kaW8pO1xuICA4MTpcdFx0aWYgKHJldCkge1xuICA4MjpcdFx0XHRuZXRkZXZfZXJyKGRldi1cdTAwM2VuZXQsIFwmIzM0O0NvdWxkIG5vdCByZWdpc3RlciBNRElPIGJ1c1xcblwmIzM0Oyk7XG4gIDgzOlx0XHRcdGdvdG8gbWZyZWU7XG4gIDg0Olx0XHR9XG4gIDg1Olx0XG4gIDg2Olx0XHRuZXRkZXZfaW5mbyhkZXYtXHUwMDNlbmV0LCBcJiMzNDtyZWdpc3RlcmVkIG1kaW8gYnVzICVzXFxuXCYjMzQ7LCBwcml2LVx1MDAzZW1kaW8tXHUwMDNlaWQpO1xuICA4NzpcdFx0cmV0dXJuIDA7XG4gIDg4Olx0XG4gIDg5Olx0bWZyZWU6XG4gIDkwOlx0XHRtZGlvYnVzX2ZyZWUocHJpdi1cdTAwM2VtZGlvKTtcbiAgOTE6XHRcdHJldHVybiByZXQ7XG4gIDkyOlx0fVxuICA5MzpcdFxuICA5NDpcdHN0YXRpYyB2b2lkIGF4ODgxNzJhX3JlbW92ZV9tZGlvKHN0cnVjdCB1c2JuZXQgKmRldilcbiAgOTU6XHR7XG4gIDk2Olx0XHRzdHJ1Y3QgYXg4ODE3MmFfcHJpdmF0ZSAqcHJpdiA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbiAgOTc6XHRcbiAgOTg6XHRcdG5ldGRldl9pbmZvKGRldi1cdTAwM2VuZXQsIFwmIzM0O2RlcmVnaXN0ZXJpbmcgbWRpbyBidXMgJXNcXG5cJiMzNDssIHByaXYtXHUwMDNlbWRpby1cdTAwM2VpZCk7XG4gIDk5Olx0XHRtZGlvYnVzX3VucmVnaXN0ZXIocHJpdi1cdTAwM2VtZGlvKTtcbiAxMDA6XHRcdG1kaW9idXNfZnJlZShwcml2LVx1MDAzZW1kaW8pO1xuIDEwMTpcdH1cbiAxMDI6XHRcbiAxMDM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGF4ODgxNzJhX25ldGRldl9vcHMgPSB7XG4gMTA0Olx0XHQubmRvX29wZW5cdFx0PSB1c2JuZXRfb3BlbixcbiAxMDU6XHRcdC5uZG9fc3RvcFx0XHQ9IHVzYm5ldF9zdG9wLFxuIDEwNjpcdFx0Lm5kb19zdGFydF94bWl0XHRcdD0gdXNibmV0X3N0YXJ0X3htaXQsXG4gMTA3Olx0XHQubmRvX3R4X3RpbWVvdXRcdFx0PSB1c2JuZXRfdHhfdGltZW91dCxcbiAxMDg6XHRcdC5uZG9fY2hhbmdlX210dVx0XHQ9IHVzYm5ldF9jaGFuZ2VfbXR1LFxuIDEwOTpcdFx0Lm5kb19nZXRfc3RhdHM2NFx0PSBkZXZfZ2V0X3RzdGF0czY0LFxuIDExMDpcdFx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcdD0gYXNpeF9zZXRfbWFjX2FkZHJlc3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNDgxCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1ESU8gQnVzIEludGVyYWN0aW9uIGZvciBFbXVsYXRlZCBVU0IgRGV2aWNlKioKCk9rYXksIHNvIGlmIEkmIzM5O20gdW5kZXJzdGFuZGluZyB0aGlzIGNvcnJlY3RseSwgdXNpbmcgYG1kaW9idXNfcmVnaXN0ZXJgIGlzIHRoZSBrZXkuIFRoYXQgZnVuY3Rpb24gaGFuZGxlcyBzY2FubmluZyB0aGUgTURJTyBidXMgYW5kIHByb2JpbmcgYW55IFBIWSBkZXZpY2VzIHRoYXQgYXJlIHByZXNlbnQuIEkgdGhpbmsgdGhpcyBjYW4gd29yayB3aXRoIHRoZSBVU0IgZGV2aWNlIGVtdWxhdGlvbiDigJMgd2UgY2FuIGludGVyY2VwdCBhbmQgcmVzcG9uZCB0byBgYXNpeF9tZGlvX2J1c19yZWFkYCBjYWxscywgYW5kIHNwZWNpZmljYWxseSwgd2UgY2FuIHJlcG9ydCB0aGUgUEhZIElEIGZvciB0aGUgYFJUTF84MjYxQ19DR2AgYXMgMHgwMDFjYzg5OC4gSWYgdGhhdCYjMzk7cyB3aGF0IHdlIGRvLCBgbWRpb2J1c19yZWdpc3RlcmAgc2hvdWxkIHRoZW4gY3JlYXRlIGEgUEhZIGRldmljZSBvYmplY3QgYW5kIGJpbmQgaXQgdG8gdGhlIGByZWFsdGVrX21haW4uY2AgZHJpdmVyLCB3aGljaCBpcyB3aGF0IHdlIG5lZWQuCgpCdXQgaG9sZCBvbuKApiBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcuIElzIGBSVExfODI2MUNfQ0dgIGEgQ2xhdXNlIDQ1IFBIWSBvciBhIENsYXVzZSAyMiBQSFk/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYHJlYWx0ZWtfbWFpbi5jYCB0byBiZSBjZXJ0YWluLiBHb3R0YSBlbnN1cmUgd2UmIzM5O3JlIGFsaWduaW5nIHdpdGggaG93IHRoYXQgZHJpdmVyIGV4cGVjdHMgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgUEhZLiBOZWVkIHRvIHZlcmlmeSB0aGF0IGJlZm9yZSBwcm9jZWVkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtSVExfODI2MUNfQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYy0yNTktI2RlZmluZSBSVExfODI2MUNcdFx0XHRcdDB4MDAxY2M4OTBcbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jOjI2MDojZGVmaW5lIFJUTF84MjYxQ19DR1x0XHRcdFx0MHgwMDFjYzg5OFxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMtMjYxLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jPTMwODY9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHJlYWx0ZWtfZHJ2c1tdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jLTM0MDMtXHR9LCB7XG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYzozNDA0Olx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUlRMXzgyNjFDX0NHKSxcbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jLTM0MDUtXHRcdC5uYW1lXHRcdFx0PSBcJiMzNDtSZWFsdGVrIFJUTDgyNjEgMTBHYnBzIFBIWVwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzExODQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQSFkgSUQgTWF0Y2gqKgoKT2theSwgc28gdGhlIGNvZGUgaW5kaWNhdGVzIHRoYXQgYFBIWV9JRF9NQVRDSF9FWEFDVGAgbWVhbnMgYSBkaXJlY3QgbWF0Y2ggb24gdGhlIFBIWSBJRC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEJ1dCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgd2hhdCBraW5kIG9mIFBIWSBhcmUgd2UgZGVhbGluZyB3aXRoPyBCYXNlZCBvbiB0aGF0IGluaXRpYWwgbWF0Y2gsIGlzIHRoaXMgYSBDbGF1c2UgNDUgUEhZLCBzcGVjaWZpY2FsbHk/IExvb2tpbmcgYXQgdGhlIGByZWFsdGVrX21haW4uY2AgZHJpdmVyLCBJIHNlZSBmdW5jdGlvbnMgYmVpbmcgY2FsbGVkIHN1Y2ggYXMgYGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXRgLCBgZ2VucGh5X2M0NV9wbWFfc3VzcGVuZGAsIGBnZW5waHlfYzQ1X3BtYV9yZXN1bWVgLCBgZ2VucGh5X2M0NV9jb25maWdfYW5lZ2AsIGFuZCBgZ2VucGh5X2M0NV9yZWFkX3N0YXR1c2AuIFRoZSBwcmVzZW5jZSBvZiB0aGVzZSBgZ2VucGh5X2M0NWAgZnVuY3Rpb25zIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQsIHllcywgaXQmIzM5O3MgdmVyeSBsaWtlbHkgYSBDbGF1c2UgNDUgUEhZLiBUaGlzIGlzIGV4Y2VsbGVudCEKCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGNhbiB0aGUgYGF4ODgxNzJhYCBkcml2ZXIgYWN0dWFsbHkgKnJlYWQqIHRoZXNlIENsYXVzZSA0NSBQSFkgcmVnaXN0ZXJzPyBUaGF0JiMzOTtzIHRoZSBrZXkuIExldCBtZSBxdWlja2x5IGV4YW1pbmUgYGFzaXhfbWRpb19idXNfcmVhZGAgdG8gc2VlIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZC4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgcmVnaXN0ZXJzIHRvIG1ha2UgYW55IHByb2dyZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthc2l4X21kaW9fYnVzX3JlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9hc2l4Lmg9MjMyPXZvaWQgYXNpeF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlfaWQsIGludCBsb2MsIGludCB2YWwpO1xuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMzMtXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjIzNDppbnQgYXNpeF9tZGlvX2J1c19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0pO1xuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMzUtaW50IGFzaXhfbWRpb19idXNfd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSwgdTE2IHZhbCk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9NTQzPXZvaWQgYXNpeF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlfaWQsIGludCBsb2MsIGludCB2YWwpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNTQ4LS8qIE1ESU8gcmVhZCBhbmQgd3JpdGUgd3JhcHBlcnMgZm9yIHBoeWxpYiAqL1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6NTQ5OmludCBhc2l4X21kaW9fYnVzX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSlcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTU1MC17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTY2OT1zdGF0aWMgaW50IGF4ODg3NzJfaW5pdF9tZGlvKHN0cnVjdCB1c2JuZXQgKmRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjc4LVx0cHJpdi1cdTAwM2VtZGlvLVx1MDAzZXByaXYgPSBkZXY7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6Njc5Olx0cHJpdi1cdTAwM2VtZGlvLVx1MDAzZXJlYWQgPSBcdTAwMjZhc2l4X21kaW9fYnVzX3JlYWQ7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjgwLVx0cHJpdi1cdTAwM2VtZGlvLVx1MDAzZXdyaXRlID0gXHUwMDI2YXNpeF9tZGlvX2J1c193cml0ZTtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz02MT1zdGF0aWMgaW50IGF4ODgxNzJhX2luaXRfbWRpbyhzdHJ1Y3QgdXNibmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtNzItXHRwcml2LVx1MDAzZW1kaW8tXHUwMDNlcHJpdiA9ICh2b2lkICopZGV2O1xuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6NzM6XHRwcml2LVx1MDAzZW1kaW8tXHUwMDNlcmVhZCA9IFx1MDAyNmFzaXhfbWRpb19idXNfcmVhZDtcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTc0LVx0cHJpdi1cdTAwM2VtZGlvLVx1MDAzZXdyaXRlID0gXHUwMDI2YXNpeF9tZGlvX2J1c193cml0ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIyNTMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBhc2l4X21kaW9fYnVzX3JlYWRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgaG93IGl0JiMzOTtzIGltcGxlbWVudGVkLiBNeSBleHBlcnRpc2UgbGllcyBpbiBlbWJlZGRlZCBzeXN0ZW1zLCBzbyBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcGFyc2luZyBpdCBmb3IgcG90ZW50aWFsIGlzc3VlcyBsaWtlIHJhY2UgY29uZGl0aW9ucywgcmVnaXN0ZXIgYWNjZXNzIG1lY2hhbmlzbXMsIGFuZCB0aW1pbmcgY29uc3RyYWludHMuIEkmIzM5O20gYXNzdW1pbmcgdGhpcyBpcyByZWxhdGVkIHRvIGEgTWVkaWEgSW5kZXBlbmRlbnQgSW50ZXJmYWNlIChNSUkpIGJ1cywgbGlrZWx5IGZvciBhbiBFdGhlcm5ldCBQSFkuIEdpdmVuIHRoZSBgYXNpeGAgcHJlZml4LCBJJiMzOTtkIGd1ZXNzIHRoaXMgaXMgcmVsYXRlZCB0byBhbiBBU0lYIGNoaXBzZXQsIG1lYW5pbmcgSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGVpciBpZGlvc3luY3Jhc2llcyBpZiBhbnkuIExldCYjMzk7cyBzZWUgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyB0aGUgcmVhZCBjeWNsZS4gSXMgaXQgdXNpbmcgcG9sbGVkIG9yIGludGVycnVwdC1kcml2ZW4gbWV0aG9kcz8gV2hhdCYjMzk7cyB0aGUgZXJyb3IgaGFuZGxpbmcgbGlrZT8gSSYjMzk7bSBob3BpbmcgdG8gc2VlIGNsZWFuIHNlcGFyYXRpb24gb2YgY29uY2VybnM6IGNsZWFyIGRhdGEgc3RydWN0dXJlIGZvciBob2xkaW5nIHRoZSBNRElPIGJ1cyBzdGF0ZSBhbmQgc3RyYWlnaHRmb3J3YXJkIHJlZ2lzdGVyIGFjY2VzcyBmdW5jdGlvbnMgd2l0aCBwcm9wZXIgZXJyb3IgY2hlY2tpbmcuIEkmIzM5O20ga2VlbiB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIGZvciBiaXQtYmFuZ2luZywgYW55IGJpdC1zaGlmdGluZyBvcGVyYXRpb25zIGFuZCB0aGUgdXNlIG9mIHZvbGF0aWxlIHBvaW50ZXJzIHRoYXQgY291bGQgaW50cm9kdWNlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzZXF1ZW5jaW5nLCB0aGUgY2xvY2sgZ2VuZXJhdGlvbiwgYW5kIHRoZSBkYXRhIHRyYW5zbWlzc2lvbi4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCYjMzk7cyBkb2luZyBpdCByaWdodCBhbmQgZWZmaWNpZW50bHkuIEkmIzM5O20gYWxzbyB3YXRjaGluZyBvdXQgZm9yIGFueSBwb3RlbnRpYWwgbG9jay11cHMgb3IgaW5maW5pdGUgbG9vcHMuIEZpbmFsbHksIGlzIHRoZXJlIGFueSBwb3RlbnRpYWwgZm9yIGRhdGEgY29ycnVwdGlvbiBnaXZlbiB0aGUgY29tbXVuaWNhdGlvbiBlbnZpcm9ubWVudD8gT2theSwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQ5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NDk6XHRpbnQgYXNpeF9tZGlvX2J1c19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0pXG4gNTUwOlx0e1xuIDU1MTpcdFx0c3RydWN0IHVzYm5ldCAqcHJpdiA9IGJ1cy1cdTAwM2Vwcml2O1xuIDU1MjpcdFxuIDU1MzpcdFx0cmV0dXJuIF9fYXNpeF9tZGlvX3JlYWQocHJpdi1cdTAwM2VuZXQsIHBoeV9pZCwgcmVnbnVtLCBmYWxzZSk7XG4gNTU0Olx0fVxuIDU1NTpcdFxuIDU1NjpcdGludCBhc2l4X21kaW9fYnVzX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0sIHUxNiB2YWwpXG4gNTU3Olx0e1xuIDU1ODpcdFx0c3RydWN0IHVzYm5ldCAqcHJpdiA9IGJ1cy1cdTAwM2Vwcml2O1xuIDU1OTpcdFxuIDU2MDpcdFx0cmV0dXJuIF9fYXNpeF9tZGlvX3dyaXRlKHByaXYtXHUwMDNlbmV0LCBwaHlfaWQsIHJlZ251bSwgdmFsLCBmYWxzZSk7XG4gNTYxOlx0fVxuIDU2MjpcdFxuIDU2MzpcdGludCBhc2l4X21kaW9fcmVhZF9ub3BtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlfaWQsIGludCBsb2MpXG4gNTY0Olx0e1xuIDU2NTpcdFx0cmV0dXJuIF9fYXNpeF9tZGlvX3JlYWQobmV0ZGV2LCBwaHlfaWQsIGxvYywgdHJ1ZSk7XG4gNTY2Olx0fVxuIDU2NzpcdFxuIDU2ODpcdHZvaWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI5MzQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDbGF1c2UgNDUgUmVnaXN0ZXIgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBob2xkIG9uIGEgbWludXRlLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoaXMgYHJlZ251bWAgcGFyYW1ldGVyLCBhbmQgaXQganVzdCBzdHJ1Y2sgbWU6IGByZWdudW1gIGNvdWxkIHZlcnkgd2VsbCBiZSBhIENsYXVzZSA0NSByZWdpc3RlciBhZGRyZXNzLiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBkaXN0aW5jdGlvbiwgYmVjYXVzZSBpZiBpdCAqaXMqIENsYXVzZSA0NSwgdGhlbiB0aGF0IGBNSUlfQUREUl9DNDVgIGJpdCwgb3IgYDB4NDAwMDAwMDBgLCBpcyBnb2luZyB0byBiZSBzZXQuIFRoZSByZWFsIHF1ZXN0aW9uIGlzOiBkb2VzIHRoZSBgX19hc2l4X21kaW9fcmVhZGAgZnVuY3Rpb24gZXZlbiBoYW5kbGUgQ2xhdXNlIDQ1IHJlZ2lzdGVycyBjb3JyZWN0bHk/IElmIGl0IGRvZXNuJiMzOTt0IGhhdmUgdGhlIGFwcHJvcHJpYXRlIGxvZ2ljLCBpdCBjb3VsZCBqdXN0IHRydW5jYXRlIHRoZSBhZGRyZXNzLCBtYW5nbGUgdGhlIHJlYWQsIG9yIHdvcnNlLCBvdXRyaWdodCBmYWlsLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYF9fYXNpeF9tZGlvX3JlYWRgIGFuZCBzZWUgaG93IGl0JiMzOTtzIGFjdHVhbGx5IGltcGxlbWVudGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNhcGFibGUgb2YgZGVhbGluZyB3aXRoIHRoZSBwb3RlbnRpYWxseSBzaWduaWZpY2FudCBkaWZmZXJlbmNlIGluIGFkZHJlc3NpbmcgbW9kZXMuIFRoaXMgY291bGQgYmUgdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGlzc3VlIEkmIzM5O20gc2VlaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MDA6XHRcdHJldCA9IGFzaXhfc2V0X2h3X21paShkZXYsIGluX3BtKTtcbiA1MDE6XHRvdXQ6XG4gNTAyOlx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZXBoeV9tdXRleCk7XG4gNTAzOlx0XG4gNTA0Olx0XHRuZXRkZXZfZGJnKGRldi1cdTAwM2VuZXQsIFwmIzM0O2FzaXhfbWRpb19yZWFkKCkgcGh5X2lkPTB4JTAyeCwgbG9jPTB4JTAyeCwgcmV0dXJucz0weCUwNHhcXG5cJiMzNDssXG4gNTA1Olx0XHRcdFx0cGh5X2lkLCBsb2MsIGxlMTZfdG9fY3B1KHJlcykpO1xuIDUwNjpcdFxuIDUwNzpcdFx0cmV0dXJuIHJldCBcdTAwM2MgMCA/IHJldCA6IGxlMTZfdG9fY3B1KHJlcyk7XG4gNTA4Olx0fVxuIDUwOTpcdFxuIDUxMDpcdGludCBhc2l4X21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jKVxuIDUxMTpcdHtcbiA1MTI6XHRcdHJldHVybiBfX2FzaXhfbWRpb19yZWFkKG5ldGRldiwgcGh5X2lkLCBsb2MsIGZhbHNlKTtcbiA1MTM6XHR9XG4gNTE0Olx0XG4gNTE1Olx0c3RhdGljIGludCBfX2FzaXhfbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jLFxuIDUxNjpcdFx0XHRcdCAgICAgaW50IHZhbCwgYm9vbCBpbl9wbSlcbiA1MTc6XHR7XG4gNTE4Olx0XHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIDUxOTpcdFx0X19sZTE2IHJlcyA9IGNwdV90b19sZTE2KHZhbCk7XG4gNTIwOlx0XHRpbnQgcmV0O1xuIDUyMTpcdFxuIDUyMjpcdFx0bmV0ZGV2X2RiZyhkZXYtXHUwMDNlbmV0LCBcJiMzNDthc2l4X21kaW9fd3JpdGUoKSBwaHlfaWQ9MHglMDJ4LCBsb2M9MHglMDJ4LCB2YWw9MHglMDR4XFxuXCYjMzQ7LFxuIDUyMzpcdFx0XHRcdHBoeV9pZCwgbG9jLCB2YWwpO1xuIDUyNDpcdFxuIDUyNTpcdFx0bXV0ZXhfbG9jayhcdTAwMjZkZXYtXHUwMDNlcGh5X211dGV4KTtcbiA1MjY6XHRcbiA1Mjc6XHRcdHJldCA9IGFzaXhfY2hlY2tfaG9zdF9lbmFibGUoZGV2LCBpbl9wbSk7XG4gNTI4Olx0XHRpZiAocmV0ID09IC1FTk9ERVYpXG4gNTI5Olx0XHRcdGdvdG8gb3V0O1xuIDUzMDpcdFxuIDUzMTpcdFx0cmV0ID0gYXNpeF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfTUlJX1JFRywgcGh5X2lkLCAoX191MTYpbG9jLCAyLFxuIDUzMjpcdFx0XHRcdCAgICAgXHUwMDI2cmVzLCBpbl9wbSk7XG4gNTMzOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDUzNDpcdFx0XHRnb3RvIG91dDtcbiA1MzU6XHRcbiA1MzY6XHRcdHJldCA9IGFzaXhfc2V0X2h3X21paShkZXYsIGluX3BtKTtcbiA1Mzc6XHRvdXQ6XG4gNTM4Olx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZXBoeV9tdXRleCk7XG4gNTM5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzOTgxCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBDbGF1c2UgNDUgTUlJIFJlYWQgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBgbG9jYCBiZWluZyBjYXN0IHRvIGBfX3UxNmAuIFRoYXQmIzM5O3MgYSByZWQgZmxhZy4gU3BlY2lmaWNhbGx5LCBgTUlJX0FERFJfQzQ1YCAoMHg0MDAwMDAwMCkgaXMgZ29pbmcgdG8gZ2V0IHRydW5jYXRlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBjb3VsZCBiZSBhIHByb2JsZW0uIEJ1dCB3YWl0LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciBob3cgdGhlIE1ESU8gYnVzIG9wZXJhdGVzLgoKYG1kaW9idXNfcmVhZGAsIGluIGBkcml2ZXJzL25ldC9waHkvbWRpb19idXMuY2AsIGhhbmRsZXMgQ2xhdXNlIDQ1IHJlYWRzIGRpZmZlcmVudGx5LiBJdCBmaXJzdCBjaGVja3MgaWYgdGhlIGJ1cyBoYXMgYSBgcmVhZF9jNDVgIGZ1bmN0aW9uIHBvaW50ZXIuIElmIGl0IGRvZXMsIGdyZWF0LCBpdCB1c2VzIHRoYXQuIElmIG5vdCwgaXQgZmFsbHMgYmFjayB0byB0aGUgcmVndWxhciBgYnVzLSZndDtyZWFkYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZy4KCkhvd2V2ZXIsIGEgcXVpY2sgc2Vjb25kIHBhc3MgY29uZmlybXMgdGhhdCBpZiB0aGUgUEhZIGRyaXZlciByZWxpZXMgb24gYHBoeV9yZWFkX21tZGAsIGl0IHdpbGwgZXZlbnR1YWxseSBjYWxsIGBidXMtJmd0O3JlYWRfYzQ1YCBvciBgYnVzLSZndDtyZWFkYCB3aXRoIGBNSUlfQUREUl9DNDVgLgoKU28sIHRoZSBpc3N1ZSBpcyB0aGF0IGlmIGBhc2l4X21kaW9fYnVzX3JlYWRgIHRydW5jYXRlcyBgTUlJX0FERFJfQzQ1YCwgd2UgYXJlIGxpa2VseSBnb2luZyB0byByZWFkIGEgQ2xhdXNlIDIyIHJlZ2lzdGVyIGluc3RlYWQuIFBvdGVudGlhbGx5IGEgdnVsbmVyYWJpbGl0eSBpZiB0aGF0IHJlYWQgZXhwb3NlcyBzb21ldGhpbmcgaXQgc2hvdWxkbiYjMzk7dC4KCk5vdywgdGhlIHBhdGNoIGluIHF1ZXN0aW9uIGlzIGluIGByZWFsdGVrX21haW4uY2AsIHdoaWNoIGlzIGEgUEhZIGRyaXZlci4gQWhhISBTbyBpdCAqc2hvdWxkbiYjMzk7dCogYmUgdXNpbmcgdGhlIGBhc2l4X21kaW9fYnVzX3JlYWRgIGZ1bmN0aW9uIQoKVGhlIHF1ZXN0aW9uIG5vdyBiZWNvbWVzOiBIb3cgY2FuIEkgdHJpZ2dlciB0aGlzIHNjZW5hcmlvIGFuZCB0ZXN0IGlmIHRoaXMgdHJ1bmNhdGlvbiBsZWFkcyB0byBhbiBleHBsb2l0YWJsZSByZWFkPyBDYW4gSSB1c2Ugc29tZXRoaW5nIGxpa2UgYG1kaW8tbW9ja3VwYD8gTGV0JiMzOTtzIGNoZWNrLiBEb2VzIGl0IGV4aXN0IG9yIGhvdyBjYW4gSSBpbnN0YW50aWF0ZSBhIFBIWT8gSXMgdGhlcmUgYSB1c2VyLXNwYWNlIHdheSB0byBtZXNzIHdpdGggdGhlIGRyaXZlcnM/IEFoLCBgc3lzZnNgLi4uIGFsd2F5cyBhIGdvb2QgYmV0LgoKV2FpdCwgSSB0aG91Z2h0IHRoZXJlIHdhcyBhIGBtZGlvLW1vY2t1cC5jYD8gTm8uIE9rYXksIEkgc2VhcmNoZWQgdGhlIHJpZ2h0IHBhdGggYW5kIG5vdGhpbmcuIE1heWJlIEkgbWlzc2VkIHNvbWV0aGluZyBvciBtaXMtcmVtZW1iZXJlZCB0aGUgZHJpdmVyIGxvY2F0aW9uLiBJIHdpbGwgc2VhcmNoIGBkcml2ZXJzL25ldC9gIGZvciBgbW9ja3VwYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9ja3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTQ0Nj1zdGF0aWMgaW50IF9faW5pdCBkc2FfbG9vcF9jcmVhdGVfc3dpdGNoX21kaW9kZXYodm9pZClcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NTUtXHRcdH0sXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NTY6XHRcdC5uYW1lID0gXCYjMzQ7RFNBIG1vY2t1cCBkcml2ZXJcJiMzNDssXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NTctXHRcdC5lbmFibGVkX3BvcnRzID0gMHgxZixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ5ODQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHM6CgoqKkV2YWx1YXRpbmcgUEhZIExheWVyIE9wdGlvbnMqKgoKUmlnaHQsIHNvIHRoZSBgbWRpby1tb2NrdXBgIGFwcHJvYWNoIGlzbiYjMzk7dCBnb2luZyB0byBjdXQgaXQgZm9yIHRoaXMgcHJvamVjdC4gVGhhdCYjMzk7cyBhIGRlZmluaXRlIG5vLWdvLiBJIG5lZWQgdG8gcGl2b3QgYW5kIGNvbnNpZGVyIG15IG9wdGlvbnMgZm9yIHRoZSBQSFkgbGF5ZXIuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgdG8gZXhwbG9yZSBgZml4ZWQtcGh5YC4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byB0aGUgaW1wbGljYXRpb25zIG9mIHVzaW5nIHRoYXQgaW5zdGVhZC4gVGhlIHdob2xlICYjMzk7bW9ja3VwJiMzOTsgaWRlYSBpc24mIzM5O3Qgcm9idXN0IG9yIHNjYWxhYmxlIGVub3VnaCBmb3Igd2hhdCBJIGhhdmUgaW4gbWluZCwgc28gSSYjMzk7bSBrZWVuIHRvIGV2YWx1YXRlIGEgbW9yZSBjb25jcmV0ZSBzb2x1dGlvbiBpbW1lZGlhdGVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zml4ZWRfcGh5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9NjM9b2JqLSQoQ09ORklHX0RQODNURzcyMF9QSFkpXHQmIzQzOz0gZHA4M3RnNzIwLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfRklYRURfUEhZKVx0XHQmIzQzOz0gZml4ZWRfcGh5Lm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS02NS1vYmotJChDT05GSUdfSUNQTFVTX1BIWSlcdCYjNDM7PSBpY3BsdXMub1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0yNy1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoyODpzdHJ1Y3QgZml4ZWRfcGh5IHtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0yOS1cdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MzA6XHRzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyBzdGF0dXM7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MzE6XHRpbnQgKCpsaW5rX3VwZGF0ZSkoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKik7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMzItfTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0zMy1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzozNDpzdGF0aWMgREVDTEFSRV9CSVRNQVAoZml4ZWRfcGh5X2lkcywgTlVNX0ZQKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzozNTpzdGF0aWMgc3RydWN0IGZpeGVkX3BoeSBmbWJfZml4ZWRfcGh5c1tOVU1fRlBdO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTM2LXN0YXRpYyBzdHJ1Y3QgbWlpX2J1cyAqZm1iX21paV9idXM7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMzctXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6Mzg6c3RhdGljIHN0cnVjdCBmaXhlZF9waHkgKmZpeGVkX3BoeV9maW5kKGludCBhZGRyKVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTM5LXtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo0MDpcdHJldHVybiB0ZXN0X2JpdChhZGRyLCBmaXhlZF9waHlfaWRzKSA/IGZtYl9maXhlZF9waHlzICYjNDM7IGFkZHIgOiBOVUxMO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTQxLX1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy00Mi1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo0MzppbnQgZml4ZWRfcGh5X2NoYW5nZV9jYXJyaWVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgbmV3X2NhcnJpZXIpXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNDQte1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTQ1LVx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IGRldi1cdTAwM2VwaHlkZXY7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NDY6XHRzdHJ1Y3QgZml4ZWRfcGh5ICpmcDtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy00Ny1cbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNTAtXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NTE6XHRmcCA9IGZpeGVkX3BoeV9maW5kKHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTUyLVx0aWYgKCFmcClcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNTgtfVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjU5OkVYUE9SVF9TWU1CT0xfR1BMKGZpeGVkX3BoeV9jaGFuZ2VfY2Fycmllcik7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNjAtXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM9NjE9c3RhdGljIGludCBmaXhlZF9tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcmVnX251bSlcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy02Mi17XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NjM6XHRzdHJ1Y3QgZml4ZWRfcGh5ICpmcDtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy02NC1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo2NTpcdGZwID0gZml4ZWRfcGh5X2ZpbmQocGh5X2FkZHIpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTY2LVx0aWYgKCFmcClcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM9NzU9c3RhdGljIGludCBmaXhlZF9tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IHJlZ19udW0sXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTg1LSAqL1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjg2OmludCBmaXhlZF9waHlfc2V0X2xpbmtfdXBkYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtODctXHRcdFx0ICAgICAgaW50ICgqbGlua191cGRhdGUpKHN0cnVjdCBuZXRfZGV2aWNlICosXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6ODg6XHRcdFx0XHRcdFx0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICopKVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTg5LXtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo5MDpcdHN0cnVjdCBmaXhlZF9waHkgKmZwO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTkxLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy05NC1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo5NTpcdGZwID0gZml4ZWRfcGh5X2ZpbmQocGh5ZGV2LVx1MDAzZW1kaW8uYWRkcik7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtOTYtXHRpZiAoIWZwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMDMtfVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjEwNDpFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfc2V0X2xpbmtfdXBkYXRlKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMDUtXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTA2OnN0YXRpYyB2b2lkIGZpeGVkX3BoeV9kZWwoaW50IHBoeV9hZGRyKVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEwNy17XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTA4Olx0c3RydWN0IGZpeGVkX3BoeSAqZnA7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTA5LVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjExMDpcdGZwID0gZml4ZWRfcGh5X2ZpbmQocGh5X2FkZHIpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTExMS1cdGlmICghZnApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTExNC1cdG1lbXNldChmcCwgMCwgc2l6ZW9mKCpmcCkpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjExNTpcdGNsZWFyX2JpdChwaHlfYWRkciwgZml4ZWRfcGh5X2lkcyk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTE2LX1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMTctXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTE4OnN0YXRpYyBpbnQgZml4ZWRfcGh5X2dldF9mcmVlX2FkZHIodm9pZClcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMTkte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMjItXHRkbyB7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTIzOlx0XHRhZGRyID0gZmluZF9maXJzdF96ZXJvX2JpdChmaXhlZF9waHlfaWRzLCBOVU1fRlApO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEyNC1cdFx0aWYgKGFkZHIgPT0gTlVNX0ZQKVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEyNS1cdFx0XHRyZXR1cm4gLUVOT1NQQztcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMjY6XHR9IHdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KGFkZHIsIGZpeGVkX3BoeV9pZHMpKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMjctXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEzMC1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMzE6c3RydWN0IHBoeV9kZXZpY2UgKmZpeGVkX3BoeV9yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdHVzLFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEzMi1cdFx0XHRcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE0NS1cdC8qIEdldCB0aGUgbmV4dCBhdmFpbGFibGUgUEhZIGFkZHJlc3MsIHVwIHRvIE5VTV9GUCAqL1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE0NjpcdHBoeV9hZGRyID0gZml4ZWRfcGh5X2dldF9mcmVlX2FkZHIoKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNDctXHRpZiAocGh5X2FkZHIgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE0OS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNTA6XHRmbWJfZml4ZWRfcGh5c1twaHlfYWRkcl0uc3RhdHVzID0gKnN0YXR1cztcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNTE6XHRmbWJfZml4ZWRfcGh5c1twaHlfYWRkcl0uc3RhdHVzLmxpbmsgPSB0cnVlO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE1Mi1cbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTU0LVx0aWYgKElTX0VSUihwaHkpKSB7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTU1Olx0XHRmaXhlZF9waHlfZGVsKHBoeV9hZGRyKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNTYtXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNjYtXHRcdG9mX25vZGVfcHV0KG5wKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNjc6XHRcdGZpeGVkX3BoeV9kZWwocGh5X2FkZHIpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE2OC1cdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTcyLX1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNzM6RVhQT1JUX1NZTUJPTF9HUEwoZml4ZWRfcGh5X3JlZ2lzdGVyKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNzQtXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTc1OnN0cnVjdCBwaHlfZGV2aWNlICpmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQodm9pZClcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNzYte1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE3NzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyBzdGF0dXMgPSB7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTc4LVx0XHQuc3BlZWRcdD0gU1BFRURfMTAwLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xODEtXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTgyOlx0cmV0dXJuIGZpeGVkX3BoeV9yZWdpc3RlcihcdTAwMjZzdGF0dXMsIE5VTEwpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE4My19XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTg0OkVYUE9SVF9TWU1CT0xfR1BMKGZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTg1LVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE4Njp2b2lkIGZpeGVkX3BoeV91bnJlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTg3LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTg5LVx0b2Zfbm9kZV9wdXQocGh5LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGUpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE5MDpcdGZpeGVkX3BoeV9kZWwocGh5LVx1MDAzZW1kaW8uYWRkcik7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTkxLVx0cGh5X2RldmljZV9mcmVlKHBoeSk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTkyLX1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxOTM6RVhQT1JUX1NZTUJPTF9HUEwoZml4ZWRfcGh5X3VucmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE5NC1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTMzNjA9c3RhdGljIGludCBwaHlsaW5rX21paV9lbXVsX3JlYWQodW5zaWduZWQgaW50IHJlZyxcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMzNjIte1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozMzYzOlx0c3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgZnM7XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMzNjQtXHR1bnNpZ25lZCBsb25nICpscGEgPSBzdGF0ZS1cdTAwM2VscF9hZHZlcnRpc2luZztcbi0tXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy00LSAqXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYzo1OiAqIENvZGUgdGFrZW4gZnJvbSBmaXhlZF9waHkuYyBieSBSdXNzZWxsIEtpbmcuXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy02LSAqXG4tLVxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM9NzE9c3RhdGljIGludCBzd3BoeV9kZWNvZGVfc3BlZWQoaW50IHNwZWVkKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jLTkyLSAqL1xuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM6OTM6aW50IHN3cGh5X3ZhbGlkYXRlX3N0YXRlKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0ZSlcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jLTk0LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYz0xMDY9RVhQT1JUX1NZTUJPTF9HUEwoc3dwaHlfdmFsaWRhdGVfc3RhdGUpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jLTExNC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jOjExNTppbnQgc3dwaHlfcmVhZF9yZWcoaW50IHJlZywgY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXRlKVxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtMTE2LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuaC00LVxuZHJpdmVycy9uZXQvcGh5L3N3cGh5Lmg6NTpzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cztcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5oLTYtXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuaDo3OmludCBzd3BoeV92YWxpZGF0ZV9zdGF0ZShjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdGUpO1xuZHJpdmVycy9uZXQvcGh5L3N3cGh5Lmg6ODppbnQgc3dwaHlfcmVhZF9yZWcoaW50IHJlZywgY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXRlKTtcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5oLTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MzA3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipBbmFseXppbmcgUEhZIERyaXZlciBJbnN0YW50aWF0aW9uKioKCldhaXQgYSBtaW51dGUsIEkmIzM5O20gZ2V0dGluZyBtaXhlZCB1cC4gYGZpeGVkX3BoeWAgaXNuJiMzOTt0IG1lYW50IGZvciBkeW5hbWljYWxseSBjcmVhdGluZyBQSFkgZHJpdmVycywgaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IGZvciBmaXhlZC1saW5rIGNvbmZpZ3VyYXRpb25zLiBUaGF0JiMzOTtzIG5vdCBnb2luZyB0byB3b3JrLiBEYW1uLCBzbywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGluc3RhbnRpYXRlIHRoZXNlIFBIWSBkcml2ZXJzICp3aXRob3V0KiB0aGUgdHJhZGl0aW9uYWwgZml4ZWQtbGluayBhcHByb2FjaC4KCk9rYXksIGxldCYjMzk7cyBleHBsb3JlIG90aGVyIGF2ZW51ZXMuIFdoYXQgYWJvdXQgbGV2ZXJhZ2luZyBgc3l6X2dlbmV0bGlua2Agb3IsIGNvdWxkIEkgdXNlIGBzeXpfdXNiX2Nvbm5lY3RgIGluc3RlYWQ/IElmIEkgZ28gd2l0aCBgc3l6X3VzYl9jb25uZWN0YCwgY291bGQgSSBlbXVsYXRlIGEgVVNCIGRldmljZSB0aGF0JiMzOTtzIGNvbXBhdGlibGUgd2l0aCBvbmUgb2YgdGhlIHRhcmdldCBkcml2ZXJzLCBtYXliZSBgYXg4ODE3MmFgLCBgc21zYzk1eHhgLCBgbGFuNzh4eGAsIG9yIGByODE1MmA/CgpIb2xkIG9uLi4uIEkmIzM5O20gdGhpbmtpbmcuLi4gTm93LCBkaWRuJiMzOTt0IGBsYW43OHh4YCB1c2Ugc29tZXRoaW5nIHJlbGF0ZWQgdG8gYHBoeV9jb25uZWN0YD8gQWgsIHllcyEgSSYjMzk7bGwgY2hlY2sgYGxhbjc4eHhfbWRpb19yZWFkYCBhcyB0aGF0IG1heSBvZmZlciBzb21lIGluc2lnaHQgaW50byBob3cgYGxhbjc4eHhgIGNvbm5lY3RzIHRvIHRoZSBQSFkuIFRoYXQgbWlnaHQgYmUgdGhlIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsYW43OHh4X21kaW9fcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODc0NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgYGxhbjc4eHhgIERyaXZlciBhbmQgTURJTyoqCgpBbHJpZ2h0LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgbGFuNzh4eGAgZHJpdmVyIGFuZCBob3cgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgTURJTyBpbnRlcmZhY2UuIEdpdmVuIHRoZSBjb250ZXh0LCBJJiMzOTttIGxpa2VseSB0cm91Ymxlc2hvb3Rpbmcgc29tZXRoaW5nIHNwZWNpZmlj4oCUcGVyaGFwcyBhIGNvbW11bmljYXRpb24gaXNzdWUsIGEgbWlzc2luZyBmZWF0dXJlLCBvciBzb21lIHVuZXhwZWN0ZWQgYmVoYXZpb3IgcmVsYXRlZCB0byB0aGUgUEhZIG1hbmFnZW1lbnQuIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gc3RhcnQgYXQgdGhlIHNvdXJjZS4gVW5kZXJzdGFuZGluZyB0aGUgYG1kaW9gIGludGVyYWN0aW9ucyB3aXRoaW4gdGhhdCBzcGVjaWZpYyBkcml2ZXIgaXMga2V5LiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBNRElPIGNvbW1hbmRzIGFyZSBjb25zdHJ1Y3RlZCwgaG93IHRoZSBkYXRhIGlzIGNsb2NrZWQgb3V0LCBhbmQgd2hhdCB0aGUgcmVhZC93cml0ZSBvcGVyYXRpb25zIGxvb2sgbGlrZS4gR290dGEgc2VlIGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIG9idmlvdXNseSBhd3J5IGluIHRoZSByZWdpc3RlciBhY2Nlc3NlcyBvciBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIHByb2JsZW1zLiBJJiMzOTtsbCBwcm9iYWJseSBiZSBkaXZpbmcgaW50byB0aGUgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgYW5kIGFueSBhc3NvY2lhdGVkIGhlbHBlciBmdW5jdGlvbnMgcXVpY2tseS4gR290dGEgZ2V0IHRoaXMgbmFpbGVkIGRvd24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTktI2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwOiNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMS0jaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjktI2luY2x1ZGUgXHUwMDNjbGludXgvbWljcm9jaGlwcGh5LmhcdTAwM2VcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MzA6I2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfbWRpby5oXHUwMDNlXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTMxLSNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX25ldC5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz00MTM9c3RydWN0IGxhbjc4eHhfbmV0IHtcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTQ0MS1cdHN0cnVjdCBtdXRleFx0XHRkZXZfbXV0ZXg7IC8qIHNlcmlhbGlzZSBvcGVuL3N0b3Agd3J0IHN1c3BlbmQvcmVzdW1lICovXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjQ0MjpcdHN0cnVjdCBtdXRleFx0XHRtZGlvYnVzX211dGV4OyAvKiBmb3IgTURJTyBidXMgYWNjZXNzICovXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTQ0My1cdHVuc2lnbmVkIGludFx0XHRwaXBlX2luLCBwaXBlX291dCwgcGlwZV9pbnRyO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtNDU4LVx0dTMyXHRcdFx0Y2hpcHJldjtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6NDU5Olx0c3RydWN0IG1paV9idXNcdFx0Km1kaW9idXM7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTQ2MC1cdHBoeV9pbnRlcmZhY2VfdFx0XHRpbnRlcmZhY2U7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz05NDY9c3RhdGljIGludCBsYW43OHh4X2ZsdXNoX3J4X2ZpZm8oc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy05NTAtXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjk1MTovKiBMb29wIHVudGlsIHRoZSByZWFkIGlzIGNvbXBsZXRlZCB3aXRoIHRpbWVvdXQgY2FsbGVkIHdpdGggbWRpb2J1c19tdXRleCBoZWxkICovXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjk1MjpzdGF0aWMgaW50IGxhbjc4eHhfbWRpb2J1c193YWl0X25vdF9idXN5KHN0cnVjdCBsYW43OHh4X25ldCAqZGV2KVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy05NTMte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9MTU4Mj1zdGF0aWMgaW50IGxhbjc4eHhfbWFjX3Jlc2V0KHN0cnVjdCBsYW43OHh4X25ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTU4Ny1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MTU4ODpcdG11dGV4X2xvY2soXHUwMDI2ZGV2LVx1MDAzZW1kaW9idXNfbXV0ZXgpO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0xNTg5LVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTU5My1cdCAqL1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoxNTk0Olx0cmV0ID0gbGFuNzh4eF9tZGlvYnVzX3dhaXRfbm90X2J1c3koZGV2KTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTU5NS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0xNjIyLWV4aXRfdW5sb2NrOlxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoxNjIzOlx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldi1cdTAwM2VtZGlvYnVzX211dGV4KTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTYyNC1cbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTE5NDQ9c3RhdGljIGludCBsYW43OHh4X2luaXRfbWFjX2FkZHJlc3Moc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDExLS8qIE1ESU8gcmVhZCBhbmQgd3JpdGUgd3JhcHBlcnMgZm9yIHBoeWxpYiAqL1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDEyOnN0YXRpYyBpbnQgbGFuNzh4eF9tZGlvYnVzX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGlkeClcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjAxMy17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDIxLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDIyOlx0bXV0ZXhfbG9jayhcdTAwMjZkZXYtXHUwMDNlbWRpb2J1c19tdXRleCk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwMjMtXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwMjQtXHQvKiBjb25maXJtIE1JSSBub3QgYnVzeSAqL1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDI1Olx0cmV0ID0gbGFuNzh4eF9tZGlvYnVzX3dhaXRfbm90X2J1c3koZGV2KTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjAyNi1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDM0LVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDM1Olx0cmV0ID0gbGFuNzh4eF9tZGlvYnVzX3dhaXRfbm90X2J1c3koZGV2KTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjAzNi1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDQ1LWRvbmU6XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwNDY6XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZW1kaW9idXNfbXV0ZXgpO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDQ3LVx0dXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRldi1cdTAwM2VpbnRmKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwNTEtXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwNTI6c3RhdGljIGludCBsYW43OHh4X21kaW9idXNfd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGlkeCxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA1My1cdFx0XHRcdCB1MTYgcmVndmFsKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA2Mi1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjA2MzpcdG11dGV4X2xvY2soXHUwMDI2ZGV2LVx1MDAzZW1kaW9idXNfbXV0ZXgpO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDY0LVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDY1LVx0LyogY29uZmlybSBNSUkgbm90IGJ1c3kgKi9cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjA2NjpcdHJldCA9IGxhbjc4eHhfbWRpb2J1c193YWl0X25vdF9idXN5KGRldik7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwNjctXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA4MC1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjA4MTpcdHJldCA9IGxhbjc4eHhfbWRpb2J1c193YWl0X25vdF9idXN5KGRldik7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwODItXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA4NS1kb25lOlxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDg2Olx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldi1cdTAwM2VtZGlvYnVzX211dGV4KTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA4Ny1cdHVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShkZXYtXHUwMDNlaW50Zik7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDkwLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDkxOnN0YXRpYyBpbnQgbGFuNzh4eF9tZGlvX2luaXQoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwOTIte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA5NS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjA5NjpcdGRldi1cdTAwM2VtZGlvYnVzID0gbWRpb2J1c19hbGxvYygpO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDk3Olx0aWYgKCFkZXYtXHUwMDNlbWRpb2J1cykge1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDk4LVx0XHRuZXRkZXZfZXJyKGRldi1cdTAwM2VuZXQsIFwmIzM0O2NhbiYjMzk7dCBhbGxvY2F0ZSBNRElPIGJ1c1xcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTAxLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTAyOlx0ZGV2LVx1MDAzZW1kaW9idXMtXHUwMDNlcHJpdiA9ICh2b2lkICopZGV2O1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTAzOlx0ZGV2LVx1MDAzZW1kaW9idXMtXHUwMDNlcmVhZCA9IGxhbjc4eHhfbWRpb2J1c19yZWFkO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTA0Olx0ZGV2LVx1MDAzZW1kaW9idXMtXHUwMDNld3JpdGUgPSBsYW43OHh4X21kaW9idXNfd3JpdGU7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMDU6XHRkZXYtXHUwMDNlbWRpb2J1cy1cdTAwM2VuYW1lID0gXCYjMzQ7bGFuNzh4eC1tZGlvYnVzXCYjMzQ7O1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTA2Olx0ZGV2LVx1MDAzZW1kaW9idXMtXHUwMDNlcGFyZW50ID0gXHUwMDI2ZGV2LVx1MDAzZXVkZXYtXHUwMDNlZGV2O1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTA3LVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTA4Olx0c25wcmludGYoZGV2LVx1MDAzZW1kaW9idXMtXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXCYjMzQ7dXNiLSUwM2Q6JTAzZFwmIzM0OyxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjEwOS1cdFx0IGRldi1cdTAwM2V1ZGV2LVx1MDAzZWJ1cy1cdTAwM2VidXNudW0sIGRldi1cdTAwM2V1ZGV2LVx1MDAzZWRldm51bSk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTE0LVx0XHQvKiBzZXQgdG8gaW50ZXJuYWwgUEhZIGlkICovXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMTU6XHRcdGRldi1cdTAwM2VtZGlvYnVzLVx1MDAzZXBoeV9tYXNrID0gfigxIFx1MDAzY1x1MDAzYyAxKTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjExNi1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTIwLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTIxOlx0bm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldi1cdTAwM2V1ZGV2LVx1MDAzZWRldi5vZl9ub2RlLCBcJiMzNDttZGlvXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEyMjpcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoZGV2LVx1MDAzZW1kaW9idXMsIG5vZGUpO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTIzLVx0b2Zfbm9kZV9wdXQobm9kZSk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTI4LVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTI5Olx0bmV0ZGV2X2RiZyhkZXYtXHUwMDNlbmV0LCBcJiMzNDtyZWdpc3RlcmVkIG1kaW9idXMgYnVzICVzXFxuXCYjMzQ7LCBkZXYtXHUwMDNlbWRpb2J1cy1cdTAwM2VpZCk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMzAtXHRyZXR1cm4gMDtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjEzMS1leGl0MTpcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEzMjpcdG1kaW9idXNfZnJlZShkZXYtXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMzMtXHRyZXR1cm4gcmV0O1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjEzNS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEzNjpzdGF0aWMgdm9pZCBsYW43OHh4X3JlbW92ZV9tZGlvKHN0cnVjdCBsYW43OHh4X25ldCAqZGV2KVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTM3LXtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEzODpcdG1kaW9idXNfdW5yZWdpc3RlcihkZXYtXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMzk6XHRtZGlvYnVzX2ZyZWUoZGV2LVx1MDAzZW1kaW9idXMpO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTQwLX1cbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTI2NDk9c3RhdGljIHN0cnVjdCBwaHlfZGV2aWNlICpsYW43OHh4X2dldF9waHkoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yNjUzLVx0LyogQXR0ZW1wdCB0byBsb2NhdGUgYSBQSFkgb24gdGhlIE1ESU8gYnVzICovXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjI2NTQ6XHRwaHlkZXYgPSBwaHlfZmluZF9maXJzdChkZXYtXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTI2NTUtXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0yNzY5PXN0YXRpYyBpbnQgbGFuNzh4eF9jb25maWd1cmVfbGVkc19mcm9tX2R0KHN0cnVjdCBsYW43OHh4X25ldCAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjc3MS17XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjI3NzI6XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGh5ZGV2LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTI3NzMtXHR1MzIgcmVnO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9Mjg1OD1zdGF0aWMgaW50IGxhbjc4eHhfcGh5X2luaXQoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yOTA0LVx0XHRuZXRkZXZfZXJyKGRldi1cdTAwM2VuZXQsIFwmIzM0O2NhbiYjMzk7dCBhdHRhY2ggUEhZIHRvICVzLCBlcnJvciAlcGVcXG5cJiMzNDssXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjI5MDU6XHRcdFx0ICAgZGV2LVx1MDAzZW1kaW9idXMtXHUwMDNlaWQsIEVSUl9QVFIocmV0KSk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTI5MDYtXHRcdGdvdG8gcGh5bGlua191bmluaXQ7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0zNzYyPXN0YXRpYyBpbnQgbGFuNzh4eF9iaW5kKHN0cnVjdCBsYW43OHh4X25ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zilcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTM4MjAtXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjM4MjE6XHRyZXQgPSBsYW43OHh4X21kaW9faW5pdChkZXYpO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0zODIyLVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9Mzg0ND1zdGF0aWMgdm9pZCBsYW43OHh4X3VuYmluZChzdHJ1Y3QgbGFuNzh4eF9uZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0zODQ5LVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzozODUwOlx0bGFuNzh4eF9yZW1vdmVfbWRpbyhkZXYpO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0zODUxLVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9NDY1NT1zdGF0aWMgaW50IGxhbjc4eHhfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy00Njg4LVx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZkZXYtXHUwMDNlcnhxX292ZXJmbG93KTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6NDY4OTpcdG11dGV4X2luaXQoXHUwMDI2ZGV2LVx1MDAzZW1kaW9idXNfbXV0ZXgpO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy00NjkwLVx0bXV0ZXhfaW5pdChcdTAwMjZkZXYtXHUwMDNlZGV2X211dGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI2MjQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBjaGVja2luZyBgbGFuNzh4eF9tZGlvYnVzX3JlYWRgOgoKKipEaXNzZWN0aW5nIGBsYW43OHh4X21kaW9idXNfcmVhZGAqKgoKQWxyaWdodCwgdGhlIG9iamVjdGl2ZSBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGBsYW43OHh4X21kaW9idXNfcmVhZGAgZnVuY3Rpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaXQmIzM5O3Mgc3VwcG9zZWQgdG8gYmUgZG9pbmcsIGFuZCBob3cgd2VsbCBpdCYjMzk7cyBhY2NvbXBsaXNoaW5nIGl0LiBUaGUgbmFtZSBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHJlYWRpbmcgZGF0YSBmcm9tIGFuIE1ESU8gKE1hbmFnZW1lbnQgRGF0YSBJbnB1dC9PdXRwdXQpIGJ1cywgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIExBTjc4eHggRXRoZXJuZXQgY29udHJvbGxlci4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7ZCBleHBlY3QgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIGxvdy1sZXZlbCBjb21tdW5pY2F0aW9uIHByb3RvY29sIGZvciBhY2Nlc3NpbmcgcmVnaXN0ZXJzIG9uIGFuIEV0aGVybmV0IFBIWSBvciBNQUMuIEkgbmVlZCB0byBjb25zaWRlciBpdHMgcGFyYW1ldGVycywgcmV0dXJuIHZhbHVlcywgYW5kIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLgoKRmlyc3QsIEkgbmVlZCB0byBsb29rIGF0IHRoZSBmdW5jdGlvbiYjMzk7cyBkZWZpbml0aW9uIHRvIHNlZSB3aGF0IGFyZ3VtZW50cyBpdCB0YWtlcy4gRG9lcyBpdCByZWNlaXZlIHRoZSBNRElPIGJ1cyBpdHNlbGYsIHRoZSBkZXZpY2UgYWRkcmVzcywgcmVnaXN0ZXIgYWRkcmVzcywgYW5kIGEgcG9pbnRlciB0byBzdG9yZSB0aGUgcmVhZCBkYXRhPyBEb2VzIGl0IHJldHVybiBhbiBlcnJvciBjb2RlIG9yIGEgdmFsdWU/IE5leHQsIEkgd2FudCB0byB0cmFjZSB0aGUgY29kZS4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIGxvZ2ljOiBEb2VzIGl0IGxvY2sgYSBtdXRleCB0byBwcm90ZWN0IHRoZSBNRElPIGJ1cyBhY2Nlc3M/IEhvdyBkb2VzIGl0IGFjdHVhbGx5IHRyYW5zbWl0IHRoZSByZWFkIGNvbW1hbmQ/IERvZXMgaXQgY2hlY2sgZm9yIHRoZSBhY2tub3dsZWRnZSBiaXQgZnJvbSB0aGUgZGV2aWNlLCBhbmQgaWYgc28sIGhvdyBpcyBpdCBoYW5kbGluZyBlcnJvcnM/IERvZXMgaXQgbWFuYWdlIHRoZSB0aW1pbmcgcHJvcGVybHksIGNvbnNpZGVyaW5nIHRoZSBNRElPIGNsb2NrIGZyZXF1ZW5jeT8gSG93IGFyZSB0aGUgcmVhZCBkYXRhIHJldHVybmVkLiBJIGFsc28gbmVlZCB0byBhc3Nlc3MgaXRzIGVycm9yIGhhbmRsaW5nOiBEb2VzIGl0IGdyYWNlZnVsbHkgbWFuYWdlIHBvdGVudGlhbCBpc3N1ZXMgbGlrZSBidXMgY29udGVudGlvbiwgaW5jb3JyZWN0IGFkZHJlc3Nlcywgb3IgdGltZW91dHM/IElzIHRoZXJlIGFueSB3YXRjaGRvZyBsb2dpYz8gRG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIGVuZGlhbm5lc3MgaXNzdWVzPwoKSSBzaG91bGQgdGhlbiBjaGVjayBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGVsc2V3aGVyZSBpbiB0aGUgZHJpdmVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIHJlZ2lzdGVycyBpdCYjMzk7cyBiZWluZyB1c2VkIHRvIHJlYWQgYW5kIHdoYXQgZGF0YSBpcyBiZWluZyBpbnRlcnByZXRlZCBmcm9tIHRoZXNlIHJlZ2lzdGVycy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBncmVhdGVyIGNvbnRleHQgZm9yIHVuZGVyc3RhbmRpbmcgaWYgdGhpcyBmdW5jdGlvbiBpcyBhZGVxdWF0ZS4gQXJlIHRoZXJlIGFueSB1bnVzdWFsIGNpcmN1bXN0YW5jZXMsIG9yIGlzIGl0IGEgZmFpcmx5IHN0YW5kYXJkIHJlZ2lzdGVyIHJlYWQ/CgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgdGltaW5nIGlzc3Vlcywgb3IgcG90ZW50aWFsIGZvciBkZWFkbG9ja3MuIEFuZCBJIHdpbGwgZW5zdXJlIGl0IGZvbGxvd3MgdGhlIHJlY29tbWVuZGVkIGNvZGluZyBzdHlsZSBhbmQgdGhhdCB0aGVyZSBhcmUgYWRlcXVhdGUgY29tbWVudHMuIEFuZCBmaW5hbGx5LCBJIHdpbGwgd2FudCB0byBlbnN1cmUgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgYWxsIG9mIHRoZSB2YXJpb3VzIGZhaWx1cmUgbW9kZXMgaW4gYSByb2J1c3Qgd2F5LCBhbmQgdGhhdCBpdCBkZWFscyB3aXRoIHRoZW0gY29uc2lzdGVudGx5IHdpdGggdGhlIHJlc3Qgb2YgdGhlIExBTjc4eHggZHJpdmVyLgoKRXNzZW50aWFsbHksIEkgbmVlZCB0byB0aG9yb3VnaGx5IGF1ZGl0IHRoaXMgZnVuY3Rpb24sIGVuc3VyaW5nIGl0JiMzOTtzIGVmZmljaWVudCwgcm9idXN0LCBhbmQgY29ycmVjdGx5IGltcGxlbWVudHMgdGhlIE1ESU8gcmVhZCBmdW5jdGlvbmFsaXR5IGZvciB0aGUgTEFONzh4eCBjb250cm9sbGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDEyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwMTI6XHRzdGF0aWMgaW50IGxhbjc4eHhfbWRpb2J1c19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCBpZHgpXG4yMDEzOlx0e1xuMjAxNDpcdFx0c3RydWN0IGxhbjc4eHhfbmV0ICpkZXYgPSBidXMtXHUwMDNlcHJpdjtcbjIwMTU6XHRcdHUzMiB2YWwsIGFkZHI7XG4yMDE2Olx0XHRpbnQgcmV0O1xuMjAxNzpcdFxuMjAxODpcdFx0cmV0ID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGRldi1cdTAwM2VpbnRmKTtcbjIwMTk6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4yMDIwOlx0XHRcdHJldHVybiByZXQ7XG4yMDIxOlx0XG4yMDIyOlx0XHRtdXRleF9sb2NrKFx1MDAyNmRldi1cdTAwM2VtZGlvYnVzX211dGV4KTtcbjIwMjM6XHRcbjIwMjQ6XHRcdC8qIGNvbmZpcm0gTUlJIG5vdCBidXN5ICovXG4yMDI1Olx0XHRyZXQgPSBsYW43OHh4X21kaW9idXNfd2FpdF9ub3RfYnVzeShkZXYpO1xuMjAyNjpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjIwMjc6XHRcdFx0Z290byBkb25lO1xuMjAyODpcdFxuMjAyOTpcdFx0Lyogc2V0IHRoZSBhZGRyZXNzLCBpbmRleCBcdTAwMjYgZGlyZWN0aW9uIChyZWFkIGZyb20gUEhZKSAqL1xuMjAzMDpcdFx0YWRkciA9IG1paV9hY2Nlc3MocGh5X2lkLCBpZHgsIE1JSV9SRUFEKTtcbjIwMzE6XHRcdHJldCA9IGxhbjc4eHhfd3JpdGVfcmVnKGRldiwgTUlJX0FDQywgYWRkcik7XG4yMDMyOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMjAzMzpcdFx0XHRnb3RvIGRvbmU7XG4yMDM0Olx0XG4yMDM1Olx0XHRyZXQgPSBsYW43OHh4X21kaW9idXNfd2FpdF9ub3RfYnVzeShkZXYpO1xuMjAzNjpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjIwMzc6XHRcdFx0Z290byBkb25lO1xuMjAzODpcdFxuMjAzOTpcdFx0cmV0ID0gbGFuNzh4eF9yZWFkX3JlZyhkZXYsIE1JSV9EQVRBLCBcdTAwMjZ2YWwpO1xuMjA0MDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjIwNDE6XHRcdFx0Z290byBkb25lO1xuMjA0MjpcdFxuMjA0MzpcdFx0cmV0ID0gKGludCkodmFsIFx1MDAyNiAweEZGRkYpO1xuMjA0NDpcdFxuMjA0NTpcdGRvbmU6XG4yMDQ2Olx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZW1kaW9idXNfbXV0ZXgpO1xuMjA0NzpcdFx0dXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRldi1cdTAwM2VpbnRmKTtcbjIwNDg6XHRcbjIwNDk6XHRcdHJldHVybiByZXQ7XG4yMDUwOlx0fVxuMjA1MTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mzc5OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgbWlpX2FjY2Vzc2AgTWFjcm8qKgoKT2theSwgc28gYG1paV9hY2Nlc3NgLi4uIHRoYXQmIzM5O3MgYSBtYWNyby4gSSBpbW1lZGlhdGVseSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGV4cGFuc2lvbi4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiB0byBzZWUgdGhlIHVuZGVybHlpbmcgYml0IG1hbmlwdWxhdGlvbnMgYW5kIHJlZ2lzdGVyIGFjY2Vzc2VzIGl0IHBlcmZvcm1zLiBJcyBpdCBhIGRpcmVjdCBtZW1vcnkgYWNjZXNzLCBvciBkb2VzIGl0IGFic3RyYWN0IHRvIHNvbWUgZHJpdmVyIGxheWVyPyBJJiMzOTttIGhvcGluZyBpdCYjMzk7cyB3ZWxsLWRlZmluZWQgYW5kIGNsZWFybHkgZG9jdW1lbnRzIHRoZSByZWdpc3RlciBhZGRyZXNzZXMgaXQmIzM5O3MgdXNpbmcsIGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gQ29udGV4dCBpcyBpbXBvcnRhbnQsIHNvIEkgd2lsbCBhbHNvIGhhdmUgdG8gY29uc2lkZXIgdGhlIGhhcmR3YXJlIGVudmlyb25tZW50IGluIHdoaWNoIHRoaXMgbWFjcm8gaXMgdXNlZC4gV2hhdCBNSUkvR01JSSBQSFkgc3RhbmRhcmQgZG9lcyBpdCBleHBlY3Q/IEkmIzM5O2xsIHByb2JhYmx5IGJlIGNoZWNraW5nIGZvciBhbnkgaW5saW5lIGFzc2VtYmx5IGFuZCBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgc3VycHJpc2VzIHdpdGggY29tcGlsZXIgb3B0aW1pemF0aW9uLiBJIGhvcGUgaXQmIzM5O3Mgbm90IG92ZXJseSBjb21wbGV4OyBjb25jaXNlIGFuZCBlZmZpY2llbnQgaXMgdGhlIGdvYWwsIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21paV9hY2Nlc3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9OTUyPXN0YXRpYyBpbnQgbGFuNzh4eF9tZGlvYnVzX3dhaXRfbm90X2J1c3koc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy05NjktXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjk3MDpzdGF0aWMgaW5saW5lIHUzMiBtaWlfYWNjZXNzKGludCBpZCwgaW50IGluZGV4LCBpbnQgcmVhZClcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtOTcxLXtcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTIwMTI9c3RhdGljIGludCBsYW43OHh4X21kaW9idXNfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgaWR4KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjAyOS1cdC8qIHNldCB0aGUgYWRkcmVzcywgaW5kZXggXHUwMDI2IGRpcmVjdGlvbiAocmVhZCBmcm9tIFBIWSkgKi9cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjAzMDpcdGFkZHIgPSBtaWlfYWNjZXNzKHBoeV9pZCwgaWR4LCBNSUlfUkVBRCk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwMzEtXHRyZXQgPSBsYW43OHh4X3dyaXRlX3JlZyhkZXYsIE1JSV9BQ0MsIGFkZHIpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9MjA1Mj1zdGF0aWMgaW50IGxhbjc4eHhfbWRpb2J1c193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgaWR4LFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA3NS1cdC8qIHNldCB0aGUgYWRkcmVzcywgaW5kZXggXHUwMDI2IGRpcmVjdGlvbiAod3JpdGUgdG8gUEhZKSAqL1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDc2Olx0YWRkciA9IG1paV9hY2Nlc3MocGh5X2lkLCBpZHgsIE1JSV9XUklURSk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwNzctXHRyZXQgPSBsYW43OHh4X3dyaXRlX3JlZyhkZXYsIE1JSV9BQ0MsIGFkZHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDUwMAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogTUlJX0FDQ0VTUyAtIFdoYXQmIzM5O3MgdGhlIENvbnRleHQ/KioKCkFscmlnaHQsICYjMzQ7bWlpX2FjY2Vzcy4mIzM0OyBUaGUgbmFtZSBpdHNlbGYgaW1tZWRpYXRlbHkgcmFpc2VzIHF1ZXN0aW9ucy4gSXMgdGhpcyBzb21lIHNwZWNpYWxpemVkIE1JSSAoTWVkaWEgSW5kZXBlbmRlbnQgSW50ZXJmYWNlKSB1dGlsaXR5LCBkcml2ZXIsIG9yIHBlcmhhcHMgYSBsYXllciBhYm92ZSB0aGF0PyBHaXZlbiBteSBiYWNrZ3JvdW5kLCBJJiMzOTttIGV4cGVjdGluZyBzb21ldGhpbmcgcmVsYXRlZCB0byBuZXR3b3JrIGhhcmR3YXJlLCBwb3RlbnRpYWxseSBhdCB0aGUgUEhZIGxldmVsLCBidXQgaXQgY291bGQgZXh0ZW5kIGludG8gbmV0d29yayBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBvciBtYW5hZ2VtZW50IGRlcGVuZGluZyBvbiB0aGUgc3lzdGVtIHRoaXMgaXMgcnVubmluZyBvbi4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIHN5c3RlbSBhcyBhIHdob2xlLiBJcyBpdCBhIHVzZXItc3BhY2UgYXBwbGljYXRpb24sIGEga2VybmVsIG1vZHVsZSwgb3IgcGFydCBvZiBhIG1vcmUgaW50ZWdyYXRlZCBzeXN0ZW0gZmlybXdhcmU/IElzIGl0IGludGVyYWN0aW5nIHdpdGggcmF3IEV0aGVybmV0IGRhdGEgb3IgZG9lcyBpdCBhYnN0cmFjdCB0aGF0IGxheWVyPyBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHBvdGVudGlhbCBib3R0bGVuZWNrcyBhbmQgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMgLSBlc3BlY2lhbGx5IGlmIHRoaXMgaW52b2x2ZXMgZGlyZWN0IHJlZ2lzdGVyIG1hbmlwdWxhdGlvbi4KClRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIHRoZSBrZXkgaGVyZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBoYW5kbGUgZXJyb3IgY2hlY2tpbmcgYW5kIGV4Y2VwdGlvbiBoYW5kbGluZy4gQXJlIHRoZXkgZm9sbG93aW5nIGFueSBzdGFuZGFyZCBvciBzcGVjaWZpY2F0aW9uPyBUaGUgY29kZSYjMzk7cyBzdHlsZSBhbmQgY29tbWVudHMgd2lsbCBnaXZlIHVzIGEgc3Ryb25nIHNlbnNlIG9mIHRoZSBkZXZlbG9wZXImIzM5O3MgaW50ZW50IGFuZCBob3BlZnVsbHksIGhlbHAgc3BlZWQgdXAgbXkgYW5hbHlzaXMuIFRpbWUgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk3MDpcdHN0YXRpYyBpbmxpbmUgdTMyIG1paV9hY2Nlc3MoaW50IGlkLCBpbnQgaW5kZXgsIGludCByZWFkKVxuIDk3MTpcdHtcbiA5NzI6XHRcdHUzMiByZXQ7XG4gOTczOlx0XG4gOTc0Olx0XHRyZXQgPSAoKHUzMilpZCBcdTAwM2NcdTAwM2MgTUlJX0FDQ19QSFlfQUREUl9TSElGVF8pIFx1MDAyNiBNSUlfQUNDX1BIWV9BRERSX01BU0tfO1xuIDk3NTpcdFx0cmV0IHw9ICgodTMyKWluZGV4IFx1MDAzY1x1MDAzYyBNSUlfQUNDX01JSVJJTkRBX1NISUZUXykgXHUwMDI2IE1JSV9BQ0NfTUlJUklOREFfTUFTS187XG4gOTc2Olx0XHRpZiAocmVhZClcbiA5Nzc6XHRcdFx0cmV0IHw9IE1JSV9BQ0NfTUlJX1JFQURfO1xuIDk3ODpcdFx0ZWxzZVxuIDk3OTpcdFx0XHRyZXQgfD0gTUlJX0FDQ19NSUlfV1JJVEVfO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTAwNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ2xhdXNlIDQ1IFN1cHBvcnQgaW4gTmV0d29yayBEcml2ZXJzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBgbGFuNzh4eGAgaGFuZGxlcyBDbGF1c2UgNDUuIEZpcnN0LCBJIHNlZSBgaW5kZXhgIGJlaW5nIGNhc3QgdG8gYHUzMmAgYW5kIHNoaWZ0ZWQuIE15IGd1dCByZWFjdGlvbiBpcyB0aGF0IGlmIGBpbmRleGAgaGFzIGBNSUlfQUREUl9DNDVgICgweDQwMDAwMDAwKSBzZXQsIGl0JiMzOTtzIGdvaW5nIHRvIGdldCBtYXNrZWQgb3V0IGJ5IGBNSUlfQUNDX01JSVJJTkRBX01BU0tfYC4gVGhhdCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHRoZSBkcml2ZXIgKmRvZXNuJiMzOTt0KiBuYXRpdmVseSBzdXBwb3J0IENsYXVzZSA0NS4gQnV0IHdhaXQsIEkgbmVlZCB0byBkaWcgZGVlcGVyLgoKSSByZW1lbWJlciBgbWRpb2J1c19yZWFkYCBpbiBgZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmNgLiBJIG5lZWQgdG8gc2VlIHdoYXQgaGFwcGVucyB0aGVyZS4gT2theSwgaWYgYGJ1cy0mZ3Q7cmVhZF9jNDVgIGV4aXN0cywgdGhhdCB3aWxsIGdldCBjYWxsZWQuIElmIGl0JiMzOTtzIE5VTEwsIHdoaWNoIHNlZW1zIGxpa2VseSBoZXJlIGdpdmVuIG15IGluaXRpYWwgaW1wcmVzc2lvbiwgdGhlbiBgYnVzLSZndDtyZWFkYCBpcyBjYWxsZWQuIEFoLCBidXQgYGJ1cy0mZ3Q7cmVhZGAgd2lsbCBqdXN0IHBhc3MgdGhyb3VnaCB0aGUgYE1JSV9BRERSX0M0NWAgYml0IGluIGByZWdudW1gLiBTbywgaWYgdGhlIGRyaXZlciBkb2VzbiYjMzk7dCBleHBsaWNpdGx5IGhhbmRsZSB0aGF0IGJpdCwgaXQgd2lsbCBqdXN0IHJlYWQgYSBDbGF1c2UgMjIgcmVnaXN0ZXIgaW5zdGVhZCwgd2hpY2ggaXNuJiMzOTt0IHdoYXQgd2Ugd2FudC4KCk9rYXksIGxldCBtZSBsb29rIGF0IGhvdyB0aGlzIGlzIGJlaW5nIHVzZWQgaW4gYSByZWFsIGRyaXZlciwgZm9yIGV4YW1wbGUgaW4gYHJlYWx0ZWtfbWFpbi5jYC4gSXQgbG9va3MgbGlrZSBpdCB1c2VzIGBwaHlfcmVhZF9tbWRgLiBBbmQgdGhhdCBmdW5jdGlvbiB3aWxsIHVzZSBgYnVzLSZndDtyZWFkX2M0NWAgaWYgaXQgaXMgYXZhaWxhYmxlLCBvciBpdCB3aWxsIGZhbGwgYmFjayB0byBDbGF1c2UgMjIgaW5kaXJlY3QgYWNjZXNzIGlmIGBwaHlkZXYtJmd0O2lzX2M0NWAgaXMgZmFsc2UuIEJpbmdvISBTbyBub3cgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGF0IGZhbGxiYWNrIGlzIGhhcHBlbmluZyBpbiBgbGFuNzh4eGAuIFNvLCB0aGF0IG1lYW5zIGl0ICp3aWxsKiB1c2UgQ2xhdXNlIDIyIGluZGlyZWN0IGFjY2VzcyAocmVnaXN0ZXJzIDEzIGFuZCAxNCkgaWYgYHBoeWRldi0mZ3Q7aXNfYzQ1YCBpcyBmYWxzZSEKCk9rYXksIHRpbWUgdG8gY29uZmlybSB3aGF0IGlzIGFjdHVhbGx5IGhhcHBlbmluZyBpbiBgcGh5X3JlYWRfbW1kYCB0byBzZWUgaWYgdGhhdCBpcyB0cnVlIGFuZCB0byBzZWUgaG93IHRoZSBidXMgY2FsbHMgYXJlIGltcGxlbWVudGVkLiBJJiMzOTtsbCBjaGVjayBgZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmNgIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X3JlYWRfbW1kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM9NDU3PUVYUE9SVF9TWU1CT0xfR1BMKG1tZF9waHlfd3JpdGUpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ1OS0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQ2MDogKiBfX3BoeV9yZWFkX21tZCAtIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciByZWFkaW5nIGEgcmVnaXN0ZXJcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ2MS0gKiBmcm9tIGFuIE1NRCBvbiBhIGdpdmVuIFBIWS5cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00NjctICovXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYzo0Njg6aW50IF9fcGh5X3JlYWRfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZhZCwgdTMyIHJlZ251bSlcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ2OS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDc4LX1cbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQ3OTpFWFBPUlRfU1lNQk9MKF9fcGh5X3JlYWRfbW1kKTtcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ4MC1cbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ4MS0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQ4MjogKiBwaHlfcmVhZF9tbWQgLSBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgcmVhZGluZyBhIHJlZ2lzdGVyXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00ODMtICogZnJvbSBhbiBNTUQgb24gYSBnaXZlbiBQSFkuXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDg5LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NDkwOmludCBwaHlfcmVhZF9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldmFkLCB1MzIgcmVnbnVtKVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDkxLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00OTQtXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NDk1Olx0cmV0ID0gX19waHlfcmVhZF9tbWQocGh5ZGV2LCBkZXZhZCwgcmVnbnVtKTtcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ5Ni1cdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00OTktfVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NTAwOkVYUE9SVF9TWU1CT0wocGh5X3JlYWRfbW1kKTtcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTUwMS1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYz02Mjk9aW50IF9fcGh5X21vZGlmeV9tbWRfY2hhbmdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgZGV2YWQsIHUzMiByZWdudW0sXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNjMzLVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NjM0Olx0cmV0ID0gX19waHlfcmVhZF9tbWQocGh5ZGV2LCBkZXZhZCwgcmVnbnVtKTtcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTYzNS1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NTUyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSBzZWVpbmcgYF9fcGh5X3JlYWRfbW1kYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoYXQgdW5kZXJzY29yZXMgYSB2ZXJ5IHNwZWNpZmljIGZ1bmN0aW9uLCBsaWtlbHkgdGllZCB0byBhIHBoeXNpY2FsIGxheWVyIChQSFkpIGludGVyZmFjZSBhbmQgc29tZSBzb3J0IG9mIG11bHRpLW1vZGUgZGV2aWNlIChNTUQpIGFjY2Vzcy4gVGhlIGRvdWJsZSB1bmRlcnNjb3JlIHByZWZpeCB1c3VhbGx5IGluZGljYXRlcyBhbiBpbnRlcm5hbCBvciAmIzM0O3ByaXZhdGUmIzM0OyBmdW5jdGlvbiwgbWVhbmluZyBpdCYjMzk7cyBub3QgbWVhbnQgdG8gYmUgZGlyZWN0bHkgY2FsbGVkIGJ5IG1vc3Qgb3RoZXIgbW9kdWxlcy4gSXQmIzM5O3MgYSBsb3ctbGV2ZWwsIGNyaXRpY2FsIG9wZXJhdGlvbi4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIGNvcmUgcm91dGluZSBmb3IgZWl0aGVyIHJlYWRpbmcgb3IgY29uZmlndXJpbmcgcmVnaXN0ZXJzIHdpdGhpbiBhIFBIWSBjaGlwLCBhbmQgdGhlICYjMzQ7TU1EJiMzNDsgc3VnZ2VzdHMgdGhhdCB0aGUgUEhZIHN1cHBvcnRzIG11bHRpcGxlIGZ1bmN0aW9uYWwgYmxvY2tzLCBlYWNoIG1hcHBlZCB0byBhIHNwZWNpZmljIE1NRCBhZGRyZXNzLiBUaGlzIGltcGxpZXMgc29tZSBraW5kIG9mIGluZGlyZWN0IGFkZHJlc3Npbmcgc2NoZW1lLiBJIGFudGljaXBhdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHBpdm90YWwgdG8gZGV2aWNlIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmF0aW9uIGNoYW5nZXMsIG9yIG9wZXJhdGlvbmFsIG1vbml0b3JpbmcuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSwgd2hhdCYjMzk7cyBwYXNzZWQgaW4gYXMgcGFyYW1ldGVycyBhbmQgd2hhdCBpcyBpdCByZXR1cm5pbmcgYW5kIHdoYXQga2luZCBvZiBlcnJvci1oYW5kbGluZyBpdCYjMzk7cyBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDY4Olx0aW50IF9fcGh5X3JlYWRfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZhZCwgdTMyIHJlZ251bSlcbiA0Njk6XHR7XG4gNDcwOlx0XHRpZiAocmVnbnVtIFx1MDAzZSAodTE2KX4wIHx8IGRldmFkIFx1MDAzZSAzMilcbiA0NzE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDcyOlx0XG4gNDczOlx0XHRpZiAocGh5ZGV2LVx1MDAzZWRydiBcdTAwMjZcdTAwMjYgcGh5ZGV2LVx1MDAzZWRydi1cdTAwM2VyZWFkX21tZClcbiA0NzQ6XHRcdFx0cmV0dXJuIHBoeWRldi1cdTAwM2VkcnYtXHUwMDNlcmVhZF9tbWQocGh5ZGV2LCBkZXZhZCwgcmVnbnVtKTtcbiA0NzU6XHRcbiA0NzY6XHRcdHJldHVybiBtbWRfcGh5X3JlYWQocGh5ZGV2LVx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyLFxuIDQ3NzpcdFx0XHRcdCAgICBwaHlkZXYtXHUwMDNlaXNfYzQ1LCBkZXZhZCwgcmVnbnVtKTtcbiA0Nzg6XHR9XG4gNDc5Olx0RVhQT1JUX1NZTUJPTChfX3BoeV9yZWFkX21tZCk7XG4gNDgwOlx0XG4gNDgxOlx0LyoqXG4gNDgyOlx0ICogcGh5X3JlYWRfbW1kIC0gQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIHJlYWRpbmcgYSByZWdpc3RlclxuIDQ4MzpcdCAqIGZyb20gYW4gTU1EIG9uIGEgZ2l2ZW4gUEhZLlxuIDQ4NDpcdCAqIEBwaHlkZXY6IFRoZSBwaHlfZGV2aWNlIHN0cnVjdFxuIDQ4NTpcdCAqIEBkZXZhZDogVGhlIE1NRCB0byByZWFkIGZyb21cbiA0ODY6XHQgKiBAcmVnbnVtOiBUaGUgcmVnaXN0ZXIgb24gdGhlIE1NRCB0byByZWFkXG4gNDg3Olx0ICpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcxNTYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTXkgRGVlcCBEaXZlIGludG8gYG1tZF9waHlfcmVhZGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2hlbiBJIHNlZSBgbW1kX3BoeV9yZWFkYCwgaW1tZWRpYXRlbHkgbXkgbWluZCBqdW1wcyB0byB0aGUgbG93LWxldmVsIHBoeXNpY2FsIGxheWVyIGludGVyZmFjZS4gSSYjMzk7bSB0aGlua2luZyBkaXJlY3QgcmVnaXN0ZXIgYWNjZXNzLCBwb3RlbnRpYWxseSB3aXRoIGltcGxpY2F0aW9ucyBmb3IgdGltaW5nIGFuZCBlcnJvciBoYW5kbGluZyB0aGF0IGFyZSBjcnVjaWFsIHRvIGNvbnNpZGVyLiBJJiMzOTttIGdvaW5nIHRvIGFzc3VtZSB0aGlzIGZ1bmN0aW9uIGlzIGNlbnRyYWwgdG8gYW55IFBIWSAoUGh5c2ljYWwgTGF5ZXIpIG9wZXJhdGlvbiBhbmQgaXMgdGhlcmVmb3JlIGEgdml0YWwgYnVpbGRpbmcgYmxvY2suIFNvIHdoYXQgaXMgdGhlIGNvbnRleHQ/IElzIHRoaXMgcGFydCBvZiBhIGRyaXZlcj8gV2hhdCBzdGFuZGFyZCBpcyB0aGlzIGZ1bmN0aW9uIGF0dGVtcHRpbmcgdG8gYWRoZXJlIHRvPwoKTXkgZmlyc3QgcXVlc3Rpb24gaXMsICYjMzQ7V2hhdCYjMzk7cyB0aGUgb3ZlcmFsbCBQSFkgYXJjaGl0ZWN0dXJlIHRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgZm9yPyYjMzQ7IElzIHRoaXMgYSBnZW5lcmljIGZ1bmN0aW9uLCBpbnRlbmRlZCBmb3IgYSB2YXJpZXR5IG9mIFBIWXMsIG9yIGlzIGl0IGhpZ2hseSBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgdmVuZG9yIG9yIGRldmljZSBmYW1pbHk/IEtub3dpbmcgdGhlIGFyY2hpdGVjdHVyZSBnaXZlcyBtZSBjbHVlcyBhYm91dCB0aGUgZXhwZWN0ZWQgcmVnaXN0ZXIgbGF5b3V0LCBjb21tdW5pY2F0aW9uIHByb3RvY29sIChJMkMsIFNQSSwgTURJTywgZXRjLiksIGFuZCBwb3RlbnRpYWwgY2xvY2tpbmcgY29uc3RyYWludHMuIEkmIzM5O20gaW1tZWRpYXRlbHkgdHJ5aW5nIHRvIHZpc3VhbGl6ZSB0aGUgcmVnaXN0ZXIgbWFwIOKAkyB3aGF0IGFyZSB0aGUgYmFzZSBhZGRyZXNzZXMsIG9mZnNldCBjYWxjdWxhdGlvbnMsIGFuZCBkYXRhIHdpZHRocyBpbnZvbHZlZD8KClRoZW4gSSB0aGluayBhYm91dCB0aGUgZGF0YSB0eXBlcyBiZWluZyB1c2VkOiBXaGF0IGlzIHRoZSB1bmRlcmx5aW5nIGJ1cyB0eXBlPyBJcyBpdCBhIHN0YW5kYXJkIGludGVyZmFjZSBvciBzb21ldGhpbmcgcHJvcHJpZXRhcnk/IEFyZSB3ZSBkZWFsaW5nIHdpdGggcmF3IGJpdHMsIG9yIGEgaGlnaGVyLWxldmVsIGRhdGEgc3RydWN0dXJlPyBJJiMzOTttIGFudGljaXBhdGluZyBwb3RlbnRpYWwgYml0LWZpZWxkIG1hbmlwdWxhdGlvbiAoc2hpZnRpbmcsIG1hc2tpbmcpIHRvIGV4dHJhY3QgdGhlIHJlbGV2YW50IGluZm9ybWF0aW9uIGZyb20gYSBQSFkgcmVnaXN0ZXIgcmVhZC4gRXJyb3IgY2hlY2tpbmcgaXMgY3JpdGljYWwgYXQgdGhpcyBsZXZlbC4gSWYgdGhlIGhhcmR3YXJlIGlzIGZhdWx0eSwgaG93IGRvZXMgdGhpcyBwcm9jZXNzIGhhbmRsZSBpdD8KCkZpbmFsbHksIHRoZSBmdW5jdGlvbiBpdHNlbGYuIFdoYXQgYXJlIHRoZSBzcGVjaWZpYyBwYXJhbWV0ZXJzPyBXaGF0IGlzIHRoZSByZWdpc3RlciBhZGRyZXNzIHBhc3NlZCBpbnRvIHRoZSBmdW5jdGlvbj8gV2hhdCBpcyB0aGUgZXhwZWN0ZWQgcmV0dXJuIHZhbHVlPyBIb3cgZG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIGVycm9ycyDigJMgcmV0dXJuIGNvZGVzLCBhc3NlcnRpb25zLCBvciBsb2dnaW5nPyBEb2VzIGl0IGltcGxlbWVudCBhbnkgZm9ybSBvZiByZXRyeSBtZWNoYW5pc20sIG9yIGRvZXMgaXQgYXNzdW1lIHRoZSB1cHBlciBsYXllcnMgd2lsbCBoYW5kbGUgYW55IGJ1cy1sZXZlbCBwcm9ibGVtcz8gSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuIENhbiB3ZSBjYWNoZSByZWdpc3RlciB2YWx1ZXMgdG8gcmVkdWNlIGJ1cyB0cmFmZmljLCBvciBwZXJmb3JtIGEgYmF0Y2ggb2YgcmVhZHM/IEhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gaW50ZXJhY3Qgd2l0aCBhbnkgaW50ZXJydXB0IGhhbmRsZXJzIG9yIG90aGVyIGNvbmN1cnJlbnQgdGFza3M/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21tZF9waHlfcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jPTQyMT1zdGF0aWMgdm9pZCBtbWRfcGh5X2luZGlyZWN0KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IGRldmFkLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQzNC1cbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQzNTppbnQgbW1kX3BoeV9yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgYm9vbCBpc19jNDUsXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00MzYtXHRcdCBpbnQgZGV2YWQsIHUzMiByZWdudW0pXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDQ0LX1cbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQ0NTpFWFBPUlRfU1lNQk9MX0dQTChtbWRfcGh5X3JlYWQpO1xuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDQ2LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jPTQ2OD1pbnQgX19waHlfcmVhZF9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldmFkLCB1MzIgcmVnbnVtKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ3NS1cbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQ3NjpcdHJldHVybiBtbWRfcGh5X3JlYWQocGh5ZGV2LVx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyLFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDc3LVx0XHRcdCAgICBwaHlkZXYtXHUwMDNlaXNfYzQ1LCBkZXZhZCwgcmVnbnVtKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgwMDMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSB3ZWxsLXZlcnNlZCBpbiB0aGUgc3ViamVjdCBtYXR0ZXIgYW5kIGFwcHJvYWNoaW5nIGEgc3BlY2lmaWMgY29kZSBmdW5jdGlvbjoKCioqQW5hbHl6aW5nIGBtbWRfcGh5X3JlYWRgKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIGBtbWRfcGh5X3JlYWRgLiBMZXQmIzM5O3MgZ2V0IHJpZ2h0IHRvIGl0LiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nLCAmIzM0O09rYXksIHRoaXMgaW1wbGllcyBhIHJlYWQgb3BlcmF0aW9uLCBsaWtlbHkgaW52b2x2aW5nIGEgTWVkaWEtSW5kZXBlbmRlbnQgSW50ZXJmYWNlIChNSUkpIE1hbmFnZW1lbnQgRGF0YSAoTU1EKSBQSFkgKFBoeXNpY2FsIExheWVyKSBkZXZpY2UuIEdpdmVuIHRoZSBmdW5jdGlvbiBuYW1lLCBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIGxvdyBsZXZlbCBkZXRhaWxzIG9mIGhvdyB0aGV5IGhhbmRsZSB0aGUgcmVhZGluZyBhbmQgcmV0cmlldmluZyBvZiBkYXRhIGZyb20gYSBQSFkgdmlhIE1NRC4mIzM0OyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIGNvbW11bmljYXRpb24gcHJvdG9jb2wgaXMgaW1wbGVtZW50ZWQsIHNwZWNpZmljYWxseSBmb3IgaG93IHRoZSByZWFkIGN5Y2xlIGlzIGluaXRpYXRlZCBhbmQgY29tcGxldGVkLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgdGhlIHNwZWNpZmljIHJlZ2lzdGVyIGl0IGludGVuZHMgdG8gdGFyZ2V0LCB0aGUgYml0IG1hbmlwdWxhdGlvbiBvZiB0aGUgcmVhZCBhbmQgd3JpdGUgY29tbWFuZHMsIGFuZCBkYXRhIHRyYW5zbWlzc2lvbi4gJiMzNDtJcyB0aGVyZSBhbnkgZXJyb3IgaGFuZGxpbmc/JiMzNDsgaXMgYSBrZXkgcXVlc3Rpb24gaW4gdGhpcyBhcmVhLiBJJiMzOTtsbCBiZSBmb2N1c2VkIG9uIHRoaW5ncyBsaWtlIHRpbWluZyBjb25zdHJhaW50cywgYWNrbm93bGVkZ2Ugc2lnbmFscywgYW5kIGFueSBwb3RlbnRpYWwgcmV0cnkgbWVjaGFuaXNtcy4gSSBuZWVkIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24mIzM5O3MgaW50ZXJuYWwgZmxvdywgYW55IGRlcGVuZGVuY2llcyBvbiBoYXJkd2FyZSBvciBvdGhlciBtb2R1bGVzLCBhbmQgdGhlIGdlbmVyYWwgd2F5IHRoZSBNTUQgUEhZIHJlZ2lzdGVycyBhcmUgYmVpbmcgYWNjZXNzZWQuIFRoaXMgc2hvdWxkIGJlIGFuIGludGVyZXN0aW5nIG9uZSB0byB1bnBhY2shCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQzNTpcdGludCBtbWRfcGh5X3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBib29sIGlzX2M0NSxcbiA0MzY6XHRcdFx0IGludCBkZXZhZCwgdTMyIHJlZ251bSlcbiA0Mzc6XHR7XG4gNDM4Olx0XHRpZiAoaXNfYzQ1KVxuIDQzOTpcdFx0XHRyZXR1cm4gX19tZGlvYnVzX2M0NV9yZWFkKGJ1cywgcGh5X2FkZHIsIGRldmFkLCByZWdudW0pO1xuIDQ0MDpcdFxuIDQ0MTpcdFx0bW1kX3BoeV9pbmRpcmVjdChidXMsIHBoeV9hZGRyLCBkZXZhZCwgcmVnbnVtKTtcbiA0NDI6XHRcdC8qIFJlYWQgdGhlIGNvbnRlbnQgb2YgdGhlIE1NRCYjMzk7cyBzZWxlY3RlZCByZWdpc3RlciAqL1xuIDQ0MzpcdFx0cmV0dXJuIF9fbWRpb2J1c19yZWFkKGJ1cywgcGh5X2FkZHIsIE1JSV9NTURfREFUQSk7XG4gNDQ0Olx0fVxuIDQ0NTpcdEVYUE9SVF9TWU1CT0xfR1BMKG1tZF9waHlfcmVhZCk7XG4gNDQ2Olx0XG4gNDQ3Olx0aW50IG1tZF9waHlfd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBib29sIGlzX2M0NSxcbiA0NDg6XHRcdFx0ICBpbnQgZGV2YWQsIHUzMiByZWdudW0sIHUxNiB2YWwpXG4gNDQ5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODYyMQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEzNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgdGhlIFJlYWx0ZWsgUlRMODI2MSBEcml2ZXIgdmlhIFVTQiBFbXVsYXRpb24qKgoKT2theSwgc28gdGhlIGBpc19jNDVgIGZsYWcgaXMga2V5IGhlcmUuIElmIGl0JiMzOTtzIGZhbHNlLCB3ZSYjMzk7cmUgdXNpbmcgYG1tZF9waHlfaW5kaXJlY3RgLCB3aGljaCBtZWFucyB3ZSYjMzk7cmUgZ29pbmcgdGhyb3VnaCBDbGF1c2UgMjIgcmVnaXN0ZXJz4oCUc3BlY2lmaWNhbGx5LCAxMyAoYE1JSV9NTURfQ1RSTGApIGFuZCAxNCAoYE1JSV9NTURfREFUQWApLiBUaGlzIGlzIGV4Y2VsbGVudC4gRXZlbiBpZiB0aGUgTURJTyBidXMgZHJpdmVyIG9ubHkgc3VwcG9ydHMgQ2xhdXNlIDIyLCB3ZSBjYW4gc3RpbGwgdGFsayB0byBDbGF1c2UgNDUgcmVnaXN0ZXJzIGluZGlyZWN0bHkuCgpNeSB0aGlua2luZyBpcywgaWYgd2UgZW11bGF0ZSBhIFVTQiBkZXZpY2UsIGxldCYjMzk7cyBzYXkgYW4gYGF4ODgxNzJhYCBvciBgbGFuNzh4eGAsIGFuZCBoYXZlIGl0IGFjdCBsaWtlIGFuIE1ESU8gYnVzLCB3ZSBjYW4gcmVzcG9uZCB0byBDbGF1c2UgMjIgcmVhZHMgZm9yIHRoZSBQSFkgSUQgcmVnaXN0ZXJzICgyIGFuZCAzKSB3aXRoIGBSVExfODI2MUNfQ0dgICgweDAwMWNjODk4KS4gVGhlIHBoeWxpYiB3aWxsIHRoZW4gaW5zdGFudGlhdGUgYSBDbGF1c2UgMjIgUEhZLiBJdCB3aWxsIHNlZSB0aGF0IHRoZSBQSFkgSUQgaXMgZm91bmQgdmlhIENsYXVzZSAyMiwgc28gYGlzX2M0NWAgd2lsbCBiZSBmYWxzZSAodW5sZXNzIHRoZSBkcml2ZXIgZXhwbGljaXRseSBwcm9iZXMgZm9yIEM0NSksIGFuZCBgcGh5X3JlYWRfbW1kYCB3aWxsIHVzZSBpbmRpcmVjdCBhY2Nlc3MgKHJlZ2lzdGVycyAxMyBhbmQgMTQpLgoKVGhpcyBtZWFucyB0aGF0IHRoZSBgcmVhbHRla19tYWluLmNgIGRyaXZlciBzaG91bGQgYmUgYm91bmQuIEl0cyBgcHJvYmVgLCBgY29uZmlnX2luaXRgLCBgY29uZmlnX2FuZWdgLCBhbmQgdGhlIHJlc3Qgb2YgaXRzIG1ldGhvZHMgd2lsbCBnZXQgY2FsbGVkLCBhbmQgdGhleSYjMzk7bGwgYmUgdXNpbmcgYHBoeV9yZWFkX21tZGAsIHdoaWNoLCBpbiBvdXIgY2FzZSwgdHJhbnNsYXRlcyB0byBDbGF1c2UgMjIgaW5kaXJlY3QgYWNjZXNzZXMuIE91ciBlbXVsYXRlZCBVU0IgZGV2aWNlIGNhbiByZXNwb25kIHRvIHRob3NlLiBJdCBtZWFucyB0aGlzIGNvZGUgaXMgYWJzb2x1dGVseSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB2aWEgVVNCIGVtdWxhdGlvbiEKCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhhdCBgUlRMXzgyNjFDX0NHYCB3aWxsIGJlIG1hdGNoZWQuIFRoZSBkcml2ZXIgaGFzOgoKYGBgYwp7CglQSFlfSURfTUFUQ0hfRVhBQ1QoUlRMXzgyNjFDX0NHKSwKCS5uYW1lCQkJPSAmIzM0O1JlYWx0ZWsgUlRMODI2MSAxMEdicHMgUEhZJiMzNDssCgkucHJvYmUJCQk9IHJ0bDgyNjF4X3Byb2JlLAoJLmNvbmZpZ19pbml0CQk9IHJ0bDgyNjF4X2NvbmZpZ19pbml0LAoJLmdldF9mZWF0dXJlcwkJPSBydGw4MjYxeF9nZXRfZmVhdHVyZXMsCgkuY29uZmlnX2FuZWcJCT0gcnRsODI2MXhfY29uZmlnX2FuZWcsCgkucmVhZF9zdGF0dXMJCT0gcnRsODI2MXhfcmVhZF9zdGF0dXMsCgkuY29uZmlnX2ludHIJCT0gcnRsODI2MXhfY29uZmlnX2ludHIsCgkuaGFuZGxlX2ludGVycnVwdAk9IHJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHQsCgkuc29mdF9yZXNldAkJPSBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0LAoJLnN1c3BlbmQJCT0gZ2VucGh5X2M0NV9wbWFfc3VzcGVuZCwKCS5yZXN1bWUJCQk9IGdlbnBoeV9jNDVfcG1hX3Jlc3VtZSwKfSwKYGBgCgpJZiB3ZSBlbXVsYXRlIGEgUEhZIHdpdGggSUQgYDB4MDAxY2M4OThgLCB0aGlzIGRyaXZlciAqd2lsbCogYmUgYm91bmQsIGFuZCBgcnRsODI2MXhfcHJvYmVgIHdpbGwgYmUgY2FsbGVkLiBJbnNpZGUgYHJ0bDgyNjF4X3Byb2JlYDoKCmBgYGMKc3RhdGljIGludCBydGw4MjYxeF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQp7CglzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXY7CglzdHJ1Y3QgcnRsODI2MXhfcHJpdiAqcHJpdjsKCWludCBzdWJfcGh5X2lkLCByZXQ7CgoJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwoJaWYgKCFwcml2KQoJCXJldHVybiAtRU5PTUVNOwoKCXBoeWRldi0mZ3Q7cHJpdiA9IHByaXY7CgoJcmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjYxWF9FWFRfQUREUl9SRUcsCgkJCSAgICBSVExfODI2MVhfU1VCX1BIWV9JRF9BRERSKTsKCWlmIChyZXQgJmx0OyAwKQoJCXJldHVybiByZXQ7CgoJcmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyNjFYX0VYVF9EQVRBX1JFRyk7CglpZiAocmV0ICZsdDsgMCkKCQlyZXR1cm4gcmV0OwoKCXN1Yl9waHlfaWQgPSAocmV0ICZndDsmZ3Q7IDgpICZhbXA7IDB4ZmY7CgoJc3dpdGNoIChzdWJfcGh5X2lkKSB7CgljYXNlIFJUTDgyNjFDX0NFX01PREVMOgoJCXByaXYtJmd0O2Z3X25hbWUgPSBSVEw4MjYxQ19DRV9GV19OQU1FOwoJCXBoeWRldl9pbmZvKHBoeWRldiwgJiMzNDtSVEw4MjYxQyBkZXRlY3RlZCAoc3ViX2lkIAoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlYWx0ZWtfbWFpbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9NYWtlZmlsZToyOnJlYWx0ZWsteVx0XHRcdCYjNDM7PSByZWFsdGVrX21haW4ub1xuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvTWFrZWZpbGUtMy1yZWFsdGVrLSQoQ09ORklHX1JFQUxURUtfUEhZX0hXTU9OKSAmIzQzOz0gcmVhbHRla19od21vbi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMTQ5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoYXQsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSYjMzk7bSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIG5ldHdvcmsgZHJpdmVycyBhbmQgdGhlIExpbnV4IGtlcm5lbCBidWlsZCBzeXN0ZW06CgoqKkludmVzdGlnYXRpbmcgUmVhbHRlayBQSFkgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBlbmFibGluZyB0aGUgYHJlYWx0ZWtgIFBIWSAoUGh5c2ljYWwgTGF5ZXIpIGRyaXZlci4gV2hlcmUmIzM5O3MgdGhlIGNvbmZpZ3VyYXRpb24gbWFnaWMgaGFwcGVuaW5nPyBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUgbGlrZWx5IHN1c3BlY3RzLiBGaXJzdCwgSSYjMzk7bGwgZXhhbWluZSB0aGUgc3BlY2lmaWMgYHJlYWx0ZWtgIGRyaXZlciYjMzk7cyBgTWFrZWZpbGVgLCB0aGUgb25lIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL01ha2VmaWxlYC4gVGhpcyBpcyB0aGUgbW9zdCBvYnZpb3VzIHBsYWNlIGZvciBkZXZpY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbnkgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUsIG9yIG90aGVyIGJ1aWxkLXRpbWUgbG9naWMuIFRoZW4sIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIG5vdCBtaXNzIGFueSBvdmVyYXJjaGluZyBidWlsZCBzeXN0ZW0gZGlyZWN0aXZlcywgSSYjMzk7bGwgYWxzbyBnbGFuY2UgYXQgdGhlIHBhcmVudCBkaXJlY3RvcnkmIzM5O3MgYE1ha2VmaWxlYCwgYGRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIGhhdmUgdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBob3cgUEhZIGRyaXZlcnMgaW4gZ2VuZXJhbCBhcmUgaGFuZGxlZCwgYW5kIGNvdWxkIGNvbnRhaW4gY29uZGl0aW9uYWwgaW5jbHVkZXMgb3IgZ2xvYmFsIGZsYWdzIHRoYXQgaW1wYWN0IHRoZSBgcmVhbHRla2AgZHJpdmVyLiBUaGVzZSB0d28gZmlsZXMgc2hvdWxkIHJldmVhbCB0aGUga2V5IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycywgS2NvbmZpZyBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgYnVpbGQtdGltZSBkaXJlY3RpdmVzIHRoYXQgY29udHJvbCB3aGV0aGVyIHRoZSBgcmVhbHRla2AgZHJpdmVyIGdldHMgY29tcGlsZWQgYW5kIGluY2x1ZGVkIGluIHRoZSBrZXJuZWwuIFRoaXMmIzM5O2xsIGdldCBtZSB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciBwcmV0dHkgcXVpY2tseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVhbHRlayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9OTQ9b2JqLSQoQ09ORklHX1FTRU1JX1BIWSlcdFx0JiM0Mzs9IHFzZW1pLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo5NTpvYmotJChDT05GSUdfUkVBTFRFS19QSFkpXHQmIzQzOz0gcmVhbHRlay9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS05Ni1vYmotJChDT05GSUdfUkVORVNBU19QSFkpXHQmIzQzOz0gdVBENjA2MjAub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTU5NwoJCQkJCQkJb3V0cHV0OiAzMTIKCQkJCQkJCXRob3VnaHRzOiAyMTg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIFJlYWx0ZWsgUlRMODI2MSBQSFkgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgUmVhbHRlayBSVEw4MjYxIDEwR2JwcyBQSFkgZHJpdmVyLiBUaGUga2V5IGNvbmZpZyByZXF1aXJlZCBpcyBgQ09ORklHX1JFQUxURUtfUEhZYCwgd2hpY2ggaXMgYSB0cmlzdGF0ZS4gIEJleW9uZCB0aGF0LCBpdCYjMzk7cyBicmluZ2luZyBpbiBmaXJtd2FyZSBsb2FkaW5nIGZ1bmN0aW9uYWxpdHkuICBUaGF0IG1lYW5zIHdlJiMzOTtsbCBhbHNvIG5lZWQgYENPTkZJR19GV19MT0FERVJgICh3aGljaCBpcyB1c3VhbGx5IGVuYWJsZWQgYW55d2F5KSBhbmQsIGJlY2F1c2UgaXQgdXNlcyBgY3JjMzJgLCBgQ09ORklHX0NSQzMyYCwgdGhvdWdoIHRob3NlIGFyZSBsaWtlbHkgYWxyZWFkeSB0YWtlbiBjYXJlIG9mLgoKVGhlIHBhdGNoIGl0c2VsZiBpbnRyb2R1Y2VzIGEgYnVuY2ggb2YgaW50ZXJlc3RpbmcgZnVuY3Rpb25zLiAgTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyB0aHJvdWdoIGFsbCBvZiB0aGVtIGZvciBgRm9jdXNTeW1ib2xzYCwgd2hpY2ggSSYjMzk7dmUgZG9uZS4gIExldCYjMzk7cyBzZWU6CgoqICAgYGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXRgCiogICBgZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmVgCiogICBgZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZWAKKiAgIGBydGw4MjYxeF9wcm9iZWAKKiAgIGBydGw4MjYxeF9nZXRfZmVhdHVyZXNgCiogICBgcnRsODI2MXhfcmVhZF9zdGF0dXNgCiogICBgcnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlYAoqICAgYHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnlgCiogICBgcnRsODI2MXhfZndfbG9hZGAKKiAgIGBydGw4MjYxeF9jb25maWdfaW50cmAKKiAgIGBydGw4MjYxeF9oYW5kbGVfaW50ZXJydXB0YAoqICAgYHJ0bDgyNjF4X2NvbmZpZ19hbmVnYAoqICAgYHJ0bDgyNjF4X2NvbmZpZ19pbml0YAoKV2FpdC4uLiBJIG5lZWQgdG8gcmVmaW5lIHRoYXQgbGlzdCBhIGxpdHRsZS4gYGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlYCBhbmQgYGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmVgIGFyZSBhY3R1YWxseSBzdGF0aWMgZnVuY3Rpb25zIGluIGBkcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jYCB3aGljaCBJIHdvbiYjMzk7dCBiZSBhYmxlIHRvIHRhcmdldCBkaXJlY3RseSwgYW5kIGBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0YCBpcyBleHBvcnRlZC4gSG93ZXZlciwgdGhlIGBydGw4MjYxeF8qYCBmdW5jdGlvbnMgYXJlIHN0YXRpYyBpbiBgcmVhbHRla19tYWluLmNgLiBTbyBteSB0aGlua2luZyBpcyB0aGF0IHN5emthbGxlciBzaG91bGQgYmUgYWJsZSB0byBnZXQgdG8gYWxsIHRoZXNlLCBzbyBpdCYjMzk7cyBhIHVzZWZ1bCBzZXQgb2YgaW5pdGlhbCBgRm9jdXNTeW1ib2xzYC4KCkkgbmVlZCB0byBjb25maXJtIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGhpZGRlbiBjb25maWcgZGVwZW5kZW5jaWVzLCBidXQgYENPTkZJR19SRUFMVEVLX1BIWWAsIGBDT05GSUdfUEhZTElCYCBhbmQgYENPTkZJR19NRElPX0RFVklDRWAgc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBkcml2ZXJzLgoKTm93LCBsb29raW5nIGRlZXBlciwgIGBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5YCBpcyBhIHJlYWwgZ2VtLiAgSXQgcGFyc2VzIGZpcm13YXJlIGRhdGEgYW5kIHBlcmZvcm1zIE1ESU8gb3BlcmF0aW9ucy4gU3l6a2FsbGVyJiMzOTtzIGBzeXpfcmVxdWVzdF9maXJtd2FyZWAgcHJpbWl0aXZlIGNhbiBmZWVkIGFyYml0cmFyeSBmaXJtd2FyZSB0byB0aGUgZHJpdmVyLCBhbmQgc2luY2Ugc3l6a2FsbGVyICpkb2VzKiBpbnRlcmNlcHQgdGhlIGByZXF1ZXN0X2Zpcm13YXJlYCBjYWxsLCB0aGlzIGlzIGEgcGVyZmVjdCB0YXJnZXQhIEl0IG1lYW5zIHdlIGNhbiB0aHJvdyBjb21wbGV0ZWx5IGZ1enplci1jb250cm9sbGVkIGRhdGEgYXQgYm90aCBgcnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlYCBhbmQgYHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnlgLiAgVGhlIGZpcm13YXJlIHBhcnNpbmcgaXMgaW5oZXJlbnRseSByaXNreSDigJMgdGhpbmsgYnVmZmVyIG92ZXJmbG93cywgdHlwZSBjb25mdXNpb24sIGV0Yy4gIEkgY2FuIGFscmVhZHkgc2VlIG9wcG9ydHVuaXRpZXMgZm9yIGZ1enppbmcgbWFnaWMgbnVtYmVycywgc2l6ZSBjaGVja3MsIGFuZCBDUkMuICBUaGUgZnV6emVyIGlzIGxpa2VseSB0byBmaW5kIHZ1bG5lcmFiaWxpdGllcyBpbiBob3cgdGhlIGNvZGUgaW50ZXJwcmV0cyBhbmQgdXNlcyB0aGUgZmlybXdhcmUgZGF0YS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgdG8gc2VlIHdoYXQgdGhlIGZ1enplciBjYW4gZG8gaGVyZS4gRXZlbiB0aG91Z2ggdGhlIGZpcm13YXJlIHZlcmlmaWVyIGluY2x1ZGVzIGEgQ1JDMzIgY2hlY2ssIHRoZSBmdXp6ZXIgbWlnaHQgZmluZCB3YXlzIHRvIGJ5cGFzcyBpdCwgb3IgYXQgbGVhc3QgdHJpZ2dlciBmbGF3cyBiZWZvcmUgdGhhdCBjaGVjay4KCk9rYXksIGhlcmUmIzM5O3MgdGhlIGZpbmFsIGxpc3QgZm9yIGBGb2N1c1N5bWJvbHNgOgoKKiAgIGBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0YAoqICAgYHJ0bDgyNjF4X3Byb2JlYAoqICAgYHJ0bDgyNjF4X2dldF9mZWF0dXJlc2AKKiAgIGBydGw4MjYxeF9yZWFkX3N0YXR1c2AKKiAgIGBydGw4MjYxeF92ZXJpZnlfZmlybXdhcmVgCiogICBgcnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeWAKKiAgIGBydGw4MjYxeF9md19sb2FkYAoqICAgYHJ0bDgyNjF4X2NvbmZpZ19pbnRyYAoqICAgYHJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHRgCiogICBgcnRsODI2MXhfY29uZmlnX2FuZWdgCiogICBgcnRsODI2MXhfY29uZmlnX2luaXRgCgpUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBkZWZpbml0ZWx5IGB0cnVlYCBvbiB0aGlzIG9uZS4gQW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGBbJiMzNDtSRUFMVEVLX1BIWSYjMzQ7XWAuIFRoZSByZWFzb25pbmcgaXMgdGhhdCB0aGUgZHJpdmVyIHN1cHBvcnRzIHRoZSBSVEw4Cgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JFQUxURUtfUEhZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2VucGh5X2M0NV9wbWFfc29mdF9yZXNldCYjMzQ7LAogICAgJiMzNDtnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZSYjMzQ7LAogICAgJiMzNDtnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X3Byb2JlJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2dldF9mZWF0dXJlcyYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9yZWFkX3N0YXR1cyYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF92ZXJpZnlfZmlybXdhcmUmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeSYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9md19sb2FkJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2NvbmZpZ19pbnRyJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfY29uZmlnX2FuZWcmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfY29uZmlnX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw4MjYxIDEwR2JwcyBQSFkgYW5kIGludHJvZHVjZXMgQ2xhdXNlIDQ1IFBIWSBNYXN0ZXIvU2xhdmUgY29uZmlndXJhdGlvbi4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYnkgZW11bGF0aW5nIGEgVVNCIG5ldHdvcmsgYWRhcHRlciAoZS5nLiwgQVNJWCBvciBTTVNDKSB0aGF0IGV4cG9zZXMgYW4gTURJTyBidXMsIGFuZCByZXNwb25kaW5nIHRvIFBIWSBJRCByZWFkcyB3aXRoIHRoZSBSVEw4MjYxIElELiBUaGUgZHJpdmVyIGFsc28gcGFyc2VzIGZpcm13YXJlLCB3aGljaCBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UkVBTFRFS19QSFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0JiMzNDssCiAgICAmIzM0O2dlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlJiMzNDssCiAgICAmIzM0O2dlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmUmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfcHJvYmUmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfZ2V0X2ZlYXR1cmVzJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X3JlYWRfc3RhdHVzJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZSYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9md19leGVjdXRlX2VudHJ5JiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2Z3X2xvYWQmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfY29uZmlnX2ludHImIzM0OywKICAgICYjMzQ7cnRsODI2MXhfaGFuZGxlX2ludGVycnVwdCYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9jb25maWdfYW5lZyYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9jb25maWdfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBSZWFsdGVrIFJUTDgyNjEgMTBHYnBzIFBIWSBhbmQgaW50cm9kdWNlcyBDbGF1c2UgNDUgUEhZIE1hc3Rlci9TbGF2ZSBjb25maWd1cmF0aW9uLiBUaGUgY29kZSBpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBieSBlbXVsYXRpbmcgYSBVU0IgbmV0d29yayBhZGFwdGVyIChlLmcuLCBBU0lYIG9yIFNNU0MpIHRoYXQgZXhwb3NlcyBhbiBNRElPIGJ1cywgYW5kIHJlc3BvbmRpbmcgdG8gUEhZIElEIHJlYWRzIHdpdGggdGhlIFJUTDgyNjEgSUQuIFRoZSBkcml2ZXIgYWxzbyBwYXJzZXMgZmlybXdhcmUsIHdoaWNoIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NDc6NTcuOTU4OTQwNzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTMyMDgyNjk5OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUkVBTFRFS19QSFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0XCIsXG4gICAgXCJnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZVwiLFxuICAgIFwiZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZVwiLFxuICAgIFwicnRsODI2MXhfcHJvYmVcIixcbiAgICBcInJ0bDgyNjF4X2dldF9mZWF0dXJlc1wiLFxuICAgIFwicnRsODI2MXhfcmVhZF9zdGF0dXNcIixcbiAgICBcInJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZVwiLFxuICAgIFwicnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeVwiLFxuICAgIFwicnRsODI2MXhfZndfbG9hZFwiLFxuICAgIFwicnRsODI2MXhfY29uZmlnX2ludHJcIixcbiAgICBcInJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHRcIixcbiAgICBcInJ0bDgyNjF4X2NvbmZpZ19hbmVnXCIsXG4gICAgXCJydGw4MjYxeF9jb25maWdfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFJlYWx0ZWsgUlRMODI2MSAxMEdicHMgUEhZIGFuZCBpbnRyb2R1Y2VzIENsYXVzZSA0NSBQSFkgTWFzdGVyL1NsYXZlIGNvbmZpZ3VyYXRpb24uIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGJ5IGVtdWxhdGluZyBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgKGUuZy4sIEFTSVggb3IgU01TQykgdGhhdCBleHBvc2VzIGFuIE1ESU8gYnVzLCBhbmQgcmVzcG9uZGluZyB0byBQSFkgSUQgcmVhZHMgd2l0aCB0aGUgUlRMODI2MSBJRC4gVGhlIGRyaXZlciBhbHNvIHBhcnNlcyBmaXJtd2FyZSwgd2hpY2ggaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjQ3OjU3Ljk1ODk0NTcyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTc1Nzg1OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1Y2QwYWQwMDIzZTU1MzYwMjRkZjRhZWE2YTM2ZDY0Y2MwZDNjZWU1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDIxIDE1OjQ3OjU2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXFxuaW5kZXggMTI2OTUxNzQxNDI4OGYuLjg3MDkyMDMxMWY5YTAxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXFxuQEAgLTM4NCw2ICszODQsMTE5IEBAIGludCBnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCByZXN0YXJ0KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfY2hlY2tfYW5kX3Jlc3RhcnRfYW5lZyk7XFxuIFxcbisvKipcXG4rICogZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldCAtIHNvZnR3YXJlIHJlc2V0IHRoZSBQSFkgdmlhIENsYXVzZSA0NSBQTUEvUE1EIGNvbnRyb2wgcmVnaXN0ZXJcXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxcbisgKi9cXG4raW50IGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0LCB2YWw7XFxuK1xcbitcXHRyZXQgPSBwaHlfc2V0X2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfUE1BUE1ELCBNRElPX0NUUkwxLFxcbitcXHRcXHRcXHQgICAgICAgTURJT19DVFJMMV9SRVNFVCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsXFxuK1xcdFxcdFxcdFxcdFxcdCBNRElPX0NUUkwxLCB2YWwsXFxuK1xcdFxcdFxcdFxcdFxcdCAhKHZhbCBcXHUwMDI2IE1ESU9fQ1RSTDFfUkVTRVQpLFxcbitcXHRcXHRcXHRcXHRcXHQgNTAwMCwgNjAwMDAwLCB0cnVlKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0KTtcXG4rXFxuKy8qKlxcbisgKiBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZSAtIENvbmZpZ3VyZSBNYXN0ZXIvU2xhdmUgc2V0dGluZyBmb3IgQzQ1IFBIWXNcXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuKyAqXFxuKyAqIERlc2NyaXB0aW9uOiBDb25maWd1cmUgdGhlIGZvcmNlZCBvciBwcmVmZXJyZWQgTWFzdGVyL1NsYXZlIHJvbGVcXG4rICogMTBHQkFTRS1UIGNvbnRyb2wgcmVnaXN0ZXIgKE1NRCA3LCBSZWdpc3RlciAweDAwMjApIGFjY29yZGluZyB0b1xcbisgKiBJRUVFIDgwMi4zIHN0YW5kYXJkcy5cXG4rICpcXG4rICogUmV0dXJuOiBuZWdhdGl2ZSBlcnJubyBjb2RlIG9uIGZhaWx1cmUsIDAgaWYgTWFzdGVyL1NsYXZlIGRpZG4ndCBjaGFuZ2UsXFxuKyAqIG9yIDEgaWYgTWFzdGVyL1NsYXZlIG1vZGVzIGNoYW5nZWQuXFxuKyAqL1xcbitzdGF0aWMgaW50IGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0dTE2IGN0bCA9IDA7XFxuK1xcbitcXHRzd2l0Y2ggKHBoeWRldi1cXHUwMDNlbWFzdGVyX3NsYXZlX3NldCkge1xcbitcXHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfTUFTVEVSX1BSRUZFUlJFRDpcXG4rXFx0XFx0Y3RsID0gTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9QUkVGRVJSRUQ6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfTUFTVEVSX0ZPUkNFOlxcbitcXHRcXHRjdGwgPSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFIHwgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBNQVNURVJfU0xBVkVfQ0ZHX1NMQVZFX0ZPUkNFOlxcbitcXHRcXHRjdGwgPSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBNQVNURVJfU0xBVkVfQ0ZHX1VOS05PV046XFxuK1xcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19VTlNVUFBPUlRFRDpcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHBoeWRldl93YXJuKHBoeWRldiwgXFxcIlVuc3VwcG9ydGVkIE1hc3Rlci9TbGF2ZSBtb2RlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEUgfFxcbitcXHRcXHRcXHRcXHQgICAgICBNRElPX0FOXzEwR0JUX0NUUkxfTVNfVkFMVUUgfFxcbitcXHRcXHRcXHRcXHQgICAgICBNRElPX0FOXzEwR0JUX0NUUkxfTVNfUE9SVF9UWVBFLCBjdGwpO1xcbit9XFxuK1xcbisvKipcXG4rICogZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZSAtIHJlYWQgbWFzdGVyL3NsYXZlIHN0YXR1c1xcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4rICpcXG4rICogRGVzY3JpcHRpb246IFJlYWQgdGhlIE1hc3Rlci9TbGF2ZSBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXNcXG4rICogZnJvbSAxMEdCQVNFLVQgY29udHJvbC9zdGF0dXMgcmVnaXN0ZXJzIChNTUQgNywgUmVnIDB4MDAyMCBhbmQgMHgwMDIxKS5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbisgKi9cXG4rc3RhdGljIGludCBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHZhbDtcXG4rXFxuK1xcdHBoeWRldi1cXHUwMDNlbWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfVU5LTk9XTjtcXG4rXFx0cGh5ZGV2LVxcdTAwM2VtYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfVU5LTk9XTjtcXG4rXFxuK1xcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX0NUUkwpO1xcbitcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHZhbDtcXG4rXFxuK1xcdGlmICh2YWwgXFx1MDAyNiBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFKSB7XFxuK1xcdFxcdGlmICh2YWwgXFx1MDAyNiBNRElPX0FOXzEwR0JUX0NUUkxfTVNfVkFMVUUpXFxuK1xcdFxcdFxcdHBoeWRldi1cXHUwMDNlbWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfTUFTVEVSX0ZPUkNFO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHBoeWRldi1cXHUwMDNlbWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfU0xBVkVfRk9SQ0U7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmICh2YWwgXFx1MDAyNiBNRElPX0FOXzEwR0JUX0NUUkxfTVNfUE9SVF9UWVBFKVxcbitcXHRcXHRcXHRwaHlkZXYtXFx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX01BU1RFUl9QUkVGRVJSRUQ7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cGh5ZGV2LVxcdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9QUkVGRVJSRUQ7XFxuK1xcdH1cXG4rXFxuK1xcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX1NUQVQpO1xcbitcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHZhbDtcXG4rXFxuK1xcdGlmICh2YWwgXFx1MDAyNiBNRElPX0FOXzEwR0JUX1NUQVRfTVNfRkFVTFQpIHtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2VtYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfRVJSO1xcbitcXHR9IGVsc2UgaWYgKHBoeWRldi1cXHUwMDNlbGluaykge1xcbitcXHRcXHRpZiAodmFsIFxcdTAwMjYgTURJT19BTl8xMEdCVF9TVEFUX01TX1JFUylcXG4rXFx0XFx0XFx0cGh5ZGV2LVxcdTAwM2VtYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfTUFTVEVSO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHBoeWRldi1cXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX1NMQVZFO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZW1hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9VTktOT1dOO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGdlbnBoeV9jNDVfYW5lZ19kb25lIC0gcmV0dXJuIGF1dG8tbmVnb3RpYXRpb24gY29tcGxldGUgc3RhdHVzXFxuICAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbkBAIC0xMTkyLDYgKzEzMDUsMTAgQEAgaW50IGdlbnBoeV9jNDVfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gXFx0XFx0XFx0cmV0ID0gZ2VucGh5X2M0NV9iYXNldDFfcmVhZF9zdGF0dXMocGh5ZGV2KTtcXG4gXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHJldCA9IGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmUocGh5ZGV2KTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdHBoeV9yZXNvbHZlX2FuZWdfbGlua21vZGUocGh5ZGV2KTtcXG5AQCAtMTIyNSw2ICsxMzQyLDE0IEBAIGludCBnZW5waHlfYzQ1X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcdGlmIChyZXQgXFx1MDAzZSAwKVxcbiBcXHRcXHRjaGFuZ2VkID0gdHJ1ZTtcXG4gXFxuK1xcdGlmICghZ2VucGh5X2M0NV9iYXNldDFfYWJsZShwaHlkZXYpKSB7XFxuK1xcdFxcdHJldCA9IGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2UgMClcXG4rXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiBnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcocGh5ZGV2LCBjaGFuZ2VkKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X2NvbmZpZ19hbmVnKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMgYi9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY1xcbmluZGV4IGI2NWQwZjVmYTFhMDE0Li4xYzBiOWM0MGE4MWU1NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXFxuQEAgLTgsNyArOCw5IEBAXFxuICAqIENvcHlyaWdodCAoYykgMjAwNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLlxcbiAgKi9cXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdG9wcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY3JjMzIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aHRvb2xfbmV0bGluay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlybXdhcmUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BtX3dha2VpcnEuaFxcdTAwM2VcXG5AQCAtMTQxLDYgKzE0MywxMCBAQFxcbiAjZGVmaW5lIFJUTDgyMTFGX1BIWVNJQ0FMX0FERFJfV09SRDFcXHRcXHQxN1xcbiAjZGVmaW5lIFJUTDgyMTFGX1BIWVNJQ0FMX0FERFJfV09SRDJcXHRcXHQxOFxcbiBcXG4rI2RlZmluZSBSVEw4MjYxWF9FWFRfQUREUl9SRUdcXHRcXHRcXHQweGE0MzZcXG4rI2RlZmluZSBSVEw4MjYxWF9FWFRfREFUQV9SRUdcXHRcXHRcXHQweGE0MzhcXG4rI2RlZmluZSBSVExfODI2MVhfU1VCX1BIWV9JRF9BRERSXFx0XFx0MHg4MDFkXFxuK1xcbiAjZGVmaW5lIFJUTDgyMlhfVk5EMV9TRVJERVNfT1BUSU9OXFx0XFx0XFx0MHg2OTdhXFxuICNkZWZpbmUgUlRMODIyWF9WTkQxX1NFUkRFU19PUFRJT05fTU9ERV9NQVNLXFx0XFx0R0VOTUFTSyg1LCAwKVxcbiAjZGVmaW5lIFJUTDgyMlhfVk5EMV9TRVJERVNfT1BUSU9OX01PREVfMjUwMEJBU0VYX1NHTUlJXFx0XFx0MFxcbkBAIC0yNTEsNiArMjU3LDcwIEBAXFxuICNkZWZpbmUgUlRMXzgyMjFCX1ZNX0NHXFx0XFx0XFx0XFx0MHgwMDFjYzg0YVxcbiAjZGVmaW5lIFJUTF84MjUxQlxcdFxcdFxcdFxcdDB4MDAxY2M4NjJcXG4gI2RlZmluZSBSVExfODI2MUNcXHRcXHRcXHRcXHQweDAwMWNjODkwXFxuKyNkZWZpbmUgUlRMXzgyNjFDX0NHXFx0XFx0XFx0XFx0MHgwMDFjYzg5OFxcbitcXG4rI2RlZmluZSBSVEw4MjYxQ19DRV9NT0RFTFxcdFxcdDB4MDBcXG4rI2RlZmluZSBSVEw4MjYxRF9NT0RFTFxcdFxcdFxcdDB4ODFcXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfQVVUT05FR19FUlJPUlxcdEJJVCgwKVxcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9QQUdFX1JFQ1ZcXHRcXHRCSVQoMilcXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfQVVUT05FR19ET05FXFx0QklUKDMpXFxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX0xJTktfQ0hHXFx0XFx0QklUKDQpXFxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX1BIWV9SRUdfQUNDRVNTXFx0QklUKDUpXFxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX1BNRVxcdFxcdEJJVCg3KVxcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9BTERQU19DSEdcXHRcXHRCSVQoOSlcXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfSkFCQkVSXFx0XFx0QklUKDEwKVxcbitcXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfTUFTS19ERUZBVUxUXFx0KFJUTDgyNjFYX0lOVF9BVVRPTkVHX0RPTkUgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBSVEw4MjYxWF9JTlRfTElOS19DSEcgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBSVEw4MjYxWF9JTlRfQVVUT05FR19FUlJPUiB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IFJUTDgyNjFYX0lOVF9KQUJCRVIpXFxuK1xcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9NQVNLX0FMTFxcdFxcdChSVEw4MjYxWF9JTlRfQVVUT05FR19FUlJPUiB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IFJUTDgyNjFYX0lOVF9QQUdFX1JFQ1YgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBSVEw4MjYxWF9JTlRfQVVUT05FR19ET05FIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgUlRMODI2MVhfSU5UX0xJTktfQ0hHIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgUlRMODI2MVhfSU5UX1BIWV9SRUdfQUNDRVNTIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgUlRMODI2MVhfSU5UX1BNRSB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IFJUTDgyNjFYX0lOVF9BTERQU19DSEcgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBSVEw4MjYxWF9JTlRfSkFCQkVSKVxcbitcXG4rI2RlZmluZSBGV19NQUlOX01BR0lDXFx0XFx0XFx0MHg1MjU0NEMzOFxcbisjZGVmaW5lIEZXX1NVQl9NQUdJQ184MjYxQ1xcdFxcdDB4MzIzNjMxNDNcXG4rI2RlZmluZSBSVEw4MjYxWF9QT0xMX1RJTUVPVVRfTVNcXHQxMDBcXG4rI2RlZmluZSBSVEw4MjYxWF9NQVhfTU1EX0RFVlxcdFxcdDMxXFxuK1xcbisjZGVmaW5lIFJUTDgyNjFDX0NFX0ZXX05BTUVcXHRcXFwicnRsX25pYy9ydGw4MjYxYy5iaW5cXFwiXFxuK01PRFVMRV9GSVJNV0FSRShSVEw4MjYxQ19DRV9GV19OQU1FKTtcXG4rXFxuK2VudW0gcnRsODI2MXhfZndfb3Age1xcbitcXHRPUF9XUklURSA9IDB4MDAsXFx0LyogV3JpdGUgKi9cXG4rXFx0T1BfUE9MTCAgPSAweDAyLFxcdC8qIFBvbGxpbmcgKi9cXG4rfTtcXG4rXFxuK3N0cnVjdCBydGw4MjYxeF9md19oZWFkZXIge1xcbitcXHRfX2xlMzIgbWFpbl9tYWdpYztcXHQvKiBNYWluIG1hZ2ljIG51bWJlciAqL1xcbitcXHRfX2xlMzIgc3ViX21hZ2ljO1xcdC8qIFN1YiBtYWdpYyBudW1iZXIgKi9cXG4rXFx0X19sZTE2IHZlcnNpb25fbWFqb3I7XFx0LyogTWFqb3IgdmVyc2lvbiAqL1xcbitcXHRfX2xlMTYgdmVyc2lvbl9taW5vcjtcXHQvKiBNaW5vciB2ZXJzaW9uICovXFxuK1xcdF9fbGUxNiBudW1fZW50cmllcztcXHQvKiBOdW1iZXIgb2YgZW50cmllcyAqL1xcbitcXHRfX2xlMTYgcmVzZXJ2ZWQ7XFx0LyogUmVzZXJ2ZWQgKi9cXG4rXFx0X19sZTMyIGNyYzMyO1xcdFxcdC8qIENSQzMyIGNoZWNrc3VtICovXFxuK307XFxuK1xcbitzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkge1xcbitcXHRfX3U4ICB0eXBlO1xcdFxcdC8qIE9wZXJhdGlvbiB0eXBlIChPUF8qKSAqL1xcbitcXHRfX3U4ICBkZXY7XFx0XFx0LyogTU1EIGRldmljZSAqL1xcbitcXHRfX2xlMTYgYWRkcjtcXHRcXHQvKiBSZWdpc3RlciBhZGRyZXNzICovXFxuK1xcdF9fdTggIG1zYjtcXHRcXHQvKiBNU0IgYml0IHBvc2l0aW9uICovXFxuK1xcdF9fdTggIGxzYjtcXHRcXHQvKiBMU0IgYml0IHBvc2l0aW9uICovXFxuK1xcdF9fbGUxNiB2YWx1ZTtcXHRcXHQvKiBWYWx1ZSB0byB3cml0ZS9jb21wYXJlICovXFxuK1xcdF9fbGUxNiB0aW1lb3V0X21zO1xcdC8qIFBvbGwgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKi9cXG4rXFx0X191OCAgcG9sbF9zZXQ7XFx0XFx0LyogUG9sbCB1bnRpbCBlcXVhbCAoMSkgb3Igbm90IGVxdWFsICgwKSAqL1xcbitcXHRfX3U4ICByZXNlcnZlZDtcXHRcXHQvKiBSZXNlcnZlZCAqL1xcbit9O1xcbitcXG4rI2RlZmluZSBGV19IRUFERVJfU0laRVxcdFxcdHNpemVvZihzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyKVxcbisjZGVmaW5lIEZXX0VOVFJZX1NJWkVcXHRcXHRzaXplb2Yoc3RydWN0IHJ0bDgyNjF4X2Z3X2VudHJ5KVxcbiBcXG4gLyogUlRMODIxMUUgYW5kIFJUTDgyMTFGIHN1cHBvcnQgdXAgdG8gdGhyZWUgTEVEcyAqL1xcbiAjZGVmaW5lIFJUTDgyMTF4X0xFRF9DT1VOVFxcdFxcdFxcdDNcXG5AQCAtMjcwLDYgKzM0MCwxMSBAQCBzdHJ1Y3QgcnRsODIxeF9wcml2IHtcXG4gXFx0dTE2IGluZXI7XFxuIH07XFxuIFxcbitzdHJ1Y3QgcnRsODI2MXhfcHJpdiB7XFxuK1xcdGNvbnN0IGNoYXIgKmZ3X25hbWU7XFxuK1xcdGJvb2wgZndfbG9hZGVkO1xcbit9O1xcbitcXG4gc3RhdGljIGludCBydGw4MjF4X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiB7XFxuIFxcdHJldHVybiBfX3BoeV9yZWFkKHBoeWRldiwgUlRMODIxeF9QQUdFX1NFTEVDVCk7XFxuQEAgLTMxMCw2ICszODUsMzI5IEBAIHN0YXRpYyBpbnQgcnRsODIxeF9tb2RpZnlfZXh0X3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IGV4dF9wYWdlLFxcbiBcXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZHBhZ2UsIHJldCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgcnRsODI2MXhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG4rXFx0c3RydWN0IHJ0bDgyNjF4X3ByaXYgKnByaXY7XFxuK1xcdGludCBzdWJfcGh5X2lkLCByZXQ7XFxuK1xcbitcXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcHJpdilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRwaHlkZXYtXFx1MDAzZXByaXYgPSBwcml2O1xcbitcXG4rXFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjYxWF9FWFRfQUREUl9SRUcsXFxuK1xcdFxcdFxcdCAgICBSVExfODI2MVhfU1VCX1BIWV9JRF9BRERSKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODI2MVhfRVhUX0RBVEFfUkVHKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRzdWJfcGh5X2lkID0gKHJldCBcXHUwMDNlXFx1MDAzZSA4KSBcXHUwMDI2IDB4ZmY7XFxuK1xcbitcXHRzd2l0Y2ggKHN1Yl9waHlfaWQpIHtcXG4rXFx0Y2FzZSBSVEw4MjYxQ19DRV9NT0RFTDpcXG4rXFx0XFx0cHJpdi1cXHUwMDNlZndfbmFtZSA9IFJUTDgyNjFDX0NFX0ZXX05BTUU7XFxuK1xcdFxcdHBoeWRldl9pbmZvKHBoeWRldiwgXFxcIlJUTDgyNjFDIGRldGVjdGVkIChzdWJfaWQgMHglMDJ4KVxcXFxuXFxcIiwgc3ViX3BoeV9pZCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0Y2FzZSBSVEw4MjYxRF9NT0RFTDpcXG4rXFx0XFx0cGh5ZGV2X2luZm8ocGh5ZGV2LCBcXFwiUlRMODI2MUQgZGV0ZWN0ZWQgKHN1Yl9pZCAweCUwMngpXFxcXG5cXFwiLCBzdWJfcGh5X2lkKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRwaHlkZXZfd2FybihwaHlkZXYsIFxcXCJVbmtub3duIHN1Yl9pZCAweCUwMngsIGRlZmF1bHQgYmVoYXZpb3JcXFxcblxcXCIsIHN1Yl9waHlfaWQpO1xcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODI2MXhfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGdlbnBoeV9jNDVfcG1hX3JlYWRfYWJpbGl0aWVzKHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qXFxuK1xcdCAqIFN1cHBsZW1lbnQgTXVsdGktR2lnIHNwZWVkcyB0aGF0IG1heSBub3QgYmUgYXV0b21hdGljYWxseSBkZXRlY3RlZFxcbitcXHQgKiBSVEw4MjYxWCBzdXBwb3J0cyAyLjVHLzVHIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIDEwR1xcbitcXHQgKi9cXG4rXFx0bGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXFxuK1xcdFxcdFxcdCBwaHlkZXYtXFx1MDAzZXN1cHBvcnRlZCk7XFxuK1xcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfNTAwMGJhc2VUX0Z1bGxfQklULFxcbitcXHRcXHRcXHQgcGh5ZGV2LVxcdTAwM2VzdXBwb3J0ZWQpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODI2MXhfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0LCB2YWwgPSAwO1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkge1xcbitcXHRcXHRyZXQgPSBnZW5waHlfYzQ1X2FuZWdfZG9uZShwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFJUTDgyMlhfVk5EMl9DMjJfUkVHKE1JSV9TVEFUMTAwMCkpO1xcbitcXHRcXHRcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHZhbDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRtaWlfc3RhdDEwMDBfbW9kX2xpbmttb2RlX2xwYV90KHBoeWRldi1cXHUwMDNlbHBfYWR2ZXJ0aXNpbmcsIHZhbCk7XFxuK1xcbitcXHRyZXQgPSBnZW5waHlfYzQ1X3JlYWRfc3RhdHVzKHBoeWRldik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciAqaGRyO1xcbitcXHR1MzIgbWFpbl9tYWdpYywgc3ViX21hZ2ljO1xcbitcXHR1MzIgY2FsY19jcmMsIGZpbGVfY3JjO1xcbitcXHRzaXplX3QgZGF0YV9sZW47XFxuK1xcdHUxNiBudW1fZW50cmllcztcXG4rXFxuK1xcdGlmIChmdy1cXHUwMDNlc2l6ZSBcXHUwMDNjIEZXX0hFQURFUl9TSVpFKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiRmlybXdhcmUgdG9vIHNtYWxsOiAlenUgYnl0ZXNcXFxcblxcXCIsIGZ3LVxcdTAwM2VzaXplKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGhkciA9IChjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICopZnctXFx1MDAzZWRhdGE7XFxuK1xcbitcXHRtYWluX21hZ2ljID0gbGUzMl90b19jcHUoaGRyLVxcdTAwM2VtYWluX21hZ2ljKTtcXG4rXFx0aWYgKG1haW5fbWFnaWMgIT0gRldfTUFJTl9NQUdJQykge1xcbitcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIkludmFsaWQgZmlybXdhcmUgbWFnaWM6IDB4JTA4eFxcXFxuXFxcIiwgbWFpbl9tYWdpYyk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRzdWJfbWFnaWMgPSBsZTMyX3RvX2NwdShoZHItXFx1MDAzZXN1Yl9tYWdpYyk7XFxuK1xcdGlmIChzdWJfbWFnaWMgIT0gRldfU1VCX01BR0lDXzgyNjFDKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiSW52YWxpZCBzdWIgbWFnaWM6IDB4JTA4eFxcXFxuXFxcIiwgc3ViX21hZ2ljKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdG51bV9lbnRyaWVzID0gbGUxNl90b19jcHUoaGRyLVxcdTAwM2VudW1fZW50cmllcyk7XFxuK1xcdGRhdGFfbGVuID0gbnVtX2VudHJpZXMgKiBGV19FTlRSWV9TSVpFO1xcbitcXG4rXFx0aWYgKGZ3LVxcdTAwM2VzaXplICE9IHNpemVvZigqaGRyKSArIGRhdGFfbGVuKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiRmlybXdhcmUgc2l6ZSBtaXNtYXRjaFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRjYWxjX2NyYyA9IGNyYzMyKH4wLCBmdy1cXHUwMDNlZGF0YSArIEZXX0hFQURFUl9TSVpFLCBkYXRhX2xlbikgXiB+MDtcXG4rXFx0ZmlsZV9jcmMgPSBsZTMyX3RvX2NwdShoZHItXFx1MDAzZWNyYzMyKTtcXG4rXFxuK1xcdGlmIChjYWxjX2NyYyAhPSBmaWxlX2NyYykge1xcbitcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIkNSQzMyIG1pc21hdGNoOiBjYWxjdWxhdGVkPTB4JTA4eCBmaWxlPTB4JTA4eFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgY2FsY19jcmMsIGZpbGVfY3JjKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkgKmVudHJ5KVxcbit7XFxuK1xcdHUxNiBhZGRyLCB2YWx1ZSwgdGltZW91dF9tcztcXG4rXFx0dTggZGV2LCBtc2IsIGxzYiwgcG9sbF9zZXQ7XFxuK1xcdHUzMiBiaXRzLCBleHBlY3RfdmFsO1xcbitcXHRpbnQgcmV0LCB2YWw7XFxuK1xcbitcXHRkZXYgPSBlbnRyeS1cXHUwMDNlZGV2O1xcbitcXHRhZGRyID0gbGUxNl90b19jcHUoZW50cnktXFx1MDAzZWFkZHIpO1xcbitcXHRtc2IgPSBlbnRyeS1cXHUwMDNlbXNiO1xcbitcXHRsc2IgPSBlbnRyeS1cXHUwMDNlbHNiO1xcbitcXHR2YWx1ZSA9IGxlMTZfdG9fY3B1KGVudHJ5LVxcdTAwM2V2YWx1ZSk7XFxuK1xcdHRpbWVvdXRfbXMgPSBsZTE2X3RvX2NwdShlbnRyeS1cXHUwMDNldGltZW91dF9tcyk7XFxuK1xcdHBvbGxfc2V0ID0gZW50cnktXFx1MDAzZXBvbGxfc2V0O1xcbitcXG4rXFx0aWYgKHRpbWVvdXRfbXMgPT0gMClcXG4rXFx0XFx0dGltZW91dF9tcyA9IFJUTDgyNjFYX1BPTExfVElNRU9VVF9NUztcXG4rXFxuK1xcdGlmIChkZXYgXFx1MDAzZSBSVEw4MjYxWF9NQVhfTU1EX0RFVikge1xcbitcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcImludmFsaWQgZmlybXdhcmUgTU1EIGRldmljZTogZGV2PSV1XFxcXG5cXFwiLCBkZXYpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG1zYiBcXHUwMDNlIDE1IHx8IGxzYiBcXHUwMDNlIG1zYikge1xcbitcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcImludmFsaWQgZmlybXdhcmUgYml0czogbXNiPSV1LCBsc2I9JXVcXFxcblxcXCIsIG1zYiwgbHNiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHN3aXRjaCAoZW50cnktXFx1MDAzZXR5cGUpIHtcXG4rXFx0Y2FzZSBPUF9XUklURTpcXG4rXFx0XFx0cmV0ID0gcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBkZXYsIGFkZHIsXFxuK1xcdFxcdFxcdFxcdCAgICAgR0VOTUFTSyhtc2IsIGxzYiksICh2YWx1ZSBcXHUwMDNjXFx1MDAzYyBsc2IpIFxcdTAwMjYgR0VOTUFTSyhtc2IsIGxzYikpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgT1BfUE9MTDpcXG4rXFx0XFx0Yml0cyA9IEdFTk1BU0sobXNiLCBsc2IpO1xcbitcXHRcXHRleHBlY3RfdmFsID0gKHZhbHVlIFxcdTAwM2NcXHUwMDNjIGxzYikgXFx1MDAyNiBiaXRzO1xcbitcXG4rXFx0XFx0aWYgKHBvbGxfc2V0KVxcbitcXHRcXHRcXHRyZXQgPSBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgZGV2LCBhZGRyLCB2YWwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCh2YWwgXFx1MDAyNiBiaXRzKSA9PSBleHBlY3RfdmFsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQxMDAwLCB0aW1lb3V0X21zICogMTAwMCwgZmFsc2UpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBkZXYsIGFkZHIsIHZhbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0KHZhbCBcXHUwMDI2IGJpdHMpICE9IGV4cGVjdF92YWwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdDEwMDAsIHRpbWVvdXRfbXMgKiAxMDAwLCBmYWxzZSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bDgyNjF4X2Z3X2xvYWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgcnRsODI2MXhfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2VudHJ5ICplbnRyeTtcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciAqaGRyO1xcbitcXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xcbitcXHRpbnQgcmV0LCBpO1xcbitcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2Vmd19uYW1lKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldCA9IHJlcXVlc3RfZmlybXdhcmUoXFx1MDAyNmZ3LCBwcml2LVxcdTAwM2Vmd19uYW1lLCBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSAlczogJWRcXFxcblxcXCIsIHByaXYtXFx1MDAzZWZ3X25hbWUsIHJldCk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZShwaHlkZXYsIGZ3KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byByZWxlYXNlX2Z3O1xcbitcXG4rXFx0aGRyID0gKGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgKilmdy1cXHUwMDNlZGF0YTtcXG4rXFxuK1xcdGVudHJ5ID0gKGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSAqKShmdy1cXHUwMDNlZGF0YSArIEZXX0hFQURFUl9TSVpFKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGxlMTZfdG9fY3B1KGhkci1cXHUwMDNlbnVtX2VudHJpZXMpOyBpKyssIGVudHJ5KyspIHtcXG4rXFx0XFx0cmV0ID0gcnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeShwaHlkZXYsIGVudHJ5KTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIkVudHJ5ICVkIGZhaWxlZDogJWRcXFxcblxcXCIsIGksIHJldCk7XFxuK1xcdFxcdFxcdGdvdG8gcmVsZWFzZV9mdztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRwcml2LVxcdTAwM2Vmd19sb2FkZWQgPSB0cnVlO1xcbitcXG4rcmVsZWFzZV9mdzpcXG4rXFx0cmVsZWFzZV9maXJtd2FyZShmdyk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODI2MXhfY29uZmlnX2ludHIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlaW50ZXJydXB0cyA9PSBQSFlfSU5URVJSVVBUX0VOQUJMRUQpIHtcXG4rXFx0XFx0cmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5TUik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lORVIsXFxuK1xcdFxcdFxcdFxcdCAgICBSVEw4MjYxWF9JTlRfTUFTS19ERUZBVUxUKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODIyMUJfVk5EMl9JTkVSLCAwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODIyMUJfVk5EMl9JTlNSKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCBpcnFfc3RhdHVzO1xcbitcXG4rXFx0aXJxX3N0YXR1cyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lOU1IpO1xcbitcXHRpZiAoaXJxX3N0YXR1cyBcXHUwMDNjIDApIHtcXG4rXFx0XFx0cGh5X2Vycm9yKHBoeWRldik7XFxuK1xcdFxcdHJldHVybiBJUlFfTk9ORTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCEoaXJxX3N0YXR1cyBcXHUwMDI2IFJUTDgyNjFYX0lOVF9NQVNLX0FMTCkpXFxuK1xcdFxcdHJldHVybiBJUlFfTk9ORTtcXG4rXFxuK1xcdGlmIChpcnFfc3RhdHVzIFxcdTAwMjYgKFJUTDgyNjFYX0lOVF9MSU5LX0NIRyB8IFJUTDgyNjFYX0lOVF9BVVRPTkVHX0RPTkUgfFxcbitcXHQgICAgUlRMODI2MVhfSU5UX0FVVE9ORUdfRVJST1IgfCBSVEw4MjYxWF9JTlRfSkFCQkVSKSlcXG4rXFx0XFx0cGh5X3RyaWdnZXJfbWFjaGluZShwaHlkZXYpO1xcbitcXG4rXFx0cmV0dXJuIElSUV9IQU5ETEVEO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bDgyNjF4X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0dTE2IGFkdl8xZyA9IDA7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBnZW5waHlfYzQ1X2NvbmZpZ19hbmVnKHBoeWRldik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlYXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDBiYXNlVF9GdWxsX0JJVCxcXG4rXFx0XFx0XFx0ICAgICAgcGh5ZGV2LVxcdTAwM2VhZHZlcnRpc2luZykpXFxuK1xcdFxcdGFkdl8xZyA9IEFEVkVSVElTRV8xMDAwRlVMTDtcXG4rXFx0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDBiYXNlVF9IYWxmX0JJVCxcXG4rXFx0XFx0XFx0ICAgICAgcGh5ZGV2LVxcdTAwM2VhZHZlcnRpc2luZykpXFxuK1xcdFxcdGFkdl8xZyB8PSBBRFZFUlRJU0VfMTAwMEhBTEY7XFxuK1xcbitcXHRyZXQgPSBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfVkVORDIsXFxuK1xcdFxcdFxcdFxcdCAgICAgUlRMODIyWF9WTkQyX0MyMl9SRUcoTUlJX0NUUkwxMDAwKSxcXG4rXFx0XFx0XFx0XFx0ICAgICBBRFZFUlRJU0VfMTAwMEZVTEwgfCBBRFZFUlRJU0VfMTAwMEhBTEYsXFxuK1xcdFxcdFxcdFxcdCAgICAgYWR2XzFnKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdGlmIChyZXQgXFx1MDAzZSAwKVxcbitcXHRcXHRyZXR1cm4gZ2VucGh5X2M0NV9yZXN0YXJ0X2FuZWcocGh5ZGV2KTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bDgyNjF4X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHJ0bDgyNjF4X3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuK1xcbitcXHQvKiBUaGUgZmlybXdhcmUgcGFyYW1ldGVycyBhcmUgcHJlc2VydmVkIGFjcm9zcyBJRUVFIHNvZnQgcmVzZXRzIGFuZFxcbitcXHQgKiBzdXNwZW5kL3Jlc3VtZSBjeWNsZXMuIFJlbG9hZGluZyBpcyBvbmx5IG5lY2Vzc2FyeSBhZnRlciBhIHBvd2VyXFxuK1xcdCAqIGN5Y2xlIG9yIGhhcmQgcmVzZXQuXFxuK1xcdCAqL1xcbitcXHRpZiAocHJpdi1cXHUwMDNlZndfbmFtZSBcXHUwMDI2XFx1MDAyNiAhcHJpdi1cXHUwMDNlZndfbG9hZGVkKVxcbitcXHRcXHRyZXR1cm4gcnRsODI2MXhfZndfbG9hZChwaHlkZXYpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgcnRsODIxeF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbkBAIC0zMDAyLDYgKzM0MDAsMTkgQEAgc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHJlYWx0ZWtfZHJ2c1tdID0ge1xcbiBcXHRcXHQucmVzdW1lXFx0XFx0PSBnZW5waHlfcmVzdW1lLFxcbiBcXHRcXHQucmVhZF9tbWRcXHQ9IGdlbnBoeV9yZWFkX21tZF91bnN1cHBvcnRlZCxcXG4gXFx0XFx0LndyaXRlX21tZFxcdD0gZ2VucGh5X3dyaXRlX21tZF91bnN1cHBvcnRlZCxcXG4rXFx0fSwge1xcbitcXHRcXHRQSFlfSURfTUFUQ0hfRVhBQ1QoUlRMXzgyNjFDX0NHKSxcXG4rXFx0XFx0Lm5hbWVcXHRcXHRcXHQ9IFxcXCJSZWFsdGVrIFJUTDgyNjEgMTBHYnBzIFBIWVxcXCIsXFxuK1xcdFxcdC5wcm9iZVxcdFxcdFxcdD0gcnRsODI2MXhfcHJvYmUsXFxuK1xcdFxcdC5jb25maWdfaW5pdFxcdFxcdD0gcnRsODI2MXhfY29uZmlnX2luaXQsXFxuK1xcdFxcdC5nZXRfZmVhdHVyZXNcXHRcXHQ9IHJ0bDgyNjF4X2dldF9mZWF0dXJlcyxcXG4rXFx0XFx0LmNvbmZpZ19hbmVnXFx0XFx0PSBydGw4MjYxeF9jb25maWdfYW5lZyxcXG4rXFx0XFx0LnJlYWRfc3RhdHVzXFx0XFx0PSBydGw4MjYxeF9yZWFkX3N0YXR1cyxcXG4rXFx0XFx0LmNvbmZpZ19pbnRyXFx0XFx0PSBydGw4MjYxeF9jb25maWdfaW50cixcXG4rXFx0XFx0LmhhbmRsZV9pbnRlcnJ1cHRcXHQ9IHJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHQsXFxuK1xcdFxcdC5zb2Z0X3Jlc2V0XFx0XFx0PSBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0LFxcbitcXHRcXHQuc3VzcGVuZFxcdFxcdD0gZ2VucGh5X2M0NV9wbWFfc3VzcGVuZCxcXG4rXFx0XFx0LnJlc3VtZVxcdFxcdFxcdD0gZ2VucGh5X2M0NV9wbWFfcmVzdW1lLFxcbiBcXHR9LFxcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5pbmRleCBiZWZmMWQ2ZmNjN2NkYS4uNTdjZjlhYzM1MjRkMjIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5AQCAtMjMxNCw2ICsyMzE0LDcgQEAgaW50IGdlbnBoeV9jMzdfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCAqY2hhbmdlZCk7XFxuIC8qIENsYXVzZSA0NSBQSFkgKi9cXG4gaW50IGdlbnBoeV9jNDVfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbiBpbnQgZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgcmVzdGFydCk7XFxuK2ludCBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbiBpbnQgZ2VucGh5X2M0NV9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuIGludCBnZW5waHlfYzQ1X3JlYWRfbGluayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG4gaW50IGdlbnBoeV9jNDVfcmVhZF9scGEoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXFxuaW5kZXggYjI1NDFjOTQ4ZmMxZWIuLjA2ZjRiYzNjMjBjNzE3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXFxuQEAgLTMzMiw4ICszMzIsMTMgQEBcXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81R1xcdDB4MDA4MFxcdC8qIEFkdmVydGlzZSAyLjVHQkFTRS1UICovXFxuICNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX0FEVjVHXFx0MHgwMTAwXFx0LyogQWR2ZXJ0aXNlIDVHQkFTRS1UICovXFxuICNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX0FEVjEwR1xcdDB4MTAwMFxcdC8qIEFkdmVydGlzZSAxMEdCQVNFLVQgKi9cXG4rI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFXFx0MHg4MDAwXFx0LyogTWFzdGVyL3NsYXZlIG1hbnVhbCBjb25maWcgZW5hYmxlICovXFxuKyNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFXFx0MHg0MDAwXFx0LyogTWFzdGVyL3NsYXZlIGNvbmZpZyB2YWx1ZSAoMT1NYXN0ZXIpICovXFxuKyNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRVxcdDB4MjAwMFxcdC8qIE1hc3RlciBQcmVmZXJyZWQgVHlwZSAqL1xcbiBcXG4gLyogQU4gMTBHQkFTRS1UIHN0YXR1cyByZWdpc3Rlci4gKi9cXG4rI2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTVNfRkFVTFRcXHQweDgwMDBcXHQvKiBNYXN0ZXIvc2xhdmUgZmF1bHQgKi9cXG4rI2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTVNfUkVTXFx0MHg0MDAwXFx0LyogTWFzdGVyL3NsYXZlIHJlc29sdXRpb24gKDE9TWFzdGVyKSAqL1xcbiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9MUDJfNUdcXHQweDAwMjAgIC8qIExQIGlzIDIuNUdCVCBjYXBhYmxlICovXFxuICNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX0xQNUdcXHRcXHQweDAwNDAgIC8qIExQIGlzIDVHQlQgY2FwYWJsZSAqL1xcbiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9MUFRSUlxcdDB4MDIwMFxcdC8qIExQIHRyYWluaW5nIHJlc2V0IHJlcS4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NDc6NTguMzc3Mjc1NTI2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjEyNzg5OTI3MTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlJFQUxURUtfUEhZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldFwiLFxuICAgIFwiZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmVcIixcbiAgICBcImdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmVcIixcbiAgICBcInJ0bDgyNjF4X3Byb2JlXCIsXG4gICAgXCJydGw4MjYxeF9nZXRfZmVhdHVyZXNcIixcbiAgICBcInJ0bDgyNjF4X3JlYWRfc3RhdHVzXCIsXG4gICAgXCJydGw4MjYxeF92ZXJpZnlfZmlybXdhcmVcIixcbiAgICBcInJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnlcIixcbiAgICBcInJ0bDgyNjF4X2Z3X2xvYWRcIixcbiAgICBcInJ0bDgyNjF4X2NvbmZpZ19pbnRyXCIsXG4gICAgXCJydGw4MjYxeF9oYW5kbGVfaW50ZXJydXB0XCIsXG4gICAgXCJydGw4MjYxeF9jb25maWdfYW5lZ1wiLFxuICAgIFwicnRsODI2MXhfY29uZmlnX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBSZWFsdGVrIFJUTDgyNjEgMTBHYnBzIFBIWSBhbmQgaW50cm9kdWNlcyBDbGF1c2UgNDUgUEhZIE1hc3Rlci9TbGF2ZSBjb25maWd1cmF0aW9uLiBUaGUgY29kZSBpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBieSBlbXVsYXRpbmcgYSBVU0IgbmV0d29yayBhZGFwdGVyIChlLmcuLCBBU0lYIG9yIFNNU0MpIHRoYXQgZXhwb3NlcyBhbiBNRElPIGJ1cywgYW5kIHJlc3BvbmRpbmcgdG8gUEhZIElEIHJlYWRzIHdpdGggdGhlIFJUTDgyNjEgSUQuIFRoZSBkcml2ZXIgYWxzbyBwYXJzZXMgZmlybXdhcmUsIHdoaWNoIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDVjZDBhZDAwMjNlNTUzNjAyNGRmNGFlYTZhMzZkNjRjYzBkM2NlZTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyMSAxNTo0Nzo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXG5pbmRleCAxMjY5NTE3NDE0Mjg4Zi4uODcwOTIwMzExZjlhMDEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXG5AQCAtMzg0LDYgKzM4NCwxMTkgQEAgaW50IGdlbnBoeV9jNDVfY2hlY2tfYW5kX3Jlc3RhcnRfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIHJlc3RhcnQpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfY2hlY2tfYW5kX3Jlc3RhcnRfYW5lZyk7XG4gXG4rLyoqXG4rICogZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldCAtIHNvZnR3YXJlIHJlc2V0IHRoZSBQSFkgdmlhIENsYXVzZSA0NSBQTUEvUE1EIGNvbnRyb2wgcmVnaXN0ZXJcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxuKyAqL1xuK2ludCBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldCwgdmFsO1xuK1xuK1x0cmV0ID0gcGh5X3NldF9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19DVFJMMSxcbitcdFx0XHQgICAgICAgTURJT19DVFJMMV9SRVNFVCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsXG4rXHRcdFx0XHRcdCBNRElPX0NUUkwxLCB2YWwsXG4rXHRcdFx0XHRcdCAhKHZhbCBcdTAwMjYgTURJT19DVFJMMV9SRVNFVCksXG4rXHRcdFx0XHRcdCA1MDAwLCA2MDAwMDAsIHRydWUpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0KTtcbitcbisvKipcbisgKiBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZSAtIENvbmZpZ3VyZSBNYXN0ZXIvU2xhdmUgc2V0dGluZyBmb3IgQzQ1IFBIWXNcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKlxuKyAqIERlc2NyaXB0aW9uOiBDb25maWd1cmUgdGhlIGZvcmNlZCBvciBwcmVmZXJyZWQgTWFzdGVyL1NsYXZlIHJvbGVcbisgKiAxMEdCQVNFLVQgY29udHJvbCByZWdpc3RlciAoTU1EIDcsIFJlZ2lzdGVyIDB4MDAyMCkgYWNjb3JkaW5nIHRvXG4rICogSUVFRSA4MDIuMyBzdGFuZGFyZHMuXG4rICpcbisgKiBSZXR1cm46IG5lZ2F0aXZlIGVycm5vIGNvZGUgb24gZmFpbHVyZSwgMCBpZiBNYXN0ZXIvU2xhdmUgZGlkbid0IGNoYW5nZSxcbisgKiBvciAxIGlmIE1hc3Rlci9TbGF2ZSBtb2RlcyBjaGFuZ2VkLlxuKyAqL1xuK3N0YXRpYyBpbnQgZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHR1MTYgY3RsID0gMDtcbitcbitcdHN3aXRjaCAocGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9zZXQpIHtcbitcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfUFJFRkVSUkVEOlxuK1x0XHRjdGwgPSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfUE9SVF9UWVBFO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9QUkVGRVJSRUQ6XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBNQVNURVJfU0xBVkVfQ0ZHX01BU1RFUl9GT1JDRTpcbitcdFx0Y3RsID0gTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRSB8IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfU0xBVkVfRk9SQ0U6XG4rXHRcdGN0bCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEU7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBNQVNURVJfU0xBVkVfQ0ZHX1VOS05PV046XG4rXHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfVU5TVVBQT1JURUQ6XG4rXHRcdHJldHVybiAwO1xuK1x0ZGVmYXVsdDpcbitcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcIlVuc3VwcG9ydGVkIE1hc3Rlci9TbGF2ZSBtb2RlXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX0NUUkwsXG4rXHRcdFx0XHQgICAgICBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFIHxcbitcdFx0XHRcdCAgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRSB8XG4rXHRcdFx0XHQgICAgICBNRElPX0FOXzEwR0JUX0NUUkxfTVNfUE9SVF9UWVBFLCBjdGwpO1xuK31cbitcbisvKipcbisgKiBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlIC0gcmVhZCBtYXN0ZXIvc2xhdmUgc3RhdHVzXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4rICpcbisgKiBEZXNjcmlwdGlvbjogUmVhZCB0aGUgTWFzdGVyL1NsYXZlIGNvbmZpZ3VyYXRpb24gYW5kIHN0YXR1c1xuKyAqIGZyb20gMTBHQkFTRS1UIGNvbnRyb2wvc3RhdHVzIHJlZ2lzdGVycyAoTU1EIDcsIFJlZyAweDAwMjAgYW5kIDB4MDAyMSkuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4rICovXG4rc3RhdGljIGludCBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHZhbDtcbitcbitcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19VTktOT1dOO1xuK1x0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9VTktOT1dOO1xuK1xuK1x0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfQ1RSTCk7XG4rXHRpZiAodmFsIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gdmFsO1xuK1xuK1x0aWYgKHZhbCBcdTAwMjYgTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRSkge1xuK1x0XHRpZiAodmFsIFx1MDAyNiBNRElPX0FOXzEwR0JUX0NUUkxfTVNfVkFMVUUpXG4rXHRcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX01BU1RFUl9GT1JDRTtcbitcdFx0ZWxzZVxuK1x0XHRcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9GT1JDRTtcbitcdH0gZWxzZSB7XG4rXHRcdGlmICh2YWwgXHUwMDI2IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19QT1JUX1RZUEUpXG4rXHRcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX01BU1RFUl9QUkVGRVJSRUQ7XG4rXHRcdGVsc2VcbitcdFx0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfU0xBVkVfUFJFRkVSUkVEO1xuK1x0fVxuK1xuK1x0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfU1RBVCk7XG4rXHRpZiAodmFsIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gdmFsO1xuK1xuK1x0aWYgKHZhbCBcdTAwMjYgTURJT19BTl8xMEdCVF9TVEFUX01TX0ZBVUxUKSB7XG4rXHRcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfRVJSO1xuK1x0fSBlbHNlIGlmIChwaHlkZXYtXHUwMDNlbGluaykge1xuK1x0XHRpZiAodmFsIFx1MDAyNiBNRElPX0FOXzEwR0JUX1NUQVRfTVNfUkVTKVxuK1x0XHRcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfTUFTVEVSO1xuK1x0XHRlbHNlXG4rXHRcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9TTEFWRTtcbitcdH0gZWxzZSB7XG4rXHRcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfVU5LTk9XTjtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiAvKipcbiAgKiBnZW5waHlfYzQ1X2FuZWdfZG9uZSAtIHJldHVybiBhdXRvLW5lZ290aWF0aW9uIGNvbXBsZXRlIHN0YXR1c1xuICAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuQEAgLTExOTIsNiArMTMwNSwxMCBAQCBpbnQgZ2VucGh5X2M0NV9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0XHRcdHJldCA9IGdlbnBoeV9jNDVfYmFzZXQxX3JlYWRfc3RhdHVzKHBoeWRldik7XG4gXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cmV0ID0gZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZShwaHlkZXYpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHR9XG4gXG4gXHRcdHBoeV9yZXNvbHZlX2FuZWdfbGlua21vZGUocGh5ZGV2KTtcbkBAIC0xMjI1LDYgKzEzNDIsMTQgQEAgaW50IGdlbnBoeV9jNDVfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdGlmIChyZXQgXHUwMDNlIDApXG4gXHRcdGNoYW5nZWQgPSB0cnVlO1xuIFxuK1x0aWYgKCFnZW5waHlfYzQ1X2Jhc2V0MV9hYmxlKHBoeWRldikpIHtcbitcdFx0cmV0ID0gZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmUocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRpZiAocmV0IFx1MDAzZSAwKVxuK1x0XHRcdGNoYW5nZWQgPSB0cnVlO1xuK1x0fVxuK1xuIFx0cmV0dXJuIGdlbnBoeV9jNDVfY2hlY2tfYW5kX3Jlc3RhcnRfYW5lZyhwaHlkZXYsIGNoYW5nZWQpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X2NvbmZpZ19hbmVnKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXG5pbmRleCBiNjVkMGY1ZmExYTAxNC4uMWMwYjljNDBhODFlNTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcbkBAIC04LDcgKzgsOSBAQFxuICAqIENvcHlyaWdodCAoYykgMjAwNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLlxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdG9wcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY3JjMzIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aHRvb2xfbmV0bGluay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZmlybXdhcmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtX3dha2VpcnEuaFx1MDAzZVxuQEAgLTE0MSw2ICsxNDMsMTAgQEBcbiAjZGVmaW5lIFJUTDgyMTFGX1BIWVNJQ0FMX0FERFJfV09SRDFcdFx0MTdcbiAjZGVmaW5lIFJUTDgyMTFGX1BIWVNJQ0FMX0FERFJfV09SRDJcdFx0MThcbiBcbisjZGVmaW5lIFJUTDgyNjFYX0VYVF9BRERSX1JFR1x0XHRcdDB4YTQzNlxuKyNkZWZpbmUgUlRMODI2MVhfRVhUX0RBVEFfUkVHXHRcdFx0MHhhNDM4XG4rI2RlZmluZSBSVExfODI2MVhfU1VCX1BIWV9JRF9BRERSXHRcdDB4ODAxZFxuK1xuICNkZWZpbmUgUlRMODIyWF9WTkQxX1NFUkRFU19PUFRJT05cdFx0XHQweDY5N2FcbiAjZGVmaW5lIFJUTDgyMlhfVk5EMV9TRVJERVNfT1BUSU9OX01PREVfTUFTS1x0XHRHRU5NQVNLKDUsIDApXG4gI2RlZmluZSBSVEw4MjJYX1ZORDFfU0VSREVTX09QVElPTl9NT0RFXzI1MDBCQVNFWF9TR01JSVx0XHQwXG5AQCAtMjUxLDYgKzI1Nyw3MCBAQFxuICNkZWZpbmUgUlRMXzgyMjFCX1ZNX0NHXHRcdFx0XHQweDAwMWNjODRhXG4gI2RlZmluZSBSVExfODI1MUJcdFx0XHRcdDB4MDAxY2M4NjJcbiAjZGVmaW5lIFJUTF84MjYxQ1x0XHRcdFx0MHgwMDFjYzg5MFxuKyNkZWZpbmUgUlRMXzgyNjFDX0NHXHRcdFx0XHQweDAwMWNjODk4XG4rXG4rI2RlZmluZSBSVEw4MjYxQ19DRV9NT0RFTFx0XHQweDAwXG4rI2RlZmluZSBSVEw4MjYxRF9NT0RFTFx0XHRcdDB4ODFcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9BVVRPTkVHX0VSUk9SXHRCSVQoMClcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9QQUdFX1JFQ1ZcdFx0QklUKDIpXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfQVVUT05FR19ET05FXHRCSVQoMylcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9MSU5LX0NIR1x0XHRCSVQoNClcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9QSFlfUkVHX0FDQ0VTU1x0QklUKDUpXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfUE1FXHRcdEJJVCg3KVxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX0FMRFBTX0NIR1x0XHRCSVQoOSlcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9KQUJCRVJcdFx0QklUKDEwKVxuK1xuKyNkZWZpbmUgUlRMODI2MVhfSU5UX01BU0tfREVGQVVMVFx0KFJUTDgyNjFYX0lOVF9BVVRPTkVHX0RPTkUgfCBcXFxuK1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0xJTktfQ0hHIHwgXFxcbitcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9BVVRPTkVHX0VSUk9SIHwgXFxcbitcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9KQUJCRVIpXG4rXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfTUFTS19BTExcdFx0KFJUTDgyNjFYX0lOVF9BVVRPTkVHX0VSUk9SIHwgXFxcbitcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9QQUdFX1JFQ1YgfCBcXFxuK1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8IFxcXG4rXHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfTElOS19DSEcgfCBcXFxuK1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX1BIWV9SRUdfQUNDRVNTIHwgXFxcbitcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9QTUUgfCBcXFxuK1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0FMRFBTX0NIRyB8IFxcXG4rXHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfSkFCQkVSKVxuK1xuKyNkZWZpbmUgRldfTUFJTl9NQUdJQ1x0XHRcdDB4NTI1NDRDMzhcbisjZGVmaW5lIEZXX1NVQl9NQUdJQ184MjYxQ1x0XHQweDMyMzYzMTQzXG4rI2RlZmluZSBSVEw4MjYxWF9QT0xMX1RJTUVPVVRfTVNcdDEwMFxuKyNkZWZpbmUgUlRMODI2MVhfTUFYX01NRF9ERVZcdFx0MzFcbitcbisjZGVmaW5lIFJUTDgyNjFDX0NFX0ZXX05BTUVcdFwicnRsX25pYy9ydGw4MjYxYy5iaW5cIlxuK01PRFVMRV9GSVJNV0FSRShSVEw4MjYxQ19DRV9GV19OQU1FKTtcbitcbitlbnVtIHJ0bDgyNjF4X2Z3X29wIHtcbitcdE9QX1dSSVRFID0gMHgwMCxcdC8qIFdyaXRlICovXG4rXHRPUF9QT0xMICA9IDB4MDIsXHQvKiBQb2xsaW5nICovXG4rfTtcbitcbitzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyIHtcbitcdF9fbGUzMiBtYWluX21hZ2ljO1x0LyogTWFpbiBtYWdpYyBudW1iZXIgKi9cbitcdF9fbGUzMiBzdWJfbWFnaWM7XHQvKiBTdWIgbWFnaWMgbnVtYmVyICovXG4rXHRfX2xlMTYgdmVyc2lvbl9tYWpvcjtcdC8qIE1ham9yIHZlcnNpb24gKi9cbitcdF9fbGUxNiB2ZXJzaW9uX21pbm9yO1x0LyogTWlub3IgdmVyc2lvbiAqL1xuK1x0X19sZTE2IG51bV9lbnRyaWVzO1x0LyogTnVtYmVyIG9mIGVudHJpZXMgKi9cbitcdF9fbGUxNiByZXNlcnZlZDtcdC8qIFJlc2VydmVkICovXG4rXHRfX2xlMzIgY3JjMzI7XHRcdC8qIENSQzMyIGNoZWNrc3VtICovXG4rfTtcbitcbitzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkge1xuK1x0X191OCAgdHlwZTtcdFx0LyogT3BlcmF0aW9uIHR5cGUgKE9QXyopICovXG4rXHRfX3U4ICBkZXY7XHRcdC8qIE1NRCBkZXZpY2UgKi9cbitcdF9fbGUxNiBhZGRyO1x0XHQvKiBSZWdpc3RlciBhZGRyZXNzICovXG4rXHRfX3U4ICBtc2I7XHRcdC8qIE1TQiBiaXQgcG9zaXRpb24gKi9cbitcdF9fdTggIGxzYjtcdFx0LyogTFNCIGJpdCBwb3NpdGlvbiAqL1xuK1x0X19sZTE2IHZhbHVlO1x0XHQvKiBWYWx1ZSB0byB3cml0ZS9jb21wYXJlICovXG4rXHRfX2xlMTYgdGltZW91dF9tcztcdC8qIFBvbGwgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKi9cbitcdF9fdTggIHBvbGxfc2V0O1x0XHQvKiBQb2xsIHVudGlsIGVxdWFsICgxKSBvciBub3QgZXF1YWwgKDApICovXG4rXHRfX3U4ICByZXNlcnZlZDtcdFx0LyogUmVzZXJ2ZWQgKi9cbit9O1xuK1xuKyNkZWZpbmUgRldfSEVBREVSX1NJWkVcdFx0c2l6ZW9mKHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIpXG4rI2RlZmluZSBGV19FTlRSWV9TSVpFXHRcdHNpemVvZihzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkpXG4gXG4gLyogUlRMODIxMUUgYW5kIFJUTDgyMTFGIHN1cHBvcnQgdXAgdG8gdGhyZWUgTEVEcyAqL1xuICNkZWZpbmUgUlRMODIxMXhfTEVEX0NPVU5UXHRcdFx0M1xuQEAgLTI3MCw2ICszNDAsMTEgQEAgc3RydWN0IHJ0bDgyMXhfcHJpdiB7XG4gXHR1MTYgaW5lcjtcbiB9O1xuIFxuK3N0cnVjdCBydGw4MjYxeF9wcml2IHtcbitcdGNvbnN0IGNoYXIgKmZ3X25hbWU7XG4rXHRib29sIGZ3X2xvYWRlZDtcbit9O1xuK1xuIHN0YXRpYyBpbnQgcnRsODIxeF9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4gXHRyZXR1cm4gX19waHlfcmVhZChwaHlkZXYsIFJUTDgyMXhfUEFHRV9TRUxFQ1QpO1xuQEAgLTMxMCw2ICszODUsMzI5IEBAIHN0YXRpYyBpbnQgcnRsODIxeF9tb2RpZnlfZXh0X3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IGV4dF9wYWdlLFxuIFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRwYWdlLCByZXQpO1xuIH1cbiBcbitzdGF0aWMgaW50IHJ0bDgyNjF4X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuK1x0c3RydWN0IHJ0bDgyNjF4X3ByaXYgKnByaXY7XG4rXHRpbnQgc3ViX3BoeV9pZCwgcmV0O1xuK1xuK1x0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwcml2KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHBoeWRldi1cdTAwM2Vwcml2ID0gcHJpdjtcbitcbitcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODI2MVhfRVhUX0FERFJfUkVHLFxuK1x0XHRcdCAgICBSVExfODI2MVhfU1VCX1BIWV9JRF9BRERSKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODI2MVhfRVhUX0RBVEFfUkVHKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRzdWJfcGh5X2lkID0gKHJldCBcdTAwM2VcdTAwM2UgOCkgXHUwMDI2IDB4ZmY7XG4rXG4rXHRzd2l0Y2ggKHN1Yl9waHlfaWQpIHtcbitcdGNhc2UgUlRMODI2MUNfQ0VfTU9ERUw6XG4rXHRcdHByaXYtXHUwMDNlZndfbmFtZSA9IFJUTDgyNjFDX0NFX0ZXX05BTUU7XG4rXHRcdHBoeWRldl9pbmZvKHBoeWRldiwgXCJSVEw4MjYxQyBkZXRlY3RlZCAoc3ViX2lkIDB4JTAyeClcXG5cIiwgc3ViX3BoeV9pZCk7XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSBSVEw4MjYxRF9NT0RFTDpcbitcdFx0cGh5ZGV2X2luZm8ocGh5ZGV2LCBcIlJUTDgyNjFEIGRldGVjdGVkIChzdWJfaWQgMHglMDJ4KVxcblwiLCBzdWJfcGh5X2lkKTtcbitcdFx0YnJlYWs7XG4rXG4rXHRkZWZhdWx0OlxuK1x0XHRwaHlkZXZfd2FybihwaHlkZXYsIFwiVW5rbm93biBzdWJfaWQgMHglMDJ4LCBkZWZhdWx0IGJlaGF2aW9yXFxuXCIsIHN1Yl9waHlfaWQpO1xuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bDgyNjF4X2dldF9mZWF0dXJlcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBnZW5waHlfYzQ1X3BtYV9yZWFkX2FiaWxpdGllcyhwaHlkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcdC8qXG4rXHQgKiBTdXBwbGVtZW50IE11bHRpLUdpZyBzcGVlZHMgdGhhdCBtYXkgbm90IGJlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWRcbitcdCAqIFJUTDgyNjFYIHN1cHBvcnRzIDIuNUcvNUcgaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgMTBHXG4rXHQgKi9cbitcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULFxuK1x0XHRcdCBwaHlkZXYtXHUwMDNlc3VwcG9ydGVkKTtcbitcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfNTAwMGJhc2VUX0Z1bGxfQklULFxuK1x0XHRcdCBwaHlkZXYtXHUwMDNlc3VwcG9ydGVkKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bDgyNjF4X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldCwgdmFsID0gMDtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkge1xuK1x0XHRyZXQgPSBnZW5waHlfYzQ1X2FuZWdfZG9uZShwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMixcbitcdFx0XHRcdFx0ICAgUlRMODIyWF9WTkQyX0MyMl9SRUcoTUlJX1NUQVQxMDAwKSk7XG4rXHRcdFx0aWYgKHZhbCBcdTAwM2MgMClcbitcdFx0XHRcdHJldHVybiB2YWw7XG4rXHRcdH1cbitcdH1cbitcbitcdG1paV9zdGF0MTAwMF9tb2RfbGlua21vZGVfbHBhX3QocGh5ZGV2LVx1MDAzZWxwX2FkdmVydGlzaW5nLCB2YWwpO1xuK1xuK1x0cmV0ID0gZ2VucGh5X2M0NV9yZWFkX3N0YXR1cyhwaHlkZXYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxuK3tcbitcdGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgKmhkcjtcbitcdHUzMiBtYWluX21hZ2ljLCBzdWJfbWFnaWM7XG4rXHR1MzIgY2FsY19jcmMsIGZpbGVfY3JjO1xuK1x0c2l6ZV90IGRhdGFfbGVuO1xuK1x0dTE2IG51bV9lbnRyaWVzO1xuK1xuK1x0aWYgKGZ3LVx1MDAzZXNpemUgXHUwMDNjIEZXX0hFQURFUl9TSVpFKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIkZpcm13YXJlIHRvbyBzbWFsbDogJXp1IGJ5dGVzXFxuXCIsIGZ3LVx1MDAzZXNpemUpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGhkciA9IChjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICopZnctXHUwMDNlZGF0YTtcbitcbitcdG1haW5fbWFnaWMgPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlbWFpbl9tYWdpYyk7XG4rXHRpZiAobWFpbl9tYWdpYyAhPSBGV19NQUlOX01BR0lDKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIkludmFsaWQgZmlybXdhcmUgbWFnaWM6IDB4JTA4eFxcblwiLCBtYWluX21hZ2ljKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRzdWJfbWFnaWMgPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlc3ViX21hZ2ljKTtcbitcdGlmIChzdWJfbWFnaWMgIT0gRldfU1VCX01BR0lDXzgyNjFDKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIkludmFsaWQgc3ViIG1hZ2ljOiAweCUwOHhcXG5cIiwgc3ViX21hZ2ljKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRudW1fZW50cmllcyA9IGxlMTZfdG9fY3B1KGhkci1cdTAwM2VudW1fZW50cmllcyk7XG4rXHRkYXRhX2xlbiA9IG51bV9lbnRyaWVzICogRldfRU5UUllfU0laRTtcbitcbitcdGlmIChmdy1cdTAwM2VzaXplICE9IHNpemVvZigqaGRyKSArIGRhdGFfbGVuKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIkZpcm13YXJlIHNpemUgbWlzbWF0Y2hcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0Y2FsY19jcmMgPSBjcmMzMih+MCwgZnctXHUwMDNlZGF0YSArIEZXX0hFQURFUl9TSVpFLCBkYXRhX2xlbikgXiB+MDtcbitcdGZpbGVfY3JjID0gbGUzMl90b19jcHUoaGRyLVx1MDAzZWNyYzMyKTtcbitcbitcdGlmIChjYWxjX2NyYyAhPSBmaWxlX2NyYykge1xuK1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJDUkMzMiBtaXNtYXRjaDogY2FsY3VsYXRlZD0weCUwOHggZmlsZT0weCUwOHhcXG5cIixcbitcdFx0XHQgICBjYWxjX2NyYywgZmlsZV9jcmMpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2VudHJ5ICplbnRyeSlcbit7XG4rXHR1MTYgYWRkciwgdmFsdWUsIHRpbWVvdXRfbXM7XG4rXHR1OCBkZXYsIG1zYiwgbHNiLCBwb2xsX3NldDtcbitcdHUzMiBiaXRzLCBleHBlY3RfdmFsO1xuK1x0aW50IHJldCwgdmFsO1xuK1xuK1x0ZGV2ID0gZW50cnktXHUwMDNlZGV2O1xuK1x0YWRkciA9IGxlMTZfdG9fY3B1KGVudHJ5LVx1MDAzZWFkZHIpO1xuK1x0bXNiID0gZW50cnktXHUwMDNlbXNiO1xuK1x0bHNiID0gZW50cnktXHUwMDNlbHNiO1xuK1x0dmFsdWUgPSBsZTE2X3RvX2NwdShlbnRyeS1cdTAwM2V2YWx1ZSk7XG4rXHR0aW1lb3V0X21zID0gbGUxNl90b19jcHUoZW50cnktXHUwMDNldGltZW91dF9tcyk7XG4rXHRwb2xsX3NldCA9IGVudHJ5LVx1MDAzZXBvbGxfc2V0O1xuK1xuK1x0aWYgKHRpbWVvdXRfbXMgPT0gMClcbitcdFx0dGltZW91dF9tcyA9IFJUTDgyNjFYX1BPTExfVElNRU9VVF9NUztcbitcbitcdGlmIChkZXYgXHUwMDNlIFJUTDgyNjFYX01BWF9NTURfREVWKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcImludmFsaWQgZmlybXdhcmUgTU1EIGRldmljZTogZGV2PSV1XFxuXCIsIGRldik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKG1zYiBcdTAwM2UgMTUgfHwgbHNiIFx1MDAzZSBtc2IpIHtcbitcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiaW52YWxpZCBmaXJtd2FyZSBiaXRzOiBtc2I9JXUsIGxzYj0ldVxcblwiLCBtc2IsIGxzYik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0c3dpdGNoIChlbnRyeS1cdTAwM2V0eXBlKSB7XG4rXHRjYXNlIE9QX1dSSVRFOlxuK1x0XHRyZXQgPSBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIGRldiwgYWRkcixcbitcdFx0XHRcdCAgICAgR0VOTUFTSyhtc2IsIGxzYiksICh2YWx1ZSBcdTAwM2NcdTAwM2MgbHNiKSBcdTAwMjYgR0VOTUFTSyhtc2IsIGxzYikpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSBPUF9QT0xMOlxuK1x0XHRiaXRzID0gR0VOTUFTSyhtc2IsIGxzYik7XG4rXHRcdGV4cGVjdF92YWwgPSAodmFsdWUgXHUwMDNjXHUwMDNjIGxzYikgXHUwMDI2IGJpdHM7XG4rXG4rXHRcdGlmIChwb2xsX3NldClcbitcdFx0XHRyZXQgPSBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgZGV2LCBhZGRyLCB2YWwsXG4rXHRcdFx0XHRcdFx0XHQodmFsIFx1MDAyNiBiaXRzKSA9PSBleHBlY3RfdmFsLFxuK1x0XHRcdFx0XHRcdFx0MTAwMCwgdGltZW91dF9tcyAqIDEwMDAsIGZhbHNlKTtcbitcdFx0ZWxzZVxuK1x0XHRcdHJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBkZXYsIGFkZHIsIHZhbCxcbitcdFx0XHRcdFx0XHRcdCh2YWwgXHUwMDI2IGJpdHMpICE9IGV4cGVjdF92YWwsXG4rXHRcdFx0XHRcdFx0XHQxMDAwLCB0aW1lb3V0X21zICogMTAwMCwgZmFsc2UpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdGJyZWFrO1xuK1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydGw4MjYxeF9md19sb2FkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHJ0bDgyNjF4X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSAqZW50cnk7XG4rXHRjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICpoZHI7XG4rXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xuK1x0aW50IHJldCwgaTtcbitcbitcdGlmICghcHJpdi1cdTAwM2Vmd19uYW1lKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldCA9IHJlcXVlc3RfZmlybXdhcmUoXHUwMDI2ZncsIHByaXYtXHUwMDNlZndfbmFtZSwgXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KTtcbitcdGlmIChyZXQpIHtcbitcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiRmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgJXM6ICVkXFxuXCIsIHByaXYtXHUwMDNlZndfbmFtZSwgcmV0KTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldCA9IHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZShwaHlkZXYsIGZ3KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gcmVsZWFzZV9mdztcbitcbitcdGhkciA9IChjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICopZnctXHUwMDNlZGF0YTtcbitcbitcdGVudHJ5ID0gKGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSAqKShmdy1cdTAwM2VkYXRhICsgRldfSEVBREVSX1NJWkUpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGUxNl90b19jcHUoaGRyLVx1MDAzZW51bV9lbnRyaWVzKTsgaSsrLCBlbnRyeSsrKSB7XG4rXHRcdHJldCA9IHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnkocGh5ZGV2LCBlbnRyeSk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJFbnRyeSAlZCBmYWlsZWQ6ICVkXFxuXCIsIGksIHJldCk7XG4rXHRcdFx0Z290byByZWxlYXNlX2Z3O1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRwcml2LVx1MDAzZWZ3X2xvYWRlZCA9IHRydWU7XG4rXG4rcmVsZWFzZV9mdzpcbitcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBydGw4MjYxeF9jb25maWdfaW50cihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRpZiAocGh5ZGV2LVx1MDAzZWludGVycnVwdHMgPT0gUEhZX0lOVEVSUlVQVF9FTkFCTEVEKSB7XG4rXHRcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lOU1IpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODIyMUJfVk5EMl9JTkVSLFxuK1x0XHRcdFx0ICAgIFJUTDgyNjFYX0lOVF9NQVNLX0RFRkFVTFQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5FUiwgMCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0cmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5TUik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBpcnFfc3RhdHVzO1xuK1xuK1x0aXJxX3N0YXR1cyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lOU1IpO1xuK1x0aWYgKGlycV9zdGF0dXMgXHUwMDNjIDApIHtcbitcdFx0cGh5X2Vycm9yKHBoeWRldik7XG4rXHRcdHJldHVybiBJUlFfTk9ORTtcbitcdH1cbitcbitcdGlmICghKGlycV9zdGF0dXMgXHUwMDI2IFJUTDgyNjFYX0lOVF9NQVNLX0FMTCkpXG4rXHRcdHJldHVybiBJUlFfTk9ORTtcbitcbitcdGlmIChpcnFfc3RhdHVzIFx1MDAyNiAoUlRMODI2MVhfSU5UX0xJTktfQ0hHIHwgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8XG4rXHQgICAgUlRMODI2MVhfSU5UX0FVVE9ORUdfRVJST1IgfCBSVEw4MjYxWF9JTlRfSkFCQkVSKSlcbitcdFx0cGh5X3RyaWdnZXJfbWFjaGluZShwaHlkZXYpO1xuK1xuK1x0cmV0dXJuIElSUV9IQU5ETEVEO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bDgyNjF4X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0dTE2IGFkdl8xZyA9IDA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gZ2VucGh5X2M0NV9jb25maWdfYW5lZyhwaHlkZXYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlYXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDBiYXNlVF9GdWxsX0JJVCxcbitcdFx0XHQgICAgICBwaHlkZXYtXHUwMDNlYWR2ZXJ0aXNpbmcpKVxuK1x0XHRhZHZfMWcgPSBBRFZFUlRJU0VfMTAwMEZVTEw7XG4rXHRpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMGJhc2VUX0hhbGZfQklULFxuK1x0XHRcdCAgICAgIHBoeWRldi1cdTAwM2VhZHZlcnRpc2luZykpXG4rXHRcdGFkdl8xZyB8PSBBRFZFUlRJU0VfMTAwMEhBTEY7XG4rXG4rXHRyZXQgPSBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfVkVORDIsXG4rXHRcdFx0XHQgICAgIFJUTDgyMlhfVk5EMl9DMjJfUkVHKE1JSV9DVFJMMTAwMCksXG4rXHRcdFx0XHQgICAgIEFEVkVSVElTRV8xMDAwRlVMTCB8IEFEVkVSVElTRV8xMDAwSEFMRixcbitcdFx0XHRcdCAgICAgYWR2XzFnKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRpZiAocmV0IFx1MDAzZSAwKVxuK1x0XHRyZXR1cm4gZ2VucGh5X2M0NV9yZXN0YXJ0X2FuZWcocGh5ZGV2KTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bDgyNjF4X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHJ0bDgyNjF4X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcbitcdC8qIFRoZSBmaXJtd2FyZSBwYXJhbWV0ZXJzIGFyZSBwcmVzZXJ2ZWQgYWNyb3NzIElFRUUgc29mdCByZXNldHMgYW5kXG4rXHQgKiBzdXNwZW5kL3Jlc3VtZSBjeWNsZXMuIFJlbG9hZGluZyBpcyBvbmx5IG5lY2Vzc2FyeSBhZnRlciBhIHBvd2VyXG4rXHQgKiBjeWNsZSBvciBoYXJkIHJlc2V0LlxuK1x0ICovXG4rXHRpZiAocHJpdi1cdTAwM2Vmd19uYW1lIFx1MDAyNlx1MDAyNiAhcHJpdi1cdTAwM2Vmd19sb2FkZWQpXG4rXHRcdHJldHVybiBydGw4MjYxeF9md19sb2FkKHBoeWRldik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBydGw4MjF4X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuIFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuQEAgLTMwMDIsNiArMzQwMCwxOSBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgcmVhbHRla19kcnZzW10gPSB7XG4gXHRcdC5yZXN1bWVcdFx0PSBnZW5waHlfcmVzdW1lLFxuIFx0XHQucmVhZF9tbWRcdD0gZ2VucGh5X3JlYWRfbW1kX3Vuc3VwcG9ydGVkLFxuIFx0XHQud3JpdGVfbW1kXHQ9IGdlbnBoeV93cml0ZV9tbWRfdW5zdXBwb3J0ZWQsXG4rXHR9LCB7XG4rXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChSVExfODI2MUNfQ0cpLFxuK1x0XHQubmFtZVx0XHRcdD0gXCJSZWFsdGVrIFJUTDgyNjEgMTBHYnBzIFBIWVwiLFxuK1x0XHQucHJvYmVcdFx0XHQ9IHJ0bDgyNjF4X3Byb2JlLFxuK1x0XHQuY29uZmlnX2luaXRcdFx0PSBydGw4MjYxeF9jb25maWdfaW5pdCxcbitcdFx0LmdldF9mZWF0dXJlc1x0XHQ9IHJ0bDgyNjF4X2dldF9mZWF0dXJlcyxcbitcdFx0LmNvbmZpZ19hbmVnXHRcdD0gcnRsODI2MXhfY29uZmlnX2FuZWcsXG4rXHRcdC5yZWFkX3N0YXR1c1x0XHQ9IHJ0bDgyNjF4X3JlYWRfc3RhdHVzLFxuK1x0XHQuY29uZmlnX2ludHJcdFx0PSBydGw4MjYxeF9jb25maWdfaW50cixcbitcdFx0LmhhbmRsZV9pbnRlcnJ1cHRcdD0gcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdCxcbitcdFx0LnNvZnRfcmVzZXRcdFx0PSBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0LFxuK1x0XHQuc3VzcGVuZFx0XHQ9IGdlbnBoeV9jNDVfcG1hX3N1c3BlbmQsXG4rXHRcdC5yZXN1bWVcdFx0XHQ9IGdlbnBoeV9jNDVfcG1hX3Jlc3VtZSxcbiBcdH0sXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxuaW5kZXggYmVmZjFkNmZjYzdjZGEuLjU3Y2Y5YWMzNTI0ZDIyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9waHkuaFxuQEAgLTIzMTQsNiArMjMxNCw3IEBAIGludCBnZW5waHlfYzM3X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgKmNoYW5nZWQpO1xuIC8qIENsYXVzZSA0NSBQSFkgKi9cbiBpbnQgZ2VucGh5X2M0NV9yZXN0YXJ0X2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gaW50IGdlbnBoeV9jNDVfY2hlY2tfYW5kX3Jlc3RhcnRfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIHJlc3RhcnQpO1xuK2ludCBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X2FuZWdfZG9uZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgZ2VucGh5X2M0NV9yZWFkX2xpbmsoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gaW50IGdlbnBoeV9jNDVfcmVhZF9scGEoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbmluZGV4IGIyNTQxYzk0OGZjMWViLi4wNmY0YmMzYzIwYzcxNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbkBAIC0zMzIsOCArMzMyLDEzIEBAXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81R1x0MHgwMDgwXHQvKiBBZHZlcnRpc2UgMi41R0JBU0UtVCAqL1xuICNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX0FEVjVHXHQweDAxMDBcdC8qIEFkdmVydGlzZSA1R0JBU0UtVCAqL1xuICNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX0FEVjEwR1x0MHgxMDAwXHQvKiBBZHZlcnRpc2UgMTBHQkFTRS1UICovXG4rI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFXHQweDgwMDBcdC8qIE1hc3Rlci9zbGF2ZSBtYW51YWwgY29uZmlnIGVuYWJsZSAqL1xuKyNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFXHQweDQwMDBcdC8qIE1hc3Rlci9zbGF2ZSBjb25maWcgdmFsdWUgKDE9TWFzdGVyKSAqL1xuKyNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRVx0MHgyMDAwXHQvKiBNYXN0ZXIgUHJlZmVycmVkIFR5cGUgKi9cbiBcbiAvKiBBTiAxMEdCQVNFLVQgc3RhdHVzIHJlZ2lzdGVyLiAqL1xuKyNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX01TX0ZBVUxUXHQweDgwMDBcdC8qIE1hc3Rlci9zbGF2ZSBmYXVsdCAqL1xuKyNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX01TX1JFU1x0MHg0MDAwXHQvKiBNYXN0ZXIvc2xhdmUgcmVzb2x1dGlvbiAoMT1NYXN0ZXIpICovXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTFAyXzVHXHQweDAwMjAgIC8qIExQIGlzIDIuNUdCVCBjYXBhYmxlICovXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTFA1R1x0XHQweDAwNDAgIC8qIExQIGlzIDVHQlQgY2FwYWJsZSAqL1xuICNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX0xQVFJSXHQweDAyMDBcdC8qIExQIHRyYWluaW5nIHJlc2V0IHJlcS4gKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjQ3OjU4LjM3NzI3NjgzNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5MTE2MTM5OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBhdGNoIFJlYWNoYWJpbGl0eSBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBtb2RpZnlpbmcgYGRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNgIGFuZCBgZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNgLiBJdCdzIGFkZGluZyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw4MjYxIDEwR2JwcyBQSFkgYW5kIHNvbWUgZ2VuZXJpYyBDbGF1c2UgNDUgTWFzdGVyL1NsYXZlIGNvbmZpZ3VyYXRpb24uIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgaG93IGVhc2lseSBjYW4gSSB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoIGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZywgbGlrZSBRRU1VP1xuXG5JIGtub3cgUEhZIGRyaXZlcnMgYXJlIHR5cGljYWxseSBhc3NvY2lhdGVkIHdpdGggRXRoZXJuZXQgZHJpdmVycy4gUUVNVSBoYXMgdmFyaW91cyBlbXVsYXRlZCBuZXR3b3JrIGRldmljZXMgbGlrZSBlMTAwMCwgdmlydGlvLW5ldCwgZXRjLiBUaGUgcmVhbCBxdWVzdGlvbiBpcywgZG8gKmFueSogb2YgdGhvc2UgUUVNVS1lbXVsYXRlZCBkZXZpY2VzIHVzZSB0aGUgUEhZIHN1YnN5c3RlbSwgYW5kIHNwZWNpZmljYWxseSwgdGhlIFJlYWx0ZWsgZHJpdmVyIG9yIENsYXVzZSA0NSBQSFlzPyBUaGF0J3MgdGhlIGtleS5cblxuUEhZcyB1c3VhbGx5IGhvb2sgdXAgdG8gTURJTyBidXNlcy4gSW4gUUVNVSwgY2FuIHdlIGVtdWxhdGUgYW4gTURJTyBidXMgc29tZWhvdz8gTWF5YmUgdGhyb3VnaCBjZXJ0YWluIG5ldHdvcmsgZHJpdmVycyBvciBkdW1teSBNRElPIGRldmljZXM/IEhtbSwgSSBrbm93IHN5emthbGxlciBoYXMgYSB2aXJ0dWFsIE1ESU8gYnVzLi4uIG9yIGNvdWxkIHdlIHVzZSBhIGRyaXZlciBsaWtlIGBtYWNiYCBvciBgZmVjYCwgYXNzdW1pbmcgdGhvc2UgYXJlIGVtdWxhdGVkPyBUaGUgdHJpY2t5IHBhcnQgaXMsIGhvdyBkbyB5b3UgZWFzaWx5ICp0cmlnZ2VyKiBzcGVjaWZpYyBQSFkgZHJpdmVycyB1bmxlc3MgeW91IGNhbiBkaXJlY3RseSBpbnN0YW50aWF0ZSB0aGVtIHZpYSBNRElPP1xuXG5Ib2xkIG9uLi4uIEknbSB3cmFja2luZyBteSBicmFpbiBmb3Igc3l6a2FsbGVyIHByaW1pdGl2ZXMuLi4gRG9lcyBpdCBoYXZlIGFueXRoaW5nIGxpa2UgYHN5el9nZW5ldGxpbmtfLi4uYCBvciBzb21ldGhpbmcgd2l0aCBgdHVuYD8gTm8sIHRoYXQncyBub3QgaXQuIFBIWSBkZXZpY2VzIGFyZSBhbG1vc3QgYWx3YXlzIHByb2JlZCB2aWEgTURJTy4gU28sIGNhbiBzeXprYWxsZXIgKmluaXRpYXRlKiBNRElPIGJ1cyBwcm9iaW5nP1xuXG5MZXQncyBzZWUuLi4gRG9lcyBzeXprYWxsZXIgb2ZmZXIgYW55IGBzeXpfbWRpb18uLi5gIGNhbGxzPyBBbnkgcHNldWRvLXN5c2NhbGxzIGZvciBNRElPPyBPciwgY2FuIHdlIGV2ZW4gaW5zdGFudGlhdGUgUEhZcyBkaXJlY3RseT8gQWghIE1heWJlIGBuZXRsaW5rYCBjb3VsZCB0YWxrIHRvIGBldGh0b29sYCB3aGljaCBtaWdodCAqcmVhY2gqIHRoZSBQSFlzLCBidXQgd2UnZCBzdGlsbCBuZWVkIGEgUEhZIGRldmljZSB0byAqZXhpc3QqIGluIHRoZSBmaXJzdCBwbGFjZS5cblxuRG9lcyBRRU1VIGV2ZW4gKmVtdWxhdGUqIHRoZSBSVEw4MjYxPyBQcm9iYWJseSBub3QuIFNvLCB0aGUgYmlnZ2VyIHF1ZXN0aW9uIGlzLCBjYW4gd2UgaW5zdGFudGlhdGUgYSBQSFkgZGV2aWNlIHZpYSAqc29tZSoga2luZCBvZiBzb2Z0d2FyZSBpbnRlcmZhY2U/IEkgbmVlZCB0byBmaW5kIGEgd2F5IHRvIGdldCBhIFBIWSBpbnN0YW5jZSBhY3RpdmUuXG5cbk9rYXksIGxldCdzIHNlYXJjaCB0aGUga2VybmVsIHNvdXJjZSBmb3IgXCJtZGlvXCIgYW5kIFwicGh5XCIuIFNlZSBpZiB0aGVyZSdzIGEgdmlydHVhbCBNRElPIGJ1cyBvciBzb21ldGhpbmcgc2ltaWxhciB0aGF0IHdlIGNhbiBsZXZlcmFnZS4gQWhhISBIZXJlJ3MgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLW1vY2t1cC5jYCBhbmQgYGRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuY2AuIEludGVyZXN0aW5nLiBNYXliZSB0aGVzZSBhcmUgdGhlIGtleXMgdG8gaW5zdGFudGlhdGluZyBhIFBIWSBkZXZpY2UuIE5vdywgSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHdlIGNhbiBhY3R1YWxseSAqaW5zdGFudGlhdGUqIGEgUEhZIGRldmljZSB1c2luZyB0aGVzZS4gVGhpcyBjb3VsZCBiZSBteSBwYXRoIHRvIHRlc3RpbmcgdGhpcyBwYXRjaCBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzY4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NDg6MDguMjg4ODkzMDA5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzODQyODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDQ3MjcgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT00PWxpYnBoeS15XFx0XFx0XFx0Oj0gcGh5Lm8gcGh5LWM0NS5vIHBoeS1jb3JlLm8gcGh5X2RldmljZS5vIFxcXFxcXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtNS1cXHRcXHRcXHRcXHQgICBsaW5rbW9kZS5vIHBoeV9saW5rX3RvcG9sb2d5Lm8gXFxcXFxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo2OlxcdFxcdFxcdFxcdCAgIHBoeV9jYXBzLm8gbWRpb19idXNfcHJvdmlkZXIubyBwaHlfcG9ydC5vIFxcXFxcXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6NzpcXHRcXHRcXHRcXHQgICBtZGlvX2RldmljZS5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTgtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MTY9bGlicGh5LSQoQ09ORklHX09QRU5fQUxMSUFOQ0VfSEVMUEVSUykgKz0gb3Blbl9hbGxpYW5jZV9oZWxwZXJzLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMTctXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19QSFlMSUIpXFx0XFx0Kz0gbWRpb19idXMub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0xOS1vYmotJChDT05GSUdfUEhZTElOSylcXHRcXHQrPSBwaHlsaW5rLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MjA9b2JqLSQoQ09ORklHX1BIWUxJQilcXHRcXHQrPSBsaWJwaHkub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfUEhZTElCKVxcdFxcdCs9IG1kaW9fZGV2cmVzLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMjItb2JqLSQoQ09ORklHX1BIWV9QQUNLQUdFKVxcdCs9IHBoeV9wYWNrYWdlLm9cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM9MjUyPXN0YXRpYyB1MzIgYWRpbl9nZXRfcmVnX3ZhbHVlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTI1Ni17XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzoyNTc6XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy0yNTgtXFx0dTMyIHZhbDtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM9NTAxPXN0YXRpYyBpbnQgYWRpbl9jb25maWdfY2xrX291dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNTAyLXtcXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjUwMzpcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTUwNC1cXHRjb25zdCBjaGFyICp2YWwgPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYz01Mjg9c3RhdGljIGludCBhZGluX2NvbmZpZ196cHRtMTAwKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy01Mjkte1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6NTMwOlxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNTMxLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYz02NDg9c3RhdGljIGludCBhZGluX3JlYWRfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZhZCwgdTE2IHJlZ251bSlcXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTY0OS17XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo2NTA6XFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi1cXHUwMDNlbWRpby5idXM7XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo2NTE6XFx0aW50IHBoeV9hZGRyID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHI7XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy02NTItXFx0aW50IGFkaW5fcmVnbnVtO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy02NTgtXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo2NTk6XFx0ZXJyID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5X2FkZHIsIEFESU4xMzAwX01JSV9FWFRfUkVHX1BUUixcXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTY2MC1cXHRcXHRcXHQgICAgICBhZGluX3JlZ251bSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTY2My1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjY2NDpcXHRyZXR1cm4gX19tZGlvYnVzX3JlYWQoYnVzLCBwaHlfYWRkciwgQURJTjEzMDBfTUlJX0VYVF9SRUdfREFUQSk7XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy02NjUtfVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYz02Njc9c3RhdGljIGludCBhZGluX3dyaXRlX21tZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgZGV2YWQsIHUxNiByZWdudW0sXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTY2OS17XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo2NzA6XFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi1cXHUwMDNlbWRpby5idXM7XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo2NzE6XFx0aW50IHBoeV9hZGRyID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHI7XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy02NzItXFx0aW50IGFkaW5fcmVnbnVtO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy02NzgtXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo2Nzk6XFx0ZXJyID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5X2FkZHIsIEFESU4xMzAwX01JSV9FWFRfUkVHX1BUUixcXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTY4MC1cXHRcXHRcXHQgICAgICBhZGluX3JlZ251bSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTY4My1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjY4NDpcXHRyZXR1cm4gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5X2FkZHIsIEFESU4xMzAwX01JSV9FWFRfUkVHX0RBVEEsIHZhbCk7XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy02ODUtfVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYz04OTA9c3RhdGljIGludCBhZGluX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy04OTEte1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6ODkyOlxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtODkzLVxcdHN0cnVjdCBhZGluX3ByaXYgKnByaXY7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jPTEwNTk9bW9kdWxlX3BoeV9kcml2ZXIoYWRpbl9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtMTA2MC1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjEwNjE6c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhZGluX3RibFtdID0ge1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtMTA2Mi1cXHR7IFBIWV9JRF9NQVRDSF9NT0RFTChQSFlfSURfQURJTjEyMDApIH0sXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTEwNjYtXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzoxMDY3Ok1PRFVMRV9ERVZJQ0VfVEFCTEUobWRpbywgYWRpbl90YmwpO1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtMTA2OC1NT0RVTEVfREVTQ1JJUFRJT04oXFxcIkFuYWxvZyBEZXZpY2VzIEluZHVzdHJpYWwgRXRoZXJuZXQgUEhZIGRyaXZlclxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmM9MjQ0PXN0YXRpYyBpbnQgYWRpbl9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTI0Ni1cXHRzdHJ1Y3QgYWRpbl9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jOjI0NzpcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0yNDgtXFx0aW50IHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jPTMwOT1zdGF0aWMgaW50IGFkaW5fcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0zMTAte1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jOjMxMTpcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0zMTItXFx0c3RydWN0IGFkaW5fcHJpdiAqcHJpdjtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jPTM0Mz1tb2R1bGVfcGh5X2RyaXZlcihhZGluX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMzQ0LVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jOjM0NTpzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGFkaW5fdGJsW10gPSB7XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMzQ2LVxcdHsgUEhZX0lEX01BVENIX01PREVMKFBIWV9JRF9BRElOMTEwMCkgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTM1MS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYzozNTI6TU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBhZGluX3RibCk7XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMzUzLU1PRFVMRV9ERVNDUklQVElPTihcXFwiQW5hbG9nIERldmljZXMgSW5kdXN0cmlhbCBFdGhlcm5ldCBUMUwgUEhZIGRyaXZlclxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYz02NTI9c3RhdGljIGlycXJldHVybl90IGFuODgwMXJfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy02NjctXFx0aWYgKGlycV9zdGF0dXMgXFx1MDAyNiBBTjg4MDFfSVJRX1dBS0VfTUFHSUNQS1QpIHtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jOjY2ODpcXHRcXHRwbV93YWtldXBfZXZlbnQoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYsIDApO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtNjY5LVxcdFxcdGlycV9oYW5kbGVkID0gdHJ1ZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM9NjgwPXN0YXRpYyB2b2lkIGFuODgwMXJfZ2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy02ODgtXFx0ICovXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzo2ODk6XFx0aWYgKCFkZXZpY2VfY2FuX3dha2V1cChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldikpIHtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTY5MC1cXHRcXHR3b2wtXFx1MDAzZXN1cHBvcnRlZCA9IDA7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jPTcwOD1zdGF0aWMgaW50IGFuODgwMXJfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy03MTYtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzo3MTc6XFx0aWYgKCFkZXZpY2VfY2FuX3dha2V1cChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldikpXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy03MTgtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy03NzgtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzo3Nzk6XFx0cmV0dXJuIGRldmljZV9zZXRfd2FrZXVwX2VuYWJsZShcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldixcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTc4MC1cXHRcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2V3YWtlX21hZ2ljX2VuYWJsZWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYz03ODM9c3RhdGljIGludCBhbjg4MDFyX29mX2luaXRfbGVkcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCAqbGVkX2NmZylcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTc4NC17XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzo3ODU6XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy03ODYtXFx0c3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi1cXHUwMDNlb2Zfbm9kZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM9MTAzND1zdGF0aWMgaW50IGFuODgwMXJfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTEwMzUte1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM6MTAzNjpcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTEwMzctXFx0c3RydWN0IGFuODgwMXJfcHJpdiAqcHJpdjtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM9MTA2MD1zdGF0aWMgaW50IGFuODgwMXJfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0xMDY3LVxcdCAqL1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM6MTA2ODpcXHRpZiAoZGV2aWNlX21heV93YWtldXAoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYpKSB7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0xMDY5LVxcdFxcdHByaXYtXFx1MDAzZXdha2VfbG5rY2hnX2VuYWJsZWQgPSBmYWxzZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM9MTA5MT1zdGF0aWMgaW50IGFuODgwMXJfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTExMDItXFx0ICovXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzoxMTAzOlxcdGlmIChkZXZpY2VfbWF5X3dha2V1cChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldikpIHtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTExMDQtXFx0XFx0cHJpdi1cXHUwMDNld2FrZV9sbmtjaGdfZW5hYmxlZCA9IHRydWU7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jPTExNDY9bW9kdWxlX3BoeV9kcml2ZXIoYWlyb2hhX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0xMTQ3LVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM6MTE0ODpzdGF0aWMgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGFuODgwMV90YmxbXSA9IHtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTExNDktXFx0eyBQSFlfSURfTUFUQ0hfTU9ERUwoQU44ODAxUl9QSFlfSUQpIH0sXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTExNTEtfTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jOjExNTI6TU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBhbjg4MDFfdGJsKTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTExNTMtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz0xOTc9c3RydWN0IGVuODgxMWhfcHJpdiB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yMDMtXFx0dW5zaWduZWQgaW50XFx0XFx0Y2tvX2lzX2VuYWJsZWQ7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MjA0OlxcdHN0cnVjdCBtZGlvX2RldmljZVxcdCpwYnVzZGV2O1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTIwNS19O1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9MjM5PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGVuODgxMWhfbGVkX3RyaWcgPSBCSVQoVFJJR0dFUl9ORVRERVZfRlVMTF9EVVBMRVgpIHxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTI0Ny1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoyNDg6c3RhdGljIGludCBfX2Fpcl9wYnVzX3JlZ193cml0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMjQ5LVxcdFxcdFxcdFxcdHUzMiBwYnVzX3JlZywgdTMyIHBidXNfZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTI1Mi1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoyNTM6XFx0cmV0ID0gX19tZGlvYnVzX3dyaXRlKG1kaW9kZXYtXFx1MDAzZWJ1cywgbWRpb2Rldi1cXHUwMDNlYWRkciwgQUlSX0VYVF9QQUdFX0FDQ0VTUyxcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yNTQtXFx0XFx0XFx0ICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX3JlZykpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMjU3LVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjI1ODpcXHRyZXQgPSBfX21kaW9idXNfd3JpdGUobWRpb2Rldi1cXHUwMDNlYnVzLCBtZGlvZGV2LVxcdTAwM2VhZGRyLCBBSVJfUEJVU19BRERSX0hJR0gsXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMjU5LVxcdFxcdFxcdCAgICAgIEZJRUxEX0dFVChBSVJfUEJVU19SRUdfQUREUl9ISUdIX01BU0ssIHBidXNfcmVnKSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yNjItXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MjYzOlxcdHJldCA9IF9fbWRpb2J1c193cml0ZShtZGlvZGV2LVxcdTAwM2VidXMsIG1kaW9kZXYtXFx1MDAzZWFkZHIsXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMjY0LVxcdFxcdFxcdCAgICAgIEZJRUxEX0dFVChBSVJfUEJVU19SRUdfQUREUl9MT1dfTUFTSywgcGJ1c19yZWcpLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMjY4LVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjI2OTpcXHRyZXR1cm4gX19tZGlvYnVzX3dyaXRlKG1kaW9kZXYtXFx1MDAzZWJ1cywgbWRpb2Rldi1cXHUwMDNlYWRkciwgQUlSX1BCVVNfREFUQV9ISUdILFxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTI3MC1cXHRcXHRcXHQgICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTMyNz1zdGF0aWMgaW50IGVuODgxMWhfd2FpdF9tY3VfcmVhZHkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTMzNS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzozMzY6XFx0LyogQmVjYXVzZSBvZiBtZGlvLWxvY2ssIG1heSBoYXZlIHRvIHdhaXQgZm9yIG11bHRpcGxlIGxvYWRzICovXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMzM3LVxcdHJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTM5Nz1zdGF0aWMgaW50IGFuODgxMWhiX2xvYWRfZmlsZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMzk5LXtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzo0MDA6XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNDAxLVxcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz00MTM9c3RhdGljIGludCBhbjg4MTFoYl9tY3VfYXNzZXJ0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy00MTctXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NDE4OlxcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNDE5LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNDMyLXVubG9jazpcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzo0MzM6XFx0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTQzNC1cXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9NDM3PXN0YXRpYyBpbnQgYW44ODExaGJfbWN1X2RlYXNzZXJ0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy00NDEtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NDQyOlxcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNDQzLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNDU3LXVubG9jazpcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzo0NTg6XFx0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTQ1OS1cXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9NTAyPXN0YXRpYyBpbnQgZW44ODExaF9sb2FkX2Zpcm13YXJlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNTAzLXtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzo1MDQ6XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNTA1LVxcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncxLCAqZncyO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9MTA3ND1zdGF0aWMgaW50IGFuODgxMWhiX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTA3NS17XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTA3NjpcXHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTA3Ny1cXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2O1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTA3OS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMDgwOlxcdHByaXYgPSBkZXZtX2t6YWxsb2MoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYsIHNpemVvZihzdHJ1Y3QgZW44ODExaF9wcml2KSxcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMDgxLVxcdFxcdFxcdCAgICBHRlBfS0VSTkVMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTEwOTItXFx0ICovXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTA5MzpcXHRtZGlvZGV2ID0gbWRpb19kZXZpY2VfY3JlYXRlKHBoeWRldi1cXHUwMDNlbWRpby5idXMsXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTA5NDpcXHRcXHRcXHRcXHQgICAgIHBoeWRldi1cXHUwMDNlbWRpby5hZGRyICsgRU44ODExSF9QQlVTX0FERFJfT0ZGUyk7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTA5NTpcXHRpZiAoSVNfRVJSKG1kaW9kZXYpKVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjEwOTY6XFx0XFx0cmV0dXJuIFBUUl9FUlIobWRpb2Rldik7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTA5Ny1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMDk4OlxcdHJldCA9IG1kaW9fZGV2aWNlX3JlZ2lzdGVyKG1kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTEwOTktXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTExMDEtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTEwMjpcXHRwcml2LVxcdTAwM2VwYnVzZGV2ID0gbWRpb2RldjtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMTAzLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTEyMy1cXHQvKiBDby1DbG9jayBPdXRwdXQgKi9cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMTI0OlxcdHJldCA9IGFuODgxMWhiX2Nsa19wcm92aWRlcl9zZXR1cChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldiwgXFx1MDAyNnByaXYtXFx1MDAzZWh3KTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMTI1LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMTM3LWVycl9kZXZfY3JlYXRlOlxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjExMzg6XFx0bWRpb19kZXZpY2VfcmVtb3ZlKG1kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTExMzktXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTE0MC1lcnJfZGV2X2ZyZWU6XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTE0MTpcXHRtZGlvX2RldmljZV9mcmVlKG1kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTExNDItXFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTExNDU9c3RhdGljIGludCBlbjg4MTFoX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMTQ5LVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjExNTA6XFx0cHJpdiA9IGRldm1fa3phbGxvYyhcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldiwgc2l6ZW9mKHN0cnVjdCBlbjg4MTFoX3ByaXYpLFxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTExNTEtXFx0XFx0XFx0ICAgIEdGUF9LRVJORUwpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTE3MS1cXHQvKiBDby1DbG9jayBPdXRwdXQgKi9cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMTcyOlxcdHJldCA9IGVuODgxMWhfY2xrX3Byb3ZpZGVyX3NldHVwKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2LCBcXHUwMDI2cHJpdi1cXHUwMDNlaHcpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTExNzMtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTExODY9c3RhdGljIGludCBhbjg4MTFoYl9jb25maWdfc2VyZGVzX3BvbGFyaXR5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTE4Ny17XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTE4ODpcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMTg5LVxcdHUzMiBwYnVzX3ZhbHVlID0gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTEyMTc9c3RhdGljIGludCBlbjg4MTFoX2NvbmZpZ19zZXJkZXNfcG9sYXJpdHkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMjE4LXtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMjE5OlxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTEyMjAtXFx0dW5zaWduZWQgaW50IHBvbCwgZGVmYXVsdF9wb2w7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz0xNDk4PXN0YXRpYyB2b2lkIGFuODgxMWhiX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTUwMi1cXHRpZiAocHJpdi1cXHUwMDNlcGJ1c2Rldikge1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjE1MDM6XFx0XFx0bWRpb19kZXZpY2VfcmVtb3ZlKHByaXYtXFx1MDAzZXBidXNkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjE1MDQ6XFx0XFx0bWRpb19kZXZpY2VfZnJlZShwcml2LVxcdTAwM2VwYnVzZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xNTA1LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTE1NTM9bW9kdWxlX3BoeV9kcml2ZXIoZW44ODExaF9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTE1NTQtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTU1NTpzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGVuODgxMWhfdGJsW10gPSB7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTU1Ni1cXHR7IFBIWV9JRF9NQVRDSF9NT0RFTChFTjg4MTFIX1BIWV9JRCkgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTE1NjAtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTU2MTpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGVuODgxMWhfdGJsKTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xNTYyLU1PRFVMRV9GSVJNV0FSRShFTjg4MTFIX01EMzJfRE0pO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FtZC5jPTExMj1tb2R1bGVfcGh5X2RyaXZlcihhbTc5Y19kcml2ZXJzKTtcXG5kcml2ZXJzL25ldC9waHkvYW1kLmMtMTEzLVxcbmRyaXZlcnMvbmV0L3BoeS9hbWQuYzoxMTQ6c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhbWRfdGJsW10gPSB7XFxuZHJpdmVycy9uZXQvcGh5L2FtZC5jLTExNS1cXHR7IFBIWV9JRF9BQzEwMUwsIDB4ZmZmZmZmZjAgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hbWQuYy0xMTktXFxuZHJpdmVycy9uZXQvcGh5L2FtZC5jOjEyMDpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFtZF90YmwpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2Zpcm13YXJlLmM9Mjk2PXN0YXRpYyBpbnQgYXFyX2Zpcm13YXJlX2xvYWRfbnZtZW0oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9maXJtd2FyZS5jLTMwMi1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfZmlybXdhcmUuYzozMDM6XFx0Y2VsbCA9IG52bWVtX2NlbGxfZ2V0KFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2LCBcXFwiZmlybXdhcmVcXFwiKTtcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfZmlybXdhcmUuYy0zMDQtXFx0aWYgKElTX0VSUihjZWxsKSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9maXJtd2FyZS5jPTMyND1zdGF0aWMgaW50IGFxcl9maXJtd2FyZV9sb2FkX2ZzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2Zpcm13YXJlLmMtMzI1LXtcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfZmlybXdhcmUuYzozMjY6XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2Zpcm13YXJlLmMtMzI3LVxcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfaHdtb24uYz0xOTA9aW50IGFxcl9od21vbl9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9od21vbi5jLTE5MS17XFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2h3bW9uLmM6MTkyOlxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9od21vbi5jLTE5My1cXHRzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jPTc1MD1zdGF0aWMgaW50IGFxcjEwN19jb25maWdfbWRpKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy03NTEte1xcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6NzUyOlxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwaHlkZXYtXFx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy03NTMtXFx0dTMyIG1kaV9jb25mO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYz0xMTY0PXN0YXRpYyBpbnQgYXFyMTA3X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTExNjctXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzoxMTY4OlxcdHBoeWRldi1cXHUwMDNlcHJpdiA9IGRldm1fa3phbGxvYyhcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldixcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTExNjktXFx0XFx0XFx0XFx0ICAgIHNpemVvZihzdHJ1Y3QgYXFyMTA3X3ByaXYpLCBHRlBfS0VSTkVMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM9MTU2NT1tb2R1bGVfcGh5X2RyaXZlcihhcXJfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTE1NjYtXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzoxNTY3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgYXFyX3RibFtdID0ge1xcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMTU2OC1cXHR7IFBIWV9JRF9NQVRDSF9NT0RFTChQSFlfSURfQVExMjAyKSB9LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0xNTg4LVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6MTU4OTpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFxcl90YmwpO1xcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMTU5MC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM9Mjk3PXN0YXRpYyBpbnQgYWVvbl9maXJtd2FyZV9ib290KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IHU4ICpkYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy0zMjEtXFx0aWYgKHZhbCBcXHUwMDNlIDEpIHtcXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjMyMjpcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIndyb25nIG9yaWdpbiBtZGlvX2luZGlyZWN0X3N0YXR1czogJXhcXFxcblxcXCIsIHZhbCk7XFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy0zMjMtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jPTM1Mj1zdGF0aWMgaW50IGFlb25fZmlybXdhcmVfbG9hZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtMzUzLXtcXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjM1NDpcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTM1NS1cXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYz02MDM9c3RhdGljIGludCBhczIxeHh4X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTYwNy1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjYwODpcXHRwcml2ID0gZGV2bV9remFsbG9jKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2LFxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtNjA5LVxcdFxcdFxcdCAgICBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtNjEzLVxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6NjE0OlxcdHJldCA9IGRldm1fbXV0ZXhfaW5pdChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldixcXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTYxNS1cXHRcXHRcXHQgICAgICBcXHUwMDI2cHJpdi1cXHUwMDNlaXBjX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYz0xMDc4PW1vZHVsZV9waHlfZHJpdmVyKGFzMjF4eHhfZHJpdmVycyk7XFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy0xMDc5LVxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6MTA4MDpzdGF0aWMgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGFzMjF4eHhfdGJsW10gPSB7XFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy0xMDgxLVxcdHsgUEhZX0lEX01BVENIX1ZFTkRPUihQSFlfVkVORE9SX0FFT05TRU1JKSB9LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy0xMDgzLX07XFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYzoxMDg0Ok1PRFVMRV9ERVZJQ0VfVEFCTEUobWRpbywgYXMyMXh4eF90YmwpO1xcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtMTA4NS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9heDg4Nzk2Yi5jPTEyMT1tb2R1bGVfcGh5X2RyaXZlcihhc2l4X2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L2F4ODg3OTZiLmMtMTIyLVxcbmRyaXZlcnMvbmV0L3BoeS9heDg4Nzk2Yi5jOjEyMzpzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGFzaXhfdGJsW10gPSB7XFxuZHJpdmVycy9uZXQvcGh5L2F4ODg3OTZiLmMtMTI0LVxcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9BU0lYX0FYODg3NzJBKSB9LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2F4ODg3OTZiLmMtMTI5LVxcbmRyaXZlcnMvbmV0L3BoeS9heDg4Nzk2Yi5jOjEzMDpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFzaXhfdGJsKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tY3lnbnVzLmM9MjMzPXN0YXRpYyBpbnQgYmNtX29tZWdhX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jLTIzNi1cXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jOjIzNzpcXHRwcml2ID0gZGV2bV9remFsbG9jKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jLTIzOC1cXHRpZiAoIXByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jLTI0Mi1cXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jOjI0MzpcXHRwcml2LVxcdTAwM2VzdGF0cyA9IGRldm1fa2NhbGxvYyhcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldixcXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jLTI0NC1cXHRcXHRcXHRcXHQgICBiY21fcGh5X2dldF9zc2V0X2NvdW50KHBoeWRldiksIHNpemVvZih1NjQpLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYz0yNTI9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGJjbV9jeWdudXNfcGh5X2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYy0yODAtXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYzoyODE6c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBiY21fY3lnbnVzX3BoeV90YmxbXSA9IHtcXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jLTI4Mi1cXHR7IFBIWV9JRF9CQ01fQ1lHTlVTLCAweGZmZmZmZmYwLCB9LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYy0yODUtfTtcXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jOjI4NjpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGJjbV9jeWdudXNfcGh5X3RibCk7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYy0yODctXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy0xMC0jaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM6MTE6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21kaW8uaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy0xMi0jaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYz0zMz1pbnQgYmNtX3BoeV93cml0ZV9leHAoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZywgdTE2IHZhbClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTM2LVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjM3OlxcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMzgtXFx0cmMgPSBfX2JjbV9waHlfd3JpdGVfZXhwKHBoeWRldiwgcmVnLCB2YWwpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjM5OlxcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy00MC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jPTYyPWludCBiY21fcGh5X3JlYWRfZXhwKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWcpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy02NS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzo2NjpcXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTY3LVxcdHJjID0gX19iY21fcGh5X3JlYWRfZXhwKHBoeWRldiwgcmVnKTtcXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzo2ODpcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtNjktXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYz05ND1pbnQgYmNtX3BoeV9tb2RpZnlfZXhwKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWcsIHUxNiBtYXNrLCB1MTYgc2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtOTctXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM6OTg6XFx0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy05OS1cXHRyZXQgPSBfX2JjbV9waHlfbW9kaWZ5X2V4cChwaHlkZXYsIHJlZywgbWFzaywgc2V0KTtcXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzoxMDA6XFx0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTEwMS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jPTI3MT1pbnQgYmNtX3BoeV9yZWFkX3JkYihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmRiKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMjc0LVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjI3NTpcXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTI3Ni1cXHRyZXQgPSBfX2JjbV9waHlfcmVhZF9yZGIocGh5ZGV2LCByZGIpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjI3NzpcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMjc4LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM9Mjk1PWludCBiY21fcGh5X3dyaXRlX3JkYihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmRiLCB1MTYgdmFsKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMjk4LVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjI5OTpcXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTMwMC1cXHRyZXQgPSBfX2JjbV9waHlfd3JpdGVfcmRiKHBoeWRldiwgcmRiLCB2YWwpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjMwMTpcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMzAyLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM9MzI3PWludCBiY21fcGh5X21vZGlmeV9yZGIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJkYiwgdTE2IG1hc2ssIHUxNiBzZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy0zMzAtXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM6MzMxOlxcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMzMyLVxcdHJldCA9IF9fYmNtX3BoeV9tb2RpZnlfcmRiKHBoeWRldiwgcmRiLCBtYXNrLCBzZXQpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjMzMzpcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMzM0LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM9NjYwPXN0YXRpYyBpbnQgX2JjbV9waHlfY2FibGVfdGVzdF9zdGFydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGlzX3JkYilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTY3MS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzo2NzI6XFx0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy02NzMtXFx0aWYgKGlzX3JkYikge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtNjkwLVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjY5MTpcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtNjkyLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM9NzQyPXN0YXRpYyBpbnQgX2JjbV9waHlfY2FibGVfdGVzdF9nZXRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy03NDgtXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM6NzQ5OlxcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtNzUwLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtNzk5LVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjgwMDpcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtODAxLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktcHRwLmM9OTIwPXN0cnVjdCBiY21fcHRwX3ByaXZhdGUgKmJjbV9wdHBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LXB0cC5jLTkzMS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1wdHAuYzo5MzI6XFx0cHJpdiA9IGRldm1fa3phbGxvYyhcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktcHRwLmMtOTMzLVxcdGlmICghcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LXB0cC5jLTk0MC1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1wdHAuYzo5NDE6XFx0Y2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoXFx1MDAyNnByaXYtXFx1MDAzZXB0cF9pbmZvLCBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktcHRwLmMtOTQyLVxcdGlmIChJU19FUlIoY2xvY2spKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmM9NDE0PXN0YXRpYyBpbnQgYmNtNTQxNDBfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmMtNDIzLVxcbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jOjQyNDpcXHRod21vbiA9IGRldm1faHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfaW5mbyhcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldixcXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYy00MjUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiQkNNNTQxNDBcXFwiLCBwaHlkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYz00MzI9c3RhdGljIGludCBiY201NDE0MF9iYXNlX3JlYWRfcmRiKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZGIpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYy00MzUtXFxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmM6NDM2OlxcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmMtNDM3LVxcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCBCQ001NDE0MF9CQVNFX0FERFIsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYy00NDUtb3V0OlxcbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jOjQ0NjpcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmMtNDQ3LVxcdHJldHVybiByZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYz00NTA9c3RhdGljIGludCBiY201NDE0MF9iYXNlX3dyaXRlX3JkYihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmMtNDU0LVxcbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jOjQ1NTpcXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jLTQ1Ni1cXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgQkNNNTQxNDBfQkFTRV9BRERSLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmMtNDY0LW91dDpcXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYzo0NjU6XFx0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jLTQ2Ni1cXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmM9NTA1PXN0YXRpYyBpbnQgYmNtNTQxNDBfZ2V0X2Jhc2VfYWRkcl9hbmRfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmMtNTA3LVxcdHN0cnVjdCBiY201NDE0MF9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jOjUwODpcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cztcXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYy01MDktXFx0aW50IGFkZHIsIG1pbl9hZGRyLCBtYXhfYWRkcjtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jLTUxMy1cXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYzo1MTQ6XFx0bWluX2FkZHIgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcjtcXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYzo1MTU6XFx0bWF4X2FkZHIgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcjtcXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYzo1MTY6XFx0YWRkciA9IHBoeWRldi1cXHUwMDNlbWRpby5hZGRyO1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo0ODowOC4zNTI3NDA3MThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzQyMDgzNTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgUEhZIEluc3RhbnRpYXRpb24gTWV0aG9kcyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgUEhZIGRldmljZXMgZ2V0IGluc3RhbnRpYXRlZCB3aXRoaW4gdGhpcyBjb250ZXh0LiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGxvb2sgYXQgdGhpbmdzIGxpa2UgYG1kaW8tbW9ja3VwLmNgLCBgZml4ZWRfcGh5LmNgLCBvciBwb3RlbnRpYWxseSBldmVuIGBtZGlvX2J1cy5jYC4gSSBmaWd1cmVkIG9uZSBvZiB0aG9zZSBtaWdodCBoYW5kbGUgdGhlIGluc3RhbnRpYXRpb24gZGlyZWN0bHkuIFRoZW4gSSBzdG9wcGVkIGFuZCB0aG91Z2h0LCBcIkhhbmcgb24sIGRvZXMgc3l6a2FsbGVyIGFjdHVhbGx5ICppbnN0YW50aWF0ZSogUEhZIGRldmljZXM/IENhbiBpdCBkbyB0aGF0IHRocm91Z2ggTmV0bGluayBzb21laG93P1wiIFRoZSBtb3JlIEkgdGhvdWdodCBhYm91dCBpdCwgdGhlIG1vcmUgSSByZWFsaXNlZCBpdCdzIHR5cGljYWxseSBoYW5kbGVkIHdoZW4gYSBuZXR3b3JrIGRyaXZlciBwcm9iZXMgYW5kIHJlZ2lzdGVycyBhbiBNRElPIGJ1cywgb3IsIG9mIGNvdXJzZSwgdGhyb3VnaCB0aGUgZGV2aWNlIHRyZWUuXG5cbkJ1dCB0aGVuIEkgcmVtZW1iZXJlZCBzZWVpbmcgdGhvc2UgYHN5el9nZW5ldGxpbmtfLi4uYCwgYHN5el91c2JfY29ubmVjdGAsIGBzeXpfODAyMTFfLi4uYCwgYW5kIGBzeXpfbWFjODAyMTU0Xy4uLmAgY2FsbHMgaW4gc3l6a2FsbGVyLiBDb3VsZCBhbnkgb2YgdGhvc2UgYmUgcmVsZXZhbnQ/IFBlcmhhcHMgdGhleSBvZmZlciBhbiBpbmRpcmVjdCBtZXRob2QuXG5cbldhaXQgYSBzZWNvbmQsIHRoZXJlJ3MgdGhhdCB2aXJ0dWFsIE1ESU8gYnVzIGRyaXZlciBJIGtlZXAgaGVhcmluZyBhYm91dDogYGRyaXZlcnMvbmV0L3BoeS9tZGlvLW1vY2t1cC5jYC4gSSBrbm93IHRoYXQgY2FuIGJlIGluc3RhbnRpYXRlZCB2aWEgc3lzZnMgb3IgbW9kdWxlIHBhcmFtZXRlcnMsIGNhbid0IGl0PyBBY3R1YWxseSwgSSB0aGluayBpdCdzIHVzdWFsbHkgZGV2aWNlIHRyZWUgb3IgbW9kdWxlIHBhcmFtZXRlcnMgYWdhaW4uIEJ1dCB0aGVuLi4uIGhvbGQgb24gYSBtaW51dGUsIGRvZXMgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLW1vY2t1cC5jYCAqYWN0dWFsbHkqIGV4aXN0PyBJJ2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGF0LiBTZWVtcyBsaWtlIGl0IG1pZ2h0IG5vdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2NDksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NDg6MTQuMDk0ODI2MDcxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNTg4MjcxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvLW1vY2t1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo0ODoxNC4xNTU0MjMzMDFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDg2MzkwMjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgTmV0d29yayBQSFkgRHJpdmVyIEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIGxldCBtZSBzZWUuLi4gdGhleSdyZSBwb2ludGluZyBtZSB0b3dhcmQgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLW1vY2t1cC5jYC4gSG1tbSwgc2VlbXMgYSBsaXR0bGUgb2ZmLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRoYXQgYSBcIm1vY2t1cFwiIG9yIFwiZHVtbXlcIiBQSFkgaW1wbGVtZW50YXRpb24sIGlmIGl0IGV4aXN0cywgd291bGRuJ3QgYmUgZGlyZWN0bHkgdGllZCB0byBNRElPLiBJdCdzIG1vcmUgbGlrZWx5IHRvIGJlIGEgaGlnaGVyLWxldmVsIGFic3RyYWN0aW9uLlxuXG5TbywgbGV0J3MgY3V0IHJpZ2h0IHRvIHRoZSBjaGFzZS4gSSdtIGdvaW5nIHRvIHNjYW4gdGhlIGBkcml2ZXJzL25ldC9waHkvYCBkaXJlY3RvcnkuIEknbGwgYmUgbG9va2luZyBzcGVjaWZpY2FsbHkgZm9yIGFueSBmaWxlcyBuYW1lZCB3aXRoIFwibW9ja3VwXCIgb3IgXCJkdW1teVwiIGluIHRoZSBmaWxlbmFtZS4gVGhhdCBzaG91bGQgcXVpY2tseSBwb2ludCBtZSB0byB0aGUgcmVsZXZhbnQgY29kZS4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgUEhZIHNpbXVsYXRvcnMgYXJlIGltcGxlbWVudGVkLCBhbmQgd2hhdCB0aGVpciBpbnRlbmRlZCB1c2UgY2FzZXMgYXJlLiBUaGlzIHNob3VsZCBiZSBxdWljaywgYW5kIGhvcGVmdWxseSBsZWFkIHRvIHRoZSBjb3JyZWN0IHNvdXJjZSBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyMzUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo0ODoxOC4yNDE4MTYzMjFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk5NzIxMzEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vY2t1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo0ODoxOC4zMDE3OTU2NTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODY1MDYxMDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0d29yayBTdWJzeXN0ZW0qKlxuXG5Pa2F5LCBJJ20gZGVlcCBpbiB0aGUgbmV0d29yayBkcml2ZXIgc3BhY2UgYWdhaW4uIFdoZXJlIHNob3VsZCBJIHN0YXJ0IG15IGV4cGxvcmF0aW9uPyBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgaGFyZHdhcmUgaW50ZXJhY3Rpb24uIEhtbSwgbGV0IG1lIHRoaW5rLi4uIGdpdmVuIG15IGZvY3VzIG9uIGxvdy1sZXZlbCBpbnRlcmFjdGlvbnMgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIFBIWSBsYXllciwgSSBzaG91bGQgaW52ZXN0aWdhdGUgYGRyaXZlcnMvbmV0L21kaW8vYC4gVGhhdCdzIHdoZXJlIEkgY2FuIGxpa2VseSBmaW5kIHRoZSBjb3JlIE1lZGlhIEluZGVwZW5kZW50IEludGVyZmFjZSAoTUlJKSBkcml2ZXIgY29kZSwgYW5kIGhvcGVmdWxseSwgYW55IHNwZWNpZmljcyByZWxhdGVkIHRvIHRoZSBNRElPIGJ1cyB1c2VkIHRvIGNvbnRyb2wgdGhlIFBIWS4gVGhpcyBzZWVtcyBsaWtlIGEgbG9naWNhbCBlbnRyeSBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIG5ldHdvcmsgZHJpdmVycyBjb21tdW5pY2F0ZSB3aXRoIHRoZSBwaHlzaWNhbCBsYXllci4gVGhpcyBkaXJlY3RvcnkgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rIHRvIHVuZGVyc3RhbmQgdGhlIE1ESU8gYnVzIGFuZCBQSFkgaW50ZXJhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTI4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NDg6MjIuMTY2ODU4ODdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NzcxNzQwNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9ja3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21kaW8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo0ODoyMi40NjQ1ODU3MjVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI1NDUwMDA4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyBQSFkgRHJpdmVycyB3aXRoIFN5emthbGxlcjogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHdlIGNhbiBsZXZlcmFnZSBzeXprYWxsZXIgdG8gdGVzdCBQSFkgZHJpdmVycy4gU3l6a2FsbGVyJ3MgYWxyZWFkeSBleGNlbGxlbnQgd2l0aCBVU0IgZGV2aWNlIGZ1enppbmcsIGFuZCBJIGtub3cgc29tZSBVU0IgbmV0d29yayBhZGFwdGVycywgc3BlY2lmaWNhbGx5LCB0aGUgYGF4ODgxNzlfMTc4YWAgYWRhcHRlciwgdXRpbGl6ZSBQSFlzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGNhbiB3ZSBhY3R1YWxseSByZWFjaCB0aGVzZSBQSFkgZHJpdmVycyB0aHJvdWdoIHN5emthbGxlcj9cblxuVGhlIHBhdGggb2YgbGVhc3QgcmVzaXN0YW5jZSBmZWVscyBsaWtlIGludmVzdGlnYXRpbmcgd2hldGhlciBvciBub3QgYHJlYWx0ZWtfbWFpbi5jYCBpcyBhY2Nlc3NpYmxlLiBUaGUgcGF0Y2ggbm90ZXMgcmVmZXJlbmNlIFJUTDgyNjFDIHN1cHBvcnQuIEJ1dCBjYW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgcmVhbGlzdGljYWxseSB0cmlnZ2VyIGl0cyBleGVjdXRpb24/IFxuXG5MZXQncyBhc3N1bWUgd2UgdXNlIGEgVVNCIG5ldHdvcmsgYWRhcHRlciB0aGF0J3MgZHJpdmVuIGJ5IHRoZSBgcjgxNTJgIGRyaXZlci4gRG9lcyB0aGlzIGRyaXZlciBldmVuIGRlcGVuZCBvbiBgcmVhbHRla19tYWluLmNgPyBObywgaXQgaGFzIGl0cyBvd24gUEhZIGNvZGUgb3IgbGV2ZXJhZ2VzIHBoeWxpYi4gVGhlIGNydWNpYWwgcXVlc3Rpb24gbm93IGJlY29tZXMsIGRvZXMgYHI4MTUyYCB1c2UgcGh5bGliPyBUaGlzIG5lZWRzIGNvbmZpcm1hdGlvbiwgc28gdGhhdCdzIHRoZSBuZXh0IGF2ZW51ZSB0byBleHBsb3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDc0MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo0ODozMC43MTkwODgxNTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MTAwNjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9jb25uZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9MjYxPXN0YXRpYyBpbnQgYXg4ODE3MmFfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMzEzLVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjMxNDpcXHRwcml2LVxcdTAwM2VwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYtXFx1MDAzZW5ldCwgcHJpdi1cXHUwMDNlcGh5X25hbWUsXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMzE1LVxcdFxcdFxcdFxcdCAgIFxcdTAwMjZheDg4MTcyYV9hZGp1c3RfbGluayxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jPTExNDc9c3RhdGljIGludCBzbXNjOTV4eF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjg0LVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyODU6XFx0cmV0ID0gcGh5X2Nvbm5lY3RfZGlyZWN0KGRldi1cXHUwMDNlbmV0LCBwZGF0YS1cXHUwMDNlcGh5ZGV2LFxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyODYtXFx0XFx0XFx0XFx0IFxcdTAwMjZzbXNjOTV4eF9oYW5kbGVfbGlua19jaGFuZ2UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjQ4OjMwLjc4NjE5MjM2MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjUwODMxMzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqTmV0d29yayBEcml2ZXIgSW52ZXN0aWdhdGlvbioqXG5cbkhtbSwgYGF4ODgxNzJhYCBpcyB1c2luZyBgcGh5X2Nvbm5lY3RgLiBJbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuIE5vdywgd2hhdCdzIHRoZSBkZWFsIHdpdGggYHI4MTUyYD8gSXMgaXQgYWxzbyBsZXZlcmFnaW5nIGBwaHlfY29ubmVjdGA/IFRoYXQncyB0aGUgcXVlc3Rpb24gSSBoYXZlIHRvIGFuc3dlciByaWdodCBub3cuIEtub3dpbmcgaG93IGRpZmZlcmVudCBkcml2ZXJzIGhhbmRsZSBQSFkgY29ubmVjdGlvbnMgaXMgZXNzZW50aWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyIGFuZCBob3cgdGhlIGRpZmZlcmVudCBkcml2ZXJzIHJlbGF0ZSB0byBlYWNoIG90aGVyLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY29tcGxldGVseSBncm9rIHRoaXMsIGFuZCB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBkcml2ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTQ1OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjQ4OjM2LjQzNzAyNjEyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODgxODIzNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2Nvbm5lY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL3I4MTUyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo0ODozNi41MDU4NTIyNDZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc2MzI1NTk0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBQbGFuIHRvIEV4cGxvaXQgdGhlIFJlYWx0ZWsgUEhZIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gdHJpZ2dlciB0aGF0IGByZWFsdGVrX21haW4uY2AgY29kZSB1c2VkIGJ5IHRoZSBgcjgxNTJgIGRyaXZlci4gRGlyZWN0bHkgdXNpbmcgdGhlIGByODE1MmAgaXNuJ3QgZ29pbmcgdG8gd29yay4gQ2FuIEkgc29tZWhvdyB0cmljayB0aGUgc3lzdGVtIGludG8gdGhpbmtpbmcgYSBSZWFsdGVrIFBIWSBpcyBwcmVzZW50PyBNYXliZSBhIHZpcnR1YWwgZGV2aWNlP1xuXG5XYWl0IGEgbWludXRlLi4uIFdoYXQgaWYgSSB1c2UgYHN5el91c2JfY29ubmVjdGAgdG8gZW11bGF0ZSBhIFVTQiBkZXZpY2U/IFNwZWNpZmljYWxseSwgaWYgSSBlbXVsYXRlIGFuIGBheDg4MTcyYWAgZGV2aWNlIChBU0lYIEFYODgxNzJBKSwgYW5kIGNyYWZ0IHRoZSBNRElPIHJlc3BvbnNlcyB0byBpbmNsdWRlIGEgUEhZIElEIHRoYXQgbWF0Y2hlcyBgUlRMXzgyNjFDX0NHYCAoMHgwMDFjYzg5OCksIHRoZSBgYXg4ODE3MmFgIGRyaXZlciAqc2hvdWxkKiBwcm9iZSB0aGUgTURJTyBidXMsIHNlZSB0aGF0IElELCBhbmQgcGh5bGliIHdpbGwgdGhlbiBiaW5kIHRoZSBgcmVhbHRla19tYWluLmNgIGRyaXZlciB0byBpdC4gSXQncyBhIGJpdCBvZiBhIGRhbmNlLCBidXQgdGhlIHBpZWNlcyAqc2hvdWxkKiBmaXQuXG5cbk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIGBheDg4MTcyYWAgYWN0dWFsbHkgYWxsb3cgbWUgdG8gc3BlY2lmeSAqYW55KiBQSFkgSUQgaW4gdGhlIE1ESU8gcmVzcG9uc2VzPyBUaGF0J3MgdGhlIG5leHQgdGhpbmcgdG8gY2hlY2suIElmIGl0J3MgcmVzdHJpY3RpdmUsIHRoaXMgd2hvbGUgaWRlYSBpcyBET0EuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NjY2LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjQ4OjQyLjI2OTExNjk0OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUwOTc0ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXg4ODE3MmFfcmVzZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9MTE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYXg4ODE3MmFfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0xMzAtXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6MTMxOnN0YXRpYyBpbnQgYXg4ODE3MmFfcmVzZXRfcGh5KHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IGVtYmRfcGh5KVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTEzMi17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz0xNTg9c3RhdGljIGludCBheDg4MTcyYV9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0yMTUtXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6MjE2OlxcdGF4ODgxNzJhX3Jlc2V0X3BoeShkZXYsIHByaXYtXFx1MDAzZXVzZV9lbWJkcGh5KTtcXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0yMTctXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz0yNTM9c3RhdGljIHZvaWQgYXg4ODE3MmFfdW5iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0yNjAtXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6MjYxOnN0YXRpYyBpbnQgYXg4ODE3MmFfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTI2Mi17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0yNjctXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6MjY4OlxcdGF4ODgxNzJhX3Jlc2V0X3BoeShkZXYsIHByaXYtXFx1MDAzZXVzZV9lbWJkcGh5KTtcXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0yNjktXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz0zNDc9Y29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGF4ODgxNzJhX2luZm8gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0zNDktXFx0LmJpbmQgPSBheDg4MTcyYV9iaW5kLFxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjM1MDpcXHQucmVzZXQgPSBheDg4MTcyYV9yZXNldCxcXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0zNTEtXFx0LnN0b3AgPSBheDg4MTcyYV9zdG9wLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo0ODo0Mi4zMzQyMjQ1NzdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwMTM3NjIxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQncyBnb2luZyB0aHJvdWdoIG15IG1pbmQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGlmIEknbSB0aGUgb25lIGhhdmluZyB0aGVzZSB0aG91Z2h0cy5cblxuKipEaXZpbmcgaW50byB0aGUgQVg4ODE3MkEgRHJpdmVyKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBmb2N1c2luZyBvbiB0aGUgYGF4ODgxNzJhX2JpbmRgIGFuZCBgYXg4ODE3MmFfcmVzZXRgIGZ1bmN0aW9ucyBzcGVjaWZpY2FsbHkuIFRoZXNlIGFyZSB0aGUgY29yZSBpbml0aWFsaXphdGlvbiBhbmQgcmVjb3ZlcnkgcG9pbnRzLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBkcml2ZXIgaG9va3MgaW50byB0aGUgc3lzdGVtIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgaGFyZHdhcmUgZ2xpdGNoZXMgb3IgaW5pdGlhbGl6YXRpb24gZmFpbHVyZXMuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBkZXZpY2UgaXMgYnJvdWdodCBvbmxpbmUgYW5kIGhvdyBpdOKAmXMgYnJvdWdodCBiYWNrIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nLiBVbmRlcnN0YW5kaW5nIGBiaW5kYCBpcyBnb2luZyB0byBnaXZlIG1lIGEgaGlnaC1sZXZlbCB2aWV3IG9mIGRldmljZSBwcm9iaW5nIGFuZCByZXNvdXJjZSBhbGxvY2F0aW9uLCBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSByZWdpc3RlciBtYXBwaW5nIGFuZCBpbnRlcnJ1cHQgc2V0dXAuIFJlc2V0LCBvbiB0aGUgb3RoZXIgaGFuZCwgc2hvdWxkIHJldmVhbCBob3cgdGhlIGRyaXZlciBkZWFscyB3aXRoIHBvd2VyIGN5Y2xlcyBvciBlcnJvciByZWNvdmVyeS4gVGhpcyB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgdGhlIHJvYnVzdG5lc3Mgb2YgdGhpcyBpbXBsZW1lbnRhdGlvbi4gTGV0J3Mgc2VlIGhvdyB0aGV5J3ZlIGFwcHJvYWNoZWQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2ODIwLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NDg6NDYuMjM1NjAzMzY3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1OCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTg6XFx0c3RhdGljIGludCBheDg4MTcyYV9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuIDE1OTpcXHR7XFxuIDE2MDpcXHRcXHRpbnQgcmV0O1xcbiAxNjE6XFx0XFx0dTggYnVmW0VUSF9BTEVOXTtcXG4gMTYyOlxcdFxcdHN0cnVjdCBheDg4MTcyYV9wcml2YXRlICpwcml2O1xcbiAxNjM6XFx0XFxuIDE2NDpcXHRcXHRyZXQgPSB1c2JuZXRfZ2V0X2VuZHBvaW50cyhkZXYsIGludGYpO1xcbiAxNjU6XFx0XFx0aWYgKHJldClcXG4gMTY2OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE2NzpcXHRcXG4gMTY4OlxcdFxcdHByaXYgPSBremFsbG9jX29iaigqcHJpdik7XFxuIDE2OTpcXHRcXHRpZiAoIXByaXYpXFxuIDE3MDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMTcxOlxcdFxcbiAxNzI6XFx0XFx0ZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdiA9IHByaXY7XFxuIDE3MzpcXHRcXG4gMTc0OlxcdFxcdC8qIEdldCB0aGUgTUFDIGFkZHJlc3MgKi9cXG4gMTc1OlxcdFxcdHJldCA9IGFzaXhfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9OT0RFX0lELCAwLCAwLCBFVEhfQUxFTiwgYnVmLCAwKTtcXG4gMTc2OlxcdFxcdGlmIChyZXQgXFx1MDAzYyBFVEhfQUxFTikge1xcbiAxNzc6XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYtXFx1MDAzZW5ldCwgXFxcIkZhaWxlZCB0byByZWFkIE1BQyBhZGRyZXNzOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4gMTc4OlxcdFxcdFxcdHJldCA9IC1FSU87XFxuIDE3OTpcXHRcXHRcXHRnb3RvIGZyZWU7XFxuIDE4MDpcXHRcXHR9XFxuIDE4MTpcXHRcXHRldGhfaHdfYWRkcl9zZXQoZGV2LVxcdTAwM2VuZXQsIGJ1Zik7XFxuIDE4MjpcXHRcXG4gMTgzOlxcdFxcdGRldi1cXHUwMDNlbmV0LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNmF4ODgxNzJhX25ldGRldl9vcHM7XFxuIDE4NDpcXHRcXHRkZXYtXFx1MDAzZW5ldC1cXHUwMDNlZXRodG9vbF9vcHMgPSBcXHUwMDI2YXg4ODE3MmFfZXRodG9vbF9vcHM7XFxuIDE4NTpcXHRcXG4gMTg2OlxcdFxcdC8qIGFyZSB3ZSB1c2luZyB0aGUgaW50ZXJuYWwgb3IgdGhlIGV4dGVybmFsIHBoeT8gKi9cXG4gMTg3OlxcdFxcdHJldCA9IGFzaXhfcmVhZF9jbWQoZGV2LCBBWF9DTURfU1dfUEhZX1NUQVRVUywgMCwgMCwgMSwgYnVmLCAwKTtcXG4gMTg4OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIDE4OTpcXHRcXHRcXHRuZXRkZXZfZXJyKGRldi1cXHUwMDNlbmV0LCBcXFwiRmFpbGVkIHRvIHJlYWQgc29mdHdhcmUgaW50ZXJmYWNlIHNlbGVjdGlvbiByZWdpc3RlcjogJWRcXFxcblxcXCIsXFxuIDE5MDpcXHRcXHRcXHRcXHQgICByZXQpO1xcbiAxOTE6XFx0XFx0XFx0Z290byBmcmVlO1xcbiAxOTI6XFx0XFx0fVxcbiAxOTM6XFx0XFxuIDE5NDpcXHRcXHRuZXRkZXZfZGJnKGRldi1cXHUwMDNlbmV0LCBcXFwiQVhfQ01EX1NXX1BIWV9TVEFUVVMgPSAweCUwMnhcXFxcblxcXCIsIGJ1ZlswXSk7XFxuIDE5NTpcXHRcXHRzd2l0Y2ggKGJ1ZlswXSBcXHUwMDI2IEFYX1BIWV9TRUxFQ1RfTUFTSykge1xcbiAxOTY6XFx0XFx0Y2FzZSBBWF9QSFlfU0VMRUNUX0lOVEVSTkFMOlxcbiAxOTc6XFx0XFx0XFx0bmV0ZGV2X2RiZyhkZXYtXFx1MDAzZW5ldCwgXFxcInVzZSBpbnRlcm5hbCBwaHlcXFxcblxcXCIpO1xcbiAxOTg6XFx0XFx0XFx0cHJpdi1cXHUwMDNldXNlX2VtYmRwaHkgPSAxO1xcbiAxOTk6XFx0XFx0XFx0YnJlYWs7XFxuIDIwMDpcXHRcXHRjYXNlIEFYX1BIWV9TRUxFQ1RfRVhURVJOQUw6XFxuIDIwMTpcXHRcXHRcXHRuZXRkZXZfZGJnKGRldi1cXHUwMDNlbmV0LCBcXFwidXNlIGV4dGVybmFsIHBoeVxcXFxuXFxcIik7XFxuIDIwMjpcXHRcXHRcXHRwcml2LVxcdTAwM2V1c2VfZW1iZHBoeSA9IDA7XFxuIDIwMzpcXHRcXHRcXHRicmVhaztcXG4gMjA0OlxcdFxcdGRlZmF1bHQ6XFxuIDIwNTpcXHRcXHRcXHRuZXRkZXZfZXJyKGRldi1cXHUwMDNlbmV0LCBcXFwiSW50ZXJmYWNlIG1vZGUgbm90IHN1cHBvcnRlZCBieSBkcml2ZXJcXFxcblxcXCIpO1xcbiAyMDY6XFx0XFx0XFx0cmV0ID0gLUVOT1RTVVBQO1xcbiAyMDc6XFx0XFx0XFx0Z290byBmcmVlO1xcbiAyMDg6XFx0XFx0fVxcbiAyMDk6XFx0XFxuIDIxMDpcXHRcXHRyZXQgPSBhc2l4X3JlYWRfcGh5X2FkZHIoZGV2LCBwcml2LVxcdTAwM2V1c2VfZW1iZHBoeSk7XFxuIDIxMTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gMjEyOlxcdFxcdFxcdGdvdG8gZnJlZTtcXG4gMjEzOlxcdFxcbiAyMTQ6XFx0XFx0cHJpdi1cXHUwMDNlcGh5X2FkZHIgPSByZXQ7XFxuIDIxNTpcXHRcXG4gMjE2OlxcdFxcdGF4ODgxNzJhX3Jlc2V0X3BoeShkZXYsIHByaXYtXFx1MDAzZXVzZV9lbWJkcGh5KTtcXG4gMjE3OlxcdFxcbiAyMTg6XFx0XFx0LyogQXNpeCBmcmFtaW5nIHBhY2tzIG11bHRpcGxlIGV0aCBmcmFtZXMgaW50byBhIDJLIHVzYiBidWxrIHRyYW5zZmVyICovXFxuIDIxOTpcXHRcXHRpZiAoZGV2LVxcdTAwM2Vkcml2ZXJfaW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBGTEFHX0ZSQU1JTkdfQVgpIHtcXG4gMjIwOlxcdFxcdFxcdC8qIGhhcmRfbXR1ICBpcyBzdGlsbCB0aGUgZGVmYXVsdCAtIHRoZSBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydFxcbiAyMjE6XFx0XFx0XFx0ICAganVtYm8gZXRoIGZyYW1lcyAqL1xcbiAyMjI6XFx0XFx0XFx0ZGV2LVxcdTAwM2VyeF91cmJfc2l6ZSA9IDIwNDg7XFxuIDIyMzpcXHRcXHR9XFxuIDIyNDpcXHRcXG4gMjI1OlxcdFxcdC8qIGluaXQgTURJTyBidXMgKi9cXG4gMjI2OlxcdFxcdHJldCA9IGF4ODgxNzJhX2luaXRfbWRpbyhkZXYpO1xcbiAyMjc6XFx0XFx0aWYgKHJldClcXG4gMjI4OlxcdFxcdFxcdGdvdG8gZnJlZTtcXG4gMjI5OlxcdFxcbiAyMzA6XFx0XFx0cmV0dXJuIDA7XFxuIDIzMTpcXHRcXG4gMjMyOlxcdGZyZWU6XFxuIDIzMzpcXHRcXHRrZnJlZShwcml2KTtcXG4gMjM0OlxcdFxcdHJldHVybiByZXQ7XFxuIDIzNTpcXHR9XFxuIDIzNjpcXHRcXG4gMjM3OlxcdHN0YXRpYyBpbnQgYXg4ODE3MmFfc3RvcChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuIDIzODpcXHR7XFxuIDIzOTpcXHRcXHRzdHJ1Y3QgYXg4ODE3MmFfcHJpdmF0ZSAqcHJpdiA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuIDI0MDpcXHRcXG4gMjQxOlxcdFxcdG5ldGRldl9kYmcoZGV2LVxcdTAwM2VuZXQsIFxcXCJTdG9wcGluZyBpbnRlcmZhY2VcXFxcblxcXCIpO1xcbiAyNDI6XFx0XFxuIDI0MzpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcGh5ZGV2KSB7XFxuIDI0NDpcXHRcXHRcXHRuZXRkZXZfaW5mbyhkZXYtXFx1MDAzZW5ldCwgXFxcIkRpc2Nvbm5lY3RpbmcgZnJvbSBwaHkgJXNcXFxcblxcXCIsXFxuIDI0NTpcXHRcXHRcXHRcXHQgICAgcHJpdi1cXHUwMDNlcGh5X25hbWUpO1xcbiAyNDY6XFx0XFx0XFx0cGh5X3N0b3AocHJpdi1cXHUwMDNlcGh5ZGV2KTtcXG4gMjQ3OlxcdFxcdFxcdHBoeV9kaXNjb25uZWN0KHByaXYtXFx1MDAzZXBoeWRldik7XFxuIDI0ODpcXHRcXHR9XFxuIDI0OTpcXHRcXG4gMjUwOlxcdFxcdHJldHVybiAwO1xcbiAyNTE6XFx0fVxcbiAyNTI6XFx0XFxuIDI1MzpcXHRzdGF0aWMgdm9pZCBheDg4MTcyYV91bmJpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4gMjU0OlxcdHtcXG4gMjU1OlxcdFxcdHN0cnVjdCBheDg4MTcyYV9wcml2YXRlICpwcml2ID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4gMjU2OlxcdFxcbiAyNTc6XFx0XFx0YXg4ODE3MmFfcmVtb3ZlX21kaW8oZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NDg6NDYuMjM1NjkzMzU3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MjUyMjY0OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byB0aGUgTURJTyBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIHRoZSBjb2RlJ3MganVtcGluZyBpbnRvIGBheDg4MTcyYV9pbml0X21kaW9gLiBUaGF0J3Mgd2hlcmUgaXQgYWxsIHN0YXJ0cywgdGhlIE1lZGlhIEluZGVwZW5kZW50IEludGVyZmFjZSAoTUlJKSBpbml0aWFsaXphdGlvbiBmb3IgdGhlIGNoaXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgYXQgdGhpcyBjcnVjaWFsIGVudHJ5IHBvaW50LiBXaGF0IGFyZSB0aGUgc3BlY2lmaWMgc3RlcHMgdGhpcyBmdW5jdGlvbiB0YWtlcyB0byBnZXQgdGhlIE1ESU8gaW50ZXJmYWNlIHVwIGFuZCBydW5uaW5nPyBXZSdyZSB0YWxraW5nIFBIWSByZWdpc3RlciBhY2Nlc3MgaGVyZSwgc28gSSdtIGxvb2tpbmcgZm9yIHRoZSBzZXF1ZW5jZTogc2V0dGluZyB1cCB0aGUgTURJTyBjbG9jaywgY29uZmlndXJpbmcgYW55IG5lY2Vzc2FyeSBHUElPIHBpbnMgKGlmIGl0J3MgdXNpbmcgYSBHUElPLWJhc2VkIE1ESU8pLCBhbmQgdGhlbiBsaWtlbHkgc29tZSBpbml0aWFsIHdyaXRlIG9wZXJhdGlvbnMgdG8gdGhlIFBIWSB0byBjb25maWd1cmUgaXRzIGJhc2ljIG9wZXJhdGluZyBtb2RlLCBsaW5rIHNwZWVkLCBhbmQgYXV0b25lZ290aWF0aW9uIHNldHRpbmdzLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBjbG9jayBkaXZpZGVyIGNhbGN1bGF0aW9ucywgcGluIGRpcmVjdGlvbiBzZXR0aW5ncywgYW5kIHRoZSBhY3R1YWwgcmVnaXN0ZXIgd3JpdGUgY29tbWFuZHMgdXNpbmcgd2hhdGV2ZXIgbG93LWxldmVsIE1ESU8gdHJhbnNhY3Rpb24gZnVuY3Rpb25zIGFyZSBwcm92aWRlZCBieSB0aGUgZHJpdmVyLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGl0J3MgdXNpbmcgYSBzdGFuZGFyZCBNRElPIGludGVyZmFjZSBvciBhIHZhcmlhdGlvbiwgYXMgd2VsbCBhcyB0aGUgZXhhY3QgUEhZIGFkZHJlc3MgaXQncyB0YXJnZXRpbmcuIExldCdzIHNlZSBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzIGR1cmluZyB0aGVzZSBpbml0aWFsIGFjY2Vzc2VzLiBJJ20ga2VlbiB0byBzcG90IGFueSB1bnVzdWFsIGluaXRpYWwgcmVnaXN0ZXIgc2V0dGluZ3Mgb3IgYml0IG1hbmlwdWxhdGlvbnMgdGhhdCBtaWdodCBiZSBjcml0aWNhbCB0byB0aGlzIHBhcnRpY3VsYXIgUEhZJ3MgYmVoYXZpb3IuIEhvcGVmdWxseSwgaXQgaW5jbHVkZXMgYWRlcXVhdGUgZXJyb3IgaGFuZGxpbmcg4oCTIEknbSBob3BpbmcgdG8gc2VlIGEgc29saWQgc3RhdHVzIGNoZWNrIGFmdGVyIGVhY2ggd3JpdGUgYW5kIHJlYWQgdG8gdGhlIFBIWSByZWdpc3RlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NjY5LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo0ODo1MC44NjA5MjI2MzVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMDExNzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF4ODgxNzJhX2luaXRfbWRpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz01NT1zdGF0aWMgdm9pZCBheDg4MTcyYV9zdGF0dXMoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXJiICp1cmIpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy02MC0vKiB1c2UgcGh5bGliIGluZnJhc3RydWN0dXJlICovXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6NjE6c3RhdGljIGludCBheDg4MTcyYV9pbml0X21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTYyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jPTE1OD1zdGF0aWMgaW50IGF4ODgxNzJhX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTIyNS1cXHQvKiBpbml0IE1ESU8gYnVzICovXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6MjI2OlxcdHJldCA9IGF4ODgxNzJhX2luaXRfbWRpbyhkZXYpO1xcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTIyNy1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo0ODo1MC45MjA5MzgyMDVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ2NzI3MzY5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGF4ODgxNzJhX2luaXRfbWRpb2AgZnVuY3Rpb24uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGNoaXAncyBNRElPIGludGVyZmFjZSBpcyBpbml0aWFsaXplZC4gSSdtIGFzc3VtaW5nLCBnaXZlbiB0aGUgbmFtaW5nLCB0aGF0IHRoaXMgaXMgc3BlY2lmaWNhbGx5IHRpZWQgdG8gdGhlIEFTSVggQVg4ODE3MkEgZXRoZXJuZXQgY29udHJvbGxlciDigJMgd2hpY2ggSSdtIGZhbWlsaWFyIHdpdGgsIGdpdmVuIG15IGJhY2tncm91bmQuIEknbSBleHBlY3RpbmcgdGhpcyBpbml0aWFsaXphdGlvbiB0byBiZSBhIGNyaXRpY2FsIHN0ZXAuXG5cbk5vdywgbGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHJlZ2lzdGVyIGFjY2Vzc2VzIGFuZCBhbnkgZGVsYXlzIHVzZWQsIGFzIHRoZXNlIGFyZSBhbGwgaW1wb3J0YW50LiBJIGFudGljaXBhdGUgdGhhdCBpdCB3aWxsIGludm9sdmUgc2V0dGluZyB1cCBjbG9jayBzcGVlZHMsIHBvdGVudGlhbGx5IGNvbmZpZ3VyaW5nIHRoZSBQSFkgYWRkcmVzcyAoaWYgaXQncyB1c2luZyBhbiBleHRlcm5hbCBQSFkpLCBhbmQgZW5hYmxpbmcgdGhlIE1ESU8gaW50ZXJmYWNlIGl0c2VsZi4gQW55IGVycm9yIGhhbmRsaW5nIG9yIHJldHJ5IG1lY2hhbmlzbXMgd2lsbCBiZSBnb29kIHRvIG5vdGUsIHRvbywgc2luY2UgcmVsaWFibGUgaW5pdGlhbGl6YXRpb24gaXMgY3J1Y2lhbCBmb3IgYSBzdGFibGUgbmV0d29yayBjb25uZWN0aW9uLiBJJ2xsIGFsc28gYmUgb24gdGhlIGxvb2tvdXQgZm9yIGFueSBkZXZpY2Utc3BlY2lmaWMgcXVpcmtzIG9yIHdvcmthcm91bmRzIHRoZSBkcml2ZXIgbWlnaHQgZW1wbG95LiBUaGlzIHNob3VsZCBob3BlZnVsbHkgYmUgc3RyYWlnaHRmb3J3YXJkOyBidXQgbGV0J3MgdGFrZSBhIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzQzLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NDg6NTUuMzg4MjE0NDFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjE6XFx0c3RhdGljIGludCBheDg4MTcyYV9pbml0X21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxcbiAgNjI6XFx0e1xcbiAgNjM6XFx0XFx0c3RydWN0IGF4ODgxNzJhX3ByaXZhdGUgKnByaXYgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbiAgNjQ6XFx0XFx0aW50IHJldDtcXG4gIDY1OlxcdFxcbiAgNjY6XFx0XFx0cHJpdi1cXHUwMDNlbWRpbyA9IG1kaW9idXNfYWxsb2MoKTtcXG4gIDY3OlxcdFxcdGlmICghcHJpdi1cXHUwMDNlbWRpbykge1xcbiAgNjg6XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYtXFx1MDAzZW5ldCwgXFxcIkNvdWxkIG5vdCBhbGxvY2F0ZSBNRElPIGJ1c1xcXFxuXFxcIik7XFxuICA2OTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gIDcwOlxcdFxcdH1cXG4gIDcxOlxcdFxcbiAgNzI6XFx0XFx0cHJpdi1cXHUwMDNlbWRpby1cXHUwMDNlcHJpdiA9ICh2b2lkICopZGV2O1xcbiAgNzM6XFx0XFx0cHJpdi1cXHUwMDNlbWRpby1cXHUwMDNlcmVhZCA9IFxcdTAwMjZhc2l4X21kaW9fYnVzX3JlYWQ7XFxuICA3NDpcXHRcXHRwcml2LVxcdTAwM2VtZGlvLVxcdTAwM2V3cml0ZSA9IFxcdTAwMjZhc2l4X21kaW9fYnVzX3dyaXRlO1xcbiAgNzU6XFx0XFx0cHJpdi1cXHUwMDNlbWRpby1cXHUwMDNlbmFtZSA9IFxcXCJBc2l4IE1ESU8gQnVzXFxcIjtcXG4gIDc2OlxcdFxcdC8qIG1paSBidXMgbmFtZSBpcyB1c2ItXFx1MDAzY3VzYiBidXMgbnVtYmVyXFx1MDAzZS1cXHUwMDNjdXNiIGRldmljZSBudW1iZXJcXHUwMDNlICovXFxuICA3NzpcXHRcXHRzbnByaW50Zihwcml2LVxcdTAwM2VtZGlvLVxcdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcXFwidXNiLSUwM2Q6JTAzZFxcXCIsXFxuICA3ODpcXHRcXHRcXHQgZGV2LVxcdTAwM2V1ZGV2LVxcdTAwM2VidXMtXFx1MDAzZWJ1c251bSwgZGV2LVxcdTAwM2V1ZGV2LVxcdTAwM2VkZXZudW0pO1xcbiAgNzk6XFx0XFxuICA4MDpcXHRcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXFx1MDAzZW1kaW8pO1xcbiAgODE6XFx0XFx0aWYgKHJldCkge1xcbiAgODI6XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYtXFx1MDAzZW5ldCwgXFxcIkNvdWxkIG5vdCByZWdpc3RlciBNRElPIGJ1c1xcXFxuXFxcIik7XFxuICA4MzpcXHRcXHRcXHRnb3RvIG1mcmVlO1xcbiAgODQ6XFx0XFx0fVxcbiAgODU6XFx0XFxuICA4NjpcXHRcXHRuZXRkZXZfaW5mbyhkZXYtXFx1MDAzZW5ldCwgXFxcInJlZ2lzdGVyZWQgbWRpbyBidXMgJXNcXFxcblxcXCIsIHByaXYtXFx1MDAzZW1kaW8tXFx1MDAzZWlkKTtcXG4gIDg3OlxcdFxcdHJldHVybiAwO1xcbiAgODg6XFx0XFxuICA4OTpcXHRtZnJlZTpcXG4gIDkwOlxcdFxcdG1kaW9idXNfZnJlZShwcml2LVxcdTAwM2VtZGlvKTtcXG4gIDkxOlxcdFxcdHJldHVybiByZXQ7XFxuICA5MjpcXHR9XFxuICA5MzpcXHRcXG4gIDk0OlxcdHN0YXRpYyB2b2lkIGF4ODgxNzJhX3JlbW92ZV9tZGlvKHN0cnVjdCB1c2JuZXQgKmRldilcXG4gIDk1OlxcdHtcXG4gIDk2OlxcdFxcdHN0cnVjdCBheDg4MTcyYV9wcml2YXRlICpwcml2ID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4gIDk3OlxcdFxcbiAgOTg6XFx0XFx0bmV0ZGV2X2luZm8oZGV2LVxcdTAwM2VuZXQsIFxcXCJkZXJlZ2lzdGVyaW5nIG1kaW8gYnVzICVzXFxcXG5cXFwiLCBwcml2LVxcdTAwM2VtZGlvLVxcdTAwM2VpZCk7XFxuICA5OTpcXHRcXHRtZGlvYnVzX3VucmVnaXN0ZXIocHJpdi1cXHUwMDNlbWRpbyk7XFxuIDEwMDpcXHRcXHRtZGlvYnVzX2ZyZWUocHJpdi1cXHUwMDNlbWRpbyk7XFxuIDEwMTpcXHR9XFxuIDEwMjpcXHRcXG4gMTAzOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYXg4ODE3MmFfbmV0ZGV2X29wcyA9IHtcXG4gMTA0OlxcdFxcdC5uZG9fb3BlblxcdFxcdD0gdXNibmV0X29wZW4sXFxuIDEwNTpcXHRcXHQubmRvX3N0b3BcXHRcXHQ9IHVzYm5ldF9zdG9wLFxcbiAxMDY6XFx0XFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSB1c2JuZXRfc3RhcnRfeG1pdCxcXG4gMTA3OlxcdFxcdC5uZG9fdHhfdGltZW91dFxcdFxcdD0gdXNibmV0X3R4X3RpbWVvdXQsXFxuIDEwODpcXHRcXHQubmRvX2NoYW5nZV9tdHVcXHRcXHQ9IHVzYm5ldF9jaGFuZ2VfbXR1LFxcbiAxMDk6XFx0XFx0Lm5kb19nZXRfc3RhdHM2NFxcdD0gZGV2X2dldF90c3RhdHM2NCxcXG4gMTEwOlxcdFxcdC5uZG9fc2V0X21hY19hZGRyZXNzXFx0PSBhc2l4X3NldF9tYWNfYWRkcmVzcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NDg6NTUuMzg4Mjg4Nzk5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NzA3OTgwNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTURJTyBCdXMgSW50ZXJhY3Rpb24gZm9yIEVtdWxhdGVkIFVTQiBEZXZpY2UqKlxuXG5Pa2F5LCBzbyBpZiBJJ20gdW5kZXJzdGFuZGluZyB0aGlzIGNvcnJlY3RseSwgdXNpbmcgYG1kaW9idXNfcmVnaXN0ZXJgIGlzIHRoZSBrZXkuIFRoYXQgZnVuY3Rpb24gaGFuZGxlcyBzY2FubmluZyB0aGUgTURJTyBidXMgYW5kIHByb2JpbmcgYW55IFBIWSBkZXZpY2VzIHRoYXQgYXJlIHByZXNlbnQuIEkgdGhpbmsgdGhpcyBjYW4gd29yayB3aXRoIHRoZSBVU0IgZGV2aWNlIGVtdWxhdGlvbiDigJMgd2UgY2FuIGludGVyY2VwdCBhbmQgcmVzcG9uZCB0byBgYXNpeF9tZGlvX2J1c19yZWFkYCBjYWxscywgYW5kIHNwZWNpZmljYWxseSwgd2UgY2FuIHJlcG9ydCB0aGUgUEhZIElEIGZvciB0aGUgYFJUTF84MjYxQ19DR2AgYXMgMHgwMDFjYzg5OC4gSWYgdGhhdCdzIHdoYXQgd2UgZG8sIGBtZGlvYnVzX3JlZ2lzdGVyYCBzaG91bGQgdGhlbiBjcmVhdGUgYSBQSFkgZGV2aWNlIG9iamVjdCBhbmQgYmluZCBpdCB0byB0aGUgYHJlYWx0ZWtfbWFpbi5jYCBkcml2ZXIsIHdoaWNoIGlzIHdoYXQgd2UgbmVlZC5cblxuQnV0IGhvbGQgb27igKYgSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nLiBJcyBgUlRMXzgyNjFDX0NHYCBhIENsYXVzZSA0NSBQSFkgb3IgYSBDbGF1c2UgMjIgUEhZPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGByZWFsdGVrX21haW4uY2AgdG8gYmUgY2VydGFpbi4gR290dGEgZW5zdXJlIHdlJ3JlIGFsaWduaW5nIHdpdGggaG93IHRoYXQgZHJpdmVyIGV4cGVjdHMgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgUEhZLiBOZWVkIHRvIHZlcmlmeSB0aGF0IGJlZm9yZSBwcm9jZWVkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDQ4MSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjQ5OjAxLjg1OTA4OTYxOFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE0MzYzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUlRMXzgyNjFDX0NHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jLTI1OS0jZGVmaW5lIFJUTF84MjYxQ1xcdFxcdFxcdFxcdDB4MDAxY2M4OTBcXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYzoyNjA6I2RlZmluZSBSVExfODI2MUNfQ0dcXHRcXHRcXHRcXHQweDAwMWNjODk4XFxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMtMjYxLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmM9MzA4Nj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgcmVhbHRla19kcnZzW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYy0zNDAzLVxcdH0sIHtcXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYzozNDA0OlxcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChSVExfODI2MUNfQ0cpLFxcbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jLTM0MDUtXFx0XFx0Lm5hbWVcXHRcXHRcXHQ9IFxcXCJSZWFsdGVrIFJUTDgyNjEgMTBHYnBzIFBIWVxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjQ5OjAxLjkyMDUzNDA2OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ4ODM4MjI0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBIWSBJRCBNYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBjb2RlIGluZGljYXRlcyB0aGF0IGBQSFlfSURfTUFUQ0hfRVhBQ1RgIG1lYW5zIGEgZGlyZWN0IG1hdGNoIG9uIHRoZSBQSFkgSUQuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEJ1dCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgd2hhdCBraW5kIG9mIFBIWSBhcmUgd2UgZGVhbGluZyB3aXRoPyBCYXNlZCBvbiB0aGF0IGluaXRpYWwgbWF0Y2gsIGlzIHRoaXMgYSBDbGF1c2UgNDUgUEhZLCBzcGVjaWZpY2FsbHk/IExvb2tpbmcgYXQgdGhlIGByZWFsdGVrX21haW4uY2AgZHJpdmVyLCBJIHNlZSBmdW5jdGlvbnMgYmVpbmcgY2FsbGVkIHN1Y2ggYXMgYGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXRgLCBgZ2VucGh5X2M0NV9wbWFfc3VzcGVuZGAsIGBnZW5waHlfYzQ1X3BtYV9yZXN1bWVgLCBgZ2VucGh5X2M0NV9jb25maWdfYW5lZ2AsIGFuZCBgZ2VucGh5X2M0NV9yZWFkX3N0YXR1c2AuIFRoZSBwcmVzZW5jZSBvZiB0aGVzZSBgZ2VucGh5X2M0NWAgZnVuY3Rpb25zIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQsIHllcywgaXQncyB2ZXJ5IGxpa2VseSBhIENsYXVzZSA0NSBQSFkuIFRoaXMgaXMgZXhjZWxsZW50IVxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBjYW4gdGhlIGBheDg4MTcyYWAgZHJpdmVyIGFjdHVhbGx5ICpyZWFkKiB0aGVzZSBDbGF1c2UgNDUgUEhZIHJlZ2lzdGVycz8gVGhhdCdzIHRoZSBrZXkuIExldCBtZSBxdWlja2x5IGV4YW1pbmUgYGFzaXhfbWRpb19idXNfcmVhZGAgdG8gc2VlIGhvdyBpdCdzIGltcGxlbWVudGVkLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gYWNjZXNzIHRoZSByZWdpc3RlcnMgdG8gbWFrZSBhbnkgcHJvZ3Jlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMTg0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjQ5OjM4LjQwODkxOTM1M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM2NTQ0MTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFzaXhfbWRpb19idXNfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg9MjMyPXZvaWQgYXNpeF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlfaWQsIGludCBsb2MsIGludCB2YWwpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjMzLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MjM0OmludCBhc2l4X21kaW9fYnVzX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMzUtaW50IGFzaXhfbWRpb19idXNfd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSwgdTE2IHZhbCk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYz01NDM9dm9pZCBhc2l4X21kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBoeV9pZCwgaW50IGxvYywgaW50IHZhbClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTU0OC0vKiBNRElPIHJlYWQgYW5kIHdyaXRlIHdyYXBwZXJzIGZvciBwaHlsaWIgKi9cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzo1NDk6aW50IGFzaXhfbWRpb19idXNfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnbnVtKVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTU1MC17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9NjY5PXN0YXRpYyBpbnQgYXg4ODc3Ml9pbml0X21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY3OC1cXHRwcml2LVxcdTAwM2VtZGlvLVxcdTAwM2Vwcml2ID0gZGV2O1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo2Nzk6XFx0cHJpdi1cXHUwMDNlbWRpby1cXHUwMDNlcmVhZCA9IFxcdTAwMjZhc2l4X21kaW9fYnVzX3JlYWQ7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4MC1cXHRwcml2LVxcdTAwM2VtZGlvLVxcdTAwM2V3cml0ZSA9IFxcdTAwMjZhc2l4X21kaW9fYnVzX3dyaXRlO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9NjE9c3RhdGljIGludCBheDg4MTcyYV9pbml0X21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtNzItXFx0cHJpdi1cXHUwMDNlbWRpby1cXHUwMDNlcHJpdiA9ICh2b2lkICopZGV2O1xcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjczOlxcdHByaXYtXFx1MDAzZW1kaW8tXFx1MDAzZXJlYWQgPSBcXHUwMDI2YXNpeF9tZGlvX2J1c19yZWFkO1xcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTc0LVxcdHByaXYtXFx1MDAzZW1kaW8tXFx1MDAzZXdyaXRlID0gXFx1MDAyNmFzaXhfbWRpb19idXNfd3JpdGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjQ5OjM4Ljc0NTQ3MjQzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NDAwNzAyOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBhc2l4X21kaW9fYnVzX3JlYWRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgaG93IGl0J3MgaW1wbGVtZW50ZWQuIE15IGV4cGVydGlzZSBsaWVzIGluIGVtYmVkZGVkIHN5c3RlbXMsIHNvIEknbSBhbHJlYWR5IG1lbnRhbGx5IHBhcnNpbmcgaXQgZm9yIHBvdGVudGlhbCBpc3N1ZXMgbGlrZSByYWNlIGNvbmRpdGlvbnMsIHJlZ2lzdGVyIGFjY2VzcyBtZWNoYW5pc21zLCBhbmQgdGltaW5nIGNvbnN0cmFpbnRzLiBJJ20gYXNzdW1pbmcgdGhpcyBpcyByZWxhdGVkIHRvIGEgTWVkaWEgSW5kZXBlbmRlbnQgSW50ZXJmYWNlIChNSUkpIGJ1cywgbGlrZWx5IGZvciBhbiBFdGhlcm5ldCBQSFkuIEdpdmVuIHRoZSBgYXNpeGAgcHJlZml4LCBJJ2QgZ3Vlc3MgdGhpcyBpcyByZWxhdGVkIHRvIGFuIEFTSVggY2hpcHNldCwgbWVhbmluZyBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlaXIgaWRpb3N5bmNyYXNpZXMgaWYgYW55LiBMZXQncyBzZWUgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyB0aGUgcmVhZCBjeWNsZS4gSXMgaXQgdXNpbmcgcG9sbGVkIG9yIGludGVycnVwdC1kcml2ZW4gbWV0aG9kcz8gV2hhdCdzIHRoZSBlcnJvciBoYW5kbGluZyBsaWtlPyBJJ20gaG9waW5nIHRvIHNlZSBjbGVhbiBzZXBhcmF0aW9uIG9mIGNvbmNlcm5zOiBjbGVhciBkYXRhIHN0cnVjdHVyZSBmb3IgaG9sZGluZyB0aGUgTURJTyBidXMgc3RhdGUgYW5kIHN0cmFpZ2h0Zm9yd2FyZCByZWdpc3RlciBhY2Nlc3MgZnVuY3Rpb25zIHdpdGggcHJvcGVyIGVycm9yIGNoZWNraW5nLiBJJ20ga2VlbiB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIGZvciBiaXQtYmFuZ2luZywgYW55IGJpdC1zaGlmdGluZyBvcGVyYXRpb25zIGFuZCB0aGUgdXNlIG9mIHZvbGF0aWxlIHBvaW50ZXJzIHRoYXQgY291bGQgaW50cm9kdWNlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzZXF1ZW5jaW5nLCB0aGUgY2xvY2sgZ2VuZXJhdGlvbiwgYW5kIHRoZSBkYXRhIHRyYW5zbWlzc2lvbi4gTGV0J3MgbWFrZSBzdXJlIGl0J3MgZG9pbmcgaXQgcmlnaHQgYW5kIGVmZmljaWVudGx5LiBJJ20gYWxzbyB3YXRjaGluZyBvdXQgZm9yIGFueSBwb3RlbnRpYWwgbG9jay11cHMgb3IgaW5maW5pdGUgbG9vcHMuIEZpbmFsbHksIGlzIHRoZXJlIGFueSBwb3RlbnRpYWwgZm9yIGRhdGEgY29ycnVwdGlvbiBnaXZlbiB0aGUgY29tbXVuaWNhdGlvbiBlbnZpcm9ubWVudD8gT2theSwgbGV0J3MgZ2V0IGludG8gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMjUzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NDk6NDUuNTg1NTQ2NDMzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0OSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU0OTpcXHRpbnQgYXNpeF9tZGlvX2J1c19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0pXFxuIDU1MDpcXHR7XFxuIDU1MTpcXHRcXHRzdHJ1Y3QgdXNibmV0ICpwcml2ID0gYnVzLVxcdTAwM2Vwcml2O1xcbiA1NTI6XFx0XFxuIDU1MzpcXHRcXHRyZXR1cm4gX19hc2l4X21kaW9fcmVhZChwcml2LVxcdTAwM2VuZXQsIHBoeV9pZCwgcmVnbnVtLCBmYWxzZSk7XFxuIDU1NDpcXHR9XFxuIDU1NTpcXHRcXG4gNTU2OlxcdGludCBhc2l4X21kaW9fYnVzX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0sIHUxNiB2YWwpXFxuIDU1NzpcXHR7XFxuIDU1ODpcXHRcXHRzdHJ1Y3QgdXNibmV0ICpwcml2ID0gYnVzLVxcdTAwM2Vwcml2O1xcbiA1NTk6XFx0XFxuIDU2MDpcXHRcXHRyZXR1cm4gX19hc2l4X21kaW9fd3JpdGUocHJpdi1cXHUwMDNlbmV0LCBwaHlfaWQsIHJlZ251bSwgdmFsLCBmYWxzZSk7XFxuIDU2MTpcXHR9XFxuIDU2MjpcXHRcXG4gNTYzOlxcdGludCBhc2l4X21kaW9fcmVhZF9ub3BtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlfaWQsIGludCBsb2MpXFxuIDU2NDpcXHR7XFxuIDU2NTpcXHRcXHRyZXR1cm4gX19hc2l4X21kaW9fcmVhZChuZXRkZXYsIHBoeV9pZCwgbG9jLCB0cnVlKTtcXG4gNTY2OlxcdH1cXG4gNTY3OlxcdFxcbiA1Njg6XFx0dm9pZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo0OTo0NS41ODU2Mjc3NTNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyNzEyNTQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDbGF1c2UgNDUgUmVnaXN0ZXIgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIGhvbGQgb24gYSBtaW51dGUuIEknbSBmb2N1c2luZyBvbiB0aGlzIGByZWdudW1gIHBhcmFtZXRlciwgYW5kIGl0IGp1c3Qgc3RydWNrIG1lOiBgcmVnbnVtYCBjb3VsZCB2ZXJ5IHdlbGwgYmUgYSBDbGF1c2UgNDUgcmVnaXN0ZXIgYWRkcmVzcy4gVGhhdCdzIGEgY3J1Y2lhbCBkaXN0aW5jdGlvbiwgYmVjYXVzZSBpZiBpdCAqaXMqIENsYXVzZSA0NSwgdGhlbiB0aGF0IGBNSUlfQUREUl9DNDVgIGJpdCwgb3IgYDB4NDAwMDAwMDBgLCBpcyBnb2luZyB0byBiZSBzZXQuIFRoZSByZWFsIHF1ZXN0aW9uIGlzOiBkb2VzIHRoZSBgX19hc2l4X21kaW9fcmVhZGAgZnVuY3Rpb24gZXZlbiBoYW5kbGUgQ2xhdXNlIDQ1IHJlZ2lzdGVycyBjb3JyZWN0bHk/IElmIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgYXBwcm9wcmlhdGUgbG9naWMsIGl0IGNvdWxkIGp1c3QgdHJ1bmNhdGUgdGhlIGFkZHJlc3MsIG1hbmdsZSB0aGUgcmVhZCwgb3Igd29yc2UsIG91dHJpZ2h0IGZhaWwuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGZvciBgX19hc2l4X21kaW9fcmVhZGAgYW5kIHNlZSBob3cgaXQncyBhY3R1YWxseSBpbXBsZW1lbnRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBmdW5jdGlvbiBpcyBjYXBhYmxlIG9mIGRlYWxpbmcgd2l0aCB0aGUgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBpbiBhZGRyZXNzaW5nIG1vZGVzLiBUaGlzIGNvdWxkIGJlIHRoZSByb290IGNhdXNlIG9mIHRoZSBpc3N1ZSBJJ20gc2VlaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjkzNCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NDk6NDkuNjEyNzU2MjY1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxOTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUwMDpcXHRcXHRyZXQgPSBhc2l4X3NldF9od19taWkoZGV2LCBpbl9wbSk7XFxuIDUwMTpcXHRvdXQ6XFxuIDUwMjpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldi1cXHUwMDNlcGh5X211dGV4KTtcXG4gNTAzOlxcdFxcbiA1MDQ6XFx0XFx0bmV0ZGV2X2RiZyhkZXYtXFx1MDAzZW5ldCwgXFxcImFzaXhfbWRpb19yZWFkKCkgcGh5X2lkPTB4JTAyeCwgbG9jPTB4JTAyeCwgcmV0dXJucz0weCUwNHhcXFxcblxcXCIsXFxuIDUwNTpcXHRcXHRcXHRcXHRwaHlfaWQsIGxvYywgbGUxNl90b19jcHUocmVzKSk7XFxuIDUwNjpcXHRcXG4gNTA3OlxcdFxcdHJldHVybiByZXQgXFx1MDAzYyAwID8gcmV0IDogbGUxNl90b19jcHUocmVzKTtcXG4gNTA4OlxcdH1cXG4gNTA5OlxcdFxcbiA1MTA6XFx0aW50IGFzaXhfbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlfaWQsIGludCBsb2MpXFxuIDUxMTpcXHR7XFxuIDUxMjpcXHRcXHRyZXR1cm4gX19hc2l4X21kaW9fcmVhZChuZXRkZXYsIHBoeV9pZCwgbG9jLCBmYWxzZSk7XFxuIDUxMzpcXHR9XFxuIDUxNDpcXHRcXG4gNTE1OlxcdHN0YXRpYyBpbnQgX19hc2l4X21kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBoeV9pZCwgaW50IGxvYyxcXG4gNTE2OlxcdFxcdFxcdFxcdCAgICAgaW50IHZhbCwgYm9vbCBpbl9wbSlcXG4gNTE3OlxcdHtcXG4gNTE4OlxcdFxcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIDUxOTpcXHRcXHRfX2xlMTYgcmVzID0gY3B1X3RvX2xlMTYodmFsKTtcXG4gNTIwOlxcdFxcdGludCByZXQ7XFxuIDUyMTpcXHRcXG4gNTIyOlxcdFxcdG5ldGRldl9kYmcoZGV2LVxcdTAwM2VuZXQsIFxcXCJhc2l4X21kaW9fd3JpdGUoKSBwaHlfaWQ9MHglMDJ4LCBsb2M9MHglMDJ4LCB2YWw9MHglMDR4XFxcXG5cXFwiLFxcbiA1MjM6XFx0XFx0XFx0XFx0cGh5X2lkLCBsb2MsIHZhbCk7XFxuIDUyNDpcXHRcXG4gNTI1OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmRldi1cXHUwMDNlcGh5X211dGV4KTtcXG4gNTI2OlxcdFxcbiA1Mjc6XFx0XFx0cmV0ID0gYXNpeF9jaGVja19ob3N0X2VuYWJsZShkZXYsIGluX3BtKTtcXG4gNTI4OlxcdFxcdGlmIChyZXQgPT0gLUVOT0RFVilcXG4gNTI5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA1MzA6XFx0XFxuIDUzMTpcXHRcXHRyZXQgPSBhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9NSUlfUkVHLCBwaHlfaWQsIChfX3UxNilsb2MsIDIsXFxuIDUzMjpcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZyZXMsIGluX3BtKTtcXG4gNTMzOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA1MzQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDUzNTpcXHRcXG4gNTM2OlxcdFxcdHJldCA9IGFzaXhfc2V0X2h3X21paShkZXYsIGluX3BtKTtcXG4gNTM3OlxcdG91dDpcXG4gNTM4OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGV2LVxcdTAwM2VwaHlfbXV0ZXgpO1xcbiA1Mzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjQ5OjQ5LjYxMjg0MDIxNVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzkyNjk1MjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBDbGF1c2UgNDUgTUlJIFJlYWQgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYGxvY2AgYmVpbmcgY2FzdCB0byBgX191MTZgLiBUaGF0J3MgYSByZWQgZmxhZy4gU3BlY2lmaWNhbGx5LCBgTUlJX0FERFJfQzQ1YCAoMHg0MDAwMDAwMCkgaXMgZ29pbmcgdG8gZ2V0IHRydW5jYXRlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBjb3VsZCBiZSBhIHByb2JsZW0uIEJ1dCB3YWl0LCBsZXQncyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIGhvdyB0aGUgTURJTyBidXMgb3BlcmF0ZXMuXG5cbmBtZGlvYnVzX3JlYWRgLCBpbiBgZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmNgLCBoYW5kbGVzIENsYXVzZSA0NSByZWFkcyBkaWZmZXJlbnRseS4gSXQgZmlyc3QgY2hlY2tzIGlmIHRoZSBidXMgaGFzIGEgYHJlYWRfYzQ1YCBmdW5jdGlvbiBwb2ludGVyLiBJZiBpdCBkb2VzLCBncmVhdCwgaXQgdXNlcyB0aGF0LiBJZiBub3QsIGl0IGZhbGxzIGJhY2sgdG8gdGhlIHJlZ3VsYXIgYGJ1cy1cdTAwM2VyZWFkYCBmdW5jdGlvbi4gVGhhdCdzIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nLlxuXG5Ib3dldmVyLCBhIHF1aWNrIHNlY29uZCBwYXNzIGNvbmZpcm1zIHRoYXQgaWYgdGhlIFBIWSBkcml2ZXIgcmVsaWVzIG9uIGBwaHlfcmVhZF9tbWRgLCBpdCB3aWxsIGV2ZW50dWFsbHkgY2FsbCBgYnVzLVx1MDAzZXJlYWRfYzQ1YCBvciBgYnVzLVx1MDAzZXJlYWRgIHdpdGggYE1JSV9BRERSX0M0NWAuXG5cblNvLCB0aGUgaXNzdWUgaXMgdGhhdCBpZiBgYXNpeF9tZGlvX2J1c19yZWFkYCB0cnVuY2F0ZXMgYE1JSV9BRERSX0M0NWAsIHdlIGFyZSBsaWtlbHkgZ29pbmcgdG8gcmVhZCBhIENsYXVzZSAyMiByZWdpc3RlciBpbnN0ZWFkLiBQb3RlbnRpYWxseSBhIHZ1bG5lcmFiaWxpdHkgaWYgdGhhdCByZWFkIGV4cG9zZXMgc29tZXRoaW5nIGl0IHNob3VsZG4ndC5cblxuTm93LCB0aGUgcGF0Y2ggaW4gcXVlc3Rpb24gaXMgaW4gYHJlYWx0ZWtfbWFpbi5jYCwgd2hpY2ggaXMgYSBQSFkgZHJpdmVyLiBBaGEhIFNvIGl0ICpzaG91bGRuJ3QqIGJlIHVzaW5nIHRoZSBgYXNpeF9tZGlvX2J1c19yZWFkYCBmdW5jdGlvbiFcblxuVGhlIHF1ZXN0aW9uIG5vdyBiZWNvbWVzOiBIb3cgY2FuIEkgdHJpZ2dlciB0aGlzIHNjZW5hcmlvIGFuZCB0ZXN0IGlmIHRoaXMgdHJ1bmNhdGlvbiBsZWFkcyB0byBhbiBleHBsb2l0YWJsZSByZWFkPyBDYW4gSSB1c2Ugc29tZXRoaW5nIGxpa2UgYG1kaW8tbW9ja3VwYD8gTGV0J3MgY2hlY2suIERvZXMgaXQgZXhpc3Qgb3IgaG93IGNhbiBJIGluc3RhbnRpYXRlIGEgUEhZPyBJcyB0aGVyZSBhIHVzZXItc3BhY2Ugd2F5IHRvIG1lc3Mgd2l0aCB0aGUgZHJpdmVycz8gQWgsIGBzeXNmc2AuLi4gYWx3YXlzIGEgZ29vZCBiZXQuXG5cbldhaXQsIEkgdGhvdWdodCB0aGVyZSB3YXMgYSBgbWRpby1tb2NrdXAuY2A/IE5vLiBPa2F5LCBJIHNlYXJjaGVkIHRoZSByaWdodCBwYXRoIGFuZCBub3RoaW5nLiBNYXliZSBJIG1pc3NlZCBzb21ldGhpbmcgb3IgbWlzLXJlbWVtYmVyZWQgdGhlIGRyaXZlciBsb2NhdGlvbi4gSSB3aWxsIHNlYXJjaCBgZHJpdmVycy9uZXQvYCBmb3IgYG1vY2t1cGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzOTgxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NDk6NTcuMDA1NTM3OThaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDgzMTQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2NrdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTQ0Nj1zdGF0aWMgaW50IF9faW5pdCBkc2FfbG9vcF9jcmVhdGVfc3dpdGNoX21kaW9kZXYodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ1NS1cXHRcXHR9LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ1NjpcXHRcXHQubmFtZSA9IFxcXCJEU0EgbW9ja3VwIGRyaXZlclxcXCIsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDU3LVxcdFxcdC5lbmFibGVkX3BvcnRzID0gMHgxZixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NDk6NTcuMTkwMzc4MDNaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5ODk5NzM0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgaW5pdGlhbCB0aG91Z2h0czpcblxuKipFdmFsdWF0aW5nIFBIWSBMYXllciBPcHRpb25zKipcblxuUmlnaHQsIHNvIHRoZSBgbWRpby1tb2NrdXBgIGFwcHJvYWNoIGlzbid0IGdvaW5nIHRvIGN1dCBpdCBmb3IgdGhpcyBwcm9qZWN0LiBUaGF0J3MgYSBkZWZpbml0ZSBuby1nby4gSSBuZWVkIHRvIHBpdm90IGFuZCBjb25zaWRlciBteSBvcHRpb25zIGZvciB0aGUgUEhZIGxheWVyLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRvIGV4cGxvcmUgYGZpeGVkLXBoeWAuIEknbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byB0aGUgaW1wbGljYXRpb25zIG9mIHVzaW5nIHRoYXQgaW5zdGVhZC4gVGhlIHdob2xlICdtb2NrdXAnIGlkZWEgaXNuJ3Qgcm9idXN0IG9yIHNjYWxhYmxlIGVub3VnaCBmb3Igd2hhdCBJIGhhdmUgaW4gbWluZCwgc28gSSdtIGtlZW4gdG8gZXZhbHVhdGUgYSBtb3JlIGNvbmNyZXRlIHNvbHV0aW9uIGltbWVkaWF0ZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDk4NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjUwOjAxLjA4OTM3ODc4NFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc4MzkxMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZml4ZWRfcGh5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlPTYzPW9iai0kKENPTkZJR19EUDgzVEc3MjBfUEhZKVxcdCs9IGRwODN0ZzcyMC5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjY0Om9iai0kKENPTkZJR19GSVhFRF9QSFkpXFx0XFx0Kz0gZml4ZWRfcGh5Lm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtNjUtb2JqLSQoQ09ORklHX0lDUExVU19QSFkpXFx0Kz0gaWNwbHVzLm9cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0yNy1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6Mjg6c3RydWN0IGZpeGVkX3BoeSB7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTI5LVxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjMwOlxcdHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzIHN0YXR1cztcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MzE6XFx0aW50ICgqbGlua191cGRhdGUpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICopO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0zMi19O1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0zMy1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MzQ6c3RhdGljIERFQ0xBUkVfQklUTUFQKGZpeGVkX3BoeV9pZHMsIE5VTV9GUCk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjM1OnN0YXRpYyBzdHJ1Y3QgZml4ZWRfcGh5IGZtYl9maXhlZF9waHlzW05VTV9GUF07XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTM2LXN0YXRpYyBzdHJ1Y3QgbWlpX2J1cyAqZm1iX21paV9idXM7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTM3LVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzozODpzdGF0aWMgc3RydWN0IGZpeGVkX3BoeSAqZml4ZWRfcGh5X2ZpbmQoaW50IGFkZHIpXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTM5LXtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NDA6XFx0cmV0dXJuIHRlc3RfYml0KGFkZHIsIGZpeGVkX3BoeV9pZHMpID8gZm1iX2ZpeGVkX3BoeXMgKyBhZGRyIDogTlVMTDtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNDEtfVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy00Mi1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NDM6aW50IGZpeGVkX3BoeV9jaGFuZ2VfY2FycmllcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5ld19jYXJyaWVyKVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy00NC17XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTQ1LVxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBkZXYtXFx1MDAzZXBoeWRldjtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NDY6XFx0c3RydWN0IGZpeGVkX3BoeSAqZnA7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTQ3LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTUwLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo1MTpcXHRmcCA9IGZpeGVkX3BoeV9maW5kKHBoeWRldi1cXHUwMDNlbWRpby5hZGRyKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNTItXFx0aWYgKCFmcClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy01OC19XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjU5OkVYUE9SVF9TWU1CT0xfR1BMKGZpeGVkX3BoeV9jaGFuZ2VfY2Fycmllcik7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTYwLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYz02MT1zdGF0aWMgaW50IGZpeGVkX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGludCByZWdfbnVtKVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy02Mi17XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjYzOlxcdHN0cnVjdCBmaXhlZF9waHkgKmZwO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy02NC1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NjU6XFx0ZnAgPSBmaXhlZF9waHlfZmluZChwaHlfYWRkcik7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTY2LVxcdGlmICghZnApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM9NzU9c3RhdGljIGludCBmaXhlZF9tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IHJlZ19udW0sXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtODUtICovXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjg2OmludCBmaXhlZF9waHlfc2V0X2xpbmtfdXBkYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTg3LVxcdFxcdFxcdCAgICAgIGludCAoKmxpbmtfdXBkYXRlKShzdHJ1Y3QgbmV0X2RldmljZSAqLFxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo4ODpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKikpXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTg5LXtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6OTA6XFx0c3RydWN0IGZpeGVkX3BoeSAqZnA7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTkxLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTk0LVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo5NTpcXHRmcCA9IGZpeGVkX3BoeV9maW5kKHBoeWRldi1cXHUwMDNlbWRpby5hZGRyKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtOTYtXFx0aWYgKCFmcClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMDMtfVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMDQ6RVhQT1JUX1NZTUJPTF9HUEwoZml4ZWRfcGh5X3NldF9saW5rX3VwZGF0ZSk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEwNS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTA2OnN0YXRpYyB2b2lkIGZpeGVkX3BoeV9kZWwoaW50IHBoeV9hZGRyKVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMDcte1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMDg6XFx0c3RydWN0IGZpeGVkX3BoeSAqZnA7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEwOS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTEwOlxcdGZwID0gZml4ZWRfcGh5X2ZpbmQocGh5X2FkZHIpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMTEtXFx0aWYgKCFmcClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMTQtXFx0bWVtc2V0KGZwLCAwLCBzaXplb2YoKmZwKSk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjExNTpcXHRjbGVhcl9iaXQocGh5X2FkZHIsIGZpeGVkX3BoeV9pZHMpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMTYtfVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMTctXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjExODpzdGF0aWMgaW50IGZpeGVkX3BoeV9nZXRfZnJlZV9hZGRyKHZvaWQpXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTExOS17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTIyLVxcdGRvIHtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTIzOlxcdFxcdGFkZHIgPSBmaW5kX2ZpcnN0X3plcm9fYml0KGZpeGVkX3BoeV9pZHMsIE5VTV9GUCk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEyNC1cXHRcXHRpZiAoYWRkciA9PSBOVU1fRlApXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEyNS1cXHRcXHRcXHRyZXR1cm4gLUVOT1NQQztcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTI2OlxcdH0gd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoYWRkciwgZml4ZWRfcGh5X2lkcykpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMjctXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTMwLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMzE6c3RydWN0IHBoeV9kZXZpY2UgKmZpeGVkX3BoeV9yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdHVzLFxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMzItXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpucClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNDUtXFx0LyogR2V0IHRoZSBuZXh0IGF2YWlsYWJsZSBQSFkgYWRkcmVzcywgdXAgdG8gTlVNX0ZQICovXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE0NjpcXHRwaHlfYWRkciA9IGZpeGVkX3BoeV9nZXRfZnJlZV9hZGRyKCk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE0Ny1cXHRpZiAocGh5X2FkZHIgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE0OS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTUwOlxcdGZtYl9maXhlZF9waHlzW3BoeV9hZGRyXS5zdGF0dXMgPSAqc3RhdHVzO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNTE6XFx0Zm1iX2ZpeGVkX3BoeXNbcGh5X2FkZHJdLnN0YXR1cy5saW5rID0gdHJ1ZTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTUyLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE1NC1cXHRpZiAoSVNfRVJSKHBoeSkpIHtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTU1OlxcdFxcdGZpeGVkX3BoeV9kZWwocGh5X2FkZHIpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNTYtXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTY2LVxcdFxcdG9mX25vZGVfcHV0KG5wKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTY3OlxcdFxcdGZpeGVkX3BoeV9kZWwocGh5X2FkZHIpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNjgtXFx0XFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNzItfVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNzM6RVhQT1JUX1NZTUJPTF9HUEwoZml4ZWRfcGh5X3JlZ2lzdGVyKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTc0LVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNzU6c3RydWN0IHBoeV9kZXZpY2UgKmZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCh2b2lkKVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNzYte1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNzc6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzIHN0YXR1cyA9IHtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTc4LVxcdFxcdC5zcGVlZFxcdD0gU1BFRURfMTAwLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE4MS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTgyOlxcdHJldHVybiBmaXhlZF9waHlfcmVnaXN0ZXIoXFx1MDAyNnN0YXR1cywgTlVMTCk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE4My19XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE4NDpFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xODUtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE4Njp2b2lkIGZpeGVkX3BoeV91bnJlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE4Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTg5LVxcdG9mX25vZGVfcHV0KHBoeS1cXHUwMDNlbWRpby5kZXYub2Zfbm9kZSk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE5MDpcXHRmaXhlZF9waHlfZGVsKHBoeS1cXHUwMDNlbWRpby5hZGRyKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTkxLVxcdHBoeV9kZXZpY2VfZnJlZShwaHkpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xOTItfVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxOTM6RVhQT1JUX1NZTUJPTF9HUEwoZml4ZWRfcGh5X3VucmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xOTQtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTMzNjA9c3RhdGljIGludCBwaHlsaW5rX21paV9lbXVsX3JlYWQodW5zaWduZWQgaW50IHJlZyxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzM2Mi17XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozMzYzOlxcdHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzIGZzO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzM2NC1cXHR1bnNpZ25lZCBsb25nICpscGEgPSBzdGF0ZS1cXHUwMDNlbHBfYWR2ZXJ0aXNpbmc7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy00LSAqXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM6NTogKiBDb2RlIHRha2VuIGZyb20gZml4ZWRfcGh5LmMgYnkgUnVzc2VsbCBLaW5nLlxcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jLTYtICpcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jPTcxPXN0YXRpYyBpbnQgc3dwaHlfZGVjb2RlX3NwZWVkKGludCBzcGVlZClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jLTkyLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jOjkzOmludCBzd3BoeV92YWxpZGF0ZV9zdGF0ZShjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdGUpXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtOTQte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM9MTA2PUVYUE9SVF9TWU1CT0xfR1BMKHN3cGh5X3ZhbGlkYXRlX3N0YXRlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jLTExNC0gKi9cXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYzoxMTU6aW50IHN3cGh5X3JlYWRfcmVnKGludCByZWcsIGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0ZSlcXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy0xMTYte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmgtNC1cXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuaDo1OnN0cnVjdCBmaXhlZF9waHlfc3RhdHVzO1xcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5oLTYtXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5Lmg6NzppbnQgc3dwaHlfdmFsaWRhdGVfc3RhdGUoY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXRlKTtcXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuaDo4OmludCBzd3BoeV9yZWFkX3JlZyhpbnQgcmVnLCBjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdGUpO1xcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5oLTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjUwOjAxLjE0NzIyNTM2NloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjM5MDI4MzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkFuYWx5emluZyBQSFkgRHJpdmVyIEluc3RhbnRpYXRpb24qKlxuXG5XYWl0IGEgbWludXRlLCBJJ20gZ2V0dGluZyBtaXhlZCB1cC4gYGZpeGVkX3BoeWAgaXNuJ3QgbWVhbnQgZm9yIGR5bmFtaWNhbGx5IGNyZWF0aW5nIFBIWSBkcml2ZXJzLCBpdCdzIHNwZWNpZmljYWxseSBmb3IgZml4ZWQtbGluayBjb25maWd1cmF0aW9ucy4gVGhhdCdzIG5vdCBnb2luZyB0byB3b3JrLiBEYW1uLCBzbywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGluc3RhbnRpYXRlIHRoZXNlIFBIWSBkcml2ZXJzICp3aXRob3V0KiB0aGUgdHJhZGl0aW9uYWwgZml4ZWQtbGluayBhcHByb2FjaC5cblxuT2theSwgbGV0J3MgZXhwbG9yZSBvdGhlciBhdmVudWVzLiBXaGF0IGFib3V0IGxldmVyYWdpbmcgYHN5el9nZW5ldGxpbmtgIG9yLCBjb3VsZCBJIHVzZSBgc3l6X3VzYl9jb25uZWN0YCBpbnN0ZWFkPyBJZiBJIGdvIHdpdGggYHN5el91c2JfY29ubmVjdGAsIGNvdWxkIEkgZW11bGF0ZSBhIFVTQiBkZXZpY2UgdGhhdCdzIGNvbXBhdGlibGUgd2l0aCBvbmUgb2YgdGhlIHRhcmdldCBkcml2ZXJzLCBtYXliZSBgYXg4ODE3MmFgLCBgc21zYzk1eHhgLCBgbGFuNzh4eGAsIG9yIGByODE1MmA/XG5cbkhvbGQgb24uLi4gSSdtIHRoaW5raW5nLi4uIE5vdywgZGlkbid0IGBsYW43OHh4YCB1c2Ugc29tZXRoaW5nIHJlbGF0ZWQgdG8gYHBoeV9jb25uZWN0YD8gQWgsIHllcyEgSSdsbCBjaGVjayBgbGFuNzh4eF9tZGlvX3JlYWRgIGFzIHRoYXQgbWF5IG9mZmVyIHNvbWUgaW5zaWdodCBpbnRvIGhvdyBgbGFuNzh4eGAgY29ubmVjdHMgdG8gdGhlIFBIWS4gVGhhdCBtaWdodCBiZSB0aGUga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozODMwNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo1MDowNS43ODYyNTY2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzUxMTI5OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGFuNzh4eF9tZGlvX3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NTA6MDUuODQ5Nzc0OTk5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTkwMzIwNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgbGFuNzh4eGAgRHJpdmVyIGFuZCBNRElPKipcblxuQWxyaWdodCwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgYGxhbjc4eHhgIGRyaXZlciBhbmQgaG93IGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgTURJTyBpbnRlcmZhY2UuIEdpdmVuIHRoZSBjb250ZXh0LCBJJ20gbGlrZWx5IHRyb3VibGVzaG9vdGluZyBzb21ldGhpbmcgc3BlY2lmaWPigJRwZXJoYXBzIGEgY29tbXVuaWNhdGlvbiBpc3N1ZSwgYSBtaXNzaW5nIGZlYXR1cmUsIG9yIHNvbWUgdW5leHBlY3RlZCBiZWhhdmlvciByZWxhdGVkIHRvIHRoZSBQSFkgbWFuYWdlbWVudC4gTXkgaW5pdGlhbCBhcHByb2FjaCBpcyB0byBzdGFydCBhdCB0aGUgc291cmNlLiBVbmRlcnN0YW5kaW5nIHRoZSBgbWRpb2AgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGF0IHNwZWNpZmljIGRyaXZlciBpcyBrZXkuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgTURJTyBjb21tYW5kcyBhcmUgY29uc3RydWN0ZWQsIGhvdyB0aGUgZGF0YSBpcyBjbG9ja2VkIG91dCwgYW5kIHdoYXQgdGhlIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyBsb29rIGxpa2UuIEdvdHRhIHNlZSBpZiB0aGVyZSdzIGFueXRoaW5nIG9idmlvdXNseSBhd3J5IGluIHRoZSByZWdpc3RlciBhY2Nlc3NlcyBvciBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIHByb2JsZW1zLiBJJ2xsIHByb2JhYmx5IGJlIGRpdmluZyBpbnRvIHRoZSByZWdpc3RlciBkZWZpbml0aW9ucyBhbmQgYW55IGFzc29jaWF0ZWQgaGVscGVyIGZ1bmN0aW9ucyBxdWlja2x5LiBHb3R0YSBnZXQgdGhpcyBuYWlsZWQgZG93bi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg3NDYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo1MDowOS41NDg4MDk2MloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUwNjYwNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwdjYuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMS0jaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTI5LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9taWNyb2NoaXBwaHkuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjMwOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9tZGlvLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0zMS0jaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfbmV0LmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTQxMz1zdHJ1Y3QgbGFuNzh4eF9uZXQge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy00NDEtXFx0c3RydWN0IG11dGV4XFx0XFx0ZGV2X211dGV4OyAvKiBzZXJpYWxpc2Ugb3Blbi9zdG9wIHdydCBzdXNwZW5kL3Jlc3VtZSAqL1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6NDQyOlxcdHN0cnVjdCBtdXRleFxcdFxcdG1kaW9idXNfbXV0ZXg7IC8qIGZvciBNRElPIGJ1cyBhY2Nlc3MgKi9cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTQ0My1cXHR1bnNpZ25lZCBpbnRcXHRcXHRwaXBlX2luLCBwaXBlX291dCwgcGlwZV9pbnRyO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy00NTgtXFx0dTMyXFx0XFx0XFx0Y2hpcHJldjtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjQ1OTpcXHRzdHJ1Y3QgbWlpX2J1c1xcdFxcdCptZGlvYnVzO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtNDYwLVxcdHBoeV9pbnRlcmZhY2VfdFxcdFxcdGludGVyZmFjZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9OTQ2PXN0YXRpYyBpbnQgbGFuNzh4eF9mbHVzaF9yeF9maWZvKHN0cnVjdCBsYW43OHh4X25ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy05NTAtXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzo5NTE6LyogTG9vcCB1bnRpbCB0aGUgcmVhZCBpcyBjb21wbGV0ZWQgd2l0aCB0aW1lb3V0IGNhbGxlZCB3aXRoIG1kaW9idXNfbXV0ZXggaGVsZCAqL1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6OTUyOnN0YXRpYyBpbnQgbGFuNzh4eF9tZGlvYnVzX3dhaXRfbm90X2J1c3koc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy05NTMte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0xNTgyPXN0YXRpYyBpbnQgbGFuNzh4eF9tYWNfcmVzZXQoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTE1ODctXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoxNTg4OlxcdG11dGV4X2xvY2soXFx1MDAyNmRldi1cXHUwMDNlbWRpb2J1c19tdXRleCk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0xNTg5LVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0xNTkzLVxcdCAqL1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MTU5NDpcXHRyZXQgPSBsYW43OHh4X21kaW9idXNfd2FpdF9ub3RfYnVzeShkZXYpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTU5NS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTYyMi1leGl0X3VubG9jazpcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjE2MjM6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZW1kaW9idXNfbXV0ZXgpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTYyNC1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9MTk0ND1zdGF0aWMgaW50IGxhbjc4eHhfaW5pdF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbGFuNzh4eF9uZXQgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjAxMS0vKiBNRElPIHJlYWQgYW5kIHdyaXRlIHdyYXBwZXJzIGZvciBwaHlsaWIgKi9cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwMTI6c3RhdGljIGludCBsYW43OHh4X21kaW9idXNfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgaWR4KVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjAxMy17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwMjEtXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDIyOlxcdG11dGV4X2xvY2soXFx1MDAyNmRldi1cXHUwMDNlbWRpb2J1c19tdXRleCk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDIzLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjAyNC1cXHQvKiBjb25maXJtIE1JSSBub3QgYnVzeSAqL1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjAyNTpcXHRyZXQgPSBsYW43OHh4X21kaW9idXNfd2FpdF9ub3RfYnVzeShkZXYpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjAyNi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjAzNC1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwMzU6XFx0cmV0ID0gbGFuNzh4eF9tZGlvYnVzX3dhaXRfbm90X2J1c3koZGV2KTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwMzYtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwNDUtZG9uZTpcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwNDY6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZW1kaW9idXNfbXV0ZXgpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA0Ny1cXHR1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoZGV2LVxcdTAwM2VpbnRmKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA1MS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwNTI6c3RhdGljIGludCBsYW43OHh4X21kaW9idXNfd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGlkeCxcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwNTMtXFx0XFx0XFx0XFx0IHUxNiByZWd2YWwpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwNjItXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDYzOlxcdG11dGV4X2xvY2soXFx1MDAyNmRldi1cXHUwMDNlbWRpb2J1c19tdXRleCk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDY0LVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA2NS1cXHQvKiBjb25maXJtIE1JSSBub3QgYnVzeSAqL1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjA2NjpcXHRyZXQgPSBsYW43OHh4X21kaW9idXNfd2FpdF9ub3RfYnVzeShkZXYpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA2Ny1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA4MC1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwODE6XFx0cmV0ID0gbGFuNzh4eF9tZGlvYnVzX3dhaXRfbm90X2J1c3koZGV2KTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwODItXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwODUtZG9uZTpcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwODY6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZW1kaW9idXNfbXV0ZXgpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA4Ny1cXHR1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoZGV2LVxcdTAwM2VpbnRmKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA5MC1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwOTE6c3RhdGljIGludCBsYW43OHh4X21kaW9faW5pdChzdHJ1Y3QgbGFuNzh4eF9uZXQgKmRldilcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwOTIte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDk1LVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjA5NjpcXHRkZXYtXFx1MDAzZW1kaW9idXMgPSBtZGlvYnVzX2FsbG9jKCk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDk3OlxcdGlmICghZGV2LVxcdTAwM2VtZGlvYnVzKSB7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDk4LVxcdFxcdG5ldGRldl9lcnIoZGV2LVxcdTAwM2VuZXQsIFxcXCJjYW4ndCBhbGxvY2F0ZSBNRElPIGJ1c1xcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMDEtXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTAyOlxcdGRldi1cXHUwMDNlbWRpb2J1cy1cXHUwMDNlcHJpdiA9ICh2b2lkICopZGV2O1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEwMzpcXHRkZXYtXFx1MDAzZW1kaW9idXMtXFx1MDAzZXJlYWQgPSBsYW43OHh4X21kaW9idXNfcmVhZDtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMDQ6XFx0ZGV2LVxcdTAwM2VtZGlvYnVzLVxcdTAwM2V3cml0ZSA9IGxhbjc4eHhfbWRpb2J1c193cml0ZTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMDU6XFx0ZGV2LVxcdTAwM2VtZGlvYnVzLVxcdTAwM2VuYW1lID0gXFxcImxhbjc4eHgtbWRpb2J1c1xcXCI7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTA2OlxcdGRldi1cXHUwMDNlbWRpb2J1cy1cXHUwMDNlcGFyZW50ID0gXFx1MDAyNmRldi1cXHUwMDNldWRldi1cXHUwMDNlZGV2O1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjEwNy1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMDg6XFx0c25wcmludGYoZGV2LVxcdTAwM2VtZGlvYnVzLVxcdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcXFwidXNiLSUwM2Q6JTAzZFxcXCIsXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTA5LVxcdFxcdCBkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWJ1cy1cXHUwMDNlYnVzbnVtLCBkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRldm51bSk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMTQtXFx0XFx0Lyogc2V0IHRvIGludGVybmFsIFBIWSBpZCAqL1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjExNTpcXHRcXHRkZXYtXFx1MDAzZW1kaW9idXMtXFx1MDAzZXBoeV9tYXNrID0gfigxIFxcdTAwM2NcXHUwMDNjIDEpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjExNi1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjEyMC1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMjE6XFx0bm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldi1cXHUwMDNldWRldi1cXHUwMDNlZGV2Lm9mX25vZGUsIFxcXCJtZGlvXFxcIik7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTIyOlxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoZGV2LVxcdTAwM2VtZGlvYnVzLCBub2RlKTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMjMtXFx0b2Zfbm9kZV9wdXQobm9kZSk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMjgtXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTI5OlxcdG5ldGRldl9kYmcoZGV2LVxcdTAwM2VuZXQsIFxcXCJyZWdpc3RlcmVkIG1kaW9idXMgYnVzICVzXFxcXG5cXFwiLCBkZXYtXFx1MDAzZW1kaW9idXMtXFx1MDAzZWlkKTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMzAtXFx0cmV0dXJuIDA7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTMxLWV4aXQxOlxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEzMjpcXHRtZGlvYnVzX2ZyZWUoZGV2LVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMzMtXFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjEzNS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMzY6c3RhdGljIHZvaWQgbGFuNzh4eF9yZW1vdmVfbWRpbyhzdHJ1Y3QgbGFuNzh4eF9uZXQgKmRldilcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMzcte1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEzODpcXHRtZGlvYnVzX3VucmVnaXN0ZXIoZGV2LVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMzk6XFx0bWRpb2J1c19mcmVlKGRldi1cXHUwMDNlbWRpb2J1cyk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTQwLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9MjY0OT1zdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKmxhbjc4eHhfZ2V0X3BoeShzdHJ1Y3QgbGFuNzh4eF9uZXQgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjY1My1cXHQvKiBBdHRlbXB0IHRvIGxvY2F0ZSBhIFBIWSBvbiB0aGUgTURJTyBidXMgKi9cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjI2NTQ6XFx0cGh5ZGV2ID0gcGh5X2ZpbmRfZmlyc3QoZGV2LVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTI2NTUtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTI3Njk9c3RhdGljIGludCBsYW43OHh4X2NvbmZpZ3VyZV9sZWRzX2Zyb21fZHQoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTI3NzEte1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6Mjc3MjpcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5vZl9ub2RlO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjc3My1cXHR1MzIgcmVnO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0yODU4PXN0YXRpYyBpbnQgbGFuNzh4eF9waHlfaW5pdChzdHJ1Y3QgbGFuNzh4eF9uZXQgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjkwNC1cXHRcXHRuZXRkZXZfZXJyKGRldi1cXHUwMDNlbmV0LCBcXFwiY2FuJ3QgYXR0YWNoIFBIWSB0byAlcywgZXJyb3IgJXBlXFxcXG5cXFwiLFxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjkwNTpcXHRcXHRcXHQgICBkZXYtXFx1MDAzZW1kaW9idXMtXFx1MDAzZWlkLCBFUlJfUFRSKHJldCkpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjkwNi1cXHRcXHRnb3RvIHBoeWxpbmtfdW5pbml0O1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0zNzYyPXN0YXRpYyBpbnQgbGFuNzh4eF9iaW5kKHN0cnVjdCBsYW43OHh4X25ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMzgyMC1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjM4MjE6XFx0cmV0ID0gbGFuNzh4eF9tZGlvX2luaXQoZGV2KTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTM4MjItXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0zODQ0PXN0YXRpYyB2b2lkIGxhbjc4eHhfdW5iaW5kKHN0cnVjdCBsYW43OHh4X25ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMzg0OS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjM4NTA6XFx0bGFuNzh4eF9yZW1vdmVfbWRpbyhkZXYpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMzg1MS1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9NDY1NT1zdGF0aWMgaW50IGxhbjc4eHhfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTQ2ODgtXFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2VyeHFfb3ZlcmZsb3cpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6NDY4OTpcXHRtdXRleF9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZW1kaW9idXNfbXV0ZXgpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtNDY5MC1cXHRtdXRleF9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZWRldl9tdXRleCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjUwOjA5LjYwMzg4MDkzM1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDQ1Mzc3MTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBjaGVja2luZyBgbGFuNzh4eF9tZGlvYnVzX3JlYWRgOlxuXG4qKkRpc3NlY3RpbmcgYGxhbjc4eHhfbWRpb2J1c19yZWFkYCoqXG5cbkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBgbGFuNzh4eF9tZGlvYnVzX3JlYWRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGl0J3Mgc3VwcG9zZWQgdG8gYmUgZG9pbmcsIGFuZCBob3cgd2VsbCBpdCdzIGFjY29tcGxpc2hpbmcgaXQuIFRoZSBuYW1lIHN1Z2dlc3RzIGl0J3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciByZWFkaW5nIGRhdGEgZnJvbSBhbiBNRElPIChNYW5hZ2VtZW50IERhdGEgSW5wdXQvT3V0cHV0KSBidXMsIGxpa2VseSByZWxhdGVkIHRvIHRoZSBMQU43OHh4IEV0aGVybmV0IGNvbnRyb2xsZXIuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknZCBleHBlY3QgaXQncyBoYW5kbGluZyB0aGUgbG93LWxldmVsIGNvbW11bmljYXRpb24gcHJvdG9jb2wgZm9yIGFjY2Vzc2luZyByZWdpc3RlcnMgb24gYW4gRXRoZXJuZXQgUEhZIG9yIE1BQy4gSSBuZWVkIHRvIGNvbnNpZGVyIGl0cyBwYXJhbWV0ZXJzLCByZXR1cm4gdmFsdWVzLCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuXG5cbkZpcnN0LCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgZnVuY3Rpb24ncyBkZWZpbml0aW9uIHRvIHNlZSB3aGF0IGFyZ3VtZW50cyBpdCB0YWtlcy4gRG9lcyBpdCByZWNlaXZlIHRoZSBNRElPIGJ1cyBpdHNlbGYsIHRoZSBkZXZpY2UgYWRkcmVzcywgcmVnaXN0ZXIgYWRkcmVzcywgYW5kIGEgcG9pbnRlciB0byBzdG9yZSB0aGUgcmVhZCBkYXRhPyBEb2VzIGl0IHJldHVybiBhbiBlcnJvciBjb2RlIG9yIGEgdmFsdWU/IE5leHQsIEkgd2FudCB0byB0cmFjZSB0aGUgY29kZS4gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgbG9naWM6IERvZXMgaXQgbG9jayBhIG11dGV4IHRvIHByb3RlY3QgdGhlIE1ESU8gYnVzIGFjY2Vzcz8gSG93IGRvZXMgaXQgYWN0dWFsbHkgdHJhbnNtaXQgdGhlIHJlYWQgY29tbWFuZD8gRG9lcyBpdCBjaGVjayBmb3IgdGhlIGFja25vd2xlZGdlIGJpdCBmcm9tIHRoZSBkZXZpY2UsIGFuZCBpZiBzbywgaG93IGlzIGl0IGhhbmRsaW5nIGVycm9ycz8gRG9lcyBpdCBtYW5hZ2UgdGhlIHRpbWluZyBwcm9wZXJseSwgY29uc2lkZXJpbmcgdGhlIE1ESU8gY2xvY2sgZnJlcXVlbmN5PyBIb3cgYXJlIHRoZSByZWFkIGRhdGEgcmV0dXJuZWQuIEkgYWxzbyBuZWVkIHRvIGFzc2VzcyBpdHMgZXJyb3IgaGFuZGxpbmc6IERvZXMgaXQgZ3JhY2VmdWxseSBtYW5hZ2UgcG90ZW50aWFsIGlzc3VlcyBsaWtlIGJ1cyBjb250ZW50aW9uLCBpbmNvcnJlY3QgYWRkcmVzc2VzLCBvciB0aW1lb3V0cz8gSXMgdGhlcmUgYW55IHdhdGNoZG9nIGxvZ2ljPyBEb2VzIGl0IGhhbmRsZSBwb3RlbnRpYWwgZW5kaWFubmVzcyBpc3N1ZXM/XG5cbkkgc2hvdWxkIHRoZW4gY2hlY2sgaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBlbHNld2hlcmUgaW4gdGhlIGRyaXZlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyByZWdpc3RlcnMgaXQncyBiZWluZyB1c2VkIHRvIHJlYWQgYW5kIHdoYXQgZGF0YSBpcyBiZWluZyBpbnRlcnByZXRlZCBmcm9tIHRoZXNlIHJlZ2lzdGVycy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBncmVhdGVyIGNvbnRleHQgZm9yIHVuZGVyc3RhbmRpbmcgaWYgdGhpcyBmdW5jdGlvbiBpcyBhZGVxdWF0ZS4gQXJlIHRoZXJlIGFueSB1bnVzdWFsIGNpcmN1bXN0YW5jZXMsIG9yIGlzIGl0IGEgZmFpcmx5IHN0YW5kYXJkIHJlZ2lzdGVyIHJlYWQ/XG5cbkknbGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIHRpbWluZyBpc3N1ZXMsIG9yIHBvdGVudGlhbCBmb3IgZGVhZGxvY2tzLiBBbmQgSSB3aWxsIGVuc3VyZSBpdCBmb2xsb3dzIHRoZSByZWNvbW1lbmRlZCBjb2Rpbmcgc3R5bGUgYW5kIHRoYXQgdGhlcmUgYXJlIGFkZXF1YXRlIGNvbW1lbnRzLiBBbmQgZmluYWxseSwgSSB3aWxsIHdhbnQgdG8gZW5zdXJlIHRoZSBmdW5jdGlvbiBoYW5kbGVzIGFsbCBvZiB0aGUgdmFyaW91cyBmYWlsdXJlIG1vZGVzIGluIGEgcm9idXN0IHdheSwgYW5kIHRoYXQgaXQgZGVhbHMgd2l0aCB0aGVtIGNvbnNpc3RlbnRseSB3aXRoIHRoZSByZXN0IG9mIHRoZSBMQU43OHh4IGRyaXZlci5cblxuRXNzZW50aWFsbHksIEkgbmVlZCB0byB0aG9yb3VnaGx5IGF1ZGl0IHRoaXMgZnVuY3Rpb24sIGVuc3VyaW5nIGl0J3MgZWZmaWNpZW50LCByb2J1c3QsIGFuZCBjb3JyZWN0bHkgaW1wbGVtZW50cyB0aGUgTURJTyByZWFkIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBMQU43OHh4IGNvbnRyb2xsZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNjI0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NTA6MTUuMDQ5MjYxNDI1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMTIsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwMTI6XFx0c3RhdGljIGludCBsYW43OHh4X21kaW9idXNfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgaWR4KVxcbjIwMTM6XFx0e1xcbjIwMTQ6XFx0XFx0c3RydWN0IGxhbjc4eHhfbmV0ICpkZXYgPSBidXMtXFx1MDAzZXByaXY7XFxuMjAxNTpcXHRcXHR1MzIgdmFsLCBhZGRyO1xcbjIwMTY6XFx0XFx0aW50IHJldDtcXG4yMDE3OlxcdFxcbjIwMTg6XFx0XFx0cmV0ID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGRldi1cXHUwMDNlaW50Zik7XFxuMjAxOTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4yMDIwOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjAyMTpcXHRcXG4yMDIyOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmRldi1cXHUwMDNlbWRpb2J1c19tdXRleCk7XFxuMjAyMzpcXHRcXG4yMDI0OlxcdFxcdC8qIGNvbmZpcm0gTUlJIG5vdCBidXN5ICovXFxuMjAyNTpcXHRcXHRyZXQgPSBsYW43OHh4X21kaW9idXNfd2FpdF9ub3RfYnVzeShkZXYpO1xcbjIwMjY6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMjAyNzpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuMjAyODpcXHRcXG4yMDI5OlxcdFxcdC8qIHNldCB0aGUgYWRkcmVzcywgaW5kZXggXFx1MDAyNiBkaXJlY3Rpb24gKHJlYWQgZnJvbSBQSFkpICovXFxuMjAzMDpcXHRcXHRhZGRyID0gbWlpX2FjY2VzcyhwaHlfaWQsIGlkeCwgTUlJX1JFQUQpO1xcbjIwMzE6XFx0XFx0cmV0ID0gbGFuNzh4eF93cml0ZV9yZWcoZGV2LCBNSUlfQUNDLCBhZGRyKTtcXG4yMDMyOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjIwMzM6XFx0XFx0XFx0Z290byBkb25lO1xcbjIwMzQ6XFx0XFxuMjAzNTpcXHRcXHRyZXQgPSBsYW43OHh4X21kaW9idXNfd2FpdF9ub3RfYnVzeShkZXYpO1xcbjIwMzY6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMjAzNzpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuMjAzODpcXHRcXG4yMDM5OlxcdFxcdHJldCA9IGxhbjc4eHhfcmVhZF9yZWcoZGV2LCBNSUlfREFUQSwgXFx1MDAyNnZhbCk7XFxuMjA0MDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4yMDQxOlxcdFxcdFxcdGdvdG8gZG9uZTtcXG4yMDQyOlxcdFxcbjIwNDM6XFx0XFx0cmV0ID0gKGludCkodmFsIFxcdTAwMjYgMHhGRkZGKTtcXG4yMDQ0OlxcdFxcbjIwNDU6XFx0ZG9uZTpcXG4yMDQ2OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGV2LVxcdTAwM2VtZGlvYnVzX211dGV4KTtcXG4yMDQ3OlxcdFxcdHVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShkZXYtXFx1MDAzZWludGYpO1xcbjIwNDg6XFx0XFxuMjA0OTpcXHRcXHRyZXR1cm4gcmV0O1xcbjIwNTA6XFx0fVxcbjIwNTE6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjUwOjE1LjA0OTQ1NTkyNVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjU3MDg5Mjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYG1paV9hY2Nlc3NgIE1hY3JvKipcblxuT2theSwgc28gYG1paV9hY2Nlc3NgLi4uIHRoYXQncyBhIG1hY3JvLiBJIGltbWVkaWF0ZWx5IG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZXhwYW5zaW9uLiBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGRlZmluaXRpb24gdG8gc2VlIHRoZSB1bmRlcmx5aW5nIGJpdCBtYW5pcHVsYXRpb25zIGFuZCByZWdpc3RlciBhY2Nlc3NlcyBpdCBwZXJmb3Jtcy4gSXMgaXQgYSBkaXJlY3QgbWVtb3J5IGFjY2Vzcywgb3IgZG9lcyBpdCBhYnN0cmFjdCB0byBzb21lIGRyaXZlciBsYXllcj8gSSdtIGhvcGluZyBpdCdzIHdlbGwtZGVmaW5lZCBhbmQgY2xlYXJseSBkb2N1bWVudHMgdGhlIHJlZ2lzdGVyIGFkZHJlc3NlcyBpdCdzIHVzaW5nLCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIENvbnRleHQgaXMgaW1wb3J0YW50LCBzbyBJIHdpbGwgYWxzbyBoYXZlIHRvIGNvbnNpZGVyIHRoZSBoYXJkd2FyZSBlbnZpcm9ubWVudCBpbiB3aGljaCB0aGlzIG1hY3JvIGlzIHVzZWQuIFdoYXQgTUlJL0dNSUkgUEhZIHN0YW5kYXJkIGRvZXMgaXQgZXhwZWN0PyBJJ2xsIHByb2JhYmx5IGJlIGNoZWNraW5nIGZvciBhbnkgaW5saW5lIGFzc2VtYmx5IGFuZCBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgc3VycHJpc2VzIHdpdGggY29tcGlsZXIgb3B0aW1pemF0aW9uLiBJIGhvcGUgaXQncyBub3Qgb3Zlcmx5IGNvbXBsZXg7IGNvbmNpc2UgYW5kIGVmZmljaWVudCBpcyB0aGUgZ29hbCwgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM3OTksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjUwOjIxLjMwNjU0NzM0MloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjczMTU0NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlpX2FjY2Vzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9OTUyPXN0YXRpYyBpbnQgbGFuNzh4eF9tZGlvYnVzX3dhaXRfbm90X2J1c3koc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTk2OS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjk3MDpzdGF0aWMgaW5saW5lIHUzMiBtaWlfYWNjZXNzKGludCBpZCwgaW50IGluZGV4LCBpbnQgcmVhZClcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTk3MS17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTIwMTI9c3RhdGljIGludCBsYW43OHh4X21kaW9idXNfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgaWR4KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDI5LVxcdC8qIHNldCB0aGUgYWRkcmVzcywgaW5kZXggXFx1MDAyNiBkaXJlY3Rpb24gKHJlYWQgZnJvbSBQSFkpICovXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDMwOlxcdGFkZHIgPSBtaWlfYWNjZXNzKHBoeV9pZCwgaWR4LCBNSUlfUkVBRCk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDMxLVxcdHJldCA9IGxhbjc4eHhfd3JpdGVfcmVnKGRldiwgTUlJX0FDQywgYWRkcik7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTIwNTI9c3RhdGljIGludCBsYW43OHh4X21kaW9idXNfd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGlkeCxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA3NS1cXHQvKiBzZXQgdGhlIGFkZHJlc3MsIGluZGV4IFxcdTAwMjYgZGlyZWN0aW9uICh3cml0ZSB0byBQSFkpICovXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDc2OlxcdGFkZHIgPSBtaWlfYWNjZXNzKHBoeV9pZCwgaWR4LCBNSUlfV1JJVEUpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA3Ny1cXHRyZXQgPSBsYW43OHh4X3dyaXRlX3JlZyhkZXYsIE1JSV9BQ0MsIGFkZHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo1MDoyMS4zNzM4Njg5MDlaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4OTE3MjcwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogTUlJX0FDQ0VTUyAtIFdoYXQncyB0aGUgQ29udGV4dD8qKlxuXG5BbHJpZ2h0LCBcIm1paV9hY2Nlc3MuXCIgVGhlIG5hbWUgaXRzZWxmIGltbWVkaWF0ZWx5IHJhaXNlcyBxdWVzdGlvbnMuIElzIHRoaXMgc29tZSBzcGVjaWFsaXplZCBNSUkgKE1lZGlhIEluZGVwZW5kZW50IEludGVyZmFjZSkgdXRpbGl0eSwgZHJpdmVyLCBvciBwZXJoYXBzIGEgbGF5ZXIgYWJvdmUgdGhhdD8gR2l2ZW4gbXkgYmFja2dyb3VuZCwgSSdtIGV4cGVjdGluZyBzb21ldGhpbmcgcmVsYXRlZCB0byBuZXR3b3JrIGhhcmR3YXJlLCBwb3RlbnRpYWxseSBhdCB0aGUgUEhZIGxldmVsLCBidXQgaXQgY291bGQgZXh0ZW5kIGludG8gbmV0d29yayBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBvciBtYW5hZ2VtZW50IGRlcGVuZGluZyBvbiB0aGUgc3lzdGVtIHRoaXMgaXMgcnVubmluZyBvbi5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgc3lzdGVtIGFzIGEgd2hvbGUuIElzIGl0IGEgdXNlci1zcGFjZSBhcHBsaWNhdGlvbiwgYSBrZXJuZWwgbW9kdWxlLCBvciBwYXJ0IG9mIGEgbW9yZSBpbnRlZ3JhdGVkIHN5c3RlbSBmaXJtd2FyZT8gSXMgaXQgaW50ZXJhY3Rpbmcgd2l0aCByYXcgRXRoZXJuZXQgZGF0YSBvciBkb2VzIGl0IGFic3RyYWN0IHRoYXQgbGF5ZXI/IEknbSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCBwb3RlbnRpYWwgYm90dGxlbmVja3MgYW5kIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIC0gZXNwZWNpYWxseSBpZiB0aGlzIGludm9sdmVzIGRpcmVjdCByZWdpc3RlciBtYW5pcHVsYXRpb24uXG5cblRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIHRoZSBrZXkgaGVyZS4gTGV0J3Mgc2VlIGhvdyB0aGV5IGhhbmRsZSBlcnJvciBjaGVja2luZyBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nLiBBcmUgdGhleSBmb2xsb3dpbmcgYW55IHN0YW5kYXJkIG9yIHNwZWNpZmljYXRpb24/IFRoZSBjb2RlJ3Mgc3R5bGUgYW5kIGNvbW1lbnRzIHdpbGwgZ2l2ZSB1cyBhIHN0cm9uZyBzZW5zZSBvZiB0aGUgZGV2ZWxvcGVyJ3MgaW50ZW50IGFuZCBob3BlZnVsbHksIGhlbHAgc3BlZWQgdXAgbXkgYW5hbHlzaXMuIFRpbWUgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDUwMCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NTA6MjQuODYzMDQ0NzUzWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NzAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk3MCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk3MDpcXHRzdGF0aWMgaW5saW5lIHUzMiBtaWlfYWNjZXNzKGludCBpZCwgaW50IGluZGV4LCBpbnQgcmVhZClcXG4gOTcxOlxcdHtcXG4gOTcyOlxcdFxcdHUzMiByZXQ7XFxuIDk3MzpcXHRcXG4gOTc0OlxcdFxcdHJldCA9ICgodTMyKWlkIFxcdTAwM2NcXHUwMDNjIE1JSV9BQ0NfUEhZX0FERFJfU0hJRlRfKSBcXHUwMDI2IE1JSV9BQ0NfUEhZX0FERFJfTUFTS187XFxuIDk3NTpcXHRcXHRyZXQgfD0gKCh1MzIpaW5kZXggXFx1MDAzY1xcdTAwM2MgTUlJX0FDQ19NSUlSSU5EQV9TSElGVF8pIFxcdTAwMjYgTUlJX0FDQ19NSUlSSU5EQV9NQVNLXztcXG4gOTc2OlxcdFxcdGlmIChyZWFkKVxcbiA5Nzc6XFx0XFx0XFx0cmV0IHw9IE1JSV9BQ0NfTUlJX1JFQURfO1xcbiA5Nzg6XFx0XFx0ZWxzZVxcbiA5Nzk6XFx0XFx0XFx0cmV0IHw9IE1JSV9BQ0NfTUlJX1dSSVRFXztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NTA6MjQuODYzMzkzOTQyWiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3MTQ3MzM3NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENsYXVzZSA0NSBTdXBwb3J0IGluIE5ldHdvcmsgRHJpdmVycyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IGBsYW43OHh4YCBoYW5kbGVzIENsYXVzZSA0NS4gRmlyc3QsIEkgc2VlIGBpbmRleGAgYmVpbmcgY2FzdCB0byBgdTMyYCBhbmQgc2hpZnRlZC4gTXkgZ3V0IHJlYWN0aW9uIGlzIHRoYXQgaWYgYGluZGV4YCBoYXMgYE1JSV9BRERSX0M0NWAgKDB4NDAwMDAwMDApIHNldCwgaXQncyBnb2luZyB0byBnZXQgbWFza2VkIG91dCBieSBgTUlJX0FDQ19NSUlSSU5EQV9NQVNLX2AuIFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGUgZHJpdmVyICpkb2Vzbid0KiBuYXRpdmVseSBzdXBwb3J0IENsYXVzZSA0NS4gQnV0IHdhaXQsIEkgbmVlZCB0byBkaWcgZGVlcGVyLlxuXG5JIHJlbWVtYmVyIGBtZGlvYnVzX3JlYWRgIGluIGBkcml2ZXJzL25ldC9waHkvbWRpb19idXMuY2AuIEkgbmVlZCB0byBzZWUgd2hhdCBoYXBwZW5zIHRoZXJlLiBPa2F5LCBpZiBgYnVzLVx1MDAzZXJlYWRfYzQ1YCBleGlzdHMsIHRoYXQgd2lsbCBnZXQgY2FsbGVkLiBJZiBpdCdzIE5VTEwsIHdoaWNoIHNlZW1zIGxpa2VseSBoZXJlIGdpdmVuIG15IGluaXRpYWwgaW1wcmVzc2lvbiwgdGhlbiBgYnVzLVx1MDAzZXJlYWRgIGlzIGNhbGxlZC4gQWgsIGJ1dCBgYnVzLVx1MDAzZXJlYWRgIHdpbGwganVzdCBwYXNzIHRocm91Z2ggdGhlIGBNSUlfQUREUl9DNDVgIGJpdCBpbiBgcmVnbnVtYC4gU28sIGlmIHRoZSBkcml2ZXIgZG9lc24ndCBleHBsaWNpdGx5IGhhbmRsZSB0aGF0IGJpdCwgaXQgd2lsbCBqdXN0IHJlYWQgYSBDbGF1c2UgMjIgcmVnaXN0ZXIgaW5zdGVhZCwgd2hpY2ggaXNuJ3Qgd2hhdCB3ZSB3YW50LlxuXG5Pa2F5LCBsZXQgbWUgbG9vayBhdCBob3cgdGhpcyBpcyBiZWluZyB1c2VkIGluIGEgcmVhbCBkcml2ZXIsIGZvciBleGFtcGxlIGluIGByZWFsdGVrX21haW4uY2AuIEl0IGxvb2tzIGxpa2UgaXQgdXNlcyBgcGh5X3JlYWRfbW1kYC4gQW5kIHRoYXQgZnVuY3Rpb24gd2lsbCB1c2UgYGJ1cy1cdTAwM2VyZWFkX2M0NWAgaWYgaXQgaXMgYXZhaWxhYmxlLCBvciBpdCB3aWxsIGZhbGwgYmFjayB0byBDbGF1c2UgMjIgaW5kaXJlY3QgYWNjZXNzIGlmIGBwaHlkZXYtXHUwMDNlaXNfYzQ1YCBpcyBmYWxzZS4gQmluZ28hIFNvIG5vdyBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoYXQgZmFsbGJhY2sgaXMgaGFwcGVuaW5nIGluIGBsYW43OHh4YC4gU28sIHRoYXQgbWVhbnMgaXQgKndpbGwqIHVzZSBDbGF1c2UgMjIgaW5kaXJlY3QgYWNjZXNzIChyZWdpc3RlcnMgMTMgYW5kIDE0KSBpZiBgcGh5ZGV2LVx1MDAzZWlzX2M0NWAgaXMgZmFsc2UhXG5cbk9rYXksIHRpbWUgdG8gY29uZmlybSB3aGF0IGlzIGFjdHVhbGx5IGhhcHBlbmluZyBpbiBgcGh5X3JlYWRfbW1kYCB0byBzZWUgaWYgdGhhdCBpcyB0cnVlIGFuZCB0byBzZWUgaG93IHRoZSBidXMgY2FsbHMgYXJlIGltcGxlbWVudGVkLiBJJ2xsIGNoZWNrIGBkcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuY2Agbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTAwNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjUwOjMyLjU3ODEzMDkxMVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ2MzM2MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X3JlYWRfbW1kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jPTQ1Nz1FWFBPUlRfU1lNQk9MX0dQTChtbWRfcGh5X3dyaXRlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ1OS0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYzo0NjA6ICogX19waHlfcmVhZF9tbWQgLSBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgcmVhZGluZyBhIHJlZ2lzdGVyXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDYxLSAqIGZyb20gYW4gTU1EIG9uIGEgZ2l2ZW4gUEhZLlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDY3LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQ2ODppbnQgX19waHlfcmVhZF9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldmFkLCB1MzIgcmVnbnVtKVxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ2OS17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00NzgtfVxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQ3OTpFWFBPUlRfU1lNQk9MKF9fcGh5X3JlYWRfbW1kKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00ODAtXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDgxLS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQ4MjogKiBwaHlfcmVhZF9tbWQgLSBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgcmVhZGluZyBhIHJlZ2lzdGVyXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDgzLSAqIGZyb20gYW4gTU1EIG9uIGEgZ2l2ZW4gUEhZLlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDg5LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQ5MDppbnQgcGh5X3JlYWRfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZhZCwgdTMyIHJlZ251bSlcXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00OTEte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDk0LVxcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NDk1OlxcdHJldCA9IF9fcGh5X3JlYWRfbW1kKHBoeWRldiwgZGV2YWQsIHJlZ251bSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDk2LVxcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ5OS19XFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NTAwOkVYUE9SVF9TWU1CT0wocGh5X3JlYWRfbW1kKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy01MDEtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYz02Mjk9aW50IF9fcGh5X21vZGlmeV9tbWRfY2hhbmdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgZGV2YWQsIHUzMiByZWdudW0sXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy02MzMtXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NjM0OlxcdHJldCA9IF9fcGh5X3JlYWRfbW1kKHBoeWRldiwgZGV2YWQsIHJlZ251bSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNjM1LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo1MDozMi42NDI3Njg3OTlaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQyNTIyNTI4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBzZWVpbmcgYF9fcGh5X3JlYWRfbW1kYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoYXQgdW5kZXJzY29yZXMgYSB2ZXJ5IHNwZWNpZmljIGZ1bmN0aW9uLCBsaWtlbHkgdGllZCB0byBhIHBoeXNpY2FsIGxheWVyIChQSFkpIGludGVyZmFjZSBhbmQgc29tZSBzb3J0IG9mIG11bHRpLW1vZGUgZGV2aWNlIChNTUQpIGFjY2Vzcy4gVGhlIGRvdWJsZSB1bmRlcnNjb3JlIHByZWZpeCB1c3VhbGx5IGluZGljYXRlcyBhbiBpbnRlcm5hbCBvciBcInByaXZhdGVcIiBmdW5jdGlvbiwgbWVhbmluZyBpdCdzIG5vdCBtZWFudCB0byBiZSBkaXJlY3RseSBjYWxsZWQgYnkgbW9zdCBvdGhlciBtb2R1bGVzLiBJdCdzIGEgbG93LWxldmVsLCBjcml0aWNhbCBvcGVyYXRpb24uIEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIGNvcmUgcm91dGluZSBmb3IgZWl0aGVyIHJlYWRpbmcgb3IgY29uZmlndXJpbmcgcmVnaXN0ZXJzIHdpdGhpbiBhIFBIWSBjaGlwLCBhbmQgdGhlIFwiTU1EXCIgc3VnZ2VzdHMgdGhhdCB0aGUgUEhZIHN1cHBvcnRzIG11bHRpcGxlIGZ1bmN0aW9uYWwgYmxvY2tzLCBlYWNoIG1hcHBlZCB0byBhIHNwZWNpZmljIE1NRCBhZGRyZXNzLiBUaGlzIGltcGxpZXMgc29tZSBraW5kIG9mIGluZGlyZWN0IGFkZHJlc3Npbmcgc2NoZW1lLiBJIGFudGljaXBhdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHBpdm90YWwgdG8gZGV2aWNlIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmF0aW9uIGNoYW5nZXMsIG9yIG9wZXJhdGlvbmFsIG1vbml0b3JpbmcuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSwgd2hhdCdzIHBhc3NlZCBpbiBhcyBwYXJhbWV0ZXJzIGFuZCB3aGF0IGlzIGl0IHJldHVybmluZyBhbmQgd2hhdCBraW5kIG9mIGVycm9yLWhhbmRsaW5nIGl0J3MgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NTUyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NTA6MzYuMDY3OTk3MjE0WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2OCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ2ODpcXHRpbnQgX19waHlfcmVhZF9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldmFkLCB1MzIgcmVnbnVtKVxcbiA0Njk6XFx0e1xcbiA0NzA6XFx0XFx0aWYgKHJlZ251bSBcXHUwMDNlICh1MTYpfjAgfHwgZGV2YWQgXFx1MDAzZSAzMilcXG4gNDcxOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0NzI6XFx0XFxuIDQ3MzpcXHRcXHRpZiAocGh5ZGV2LVxcdTAwM2VkcnYgXFx1MDAyNlxcdTAwMjYgcGh5ZGV2LVxcdTAwM2VkcnYtXFx1MDAzZXJlYWRfbW1kKVxcbiA0NzQ6XFx0XFx0XFx0cmV0dXJuIHBoeWRldi1cXHUwMDNlZHJ2LVxcdTAwM2VyZWFkX21tZChwaHlkZXYsIGRldmFkLCByZWdudW0pO1xcbiA0NzU6XFx0XFxuIDQ3NjpcXHRcXHRyZXR1cm4gbW1kX3BoeV9yZWFkKHBoeWRldi1cXHUwMDNlbWRpby5idXMsIHBoeWRldi1cXHUwMDNlbWRpby5hZGRyLFxcbiA0Nzc6XFx0XFx0XFx0XFx0ICAgIHBoeWRldi1cXHUwMDNlaXNfYzQ1LCBkZXZhZCwgcmVnbnVtKTtcXG4gNDc4OlxcdH1cXG4gNDc5OlxcdEVYUE9SVF9TWU1CT0woX19waHlfcmVhZF9tbWQpO1xcbiA0ODA6XFx0XFxuIDQ4MTpcXHQvKipcXG4gNDgyOlxcdCAqIHBoeV9yZWFkX21tZCAtIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciByZWFkaW5nIGEgcmVnaXN0ZXJcXG4gNDgzOlxcdCAqIGZyb20gYW4gTU1EIG9uIGEgZ2l2ZW4gUEhZLlxcbiA0ODQ6XFx0ICogQHBoeWRldjogVGhlIHBoeV9kZXZpY2Ugc3RydWN0XFxuIDQ4NTpcXHQgKiBAZGV2YWQ6IFRoZSBNTUQgdG8gcmVhZCBmcm9tXFxuIDQ4NjpcXHQgKiBAcmVnbnVtOiBUaGUgcmVnaXN0ZXIgb24gdGhlIE1NRCB0byByZWFkXFxuIDQ4NzpcXHQgKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo1MDozNi4wNjgwODM5MzNaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc4MDU4ODg5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipNeSBEZWVwIERpdmUgaW50byBgbW1kX3BoeV9yZWFkYCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2hlbiBJIHNlZSBgbW1kX3BoeV9yZWFkYCwgaW1tZWRpYXRlbHkgbXkgbWluZCBqdW1wcyB0byB0aGUgbG93LWxldmVsIHBoeXNpY2FsIGxheWVyIGludGVyZmFjZS4gSSdtIHRoaW5raW5nIGRpcmVjdCByZWdpc3RlciBhY2Nlc3MsIHBvdGVudGlhbGx5IHdpdGggaW1wbGljYXRpb25zIGZvciB0aW1pbmcgYW5kIGVycm9yIGhhbmRsaW5nIHRoYXQgYXJlIGNydWNpYWwgdG8gY29uc2lkZXIuIEknbSBnb2luZyB0byBhc3N1bWUgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIGFueSBQSFkgKFBoeXNpY2FsIExheWVyKSBvcGVyYXRpb24gYW5kIGlzIHRoZXJlZm9yZSBhIHZpdGFsIGJ1aWxkaW5nIGJsb2NrLiBTbyB3aGF0IGlzIHRoZSBjb250ZXh0PyBJcyB0aGlzIHBhcnQgb2YgYSBkcml2ZXI/IFdoYXQgc3RhbmRhcmQgaXMgdGhpcyBmdW5jdGlvbiBhdHRlbXB0aW5nIHRvIGFkaGVyZSB0bz9cblxuTXkgZmlyc3QgcXVlc3Rpb24gaXMsIFwiV2hhdCdzIHRoZSBvdmVyYWxsIFBIWSBhcmNoaXRlY3R1cmUgdGhpcyBmdW5jdGlvbiBpcyBtZWFudCBmb3I/XCIgSXMgdGhpcyBhIGdlbmVyaWMgZnVuY3Rpb24sIGludGVuZGVkIGZvciBhIHZhcmlldHkgb2YgUEhZcywgb3IgaXMgaXQgaGlnaGx5IHNwZWNpZmljIHRvIGEgcGFydGljdWxhciB2ZW5kb3Igb3IgZGV2aWNlIGZhbWlseT8gS25vd2luZyB0aGUgYXJjaGl0ZWN0dXJlIGdpdmVzIG1lIGNsdWVzIGFib3V0IHRoZSBleHBlY3RlZCByZWdpc3RlciBsYXlvdXQsIGNvbW11bmljYXRpb24gcHJvdG9jb2wgKEkyQywgU1BJLCBNRElPLCBldGMuKSwgYW5kIHBvdGVudGlhbCBjbG9ja2luZyBjb25zdHJhaW50cy4gSSdtIGltbWVkaWF0ZWx5IHRyeWluZyB0byB2aXN1YWxpemUgdGhlIHJlZ2lzdGVyIG1hcCDigJMgd2hhdCBhcmUgdGhlIGJhc2UgYWRkcmVzc2VzLCBvZmZzZXQgY2FsY3VsYXRpb25zLCBhbmQgZGF0YSB3aWR0aHMgaW52b2x2ZWQ/XG5cblRoZW4gSSB0aGluayBhYm91dCB0aGUgZGF0YSB0eXBlcyBiZWluZyB1c2VkOiBXaGF0IGlzIHRoZSB1bmRlcmx5aW5nIGJ1cyB0eXBlPyBJcyBpdCBhIHN0YW5kYXJkIGludGVyZmFjZSBvciBzb21ldGhpbmcgcHJvcHJpZXRhcnk/IEFyZSB3ZSBkZWFsaW5nIHdpdGggcmF3IGJpdHMsIG9yIGEgaGlnaGVyLWxldmVsIGRhdGEgc3RydWN0dXJlPyBJJ20gYW50aWNpcGF0aW5nIHBvdGVudGlhbCBiaXQtZmllbGQgbWFuaXB1bGF0aW9uIChzaGlmdGluZywgbWFza2luZykgdG8gZXh0cmFjdCB0aGUgcmVsZXZhbnQgaW5mb3JtYXRpb24gZnJvbSBhIFBIWSByZWdpc3RlciByZWFkLiBFcnJvciBjaGVja2luZyBpcyBjcml0aWNhbCBhdCB0aGlzIGxldmVsLiBJZiB0aGUgaGFyZHdhcmUgaXMgZmF1bHR5LCBob3cgZG9lcyB0aGlzIHByb2Nlc3MgaGFuZGxlIGl0P1xuXG5GaW5hbGx5LCB0aGUgZnVuY3Rpb24gaXRzZWxmLiBXaGF0IGFyZSB0aGUgc3BlY2lmaWMgcGFyYW1ldGVycz8gV2hhdCBpcyB0aGUgcmVnaXN0ZXIgYWRkcmVzcyBwYXNzZWQgaW50byB0aGUgZnVuY3Rpb24/IFdoYXQgaXMgdGhlIGV4cGVjdGVkIHJldHVybiB2YWx1ZT8gSG93IGRvZXMgaXQgaGFuZGxlIHBvdGVudGlhbCBlcnJvcnMg4oCTIHJldHVybiBjb2RlcywgYXNzZXJ0aW9ucywgb3IgbG9nZ2luZz8gRG9lcyBpdCBpbXBsZW1lbnQgYW55IGZvcm0gb2YgcmV0cnkgbWVjaGFuaXNtLCBvciBkb2VzIGl0IGFzc3VtZSB0aGUgdXBwZXIgbGF5ZXJzIHdpbGwgaGFuZGxlIGFueSBidXMtbGV2ZWwgcHJvYmxlbXM/IEknbSBzdGFydGluZyB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuIENhbiB3ZSBjYWNoZSByZWdpc3RlciB2YWx1ZXMgdG8gcmVkdWNlIGJ1cyB0cmFmZmljLCBvciBwZXJmb3JtIGEgYmF0Y2ggb2YgcmVhZHM/IEhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gaW50ZXJhY3Qgd2l0aCBhbnkgaW50ZXJydXB0IGhhbmRsZXJzIG9yIG90aGVyIGNvbmN1cnJlbnQgdGFza3M/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MTU2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjUwOjQwLjg0ODY3NTE2OVoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYyNzg3NjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tZF9waHlfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYz00MjE9c3RhdGljIHZvaWQgbW1kX3BoeV9pbmRpcmVjdChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGludCBkZXZhZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQzNC1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYzo0MzU6aW50IG1tZF9waHlfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGJvb2wgaXNfYzQ1LFxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQzNi1cXHRcXHQgaW50IGRldmFkLCB1MzIgcmVnbnVtKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDQ0LX1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYzo0NDU6RVhQT1JUX1NZTUJPTF9HUEwobW1kX3BoeV9yZWFkKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00NDYtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYz00Njg9aW50IF9fcGh5X3JlYWRfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZhZCwgdTMyIHJlZ251bSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ3NS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYzo0NzY6XFx0cmV0dXJuIG1tZF9waHlfcmVhZChwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcixcXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00NzctXFx0XFx0XFx0ICAgIHBoeWRldi1cXHUwMDNlaXNfYzQ1LCBkZXZhZCwgcmVnbnVtKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NTA6NDEuMTExNDcwODMxWiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1ODI4OTk3ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIHdlbGwtdmVyc2VkIGluIHRoZSBzdWJqZWN0IG1hdHRlciBhbmQgYXBwcm9hY2hpbmcgYSBzcGVjaWZpYyBjb2RlIGZ1bmN0aW9uOlxuXG4qKkFuYWx5emluZyBgbW1kX3BoeV9yZWFkYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIGBtbWRfcGh5X3JlYWRgLiBMZXQncyBnZXQgcmlnaHQgdG8gaXQuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZywgXCJPa2F5LCB0aGlzIGltcGxpZXMgYSByZWFkIG9wZXJhdGlvbiwgbGlrZWx5IGludm9sdmluZyBhIE1lZGlhLUluZGVwZW5kZW50IEludGVyZmFjZSAoTUlJKSBNYW5hZ2VtZW50IERhdGEgKE1NRCkgUEhZIChQaHlzaWNhbCBMYXllcikgZGV2aWNlLiBHaXZlbiB0aGUgZnVuY3Rpb24gbmFtZSwgSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIGxvdyBsZXZlbCBkZXRhaWxzIG9mIGhvdyB0aGV5IGhhbmRsZSB0aGUgcmVhZGluZyBhbmQgcmV0cmlldmluZyBvZiBkYXRhIGZyb20gYSBQSFkgdmlhIE1NRC5cIiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGUgY29tbXVuaWNhdGlvbiBwcm90b2NvbCBpcyBpbXBsZW1lbnRlZCwgc3BlY2lmaWNhbGx5IGZvciBob3cgdGhlIHJlYWQgY3ljbGUgaXMgaW5pdGlhdGVkIGFuZCBjb21wbGV0ZWQuIEknbGwgbmVlZCB0byBrbm93IHRoZSBzcGVjaWZpYyByZWdpc3RlciBpdCBpbnRlbmRzIHRvIHRhcmdldCwgdGhlIGJpdCBtYW5pcHVsYXRpb24gb2YgdGhlIHJlYWQgYW5kIHdyaXRlIGNvbW1hbmRzLCBhbmQgZGF0YSB0cmFuc21pc3Npb24uIFwiSXMgdGhlcmUgYW55IGVycm9yIGhhbmRsaW5nP1wiIGlzIGEga2V5IHF1ZXN0aW9uIGluIHRoaXMgYXJlYS4gSSdsbCBiZSBmb2N1c2VkIG9uIHRoaW5ncyBsaWtlIHRpbWluZyBjb25zdHJhaW50cywgYWNrbm93bGVkZ2Ugc2lnbmFscywgYW5kIGFueSBwb3RlbnRpYWwgcmV0cnkgbWVjaGFuaXNtcy4gSSBuZWVkIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24ncyBpbnRlcm5hbCBmbG93LCBhbnkgZGVwZW5kZW5jaWVzIG9uIGhhcmR3YXJlIG9yIG90aGVyIG1vZHVsZXMsIGFuZCB0aGUgZ2VuZXJhbCB3YXkgdGhlIE1NRCBQSFkgcmVnaXN0ZXJzIGFyZSBiZWluZyBhY2Nlc3NlZC4gVGhpcyBzaG91bGQgYmUgYW4gaW50ZXJlc3Rpbmcgb25lIHRvIHVucGFjayFcblxuXG4iLCJJbnB1dFRva2VucyI6NDgwMDMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo1MDo0Ni42OTQzNzM2MzZaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDM1LFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDM1OlxcdGludCBtbWRfcGh5X3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBib29sIGlzX2M0NSxcXG4gNDM2OlxcdFxcdFxcdCBpbnQgZGV2YWQsIHUzMiByZWdudW0pXFxuIDQzNzpcXHR7XFxuIDQzODpcXHRcXHRpZiAoaXNfYzQ1KVxcbiA0Mzk6XFx0XFx0XFx0cmV0dXJuIF9fbWRpb2J1c19jNDVfcmVhZChidXMsIHBoeV9hZGRyLCBkZXZhZCwgcmVnbnVtKTtcXG4gNDQwOlxcdFxcbiA0NDE6XFx0XFx0bW1kX3BoeV9pbmRpcmVjdChidXMsIHBoeV9hZGRyLCBkZXZhZCwgcmVnbnVtKTtcXG4gNDQyOlxcdFxcdC8qIFJlYWQgdGhlIGNvbnRlbnQgb2YgdGhlIE1NRCdzIHNlbGVjdGVkIHJlZ2lzdGVyICovXFxuIDQ0MzpcXHRcXHRyZXR1cm4gX19tZGlvYnVzX3JlYWQoYnVzLCBwaHlfYWRkciwgTUlJX01NRF9EQVRBKTtcXG4gNDQ0OlxcdH1cXG4gNDQ1OlxcdEVYUE9SVF9TWU1CT0xfR1BMKG1tZF9waHlfcmVhZCk7XFxuIDQ0NjpcXHRcXG4gNDQ3OlxcdGludCBtbWRfcGh5X3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgYm9vbCBpc19jNDUsXFxuIDQ0ODpcXHRcXHRcXHQgIGludCBkZXZhZCwgdTMyIHJlZ251bSwgdTE2IHZhbClcXG4gNDQ5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NTA6NDYuNjk0NDY3NjM2WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1OTc0MjEwNTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIHRoZSBSZWFsdGVrIFJUTDgyNjEgRHJpdmVyIHZpYSBVU0IgRW11bGF0aW9uKipcblxuT2theSwgc28gdGhlIGBpc19jNDVgIGZsYWcgaXMga2V5IGhlcmUuIElmIGl0J3MgZmFsc2UsIHdlJ3JlIHVzaW5nIGBtbWRfcGh5X2luZGlyZWN0YCwgd2hpY2ggbWVhbnMgd2UncmUgZ29pbmcgdGhyb3VnaCBDbGF1c2UgMjIgcmVnaXN0ZXJz4oCUc3BlY2lmaWNhbGx5LCAxMyAoYE1JSV9NTURfQ1RSTGApIGFuZCAxNCAoYE1JSV9NTURfREFUQWApLiBUaGlzIGlzIGV4Y2VsbGVudC4gRXZlbiBpZiB0aGUgTURJTyBidXMgZHJpdmVyIG9ubHkgc3VwcG9ydHMgQ2xhdXNlIDIyLCB3ZSBjYW4gc3RpbGwgdGFsayB0byBDbGF1c2UgNDUgcmVnaXN0ZXJzIGluZGlyZWN0bHkuXG5cbk15IHRoaW5raW5nIGlzLCBpZiB3ZSBlbXVsYXRlIGEgVVNCIGRldmljZSwgbGV0J3Mgc2F5IGFuIGBheDg4MTcyYWAgb3IgYGxhbjc4eHhgLCBhbmQgaGF2ZSBpdCBhY3QgbGlrZSBhbiBNRElPIGJ1cywgd2UgY2FuIHJlc3BvbmQgdG8gQ2xhdXNlIDIyIHJlYWRzIGZvciB0aGUgUEhZIElEIHJlZ2lzdGVycyAoMiBhbmQgMykgd2l0aCBgUlRMXzgyNjFDX0NHYCAoMHgwMDFjYzg5OCkuIFRoZSBwaHlsaWIgd2lsbCB0aGVuIGluc3RhbnRpYXRlIGEgQ2xhdXNlIDIyIFBIWS4gSXQgd2lsbCBzZWUgdGhhdCB0aGUgUEhZIElEIGlzIGZvdW5kIHZpYSBDbGF1c2UgMjIsIHNvIGBpc19jNDVgIHdpbGwgYmUgZmFsc2UgKHVubGVzcyB0aGUgZHJpdmVyIGV4cGxpY2l0bHkgcHJvYmVzIGZvciBDNDUpLCBhbmQgYHBoeV9yZWFkX21tZGAgd2lsbCB1c2UgaW5kaXJlY3QgYWNjZXNzIChyZWdpc3RlcnMgMTMgYW5kIDE0KS5cblxuVGhpcyBtZWFucyB0aGF0IHRoZSBgcmVhbHRla19tYWluLmNgIGRyaXZlciBzaG91bGQgYmUgYm91bmQuIEl0cyBgcHJvYmVgLCBgY29uZmlnX2luaXRgLCBgY29uZmlnX2FuZWdgLCBhbmQgdGhlIHJlc3Qgb2YgaXRzIG1ldGhvZHMgd2lsbCBnZXQgY2FsbGVkLCBhbmQgdGhleSdsbCBiZSB1c2luZyBgcGh5X3JlYWRfbW1kYCwgd2hpY2gsIGluIG91ciBjYXNlLCB0cmFuc2xhdGVzIHRvIENsYXVzZSAyMiBpbmRpcmVjdCBhY2Nlc3Nlcy4gT3VyIGVtdWxhdGVkIFVTQiBkZXZpY2UgY2FuIHJlc3BvbmQgdG8gdGhvc2UuIEl0IG1lYW5zIHRoaXMgY29kZSBpcyBhYnNvbHV0ZWx5IHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHZpYSBVU0IgZW11bGF0aW9uIVxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhhdCBgUlRMXzgyNjFDX0NHYCB3aWxsIGJlIG1hdGNoZWQuIFRoZSBkcml2ZXIgaGFzOlxuXG5gYGBjXG57XG5cdFBIWV9JRF9NQVRDSF9FWEFDVChSVExfODI2MUNfQ0cpLFxuXHQubmFtZVx0XHRcdD0gXCJSZWFsdGVrIFJUTDgyNjEgMTBHYnBzIFBIWVwiLFxuXHQucHJvYmVcdFx0XHQ9IHJ0bDgyNjF4X3Byb2JlLFxuXHQuY29uZmlnX2luaXRcdFx0PSBydGw4MjYxeF9jb25maWdfaW5pdCxcblx0LmdldF9mZWF0dXJlc1x0XHQ9IHJ0bDgyNjF4X2dldF9mZWF0dXJlcyxcblx0LmNvbmZpZ19hbmVnXHRcdD0gcnRsODI2MXhfY29uZmlnX2FuZWcsXG5cdC5yZWFkX3N0YXR1c1x0XHQ9IHJ0bDgyNjF4X3JlYWRfc3RhdHVzLFxuXHQuY29uZmlnX2ludHJcdFx0PSBydGw4MjYxeF9jb25maWdfaW50cixcblx0LmhhbmRsZV9pbnRlcnJ1cHRcdD0gcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdCxcblx0LnNvZnRfcmVzZXRcdFx0PSBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0LFxuXHQuc3VzcGVuZFx0XHQ9IGdlbnBoeV9jNDVfcG1hX3N1c3BlbmQsXG5cdC5yZXN1bWVcdFx0XHQ9IGdlbnBoeV9jNDVfcG1hX3Jlc3VtZSxcbn0sXG5gYGBcblxuSWYgd2UgZW11bGF0ZSBhIFBIWSB3aXRoIElEIGAweDAwMWNjODk4YCwgdGhpcyBkcml2ZXIgKndpbGwqIGJlIGJvdW5kLCBhbmQgYHJ0bDgyNjF4X3Byb2JlYCB3aWxsIGJlIGNhbGxlZC4gSW5zaWRlIGBydGw4MjYxeF9wcm9iZWA6XG5cbmBgYGNcbnN0YXRpYyBpbnQgcnRsODI2MXhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbntcblx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuXHRzdHJ1Y3QgcnRsODI2MXhfcHJpdiAqcHJpdjtcblx0aW50IHN1Yl9waHlfaWQsIHJldDtcblxuXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG5cdGlmICghcHJpdilcblx0XHRyZXR1cm4gLUVOT01FTTtcblxuXHRwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7XG5cblx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjYxWF9FWFRfQUREUl9SRUcsXG5cdFx0XHQgICAgUlRMXzgyNjFYX1NVQl9QSFlfSURfQUREUik7XG5cdGlmIChyZXQgXHUwMDNjIDApXG5cdFx0cmV0dXJuIHJldDtcblxuXHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODI2MVhfRVhUX0RBVEFfUkVHKTtcblx0aWYgKHJldCBcdTAwM2MgMClcblx0XHRyZXR1cm4gcmV0O1xuXG5cdHN1Yl9waHlfaWQgPSAocmV0IFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgMHhmZjtcblxuXHRzd2l0Y2ggKHN1Yl9waHlfaWQpIHtcblx0Y2FzZSBSVEw4MjYxQ19DRV9NT0RFTDpcblx0XHRwcml2LVx1MDAzZWZ3X25hbWUgPSBSVEw4MjYxQ19DRV9GV19OQU1FO1xuXHRcdHBoeWRldl9pbmZvKHBoeWRldiwgXCJSVEw4MjYxQyBkZXRlY3RlZCAoc3ViX2lkIFxuXG4iLCJJbnB1dFRva2VucyI6NDg2MjEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NTE6MDIuNjY4NjgyMjA4WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY5NDk3ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVhbHRla19tYWluXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvTWFrZWZpbGU6MjpyZWFsdGVrLXlcXHRcXHRcXHQrPSByZWFsdGVrX21haW4ub1xcbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL01ha2VmaWxlLTMtcmVhbHRlay0kKENPTkZJR19SRUFMVEVLX1BIWV9IV01PTikgKz0gcmVhbHRla19od21vbi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjUxOjAyLjc5NTYzNjQ4NloiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDk3MDE2MTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoYXQsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSdtIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggbmV0d29yayBkcml2ZXJzIGFuZCB0aGUgTGludXgga2VybmVsIGJ1aWxkIHN5c3RlbTpcblxuKipJbnZlc3RpZ2F0aW5nIFJlYWx0ZWsgUEhZIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgZW5hYmxpbmcgdGhlIGByZWFsdGVrYCBQSFkgKFBoeXNpY2FsIExheWVyKSBkcml2ZXIuIFdoZXJlJ3MgdGhlIGNvbmZpZ3VyYXRpb24gbWFnaWMgaGFwcGVuaW5nPyBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBsaWtlbHkgc3VzcGVjdHMuIEZpcnN0LCBJJ2xsIGV4YW1pbmUgdGhlIHNwZWNpZmljIGByZWFsdGVrYCBkcml2ZXIncyBgTWFrZWZpbGVgLCB0aGUgb25lIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL01ha2VmaWxlYC4gVGhpcyBpcyB0aGUgbW9zdCBvYnZpb3VzIHBsYWNlIGZvciBkZXZpY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbnkgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUsIG9yIG90aGVyIGJ1aWxkLXRpbWUgbG9naWMuIFRoZW4sIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIG5vdCBtaXNzIGFueSBvdmVyYXJjaGluZyBidWlsZCBzeXN0ZW0gZGlyZWN0aXZlcywgSSdsbCBhbHNvIGdsYW5jZSBhdCB0aGUgcGFyZW50IGRpcmVjdG9yeSdzIGBNYWtlZmlsZWAsIGBkcml2ZXJzL25ldC9waHkvTWFrZWZpbGVgLiBUaGF0IHNob3VsZCBoYXZlIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgaG93IFBIWSBkcml2ZXJzIGluIGdlbmVyYWwgYXJlIGhhbmRsZWQsIGFuZCBjb3VsZCBjb250YWluIGNvbmRpdGlvbmFsIGluY2x1ZGVzIG9yIGdsb2JhbCBmbGFncyB0aGF0IGltcGFjdCB0aGUgYHJlYWx0ZWtgIGRyaXZlci4gVGhlc2UgdHdvIGZpbGVzIHNob3VsZCByZXZlYWwgdGhlIGtleSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMsIEtjb25maWcgZGVwZW5kZW5jaWVzLCBhbmQgYW55IG90aGVyIHJlbGV2YW50IGJ1aWxkLXRpbWUgZGlyZWN0aXZlcyB0aGF0IGNvbnRyb2wgd2hldGhlciB0aGUgYHJlYWx0ZWtgIGRyaXZlciBnZXRzIGNvbXBpbGVkIGFuZCBpbmNsdWRlZCBpbiB0aGUga2VybmVsLiBUaGlzJ2xsIGdldCBtZSB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciBwcmV0dHkgcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTExNDksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo1MTowNi44OTI2NTU0MjNaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MjA5NjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlYWx0ZWtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT05ND1vYmotJChDT05GSUdfUVNFTUlfUEhZKVxcdFxcdCs9IHFzZW1pLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6OTU6b2JqLSQoQ09ORklHX1JFQUxURUtfUEhZKVxcdCs9IHJlYWx0ZWsvXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTk2LW9iai0kKENPTkZJR19SRU5FU0FTX1BIWSlcXHQrPSB1UEQ2MDYyMC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjUxOjA2Ljk3MDg3MzY1NloiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDExNDkyNDA4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciBSZWFsdGVrIFJUTDgyNjEgUEhZIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBSZWFsdGVrIFJUTDgyNjEgMTBHYnBzIFBIWSBkcml2ZXIuIFRoZSBrZXkgY29uZmlnIHJlcXVpcmVkIGlzIGBDT05GSUdfUkVBTFRFS19QSFlgLCB3aGljaCBpcyBhIHRyaXN0YXRlLiAgQmV5b25kIHRoYXQsIGl0J3MgYnJpbmdpbmcgaW4gZmlybXdhcmUgbG9hZGluZyBmdW5jdGlvbmFsaXR5LiAgVGhhdCBtZWFucyB3ZSdsbCBhbHNvIG5lZWQgYENPTkZJR19GV19MT0FERVJgICh3aGljaCBpcyB1c3VhbGx5IGVuYWJsZWQgYW55d2F5KSBhbmQsIGJlY2F1c2UgaXQgdXNlcyBgY3JjMzJgLCBgQ09ORklHX0NSQzMyYCwgdGhvdWdoIHRob3NlIGFyZSBsaWtlbHkgYWxyZWFkeSB0YWtlbiBjYXJlIG9mLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGludHJvZHVjZXMgYSBidW5jaCBvZiBpbnRlcmVzdGluZyBmdW5jdGlvbnMuICBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHRocm91Z2ggYWxsIG9mIHRoZW0gZm9yIGBGb2N1c1N5bWJvbHNgLCB3aGljaCBJJ3ZlIGRvbmUuICBMZXQncyBzZWU6XG5cbiogICBgZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldGBcbiogICBgZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmVgXG4qICAgYGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmVgXG4qICAgYHJ0bDgyNjF4X3Byb2JlYFxuKiAgIGBydGw4MjYxeF9nZXRfZmVhdHVyZXNgXG4qICAgYHJ0bDgyNjF4X3JlYWRfc3RhdHVzYFxuKiAgIGBydGw4MjYxeF92ZXJpZnlfZmlybXdhcmVgXG4qICAgYHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnlgXG4qICAgYHJ0bDgyNjF4X2Z3X2xvYWRgXG4qICAgYHJ0bDgyNjF4X2NvbmZpZ19pbnRyYFxuKiAgIGBydGw4MjYxeF9oYW5kbGVfaW50ZXJydXB0YFxuKiAgIGBydGw4MjYxeF9jb25maWdfYW5lZ2BcbiogICBgcnRsODI2MXhfY29uZmlnX2luaXRgXG5cbldhaXQuLi4gSSBuZWVkIHRvIHJlZmluZSB0aGF0IGxpc3QgYSBsaXR0bGUuIGBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZWAgYW5kIGBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlYCBhcmUgYWN0dWFsbHkgc3RhdGljIGZ1bmN0aW9ucyBpbiBgZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY2Agd2hpY2ggSSB3b24ndCBiZSBhYmxlIHRvIHRhcmdldCBkaXJlY3RseSwgYW5kIGBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0YCBpcyBleHBvcnRlZC4gSG93ZXZlciwgdGhlIGBydGw4MjYxeF8qYCBmdW5jdGlvbnMgYXJlIHN0YXRpYyBpbiBgcmVhbHRla19tYWluLmNgLiBTbyBteSB0aGlua2luZyBpcyB0aGF0IHN5emthbGxlciBzaG91bGQgYmUgYWJsZSB0byBnZXQgdG8gYWxsIHRoZXNlLCBzbyBpdCdzIGEgdXNlZnVsIHNldCBvZiBpbml0aWFsIGBGb2N1c1N5bWJvbHNgLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGhpZGRlbiBjb25maWcgZGVwZW5kZW5jaWVzLCBidXQgYENPTkZJR19SRUFMVEVLX1BIWWAsIGBDT05GSUdfUEhZTElCYCBhbmQgYENPTkZJR19NRElPX0RFVklDRWAgc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBkcml2ZXJzLlxuXG5Ob3csIGxvb2tpbmcgZGVlcGVyLCAgYHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnlgIGlzIGEgcmVhbCBnZW0uICBJdCBwYXJzZXMgZmlybXdhcmUgZGF0YSBhbmQgcGVyZm9ybXMgTURJTyBvcGVyYXRpb25zLiBTeXprYWxsZXIncyBgc3l6X3JlcXVlc3RfZmlybXdhcmVgIHByaW1pdGl2ZSBjYW4gZmVlZCBhcmJpdHJhcnkgZmlybXdhcmUgdG8gdGhlIGRyaXZlciwgYW5kIHNpbmNlIHN5emthbGxlciAqZG9lcyogaW50ZXJjZXB0IHRoZSBgcmVxdWVzdF9maXJtd2FyZWAgY2FsbCwgdGhpcyBpcyBhIHBlcmZlY3QgdGFyZ2V0ISBJdCBtZWFucyB3ZSBjYW4gdGhyb3cgY29tcGxldGVseSBmdXp6ZXItY29udHJvbGxlZCBkYXRhIGF0IGJvdGggYHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZWAgYW5kIGBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5YC4gIFRoZSBmaXJtd2FyZSBwYXJzaW5nIGlzIGluaGVyZW50bHkgcmlza3kg4oCTIHRoaW5rIGJ1ZmZlciBvdmVyZmxvd3MsIHR5cGUgY29uZnVzaW9uLCBldGMuICBJIGNhbiBhbHJlYWR5IHNlZSBvcHBvcnR1bml0aWVzIGZvciBmdXp6aW5nIG1hZ2ljIG51bWJlcnMsIHNpemUgY2hlY2tzLCBhbmQgQ1JDLiAgVGhlIGZ1enplciBpcyBsaWtlbHkgdG8gZmluZCB2dWxuZXJhYmlsaXRpZXMgaW4gaG93IHRoZSBjb2RlIGludGVycHJldHMgYW5kIHVzZXMgdGhlIGZpcm13YXJlIGRhdGEuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgdG8gc2VlIHdoYXQgdGhlIGZ1enplciBjYW4gZG8gaGVyZS4gRXZlbiB0aG91Z2ggdGhlIGZpcm13YXJlIHZlcmlmaWVyIGluY2x1ZGVzIGEgQ1JDMzIgY2hlY2ssIHRoZSBmdXp6ZXIgbWlnaHQgZmluZCB3YXlzIHRvIGJ5cGFzcyBpdCwgb3IgYXQgbGVhc3QgdHJpZ2dlciBmbGF3cyBiZWZvcmUgdGhhdCBjaGVjay5cblxuT2theSwgaGVyZSdzIHRoZSBmaW5hbCBsaXN0IGZvciBgRm9jdXNTeW1ib2xzYDpcblxuKiAgIGBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0YFxuKiAgIGBydGw4MjYxeF9wcm9iZWBcbiogICBgcnRsODI2MXhfZ2V0X2ZlYXR1cmVzYFxuKiAgIGBydGw4MjYxeF9yZWFkX3N0YXR1c2BcbiogICBgcnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlYFxuKiAgIGBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5YFxuKiAgIGBydGw4MjYxeF9md19sb2FkYFxuKiAgIGBydGw4MjYxeF9jb25maWdfaW50cmBcbiogICBgcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdGBcbiogICBgcnRsODI2MXhfY29uZmlnX2FuZWdgXG4qICAgYHJ0bDgyNjF4X2NvbmZpZ19pbml0YFxuXG5UaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBkZWZpbml0ZWx5IGB0cnVlYCBvbiB0aGlzIG9uZS4gQW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGBbXCJSRUFMVEVLX1BIWVwiXWAuIFRoZSByZWFzb25pbmcgaXMgdGhhdCB0aGUgZHJpdmVyIHN1cHBvcnRzIHRoZSBSVEw4XG5cbiIsIklucHV0VG9rZW5zIjo1MTU5NywiT3V0cHV0VG9rZW5zIjozMTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjUxOjMxLjA4NTc5OTY4OFoiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMzk5NzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSRUFMVEVLX1BIWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXRcIixcbiAgICBcImdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlXCIsXG4gICAgXCJnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlXCIsXG4gICAgXCJydGw4MjYxeF9wcm9iZVwiLFxuICAgIFwicnRsODI2MXhfZ2V0X2ZlYXR1cmVzXCIsXG4gICAgXCJydGw4MjYxeF9yZWFkX3N0YXR1c1wiLFxuICAgIFwicnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlXCIsXG4gICAgXCJydGw4MjYxeF9md19leGVjdXRlX2VudHJ5XCIsXG4gICAgXCJydGw4MjYxeF9md19sb2FkXCIsXG4gICAgXCJydGw4MjYxeF9jb25maWdfaW50clwiLFxuICAgIFwicnRsODI2MXhfaGFuZGxlX2ludGVycnVwdFwiLFxuICAgIFwicnRsODI2MXhfY29uZmlnX2FuZWdcIixcbiAgICBcInJ0bDgyNjF4X2NvbmZpZ19pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw4MjYxIDEwR2JwcyBQSFkgYW5kIGludHJvZHVjZXMgQ2xhdXNlIDQ1IFBIWSBNYXN0ZXIvU2xhdmUgY29uZmlndXJhdGlvbi4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYnkgZW11bGF0aW5nIGEgVVNCIG5ldHdvcmsgYWRhcHRlciAoZS5nLiwgQVNJWCBvciBTTVNDKSB0aGF0IGV4cG9zZXMgYW4gTURJTyBidXMsIGFuZCByZXNwb25kaW5nIHRvIFBIWSBJRCByZWFkcyB3aXRoIHRoZSBSVEw4MjYxIElELiBUaGUgZHJpdmVyIGFsc28gcGFyc2VzIGZpcm13YXJlLCB3aGljaCBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSRUFMVEVLX1BIWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXRcIixcbiAgICBcImdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlXCIsXG4gICAgXCJnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlXCIsXG4gICAgXCJydGw4MjYxeF9wcm9iZVwiLFxuICAgIFwicnRsODI2MXhfZ2V0X2ZlYXR1cmVzXCIsXG4gICAgXCJydGw4MjYxeF9yZWFkX3N0YXR1c1wiLFxuICAgIFwicnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlXCIsXG4gICAgXCJydGw4MjYxeF9md19leGVjdXRlX2VudHJ5XCIsXG4gICAgXCJydGw4MjYxeF9md19sb2FkXCIsXG4gICAgXCJydGw4MjYxeF9jb25maWdfaW50clwiLFxuICAgIFwicnRsODI2MXhfaGFuZGxlX2ludGVycnVwdFwiLFxuICAgIFwicnRsODI2MXhfY29uZmlnX2FuZWdcIixcbiAgICBcInJ0bDgyNjF4X2NvbmZpZ19pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw4MjYxIDEwR2JwcyBQSFkgYW5kIGludHJvZHVjZXMgQ2xhdXNlIDQ1IFBIWSBNYXN0ZXIvU2xhdmUgY29uZmlndXJhdGlvbi4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYnkgZW11bGF0aW5nIGEgVVNCIG5ldHdvcmsgYWRhcHRlciAoZS5nLiwgQVNJWCBvciBTTVNDKSB0aGF0IGV4cG9zZXMgYW4gTURJTyBidXMsIGFuZCByZXNwb25kaW5nIHRvIFBIWSBJRCByZWFkcyB3aXRoIHRoZSBSVEw4MjYxIElELiBUaGUgZHJpdmVyIGFsc28gcGFyc2VzIGZpcm13YXJlLCB3aGljaCBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkmll2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-21 15:29:55 +0000 UTC FinishedAt: 2026-07-21 15:51:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "638b41f770ade0dfc45f7f6f25e1cf75a9c89808", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "REALTEK_PHY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "638b41f770ade0dfc45f7f6f25e1cf75a9c89808", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "REALTEK_PHY" ], "series_id": "aeafd26c-8b6c-484b-a75f-302720b2ade2" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "genphy_c45_pma_soft_reset", "genphy_c45_an_setup_master_slave", "genphy_c45_read_master_slave", "rtl8261x_probe", "rtl8261x_get_features", "rtl8261x_read_status", "rtl8261x_verify_firmware", "rtl8261x_fw_execute_entry", "rtl8261x_fw_load", "rtl8261x_config_intr", "rtl8261x_handle_interrupt", "rtl8261x_config_aneg", "rtl8261x_config_init" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JFQUxURUtfUEhZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2VucGh5X2M0NV9wbWFfc29mdF9yZXNldCYjMzQ7LAogICAgJiMzNDtnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZSYjMzQ7LAogICAgJiMzNDtnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X3Byb2JlJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2dldF9mZWF0dXJlcyYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9yZWFkX3N0YXR1cyYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF92ZXJpZnlfZmlybXdhcmUmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeSYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9md19sb2FkJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2NvbmZpZ19pbnRyJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfY29uZmlnX2FuZWcmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfY29uZmlnX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw4MjYxIDEwR2JwcyBQSFkgYW5kIGludHJvZHVjZXMgQ2xhdXNlIDQ1IFBIWSBNYXN0ZXIvU2xhdmUgY29uZmlndXJhdGlvbi4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYnkgZW11bGF0aW5nIGEgVVNCIG5ldHdvcmsgYWRhcHRlciAoZS5nLiwgQVNJWCBvciBTTVNDKSB0aGF0IGV4cG9zZXMgYW4gTURJTyBidXMsIGFuZCByZXNwb25kaW5nIHRvIFBIWSBJRCByZWFkcyB3aXRoIHRoZSBSVEw4MjYxIElELiBUaGUgZHJpdmVyIGFsc28gcGFyc2VzIGZpcm13YXJlLCB3aGljaCBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDVjZDBhZDAwMjNlNTUzNjAyNGRmNGFlYTZhMzZkNjRjYzBkM2NlZTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyMSAxNTo0Nzo1NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuaW5kZXggMTI2OTUxNzQxNDI4OGYuLjg3MDkyMDMxMWY5YTAxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuQEAgLTM4NCw2ICYjNDM7Mzg0LDExOSBAQCBpbnQgZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgcmVzdGFydClcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXQgLSBzb2Z0d2FyZSByZXNldCB0aGUgUEhZIHZpYSBDbGF1c2UgNDUgUE1BL1BNRCBjb250cm9sIHJlZ2lzdGVyXG4mIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO2ludCBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0LCB2YWw7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeV9zZXRfYml0c19tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsIE1ESU9fQ1RSTDEsXG4mIzQzO1x0XHRcdCAgICAgICBNRElPX0NUUkwxX1JFU0VUKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsXG4mIzQzO1x0XHRcdFx0XHQgTURJT19DVFJMMSwgdmFsLFxuJiM0MztcdFx0XHRcdFx0ICEodmFsIFx1MDAyNiBNRElPX0NUUkwxX1JFU0VUKSxcbiYjNDM7XHRcdFx0XHRcdCA1MDAwLCA2MDAwMDAsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXQpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlIC0gQ29uZmlndXJlIE1hc3Rlci9TbGF2ZSBzZXR0aW5nIGZvciBDNDUgUEhZc1xuJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbiYjNDM7ICpcbiYjNDM7ICogRGVzY3JpcHRpb246IENvbmZpZ3VyZSB0aGUgZm9yY2VkIG9yIHByZWZlcnJlZCBNYXN0ZXIvU2xhdmUgcm9sZVxuJiM0MzsgKiAxMEdCQVNFLVQgY29udHJvbCByZWdpc3RlciAoTU1EIDcsIFJlZ2lzdGVyIDB4MDAyMCkgYWNjb3JkaW5nIHRvXG4mIzQzOyAqIElFRUUgODAyLjMgc3RhbmRhcmRzLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IG5lZ2F0aXZlIGVycm5vIGNvZGUgb24gZmFpbHVyZSwgMCBpZiBNYXN0ZXIvU2xhdmUgZGlkbiYjMzk7dCBjaGFuZ2UsXG4mIzQzOyAqIG9yIDEgaWYgTWFzdGVyL1NsYXZlIG1vZGVzIGNoYW5nZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHR1MTYgY3RsID0gMDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3NldCkge1xuJiM0MztcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfUFJFRkVSUkVEOlxuJiM0MztcdFx0Y3RsID0gTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9QUkVGRVJSRUQ6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfTUFTVEVSX0ZPUkNFOlxuJiM0MztcdFx0Y3RsID0gTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRSB8IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9GT1JDRTpcbiYjNDM7XHRcdGN0bCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfVU5LTk9XTjpcbiYjNDM7XHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfVU5TVVBQT1JURUQ6XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcJiMzNDtVbnN1cHBvcnRlZCBNYXN0ZXIvU2xhdmUgbW9kZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICAgICAgTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRSB8XG4mIzQzO1x0XHRcdFx0ICAgICAgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFIHxcbiYjNDM7XHRcdFx0XHQgICAgICBNRElPX0FOXzEwR0JUX0NUUkxfTVNfUE9SVF9UWVBFLCBjdGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZSAtIHJlYWQgbWFzdGVyL3NsYXZlIHN0YXR1c1xuJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbiYjNDM7ICpcbiYjNDM7ICogRGVzY3JpcHRpb246IFJlYWQgdGhlIE1hc3Rlci9TbGF2ZSBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXNcbiYjNDM7ICogZnJvbSAxMEdCQVNFLVQgY29udHJvbC9zdGF0dXMgcmVnaXN0ZXJzIChNTUQgNywgUmVnIDB4MDAyMCBhbmQgMHgwMDIxKS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgdmFsO1xuJiM0MztcbiYjNDM7XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfVU5LTk9XTjtcbiYjNDM7XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX1VOS05PV047XG4mIzQzO1xuJiM0MztcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX0NUUkwpO1xuJiM0MztcdGlmICh2YWwgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gdmFsO1xuJiM0MztcbiYjNDM7XHRpZiAodmFsIFx1MDAyNiBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFKSB7XG4mIzQzO1x0XHRpZiAodmFsIFx1MDAyNiBNRElPX0FOXzEwR0JUX0NUUkxfTVNfVkFMVUUpXG4mIzQzO1x0XHRcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfRk9SQ0U7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9GT1JDRTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aWYgKHZhbCBcdTAwMjYgTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRSlcbiYjNDM7XHRcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX01BU1RFUl9QUkVGRVJSRUQ7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9QUkVGRVJSRUQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9TVEFUKTtcbiYjNDM7XHRpZiAodmFsIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHZhbDtcbiYjNDM7XG4mIzQzO1x0aWYgKHZhbCBcdTAwMjYgTURJT19BTl8xMEdCVF9TVEFUX01TX0ZBVUxUKSB7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX0VSUjtcbiYjNDM7XHR9IGVsc2UgaWYgKHBoeWRldi1cdTAwM2VsaW5rKSB7XG4mIzQzO1x0XHRpZiAodmFsIFx1MDAyNiBNRElPX0FOXzEwR0JUX1NUQVRfTVNfUkVTKVxuJiM0MztcdFx0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX01BU1RFUjtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9TTEFWRTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9VTktOT1dOO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogZ2VucGh5X2M0NV9hbmVnX2RvbmUgLSByZXR1cm4gYXV0by1uZWdvdGlhdGlvbiBjb21wbGV0ZSBzdGF0dXNcbiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbkBAIC0xMTkyLDYgJiM0MzsxMzA1LDEwIEBAIGludCBnZW5waHlfYzQ1X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRcdFx0cmV0ID0gZ2VucGh5X2M0NV9iYXNldDFfcmVhZF9zdGF0dXMocGh5ZGV2KTtcbiBcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHJldCA9IGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmUocGh5ZGV2KTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHR9XG4gXG4gXHRcdHBoeV9yZXNvbHZlX2FuZWdfbGlua21vZGUocGh5ZGV2KTtcbkBAIC0xMjI1LDYgJiM0MzsxMzQyLDE0IEBAIGludCBnZW5waHlfYzQ1X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRpZiAocmV0IFx1MDAzZSAwKVxuIFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbiBcbiYjNDM7XHRpZiAoIWdlbnBoeV9jNDVfYmFzZXQxX2FibGUocGh5ZGV2KSkge1xuJiM0MztcdFx0cmV0ID0gZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmUocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzZSAwKVxuJiM0MztcdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIGdlbnBoeV9jNDVfY2hlY2tfYW5kX3Jlc3RhcnRfYW5lZyhwaHlkZXYsIGNoYW5nZWQpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X2NvbmZpZ19hbmVnKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXG5pbmRleCBiNjVkMGY1ZmExYTAxNC4uMWMwYjljNDBhODFlNTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcbkBAIC04LDcgJiM0Mzs4LDkgQEBcbiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy5cbiAgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRvcHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jcmMzMi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbF9uZXRsaW5rLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZmlybXdhcmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtX3dha2VpcnEuaFx1MDAzZVxuQEAgLTE0MSw2ICYjNDM7MTQzLDEwIEBAXG4gI2RlZmluZSBSVEw4MjExRl9QSFlTSUNBTF9BRERSX1dPUkQxXHRcdDE3XG4gI2RlZmluZSBSVEw4MjExRl9QSFlTSUNBTF9BRERSX1dPUkQyXHRcdDE4XG4gXG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfRVhUX0FERFJfUkVHXHRcdFx0MHhhNDM2XG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfRVhUX0RBVEFfUkVHXHRcdFx0MHhhNDM4XG4mIzQzOyNkZWZpbmUgUlRMXzgyNjFYX1NVQl9QSFlfSURfQUREUlx0XHQweDgwMWRcbiYjNDM7XG4gI2RlZmluZSBSVEw4MjJYX1ZORDFfU0VSREVTX09QVElPTlx0XHRcdDB4Njk3YVxuICNkZWZpbmUgUlRMODIyWF9WTkQxX1NFUkRFU19PUFRJT05fTU9ERV9NQVNLXHRcdEdFTk1BU0soNSwgMClcbiAjZGVmaW5lIFJUTDgyMlhfVk5EMV9TRVJERVNfT1BUSU9OX01PREVfMjUwMEJBU0VYX1NHTUlJXHRcdDBcbkBAIC0yNTEsNiAmIzQzOzI1Nyw3MCBAQFxuICNkZWZpbmUgUlRMXzgyMjFCX1ZNX0NHXHRcdFx0XHQweDAwMWNjODRhXG4gI2RlZmluZSBSVExfODI1MUJcdFx0XHRcdDB4MDAxY2M4NjJcbiAjZGVmaW5lIFJUTF84MjYxQ1x0XHRcdFx0MHgwMDFjYzg5MFxuJiM0MzsjZGVmaW5lIFJUTF84MjYxQ19DR1x0XHRcdFx0MHgwMDFjYzg5OFxuJiM0MztcbiYjNDM7I2RlZmluZSBSVEw4MjYxQ19DRV9NT0RFTFx0XHQweDAwXG4mIzQzOyNkZWZpbmUgUlRMODI2MURfTU9ERUxcdFx0XHQweDgxXG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX0FVVE9ORUdfRVJST1JcdEJJVCgwKVxuJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9QQUdFX1JFQ1ZcdFx0QklUKDIpXG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORVx0QklUKDMpXG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX0xJTktfQ0hHXHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9QSFlfUkVHX0FDQ0VTU1x0QklUKDUpXG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX1BNRVx0XHRCSVQoNylcbiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfQUxEUFNfQ0hHXHRcdEJJVCg5KVxuJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9KQUJCRVJcdFx0QklUKDEwKVxuJiM0MztcbiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfTUFTS19ERUZBVUxUXHQoUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0xJTktfQ0hHIHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfQVVUT05FR19FUlJPUiB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0pBQkJFUilcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX01BU0tfQUxMXHRcdChSVEw4MjYxWF9JTlRfQVVUT05FR19FUlJPUiB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX1BBR0VfUkVDViB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0xJTktfQ0hHIHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfUEhZX1JFR19BQ0NFU1MgfCBcXFxuJiM0MztcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9QTUUgfCBcXFxuJiM0MztcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9BTERQU19DSEcgfCBcXFxuJiM0MztcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9KQUJCRVIpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEZXX01BSU5fTUFHSUNcdFx0XHQweDUyNTQ0QzM4XG4mIzQzOyNkZWZpbmUgRldfU1VCX01BR0lDXzgyNjFDXHRcdDB4MzIzNjMxNDNcbiYjNDM7I2RlZmluZSBSVEw4MjYxWF9QT0xMX1RJTUVPVVRfTVNcdDEwMFxuJiM0MzsjZGVmaW5lIFJUTDgyNjFYX01BWF9NTURfREVWXHRcdDMxXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJUTDgyNjFDX0NFX0ZXX05BTUVcdFwmIzM0O3J0bF9uaWMvcnRsODI2MWMuYmluXCYjMzQ7XG4mIzQzO01PRFVMRV9GSVJNV0FSRShSVEw4MjYxQ19DRV9GV19OQU1FKTtcbiYjNDM7XG4mIzQzO2VudW0gcnRsODI2MXhfZndfb3Age1xuJiM0MztcdE9QX1dSSVRFID0gMHgwMCxcdC8qIFdyaXRlICovXG4mIzQzO1x0T1BfUE9MTCAgPSAweDAyLFx0LyogUG9sbGluZyAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciB7XG4mIzQzO1x0X19sZTMyIG1haW5fbWFnaWM7XHQvKiBNYWluIG1hZ2ljIG51bWJlciAqL1xuJiM0MztcdF9fbGUzMiBzdWJfbWFnaWM7XHQvKiBTdWIgbWFnaWMgbnVtYmVyICovXG4mIzQzO1x0X19sZTE2IHZlcnNpb25fbWFqb3I7XHQvKiBNYWpvciB2ZXJzaW9uICovXG4mIzQzO1x0X19sZTE2IHZlcnNpb25fbWlub3I7XHQvKiBNaW5vciB2ZXJzaW9uICovXG4mIzQzO1x0X19sZTE2IG51bV9lbnRyaWVzO1x0LyogTnVtYmVyIG9mIGVudHJpZXMgKi9cbiYjNDM7XHRfX2xlMTYgcmVzZXJ2ZWQ7XHQvKiBSZXNlcnZlZCAqL1xuJiM0MztcdF9fbGUzMiBjcmMzMjtcdFx0LyogQ1JDMzIgY2hlY2tzdW0gKi9cbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBydGw4MjYxeF9md19lbnRyeSB7XG4mIzQzO1x0X191OCAgdHlwZTtcdFx0LyogT3BlcmF0aW9uIHR5cGUgKE9QXyopICovXG4mIzQzO1x0X191OCAgZGV2O1x0XHQvKiBNTUQgZGV2aWNlICovXG4mIzQzO1x0X19sZTE2IGFkZHI7XHRcdC8qIFJlZ2lzdGVyIGFkZHJlc3MgKi9cbiYjNDM7XHRfX3U4ICBtc2I7XHRcdC8qIE1TQiBiaXQgcG9zaXRpb24gKi9cbiYjNDM7XHRfX3U4ICBsc2I7XHRcdC8qIExTQiBiaXQgcG9zaXRpb24gKi9cbiYjNDM7XHRfX2xlMTYgdmFsdWU7XHRcdC8qIFZhbHVlIHRvIHdyaXRlL2NvbXBhcmUgKi9cbiYjNDM7XHRfX2xlMTYgdGltZW91dF9tcztcdC8qIFBvbGwgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKi9cbiYjNDM7XHRfX3U4ICBwb2xsX3NldDtcdFx0LyogUG9sbCB1bnRpbCBlcXVhbCAoMSkgb3Igbm90IGVxdWFsICgwKSAqL1xuJiM0MztcdF9fdTggIHJlc2VydmVkO1x0XHQvKiBSZXNlcnZlZCAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBGV19IRUFERVJfU0laRVx0XHRzaXplb2Yoc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlcilcbiYjNDM7I2RlZmluZSBGV19FTlRSWV9TSVpFXHRcdHNpemVvZihzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkpXG4gXG4gLyogUlRMODIxMUUgYW5kIFJUTDgyMTFGIHN1cHBvcnQgdXAgdG8gdGhyZWUgTEVEcyAqL1xuICNkZWZpbmUgUlRMODIxMXhfTEVEX0NPVU5UXHRcdFx0M1xuQEAgLTI3MCw2ICYjNDM7MzQwLDExIEBAIHN0cnVjdCBydGw4MjF4X3ByaXYge1xuIFx0dTE2IGluZXI7XG4gfTtcbiBcbiYjNDM7c3RydWN0IHJ0bDgyNjF4X3ByaXYge1xuJiM0MztcdGNvbnN0IGNoYXIgKmZ3X25hbWU7XG4mIzQzO1x0Ym9vbCBmd19sb2FkZWQ7XG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBpbnQgcnRsODIxeF9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4gXHRyZXR1cm4gX19waHlfcmVhZChwaHlkZXYsIFJUTDgyMXhfUEFHRV9TRUxFQ1QpO1xuQEAgLTMxMCw2ICYjNDM7Mzg1LDMyOSBAQCBzdGF0aWMgaW50IHJ0bDgyMXhfbW9kaWZ5X2V4dF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiBleHRfcGFnZSxcbiBcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkcGFnZSwgcmV0KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbiYjNDM7XHRzdHJ1Y3QgcnRsODI2MXhfcHJpdiAqcHJpdjtcbiYjNDM7XHRpbnQgc3ViX3BoeV9pZCwgcmV0O1xuJiM0MztcbiYjNDM7XHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwcml2KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHBoeWRldi1cdTAwM2Vwcml2ID0gcHJpdjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjYxWF9FWFRfQUREUl9SRUcsXG4mIzQzO1x0XHRcdCAgICBSVExfODI2MVhfU1VCX1BIWV9JRF9BRERSKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyNjFYX0VYVF9EQVRBX1JFRyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHN1Yl9waHlfaWQgPSAocmV0IFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgMHhmZjtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChzdWJfcGh5X2lkKSB7XG4mIzQzO1x0Y2FzZSBSVEw4MjYxQ19DRV9NT0RFTDpcbiYjNDM7XHRcdHByaXYtXHUwMDNlZndfbmFtZSA9IFJUTDgyNjFDX0NFX0ZXX05BTUU7XG4mIzQzO1x0XHRwaHlkZXZfaW5mbyhwaHlkZXYsIFwmIzM0O1JUTDgyNjFDIGRldGVjdGVkIChzdWJfaWQgMHglMDJ4KVxcblwmIzM0Oywgc3ViX3BoeV9pZCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0Y2FzZSBSVEw4MjYxRF9NT0RFTDpcbiYjNDM7XHRcdHBoeWRldl9pbmZvKHBoeWRldiwgXCYjMzQ7UlRMODI2MUQgZGV0ZWN0ZWQgKHN1Yl9pZCAweCUwMngpXFxuXCYjMzQ7LCBzdWJfcGh5X2lkKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcJiMzNDtVbmtub3duIHN1Yl9pZCAweCUwMngsIGRlZmF1bHQgYmVoYXZpb3JcXG5cJiMzNDssIHN1Yl9waHlfaWQpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydGw4MjYxeF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGdlbnBoeV9jNDVfcG1hX3JlYWRfYWJpbGl0aWVzKHBoeWRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTdXBwbGVtZW50IE11bHRpLUdpZyBzcGVlZHMgdGhhdCBtYXkgbm90IGJlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWRcbiYjNDM7XHQgKiBSVEw4MjYxWCBzdXBwb3J0cyAyLjVHLzVHIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIDEwR1xuJiM0MztcdCAqL1xuJiM0MztcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULFxuJiM0MztcdFx0XHQgcGh5ZGV2LVx1MDAzZXN1cHBvcnRlZCk7XG4mIzQzO1x0bGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV81MDAwYmFzZVRfRnVsbF9CSVQsXG4mIzQzO1x0XHRcdCBwaHlkZXYtXHUwMDNlc3VwcG9ydGVkKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQsIHZhbCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkge1xuJiM0MztcdFx0cmV0ID0gZ2VucGh5X2M0NV9hbmVnX2RvbmUocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMixcbiYjNDM7XHRcdFx0XHRcdCAgIFJUTDgyMlhfVk5EMl9DMjJfUkVHKE1JSV9TVEFUMTAwMCkpO1xuJiM0MztcdFx0XHRpZiAodmFsIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdHJldHVybiB2YWw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtaWlfc3RhdDEwMDBfbW9kX2xpbmttb2RlX2xwYV90KHBoeWRldi1cdTAwM2VscF9hZHZlcnRpc2luZywgdmFsKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZ2VucGh5X2M0NV9yZWFkX3N0YXR1cyhwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydGw4MjYxeF92ZXJpZnlfZmlybXdhcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgKmhkcjtcbiYjNDM7XHR1MzIgbWFpbl9tYWdpYywgc3ViX21hZ2ljO1xuJiM0MztcdHUzMiBjYWxjX2NyYywgZmlsZV9jcmM7XG4mIzQzO1x0c2l6ZV90IGRhdGFfbGVuO1xuJiM0MztcdHUxNiBudW1fZW50cmllcztcbiYjNDM7XG4mIzQzO1x0aWYgKGZ3LVx1MDAzZXNpemUgXHUwMDNjIEZXX0hFQURFUl9TSVpFKSB7XG4mIzQzO1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7RmlybXdhcmUgdG9vIHNtYWxsOiAlenUgYnl0ZXNcXG5cJiMzNDssIGZ3LVx1MDAzZXNpemUpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRoZHIgPSAoY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciAqKWZ3LVx1MDAzZWRhdGE7XG4mIzQzO1xuJiM0MztcdG1haW5fbWFnaWMgPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlbWFpbl9tYWdpYyk7XG4mIzQzO1x0aWYgKG1haW5fbWFnaWMgIT0gRldfTUFJTl9NQUdJQykge1xuJiM0MztcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O0ludmFsaWQgZmlybXdhcmUgbWFnaWM6IDB4JTA4eFxcblwmIzM0OywgbWFpbl9tYWdpYyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN1Yl9tYWdpYyA9IGxlMzJfdG9fY3B1KGhkci1cdTAwM2VzdWJfbWFnaWMpO1xuJiM0MztcdGlmIChzdWJfbWFnaWMgIT0gRldfU1VCX01BR0lDXzgyNjFDKSB7XG4mIzQzO1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7SW52YWxpZCBzdWIgbWFnaWM6IDB4JTA4eFxcblwmIzM0Oywgc3ViX21hZ2ljKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bnVtX2VudHJpZXMgPSBsZTE2X3RvX2NwdShoZHItXHUwMDNlbnVtX2VudHJpZXMpO1xuJiM0MztcdGRhdGFfbGVuID0gbnVtX2VudHJpZXMgKiBGV19FTlRSWV9TSVpFO1xuJiM0MztcbiYjNDM7XHRpZiAoZnctXHUwMDNlc2l6ZSAhPSBzaXplb2YoKmhkcikgJiM0MzsgZGF0YV9sZW4pIHtcbiYjNDM7XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtGaXJtd2FyZSBzaXplIG1pc21hdGNoXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y2FsY19jcmMgPSBjcmMzMih+MCwgZnctXHUwMDNlZGF0YSAmIzQzOyBGV19IRUFERVJfU0laRSwgZGF0YV9sZW4pIF4gfjA7XG4mIzQzO1x0ZmlsZV9jcmMgPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlY3JjMzIpO1xuJiM0MztcbiYjNDM7XHRpZiAoY2FsY19jcmMgIT0gZmlsZV9jcmMpIHtcbiYjNDM7XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtDUkMzMiBtaXNtYXRjaDogY2FsY3VsYXRlZD0weCUwOHggZmlsZT0weCUwOHhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIGNhbGNfY3JjLCBmaWxlX2NyYyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSAqZW50cnkpXG4mIzQzO3tcbiYjNDM7XHR1MTYgYWRkciwgdmFsdWUsIHRpbWVvdXRfbXM7XG4mIzQzO1x0dTggZGV2LCBtc2IsIGxzYiwgcG9sbF9zZXQ7XG4mIzQzO1x0dTMyIGJpdHMsIGV4cGVjdF92YWw7XG4mIzQzO1x0aW50IHJldCwgdmFsO1xuJiM0MztcbiYjNDM7XHRkZXYgPSBlbnRyeS1cdTAwM2VkZXY7XG4mIzQzO1x0YWRkciA9IGxlMTZfdG9fY3B1KGVudHJ5LVx1MDAzZWFkZHIpO1xuJiM0MztcdG1zYiA9IGVudHJ5LVx1MDAzZW1zYjtcbiYjNDM7XHRsc2IgPSBlbnRyeS1cdTAwM2Vsc2I7XG4mIzQzO1x0dmFsdWUgPSBsZTE2X3RvX2NwdShlbnRyeS1cdTAwM2V2YWx1ZSk7XG4mIzQzO1x0dGltZW91dF9tcyA9IGxlMTZfdG9fY3B1KGVudHJ5LVx1MDAzZXRpbWVvdXRfbXMpO1xuJiM0MztcdHBvbGxfc2V0ID0gZW50cnktXHUwMDNlcG9sbF9zZXQ7XG4mIzQzO1xuJiM0MztcdGlmICh0aW1lb3V0X21zID09IDApXG4mIzQzO1x0XHR0aW1lb3V0X21zID0gUlRMODI2MVhfUE9MTF9USU1FT1VUX01TO1xuJiM0MztcbiYjNDM7XHRpZiAoZGV2IFx1MDAzZSBSVEw4MjYxWF9NQVhfTU1EX0RFVikge1xuJiM0MztcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O2ludmFsaWQgZmlybXdhcmUgTU1EIGRldmljZTogZGV2PSV1XFxuXCYjMzQ7LCBkZXYpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobXNiIFx1MDAzZSAxNSB8fCBsc2IgXHUwMDNlIG1zYikge1xuJiM0MztcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O2ludmFsaWQgZmlybXdhcmUgYml0czogbXNiPSV1LCBsc2I9JXVcXG5cJiMzNDssIG1zYiwgbHNiKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChlbnRyeS1cdTAwM2V0eXBlKSB7XG4mIzQzO1x0Y2FzZSBPUF9XUklURTpcbiYjNDM7XHRcdHJldCA9IHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgZGV2LCBhZGRyLFxuJiM0MztcdFx0XHRcdCAgICAgR0VOTUFTSyhtc2IsIGxzYiksICh2YWx1ZSBcdTAwM2NcdTAwM2MgbHNiKSBcdTAwMjYgR0VOTUFTSyhtc2IsIGxzYikpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIE9QX1BPTEw6XG4mIzQzO1x0XHRiaXRzID0gR0VOTUFTSyhtc2IsIGxzYik7XG4mIzQzO1x0XHRleHBlY3RfdmFsID0gKHZhbHVlIFx1MDAzY1x1MDAzYyBsc2IpIFx1MDAyNiBiaXRzO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwb2xsX3NldClcbiYjNDM7XHRcdFx0cmV0ID0gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIGRldiwgYWRkciwgdmFsLFxuJiM0MztcdFx0XHRcdFx0XHRcdCh2YWwgXHUwMDI2IGJpdHMpID09IGV4cGVjdF92YWwsXG4mIzQzO1x0XHRcdFx0XHRcdFx0MTAwMCwgdGltZW91dF9tcyAqIDEwMDAsIGZhbHNlKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cmV0ID0gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIGRldiwgYWRkciwgdmFsLFxuJiM0MztcdFx0XHRcdFx0XHRcdCh2YWwgXHUwMDI2IGJpdHMpICE9IGV4cGVjdF92YWwsXG4mIzQzO1x0XHRcdFx0XHRcdFx0MTAwMCwgdGltZW91dF9tcyAqIDEwMDAsIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfZndfbG9hZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bDgyNjF4X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkgKmVudHJ5O1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgKmhkcjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xuJiM0MztcdGludCByZXQsIGk7XG4mIzQzO1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2Vmd19uYW1lKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlcXVlc3RfZmlybXdhcmUoXHUwMDI2ZncsIHByaXYtXHUwMDNlZndfbmFtZSwgXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7RmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgJXM6ICVkXFxuXCYjMzQ7LCBwcml2LVx1MDAzZWZ3X25hbWUsIHJldCk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlKHBoeWRldiwgZncpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIHJlbGVhc2VfZnc7XG4mIzQzO1xuJiM0MztcdGhkciA9IChjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICopZnctXHUwMDNlZGF0YTtcbiYjNDM7XG4mIzQzO1x0ZW50cnkgPSAoY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2VudHJ5ICopKGZ3LVx1MDAzZWRhdGEgJiM0MzsgRldfSEVBREVSX1NJWkUpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxlMTZfdG9fY3B1KGhkci1cdTAwM2VudW1fZW50cmllcyk7IGkmIzQzOyYjNDM7LCBlbnRyeSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJldCA9IHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnkocGh5ZGV2LCBlbnRyeSk7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtFbnRyeSAlZCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCBpLCByZXQpO1xuJiM0MztcdFx0XHRnb3RvIHJlbGVhc2VfZnc7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWZ3X2xvYWRlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztyZWxlYXNlX2Z3OlxuJiM0MztcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfY29uZmlnX2ludHIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJydXB0cyA9PSBQSFlfSU5URVJSVVBUX0VOQUJMRUQpIHtcbiYjNDM7XHRcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lOU1IpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5FUixcbiYjNDM7XHRcdFx0XHQgICAgUlRMODI2MVhfSU5UX01BU0tfREVGQVVMVCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5FUiwgMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lOU1IpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGlycV9zdGF0dXM7XG4mIzQzO1xuJiM0MztcdGlycV9zdGF0dXMgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODIyMUJfVk5EMl9JTlNSKTtcbiYjNDM7XHRpZiAoaXJxX3N0YXR1cyBcdTAwM2MgMCkge1xuJiM0MztcdFx0cGh5X2Vycm9yKHBoeWRldik7XG4mIzQzO1x0XHRyZXR1cm4gSVJRX05PTkU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIShpcnFfc3RhdHVzIFx1MDAyNiBSVEw4MjYxWF9JTlRfTUFTS19BTEwpKVxuJiM0MztcdFx0cmV0dXJuIElSUV9OT05FO1xuJiM0MztcbiYjNDM7XHRpZiAoaXJxX3N0YXR1cyBcdTAwMjYgKFJUTDgyNjFYX0lOVF9MSU5LX0NIRyB8IFJUTDgyNjFYX0lOVF9BVVRPTkVHX0RPTkUgfFxuJiM0MztcdCAgICBSVEw4MjYxWF9JTlRfQVVUT05FR19FUlJPUiB8IFJUTDgyNjFYX0lOVF9KQUJCRVIpKVxuJiM0MztcdFx0cGh5X3RyaWdnZXJfbWFjaGluZShwaHlkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHUxNiBhZHZfMWcgPSAwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGdlbnBoeV9jNDVfY29uZmlnX2FuZWcocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VhdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMGJhc2VUX0Z1bGxfQklULFxuJiM0MztcdFx0XHQgICAgICBwaHlkZXYtXHUwMDNlYWR2ZXJ0aXNpbmcpKVxuJiM0MztcdFx0YWR2XzFnID0gQURWRVJUSVNFXzEwMDBGVUxMO1xuJiM0MztcdGlmIChsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV8xMDAwYmFzZVRfSGFsZl9CSVQsXG4mIzQzO1x0XHRcdCAgICAgIHBoeWRldi1cdTAwM2VhZHZlcnRpc2luZykpXG4mIzQzO1x0XHRhZHZfMWcgfD0gQURWRVJUSVNFXzEwMDBIQUxGO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfVkVORDIsXG4mIzQzO1x0XHRcdFx0ICAgICBSVEw4MjJYX1ZORDJfQzIyX1JFRyhNSUlfQ1RSTDEwMDApLFxuJiM0MztcdFx0XHRcdCAgICAgQURWRVJUSVNFXzEwMDBGVUxMIHwgQURWRVJUSVNFXzEwMDBIQUxGLFxuJiM0MztcdFx0XHRcdCAgICAgYWR2XzFnKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZSAwKVxuJiM0MztcdFx0cmV0dXJuIGdlbnBoeV9jNDVfcmVzdGFydF9hbmVnKHBoeWRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRsODI2MXhfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgZmlybXdhcmUgcGFyYW1ldGVycyBhcmUgcHJlc2VydmVkIGFjcm9zcyBJRUVFIHNvZnQgcmVzZXRzIGFuZFxuJiM0MztcdCAqIHN1c3BlbmQvcmVzdW1lIGN5Y2xlcy4gUmVsb2FkaW5nIGlzIG9ubHkgbmVjZXNzYXJ5IGFmdGVyIGEgcG93ZXJcbiYjNDM7XHQgKiBjeWNsZSBvciBoYXJkIHJlc2V0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWZ3X25hbWUgXHUwMDI2XHUwMDI2ICFwcml2LVx1MDAzZWZ3X2xvYWRlZClcbiYjNDM7XHRcdHJldHVybiBydGw4MjYxeF9md19sb2FkKHBoeWRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgcnRsODIxeF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbkBAIC0zMDAyLDYgJiM0MzszNDAwLDE5IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciByZWFsdGVrX2RydnNbXSA9IHtcbiBcdFx0LnJlc3VtZVx0XHQ9IGdlbnBoeV9yZXN1bWUsXG4gXHRcdC5yZWFkX21tZFx0PSBnZW5waHlfcmVhZF9tbWRfdW5zdXBwb3J0ZWQsXG4gXHRcdC53cml0ZV9tbWRcdD0gZ2VucGh5X3dyaXRlX21tZF91bnN1cHBvcnRlZCxcbiYjNDM7XHR9LCB7XG4mIzQzO1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUlRMXzgyNjFDX0NHKSxcbiYjNDM7XHRcdC5uYW1lXHRcdFx0PSBcJiMzNDtSZWFsdGVrIFJUTDgyNjEgMTBHYnBzIFBIWVwmIzM0OyxcbiYjNDM7XHRcdC5wcm9iZVx0XHRcdD0gcnRsODI2MXhfcHJvYmUsXG4mIzQzO1x0XHQuY29uZmlnX2luaXRcdFx0PSBydGw4MjYxeF9jb25maWdfaW5pdCxcbiYjNDM7XHRcdC5nZXRfZmVhdHVyZXNcdFx0PSBydGw4MjYxeF9nZXRfZmVhdHVyZXMsXG4mIzQzO1x0XHQuY29uZmlnX2FuZWdcdFx0PSBydGw4MjYxeF9jb25maWdfYW5lZyxcbiYjNDM7XHRcdC5yZWFkX3N0YXR1c1x0XHQ9IHJ0bDgyNjF4X3JlYWRfc3RhdHVzLFxuJiM0MztcdFx0LmNvbmZpZ19pbnRyXHRcdD0gcnRsODI2MXhfY29uZmlnX2ludHIsXG4mIzQzO1x0XHQuaGFuZGxlX2ludGVycnVwdFx0PSBydGw4MjYxeF9oYW5kbGVfaW50ZXJydXB0LFxuJiM0MztcdFx0LnNvZnRfcmVzZXRcdFx0PSBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0LFxuJiM0MztcdFx0LnN1c3BlbmRcdFx0PSBnZW5waHlfYzQ1X3BtYV9zdXNwZW5kLFxuJiM0MztcdFx0LnJlc3VtZVx0XHRcdD0gZ2VucGh5X2M0NV9wbWFfcmVzdW1lLFxuIFx0fSxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5pbmRleCBiZWZmMWQ2ZmNjN2NkYS4uNTdjZjlhYzM1MjRkMjIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5AQCAtMjMxNCw2ICYjNDM7MjMxNCw3IEBAIGludCBnZW5waHlfYzM3X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgKmNoYW5nZWQpO1xuIC8qIENsYXVzZSA0NSBQSFkgKi9cbiBpbnQgZ2VucGh5X2M0NV9yZXN0YXJ0X2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gaW50IGdlbnBoeV9jNDVfY2hlY2tfYW5kX3Jlc3RhcnRfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIHJlc3RhcnQpO1xuJiM0MztpbnQgZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgZ2VucGh5X2M0NV9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gaW50IGdlbnBoeV9jNDVfcmVhZF9saW5rKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X3JlYWRfbHBhKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG5pbmRleCBiMjU0MWM5NDhmYzFlYi4uMDZmNGJjM2MyMGM3MTcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG5AQCAtMzMyLDggJiM0MzszMzIsMTMgQEBcbiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHXHQweDAwODBcdC8qIEFkdmVydGlzZSAyLjVHQkFTRS1UICovXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfQURWNUdcdDB4MDEwMFx0LyogQWR2ZXJ0aXNlIDVHQkFTRS1UICovXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMTBHXHQweDEwMDBcdC8qIEFkdmVydGlzZSAxMEdCQVNFLVQgKi9cbiYjNDM7I2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFXHQweDgwMDBcdC8qIE1hc3Rlci9zbGF2ZSBtYW51YWwgY29uZmlnIGVuYWJsZSAqL1xuJiM0MzsjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRVx0MHg0MDAwXHQvKiBNYXN0ZXIvc2xhdmUgY29uZmlnIHZhbHVlICgxPU1hc3RlcikgKi9cbiYjNDM7I2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfUE9SVF9UWVBFXHQweDIwMDBcdC8qIE1hc3RlciBQcmVmZXJyZWQgVHlwZSAqL1xuIFxuIC8qIEFOIDEwR0JBU0UtVCBzdGF0dXMgcmVnaXN0ZXIuICovXG4mIzQzOyNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX01TX0ZBVUxUXHQweDgwMDBcdC8qIE1hc3Rlci9zbGF2ZSBmYXVsdCAqL1xuJiM0MzsjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9NU19SRVNcdDB4NDAwMFx0LyogTWFzdGVyL3NsYXZlIHJlc29sdXRpb24gKDE9TWFzdGVyKSAqL1xuICNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX0xQMl81R1x0MHgwMDIwICAvKiBMUCBpcyAyLjVHQlQgY2FwYWJsZSAqL1xuICNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX0xQNUdcdFx0MHgwMDQwICAvKiBMUCBpcyA1R0JUIGNhcGFibGUgKi9cbiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9MUFRSUlx0MHgwMjAwXHQvKiBMUCB0cmFpbmluZyByZXNldCByZXEuICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JFQUxURUtfUEhZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2VucGh5X2M0NV9wbWFfc29mdF9yZXNldCYjMzQ7LAogICAgJiMzNDtnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZSYjMzQ7LAogICAgJiMzNDtnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X3Byb2JlJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2dldF9mZWF0dXJlcyYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9yZWFkX3N0YXR1cyYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF92ZXJpZnlfZmlybXdhcmUmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeSYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9md19sb2FkJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2NvbmZpZ19pbnRyJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfY29uZmlnX2FuZWcmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfY29uZmlnX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw4MjYxIDEwR2JwcyBQSFkgYW5kIGludHJvZHVjZXMgQ2xhdXNlIDQ1IFBIWSBNYXN0ZXIvU2xhdmUgY29uZmlndXJhdGlvbi4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYnkgZW11bGF0aW5nIGEgVVNCIG5ldHdvcmsgYWRhcHRlciAoZS5nLiwgQVNJWCBvciBTTVNDKSB0aGF0IGV4cG9zZXMgYW4gTURJTyBidXMsIGFuZCByZXNwb25kaW5nIHRvIFBIWSBJRCByZWFkcyB3aXRoIHRoZSBSVEw4MjYxIElELiBUaGUgZHJpdmVyIGFsc28gcGFyc2VzIGZpcm13YXJlLCB3aGljaCBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWNkMGFkMDAyM2U1NTM2MDI0ZGY0YWVhNmEzNmQ2NGNjMGQzY2VlNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDIxIDE1OjQ3OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMKaW5kZXggMTI2OTUxNzQxNDI4OGYuLjg3MDkyMDMxMWY5YTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMKQEAgLTM4NCw2ICYjNDM7Mzg0LDExOSBAQCBpbnQgZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgcmVzdGFydCkKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfY2hlY2tfYW5kX3Jlc3RhcnRfYW5lZyk7CiAKJiM0MzsvKioKJiM0MzsgKiBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0IC0gc29mdHdhcmUgcmVzZXQgdGhlIFBIWSB2aWEgQ2xhdXNlIDQ1IFBNQS9QTUQgY29udHJvbCByZWdpc3RlcgomIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdAomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7aW50IGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQsIHZhbDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5X3NldF9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19DVFJMMSwKJiM0MzsJCQkgICAgICAgTURJT19DVFJMMV9SRVNFVCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsCiYjNDM7CQkJCQkgTURJT19DVFJMMSwgdmFsLAomIzQzOwkJCQkJICEodmFsICZhbXA7IE1ESU9fQ1RSTDFfUkVTRVQpLAomIzQzOwkJCQkJIDUwMDAsIDYwMDAwMCwgdHJ1ZSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXQpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlIC0gQ29uZmlndXJlIE1hc3Rlci9TbGF2ZSBzZXR0aW5nIGZvciBDNDUgUEhZcwomIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdAomIzQzOyAqCiYjNDM7ICogRGVzY3JpcHRpb246IENvbmZpZ3VyZSB0aGUgZm9yY2VkIG9yIHByZWZlcnJlZCBNYXN0ZXIvU2xhdmUgcm9sZQomIzQzOyAqIDEwR0JBU0UtVCBjb250cm9sIHJlZ2lzdGVyIChNTUQgNywgUmVnaXN0ZXIgMHgwMDIwKSBhY2NvcmRpbmcgdG8KJiM0MzsgKiBJRUVFIDgwMi4zIHN0YW5kYXJkcy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogbmVnYXRpdmUgZXJybm8gY29kZSBvbiBmYWlsdXJlLCAwIGlmIE1hc3Rlci9TbGF2ZSBkaWRuJiMzOTt0IGNoYW5nZSwKJiM0MzsgKiBvciAxIGlmIE1hc3Rlci9TbGF2ZSBtb2RlcyBjaGFuZ2VkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXUxNiBjdGwgPSAwOwomIzQzOwomIzQzOwlzd2l0Y2ggKHBoeWRldi0mZ3Q7bWFzdGVyX3NsYXZlX3NldCkgewomIzQzOwljYXNlIE1BU1RFUl9TTEFWRV9DRkdfTUFTVEVSX1BSRUZFUlJFRDoKJiM0MzsJCWN0bCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19QT1JUX1RZUEU7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBNQVNURVJfU0xBVkVfQ0ZHX1NMQVZFX1BSRUZFUlJFRDoKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIE1BU1RFUl9TTEFWRV9DRkdfTUFTVEVSX0ZPUkNFOgomIzQzOwkJY3RsID0gTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRSB8IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIE1BU1RFUl9TTEFWRV9DRkdfU0xBVkVfRk9SQ0U6CiYjNDM7CQljdGwgPSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTUFTVEVSX1NMQVZFX0NGR19VTktOT1dOOgomIzQzOwljYXNlIE1BU1RFUl9TTEFWRV9DRkdfVU5TVVBQT1JURUQ6CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXBoeWRldl93YXJuKHBoeWRldiwgJiMzNDtVbnN1cHBvcnRlZCBNYXN0ZXIvU2xhdmUgbW9kZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfQ1RSTCwKJiM0MzsJCQkJICAgICAgTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRSB8CiYjNDM7CQkJCSAgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRSB8CiYjNDM7CQkJCSAgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19QT1JUX1RZUEUsIGN0bCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmUgLSByZWFkIG1hc3Rlci9zbGF2ZSBzdGF0dXMKJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKJiM0MzsgKgomIzQzOyAqIERlc2NyaXB0aW9uOiBSZWFkIHRoZSBNYXN0ZXIvU2xhdmUgY29uZmlndXJhdGlvbiBhbmQgc3RhdHVzCiYjNDM7ICogZnJvbSAxMEdCQVNFLVQgY29udHJvbC9zdGF0dXMgcmVnaXN0ZXJzIChNTUQgNywgUmVnIDB4MDAyMCBhbmQgMHgwMDIxKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCB2YWw7CiYjNDM7CiYjNDM7CXBoeWRldi0mZ3Q7bWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfVU5LTk9XTjsKJiM0MzsJcGh5ZGV2LSZndDttYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfVU5LTk9XTjsKJiM0MzsKJiM0MzsJdmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfQ1RSTCk7CiYjNDM7CWlmICh2YWwgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHZhbDsKJiM0MzsKJiM0MzsJaWYgKHZhbCAmYW1wOyBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFKSB7CiYjNDM7CQlpZiAodmFsICZhbXA7IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRSkKJiM0MzsJCQlwaHlkZXYtJmd0O21hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX01BU1RFUl9GT1JDRTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlwaHlkZXYtJmd0O21hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX1NMQVZFX0ZPUkNFOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKHZhbCAmYW1wOyBNRElPX0FOXzEwR0JUX0NUUkxfTVNfUE9SVF9UWVBFKQomIzQzOwkJCXBoeWRldi0mZ3Q7bWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfTUFTVEVSX1BSRUZFUlJFRDsKJiM0MzsJCWVsc2UKJiM0MzsJCQlwaHlkZXYtJmd0O21hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX1NMQVZFX1BSRUZFUlJFRDsKJiM0MzsJfQomIzQzOwomIzQzOwl2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9TVEFUKTsKJiM0MzsJaWYgKHZhbCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gdmFsOwomIzQzOwomIzQzOwlpZiAodmFsICZhbXA7IE1ESU9fQU5fMTBHQlRfU1RBVF9NU19GQVVMVCkgewomIzQzOwkJcGh5ZGV2LSZndDttYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfRVJSOwomIzQzOwl9IGVsc2UgaWYgKHBoeWRldi0mZ3Q7bGluaykgewomIzQzOwkJaWYgKHZhbCAmYW1wOyBNRElPX0FOXzEwR0JUX1NUQVRfTVNfUkVTKQomIzQzOwkJCXBoeWRldi0mZ3Q7bWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX01BU1RFUjsKJiM0MzsJCWVsc2UKJiM0MzsJCQlwaHlkZXYtJmd0O21hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9TTEFWRTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXBoeWRldi0mZ3Q7bWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX1VOS05PV047CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBnZW5waHlfYzQ1X2FuZWdfZG9uZSAtIHJldHVybiBhdXRvLW5lZ290aWF0aW9uIGNvbXBsZXRlIHN0YXR1cwogICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CkBAIC0xMTkyLDYgJiM0MzsxMzA1LDEwIEBAIGludCBnZW5waHlfYzQ1X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJCQlyZXQgPSBnZW5waHlfYzQ1X2Jhc2V0MV9yZWFkX3N0YXR1cyhwaHlkZXYpOwogCQkJaWYgKHJldCAmbHQ7IDApCiAJCQkJcmV0dXJuIHJldDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcmV0ID0gZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZShwaHlkZXYpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlyZXR1cm4gcmV0OwogCQl9CiAKIAkJcGh5X3Jlc29sdmVfYW5lZ19saW5rbW9kZShwaHlkZXYpOwpAQCAtMTIyNSw2ICYjNDM7MTM0MiwxNCBAQCBpbnQgZ2VucGh5X2M0NV9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogCWlmIChyZXQgJmd0OyAwKQogCQljaGFuZ2VkID0gdHJ1ZTsKIAomIzQzOwlpZiAoIWdlbnBoeV9jNDVfYmFzZXQxX2FibGUocGh5ZGV2KSkgewomIzQzOwkJcmV0ID0gZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmUocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlpZiAocmV0ICZndDsgMCkKJiM0MzsJCQljaGFuZ2VkID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwogCXJldHVybiBnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcocGh5ZGV2LCBjaGFuZ2VkKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfY29uZmlnX2FuZWcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMgYi9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYwppbmRleCBiNjVkMGY1ZmExYTAxNC4uMWMwYjljNDBhODFlNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jCkBAIC04LDcgJiM0Mzs4LDkgQEAKICAqIENvcHlyaWdodCAoYykgMjAwNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgogICovCiAjaW5jbHVkZSAmbHQ7bGludXgvYml0b3BzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NyYzMyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXRodG9vbF9uZXRsaW5rLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Zpcm13YXJlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9waHkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wbV93YWtlaXJxLmgmZ3Q7CkBAIC0xNDEsNiAmIzQzOzE0MywxMCBAQAogI2RlZmluZSBSVEw4MjExRl9QSFlTSUNBTF9BRERSX1dPUkQxCQkxNwogI2RlZmluZSBSVEw4MjExRl9QSFlTSUNBTF9BRERSX1dPUkQyCQkxOAogCiYjNDM7I2RlZmluZSBSVEw4MjYxWF9FWFRfQUREUl9SRUcJCQkweGE0MzYKJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0VYVF9EQVRBX1JFRwkJCTB4YTQzOAomIzQzOyNkZWZpbmUgUlRMXzgyNjFYX1NVQl9QSFlfSURfQUREUgkJMHg4MDFkCiYjNDM7CiAjZGVmaW5lIFJUTDgyMlhfVk5EMV9TRVJERVNfT1BUSU9OCQkJMHg2OTdhCiAjZGVmaW5lIFJUTDgyMlhfVk5EMV9TRVJERVNfT1BUSU9OX01PREVfTUFTSwkJR0VOTUFTSyg1LCAwKQogI2RlZmluZSBSVEw4MjJYX1ZORDFfU0VSREVTX09QVElPTl9NT0RFXzI1MDBCQVNFWF9TR01JSQkJMApAQCAtMjUxLDYgJiM0MzsyNTcsNzAgQEAKICNkZWZpbmUgUlRMXzgyMjFCX1ZNX0NHCQkJCTB4MDAxY2M4NGEKICNkZWZpbmUgUlRMXzgyNTFCCQkJCTB4MDAxY2M4NjIKICNkZWZpbmUgUlRMXzgyNjFDCQkJCTB4MDAxY2M4OTAKJiM0MzsjZGVmaW5lIFJUTF84MjYxQ19DRwkJCQkweDAwMWNjODk4CiYjNDM7CiYjNDM7I2RlZmluZSBSVEw4MjYxQ19DRV9NT0RFTAkJMHgwMAomIzQzOyNkZWZpbmUgUlRMODI2MURfTU9ERUwJCQkweDgxCiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfQVVUT05FR19FUlJPUglCSVQoMCkKJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9QQUdFX1JFQ1YJCUJJVCgyKQomIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORQlCSVQoMykKJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9MSU5LX0NIRwkJQklUKDQpCiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfUEhZX1JFR19BQ0NFU1MJQklUKDUpCiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfUE1FCQlCSVQoNykKJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9BTERQU19DSEcJCUJJVCg5KQomIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX0pBQkJFUgkJQklUKDEwKQomIzQzOwomIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX01BU0tfREVGQVVMVAkoUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8IFwKJiM0MzsJCQkJCSBSVEw4MjYxWF9JTlRfTElOS19DSEcgfCBcCiYjNDM7CQkJCQkgUlRMODI2MVhfSU5UX0FVVE9ORUdfRVJST1IgfCBcCiYjNDM7CQkJCQkgUlRMODI2MVhfSU5UX0pBQkJFUikKJiM0MzsKJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9NQVNLX0FMTAkJKFJUTDgyNjFYX0lOVF9BVVRPTkVHX0VSUk9SIHwgXAomIzQzOwkJCQkJIFJUTDgyNjFYX0lOVF9QQUdFX1JFQ1YgfCBcCiYjNDM7CQkJCQkgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8IFwKJiM0MzsJCQkJCSBSVEw4MjYxWF9JTlRfTElOS19DSEcgfCBcCiYjNDM7CQkJCQkgUlRMODI2MVhfSU5UX1BIWV9SRUdfQUNDRVNTIHwgXAomIzQzOwkJCQkJIFJUTDgyNjFYX0lOVF9QTUUgfCBcCiYjNDM7CQkJCQkgUlRMODI2MVhfSU5UX0FMRFBTX0NIRyB8IFwKJiM0MzsJCQkJCSBSVEw4MjYxWF9JTlRfSkFCQkVSKQomIzQzOwomIzQzOyNkZWZpbmUgRldfTUFJTl9NQUdJQwkJCTB4NTI1NDRDMzgKJiM0MzsjZGVmaW5lIEZXX1NVQl9NQUdJQ184MjYxQwkJMHgzMjM2MzE0MwomIzQzOyNkZWZpbmUgUlRMODI2MVhfUE9MTF9USU1FT1VUX01TCTEwMAomIzQzOyNkZWZpbmUgUlRMODI2MVhfTUFYX01NRF9ERVYJCTMxCiYjNDM7CiYjNDM7I2RlZmluZSBSVEw4MjYxQ19DRV9GV19OQU1FCSYjMzQ7cnRsX25pYy9ydGw4MjYxYy5iaW4mIzM0OwomIzQzO01PRFVMRV9GSVJNV0FSRShSVEw4MjYxQ19DRV9GV19OQU1FKTsKJiM0MzsKJiM0MztlbnVtIHJ0bDgyNjF4X2Z3X29wIHsKJiM0MzsJT1BfV1JJVEUgPSAweDAwLAkvKiBXcml0ZSAqLwomIzQzOwlPUF9QT0xMICA9IDB4MDIsCS8qIFBvbGxpbmcgKi8KJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgewomIzQzOwlfX2xlMzIgbWFpbl9tYWdpYzsJLyogTWFpbiBtYWdpYyBudW1iZXIgKi8KJiM0MzsJX19sZTMyIHN1Yl9tYWdpYzsJLyogU3ViIG1hZ2ljIG51bWJlciAqLwomIzQzOwlfX2xlMTYgdmVyc2lvbl9tYWpvcjsJLyogTWFqb3IgdmVyc2lvbiAqLwomIzQzOwlfX2xlMTYgdmVyc2lvbl9taW5vcjsJLyogTWlub3IgdmVyc2lvbiAqLwomIzQzOwlfX2xlMTYgbnVtX2VudHJpZXM7CS8qIE51bWJlciBvZiBlbnRyaWVzICovCiYjNDM7CV9fbGUxNiByZXNlcnZlZDsJLyogUmVzZXJ2ZWQgKi8KJiM0MzsJX19sZTMyIGNyYzMyOwkJLyogQ1JDMzIgY2hlY2tzdW0gKi8KJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydGw4MjYxeF9md19lbnRyeSB7CiYjNDM7CV9fdTggIHR5cGU7CQkvKiBPcGVyYXRpb24gdHlwZSAoT1BfKikgKi8KJiM0MzsJX191OCAgZGV2OwkJLyogTU1EIGRldmljZSAqLwomIzQzOwlfX2xlMTYgYWRkcjsJCS8qIFJlZ2lzdGVyIGFkZHJlc3MgKi8KJiM0MzsJX191OCAgbXNiOwkJLyogTVNCIGJpdCBwb3NpdGlvbiAqLwomIzQzOwlfX3U4ICBsc2I7CQkvKiBMU0IgYml0IHBvc2l0aW9uICovCiYjNDM7CV9fbGUxNiB2YWx1ZTsJCS8qIFZhbHVlIHRvIHdyaXRlL2NvbXBhcmUgKi8KJiM0MzsJX19sZTE2IHRpbWVvdXRfbXM7CS8qIFBvbGwgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKi8KJiM0MzsJX191OCAgcG9sbF9zZXQ7CQkvKiBQb2xsIHVudGlsIGVxdWFsICgxKSBvciBub3QgZXF1YWwgKDApICovCiYjNDM7CV9fdTggIHJlc2VydmVkOwkJLyogUmVzZXJ2ZWQgKi8KJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgRldfSEVBREVSX1NJWkUJCXNpemVvZihzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyKQomIzQzOyNkZWZpbmUgRldfRU5UUllfU0laRQkJc2l6ZW9mKHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSkKIAogLyogUlRMODIxMUUgYW5kIFJUTDgyMTFGIHN1cHBvcnQgdXAgdG8gdGhyZWUgTEVEcyAqLwogI2RlZmluZSBSVEw4MjExeF9MRURfQ09VTlQJCQkzCkBAIC0yNzAsNiAmIzQzOzM0MCwxMSBAQCBzdHJ1Y3QgcnRsODIxeF9wcml2IHsKIAl1MTYgaW5lcjsKIH07CiAKJiM0MztzdHJ1Y3QgcnRsODI2MXhfcHJpdiB7CiYjNDM7CWNvbnN0IGNoYXIgKmZ3X25hbWU7CiYjNDM7CWJvb2wgZndfbG9hZGVkOwomIzQzO307CiYjNDM7CiBzdGF0aWMgaW50IHJ0bDgyMXhfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CiAJcmV0dXJuIF9fcGh5X3JlYWQocGh5ZGV2LCBSVEw4MjF4X1BBR0VfU0VMRUNUKTsKQEAgLTMxMCw2ICYjNDM7Mzg1LDMyOSBAQCBzdGF0aWMgaW50IHJ0bDgyMXhfbW9kaWZ5X2V4dF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiBleHRfcGFnZSwKIAlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZHBhZ2UsIHJldCk7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXY7CiYjNDM7CXN0cnVjdCBydGw4MjYxeF9wcml2ICpwcml2OwomIzQzOwlpbnQgc3ViX3BoeV9pZCwgcmV0OwomIzQzOwomIzQzOwlwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcHJpdikKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlwaHlkZXYtJmd0O3ByaXYgPSBwcml2OwomIzQzOwomIzQzOwlyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyNjFYX0VYVF9BRERSX1JFRywKJiM0MzsJCQkgICAgUlRMXzgyNjFYX1NVQl9QSFlfSURfQUREUik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyNjFYX0VYVF9EQVRBX1JFRyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJc3ViX3BoeV9pZCA9IChyZXQgJmd0OyZndDsgOCkgJmFtcDsgMHhmZjsKJiM0MzsKJiM0MzsJc3dpdGNoIChzdWJfcGh5X2lkKSB7CiYjNDM7CWNhc2UgUlRMODI2MUNfQ0VfTU9ERUw6CiYjNDM7CQlwcml2LSZndDtmd19uYW1lID0gUlRMODI2MUNfQ0VfRldfTkFNRTsKJiM0MzsJCXBoeWRldl9pbmZvKHBoeWRldiwgJiMzNDtSVEw4MjYxQyBkZXRlY3RlZCAoc3ViX2lkIDB4JTAyeClcbiYjMzQ7LCBzdWJfcGh5X2lkKTsKJiM0MzsJCWJyZWFrOwomIzQzOwomIzQzOwljYXNlIFJUTDgyNjFEX01PREVMOgomIzQzOwkJcGh5ZGV2X2luZm8ocGh5ZGV2LCAmIzM0O1JUTDgyNjFEIGRldGVjdGVkIChzdWJfaWQgMHglMDJ4KVxuJiMzNDssIHN1Yl9waHlfaWQpOwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlwaHlkZXZfd2FybihwaHlkZXYsICYjMzQ7VW5rbm93biBzdWJfaWQgMHglMDJ4LCBkZWZhdWx0IGJlaGF2aW9yXG4mIzM0Oywgc3ViX3BoeV9pZCk7CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MjYxeF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9jNDVfcG1hX3JlYWRfYWJpbGl0aWVzKHBoeWRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwkvKgomIzQzOwkgKiBTdXBwbGVtZW50IE11bHRpLUdpZyBzcGVlZHMgdGhhdCBtYXkgbm90IGJlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQKJiM0MzsJICogUlRMODI2MVggc3VwcG9ydHMgMi41Ry81RyBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCAxMEcKJiM0MzsJICovCiYjNDM7CWxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULAomIzQzOwkJCSBwaHlkZXYtJmd0O3N1cHBvcnRlZCk7CiYjNDM7CWxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfNTAwMGJhc2VUX0Z1bGxfQklULAomIzQzOwkJCSBwaHlkZXYtJmd0O3N1cHBvcnRlZCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0LCB2YWwgPSAwOwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDthdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSB7CiYjNDM7CQlyZXQgPSBnZW5waHlfYzQ1X2FuZWdfZG9uZShwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQl2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwKJiM0MzsJCQkJCSAgIFJUTDgyMlhfVk5EMl9DMjJfUkVHKE1JSV9TVEFUMTAwMCkpOwomIzQzOwkJCWlmICh2YWwgJmx0OyAwKQomIzQzOwkJCQlyZXR1cm4gdmFsOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CW1paV9zdGF0MTAwMF9tb2RfbGlua21vZGVfbHBhX3QocGh5ZGV2LSZndDtscF9hZHZlcnRpc2luZywgdmFsKTsKJiM0MzsKJiM0MzsJcmV0ID0gZ2VucGh5X2M0NV9yZWFkX3N0YXR1cyhwaHlkZXYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciAqaGRyOwomIzQzOwl1MzIgbWFpbl9tYWdpYywgc3ViX21hZ2ljOwomIzQzOwl1MzIgY2FsY19jcmMsIGZpbGVfY3JjOwomIzQzOwlzaXplX3QgZGF0YV9sZW47CiYjNDM7CXUxNiBudW1fZW50cmllczsKJiM0MzsKJiM0MzsJaWYgKGZ3LSZndDtzaXplICZsdDsgRldfSEVBREVSX1NJWkUpIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O0Zpcm13YXJlIHRvbyBzbWFsbDogJXp1IGJ5dGVzXG4mIzM0OywgZnctJmd0O3NpemUpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaGRyID0gKGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgKilmdy0mZ3Q7ZGF0YTsKJiM0MzsKJiM0MzsJbWFpbl9tYWdpYyA9IGxlMzJfdG9fY3B1KGhkci0mZ3Q7bWFpbl9tYWdpYyk7CiYjNDM7CWlmIChtYWluX21hZ2ljICE9IEZXX01BSU5fTUFHSUMpIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O0ludmFsaWQgZmlybXdhcmUgbWFnaWM6IDB4JTA4eFxuJiMzNDssIG1haW5fbWFnaWMpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3ViX21hZ2ljID0gbGUzMl90b19jcHUoaGRyLSZndDtzdWJfbWFnaWMpOwomIzQzOwlpZiAoc3ViX21hZ2ljICE9IEZXX1NVQl9NQUdJQ184MjYxQykgewomIzQzOwkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7SW52YWxpZCBzdWIgbWFnaWM6IDB4JTA4eFxuJiMzNDssIHN1Yl9tYWdpYyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwludW1fZW50cmllcyA9IGxlMTZfdG9fY3B1KGhkci0mZ3Q7bnVtX2VudHJpZXMpOwomIzQzOwlkYXRhX2xlbiA9IG51bV9lbnRyaWVzICogRldfRU5UUllfU0laRTsKJiM0MzsKJiM0MzsJaWYgKGZ3LSZndDtzaXplICE9IHNpemVvZigqaGRyKSAmIzQzOyBkYXRhX2xlbikgewomIzQzOwkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7RmlybXdhcmUgc2l6ZSBtaXNtYXRjaFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY2FsY19jcmMgPSBjcmMzMih+MCwgZnctJmd0O2RhdGEgJiM0MzsgRldfSEVBREVSX1NJWkUsIGRhdGFfbGVuKSBeIH4wOwomIzQzOwlmaWxlX2NyYyA9IGxlMzJfdG9fY3B1KGhkci0mZ3Q7Y3JjMzIpOwomIzQzOwomIzQzOwlpZiAoY2FsY19jcmMgIT0gZmlsZV9jcmMpIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O0NSQzMyIG1pc21hdGNoOiBjYWxjdWxhdGVkPTB4JTA4eCBmaWxlPTB4JTA4eFxuJiMzNDssCiYjNDM7CQkJICAgY2FsY19jcmMsIGZpbGVfY3JjKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKJiM0MzsJCQkJICAgICBjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkgKmVudHJ5KQomIzQzO3sKJiM0MzsJdTE2IGFkZHIsIHZhbHVlLCB0aW1lb3V0X21zOwomIzQzOwl1OCBkZXYsIG1zYiwgbHNiLCBwb2xsX3NldDsKJiM0MzsJdTMyIGJpdHMsIGV4cGVjdF92YWw7CiYjNDM7CWludCByZXQsIHZhbDsKJiM0MzsKJiM0MzsJZGV2ID0gZW50cnktJmd0O2RldjsKJiM0MzsJYWRkciA9IGxlMTZfdG9fY3B1KGVudHJ5LSZndDthZGRyKTsKJiM0MzsJbXNiID0gZW50cnktJmd0O21zYjsKJiM0MzsJbHNiID0gZW50cnktJmd0O2xzYjsKJiM0MzsJdmFsdWUgPSBsZTE2X3RvX2NwdShlbnRyeS0mZ3Q7dmFsdWUpOwomIzQzOwl0aW1lb3V0X21zID0gbGUxNl90b19jcHUoZW50cnktJmd0O3RpbWVvdXRfbXMpOwomIzQzOwlwb2xsX3NldCA9IGVudHJ5LSZndDtwb2xsX3NldDsKJiM0MzsKJiM0MzsJaWYgKHRpbWVvdXRfbXMgPT0gMCkKJiM0MzsJCXRpbWVvdXRfbXMgPSBSVEw4MjYxWF9QT0xMX1RJTUVPVVRfTVM7CiYjNDM7CiYjNDM7CWlmIChkZXYgJmd0OyBSVEw4MjYxWF9NQVhfTU1EX0RFVikgewomIzQzOwkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7aW52YWxpZCBmaXJtd2FyZSBNTUQgZGV2aWNlOiBkZXY9JXVcbiYjMzQ7LCBkZXYpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG1zYiAmZ3Q7IDE1IHx8IGxzYiAmZ3Q7IG1zYikgewomIzQzOwkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7aW52YWxpZCBmaXJtd2FyZSBiaXRzOiBtc2I9JXUsIGxzYj0ldVxuJiMzNDssIG1zYiwgbHNiKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN3aXRjaCAoZW50cnktJmd0O3R5cGUpIHsKJiM0MzsJY2FzZSBPUF9XUklURToKJiM0MzsJCXJldCA9IHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgZGV2LCBhZGRyLAomIzQzOwkJCQkgICAgIEdFTk1BU0sobXNiLCBsc2IpLCAodmFsdWUgJmx0OyZsdDsgbHNiKSAmYW1wOyBHRU5NQVNLKG1zYiwgbHNiKSk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJY2FzZSBPUF9QT0xMOgomIzQzOwkJYml0cyA9IEdFTk1BU0sobXNiLCBsc2IpOwomIzQzOwkJZXhwZWN0X3ZhbCA9ICh2YWx1ZSAmbHQ7Jmx0OyBsc2IpICZhbXA7IGJpdHM7CiYjNDM7CiYjNDM7CQlpZiAocG9sbF9zZXQpCiYjNDM7CQkJcmV0ID0gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIGRldiwgYWRkciwgdmFsLAomIzQzOwkJCQkJCQkodmFsICZhbXA7IGJpdHMpID09IGV4cGVjdF92YWwsCiYjNDM7CQkJCQkJCTEwMDAsIHRpbWVvdXRfbXMgKiAxMDAwLCBmYWxzZSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJcmV0ID0gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIGRldiwgYWRkciwgdmFsLAomIzQzOwkJCQkJCQkodmFsICZhbXA7IGJpdHMpICE9IGV4cGVjdF92YWwsCiYjNDM7CQkJCQkJCTEwMDAsIHRpbWVvdXRfbXMgKiAxMDAwLCBmYWxzZSk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X2Z3X2xvYWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydGw4MjYxeF9wcml2ICpwcml2ID0gcGh5ZGV2LSZndDtwcml2OwomIzQzOwljb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkgKmVudHJ5OwomIzQzOwljb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICpoZHI7CiYjNDM7CWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CiYjNDM7CWludCByZXQsIGk7CiYjNDM7CiYjNDM7CWlmICghcHJpdi0mZ3Q7ZndfbmFtZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZhbXA7ZncsIHByaXYtJmd0O2Z3X25hbWUsICZhbXA7cGh5ZGV2LSZndDttZGlvLmRldik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O0ZhaWxlZCB0byBsb2FkIGZpcm13YXJlICVzOiAlZFxuJiMzNDssIHByaXYtJmd0O2Z3X25hbWUsIHJldCk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZShwaHlkZXYsIGZ3KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gcmVsZWFzZV9mdzsKJiM0MzsKJiM0MzsJaGRyID0gKGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgKilmdy0mZ3Q7ZGF0YTsKJiM0MzsKJiM0MzsJZW50cnkgPSAoY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2VudHJ5ICopKGZ3LSZndDtkYXRhICYjNDM7IEZXX0hFQURFUl9TSVpFKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGxlMTZfdG9fY3B1KGhkci0mZ3Q7bnVtX2VudHJpZXMpOyBpJiM0MzsmIzQzOywgZW50cnkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyZXQgPSBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5KHBoeWRldiwgZW50cnkpOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O0VudHJ5ICVkIGZhaWxlZDogJWRcbiYjMzQ7LCBpLCByZXQpOwomIzQzOwkJCWdvdG8gcmVsZWFzZV9mdzsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlwcml2LSZndDtmd19sb2FkZWQgPSB0cnVlOwomIzQzOwomIzQzO3JlbGVhc2VfZnc6CiYjNDM7CXJlbGVhc2VfZmlybXdhcmUoZncpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X2NvbmZpZ19pbnRyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDtpbnRlcnJ1cHRzID09IFBIWV9JTlRFUlJVUFRfRU5BQkxFRCkgewomIzQzOwkJcmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5TUik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJcmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lORVIsCiYjNDM7CQkJCSAgICBSVEw4MjYxWF9JTlRfTUFTS19ERUZBVUxUKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5FUiwgMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJcmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5TUik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IGlycV9zdGF0dXM7CiYjNDM7CiYjNDM7CWlycV9zdGF0dXMgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODIyMUJfVk5EMl9JTlNSKTsKJiM0MzsJaWYgKGlycV9zdGF0dXMgJmx0OyAwKSB7CiYjNDM7CQlwaHlfZXJyb3IocGh5ZGV2KTsKJiM0MzsJCXJldHVybiBJUlFfTk9ORTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIShpcnFfc3RhdHVzICZhbXA7IFJUTDgyNjFYX0lOVF9NQVNLX0FMTCkpCiYjNDM7CQlyZXR1cm4gSVJRX05PTkU7CiYjNDM7CiYjNDM7CWlmIChpcnFfc3RhdHVzICZhbXA7IChSVEw4MjYxWF9JTlRfTElOS19DSEcgfCBSVEw4MjYxWF9JTlRfQVVUT05FR19ET05FIHwKJiM0MzsJICAgIFJUTDgyNjFYX0lOVF9BVVRPTkVHX0VSUk9SIHwgUlRMODI2MVhfSU5UX0pBQkJFUikpCiYjNDM7CQlwaHlfdHJpZ2dlcl9tYWNoaW5lKHBoeWRldik7CiYjNDM7CiYjNDM7CXJldHVybiBJUlFfSEFORExFRDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MjYxeF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJdTE2IGFkdl8xZyA9IDA7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9jNDVfY29uZmlnX2FuZWcocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDthdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMGJhc2VUX0Z1bGxfQklULAomIzQzOwkJCSAgICAgIHBoeWRldi0mZ3Q7YWR2ZXJ0aXNpbmcpKQomIzQzOwkJYWR2XzFnID0gQURWRVJUSVNFXzEwMDBGVUxMOwomIzQzOwlpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMGJhc2VUX0hhbGZfQklULAomIzQzOwkJCSAgICAgIHBoeWRldi0mZ3Q7YWR2ZXJ0aXNpbmcpKQomIzQzOwkJYWR2XzFnIHw9IEFEVkVSVElTRV8xMDAwSEFMRjsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLAomIzQzOwkJCQkgICAgIFJUTDgyMlhfVk5EMl9DMjJfUkVHKE1JSV9DVFJMMTAwMCksCiYjNDM7CQkJCSAgICAgQURWRVJUSVNFXzEwMDBGVUxMIHwgQURWRVJUSVNFXzEwMDBIQUxGLAomIzQzOwkJCQkgICAgIGFkdl8xZyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJaWYgKHJldCAmZ3Q7IDApCiYjNDM7CQlyZXR1cm4gZ2VucGh5X2M0NV9yZXN0YXJ0X2FuZWcocGh5ZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydGw4MjYxeF9wcml2ICpwcml2ID0gcGh5ZGV2LSZndDtwcml2OwomIzQzOwomIzQzOwkvKiBUaGUgZmlybXdhcmUgcGFyYW1ldGVycyBhcmUgcHJlc2VydmVkIGFjcm9zcyBJRUVFIHNvZnQgcmVzZXRzIGFuZAomIzQzOwkgKiBzdXNwZW5kL3Jlc3VtZSBjeWNsZXMuIFJlbG9hZGluZyBpcyBvbmx5IG5lY2Vzc2FyeSBhZnRlciBhIHBvd2VyCiYjNDM7CSAqIGN5Y2xlIG9yIGhhcmQgcmVzZXQuCiYjNDM7CSAqLwomIzQzOwlpZiAocHJpdi0mZ3Q7ZndfbmFtZSAmYW1wOyZhbXA7ICFwcml2LSZndDtmd19sb2FkZWQpCiYjNDM7CQlyZXR1cm4gcnRsODI2MXhfZndfbG9hZChwaHlkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHJ0bDgyMXhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXY7CkBAIC0zMDAyLDYgJiM0MzszNDAwLDE5IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciByZWFsdGVrX2RydnNbXSA9IHsKIAkJLnJlc3VtZQkJPSBnZW5waHlfcmVzdW1lLAogCQkucmVhZF9tbWQJPSBnZW5waHlfcmVhZF9tbWRfdW5zdXBwb3J0ZWQsCiAJCS53cml0ZV9tbWQJPSBnZW5waHlfd3JpdGVfbW1kX3Vuc3VwcG9ydGVkLAomIzQzOwl9LCB7CiYjNDM7CQlQSFlfSURfTUFUQ0hfRVhBQ1QoUlRMXzgyNjFDX0NHKSwKJiM0MzsJCS5uYW1lCQkJPSAmIzM0O1JlYWx0ZWsgUlRMODI2MSAxMEdicHMgUEhZJiMzNDssCiYjNDM7CQkucHJvYmUJCQk9IHJ0bDgyNjF4X3Byb2JlLAomIzQzOwkJLmNvbmZpZ19pbml0CQk9IHJ0bDgyNjF4X2NvbmZpZ19pbml0LAomIzQzOwkJLmdldF9mZWF0dXJlcwkJPSBydGw4MjYxeF9nZXRfZmVhdHVyZXMsCiYjNDM7CQkuY29uZmlnX2FuZWcJCT0gcnRsODI2MXhfY29uZmlnX2FuZWcsCiYjNDM7CQkucmVhZF9zdGF0dXMJCT0gcnRsODI2MXhfcmVhZF9zdGF0dXMsCiYjNDM7CQkuY29uZmlnX2ludHIJCT0gcnRsODI2MXhfY29uZmlnX2ludHIsCiYjNDM7CQkuaGFuZGxlX2ludGVycnVwdAk9IHJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHQsCiYjNDM7CQkuc29mdF9yZXNldAkJPSBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0LAomIzQzOwkJLnN1c3BlbmQJCT0gZ2VucGh5X2M0NV9wbWFfc3VzcGVuZCwKJiM0MzsJCS5yZXN1bWUJCQk9IGdlbnBoeV9jNDVfcG1hX3Jlc3VtZSwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmgKaW5kZXggYmVmZjFkNmZjYzdjZGEuLjU3Y2Y5YWMzNTI0ZDIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGh5LmgKQEAgLTIzMTQsNiAmIzQzOzIzMTQsNyBAQCBpbnQgZ2VucGh5X2MzN19yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sICpjaGFuZ2VkKTsKIC8qIENsYXVzZSA0NSBQSFkgKi8KIGludCBnZW5waHlfYzQ1X3Jlc3RhcnRfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIGludCBnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCByZXN0YXJ0KTsKJiM0MztpbnQgZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIGludCBnZW5waHlfYzQ1X2FuZWdfZG9uZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIGludCBnZW5waHlfYzQ1X3JlYWRfbGluayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIGludCBnZW5waHlfYzQ1X3JlYWRfbHBhKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmgKaW5kZXggYjI1NDFjOTQ4ZmMxZWIuLjA2ZjRiYzNjMjBjNzE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmgKQEAgLTMzMiw4ICYjNDM7MzMyLDEzIEBACiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHCTB4MDA4MAkvKiBBZHZlcnRpc2UgMi41R0JBU0UtVCAqLwogI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfQURWNUcJMHgwMTAwCS8qIEFkdmVydGlzZSA1R0JBU0UtVCAqLwogI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMTBHCTB4MTAwMAkvKiBBZHZlcnRpc2UgMTBHQkFTRS1UICovCiYjNDM7I2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFCTB4ODAwMAkvKiBNYXN0ZXIvc2xhdmUgbWFudWFsIGNvbmZpZyBlbmFibGUgKi8KJiM0MzsjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRQkweDQwMDAJLyogTWFzdGVyL3NsYXZlIGNvbmZpZyB2YWx1ZSAoMT1NYXN0ZXIpICovCiYjNDM7I2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfUE9SVF9UWVBFCTB4MjAwMAkvKiBNYXN0ZXIgUHJlZmVycmVkIFR5cGUgKi8KIAogLyogQU4gMTBHQkFTRS1UIHN0YXR1cyByZWdpc3Rlci4gKi8KJiM0MzsjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9NU19GQVVMVAkweDgwMDAJLyogTWFzdGVyL3NsYXZlIGZhdWx0ICovCiYjNDM7I2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTVNfUkVTCTB4NDAwMAkvKiBNYXN0ZXIvc2xhdmUgcmVzb2x1dGlvbiAoMT1NYXN0ZXIpICovCiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9MUDJfNUcJMHgwMDIwICAvKiBMUCBpcyAyLjVHQlQgY2FwYWJsZSAqLwogI2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTFA1RwkJMHgwMDQwICAvKiBMUCBpcyA1R0JUIGNhcGFibGUgKi8KICNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX0xQVFJSCTB4MDIwMAkvKiBMUCB0cmFpbmluZyByZXNldCByZXEuICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzY4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQYXRjaCBSZWFjaGFiaWxpdHkgaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBtb2RpZnlpbmcgYGRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNgIGFuZCBgZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNgLiBJdCYjMzk7cyBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFJlYWx0ZWsgUlRMODI2MSAxMEdicHMgUEhZIGFuZCBzb21lIGdlbmVyaWMgQ2xhdXNlIDQ1IE1hc3Rlci9TbGF2ZSBjb25maWd1cmF0aW9uLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGhvdyBlYXNpbHkgY2FuIEkgdHJpZ2dlciB0aGlzIGNvZGUgcGF0aCBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcsIGxpa2UgUUVNVT8KCkkga25vdyBQSFkgZHJpdmVycyBhcmUgdHlwaWNhbGx5IGFzc29jaWF0ZWQgd2l0aCBFdGhlcm5ldCBkcml2ZXJzLiBRRU1VIGhhcyB2YXJpb3VzIGVtdWxhdGVkIG5ldHdvcmsgZGV2aWNlcyBsaWtlIGUxMDAwLCB2aXJ0aW8tbmV0LCBldGMuIFRoZSByZWFsIHF1ZXN0aW9uIGlzLCBkbyAqYW55KiBvZiB0aG9zZSBRRU1VLWVtdWxhdGVkIGRldmljZXMgdXNlIHRoZSBQSFkgc3Vic3lzdGVtLCBhbmQgc3BlY2lmaWNhbGx5LCB0aGUgUmVhbHRlayBkcml2ZXIgb3IgQ2xhdXNlIDQ1IFBIWXM/IFRoYXQmIzM5O3MgdGhlIGtleS4KClBIWXMgdXN1YWxseSBob29rIHVwIHRvIE1ESU8gYnVzZXMuIEluIFFFTVUsIGNhbiB3ZSBlbXVsYXRlIGFuIE1ESU8gYnVzIHNvbWVob3c/IE1heWJlIHRocm91Z2ggY2VydGFpbiBuZXR3b3JrIGRyaXZlcnMgb3IgZHVtbXkgTURJTyBkZXZpY2VzPyBIbW0sIEkga25vdyBzeXprYWxsZXIgaGFzIGEgdmlydHVhbCBNRElPIGJ1cy4uLiBvciBjb3VsZCB3ZSB1c2UgYSBkcml2ZXIgbGlrZSBgbWFjYmAgb3IgYGZlY2AsIGFzc3VtaW5nIHRob3NlIGFyZSBlbXVsYXRlZD8gVGhlIHRyaWNreSBwYXJ0IGlzLCBob3cgZG8geW91IGVhc2lseSAqdHJpZ2dlciogc3BlY2lmaWMgUEhZIGRyaXZlcnMgdW5sZXNzIHlvdSBjYW4gZGlyZWN0bHkgaW5zdGFudGlhdGUgdGhlbSB2aWEgTURJTz8KCkhvbGQgb24uLi4gSSYjMzk7bSB3cmFja2luZyBteSBicmFpbiBmb3Igc3l6a2FsbGVyIHByaW1pdGl2ZXMuLi4gRG9lcyBpdCBoYXZlIGFueXRoaW5nIGxpa2UgYHN5el9nZW5ldGxpbmtfLi4uYCBvciBzb21ldGhpbmcgd2l0aCBgdHVuYD8gTm8sIHRoYXQmIzM5O3Mgbm90IGl0LiBQSFkgZGV2aWNlcyBhcmUgYWxtb3N0IGFsd2F5cyBwcm9iZWQgdmlhIE1ESU8uIFNvLCBjYW4gc3l6a2FsbGVyICppbml0aWF0ZSogTURJTyBidXMgcHJvYmluZz8KCkxldCYjMzk7cyBzZWUuLi4gRG9lcyBzeXprYWxsZXIgb2ZmZXIgYW55IGBzeXpfbWRpb18uLi5gIGNhbGxzPyBBbnkgcHNldWRvLXN5c2NhbGxzIGZvciBNRElPPyBPciwgY2FuIHdlIGV2ZW4gaW5zdGFudGlhdGUgUEhZcyBkaXJlY3RseT8gQWghIE1heWJlIGBuZXRsaW5rYCBjb3VsZCB0YWxrIHRvIGBldGh0b29sYCB3aGljaCBtaWdodCAqcmVhY2gqIHRoZSBQSFlzLCBidXQgd2UmIzM5O2Qgc3RpbGwgbmVlZCBhIFBIWSBkZXZpY2UgdG8gKmV4aXN0KiBpbiB0aGUgZmlyc3QgcGxhY2UuCgpEb2VzIFFFTVUgZXZlbiAqZW11bGF0ZSogdGhlIFJUTDgyNjE/IFByb2JhYmx5IG5vdC4gU28sIHRoZSBiaWdnZXIgcXVlc3Rpb24gaXMsIGNhbiB3ZSBpbnN0YW50aWF0ZSBhIFBIWSBkZXZpY2UgdmlhICpzb21lKiBraW5kIG9mIHNvZnR3YXJlIGludGVyZmFjZT8gSSBuZWVkIHRvIGZpbmQgYSB3YXkgdG8gZ2V0IGEgUEhZIGluc3RhbmNlIGFjdGl2ZS4KCk9rYXksIGxldCYjMzk7cyBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UgZm9yICYjMzQ7bWRpbyYjMzQ7IGFuZCAmIzM0O3BoeSYjMzQ7LiBTZWUgaWYgdGhlcmUmIzM5O3MgYSB2aXJ0dWFsIE1ESU8gYnVzIG9yIHNvbWV0aGluZyBzaW1pbGFyIHRoYXQgd2UgY2FuIGxldmVyYWdlLiBBaGEhIEhlcmUmIzM5O3MgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLW1vY2t1cC5jYCBhbmQgYGRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuY2AuIEludGVyZXN0aW5nLiBNYXliZSB0aGVzZSBhcmUgdGhlIGtleXMgdG8gaW5zdGFudGlhdGluZyBhIFBIWSBkZXZpY2UuIE5vdywgSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHdlIGNhbiBhY3R1YWxseSAqaW5zdGFudGlhdGUqIGEgUEhZIGRldmljZSB1c2luZyB0aGVzZS4gVGhpcyBjb3VsZCBiZSBteSBwYXRoIHRvIHRlc3RpbmcgdGhpcyBwYXRjaCBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDQ3MjcgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT00PWxpYnBoeS15XHRcdFx0Oj0gcGh5Lm8gcGh5LWM0NS5vIHBoeS1jb3JlLm8gcGh5X2RldmljZS5vIFxcXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtNS1cdFx0XHRcdCAgIGxpbmttb2RlLm8gcGh5X2xpbmtfdG9wb2xvZ3kubyBcXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjY6XHRcdFx0XHQgICBwaHlfY2Fwcy5vIG1kaW9fYnVzX3Byb3ZpZGVyLm8gcGh5X3BvcnQubyBcXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjc6XHRcdFx0XHQgICBtZGlvX2RldmljZS5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtOC1cbi0tXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MTY9bGlicGh5LSQoQ09ORklHX09QRU5fQUxMSUFOQ0VfSEVMUEVSUykgJiM0Mzs9IG9wZW5fYWxsaWFuY2VfaGVscGVycy5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMTctXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX1BIWUxJQilcdFx0JiM0Mzs9IG1kaW9fYnVzLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0xOS1vYmotJChDT05GSUdfUEhZTElOSylcdFx0JiM0Mzs9IHBoeWxpbmsub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlPTIwPW9iai0kKENPTkZJR19QSFlMSUIpXHRcdCYjNDM7PSBsaWJwaHkub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjIxOm9iai0kKENPTkZJR19QSFlMSUIpXHRcdCYjNDM7PSBtZGlvX2RldnJlcy5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMjItb2JqLSQoQ09ORklHX1BIWV9QQUNLQUdFKVx0JiM0Mzs9IHBoeV9wYWNrYWdlLm9cbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jPTI1Mj1zdGF0aWMgdTMyIGFkaW5fZ2V0X3JlZ192YWx1ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtMjU2LXtcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6MjU3Olx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy0yNTgtXHR1MzIgdmFsO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM9NTAxPXN0YXRpYyBpbnQgYWRpbl9jb25maWdfY2xrX291dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy01MDIte1xuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo1MDM6XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTUwNC1cdGNvbnN0IGNoYXIgKnZhbCA9IE5VTEw7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYz01Mjg9c3RhdGljIGludCBhZGluX2NvbmZpZ196cHRtMTAwKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTUyOS17XG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjUzMDpcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNTMxLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM9NjQ4PXN0YXRpYyBpbnQgYWRpbl9yZWFkX21tZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgZGV2YWQsIHUxNiByZWdudW0pXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTY0OS17XG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjY1MDpcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXHUwMDNlbWRpby5idXM7XG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjY1MTpcdGludCBwaHlfYWRkciA9IHBoeWRldi1cdTAwM2VtZGlvLmFkZHI7XG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTY1Mi1cdGludCBhZGluX3JlZ251bTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTY1OC1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6NjU5Olx0ZXJyID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5X2FkZHIsIEFESU4xMzAwX01JSV9FWFRfUkVHX1BUUixcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNjYwLVx0XHRcdCAgICAgIGFkaW5fcmVnbnVtKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTY2My1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6NjY0Olx0cmV0dXJuIF9fbWRpb2J1c19yZWFkKGJ1cywgcGh5X2FkZHIsIEFESU4xMzAwX01JSV9FWFRfUkVHX0RBVEEpO1xuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy02NjUtfVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM9NjY3PXN0YXRpYyBpbnQgYWRpbl93cml0ZV9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldmFkLCB1MTYgcmVnbnVtLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNjY5LXtcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6NjcwOlx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cztcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6NjcxOlx0aW50IHBoeV9hZGRyID0gcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcjtcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNjcyLVx0aW50IGFkaW5fcmVnbnVtO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNjc4LVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo2Nzk6XHRlcnIgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBwaHlfYWRkciwgQURJTjEzMDBfTUlJX0VYVF9SRUdfUFRSLFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy02ODAtXHRcdFx0ICAgICAgYWRpbl9yZWdudW0pO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNjgzLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo2ODQ6XHRyZXR1cm4gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5X2FkZHIsIEFESU4xMzAwX01JSV9FWFRfUkVHX0RBVEEsIHZhbCk7XG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTY4NS19XG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYz04OTA9c3RhdGljIGludCBhZGluX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTg5MS17XG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjg5MjpcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtODkzLVx0c3RydWN0IGFkaW5fcHJpdiAqcHJpdjtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jPTEwNTk9bW9kdWxlX3BoeV9kcml2ZXIoYWRpbl9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy0xMDYwLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzoxMDYxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgYWRpbl90YmxbXSA9IHtcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtMTA2Mi1cdHsgUEhZX0lEX01BVENIX01PREVMKFBIWV9JRF9BRElOMTIwMCkgfSxcbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTEwNjYtXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjEwNjc6TU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBhZGluX3RibCk7XG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTEwNjgtTU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0FuYWxvZyBEZXZpY2VzIEluZHVzdHJpYWwgRXRoZXJuZXQgUEhZIGRyaXZlclwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmM9MjQ0PXN0YXRpYyBpbnQgYWRpbl9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0yNDYtXHRzdHJ1Y3QgYWRpbl9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYzoyNDc6XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0yNDgtXHRpbnQgcmV0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jPTMwOT1zdGF0aWMgaW50IGFkaW5fcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTMxMC17XG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYzozMTE6XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0zMTItXHRzdHJ1Y3QgYWRpbl9wcml2ICpwcml2O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jPTM0Mz1tb2R1bGVfcGh5X2RyaXZlcihhZGluX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0zNDQtXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYzozNDU6c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhZGluX3RibFtdID0ge1xuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMzQ2LVx0eyBQSFlfSURfTUFUQ0hfTU9ERUwoUEhZX0lEX0FESU4xMTAwKSB9LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTM1MS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jOjM1MjpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFkaW5fdGJsKTtcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTM1My1NT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7QW5hbG9nIERldmljZXMgSW5kdXN0cmlhbCBFdGhlcm5ldCBUMUwgUEhZIGRyaXZlclwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYz02NTI9c3RhdGljIGlycXJldHVybl90IGFuODgwMXJfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtNjY3LVx0aWYgKGlycV9zdGF0dXMgXHUwMDI2IEFOODgwMV9JUlFfV0FLRV9NQUdJQ1BLVCkge1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzo2Njg6XHRcdHBtX3dha2V1cF9ldmVudChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIDApO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy02NjktXHRcdGlycV9oYW5kbGVkID0gdHJ1ZTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jPTY4MD1zdGF0aWMgdm9pZCBhbjg4MDFyX2dldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTY4OC1cdCAqL1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzo2ODk6XHRpZiAoIWRldmljZV9jYW5fd2FrZXVwKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldikpIHtcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtNjkwLVx0XHR3b2wtXHUwMDNlc3VwcG9ydGVkID0gMDtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jPTcwOD1zdGF0aWMgaW50IGFuODgwMXJfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtNzE2LVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzo3MTc6XHRpZiAoIWRldmljZV9jYW5fd2FrZXVwKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldikpXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTcxOC1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtNzc4LVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzo3Nzk6XHRyZXR1cm4gZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldixcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtNzgwLVx0XHRcdFx0XHRwcml2LVx1MDAzZXdha2VfbWFnaWNfZW5hYmxlZCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYz03ODM9c3RhdGljIGludCBhbjg4MDFyX29mX2luaXRfbGVkcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCAqbGVkX2NmZylcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtNzg0LXtcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM6Nzg1Olx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy03ODYtXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LVx1MDAzZW9mX25vZGU7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYz0xMDM0PXN0YXRpYyBpbnQgYW44ODAxcl9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0xMDM1LXtcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM6MTAzNjpcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtMTAzNy1cdHN0cnVjdCBhbjg4MDFyX3ByaXYgKnByaXY7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYz0xMDYwPXN0YXRpYyBpbnQgYW44ODAxcl9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0xMDY3LVx0ICovXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jOjEwNjg6XHRpZiAoZGV2aWNlX21heV93YWtldXAoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KSkge1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0xMDY5LVx0XHRwcml2LVx1MDAzZXdha2VfbG5rY2hnX2VuYWJsZWQgPSBmYWxzZTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jPTEwOTE9c3RhdGljIGludCBhbjg4MDFyX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtMTEwMi1cdCAqL1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzoxMTAzOlx0aWYgKGRldmljZV9tYXlfd2FrZXVwKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldikpIHtcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtMTEwNC1cdFx0cHJpdi1cdTAwM2V3YWtlX2xua2NoZ19lbmFibGVkID0gdHJ1ZTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jPTExNDY9bW9kdWxlX3BoeV9kcml2ZXIoYWlyb2hhX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTExNDctXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jOjExNDg6c3RhdGljIHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhbjg4MDFfdGJsW10gPSB7XG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTExNDktXHR7IFBIWV9JRF9NQVRDSF9NT0RFTChBTjg4MDFSX1BIWV9JRCkgfSxcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTExNTEtfTtcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM6MTE1MjpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFuODgwMV90YmwpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0xMTUzLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTE5Nz1zdHJ1Y3QgZW44ODExaF9wcml2IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yMDMtXHR1bnNpZ25lZCBpbnRcdFx0Y2tvX2lzX2VuYWJsZWQ7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoyMDQ6XHRzdHJ1Y3QgbWRpb19kZXZpY2VcdCpwYnVzZGV2O1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMjA1LX07XG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9MjM5PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGVuODgxMWhfbGVkX3RyaWcgPSBCSVQoVFJJR0dFUl9ORVRERVZfRlVMTF9EVVBMRVgpIHxcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yNDctXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoyNDg6c3RhdGljIGludCBfX2Fpcl9wYnVzX3JlZ193cml0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yNDktXHRcdFx0XHR1MzIgcGJ1c19yZWcsIHUzMiBwYnVzX2RhdGEpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMjUyLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MjUzOlx0cmV0ID0gX19tZGlvYnVzX3dyaXRlKG1kaW9kZXYtXHUwMDNlYnVzLCBtZGlvZGV2LVx1MDAzZWFkZHIsIEFJUl9FWFRfUEFHRV9BQ0NFU1MsXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yNTQtXHRcdFx0ICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX3JlZykpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTI1Ny1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjI1ODpcdHJldCA9IF9fbWRpb2J1c193cml0ZShtZGlvZGV2LVx1MDAzZWJ1cywgbWRpb2Rldi1cdTAwM2VhZGRyLCBBSVJfUEJVU19BRERSX0hJR0gsXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yNTktXHRcdFx0ICAgICAgRklFTERfR0VUKEFJUl9QQlVTX1JFR19BRERSX0hJR0hfTUFTSywgcGJ1c19yZWcpKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yNjItXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoyNjM6XHRyZXQgPSBfX21kaW9idXNfd3JpdGUobWRpb2Rldi1cdTAwM2VidXMsIG1kaW9kZXYtXHUwMDNlYWRkcixcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTI2NC1cdFx0XHQgICAgICBGSUVMRF9HRVQoQUlSX1BCVVNfUkVHX0FERFJfTE9XX01BU0ssIHBidXNfcmVnKSxcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yNjgtXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoyNjk6XHRyZXR1cm4gX19tZGlvYnVzX3dyaXRlKG1kaW9kZXYtXHUwMDNlYnVzLCBtZGlvZGV2LVx1MDAzZWFkZHIsIEFJUl9QQlVTX0RBVEFfSElHSCxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTI3MC1cdFx0XHQgICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz0zMjc9c3RhdGljIGludCBlbjg4MTFoX3dhaXRfbWN1X3JlYWR5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMzM1LVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MzM2Olx0LyogQmVjYXVzZSBvZiBtZGlvLWxvY2ssIG1heSBoYXZlIHRvIHdhaXQgZm9yIG11bHRpcGxlIGxvYWRzICovXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0zMzctXHRyZXQgPSBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTURJT19NTURfVkVORDEsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9Mzk3PXN0YXRpYyBpbnQgYW44ODExaGJfbG9hZF9maWxlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMzk5LXtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjQwMDpcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTQwMS1cdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9NDEzPXN0YXRpYyBpbnQgYW44ODExaGJfbWN1X2Fzc2VydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTQxNy1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjQxODpcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy00MTktXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNDMyLXVubG9jazpcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjQzMzpcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTQzNC1cdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9NDM3PXN0YXRpYyBpbnQgYW44ODExaGJfbWN1X2RlYXNzZXJ0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNDQxLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NDQyOlx0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTQ0My1cbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy00NTctdW5sb2NrOlxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NDU4Olx0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNDU5LVx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz01MDI9c3RhdGljIGludCBlbjg4MTFoX2xvYWRfZmlybXdhcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTUwMy17XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzo1MDQ6XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MDUtXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3MSwgKmZ3Mjtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz0xMDc0PXN0YXRpYyBpbnQgYW44ODExaGJfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTEwNzUte1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTA3NjpcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldjtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTEwNzctXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTEwNzktXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMDgwOlx0cHJpdiA9IGRldm1fa3phbGxvYyhcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIHNpemVvZihzdHJ1Y3QgZW44ODExaF9wcml2KSxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTEwODEtXHRcdFx0ICAgIEdGUF9LRVJORUwpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTEwOTItXHQgKi9cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjEwOTM6XHRtZGlvZGV2ID0gbWRpb19kZXZpY2VfY3JlYXRlKHBoeWRldi1cdTAwM2VtZGlvLmJ1cyxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjEwOTQ6XHRcdFx0XHQgICAgIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIgJiM0MzsgRU44ODExSF9QQlVTX0FERFJfT0ZGUyk7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMDk1Olx0aWYgKElTX0VSUihtZGlvZGV2KSlcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjEwOTY6XHRcdHJldHVybiBQVFJfRVJSKG1kaW9kZXYpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTA5Ny1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjEwOTg6XHRyZXQgPSBtZGlvX2RldmljZV9yZWdpc3RlcihtZGlvZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTEwOTktXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTExMDEtXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMTAyOlx0cHJpdi1cdTAwM2VwYnVzZGV2ID0gbWRpb2RldjtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTExMDMtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTEyMy1cdC8qIENvLUNsb2NrIE91dHB1dCAqL1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTEyNDpcdHJldCA9IGFuODgxMWhiX2Nsa19wcm92aWRlcl9zZXR1cChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIFx1MDAyNnByaXYtXHUwMDNlaHcpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTEyNS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTEzNy1lcnJfZGV2X2NyZWF0ZTpcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjExMzg6XHRtZGlvX2RldmljZV9yZW1vdmUobWRpb2Rldik7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMTM5LVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTE0MC1lcnJfZGV2X2ZyZWU6XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMTQxOlx0bWRpb19kZXZpY2VfZnJlZShtZGlvZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTExNDItXHRyZXR1cm4gcmV0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTExNDU9c3RhdGljIGludCBlbjg4MTFoX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTE0OS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjExNTA6XHRwcml2ID0gZGV2bV9remFsbG9jKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldiwgc2l6ZW9mKHN0cnVjdCBlbjg4MTFoX3ByaXYpLFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTE1MS1cdFx0XHQgICAgR0ZQX0tFUk5FTCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTE3MS1cdC8qIENvLUNsb2NrIE91dHB1dCAqL1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTE3MjpcdHJldCA9IGVuODgxMWhfY2xrX3Byb3ZpZGVyX3NldHVwKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldiwgXHUwMDI2cHJpdi1cdTAwM2Vodyk7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMTczLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz0xMTg2PXN0YXRpYyBpbnQgYW44ODExaGJfY29uZmlnX3NlcmRlc19wb2xhcml0eShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTE4Ny17XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMTg4Olx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTE4OS1cdHUzMiBwYnVzX3ZhbHVlID0gMDtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz0xMjE3PXN0YXRpYyBpbnQgZW44ODExaF9jb25maWdfc2VyZGVzX3BvbGFyaXR5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMjE4LXtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjEyMTk6XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMjIwLVx0dW5zaWduZWQgaW50IHBvbCwgZGVmYXVsdF9wb2w7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9MTQ5OD1zdGF0aWMgdm9pZCBhbjg4MTFoYl9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xNTAyLVx0aWYgKHByaXYtXHUwMDNlcGJ1c2Rldikge1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTUwMzpcdFx0bWRpb19kZXZpY2VfcmVtb3ZlKHByaXYtXHUwMDNlcGJ1c2Rldik7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxNTA0Olx0XHRtZGlvX2RldmljZV9mcmVlKHByaXYtXHUwMDNlcGJ1c2Rldik7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xNTA1LVx0fVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTE1NTM9bW9kdWxlX3BoeV9kcml2ZXIoZW44ODExaF9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTU1NC1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjE1NTU6c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBlbjg4MTFoX3RibFtdID0ge1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTU1Ni1cdHsgUEhZX0lEX01BVENIX01PREVMKEVOODgxMUhfUEhZX0lEKSB9LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTE1NjAtXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxNTYxOk1PRFVMRV9ERVZJQ0VfVEFCTEUobWRpbywgZW44ODExaF90YmwpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTU2Mi1NT0RVTEVfRklSTVdBUkUoRU44ODExSF9NRDMyX0RNKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYW1kLmM9MTEyPW1vZHVsZV9waHlfZHJpdmVyKGFtNzljX2RyaXZlcnMpO1xuZHJpdmVycy9uZXQvcGh5L2FtZC5jLTExMy1cbmRyaXZlcnMvbmV0L3BoeS9hbWQuYzoxMTQ6c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhbWRfdGJsW10gPSB7XG5kcml2ZXJzL25ldC9waHkvYW1kLmMtMTE1LVx0eyBQSFlfSURfQUMxMDFMLCAweGZmZmZmZmYwIH0sXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FtZC5jLTExOS1cbmRyaXZlcnMvbmV0L3BoeS9hbWQuYzoxMjA6TU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBhbWRfdGJsKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfZmlybXdhcmUuYz0yOTY9c3RhdGljIGludCBhcXJfZmlybXdhcmVfbG9hZF9udm1lbShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9maXJtd2FyZS5jLTMwMi1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9maXJtd2FyZS5jOjMwMzpcdGNlbGwgPSBudm1lbV9jZWxsX2dldChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIFwmIzM0O2Zpcm13YXJlXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9maXJtd2FyZS5jLTMwNC1cdGlmIChJU19FUlIoY2VsbCkpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2Zpcm13YXJlLmM9MzI0PXN0YXRpYyBpbnQgYXFyX2Zpcm13YXJlX2xvYWRfZnMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9maXJtd2FyZS5jLTMyNS17XG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfZmlybXdhcmUuYzozMjY6XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfZmlybXdhcmUuYy0zMjctXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9od21vbi5jPTE5MD1pbnQgYXFyX2h3bW9uX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfaHdtb24uYy0xOTEte1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2h3bW9uLmM6MTkyOlx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2h3bW9uLmMtMTkzLVx0c3RydWN0IGRldmljZSAqaHdtb25fZGV2O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM9NzUwPXN0YXRpYyBpbnQgYXFyMTA3X2NvbmZpZ19tZGkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtNzUxLXtcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6NzUyOlx0c3RydWN0IGRldmljZV9ub2RlICpucCA9IHBoeWRldi1cdTAwM2VtZGlvLmRldi5vZl9ub2RlO1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy03NTMtXHR1MzIgbWRpX2NvbmY7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYz0xMTY0PXN0YXRpYyBpbnQgYXFyMTA3X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0xMTY3LVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzoxMTY4Olx0cGh5ZGV2LVx1MDAzZXByaXYgPSBkZXZtX2t6YWxsb2MoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2LFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0xMTY5LVx0XHRcdFx0ICAgIHNpemVvZihzdHJ1Y3QgYXFyMTA3X3ByaXYpLCBHRlBfS0VSTkVMKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jPTE1NjU9bW9kdWxlX3BoeV9kcml2ZXIoYXFyX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTE1NjYtXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjE1Njc6c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhcXJfdGJsW10gPSB7XG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTE1NjgtXHR7IFBIWV9JRF9NQVRDSF9NT0RFTChQSFlfSURfQVExMjAyKSB9LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMTU4OC1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6MTU4OTpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFxcl90YmwpO1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0xNTkwLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM9Mjk3PXN0YXRpYyBpbnQgYWVvbl9maXJtd2FyZV9ib290KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IHU4ICpkYXRhLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtMzIxLVx0aWYgKHZhbCBcdTAwM2UgMSkge1xuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYzozMjI6XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDt3cm9uZyBvcmlnaW4gbWRpb19pbmRpcmVjdF9zdGF0dXM6ICV4XFxuXCYjMzQ7LCB2YWwpO1xuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy0zMjMtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM9MzUyPXN0YXRpYyBpbnQgYWVvbl9maXJtd2FyZV9sb2FkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTM1My17XG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjM1NDpcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtMzU1LVx0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdztcbi0tXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jPTYwMz1zdGF0aWMgaW50IGFzMjF4eHhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTYwNy1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6NjA4Olx0cHJpdiA9IGRldm1fa3phbGxvYyhcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTYwOS1cdFx0XHQgICAgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy02MTMtXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjYxNDpcdHJldCA9IGRldm1fbXV0ZXhfaW5pdChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTYxNS1cdFx0XHQgICAgICBcdTAwMjZwcml2LVx1MDAzZWlwY19sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jPTEwNzg9bW9kdWxlX3BoeV9kcml2ZXIoYXMyMXh4eF9kcml2ZXJzKTtcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtMTA3OS1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6MTA4MDpzdGF0aWMgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGFzMjF4eHhfdGJsW10gPSB7XG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTEwODEtXHR7IFBIWV9JRF9NQVRDSF9WRU5ET1IoUEhZX1ZFTkRPUl9BRU9OU0VNSSkgfSxcbi0tXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTEwODMtfTtcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6MTA4NDpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFzMjF4eHhfdGJsKTtcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtMTA4NS1cbi0tXG5kcml2ZXJzL25ldC9waHkvYXg4ODc5NmIuYz0xMjE9bW9kdWxlX3BoeV9kcml2ZXIoYXNpeF9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L2F4ODg3OTZiLmMtMTIyLVxuZHJpdmVycy9uZXQvcGh5L2F4ODg3OTZiLmM6MTIzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgYXNpeF90YmxbXSA9IHtcbmRyaXZlcnMvbmV0L3BoeS9heDg4Nzk2Yi5jLTEyNC1cdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9BU0lYX0FYODg3NzJBKSB9LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9heDg4Nzk2Yi5jLTEyOS1cbmRyaXZlcnMvbmV0L3BoeS9heDg4Nzk2Yi5jOjEzMDpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFzaXhfdGJsKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jPTIzMz1zdGF0aWMgaW50IGJjbV9vbWVnYV9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tY3lnbnVzLmMtMjM2LVxuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYzoyMzc6XHRwcml2ID0gZGV2bV9remFsbG9jKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jLTIzOC1cdGlmICghcHJpdilcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jLTI0Mi1cbmRyaXZlcnMvbmV0L3BoeS9iY20tY3lnbnVzLmM6MjQzOlx0cHJpdi1cdTAwM2VzdGF0cyA9IGRldm1fa2NhbGxvYyhcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jLTI0NC1cdFx0XHRcdCAgIGJjbV9waHlfZ2V0X3NzZXRfY291bnQocGh5ZGV2KSwgc2l6ZW9mKHU2NCksXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYz0yNTI9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGJjbV9jeWdudXNfcGh5X2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tY3lnbnVzLmMtMjgwLVxuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYzoyODE6c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBiY21fY3lnbnVzX3BoeV90YmxbXSA9IHtcbmRyaXZlcnMvbmV0L3BoeS9iY20tY3lnbnVzLmMtMjgyLVx0eyBQSFlfSURfQkNNX0NZR05VUywgMHhmZmZmZmZmMCwgfSxcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jLTI4NS19O1xuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYzoyODY6TU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBiY21fY3lnbnVzX3BoeV90YmwpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYy0yODctXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMTAtI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjExOiNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMTItI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYz0zMz1pbnQgYmNtX3BoeV93cml0ZV9leHAoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZywgdTE2IHZhbClcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy0zNi1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjM3Olx0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTM4LVx0cmMgPSBfX2JjbV9waHlfd3JpdGVfZXhwKHBoeWRldiwgcmVnLCB2YWwpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM6Mzk6XHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy00MC1cbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYz02Mj1pbnQgYmNtX3BoeV9yZWFkX2V4cChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTY1LVxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM6NjY6XHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtNjctXHRyYyA9IF9fYmNtX3BoeV9yZWFkX2V4cChwaHlkZXYsIHJlZyk7XG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzo2ODpcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTY5LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jPTk0PWludCBiY21fcGh5X21vZGlmeV9leHAoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZywgdTE2IG1hc2ssIHUxNiBzZXQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtOTctXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzo5ODpcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy05OS1cdHJldCA9IF9fYmNtX3BoeV9tb2RpZnlfZXhwKHBoeWRldiwgcmVnLCBtYXNrLCBzZXQpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM6MTAwOlx0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMTAxLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jPTI3MT1pbnQgYmNtX3BoeV9yZWFkX3JkYihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmRiKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTI3NC1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjI3NTpcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy0yNzYtXHRyZXQgPSBfX2JjbV9waHlfcmVhZF9yZGIocGh5ZGV2LCByZGIpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM6Mjc3Olx0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMjc4LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jPTI5NT1pbnQgYmNtX3BoeV93cml0ZV9yZGIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJkYiwgdTE2IHZhbClcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy0yOTgtXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzoyOTk6XHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMzAwLVx0cmV0ID0gX19iY21fcGh5X3dyaXRlX3JkYihwaHlkZXYsIHJkYiwgdmFsKTtcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjMwMTpcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTMwMi1cbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYz0zMjc9aW50IGJjbV9waHlfbW9kaWZ5X3JkYihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmRiLCB1MTYgbWFzaywgdTE2IHNldClcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy0zMzAtXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzozMzE6XHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMzMyLVx0cmV0ID0gX19iY21fcGh5X21vZGlmeV9yZGIocGh5ZGV2LCByZGIsIG1hc2ssIHNldCk7XG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzozMzM6XHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy0zMzQtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM9NjYwPXN0YXRpYyBpbnQgX2JjbV9waHlfY2FibGVfdGVzdF9zdGFydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGlzX3JkYilcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy02NzEtXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzo2NzI6XHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtNjczLVx0aWYgKGlzX3JkYikge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTY5MC1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjY5MTpcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTY5Mi1cbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYz03NDI9c3RhdGljIGludCBfYmNtX3BoeV9jYWJsZV90ZXN0X2dldF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy03NDgtXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzo3NDk6XHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtNzUwLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTc5OS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjgwMDpcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTgwMS1cbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1wdHAuYz05MjA9c3RydWN0IGJjbV9wdHBfcHJpdmF0ZSAqYmNtX3B0cF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LXB0cC5jLTkzMS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LXB0cC5jOjkzMjpcdHByaXYgPSBkZXZtX2t6YWxsb2MoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LXB0cC5jLTkzMy1cdGlmICghcHJpdilcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1wdHAuYy05NDAtXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1wdHAuYzo5NDE6XHRjbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZwcml2LVx1MDAzZXB0cF9pbmZvLCBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktcHRwLmMtOTQyLVx0aWYgKElTX0VSUihjbG9jaykpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmM9NDE0PXN0YXRpYyBpbnQgYmNtNTQxNDBfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jLTQyMy1cbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jOjQyNDpcdGh3bW9uID0gZGV2bV9od21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9pbmZvKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldixcbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jLTQyNS1cdFx0XHRcdFx0XHQgICAgIFwmIzM0O0JDTTU0MTQwXCYjMzQ7LCBwaHlkZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmM9NDMyPXN0YXRpYyBpbnQgYmNtNTQxNDBfYmFzZV9yZWFkX3JkYihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmRiKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jLTQzNS1cbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jOjQzNjpcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYy00MzctXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgQkNNNTQxNDBfQkFTRV9BRERSLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jLTQ0NS1vdXQ6XG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYzo0NDY6XHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYy00NDctXHRyZXR1cm4gcmV0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jPTQ1MD1zdGF0aWMgaW50IGJjbTU0MTQwX2Jhc2Vfd3JpdGVfcmRiKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmMtNDU0LVxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmM6NDU1Olx0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jLTQ1Ni1cdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCBCQ001NDE0MF9CQVNFX0FERFIsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmMtNDY0LW91dDpcbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jOjQ2NTpcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jLTQ2Ni1cdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmM9NTA1PXN0YXRpYyBpbnQgYmNtNTQxNDBfZ2V0X2Jhc2VfYWRkcl9hbmRfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jLTUwNy1cdHN0cnVjdCBiY201NDE0MF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYzo1MDg6XHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzO1xuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmMtNTA5LVx0aW50IGFkZHIsIG1pbl9hZGRyLCBtYXhfYWRkcjtcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYy01MTMtXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYzo1MTQ6XHRtaW5fYWRkciA9IHBoeWRldi1cdTAwM2VtZGlvLmFkZHI7XG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYzo1MTU6XHRtYXhfYWRkciA9IHBoeWRldi1cdTAwM2VtZGlvLmFkZHI7XG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYzo1MTY6XHRhZGRyID0gcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcjtcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNjQ5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgUEhZIEluc3RhbnRpYXRpb24gTWV0aG9kcyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBQSFkgZGV2aWNlcyBnZXQgaW5zdGFudGlhdGVkIHdpdGhpbiB0aGlzIGNvbnRleHQuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gbG9vayBhdCB0aGluZ3MgbGlrZSBgbWRpby1tb2NrdXAuY2AsIGBmaXhlZF9waHkuY2AsIG9yIHBvdGVudGlhbGx5IGV2ZW4gYG1kaW9fYnVzLmNgLiBJIGZpZ3VyZWQgb25lIG9mIHRob3NlIG1pZ2h0IGhhbmRsZSB0aGUgaW5zdGFudGlhdGlvbiBkaXJlY3RseS4gVGhlbiBJIHN0b3BwZWQgYW5kIHRob3VnaHQsICYjMzQ7SGFuZyBvbiwgZG9lcyBzeXprYWxsZXIgYWN0dWFsbHkgKmluc3RhbnRpYXRlKiBQSFkgZGV2aWNlcz8gQ2FuIGl0IGRvIHRoYXQgdGhyb3VnaCBOZXRsaW5rIHNvbWVob3c/JiMzNDsgVGhlIG1vcmUgSSB0aG91Z2h0IGFib3V0IGl0LCB0aGUgbW9yZSBJIHJlYWxpc2VkIGl0JiMzOTtzIHR5cGljYWxseSBoYW5kbGVkIHdoZW4gYSBuZXR3b3JrIGRyaXZlciBwcm9iZXMgYW5kIHJlZ2lzdGVycyBhbiBNRElPIGJ1cywgb3IsIG9mIGNvdXJzZSwgdGhyb3VnaCB0aGUgZGV2aWNlIHRyZWUuCgpCdXQgdGhlbiBJIHJlbWVtYmVyZWQgc2VlaW5nIHRob3NlIGBzeXpfZ2VuZXRsaW5rXy4uLmAsIGBzeXpfdXNiX2Nvbm5lY3RgLCBgc3l6XzgwMjExXy4uLmAsIGFuZCBgc3l6X21hYzgwMjE1NF8uLi5gIGNhbGxzIGluIHN5emthbGxlci4gQ291bGQgYW55IG9mIHRob3NlIGJlIHJlbGV2YW50PyBQZXJoYXBzIHRoZXkgb2ZmZXIgYW4gaW5kaXJlY3QgbWV0aG9kLgoKV2FpdCBhIHNlY29uZCwgdGhlcmUmIzM5O3MgdGhhdCB2aXJ0dWFsIE1ESU8gYnVzIGRyaXZlciBJIGtlZXAgaGVhcmluZyBhYm91dDogYGRyaXZlcnMvbmV0L3BoeS9tZGlvLW1vY2t1cC5jYC4gSSBrbm93IHRoYXQgY2FuIGJlIGluc3RhbnRpYXRlZCB2aWEgc3lzZnMgb3IgbW9kdWxlIHBhcmFtZXRlcnMsIGNhbiYjMzk7dCBpdD8gQWN0dWFsbHksIEkgdGhpbmsgaXQmIzM5O3MgdXN1YWxseSBkZXZpY2UgdHJlZSBvciBtb2R1bGUgcGFyYW1ldGVycyBhZ2Fpbi4gQnV0IHRoZW4uLi4gaG9sZCBvbiBhIG1pbnV0ZSwgZG9lcyBgZHJpdmVycy9uZXQvcGh5L21kaW8tbW9ja3VwLmNgICphY3R1YWxseSogZXhpc3Q/IEkmIzM5O2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGF0LiBTZWVtcyBsaWtlIGl0IG1pZ2h0IG5vdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW8tbW9ja3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyMzUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgTmV0d29yayBQSFkgRHJpdmVyIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBsZXQgbWUgc2VlLi4uIHRoZXkmIzM5O3JlIHBvaW50aW5nIG1lIHRvd2FyZCBgZHJpdmVycy9uZXQvcGh5L21kaW8tbW9ja3VwLmNgLiBIbW1tLCBzZWVtcyBhIGxpdHRsZSBvZmYuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgY29udGV4dCwgaXMgdGhhdCBhICYjMzQ7bW9ja3VwJiMzNDsgb3IgJiMzNDtkdW1teSYjMzQ7IFBIWSBpbXBsZW1lbnRhdGlvbiwgaWYgaXQgZXhpc3RzLCB3b3VsZG4mIzM5O3QgYmUgZGlyZWN0bHkgdGllZCB0byBNRElPLiBJdCYjMzk7cyBtb3JlIGxpa2VseSB0byBiZSBhIGhpZ2hlci1sZXZlbCBhYnN0cmFjdGlvbi4KClNvLCBsZXQmIzM5O3MgY3V0IHJpZ2h0IHRvIHRoZSBjaGFzZS4gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoZSBgZHJpdmVycy9uZXQvcGh5L2AgZGlyZWN0b3J5LiBJJiMzOTtsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgYW55IGZpbGVzIG5hbWVkIHdpdGggJiMzNDttb2NrdXAmIzM0OyBvciAmIzM0O2R1bW15JiMzNDsgaW4gdGhlIGZpbGVuYW1lLiBUaGF0IHNob3VsZCBxdWlja2x5IHBvaW50IG1lIHRvIHRoZSByZWxldmFudCBjb2RlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBQSFkgc2ltdWxhdG9ycyBhcmUgaW1wbGVtZW50ZWQsIGFuZCB3aGF0IHRoZWlyIGludGVuZGVkIHVzZSBjYXNlcyBhcmUuIFRoaXMgc2hvdWxkIGJlIHF1aWNrLCBhbmQgaG9wZWZ1bGx5IGxlYWQgdG8gdGhlIGNvcnJlY3Qgc291cmNlIGZpbGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9ja3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ1MjgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTmV0d29yayBTdWJzeXN0ZW0qKgoKT2theSwgSSYjMzk7bSBkZWVwIGluIHRoZSBuZXR3b3JrIGRyaXZlciBzcGFjZSBhZ2Fpbi4gV2hlcmUgc2hvdWxkIEkgc3RhcnQgbXkgZXhwbG9yYXRpb24/IEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBoYXJkd2FyZSBpbnRlcmFjdGlvbi4gSG1tLCBsZXQgbWUgdGhpbmsuLi4gZ2l2ZW4gbXkgZm9jdXMgb24gbG93LWxldmVsIGludGVyYWN0aW9ucyBhbmQgdW5kZXJzdGFuZGluZyB0aGUgUEhZIGxheWVyLCBJIHNob3VsZCBpbnZlc3RpZ2F0ZSBgZHJpdmVycy9uZXQvbWRpby9gLiBUaGF0JiMzOTtzIHdoZXJlIEkgY2FuIGxpa2VseSBmaW5kIHRoZSBjb3JlIE1lZGlhIEluZGVwZW5kZW50IEludGVyZmFjZSAoTUlJKSBkcml2ZXIgY29kZSwgYW5kIGhvcGVmdWxseSwgYW55IHNwZWNpZmljcyByZWxhdGVkIHRvIHRoZSBNRElPIGJ1cyB1c2VkIHRvIGNvbnRyb2wgdGhlIFBIWS4gVGhpcyBzZWVtcyBsaWtlIGEgbG9naWNhbCBlbnRyeSBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIG5ldHdvcmsgZHJpdmVycyBjb21tdW5pY2F0ZSB3aXRoIHRoZSBwaHlzaWNhbCBsYXllci4gVGhpcyBkaXJlY3RvcnkgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rIHRvIHVuZGVyc3RhbmQgdGhlIE1ESU8gYnVzIGFuZCBQSFkgaW50ZXJhY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9ja3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDc0MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyBQSFkgRHJpdmVycyB3aXRoIFN5emthbGxlcjogQSBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgd2UgY2FuIGxldmVyYWdlIHN5emthbGxlciB0byB0ZXN0IFBIWSBkcml2ZXJzLiBTeXprYWxsZXImIzM5O3MgYWxyZWFkeSBleGNlbGxlbnQgd2l0aCBVU0IgZGV2aWNlIGZ1enppbmcsIGFuZCBJIGtub3cgc29tZSBVU0IgbmV0d29yayBhZGFwdGVycywgc3BlY2lmaWNhbGx5LCB0aGUgYGF4ODgxNzlfMTc4YWAgYWRhcHRlciwgdXRpbGl6ZSBQSFlzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGNhbiB3ZSBhY3R1YWxseSByZWFjaCB0aGVzZSBQSFkgZHJpdmVycyB0aHJvdWdoIHN5emthbGxlcj8KClRoZSBwYXRoIG9mIGxlYXN0IHJlc2lzdGFuY2UgZmVlbHMgbGlrZSBpbnZlc3RpZ2F0aW5nIHdoZXRoZXIgb3Igbm90IGByZWFsdGVrX21haW4uY2AgaXMgYWNjZXNzaWJsZS4gVGhlIHBhdGNoIG5vdGVzIHJlZmVyZW5jZSBSVEw4MjYxQyBzdXBwb3J0LiBCdXQgY2FuIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIHJlYWxpc3RpY2FsbHkgdHJpZ2dlciBpdHMgZXhlY3V0aW9uPyAKCkxldCYjMzk7cyBhc3N1bWUgd2UgdXNlIGEgVVNCIG5ldHdvcmsgYWRhcHRlciB0aGF0JiMzOTtzIGRyaXZlbiBieSB0aGUgYHI4MTUyYCBkcml2ZXIuIERvZXMgdGhpcyBkcml2ZXIgZXZlbiBkZXBlbmQgb24gYHJlYWx0ZWtfbWFpbi5jYD8gTm8sIGl0IGhhcyBpdHMgb3duIFBIWSBjb2RlIG9yIGxldmVyYWdlcyBwaHlsaWIuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIG5vdyBiZWNvbWVzLCBkb2VzIGByODE1MmAgdXNlIHBoeWxpYj8gVGhpcyBuZWVkcyBjb25maXJtYXRpb24sIHNvIHRoYXQmIzM5O3MgdGhlIG5leHQgYXZlbnVlIHRvIGV4cGxvcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9jb25uZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz0yNjE9c3RhdGljIGludCBheDg4MTcyYV9yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMzEzLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6MzE0Olx0cHJpdi1cdTAwM2VwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYtXHUwMDNlbmV0LCBwcml2LVx1MDAzZXBoeV9uYW1lLFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMzE1LVx0XHRcdFx0ICAgXHUwMDI2YXg4ODE3MmFfYWRqdXN0X2xpbmssXG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTE0Nz1zdGF0aWMgaW50IHNtc2M5NXh4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zilcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjg0LVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTI4NTpcdHJldCA9IHBoeV9jb25uZWN0X2RpcmVjdChkZXYtXHUwMDNlbmV0LCBwZGF0YS1cdTAwM2VwaHlkZXYsXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjg2LVx0XHRcdFx0IFx1MDAyNnNtc2M5NXh4X2hhbmRsZV9saW5rX2NoYW5nZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU0NTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzoKCioqTmV0d29yayBEcml2ZXIgSW52ZXN0aWdhdGlvbioqCgpIbW0sIGBheDg4MTcyYWAgaXMgdXNpbmcgYHBoeV9jb25uZWN0YC4gSW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLiBOb3csIHdoYXQmIzM5O3MgdGhlIGRlYWwgd2l0aCBgcjgxNTJgPyBJcyBpdCBhbHNvIGxldmVyYWdpbmcgYHBoeV9jb25uZWN0YD8gVGhhdCYjMzk7cyB0aGUgcXVlc3Rpb24gSSBoYXZlIHRvIGFuc3dlciByaWdodCBub3cuIEtub3dpbmcgaG93IGRpZmZlcmVudCBkcml2ZXJzIGhhbmRsZSBQSFkgY29ubmVjdGlvbnMgaXMgZXNzZW50aWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyIGFuZCBob3cgdGhlIGRpZmZlcmVudCBkcml2ZXJzIHJlbGF0ZSB0byBlYWNoIG90aGVyLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY29tcGxldGVseSBncm9rIHRoaXMsIGFuZCB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBkcml2ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9jb25uZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU2NjYKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUGxhbiB0byBFeHBsb2l0IHRoZSBSZWFsdGVrIFBIWSBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gdHJpZ2dlciB0aGF0IGByZWFsdGVrX21haW4uY2AgY29kZSB1c2VkIGJ5IHRoZSBgcjgxNTJgIGRyaXZlci4gRGlyZWN0bHkgdXNpbmcgdGhlIGByODE1MmAgaXNuJiMzOTt0IGdvaW5nIHRvIHdvcmsuIENhbiBJIHNvbWVob3cgdHJpY2sgdGhlIHN5c3RlbSBpbnRvIHRoaW5raW5nIGEgUmVhbHRlayBQSFkgaXMgcHJlc2VudD8gTWF5YmUgYSB2aXJ0dWFsIGRldmljZT8KCldhaXQgYSBtaW51dGUuLi4gV2hhdCBpZiBJIHVzZSBgc3l6X3VzYl9jb25uZWN0YCB0byBlbXVsYXRlIGEgVVNCIGRldmljZT8gU3BlY2lmaWNhbGx5LCBpZiBJIGVtdWxhdGUgYW4gYGF4ODgxNzJhYCBkZXZpY2UgKEFTSVggQVg4ODE3MkEpLCBhbmQgY3JhZnQgdGhlIE1ESU8gcmVzcG9uc2VzIHRvIGluY2x1ZGUgYSBQSFkgSUQgdGhhdCBtYXRjaGVzIGBSVExfODI2MUNfQ0dgICgweDAwMWNjODk4KSwgdGhlIGBheDg4MTcyYWAgZHJpdmVyICpzaG91bGQqIHByb2JlIHRoZSBNRElPIGJ1cywgc2VlIHRoYXQgSUQsIGFuZCBwaHlsaWIgd2lsbCB0aGVuIGJpbmQgdGhlIGByZWFsdGVrX21haW4uY2AgZHJpdmVyIHRvIGl0LiBJdCYjMzk7cyBhIGJpdCBvZiBhIGRhbmNlLCBidXQgdGhlIHBpZWNlcyAqc2hvdWxkKiBmaXQuCgpOb3csIGEgY3J1Y2lhbCBxdWVzdGlvbjogZG9lcyBgYXg4ODE3MmFgIGFjdHVhbGx5IGFsbG93IG1lIHRvIHNwZWNpZnkgKmFueSogUEhZIElEIGluIHRoZSBNRElPIHJlc3BvbnNlcz8gVGhhdCYjMzk7cyB0aGUgbmV4dCB0aGluZyB0byBjaGVjay4gSWYgaXQmIzM5O3MgcmVzdHJpY3RpdmUsIHRoaXMgd2hvbGUgaWRlYSBpcyBET0EuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F4ODgxNzJhX3Jlc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9MTE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYXg4ODE3MmFfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMTMwLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6MTMxOnN0YXRpYyBpbnQgYXg4ODE3MmFfcmVzZXRfcGh5KHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IGVtYmRfcGh5KVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMTMyLXtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz0xNTg9c3RhdGljIGludCBheDg4MTcyYV9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMjE1LVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6MjE2Olx0YXg4ODE3MmFfcmVzZXRfcGh5KGRldiwgcHJpdi1cdTAwM2V1c2VfZW1iZHBoeSk7XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0yMTctXG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9MjUzPXN0YXRpYyB2b2lkIGF4ODgxNzJhX3VuYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTI2MC1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjI2MTpzdGF0aWMgaW50IGF4ODgxNzJhX3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldilcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTI2Mi17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMjY3LVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6MjY4Olx0YXg4ODE3MmFfcmVzZXRfcGh5KGRldiwgcHJpdi1cdTAwM2V1c2VfZW1iZHBoeSk7XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0yNjktXG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9MzQ3PWNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBheDg4MTcyYV9pbmZvID0ge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTM0OS1cdC5iaW5kID0gYXg4ODE3MmFfYmluZCxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjM1MDpcdC5yZXNldCA9IGF4ODgxNzJhX3Jlc2V0LFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMzUxLVx0LnN0b3AgPSBheDg4MTcyYV9zdG9wLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjgyMAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kLCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBpZiBJJiMzOTttIHRoZSBvbmUgaGF2aW5nIHRoZXNlIHRob3VnaHRzLgoKKipEaXZpbmcgaW50byB0aGUgQVg4ODE3MkEgRHJpdmVyKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgYXg4ODE3MmFfYmluZGAgYW5kIGBheDg4MTcyYV9yZXNldGAgZnVuY3Rpb25zIHNwZWNpZmljYWxseS4gVGhlc2UgYXJlIHRoZSBjb3JlIGluaXRpYWxpemF0aW9uIGFuZCByZWNvdmVyeSBwb2ludHMuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGRyaXZlciBob29rcyBpbnRvIHRoZSBzeXN0ZW0gYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBoYXJkd2FyZSBnbGl0Y2hlcyBvciBpbml0aWFsaXphdGlvbiBmYWlsdXJlcy4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGRldmljZSBpcyBicm91Z2h0IG9ubGluZSBhbmQgaG93IGl04oCZcyBicm91Z2h0IGJhY2sgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcuIFVuZGVyc3RhbmRpbmcgYGJpbmRgIGlzIGdvaW5nIHRvIGdpdmUgbWUgYSBoaWdoLWxldmVsIHZpZXcgb2YgZGV2aWNlIHByb2JpbmcgYW5kIHJlc291cmNlIGFsbG9jYXRpb24sIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSByZWdpc3RlciBtYXBwaW5nIGFuZCBpbnRlcnJ1cHQgc2V0dXAuIFJlc2V0LCBvbiB0aGUgb3RoZXIgaGFuZCwgc2hvdWxkIHJldmVhbCBob3cgdGhlIGRyaXZlciBkZWFscyB3aXRoIHBvd2VyIGN5Y2xlcyBvciBlcnJvciByZWNvdmVyeS4gVGhpcyB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgdGhlIHJvYnVzdG5lc3Mgb2YgdGhpcyBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSYjMzk7dmUgYXBwcm9hY2hlZCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE1ODpcdHN0YXRpYyBpbnQgYXg4ODE3MmFfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuIDE1OTpcdHtcbiAxNjA6XHRcdGludCByZXQ7XG4gMTYxOlx0XHR1OCBidWZbRVRIX0FMRU5dO1xuIDE2MjpcdFx0c3RydWN0IGF4ODgxNzJhX3ByaXZhdGUgKnByaXY7XG4gMTYzOlx0XG4gMTY0Olx0XHRyZXQgPSB1c2JuZXRfZ2V0X2VuZHBvaW50cyhkZXYsIGludGYpO1xuIDE2NTpcdFx0aWYgKHJldClcbiAxNjY6XHRcdFx0cmV0dXJuIHJldDtcbiAxNjc6XHRcbiAxNjg6XHRcdHByaXYgPSBremFsbG9jX29iaigqcHJpdik7XG4gMTY5Olx0XHRpZiAoIXByaXYpXG4gMTcwOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDE3MTpcdFxuIDE3MjpcdFx0ZGV2LVx1MDAzZWRyaXZlcl9wcml2ID0gcHJpdjtcbiAxNzM6XHRcbiAxNzQ6XHRcdC8qIEdldCB0aGUgTUFDIGFkZHJlc3MgKi9cbiAxNzU6XHRcdHJldCA9IGFzaXhfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9OT0RFX0lELCAwLCAwLCBFVEhfQUxFTiwgYnVmLCAwKTtcbiAxNzY6XHRcdGlmIChyZXQgXHUwMDNjIEVUSF9BTEVOKSB7XG4gMTc3Olx0XHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7RmFpbGVkIHRvIHJlYWQgTUFDIGFkZHJlc3M6ICVkXFxuXCYjMzQ7LCByZXQpO1xuIDE3ODpcdFx0XHRyZXQgPSAtRUlPO1xuIDE3OTpcdFx0XHRnb3RvIGZyZWU7XG4gMTgwOlx0XHR9XG4gMTgxOlx0XHRldGhfaHdfYWRkcl9zZXQoZGV2LVx1MDAzZW5ldCwgYnVmKTtcbiAxODI6XHRcbiAxODM6XHRcdGRldi1cdTAwM2VuZXQtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNmF4ODgxNzJhX25ldGRldl9vcHM7XG4gMTg0Olx0XHRkZXYtXHUwMDNlbmV0LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2YXg4ODE3MmFfZXRodG9vbF9vcHM7XG4gMTg1Olx0XG4gMTg2Olx0XHQvKiBhcmUgd2UgdXNpbmcgdGhlIGludGVybmFsIG9yIHRoZSBleHRlcm5hbCBwaHk/ICovXG4gMTg3Olx0XHRyZXQgPSBhc2l4X3JlYWRfY21kKGRldiwgQVhfQ01EX1NXX1BIWV9TVEFUVVMsIDAsIDAsIDEsIGJ1ZiwgMCk7XG4gMTg4Olx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gMTg5Olx0XHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7RmFpbGVkIHRvIHJlYWQgc29mdHdhcmUgaW50ZXJmYWNlIHNlbGVjdGlvbiByZWdpc3RlcjogJWRcXG5cJiMzNDssXG4gMTkwOlx0XHRcdFx0ICAgcmV0KTtcbiAxOTE6XHRcdFx0Z290byBmcmVlO1xuIDE5MjpcdFx0fVxuIDE5MzpcdFxuIDE5NDpcdFx0bmV0ZGV2X2RiZyhkZXYtXHUwMDNlbmV0LCBcJiMzNDtBWF9DTURfU1dfUEhZX1NUQVRVUyA9IDB4JTAyeFxcblwmIzM0OywgYnVmWzBdKTtcbiAxOTU6XHRcdHN3aXRjaCAoYnVmWzBdIFx1MDAyNiBBWF9QSFlfU0VMRUNUX01BU0spIHtcbiAxOTY6XHRcdGNhc2UgQVhfUEhZX1NFTEVDVF9JTlRFUk5BTDpcbiAxOTc6XHRcdFx0bmV0ZGV2X2RiZyhkZXYtXHUwMDNlbmV0LCBcJiMzNDt1c2UgaW50ZXJuYWwgcGh5XFxuXCYjMzQ7KTtcbiAxOTg6XHRcdFx0cHJpdi1cdTAwM2V1c2VfZW1iZHBoeSA9IDE7XG4gMTk5Olx0XHRcdGJyZWFrO1xuIDIwMDpcdFx0Y2FzZSBBWF9QSFlfU0VMRUNUX0VYVEVSTkFMOlxuIDIwMTpcdFx0XHRuZXRkZXZfZGJnKGRldi1cdTAwM2VuZXQsIFwmIzM0O3VzZSBleHRlcm5hbCBwaHlcXG5cJiMzNDspO1xuIDIwMjpcdFx0XHRwcml2LVx1MDAzZXVzZV9lbWJkcGh5ID0gMDtcbiAyMDM6XHRcdFx0YnJlYWs7XG4gMjA0Olx0XHRkZWZhdWx0OlxuIDIwNTpcdFx0XHRuZXRkZXZfZXJyKGRldi1cdTAwM2VuZXQsIFwmIzM0O0ludGVyZmFjZSBtb2RlIG5vdCBzdXBwb3J0ZWQgYnkgZHJpdmVyXFxuXCYjMzQ7KTtcbiAyMDY6XHRcdFx0cmV0ID0gLUVOT1RTVVBQO1xuIDIwNzpcdFx0XHRnb3RvIGZyZWU7XG4gMjA4Olx0XHR9XG4gMjA5Olx0XG4gMjEwOlx0XHRyZXQgPSBhc2l4X3JlYWRfcGh5X2FkZHIoZGV2LCBwcml2LVx1MDAzZXVzZV9lbWJkcGh5KTtcbiAyMTE6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gMjEyOlx0XHRcdGdvdG8gZnJlZTtcbiAyMTM6XHRcbiAyMTQ6XHRcdHByaXYtXHUwMDNlcGh5X2FkZHIgPSByZXQ7XG4gMjE1Olx0XG4gMjE2Olx0XHRheDg4MTcyYV9yZXNldF9waHkoZGV2LCBwcml2LVx1MDAzZXVzZV9lbWJkcGh5KTtcbiAyMTc6XHRcbiAyMTg6XHRcdC8qIEFzaXggZnJhbWluZyBwYWNrcyBtdWx0aXBsZSBldGggZnJhbWVzIGludG8gYSAySyB1c2IgYnVsayB0cmFuc2ZlciAqL1xuIDIxOTpcdFx0aWYgKGRldi1cdTAwM2Vkcml2ZXJfaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgRkxBR19GUkFNSU5HX0FYKSB7XG4gMjIwOlx0XHRcdC8qIGhhcmRfbXR1ICBpcyBzdGlsbCB0aGUgZGVmYXVsdCAtIHRoZSBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydFxuIDIyMTpcdFx0XHQgICBqdW1ibyBldGggZnJhbWVzICovXG4gMjIyOlx0XHRcdGRldi1cdTAwM2VyeF91cmJfc2l6ZSA9IDIwNDg7XG4gMjIzOlx0XHR9XG4gMjI0Olx0XG4gMjI1Olx0XHQvKiBpbml0IE1ESU8gYnVzICovXG4gMjI2Olx0XHRyZXQgPSBheDg4MTcyYV9pbml0X21kaW8oZGV2KTtcbiAyMjc6XHRcdGlmIChyZXQpXG4gMjI4Olx0XHRcdGdvdG8gZnJlZTtcbiAyMjk6XHRcbiAyMzA6XHRcdHJldHVybiAwO1xuIDIzMTpcdFxuIDIzMjpcdGZyZWU6XG4gMjMzOlx0XHRrZnJlZShwcml2KTtcbiAyMzQ6XHRcdHJldHVybiByZXQ7XG4gMjM1Olx0fVxuIDIzNjpcdFxuIDIzNzpcdHN0YXRpYyBpbnQgYXg4ODE3MmFfc3RvcChzdHJ1Y3QgdXNibmV0ICpkZXYpXG4gMjM4Olx0e1xuIDIzOTpcdFx0c3RydWN0IGF4ODgxNzJhX3ByaXZhdGUgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4gMjQwOlx0XG4gMjQxOlx0XHRuZXRkZXZfZGJnKGRldi1cdTAwM2VuZXQsIFwmIzM0O1N0b3BwaW5nIGludGVyZmFjZVxcblwmIzM0Oyk7XG4gMjQyOlx0XG4gMjQzOlx0XHRpZiAocHJpdi1cdTAwM2VwaHlkZXYpIHtcbiAyNDQ6XHRcdFx0bmV0ZGV2X2luZm8oZGV2LVx1MDAzZW5ldCwgXCYjMzQ7RGlzY29ubmVjdGluZyBmcm9tIHBoeSAlc1xcblwmIzM0OyxcbiAyNDU6XHRcdFx0XHQgICAgcHJpdi1cdTAwM2VwaHlfbmFtZSk7XG4gMjQ2Olx0XHRcdHBoeV9zdG9wKHByaXYtXHUwMDNlcGh5ZGV2KTtcbiAyNDc6XHRcdFx0cGh5X2Rpc2Nvbm5lY3QocHJpdi1cdTAwM2VwaHlkZXYpO1xuIDI0ODpcdFx0fVxuIDI0OTpcdFxuIDI1MDpcdFx0cmV0dXJuIDA7XG4gMjUxOlx0fVxuIDI1MjpcdFxuIDI1MzpcdHN0YXRpYyB2b2lkIGF4ODgxNzJhX3VuYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuIDI1NDpcdHtcbiAyNTU6XHRcdHN0cnVjdCBheDg4MTcyYV9wcml2YXRlICpwcml2ID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuIDI1NjpcdFxuIDI1NzpcdFx0YXg4ODE3MmFfcmVtb3ZlX21kaW8oZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg2NjkKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gdGhlIE1ESU8gSW5pdGlhbGl6YXRpb24qKgoKQWxyaWdodCwgdGhlIGNvZGUmIzM5O3MganVtcGluZyBpbnRvIGBheDg4MTcyYV9pbml0X21kaW9gLiBUaGF0JiMzOTtzIHdoZXJlIGl0IGFsbCBzdGFydHMsIHRoZSBNZWRpYSBJbmRlcGVuZGVudCBJbnRlcmZhY2UgKE1JSSkgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBjaGlwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aGlzIGNydWNpYWwgZW50cnkgcG9pbnQuIFdoYXQgYXJlIHRoZSBzcGVjaWZpYyBzdGVwcyB0aGlzIGZ1bmN0aW9uIHRha2VzIHRvIGdldCB0aGUgTURJTyBpbnRlcmZhY2UgdXAgYW5kIHJ1bm5pbmc/IFdlJiMzOTtyZSB0YWxraW5nIFBIWSByZWdpc3RlciBhY2Nlc3MgaGVyZSwgc28gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgc2VxdWVuY2U6IHNldHRpbmcgdXAgdGhlIE1ESU8gY2xvY2ssIGNvbmZpZ3VyaW5nIGFueSBuZWNlc3NhcnkgR1BJTyBwaW5zIChpZiBpdCYjMzk7cyB1c2luZyBhIEdQSU8tYmFzZWQgTURJTyksIGFuZCB0aGVuIGxpa2VseSBzb21lIGluaXRpYWwgd3JpdGUgb3BlcmF0aW9ucyB0byB0aGUgUEhZIHRvIGNvbmZpZ3VyZSBpdHMgYmFzaWMgb3BlcmF0aW5nIG1vZGUsIGxpbmsgc3BlZWQsIGFuZCBhdXRvbmVnb3RpYXRpb24gc2V0dGluZ3MuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBjbG9jayBkaXZpZGVyIGNhbGN1bGF0aW9ucywgcGluIGRpcmVjdGlvbiBzZXR0aW5ncywgYW5kIHRoZSBhY3R1YWwgcmVnaXN0ZXIgd3JpdGUgY29tbWFuZHMgdXNpbmcgd2hhdGV2ZXIgbG93LWxldmVsIE1ESU8gdHJhbnNhY3Rpb24gZnVuY3Rpb25zIGFyZSBwcm92aWRlZCBieSB0aGUgZHJpdmVyLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGl0JiMzOTtzIHVzaW5nIGEgc3RhbmRhcmQgTURJTyBpbnRlcmZhY2Ugb3IgYSB2YXJpYXRpb24sIGFzIHdlbGwgYXMgdGhlIGV4YWN0IFBIWSBhZGRyZXNzIGl0JiMzOTtzIHRhcmdldGluZy4gTGV0JiMzOTtzIHNlZSBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzIGR1cmluZyB0aGVzZSBpbml0aWFsIGFjY2Vzc2VzLiBJJiMzOTttIGtlZW4gdG8gc3BvdCBhbnkgdW51c3VhbCBpbml0aWFsIHJlZ2lzdGVyIHNldHRpbmdzIG9yIGJpdCBtYW5pcHVsYXRpb25zIHRoYXQgbWlnaHQgYmUgY3JpdGljYWwgdG8gdGhpcyBwYXJ0aWN1bGFyIFBIWSYjMzk7cyBiZWhhdmlvci4gSG9wZWZ1bGx5LCBpdCBpbmNsdWRlcyBhZGVxdWF0ZSBlcnJvciBoYW5kbGluZyDigJMgSSYjMzk7bSBob3BpbmcgdG8gc2VlIGEgc29saWQgc3RhdHVzIGNoZWNrIGFmdGVyIGVhY2ggd3JpdGUgYW5kIHJlYWQgdG8gdGhlIFBIWSByZWdpc3RlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F4ODgxNzJhX2luaXRfbWRpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jPTU1PXN0YXRpYyB2b2lkIGF4ODgxNzJhX3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYilcbi0tXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy02MC0vKiB1c2UgcGh5bGliIGluZnJhc3RydWN0dXJlICovXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYzo2MTpzdGF0aWMgaW50IGF4ODgxNzJhX2luaXRfbWRpbyhzdHJ1Y3QgdXNibmV0ICpkZXYpXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy02Mi17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9MTU4PXN0YXRpYyBpbnQgYXg4ODE3MmFfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTIyNS1cdC8qIGluaXQgTURJTyBidXMgKi9cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjIyNjpcdHJldCA9IGF4ODgxNzJhX2luaXRfbWRpbyhkZXYpO1xuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMjI3LVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzNDMKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBheDg4MTcyYV9pbml0X21kaW9gIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBjaGlwJiMzOTtzIE1ESU8gaW50ZXJmYWNlIGlzIGluaXRpYWxpemVkLiBJJiMzOTttIGFzc3VtaW5nLCBnaXZlbiB0aGUgbmFtaW5nLCB0aGF0IHRoaXMgaXMgc3BlY2lmaWNhbGx5IHRpZWQgdG8gdGhlIEFTSVggQVg4ODE3MkEgZXRoZXJuZXQgY29udHJvbGxlciDigJMgd2hpY2ggSSYjMzk7bSBmYW1pbGlhciB3aXRoLCBnaXZlbiBteSBiYWNrZ3JvdW5kLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGluaXRpYWxpemF0aW9uIHRvIGJlIGEgY3JpdGljYWwgc3RlcC4KCk5vdywgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHJlZ2lzdGVyIGFjY2Vzc2VzIGFuZCBhbnkgZGVsYXlzIHVzZWQsIGFzIHRoZXNlIGFyZSBhbGwgaW1wb3J0YW50LiBJIGFudGljaXBhdGUgdGhhdCBpdCB3aWxsIGludm9sdmUgc2V0dGluZyB1cCBjbG9jayBzcGVlZHMsIHBvdGVudGlhbGx5IGNvbmZpZ3VyaW5nIHRoZSBQSFkgYWRkcmVzcyAoaWYgaXQmIzM5O3MgdXNpbmcgYW4gZXh0ZXJuYWwgUEhZKSwgYW5kIGVuYWJsaW5nIHRoZSBNRElPIGludGVyZmFjZSBpdHNlbGYuIEFueSBlcnJvciBoYW5kbGluZyBvciByZXRyeSBtZWNoYW5pc21zIHdpbGwgYmUgZ29vZCB0byBub3RlLCB0b28sIHNpbmNlIHJlbGlhYmxlIGluaXRpYWxpemF0aW9uIGlzIGNydWNpYWwgZm9yIGEgc3RhYmxlIG5ldHdvcmsgY29ubmVjdGlvbi4gSSYjMzk7bGwgYWxzbyBiZSBvbiB0aGUgbG9va291dCBmb3IgYW55IGRldmljZS1zcGVjaWZpYyBxdWlya3Mgb3Igd29ya2Fyb3VuZHMgdGhlIGRyaXZlciBtaWdodCBlbXBsb3kuIFRoaXMgc2hvdWxkIGhvcGVmdWxseSBiZSBzdHJhaWdodGZvcndhcmQ7IGJ1dCBsZXQmIzM5O3MgdGFrZSBhIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYxOlx0c3RhdGljIGludCBheDg4MTcyYV9pbml0X21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxuICA2MjpcdHtcbiAgNjM6XHRcdHN0cnVjdCBheDg4MTcyYV9wcml2YXRlICpwcml2ID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuICA2NDpcdFx0aW50IHJldDtcbiAgNjU6XHRcbiAgNjY6XHRcdHByaXYtXHUwMDNlbWRpbyA9IG1kaW9idXNfYWxsb2MoKTtcbiAgNjc6XHRcdGlmICghcHJpdi1cdTAwM2VtZGlvKSB7XG4gIDY4Olx0XHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7Q291bGQgbm90IGFsbG9jYXRlIE1ESU8gYnVzXFxuXCYjMzQ7KTtcbiAgNjk6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gIDcwOlx0XHR9XG4gIDcxOlx0XG4gIDcyOlx0XHRwcml2LVx1MDAzZW1kaW8tXHUwMDNlcHJpdiA9ICh2b2lkICopZGV2O1xuICA3MzpcdFx0cHJpdi1cdTAwM2VtZGlvLVx1MDAzZXJlYWQgPSBcdTAwMjZhc2l4X21kaW9fYnVzX3JlYWQ7XG4gIDc0Olx0XHRwcml2LVx1MDAzZW1kaW8tXHUwMDNld3JpdGUgPSBcdTAwMjZhc2l4X21kaW9fYnVzX3dyaXRlO1xuICA3NTpcdFx0cHJpdi1cdTAwM2VtZGlvLVx1MDAzZW5hbWUgPSBcJiMzNDtBc2l4IE1ESU8gQnVzXCYjMzQ7O1xuICA3NjpcdFx0LyogbWlpIGJ1cyBuYW1lIGlzIHVzYi1cdTAwM2N1c2IgYnVzIG51bWJlclx1MDAzZS1cdTAwM2N1c2IgZGV2aWNlIG51bWJlclx1MDAzZSAqL1xuICA3NzpcdFx0c25wcmludGYocHJpdi1cdTAwM2VtZGlvLVx1MDAzZWlkLCBNSUlfQlVTX0lEX1NJWkUsIFwmIzM0O3VzYi0lMDNkOiUwM2RcJiMzNDssXG4gIDc4Olx0XHRcdCBkZXYtXHUwMDNldWRldi1cdTAwM2VidXMtXHUwMDNlYnVzbnVtLCBkZXYtXHUwMDNldWRldi1cdTAwM2VkZXZudW0pO1xuICA3OTpcdFxuICA4MDpcdFx0cmV0ID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZW1kaW8pO1xuICA4MTpcdFx0aWYgKHJldCkge1xuICA4MjpcdFx0XHRuZXRkZXZfZXJyKGRldi1cdTAwM2VuZXQsIFwmIzM0O0NvdWxkIG5vdCByZWdpc3RlciBNRElPIGJ1c1xcblwmIzM0Oyk7XG4gIDgzOlx0XHRcdGdvdG8gbWZyZWU7XG4gIDg0Olx0XHR9XG4gIDg1Olx0XG4gIDg2Olx0XHRuZXRkZXZfaW5mbyhkZXYtXHUwMDNlbmV0LCBcJiMzNDtyZWdpc3RlcmVkIG1kaW8gYnVzICVzXFxuXCYjMzQ7LCBwcml2LVx1MDAzZW1kaW8tXHUwMDNlaWQpO1xuICA4NzpcdFx0cmV0dXJuIDA7XG4gIDg4Olx0XG4gIDg5Olx0bWZyZWU6XG4gIDkwOlx0XHRtZGlvYnVzX2ZyZWUocHJpdi1cdTAwM2VtZGlvKTtcbiAgOTE6XHRcdHJldHVybiByZXQ7XG4gIDkyOlx0fVxuICA5MzpcdFxuICA5NDpcdHN0YXRpYyB2b2lkIGF4ODgxNzJhX3JlbW92ZV9tZGlvKHN0cnVjdCB1c2JuZXQgKmRldilcbiAgOTU6XHR7XG4gIDk2Olx0XHRzdHJ1Y3QgYXg4ODE3MmFfcHJpdmF0ZSAqcHJpdiA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbiAgOTc6XHRcbiAgOTg6XHRcdG5ldGRldl9pbmZvKGRldi1cdTAwM2VuZXQsIFwmIzM0O2RlcmVnaXN0ZXJpbmcgbWRpbyBidXMgJXNcXG5cJiMzNDssIHByaXYtXHUwMDNlbWRpby1cdTAwM2VpZCk7XG4gIDk5Olx0XHRtZGlvYnVzX3VucmVnaXN0ZXIocHJpdi1cdTAwM2VtZGlvKTtcbiAxMDA6XHRcdG1kaW9idXNfZnJlZShwcml2LVx1MDAzZW1kaW8pO1xuIDEwMTpcdH1cbiAxMDI6XHRcbiAxMDM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGF4ODgxNzJhX25ldGRldl9vcHMgPSB7XG4gMTA0Olx0XHQubmRvX29wZW5cdFx0PSB1c2JuZXRfb3BlbixcbiAxMDU6XHRcdC5uZG9fc3RvcFx0XHQ9IHVzYm5ldF9zdG9wLFxuIDEwNjpcdFx0Lm5kb19zdGFydF94bWl0XHRcdD0gdXNibmV0X3N0YXJ0X3htaXQsXG4gMTA3Olx0XHQubmRvX3R4X3RpbWVvdXRcdFx0PSB1c2JuZXRfdHhfdGltZW91dCxcbiAxMDg6XHRcdC5uZG9fY2hhbmdlX210dVx0XHQ9IHVzYm5ldF9jaGFuZ2VfbXR1LFxuIDEwOTpcdFx0Lm5kb19nZXRfc3RhdHM2NFx0PSBkZXZfZ2V0X3RzdGF0czY0LFxuIDExMDpcdFx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcdD0gYXNpeF9zZXRfbWFjX2FkZHJlc3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNDgxCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1ESU8gQnVzIEludGVyYWN0aW9uIGZvciBFbXVsYXRlZCBVU0IgRGV2aWNlKioKCk9rYXksIHNvIGlmIEkmIzM5O20gdW5kZXJzdGFuZGluZyB0aGlzIGNvcnJlY3RseSwgdXNpbmcgYG1kaW9idXNfcmVnaXN0ZXJgIGlzIHRoZSBrZXkuIFRoYXQgZnVuY3Rpb24gaGFuZGxlcyBzY2FubmluZyB0aGUgTURJTyBidXMgYW5kIHByb2JpbmcgYW55IFBIWSBkZXZpY2VzIHRoYXQgYXJlIHByZXNlbnQuIEkgdGhpbmsgdGhpcyBjYW4gd29yayB3aXRoIHRoZSBVU0IgZGV2aWNlIGVtdWxhdGlvbiDigJMgd2UgY2FuIGludGVyY2VwdCBhbmQgcmVzcG9uZCB0byBgYXNpeF9tZGlvX2J1c19yZWFkYCBjYWxscywgYW5kIHNwZWNpZmljYWxseSwgd2UgY2FuIHJlcG9ydCB0aGUgUEhZIElEIGZvciB0aGUgYFJUTF84MjYxQ19DR2AgYXMgMHgwMDFjYzg5OC4gSWYgdGhhdCYjMzk7cyB3aGF0IHdlIGRvLCBgbWRpb2J1c19yZWdpc3RlcmAgc2hvdWxkIHRoZW4gY3JlYXRlIGEgUEhZIGRldmljZSBvYmplY3QgYW5kIGJpbmQgaXQgdG8gdGhlIGByZWFsdGVrX21haW4uY2AgZHJpdmVyLCB3aGljaCBpcyB3aGF0IHdlIG5lZWQuCgpCdXQgaG9sZCBvbuKApiBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcuIElzIGBSVExfODI2MUNfQ0dgIGEgQ2xhdXNlIDQ1IFBIWSBvciBhIENsYXVzZSAyMiBQSFk/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYHJlYWx0ZWtfbWFpbi5jYCB0byBiZSBjZXJ0YWluLiBHb3R0YSBlbnN1cmUgd2UmIzM5O3JlIGFsaWduaW5nIHdpdGggaG93IHRoYXQgZHJpdmVyIGV4cGVjdHMgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgUEhZLiBOZWVkIHRvIHZlcmlmeSB0aGF0IGJlZm9yZSBwcm9jZWVkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtSVExfODI2MUNfQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYy0yNTktI2RlZmluZSBSVExfODI2MUNcdFx0XHRcdDB4MDAxY2M4OTBcbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jOjI2MDojZGVmaW5lIFJUTF84MjYxQ19DR1x0XHRcdFx0MHgwMDFjYzg5OFxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMtMjYxLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jPTMwODY9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHJlYWx0ZWtfZHJ2c1tdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jLTM0MDMtXHR9LCB7XG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYzozNDA0Olx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUlRMXzgyNjFDX0NHKSxcbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jLTM0MDUtXHRcdC5uYW1lXHRcdFx0PSBcJiMzNDtSZWFsdGVrIFJUTDgyNjEgMTBHYnBzIFBIWVwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzExODQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQSFkgSUQgTWF0Y2gqKgoKT2theSwgc28gdGhlIGNvZGUgaW5kaWNhdGVzIHRoYXQgYFBIWV9JRF9NQVRDSF9FWEFDVGAgbWVhbnMgYSBkaXJlY3QgbWF0Y2ggb24gdGhlIFBIWSBJRC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEJ1dCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgd2hhdCBraW5kIG9mIFBIWSBhcmUgd2UgZGVhbGluZyB3aXRoPyBCYXNlZCBvbiB0aGF0IGluaXRpYWwgbWF0Y2gsIGlzIHRoaXMgYSBDbGF1c2UgNDUgUEhZLCBzcGVjaWZpY2FsbHk/IExvb2tpbmcgYXQgdGhlIGByZWFsdGVrX21haW4uY2AgZHJpdmVyLCBJIHNlZSBmdW5jdGlvbnMgYmVpbmcgY2FsbGVkIHN1Y2ggYXMgYGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXRgLCBgZ2VucGh5X2M0NV9wbWFfc3VzcGVuZGAsIGBnZW5waHlfYzQ1X3BtYV9yZXN1bWVgLCBgZ2VucGh5X2M0NV9jb25maWdfYW5lZ2AsIGFuZCBgZ2VucGh5X2M0NV9yZWFkX3N0YXR1c2AuIFRoZSBwcmVzZW5jZSBvZiB0aGVzZSBgZ2VucGh5X2M0NWAgZnVuY3Rpb25zIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQsIHllcywgaXQmIzM5O3MgdmVyeSBsaWtlbHkgYSBDbGF1c2UgNDUgUEhZLiBUaGlzIGlzIGV4Y2VsbGVudCEKCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGNhbiB0aGUgYGF4ODgxNzJhYCBkcml2ZXIgYWN0dWFsbHkgKnJlYWQqIHRoZXNlIENsYXVzZSA0NSBQSFkgcmVnaXN0ZXJzPyBUaGF0JiMzOTtzIHRoZSBrZXkuIExldCBtZSBxdWlja2x5IGV4YW1pbmUgYGFzaXhfbWRpb19idXNfcmVhZGAgdG8gc2VlIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZC4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgcmVnaXN0ZXJzIHRvIG1ha2UgYW55IHByb2dyZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthc2l4X21kaW9fYnVzX3JlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9hc2l4Lmg9MjMyPXZvaWQgYXNpeF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlfaWQsIGludCBsb2MsIGludCB2YWwpO1xuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMzMtXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjIzNDppbnQgYXNpeF9tZGlvX2J1c19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0pO1xuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMzUtaW50IGFzaXhfbWRpb19idXNfd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSwgdTE2IHZhbCk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9NTQzPXZvaWQgYXNpeF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlfaWQsIGludCBsb2MsIGludCB2YWwpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNTQ4LS8qIE1ESU8gcmVhZCBhbmQgd3JpdGUgd3JhcHBlcnMgZm9yIHBoeWxpYiAqL1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6NTQ5OmludCBhc2l4X21kaW9fYnVzX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSlcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTU1MC17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTY2OT1zdGF0aWMgaW50IGF4ODg3NzJfaW5pdF9tZGlvKHN0cnVjdCB1c2JuZXQgKmRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjc4LVx0cHJpdi1cdTAwM2VtZGlvLVx1MDAzZXByaXYgPSBkZXY7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6Njc5Olx0cHJpdi1cdTAwM2VtZGlvLVx1MDAzZXJlYWQgPSBcdTAwMjZhc2l4X21kaW9fYnVzX3JlYWQ7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjgwLVx0cHJpdi1cdTAwM2VtZGlvLVx1MDAzZXdyaXRlID0gXHUwMDI2YXNpeF9tZGlvX2J1c193cml0ZTtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz02MT1zdGF0aWMgaW50IGF4ODgxNzJhX2luaXRfbWRpbyhzdHJ1Y3QgdXNibmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtNzItXHRwcml2LVx1MDAzZW1kaW8tXHUwMDNlcHJpdiA9ICh2b2lkICopZGV2O1xuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6NzM6XHRwcml2LVx1MDAzZW1kaW8tXHUwMDNlcmVhZCA9IFx1MDAyNmFzaXhfbWRpb19idXNfcmVhZDtcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTc0LVx0cHJpdi1cdTAwM2VtZGlvLVx1MDAzZXdyaXRlID0gXHUwMDI2YXNpeF9tZGlvX2J1c193cml0ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIyNTMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBhc2l4X21kaW9fYnVzX3JlYWRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgaG93IGl0JiMzOTtzIGltcGxlbWVudGVkLiBNeSBleHBlcnRpc2UgbGllcyBpbiBlbWJlZGRlZCBzeXN0ZW1zLCBzbyBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcGFyc2luZyBpdCBmb3IgcG90ZW50aWFsIGlzc3VlcyBsaWtlIHJhY2UgY29uZGl0aW9ucywgcmVnaXN0ZXIgYWNjZXNzIG1lY2hhbmlzbXMsIGFuZCB0aW1pbmcgY29uc3RyYWludHMuIEkmIzM5O20gYXNzdW1pbmcgdGhpcyBpcyByZWxhdGVkIHRvIGEgTWVkaWEgSW5kZXBlbmRlbnQgSW50ZXJmYWNlIChNSUkpIGJ1cywgbGlrZWx5IGZvciBhbiBFdGhlcm5ldCBQSFkuIEdpdmVuIHRoZSBgYXNpeGAgcHJlZml4LCBJJiMzOTtkIGd1ZXNzIHRoaXMgaXMgcmVsYXRlZCB0byBhbiBBU0lYIGNoaXBzZXQsIG1lYW5pbmcgSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGVpciBpZGlvc3luY3Jhc2llcyBpZiBhbnkuIExldCYjMzk7cyBzZWUgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyB0aGUgcmVhZCBjeWNsZS4gSXMgaXQgdXNpbmcgcG9sbGVkIG9yIGludGVycnVwdC1kcml2ZW4gbWV0aG9kcz8gV2hhdCYjMzk7cyB0aGUgZXJyb3IgaGFuZGxpbmcgbGlrZT8gSSYjMzk7bSBob3BpbmcgdG8gc2VlIGNsZWFuIHNlcGFyYXRpb24gb2YgY29uY2VybnM6IGNsZWFyIGRhdGEgc3RydWN0dXJlIGZvciBob2xkaW5nIHRoZSBNRElPIGJ1cyBzdGF0ZSBhbmQgc3RyYWlnaHRmb3J3YXJkIHJlZ2lzdGVyIGFjY2VzcyBmdW5jdGlvbnMgd2l0aCBwcm9wZXIgZXJyb3IgY2hlY2tpbmcuIEkmIzM5O20ga2VlbiB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIGZvciBiaXQtYmFuZ2luZywgYW55IGJpdC1zaGlmdGluZyBvcGVyYXRpb25zIGFuZCB0aGUgdXNlIG9mIHZvbGF0aWxlIHBvaW50ZXJzIHRoYXQgY291bGQgaW50cm9kdWNlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzZXF1ZW5jaW5nLCB0aGUgY2xvY2sgZ2VuZXJhdGlvbiwgYW5kIHRoZSBkYXRhIHRyYW5zbWlzc2lvbi4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCYjMzk7cyBkb2luZyBpdCByaWdodCBhbmQgZWZmaWNpZW50bHkuIEkmIzM5O20gYWxzbyB3YXRjaGluZyBvdXQgZm9yIGFueSBwb3RlbnRpYWwgbG9jay11cHMgb3IgaW5maW5pdGUgbG9vcHMuIEZpbmFsbHksIGlzIHRoZXJlIGFueSBwb3RlbnRpYWwgZm9yIGRhdGEgY29ycnVwdGlvbiBnaXZlbiB0aGUgY29tbXVuaWNhdGlvbiBlbnZpcm9ubWVudD8gT2theSwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQ5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NDk6XHRpbnQgYXNpeF9tZGlvX2J1c19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0pXG4gNTUwOlx0e1xuIDU1MTpcdFx0c3RydWN0IHVzYm5ldCAqcHJpdiA9IGJ1cy1cdTAwM2Vwcml2O1xuIDU1MjpcdFxuIDU1MzpcdFx0cmV0dXJuIF9fYXNpeF9tZGlvX3JlYWQocHJpdi1cdTAwM2VuZXQsIHBoeV9pZCwgcmVnbnVtLCBmYWxzZSk7XG4gNTU0Olx0fVxuIDU1NTpcdFxuIDU1NjpcdGludCBhc2l4X21kaW9fYnVzX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0sIHUxNiB2YWwpXG4gNTU3Olx0e1xuIDU1ODpcdFx0c3RydWN0IHVzYm5ldCAqcHJpdiA9IGJ1cy1cdTAwM2Vwcml2O1xuIDU1OTpcdFxuIDU2MDpcdFx0cmV0dXJuIF9fYXNpeF9tZGlvX3dyaXRlKHByaXYtXHUwMDNlbmV0LCBwaHlfaWQsIHJlZ251bSwgdmFsLCBmYWxzZSk7XG4gNTYxOlx0fVxuIDU2MjpcdFxuIDU2MzpcdGludCBhc2l4X21kaW9fcmVhZF9ub3BtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlfaWQsIGludCBsb2MpXG4gNTY0Olx0e1xuIDU2NTpcdFx0cmV0dXJuIF9fYXNpeF9tZGlvX3JlYWQobmV0ZGV2LCBwaHlfaWQsIGxvYywgdHJ1ZSk7XG4gNTY2Olx0fVxuIDU2NzpcdFxuIDU2ODpcdHZvaWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI5MzQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDbGF1c2UgNDUgUmVnaXN0ZXIgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBob2xkIG9uIGEgbWludXRlLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoaXMgYHJlZ251bWAgcGFyYW1ldGVyLCBhbmQgaXQganVzdCBzdHJ1Y2sgbWU6IGByZWdudW1gIGNvdWxkIHZlcnkgd2VsbCBiZSBhIENsYXVzZSA0NSByZWdpc3RlciBhZGRyZXNzLiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBkaXN0aW5jdGlvbiwgYmVjYXVzZSBpZiBpdCAqaXMqIENsYXVzZSA0NSwgdGhlbiB0aGF0IGBNSUlfQUREUl9DNDVgIGJpdCwgb3IgYDB4NDAwMDAwMDBgLCBpcyBnb2luZyB0byBiZSBzZXQuIFRoZSByZWFsIHF1ZXN0aW9uIGlzOiBkb2VzIHRoZSBgX19hc2l4X21kaW9fcmVhZGAgZnVuY3Rpb24gZXZlbiBoYW5kbGUgQ2xhdXNlIDQ1IHJlZ2lzdGVycyBjb3JyZWN0bHk/IElmIGl0IGRvZXNuJiMzOTt0IGhhdmUgdGhlIGFwcHJvcHJpYXRlIGxvZ2ljLCBpdCBjb3VsZCBqdXN0IHRydW5jYXRlIHRoZSBhZGRyZXNzLCBtYW5nbGUgdGhlIHJlYWQsIG9yIHdvcnNlLCBvdXRyaWdodCBmYWlsLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYF9fYXNpeF9tZGlvX3JlYWRgIGFuZCBzZWUgaG93IGl0JiMzOTtzIGFjdHVhbGx5IGltcGxlbWVudGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNhcGFibGUgb2YgZGVhbGluZyB3aXRoIHRoZSBwb3RlbnRpYWxseSBzaWduaWZpY2FudCBkaWZmZXJlbmNlIGluIGFkZHJlc3NpbmcgbW9kZXMuIFRoaXMgY291bGQgYmUgdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGlzc3VlIEkmIzM5O20gc2VlaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MDA6XHRcdHJldCA9IGFzaXhfc2V0X2h3X21paShkZXYsIGluX3BtKTtcbiA1MDE6XHRvdXQ6XG4gNTAyOlx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZXBoeV9tdXRleCk7XG4gNTAzOlx0XG4gNTA0Olx0XHRuZXRkZXZfZGJnKGRldi1cdTAwM2VuZXQsIFwmIzM0O2FzaXhfbWRpb19yZWFkKCkgcGh5X2lkPTB4JTAyeCwgbG9jPTB4JTAyeCwgcmV0dXJucz0weCUwNHhcXG5cJiMzNDssXG4gNTA1Olx0XHRcdFx0cGh5X2lkLCBsb2MsIGxlMTZfdG9fY3B1KHJlcykpO1xuIDUwNjpcdFxuIDUwNzpcdFx0cmV0dXJuIHJldCBcdTAwM2MgMCA/IHJldCA6IGxlMTZfdG9fY3B1KHJlcyk7XG4gNTA4Olx0fVxuIDUwOTpcdFxuIDUxMDpcdGludCBhc2l4X21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jKVxuIDUxMTpcdHtcbiA1MTI6XHRcdHJldHVybiBfX2FzaXhfbWRpb19yZWFkKG5ldGRldiwgcGh5X2lkLCBsb2MsIGZhbHNlKTtcbiA1MTM6XHR9XG4gNTE0Olx0XG4gNTE1Olx0c3RhdGljIGludCBfX2FzaXhfbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jLFxuIDUxNjpcdFx0XHRcdCAgICAgaW50IHZhbCwgYm9vbCBpbl9wbSlcbiA1MTc6XHR7XG4gNTE4Olx0XHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIDUxOTpcdFx0X19sZTE2IHJlcyA9IGNwdV90b19sZTE2KHZhbCk7XG4gNTIwOlx0XHRpbnQgcmV0O1xuIDUyMTpcdFxuIDUyMjpcdFx0bmV0ZGV2X2RiZyhkZXYtXHUwMDNlbmV0LCBcJiMzNDthc2l4X21kaW9fd3JpdGUoKSBwaHlfaWQ9MHglMDJ4LCBsb2M9MHglMDJ4LCB2YWw9MHglMDR4XFxuXCYjMzQ7LFxuIDUyMzpcdFx0XHRcdHBoeV9pZCwgbG9jLCB2YWwpO1xuIDUyNDpcdFxuIDUyNTpcdFx0bXV0ZXhfbG9jayhcdTAwMjZkZXYtXHUwMDNlcGh5X211dGV4KTtcbiA1MjY6XHRcbiA1Mjc6XHRcdHJldCA9IGFzaXhfY2hlY2tfaG9zdF9lbmFibGUoZGV2LCBpbl9wbSk7XG4gNTI4Olx0XHRpZiAocmV0ID09IC1FTk9ERVYpXG4gNTI5Olx0XHRcdGdvdG8gb3V0O1xuIDUzMDpcdFxuIDUzMTpcdFx0cmV0ID0gYXNpeF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfTUlJX1JFRywgcGh5X2lkLCAoX191MTYpbG9jLCAyLFxuIDUzMjpcdFx0XHRcdCAgICAgXHUwMDI2cmVzLCBpbl9wbSk7XG4gNTMzOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDUzNDpcdFx0XHRnb3RvIG91dDtcbiA1MzU6XHRcbiA1MzY6XHRcdHJldCA9IGFzaXhfc2V0X2h3X21paShkZXYsIGluX3BtKTtcbiA1Mzc6XHRvdXQ6XG4gNTM4Olx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZXBoeV9tdXRleCk7XG4gNTM5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzOTgxCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBDbGF1c2UgNDUgTUlJIFJlYWQgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBgbG9jYCBiZWluZyBjYXN0IHRvIGBfX3UxNmAuIFRoYXQmIzM5O3MgYSByZWQgZmxhZy4gU3BlY2lmaWNhbGx5LCBgTUlJX0FERFJfQzQ1YCAoMHg0MDAwMDAwMCkgaXMgZ29pbmcgdG8gZ2V0IHRydW5jYXRlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBjb3VsZCBiZSBhIHByb2JsZW0uIEJ1dCB3YWl0LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciBob3cgdGhlIE1ESU8gYnVzIG9wZXJhdGVzLgoKYG1kaW9idXNfcmVhZGAsIGluIGBkcml2ZXJzL25ldC9waHkvbWRpb19idXMuY2AsIGhhbmRsZXMgQ2xhdXNlIDQ1IHJlYWRzIGRpZmZlcmVudGx5LiBJdCBmaXJzdCBjaGVja3MgaWYgdGhlIGJ1cyBoYXMgYSBgcmVhZF9jNDVgIGZ1bmN0aW9uIHBvaW50ZXIuIElmIGl0IGRvZXMsIGdyZWF0LCBpdCB1c2VzIHRoYXQuIElmIG5vdCwgaXQgZmFsbHMgYmFjayB0byB0aGUgcmVndWxhciBgYnVzLSZndDtyZWFkYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZy4KCkhvd2V2ZXIsIGEgcXVpY2sgc2Vjb25kIHBhc3MgY29uZmlybXMgdGhhdCBpZiB0aGUgUEhZIGRyaXZlciByZWxpZXMgb24gYHBoeV9yZWFkX21tZGAsIGl0IHdpbGwgZXZlbnR1YWxseSBjYWxsIGBidXMtJmd0O3JlYWRfYzQ1YCBvciBgYnVzLSZndDtyZWFkYCB3aXRoIGBNSUlfQUREUl9DNDVgLgoKU28sIHRoZSBpc3N1ZSBpcyB0aGF0IGlmIGBhc2l4X21kaW9fYnVzX3JlYWRgIHRydW5jYXRlcyBgTUlJX0FERFJfQzQ1YCwgd2UgYXJlIGxpa2VseSBnb2luZyB0byByZWFkIGEgQ2xhdXNlIDIyIHJlZ2lzdGVyIGluc3RlYWQuIFBvdGVudGlhbGx5IGEgdnVsbmVyYWJpbGl0eSBpZiB0aGF0IHJlYWQgZXhwb3NlcyBzb21ldGhpbmcgaXQgc2hvdWxkbiYjMzk7dC4KCk5vdywgdGhlIHBhdGNoIGluIHF1ZXN0aW9uIGlzIGluIGByZWFsdGVrX21haW4uY2AsIHdoaWNoIGlzIGEgUEhZIGRyaXZlci4gQWhhISBTbyBpdCAqc2hvdWxkbiYjMzk7dCogYmUgdXNpbmcgdGhlIGBhc2l4X21kaW9fYnVzX3JlYWRgIGZ1bmN0aW9uIQoKVGhlIHF1ZXN0aW9uIG5vdyBiZWNvbWVzOiBIb3cgY2FuIEkgdHJpZ2dlciB0aGlzIHNjZW5hcmlvIGFuZCB0ZXN0IGlmIHRoaXMgdHJ1bmNhdGlvbiBsZWFkcyB0byBhbiBleHBsb2l0YWJsZSByZWFkPyBDYW4gSSB1c2Ugc29tZXRoaW5nIGxpa2UgYG1kaW8tbW9ja3VwYD8gTGV0JiMzOTtzIGNoZWNrLiBEb2VzIGl0IGV4aXN0IG9yIGhvdyBjYW4gSSBpbnN0YW50aWF0ZSBhIFBIWT8gSXMgdGhlcmUgYSB1c2VyLXNwYWNlIHdheSB0byBtZXNzIHdpdGggdGhlIGRyaXZlcnM/IEFoLCBgc3lzZnNgLi4uIGFsd2F5cyBhIGdvb2QgYmV0LgoKV2FpdCwgSSB0aG91Z2h0IHRoZXJlIHdhcyBhIGBtZGlvLW1vY2t1cC5jYD8gTm8uIE9rYXksIEkgc2VhcmNoZWQgdGhlIHJpZ2h0IHBhdGggYW5kIG5vdGhpbmcuIE1heWJlIEkgbWlzc2VkIHNvbWV0aGluZyBvciBtaXMtcmVtZW1iZXJlZCB0aGUgZHJpdmVyIGxvY2F0aW9uLiBJIHdpbGwgc2VhcmNoIGBkcml2ZXJzL25ldC9gIGZvciBgbW9ja3VwYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9ja3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTQ0Nj1zdGF0aWMgaW50IF9faW5pdCBkc2FfbG9vcF9jcmVhdGVfc3dpdGNoX21kaW9kZXYodm9pZClcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NTUtXHRcdH0sXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NTY6XHRcdC5uYW1lID0gXCYjMzQ7RFNBIG1vY2t1cCBkcml2ZXJcJiMzNDssXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NTctXHRcdC5lbmFibGVkX3BvcnRzID0gMHgxZixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ5ODQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHM6CgoqKkV2YWx1YXRpbmcgUEhZIExheWVyIE9wdGlvbnMqKgoKUmlnaHQsIHNvIHRoZSBgbWRpby1tb2NrdXBgIGFwcHJvYWNoIGlzbiYjMzk7dCBnb2luZyB0byBjdXQgaXQgZm9yIHRoaXMgcHJvamVjdC4gVGhhdCYjMzk7cyBhIGRlZmluaXRlIG5vLWdvLiBJIG5lZWQgdG8gcGl2b3QgYW5kIGNvbnNpZGVyIG15IG9wdGlvbnMgZm9yIHRoZSBQSFkgbGF5ZXIuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgdG8gZXhwbG9yZSBgZml4ZWQtcGh5YC4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byB0aGUgaW1wbGljYXRpb25zIG9mIHVzaW5nIHRoYXQgaW5zdGVhZC4gVGhlIHdob2xlICYjMzk7bW9ja3VwJiMzOTsgaWRlYSBpc24mIzM5O3Qgcm9idXN0IG9yIHNjYWxhYmxlIGVub3VnaCBmb3Igd2hhdCBJIGhhdmUgaW4gbWluZCwgc28gSSYjMzk7bSBrZWVuIHRvIGV2YWx1YXRlIGEgbW9yZSBjb25jcmV0ZSBzb2x1dGlvbiBpbW1lZGlhdGVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zml4ZWRfcGh5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9NjM9b2JqLSQoQ09ORklHX0RQODNURzcyMF9QSFkpXHQmIzQzOz0gZHA4M3RnNzIwLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfRklYRURfUEhZKVx0XHQmIzQzOz0gZml4ZWRfcGh5Lm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS02NS1vYmotJChDT05GSUdfSUNQTFVTX1BIWSlcdCYjNDM7PSBpY3BsdXMub1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0yNy1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoyODpzdHJ1Y3QgZml4ZWRfcGh5IHtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0yOS1cdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MzA6XHRzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyBzdGF0dXM7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MzE6XHRpbnQgKCpsaW5rX3VwZGF0ZSkoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKik7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMzItfTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0zMy1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzozNDpzdGF0aWMgREVDTEFSRV9CSVRNQVAoZml4ZWRfcGh5X2lkcywgTlVNX0ZQKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzozNTpzdGF0aWMgc3RydWN0IGZpeGVkX3BoeSBmbWJfZml4ZWRfcGh5c1tOVU1fRlBdO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTM2LXN0YXRpYyBzdHJ1Y3QgbWlpX2J1cyAqZm1iX21paV9idXM7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMzctXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6Mzg6c3RhdGljIHN0cnVjdCBmaXhlZF9waHkgKmZpeGVkX3BoeV9maW5kKGludCBhZGRyKVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTM5LXtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo0MDpcdHJldHVybiB0ZXN0X2JpdChhZGRyLCBmaXhlZF9waHlfaWRzKSA/IGZtYl9maXhlZF9waHlzICYjNDM7IGFkZHIgOiBOVUxMO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTQxLX1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy00Mi1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo0MzppbnQgZml4ZWRfcGh5X2NoYW5nZV9jYXJyaWVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgbmV3X2NhcnJpZXIpXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNDQte1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTQ1LVx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IGRldi1cdTAwM2VwaHlkZXY7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NDY6XHRzdHJ1Y3QgZml4ZWRfcGh5ICpmcDtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy00Ny1cbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNTAtXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NTE6XHRmcCA9IGZpeGVkX3BoeV9maW5kKHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTUyLVx0aWYgKCFmcClcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNTgtfVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjU5OkVYUE9SVF9TWU1CT0xfR1BMKGZpeGVkX3BoeV9jaGFuZ2VfY2Fycmllcik7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNjAtXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM9NjE9c3RhdGljIGludCBmaXhlZF9tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcmVnX251bSlcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy02Mi17XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NjM6XHRzdHJ1Y3QgZml4ZWRfcGh5ICpmcDtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy02NC1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo2NTpcdGZwID0gZml4ZWRfcGh5X2ZpbmQocGh5X2FkZHIpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTY2LVx0aWYgKCFmcClcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM9NzU9c3RhdGljIGludCBmaXhlZF9tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IHJlZ19udW0sXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTg1LSAqL1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjg2OmludCBmaXhlZF9waHlfc2V0X2xpbmtfdXBkYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtODctXHRcdFx0ICAgICAgaW50ICgqbGlua191cGRhdGUpKHN0cnVjdCBuZXRfZGV2aWNlICosXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6ODg6XHRcdFx0XHRcdFx0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICopKVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTg5LXtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo5MDpcdHN0cnVjdCBmaXhlZF9waHkgKmZwO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTkxLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy05NC1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo5NTpcdGZwID0gZml4ZWRfcGh5X2ZpbmQocGh5ZGV2LVx1MDAzZW1kaW8uYWRkcik7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtOTYtXHRpZiAoIWZwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMDMtfVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjEwNDpFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfc2V0X2xpbmtfdXBkYXRlKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMDUtXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTA2OnN0YXRpYyB2b2lkIGZpeGVkX3BoeV9kZWwoaW50IHBoeV9hZGRyKVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEwNy17XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTA4Olx0c3RydWN0IGZpeGVkX3BoeSAqZnA7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTA5LVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjExMDpcdGZwID0gZml4ZWRfcGh5X2ZpbmQocGh5X2FkZHIpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTExMS1cdGlmICghZnApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTExNC1cdG1lbXNldChmcCwgMCwgc2l6ZW9mKCpmcCkpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjExNTpcdGNsZWFyX2JpdChwaHlfYWRkciwgZml4ZWRfcGh5X2lkcyk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTE2LX1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMTctXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTE4OnN0YXRpYyBpbnQgZml4ZWRfcGh5X2dldF9mcmVlX2FkZHIodm9pZClcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMTkte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMjItXHRkbyB7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTIzOlx0XHRhZGRyID0gZmluZF9maXJzdF96ZXJvX2JpdChmaXhlZF9waHlfaWRzLCBOVU1fRlApO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEyNC1cdFx0aWYgKGFkZHIgPT0gTlVNX0ZQKVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEyNS1cdFx0XHRyZXR1cm4gLUVOT1NQQztcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMjY6XHR9IHdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KGFkZHIsIGZpeGVkX3BoeV9pZHMpKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMjctXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEzMC1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMzE6c3RydWN0IHBoeV9kZXZpY2UgKmZpeGVkX3BoeV9yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdHVzLFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEzMi1cdFx0XHRcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE0NS1cdC8qIEdldCB0aGUgbmV4dCBhdmFpbGFibGUgUEhZIGFkZHJlc3MsIHVwIHRvIE5VTV9GUCAqL1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE0NjpcdHBoeV9hZGRyID0gZml4ZWRfcGh5X2dldF9mcmVlX2FkZHIoKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNDctXHRpZiAocGh5X2FkZHIgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE0OS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNTA6XHRmbWJfZml4ZWRfcGh5c1twaHlfYWRkcl0uc3RhdHVzID0gKnN0YXR1cztcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNTE6XHRmbWJfZml4ZWRfcGh5c1twaHlfYWRkcl0uc3RhdHVzLmxpbmsgPSB0cnVlO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE1Mi1cbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTU0LVx0aWYgKElTX0VSUihwaHkpKSB7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTU1Olx0XHRmaXhlZF9waHlfZGVsKHBoeV9hZGRyKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNTYtXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNjYtXHRcdG9mX25vZGVfcHV0KG5wKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNjc6XHRcdGZpeGVkX3BoeV9kZWwocGh5X2FkZHIpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE2OC1cdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTcyLX1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNzM6RVhQT1JUX1NZTUJPTF9HUEwoZml4ZWRfcGh5X3JlZ2lzdGVyKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNzQtXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTc1OnN0cnVjdCBwaHlfZGV2aWNlICpmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQodm9pZClcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNzYte1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE3NzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyBzdGF0dXMgPSB7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTc4LVx0XHQuc3BlZWRcdD0gU1BFRURfMTAwLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xODEtXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTgyOlx0cmV0dXJuIGZpeGVkX3BoeV9yZWdpc3RlcihcdTAwMjZzdGF0dXMsIE5VTEwpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE4My19XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTg0OkVYUE9SVF9TWU1CT0xfR1BMKGZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTg1LVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE4Njp2b2lkIGZpeGVkX3BoeV91bnJlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTg3LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTg5LVx0b2Zfbm9kZV9wdXQocGh5LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGUpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE5MDpcdGZpeGVkX3BoeV9kZWwocGh5LVx1MDAzZW1kaW8uYWRkcik7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTkxLVx0cGh5X2RldmljZV9mcmVlKHBoeSk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTkyLX1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxOTM6RVhQT1JUX1NZTUJPTF9HUEwoZml4ZWRfcGh5X3VucmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE5NC1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTMzNjA9c3RhdGljIGludCBwaHlsaW5rX21paV9lbXVsX3JlYWQodW5zaWduZWQgaW50IHJlZyxcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMzNjIte1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozMzYzOlx0c3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgZnM7XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMzNjQtXHR1bnNpZ25lZCBsb25nICpscGEgPSBzdGF0ZS1cdTAwM2VscF9hZHZlcnRpc2luZztcbi0tXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy00LSAqXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYzo1OiAqIENvZGUgdGFrZW4gZnJvbSBmaXhlZF9waHkuYyBieSBSdXNzZWxsIEtpbmcuXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy02LSAqXG4tLVxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM9NzE9c3RhdGljIGludCBzd3BoeV9kZWNvZGVfc3BlZWQoaW50IHNwZWVkKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jLTkyLSAqL1xuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM6OTM6aW50IHN3cGh5X3ZhbGlkYXRlX3N0YXRlKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0ZSlcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jLTk0LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYz0xMDY9RVhQT1JUX1NZTUJPTF9HUEwoc3dwaHlfdmFsaWRhdGVfc3RhdGUpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jLTExNC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jOjExNTppbnQgc3dwaHlfcmVhZF9yZWcoaW50IHJlZywgY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXRlKVxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtMTE2LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuaC00LVxuZHJpdmVycy9uZXQvcGh5L3N3cGh5Lmg6NTpzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cztcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5oLTYtXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuaDo3OmludCBzd3BoeV92YWxpZGF0ZV9zdGF0ZShjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdGUpO1xuZHJpdmVycy9uZXQvcGh5L3N3cGh5Lmg6ODppbnQgc3dwaHlfcmVhZF9yZWcoaW50IHJlZywgY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXRlKTtcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5oLTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MzA3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipBbmFseXppbmcgUEhZIERyaXZlciBJbnN0YW50aWF0aW9uKioKCldhaXQgYSBtaW51dGUsIEkmIzM5O20gZ2V0dGluZyBtaXhlZCB1cC4gYGZpeGVkX3BoeWAgaXNuJiMzOTt0IG1lYW50IGZvciBkeW5hbWljYWxseSBjcmVhdGluZyBQSFkgZHJpdmVycywgaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IGZvciBmaXhlZC1saW5rIGNvbmZpZ3VyYXRpb25zLiBUaGF0JiMzOTtzIG5vdCBnb2luZyB0byB3b3JrLiBEYW1uLCBzbywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGluc3RhbnRpYXRlIHRoZXNlIFBIWSBkcml2ZXJzICp3aXRob3V0KiB0aGUgdHJhZGl0aW9uYWwgZml4ZWQtbGluayBhcHByb2FjaC4KCk9rYXksIGxldCYjMzk7cyBleHBsb3JlIG90aGVyIGF2ZW51ZXMuIFdoYXQgYWJvdXQgbGV2ZXJhZ2luZyBgc3l6X2dlbmV0bGlua2Agb3IsIGNvdWxkIEkgdXNlIGBzeXpfdXNiX2Nvbm5lY3RgIGluc3RlYWQ/IElmIEkgZ28gd2l0aCBgc3l6X3VzYl9jb25uZWN0YCwgY291bGQgSSBlbXVsYXRlIGEgVVNCIGRldmljZSB0aGF0JiMzOTtzIGNvbXBhdGlibGUgd2l0aCBvbmUgb2YgdGhlIHRhcmdldCBkcml2ZXJzLCBtYXliZSBgYXg4ODE3MmFgLCBgc21zYzk1eHhgLCBgbGFuNzh4eGAsIG9yIGByODE1MmA/CgpIb2xkIG9uLi4uIEkmIzM5O20gdGhpbmtpbmcuLi4gTm93LCBkaWRuJiMzOTt0IGBsYW43OHh4YCB1c2Ugc29tZXRoaW5nIHJlbGF0ZWQgdG8gYHBoeV9jb25uZWN0YD8gQWgsIHllcyEgSSYjMzk7bGwgY2hlY2sgYGxhbjc4eHhfbWRpb19yZWFkYCBhcyB0aGF0IG1heSBvZmZlciBzb21lIGluc2lnaHQgaW50byBob3cgYGxhbjc4eHhgIGNvbm5lY3RzIHRvIHRoZSBQSFkuIFRoYXQgbWlnaHQgYmUgdGhlIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsYW43OHh4X21kaW9fcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODc0NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgYGxhbjc4eHhgIERyaXZlciBhbmQgTURJTyoqCgpBbHJpZ2h0LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgbGFuNzh4eGAgZHJpdmVyIGFuZCBob3cgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgTURJTyBpbnRlcmZhY2UuIEdpdmVuIHRoZSBjb250ZXh0LCBJJiMzOTttIGxpa2VseSB0cm91Ymxlc2hvb3Rpbmcgc29tZXRoaW5nIHNwZWNpZmlj4oCUcGVyaGFwcyBhIGNvbW11bmljYXRpb24gaXNzdWUsIGEgbWlzc2luZyBmZWF0dXJlLCBvciBzb21lIHVuZXhwZWN0ZWQgYmVoYXZpb3IgcmVsYXRlZCB0byB0aGUgUEhZIG1hbmFnZW1lbnQuIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gc3RhcnQgYXQgdGhlIHNvdXJjZS4gVW5kZXJzdGFuZGluZyB0aGUgYG1kaW9gIGludGVyYWN0aW9ucyB3aXRoaW4gdGhhdCBzcGVjaWZpYyBkcml2ZXIgaXMga2V5LiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBNRElPIGNvbW1hbmRzIGFyZSBjb25zdHJ1Y3RlZCwgaG93IHRoZSBkYXRhIGlzIGNsb2NrZWQgb3V0LCBhbmQgd2hhdCB0aGUgcmVhZC93cml0ZSBvcGVyYXRpb25zIGxvb2sgbGlrZS4gR290dGEgc2VlIGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIG9idmlvdXNseSBhd3J5IGluIHRoZSByZWdpc3RlciBhY2Nlc3NlcyBvciBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIHByb2JsZW1zLiBJJiMzOTtsbCBwcm9iYWJseSBiZSBkaXZpbmcgaW50byB0aGUgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgYW5kIGFueSBhc3NvY2lhdGVkIGhlbHBlciBmdW5jdGlvbnMgcXVpY2tseS4gR290dGEgZ2V0IHRoaXMgbmFpbGVkIGRvd24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTktI2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwOiNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMS0jaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjktI2luY2x1ZGUgXHUwMDNjbGludXgvbWljcm9jaGlwcGh5LmhcdTAwM2VcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MzA6I2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfbWRpby5oXHUwMDNlXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTMxLSNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX25ldC5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz00MTM9c3RydWN0IGxhbjc4eHhfbmV0IHtcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTQ0MS1cdHN0cnVjdCBtdXRleFx0XHRkZXZfbXV0ZXg7IC8qIHNlcmlhbGlzZSBvcGVuL3N0b3Agd3J0IHN1c3BlbmQvcmVzdW1lICovXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjQ0MjpcdHN0cnVjdCBtdXRleFx0XHRtZGlvYnVzX211dGV4OyAvKiBmb3IgTURJTyBidXMgYWNjZXNzICovXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTQ0My1cdHVuc2lnbmVkIGludFx0XHRwaXBlX2luLCBwaXBlX291dCwgcGlwZV9pbnRyO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtNDU4LVx0dTMyXHRcdFx0Y2hpcHJldjtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6NDU5Olx0c3RydWN0IG1paV9idXNcdFx0Km1kaW9idXM7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTQ2MC1cdHBoeV9pbnRlcmZhY2VfdFx0XHRpbnRlcmZhY2U7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz05NDY9c3RhdGljIGludCBsYW43OHh4X2ZsdXNoX3J4X2ZpZm8oc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy05NTAtXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjk1MTovKiBMb29wIHVudGlsIHRoZSByZWFkIGlzIGNvbXBsZXRlZCB3aXRoIHRpbWVvdXQgY2FsbGVkIHdpdGggbWRpb2J1c19tdXRleCBoZWxkICovXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjk1MjpzdGF0aWMgaW50IGxhbjc4eHhfbWRpb2J1c193YWl0X25vdF9idXN5KHN0cnVjdCBsYW43OHh4X25ldCAqZGV2KVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy05NTMte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9MTU4Mj1zdGF0aWMgaW50IGxhbjc4eHhfbWFjX3Jlc2V0KHN0cnVjdCBsYW43OHh4X25ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTU4Ny1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MTU4ODpcdG11dGV4X2xvY2soXHUwMDI2ZGV2LVx1MDAzZW1kaW9idXNfbXV0ZXgpO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0xNTg5LVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTU5My1cdCAqL1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoxNTk0Olx0cmV0ID0gbGFuNzh4eF9tZGlvYnVzX3dhaXRfbm90X2J1c3koZGV2KTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTU5NS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0xNjIyLWV4aXRfdW5sb2NrOlxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoxNjIzOlx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldi1cdTAwM2VtZGlvYnVzX211dGV4KTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTYyNC1cbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTE5NDQ9c3RhdGljIGludCBsYW43OHh4X2luaXRfbWFjX2FkZHJlc3Moc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDExLS8qIE1ESU8gcmVhZCBhbmQgd3JpdGUgd3JhcHBlcnMgZm9yIHBoeWxpYiAqL1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDEyOnN0YXRpYyBpbnQgbGFuNzh4eF9tZGlvYnVzX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGlkeClcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjAxMy17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDIxLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDIyOlx0bXV0ZXhfbG9jayhcdTAwMjZkZXYtXHUwMDNlbWRpb2J1c19tdXRleCk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwMjMtXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwMjQtXHQvKiBjb25maXJtIE1JSSBub3QgYnVzeSAqL1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDI1Olx0cmV0ID0gbGFuNzh4eF9tZGlvYnVzX3dhaXRfbm90X2J1c3koZGV2KTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjAyNi1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDM0LVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDM1Olx0cmV0ID0gbGFuNzh4eF9tZGlvYnVzX3dhaXRfbm90X2J1c3koZGV2KTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjAzNi1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDQ1LWRvbmU6XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwNDY6XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZW1kaW9idXNfbXV0ZXgpO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDQ3LVx0dXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRldi1cdTAwM2VpbnRmKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwNTEtXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwNTI6c3RhdGljIGludCBsYW43OHh4X21kaW9idXNfd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGlkeCxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA1My1cdFx0XHRcdCB1MTYgcmVndmFsKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA2Mi1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjA2MzpcdG11dGV4X2xvY2soXHUwMDI2ZGV2LVx1MDAzZW1kaW9idXNfbXV0ZXgpO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDY0LVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDY1LVx0LyogY29uZmlybSBNSUkgbm90IGJ1c3kgKi9cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjA2NjpcdHJldCA9IGxhbjc4eHhfbWRpb2J1c193YWl0X25vdF9idXN5KGRldik7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwNjctXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA4MC1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjA4MTpcdHJldCA9IGxhbjc4eHhfbWRpb2J1c193YWl0X25vdF9idXN5KGRldik7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwODItXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA4NS1kb25lOlxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDg2Olx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldi1cdTAwM2VtZGlvYnVzX211dGV4KTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA4Ny1cdHVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShkZXYtXHUwMDNlaW50Zik7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDkwLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDkxOnN0YXRpYyBpbnQgbGFuNzh4eF9tZGlvX2luaXQoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwOTIte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA5NS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjA5NjpcdGRldi1cdTAwM2VtZGlvYnVzID0gbWRpb2J1c19hbGxvYygpO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDk3Olx0aWYgKCFkZXYtXHUwMDNlbWRpb2J1cykge1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDk4LVx0XHRuZXRkZXZfZXJyKGRldi1cdTAwM2VuZXQsIFwmIzM0O2NhbiYjMzk7dCBhbGxvY2F0ZSBNRElPIGJ1c1xcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTAxLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTAyOlx0ZGV2LVx1MDAzZW1kaW9idXMtXHUwMDNlcHJpdiA9ICh2b2lkICopZGV2O1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTAzOlx0ZGV2LVx1MDAzZW1kaW9idXMtXHUwMDNlcmVhZCA9IGxhbjc4eHhfbWRpb2J1c19yZWFkO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTA0Olx0ZGV2LVx1MDAzZW1kaW9idXMtXHUwMDNld3JpdGUgPSBsYW43OHh4X21kaW9idXNfd3JpdGU7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMDU6XHRkZXYtXHUwMDNlbWRpb2J1cy1cdTAwM2VuYW1lID0gXCYjMzQ7bGFuNzh4eC1tZGlvYnVzXCYjMzQ7O1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTA2Olx0ZGV2LVx1MDAzZW1kaW9idXMtXHUwMDNlcGFyZW50ID0gXHUwMDI2ZGV2LVx1MDAzZXVkZXYtXHUwMDNlZGV2O1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTA3LVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTA4Olx0c25wcmludGYoZGV2LVx1MDAzZW1kaW9idXMtXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXCYjMzQ7dXNiLSUwM2Q6JTAzZFwmIzM0OyxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjEwOS1cdFx0IGRldi1cdTAwM2V1ZGV2LVx1MDAzZWJ1cy1cdTAwM2VidXNudW0sIGRldi1cdTAwM2V1ZGV2LVx1MDAzZWRldm51bSk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTE0LVx0XHQvKiBzZXQgdG8gaW50ZXJuYWwgUEhZIGlkICovXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMTU6XHRcdGRldi1cdTAwM2VtZGlvYnVzLVx1MDAzZXBoeV9tYXNrID0gfigxIFx1MDAzY1x1MDAzYyAxKTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjExNi1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTIwLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTIxOlx0bm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldi1cdTAwM2V1ZGV2LVx1MDAzZWRldi5vZl9ub2RlLCBcJiMzNDttZGlvXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEyMjpcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoZGV2LVx1MDAzZW1kaW9idXMsIG5vZGUpO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTIzLVx0b2Zfbm9kZV9wdXQobm9kZSk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTI4LVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTI5Olx0bmV0ZGV2X2RiZyhkZXYtXHUwMDNlbmV0LCBcJiMzNDtyZWdpc3RlcmVkIG1kaW9idXMgYnVzICVzXFxuXCYjMzQ7LCBkZXYtXHUwMDNlbWRpb2J1cy1cdTAwM2VpZCk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMzAtXHRyZXR1cm4gMDtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjEzMS1leGl0MTpcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEzMjpcdG1kaW9idXNfZnJlZShkZXYtXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMzMtXHRyZXR1cm4gcmV0O1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjEzNS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEzNjpzdGF0aWMgdm9pZCBsYW43OHh4X3JlbW92ZV9tZGlvKHN0cnVjdCBsYW43OHh4X25ldCAqZGV2KVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTM3LXtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEzODpcdG1kaW9idXNfdW5yZWdpc3RlcihkZXYtXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMzk6XHRtZGlvYnVzX2ZyZWUoZGV2LVx1MDAzZW1kaW9idXMpO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTQwLX1cbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTI2NDk9c3RhdGljIHN0cnVjdCBwaHlfZGV2aWNlICpsYW43OHh4X2dldF9waHkoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yNjUzLVx0LyogQXR0ZW1wdCB0byBsb2NhdGUgYSBQSFkgb24gdGhlIE1ESU8gYnVzICovXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjI2NTQ6XHRwaHlkZXYgPSBwaHlfZmluZF9maXJzdChkZXYtXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTI2NTUtXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0yNzY5PXN0YXRpYyBpbnQgbGFuNzh4eF9jb25maWd1cmVfbGVkc19mcm9tX2R0KHN0cnVjdCBsYW43OHh4X25ldCAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjc3MS17XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjI3NzI6XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGh5ZGV2LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTI3NzMtXHR1MzIgcmVnO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9Mjg1OD1zdGF0aWMgaW50IGxhbjc4eHhfcGh5X2luaXQoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yOTA0LVx0XHRuZXRkZXZfZXJyKGRldi1cdTAwM2VuZXQsIFwmIzM0O2NhbiYjMzk7dCBhdHRhY2ggUEhZIHRvICVzLCBlcnJvciAlcGVcXG5cJiMzNDssXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjI5MDU6XHRcdFx0ICAgZGV2LVx1MDAzZW1kaW9idXMtXHUwMDNlaWQsIEVSUl9QVFIocmV0KSk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTI5MDYtXHRcdGdvdG8gcGh5bGlua191bmluaXQ7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0zNzYyPXN0YXRpYyBpbnQgbGFuNzh4eF9iaW5kKHN0cnVjdCBsYW43OHh4X25ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zilcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTM4MjAtXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjM4MjE6XHRyZXQgPSBsYW43OHh4X21kaW9faW5pdChkZXYpO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0zODIyLVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9Mzg0ND1zdGF0aWMgdm9pZCBsYW43OHh4X3VuYmluZChzdHJ1Y3QgbGFuNzh4eF9uZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0zODQ5LVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzozODUwOlx0bGFuNzh4eF9yZW1vdmVfbWRpbyhkZXYpO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0zODUxLVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9NDY1NT1zdGF0aWMgaW50IGxhbjc4eHhfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy00Njg4LVx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZkZXYtXHUwMDNlcnhxX292ZXJmbG93KTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6NDY4OTpcdG11dGV4X2luaXQoXHUwMDI2ZGV2LVx1MDAzZW1kaW9idXNfbXV0ZXgpO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy00NjkwLVx0bXV0ZXhfaW5pdChcdTAwMjZkZXYtXHUwMDNlZGV2X211dGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI2MjQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBjaGVja2luZyBgbGFuNzh4eF9tZGlvYnVzX3JlYWRgOgoKKipEaXNzZWN0aW5nIGBsYW43OHh4X21kaW9idXNfcmVhZGAqKgoKQWxyaWdodCwgdGhlIG9iamVjdGl2ZSBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGBsYW43OHh4X21kaW9idXNfcmVhZGAgZnVuY3Rpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaXQmIzM5O3Mgc3VwcG9zZWQgdG8gYmUgZG9pbmcsIGFuZCBob3cgd2VsbCBpdCYjMzk7cyBhY2NvbXBsaXNoaW5nIGl0LiBUaGUgbmFtZSBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHJlYWRpbmcgZGF0YSBmcm9tIGFuIE1ESU8gKE1hbmFnZW1lbnQgRGF0YSBJbnB1dC9PdXRwdXQpIGJ1cywgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIExBTjc4eHggRXRoZXJuZXQgY29udHJvbGxlci4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7ZCBleHBlY3QgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIGxvdy1sZXZlbCBjb21tdW5pY2F0aW9uIHByb3RvY29sIGZvciBhY2Nlc3NpbmcgcmVnaXN0ZXJzIG9uIGFuIEV0aGVybmV0IFBIWSBvciBNQUMuIEkgbmVlZCB0byBjb25zaWRlciBpdHMgcGFyYW1ldGVycywgcmV0dXJuIHZhbHVlcywgYW5kIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLgoKRmlyc3QsIEkgbmVlZCB0byBsb29rIGF0IHRoZSBmdW5jdGlvbiYjMzk7cyBkZWZpbml0aW9uIHRvIHNlZSB3aGF0IGFyZ3VtZW50cyBpdCB0YWtlcy4gRG9lcyBpdCByZWNlaXZlIHRoZSBNRElPIGJ1cyBpdHNlbGYsIHRoZSBkZXZpY2UgYWRkcmVzcywgcmVnaXN0ZXIgYWRkcmVzcywgYW5kIGEgcG9pbnRlciB0byBzdG9yZSB0aGUgcmVhZCBkYXRhPyBEb2VzIGl0IHJldHVybiBhbiBlcnJvciBjb2RlIG9yIGEgdmFsdWU/IE5leHQsIEkgd2FudCB0byB0cmFjZSB0aGUgY29kZS4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIGxvZ2ljOiBEb2VzIGl0IGxvY2sgYSBtdXRleCB0byBwcm90ZWN0IHRoZSBNRElPIGJ1cyBhY2Nlc3M/IEhvdyBkb2VzIGl0IGFjdHVhbGx5IHRyYW5zbWl0IHRoZSByZWFkIGNvbW1hbmQ/IERvZXMgaXQgY2hlY2sgZm9yIHRoZSBhY2tub3dsZWRnZSBiaXQgZnJvbSB0aGUgZGV2aWNlLCBhbmQgaWYgc28sIGhvdyBpcyBpdCBoYW5kbGluZyBlcnJvcnM/IERvZXMgaXQgbWFuYWdlIHRoZSB0aW1pbmcgcHJvcGVybHksIGNvbnNpZGVyaW5nIHRoZSBNRElPIGNsb2NrIGZyZXF1ZW5jeT8gSG93IGFyZSB0aGUgcmVhZCBkYXRhIHJldHVybmVkLiBJIGFsc28gbmVlZCB0byBhc3Nlc3MgaXRzIGVycm9yIGhhbmRsaW5nOiBEb2VzIGl0IGdyYWNlZnVsbHkgbWFuYWdlIHBvdGVudGlhbCBpc3N1ZXMgbGlrZSBidXMgY29udGVudGlvbiwgaW5jb3JyZWN0IGFkZHJlc3Nlcywgb3IgdGltZW91dHM/IElzIHRoZXJlIGFueSB3YXRjaGRvZyBsb2dpYz8gRG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIGVuZGlhbm5lc3MgaXNzdWVzPwoKSSBzaG91bGQgdGhlbiBjaGVjayBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGVsc2V3aGVyZSBpbiB0aGUgZHJpdmVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIHJlZ2lzdGVycyBpdCYjMzk7cyBiZWluZyB1c2VkIHRvIHJlYWQgYW5kIHdoYXQgZGF0YSBpcyBiZWluZyBpbnRlcnByZXRlZCBmcm9tIHRoZXNlIHJlZ2lzdGVycy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBncmVhdGVyIGNvbnRleHQgZm9yIHVuZGVyc3RhbmRpbmcgaWYgdGhpcyBmdW5jdGlvbiBpcyBhZGVxdWF0ZS4gQXJlIHRoZXJlIGFueSB1bnVzdWFsIGNpcmN1bXN0YW5jZXMsIG9yIGlzIGl0IGEgZmFpcmx5IHN0YW5kYXJkIHJlZ2lzdGVyIHJlYWQ/CgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgdGltaW5nIGlzc3Vlcywgb3IgcG90ZW50aWFsIGZvciBkZWFkbG9ja3MuIEFuZCBJIHdpbGwgZW5zdXJlIGl0IGZvbGxvd3MgdGhlIHJlY29tbWVuZGVkIGNvZGluZyBzdHlsZSBhbmQgdGhhdCB0aGVyZSBhcmUgYWRlcXVhdGUgY29tbWVudHMuIEFuZCBmaW5hbGx5LCBJIHdpbGwgd2FudCB0byBlbnN1cmUgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgYWxsIG9mIHRoZSB2YXJpb3VzIGZhaWx1cmUgbW9kZXMgaW4gYSByb2J1c3Qgd2F5LCBhbmQgdGhhdCBpdCBkZWFscyB3aXRoIHRoZW0gY29uc2lzdGVudGx5IHdpdGggdGhlIHJlc3Qgb2YgdGhlIExBTjc4eHggZHJpdmVyLgoKRXNzZW50aWFsbHksIEkgbmVlZCB0byB0aG9yb3VnaGx5IGF1ZGl0IHRoaXMgZnVuY3Rpb24sIGVuc3VyaW5nIGl0JiMzOTtzIGVmZmljaWVudCwgcm9idXN0LCBhbmQgY29ycmVjdGx5IGltcGxlbWVudHMgdGhlIE1ESU8gcmVhZCBmdW5jdGlvbmFsaXR5IGZvciB0aGUgTEFONzh4eCBjb250cm9sbGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDEyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwMTI6XHRzdGF0aWMgaW50IGxhbjc4eHhfbWRpb2J1c19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCBpZHgpXG4yMDEzOlx0e1xuMjAxNDpcdFx0c3RydWN0IGxhbjc4eHhfbmV0ICpkZXYgPSBidXMtXHUwMDNlcHJpdjtcbjIwMTU6XHRcdHUzMiB2YWwsIGFkZHI7XG4yMDE2Olx0XHRpbnQgcmV0O1xuMjAxNzpcdFxuMjAxODpcdFx0cmV0ID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGRldi1cdTAwM2VpbnRmKTtcbjIwMTk6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4yMDIwOlx0XHRcdHJldHVybiByZXQ7XG4yMDIxOlx0XG4yMDIyOlx0XHRtdXRleF9sb2NrKFx1MDAyNmRldi1cdTAwM2VtZGlvYnVzX211dGV4KTtcbjIwMjM6XHRcbjIwMjQ6XHRcdC8qIGNvbmZpcm0gTUlJIG5vdCBidXN5ICovXG4yMDI1Olx0XHRyZXQgPSBsYW43OHh4X21kaW9idXNfd2FpdF9ub3RfYnVzeShkZXYpO1xuMjAyNjpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjIwMjc6XHRcdFx0Z290byBkb25lO1xuMjAyODpcdFxuMjAyOTpcdFx0Lyogc2V0IHRoZSBhZGRyZXNzLCBpbmRleCBcdTAwMjYgZGlyZWN0aW9uIChyZWFkIGZyb20gUEhZKSAqL1xuMjAzMDpcdFx0YWRkciA9IG1paV9hY2Nlc3MocGh5X2lkLCBpZHgsIE1JSV9SRUFEKTtcbjIwMzE6XHRcdHJldCA9IGxhbjc4eHhfd3JpdGVfcmVnKGRldiwgTUlJX0FDQywgYWRkcik7XG4yMDMyOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMjAzMzpcdFx0XHRnb3RvIGRvbmU7XG4yMDM0Olx0XG4yMDM1Olx0XHRyZXQgPSBsYW43OHh4X21kaW9idXNfd2FpdF9ub3RfYnVzeShkZXYpO1xuMjAzNjpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjIwMzc6XHRcdFx0Z290byBkb25lO1xuMjAzODpcdFxuMjAzOTpcdFx0cmV0ID0gbGFuNzh4eF9yZWFkX3JlZyhkZXYsIE1JSV9EQVRBLCBcdTAwMjZ2YWwpO1xuMjA0MDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjIwNDE6XHRcdFx0Z290byBkb25lO1xuMjA0MjpcdFxuMjA0MzpcdFx0cmV0ID0gKGludCkodmFsIFx1MDAyNiAweEZGRkYpO1xuMjA0NDpcdFxuMjA0NTpcdGRvbmU6XG4yMDQ2Olx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZW1kaW9idXNfbXV0ZXgpO1xuMjA0NzpcdFx0dXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRldi1cdTAwM2VpbnRmKTtcbjIwNDg6XHRcbjIwNDk6XHRcdHJldHVybiByZXQ7XG4yMDUwOlx0fVxuMjA1MTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mzc5OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgbWlpX2FjY2Vzc2AgTWFjcm8qKgoKT2theSwgc28gYG1paV9hY2Nlc3NgLi4uIHRoYXQmIzM5O3MgYSBtYWNyby4gSSBpbW1lZGlhdGVseSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGV4cGFuc2lvbi4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiB0byBzZWUgdGhlIHVuZGVybHlpbmcgYml0IG1hbmlwdWxhdGlvbnMgYW5kIHJlZ2lzdGVyIGFjY2Vzc2VzIGl0IHBlcmZvcm1zLiBJcyBpdCBhIGRpcmVjdCBtZW1vcnkgYWNjZXNzLCBvciBkb2VzIGl0IGFic3RyYWN0IHRvIHNvbWUgZHJpdmVyIGxheWVyPyBJJiMzOTttIGhvcGluZyBpdCYjMzk7cyB3ZWxsLWRlZmluZWQgYW5kIGNsZWFybHkgZG9jdW1lbnRzIHRoZSByZWdpc3RlciBhZGRyZXNzZXMgaXQmIzM5O3MgdXNpbmcsIGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gQ29udGV4dCBpcyBpbXBvcnRhbnQsIHNvIEkgd2lsbCBhbHNvIGhhdmUgdG8gY29uc2lkZXIgdGhlIGhhcmR3YXJlIGVudmlyb25tZW50IGluIHdoaWNoIHRoaXMgbWFjcm8gaXMgdXNlZC4gV2hhdCBNSUkvR01JSSBQSFkgc3RhbmRhcmQgZG9lcyBpdCBleHBlY3Q/IEkmIzM5O2xsIHByb2JhYmx5IGJlIGNoZWNraW5nIGZvciBhbnkgaW5saW5lIGFzc2VtYmx5IGFuZCBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgc3VycHJpc2VzIHdpdGggY29tcGlsZXIgb3B0aW1pemF0aW9uLiBJIGhvcGUgaXQmIzM5O3Mgbm90IG92ZXJseSBjb21wbGV4OyBjb25jaXNlIGFuZCBlZmZpY2llbnQgaXMgdGhlIGdvYWwsIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21paV9hY2Nlc3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9OTUyPXN0YXRpYyBpbnQgbGFuNzh4eF9tZGlvYnVzX3dhaXRfbm90X2J1c3koc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy05NjktXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjk3MDpzdGF0aWMgaW5saW5lIHUzMiBtaWlfYWNjZXNzKGludCBpZCwgaW50IGluZGV4LCBpbnQgcmVhZClcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtOTcxLXtcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTIwMTI9c3RhdGljIGludCBsYW43OHh4X21kaW9idXNfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgaWR4KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjAyOS1cdC8qIHNldCB0aGUgYWRkcmVzcywgaW5kZXggXHUwMDI2IGRpcmVjdGlvbiAocmVhZCBmcm9tIFBIWSkgKi9cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjAzMDpcdGFkZHIgPSBtaWlfYWNjZXNzKHBoeV9pZCwgaWR4LCBNSUlfUkVBRCk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwMzEtXHRyZXQgPSBsYW43OHh4X3dyaXRlX3JlZyhkZXYsIE1JSV9BQ0MsIGFkZHIpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9MjA1Mj1zdGF0aWMgaW50IGxhbjc4eHhfbWRpb2J1c193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgaWR4LFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA3NS1cdC8qIHNldCB0aGUgYWRkcmVzcywgaW5kZXggXHUwMDI2IGRpcmVjdGlvbiAod3JpdGUgdG8gUEhZKSAqL1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDc2Olx0YWRkciA9IG1paV9hY2Nlc3MocGh5X2lkLCBpZHgsIE1JSV9XUklURSk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwNzctXHRyZXQgPSBsYW43OHh4X3dyaXRlX3JlZyhkZXYsIE1JSV9BQ0MsIGFkZHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDUwMAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogTUlJX0FDQ0VTUyAtIFdoYXQmIzM5O3MgdGhlIENvbnRleHQ/KioKCkFscmlnaHQsICYjMzQ7bWlpX2FjY2Vzcy4mIzM0OyBUaGUgbmFtZSBpdHNlbGYgaW1tZWRpYXRlbHkgcmFpc2VzIHF1ZXN0aW9ucy4gSXMgdGhpcyBzb21lIHNwZWNpYWxpemVkIE1JSSAoTWVkaWEgSW5kZXBlbmRlbnQgSW50ZXJmYWNlKSB1dGlsaXR5LCBkcml2ZXIsIG9yIHBlcmhhcHMgYSBsYXllciBhYm92ZSB0aGF0PyBHaXZlbiBteSBiYWNrZ3JvdW5kLCBJJiMzOTttIGV4cGVjdGluZyBzb21ldGhpbmcgcmVsYXRlZCB0byBuZXR3b3JrIGhhcmR3YXJlLCBwb3RlbnRpYWxseSBhdCB0aGUgUEhZIGxldmVsLCBidXQgaXQgY291bGQgZXh0ZW5kIGludG8gbmV0d29yayBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBvciBtYW5hZ2VtZW50IGRlcGVuZGluZyBvbiB0aGUgc3lzdGVtIHRoaXMgaXMgcnVubmluZyBvbi4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIHN5c3RlbSBhcyBhIHdob2xlLiBJcyBpdCBhIHVzZXItc3BhY2UgYXBwbGljYXRpb24sIGEga2VybmVsIG1vZHVsZSwgb3IgcGFydCBvZiBhIG1vcmUgaW50ZWdyYXRlZCBzeXN0ZW0gZmlybXdhcmU/IElzIGl0IGludGVyYWN0aW5nIHdpdGggcmF3IEV0aGVybmV0IGRhdGEgb3IgZG9lcyBpdCBhYnN0cmFjdCB0aGF0IGxheWVyPyBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHBvdGVudGlhbCBib3R0bGVuZWNrcyBhbmQgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMgLSBlc3BlY2lhbGx5IGlmIHRoaXMgaW52b2x2ZXMgZGlyZWN0IHJlZ2lzdGVyIG1hbmlwdWxhdGlvbi4KClRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIHRoZSBrZXkgaGVyZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBoYW5kbGUgZXJyb3IgY2hlY2tpbmcgYW5kIGV4Y2VwdGlvbiBoYW5kbGluZy4gQXJlIHRoZXkgZm9sbG93aW5nIGFueSBzdGFuZGFyZCBvciBzcGVjaWZpY2F0aW9uPyBUaGUgY29kZSYjMzk7cyBzdHlsZSBhbmQgY29tbWVudHMgd2lsbCBnaXZlIHVzIGEgc3Ryb25nIHNlbnNlIG9mIHRoZSBkZXZlbG9wZXImIzM5O3MgaW50ZW50IGFuZCBob3BlZnVsbHksIGhlbHAgc3BlZWQgdXAgbXkgYW5hbHlzaXMuIFRpbWUgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk3MDpcdHN0YXRpYyBpbmxpbmUgdTMyIG1paV9hY2Nlc3MoaW50IGlkLCBpbnQgaW5kZXgsIGludCByZWFkKVxuIDk3MTpcdHtcbiA5NzI6XHRcdHUzMiByZXQ7XG4gOTczOlx0XG4gOTc0Olx0XHRyZXQgPSAoKHUzMilpZCBcdTAwM2NcdTAwM2MgTUlJX0FDQ19QSFlfQUREUl9TSElGVF8pIFx1MDAyNiBNSUlfQUNDX1BIWV9BRERSX01BU0tfO1xuIDk3NTpcdFx0cmV0IHw9ICgodTMyKWluZGV4IFx1MDAzY1x1MDAzYyBNSUlfQUNDX01JSVJJTkRBX1NISUZUXykgXHUwMDI2IE1JSV9BQ0NfTUlJUklOREFfTUFTS187XG4gOTc2Olx0XHRpZiAocmVhZClcbiA5Nzc6XHRcdFx0cmV0IHw9IE1JSV9BQ0NfTUlJX1JFQURfO1xuIDk3ODpcdFx0ZWxzZVxuIDk3OTpcdFx0XHRyZXQgfD0gTUlJX0FDQ19NSUlfV1JJVEVfO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTAwNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ2xhdXNlIDQ1IFN1cHBvcnQgaW4gTmV0d29yayBEcml2ZXJzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBgbGFuNzh4eGAgaGFuZGxlcyBDbGF1c2UgNDUuIEZpcnN0LCBJIHNlZSBgaW5kZXhgIGJlaW5nIGNhc3QgdG8gYHUzMmAgYW5kIHNoaWZ0ZWQuIE15IGd1dCByZWFjdGlvbiBpcyB0aGF0IGlmIGBpbmRleGAgaGFzIGBNSUlfQUREUl9DNDVgICgweDQwMDAwMDAwKSBzZXQsIGl0JiMzOTtzIGdvaW5nIHRvIGdldCBtYXNrZWQgb3V0IGJ5IGBNSUlfQUNDX01JSVJJTkRBX01BU0tfYC4gVGhhdCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHRoZSBkcml2ZXIgKmRvZXNuJiMzOTt0KiBuYXRpdmVseSBzdXBwb3J0IENsYXVzZSA0NS4gQnV0IHdhaXQsIEkgbmVlZCB0byBkaWcgZGVlcGVyLgoKSSByZW1lbWJlciBgbWRpb2J1c19yZWFkYCBpbiBgZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmNgLiBJIG5lZWQgdG8gc2VlIHdoYXQgaGFwcGVucyB0aGVyZS4gT2theSwgaWYgYGJ1cy0mZ3Q7cmVhZF9jNDVgIGV4aXN0cywgdGhhdCB3aWxsIGdldCBjYWxsZWQuIElmIGl0JiMzOTtzIE5VTEwsIHdoaWNoIHNlZW1zIGxpa2VseSBoZXJlIGdpdmVuIG15IGluaXRpYWwgaW1wcmVzc2lvbiwgdGhlbiBgYnVzLSZndDtyZWFkYCBpcyBjYWxsZWQuIEFoLCBidXQgYGJ1cy0mZ3Q7cmVhZGAgd2lsbCBqdXN0IHBhc3MgdGhyb3VnaCB0aGUgYE1JSV9BRERSX0M0NWAgYml0IGluIGByZWdudW1gLiBTbywgaWYgdGhlIGRyaXZlciBkb2VzbiYjMzk7dCBleHBsaWNpdGx5IGhhbmRsZSB0aGF0IGJpdCwgaXQgd2lsbCBqdXN0IHJlYWQgYSBDbGF1c2UgMjIgcmVnaXN0ZXIgaW5zdGVhZCwgd2hpY2ggaXNuJiMzOTt0IHdoYXQgd2Ugd2FudC4KCk9rYXksIGxldCBtZSBsb29rIGF0IGhvdyB0aGlzIGlzIGJlaW5nIHVzZWQgaW4gYSByZWFsIGRyaXZlciwgZm9yIGV4YW1wbGUgaW4gYHJlYWx0ZWtfbWFpbi5jYC4gSXQgbG9va3MgbGlrZSBpdCB1c2VzIGBwaHlfcmVhZF9tbWRgLiBBbmQgdGhhdCBmdW5jdGlvbiB3aWxsIHVzZSBgYnVzLSZndDtyZWFkX2M0NWAgaWYgaXQgaXMgYXZhaWxhYmxlLCBvciBpdCB3aWxsIGZhbGwgYmFjayB0byBDbGF1c2UgMjIgaW5kaXJlY3QgYWNjZXNzIGlmIGBwaHlkZXYtJmd0O2lzX2M0NWAgaXMgZmFsc2UuIEJpbmdvISBTbyBub3cgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGF0IGZhbGxiYWNrIGlzIGhhcHBlbmluZyBpbiBgbGFuNzh4eGAuIFNvLCB0aGF0IG1lYW5zIGl0ICp3aWxsKiB1c2UgQ2xhdXNlIDIyIGluZGlyZWN0IGFjY2VzcyAocmVnaXN0ZXJzIDEzIGFuZCAxNCkgaWYgYHBoeWRldi0mZ3Q7aXNfYzQ1YCBpcyBmYWxzZSEKCk9rYXksIHRpbWUgdG8gY29uZmlybSB3aGF0IGlzIGFjdHVhbGx5IGhhcHBlbmluZyBpbiBgcGh5X3JlYWRfbW1kYCB0byBzZWUgaWYgdGhhdCBpcyB0cnVlIGFuZCB0byBzZWUgaG93IHRoZSBidXMgY2FsbHMgYXJlIGltcGxlbWVudGVkLiBJJiMzOTtsbCBjaGVjayBgZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmNgIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X3JlYWRfbW1kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM9NDU3PUVYUE9SVF9TWU1CT0xfR1BMKG1tZF9waHlfd3JpdGUpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ1OS0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQ2MDogKiBfX3BoeV9yZWFkX21tZCAtIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciByZWFkaW5nIGEgcmVnaXN0ZXJcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ2MS0gKiBmcm9tIGFuIE1NRCBvbiBhIGdpdmVuIFBIWS5cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00NjctICovXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYzo0Njg6aW50IF9fcGh5X3JlYWRfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZhZCwgdTMyIHJlZ251bSlcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ2OS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDc4LX1cbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQ3OTpFWFBPUlRfU1lNQk9MKF9fcGh5X3JlYWRfbW1kKTtcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ4MC1cbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ4MS0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQ4MjogKiBwaHlfcmVhZF9tbWQgLSBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgcmVhZGluZyBhIHJlZ2lzdGVyXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00ODMtICogZnJvbSBhbiBNTUQgb24gYSBnaXZlbiBQSFkuXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDg5LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NDkwOmludCBwaHlfcmVhZF9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldmFkLCB1MzIgcmVnbnVtKVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDkxLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00OTQtXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NDk1Olx0cmV0ID0gX19waHlfcmVhZF9tbWQocGh5ZGV2LCBkZXZhZCwgcmVnbnVtKTtcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ5Ni1cdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00OTktfVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NTAwOkVYUE9SVF9TWU1CT0wocGh5X3JlYWRfbW1kKTtcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTUwMS1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYz02Mjk9aW50IF9fcGh5X21vZGlmeV9tbWRfY2hhbmdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgZGV2YWQsIHUzMiByZWdudW0sXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNjMzLVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NjM0Olx0cmV0ID0gX19waHlfcmVhZF9tbWQocGh5ZGV2LCBkZXZhZCwgcmVnbnVtKTtcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTYzNS1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NTUyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSBzZWVpbmcgYF9fcGh5X3JlYWRfbW1kYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoYXQgdW5kZXJzY29yZXMgYSB2ZXJ5IHNwZWNpZmljIGZ1bmN0aW9uLCBsaWtlbHkgdGllZCB0byBhIHBoeXNpY2FsIGxheWVyIChQSFkpIGludGVyZmFjZSBhbmQgc29tZSBzb3J0IG9mIG11bHRpLW1vZGUgZGV2aWNlIChNTUQpIGFjY2Vzcy4gVGhlIGRvdWJsZSB1bmRlcnNjb3JlIHByZWZpeCB1c3VhbGx5IGluZGljYXRlcyBhbiBpbnRlcm5hbCBvciAmIzM0O3ByaXZhdGUmIzM0OyBmdW5jdGlvbiwgbWVhbmluZyBpdCYjMzk7cyBub3QgbWVhbnQgdG8gYmUgZGlyZWN0bHkgY2FsbGVkIGJ5IG1vc3Qgb3RoZXIgbW9kdWxlcy4gSXQmIzM5O3MgYSBsb3ctbGV2ZWwsIGNyaXRpY2FsIG9wZXJhdGlvbi4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIGNvcmUgcm91dGluZSBmb3IgZWl0aGVyIHJlYWRpbmcgb3IgY29uZmlndXJpbmcgcmVnaXN0ZXJzIHdpdGhpbiBhIFBIWSBjaGlwLCBhbmQgdGhlICYjMzQ7TU1EJiMzNDsgc3VnZ2VzdHMgdGhhdCB0aGUgUEhZIHN1cHBvcnRzIG11bHRpcGxlIGZ1bmN0aW9uYWwgYmxvY2tzLCBlYWNoIG1hcHBlZCB0byBhIHNwZWNpZmljIE1NRCBhZGRyZXNzLiBUaGlzIGltcGxpZXMgc29tZSBraW5kIG9mIGluZGlyZWN0IGFkZHJlc3Npbmcgc2NoZW1lLiBJIGFudGljaXBhdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHBpdm90YWwgdG8gZGV2aWNlIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmF0aW9uIGNoYW5nZXMsIG9yIG9wZXJhdGlvbmFsIG1vbml0b3JpbmcuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSwgd2hhdCYjMzk7cyBwYXNzZWQgaW4gYXMgcGFyYW1ldGVycyBhbmQgd2hhdCBpcyBpdCByZXR1cm5pbmcgYW5kIHdoYXQga2luZCBvZiBlcnJvci1oYW5kbGluZyBpdCYjMzk7cyBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDY4Olx0aW50IF9fcGh5X3JlYWRfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZhZCwgdTMyIHJlZ251bSlcbiA0Njk6XHR7XG4gNDcwOlx0XHRpZiAocmVnbnVtIFx1MDAzZSAodTE2KX4wIHx8IGRldmFkIFx1MDAzZSAzMilcbiA0NzE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDcyOlx0XG4gNDczOlx0XHRpZiAocGh5ZGV2LVx1MDAzZWRydiBcdTAwMjZcdTAwMjYgcGh5ZGV2LVx1MDAzZWRydi1cdTAwM2VyZWFkX21tZClcbiA0NzQ6XHRcdFx0cmV0dXJuIHBoeWRldi1cdTAwM2VkcnYtXHUwMDNlcmVhZF9tbWQocGh5ZGV2LCBkZXZhZCwgcmVnbnVtKTtcbiA0NzU6XHRcbiA0NzY6XHRcdHJldHVybiBtbWRfcGh5X3JlYWQocGh5ZGV2LVx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyLFxuIDQ3NzpcdFx0XHRcdCAgICBwaHlkZXYtXHUwMDNlaXNfYzQ1LCBkZXZhZCwgcmVnbnVtKTtcbiA0Nzg6XHR9XG4gNDc5Olx0RVhQT1JUX1NZTUJPTChfX3BoeV9yZWFkX21tZCk7XG4gNDgwOlx0XG4gNDgxOlx0LyoqXG4gNDgyOlx0ICogcGh5X3JlYWRfbW1kIC0gQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIHJlYWRpbmcgYSByZWdpc3RlclxuIDQ4MzpcdCAqIGZyb20gYW4gTU1EIG9uIGEgZ2l2ZW4gUEhZLlxuIDQ4NDpcdCAqIEBwaHlkZXY6IFRoZSBwaHlfZGV2aWNlIHN0cnVjdFxuIDQ4NTpcdCAqIEBkZXZhZDogVGhlIE1NRCB0byByZWFkIGZyb21cbiA0ODY6XHQgKiBAcmVnbnVtOiBUaGUgcmVnaXN0ZXIgb24gdGhlIE1NRCB0byByZWFkXG4gNDg3Olx0ICpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcxNTYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTXkgRGVlcCBEaXZlIGludG8gYG1tZF9waHlfcmVhZGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2hlbiBJIHNlZSBgbW1kX3BoeV9yZWFkYCwgaW1tZWRpYXRlbHkgbXkgbWluZCBqdW1wcyB0byB0aGUgbG93LWxldmVsIHBoeXNpY2FsIGxheWVyIGludGVyZmFjZS4gSSYjMzk7bSB0aGlua2luZyBkaXJlY3QgcmVnaXN0ZXIgYWNjZXNzLCBwb3RlbnRpYWxseSB3aXRoIGltcGxpY2F0aW9ucyBmb3IgdGltaW5nIGFuZCBlcnJvciBoYW5kbGluZyB0aGF0IGFyZSBjcnVjaWFsIHRvIGNvbnNpZGVyLiBJJiMzOTttIGdvaW5nIHRvIGFzc3VtZSB0aGlzIGZ1bmN0aW9uIGlzIGNlbnRyYWwgdG8gYW55IFBIWSAoUGh5c2ljYWwgTGF5ZXIpIG9wZXJhdGlvbiBhbmQgaXMgdGhlcmVmb3JlIGEgdml0YWwgYnVpbGRpbmcgYmxvY2suIFNvIHdoYXQgaXMgdGhlIGNvbnRleHQ/IElzIHRoaXMgcGFydCBvZiBhIGRyaXZlcj8gV2hhdCBzdGFuZGFyZCBpcyB0aGlzIGZ1bmN0aW9uIGF0dGVtcHRpbmcgdG8gYWRoZXJlIHRvPwoKTXkgZmlyc3QgcXVlc3Rpb24gaXMsICYjMzQ7V2hhdCYjMzk7cyB0aGUgb3ZlcmFsbCBQSFkgYXJjaGl0ZWN0dXJlIHRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgZm9yPyYjMzQ7IElzIHRoaXMgYSBnZW5lcmljIGZ1bmN0aW9uLCBpbnRlbmRlZCBmb3IgYSB2YXJpZXR5IG9mIFBIWXMsIG9yIGlzIGl0IGhpZ2hseSBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgdmVuZG9yIG9yIGRldmljZSBmYW1pbHk/IEtub3dpbmcgdGhlIGFyY2hpdGVjdHVyZSBnaXZlcyBtZSBjbHVlcyBhYm91dCB0aGUgZXhwZWN0ZWQgcmVnaXN0ZXIgbGF5b3V0LCBjb21tdW5pY2F0aW9uIHByb3RvY29sIChJMkMsIFNQSSwgTURJTywgZXRjLiksIGFuZCBwb3RlbnRpYWwgY2xvY2tpbmcgY29uc3RyYWludHMuIEkmIzM5O20gaW1tZWRpYXRlbHkgdHJ5aW5nIHRvIHZpc3VhbGl6ZSB0aGUgcmVnaXN0ZXIgbWFwIOKAkyB3aGF0IGFyZSB0aGUgYmFzZSBhZGRyZXNzZXMsIG9mZnNldCBjYWxjdWxhdGlvbnMsIGFuZCBkYXRhIHdpZHRocyBpbnZvbHZlZD8KClRoZW4gSSB0aGluayBhYm91dCB0aGUgZGF0YSB0eXBlcyBiZWluZyB1c2VkOiBXaGF0IGlzIHRoZSB1bmRlcmx5aW5nIGJ1cyB0eXBlPyBJcyBpdCBhIHN0YW5kYXJkIGludGVyZmFjZSBvciBzb21ldGhpbmcgcHJvcHJpZXRhcnk/IEFyZSB3ZSBkZWFsaW5nIHdpdGggcmF3IGJpdHMsIG9yIGEgaGlnaGVyLWxldmVsIGRhdGEgc3RydWN0dXJlPyBJJiMzOTttIGFudGljaXBhdGluZyBwb3RlbnRpYWwgYml0LWZpZWxkIG1hbmlwdWxhdGlvbiAoc2hpZnRpbmcsIG1hc2tpbmcpIHRvIGV4dHJhY3QgdGhlIHJlbGV2YW50IGluZm9ybWF0aW9uIGZyb20gYSBQSFkgcmVnaXN0ZXIgcmVhZC4gRXJyb3IgY2hlY2tpbmcgaXMgY3JpdGljYWwgYXQgdGhpcyBsZXZlbC4gSWYgdGhlIGhhcmR3YXJlIGlzIGZhdWx0eSwgaG93IGRvZXMgdGhpcyBwcm9jZXNzIGhhbmRsZSBpdD8KCkZpbmFsbHksIHRoZSBmdW5jdGlvbiBpdHNlbGYuIFdoYXQgYXJlIHRoZSBzcGVjaWZpYyBwYXJhbWV0ZXJzPyBXaGF0IGlzIHRoZSByZWdpc3RlciBhZGRyZXNzIHBhc3NlZCBpbnRvIHRoZSBmdW5jdGlvbj8gV2hhdCBpcyB0aGUgZXhwZWN0ZWQgcmV0dXJuIHZhbHVlPyBIb3cgZG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIGVycm9ycyDigJMgcmV0dXJuIGNvZGVzLCBhc3NlcnRpb25zLCBvciBsb2dnaW5nPyBEb2VzIGl0IGltcGxlbWVudCBhbnkgZm9ybSBvZiByZXRyeSBtZWNoYW5pc20sIG9yIGRvZXMgaXQgYXNzdW1lIHRoZSB1cHBlciBsYXllcnMgd2lsbCBoYW5kbGUgYW55IGJ1cy1sZXZlbCBwcm9ibGVtcz8gSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuIENhbiB3ZSBjYWNoZSByZWdpc3RlciB2YWx1ZXMgdG8gcmVkdWNlIGJ1cyB0cmFmZmljLCBvciBwZXJmb3JtIGEgYmF0Y2ggb2YgcmVhZHM/IEhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gaW50ZXJhY3Qgd2l0aCBhbnkgaW50ZXJydXB0IGhhbmRsZXJzIG9yIG90aGVyIGNvbmN1cnJlbnQgdGFza3M/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21tZF9waHlfcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jPTQyMT1zdGF0aWMgdm9pZCBtbWRfcGh5X2luZGlyZWN0KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IGRldmFkLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQzNC1cbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQzNTppbnQgbW1kX3BoeV9yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgYm9vbCBpc19jNDUsXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00MzYtXHRcdCBpbnQgZGV2YWQsIHUzMiByZWdudW0pXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDQ0LX1cbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQ0NTpFWFBPUlRfU1lNQk9MX0dQTChtbWRfcGh5X3JlYWQpO1xuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDQ2LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jPTQ2OD1pbnQgX19waHlfcmVhZF9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldmFkLCB1MzIgcmVnbnVtKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ3NS1cbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQ3NjpcdHJldHVybiBtbWRfcGh5X3JlYWQocGh5ZGV2LVx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyLFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDc3LVx0XHRcdCAgICBwaHlkZXYtXHUwMDNlaXNfYzQ1LCBkZXZhZCwgcmVnbnVtKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgwMDMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSB3ZWxsLXZlcnNlZCBpbiB0aGUgc3ViamVjdCBtYXR0ZXIgYW5kIGFwcHJvYWNoaW5nIGEgc3BlY2lmaWMgY29kZSBmdW5jdGlvbjoKCioqQW5hbHl6aW5nIGBtbWRfcGh5X3JlYWRgKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIGBtbWRfcGh5X3JlYWRgLiBMZXQmIzM5O3MgZ2V0IHJpZ2h0IHRvIGl0LiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nLCAmIzM0O09rYXksIHRoaXMgaW1wbGllcyBhIHJlYWQgb3BlcmF0aW9uLCBsaWtlbHkgaW52b2x2aW5nIGEgTWVkaWEtSW5kZXBlbmRlbnQgSW50ZXJmYWNlIChNSUkpIE1hbmFnZW1lbnQgRGF0YSAoTU1EKSBQSFkgKFBoeXNpY2FsIExheWVyKSBkZXZpY2UuIEdpdmVuIHRoZSBmdW5jdGlvbiBuYW1lLCBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIGxvdyBsZXZlbCBkZXRhaWxzIG9mIGhvdyB0aGV5IGhhbmRsZSB0aGUgcmVhZGluZyBhbmQgcmV0cmlldmluZyBvZiBkYXRhIGZyb20gYSBQSFkgdmlhIE1NRC4mIzM0OyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIGNvbW11bmljYXRpb24gcHJvdG9jb2wgaXMgaW1wbGVtZW50ZWQsIHNwZWNpZmljYWxseSBmb3IgaG93IHRoZSByZWFkIGN5Y2xlIGlzIGluaXRpYXRlZCBhbmQgY29tcGxldGVkLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgdGhlIHNwZWNpZmljIHJlZ2lzdGVyIGl0IGludGVuZHMgdG8gdGFyZ2V0LCB0aGUgYml0IG1hbmlwdWxhdGlvbiBvZiB0aGUgcmVhZCBhbmQgd3JpdGUgY29tbWFuZHMsIGFuZCBkYXRhIHRyYW5zbWlzc2lvbi4gJiMzNDtJcyB0aGVyZSBhbnkgZXJyb3IgaGFuZGxpbmc/JiMzNDsgaXMgYSBrZXkgcXVlc3Rpb24gaW4gdGhpcyBhcmVhLiBJJiMzOTtsbCBiZSBmb2N1c2VkIG9uIHRoaW5ncyBsaWtlIHRpbWluZyBjb25zdHJhaW50cywgYWNrbm93bGVkZ2Ugc2lnbmFscywgYW5kIGFueSBwb3RlbnRpYWwgcmV0cnkgbWVjaGFuaXNtcy4gSSBuZWVkIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24mIzM5O3MgaW50ZXJuYWwgZmxvdywgYW55IGRlcGVuZGVuY2llcyBvbiBoYXJkd2FyZSBvciBvdGhlciBtb2R1bGVzLCBhbmQgdGhlIGdlbmVyYWwgd2F5IHRoZSBNTUQgUEhZIHJlZ2lzdGVycyBhcmUgYmVpbmcgYWNjZXNzZWQuIFRoaXMgc2hvdWxkIGJlIGFuIGludGVyZXN0aW5nIG9uZSB0byB1bnBhY2shCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQzNTpcdGludCBtbWRfcGh5X3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBib29sIGlzX2M0NSxcbiA0MzY6XHRcdFx0IGludCBkZXZhZCwgdTMyIHJlZ251bSlcbiA0Mzc6XHR7XG4gNDM4Olx0XHRpZiAoaXNfYzQ1KVxuIDQzOTpcdFx0XHRyZXR1cm4gX19tZGlvYnVzX2M0NV9yZWFkKGJ1cywgcGh5X2FkZHIsIGRldmFkLCByZWdudW0pO1xuIDQ0MDpcdFxuIDQ0MTpcdFx0bW1kX3BoeV9pbmRpcmVjdChidXMsIHBoeV9hZGRyLCBkZXZhZCwgcmVnbnVtKTtcbiA0NDI6XHRcdC8qIFJlYWQgdGhlIGNvbnRlbnQgb2YgdGhlIE1NRCYjMzk7cyBzZWxlY3RlZCByZWdpc3RlciAqL1xuIDQ0MzpcdFx0cmV0dXJuIF9fbWRpb2J1c19yZWFkKGJ1cywgcGh5X2FkZHIsIE1JSV9NTURfREFUQSk7XG4gNDQ0Olx0fVxuIDQ0NTpcdEVYUE9SVF9TWU1CT0xfR1BMKG1tZF9waHlfcmVhZCk7XG4gNDQ2Olx0XG4gNDQ3Olx0aW50IG1tZF9waHlfd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBib29sIGlzX2M0NSxcbiA0NDg6XHRcdFx0ICBpbnQgZGV2YWQsIHUzMiByZWdudW0sIHUxNiB2YWwpXG4gNDQ5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODYyMQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEzNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgdGhlIFJlYWx0ZWsgUlRMODI2MSBEcml2ZXIgdmlhIFVTQiBFbXVsYXRpb24qKgoKT2theSwgc28gdGhlIGBpc19jNDVgIGZsYWcgaXMga2V5IGhlcmUuIElmIGl0JiMzOTtzIGZhbHNlLCB3ZSYjMzk7cmUgdXNpbmcgYG1tZF9waHlfaW5kaXJlY3RgLCB3aGljaCBtZWFucyB3ZSYjMzk7cmUgZ29pbmcgdGhyb3VnaCBDbGF1c2UgMjIgcmVnaXN0ZXJz4oCUc3BlY2lmaWNhbGx5LCAxMyAoYE1JSV9NTURfQ1RSTGApIGFuZCAxNCAoYE1JSV9NTURfREFUQWApLiBUaGlzIGlzIGV4Y2VsbGVudC4gRXZlbiBpZiB0aGUgTURJTyBidXMgZHJpdmVyIG9ubHkgc3VwcG9ydHMgQ2xhdXNlIDIyLCB3ZSBjYW4gc3RpbGwgdGFsayB0byBDbGF1c2UgNDUgcmVnaXN0ZXJzIGluZGlyZWN0bHkuCgpNeSB0aGlua2luZyBpcywgaWYgd2UgZW11bGF0ZSBhIFVTQiBkZXZpY2UsIGxldCYjMzk7cyBzYXkgYW4gYGF4ODgxNzJhYCBvciBgbGFuNzh4eGAsIGFuZCBoYXZlIGl0IGFjdCBsaWtlIGFuIE1ESU8gYnVzLCB3ZSBjYW4gcmVzcG9uZCB0byBDbGF1c2UgMjIgcmVhZHMgZm9yIHRoZSBQSFkgSUQgcmVnaXN0ZXJzICgyIGFuZCAzKSB3aXRoIGBSVExfODI2MUNfQ0dgICgweDAwMWNjODk4KS4gVGhlIHBoeWxpYiB3aWxsIHRoZW4gaW5zdGFudGlhdGUgYSBDbGF1c2UgMjIgUEhZLiBJdCB3aWxsIHNlZSB0aGF0IHRoZSBQSFkgSUQgaXMgZm91bmQgdmlhIENsYXVzZSAyMiwgc28gYGlzX2M0NWAgd2lsbCBiZSBmYWxzZSAodW5sZXNzIHRoZSBkcml2ZXIgZXhwbGljaXRseSBwcm9iZXMgZm9yIEM0NSksIGFuZCBgcGh5X3JlYWRfbW1kYCB3aWxsIHVzZSBpbmRpcmVjdCBhY2Nlc3MgKHJlZ2lzdGVycyAxMyBhbmQgMTQpLgoKVGhpcyBtZWFucyB0aGF0IHRoZSBgcmVhbHRla19tYWluLmNgIGRyaXZlciBzaG91bGQgYmUgYm91bmQuIEl0cyBgcHJvYmVgLCBgY29uZmlnX2luaXRgLCBgY29uZmlnX2FuZWdgLCBhbmQgdGhlIHJlc3Qgb2YgaXRzIG1ldGhvZHMgd2lsbCBnZXQgY2FsbGVkLCBhbmQgdGhleSYjMzk7bGwgYmUgdXNpbmcgYHBoeV9yZWFkX21tZGAsIHdoaWNoLCBpbiBvdXIgY2FzZSwgdHJhbnNsYXRlcyB0byBDbGF1c2UgMjIgaW5kaXJlY3QgYWNjZXNzZXMuIE91ciBlbXVsYXRlZCBVU0IgZGV2aWNlIGNhbiByZXNwb25kIHRvIHRob3NlLiBJdCBtZWFucyB0aGlzIGNvZGUgaXMgYWJzb2x1dGVseSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB2aWEgVVNCIGVtdWxhdGlvbiEKCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhhdCBgUlRMXzgyNjFDX0NHYCB3aWxsIGJlIG1hdGNoZWQuIFRoZSBkcml2ZXIgaGFzOgoKYGBgYwp7CglQSFlfSURfTUFUQ0hfRVhBQ1QoUlRMXzgyNjFDX0NHKSwKCS5uYW1lCQkJPSAmIzM0O1JlYWx0ZWsgUlRMODI2MSAxMEdicHMgUEhZJiMzNDssCgkucHJvYmUJCQk9IHJ0bDgyNjF4X3Byb2JlLAoJLmNvbmZpZ19pbml0CQk9IHJ0bDgyNjF4X2NvbmZpZ19pbml0LAoJLmdldF9mZWF0dXJlcwkJPSBydGw4MjYxeF9nZXRfZmVhdHVyZXMsCgkuY29uZmlnX2FuZWcJCT0gcnRsODI2MXhfY29uZmlnX2FuZWcsCgkucmVhZF9zdGF0dXMJCT0gcnRsODI2MXhfcmVhZF9zdGF0dXMsCgkuY29uZmlnX2ludHIJCT0gcnRsODI2MXhfY29uZmlnX2ludHIsCgkuaGFuZGxlX2ludGVycnVwdAk9IHJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHQsCgkuc29mdF9yZXNldAkJPSBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0LAoJLnN1c3BlbmQJCT0gZ2VucGh5X2M0NV9wbWFfc3VzcGVuZCwKCS5yZXN1bWUJCQk9IGdlbnBoeV9jNDVfcG1hX3Jlc3VtZSwKfSwKYGBgCgpJZiB3ZSBlbXVsYXRlIGEgUEhZIHdpdGggSUQgYDB4MDAxY2M4OThgLCB0aGlzIGRyaXZlciAqd2lsbCogYmUgYm91bmQsIGFuZCBgcnRsODI2MXhfcHJvYmVgIHdpbGwgYmUgY2FsbGVkLiBJbnNpZGUgYHJ0bDgyNjF4X3Byb2JlYDoKCmBgYGMKc3RhdGljIGludCBydGw4MjYxeF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQp7CglzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXY7CglzdHJ1Y3QgcnRsODI2MXhfcHJpdiAqcHJpdjsKCWludCBzdWJfcGh5X2lkLCByZXQ7CgoJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwoJaWYgKCFwcml2KQoJCXJldHVybiAtRU5PTUVNOwoKCXBoeWRldi0mZ3Q7cHJpdiA9IHByaXY7CgoJcmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjYxWF9FWFRfQUREUl9SRUcsCgkJCSAgICBSVExfODI2MVhfU1VCX1BIWV9JRF9BRERSKTsKCWlmIChyZXQgJmx0OyAwKQoJCXJldHVybiByZXQ7CgoJcmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyNjFYX0VYVF9EQVRBX1JFRyk7CglpZiAocmV0ICZsdDsgMCkKCQlyZXR1cm4gcmV0OwoKCXN1Yl9waHlfaWQgPSAocmV0ICZndDsmZ3Q7IDgpICZhbXA7IDB4ZmY7CgoJc3dpdGNoIChzdWJfcGh5X2lkKSB7CgljYXNlIFJUTDgyNjFDX0NFX01PREVMOgoJCXByaXYtJmd0O2Z3X25hbWUgPSBSVEw4MjYxQ19DRV9GV19OQU1FOwoJCXBoeWRldl9pbmZvKHBoeWRldiwgJiMzNDtSVEw4MjYxQyBkZXRlY3RlZCAoc3ViX2lkIAoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlYWx0ZWtfbWFpbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9NYWtlZmlsZToyOnJlYWx0ZWsteVx0XHRcdCYjNDM7PSByZWFsdGVrX21haW4ub1xuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvTWFrZWZpbGUtMy1yZWFsdGVrLSQoQ09ORklHX1JFQUxURUtfUEhZX0hXTU9OKSAmIzQzOz0gcmVhbHRla19od21vbi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDE1OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMTQ5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoYXQsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSYjMzk7bSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIG5ldHdvcmsgZHJpdmVycyBhbmQgdGhlIExpbnV4IGtlcm5lbCBidWlsZCBzeXN0ZW06CgoqKkludmVzdGlnYXRpbmcgUmVhbHRlayBQSFkgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBlbmFibGluZyB0aGUgYHJlYWx0ZWtgIFBIWSAoUGh5c2ljYWwgTGF5ZXIpIGRyaXZlci4gV2hlcmUmIzM5O3MgdGhlIGNvbmZpZ3VyYXRpb24gbWFnaWMgaGFwcGVuaW5nPyBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUgbGlrZWx5IHN1c3BlY3RzLiBGaXJzdCwgSSYjMzk7bGwgZXhhbWluZSB0aGUgc3BlY2lmaWMgYHJlYWx0ZWtgIGRyaXZlciYjMzk7cyBgTWFrZWZpbGVgLCB0aGUgb25lIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL01ha2VmaWxlYC4gVGhpcyBpcyB0aGUgbW9zdCBvYnZpb3VzIHBsYWNlIGZvciBkZXZpY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbnkgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUsIG9yIG90aGVyIGJ1aWxkLXRpbWUgbG9naWMuIFRoZW4sIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIG5vdCBtaXNzIGFueSBvdmVyYXJjaGluZyBidWlsZCBzeXN0ZW0gZGlyZWN0aXZlcywgSSYjMzk7bGwgYWxzbyBnbGFuY2UgYXQgdGhlIHBhcmVudCBkaXJlY3RvcnkmIzM5O3MgYE1ha2VmaWxlYCwgYGRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIGhhdmUgdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBob3cgUEhZIGRyaXZlcnMgaW4gZ2VuZXJhbCBhcmUgaGFuZGxlZCwgYW5kIGNvdWxkIGNvbnRhaW4gY29uZGl0aW9uYWwgaW5jbHVkZXMgb3IgZ2xvYmFsIGZsYWdzIHRoYXQgaW1wYWN0IHRoZSBgcmVhbHRla2AgZHJpdmVyLiBUaGVzZSB0d28gZmlsZXMgc2hvdWxkIHJldmVhbCB0aGUga2V5IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycywgS2NvbmZpZyBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgYnVpbGQtdGltZSBkaXJlY3RpdmVzIHRoYXQgY29udHJvbCB3aGV0aGVyIHRoZSBgcmVhbHRla2AgZHJpdmVyIGdldHMgY29tcGlsZWQgYW5kIGluY2x1ZGVkIGluIHRoZSBrZXJuZWwuIFRoaXMmIzM5O2xsIGdldCBtZSB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciBwcmV0dHkgcXVpY2tseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVhbHRlayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9OTQ9b2JqLSQoQ09ORklHX1FTRU1JX1BIWSlcdFx0JiM0Mzs9IHFzZW1pLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo5NTpvYmotJChDT05GSUdfUkVBTFRFS19QSFkpXHQmIzQzOz0gcmVhbHRlay9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS05Ni1vYmotJChDT05GSUdfUkVORVNBU19QSFkpXHQmIzQzOz0gdVBENjA2MjAub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxNTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTU5NwoJCQkJCQkJb3V0cHV0OiAzMTIKCQkJCQkJCXRob3VnaHRzOiAyMTg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIFJlYWx0ZWsgUlRMODI2MSBQSFkgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgUmVhbHRlayBSVEw4MjYxIDEwR2JwcyBQSFkgZHJpdmVyLiBUaGUga2V5IGNvbmZpZyByZXF1aXJlZCBpcyBgQ09ORklHX1JFQUxURUtfUEhZYCwgd2hpY2ggaXMgYSB0cmlzdGF0ZS4gIEJleW9uZCB0aGF0LCBpdCYjMzk7cyBicmluZ2luZyBpbiBmaXJtd2FyZSBsb2FkaW5nIGZ1bmN0aW9uYWxpdHkuICBUaGF0IG1lYW5zIHdlJiMzOTtsbCBhbHNvIG5lZWQgYENPTkZJR19GV19MT0FERVJgICh3aGljaCBpcyB1c3VhbGx5IGVuYWJsZWQgYW55d2F5KSBhbmQsIGJlY2F1c2UgaXQgdXNlcyBgY3JjMzJgLCBgQ09ORklHX0NSQzMyYCwgdGhvdWdoIHRob3NlIGFyZSBsaWtlbHkgYWxyZWFkeSB0YWtlbiBjYXJlIG9mLgoKVGhlIHBhdGNoIGl0c2VsZiBpbnRyb2R1Y2VzIGEgYnVuY2ggb2YgaW50ZXJlc3RpbmcgZnVuY3Rpb25zLiAgTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyB0aHJvdWdoIGFsbCBvZiB0aGVtIGZvciBgRm9jdXNTeW1ib2xzYCwgd2hpY2ggSSYjMzk7dmUgZG9uZS4gIExldCYjMzk7cyBzZWU6CgoqICAgYGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXRgCiogICBgZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmVgCiogICBgZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZWAKKiAgIGBydGw4MjYxeF9wcm9iZWAKKiAgIGBydGw4MjYxeF9nZXRfZmVhdHVyZXNgCiogICBgcnRsODI2MXhfcmVhZF9zdGF0dXNgCiogICBgcnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlYAoqICAgYHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnlgCiogICBgcnRsODI2MXhfZndfbG9hZGAKKiAgIGBydGw4MjYxeF9jb25maWdfaW50cmAKKiAgIGBydGw4MjYxeF9oYW5kbGVfaW50ZXJydXB0YAoqICAgYHJ0bDgyNjF4X2NvbmZpZ19hbmVnYAoqICAgYHJ0bDgyNjF4X2NvbmZpZ19pbml0YAoKV2FpdC4uLiBJIG5lZWQgdG8gcmVmaW5lIHRoYXQgbGlzdCBhIGxpdHRsZS4gYGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlYCBhbmQgYGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmVgIGFyZSBhY3R1YWxseSBzdGF0aWMgZnVuY3Rpb25zIGluIGBkcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jYCB3aGljaCBJIHdvbiYjMzk7dCBiZSBhYmxlIHRvIHRhcmdldCBkaXJlY3RseSwgYW5kIGBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0YCBpcyBleHBvcnRlZC4gSG93ZXZlciwgdGhlIGBydGw4MjYxeF8qYCBmdW5jdGlvbnMgYXJlIHN0YXRpYyBpbiBgcmVhbHRla19tYWluLmNgLiBTbyBteSB0aGlua2luZyBpcyB0aGF0IHN5emthbGxlciBzaG91bGQgYmUgYWJsZSB0byBnZXQgdG8gYWxsIHRoZXNlLCBzbyBpdCYjMzk7cyBhIHVzZWZ1bCBzZXQgb2YgaW5pdGlhbCBgRm9jdXNTeW1ib2xzYC4KCkkgbmVlZCB0byBjb25maXJtIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGhpZGRlbiBjb25maWcgZGVwZW5kZW5jaWVzLCBidXQgYENPTkZJR19SRUFMVEVLX1BIWWAsIGBDT05GSUdfUEhZTElCYCBhbmQgYENPTkZJR19NRElPX0RFVklDRWAgc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBkcml2ZXJzLgoKTm93LCBsb29raW5nIGRlZXBlciwgIGBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5YCBpcyBhIHJlYWwgZ2VtLiAgSXQgcGFyc2VzIGZpcm13YXJlIGRhdGEgYW5kIHBlcmZvcm1zIE1ESU8gb3BlcmF0aW9ucy4gU3l6a2FsbGVyJiMzOTtzIGBzeXpfcmVxdWVzdF9maXJtd2FyZWAgcHJpbWl0aXZlIGNhbiBmZWVkIGFyYml0cmFyeSBmaXJtd2FyZSB0byB0aGUgZHJpdmVyLCBhbmQgc2luY2Ugc3l6a2FsbGVyICpkb2VzKiBpbnRlcmNlcHQgdGhlIGByZXF1ZXN0X2Zpcm13YXJlYCBjYWxsLCB0aGlzIGlzIGEgcGVyZmVjdCB0YXJnZXQhIEl0IG1lYW5zIHdlIGNhbiB0aHJvdyBjb21wbGV0ZWx5IGZ1enplci1jb250cm9sbGVkIGRhdGEgYXQgYm90aCBgcnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlYCBhbmQgYHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnlgLiAgVGhlIGZpcm13YXJlIHBhcnNpbmcgaXMgaW5oZXJlbnRseSByaXNreSDigJMgdGhpbmsgYnVmZmVyIG92ZXJmbG93cywgdHlwZSBjb25mdXNpb24sIGV0Yy4gIEkgY2FuIGFscmVhZHkgc2VlIG9wcG9ydHVuaXRpZXMgZm9yIGZ1enppbmcgbWFnaWMgbnVtYmVycywgc2l6ZSBjaGVja3MsIGFuZCBDUkMuICBUaGUgZnV6emVyIGlzIGxpa2VseSB0byBmaW5kIHZ1bG5lcmFiaWxpdGllcyBpbiBob3cgdGhlIGNvZGUgaW50ZXJwcmV0cyBhbmQgdXNlcyB0aGUgZmlybXdhcmUgZGF0YS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgdG8gc2VlIHdoYXQgdGhlIGZ1enplciBjYW4gZG8gaGVyZS4gRXZlbiB0aG91Z2ggdGhlIGZpcm13YXJlIHZlcmlmaWVyIGluY2x1ZGVzIGEgQ1JDMzIgY2hlY2ssIHRoZSBmdXp6ZXIgbWlnaHQgZmluZCB3YXlzIHRvIGJ5cGFzcyBpdCwgb3IgYXQgbGVhc3QgdHJpZ2dlciBmbGF3cyBiZWZvcmUgdGhhdCBjaGVjay4KCk9rYXksIGhlcmUmIzM5O3MgdGhlIGZpbmFsIGxpc3QgZm9yIGBGb2N1c1N5bWJvbHNgOgoKKiAgIGBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0YAoqICAgYHJ0bDgyNjF4X3Byb2JlYAoqICAgYHJ0bDgyNjF4X2dldF9mZWF0dXJlc2AKKiAgIGBydGw4MjYxeF9yZWFkX3N0YXR1c2AKKiAgIGBydGw4MjYxeF92ZXJpZnlfZmlybXdhcmVgCiogICBgcnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeWAKKiAgIGBydGw4MjYxeF9md19sb2FkYAoqICAgYHJ0bDgyNjF4X2NvbmZpZ19pbnRyYAoqICAgYHJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHRgCiogICBgcnRsODI2MXhfY29uZmlnX2FuZWdgCiogICBgcnRsODI2MXhfY29uZmlnX2luaXRgCgpUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBkZWZpbml0ZWx5IGB0cnVlYCBvbiB0aGlzIG9uZS4gQW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGBbJiMzNDtSRUFMVEVLX1BIWSYjMzQ7XWAuIFRoZSByZWFzb25pbmcgaXMgdGhhdCB0aGUgZHJpdmVyIHN1cHBvcnRzIHRoZSBSVEw4Cgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTU6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JFQUxURUtfUEhZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2VucGh5X2M0NV9wbWFfc29mdF9yZXNldCYjMzQ7LAogICAgJiMzNDtnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZSYjMzQ7LAogICAgJiMzNDtnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X3Byb2JlJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2dldF9mZWF0dXJlcyYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9yZWFkX3N0YXR1cyYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF92ZXJpZnlfZmlybXdhcmUmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeSYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9md19sb2FkJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2NvbmZpZ19pbnRyJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfY29uZmlnX2FuZWcmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfY29uZmlnX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw4MjYxIDEwR2JwcyBQSFkgYW5kIGludHJvZHVjZXMgQ2xhdXNlIDQ1IFBIWSBNYXN0ZXIvU2xhdmUgY29uZmlndXJhdGlvbi4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYnkgZW11bGF0aW5nIGEgVVNCIG5ldHdvcmsgYWRhcHRlciAoZS5nLiwgQVNJWCBvciBTTVNDKSB0aGF0IGV4cG9zZXMgYW4gTURJTyBidXMsIGFuZCByZXNwb25kaW5nIHRvIFBIWSBJRCByZWFkcyB3aXRoIHRoZSBSVEw4MjYxIElELiBUaGUgZHJpdmVyIGFsc28gcGFyc2VzIGZpcm13YXJlLCB3aGljaCBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UkVBTFRFS19QSFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0JiMzNDssCiAgICAmIzM0O2dlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlJiMzNDssCiAgICAmIzM0O2dlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmUmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfcHJvYmUmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfZ2V0X2ZlYXR1cmVzJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X3JlYWRfc3RhdHVzJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZSYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9md19leGVjdXRlX2VudHJ5JiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2Z3X2xvYWQmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfY29uZmlnX2ludHImIzM0OywKICAgICYjMzQ7cnRsODI2MXhfaGFuZGxlX2ludGVycnVwdCYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9jb25maWdfYW5lZyYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9jb25maWdfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBSZWFsdGVrIFJUTDgyNjEgMTBHYnBzIFBIWSBhbmQgaW50cm9kdWNlcyBDbGF1c2UgNDUgUEhZIE1hc3Rlci9TbGF2ZSBjb25maWd1cmF0aW9uLiBUaGUgY29kZSBpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBieSBlbXVsYXRpbmcgYSBVU0IgbmV0d29yayBhZGFwdGVyIChlLmcuLCBBU0lYIG9yIFNNU0MpIHRoYXQgZXhwb3NlcyBhbiBNRElPIGJ1cywgYW5kIHJlc3BvbmRpbmcgdG8gUEhZIElEIHJlYWRzIHdpdGggdGhlIFJUTDgyNjEgSUQuIFRoZSBkcml2ZXIgYWxzbyBwYXJzZXMgZmlybXdhcmUsIHdoaWNoIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NDc6NTcuOTU4OTQwNzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTMyMDgyNjk5OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUkVBTFRFS19QSFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0XCIsXG4gICAgXCJnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZVwiLFxuICAgIFwiZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZVwiLFxuICAgIFwicnRsODI2MXhfcHJvYmVcIixcbiAgICBcInJ0bDgyNjF4X2dldF9mZWF0dXJlc1wiLFxuICAgIFwicnRsODI2MXhfcmVhZF9zdGF0dXNcIixcbiAgICBcInJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZVwiLFxuICAgIFwicnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeVwiLFxuICAgIFwicnRsODI2MXhfZndfbG9hZFwiLFxuICAgIFwicnRsODI2MXhfY29uZmlnX2ludHJcIixcbiAgICBcInJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHRcIixcbiAgICBcInJ0bDgyNjF4X2NvbmZpZ19hbmVnXCIsXG4gICAgXCJydGw4MjYxeF9jb25maWdfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFJlYWx0ZWsgUlRMODI2MSAxMEdicHMgUEhZIGFuZCBpbnRyb2R1Y2VzIENsYXVzZSA0NSBQSFkgTWFzdGVyL1NsYXZlIGNvbmZpZ3VyYXRpb24uIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGJ5IGVtdWxhdGluZyBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgKGUuZy4sIEFTSVggb3IgU01TQykgdGhhdCBleHBvc2VzIGFuIE1ESU8gYnVzLCBhbmQgcmVzcG9uZGluZyB0byBQSFkgSUQgcmVhZHMgd2l0aCB0aGUgUlRMODI2MSBJRC4gVGhlIGRyaXZlciBhbHNvIHBhcnNlcyBmaXJtd2FyZSwgd2hpY2ggaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjQ3OjU3Ljk1ODk0NTcyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTc1Nzg1OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1Y2QwYWQwMDIzZTU1MzYwMjRkZjRhZWE2YTM2ZDY0Y2MwZDNjZWU1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDIxIDE1OjQ3OjU2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXFxuaW5kZXggMTI2OTUxNzQxNDI4OGYuLjg3MDkyMDMxMWY5YTAxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXFxuQEAgLTM4NCw2ICszODQsMTE5IEBAIGludCBnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCByZXN0YXJ0KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfY2hlY2tfYW5kX3Jlc3RhcnRfYW5lZyk7XFxuIFxcbisvKipcXG4rICogZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldCAtIHNvZnR3YXJlIHJlc2V0IHRoZSBQSFkgdmlhIENsYXVzZSA0NSBQTUEvUE1EIGNvbnRyb2wgcmVnaXN0ZXJcXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxcbisgKi9cXG4raW50IGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0LCB2YWw7XFxuK1xcbitcXHRyZXQgPSBwaHlfc2V0X2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfUE1BUE1ELCBNRElPX0NUUkwxLFxcbitcXHRcXHRcXHQgICAgICAgTURJT19DVFJMMV9SRVNFVCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsXFxuK1xcdFxcdFxcdFxcdFxcdCBNRElPX0NUUkwxLCB2YWwsXFxuK1xcdFxcdFxcdFxcdFxcdCAhKHZhbCBcXHUwMDI2IE1ESU9fQ1RSTDFfUkVTRVQpLFxcbitcXHRcXHRcXHRcXHRcXHQgNTAwMCwgNjAwMDAwLCB0cnVlKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0KTtcXG4rXFxuKy8qKlxcbisgKiBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZSAtIENvbmZpZ3VyZSBNYXN0ZXIvU2xhdmUgc2V0dGluZyBmb3IgQzQ1IFBIWXNcXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuKyAqXFxuKyAqIERlc2NyaXB0aW9uOiBDb25maWd1cmUgdGhlIGZvcmNlZCBvciBwcmVmZXJyZWQgTWFzdGVyL1NsYXZlIHJvbGVcXG4rICogMTBHQkFTRS1UIGNvbnRyb2wgcmVnaXN0ZXIgKE1NRCA3LCBSZWdpc3RlciAweDAwMjApIGFjY29yZGluZyB0b1xcbisgKiBJRUVFIDgwMi4zIHN0YW5kYXJkcy5cXG4rICpcXG4rICogUmV0dXJuOiBuZWdhdGl2ZSBlcnJubyBjb2RlIG9uIGZhaWx1cmUsIDAgaWYgTWFzdGVyL1NsYXZlIGRpZG4ndCBjaGFuZ2UsXFxuKyAqIG9yIDEgaWYgTWFzdGVyL1NsYXZlIG1vZGVzIGNoYW5nZWQuXFxuKyAqL1xcbitzdGF0aWMgaW50IGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0dTE2IGN0bCA9IDA7XFxuK1xcbitcXHRzd2l0Y2ggKHBoeWRldi1cXHUwMDNlbWFzdGVyX3NsYXZlX3NldCkge1xcbitcXHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfTUFTVEVSX1BSRUZFUlJFRDpcXG4rXFx0XFx0Y3RsID0gTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9QUkVGRVJSRUQ6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfTUFTVEVSX0ZPUkNFOlxcbitcXHRcXHRjdGwgPSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFIHwgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBNQVNURVJfU0xBVkVfQ0ZHX1NMQVZFX0ZPUkNFOlxcbitcXHRcXHRjdGwgPSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBNQVNURVJfU0xBVkVfQ0ZHX1VOS05PV046XFxuK1xcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19VTlNVUFBPUlRFRDpcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHBoeWRldl93YXJuKHBoeWRldiwgXFxcIlVuc3VwcG9ydGVkIE1hc3Rlci9TbGF2ZSBtb2RlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEUgfFxcbitcXHRcXHRcXHRcXHQgICAgICBNRElPX0FOXzEwR0JUX0NUUkxfTVNfVkFMVUUgfFxcbitcXHRcXHRcXHRcXHQgICAgICBNRElPX0FOXzEwR0JUX0NUUkxfTVNfUE9SVF9UWVBFLCBjdGwpO1xcbit9XFxuK1xcbisvKipcXG4rICogZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZSAtIHJlYWQgbWFzdGVyL3NsYXZlIHN0YXR1c1xcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4rICpcXG4rICogRGVzY3JpcHRpb246IFJlYWQgdGhlIE1hc3Rlci9TbGF2ZSBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXNcXG4rICogZnJvbSAxMEdCQVNFLVQgY29udHJvbC9zdGF0dXMgcmVnaXN0ZXJzIChNTUQgNywgUmVnIDB4MDAyMCBhbmQgMHgwMDIxKS5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbisgKi9cXG4rc3RhdGljIGludCBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHZhbDtcXG4rXFxuK1xcdHBoeWRldi1cXHUwMDNlbWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfVU5LTk9XTjtcXG4rXFx0cGh5ZGV2LVxcdTAwM2VtYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfVU5LTk9XTjtcXG4rXFxuK1xcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX0NUUkwpO1xcbitcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHZhbDtcXG4rXFxuK1xcdGlmICh2YWwgXFx1MDAyNiBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFKSB7XFxuK1xcdFxcdGlmICh2YWwgXFx1MDAyNiBNRElPX0FOXzEwR0JUX0NUUkxfTVNfVkFMVUUpXFxuK1xcdFxcdFxcdHBoeWRldi1cXHUwMDNlbWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfTUFTVEVSX0ZPUkNFO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHBoeWRldi1cXHUwMDNlbWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfU0xBVkVfRk9SQ0U7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmICh2YWwgXFx1MDAyNiBNRElPX0FOXzEwR0JUX0NUUkxfTVNfUE9SVF9UWVBFKVxcbitcXHRcXHRcXHRwaHlkZXYtXFx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX01BU1RFUl9QUkVGRVJSRUQ7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cGh5ZGV2LVxcdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9QUkVGRVJSRUQ7XFxuK1xcdH1cXG4rXFxuK1xcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX1NUQVQpO1xcbitcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHZhbDtcXG4rXFxuK1xcdGlmICh2YWwgXFx1MDAyNiBNRElPX0FOXzEwR0JUX1NUQVRfTVNfRkFVTFQpIHtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2VtYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfRVJSO1xcbitcXHR9IGVsc2UgaWYgKHBoeWRldi1cXHUwMDNlbGluaykge1xcbitcXHRcXHRpZiAodmFsIFxcdTAwMjYgTURJT19BTl8xMEdCVF9TVEFUX01TX1JFUylcXG4rXFx0XFx0XFx0cGh5ZGV2LVxcdTAwM2VtYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfTUFTVEVSO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHBoeWRldi1cXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX1NMQVZFO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZW1hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9VTktOT1dOO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGdlbnBoeV9jNDVfYW5lZ19kb25lIC0gcmV0dXJuIGF1dG8tbmVnb3RpYXRpb24gY29tcGxldGUgc3RhdHVzXFxuICAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbkBAIC0xMTkyLDYgKzEzMDUsMTAgQEAgaW50IGdlbnBoeV9jNDVfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gXFx0XFx0XFx0cmV0ID0gZ2VucGh5X2M0NV9iYXNldDFfcmVhZF9zdGF0dXMocGh5ZGV2KTtcXG4gXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHJldCA9IGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmUocGh5ZGV2KTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdHBoeV9yZXNvbHZlX2FuZWdfbGlua21vZGUocGh5ZGV2KTtcXG5AQCAtMTIyNSw2ICsxMzQyLDE0IEBAIGludCBnZW5waHlfYzQ1X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcdGlmIChyZXQgXFx1MDAzZSAwKVxcbiBcXHRcXHRjaGFuZ2VkID0gdHJ1ZTtcXG4gXFxuK1xcdGlmICghZ2VucGh5X2M0NV9iYXNldDFfYWJsZShwaHlkZXYpKSB7XFxuK1xcdFxcdHJldCA9IGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2UgMClcXG4rXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiBnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcocGh5ZGV2LCBjaGFuZ2VkKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X2NvbmZpZ19hbmVnKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMgYi9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY1xcbmluZGV4IGI2NWQwZjVmYTFhMDE0Li4xYzBiOWM0MGE4MWU1NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXFxuQEAgLTgsNyArOCw5IEBAXFxuICAqIENvcHlyaWdodCAoYykgMjAwNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLlxcbiAgKi9cXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdG9wcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY3JjMzIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aHRvb2xfbmV0bGluay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlybXdhcmUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BtX3dha2VpcnEuaFxcdTAwM2VcXG5AQCAtMTQxLDYgKzE0MywxMCBAQFxcbiAjZGVmaW5lIFJUTDgyMTFGX1BIWVNJQ0FMX0FERFJfV09SRDFcXHRcXHQxN1xcbiAjZGVmaW5lIFJUTDgyMTFGX1BIWVNJQ0FMX0FERFJfV09SRDJcXHRcXHQxOFxcbiBcXG4rI2RlZmluZSBSVEw4MjYxWF9FWFRfQUREUl9SRUdcXHRcXHRcXHQweGE0MzZcXG4rI2RlZmluZSBSVEw4MjYxWF9FWFRfREFUQV9SRUdcXHRcXHRcXHQweGE0MzhcXG4rI2RlZmluZSBSVExfODI2MVhfU1VCX1BIWV9JRF9BRERSXFx0XFx0MHg4MDFkXFxuK1xcbiAjZGVmaW5lIFJUTDgyMlhfVk5EMV9TRVJERVNfT1BUSU9OXFx0XFx0XFx0MHg2OTdhXFxuICNkZWZpbmUgUlRMODIyWF9WTkQxX1NFUkRFU19PUFRJT05fTU9ERV9NQVNLXFx0XFx0R0VOTUFTSyg1LCAwKVxcbiAjZGVmaW5lIFJUTDgyMlhfVk5EMV9TRVJERVNfT1BUSU9OX01PREVfMjUwMEJBU0VYX1NHTUlJXFx0XFx0MFxcbkBAIC0yNTEsNiArMjU3LDcwIEBAXFxuICNkZWZpbmUgUlRMXzgyMjFCX1ZNX0NHXFx0XFx0XFx0XFx0MHgwMDFjYzg0YVxcbiAjZGVmaW5lIFJUTF84MjUxQlxcdFxcdFxcdFxcdDB4MDAxY2M4NjJcXG4gI2RlZmluZSBSVExfODI2MUNcXHRcXHRcXHRcXHQweDAwMWNjODkwXFxuKyNkZWZpbmUgUlRMXzgyNjFDX0NHXFx0XFx0XFx0XFx0MHgwMDFjYzg5OFxcbitcXG4rI2RlZmluZSBSVEw4MjYxQ19DRV9NT0RFTFxcdFxcdDB4MDBcXG4rI2RlZmluZSBSVEw4MjYxRF9NT0RFTFxcdFxcdFxcdDB4ODFcXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfQVVUT05FR19FUlJPUlxcdEJJVCgwKVxcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9QQUdFX1JFQ1ZcXHRcXHRCSVQoMilcXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfQVVUT05FR19ET05FXFx0QklUKDMpXFxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX0xJTktfQ0hHXFx0XFx0QklUKDQpXFxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX1BIWV9SRUdfQUNDRVNTXFx0QklUKDUpXFxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX1BNRVxcdFxcdEJJVCg3KVxcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9BTERQU19DSEdcXHRcXHRCSVQoOSlcXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfSkFCQkVSXFx0XFx0QklUKDEwKVxcbitcXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfTUFTS19ERUZBVUxUXFx0KFJUTDgyNjFYX0lOVF9BVVRPTkVHX0RPTkUgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBSVEw4MjYxWF9JTlRfTElOS19DSEcgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBSVEw4MjYxWF9JTlRfQVVUT05FR19FUlJPUiB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IFJUTDgyNjFYX0lOVF9KQUJCRVIpXFxuK1xcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9NQVNLX0FMTFxcdFxcdChSVEw4MjYxWF9JTlRfQVVUT05FR19FUlJPUiB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IFJUTDgyNjFYX0lOVF9QQUdFX1JFQ1YgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBSVEw4MjYxWF9JTlRfQVVUT05FR19ET05FIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgUlRMODI2MVhfSU5UX0xJTktfQ0hHIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgUlRMODI2MVhfSU5UX1BIWV9SRUdfQUNDRVNTIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgUlRMODI2MVhfSU5UX1BNRSB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IFJUTDgyNjFYX0lOVF9BTERQU19DSEcgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBSVEw4MjYxWF9JTlRfSkFCQkVSKVxcbitcXG4rI2RlZmluZSBGV19NQUlOX01BR0lDXFx0XFx0XFx0MHg1MjU0NEMzOFxcbisjZGVmaW5lIEZXX1NVQl9NQUdJQ184MjYxQ1xcdFxcdDB4MzIzNjMxNDNcXG4rI2RlZmluZSBSVEw4MjYxWF9QT0xMX1RJTUVPVVRfTVNcXHQxMDBcXG4rI2RlZmluZSBSVEw4MjYxWF9NQVhfTU1EX0RFVlxcdFxcdDMxXFxuK1xcbisjZGVmaW5lIFJUTDgyNjFDX0NFX0ZXX05BTUVcXHRcXFwicnRsX25pYy9ydGw4MjYxYy5iaW5cXFwiXFxuK01PRFVMRV9GSVJNV0FSRShSVEw4MjYxQ19DRV9GV19OQU1FKTtcXG4rXFxuK2VudW0gcnRsODI2MXhfZndfb3Age1xcbitcXHRPUF9XUklURSA9IDB4MDAsXFx0LyogV3JpdGUgKi9cXG4rXFx0T1BfUE9MTCAgPSAweDAyLFxcdC8qIFBvbGxpbmcgKi9cXG4rfTtcXG4rXFxuK3N0cnVjdCBydGw4MjYxeF9md19oZWFkZXIge1xcbitcXHRfX2xlMzIgbWFpbl9tYWdpYztcXHQvKiBNYWluIG1hZ2ljIG51bWJlciAqL1xcbitcXHRfX2xlMzIgc3ViX21hZ2ljO1xcdC8qIFN1YiBtYWdpYyBudW1iZXIgKi9cXG4rXFx0X19sZTE2IHZlcnNpb25fbWFqb3I7XFx0LyogTWFqb3IgdmVyc2lvbiAqL1xcbitcXHRfX2xlMTYgdmVyc2lvbl9taW5vcjtcXHQvKiBNaW5vciB2ZXJzaW9uICovXFxuK1xcdF9fbGUxNiBudW1fZW50cmllcztcXHQvKiBOdW1iZXIgb2YgZW50cmllcyAqL1xcbitcXHRfX2xlMTYgcmVzZXJ2ZWQ7XFx0LyogUmVzZXJ2ZWQgKi9cXG4rXFx0X19sZTMyIGNyYzMyO1xcdFxcdC8qIENSQzMyIGNoZWNrc3VtICovXFxuK307XFxuK1xcbitzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkge1xcbitcXHRfX3U4ICB0eXBlO1xcdFxcdC8qIE9wZXJhdGlvbiB0eXBlIChPUF8qKSAqL1xcbitcXHRfX3U4ICBkZXY7XFx0XFx0LyogTU1EIGRldmljZSAqL1xcbitcXHRfX2xlMTYgYWRkcjtcXHRcXHQvKiBSZWdpc3RlciBhZGRyZXNzICovXFxuK1xcdF9fdTggIG1zYjtcXHRcXHQvKiBNU0IgYml0IHBvc2l0aW9uICovXFxuK1xcdF9fdTggIGxzYjtcXHRcXHQvKiBMU0IgYml0IHBvc2l0aW9uICovXFxuK1xcdF9fbGUxNiB2YWx1ZTtcXHRcXHQvKiBWYWx1ZSB0byB3cml0ZS9jb21wYXJlICovXFxuK1xcdF9fbGUxNiB0aW1lb3V0X21zO1xcdC8qIFBvbGwgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKi9cXG4rXFx0X191OCAgcG9sbF9zZXQ7XFx0XFx0LyogUG9sbCB1bnRpbCBlcXVhbCAoMSkgb3Igbm90IGVxdWFsICgwKSAqL1xcbitcXHRfX3U4ICByZXNlcnZlZDtcXHRcXHQvKiBSZXNlcnZlZCAqL1xcbit9O1xcbitcXG4rI2RlZmluZSBGV19IRUFERVJfU0laRVxcdFxcdHNpemVvZihzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyKVxcbisjZGVmaW5lIEZXX0VOVFJZX1NJWkVcXHRcXHRzaXplb2Yoc3RydWN0IHJ0bDgyNjF4X2Z3X2VudHJ5KVxcbiBcXG4gLyogUlRMODIxMUUgYW5kIFJUTDgyMTFGIHN1cHBvcnQgdXAgdG8gdGhyZWUgTEVEcyAqL1xcbiAjZGVmaW5lIFJUTDgyMTF4X0xFRF9DT1VOVFxcdFxcdFxcdDNcXG5AQCAtMjcwLDYgKzM0MCwxMSBAQCBzdHJ1Y3QgcnRsODIxeF9wcml2IHtcXG4gXFx0dTE2IGluZXI7XFxuIH07XFxuIFxcbitzdHJ1Y3QgcnRsODI2MXhfcHJpdiB7XFxuK1xcdGNvbnN0IGNoYXIgKmZ3X25hbWU7XFxuK1xcdGJvb2wgZndfbG9hZGVkO1xcbit9O1xcbitcXG4gc3RhdGljIGludCBydGw4MjF4X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiB7XFxuIFxcdHJldHVybiBfX3BoeV9yZWFkKHBoeWRldiwgUlRMODIxeF9QQUdFX1NFTEVDVCk7XFxuQEAgLTMxMCw2ICszODUsMzI5IEBAIHN0YXRpYyBpbnQgcnRsODIxeF9tb2RpZnlfZXh0X3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IGV4dF9wYWdlLFxcbiBcXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZHBhZ2UsIHJldCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgcnRsODI2MXhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG4rXFx0c3RydWN0IHJ0bDgyNjF4X3ByaXYgKnByaXY7XFxuK1xcdGludCBzdWJfcGh5X2lkLCByZXQ7XFxuK1xcbitcXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcHJpdilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRwaHlkZXYtXFx1MDAzZXByaXYgPSBwcml2O1xcbitcXG4rXFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjYxWF9FWFRfQUREUl9SRUcsXFxuK1xcdFxcdFxcdCAgICBSVExfODI2MVhfU1VCX1BIWV9JRF9BRERSKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODI2MVhfRVhUX0RBVEFfUkVHKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRzdWJfcGh5X2lkID0gKHJldCBcXHUwMDNlXFx1MDAzZSA4KSBcXHUwMDI2IDB4ZmY7XFxuK1xcbitcXHRzd2l0Y2ggKHN1Yl9waHlfaWQpIHtcXG4rXFx0Y2FzZSBSVEw4MjYxQ19DRV9NT0RFTDpcXG4rXFx0XFx0cHJpdi1cXHUwMDNlZndfbmFtZSA9IFJUTDgyNjFDX0NFX0ZXX05BTUU7XFxuK1xcdFxcdHBoeWRldl9pbmZvKHBoeWRldiwgXFxcIlJUTDgyNjFDIGRldGVjdGVkIChzdWJfaWQgMHglMDJ4KVxcXFxuXFxcIiwgc3ViX3BoeV9pZCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0Y2FzZSBSVEw4MjYxRF9NT0RFTDpcXG4rXFx0XFx0cGh5ZGV2X2luZm8ocGh5ZGV2LCBcXFwiUlRMODI2MUQgZGV0ZWN0ZWQgKHN1Yl9pZCAweCUwMngpXFxcXG5cXFwiLCBzdWJfcGh5X2lkKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRwaHlkZXZfd2FybihwaHlkZXYsIFxcXCJVbmtub3duIHN1Yl9pZCAweCUwMngsIGRlZmF1bHQgYmVoYXZpb3JcXFxcblxcXCIsIHN1Yl9waHlfaWQpO1xcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODI2MXhfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGdlbnBoeV9jNDVfcG1hX3JlYWRfYWJpbGl0aWVzKHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qXFxuK1xcdCAqIFN1cHBsZW1lbnQgTXVsdGktR2lnIHNwZWVkcyB0aGF0IG1heSBub3QgYmUgYXV0b21hdGljYWxseSBkZXRlY3RlZFxcbitcXHQgKiBSVEw4MjYxWCBzdXBwb3J0cyAyLjVHLzVHIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIDEwR1xcbitcXHQgKi9cXG4rXFx0bGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXFxuK1xcdFxcdFxcdCBwaHlkZXYtXFx1MDAzZXN1cHBvcnRlZCk7XFxuK1xcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfNTAwMGJhc2VUX0Z1bGxfQklULFxcbitcXHRcXHRcXHQgcGh5ZGV2LVxcdTAwM2VzdXBwb3J0ZWQpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODI2MXhfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0LCB2YWwgPSAwO1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkge1xcbitcXHRcXHRyZXQgPSBnZW5waHlfYzQ1X2FuZWdfZG9uZShwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFJUTDgyMlhfVk5EMl9DMjJfUkVHKE1JSV9TVEFUMTAwMCkpO1xcbitcXHRcXHRcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHZhbDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRtaWlfc3RhdDEwMDBfbW9kX2xpbmttb2RlX2xwYV90KHBoeWRldi1cXHUwMDNlbHBfYWR2ZXJ0aXNpbmcsIHZhbCk7XFxuK1xcbitcXHRyZXQgPSBnZW5waHlfYzQ1X3JlYWRfc3RhdHVzKHBoeWRldik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciAqaGRyO1xcbitcXHR1MzIgbWFpbl9tYWdpYywgc3ViX21hZ2ljO1xcbitcXHR1MzIgY2FsY19jcmMsIGZpbGVfY3JjO1xcbitcXHRzaXplX3QgZGF0YV9sZW47XFxuK1xcdHUxNiBudW1fZW50cmllcztcXG4rXFxuK1xcdGlmIChmdy1cXHUwMDNlc2l6ZSBcXHUwMDNjIEZXX0hFQURFUl9TSVpFKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiRmlybXdhcmUgdG9vIHNtYWxsOiAlenUgYnl0ZXNcXFxcblxcXCIsIGZ3LVxcdTAwM2VzaXplKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGhkciA9IChjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICopZnctXFx1MDAzZWRhdGE7XFxuK1xcbitcXHRtYWluX21hZ2ljID0gbGUzMl90b19jcHUoaGRyLVxcdTAwM2VtYWluX21hZ2ljKTtcXG4rXFx0aWYgKG1haW5fbWFnaWMgIT0gRldfTUFJTl9NQUdJQykge1xcbitcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIkludmFsaWQgZmlybXdhcmUgbWFnaWM6IDB4JTA4eFxcXFxuXFxcIiwgbWFpbl9tYWdpYyk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRzdWJfbWFnaWMgPSBsZTMyX3RvX2NwdShoZHItXFx1MDAzZXN1Yl9tYWdpYyk7XFxuK1xcdGlmIChzdWJfbWFnaWMgIT0gRldfU1VCX01BR0lDXzgyNjFDKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiSW52YWxpZCBzdWIgbWFnaWM6IDB4JTA4eFxcXFxuXFxcIiwgc3ViX21hZ2ljKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdG51bV9lbnRyaWVzID0gbGUxNl90b19jcHUoaGRyLVxcdTAwM2VudW1fZW50cmllcyk7XFxuK1xcdGRhdGFfbGVuID0gbnVtX2VudHJpZXMgKiBGV19FTlRSWV9TSVpFO1xcbitcXG4rXFx0aWYgKGZ3LVxcdTAwM2VzaXplICE9IHNpemVvZigqaGRyKSArIGRhdGFfbGVuKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiRmlybXdhcmUgc2l6ZSBtaXNtYXRjaFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRjYWxjX2NyYyA9IGNyYzMyKH4wLCBmdy1cXHUwMDNlZGF0YSArIEZXX0hFQURFUl9TSVpFLCBkYXRhX2xlbikgXiB+MDtcXG4rXFx0ZmlsZV9jcmMgPSBsZTMyX3RvX2NwdShoZHItXFx1MDAzZWNyYzMyKTtcXG4rXFxuK1xcdGlmIChjYWxjX2NyYyAhPSBmaWxlX2NyYykge1xcbitcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIkNSQzMyIG1pc21hdGNoOiBjYWxjdWxhdGVkPTB4JTA4eCBmaWxlPTB4JTA4eFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgY2FsY19jcmMsIGZpbGVfY3JjKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkgKmVudHJ5KVxcbit7XFxuK1xcdHUxNiBhZGRyLCB2YWx1ZSwgdGltZW91dF9tcztcXG4rXFx0dTggZGV2LCBtc2IsIGxzYiwgcG9sbF9zZXQ7XFxuK1xcdHUzMiBiaXRzLCBleHBlY3RfdmFsO1xcbitcXHRpbnQgcmV0LCB2YWw7XFxuK1xcbitcXHRkZXYgPSBlbnRyeS1cXHUwMDNlZGV2O1xcbitcXHRhZGRyID0gbGUxNl90b19jcHUoZW50cnktXFx1MDAzZWFkZHIpO1xcbitcXHRtc2IgPSBlbnRyeS1cXHUwMDNlbXNiO1xcbitcXHRsc2IgPSBlbnRyeS1cXHUwMDNlbHNiO1xcbitcXHR2YWx1ZSA9IGxlMTZfdG9fY3B1KGVudHJ5LVxcdTAwM2V2YWx1ZSk7XFxuK1xcdHRpbWVvdXRfbXMgPSBsZTE2X3RvX2NwdShlbnRyeS1cXHUwMDNldGltZW91dF9tcyk7XFxuK1xcdHBvbGxfc2V0ID0gZW50cnktXFx1MDAzZXBvbGxfc2V0O1xcbitcXG4rXFx0aWYgKHRpbWVvdXRfbXMgPT0gMClcXG4rXFx0XFx0dGltZW91dF9tcyA9IFJUTDgyNjFYX1BPTExfVElNRU9VVF9NUztcXG4rXFxuK1xcdGlmIChkZXYgXFx1MDAzZSBSVEw4MjYxWF9NQVhfTU1EX0RFVikge1xcbitcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcImludmFsaWQgZmlybXdhcmUgTU1EIGRldmljZTogZGV2PSV1XFxcXG5cXFwiLCBkZXYpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG1zYiBcXHUwMDNlIDE1IHx8IGxzYiBcXHUwMDNlIG1zYikge1xcbitcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcImludmFsaWQgZmlybXdhcmUgYml0czogbXNiPSV1LCBsc2I9JXVcXFxcblxcXCIsIG1zYiwgbHNiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHN3aXRjaCAoZW50cnktXFx1MDAzZXR5cGUpIHtcXG4rXFx0Y2FzZSBPUF9XUklURTpcXG4rXFx0XFx0cmV0ID0gcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBkZXYsIGFkZHIsXFxuK1xcdFxcdFxcdFxcdCAgICAgR0VOTUFTSyhtc2IsIGxzYiksICh2YWx1ZSBcXHUwMDNjXFx1MDAzYyBsc2IpIFxcdTAwMjYgR0VOTUFTSyhtc2IsIGxzYikpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgT1BfUE9MTDpcXG4rXFx0XFx0Yml0cyA9IEdFTk1BU0sobXNiLCBsc2IpO1xcbitcXHRcXHRleHBlY3RfdmFsID0gKHZhbHVlIFxcdTAwM2NcXHUwMDNjIGxzYikgXFx1MDAyNiBiaXRzO1xcbitcXG4rXFx0XFx0aWYgKHBvbGxfc2V0KVxcbitcXHRcXHRcXHRyZXQgPSBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgZGV2LCBhZGRyLCB2YWwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCh2YWwgXFx1MDAyNiBiaXRzKSA9PSBleHBlY3RfdmFsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQxMDAwLCB0aW1lb3V0X21zICogMTAwMCwgZmFsc2UpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBkZXYsIGFkZHIsIHZhbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0KHZhbCBcXHUwMDI2IGJpdHMpICE9IGV4cGVjdF92YWwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdDEwMDAsIHRpbWVvdXRfbXMgKiAxMDAwLCBmYWxzZSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bDgyNjF4X2Z3X2xvYWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgcnRsODI2MXhfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2VudHJ5ICplbnRyeTtcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciAqaGRyO1xcbitcXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xcbitcXHRpbnQgcmV0LCBpO1xcbitcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2Vmd19uYW1lKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldCA9IHJlcXVlc3RfZmlybXdhcmUoXFx1MDAyNmZ3LCBwcml2LVxcdTAwM2Vmd19uYW1lLCBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSAlczogJWRcXFxcblxcXCIsIHByaXYtXFx1MDAzZWZ3X25hbWUsIHJldCk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZShwaHlkZXYsIGZ3KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byByZWxlYXNlX2Z3O1xcbitcXG4rXFx0aGRyID0gKGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgKilmdy1cXHUwMDNlZGF0YTtcXG4rXFxuK1xcdGVudHJ5ID0gKGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSAqKShmdy1cXHUwMDNlZGF0YSArIEZXX0hFQURFUl9TSVpFKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGxlMTZfdG9fY3B1KGhkci1cXHUwMDNlbnVtX2VudHJpZXMpOyBpKyssIGVudHJ5KyspIHtcXG4rXFx0XFx0cmV0ID0gcnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeShwaHlkZXYsIGVudHJ5KTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIkVudHJ5ICVkIGZhaWxlZDogJWRcXFxcblxcXCIsIGksIHJldCk7XFxuK1xcdFxcdFxcdGdvdG8gcmVsZWFzZV9mdztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRwcml2LVxcdTAwM2Vmd19sb2FkZWQgPSB0cnVlO1xcbitcXG4rcmVsZWFzZV9mdzpcXG4rXFx0cmVsZWFzZV9maXJtd2FyZShmdyk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODI2MXhfY29uZmlnX2ludHIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlaW50ZXJydXB0cyA9PSBQSFlfSU5URVJSVVBUX0VOQUJMRUQpIHtcXG4rXFx0XFx0cmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5TUik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lORVIsXFxuK1xcdFxcdFxcdFxcdCAgICBSVEw4MjYxWF9JTlRfTUFTS19ERUZBVUxUKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODIyMUJfVk5EMl9JTkVSLCAwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODIyMUJfVk5EMl9JTlNSKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCBpcnFfc3RhdHVzO1xcbitcXG4rXFx0aXJxX3N0YXR1cyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lOU1IpO1xcbitcXHRpZiAoaXJxX3N0YXR1cyBcXHUwMDNjIDApIHtcXG4rXFx0XFx0cGh5X2Vycm9yKHBoeWRldik7XFxuK1xcdFxcdHJldHVybiBJUlFfTk9ORTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCEoaXJxX3N0YXR1cyBcXHUwMDI2IFJUTDgyNjFYX0lOVF9NQVNLX0FMTCkpXFxuK1xcdFxcdHJldHVybiBJUlFfTk9ORTtcXG4rXFxuK1xcdGlmIChpcnFfc3RhdHVzIFxcdTAwMjYgKFJUTDgyNjFYX0lOVF9MSU5LX0NIRyB8IFJUTDgyNjFYX0lOVF9BVVRPTkVHX0RPTkUgfFxcbitcXHQgICAgUlRMODI2MVhfSU5UX0FVVE9ORUdfRVJST1IgfCBSVEw4MjYxWF9JTlRfSkFCQkVSKSlcXG4rXFx0XFx0cGh5X3RyaWdnZXJfbWFjaGluZShwaHlkZXYpO1xcbitcXG4rXFx0cmV0dXJuIElSUV9IQU5ETEVEO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bDgyNjF4X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0dTE2IGFkdl8xZyA9IDA7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBnZW5waHlfYzQ1X2NvbmZpZ19hbmVnKHBoeWRldik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlYXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDBiYXNlVF9GdWxsX0JJVCxcXG4rXFx0XFx0XFx0ICAgICAgcGh5ZGV2LVxcdTAwM2VhZHZlcnRpc2luZykpXFxuK1xcdFxcdGFkdl8xZyA9IEFEVkVSVElTRV8xMDAwRlVMTDtcXG4rXFx0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDBiYXNlVF9IYWxmX0JJVCxcXG4rXFx0XFx0XFx0ICAgICAgcGh5ZGV2LVxcdTAwM2VhZHZlcnRpc2luZykpXFxuK1xcdFxcdGFkdl8xZyB8PSBBRFZFUlRJU0VfMTAwMEhBTEY7XFxuK1xcbitcXHRyZXQgPSBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfVkVORDIsXFxuK1xcdFxcdFxcdFxcdCAgICAgUlRMODIyWF9WTkQyX0MyMl9SRUcoTUlJX0NUUkwxMDAwKSxcXG4rXFx0XFx0XFx0XFx0ICAgICBBRFZFUlRJU0VfMTAwMEZVTEwgfCBBRFZFUlRJU0VfMTAwMEhBTEYsXFxuK1xcdFxcdFxcdFxcdCAgICAgYWR2XzFnKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdGlmIChyZXQgXFx1MDAzZSAwKVxcbitcXHRcXHRyZXR1cm4gZ2VucGh5X2M0NV9yZXN0YXJ0X2FuZWcocGh5ZGV2KTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bDgyNjF4X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHJ0bDgyNjF4X3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuK1xcbitcXHQvKiBUaGUgZmlybXdhcmUgcGFyYW1ldGVycyBhcmUgcHJlc2VydmVkIGFjcm9zcyBJRUVFIHNvZnQgcmVzZXRzIGFuZFxcbitcXHQgKiBzdXNwZW5kL3Jlc3VtZSBjeWNsZXMuIFJlbG9hZGluZyBpcyBvbmx5IG5lY2Vzc2FyeSBhZnRlciBhIHBvd2VyXFxuK1xcdCAqIGN5Y2xlIG9yIGhhcmQgcmVzZXQuXFxuK1xcdCAqL1xcbitcXHRpZiAocHJpdi1cXHUwMDNlZndfbmFtZSBcXHUwMDI2XFx1MDAyNiAhcHJpdi1cXHUwMDNlZndfbG9hZGVkKVxcbitcXHRcXHRyZXR1cm4gcnRsODI2MXhfZndfbG9hZChwaHlkZXYpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgcnRsODIxeF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbkBAIC0zMDAyLDYgKzM0MDAsMTkgQEAgc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHJlYWx0ZWtfZHJ2c1tdID0ge1xcbiBcXHRcXHQucmVzdW1lXFx0XFx0PSBnZW5waHlfcmVzdW1lLFxcbiBcXHRcXHQucmVhZF9tbWRcXHQ9IGdlbnBoeV9yZWFkX21tZF91bnN1cHBvcnRlZCxcXG4gXFx0XFx0LndyaXRlX21tZFxcdD0gZ2VucGh5X3dyaXRlX21tZF91bnN1cHBvcnRlZCxcXG4rXFx0fSwge1xcbitcXHRcXHRQSFlfSURfTUFUQ0hfRVhBQ1QoUlRMXzgyNjFDX0NHKSxcXG4rXFx0XFx0Lm5hbWVcXHRcXHRcXHQ9IFxcXCJSZWFsdGVrIFJUTDgyNjEgMTBHYnBzIFBIWVxcXCIsXFxuK1xcdFxcdC5wcm9iZVxcdFxcdFxcdD0gcnRsODI2MXhfcHJvYmUsXFxuK1xcdFxcdC5jb25maWdfaW5pdFxcdFxcdD0gcnRsODI2MXhfY29uZmlnX2luaXQsXFxuK1xcdFxcdC5nZXRfZmVhdHVyZXNcXHRcXHQ9IHJ0bDgyNjF4X2dldF9mZWF0dXJlcyxcXG4rXFx0XFx0LmNvbmZpZ19hbmVnXFx0XFx0PSBydGw4MjYxeF9jb25maWdfYW5lZyxcXG4rXFx0XFx0LnJlYWRfc3RhdHVzXFx0XFx0PSBydGw4MjYxeF9yZWFkX3N0YXR1cyxcXG4rXFx0XFx0LmNvbmZpZ19pbnRyXFx0XFx0PSBydGw4MjYxeF9jb25maWdfaW50cixcXG4rXFx0XFx0LmhhbmRsZV9pbnRlcnJ1cHRcXHQ9IHJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHQsXFxuK1xcdFxcdC5zb2Z0X3Jlc2V0XFx0XFx0PSBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0LFxcbitcXHRcXHQuc3VzcGVuZFxcdFxcdD0gZ2VucGh5X2M0NV9wbWFfc3VzcGVuZCxcXG4rXFx0XFx0LnJlc3VtZVxcdFxcdFxcdD0gZ2VucGh5X2M0NV9wbWFfcmVzdW1lLFxcbiBcXHR9LFxcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5pbmRleCBiZWZmMWQ2ZmNjN2NkYS4uNTdjZjlhYzM1MjRkMjIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5AQCAtMjMxNCw2ICsyMzE0LDcgQEAgaW50IGdlbnBoeV9jMzdfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCAqY2hhbmdlZCk7XFxuIC8qIENsYXVzZSA0NSBQSFkgKi9cXG4gaW50IGdlbnBoeV9jNDVfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbiBpbnQgZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgcmVzdGFydCk7XFxuK2ludCBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbiBpbnQgZ2VucGh5X2M0NV9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuIGludCBnZW5waHlfYzQ1X3JlYWRfbGluayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG4gaW50IGdlbnBoeV9jNDVfcmVhZF9scGEoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXFxuaW5kZXggYjI1NDFjOTQ4ZmMxZWIuLjA2ZjRiYzNjMjBjNzE3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXFxuQEAgLTMzMiw4ICszMzIsMTMgQEBcXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81R1xcdDB4MDA4MFxcdC8qIEFkdmVydGlzZSAyLjVHQkFTRS1UICovXFxuICNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX0FEVjVHXFx0MHgwMTAwXFx0LyogQWR2ZXJ0aXNlIDVHQkFTRS1UICovXFxuICNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX0FEVjEwR1xcdDB4MTAwMFxcdC8qIEFkdmVydGlzZSAxMEdCQVNFLVQgKi9cXG4rI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFXFx0MHg4MDAwXFx0LyogTWFzdGVyL3NsYXZlIG1hbnVhbCBjb25maWcgZW5hYmxlICovXFxuKyNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFXFx0MHg0MDAwXFx0LyogTWFzdGVyL3NsYXZlIGNvbmZpZyB2YWx1ZSAoMT1NYXN0ZXIpICovXFxuKyNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRVxcdDB4MjAwMFxcdC8qIE1hc3RlciBQcmVmZXJyZWQgVHlwZSAqL1xcbiBcXG4gLyogQU4gMTBHQkFTRS1UIHN0YXR1cyByZWdpc3Rlci4gKi9cXG4rI2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTVNfRkFVTFRcXHQweDgwMDBcXHQvKiBNYXN0ZXIvc2xhdmUgZmF1bHQgKi9cXG4rI2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTVNfUkVTXFx0MHg0MDAwXFx0LyogTWFzdGVyL3NsYXZlIHJlc29sdXRpb24gKDE9TWFzdGVyKSAqL1xcbiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9MUDJfNUdcXHQweDAwMjAgIC8qIExQIGlzIDIuNUdCVCBjYXBhYmxlICovXFxuICNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX0xQNUdcXHRcXHQweDAwNDAgIC8qIExQIGlzIDVHQlQgY2FwYWJsZSAqL1xcbiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9MUFRSUlxcdDB4MDIwMFxcdC8qIExQIHRyYWluaW5nIHJlc2V0IHJlcS4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NDc6NTguMzc3Mjc1NTI2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjEyNzg5OTI3MTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlJFQUxURUtfUEhZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldFwiLFxuICAgIFwiZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmVcIixcbiAgICBcImdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmVcIixcbiAgICBcInJ0bDgyNjF4X3Byb2JlXCIsXG4gICAgXCJydGw4MjYxeF9nZXRfZmVhdHVyZXNcIixcbiAgICBcInJ0bDgyNjF4X3JlYWRfc3RhdHVzXCIsXG4gICAgXCJydGw4MjYxeF92ZXJpZnlfZmlybXdhcmVcIixcbiAgICBcInJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnlcIixcbiAgICBcInJ0bDgyNjF4X2Z3X2xvYWRcIixcbiAgICBcInJ0bDgyNjF4X2NvbmZpZ19pbnRyXCIsXG4gICAgXCJydGw4MjYxeF9oYW5kbGVfaW50ZXJydXB0XCIsXG4gICAgXCJydGw4MjYxeF9jb25maWdfYW5lZ1wiLFxuICAgIFwicnRsODI2MXhfY29uZmlnX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBSZWFsdGVrIFJUTDgyNjEgMTBHYnBzIFBIWSBhbmQgaW50cm9kdWNlcyBDbGF1c2UgNDUgUEhZIE1hc3Rlci9TbGF2ZSBjb25maWd1cmF0aW9uLiBUaGUgY29kZSBpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBieSBlbXVsYXRpbmcgYSBVU0IgbmV0d29yayBhZGFwdGVyIChlLmcuLCBBU0lYIG9yIFNNU0MpIHRoYXQgZXhwb3NlcyBhbiBNRElPIGJ1cywgYW5kIHJlc3BvbmRpbmcgdG8gUEhZIElEIHJlYWRzIHdpdGggdGhlIFJUTDgyNjEgSUQuIFRoZSBkcml2ZXIgYWxzbyBwYXJzZXMgZmlybXdhcmUsIHdoaWNoIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDVjZDBhZDAwMjNlNTUzNjAyNGRmNGFlYTZhMzZkNjRjYzBkM2NlZTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyMSAxNTo0Nzo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXG5pbmRleCAxMjY5NTE3NDE0Mjg4Zi4uODcwOTIwMzExZjlhMDEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXG5AQCAtMzg0LDYgKzM4NCwxMTkgQEAgaW50IGdlbnBoeV9jNDVfY2hlY2tfYW5kX3Jlc3RhcnRfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIHJlc3RhcnQpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfY2hlY2tfYW5kX3Jlc3RhcnRfYW5lZyk7XG4gXG4rLyoqXG4rICogZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldCAtIHNvZnR3YXJlIHJlc2V0IHRoZSBQSFkgdmlhIENsYXVzZSA0NSBQTUEvUE1EIGNvbnRyb2wgcmVnaXN0ZXJcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxuKyAqL1xuK2ludCBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldCwgdmFsO1xuK1xuK1x0cmV0ID0gcGh5X3NldF9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19DVFJMMSxcbitcdFx0XHQgICAgICAgTURJT19DVFJMMV9SRVNFVCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsXG4rXHRcdFx0XHRcdCBNRElPX0NUUkwxLCB2YWwsXG4rXHRcdFx0XHRcdCAhKHZhbCBcdTAwMjYgTURJT19DVFJMMV9SRVNFVCksXG4rXHRcdFx0XHRcdCA1MDAwLCA2MDAwMDAsIHRydWUpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0KTtcbitcbisvKipcbisgKiBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZSAtIENvbmZpZ3VyZSBNYXN0ZXIvU2xhdmUgc2V0dGluZyBmb3IgQzQ1IFBIWXNcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKlxuKyAqIERlc2NyaXB0aW9uOiBDb25maWd1cmUgdGhlIGZvcmNlZCBvciBwcmVmZXJyZWQgTWFzdGVyL1NsYXZlIHJvbGVcbisgKiAxMEdCQVNFLVQgY29udHJvbCByZWdpc3RlciAoTU1EIDcsIFJlZ2lzdGVyIDB4MDAyMCkgYWNjb3JkaW5nIHRvXG4rICogSUVFRSA4MDIuMyBzdGFuZGFyZHMuXG4rICpcbisgKiBSZXR1cm46IG5lZ2F0aXZlIGVycm5vIGNvZGUgb24gZmFpbHVyZSwgMCBpZiBNYXN0ZXIvU2xhdmUgZGlkbid0IGNoYW5nZSxcbisgKiBvciAxIGlmIE1hc3Rlci9TbGF2ZSBtb2RlcyBjaGFuZ2VkLlxuKyAqL1xuK3N0YXRpYyBpbnQgZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHR1MTYgY3RsID0gMDtcbitcbitcdHN3aXRjaCAocGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9zZXQpIHtcbitcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfUFJFRkVSUkVEOlxuK1x0XHRjdGwgPSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfUE9SVF9UWVBFO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9QUkVGRVJSRUQ6XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBNQVNURVJfU0xBVkVfQ0ZHX01BU1RFUl9GT1JDRTpcbitcdFx0Y3RsID0gTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRSB8IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfU0xBVkVfRk9SQ0U6XG4rXHRcdGN0bCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEU7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBNQVNURVJfU0xBVkVfQ0ZHX1VOS05PV046XG4rXHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfVU5TVVBQT1JURUQ6XG4rXHRcdHJldHVybiAwO1xuK1x0ZGVmYXVsdDpcbitcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcIlVuc3VwcG9ydGVkIE1hc3Rlci9TbGF2ZSBtb2RlXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX0NUUkwsXG4rXHRcdFx0XHQgICAgICBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFIHxcbitcdFx0XHRcdCAgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRSB8XG4rXHRcdFx0XHQgICAgICBNRElPX0FOXzEwR0JUX0NUUkxfTVNfUE9SVF9UWVBFLCBjdGwpO1xuK31cbitcbisvKipcbisgKiBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlIC0gcmVhZCBtYXN0ZXIvc2xhdmUgc3RhdHVzXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4rICpcbisgKiBEZXNjcmlwdGlvbjogUmVhZCB0aGUgTWFzdGVyL1NsYXZlIGNvbmZpZ3VyYXRpb24gYW5kIHN0YXR1c1xuKyAqIGZyb20gMTBHQkFTRS1UIGNvbnRyb2wvc3RhdHVzIHJlZ2lzdGVycyAoTU1EIDcsIFJlZyAweDAwMjAgYW5kIDB4MDAyMSkuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4rICovXG4rc3RhdGljIGludCBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHZhbDtcbitcbitcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19VTktOT1dOO1xuK1x0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9VTktOT1dOO1xuK1xuK1x0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfQ1RSTCk7XG4rXHRpZiAodmFsIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gdmFsO1xuK1xuK1x0aWYgKHZhbCBcdTAwMjYgTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRSkge1xuK1x0XHRpZiAodmFsIFx1MDAyNiBNRElPX0FOXzEwR0JUX0NUUkxfTVNfVkFMVUUpXG4rXHRcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX01BU1RFUl9GT1JDRTtcbitcdFx0ZWxzZVxuK1x0XHRcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9GT1JDRTtcbitcdH0gZWxzZSB7XG4rXHRcdGlmICh2YWwgXHUwMDI2IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19QT1JUX1RZUEUpXG4rXHRcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX01BU1RFUl9QUkVGRVJSRUQ7XG4rXHRcdGVsc2VcbitcdFx0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfU0xBVkVfUFJFRkVSUkVEO1xuK1x0fVxuK1xuK1x0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfU1RBVCk7XG4rXHRpZiAodmFsIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gdmFsO1xuK1xuK1x0aWYgKHZhbCBcdTAwMjYgTURJT19BTl8xMEdCVF9TVEFUX01TX0ZBVUxUKSB7XG4rXHRcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfRVJSO1xuK1x0fSBlbHNlIGlmIChwaHlkZXYtXHUwMDNlbGluaykge1xuK1x0XHRpZiAodmFsIFx1MDAyNiBNRElPX0FOXzEwR0JUX1NUQVRfTVNfUkVTKVxuK1x0XHRcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfTUFTVEVSO1xuK1x0XHRlbHNlXG4rXHRcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9TTEFWRTtcbitcdH0gZWxzZSB7XG4rXHRcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfVU5LTk9XTjtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiAvKipcbiAgKiBnZW5waHlfYzQ1X2FuZWdfZG9uZSAtIHJldHVybiBhdXRvLW5lZ290aWF0aW9uIGNvbXBsZXRlIHN0YXR1c1xuICAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuQEAgLTExOTIsNiArMTMwNSwxMCBAQCBpbnQgZ2VucGh5X2M0NV9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0XHRcdHJldCA9IGdlbnBoeV9jNDVfYmFzZXQxX3JlYWRfc3RhdHVzKHBoeWRldik7XG4gXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cmV0ID0gZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZShwaHlkZXYpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHR9XG4gXG4gXHRcdHBoeV9yZXNvbHZlX2FuZWdfbGlua21vZGUocGh5ZGV2KTtcbkBAIC0xMjI1LDYgKzEzNDIsMTQgQEAgaW50IGdlbnBoeV9jNDVfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdGlmIChyZXQgXHUwMDNlIDApXG4gXHRcdGNoYW5nZWQgPSB0cnVlO1xuIFxuK1x0aWYgKCFnZW5waHlfYzQ1X2Jhc2V0MV9hYmxlKHBoeWRldikpIHtcbitcdFx0cmV0ID0gZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmUocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRpZiAocmV0IFx1MDAzZSAwKVxuK1x0XHRcdGNoYW5nZWQgPSB0cnVlO1xuK1x0fVxuK1xuIFx0cmV0dXJuIGdlbnBoeV9jNDVfY2hlY2tfYW5kX3Jlc3RhcnRfYW5lZyhwaHlkZXYsIGNoYW5nZWQpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X2NvbmZpZ19hbmVnKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXG5pbmRleCBiNjVkMGY1ZmExYTAxNC4uMWMwYjljNDBhODFlNTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcbkBAIC04LDcgKzgsOSBAQFxuICAqIENvcHlyaWdodCAoYykgMjAwNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLlxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdG9wcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY3JjMzIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aHRvb2xfbmV0bGluay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZmlybXdhcmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtX3dha2VpcnEuaFx1MDAzZVxuQEAgLTE0MSw2ICsxNDMsMTAgQEBcbiAjZGVmaW5lIFJUTDgyMTFGX1BIWVNJQ0FMX0FERFJfV09SRDFcdFx0MTdcbiAjZGVmaW5lIFJUTDgyMTFGX1BIWVNJQ0FMX0FERFJfV09SRDJcdFx0MThcbiBcbisjZGVmaW5lIFJUTDgyNjFYX0VYVF9BRERSX1JFR1x0XHRcdDB4YTQzNlxuKyNkZWZpbmUgUlRMODI2MVhfRVhUX0RBVEFfUkVHXHRcdFx0MHhhNDM4XG4rI2RlZmluZSBSVExfODI2MVhfU1VCX1BIWV9JRF9BRERSXHRcdDB4ODAxZFxuK1xuICNkZWZpbmUgUlRMODIyWF9WTkQxX1NFUkRFU19PUFRJT05cdFx0XHQweDY5N2FcbiAjZGVmaW5lIFJUTDgyMlhfVk5EMV9TRVJERVNfT1BUSU9OX01PREVfTUFTS1x0XHRHRU5NQVNLKDUsIDApXG4gI2RlZmluZSBSVEw4MjJYX1ZORDFfU0VSREVTX09QVElPTl9NT0RFXzI1MDBCQVNFWF9TR01JSVx0XHQwXG5AQCAtMjUxLDYgKzI1Nyw3MCBAQFxuICNkZWZpbmUgUlRMXzgyMjFCX1ZNX0NHXHRcdFx0XHQweDAwMWNjODRhXG4gI2RlZmluZSBSVExfODI1MUJcdFx0XHRcdDB4MDAxY2M4NjJcbiAjZGVmaW5lIFJUTF84MjYxQ1x0XHRcdFx0MHgwMDFjYzg5MFxuKyNkZWZpbmUgUlRMXzgyNjFDX0NHXHRcdFx0XHQweDAwMWNjODk4XG4rXG4rI2RlZmluZSBSVEw4MjYxQ19DRV9NT0RFTFx0XHQweDAwXG4rI2RlZmluZSBSVEw4MjYxRF9NT0RFTFx0XHRcdDB4ODFcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9BVVRPTkVHX0VSUk9SXHRCSVQoMClcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9QQUdFX1JFQ1ZcdFx0QklUKDIpXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfQVVUT05FR19ET05FXHRCSVQoMylcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9MSU5LX0NIR1x0XHRCSVQoNClcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9QSFlfUkVHX0FDQ0VTU1x0QklUKDUpXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfUE1FXHRcdEJJVCg3KVxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX0FMRFBTX0NIR1x0XHRCSVQoOSlcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9KQUJCRVJcdFx0QklUKDEwKVxuK1xuKyNkZWZpbmUgUlRMODI2MVhfSU5UX01BU0tfREVGQVVMVFx0KFJUTDgyNjFYX0lOVF9BVVRPTkVHX0RPTkUgfCBcXFxuK1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0xJTktfQ0hHIHwgXFxcbitcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9BVVRPTkVHX0VSUk9SIHwgXFxcbitcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9KQUJCRVIpXG4rXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfTUFTS19BTExcdFx0KFJUTDgyNjFYX0lOVF9BVVRPTkVHX0VSUk9SIHwgXFxcbitcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9QQUdFX1JFQ1YgfCBcXFxuK1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8IFxcXG4rXHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfTElOS19DSEcgfCBcXFxuK1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX1BIWV9SRUdfQUNDRVNTIHwgXFxcbitcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9QTUUgfCBcXFxuK1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0FMRFBTX0NIRyB8IFxcXG4rXHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfSkFCQkVSKVxuK1xuKyNkZWZpbmUgRldfTUFJTl9NQUdJQ1x0XHRcdDB4NTI1NDRDMzhcbisjZGVmaW5lIEZXX1NVQl9NQUdJQ184MjYxQ1x0XHQweDMyMzYzMTQzXG4rI2RlZmluZSBSVEw4MjYxWF9QT0xMX1RJTUVPVVRfTVNcdDEwMFxuKyNkZWZpbmUgUlRMODI2MVhfTUFYX01NRF9ERVZcdFx0MzFcbitcbisjZGVmaW5lIFJUTDgyNjFDX0NFX0ZXX05BTUVcdFwicnRsX25pYy9ydGw4MjYxYy5iaW5cIlxuK01PRFVMRV9GSVJNV0FSRShSVEw4MjYxQ19DRV9GV19OQU1FKTtcbitcbitlbnVtIHJ0bDgyNjF4X2Z3X29wIHtcbitcdE9QX1dSSVRFID0gMHgwMCxcdC8qIFdyaXRlICovXG4rXHRPUF9QT0xMICA9IDB4MDIsXHQvKiBQb2xsaW5nICovXG4rfTtcbitcbitzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyIHtcbitcdF9fbGUzMiBtYWluX21hZ2ljO1x0LyogTWFpbiBtYWdpYyBudW1iZXIgKi9cbitcdF9fbGUzMiBzdWJfbWFnaWM7XHQvKiBTdWIgbWFnaWMgbnVtYmVyICovXG4rXHRfX2xlMTYgdmVyc2lvbl9tYWpvcjtcdC8qIE1ham9yIHZlcnNpb24gKi9cbitcdF9fbGUxNiB2ZXJzaW9uX21pbm9yO1x0LyogTWlub3IgdmVyc2lvbiAqL1xuK1x0X19sZTE2IG51bV9lbnRyaWVzO1x0LyogTnVtYmVyIG9mIGVudHJpZXMgKi9cbitcdF9fbGUxNiByZXNlcnZlZDtcdC8qIFJlc2VydmVkICovXG4rXHRfX2xlMzIgY3JjMzI7XHRcdC8qIENSQzMyIGNoZWNrc3VtICovXG4rfTtcbitcbitzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkge1xuK1x0X191OCAgdHlwZTtcdFx0LyogT3BlcmF0aW9uIHR5cGUgKE9QXyopICovXG4rXHRfX3U4ICBkZXY7XHRcdC8qIE1NRCBkZXZpY2UgKi9cbitcdF9fbGUxNiBhZGRyO1x0XHQvKiBSZWdpc3RlciBhZGRyZXNzICovXG4rXHRfX3U4ICBtc2I7XHRcdC8qIE1TQiBiaXQgcG9zaXRpb24gKi9cbitcdF9fdTggIGxzYjtcdFx0LyogTFNCIGJpdCBwb3NpdGlvbiAqL1xuK1x0X19sZTE2IHZhbHVlO1x0XHQvKiBWYWx1ZSB0byB3cml0ZS9jb21wYXJlICovXG4rXHRfX2xlMTYgdGltZW91dF9tcztcdC8qIFBvbGwgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKi9cbitcdF9fdTggIHBvbGxfc2V0O1x0XHQvKiBQb2xsIHVudGlsIGVxdWFsICgxKSBvciBub3QgZXF1YWwgKDApICovXG4rXHRfX3U4ICByZXNlcnZlZDtcdFx0LyogUmVzZXJ2ZWQgKi9cbit9O1xuK1xuKyNkZWZpbmUgRldfSEVBREVSX1NJWkVcdFx0c2l6ZW9mKHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIpXG4rI2RlZmluZSBGV19FTlRSWV9TSVpFXHRcdHNpemVvZihzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkpXG4gXG4gLyogUlRMODIxMUUgYW5kIFJUTDgyMTFGIHN1cHBvcnQgdXAgdG8gdGhyZWUgTEVEcyAqL1xuICNkZWZpbmUgUlRMODIxMXhfTEVEX0NPVU5UXHRcdFx0M1xuQEAgLTI3MCw2ICszNDAsMTEgQEAgc3RydWN0IHJ0bDgyMXhfcHJpdiB7XG4gXHR1MTYgaW5lcjtcbiB9O1xuIFxuK3N0cnVjdCBydGw4MjYxeF9wcml2IHtcbitcdGNvbnN0IGNoYXIgKmZ3X25hbWU7XG4rXHRib29sIGZ3X2xvYWRlZDtcbit9O1xuK1xuIHN0YXRpYyBpbnQgcnRsODIxeF9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4gXHRyZXR1cm4gX19waHlfcmVhZChwaHlkZXYsIFJUTDgyMXhfUEFHRV9TRUxFQ1QpO1xuQEAgLTMxMCw2ICszODUsMzI5IEBAIHN0YXRpYyBpbnQgcnRsODIxeF9tb2RpZnlfZXh0X3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IGV4dF9wYWdlLFxuIFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRwYWdlLCByZXQpO1xuIH1cbiBcbitzdGF0aWMgaW50IHJ0bDgyNjF4X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuK1x0c3RydWN0IHJ0bDgyNjF4X3ByaXYgKnByaXY7XG4rXHRpbnQgc3ViX3BoeV9pZCwgcmV0O1xuK1xuK1x0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwcml2KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHBoeWRldi1cdTAwM2Vwcml2ID0gcHJpdjtcbitcbitcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODI2MVhfRVhUX0FERFJfUkVHLFxuK1x0XHRcdCAgICBSVExfODI2MVhfU1VCX1BIWV9JRF9BRERSKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODI2MVhfRVhUX0RBVEFfUkVHKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRzdWJfcGh5X2lkID0gKHJldCBcdTAwM2VcdTAwM2UgOCkgXHUwMDI2IDB4ZmY7XG4rXG4rXHRzd2l0Y2ggKHN1Yl9waHlfaWQpIHtcbitcdGNhc2UgUlRMODI2MUNfQ0VfTU9ERUw6XG4rXHRcdHByaXYtXHUwMDNlZndfbmFtZSA9IFJUTDgyNjFDX0NFX0ZXX05BTUU7XG4rXHRcdHBoeWRldl9pbmZvKHBoeWRldiwgXCJSVEw4MjYxQyBkZXRlY3RlZCAoc3ViX2lkIDB4JTAyeClcXG5cIiwgc3ViX3BoeV9pZCk7XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSBSVEw4MjYxRF9NT0RFTDpcbitcdFx0cGh5ZGV2X2luZm8ocGh5ZGV2LCBcIlJUTDgyNjFEIGRldGVjdGVkIChzdWJfaWQgMHglMDJ4KVxcblwiLCBzdWJfcGh5X2lkKTtcbitcdFx0YnJlYWs7XG4rXG4rXHRkZWZhdWx0OlxuK1x0XHRwaHlkZXZfd2FybihwaHlkZXYsIFwiVW5rbm93biBzdWJfaWQgMHglMDJ4LCBkZWZhdWx0IGJlaGF2aW9yXFxuXCIsIHN1Yl9waHlfaWQpO1xuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bDgyNjF4X2dldF9mZWF0dXJlcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBnZW5waHlfYzQ1X3BtYV9yZWFkX2FiaWxpdGllcyhwaHlkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcdC8qXG4rXHQgKiBTdXBwbGVtZW50IE11bHRpLUdpZyBzcGVlZHMgdGhhdCBtYXkgbm90IGJlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWRcbitcdCAqIFJUTDgyNjFYIHN1cHBvcnRzIDIuNUcvNUcgaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgMTBHXG4rXHQgKi9cbitcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULFxuK1x0XHRcdCBwaHlkZXYtXHUwMDNlc3VwcG9ydGVkKTtcbitcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfNTAwMGJhc2VUX0Z1bGxfQklULFxuK1x0XHRcdCBwaHlkZXYtXHUwMDNlc3VwcG9ydGVkKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bDgyNjF4X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldCwgdmFsID0gMDtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkge1xuK1x0XHRyZXQgPSBnZW5waHlfYzQ1X2FuZWdfZG9uZShwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMixcbitcdFx0XHRcdFx0ICAgUlRMODIyWF9WTkQyX0MyMl9SRUcoTUlJX1NUQVQxMDAwKSk7XG4rXHRcdFx0aWYgKHZhbCBcdTAwM2MgMClcbitcdFx0XHRcdHJldHVybiB2YWw7XG4rXHRcdH1cbitcdH1cbitcbitcdG1paV9zdGF0MTAwMF9tb2RfbGlua21vZGVfbHBhX3QocGh5ZGV2LVx1MDAzZWxwX2FkdmVydGlzaW5nLCB2YWwpO1xuK1xuK1x0cmV0ID0gZ2VucGh5X2M0NV9yZWFkX3N0YXR1cyhwaHlkZXYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxuK3tcbitcdGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgKmhkcjtcbitcdHUzMiBtYWluX21hZ2ljLCBzdWJfbWFnaWM7XG4rXHR1MzIgY2FsY19jcmMsIGZpbGVfY3JjO1xuK1x0c2l6ZV90IGRhdGFfbGVuO1xuK1x0dTE2IG51bV9lbnRyaWVzO1xuK1xuK1x0aWYgKGZ3LVx1MDAzZXNpemUgXHUwMDNjIEZXX0hFQURFUl9TSVpFKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIkZpcm13YXJlIHRvbyBzbWFsbDogJXp1IGJ5dGVzXFxuXCIsIGZ3LVx1MDAzZXNpemUpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGhkciA9IChjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICopZnctXHUwMDNlZGF0YTtcbitcbitcdG1haW5fbWFnaWMgPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlbWFpbl9tYWdpYyk7XG4rXHRpZiAobWFpbl9tYWdpYyAhPSBGV19NQUlOX01BR0lDKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIkludmFsaWQgZmlybXdhcmUgbWFnaWM6IDB4JTA4eFxcblwiLCBtYWluX21hZ2ljKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRzdWJfbWFnaWMgPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlc3ViX21hZ2ljKTtcbitcdGlmIChzdWJfbWFnaWMgIT0gRldfU1VCX01BR0lDXzgyNjFDKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIkludmFsaWQgc3ViIG1hZ2ljOiAweCUwOHhcXG5cIiwgc3ViX21hZ2ljKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRudW1fZW50cmllcyA9IGxlMTZfdG9fY3B1KGhkci1cdTAwM2VudW1fZW50cmllcyk7XG4rXHRkYXRhX2xlbiA9IG51bV9lbnRyaWVzICogRldfRU5UUllfU0laRTtcbitcbitcdGlmIChmdy1cdTAwM2VzaXplICE9IHNpemVvZigqaGRyKSArIGRhdGFfbGVuKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIkZpcm13YXJlIHNpemUgbWlzbWF0Y2hcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0Y2FsY19jcmMgPSBjcmMzMih+MCwgZnctXHUwMDNlZGF0YSArIEZXX0hFQURFUl9TSVpFLCBkYXRhX2xlbikgXiB+MDtcbitcdGZpbGVfY3JjID0gbGUzMl90b19jcHUoaGRyLVx1MDAzZWNyYzMyKTtcbitcbitcdGlmIChjYWxjX2NyYyAhPSBmaWxlX2NyYykge1xuK1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJDUkMzMiBtaXNtYXRjaDogY2FsY3VsYXRlZD0weCUwOHggZmlsZT0weCUwOHhcXG5cIixcbitcdFx0XHQgICBjYWxjX2NyYywgZmlsZV9jcmMpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2VudHJ5ICplbnRyeSlcbit7XG4rXHR1MTYgYWRkciwgdmFsdWUsIHRpbWVvdXRfbXM7XG4rXHR1OCBkZXYsIG1zYiwgbHNiLCBwb2xsX3NldDtcbitcdHUzMiBiaXRzLCBleHBlY3RfdmFsO1xuK1x0aW50IHJldCwgdmFsO1xuK1xuK1x0ZGV2ID0gZW50cnktXHUwMDNlZGV2O1xuK1x0YWRkciA9IGxlMTZfdG9fY3B1KGVudHJ5LVx1MDAzZWFkZHIpO1xuK1x0bXNiID0gZW50cnktXHUwMDNlbXNiO1xuK1x0bHNiID0gZW50cnktXHUwMDNlbHNiO1xuK1x0dmFsdWUgPSBsZTE2X3RvX2NwdShlbnRyeS1cdTAwM2V2YWx1ZSk7XG4rXHR0aW1lb3V0X21zID0gbGUxNl90b19jcHUoZW50cnktXHUwMDNldGltZW91dF9tcyk7XG4rXHRwb2xsX3NldCA9IGVudHJ5LVx1MDAzZXBvbGxfc2V0O1xuK1xuK1x0aWYgKHRpbWVvdXRfbXMgPT0gMClcbitcdFx0dGltZW91dF9tcyA9IFJUTDgyNjFYX1BPTExfVElNRU9VVF9NUztcbitcbitcdGlmIChkZXYgXHUwMDNlIFJUTDgyNjFYX01BWF9NTURfREVWKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcImludmFsaWQgZmlybXdhcmUgTU1EIGRldmljZTogZGV2PSV1XFxuXCIsIGRldik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKG1zYiBcdTAwM2UgMTUgfHwgbHNiIFx1MDAzZSBtc2IpIHtcbitcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiaW52YWxpZCBmaXJtd2FyZSBiaXRzOiBtc2I9JXUsIGxzYj0ldVxcblwiLCBtc2IsIGxzYik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0c3dpdGNoIChlbnRyeS1cdTAwM2V0eXBlKSB7XG4rXHRjYXNlIE9QX1dSSVRFOlxuK1x0XHRyZXQgPSBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIGRldiwgYWRkcixcbitcdFx0XHRcdCAgICAgR0VOTUFTSyhtc2IsIGxzYiksICh2YWx1ZSBcdTAwM2NcdTAwM2MgbHNiKSBcdTAwMjYgR0VOTUFTSyhtc2IsIGxzYikpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSBPUF9QT0xMOlxuK1x0XHRiaXRzID0gR0VOTUFTSyhtc2IsIGxzYik7XG4rXHRcdGV4cGVjdF92YWwgPSAodmFsdWUgXHUwMDNjXHUwMDNjIGxzYikgXHUwMDI2IGJpdHM7XG4rXG4rXHRcdGlmIChwb2xsX3NldClcbitcdFx0XHRyZXQgPSBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgZGV2LCBhZGRyLCB2YWwsXG4rXHRcdFx0XHRcdFx0XHQodmFsIFx1MDAyNiBiaXRzKSA9PSBleHBlY3RfdmFsLFxuK1x0XHRcdFx0XHRcdFx0MTAwMCwgdGltZW91dF9tcyAqIDEwMDAsIGZhbHNlKTtcbitcdFx0ZWxzZVxuK1x0XHRcdHJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBkZXYsIGFkZHIsIHZhbCxcbitcdFx0XHRcdFx0XHRcdCh2YWwgXHUwMDI2IGJpdHMpICE9IGV4cGVjdF92YWwsXG4rXHRcdFx0XHRcdFx0XHQxMDAwLCB0aW1lb3V0X21zICogMTAwMCwgZmFsc2UpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdGJyZWFrO1xuK1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydGw4MjYxeF9md19sb2FkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHJ0bDgyNjF4X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSAqZW50cnk7XG4rXHRjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICpoZHI7XG4rXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xuK1x0aW50IHJldCwgaTtcbitcbitcdGlmICghcHJpdi1cdTAwM2Vmd19uYW1lKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldCA9IHJlcXVlc3RfZmlybXdhcmUoXHUwMDI2ZncsIHByaXYtXHUwMDNlZndfbmFtZSwgXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KTtcbitcdGlmIChyZXQpIHtcbitcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiRmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgJXM6ICVkXFxuXCIsIHByaXYtXHUwMDNlZndfbmFtZSwgcmV0KTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldCA9IHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZShwaHlkZXYsIGZ3KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gcmVsZWFzZV9mdztcbitcbitcdGhkciA9IChjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICopZnctXHUwMDNlZGF0YTtcbitcbitcdGVudHJ5ID0gKGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSAqKShmdy1cdTAwM2VkYXRhICsgRldfSEVBREVSX1NJWkUpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGUxNl90b19jcHUoaGRyLVx1MDAzZW51bV9lbnRyaWVzKTsgaSsrLCBlbnRyeSsrKSB7XG4rXHRcdHJldCA9IHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnkocGh5ZGV2LCBlbnRyeSk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJFbnRyeSAlZCBmYWlsZWQ6ICVkXFxuXCIsIGksIHJldCk7XG4rXHRcdFx0Z290byByZWxlYXNlX2Z3O1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRwcml2LVx1MDAzZWZ3X2xvYWRlZCA9IHRydWU7XG4rXG4rcmVsZWFzZV9mdzpcbitcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBydGw4MjYxeF9jb25maWdfaW50cihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRpZiAocGh5ZGV2LVx1MDAzZWludGVycnVwdHMgPT0gUEhZX0lOVEVSUlVQVF9FTkFCTEVEKSB7XG4rXHRcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lOU1IpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODIyMUJfVk5EMl9JTkVSLFxuK1x0XHRcdFx0ICAgIFJUTDgyNjFYX0lOVF9NQVNLX0RFRkFVTFQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5FUiwgMCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0cmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5TUik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBpcnFfc3RhdHVzO1xuK1xuK1x0aXJxX3N0YXR1cyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lOU1IpO1xuK1x0aWYgKGlycV9zdGF0dXMgXHUwMDNjIDApIHtcbitcdFx0cGh5X2Vycm9yKHBoeWRldik7XG4rXHRcdHJldHVybiBJUlFfTk9ORTtcbitcdH1cbitcbitcdGlmICghKGlycV9zdGF0dXMgXHUwMDI2IFJUTDgyNjFYX0lOVF9NQVNLX0FMTCkpXG4rXHRcdHJldHVybiBJUlFfTk9ORTtcbitcbitcdGlmIChpcnFfc3RhdHVzIFx1MDAyNiAoUlRMODI2MVhfSU5UX0xJTktfQ0hHIHwgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8XG4rXHQgICAgUlRMODI2MVhfSU5UX0FVVE9ORUdfRVJST1IgfCBSVEw4MjYxWF9JTlRfSkFCQkVSKSlcbitcdFx0cGh5X3RyaWdnZXJfbWFjaGluZShwaHlkZXYpO1xuK1xuK1x0cmV0dXJuIElSUV9IQU5ETEVEO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bDgyNjF4X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0dTE2IGFkdl8xZyA9IDA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gZ2VucGh5X2M0NV9jb25maWdfYW5lZyhwaHlkZXYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlYXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDBiYXNlVF9GdWxsX0JJVCxcbitcdFx0XHQgICAgICBwaHlkZXYtXHUwMDNlYWR2ZXJ0aXNpbmcpKVxuK1x0XHRhZHZfMWcgPSBBRFZFUlRJU0VfMTAwMEZVTEw7XG4rXHRpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMGJhc2VUX0hhbGZfQklULFxuK1x0XHRcdCAgICAgIHBoeWRldi1cdTAwM2VhZHZlcnRpc2luZykpXG4rXHRcdGFkdl8xZyB8PSBBRFZFUlRJU0VfMTAwMEhBTEY7XG4rXG4rXHRyZXQgPSBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfVkVORDIsXG4rXHRcdFx0XHQgICAgIFJUTDgyMlhfVk5EMl9DMjJfUkVHKE1JSV9DVFJMMTAwMCksXG4rXHRcdFx0XHQgICAgIEFEVkVSVElTRV8xMDAwRlVMTCB8IEFEVkVSVElTRV8xMDAwSEFMRixcbitcdFx0XHRcdCAgICAgYWR2XzFnKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRpZiAocmV0IFx1MDAzZSAwKVxuK1x0XHRyZXR1cm4gZ2VucGh5X2M0NV9yZXN0YXJ0X2FuZWcocGh5ZGV2KTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bDgyNjF4X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHJ0bDgyNjF4X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcbitcdC8qIFRoZSBmaXJtd2FyZSBwYXJhbWV0ZXJzIGFyZSBwcmVzZXJ2ZWQgYWNyb3NzIElFRUUgc29mdCByZXNldHMgYW5kXG4rXHQgKiBzdXNwZW5kL3Jlc3VtZSBjeWNsZXMuIFJlbG9hZGluZyBpcyBvbmx5IG5lY2Vzc2FyeSBhZnRlciBhIHBvd2VyXG4rXHQgKiBjeWNsZSBvciBoYXJkIHJlc2V0LlxuK1x0ICovXG4rXHRpZiAocHJpdi1cdTAwM2Vmd19uYW1lIFx1MDAyNlx1MDAyNiAhcHJpdi1cdTAwM2Vmd19sb2FkZWQpXG4rXHRcdHJldHVybiBydGw4MjYxeF9md19sb2FkKHBoeWRldik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBydGw4MjF4X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuIFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuQEAgLTMwMDIsNiArMzQwMCwxOSBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgcmVhbHRla19kcnZzW10gPSB7XG4gXHRcdC5yZXN1bWVcdFx0PSBnZW5waHlfcmVzdW1lLFxuIFx0XHQucmVhZF9tbWRcdD0gZ2VucGh5X3JlYWRfbW1kX3Vuc3VwcG9ydGVkLFxuIFx0XHQud3JpdGVfbW1kXHQ9IGdlbnBoeV93cml0ZV9tbWRfdW5zdXBwb3J0ZWQsXG4rXHR9LCB7XG4rXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChSVExfODI2MUNfQ0cpLFxuK1x0XHQubmFtZVx0XHRcdD0gXCJSZWFsdGVrIFJUTDgyNjEgMTBHYnBzIFBIWVwiLFxuK1x0XHQucHJvYmVcdFx0XHQ9IHJ0bDgyNjF4X3Byb2JlLFxuK1x0XHQuY29uZmlnX2luaXRcdFx0PSBydGw4MjYxeF9jb25maWdfaW5pdCxcbitcdFx0LmdldF9mZWF0dXJlc1x0XHQ9IHJ0bDgyNjF4X2dldF9mZWF0dXJlcyxcbitcdFx0LmNvbmZpZ19hbmVnXHRcdD0gcnRsODI2MXhfY29uZmlnX2FuZWcsXG4rXHRcdC5yZWFkX3N0YXR1c1x0XHQ9IHJ0bDgyNjF4X3JlYWRfc3RhdHVzLFxuK1x0XHQuY29uZmlnX2ludHJcdFx0PSBydGw4MjYxeF9jb25maWdfaW50cixcbitcdFx0LmhhbmRsZV9pbnRlcnJ1cHRcdD0gcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdCxcbitcdFx0LnNvZnRfcmVzZXRcdFx0PSBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0LFxuK1x0XHQuc3VzcGVuZFx0XHQ9IGdlbnBoeV9jNDVfcG1hX3N1c3BlbmQsXG4rXHRcdC5yZXN1bWVcdFx0XHQ9IGdlbnBoeV9jNDVfcG1hX3Jlc3VtZSxcbiBcdH0sXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxuaW5kZXggYmVmZjFkNmZjYzdjZGEuLjU3Y2Y5YWMzNTI0ZDIyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9waHkuaFxuQEAgLTIzMTQsNiArMjMxNCw3IEBAIGludCBnZW5waHlfYzM3X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgKmNoYW5nZWQpO1xuIC8qIENsYXVzZSA0NSBQSFkgKi9cbiBpbnQgZ2VucGh5X2M0NV9yZXN0YXJ0X2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gaW50IGdlbnBoeV9jNDVfY2hlY2tfYW5kX3Jlc3RhcnRfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIHJlc3RhcnQpO1xuK2ludCBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X2FuZWdfZG9uZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgZ2VucGh5X2M0NV9yZWFkX2xpbmsoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gaW50IGdlbnBoeV9jNDVfcmVhZF9scGEoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbmluZGV4IGIyNTQxYzk0OGZjMWViLi4wNmY0YmMzYzIwYzcxNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbkBAIC0zMzIsOCArMzMyLDEzIEBAXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81R1x0MHgwMDgwXHQvKiBBZHZlcnRpc2UgMi41R0JBU0UtVCAqL1xuICNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX0FEVjVHXHQweDAxMDBcdC8qIEFkdmVydGlzZSA1R0JBU0UtVCAqL1xuICNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX0FEVjEwR1x0MHgxMDAwXHQvKiBBZHZlcnRpc2UgMTBHQkFTRS1UICovXG4rI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFXHQweDgwMDBcdC8qIE1hc3Rlci9zbGF2ZSBtYW51YWwgY29uZmlnIGVuYWJsZSAqL1xuKyNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFXHQweDQwMDBcdC8qIE1hc3Rlci9zbGF2ZSBjb25maWcgdmFsdWUgKDE9TWFzdGVyKSAqL1xuKyNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRVx0MHgyMDAwXHQvKiBNYXN0ZXIgUHJlZmVycmVkIFR5cGUgKi9cbiBcbiAvKiBBTiAxMEdCQVNFLVQgc3RhdHVzIHJlZ2lzdGVyLiAqL1xuKyNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX01TX0ZBVUxUXHQweDgwMDBcdC8qIE1hc3Rlci9zbGF2ZSBmYXVsdCAqL1xuKyNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX01TX1JFU1x0MHg0MDAwXHQvKiBNYXN0ZXIvc2xhdmUgcmVzb2x1dGlvbiAoMT1NYXN0ZXIpICovXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTFAyXzVHXHQweDAwMjAgIC8qIExQIGlzIDIuNUdCVCBjYXBhYmxlICovXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTFA1R1x0XHQweDAwNDAgIC8qIExQIGlzIDVHQlQgY2FwYWJsZSAqL1xuICNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX0xQVFJSXHQweDAyMDBcdC8qIExQIHRyYWluaW5nIHJlc2V0IHJlcS4gKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjQ3OjU4LjM3NzI3NjgzNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5MTE2MTM5OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBhdGNoIFJlYWNoYWJpbGl0eSBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBtb2RpZnlpbmcgYGRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNgIGFuZCBgZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNgLiBJdCdzIGFkZGluZyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw4MjYxIDEwR2JwcyBQSFkgYW5kIHNvbWUgZ2VuZXJpYyBDbGF1c2UgNDUgTWFzdGVyL1NsYXZlIGNvbmZpZ3VyYXRpb24uIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgaG93IGVhc2lseSBjYW4gSSB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoIGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZywgbGlrZSBRRU1VP1xuXG5JIGtub3cgUEhZIGRyaXZlcnMgYXJlIHR5cGljYWxseSBhc3NvY2lhdGVkIHdpdGggRXRoZXJuZXQgZHJpdmVycy4gUUVNVSBoYXMgdmFyaW91cyBlbXVsYXRlZCBuZXR3b3JrIGRldmljZXMgbGlrZSBlMTAwMCwgdmlydGlvLW5ldCwgZXRjLiBUaGUgcmVhbCBxdWVzdGlvbiBpcywgZG8gKmFueSogb2YgdGhvc2UgUUVNVS1lbXVsYXRlZCBkZXZpY2VzIHVzZSB0aGUgUEhZIHN1YnN5c3RlbSwgYW5kIHNwZWNpZmljYWxseSwgdGhlIFJlYWx0ZWsgZHJpdmVyIG9yIENsYXVzZSA0NSBQSFlzPyBUaGF0J3MgdGhlIGtleS5cblxuUEhZcyB1c3VhbGx5IGhvb2sgdXAgdG8gTURJTyBidXNlcy4gSW4gUUVNVSwgY2FuIHdlIGVtdWxhdGUgYW4gTURJTyBidXMgc29tZWhvdz8gTWF5YmUgdGhyb3VnaCBjZXJ0YWluIG5ldHdvcmsgZHJpdmVycyBvciBkdW1teSBNRElPIGRldmljZXM/IEhtbSwgSSBrbm93IHN5emthbGxlciBoYXMgYSB2aXJ0dWFsIE1ESU8gYnVzLi4uIG9yIGNvdWxkIHdlIHVzZSBhIGRyaXZlciBsaWtlIGBtYWNiYCBvciBgZmVjYCwgYXNzdW1pbmcgdGhvc2UgYXJlIGVtdWxhdGVkPyBUaGUgdHJpY2t5IHBhcnQgaXMsIGhvdyBkbyB5b3UgZWFzaWx5ICp0cmlnZ2VyKiBzcGVjaWZpYyBQSFkgZHJpdmVycyB1bmxlc3MgeW91IGNhbiBkaXJlY3RseSBpbnN0YW50aWF0ZSB0aGVtIHZpYSBNRElPP1xuXG5Ib2xkIG9uLi4uIEknbSB3cmFja2luZyBteSBicmFpbiBmb3Igc3l6a2FsbGVyIHByaW1pdGl2ZXMuLi4gRG9lcyBpdCBoYXZlIGFueXRoaW5nIGxpa2UgYHN5el9nZW5ldGxpbmtfLi4uYCBvciBzb21ldGhpbmcgd2l0aCBgdHVuYD8gTm8sIHRoYXQncyBub3QgaXQuIFBIWSBkZXZpY2VzIGFyZSBhbG1vc3QgYWx3YXlzIHByb2JlZCB2aWEgTURJTy4gU28sIGNhbiBzeXprYWxsZXIgKmluaXRpYXRlKiBNRElPIGJ1cyBwcm9iaW5nP1xuXG5MZXQncyBzZWUuLi4gRG9lcyBzeXprYWxsZXIgb2ZmZXIgYW55IGBzeXpfbWRpb18uLi5gIGNhbGxzPyBBbnkgcHNldWRvLXN5c2NhbGxzIGZvciBNRElPPyBPciwgY2FuIHdlIGV2ZW4gaW5zdGFudGlhdGUgUEhZcyBkaXJlY3RseT8gQWghIE1heWJlIGBuZXRsaW5rYCBjb3VsZCB0YWxrIHRvIGBldGh0b29sYCB3aGljaCBtaWdodCAqcmVhY2gqIHRoZSBQSFlzLCBidXQgd2UnZCBzdGlsbCBuZWVkIGEgUEhZIGRldmljZSB0byAqZXhpc3QqIGluIHRoZSBmaXJzdCBwbGFjZS5cblxuRG9lcyBRRU1VIGV2ZW4gKmVtdWxhdGUqIHRoZSBSVEw4MjYxPyBQcm9iYWJseSBub3QuIFNvLCB0aGUgYmlnZ2VyIHF1ZXN0aW9uIGlzLCBjYW4gd2UgaW5zdGFudGlhdGUgYSBQSFkgZGV2aWNlIHZpYSAqc29tZSoga2luZCBvZiBzb2Z0d2FyZSBpbnRlcmZhY2U/IEkgbmVlZCB0byBmaW5kIGEgd2F5IHRvIGdldCBhIFBIWSBpbnN0YW5jZSBhY3RpdmUuXG5cbk9rYXksIGxldCdzIHNlYXJjaCB0aGUga2VybmVsIHNvdXJjZSBmb3IgXCJtZGlvXCIgYW5kIFwicGh5XCIuIFNlZSBpZiB0aGVyZSdzIGEgdmlydHVhbCBNRElPIGJ1cyBvciBzb21ldGhpbmcgc2ltaWxhciB0aGF0IHdlIGNhbiBsZXZlcmFnZS4gQWhhISBIZXJlJ3MgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLW1vY2t1cC5jYCBhbmQgYGRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuY2AuIEludGVyZXN0aW5nLiBNYXliZSB0aGVzZSBhcmUgdGhlIGtleXMgdG8gaW5zdGFudGlhdGluZyBhIFBIWSBkZXZpY2UuIE5vdywgSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHdlIGNhbiBhY3R1YWxseSAqaW5zdGFudGlhdGUqIGEgUEhZIGRldmljZSB1c2luZyB0aGVzZS4gVGhpcyBjb3VsZCBiZSBteSBwYXRoIHRvIHRlc3RpbmcgdGhpcyBwYXRjaCBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzY4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NDg6MDguMjg4ODkzMDA5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzODQyODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDQ3MjcgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT00PWxpYnBoeS15XFx0XFx0XFx0Oj0gcGh5Lm8gcGh5LWM0NS5vIHBoeS1jb3JlLm8gcGh5X2RldmljZS5vIFxcXFxcXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtNS1cXHRcXHRcXHRcXHQgICBsaW5rbW9kZS5vIHBoeV9saW5rX3RvcG9sb2d5Lm8gXFxcXFxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo2OlxcdFxcdFxcdFxcdCAgIHBoeV9jYXBzLm8gbWRpb19idXNfcHJvdmlkZXIubyBwaHlfcG9ydC5vIFxcXFxcXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6NzpcXHRcXHRcXHRcXHQgICBtZGlvX2RldmljZS5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTgtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MTY9bGlicGh5LSQoQ09ORklHX09QRU5fQUxMSUFOQ0VfSEVMUEVSUykgKz0gb3Blbl9hbGxpYW5jZV9oZWxwZXJzLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMTctXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19QSFlMSUIpXFx0XFx0Kz0gbWRpb19idXMub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0xOS1vYmotJChDT05GSUdfUEhZTElOSylcXHRcXHQrPSBwaHlsaW5rLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MjA9b2JqLSQoQ09ORklHX1BIWUxJQilcXHRcXHQrPSBsaWJwaHkub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfUEhZTElCKVxcdFxcdCs9IG1kaW9fZGV2cmVzLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMjItb2JqLSQoQ09ORklHX1BIWV9QQUNLQUdFKVxcdCs9IHBoeV9wYWNrYWdlLm9cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM9MjUyPXN0YXRpYyB1MzIgYWRpbl9nZXRfcmVnX3ZhbHVlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTI1Ni17XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzoyNTc6XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy0yNTgtXFx0dTMyIHZhbDtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM9NTAxPXN0YXRpYyBpbnQgYWRpbl9jb25maWdfY2xrX291dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNTAyLXtcXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjUwMzpcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTUwNC1cXHRjb25zdCBjaGFyICp2YWwgPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYz01Mjg9c3RhdGljIGludCBhZGluX2NvbmZpZ196cHRtMTAwKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy01Mjkte1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6NTMwOlxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNTMxLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYz02NDg9c3RhdGljIGludCBhZGluX3JlYWRfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZhZCwgdTE2IHJlZ251bSlcXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTY0OS17XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo2NTA6XFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi1cXHUwMDNlbWRpby5idXM7XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo2NTE6XFx0aW50IHBoeV9hZGRyID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHI7XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy02NTItXFx0aW50IGFkaW5fcmVnbnVtO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy02NTgtXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo2NTk6XFx0ZXJyID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5X2FkZHIsIEFESU4xMzAwX01JSV9FWFRfUkVHX1BUUixcXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTY2MC1cXHRcXHRcXHQgICAgICBhZGluX3JlZ251bSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTY2My1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjY2NDpcXHRyZXR1cm4gX19tZGlvYnVzX3JlYWQoYnVzLCBwaHlfYWRkciwgQURJTjEzMDBfTUlJX0VYVF9SRUdfREFUQSk7XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy02NjUtfVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYz02Njc9c3RhdGljIGludCBhZGluX3dyaXRlX21tZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgZGV2YWQsIHUxNiByZWdudW0sXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTY2OS17XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo2NzA6XFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi1cXHUwMDNlbWRpby5idXM7XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo2NzE6XFx0aW50IHBoeV9hZGRyID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHI7XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy02NzItXFx0aW50IGFkaW5fcmVnbnVtO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy02NzgtXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo2Nzk6XFx0ZXJyID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5X2FkZHIsIEFESU4xMzAwX01JSV9FWFRfUkVHX1BUUixcXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTY4MC1cXHRcXHRcXHQgICAgICBhZGluX3JlZ251bSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTY4My1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjY4NDpcXHRyZXR1cm4gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5X2FkZHIsIEFESU4xMzAwX01JSV9FWFRfUkVHX0RBVEEsIHZhbCk7XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy02ODUtfVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYz04OTA9c3RhdGljIGludCBhZGluX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy04OTEte1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6ODkyOlxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtODkzLVxcdHN0cnVjdCBhZGluX3ByaXYgKnByaXY7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jPTEwNTk9bW9kdWxlX3BoeV9kcml2ZXIoYWRpbl9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtMTA2MC1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjEwNjE6c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhZGluX3RibFtdID0ge1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtMTA2Mi1cXHR7IFBIWV9JRF9NQVRDSF9NT0RFTChQSFlfSURfQURJTjEyMDApIH0sXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTEwNjYtXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzoxMDY3Ok1PRFVMRV9ERVZJQ0VfVEFCTEUobWRpbywgYWRpbl90YmwpO1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtMTA2OC1NT0RVTEVfREVTQ1JJUFRJT04oXFxcIkFuYWxvZyBEZXZpY2VzIEluZHVzdHJpYWwgRXRoZXJuZXQgUEhZIGRyaXZlclxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmM9MjQ0PXN0YXRpYyBpbnQgYWRpbl9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTI0Ni1cXHRzdHJ1Y3QgYWRpbl9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jOjI0NzpcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0yNDgtXFx0aW50IHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jPTMwOT1zdGF0aWMgaW50IGFkaW5fcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0zMTAte1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jOjMxMTpcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0zMTItXFx0c3RydWN0IGFkaW5fcHJpdiAqcHJpdjtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jPTM0Mz1tb2R1bGVfcGh5X2RyaXZlcihhZGluX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMzQ0LVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jOjM0NTpzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGFkaW5fdGJsW10gPSB7XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMzQ2LVxcdHsgUEhZX0lEX01BVENIX01PREVMKFBIWV9JRF9BRElOMTEwMCkgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTM1MS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYzozNTI6TU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBhZGluX3RibCk7XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMzUzLU1PRFVMRV9ERVNDUklQVElPTihcXFwiQW5hbG9nIERldmljZXMgSW5kdXN0cmlhbCBFdGhlcm5ldCBUMUwgUEhZIGRyaXZlclxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYz02NTI9c3RhdGljIGlycXJldHVybl90IGFuODgwMXJfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy02NjctXFx0aWYgKGlycV9zdGF0dXMgXFx1MDAyNiBBTjg4MDFfSVJRX1dBS0VfTUFHSUNQS1QpIHtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jOjY2ODpcXHRcXHRwbV93YWtldXBfZXZlbnQoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYsIDApO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtNjY5LVxcdFxcdGlycV9oYW5kbGVkID0gdHJ1ZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM9NjgwPXN0YXRpYyB2b2lkIGFuODgwMXJfZ2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy02ODgtXFx0ICovXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzo2ODk6XFx0aWYgKCFkZXZpY2VfY2FuX3dha2V1cChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldikpIHtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTY5MC1cXHRcXHR3b2wtXFx1MDAzZXN1cHBvcnRlZCA9IDA7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jPTcwOD1zdGF0aWMgaW50IGFuODgwMXJfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy03MTYtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzo3MTc6XFx0aWYgKCFkZXZpY2VfY2FuX3dha2V1cChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldikpXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy03MTgtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy03NzgtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzo3Nzk6XFx0cmV0dXJuIGRldmljZV9zZXRfd2FrZXVwX2VuYWJsZShcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldixcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTc4MC1cXHRcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2V3YWtlX21hZ2ljX2VuYWJsZWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYz03ODM9c3RhdGljIGludCBhbjg4MDFyX29mX2luaXRfbGVkcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCAqbGVkX2NmZylcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTc4NC17XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzo3ODU6XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy03ODYtXFx0c3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi1cXHUwMDNlb2Zfbm9kZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM9MTAzND1zdGF0aWMgaW50IGFuODgwMXJfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTEwMzUte1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM6MTAzNjpcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTEwMzctXFx0c3RydWN0IGFuODgwMXJfcHJpdiAqcHJpdjtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM9MTA2MD1zdGF0aWMgaW50IGFuODgwMXJfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0xMDY3LVxcdCAqL1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM6MTA2ODpcXHRpZiAoZGV2aWNlX21heV93YWtldXAoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYpKSB7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0xMDY5LVxcdFxcdHByaXYtXFx1MDAzZXdha2VfbG5rY2hnX2VuYWJsZWQgPSBmYWxzZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM9MTA5MT1zdGF0aWMgaW50IGFuODgwMXJfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTExMDItXFx0ICovXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzoxMTAzOlxcdGlmIChkZXZpY2VfbWF5X3dha2V1cChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldikpIHtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTExMDQtXFx0XFx0cHJpdi1cXHUwMDNld2FrZV9sbmtjaGdfZW5hYmxlZCA9IHRydWU7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jPTExNDY9bW9kdWxlX3BoeV9kcml2ZXIoYWlyb2hhX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0xMTQ3LVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM6MTE0ODpzdGF0aWMgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGFuODgwMV90YmxbXSA9IHtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTExNDktXFx0eyBQSFlfSURfTUFUQ0hfTU9ERUwoQU44ODAxUl9QSFlfSUQpIH0sXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTExNTEtfTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jOjExNTI6TU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBhbjg4MDFfdGJsKTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTExNTMtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz0xOTc9c3RydWN0IGVuODgxMWhfcHJpdiB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yMDMtXFx0dW5zaWduZWQgaW50XFx0XFx0Y2tvX2lzX2VuYWJsZWQ7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MjA0OlxcdHN0cnVjdCBtZGlvX2RldmljZVxcdCpwYnVzZGV2O1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTIwNS19O1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9MjM5PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGVuODgxMWhfbGVkX3RyaWcgPSBCSVQoVFJJR0dFUl9ORVRERVZfRlVMTF9EVVBMRVgpIHxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTI0Ny1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoyNDg6c3RhdGljIGludCBfX2Fpcl9wYnVzX3JlZ193cml0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMjQ5LVxcdFxcdFxcdFxcdHUzMiBwYnVzX3JlZywgdTMyIHBidXNfZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTI1Mi1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoyNTM6XFx0cmV0ID0gX19tZGlvYnVzX3dyaXRlKG1kaW9kZXYtXFx1MDAzZWJ1cywgbWRpb2Rldi1cXHUwMDNlYWRkciwgQUlSX0VYVF9QQUdFX0FDQ0VTUyxcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yNTQtXFx0XFx0XFx0ICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX3JlZykpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMjU3LVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjI1ODpcXHRyZXQgPSBfX21kaW9idXNfd3JpdGUobWRpb2Rldi1cXHUwMDNlYnVzLCBtZGlvZGV2LVxcdTAwM2VhZGRyLCBBSVJfUEJVU19BRERSX0hJR0gsXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMjU5LVxcdFxcdFxcdCAgICAgIEZJRUxEX0dFVChBSVJfUEJVU19SRUdfQUREUl9ISUdIX01BU0ssIHBidXNfcmVnKSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0yNjItXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MjYzOlxcdHJldCA9IF9fbWRpb2J1c193cml0ZShtZGlvZGV2LVxcdTAwM2VidXMsIG1kaW9kZXYtXFx1MDAzZWFkZHIsXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMjY0LVxcdFxcdFxcdCAgICAgIEZJRUxEX0dFVChBSVJfUEJVU19SRUdfQUREUl9MT1dfTUFTSywgcGJ1c19yZWcpLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMjY4LVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjI2OTpcXHRyZXR1cm4gX19tZGlvYnVzX3dyaXRlKG1kaW9kZXYtXFx1MDAzZWJ1cywgbWRpb2Rldi1cXHUwMDNlYWRkciwgQUlSX1BCVVNfREFUQV9ISUdILFxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTI3MC1cXHRcXHRcXHQgICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTMyNz1zdGF0aWMgaW50IGVuODgxMWhfd2FpdF9tY3VfcmVhZHkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTMzNS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzozMzY6XFx0LyogQmVjYXVzZSBvZiBtZGlvLWxvY2ssIG1heSBoYXZlIHRvIHdhaXQgZm9yIG11bHRpcGxlIGxvYWRzICovXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMzM3LVxcdHJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTM5Nz1zdGF0aWMgaW50IGFuODgxMWhiX2xvYWRfZmlsZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMzk5LXtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzo0MDA6XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNDAxLVxcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz00MTM9c3RhdGljIGludCBhbjg4MTFoYl9tY3VfYXNzZXJ0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy00MTctXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NDE4OlxcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNDE5LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNDMyLXVubG9jazpcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzo0MzM6XFx0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTQzNC1cXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9NDM3PXN0YXRpYyBpbnQgYW44ODExaGJfbWN1X2RlYXNzZXJ0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy00NDEtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NDQyOlxcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNDQzLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNDU3LXVubG9jazpcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzo0NTg6XFx0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTQ1OS1cXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9NTAyPXN0YXRpYyBpbnQgZW44ODExaF9sb2FkX2Zpcm13YXJlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNTAzLXtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzo1MDQ6XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNTA1LVxcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncxLCAqZncyO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9MTA3ND1zdGF0aWMgaW50IGFuODgxMWhiX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTA3NS17XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTA3NjpcXHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTA3Ny1cXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2O1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTA3OS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMDgwOlxcdHByaXYgPSBkZXZtX2t6YWxsb2MoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYsIHNpemVvZihzdHJ1Y3QgZW44ODExaF9wcml2KSxcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMDgxLVxcdFxcdFxcdCAgICBHRlBfS0VSTkVMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTEwOTItXFx0ICovXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTA5MzpcXHRtZGlvZGV2ID0gbWRpb19kZXZpY2VfY3JlYXRlKHBoeWRldi1cXHUwMDNlbWRpby5idXMsXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTA5NDpcXHRcXHRcXHRcXHQgICAgIHBoeWRldi1cXHUwMDNlbWRpby5hZGRyICsgRU44ODExSF9QQlVTX0FERFJfT0ZGUyk7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTA5NTpcXHRpZiAoSVNfRVJSKG1kaW9kZXYpKVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjEwOTY6XFx0XFx0cmV0dXJuIFBUUl9FUlIobWRpb2Rldik7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTA5Ny1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMDk4OlxcdHJldCA9IG1kaW9fZGV2aWNlX3JlZ2lzdGVyKG1kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTEwOTktXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTExMDEtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTEwMjpcXHRwcml2LVxcdTAwM2VwYnVzZGV2ID0gbWRpb2RldjtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMTAzLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTEyMy1cXHQvKiBDby1DbG9jayBPdXRwdXQgKi9cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMTI0OlxcdHJldCA9IGFuODgxMWhiX2Nsa19wcm92aWRlcl9zZXR1cChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldiwgXFx1MDAyNnByaXYtXFx1MDAzZWh3KTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMTI1LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMTM3LWVycl9kZXZfY3JlYXRlOlxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjExMzg6XFx0bWRpb19kZXZpY2VfcmVtb3ZlKG1kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTExMzktXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTE0MC1lcnJfZGV2X2ZyZWU6XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTE0MTpcXHRtZGlvX2RldmljZV9mcmVlKG1kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTExNDItXFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTExNDU9c3RhdGljIGludCBlbjg4MTFoX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMTQ5LVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjExNTA6XFx0cHJpdiA9IGRldm1fa3phbGxvYyhcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldiwgc2l6ZW9mKHN0cnVjdCBlbjg4MTFoX3ByaXYpLFxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTExNTEtXFx0XFx0XFx0ICAgIEdGUF9LRVJORUwpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTE3MS1cXHQvKiBDby1DbG9jayBPdXRwdXQgKi9cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMTcyOlxcdHJldCA9IGVuODgxMWhfY2xrX3Byb3ZpZGVyX3NldHVwKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2LCBcXHUwMDI2cHJpdi1cXHUwMDNlaHcpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTExNzMtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTExODY9c3RhdGljIGludCBhbjg4MTFoYl9jb25maWdfc2VyZGVzX3BvbGFyaXR5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTE4Ny17XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTE4ODpcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMTg5LVxcdHUzMiBwYnVzX3ZhbHVlID0gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTEyMTc9c3RhdGljIGludCBlbjg4MTFoX2NvbmZpZ19zZXJkZXNfcG9sYXJpdHkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMjE4LXtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMjE5OlxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTEyMjAtXFx0dW5zaWduZWQgaW50IHBvbCwgZGVmYXVsdF9wb2w7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz0xNDk4PXN0YXRpYyB2b2lkIGFuODgxMWhiX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTUwMi1cXHRpZiAocHJpdi1cXHUwMDNlcGJ1c2Rldikge1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjE1MDM6XFx0XFx0bWRpb19kZXZpY2VfcmVtb3ZlKHByaXYtXFx1MDAzZXBidXNkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjE1MDQ6XFx0XFx0bWRpb19kZXZpY2VfZnJlZShwcml2LVxcdTAwM2VwYnVzZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xNTA1LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTE1NTM9bW9kdWxlX3BoeV9kcml2ZXIoZW44ODExaF9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTE1NTQtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTU1NTpzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGVuODgxMWhfdGJsW10gPSB7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTU1Ni1cXHR7IFBIWV9JRF9NQVRDSF9NT0RFTChFTjg4MTFIX1BIWV9JRCkgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTE1NjAtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTU2MTpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGVuODgxMWhfdGJsKTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xNTYyLU1PRFVMRV9GSVJNV0FSRShFTjg4MTFIX01EMzJfRE0pO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FtZC5jPTExMj1tb2R1bGVfcGh5X2RyaXZlcihhbTc5Y19kcml2ZXJzKTtcXG5kcml2ZXJzL25ldC9waHkvYW1kLmMtMTEzLVxcbmRyaXZlcnMvbmV0L3BoeS9hbWQuYzoxMTQ6c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhbWRfdGJsW10gPSB7XFxuZHJpdmVycy9uZXQvcGh5L2FtZC5jLTExNS1cXHR7IFBIWV9JRF9BQzEwMUwsIDB4ZmZmZmZmZjAgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hbWQuYy0xMTktXFxuZHJpdmVycy9uZXQvcGh5L2FtZC5jOjEyMDpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFtZF90YmwpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2Zpcm13YXJlLmM9Mjk2PXN0YXRpYyBpbnQgYXFyX2Zpcm13YXJlX2xvYWRfbnZtZW0oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9maXJtd2FyZS5jLTMwMi1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfZmlybXdhcmUuYzozMDM6XFx0Y2VsbCA9IG52bWVtX2NlbGxfZ2V0KFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2LCBcXFwiZmlybXdhcmVcXFwiKTtcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfZmlybXdhcmUuYy0zMDQtXFx0aWYgKElTX0VSUihjZWxsKSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9maXJtd2FyZS5jPTMyND1zdGF0aWMgaW50IGFxcl9maXJtd2FyZV9sb2FkX2ZzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2Zpcm13YXJlLmMtMzI1LXtcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfZmlybXdhcmUuYzozMjY6XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2Zpcm13YXJlLmMtMzI3LVxcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfaHdtb24uYz0xOTA9aW50IGFxcl9od21vbl9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9od21vbi5jLTE5MS17XFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2h3bW9uLmM6MTkyOlxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9od21vbi5jLTE5My1cXHRzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jPTc1MD1zdGF0aWMgaW50IGFxcjEwN19jb25maWdfbWRpKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy03NTEte1xcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6NzUyOlxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwaHlkZXYtXFx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy03NTMtXFx0dTMyIG1kaV9jb25mO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYz0xMTY0PXN0YXRpYyBpbnQgYXFyMTA3X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTExNjctXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzoxMTY4OlxcdHBoeWRldi1cXHUwMDNlcHJpdiA9IGRldm1fa3phbGxvYyhcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldixcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTExNjktXFx0XFx0XFx0XFx0ICAgIHNpemVvZihzdHJ1Y3QgYXFyMTA3X3ByaXYpLCBHRlBfS0VSTkVMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM9MTU2NT1tb2R1bGVfcGh5X2RyaXZlcihhcXJfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTE1NjYtXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzoxNTY3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgYXFyX3RibFtdID0ge1xcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMTU2OC1cXHR7IFBIWV9JRF9NQVRDSF9NT0RFTChQSFlfSURfQVExMjAyKSB9LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0xNTg4LVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6MTU4OTpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFxcl90YmwpO1xcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMTU5MC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM9Mjk3PXN0YXRpYyBpbnQgYWVvbl9maXJtd2FyZV9ib290KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IHU4ICpkYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy0zMjEtXFx0aWYgKHZhbCBcXHUwMDNlIDEpIHtcXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjMyMjpcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIndyb25nIG9yaWdpbiBtZGlvX2luZGlyZWN0X3N0YXR1czogJXhcXFxcblxcXCIsIHZhbCk7XFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy0zMjMtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jPTM1Mj1zdGF0aWMgaW50IGFlb25fZmlybXdhcmVfbG9hZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtMzUzLXtcXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjM1NDpcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTM1NS1cXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYz02MDM9c3RhdGljIGludCBhczIxeHh4X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTYwNy1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjYwODpcXHRwcml2ID0gZGV2bV9remFsbG9jKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2LFxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtNjA5LVxcdFxcdFxcdCAgICBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtNjEzLVxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6NjE0OlxcdHJldCA9IGRldm1fbXV0ZXhfaW5pdChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldixcXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTYxNS1cXHRcXHRcXHQgICAgICBcXHUwMDI2cHJpdi1cXHUwMDNlaXBjX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYz0xMDc4PW1vZHVsZV9waHlfZHJpdmVyKGFzMjF4eHhfZHJpdmVycyk7XFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy0xMDc5LVxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6MTA4MDpzdGF0aWMgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGFzMjF4eHhfdGJsW10gPSB7XFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy0xMDgxLVxcdHsgUEhZX0lEX01BVENIX1ZFTkRPUihQSFlfVkVORE9SX0FFT05TRU1JKSB9LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy0xMDgzLX07XFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYzoxMDg0Ok1PRFVMRV9ERVZJQ0VfVEFCTEUobWRpbywgYXMyMXh4eF90YmwpO1xcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtMTA4NS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9heDg4Nzk2Yi5jPTEyMT1tb2R1bGVfcGh5X2RyaXZlcihhc2l4X2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L2F4ODg3OTZiLmMtMTIyLVxcbmRyaXZlcnMvbmV0L3BoeS9heDg4Nzk2Yi5jOjEyMzpzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGFzaXhfdGJsW10gPSB7XFxuZHJpdmVycy9uZXQvcGh5L2F4ODg3OTZiLmMtMTI0LVxcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9BU0lYX0FYODg3NzJBKSB9LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2F4ODg3OTZiLmMtMTI5LVxcbmRyaXZlcnMvbmV0L3BoeS9heDg4Nzk2Yi5jOjEzMDpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFzaXhfdGJsKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tY3lnbnVzLmM9MjMzPXN0YXRpYyBpbnQgYmNtX29tZWdhX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jLTIzNi1cXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jOjIzNzpcXHRwcml2ID0gZGV2bV9remFsbG9jKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jLTIzOC1cXHRpZiAoIXByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jLTI0Mi1cXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jOjI0MzpcXHRwcml2LVxcdTAwM2VzdGF0cyA9IGRldm1fa2NhbGxvYyhcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldixcXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jLTI0NC1cXHRcXHRcXHRcXHQgICBiY21fcGh5X2dldF9zc2V0X2NvdW50KHBoeWRldiksIHNpemVvZih1NjQpLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYz0yNTI9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGJjbV9jeWdudXNfcGh5X2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYy0yODAtXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYzoyODE6c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBiY21fY3lnbnVzX3BoeV90YmxbXSA9IHtcXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jLTI4Mi1cXHR7IFBIWV9JRF9CQ01fQ1lHTlVTLCAweGZmZmZmZmYwLCB9LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYy0yODUtfTtcXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jOjI4NjpNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGJjbV9jeWdudXNfcGh5X3RibCk7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYy0yODctXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy0xMC0jaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM6MTE6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21kaW8uaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy0xMi0jaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYz0zMz1pbnQgYmNtX3BoeV93cml0ZV9leHAoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZywgdTE2IHZhbClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTM2LVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjM3OlxcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMzgtXFx0cmMgPSBfX2JjbV9waHlfd3JpdGVfZXhwKHBoeWRldiwgcmVnLCB2YWwpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjM5OlxcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy00MC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jPTYyPWludCBiY21fcGh5X3JlYWRfZXhwKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWcpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy02NS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzo2NjpcXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTY3LVxcdHJjID0gX19iY21fcGh5X3JlYWRfZXhwKHBoeWRldiwgcmVnKTtcXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzo2ODpcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtNjktXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYz05ND1pbnQgYmNtX3BoeV9tb2RpZnlfZXhwKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWcsIHUxNiBtYXNrLCB1MTYgc2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtOTctXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM6OTg6XFx0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy05OS1cXHRyZXQgPSBfX2JjbV9waHlfbW9kaWZ5X2V4cChwaHlkZXYsIHJlZywgbWFzaywgc2V0KTtcXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzoxMDA6XFx0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTEwMS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jPTI3MT1pbnQgYmNtX3BoeV9yZWFkX3JkYihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmRiKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMjc0LVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjI3NTpcXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTI3Ni1cXHRyZXQgPSBfX2JjbV9waHlfcmVhZF9yZGIocGh5ZGV2LCByZGIpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjI3NzpcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMjc4LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM9Mjk1PWludCBiY21fcGh5X3dyaXRlX3JkYihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmRiLCB1MTYgdmFsKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMjk4LVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjI5OTpcXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTMwMC1cXHRyZXQgPSBfX2JjbV9waHlfd3JpdGVfcmRiKHBoeWRldiwgcmRiLCB2YWwpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjMwMTpcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMzAyLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM9MzI3PWludCBiY21fcGh5X21vZGlmeV9yZGIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJkYiwgdTE2IG1hc2ssIHUxNiBzZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy0zMzAtXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM6MzMxOlxcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMzMyLVxcdHJldCA9IF9fYmNtX3BoeV9tb2RpZnlfcmRiKHBoeWRldiwgcmRiLCBtYXNrLCBzZXQpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjMzMzpcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMzM0LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM9NjYwPXN0YXRpYyBpbnQgX2JjbV9waHlfY2FibGVfdGVzdF9zdGFydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGlzX3JkYilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTY3MS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzo2NzI6XFx0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy02NzMtXFx0aWYgKGlzX3JkYikge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtNjkwLVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjY5MTpcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtNjkyLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM9NzQyPXN0YXRpYyBpbnQgX2JjbV9waHlfY2FibGVfdGVzdF9nZXRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy03NDgtXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM6NzQ5OlxcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtNzUwLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtNzk5LVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjgwMDpcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtODAxLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktcHRwLmM9OTIwPXN0cnVjdCBiY21fcHRwX3ByaXZhdGUgKmJjbV9wdHBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LXB0cC5jLTkzMS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1wdHAuYzo5MzI6XFx0cHJpdiA9IGRldm1fa3phbGxvYyhcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktcHRwLmMtOTMzLVxcdGlmICghcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LXB0cC5jLTk0MC1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1wdHAuYzo5NDE6XFx0Y2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoXFx1MDAyNnByaXYtXFx1MDAzZXB0cF9pbmZvLCBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktcHRwLmMtOTQyLVxcdGlmIChJU19FUlIoY2xvY2spKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmM9NDE0PXN0YXRpYyBpbnQgYmNtNTQxNDBfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmMtNDIzLVxcbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jOjQyNDpcXHRod21vbiA9IGRldm1faHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfaW5mbyhcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldixcXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYy00MjUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiQkNNNTQxNDBcXFwiLCBwaHlkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYz00MzI9c3RhdGljIGludCBiY201NDE0MF9iYXNlX3JlYWRfcmRiKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZGIpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYy00MzUtXFxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmM6NDM2OlxcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmMtNDM3LVxcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCBCQ001NDE0MF9CQVNFX0FERFIsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYy00NDUtb3V0OlxcbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jOjQ0NjpcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmMtNDQ3LVxcdHJldHVybiByZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYz00NTA9c3RhdGljIGludCBiY201NDE0MF9iYXNlX3dyaXRlX3JkYihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmMtNDU0LVxcbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jOjQ1NTpcXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jLTQ1Ni1cXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgQkNNNTQxNDBfQkFTRV9BRERSLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmMtNDY0LW91dDpcXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYzo0NjU6XFx0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jLTQ2Ni1cXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmM9NTA1PXN0YXRpYyBpbnQgYmNtNTQxNDBfZ2V0X2Jhc2VfYWRkcl9hbmRfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmMtNTA3LVxcdHN0cnVjdCBiY201NDE0MF9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jOjUwODpcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cztcXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYy01MDktXFx0aW50IGFkZHIsIG1pbl9hZGRyLCBtYXhfYWRkcjtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY201NDE0MC5jLTUxMy1cXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYzo1MTQ6XFx0bWluX2FkZHIgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcjtcXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYzo1MTU6XFx0bWF4X2FkZHIgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcjtcXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYzo1MTY6XFx0YWRkciA9IHBoeWRldi1cXHUwMDNlbWRpby5hZGRyO1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo0ODowOC4zNTI3NDA3MThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzQyMDgzNTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgUEhZIEluc3RhbnRpYXRpb24gTWV0aG9kcyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgUEhZIGRldmljZXMgZ2V0IGluc3RhbnRpYXRlZCB3aXRoaW4gdGhpcyBjb250ZXh0LiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGxvb2sgYXQgdGhpbmdzIGxpa2UgYG1kaW8tbW9ja3VwLmNgLCBgZml4ZWRfcGh5LmNgLCBvciBwb3RlbnRpYWxseSBldmVuIGBtZGlvX2J1cy5jYC4gSSBmaWd1cmVkIG9uZSBvZiB0aG9zZSBtaWdodCBoYW5kbGUgdGhlIGluc3RhbnRpYXRpb24gZGlyZWN0bHkuIFRoZW4gSSBzdG9wcGVkIGFuZCB0aG91Z2h0LCBcIkhhbmcgb24sIGRvZXMgc3l6a2FsbGVyIGFjdHVhbGx5ICppbnN0YW50aWF0ZSogUEhZIGRldmljZXM/IENhbiBpdCBkbyB0aGF0IHRocm91Z2ggTmV0bGluayBzb21laG93P1wiIFRoZSBtb3JlIEkgdGhvdWdodCBhYm91dCBpdCwgdGhlIG1vcmUgSSByZWFsaXNlZCBpdCdzIHR5cGljYWxseSBoYW5kbGVkIHdoZW4gYSBuZXR3b3JrIGRyaXZlciBwcm9iZXMgYW5kIHJlZ2lzdGVycyBhbiBNRElPIGJ1cywgb3IsIG9mIGNvdXJzZSwgdGhyb3VnaCB0aGUgZGV2aWNlIHRyZWUuXG5cbkJ1dCB0aGVuIEkgcmVtZW1iZXJlZCBzZWVpbmcgdGhvc2UgYHN5el9nZW5ldGxpbmtfLi4uYCwgYHN5el91c2JfY29ubmVjdGAsIGBzeXpfODAyMTFfLi4uYCwgYW5kIGBzeXpfbWFjODAyMTU0Xy4uLmAgY2FsbHMgaW4gc3l6a2FsbGVyLiBDb3VsZCBhbnkgb2YgdGhvc2UgYmUgcmVsZXZhbnQ/IFBlcmhhcHMgdGhleSBvZmZlciBhbiBpbmRpcmVjdCBtZXRob2QuXG5cbldhaXQgYSBzZWNvbmQsIHRoZXJlJ3MgdGhhdCB2aXJ0dWFsIE1ESU8gYnVzIGRyaXZlciBJIGtlZXAgaGVhcmluZyBhYm91dDogYGRyaXZlcnMvbmV0L3BoeS9tZGlvLW1vY2t1cC5jYC4gSSBrbm93IHRoYXQgY2FuIGJlIGluc3RhbnRpYXRlZCB2aWEgc3lzZnMgb3IgbW9kdWxlIHBhcmFtZXRlcnMsIGNhbid0IGl0PyBBY3R1YWxseSwgSSB0aGluayBpdCdzIHVzdWFsbHkgZGV2aWNlIHRyZWUgb3IgbW9kdWxlIHBhcmFtZXRlcnMgYWdhaW4uIEJ1dCB0aGVuLi4uIGhvbGQgb24gYSBtaW51dGUsIGRvZXMgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLW1vY2t1cC5jYCAqYWN0dWFsbHkqIGV4aXN0PyBJJ2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGF0LiBTZWVtcyBsaWtlIGl0IG1pZ2h0IG5vdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2NDksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NDg6MTQuMDk0ODI2MDcxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNTg4MjcxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvLW1vY2t1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo0ODoxNC4xNTU0MjMzMDFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDg2MzkwMjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgTmV0d29yayBQSFkgRHJpdmVyIEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIGxldCBtZSBzZWUuLi4gdGhleSdyZSBwb2ludGluZyBtZSB0b3dhcmQgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLW1vY2t1cC5jYC4gSG1tbSwgc2VlbXMgYSBsaXR0bGUgb2ZmLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRoYXQgYSBcIm1vY2t1cFwiIG9yIFwiZHVtbXlcIiBQSFkgaW1wbGVtZW50YXRpb24sIGlmIGl0IGV4aXN0cywgd291bGRuJ3QgYmUgZGlyZWN0bHkgdGllZCB0byBNRElPLiBJdCdzIG1vcmUgbGlrZWx5IHRvIGJlIGEgaGlnaGVyLWxldmVsIGFic3RyYWN0aW9uLlxuXG5TbywgbGV0J3MgY3V0IHJpZ2h0IHRvIHRoZSBjaGFzZS4gSSdtIGdvaW5nIHRvIHNjYW4gdGhlIGBkcml2ZXJzL25ldC9waHkvYCBkaXJlY3RvcnkuIEknbGwgYmUgbG9va2luZyBzcGVjaWZpY2FsbHkgZm9yIGFueSBmaWxlcyBuYW1lZCB3aXRoIFwibW9ja3VwXCIgb3IgXCJkdW1teVwiIGluIHRoZSBmaWxlbmFtZS4gVGhhdCBzaG91bGQgcXVpY2tseSBwb2ludCBtZSB0byB0aGUgcmVsZXZhbnQgY29kZS4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgUEhZIHNpbXVsYXRvcnMgYXJlIGltcGxlbWVudGVkLCBhbmQgd2hhdCB0aGVpciBpbnRlbmRlZCB1c2UgY2FzZXMgYXJlLiBUaGlzIHNob3VsZCBiZSBxdWljaywgYW5kIGhvcGVmdWxseSBsZWFkIHRvIHRoZSBjb3JyZWN0IHNvdXJjZSBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyMzUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo0ODoxOC4yNDE4MTYzMjFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk5NzIxMzEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vY2t1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo0ODoxOC4zMDE3OTU2NTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODY1MDYxMDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0d29yayBTdWJzeXN0ZW0qKlxuXG5Pa2F5LCBJJ20gZGVlcCBpbiB0aGUgbmV0d29yayBkcml2ZXIgc3BhY2UgYWdhaW4uIFdoZXJlIHNob3VsZCBJIHN0YXJ0IG15IGV4cGxvcmF0aW9uPyBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgaGFyZHdhcmUgaW50ZXJhY3Rpb24uIEhtbSwgbGV0IG1lIHRoaW5rLi4uIGdpdmVuIG15IGZvY3VzIG9uIGxvdy1sZXZlbCBpbnRlcmFjdGlvbnMgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIFBIWSBsYXllciwgSSBzaG91bGQgaW52ZXN0aWdhdGUgYGRyaXZlcnMvbmV0L21kaW8vYC4gVGhhdCdzIHdoZXJlIEkgY2FuIGxpa2VseSBmaW5kIHRoZSBjb3JlIE1lZGlhIEluZGVwZW5kZW50IEludGVyZmFjZSAoTUlJKSBkcml2ZXIgY29kZSwgYW5kIGhvcGVmdWxseSwgYW55IHNwZWNpZmljcyByZWxhdGVkIHRvIHRoZSBNRElPIGJ1cyB1c2VkIHRvIGNvbnRyb2wgdGhlIFBIWS4gVGhpcyBzZWVtcyBsaWtlIGEgbG9naWNhbCBlbnRyeSBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIG5ldHdvcmsgZHJpdmVycyBjb21tdW5pY2F0ZSB3aXRoIHRoZSBwaHlzaWNhbCBsYXllci4gVGhpcyBkaXJlY3RvcnkgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rIHRvIHVuZGVyc3RhbmQgdGhlIE1ESU8gYnVzIGFuZCBQSFkgaW50ZXJhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTI4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NDg6MjIuMTY2ODU4ODdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NzcxNzQwNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9ja3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21kaW8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo0ODoyMi40NjQ1ODU3MjVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI1NDUwMDA4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyBQSFkgRHJpdmVycyB3aXRoIFN5emthbGxlcjogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHdlIGNhbiBsZXZlcmFnZSBzeXprYWxsZXIgdG8gdGVzdCBQSFkgZHJpdmVycy4gU3l6a2FsbGVyJ3MgYWxyZWFkeSBleGNlbGxlbnQgd2l0aCBVU0IgZGV2aWNlIGZ1enppbmcsIGFuZCBJIGtub3cgc29tZSBVU0IgbmV0d29yayBhZGFwdGVycywgc3BlY2lmaWNhbGx5LCB0aGUgYGF4ODgxNzlfMTc4YWAgYWRhcHRlciwgdXRpbGl6ZSBQSFlzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGNhbiB3ZSBhY3R1YWxseSByZWFjaCB0aGVzZSBQSFkgZHJpdmVycyB0aHJvdWdoIHN5emthbGxlcj9cblxuVGhlIHBhdGggb2YgbGVhc3QgcmVzaXN0YW5jZSBmZWVscyBsaWtlIGludmVzdGlnYXRpbmcgd2hldGhlciBvciBub3QgYHJlYWx0ZWtfbWFpbi5jYCBpcyBhY2Nlc3NpYmxlLiBUaGUgcGF0Y2ggbm90ZXMgcmVmZXJlbmNlIFJUTDgyNjFDIHN1cHBvcnQuIEJ1dCBjYW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgcmVhbGlzdGljYWxseSB0cmlnZ2VyIGl0cyBleGVjdXRpb24/IFxuXG5MZXQncyBhc3N1bWUgd2UgdXNlIGEgVVNCIG5ldHdvcmsgYWRhcHRlciB0aGF0J3MgZHJpdmVuIGJ5IHRoZSBgcjgxNTJgIGRyaXZlci4gRG9lcyB0aGlzIGRyaXZlciBldmVuIGRlcGVuZCBvbiBgcmVhbHRla19tYWluLmNgPyBObywgaXQgaGFzIGl0cyBvd24gUEhZIGNvZGUgb3IgbGV2ZXJhZ2VzIHBoeWxpYi4gVGhlIGNydWNpYWwgcXVlc3Rpb24gbm93IGJlY29tZXMsIGRvZXMgYHI4MTUyYCB1c2UgcGh5bGliPyBUaGlzIG5lZWRzIGNvbmZpcm1hdGlvbiwgc28gdGhhdCdzIHRoZSBuZXh0IGF2ZW51ZSB0byBleHBsb3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDc0MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo0ODozMC43MTkwODgxNTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MTAwNjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9jb25uZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9MjYxPXN0YXRpYyBpbnQgYXg4ODE3MmFfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMzEzLVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjMxNDpcXHRwcml2LVxcdTAwM2VwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYtXFx1MDAzZW5ldCwgcHJpdi1cXHUwMDNlcGh5X25hbWUsXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMzE1LVxcdFxcdFxcdFxcdCAgIFxcdTAwMjZheDg4MTcyYV9hZGp1c3RfbGluayxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jPTExNDc9c3RhdGljIGludCBzbXNjOTV4eF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjg0LVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyODU6XFx0cmV0ID0gcGh5X2Nvbm5lY3RfZGlyZWN0KGRldi1cXHUwMDNlbmV0LCBwZGF0YS1cXHUwMDNlcGh5ZGV2LFxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyODYtXFx0XFx0XFx0XFx0IFxcdTAwMjZzbXNjOTV4eF9oYW5kbGVfbGlua19jaGFuZ2UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjQ4OjMwLjc4NjE5MjM2MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjUwODMxMzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqTmV0d29yayBEcml2ZXIgSW52ZXN0aWdhdGlvbioqXG5cbkhtbSwgYGF4ODgxNzJhYCBpcyB1c2luZyBgcGh5X2Nvbm5lY3RgLiBJbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuIE5vdywgd2hhdCdzIHRoZSBkZWFsIHdpdGggYHI4MTUyYD8gSXMgaXQgYWxzbyBsZXZlcmFnaW5nIGBwaHlfY29ubmVjdGA/IFRoYXQncyB0aGUgcXVlc3Rpb24gSSBoYXZlIHRvIGFuc3dlciByaWdodCBub3cuIEtub3dpbmcgaG93IGRpZmZlcmVudCBkcml2ZXJzIGhhbmRsZSBQSFkgY29ubmVjdGlvbnMgaXMgZXNzZW50aWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyIGFuZCBob3cgdGhlIGRpZmZlcmVudCBkcml2ZXJzIHJlbGF0ZSB0byBlYWNoIG90aGVyLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY29tcGxldGVseSBncm9rIHRoaXMsIGFuZCB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBkcml2ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTQ1OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjQ4OjM2LjQzNzAyNjEyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODgxODIzNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2Nvbm5lY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL3I4MTUyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo0ODozNi41MDU4NTIyNDZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc2MzI1NTk0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBQbGFuIHRvIEV4cGxvaXQgdGhlIFJlYWx0ZWsgUEhZIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gdHJpZ2dlciB0aGF0IGByZWFsdGVrX21haW4uY2AgY29kZSB1c2VkIGJ5IHRoZSBgcjgxNTJgIGRyaXZlci4gRGlyZWN0bHkgdXNpbmcgdGhlIGByODE1MmAgaXNuJ3QgZ29pbmcgdG8gd29yay4gQ2FuIEkgc29tZWhvdyB0cmljayB0aGUgc3lzdGVtIGludG8gdGhpbmtpbmcgYSBSZWFsdGVrIFBIWSBpcyBwcmVzZW50PyBNYXliZSBhIHZpcnR1YWwgZGV2aWNlP1xuXG5XYWl0IGEgbWludXRlLi4uIFdoYXQgaWYgSSB1c2UgYHN5el91c2JfY29ubmVjdGAgdG8gZW11bGF0ZSBhIFVTQiBkZXZpY2U/IFNwZWNpZmljYWxseSwgaWYgSSBlbXVsYXRlIGFuIGBheDg4MTcyYWAgZGV2aWNlIChBU0lYIEFYODgxNzJBKSwgYW5kIGNyYWZ0IHRoZSBNRElPIHJlc3BvbnNlcyB0byBpbmNsdWRlIGEgUEhZIElEIHRoYXQgbWF0Y2hlcyBgUlRMXzgyNjFDX0NHYCAoMHgwMDFjYzg5OCksIHRoZSBgYXg4ODE3MmFgIGRyaXZlciAqc2hvdWxkKiBwcm9iZSB0aGUgTURJTyBidXMsIHNlZSB0aGF0IElELCBhbmQgcGh5bGliIHdpbGwgdGhlbiBiaW5kIHRoZSBgcmVhbHRla19tYWluLmNgIGRyaXZlciB0byBpdC4gSXQncyBhIGJpdCBvZiBhIGRhbmNlLCBidXQgdGhlIHBpZWNlcyAqc2hvdWxkKiBmaXQuXG5cbk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIGBheDg4MTcyYWAgYWN0dWFsbHkgYWxsb3cgbWUgdG8gc3BlY2lmeSAqYW55KiBQSFkgSUQgaW4gdGhlIE1ESU8gcmVzcG9uc2VzPyBUaGF0J3MgdGhlIG5leHQgdGhpbmcgdG8gY2hlY2suIElmIGl0J3MgcmVzdHJpY3RpdmUsIHRoaXMgd2hvbGUgaWRlYSBpcyBET0EuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NjY2LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjQ4OjQyLjI2OTExNjk0OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUwOTc0ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXg4ODE3MmFfcmVzZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9MTE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYXg4ODE3MmFfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0xMzAtXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6MTMxOnN0YXRpYyBpbnQgYXg4ODE3MmFfcmVzZXRfcGh5KHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IGVtYmRfcGh5KVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTEzMi17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz0xNTg9c3RhdGljIGludCBheDg4MTcyYV9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0yMTUtXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6MjE2OlxcdGF4ODgxNzJhX3Jlc2V0X3BoeShkZXYsIHByaXYtXFx1MDAzZXVzZV9lbWJkcGh5KTtcXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0yMTctXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz0yNTM9c3RhdGljIHZvaWQgYXg4ODE3MmFfdW5iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0yNjAtXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6MjYxOnN0YXRpYyBpbnQgYXg4ODE3MmFfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTI2Mi17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0yNjctXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6MjY4OlxcdGF4ODgxNzJhX3Jlc2V0X3BoeShkZXYsIHByaXYtXFx1MDAzZXVzZV9lbWJkcGh5KTtcXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0yNjktXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz0zNDc9Y29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGF4ODgxNzJhX2luZm8gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0zNDktXFx0LmJpbmQgPSBheDg4MTcyYV9iaW5kLFxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjM1MDpcXHQucmVzZXQgPSBheDg4MTcyYV9yZXNldCxcXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0zNTEtXFx0LnN0b3AgPSBheDg4MTcyYV9zdG9wLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo0ODo0Mi4zMzQyMjQ1NzdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwMTM3NjIxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQncyBnb2luZyB0aHJvdWdoIG15IG1pbmQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGlmIEknbSB0aGUgb25lIGhhdmluZyB0aGVzZSB0aG91Z2h0cy5cblxuKipEaXZpbmcgaW50byB0aGUgQVg4ODE3MkEgRHJpdmVyKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBmb2N1c2luZyBvbiB0aGUgYGF4ODgxNzJhX2JpbmRgIGFuZCBgYXg4ODE3MmFfcmVzZXRgIGZ1bmN0aW9ucyBzcGVjaWZpY2FsbHkuIFRoZXNlIGFyZSB0aGUgY29yZSBpbml0aWFsaXphdGlvbiBhbmQgcmVjb3ZlcnkgcG9pbnRzLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBkcml2ZXIgaG9va3MgaW50byB0aGUgc3lzdGVtIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgaGFyZHdhcmUgZ2xpdGNoZXMgb3IgaW5pdGlhbGl6YXRpb24gZmFpbHVyZXMuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBkZXZpY2UgaXMgYnJvdWdodCBvbmxpbmUgYW5kIGhvdyBpdOKAmXMgYnJvdWdodCBiYWNrIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nLiBVbmRlcnN0YW5kaW5nIGBiaW5kYCBpcyBnb2luZyB0byBnaXZlIG1lIGEgaGlnaC1sZXZlbCB2aWV3IG9mIGRldmljZSBwcm9iaW5nIGFuZCByZXNvdXJjZSBhbGxvY2F0aW9uLCBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSByZWdpc3RlciBtYXBwaW5nIGFuZCBpbnRlcnJ1cHQgc2V0dXAuIFJlc2V0LCBvbiB0aGUgb3RoZXIgaGFuZCwgc2hvdWxkIHJldmVhbCBob3cgdGhlIGRyaXZlciBkZWFscyB3aXRoIHBvd2VyIGN5Y2xlcyBvciBlcnJvciByZWNvdmVyeS4gVGhpcyB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgdGhlIHJvYnVzdG5lc3Mgb2YgdGhpcyBpbXBsZW1lbnRhdGlvbi4gTGV0J3Mgc2VlIGhvdyB0aGV5J3ZlIGFwcHJvYWNoZWQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2ODIwLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NDg6NDYuMjM1NjAzMzY3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1OCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTg6XFx0c3RhdGljIGludCBheDg4MTcyYV9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuIDE1OTpcXHR7XFxuIDE2MDpcXHRcXHRpbnQgcmV0O1xcbiAxNjE6XFx0XFx0dTggYnVmW0VUSF9BTEVOXTtcXG4gMTYyOlxcdFxcdHN0cnVjdCBheDg4MTcyYV9wcml2YXRlICpwcml2O1xcbiAxNjM6XFx0XFxuIDE2NDpcXHRcXHRyZXQgPSB1c2JuZXRfZ2V0X2VuZHBvaW50cyhkZXYsIGludGYpO1xcbiAxNjU6XFx0XFx0aWYgKHJldClcXG4gMTY2OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE2NzpcXHRcXG4gMTY4OlxcdFxcdHByaXYgPSBremFsbG9jX29iaigqcHJpdik7XFxuIDE2OTpcXHRcXHRpZiAoIXByaXYpXFxuIDE3MDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMTcxOlxcdFxcbiAxNzI6XFx0XFx0ZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdiA9IHByaXY7XFxuIDE3MzpcXHRcXG4gMTc0OlxcdFxcdC8qIEdldCB0aGUgTUFDIGFkZHJlc3MgKi9cXG4gMTc1OlxcdFxcdHJldCA9IGFzaXhfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9OT0RFX0lELCAwLCAwLCBFVEhfQUxFTiwgYnVmLCAwKTtcXG4gMTc2OlxcdFxcdGlmIChyZXQgXFx1MDAzYyBFVEhfQUxFTikge1xcbiAxNzc6XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYtXFx1MDAzZW5ldCwgXFxcIkZhaWxlZCB0byByZWFkIE1BQyBhZGRyZXNzOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4gMTc4OlxcdFxcdFxcdHJldCA9IC1FSU87XFxuIDE3OTpcXHRcXHRcXHRnb3RvIGZyZWU7XFxuIDE4MDpcXHRcXHR9XFxuIDE4MTpcXHRcXHRldGhfaHdfYWRkcl9zZXQoZGV2LVxcdTAwM2VuZXQsIGJ1Zik7XFxuIDE4MjpcXHRcXG4gMTgzOlxcdFxcdGRldi1cXHUwMDNlbmV0LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNmF4ODgxNzJhX25ldGRldl9vcHM7XFxuIDE4NDpcXHRcXHRkZXYtXFx1MDAzZW5ldC1cXHUwMDNlZXRodG9vbF9vcHMgPSBcXHUwMDI2YXg4ODE3MmFfZXRodG9vbF9vcHM7XFxuIDE4NTpcXHRcXG4gMTg2OlxcdFxcdC8qIGFyZSB3ZSB1c2luZyB0aGUgaW50ZXJuYWwgb3IgdGhlIGV4dGVybmFsIHBoeT8gKi9cXG4gMTg3OlxcdFxcdHJldCA9IGFzaXhfcmVhZF9jbWQoZGV2LCBBWF9DTURfU1dfUEhZX1NUQVRVUywgMCwgMCwgMSwgYnVmLCAwKTtcXG4gMTg4OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIDE4OTpcXHRcXHRcXHRuZXRkZXZfZXJyKGRldi1cXHUwMDNlbmV0LCBcXFwiRmFpbGVkIHRvIHJlYWQgc29mdHdhcmUgaW50ZXJmYWNlIHNlbGVjdGlvbiByZWdpc3RlcjogJWRcXFxcblxcXCIsXFxuIDE5MDpcXHRcXHRcXHRcXHQgICByZXQpO1xcbiAxOTE6XFx0XFx0XFx0Z290byBmcmVlO1xcbiAxOTI6XFx0XFx0fVxcbiAxOTM6XFx0XFxuIDE5NDpcXHRcXHRuZXRkZXZfZGJnKGRldi1cXHUwMDNlbmV0LCBcXFwiQVhfQ01EX1NXX1BIWV9TVEFUVVMgPSAweCUwMnhcXFxcblxcXCIsIGJ1ZlswXSk7XFxuIDE5NTpcXHRcXHRzd2l0Y2ggKGJ1ZlswXSBcXHUwMDI2IEFYX1BIWV9TRUxFQ1RfTUFTSykge1xcbiAxOTY6XFx0XFx0Y2FzZSBBWF9QSFlfU0VMRUNUX0lOVEVSTkFMOlxcbiAxOTc6XFx0XFx0XFx0bmV0ZGV2X2RiZyhkZXYtXFx1MDAzZW5ldCwgXFxcInVzZSBpbnRlcm5hbCBwaHlcXFxcblxcXCIpO1xcbiAxOTg6XFx0XFx0XFx0cHJpdi1cXHUwMDNldXNlX2VtYmRwaHkgPSAxO1xcbiAxOTk6XFx0XFx0XFx0YnJlYWs7XFxuIDIwMDpcXHRcXHRjYXNlIEFYX1BIWV9TRUxFQ1RfRVhURVJOQUw6XFxuIDIwMTpcXHRcXHRcXHRuZXRkZXZfZGJnKGRldi1cXHUwMDNlbmV0LCBcXFwidXNlIGV4dGVybmFsIHBoeVxcXFxuXFxcIik7XFxuIDIwMjpcXHRcXHRcXHRwcml2LVxcdTAwM2V1c2VfZW1iZHBoeSA9IDA7XFxuIDIwMzpcXHRcXHRcXHRicmVhaztcXG4gMjA0OlxcdFxcdGRlZmF1bHQ6XFxuIDIwNTpcXHRcXHRcXHRuZXRkZXZfZXJyKGRldi1cXHUwMDNlbmV0LCBcXFwiSW50ZXJmYWNlIG1vZGUgbm90IHN1cHBvcnRlZCBieSBkcml2ZXJcXFxcblxcXCIpO1xcbiAyMDY6XFx0XFx0XFx0cmV0ID0gLUVOT1RTVVBQO1xcbiAyMDc6XFx0XFx0XFx0Z290byBmcmVlO1xcbiAyMDg6XFx0XFx0fVxcbiAyMDk6XFx0XFxuIDIxMDpcXHRcXHRyZXQgPSBhc2l4X3JlYWRfcGh5X2FkZHIoZGV2LCBwcml2LVxcdTAwM2V1c2VfZW1iZHBoeSk7XFxuIDIxMTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gMjEyOlxcdFxcdFxcdGdvdG8gZnJlZTtcXG4gMjEzOlxcdFxcbiAyMTQ6XFx0XFx0cHJpdi1cXHUwMDNlcGh5X2FkZHIgPSByZXQ7XFxuIDIxNTpcXHRcXG4gMjE2OlxcdFxcdGF4ODgxNzJhX3Jlc2V0X3BoeShkZXYsIHByaXYtXFx1MDAzZXVzZV9lbWJkcGh5KTtcXG4gMjE3OlxcdFxcbiAyMTg6XFx0XFx0LyogQXNpeCBmcmFtaW5nIHBhY2tzIG11bHRpcGxlIGV0aCBmcmFtZXMgaW50byBhIDJLIHVzYiBidWxrIHRyYW5zZmVyICovXFxuIDIxOTpcXHRcXHRpZiAoZGV2LVxcdTAwM2Vkcml2ZXJfaW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBGTEFHX0ZSQU1JTkdfQVgpIHtcXG4gMjIwOlxcdFxcdFxcdC8qIGhhcmRfbXR1ICBpcyBzdGlsbCB0aGUgZGVmYXVsdCAtIHRoZSBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydFxcbiAyMjE6XFx0XFx0XFx0ICAganVtYm8gZXRoIGZyYW1lcyAqL1xcbiAyMjI6XFx0XFx0XFx0ZGV2LVxcdTAwM2VyeF91cmJfc2l6ZSA9IDIwNDg7XFxuIDIyMzpcXHRcXHR9XFxuIDIyNDpcXHRcXG4gMjI1OlxcdFxcdC8qIGluaXQgTURJTyBidXMgKi9cXG4gMjI2OlxcdFxcdHJldCA9IGF4ODgxNzJhX2luaXRfbWRpbyhkZXYpO1xcbiAyMjc6XFx0XFx0aWYgKHJldClcXG4gMjI4OlxcdFxcdFxcdGdvdG8gZnJlZTtcXG4gMjI5OlxcdFxcbiAyMzA6XFx0XFx0cmV0dXJuIDA7XFxuIDIzMTpcXHRcXG4gMjMyOlxcdGZyZWU6XFxuIDIzMzpcXHRcXHRrZnJlZShwcml2KTtcXG4gMjM0OlxcdFxcdHJldHVybiByZXQ7XFxuIDIzNTpcXHR9XFxuIDIzNjpcXHRcXG4gMjM3OlxcdHN0YXRpYyBpbnQgYXg4ODE3MmFfc3RvcChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuIDIzODpcXHR7XFxuIDIzOTpcXHRcXHRzdHJ1Y3QgYXg4ODE3MmFfcHJpdmF0ZSAqcHJpdiA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuIDI0MDpcXHRcXG4gMjQxOlxcdFxcdG5ldGRldl9kYmcoZGV2LVxcdTAwM2VuZXQsIFxcXCJTdG9wcGluZyBpbnRlcmZhY2VcXFxcblxcXCIpO1xcbiAyNDI6XFx0XFxuIDI0MzpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcGh5ZGV2KSB7XFxuIDI0NDpcXHRcXHRcXHRuZXRkZXZfaW5mbyhkZXYtXFx1MDAzZW5ldCwgXFxcIkRpc2Nvbm5lY3RpbmcgZnJvbSBwaHkgJXNcXFxcblxcXCIsXFxuIDI0NTpcXHRcXHRcXHRcXHQgICAgcHJpdi1cXHUwMDNlcGh5X25hbWUpO1xcbiAyNDY6XFx0XFx0XFx0cGh5X3N0b3AocHJpdi1cXHUwMDNlcGh5ZGV2KTtcXG4gMjQ3OlxcdFxcdFxcdHBoeV9kaXNjb25uZWN0KHByaXYtXFx1MDAzZXBoeWRldik7XFxuIDI0ODpcXHRcXHR9XFxuIDI0OTpcXHRcXG4gMjUwOlxcdFxcdHJldHVybiAwO1xcbiAyNTE6XFx0fVxcbiAyNTI6XFx0XFxuIDI1MzpcXHRzdGF0aWMgdm9pZCBheDg4MTcyYV91bmJpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4gMjU0OlxcdHtcXG4gMjU1OlxcdFxcdHN0cnVjdCBheDg4MTcyYV9wcml2YXRlICpwcml2ID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4gMjU2OlxcdFxcbiAyNTc6XFx0XFx0YXg4ODE3MmFfcmVtb3ZlX21kaW8oZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NDg6NDYuMjM1NjkzMzU3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MjUyMjY0OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byB0aGUgTURJTyBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIHRoZSBjb2RlJ3MganVtcGluZyBpbnRvIGBheDg4MTcyYV9pbml0X21kaW9gLiBUaGF0J3Mgd2hlcmUgaXQgYWxsIHN0YXJ0cywgdGhlIE1lZGlhIEluZGVwZW5kZW50IEludGVyZmFjZSAoTUlJKSBpbml0aWFsaXphdGlvbiBmb3IgdGhlIGNoaXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgYXQgdGhpcyBjcnVjaWFsIGVudHJ5IHBvaW50LiBXaGF0IGFyZSB0aGUgc3BlY2lmaWMgc3RlcHMgdGhpcyBmdW5jdGlvbiB0YWtlcyB0byBnZXQgdGhlIE1ESU8gaW50ZXJmYWNlIHVwIGFuZCBydW5uaW5nPyBXZSdyZSB0YWxraW5nIFBIWSByZWdpc3RlciBhY2Nlc3MgaGVyZSwgc28gSSdtIGxvb2tpbmcgZm9yIHRoZSBzZXF1ZW5jZTogc2V0dGluZyB1cCB0aGUgTURJTyBjbG9jaywgY29uZmlndXJpbmcgYW55IG5lY2Vzc2FyeSBHUElPIHBpbnMgKGlmIGl0J3MgdXNpbmcgYSBHUElPLWJhc2VkIE1ESU8pLCBhbmQgdGhlbiBsaWtlbHkgc29tZSBpbml0aWFsIHdyaXRlIG9wZXJhdGlvbnMgdG8gdGhlIFBIWSB0byBjb25maWd1cmUgaXRzIGJhc2ljIG9wZXJhdGluZyBtb2RlLCBsaW5rIHNwZWVkLCBhbmQgYXV0b25lZ290aWF0aW9uIHNldHRpbmdzLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBjbG9jayBkaXZpZGVyIGNhbGN1bGF0aW9ucywgcGluIGRpcmVjdGlvbiBzZXR0aW5ncywgYW5kIHRoZSBhY3R1YWwgcmVnaXN0ZXIgd3JpdGUgY29tbWFuZHMgdXNpbmcgd2hhdGV2ZXIgbG93LWxldmVsIE1ESU8gdHJhbnNhY3Rpb24gZnVuY3Rpb25zIGFyZSBwcm92aWRlZCBieSB0aGUgZHJpdmVyLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGl0J3MgdXNpbmcgYSBzdGFuZGFyZCBNRElPIGludGVyZmFjZSBvciBhIHZhcmlhdGlvbiwgYXMgd2VsbCBhcyB0aGUgZXhhY3QgUEhZIGFkZHJlc3MgaXQncyB0YXJnZXRpbmcuIExldCdzIHNlZSBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzIGR1cmluZyB0aGVzZSBpbml0aWFsIGFjY2Vzc2VzLiBJJ20ga2VlbiB0byBzcG90IGFueSB1bnVzdWFsIGluaXRpYWwgcmVnaXN0ZXIgc2V0dGluZ3Mgb3IgYml0IG1hbmlwdWxhdGlvbnMgdGhhdCBtaWdodCBiZSBjcml0aWNhbCB0byB0aGlzIHBhcnRpY3VsYXIgUEhZJ3MgYmVoYXZpb3IuIEhvcGVmdWxseSwgaXQgaW5jbHVkZXMgYWRlcXVhdGUgZXJyb3IgaGFuZGxpbmcg4oCTIEknbSBob3BpbmcgdG8gc2VlIGEgc29saWQgc3RhdHVzIGNoZWNrIGFmdGVyIGVhY2ggd3JpdGUgYW5kIHJlYWQgdG8gdGhlIFBIWSByZWdpc3RlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NjY5LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo0ODo1MC44NjA5MjI2MzVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMDExNzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF4ODgxNzJhX2luaXRfbWRpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz01NT1zdGF0aWMgdm9pZCBheDg4MTcyYV9zdGF0dXMoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXJiICp1cmIpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy02MC0vKiB1c2UgcGh5bGliIGluZnJhc3RydWN0dXJlICovXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6NjE6c3RhdGljIGludCBheDg4MTcyYV9pbml0X21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTYyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jPTE1OD1zdGF0aWMgaW50IGF4ODgxNzJhX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTIyNS1cXHQvKiBpbml0IE1ESU8gYnVzICovXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6MjI2OlxcdHJldCA9IGF4ODgxNzJhX2luaXRfbWRpbyhkZXYpO1xcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTIyNy1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo0ODo1MC45MjA5MzgyMDVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ2NzI3MzY5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGF4ODgxNzJhX2luaXRfbWRpb2AgZnVuY3Rpb24uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGNoaXAncyBNRElPIGludGVyZmFjZSBpcyBpbml0aWFsaXplZC4gSSdtIGFzc3VtaW5nLCBnaXZlbiB0aGUgbmFtaW5nLCB0aGF0IHRoaXMgaXMgc3BlY2lmaWNhbGx5IHRpZWQgdG8gdGhlIEFTSVggQVg4ODE3MkEgZXRoZXJuZXQgY29udHJvbGxlciDigJMgd2hpY2ggSSdtIGZhbWlsaWFyIHdpdGgsIGdpdmVuIG15IGJhY2tncm91bmQuIEknbSBleHBlY3RpbmcgdGhpcyBpbml0aWFsaXphdGlvbiB0byBiZSBhIGNyaXRpY2FsIHN0ZXAuXG5cbk5vdywgbGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHJlZ2lzdGVyIGFjY2Vzc2VzIGFuZCBhbnkgZGVsYXlzIHVzZWQsIGFzIHRoZXNlIGFyZSBhbGwgaW1wb3J0YW50LiBJIGFudGljaXBhdGUgdGhhdCBpdCB3aWxsIGludm9sdmUgc2V0dGluZyB1cCBjbG9jayBzcGVlZHMsIHBvdGVudGlhbGx5IGNvbmZpZ3VyaW5nIHRoZSBQSFkgYWRkcmVzcyAoaWYgaXQncyB1c2luZyBhbiBleHRlcm5hbCBQSFkpLCBhbmQgZW5hYmxpbmcgdGhlIE1ESU8gaW50ZXJmYWNlIGl0c2VsZi4gQW55IGVycm9yIGhhbmRsaW5nIG9yIHJldHJ5IG1lY2hhbmlzbXMgd2lsbCBiZSBnb29kIHRvIG5vdGUsIHRvbywgc2luY2UgcmVsaWFibGUgaW5pdGlhbGl6YXRpb24gaXMgY3J1Y2lhbCBmb3IgYSBzdGFibGUgbmV0d29yayBjb25uZWN0aW9uLiBJJ2xsIGFsc28gYmUgb24gdGhlIGxvb2tvdXQgZm9yIGFueSBkZXZpY2Utc3BlY2lmaWMgcXVpcmtzIG9yIHdvcmthcm91bmRzIHRoZSBkcml2ZXIgbWlnaHQgZW1wbG95LiBUaGlzIHNob3VsZCBob3BlZnVsbHkgYmUgc3RyYWlnaHRmb3J3YXJkOyBidXQgbGV0J3MgdGFrZSBhIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzQzLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NDg6NTUuMzg4MjE0NDFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjE6XFx0c3RhdGljIGludCBheDg4MTcyYV9pbml0X21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxcbiAgNjI6XFx0e1xcbiAgNjM6XFx0XFx0c3RydWN0IGF4ODgxNzJhX3ByaXZhdGUgKnByaXYgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbiAgNjQ6XFx0XFx0aW50IHJldDtcXG4gIDY1OlxcdFxcbiAgNjY6XFx0XFx0cHJpdi1cXHUwMDNlbWRpbyA9IG1kaW9idXNfYWxsb2MoKTtcXG4gIDY3OlxcdFxcdGlmICghcHJpdi1cXHUwMDNlbWRpbykge1xcbiAgNjg6XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYtXFx1MDAzZW5ldCwgXFxcIkNvdWxkIG5vdCBhbGxvY2F0ZSBNRElPIGJ1c1xcXFxuXFxcIik7XFxuICA2OTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gIDcwOlxcdFxcdH1cXG4gIDcxOlxcdFxcbiAgNzI6XFx0XFx0cHJpdi1cXHUwMDNlbWRpby1cXHUwMDNlcHJpdiA9ICh2b2lkICopZGV2O1xcbiAgNzM6XFx0XFx0cHJpdi1cXHUwMDNlbWRpby1cXHUwMDNlcmVhZCA9IFxcdTAwMjZhc2l4X21kaW9fYnVzX3JlYWQ7XFxuICA3NDpcXHRcXHRwcml2LVxcdTAwM2VtZGlvLVxcdTAwM2V3cml0ZSA9IFxcdTAwMjZhc2l4X21kaW9fYnVzX3dyaXRlO1xcbiAgNzU6XFx0XFx0cHJpdi1cXHUwMDNlbWRpby1cXHUwMDNlbmFtZSA9IFxcXCJBc2l4IE1ESU8gQnVzXFxcIjtcXG4gIDc2OlxcdFxcdC8qIG1paSBidXMgbmFtZSBpcyB1c2ItXFx1MDAzY3VzYiBidXMgbnVtYmVyXFx1MDAzZS1cXHUwMDNjdXNiIGRldmljZSBudW1iZXJcXHUwMDNlICovXFxuICA3NzpcXHRcXHRzbnByaW50Zihwcml2LVxcdTAwM2VtZGlvLVxcdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcXFwidXNiLSUwM2Q6JTAzZFxcXCIsXFxuICA3ODpcXHRcXHRcXHQgZGV2LVxcdTAwM2V1ZGV2LVxcdTAwM2VidXMtXFx1MDAzZWJ1c251bSwgZGV2LVxcdTAwM2V1ZGV2LVxcdTAwM2VkZXZudW0pO1xcbiAgNzk6XFx0XFxuICA4MDpcXHRcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXFx1MDAzZW1kaW8pO1xcbiAgODE6XFx0XFx0aWYgKHJldCkge1xcbiAgODI6XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYtXFx1MDAzZW5ldCwgXFxcIkNvdWxkIG5vdCByZWdpc3RlciBNRElPIGJ1c1xcXFxuXFxcIik7XFxuICA4MzpcXHRcXHRcXHRnb3RvIG1mcmVlO1xcbiAgODQ6XFx0XFx0fVxcbiAgODU6XFx0XFxuICA4NjpcXHRcXHRuZXRkZXZfaW5mbyhkZXYtXFx1MDAzZW5ldCwgXFxcInJlZ2lzdGVyZWQgbWRpbyBidXMgJXNcXFxcblxcXCIsIHByaXYtXFx1MDAzZW1kaW8tXFx1MDAzZWlkKTtcXG4gIDg3OlxcdFxcdHJldHVybiAwO1xcbiAgODg6XFx0XFxuICA4OTpcXHRtZnJlZTpcXG4gIDkwOlxcdFxcdG1kaW9idXNfZnJlZShwcml2LVxcdTAwM2VtZGlvKTtcXG4gIDkxOlxcdFxcdHJldHVybiByZXQ7XFxuICA5MjpcXHR9XFxuICA5MzpcXHRcXG4gIDk0OlxcdHN0YXRpYyB2b2lkIGF4ODgxNzJhX3JlbW92ZV9tZGlvKHN0cnVjdCB1c2JuZXQgKmRldilcXG4gIDk1OlxcdHtcXG4gIDk2OlxcdFxcdHN0cnVjdCBheDg4MTcyYV9wcml2YXRlICpwcml2ID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4gIDk3OlxcdFxcbiAgOTg6XFx0XFx0bmV0ZGV2X2luZm8oZGV2LVxcdTAwM2VuZXQsIFxcXCJkZXJlZ2lzdGVyaW5nIG1kaW8gYnVzICVzXFxcXG5cXFwiLCBwcml2LVxcdTAwM2VtZGlvLVxcdTAwM2VpZCk7XFxuICA5OTpcXHRcXHRtZGlvYnVzX3VucmVnaXN0ZXIocHJpdi1cXHUwMDNlbWRpbyk7XFxuIDEwMDpcXHRcXHRtZGlvYnVzX2ZyZWUocHJpdi1cXHUwMDNlbWRpbyk7XFxuIDEwMTpcXHR9XFxuIDEwMjpcXHRcXG4gMTAzOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYXg4ODE3MmFfbmV0ZGV2X29wcyA9IHtcXG4gMTA0OlxcdFxcdC5uZG9fb3BlblxcdFxcdD0gdXNibmV0X29wZW4sXFxuIDEwNTpcXHRcXHQubmRvX3N0b3BcXHRcXHQ9IHVzYm5ldF9zdG9wLFxcbiAxMDY6XFx0XFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSB1c2JuZXRfc3RhcnRfeG1pdCxcXG4gMTA3OlxcdFxcdC5uZG9fdHhfdGltZW91dFxcdFxcdD0gdXNibmV0X3R4X3RpbWVvdXQsXFxuIDEwODpcXHRcXHQubmRvX2NoYW5nZV9tdHVcXHRcXHQ9IHVzYm5ldF9jaGFuZ2VfbXR1LFxcbiAxMDk6XFx0XFx0Lm5kb19nZXRfc3RhdHM2NFxcdD0gZGV2X2dldF90c3RhdHM2NCxcXG4gMTEwOlxcdFxcdC5uZG9fc2V0X21hY19hZGRyZXNzXFx0PSBhc2l4X3NldF9tYWNfYWRkcmVzcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NDg6NTUuMzg4Mjg4Nzk5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NzA3OTgwNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTURJTyBCdXMgSW50ZXJhY3Rpb24gZm9yIEVtdWxhdGVkIFVTQiBEZXZpY2UqKlxuXG5Pa2F5LCBzbyBpZiBJJ20gdW5kZXJzdGFuZGluZyB0aGlzIGNvcnJlY3RseSwgdXNpbmcgYG1kaW9idXNfcmVnaXN0ZXJgIGlzIHRoZSBrZXkuIFRoYXQgZnVuY3Rpb24gaGFuZGxlcyBzY2FubmluZyB0aGUgTURJTyBidXMgYW5kIHByb2JpbmcgYW55IFBIWSBkZXZpY2VzIHRoYXQgYXJlIHByZXNlbnQuIEkgdGhpbmsgdGhpcyBjYW4gd29yayB3aXRoIHRoZSBVU0IgZGV2aWNlIGVtdWxhdGlvbiDigJMgd2UgY2FuIGludGVyY2VwdCBhbmQgcmVzcG9uZCB0byBgYXNpeF9tZGlvX2J1c19yZWFkYCBjYWxscywgYW5kIHNwZWNpZmljYWxseSwgd2UgY2FuIHJlcG9ydCB0aGUgUEhZIElEIGZvciB0aGUgYFJUTF84MjYxQ19DR2AgYXMgMHgwMDFjYzg5OC4gSWYgdGhhdCdzIHdoYXQgd2UgZG8sIGBtZGlvYnVzX3JlZ2lzdGVyYCBzaG91bGQgdGhlbiBjcmVhdGUgYSBQSFkgZGV2aWNlIG9iamVjdCBhbmQgYmluZCBpdCB0byB0aGUgYHJlYWx0ZWtfbWFpbi5jYCBkcml2ZXIsIHdoaWNoIGlzIHdoYXQgd2UgbmVlZC5cblxuQnV0IGhvbGQgb27igKYgSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nLiBJcyBgUlRMXzgyNjFDX0NHYCBhIENsYXVzZSA0NSBQSFkgb3IgYSBDbGF1c2UgMjIgUEhZPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGByZWFsdGVrX21haW4uY2AgdG8gYmUgY2VydGFpbi4gR290dGEgZW5zdXJlIHdlJ3JlIGFsaWduaW5nIHdpdGggaG93IHRoYXQgZHJpdmVyIGV4cGVjdHMgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgUEhZLiBOZWVkIHRvIHZlcmlmeSB0aGF0IGJlZm9yZSBwcm9jZWVkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDQ4MSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjQ5OjAxLjg1OTA4OTYxOFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE0MzYzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUlRMXzgyNjFDX0NHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jLTI1OS0jZGVmaW5lIFJUTF84MjYxQ1xcdFxcdFxcdFxcdDB4MDAxY2M4OTBcXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYzoyNjA6I2RlZmluZSBSVExfODI2MUNfQ0dcXHRcXHRcXHRcXHQweDAwMWNjODk4XFxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMtMjYxLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmM9MzA4Nj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgcmVhbHRla19kcnZzW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYy0zNDAzLVxcdH0sIHtcXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYzozNDA0OlxcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChSVExfODI2MUNfQ0cpLFxcbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jLTM0MDUtXFx0XFx0Lm5hbWVcXHRcXHRcXHQ9IFxcXCJSZWFsdGVrIFJUTDgyNjEgMTBHYnBzIFBIWVxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjQ5OjAxLjkyMDUzNDA2OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ4ODM4MjI0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBIWSBJRCBNYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBjb2RlIGluZGljYXRlcyB0aGF0IGBQSFlfSURfTUFUQ0hfRVhBQ1RgIG1lYW5zIGEgZGlyZWN0IG1hdGNoIG9uIHRoZSBQSFkgSUQuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEJ1dCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgd2hhdCBraW5kIG9mIFBIWSBhcmUgd2UgZGVhbGluZyB3aXRoPyBCYXNlZCBvbiB0aGF0IGluaXRpYWwgbWF0Y2gsIGlzIHRoaXMgYSBDbGF1c2UgNDUgUEhZLCBzcGVjaWZpY2FsbHk/IExvb2tpbmcgYXQgdGhlIGByZWFsdGVrX21haW4uY2AgZHJpdmVyLCBJIHNlZSBmdW5jdGlvbnMgYmVpbmcgY2FsbGVkIHN1Y2ggYXMgYGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXRgLCBgZ2VucGh5X2M0NV9wbWFfc3VzcGVuZGAsIGBnZW5waHlfYzQ1X3BtYV9yZXN1bWVgLCBgZ2VucGh5X2M0NV9jb25maWdfYW5lZ2AsIGFuZCBgZ2VucGh5X2M0NV9yZWFkX3N0YXR1c2AuIFRoZSBwcmVzZW5jZSBvZiB0aGVzZSBgZ2VucGh5X2M0NWAgZnVuY3Rpb25zIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQsIHllcywgaXQncyB2ZXJ5IGxpa2VseSBhIENsYXVzZSA0NSBQSFkuIFRoaXMgaXMgZXhjZWxsZW50IVxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBjYW4gdGhlIGBheDg4MTcyYWAgZHJpdmVyIGFjdHVhbGx5ICpyZWFkKiB0aGVzZSBDbGF1c2UgNDUgUEhZIHJlZ2lzdGVycz8gVGhhdCdzIHRoZSBrZXkuIExldCBtZSBxdWlja2x5IGV4YW1pbmUgYGFzaXhfbWRpb19idXNfcmVhZGAgdG8gc2VlIGhvdyBpdCdzIGltcGxlbWVudGVkLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gYWNjZXNzIHRoZSByZWdpc3RlcnMgdG8gbWFrZSBhbnkgcHJvZ3Jlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMTg0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjQ5OjM4LjQwODkxOTM1M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM2NTQ0MTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFzaXhfbWRpb19idXNfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg9MjMyPXZvaWQgYXNpeF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlfaWQsIGludCBsb2MsIGludCB2YWwpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjMzLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MjM0OmludCBhc2l4X21kaW9fYnVzX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMzUtaW50IGFzaXhfbWRpb19idXNfd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSwgdTE2IHZhbCk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYz01NDM9dm9pZCBhc2l4X21kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBoeV9pZCwgaW50IGxvYywgaW50IHZhbClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTU0OC0vKiBNRElPIHJlYWQgYW5kIHdyaXRlIHdyYXBwZXJzIGZvciBwaHlsaWIgKi9cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzo1NDk6aW50IGFzaXhfbWRpb19idXNfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnbnVtKVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTU1MC17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9NjY5PXN0YXRpYyBpbnQgYXg4ODc3Ml9pbml0X21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY3OC1cXHRwcml2LVxcdTAwM2VtZGlvLVxcdTAwM2Vwcml2ID0gZGV2O1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo2Nzk6XFx0cHJpdi1cXHUwMDNlbWRpby1cXHUwMDNlcmVhZCA9IFxcdTAwMjZhc2l4X21kaW9fYnVzX3JlYWQ7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4MC1cXHRwcml2LVxcdTAwM2VtZGlvLVxcdTAwM2V3cml0ZSA9IFxcdTAwMjZhc2l4X21kaW9fYnVzX3dyaXRlO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9NjE9c3RhdGljIGludCBheDg4MTcyYV9pbml0X21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtNzItXFx0cHJpdi1cXHUwMDNlbWRpby1cXHUwMDNlcHJpdiA9ICh2b2lkICopZGV2O1xcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjczOlxcdHByaXYtXFx1MDAzZW1kaW8tXFx1MDAzZXJlYWQgPSBcXHUwMDI2YXNpeF9tZGlvX2J1c19yZWFkO1xcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTc0LVxcdHByaXYtXFx1MDAzZW1kaW8tXFx1MDAzZXdyaXRlID0gXFx1MDAyNmFzaXhfbWRpb19idXNfd3JpdGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjQ5OjM4Ljc0NTQ3MjQzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NDAwNzAyOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBhc2l4X21kaW9fYnVzX3JlYWRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgaG93IGl0J3MgaW1wbGVtZW50ZWQuIE15IGV4cGVydGlzZSBsaWVzIGluIGVtYmVkZGVkIHN5c3RlbXMsIHNvIEknbSBhbHJlYWR5IG1lbnRhbGx5IHBhcnNpbmcgaXQgZm9yIHBvdGVudGlhbCBpc3N1ZXMgbGlrZSByYWNlIGNvbmRpdGlvbnMsIHJlZ2lzdGVyIGFjY2VzcyBtZWNoYW5pc21zLCBhbmQgdGltaW5nIGNvbnN0cmFpbnRzLiBJJ20gYXNzdW1pbmcgdGhpcyBpcyByZWxhdGVkIHRvIGEgTWVkaWEgSW5kZXBlbmRlbnQgSW50ZXJmYWNlIChNSUkpIGJ1cywgbGlrZWx5IGZvciBhbiBFdGhlcm5ldCBQSFkuIEdpdmVuIHRoZSBgYXNpeGAgcHJlZml4LCBJJ2QgZ3Vlc3MgdGhpcyBpcyByZWxhdGVkIHRvIGFuIEFTSVggY2hpcHNldCwgbWVhbmluZyBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlaXIgaWRpb3N5bmNyYXNpZXMgaWYgYW55LiBMZXQncyBzZWUgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyB0aGUgcmVhZCBjeWNsZS4gSXMgaXQgdXNpbmcgcG9sbGVkIG9yIGludGVycnVwdC1kcml2ZW4gbWV0aG9kcz8gV2hhdCdzIHRoZSBlcnJvciBoYW5kbGluZyBsaWtlPyBJJ20gaG9waW5nIHRvIHNlZSBjbGVhbiBzZXBhcmF0aW9uIG9mIGNvbmNlcm5zOiBjbGVhciBkYXRhIHN0cnVjdHVyZSBmb3IgaG9sZGluZyB0aGUgTURJTyBidXMgc3RhdGUgYW5kIHN0cmFpZ2h0Zm9yd2FyZCByZWdpc3RlciBhY2Nlc3MgZnVuY3Rpb25zIHdpdGggcHJvcGVyIGVycm9yIGNoZWNraW5nLiBJJ20ga2VlbiB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIGZvciBiaXQtYmFuZ2luZywgYW55IGJpdC1zaGlmdGluZyBvcGVyYXRpb25zIGFuZCB0aGUgdXNlIG9mIHZvbGF0aWxlIHBvaW50ZXJzIHRoYXQgY291bGQgaW50cm9kdWNlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzZXF1ZW5jaW5nLCB0aGUgY2xvY2sgZ2VuZXJhdGlvbiwgYW5kIHRoZSBkYXRhIHRyYW5zbWlzc2lvbi4gTGV0J3MgbWFrZSBzdXJlIGl0J3MgZG9pbmcgaXQgcmlnaHQgYW5kIGVmZmljaWVudGx5LiBJJ20gYWxzbyB3YXRjaGluZyBvdXQgZm9yIGFueSBwb3RlbnRpYWwgbG9jay11cHMgb3IgaW5maW5pdGUgbG9vcHMuIEZpbmFsbHksIGlzIHRoZXJlIGFueSBwb3RlbnRpYWwgZm9yIGRhdGEgY29ycnVwdGlvbiBnaXZlbiB0aGUgY29tbXVuaWNhdGlvbiBlbnZpcm9ubWVudD8gT2theSwgbGV0J3MgZ2V0IGludG8gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMjUzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NDk6NDUuNTg1NTQ2NDMzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0OSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU0OTpcXHRpbnQgYXNpeF9tZGlvX2J1c19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0pXFxuIDU1MDpcXHR7XFxuIDU1MTpcXHRcXHRzdHJ1Y3QgdXNibmV0ICpwcml2ID0gYnVzLVxcdTAwM2Vwcml2O1xcbiA1NTI6XFx0XFxuIDU1MzpcXHRcXHRyZXR1cm4gX19hc2l4X21kaW9fcmVhZChwcml2LVxcdTAwM2VuZXQsIHBoeV9pZCwgcmVnbnVtLCBmYWxzZSk7XFxuIDU1NDpcXHR9XFxuIDU1NTpcXHRcXG4gNTU2OlxcdGludCBhc2l4X21kaW9fYnVzX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0sIHUxNiB2YWwpXFxuIDU1NzpcXHR7XFxuIDU1ODpcXHRcXHRzdHJ1Y3QgdXNibmV0ICpwcml2ID0gYnVzLVxcdTAwM2Vwcml2O1xcbiA1NTk6XFx0XFxuIDU2MDpcXHRcXHRyZXR1cm4gX19hc2l4X21kaW9fd3JpdGUocHJpdi1cXHUwMDNlbmV0LCBwaHlfaWQsIHJlZ251bSwgdmFsLCBmYWxzZSk7XFxuIDU2MTpcXHR9XFxuIDU2MjpcXHRcXG4gNTYzOlxcdGludCBhc2l4X21kaW9fcmVhZF9ub3BtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlfaWQsIGludCBsb2MpXFxuIDU2NDpcXHR7XFxuIDU2NTpcXHRcXHRyZXR1cm4gX19hc2l4X21kaW9fcmVhZChuZXRkZXYsIHBoeV9pZCwgbG9jLCB0cnVlKTtcXG4gNTY2OlxcdH1cXG4gNTY3OlxcdFxcbiA1Njg6XFx0dm9pZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo0OTo0NS41ODU2Mjc3NTNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyNzEyNTQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDbGF1c2UgNDUgUmVnaXN0ZXIgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIGhvbGQgb24gYSBtaW51dGUuIEknbSBmb2N1c2luZyBvbiB0aGlzIGByZWdudW1gIHBhcmFtZXRlciwgYW5kIGl0IGp1c3Qgc3RydWNrIG1lOiBgcmVnbnVtYCBjb3VsZCB2ZXJ5IHdlbGwgYmUgYSBDbGF1c2UgNDUgcmVnaXN0ZXIgYWRkcmVzcy4gVGhhdCdzIGEgY3J1Y2lhbCBkaXN0aW5jdGlvbiwgYmVjYXVzZSBpZiBpdCAqaXMqIENsYXVzZSA0NSwgdGhlbiB0aGF0IGBNSUlfQUREUl9DNDVgIGJpdCwgb3IgYDB4NDAwMDAwMDBgLCBpcyBnb2luZyB0byBiZSBzZXQuIFRoZSByZWFsIHF1ZXN0aW9uIGlzOiBkb2VzIHRoZSBgX19hc2l4X21kaW9fcmVhZGAgZnVuY3Rpb24gZXZlbiBoYW5kbGUgQ2xhdXNlIDQ1IHJlZ2lzdGVycyBjb3JyZWN0bHk/IElmIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgYXBwcm9wcmlhdGUgbG9naWMsIGl0IGNvdWxkIGp1c3QgdHJ1bmNhdGUgdGhlIGFkZHJlc3MsIG1hbmdsZSB0aGUgcmVhZCwgb3Igd29yc2UsIG91dHJpZ2h0IGZhaWwuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGZvciBgX19hc2l4X21kaW9fcmVhZGAgYW5kIHNlZSBob3cgaXQncyBhY3R1YWxseSBpbXBsZW1lbnRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBmdW5jdGlvbiBpcyBjYXBhYmxlIG9mIGRlYWxpbmcgd2l0aCB0aGUgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBpbiBhZGRyZXNzaW5nIG1vZGVzLiBUaGlzIGNvdWxkIGJlIHRoZSByb290IGNhdXNlIG9mIHRoZSBpc3N1ZSBJJ20gc2VlaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjkzNCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NDk6NDkuNjEyNzU2MjY1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxOTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUwMDpcXHRcXHRyZXQgPSBhc2l4X3NldF9od19taWkoZGV2LCBpbl9wbSk7XFxuIDUwMTpcXHRvdXQ6XFxuIDUwMjpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldi1cXHUwMDNlcGh5X211dGV4KTtcXG4gNTAzOlxcdFxcbiA1MDQ6XFx0XFx0bmV0ZGV2X2RiZyhkZXYtXFx1MDAzZW5ldCwgXFxcImFzaXhfbWRpb19yZWFkKCkgcGh5X2lkPTB4JTAyeCwgbG9jPTB4JTAyeCwgcmV0dXJucz0weCUwNHhcXFxcblxcXCIsXFxuIDUwNTpcXHRcXHRcXHRcXHRwaHlfaWQsIGxvYywgbGUxNl90b19jcHUocmVzKSk7XFxuIDUwNjpcXHRcXG4gNTA3OlxcdFxcdHJldHVybiByZXQgXFx1MDAzYyAwID8gcmV0IDogbGUxNl90b19jcHUocmVzKTtcXG4gNTA4OlxcdH1cXG4gNTA5OlxcdFxcbiA1MTA6XFx0aW50IGFzaXhfbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlfaWQsIGludCBsb2MpXFxuIDUxMTpcXHR7XFxuIDUxMjpcXHRcXHRyZXR1cm4gX19hc2l4X21kaW9fcmVhZChuZXRkZXYsIHBoeV9pZCwgbG9jLCBmYWxzZSk7XFxuIDUxMzpcXHR9XFxuIDUxNDpcXHRcXG4gNTE1OlxcdHN0YXRpYyBpbnQgX19hc2l4X21kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBoeV9pZCwgaW50IGxvYyxcXG4gNTE2OlxcdFxcdFxcdFxcdCAgICAgaW50IHZhbCwgYm9vbCBpbl9wbSlcXG4gNTE3OlxcdHtcXG4gNTE4OlxcdFxcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIDUxOTpcXHRcXHRfX2xlMTYgcmVzID0gY3B1X3RvX2xlMTYodmFsKTtcXG4gNTIwOlxcdFxcdGludCByZXQ7XFxuIDUyMTpcXHRcXG4gNTIyOlxcdFxcdG5ldGRldl9kYmcoZGV2LVxcdTAwM2VuZXQsIFxcXCJhc2l4X21kaW9fd3JpdGUoKSBwaHlfaWQ9MHglMDJ4LCBsb2M9MHglMDJ4LCB2YWw9MHglMDR4XFxcXG5cXFwiLFxcbiA1MjM6XFx0XFx0XFx0XFx0cGh5X2lkLCBsb2MsIHZhbCk7XFxuIDUyNDpcXHRcXG4gNTI1OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmRldi1cXHUwMDNlcGh5X211dGV4KTtcXG4gNTI2OlxcdFxcbiA1Mjc6XFx0XFx0cmV0ID0gYXNpeF9jaGVja19ob3N0X2VuYWJsZShkZXYsIGluX3BtKTtcXG4gNTI4OlxcdFxcdGlmIChyZXQgPT0gLUVOT0RFVilcXG4gNTI5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA1MzA6XFx0XFxuIDUzMTpcXHRcXHRyZXQgPSBhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9NSUlfUkVHLCBwaHlfaWQsIChfX3UxNilsb2MsIDIsXFxuIDUzMjpcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZyZXMsIGluX3BtKTtcXG4gNTMzOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA1MzQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDUzNTpcXHRcXG4gNTM2OlxcdFxcdHJldCA9IGFzaXhfc2V0X2h3X21paShkZXYsIGluX3BtKTtcXG4gNTM3OlxcdG91dDpcXG4gNTM4OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGV2LVxcdTAwM2VwaHlfbXV0ZXgpO1xcbiA1Mzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjQ5OjQ5LjYxMjg0MDIxNVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzkyNjk1MjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBDbGF1c2UgNDUgTUlJIFJlYWQgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYGxvY2AgYmVpbmcgY2FzdCB0byBgX191MTZgLiBUaGF0J3MgYSByZWQgZmxhZy4gU3BlY2lmaWNhbGx5LCBgTUlJX0FERFJfQzQ1YCAoMHg0MDAwMDAwMCkgaXMgZ29pbmcgdG8gZ2V0IHRydW5jYXRlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBjb3VsZCBiZSBhIHByb2JsZW0uIEJ1dCB3YWl0LCBsZXQncyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIGhvdyB0aGUgTURJTyBidXMgb3BlcmF0ZXMuXG5cbmBtZGlvYnVzX3JlYWRgLCBpbiBgZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmNgLCBoYW5kbGVzIENsYXVzZSA0NSByZWFkcyBkaWZmZXJlbnRseS4gSXQgZmlyc3QgY2hlY2tzIGlmIHRoZSBidXMgaGFzIGEgYHJlYWRfYzQ1YCBmdW5jdGlvbiBwb2ludGVyLiBJZiBpdCBkb2VzLCBncmVhdCwgaXQgdXNlcyB0aGF0LiBJZiBub3QsIGl0IGZhbGxzIGJhY2sgdG8gdGhlIHJlZ3VsYXIgYGJ1cy1cdTAwM2VyZWFkYCBmdW5jdGlvbi4gVGhhdCdzIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nLlxuXG5Ib3dldmVyLCBhIHF1aWNrIHNlY29uZCBwYXNzIGNvbmZpcm1zIHRoYXQgaWYgdGhlIFBIWSBkcml2ZXIgcmVsaWVzIG9uIGBwaHlfcmVhZF9tbWRgLCBpdCB3aWxsIGV2ZW50dWFsbHkgY2FsbCBgYnVzLVx1MDAzZXJlYWRfYzQ1YCBvciBgYnVzLVx1MDAzZXJlYWRgIHdpdGggYE1JSV9BRERSX0M0NWAuXG5cblNvLCB0aGUgaXNzdWUgaXMgdGhhdCBpZiBgYXNpeF9tZGlvX2J1c19yZWFkYCB0cnVuY2F0ZXMgYE1JSV9BRERSX0M0NWAsIHdlIGFyZSBsaWtlbHkgZ29pbmcgdG8gcmVhZCBhIENsYXVzZSAyMiByZWdpc3RlciBpbnN0ZWFkLiBQb3RlbnRpYWxseSBhIHZ1bG5lcmFiaWxpdHkgaWYgdGhhdCByZWFkIGV4cG9zZXMgc29tZXRoaW5nIGl0IHNob3VsZG4ndC5cblxuTm93LCB0aGUgcGF0Y2ggaW4gcXVlc3Rpb24gaXMgaW4gYHJlYWx0ZWtfbWFpbi5jYCwgd2hpY2ggaXMgYSBQSFkgZHJpdmVyLiBBaGEhIFNvIGl0ICpzaG91bGRuJ3QqIGJlIHVzaW5nIHRoZSBgYXNpeF9tZGlvX2J1c19yZWFkYCBmdW5jdGlvbiFcblxuVGhlIHF1ZXN0aW9uIG5vdyBiZWNvbWVzOiBIb3cgY2FuIEkgdHJpZ2dlciB0aGlzIHNjZW5hcmlvIGFuZCB0ZXN0IGlmIHRoaXMgdHJ1bmNhdGlvbiBsZWFkcyB0byBhbiBleHBsb2l0YWJsZSByZWFkPyBDYW4gSSB1c2Ugc29tZXRoaW5nIGxpa2UgYG1kaW8tbW9ja3VwYD8gTGV0J3MgY2hlY2suIERvZXMgaXQgZXhpc3Qgb3IgaG93IGNhbiBJIGluc3RhbnRpYXRlIGEgUEhZPyBJcyB0aGVyZSBhIHVzZXItc3BhY2Ugd2F5IHRvIG1lc3Mgd2l0aCB0aGUgZHJpdmVycz8gQWgsIGBzeXNmc2AuLi4gYWx3YXlzIGEgZ29vZCBiZXQuXG5cbldhaXQsIEkgdGhvdWdodCB0aGVyZSB3YXMgYSBgbWRpby1tb2NrdXAuY2A/IE5vLiBPa2F5LCBJIHNlYXJjaGVkIHRoZSByaWdodCBwYXRoIGFuZCBub3RoaW5nLiBNYXliZSBJIG1pc3NlZCBzb21ldGhpbmcgb3IgbWlzLXJlbWVtYmVyZWQgdGhlIGRyaXZlciBsb2NhdGlvbi4gSSB3aWxsIHNlYXJjaCBgZHJpdmVycy9uZXQvYCBmb3IgYG1vY2t1cGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzOTgxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NDk6NTcuMDA1NTM3OThaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDgzMTQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2NrdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTQ0Nj1zdGF0aWMgaW50IF9faW5pdCBkc2FfbG9vcF9jcmVhdGVfc3dpdGNoX21kaW9kZXYodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ1NS1cXHRcXHR9LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ1NjpcXHRcXHQubmFtZSA9IFxcXCJEU0EgbW9ja3VwIGRyaXZlclxcXCIsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDU3LVxcdFxcdC5lbmFibGVkX3BvcnRzID0gMHgxZixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NDk6NTcuMTkwMzc4MDNaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5ODk5NzM0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgaW5pdGlhbCB0aG91Z2h0czpcblxuKipFdmFsdWF0aW5nIFBIWSBMYXllciBPcHRpb25zKipcblxuUmlnaHQsIHNvIHRoZSBgbWRpby1tb2NrdXBgIGFwcHJvYWNoIGlzbid0IGdvaW5nIHRvIGN1dCBpdCBmb3IgdGhpcyBwcm9qZWN0LiBUaGF0J3MgYSBkZWZpbml0ZSBuby1nby4gSSBuZWVkIHRvIHBpdm90IGFuZCBjb25zaWRlciBteSBvcHRpb25zIGZvciB0aGUgUEhZIGxheWVyLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRvIGV4cGxvcmUgYGZpeGVkLXBoeWAuIEknbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byB0aGUgaW1wbGljYXRpb25zIG9mIHVzaW5nIHRoYXQgaW5zdGVhZC4gVGhlIHdob2xlICdtb2NrdXAnIGlkZWEgaXNuJ3Qgcm9idXN0IG9yIHNjYWxhYmxlIGVub3VnaCBmb3Igd2hhdCBJIGhhdmUgaW4gbWluZCwgc28gSSdtIGtlZW4gdG8gZXZhbHVhdGUgYSBtb3JlIGNvbmNyZXRlIHNvbHV0aW9uIGltbWVkaWF0ZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDk4NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjUwOjAxLjA4OTM3ODc4NFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc4MzkxMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZml4ZWRfcGh5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlPTYzPW9iai0kKENPTkZJR19EUDgzVEc3MjBfUEhZKVxcdCs9IGRwODN0ZzcyMC5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjY0Om9iai0kKENPTkZJR19GSVhFRF9QSFkpXFx0XFx0Kz0gZml4ZWRfcGh5Lm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtNjUtb2JqLSQoQ09ORklHX0lDUExVU19QSFkpXFx0Kz0gaWNwbHVzLm9cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0yNy1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6Mjg6c3RydWN0IGZpeGVkX3BoeSB7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTI5LVxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjMwOlxcdHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzIHN0YXR1cztcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MzE6XFx0aW50ICgqbGlua191cGRhdGUpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICopO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0zMi19O1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0zMy1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MzQ6c3RhdGljIERFQ0xBUkVfQklUTUFQKGZpeGVkX3BoeV9pZHMsIE5VTV9GUCk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjM1OnN0YXRpYyBzdHJ1Y3QgZml4ZWRfcGh5IGZtYl9maXhlZF9waHlzW05VTV9GUF07XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTM2LXN0YXRpYyBzdHJ1Y3QgbWlpX2J1cyAqZm1iX21paV9idXM7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTM3LVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzozODpzdGF0aWMgc3RydWN0IGZpeGVkX3BoeSAqZml4ZWRfcGh5X2ZpbmQoaW50IGFkZHIpXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTM5LXtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NDA6XFx0cmV0dXJuIHRlc3RfYml0KGFkZHIsIGZpeGVkX3BoeV9pZHMpID8gZm1iX2ZpeGVkX3BoeXMgKyBhZGRyIDogTlVMTDtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNDEtfVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy00Mi1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NDM6aW50IGZpeGVkX3BoeV9jaGFuZ2VfY2FycmllcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5ld19jYXJyaWVyKVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy00NC17XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTQ1LVxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBkZXYtXFx1MDAzZXBoeWRldjtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NDY6XFx0c3RydWN0IGZpeGVkX3BoeSAqZnA7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTQ3LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTUwLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo1MTpcXHRmcCA9IGZpeGVkX3BoeV9maW5kKHBoeWRldi1cXHUwMDNlbWRpby5hZGRyKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNTItXFx0aWYgKCFmcClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy01OC19XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjU5OkVYUE9SVF9TWU1CT0xfR1BMKGZpeGVkX3BoeV9jaGFuZ2VfY2Fycmllcik7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTYwLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYz02MT1zdGF0aWMgaW50IGZpeGVkX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGludCByZWdfbnVtKVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy02Mi17XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjYzOlxcdHN0cnVjdCBmaXhlZF9waHkgKmZwO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy02NC1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NjU6XFx0ZnAgPSBmaXhlZF9waHlfZmluZChwaHlfYWRkcik7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTY2LVxcdGlmICghZnApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM9NzU9c3RhdGljIGludCBmaXhlZF9tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IHJlZ19udW0sXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtODUtICovXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjg2OmludCBmaXhlZF9waHlfc2V0X2xpbmtfdXBkYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTg3LVxcdFxcdFxcdCAgICAgIGludCAoKmxpbmtfdXBkYXRlKShzdHJ1Y3QgbmV0X2RldmljZSAqLFxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo4ODpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKikpXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTg5LXtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6OTA6XFx0c3RydWN0IGZpeGVkX3BoeSAqZnA7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTkxLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTk0LVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo5NTpcXHRmcCA9IGZpeGVkX3BoeV9maW5kKHBoeWRldi1cXHUwMDNlbWRpby5hZGRyKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtOTYtXFx0aWYgKCFmcClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMDMtfVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMDQ6RVhQT1JUX1NZTUJPTF9HUEwoZml4ZWRfcGh5X3NldF9saW5rX3VwZGF0ZSk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEwNS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTA2OnN0YXRpYyB2b2lkIGZpeGVkX3BoeV9kZWwoaW50IHBoeV9hZGRyKVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMDcte1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMDg6XFx0c3RydWN0IGZpeGVkX3BoeSAqZnA7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEwOS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTEwOlxcdGZwID0gZml4ZWRfcGh5X2ZpbmQocGh5X2FkZHIpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMTEtXFx0aWYgKCFmcClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMTQtXFx0bWVtc2V0KGZwLCAwLCBzaXplb2YoKmZwKSk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjExNTpcXHRjbGVhcl9iaXQocGh5X2FkZHIsIGZpeGVkX3BoeV9pZHMpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMTYtfVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMTctXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjExODpzdGF0aWMgaW50IGZpeGVkX3BoeV9nZXRfZnJlZV9hZGRyKHZvaWQpXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTExOS17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTIyLVxcdGRvIHtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTIzOlxcdFxcdGFkZHIgPSBmaW5kX2ZpcnN0X3plcm9fYml0KGZpeGVkX3BoeV9pZHMsIE5VTV9GUCk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEyNC1cXHRcXHRpZiAoYWRkciA9PSBOVU1fRlApXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEyNS1cXHRcXHRcXHRyZXR1cm4gLUVOT1NQQztcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTI2OlxcdH0gd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoYWRkciwgZml4ZWRfcGh5X2lkcykpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMjctXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTMwLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMzE6c3RydWN0IHBoeV9kZXZpY2UgKmZpeGVkX3BoeV9yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdHVzLFxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMzItXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpucClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNDUtXFx0LyogR2V0IHRoZSBuZXh0IGF2YWlsYWJsZSBQSFkgYWRkcmVzcywgdXAgdG8gTlVNX0ZQICovXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE0NjpcXHRwaHlfYWRkciA9IGZpeGVkX3BoeV9nZXRfZnJlZV9hZGRyKCk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE0Ny1cXHRpZiAocGh5X2FkZHIgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE0OS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTUwOlxcdGZtYl9maXhlZF9waHlzW3BoeV9hZGRyXS5zdGF0dXMgPSAqc3RhdHVzO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNTE6XFx0Zm1iX2ZpeGVkX3BoeXNbcGh5X2FkZHJdLnN0YXR1cy5saW5rID0gdHJ1ZTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTUyLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE1NC1cXHRpZiAoSVNfRVJSKHBoeSkpIHtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTU1OlxcdFxcdGZpeGVkX3BoeV9kZWwocGh5X2FkZHIpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNTYtXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTY2LVxcdFxcdG9mX25vZGVfcHV0KG5wKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTY3OlxcdFxcdGZpeGVkX3BoeV9kZWwocGh5X2FkZHIpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNjgtXFx0XFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNzItfVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNzM6RVhQT1JUX1NZTUJPTF9HUEwoZml4ZWRfcGh5X3JlZ2lzdGVyKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTc0LVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNzU6c3RydWN0IHBoeV9kZXZpY2UgKmZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCh2b2lkKVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNzYte1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNzc6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzIHN0YXR1cyA9IHtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTc4LVxcdFxcdC5zcGVlZFxcdD0gU1BFRURfMTAwLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE4MS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTgyOlxcdHJldHVybiBmaXhlZF9waHlfcmVnaXN0ZXIoXFx1MDAyNnN0YXR1cywgTlVMTCk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE4My19XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE4NDpFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xODUtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE4Njp2b2lkIGZpeGVkX3BoeV91bnJlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE4Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTg5LVxcdG9mX25vZGVfcHV0KHBoeS1cXHUwMDNlbWRpby5kZXYub2Zfbm9kZSk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE5MDpcXHRmaXhlZF9waHlfZGVsKHBoeS1cXHUwMDNlbWRpby5hZGRyKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTkxLVxcdHBoeV9kZXZpY2VfZnJlZShwaHkpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xOTItfVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxOTM6RVhQT1JUX1NZTUJPTF9HUEwoZml4ZWRfcGh5X3VucmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xOTQtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTMzNjA9c3RhdGljIGludCBwaHlsaW5rX21paV9lbXVsX3JlYWQodW5zaWduZWQgaW50IHJlZyxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzM2Mi17XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozMzYzOlxcdHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzIGZzO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzM2NC1cXHR1bnNpZ25lZCBsb25nICpscGEgPSBzdGF0ZS1cXHUwMDNlbHBfYWR2ZXJ0aXNpbmc7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy00LSAqXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM6NTogKiBDb2RlIHRha2VuIGZyb20gZml4ZWRfcGh5LmMgYnkgUnVzc2VsbCBLaW5nLlxcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jLTYtICpcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jPTcxPXN0YXRpYyBpbnQgc3dwaHlfZGVjb2RlX3NwZWVkKGludCBzcGVlZClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jLTkyLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jOjkzOmludCBzd3BoeV92YWxpZGF0ZV9zdGF0ZShjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdGUpXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtOTQte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM9MTA2PUVYUE9SVF9TWU1CT0xfR1BMKHN3cGh5X3ZhbGlkYXRlX3N0YXRlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jLTExNC0gKi9cXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYzoxMTU6aW50IHN3cGh5X3JlYWRfcmVnKGludCByZWcsIGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0ZSlcXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy0xMTYte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmgtNC1cXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuaDo1OnN0cnVjdCBmaXhlZF9waHlfc3RhdHVzO1xcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5oLTYtXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5Lmg6NzppbnQgc3dwaHlfdmFsaWRhdGVfc3RhdGUoY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXRlKTtcXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuaDo4OmludCBzd3BoeV9yZWFkX3JlZyhpbnQgcmVnLCBjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdGUpO1xcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5oLTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjUwOjAxLjE0NzIyNTM2NloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjM5MDI4MzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkFuYWx5emluZyBQSFkgRHJpdmVyIEluc3RhbnRpYXRpb24qKlxuXG5XYWl0IGEgbWludXRlLCBJJ20gZ2V0dGluZyBtaXhlZCB1cC4gYGZpeGVkX3BoeWAgaXNuJ3QgbWVhbnQgZm9yIGR5bmFtaWNhbGx5IGNyZWF0aW5nIFBIWSBkcml2ZXJzLCBpdCdzIHNwZWNpZmljYWxseSBmb3IgZml4ZWQtbGluayBjb25maWd1cmF0aW9ucy4gVGhhdCdzIG5vdCBnb2luZyB0byB3b3JrLiBEYW1uLCBzbywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGluc3RhbnRpYXRlIHRoZXNlIFBIWSBkcml2ZXJzICp3aXRob3V0KiB0aGUgdHJhZGl0aW9uYWwgZml4ZWQtbGluayBhcHByb2FjaC5cblxuT2theSwgbGV0J3MgZXhwbG9yZSBvdGhlciBhdmVudWVzLiBXaGF0IGFib3V0IGxldmVyYWdpbmcgYHN5el9nZW5ldGxpbmtgIG9yLCBjb3VsZCBJIHVzZSBgc3l6X3VzYl9jb25uZWN0YCBpbnN0ZWFkPyBJZiBJIGdvIHdpdGggYHN5el91c2JfY29ubmVjdGAsIGNvdWxkIEkgZW11bGF0ZSBhIFVTQiBkZXZpY2UgdGhhdCdzIGNvbXBhdGlibGUgd2l0aCBvbmUgb2YgdGhlIHRhcmdldCBkcml2ZXJzLCBtYXliZSBgYXg4ODE3MmFgLCBgc21zYzk1eHhgLCBgbGFuNzh4eGAsIG9yIGByODE1MmA/XG5cbkhvbGQgb24uLi4gSSdtIHRoaW5raW5nLi4uIE5vdywgZGlkbid0IGBsYW43OHh4YCB1c2Ugc29tZXRoaW5nIHJlbGF0ZWQgdG8gYHBoeV9jb25uZWN0YD8gQWgsIHllcyEgSSdsbCBjaGVjayBgbGFuNzh4eF9tZGlvX3JlYWRgIGFzIHRoYXQgbWF5IG9mZmVyIHNvbWUgaW5zaWdodCBpbnRvIGhvdyBgbGFuNzh4eGAgY29ubmVjdHMgdG8gdGhlIFBIWS4gVGhhdCBtaWdodCBiZSB0aGUga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozODMwNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo1MDowNS43ODYyNTY2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzUxMTI5OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGFuNzh4eF9tZGlvX3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NTA6MDUuODQ5Nzc0OTk5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTkwMzIwNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgbGFuNzh4eGAgRHJpdmVyIGFuZCBNRElPKipcblxuQWxyaWdodCwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgYGxhbjc4eHhgIGRyaXZlciBhbmQgaG93IGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgTURJTyBpbnRlcmZhY2UuIEdpdmVuIHRoZSBjb250ZXh0LCBJJ20gbGlrZWx5IHRyb3VibGVzaG9vdGluZyBzb21ldGhpbmcgc3BlY2lmaWPigJRwZXJoYXBzIGEgY29tbXVuaWNhdGlvbiBpc3N1ZSwgYSBtaXNzaW5nIGZlYXR1cmUsIG9yIHNvbWUgdW5leHBlY3RlZCBiZWhhdmlvciByZWxhdGVkIHRvIHRoZSBQSFkgbWFuYWdlbWVudC4gTXkgaW5pdGlhbCBhcHByb2FjaCBpcyB0byBzdGFydCBhdCB0aGUgc291cmNlLiBVbmRlcnN0YW5kaW5nIHRoZSBgbWRpb2AgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGF0IHNwZWNpZmljIGRyaXZlciBpcyBrZXkuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgTURJTyBjb21tYW5kcyBhcmUgY29uc3RydWN0ZWQsIGhvdyB0aGUgZGF0YSBpcyBjbG9ja2VkIG91dCwgYW5kIHdoYXQgdGhlIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyBsb29rIGxpa2UuIEdvdHRhIHNlZSBpZiB0aGVyZSdzIGFueXRoaW5nIG9idmlvdXNseSBhd3J5IGluIHRoZSByZWdpc3RlciBhY2Nlc3NlcyBvciBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIHByb2JsZW1zLiBJJ2xsIHByb2JhYmx5IGJlIGRpdmluZyBpbnRvIHRoZSByZWdpc3RlciBkZWZpbml0aW9ucyBhbmQgYW55IGFzc29jaWF0ZWQgaGVscGVyIGZ1bmN0aW9ucyBxdWlja2x5LiBHb3R0YSBnZXQgdGhpcyBuYWlsZWQgZG93bi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg3NDYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo1MDowOS41NDg4MDk2MloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUwNjYwNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwdjYuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMS0jaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTI5LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9taWNyb2NoaXBwaHkuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjMwOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9tZGlvLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0zMS0jaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfbmV0LmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTQxMz1zdHJ1Y3QgbGFuNzh4eF9uZXQge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy00NDEtXFx0c3RydWN0IG11dGV4XFx0XFx0ZGV2X211dGV4OyAvKiBzZXJpYWxpc2Ugb3Blbi9zdG9wIHdydCBzdXNwZW5kL3Jlc3VtZSAqL1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6NDQyOlxcdHN0cnVjdCBtdXRleFxcdFxcdG1kaW9idXNfbXV0ZXg7IC8qIGZvciBNRElPIGJ1cyBhY2Nlc3MgKi9cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTQ0My1cXHR1bnNpZ25lZCBpbnRcXHRcXHRwaXBlX2luLCBwaXBlX291dCwgcGlwZV9pbnRyO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy00NTgtXFx0dTMyXFx0XFx0XFx0Y2hpcHJldjtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjQ1OTpcXHRzdHJ1Y3QgbWlpX2J1c1xcdFxcdCptZGlvYnVzO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtNDYwLVxcdHBoeV9pbnRlcmZhY2VfdFxcdFxcdGludGVyZmFjZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9OTQ2PXN0YXRpYyBpbnQgbGFuNzh4eF9mbHVzaF9yeF9maWZvKHN0cnVjdCBsYW43OHh4X25ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy05NTAtXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzo5NTE6LyogTG9vcCB1bnRpbCB0aGUgcmVhZCBpcyBjb21wbGV0ZWQgd2l0aCB0aW1lb3V0IGNhbGxlZCB3aXRoIG1kaW9idXNfbXV0ZXggaGVsZCAqL1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6OTUyOnN0YXRpYyBpbnQgbGFuNzh4eF9tZGlvYnVzX3dhaXRfbm90X2J1c3koc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy05NTMte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0xNTgyPXN0YXRpYyBpbnQgbGFuNzh4eF9tYWNfcmVzZXQoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTE1ODctXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoxNTg4OlxcdG11dGV4X2xvY2soXFx1MDAyNmRldi1cXHUwMDNlbWRpb2J1c19tdXRleCk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0xNTg5LVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0xNTkzLVxcdCAqL1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MTU5NDpcXHRyZXQgPSBsYW43OHh4X21kaW9idXNfd2FpdF9ub3RfYnVzeShkZXYpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTU5NS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTYyMi1leGl0X3VubG9jazpcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjE2MjM6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZW1kaW9idXNfbXV0ZXgpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTYyNC1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9MTk0ND1zdGF0aWMgaW50IGxhbjc4eHhfaW5pdF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbGFuNzh4eF9uZXQgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjAxMS0vKiBNRElPIHJlYWQgYW5kIHdyaXRlIHdyYXBwZXJzIGZvciBwaHlsaWIgKi9cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwMTI6c3RhdGljIGludCBsYW43OHh4X21kaW9idXNfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgaWR4KVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjAxMy17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwMjEtXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDIyOlxcdG11dGV4X2xvY2soXFx1MDAyNmRldi1cXHUwMDNlbWRpb2J1c19tdXRleCk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDIzLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjAyNC1cXHQvKiBjb25maXJtIE1JSSBub3QgYnVzeSAqL1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjAyNTpcXHRyZXQgPSBsYW43OHh4X21kaW9idXNfd2FpdF9ub3RfYnVzeShkZXYpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjAyNi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjAzNC1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwMzU6XFx0cmV0ID0gbGFuNzh4eF9tZGlvYnVzX3dhaXRfbm90X2J1c3koZGV2KTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwMzYtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwNDUtZG9uZTpcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwNDY6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZW1kaW9idXNfbXV0ZXgpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA0Ny1cXHR1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoZGV2LVxcdTAwM2VpbnRmKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA1MS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwNTI6c3RhdGljIGludCBsYW43OHh4X21kaW9idXNfd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGlkeCxcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwNTMtXFx0XFx0XFx0XFx0IHUxNiByZWd2YWwpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwNjItXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDYzOlxcdG11dGV4X2xvY2soXFx1MDAyNmRldi1cXHUwMDNlbWRpb2J1c19tdXRleCk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDY0LVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA2NS1cXHQvKiBjb25maXJtIE1JSSBub3QgYnVzeSAqL1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjA2NjpcXHRyZXQgPSBsYW43OHh4X21kaW9idXNfd2FpdF9ub3RfYnVzeShkZXYpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA2Ny1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA4MC1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwODE6XFx0cmV0ID0gbGFuNzh4eF9tZGlvYnVzX3dhaXRfbm90X2J1c3koZGV2KTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwODItXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwODUtZG9uZTpcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwODY6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZW1kaW9idXNfbXV0ZXgpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA4Ny1cXHR1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoZGV2LVxcdTAwM2VpbnRmKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA5MC1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwOTE6c3RhdGljIGludCBsYW43OHh4X21kaW9faW5pdChzdHJ1Y3QgbGFuNzh4eF9uZXQgKmRldilcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwOTIte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDk1LVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjA5NjpcXHRkZXYtXFx1MDAzZW1kaW9idXMgPSBtZGlvYnVzX2FsbG9jKCk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDk3OlxcdGlmICghZGV2LVxcdTAwM2VtZGlvYnVzKSB7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDk4LVxcdFxcdG5ldGRldl9lcnIoZGV2LVxcdTAwM2VuZXQsIFxcXCJjYW4ndCBhbGxvY2F0ZSBNRElPIGJ1c1xcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMDEtXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTAyOlxcdGRldi1cXHUwMDNlbWRpb2J1cy1cXHUwMDNlcHJpdiA9ICh2b2lkICopZGV2O1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEwMzpcXHRkZXYtXFx1MDAzZW1kaW9idXMtXFx1MDAzZXJlYWQgPSBsYW43OHh4X21kaW9idXNfcmVhZDtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMDQ6XFx0ZGV2LVxcdTAwM2VtZGlvYnVzLVxcdTAwM2V3cml0ZSA9IGxhbjc4eHhfbWRpb2J1c193cml0ZTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMDU6XFx0ZGV2LVxcdTAwM2VtZGlvYnVzLVxcdTAwM2VuYW1lID0gXFxcImxhbjc4eHgtbWRpb2J1c1xcXCI7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTA2OlxcdGRldi1cXHUwMDNlbWRpb2J1cy1cXHUwMDNlcGFyZW50ID0gXFx1MDAyNmRldi1cXHUwMDNldWRldi1cXHUwMDNlZGV2O1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjEwNy1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMDg6XFx0c25wcmludGYoZGV2LVxcdTAwM2VtZGlvYnVzLVxcdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcXFwidXNiLSUwM2Q6JTAzZFxcXCIsXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTA5LVxcdFxcdCBkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWJ1cy1cXHUwMDNlYnVzbnVtLCBkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRldm51bSk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMTQtXFx0XFx0Lyogc2V0IHRvIGludGVybmFsIFBIWSBpZCAqL1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjExNTpcXHRcXHRkZXYtXFx1MDAzZW1kaW9idXMtXFx1MDAzZXBoeV9tYXNrID0gfigxIFxcdTAwM2NcXHUwMDNjIDEpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjExNi1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjEyMC1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMjE6XFx0bm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldi1cXHUwMDNldWRldi1cXHUwMDNlZGV2Lm9mX25vZGUsIFxcXCJtZGlvXFxcIik7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTIyOlxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoZGV2LVxcdTAwM2VtZGlvYnVzLCBub2RlKTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMjMtXFx0b2Zfbm9kZV9wdXQobm9kZSk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMjgtXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTI5OlxcdG5ldGRldl9kYmcoZGV2LVxcdTAwM2VuZXQsIFxcXCJyZWdpc3RlcmVkIG1kaW9idXMgYnVzICVzXFxcXG5cXFwiLCBkZXYtXFx1MDAzZW1kaW9idXMtXFx1MDAzZWlkKTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMzAtXFx0cmV0dXJuIDA7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTMxLWV4aXQxOlxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEzMjpcXHRtZGlvYnVzX2ZyZWUoZGV2LVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMzMtXFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjEzNS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMzY6c3RhdGljIHZvaWQgbGFuNzh4eF9yZW1vdmVfbWRpbyhzdHJ1Y3QgbGFuNzh4eF9uZXQgKmRldilcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMzcte1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEzODpcXHRtZGlvYnVzX3VucmVnaXN0ZXIoZGV2LVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMzk6XFx0bWRpb2J1c19mcmVlKGRldi1cXHUwMDNlbWRpb2J1cyk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTQwLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9MjY0OT1zdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKmxhbjc4eHhfZ2V0X3BoeShzdHJ1Y3QgbGFuNzh4eF9uZXQgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjY1My1cXHQvKiBBdHRlbXB0IHRvIGxvY2F0ZSBhIFBIWSBvbiB0aGUgTURJTyBidXMgKi9cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjI2NTQ6XFx0cGh5ZGV2ID0gcGh5X2ZpbmRfZmlyc3QoZGV2LVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTI2NTUtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTI3Njk9c3RhdGljIGludCBsYW43OHh4X2NvbmZpZ3VyZV9sZWRzX2Zyb21fZHQoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTI3NzEte1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6Mjc3MjpcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5vZl9ub2RlO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjc3My1cXHR1MzIgcmVnO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0yODU4PXN0YXRpYyBpbnQgbGFuNzh4eF9waHlfaW5pdChzdHJ1Y3QgbGFuNzh4eF9uZXQgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjkwNC1cXHRcXHRuZXRkZXZfZXJyKGRldi1cXHUwMDNlbmV0LCBcXFwiY2FuJ3QgYXR0YWNoIFBIWSB0byAlcywgZXJyb3IgJXBlXFxcXG5cXFwiLFxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjkwNTpcXHRcXHRcXHQgICBkZXYtXFx1MDAzZW1kaW9idXMtXFx1MDAzZWlkLCBFUlJfUFRSKHJldCkpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjkwNi1cXHRcXHRnb3RvIHBoeWxpbmtfdW5pbml0O1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0zNzYyPXN0YXRpYyBpbnQgbGFuNzh4eF9iaW5kKHN0cnVjdCBsYW43OHh4X25ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMzgyMC1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjM4MjE6XFx0cmV0ID0gbGFuNzh4eF9tZGlvX2luaXQoZGV2KTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTM4MjItXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0zODQ0PXN0YXRpYyB2b2lkIGxhbjc4eHhfdW5iaW5kKHN0cnVjdCBsYW43OHh4X25ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMzg0OS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjM4NTA6XFx0bGFuNzh4eF9yZW1vdmVfbWRpbyhkZXYpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMzg1MS1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9NDY1NT1zdGF0aWMgaW50IGxhbjc4eHhfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTQ2ODgtXFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2VyeHFfb3ZlcmZsb3cpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6NDY4OTpcXHRtdXRleF9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZW1kaW9idXNfbXV0ZXgpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtNDY5MC1cXHRtdXRleF9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZWRldl9tdXRleCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjUwOjA5LjYwMzg4MDkzM1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDQ1Mzc3MTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBjaGVja2luZyBgbGFuNzh4eF9tZGlvYnVzX3JlYWRgOlxuXG4qKkRpc3NlY3RpbmcgYGxhbjc4eHhfbWRpb2J1c19yZWFkYCoqXG5cbkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBgbGFuNzh4eF9tZGlvYnVzX3JlYWRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGl0J3Mgc3VwcG9zZWQgdG8gYmUgZG9pbmcsIGFuZCBob3cgd2VsbCBpdCdzIGFjY29tcGxpc2hpbmcgaXQuIFRoZSBuYW1lIHN1Z2dlc3RzIGl0J3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciByZWFkaW5nIGRhdGEgZnJvbSBhbiBNRElPIChNYW5hZ2VtZW50IERhdGEgSW5wdXQvT3V0cHV0KSBidXMsIGxpa2VseSByZWxhdGVkIHRvIHRoZSBMQU43OHh4IEV0aGVybmV0IGNvbnRyb2xsZXIuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknZCBleHBlY3QgaXQncyBoYW5kbGluZyB0aGUgbG93LWxldmVsIGNvbW11bmljYXRpb24gcHJvdG9jb2wgZm9yIGFjY2Vzc2luZyByZWdpc3RlcnMgb24gYW4gRXRoZXJuZXQgUEhZIG9yIE1BQy4gSSBuZWVkIHRvIGNvbnNpZGVyIGl0cyBwYXJhbWV0ZXJzLCByZXR1cm4gdmFsdWVzLCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuXG5cbkZpcnN0LCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgZnVuY3Rpb24ncyBkZWZpbml0aW9uIHRvIHNlZSB3aGF0IGFyZ3VtZW50cyBpdCB0YWtlcy4gRG9lcyBpdCByZWNlaXZlIHRoZSBNRElPIGJ1cyBpdHNlbGYsIHRoZSBkZXZpY2UgYWRkcmVzcywgcmVnaXN0ZXIgYWRkcmVzcywgYW5kIGEgcG9pbnRlciB0byBzdG9yZSB0aGUgcmVhZCBkYXRhPyBEb2VzIGl0IHJldHVybiBhbiBlcnJvciBjb2RlIG9yIGEgdmFsdWU/IE5leHQsIEkgd2FudCB0byB0cmFjZSB0aGUgY29kZS4gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgbG9naWM6IERvZXMgaXQgbG9jayBhIG11dGV4IHRvIHByb3RlY3QgdGhlIE1ESU8gYnVzIGFjY2Vzcz8gSG93IGRvZXMgaXQgYWN0dWFsbHkgdHJhbnNtaXQgdGhlIHJlYWQgY29tbWFuZD8gRG9lcyBpdCBjaGVjayBmb3IgdGhlIGFja25vd2xlZGdlIGJpdCBmcm9tIHRoZSBkZXZpY2UsIGFuZCBpZiBzbywgaG93IGlzIGl0IGhhbmRsaW5nIGVycm9ycz8gRG9lcyBpdCBtYW5hZ2UgdGhlIHRpbWluZyBwcm9wZXJseSwgY29uc2lkZXJpbmcgdGhlIE1ESU8gY2xvY2sgZnJlcXVlbmN5PyBIb3cgYXJlIHRoZSByZWFkIGRhdGEgcmV0dXJuZWQuIEkgYWxzbyBuZWVkIHRvIGFzc2VzcyBpdHMgZXJyb3IgaGFuZGxpbmc6IERvZXMgaXQgZ3JhY2VmdWxseSBtYW5hZ2UgcG90ZW50aWFsIGlzc3VlcyBsaWtlIGJ1cyBjb250ZW50aW9uLCBpbmNvcnJlY3QgYWRkcmVzc2VzLCBvciB0aW1lb3V0cz8gSXMgdGhlcmUgYW55IHdhdGNoZG9nIGxvZ2ljPyBEb2VzIGl0IGhhbmRsZSBwb3RlbnRpYWwgZW5kaWFubmVzcyBpc3N1ZXM/XG5cbkkgc2hvdWxkIHRoZW4gY2hlY2sgaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBlbHNld2hlcmUgaW4gdGhlIGRyaXZlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyByZWdpc3RlcnMgaXQncyBiZWluZyB1c2VkIHRvIHJlYWQgYW5kIHdoYXQgZGF0YSBpcyBiZWluZyBpbnRlcnByZXRlZCBmcm9tIHRoZXNlIHJlZ2lzdGVycy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBncmVhdGVyIGNvbnRleHQgZm9yIHVuZGVyc3RhbmRpbmcgaWYgdGhpcyBmdW5jdGlvbiBpcyBhZGVxdWF0ZS4gQXJlIHRoZXJlIGFueSB1bnVzdWFsIGNpcmN1bXN0YW5jZXMsIG9yIGlzIGl0IGEgZmFpcmx5IHN0YW5kYXJkIHJlZ2lzdGVyIHJlYWQ/XG5cbkknbGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIHRpbWluZyBpc3N1ZXMsIG9yIHBvdGVudGlhbCBmb3IgZGVhZGxvY2tzLiBBbmQgSSB3aWxsIGVuc3VyZSBpdCBmb2xsb3dzIHRoZSByZWNvbW1lbmRlZCBjb2Rpbmcgc3R5bGUgYW5kIHRoYXQgdGhlcmUgYXJlIGFkZXF1YXRlIGNvbW1lbnRzLiBBbmQgZmluYWxseSwgSSB3aWxsIHdhbnQgdG8gZW5zdXJlIHRoZSBmdW5jdGlvbiBoYW5kbGVzIGFsbCBvZiB0aGUgdmFyaW91cyBmYWlsdXJlIG1vZGVzIGluIGEgcm9idXN0IHdheSwgYW5kIHRoYXQgaXQgZGVhbHMgd2l0aCB0aGVtIGNvbnNpc3RlbnRseSB3aXRoIHRoZSByZXN0IG9mIHRoZSBMQU43OHh4IGRyaXZlci5cblxuRXNzZW50aWFsbHksIEkgbmVlZCB0byB0aG9yb3VnaGx5IGF1ZGl0IHRoaXMgZnVuY3Rpb24sIGVuc3VyaW5nIGl0J3MgZWZmaWNpZW50LCByb2J1c3QsIGFuZCBjb3JyZWN0bHkgaW1wbGVtZW50cyB0aGUgTURJTyByZWFkIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBMQU43OHh4IGNvbnRyb2xsZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNjI0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NTA6MTUuMDQ5MjYxNDI1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMTIsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwMTI6XFx0c3RhdGljIGludCBsYW43OHh4X21kaW9idXNfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgaWR4KVxcbjIwMTM6XFx0e1xcbjIwMTQ6XFx0XFx0c3RydWN0IGxhbjc4eHhfbmV0ICpkZXYgPSBidXMtXFx1MDAzZXByaXY7XFxuMjAxNTpcXHRcXHR1MzIgdmFsLCBhZGRyO1xcbjIwMTY6XFx0XFx0aW50IHJldDtcXG4yMDE3OlxcdFxcbjIwMTg6XFx0XFx0cmV0ID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGRldi1cXHUwMDNlaW50Zik7XFxuMjAxOTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4yMDIwOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjAyMTpcXHRcXG4yMDIyOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmRldi1cXHUwMDNlbWRpb2J1c19tdXRleCk7XFxuMjAyMzpcXHRcXG4yMDI0OlxcdFxcdC8qIGNvbmZpcm0gTUlJIG5vdCBidXN5ICovXFxuMjAyNTpcXHRcXHRyZXQgPSBsYW43OHh4X21kaW9idXNfd2FpdF9ub3RfYnVzeShkZXYpO1xcbjIwMjY6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMjAyNzpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuMjAyODpcXHRcXG4yMDI5OlxcdFxcdC8qIHNldCB0aGUgYWRkcmVzcywgaW5kZXggXFx1MDAyNiBkaXJlY3Rpb24gKHJlYWQgZnJvbSBQSFkpICovXFxuMjAzMDpcXHRcXHRhZGRyID0gbWlpX2FjY2VzcyhwaHlfaWQsIGlkeCwgTUlJX1JFQUQpO1xcbjIwMzE6XFx0XFx0cmV0ID0gbGFuNzh4eF93cml0ZV9yZWcoZGV2LCBNSUlfQUNDLCBhZGRyKTtcXG4yMDMyOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjIwMzM6XFx0XFx0XFx0Z290byBkb25lO1xcbjIwMzQ6XFx0XFxuMjAzNTpcXHRcXHRyZXQgPSBsYW43OHh4X21kaW9idXNfd2FpdF9ub3RfYnVzeShkZXYpO1xcbjIwMzY6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMjAzNzpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuMjAzODpcXHRcXG4yMDM5OlxcdFxcdHJldCA9IGxhbjc4eHhfcmVhZF9yZWcoZGV2LCBNSUlfREFUQSwgXFx1MDAyNnZhbCk7XFxuMjA0MDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4yMDQxOlxcdFxcdFxcdGdvdG8gZG9uZTtcXG4yMDQyOlxcdFxcbjIwNDM6XFx0XFx0cmV0ID0gKGludCkodmFsIFxcdTAwMjYgMHhGRkZGKTtcXG4yMDQ0OlxcdFxcbjIwNDU6XFx0ZG9uZTpcXG4yMDQ2OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGV2LVxcdTAwM2VtZGlvYnVzX211dGV4KTtcXG4yMDQ3OlxcdFxcdHVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShkZXYtXFx1MDAzZWludGYpO1xcbjIwNDg6XFx0XFxuMjA0OTpcXHRcXHRyZXR1cm4gcmV0O1xcbjIwNTA6XFx0fVxcbjIwNTE6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjUwOjE1LjA0OTQ1NTkyNVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjU3MDg5Mjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYG1paV9hY2Nlc3NgIE1hY3JvKipcblxuT2theSwgc28gYG1paV9hY2Nlc3NgLi4uIHRoYXQncyBhIG1hY3JvLiBJIGltbWVkaWF0ZWx5IG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZXhwYW5zaW9uLiBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGRlZmluaXRpb24gdG8gc2VlIHRoZSB1bmRlcmx5aW5nIGJpdCBtYW5pcHVsYXRpb25zIGFuZCByZWdpc3RlciBhY2Nlc3NlcyBpdCBwZXJmb3Jtcy4gSXMgaXQgYSBkaXJlY3QgbWVtb3J5IGFjY2Vzcywgb3IgZG9lcyBpdCBhYnN0cmFjdCB0byBzb21lIGRyaXZlciBsYXllcj8gSSdtIGhvcGluZyBpdCdzIHdlbGwtZGVmaW5lZCBhbmQgY2xlYXJseSBkb2N1bWVudHMgdGhlIHJlZ2lzdGVyIGFkZHJlc3NlcyBpdCdzIHVzaW5nLCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIENvbnRleHQgaXMgaW1wb3J0YW50LCBzbyBJIHdpbGwgYWxzbyBoYXZlIHRvIGNvbnNpZGVyIHRoZSBoYXJkd2FyZSBlbnZpcm9ubWVudCBpbiB3aGljaCB0aGlzIG1hY3JvIGlzIHVzZWQuIFdoYXQgTUlJL0dNSUkgUEhZIHN0YW5kYXJkIGRvZXMgaXQgZXhwZWN0PyBJJ2xsIHByb2JhYmx5IGJlIGNoZWNraW5nIGZvciBhbnkgaW5saW5lIGFzc2VtYmx5IGFuZCBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgc3VycHJpc2VzIHdpdGggY29tcGlsZXIgb3B0aW1pemF0aW9uLiBJIGhvcGUgaXQncyBub3Qgb3Zlcmx5IGNvbXBsZXg7IGNvbmNpc2UgYW5kIGVmZmljaWVudCBpcyB0aGUgZ29hbCwgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM3OTksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjUwOjIxLjMwNjU0NzM0MloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjczMTU0NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlpX2FjY2Vzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9OTUyPXN0YXRpYyBpbnQgbGFuNzh4eF9tZGlvYnVzX3dhaXRfbm90X2J1c3koc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTk2OS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjk3MDpzdGF0aWMgaW5saW5lIHUzMiBtaWlfYWNjZXNzKGludCBpZCwgaW50IGluZGV4LCBpbnQgcmVhZClcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTk3MS17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTIwMTI9c3RhdGljIGludCBsYW43OHh4X21kaW9idXNfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgaWR4KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDI5LVxcdC8qIHNldCB0aGUgYWRkcmVzcywgaW5kZXggXFx1MDAyNiBkaXJlY3Rpb24gKHJlYWQgZnJvbSBQSFkpICovXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDMwOlxcdGFkZHIgPSBtaWlfYWNjZXNzKHBoeV9pZCwgaWR4LCBNSUlfUkVBRCk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDMxLVxcdHJldCA9IGxhbjc4eHhfd3JpdGVfcmVnKGRldiwgTUlJX0FDQywgYWRkcik7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTIwNTI9c3RhdGljIGludCBsYW43OHh4X21kaW9idXNfd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGlkeCxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA3NS1cXHQvKiBzZXQgdGhlIGFkZHJlc3MsIGluZGV4IFxcdTAwMjYgZGlyZWN0aW9uICh3cml0ZSB0byBQSFkpICovXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDc2OlxcdGFkZHIgPSBtaWlfYWNjZXNzKHBoeV9pZCwgaWR4LCBNSUlfV1JJVEUpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA3Ny1cXHRyZXQgPSBsYW43OHh4X3dyaXRlX3JlZyhkZXYsIE1JSV9BQ0MsIGFkZHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo1MDoyMS4zNzM4Njg5MDlaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4OTE3MjcwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogTUlJX0FDQ0VTUyAtIFdoYXQncyB0aGUgQ29udGV4dD8qKlxuXG5BbHJpZ2h0LCBcIm1paV9hY2Nlc3MuXCIgVGhlIG5hbWUgaXRzZWxmIGltbWVkaWF0ZWx5IHJhaXNlcyBxdWVzdGlvbnMuIElzIHRoaXMgc29tZSBzcGVjaWFsaXplZCBNSUkgKE1lZGlhIEluZGVwZW5kZW50IEludGVyZmFjZSkgdXRpbGl0eSwgZHJpdmVyLCBvciBwZXJoYXBzIGEgbGF5ZXIgYWJvdmUgdGhhdD8gR2l2ZW4gbXkgYmFja2dyb3VuZCwgSSdtIGV4cGVjdGluZyBzb21ldGhpbmcgcmVsYXRlZCB0byBuZXR3b3JrIGhhcmR3YXJlLCBwb3RlbnRpYWxseSBhdCB0aGUgUEhZIGxldmVsLCBidXQgaXQgY291bGQgZXh0ZW5kIGludG8gbmV0d29yayBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBvciBtYW5hZ2VtZW50IGRlcGVuZGluZyBvbiB0aGUgc3lzdGVtIHRoaXMgaXMgcnVubmluZyBvbi5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgc3lzdGVtIGFzIGEgd2hvbGUuIElzIGl0IGEgdXNlci1zcGFjZSBhcHBsaWNhdGlvbiwgYSBrZXJuZWwgbW9kdWxlLCBvciBwYXJ0IG9mIGEgbW9yZSBpbnRlZ3JhdGVkIHN5c3RlbSBmaXJtd2FyZT8gSXMgaXQgaW50ZXJhY3Rpbmcgd2l0aCByYXcgRXRoZXJuZXQgZGF0YSBvciBkb2VzIGl0IGFic3RyYWN0IHRoYXQgbGF5ZXI/IEknbSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCBwb3RlbnRpYWwgYm90dGxlbmVja3MgYW5kIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIC0gZXNwZWNpYWxseSBpZiB0aGlzIGludm9sdmVzIGRpcmVjdCByZWdpc3RlciBtYW5pcHVsYXRpb24uXG5cblRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIHRoZSBrZXkgaGVyZS4gTGV0J3Mgc2VlIGhvdyB0aGV5IGhhbmRsZSBlcnJvciBjaGVja2luZyBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nLiBBcmUgdGhleSBmb2xsb3dpbmcgYW55IHN0YW5kYXJkIG9yIHNwZWNpZmljYXRpb24/IFRoZSBjb2RlJ3Mgc3R5bGUgYW5kIGNvbW1lbnRzIHdpbGwgZ2l2ZSB1cyBhIHN0cm9uZyBzZW5zZSBvZiB0aGUgZGV2ZWxvcGVyJ3MgaW50ZW50IGFuZCBob3BlZnVsbHksIGhlbHAgc3BlZWQgdXAgbXkgYW5hbHlzaXMuIFRpbWUgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDUwMCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NTA6MjQuODYzMDQ0NzUzWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NzAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk3MCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk3MDpcXHRzdGF0aWMgaW5saW5lIHUzMiBtaWlfYWNjZXNzKGludCBpZCwgaW50IGluZGV4LCBpbnQgcmVhZClcXG4gOTcxOlxcdHtcXG4gOTcyOlxcdFxcdHUzMiByZXQ7XFxuIDk3MzpcXHRcXG4gOTc0OlxcdFxcdHJldCA9ICgodTMyKWlkIFxcdTAwM2NcXHUwMDNjIE1JSV9BQ0NfUEhZX0FERFJfU0hJRlRfKSBcXHUwMDI2IE1JSV9BQ0NfUEhZX0FERFJfTUFTS187XFxuIDk3NTpcXHRcXHRyZXQgfD0gKCh1MzIpaW5kZXggXFx1MDAzY1xcdTAwM2MgTUlJX0FDQ19NSUlSSU5EQV9TSElGVF8pIFxcdTAwMjYgTUlJX0FDQ19NSUlSSU5EQV9NQVNLXztcXG4gOTc2OlxcdFxcdGlmIChyZWFkKVxcbiA5Nzc6XFx0XFx0XFx0cmV0IHw9IE1JSV9BQ0NfTUlJX1JFQURfO1xcbiA5Nzg6XFx0XFx0ZWxzZVxcbiA5Nzk6XFx0XFx0XFx0cmV0IHw9IE1JSV9BQ0NfTUlJX1dSSVRFXztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NTA6MjQuODYzMzkzOTQyWiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3MTQ3MzM3NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENsYXVzZSA0NSBTdXBwb3J0IGluIE5ldHdvcmsgRHJpdmVycyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IGBsYW43OHh4YCBoYW5kbGVzIENsYXVzZSA0NS4gRmlyc3QsIEkgc2VlIGBpbmRleGAgYmVpbmcgY2FzdCB0byBgdTMyYCBhbmQgc2hpZnRlZC4gTXkgZ3V0IHJlYWN0aW9uIGlzIHRoYXQgaWYgYGluZGV4YCBoYXMgYE1JSV9BRERSX0M0NWAgKDB4NDAwMDAwMDApIHNldCwgaXQncyBnb2luZyB0byBnZXQgbWFza2VkIG91dCBieSBgTUlJX0FDQ19NSUlSSU5EQV9NQVNLX2AuIFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGUgZHJpdmVyICpkb2Vzbid0KiBuYXRpdmVseSBzdXBwb3J0IENsYXVzZSA0NS4gQnV0IHdhaXQsIEkgbmVlZCB0byBkaWcgZGVlcGVyLlxuXG5JIHJlbWVtYmVyIGBtZGlvYnVzX3JlYWRgIGluIGBkcml2ZXJzL25ldC9waHkvbWRpb19idXMuY2AuIEkgbmVlZCB0byBzZWUgd2hhdCBoYXBwZW5zIHRoZXJlLiBPa2F5LCBpZiBgYnVzLVx1MDAzZXJlYWRfYzQ1YCBleGlzdHMsIHRoYXQgd2lsbCBnZXQgY2FsbGVkLiBJZiBpdCdzIE5VTEwsIHdoaWNoIHNlZW1zIGxpa2VseSBoZXJlIGdpdmVuIG15IGluaXRpYWwgaW1wcmVzc2lvbiwgdGhlbiBgYnVzLVx1MDAzZXJlYWRgIGlzIGNhbGxlZC4gQWgsIGJ1dCBgYnVzLVx1MDAzZXJlYWRgIHdpbGwganVzdCBwYXNzIHRocm91Z2ggdGhlIGBNSUlfQUREUl9DNDVgIGJpdCBpbiBgcmVnbnVtYC4gU28sIGlmIHRoZSBkcml2ZXIgZG9lc24ndCBleHBsaWNpdGx5IGhhbmRsZSB0aGF0IGJpdCwgaXQgd2lsbCBqdXN0IHJlYWQgYSBDbGF1c2UgMjIgcmVnaXN0ZXIgaW5zdGVhZCwgd2hpY2ggaXNuJ3Qgd2hhdCB3ZSB3YW50LlxuXG5Pa2F5LCBsZXQgbWUgbG9vayBhdCBob3cgdGhpcyBpcyBiZWluZyB1c2VkIGluIGEgcmVhbCBkcml2ZXIsIGZvciBleGFtcGxlIGluIGByZWFsdGVrX21haW4uY2AuIEl0IGxvb2tzIGxpa2UgaXQgdXNlcyBgcGh5X3JlYWRfbW1kYC4gQW5kIHRoYXQgZnVuY3Rpb24gd2lsbCB1c2UgYGJ1cy1cdTAwM2VyZWFkX2M0NWAgaWYgaXQgaXMgYXZhaWxhYmxlLCBvciBpdCB3aWxsIGZhbGwgYmFjayB0byBDbGF1c2UgMjIgaW5kaXJlY3QgYWNjZXNzIGlmIGBwaHlkZXYtXHUwMDNlaXNfYzQ1YCBpcyBmYWxzZS4gQmluZ28hIFNvIG5vdyBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoYXQgZmFsbGJhY2sgaXMgaGFwcGVuaW5nIGluIGBsYW43OHh4YC4gU28sIHRoYXQgbWVhbnMgaXQgKndpbGwqIHVzZSBDbGF1c2UgMjIgaW5kaXJlY3QgYWNjZXNzIChyZWdpc3RlcnMgMTMgYW5kIDE0KSBpZiBgcGh5ZGV2LVx1MDAzZWlzX2M0NWAgaXMgZmFsc2UhXG5cbk9rYXksIHRpbWUgdG8gY29uZmlybSB3aGF0IGlzIGFjdHVhbGx5IGhhcHBlbmluZyBpbiBgcGh5X3JlYWRfbW1kYCB0byBzZWUgaWYgdGhhdCBpcyB0cnVlIGFuZCB0byBzZWUgaG93IHRoZSBidXMgY2FsbHMgYXJlIGltcGxlbWVudGVkLiBJJ2xsIGNoZWNrIGBkcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuY2Agbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTAwNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjUwOjMyLjU3ODEzMDkxMVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ2MzM2MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X3JlYWRfbW1kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jPTQ1Nz1FWFBPUlRfU1lNQk9MX0dQTChtbWRfcGh5X3dyaXRlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ1OS0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYzo0NjA6ICogX19waHlfcmVhZF9tbWQgLSBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgcmVhZGluZyBhIHJlZ2lzdGVyXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDYxLSAqIGZyb20gYW4gTU1EIG9uIGEgZ2l2ZW4gUEhZLlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDY3LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQ2ODppbnQgX19waHlfcmVhZF9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldmFkLCB1MzIgcmVnbnVtKVxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ2OS17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00NzgtfVxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQ3OTpFWFBPUlRfU1lNQk9MKF9fcGh5X3JlYWRfbW1kKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00ODAtXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDgxLS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQ4MjogKiBwaHlfcmVhZF9tbWQgLSBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgcmVhZGluZyBhIHJlZ2lzdGVyXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDgzLSAqIGZyb20gYW4gTU1EIG9uIGEgZ2l2ZW4gUEhZLlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDg5LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQ5MDppbnQgcGh5X3JlYWRfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZhZCwgdTMyIHJlZ251bSlcXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00OTEte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDk0LVxcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NDk1OlxcdHJldCA9IF9fcGh5X3JlYWRfbW1kKHBoeWRldiwgZGV2YWQsIHJlZ251bSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDk2LVxcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ5OS19XFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NTAwOkVYUE9SVF9TWU1CT0wocGh5X3JlYWRfbW1kKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy01MDEtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYz02Mjk9aW50IF9fcGh5X21vZGlmeV9tbWRfY2hhbmdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgZGV2YWQsIHUzMiByZWdudW0sXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy02MzMtXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NjM0OlxcdHJldCA9IF9fcGh5X3JlYWRfbW1kKHBoeWRldiwgZGV2YWQsIHJlZ251bSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNjM1LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo1MDozMi42NDI3Njg3OTlaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQyNTIyNTI4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBzZWVpbmcgYF9fcGh5X3JlYWRfbW1kYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoYXQgdW5kZXJzY29yZXMgYSB2ZXJ5IHNwZWNpZmljIGZ1bmN0aW9uLCBsaWtlbHkgdGllZCB0byBhIHBoeXNpY2FsIGxheWVyIChQSFkpIGludGVyZmFjZSBhbmQgc29tZSBzb3J0IG9mIG11bHRpLW1vZGUgZGV2aWNlIChNTUQpIGFjY2Vzcy4gVGhlIGRvdWJsZSB1bmRlcnNjb3JlIHByZWZpeCB1c3VhbGx5IGluZGljYXRlcyBhbiBpbnRlcm5hbCBvciBcInByaXZhdGVcIiBmdW5jdGlvbiwgbWVhbmluZyBpdCdzIG5vdCBtZWFudCB0byBiZSBkaXJlY3RseSBjYWxsZWQgYnkgbW9zdCBvdGhlciBtb2R1bGVzLiBJdCdzIGEgbG93LWxldmVsLCBjcml0aWNhbCBvcGVyYXRpb24uIEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIGNvcmUgcm91dGluZSBmb3IgZWl0aGVyIHJlYWRpbmcgb3IgY29uZmlndXJpbmcgcmVnaXN0ZXJzIHdpdGhpbiBhIFBIWSBjaGlwLCBhbmQgdGhlIFwiTU1EXCIgc3VnZ2VzdHMgdGhhdCB0aGUgUEhZIHN1cHBvcnRzIG11bHRpcGxlIGZ1bmN0aW9uYWwgYmxvY2tzLCBlYWNoIG1hcHBlZCB0byBhIHNwZWNpZmljIE1NRCBhZGRyZXNzLiBUaGlzIGltcGxpZXMgc29tZSBraW5kIG9mIGluZGlyZWN0IGFkZHJlc3Npbmcgc2NoZW1lLiBJIGFudGljaXBhdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHBpdm90YWwgdG8gZGV2aWNlIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmF0aW9uIGNoYW5nZXMsIG9yIG9wZXJhdGlvbmFsIG1vbml0b3JpbmcuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSwgd2hhdCdzIHBhc3NlZCBpbiBhcyBwYXJhbWV0ZXJzIGFuZCB3aGF0IGlzIGl0IHJldHVybmluZyBhbmQgd2hhdCBraW5kIG9mIGVycm9yLWhhbmRsaW5nIGl0J3MgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NTUyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NTA6MzYuMDY3OTk3MjE0WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2OCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ2ODpcXHRpbnQgX19waHlfcmVhZF9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldmFkLCB1MzIgcmVnbnVtKVxcbiA0Njk6XFx0e1xcbiA0NzA6XFx0XFx0aWYgKHJlZ251bSBcXHUwMDNlICh1MTYpfjAgfHwgZGV2YWQgXFx1MDAzZSAzMilcXG4gNDcxOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0NzI6XFx0XFxuIDQ3MzpcXHRcXHRpZiAocGh5ZGV2LVxcdTAwM2VkcnYgXFx1MDAyNlxcdTAwMjYgcGh5ZGV2LVxcdTAwM2VkcnYtXFx1MDAzZXJlYWRfbW1kKVxcbiA0NzQ6XFx0XFx0XFx0cmV0dXJuIHBoeWRldi1cXHUwMDNlZHJ2LVxcdTAwM2VyZWFkX21tZChwaHlkZXYsIGRldmFkLCByZWdudW0pO1xcbiA0NzU6XFx0XFxuIDQ3NjpcXHRcXHRyZXR1cm4gbW1kX3BoeV9yZWFkKHBoeWRldi1cXHUwMDNlbWRpby5idXMsIHBoeWRldi1cXHUwMDNlbWRpby5hZGRyLFxcbiA0Nzc6XFx0XFx0XFx0XFx0ICAgIHBoeWRldi1cXHUwMDNlaXNfYzQ1LCBkZXZhZCwgcmVnbnVtKTtcXG4gNDc4OlxcdH1cXG4gNDc5OlxcdEVYUE9SVF9TWU1CT0woX19waHlfcmVhZF9tbWQpO1xcbiA0ODA6XFx0XFxuIDQ4MTpcXHQvKipcXG4gNDgyOlxcdCAqIHBoeV9yZWFkX21tZCAtIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciByZWFkaW5nIGEgcmVnaXN0ZXJcXG4gNDgzOlxcdCAqIGZyb20gYW4gTU1EIG9uIGEgZ2l2ZW4gUEhZLlxcbiA0ODQ6XFx0ICogQHBoeWRldjogVGhlIHBoeV9kZXZpY2Ugc3RydWN0XFxuIDQ4NTpcXHQgKiBAZGV2YWQ6IFRoZSBNTUQgdG8gcmVhZCBmcm9tXFxuIDQ4NjpcXHQgKiBAcmVnbnVtOiBUaGUgcmVnaXN0ZXIgb24gdGhlIE1NRCB0byByZWFkXFxuIDQ4NzpcXHQgKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo1MDozNi4wNjgwODM5MzNaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc4MDU4ODg5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipNeSBEZWVwIERpdmUgaW50byBgbW1kX3BoeV9yZWFkYCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2hlbiBJIHNlZSBgbW1kX3BoeV9yZWFkYCwgaW1tZWRpYXRlbHkgbXkgbWluZCBqdW1wcyB0byB0aGUgbG93LWxldmVsIHBoeXNpY2FsIGxheWVyIGludGVyZmFjZS4gSSdtIHRoaW5raW5nIGRpcmVjdCByZWdpc3RlciBhY2Nlc3MsIHBvdGVudGlhbGx5IHdpdGggaW1wbGljYXRpb25zIGZvciB0aW1pbmcgYW5kIGVycm9yIGhhbmRsaW5nIHRoYXQgYXJlIGNydWNpYWwgdG8gY29uc2lkZXIuIEknbSBnb2luZyB0byBhc3N1bWUgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIGFueSBQSFkgKFBoeXNpY2FsIExheWVyKSBvcGVyYXRpb24gYW5kIGlzIHRoZXJlZm9yZSBhIHZpdGFsIGJ1aWxkaW5nIGJsb2NrLiBTbyB3aGF0IGlzIHRoZSBjb250ZXh0PyBJcyB0aGlzIHBhcnQgb2YgYSBkcml2ZXI/IFdoYXQgc3RhbmRhcmQgaXMgdGhpcyBmdW5jdGlvbiBhdHRlbXB0aW5nIHRvIGFkaGVyZSB0bz9cblxuTXkgZmlyc3QgcXVlc3Rpb24gaXMsIFwiV2hhdCdzIHRoZSBvdmVyYWxsIFBIWSBhcmNoaXRlY3R1cmUgdGhpcyBmdW5jdGlvbiBpcyBtZWFudCBmb3I/XCIgSXMgdGhpcyBhIGdlbmVyaWMgZnVuY3Rpb24sIGludGVuZGVkIGZvciBhIHZhcmlldHkgb2YgUEhZcywgb3IgaXMgaXQgaGlnaGx5IHNwZWNpZmljIHRvIGEgcGFydGljdWxhciB2ZW5kb3Igb3IgZGV2aWNlIGZhbWlseT8gS25vd2luZyB0aGUgYXJjaGl0ZWN0dXJlIGdpdmVzIG1lIGNsdWVzIGFib3V0IHRoZSBleHBlY3RlZCByZWdpc3RlciBsYXlvdXQsIGNvbW11bmljYXRpb24gcHJvdG9jb2wgKEkyQywgU1BJLCBNRElPLCBldGMuKSwgYW5kIHBvdGVudGlhbCBjbG9ja2luZyBjb25zdHJhaW50cy4gSSdtIGltbWVkaWF0ZWx5IHRyeWluZyB0byB2aXN1YWxpemUgdGhlIHJlZ2lzdGVyIG1hcCDigJMgd2hhdCBhcmUgdGhlIGJhc2UgYWRkcmVzc2VzLCBvZmZzZXQgY2FsY3VsYXRpb25zLCBhbmQgZGF0YSB3aWR0aHMgaW52b2x2ZWQ/XG5cblRoZW4gSSB0aGluayBhYm91dCB0aGUgZGF0YSB0eXBlcyBiZWluZyB1c2VkOiBXaGF0IGlzIHRoZSB1bmRlcmx5aW5nIGJ1cyB0eXBlPyBJcyBpdCBhIHN0YW5kYXJkIGludGVyZmFjZSBvciBzb21ldGhpbmcgcHJvcHJpZXRhcnk/IEFyZSB3ZSBkZWFsaW5nIHdpdGggcmF3IGJpdHMsIG9yIGEgaGlnaGVyLWxldmVsIGRhdGEgc3RydWN0dXJlPyBJJ20gYW50aWNpcGF0aW5nIHBvdGVudGlhbCBiaXQtZmllbGQgbWFuaXB1bGF0aW9uIChzaGlmdGluZywgbWFza2luZykgdG8gZXh0cmFjdCB0aGUgcmVsZXZhbnQgaW5mb3JtYXRpb24gZnJvbSBhIFBIWSByZWdpc3RlciByZWFkLiBFcnJvciBjaGVja2luZyBpcyBjcml0aWNhbCBhdCB0aGlzIGxldmVsLiBJZiB0aGUgaGFyZHdhcmUgaXMgZmF1bHR5LCBob3cgZG9lcyB0aGlzIHByb2Nlc3MgaGFuZGxlIGl0P1xuXG5GaW5hbGx5LCB0aGUgZnVuY3Rpb24gaXRzZWxmLiBXaGF0IGFyZSB0aGUgc3BlY2lmaWMgcGFyYW1ldGVycz8gV2hhdCBpcyB0aGUgcmVnaXN0ZXIgYWRkcmVzcyBwYXNzZWQgaW50byB0aGUgZnVuY3Rpb24/IFdoYXQgaXMgdGhlIGV4cGVjdGVkIHJldHVybiB2YWx1ZT8gSG93IGRvZXMgaXQgaGFuZGxlIHBvdGVudGlhbCBlcnJvcnMg4oCTIHJldHVybiBjb2RlcywgYXNzZXJ0aW9ucywgb3IgbG9nZ2luZz8gRG9lcyBpdCBpbXBsZW1lbnQgYW55IGZvcm0gb2YgcmV0cnkgbWVjaGFuaXNtLCBvciBkb2VzIGl0IGFzc3VtZSB0aGUgdXBwZXIgbGF5ZXJzIHdpbGwgaGFuZGxlIGFueSBidXMtbGV2ZWwgcHJvYmxlbXM/IEknbSBzdGFydGluZyB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuIENhbiB3ZSBjYWNoZSByZWdpc3RlciB2YWx1ZXMgdG8gcmVkdWNlIGJ1cyB0cmFmZmljLCBvciBwZXJmb3JtIGEgYmF0Y2ggb2YgcmVhZHM/IEhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gaW50ZXJhY3Qgd2l0aCBhbnkgaW50ZXJydXB0IGhhbmRsZXJzIG9yIG90aGVyIGNvbmN1cnJlbnQgdGFza3M/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MTU2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjUwOjQwLjg0ODY3NTE2OVoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYyNzg3NjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tZF9waHlfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYz00MjE9c3RhdGljIHZvaWQgbW1kX3BoeV9pbmRpcmVjdChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGludCBkZXZhZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQzNC1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYzo0MzU6aW50IG1tZF9waHlfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGJvb2wgaXNfYzQ1LFxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQzNi1cXHRcXHQgaW50IGRldmFkLCB1MzIgcmVnbnVtKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDQ0LX1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYzo0NDU6RVhQT1JUX1NZTUJPTF9HUEwobW1kX3BoeV9yZWFkKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00NDYtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYz00Njg9aW50IF9fcGh5X3JlYWRfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZhZCwgdTMyIHJlZ251bSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ3NS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYzo0NzY6XFx0cmV0dXJuIG1tZF9waHlfcmVhZChwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcixcXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00NzctXFx0XFx0XFx0ICAgIHBoeWRldi1cXHUwMDNlaXNfYzQ1LCBkZXZhZCwgcmVnbnVtKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NTA6NDEuMTExNDcwODMxWiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1ODI4OTk3ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIHdlbGwtdmVyc2VkIGluIHRoZSBzdWJqZWN0IG1hdHRlciBhbmQgYXBwcm9hY2hpbmcgYSBzcGVjaWZpYyBjb2RlIGZ1bmN0aW9uOlxuXG4qKkFuYWx5emluZyBgbW1kX3BoeV9yZWFkYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIGBtbWRfcGh5X3JlYWRgLiBMZXQncyBnZXQgcmlnaHQgdG8gaXQuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZywgXCJPa2F5LCB0aGlzIGltcGxpZXMgYSByZWFkIG9wZXJhdGlvbiwgbGlrZWx5IGludm9sdmluZyBhIE1lZGlhLUluZGVwZW5kZW50IEludGVyZmFjZSAoTUlJKSBNYW5hZ2VtZW50IERhdGEgKE1NRCkgUEhZIChQaHlzaWNhbCBMYXllcikgZGV2aWNlLiBHaXZlbiB0aGUgZnVuY3Rpb24gbmFtZSwgSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIGxvdyBsZXZlbCBkZXRhaWxzIG9mIGhvdyB0aGV5IGhhbmRsZSB0aGUgcmVhZGluZyBhbmQgcmV0cmlldmluZyBvZiBkYXRhIGZyb20gYSBQSFkgdmlhIE1NRC5cIiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGUgY29tbXVuaWNhdGlvbiBwcm90b2NvbCBpcyBpbXBsZW1lbnRlZCwgc3BlY2lmaWNhbGx5IGZvciBob3cgdGhlIHJlYWQgY3ljbGUgaXMgaW5pdGlhdGVkIGFuZCBjb21wbGV0ZWQuIEknbGwgbmVlZCB0byBrbm93IHRoZSBzcGVjaWZpYyByZWdpc3RlciBpdCBpbnRlbmRzIHRvIHRhcmdldCwgdGhlIGJpdCBtYW5pcHVsYXRpb24gb2YgdGhlIHJlYWQgYW5kIHdyaXRlIGNvbW1hbmRzLCBhbmQgZGF0YSB0cmFuc21pc3Npb24uIFwiSXMgdGhlcmUgYW55IGVycm9yIGhhbmRsaW5nP1wiIGlzIGEga2V5IHF1ZXN0aW9uIGluIHRoaXMgYXJlYS4gSSdsbCBiZSBmb2N1c2VkIG9uIHRoaW5ncyBsaWtlIHRpbWluZyBjb25zdHJhaW50cywgYWNrbm93bGVkZ2Ugc2lnbmFscywgYW5kIGFueSBwb3RlbnRpYWwgcmV0cnkgbWVjaGFuaXNtcy4gSSBuZWVkIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24ncyBpbnRlcm5hbCBmbG93LCBhbnkgZGVwZW5kZW5jaWVzIG9uIGhhcmR3YXJlIG9yIG90aGVyIG1vZHVsZXMsIGFuZCB0aGUgZ2VuZXJhbCB3YXkgdGhlIE1NRCBQSFkgcmVnaXN0ZXJzIGFyZSBiZWluZyBhY2Nlc3NlZC4gVGhpcyBzaG91bGQgYmUgYW4gaW50ZXJlc3Rpbmcgb25lIHRvIHVucGFjayFcblxuXG4iLCJJbnB1dFRva2VucyI6NDgwMDMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo1MDo0Ni42OTQzNzM2MzZaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDM1LFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDM1OlxcdGludCBtbWRfcGh5X3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBib29sIGlzX2M0NSxcXG4gNDM2OlxcdFxcdFxcdCBpbnQgZGV2YWQsIHUzMiByZWdudW0pXFxuIDQzNzpcXHR7XFxuIDQzODpcXHRcXHRpZiAoaXNfYzQ1KVxcbiA0Mzk6XFx0XFx0XFx0cmV0dXJuIF9fbWRpb2J1c19jNDVfcmVhZChidXMsIHBoeV9hZGRyLCBkZXZhZCwgcmVnbnVtKTtcXG4gNDQwOlxcdFxcbiA0NDE6XFx0XFx0bW1kX3BoeV9pbmRpcmVjdChidXMsIHBoeV9hZGRyLCBkZXZhZCwgcmVnbnVtKTtcXG4gNDQyOlxcdFxcdC8qIFJlYWQgdGhlIGNvbnRlbnQgb2YgdGhlIE1NRCdzIHNlbGVjdGVkIHJlZ2lzdGVyICovXFxuIDQ0MzpcXHRcXHRyZXR1cm4gX19tZGlvYnVzX3JlYWQoYnVzLCBwaHlfYWRkciwgTUlJX01NRF9EQVRBKTtcXG4gNDQ0OlxcdH1cXG4gNDQ1OlxcdEVYUE9SVF9TWU1CT0xfR1BMKG1tZF9waHlfcmVhZCk7XFxuIDQ0NjpcXHRcXG4gNDQ3OlxcdGludCBtbWRfcGh5X3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgYm9vbCBpc19jNDUsXFxuIDQ0ODpcXHRcXHRcXHQgIGludCBkZXZhZCwgdTMyIHJlZ251bSwgdTE2IHZhbClcXG4gNDQ5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NTA6NDYuNjk0NDY3NjM2WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1OTc0MjEwNTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIHRoZSBSZWFsdGVrIFJUTDgyNjEgRHJpdmVyIHZpYSBVU0IgRW11bGF0aW9uKipcblxuT2theSwgc28gdGhlIGBpc19jNDVgIGZsYWcgaXMga2V5IGhlcmUuIElmIGl0J3MgZmFsc2UsIHdlJ3JlIHVzaW5nIGBtbWRfcGh5X2luZGlyZWN0YCwgd2hpY2ggbWVhbnMgd2UncmUgZ29pbmcgdGhyb3VnaCBDbGF1c2UgMjIgcmVnaXN0ZXJz4oCUc3BlY2lmaWNhbGx5LCAxMyAoYE1JSV9NTURfQ1RSTGApIGFuZCAxNCAoYE1JSV9NTURfREFUQWApLiBUaGlzIGlzIGV4Y2VsbGVudC4gRXZlbiBpZiB0aGUgTURJTyBidXMgZHJpdmVyIG9ubHkgc3VwcG9ydHMgQ2xhdXNlIDIyLCB3ZSBjYW4gc3RpbGwgdGFsayB0byBDbGF1c2UgNDUgcmVnaXN0ZXJzIGluZGlyZWN0bHkuXG5cbk15IHRoaW5raW5nIGlzLCBpZiB3ZSBlbXVsYXRlIGEgVVNCIGRldmljZSwgbGV0J3Mgc2F5IGFuIGBheDg4MTcyYWAgb3IgYGxhbjc4eHhgLCBhbmQgaGF2ZSBpdCBhY3QgbGlrZSBhbiBNRElPIGJ1cywgd2UgY2FuIHJlc3BvbmQgdG8gQ2xhdXNlIDIyIHJlYWRzIGZvciB0aGUgUEhZIElEIHJlZ2lzdGVycyAoMiBhbmQgMykgd2l0aCBgUlRMXzgyNjFDX0NHYCAoMHgwMDFjYzg5OCkuIFRoZSBwaHlsaWIgd2lsbCB0aGVuIGluc3RhbnRpYXRlIGEgQ2xhdXNlIDIyIFBIWS4gSXQgd2lsbCBzZWUgdGhhdCB0aGUgUEhZIElEIGlzIGZvdW5kIHZpYSBDbGF1c2UgMjIsIHNvIGBpc19jNDVgIHdpbGwgYmUgZmFsc2UgKHVubGVzcyB0aGUgZHJpdmVyIGV4cGxpY2l0bHkgcHJvYmVzIGZvciBDNDUpLCBhbmQgYHBoeV9yZWFkX21tZGAgd2lsbCB1c2UgaW5kaXJlY3QgYWNjZXNzIChyZWdpc3RlcnMgMTMgYW5kIDE0KS5cblxuVGhpcyBtZWFucyB0aGF0IHRoZSBgcmVhbHRla19tYWluLmNgIGRyaXZlciBzaG91bGQgYmUgYm91bmQuIEl0cyBgcHJvYmVgLCBgY29uZmlnX2luaXRgLCBgY29uZmlnX2FuZWdgLCBhbmQgdGhlIHJlc3Qgb2YgaXRzIG1ldGhvZHMgd2lsbCBnZXQgY2FsbGVkLCBhbmQgdGhleSdsbCBiZSB1c2luZyBgcGh5X3JlYWRfbW1kYCwgd2hpY2gsIGluIG91ciBjYXNlLCB0cmFuc2xhdGVzIHRvIENsYXVzZSAyMiBpbmRpcmVjdCBhY2Nlc3Nlcy4gT3VyIGVtdWxhdGVkIFVTQiBkZXZpY2UgY2FuIHJlc3BvbmQgdG8gdGhvc2UuIEl0IG1lYW5zIHRoaXMgY29kZSBpcyBhYnNvbHV0ZWx5IHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHZpYSBVU0IgZW11bGF0aW9uIVxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhhdCBgUlRMXzgyNjFDX0NHYCB3aWxsIGJlIG1hdGNoZWQuIFRoZSBkcml2ZXIgaGFzOlxuXG5gYGBjXG57XG5cdFBIWV9JRF9NQVRDSF9FWEFDVChSVExfODI2MUNfQ0cpLFxuXHQubmFtZVx0XHRcdD0gXCJSZWFsdGVrIFJUTDgyNjEgMTBHYnBzIFBIWVwiLFxuXHQucHJvYmVcdFx0XHQ9IHJ0bDgyNjF4X3Byb2JlLFxuXHQuY29uZmlnX2luaXRcdFx0PSBydGw4MjYxeF9jb25maWdfaW5pdCxcblx0LmdldF9mZWF0dXJlc1x0XHQ9IHJ0bDgyNjF4X2dldF9mZWF0dXJlcyxcblx0LmNvbmZpZ19hbmVnXHRcdD0gcnRsODI2MXhfY29uZmlnX2FuZWcsXG5cdC5yZWFkX3N0YXR1c1x0XHQ9IHJ0bDgyNjF4X3JlYWRfc3RhdHVzLFxuXHQuY29uZmlnX2ludHJcdFx0PSBydGw4MjYxeF9jb25maWdfaW50cixcblx0LmhhbmRsZV9pbnRlcnJ1cHRcdD0gcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdCxcblx0LnNvZnRfcmVzZXRcdFx0PSBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0LFxuXHQuc3VzcGVuZFx0XHQ9IGdlbnBoeV9jNDVfcG1hX3N1c3BlbmQsXG5cdC5yZXN1bWVcdFx0XHQ9IGdlbnBoeV9jNDVfcG1hX3Jlc3VtZSxcbn0sXG5gYGBcblxuSWYgd2UgZW11bGF0ZSBhIFBIWSB3aXRoIElEIGAweDAwMWNjODk4YCwgdGhpcyBkcml2ZXIgKndpbGwqIGJlIGJvdW5kLCBhbmQgYHJ0bDgyNjF4X3Byb2JlYCB3aWxsIGJlIGNhbGxlZC4gSW5zaWRlIGBydGw4MjYxeF9wcm9iZWA6XG5cbmBgYGNcbnN0YXRpYyBpbnQgcnRsODI2MXhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbntcblx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuXHRzdHJ1Y3QgcnRsODI2MXhfcHJpdiAqcHJpdjtcblx0aW50IHN1Yl9waHlfaWQsIHJldDtcblxuXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG5cdGlmICghcHJpdilcblx0XHRyZXR1cm4gLUVOT01FTTtcblxuXHRwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7XG5cblx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjYxWF9FWFRfQUREUl9SRUcsXG5cdFx0XHQgICAgUlRMXzgyNjFYX1NVQl9QSFlfSURfQUREUik7XG5cdGlmIChyZXQgXHUwMDNjIDApXG5cdFx0cmV0dXJuIHJldDtcblxuXHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODI2MVhfRVhUX0RBVEFfUkVHKTtcblx0aWYgKHJldCBcdTAwM2MgMClcblx0XHRyZXR1cm4gcmV0O1xuXG5cdHN1Yl9waHlfaWQgPSAocmV0IFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgMHhmZjtcblxuXHRzd2l0Y2ggKHN1Yl9waHlfaWQpIHtcblx0Y2FzZSBSVEw4MjYxQ19DRV9NT0RFTDpcblx0XHRwcml2LVx1MDAzZWZ3X25hbWUgPSBSVEw4MjYxQ19DRV9GV19OQU1FO1xuXHRcdHBoeWRldl9pbmZvKHBoeWRldiwgXCJSVEw4MjYxQyBkZXRlY3RlZCAoc3ViX2lkIFxuXG4iLCJJbnB1dFRva2VucyI6NDg2MjEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTU6NTE6MDIuNjY4NjgyMjA4WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY5NDk3ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVhbHRla19tYWluXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvTWFrZWZpbGU6MjpyZWFsdGVrLXlcXHRcXHRcXHQrPSByZWFsdGVrX21haW4ub1xcbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL01ha2VmaWxlLTMtcmVhbHRlay0kKENPTkZJR19SRUFMVEVLX1BIWV9IV01PTikgKz0gcmVhbHRla19od21vbi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjUxOjAyLjc5NTYzNjQ4NloiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDk3MDE2MTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoYXQsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSdtIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggbmV0d29yayBkcml2ZXJzIGFuZCB0aGUgTGludXgga2VybmVsIGJ1aWxkIHN5c3RlbTpcblxuKipJbnZlc3RpZ2F0aW5nIFJlYWx0ZWsgUEhZIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgZW5hYmxpbmcgdGhlIGByZWFsdGVrYCBQSFkgKFBoeXNpY2FsIExheWVyKSBkcml2ZXIuIFdoZXJlJ3MgdGhlIGNvbmZpZ3VyYXRpb24gbWFnaWMgaGFwcGVuaW5nPyBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBsaWtlbHkgc3VzcGVjdHMuIEZpcnN0LCBJJ2xsIGV4YW1pbmUgdGhlIHNwZWNpZmljIGByZWFsdGVrYCBkcml2ZXIncyBgTWFrZWZpbGVgLCB0aGUgb25lIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL01ha2VmaWxlYC4gVGhpcyBpcyB0aGUgbW9zdCBvYnZpb3VzIHBsYWNlIGZvciBkZXZpY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbnkgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUsIG9yIG90aGVyIGJ1aWxkLXRpbWUgbG9naWMuIFRoZW4sIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIG5vdCBtaXNzIGFueSBvdmVyYXJjaGluZyBidWlsZCBzeXN0ZW0gZGlyZWN0aXZlcywgSSdsbCBhbHNvIGdsYW5jZSBhdCB0aGUgcGFyZW50IGRpcmVjdG9yeSdzIGBNYWtlZmlsZWAsIGBkcml2ZXJzL25ldC9waHkvTWFrZWZpbGVgLiBUaGF0IHNob3VsZCBoYXZlIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgaG93IFBIWSBkcml2ZXJzIGluIGdlbmVyYWwgYXJlIGhhbmRsZWQsIGFuZCBjb3VsZCBjb250YWluIGNvbmRpdGlvbmFsIGluY2x1ZGVzIG9yIGdsb2JhbCBmbGFncyB0aGF0IGltcGFjdCB0aGUgYHJlYWx0ZWtgIGRyaXZlci4gVGhlc2UgdHdvIGZpbGVzIHNob3VsZCByZXZlYWwgdGhlIGtleSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMsIEtjb25maWcgZGVwZW5kZW5jaWVzLCBhbmQgYW55IG90aGVyIHJlbGV2YW50IGJ1aWxkLXRpbWUgZGlyZWN0aXZlcyB0aGF0IGNvbnRyb2wgd2hldGhlciB0aGUgYHJlYWx0ZWtgIGRyaXZlciBnZXRzIGNvbXBpbGVkIGFuZCBpbmNsdWRlZCBpbiB0aGUga2VybmVsLiBUaGlzJ2xsIGdldCBtZSB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciBwcmV0dHkgcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTExNDksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxNTo1MTowNi44OTI2NTU0MjNaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MjA5NjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlYWx0ZWtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT05ND1vYmotJChDT05GSUdfUVNFTUlfUEhZKVxcdFxcdCs9IHFzZW1pLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6OTU6b2JqLSQoQ09ORklHX1JFQUxURUtfUEhZKVxcdCs9IHJlYWx0ZWsvXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTk2LW9iai0kKENPTkZJR19SRU5FU0FTX1BIWSlcXHQrPSB1UEQ2MDYyMC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjUxOjA2Ljk3MDg3MzY1NloiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDExNDkyNDA4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciBSZWFsdGVrIFJUTDgyNjEgUEhZIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBSZWFsdGVrIFJUTDgyNjEgMTBHYnBzIFBIWSBkcml2ZXIuIFRoZSBrZXkgY29uZmlnIHJlcXVpcmVkIGlzIGBDT05GSUdfUkVBTFRFS19QSFlgLCB3aGljaCBpcyBhIHRyaXN0YXRlLiAgQmV5b25kIHRoYXQsIGl0J3MgYnJpbmdpbmcgaW4gZmlybXdhcmUgbG9hZGluZyBmdW5jdGlvbmFsaXR5LiAgVGhhdCBtZWFucyB3ZSdsbCBhbHNvIG5lZWQgYENPTkZJR19GV19MT0FERVJgICh3aGljaCBpcyB1c3VhbGx5IGVuYWJsZWQgYW55d2F5KSBhbmQsIGJlY2F1c2UgaXQgdXNlcyBgY3JjMzJgLCBgQ09ORklHX0NSQzMyYCwgdGhvdWdoIHRob3NlIGFyZSBsaWtlbHkgYWxyZWFkeSB0YWtlbiBjYXJlIG9mLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGludHJvZHVjZXMgYSBidW5jaCBvZiBpbnRlcmVzdGluZyBmdW5jdGlvbnMuICBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHRocm91Z2ggYWxsIG9mIHRoZW0gZm9yIGBGb2N1c1N5bWJvbHNgLCB3aGljaCBJJ3ZlIGRvbmUuICBMZXQncyBzZWU6XG5cbiogICBgZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldGBcbiogICBgZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmVgXG4qICAgYGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmVgXG4qICAgYHJ0bDgyNjF4X3Byb2JlYFxuKiAgIGBydGw4MjYxeF9nZXRfZmVhdHVyZXNgXG4qICAgYHJ0bDgyNjF4X3JlYWRfc3RhdHVzYFxuKiAgIGBydGw4MjYxeF92ZXJpZnlfZmlybXdhcmVgXG4qICAgYHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnlgXG4qICAgYHJ0bDgyNjF4X2Z3X2xvYWRgXG4qICAgYHJ0bDgyNjF4X2NvbmZpZ19pbnRyYFxuKiAgIGBydGw4MjYxeF9oYW5kbGVfaW50ZXJydXB0YFxuKiAgIGBydGw4MjYxeF9jb25maWdfYW5lZ2BcbiogICBgcnRsODI2MXhfY29uZmlnX2luaXRgXG5cbldhaXQuLi4gSSBuZWVkIHRvIHJlZmluZSB0aGF0IGxpc3QgYSBsaXR0bGUuIGBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZWAgYW5kIGBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlYCBhcmUgYWN0dWFsbHkgc3RhdGljIGZ1bmN0aW9ucyBpbiBgZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY2Agd2hpY2ggSSB3b24ndCBiZSBhYmxlIHRvIHRhcmdldCBkaXJlY3RseSwgYW5kIGBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0YCBpcyBleHBvcnRlZC4gSG93ZXZlciwgdGhlIGBydGw4MjYxeF8qYCBmdW5jdGlvbnMgYXJlIHN0YXRpYyBpbiBgcmVhbHRla19tYWluLmNgLiBTbyBteSB0aGlua2luZyBpcyB0aGF0IHN5emthbGxlciBzaG91bGQgYmUgYWJsZSB0byBnZXQgdG8gYWxsIHRoZXNlLCBzbyBpdCdzIGEgdXNlZnVsIHNldCBvZiBpbml0aWFsIGBGb2N1c1N5bWJvbHNgLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGhpZGRlbiBjb25maWcgZGVwZW5kZW5jaWVzLCBidXQgYENPTkZJR19SRUFMVEVLX1BIWWAsIGBDT05GSUdfUEhZTElCYCBhbmQgYENPTkZJR19NRElPX0RFVklDRWAgc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBkcml2ZXJzLlxuXG5Ob3csIGxvb2tpbmcgZGVlcGVyLCAgYHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnlgIGlzIGEgcmVhbCBnZW0uICBJdCBwYXJzZXMgZmlybXdhcmUgZGF0YSBhbmQgcGVyZm9ybXMgTURJTyBvcGVyYXRpb25zLiBTeXprYWxsZXIncyBgc3l6X3JlcXVlc3RfZmlybXdhcmVgIHByaW1pdGl2ZSBjYW4gZmVlZCBhcmJpdHJhcnkgZmlybXdhcmUgdG8gdGhlIGRyaXZlciwgYW5kIHNpbmNlIHN5emthbGxlciAqZG9lcyogaW50ZXJjZXB0IHRoZSBgcmVxdWVzdF9maXJtd2FyZWAgY2FsbCwgdGhpcyBpcyBhIHBlcmZlY3QgdGFyZ2V0ISBJdCBtZWFucyB3ZSBjYW4gdGhyb3cgY29tcGxldGVseSBmdXp6ZXItY29udHJvbGxlZCBkYXRhIGF0IGJvdGggYHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZWAgYW5kIGBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5YC4gIFRoZSBmaXJtd2FyZSBwYXJzaW5nIGlzIGluaGVyZW50bHkgcmlza3kg4oCTIHRoaW5rIGJ1ZmZlciBvdmVyZmxvd3MsIHR5cGUgY29uZnVzaW9uLCBldGMuICBJIGNhbiBhbHJlYWR5IHNlZSBvcHBvcnR1bml0aWVzIGZvciBmdXp6aW5nIG1hZ2ljIG51bWJlcnMsIHNpemUgY2hlY2tzLCBhbmQgQ1JDLiAgVGhlIGZ1enplciBpcyBsaWtlbHkgdG8gZmluZCB2dWxuZXJhYmlsaXRpZXMgaW4gaG93IHRoZSBjb2RlIGludGVycHJldHMgYW5kIHVzZXMgdGhlIGZpcm13YXJlIGRhdGEuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgdG8gc2VlIHdoYXQgdGhlIGZ1enplciBjYW4gZG8gaGVyZS4gRXZlbiB0aG91Z2ggdGhlIGZpcm13YXJlIHZlcmlmaWVyIGluY2x1ZGVzIGEgQ1JDMzIgY2hlY2ssIHRoZSBmdXp6ZXIgbWlnaHQgZmluZCB3YXlzIHRvIGJ5cGFzcyBpdCwgb3IgYXQgbGVhc3QgdHJpZ2dlciBmbGF3cyBiZWZvcmUgdGhhdCBjaGVjay5cblxuT2theSwgaGVyZSdzIHRoZSBmaW5hbCBsaXN0IGZvciBgRm9jdXNTeW1ib2xzYDpcblxuKiAgIGBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0YFxuKiAgIGBydGw4MjYxeF9wcm9iZWBcbiogICBgcnRsODI2MXhfZ2V0X2ZlYXR1cmVzYFxuKiAgIGBydGw4MjYxeF9yZWFkX3N0YXR1c2BcbiogICBgcnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlYFxuKiAgIGBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5YFxuKiAgIGBydGw4MjYxeF9md19sb2FkYFxuKiAgIGBydGw4MjYxeF9jb25maWdfaW50cmBcbiogICBgcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdGBcbiogICBgcnRsODI2MXhfY29uZmlnX2FuZWdgXG4qICAgYHJ0bDgyNjF4X2NvbmZpZ19pbml0YFxuXG5UaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBkZWZpbml0ZWx5IGB0cnVlYCBvbiB0aGlzIG9uZS4gQW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGBbXCJSRUFMVEVLX1BIWVwiXWAuIFRoZSByZWFzb25pbmcgaXMgdGhhdCB0aGUgZHJpdmVyIHN1cHBvcnRzIHRoZSBSVEw4XG5cbiIsIklucHV0VG9rZW5zIjo1MTU5NywiT3V0cHV0VG9rZW5zIjozMTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDE1OjUxOjMxLjA4NTc5OTY4OFoiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMzk5NzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSRUFMVEVLX1BIWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXRcIixcbiAgICBcImdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlXCIsXG4gICAgXCJnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlXCIsXG4gICAgXCJydGw4MjYxeF9wcm9iZVwiLFxuICAgIFwicnRsODI2MXhfZ2V0X2ZlYXR1cmVzXCIsXG4gICAgXCJydGw4MjYxeF9yZWFkX3N0YXR1c1wiLFxuICAgIFwicnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlXCIsXG4gICAgXCJydGw4MjYxeF9md19leGVjdXRlX2VudHJ5XCIsXG4gICAgXCJydGw4MjYxeF9md19sb2FkXCIsXG4gICAgXCJydGw4MjYxeF9jb25maWdfaW50clwiLFxuICAgIFwicnRsODI2MXhfaGFuZGxlX2ludGVycnVwdFwiLFxuICAgIFwicnRsODI2MXhfY29uZmlnX2FuZWdcIixcbiAgICBcInJ0bDgyNjF4X2NvbmZpZ19pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw4MjYxIDEwR2JwcyBQSFkgYW5kIGludHJvZHVjZXMgQ2xhdXNlIDQ1IFBIWSBNYXN0ZXIvU2xhdmUgY29uZmlndXJhdGlvbi4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYnkgZW11bGF0aW5nIGEgVVNCIG5ldHdvcmsgYWRhcHRlciAoZS5nLiwgQVNJWCBvciBTTVNDKSB0aGF0IGV4cG9zZXMgYW4gTURJTyBidXMsIGFuZCByZXNwb25kaW5nIHRvIFBIWSBJRCByZWFkcyB3aXRoIHRoZSBSVEw4MjYxIElELiBUaGUgZHJpdmVyIGFsc28gcGFyc2VzIGZpcm13YXJlLCB3aGljaCBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSRUFMVEVLX1BIWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXRcIixcbiAgICBcImdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlXCIsXG4gICAgXCJnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlXCIsXG4gICAgXCJydGw4MjYxeF9wcm9iZVwiLFxuICAgIFwicnRsODI2MXhfZ2V0X2ZlYXR1cmVzXCIsXG4gICAgXCJydGw4MjYxeF9yZWFkX3N0YXR1c1wiLFxuICAgIFwicnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlXCIsXG4gICAgXCJydGw4MjYxeF9md19leGVjdXRlX2VudHJ5XCIsXG4gICAgXCJydGw4MjYxeF9md19sb2FkXCIsXG4gICAgXCJydGw4MjYxeF9jb25maWdfaW50clwiLFxuICAgIFwicnRsODI2MXhfaGFuZGxlX2ludGVycnVwdFwiLFxuICAgIFwicnRsODI2MXhfY29uZmlnX2FuZWdcIixcbiAgICBcInJ0bDgyNjF4X2NvbmZpZ19pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw4MjYxIDEwR2JwcyBQSFkgYW5kIGludHJvZHVjZXMgQ2xhdXNlIDQ1IFBIWSBNYXN0ZXIvU2xhdmUgY29uZmlndXJhdGlvbi4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYnkgZW11bGF0aW5nIGEgVVNCIG5ldHdvcmsgYWRhcHRlciAoZS5nLiwgQVNJWCBvciBTTVNDKSB0aGF0IGV4cG9zZXMgYW4gTURJTyBidXMsIGFuZCByZXNwb25kaW5nIHRvIFBIWSBJRCByZWFkcyB3aXRoIHRoZSBSVEw4MjYxIElELiBUaGUgZHJpdmVyIGFsc28gcGFyc2VzIGZpcm13YXJlLCB3aGljaCBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkmll2[1] Phase: Succeeded StartedAt: 2026-07-21 15:51:44 +0000 UTC FinishedAt: 2026-07-21 15:51:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmll2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-21 15:51:45 +0000 UTC FinishedAt: 2026-07-21 15:51:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmll2[2] Phase: Succeeded StartedAt: 2026-07-21 15:51:45 +0000 UTC FinishedAt: 2026-07-21 18:12:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmll2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"aeafd26c-8b6c-484b-a75f-302720b2ade2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-21 15:51:45 +0000 UTC FinishedAt: 2026-07-21 18:12:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"aeafd26c-8b6c-484b-a75f-302720b2ade2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowkmll2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"aeafd26c-8b6c-484b-a75f-302720b2ade2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-21 15:51:45 +0000 UTC FinishedAt: 2026-07-21 15:52:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmll2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"aeafd26c-8b6c-484b-a75f-302720b2ade2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-21 15:51:45 +0000 UTC FinishedAt: 2026-07-21 15:52:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkmll2/series-workflowkmll2-convert-artifact-1241514063/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkmll2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"aeafd26c-8b6c-484b-a75f-302720b2ade2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-21 15:52:47 +0000 UTC FinishedAt: 2026-07-21 16:42:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmll2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"aeafd26c-8b6c-484b-a75f-302720b2ade2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-21 15:52:48 +0000 UTC FinishedAt: 2026-07-21 16:42:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*cd279060-5145-404e-a0b6-bc335911edc7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkmll2/series-workflowkmll2-convert-artifact-1241514063/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "a2494697-a74e-4ba5-9c2b-00d1ada5fec4", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkmll2/series-workflowkmll2-build-action-193122197/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkmll2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"aeafd26c-8b6c-484b-a75f-302720b2ade2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-21 15:52:48 +0000 UTC FinishedAt: 2026-07-21 16:42:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*cd279060-5145-404e-a0b6-bc335911edc7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkmll2/series-workflowkmll2-convert-artifact-1241514063/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "a2494697-a74e-4ba5-9c2b-00d1ada5fec4", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkmll2/series-workflowkmll2-build-action-193122197/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkmll2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"aeafd26c-8b6c-484b-a75f-302720b2ade2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-21 16:42:44 +0000 UTC FinishedAt: 2026-07-21 16:42:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmll2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"aeafd26c-8b6c-484b-a75f-302720b2ade2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-21 16:42:44 +0000 UTC FinishedAt: 2026-07-21 16:42:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmll2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"aeafd26c-8b6c-484b-a75f-302720b2ade2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-21 16:42:44 +0000 UTC FinishedAt: 2026-07-21 16:42:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmll2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"aeafd26c-8b6c-484b-a75f-302720b2ade2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-21 16:42:44 +0000 UTC FinishedAt: 2026-07-21 16:42:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"aeafd26c-8b6c-484b-a75f-302720b2ade2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkmll2/series-workflowkmll2-convert-artifact-1433411486/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkmll2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"aeafd26c-8b6c-484b-a75f-302720b2ade2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-21 16:42:54 +0000 UTC FinishedAt: 2026-07-21 16:45:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmll2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"aeafd26c-8b6c-484b-a75f-302720b2ade2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-21 16:42:54 +0000 UTC FinishedAt: 2026-07-21 16:44:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a2494697-a74e-4ba5-9c2b-00d1ada5fec4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkmll2/series-workflowkmll2-build-action-193122197/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowkmll2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"aeafd26c-8b6c-484b-a75f-302720b2ade2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-21 16:45:08 +0000 UTC FinishedAt: 2026-07-21 16:45:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmll2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"aeafd26c-8b6c-484b-a75f-302720b2ade2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-21 16:45:08 +0000 UTC FinishedAt: 2026-07-21 16:45:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmll2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"aeafd26c-8b6c-484b-a75f-302720b2ade2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-21 16:45:08 +0000 UTC FinishedAt: 2026-07-21 17:20:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmll2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"aeafd26c-8b6c-484b-a75f-302720b2ade2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-21 16:45:08 +0000 UTC FinishedAt: 2026-07-21 17:20:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*cd279060-5145-404e-a0b6-bc335911edc7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkmll2/series-workflowkmll2-convert-artifact-1433411486/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "a63b75b0-7724-4003-835a-4e597daf4f7c", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkmll2/series-workflowkmll2-build-action-1567214962/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkmll2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"aeafd26c-8b6c-484b-a75f-302720b2ade2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-21 16:45:08 +0000 UTC FinishedAt: 2026-07-21 17:20:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*cd279060-5145-404e-a0b6-bc335911edc7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkmll2/series-workflowkmll2-convert-artifact-1433411486/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "a63b75b0-7724-4003-835a-4e597daf4f7c", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkmll2/series-workflowkmll2-build-action-1567214962/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkmll2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"aeafd26c-8b6c-484b-a75f-302720b2ade2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-21 17:20:55 +0000 UTC FinishedAt: 2026-07-21 17:20:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmll2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"aeafd26c-8b6c-484b-a75f-302720b2ade2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-21 17:20:55 +0000 UTC FinishedAt: 2026-07-21 17:20:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmll2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"aeafd26c-8b6c-484b-a75f-302720b2ade2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-21 17:20:55 +0000 UTC FinishedAt: 2026-07-21 17:22:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmll2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"aeafd26c-8b6c-484b-a75f-302720b2ade2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-21 17:20:55 +0000 UTC FinishedAt: 2026-07-21 17:22:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a63b75b0-7724-4003-835a-4e597daf4f7c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkmll2/series-workflowkmll2-build-action-1567214962/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowkmll2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"aeafd26c-8b6c-484b-a75f-302720b2ade2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-21 17:22:56 +0000 UTC FinishedAt: 2026-07-21 18:12:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmll2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"aeafd26c-8b6c-484b-a75f-302720b2ade2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-21 17:22:56 +0000 UTC FinishedAt: 2026-07-21 18:12:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*a2494697-a74e-4ba5-9c2b-00d1ada5fec4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a63b75b0-7724-4003-835a-4e597daf4f7c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkmll2/series-workflowkmll2-build-action-193122197/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkmll2/series-workflowkmll2-build-action-1567214962/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkmll2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"aeafd26c-8b6c-484b-a75f-302720b2ade2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-21 17:22:56 +0000 UTC FinishedAt: 2026-07-21 17:23:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmll2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"aeafd26c-8b6c-484b-a75f-302720b2ade2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-21 17:22:56 +0000 UTC FinishedAt: 2026-07-21 17:23:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkmll2/series-workflowkmll2-convert-artifact-3983030947/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkmll2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"aeafd26c-8b6c-484b-a75f-302720b2ade2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-21 17:22:56 +0000 UTC FinishedAt: 2026-07-21 17:22:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmll2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"aeafd26c-8b6c-484b-a75f-302720b2ade2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-21 17:22:56 +0000 UTC FinishedAt: 2026-07-21 17:22:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmll2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"aeafd26c-8b6c-484b-a75f-302720b2ade2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-21 17:22:56 +0000 UTC FinishedAt: 2026-07-21 17:22:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmll2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"aeafd26c-8b6c-484b-a75f-302720b2ade2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-21 17:23:06 +0000 UTC FinishedAt: 2026-07-21 18:12:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmll2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"638b41f770ade0dfc45f7f6f25e1cf75a9c89808","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"aeafd26c-8b6c-484b-a75f-302720b2ade2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-21 17:23:06 +0000 UTC FinishedAt: 2026-07-21 18:12:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a2494697-a74e-4ba5-9c2b-00d1ada5fec4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a63b75b0-7724-4003-835a-4e597daf4f7c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkmll2/series-workflowkmll2-build-action-193122197/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkmll2/series-workflowkmll2-build-action-1567214962/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkmll2/series-workflowkmll2-convert-artifact-3983030947/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}