Name: series-workflow6stjs Phase: Succeeded StartedAt: 2026-08-11 22:19:38 +0000 UTC FinishedAt: 2026-08-12 00:15:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6stjs[0] Phase: Succeeded StartedAt: 2026-08-11 22:19:38 +0000 UTC FinishedAt: 2026-08-11 22:37:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6stjs[0].run-triage Phase: Succeeded StartedAt: 2026-08-11 22:19:38 +0000 UTC FinishedAt: 2026-08-11 22:37:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "f0054d864e6e734add71e29961f5ae15211ad24d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC_NCI", "NFC_S3FWRN5_I2C", "NFC_S3FWRN82_UART" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "f0054d864e6e734add71e29961f5ae15211ad24d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC_NCI", "NFC_S3FWRN5_I2C", "NFC_S3FWRN82_UART" ], "series_id": "d3cb5d11-a071-4944-a487-c265808637ef" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "s3fwrn5_nci_rf_configure_dual", "s3fwrn5_nci_clk_cfg", "s3fwrn5_nci_dual_rsp", "s3fwrn5_nci_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+CgkJCTx0ZD4yMDI2LzA4LzExIDIyOjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQ19OQ0kmIzM0OywKICAgICYjMzQ7TkZDX1MzRldSTjVfSTJDJiMzNDssCiAgICAmIzM0O05GQ19TM0ZXUk44Ml9VQVJUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7czNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWwmIzM0OywKICAgICYjMzQ7czNmd3JuNV9uY2lfY2xrX2NmZyYjMzQ7LAogICAgJiMzNDtzM2Z3cm41X25jaV9kdWFsX3JzcCYjMzQ7LAogICAgJiMzNDtzM2Z3cm41X25jaV9pbml0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBhIG5ldyBORkMgY2hpcCB2YXJpYW50IChTM05STjRWKSBhbmQgYWRkcyBuZXcgTkNJIGNvbW1hbmRzIGZvciBmaXJtd2FyZSBjb25maWd1cmF0aW9uIGFuZCBjYWxpYnJhdGlvbiBkYXRhIHVwZGF0ZXMuIEFsbCBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB0aGUgZGV2aWNlIChzdWNoIGFzIGBzZXRfb3B0aW9uYCwgYHN0b3BfY21kYCwgYW5kIGBzdWJfb2lkYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYG5jaV9wcm9wX2NtZGAuIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgc2VudCBpcyBjYXJlZnVsbHkgY2FsY3VsYXRlZCB0byBtYXRjaCB0aGUgaW5pdGlhbGl6ZWQgYnl0ZXMsIHByZXZlbnRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGZyb20gYmVpbmcgc2VudC4gRGF0YSByZWNlaXZlZCBmcm9tIHRoZSBkZXZpY2UgaXMgY29waWVkIGludG8gYGluZm8tXHUwMDNlZHVhbF9yc3BgIHdpdGggaXRzIGxlbmd0aCB0cmFja2VkIGJ5IGBpbmZvLVx1MDAzZWR1YWxfcnNwX2xlbmAsIGFuZCBib3VuZHMgY2hlY2tzIGFyZSBwZXJmb3JtZWQgYmVmb3JlIGFjY2Vzc2luZyBpdC4gV2hpbGUgdGhlcmUgaXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIGlmIGBza2ItXHUwMDNlbGVuYCBpcyAwIGluIGBzM2Z3cm41X25jaV9kdWFsX3JzcGAgKGBza2ItXHUwMDNlZGF0YVswXWApLCB0aGlzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIHRvIHVzZXIgc3BhY2Ugb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgdXNlZCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gdGVzdCB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBzM25ybjR2IHZhcmlhbnQgdG8gdGhlIHMzZndybjUgTkZDIGRyaXZlci4gSXQgaW50cm9kdWNlcyBuZXcgTkNJIHByb3ByaWV0YXJ5IGNvbW1hbmRzIGFuZCByZXNwb25zZXMsIGFuZCBhIG5ldyBSRiBjb25maWd1cmF0aW9uIHJvdXRpbmUuIFRoZSBkcml2ZXIgaXMgcmVhY2hhYmxlIHZpYSB0aGUgTkNJIGludGVyZmFjZSBhbmQgSTJDL1VBUlQgYnVzZXMsIHdoaWNoIGNhbiBiZSBmdXp6ZWQgdXNpbmcgdmlydHVhbCBkZXZpY2VzIG9yIHN5emthbGxlciYjMzk7cyBOQ0kgc3VwcG9ydC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMjozNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdiNDAyMGFhZTA1Mjc2ZDRhNDdjM2ZiYWQ3MTUzZDdkYTMyZWZiOTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAyMjozNToyNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L25mYy9zYW1zdW5nLHMzZndybjUueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3NhbXN1bmcsczNmd3JuNS55YW1sXG5pbmRleCAxMmJhZWU0NTc1MmM3Li40MGE2OTQ2NjgwMmJiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9uZmMvc2Ftc3VuZyxzM2Z3cm41LnlhbWxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3NhbXN1bmcsczNmd3JuNS55YW1sXG5AQCAtMTQsNiAmIzQzOzE0LDcgQEAgcHJvcGVydGllczpcbiAgICAgZW51bTpcbiAgICAgICAtIHNhbXN1bmcsczNmd3JuNS1pMmNcbiAgICAgICAtIHNhbXN1bmcsczNmd3JuODJcbiYjNDM7ICAgICAgLSBzYW1zdW5nLHMzbnJuNHZcbiBcbiAgIGVuLWdwaW9zOlxuICAgICBtYXhJdGVtczogMVxuQEAgLTI5LDYgJiM0MzszMCw5IEBAIHByb3BlcnRpZXM6XG4gICBjbG9ja3M6XG4gICAgIG1heEl0ZW1zOiAxXG4gXG4mIzQzOyAgcHZkZC1zdXBwbHk6XG4mIzQzOyAgICBkZXNjcmlwdGlvbjogUFZERCBwb3dlciBzdXBwbHlcbiYjNDM7XG4gICB3YWtlLWdwaW9zOlxuICAgICBtYXhJdGVtczogMVxuICAgICBkZXNjcmlwdGlvbjpcbkBAIC01OCwxMiAmIzQzOzYyLDI1IEBAIGFsbE9mOlxuICAgICAgIHByb3BlcnRpZXM6XG4gICAgICAgICBjb21wYXRpYmxlOlxuICAgICAgICAgICBjb250YWluczpcbi0gICAgICAgICAgICBjb25zdDogc2Ftc3VuZyxzM2Z3cm41LWkyY1xuJiM0MzsgICAgICAgICAgICBlbnVtOlxuJiM0MzsgICAgICAgICAgICAgIC0gc2Ftc3VuZyxzM2Z3cm41LWkyY1xuJiM0MzsgICAgICAgICAgICAgIC0gc2Ftc3VuZyxzM25ybjR2XG4gICAgIHRoZW46XG4gICAgICAgcmVxdWlyZWQ6XG4gICAgICAgICAtIGludGVycnVwdHNcbiAgICAgICAgIC0gcmVnXG4gXG4mIzQzOyAgIyBEZXBsb3llZCBEVHMgZm9yIHRoZSBvbGRlciBwYXJ0cyBuZXZlciBkZXNjcmliZWQgYSBzdXBwbHksIHNvIFBWREQgaXNcbiYjNDM7ICAjIG9ubHkgcmVxdWlyZWQgZm9yIHRoZSBuZXcgZGV2aWNlLlxuJiM0MzsgIC0gaWY6XG4mIzQzOyAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgY29tcGF0aWJsZTpcbiYjNDM7ICAgICAgICAgIGNvbnRhaW5zOlxuJiM0MzsgICAgICAgICAgICBjb25zdDogc2Ftc3VuZyxzM25ybjR2XG4mIzQzOyAgICB0aGVuOlxuJiM0MzsgICAgICByZXF1aXJlZDpcbiYjNDM7ICAgICAgICAtIHB2ZGQtc3VwcGx5XG4mIzQzO1xuIGV4YW1wbGVzOlxuICAgLSB8XG4gICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21pbG9zLWZhaXJwaG9uZS1mcDYuZHRzIGIvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21pbG9zLWZhaXJwaG9uZS1mcDYuZHRzXG5pbmRleCBlYmRjYTBlMmQyZjNhLi5iZGJhODQ4Mjc1ZGI0IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21pbG9zLWZhaXJwaG9uZS1mcDYuZHRzXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbWlsb3MtZmFpcnBob25lLWZwNi5kdHNcbkBAIC02MDEsOSAmIzQzOzYwMSwyMiBAQCBcdTAwMjZnY2Mge1xuIH07XG4gXG4gXHUwMDI2aTJjMSB7XG4tXHQvKiBTYW1zdW5nIE5GQyBAIDB4MjcgKi9cbi1cbiBcdHN0YXR1cyA9IFwmIzM0O29rYXlcJiMzNDs7XG4mIzQzO1xuJiM0MztcdG5mY0AyNyB7XG4mIzQzO1x0XHRjb21wYXRpYmxlID0gXCYjMzQ7c2Ftc3VuZyxzM25ybjR2XCYjMzQ7O1xuJiM0MztcdFx0cmVnID0gXHUwMDNjMHgyN1x1MDAzZTtcbiYjNDM7XG4mIzQzO1x0XHRpbnRlcnJ1cHRzLWV4dGVuZGVkID0gXHUwMDNjXHUwMDI2dGxtbSAzMSBJUlFfVFlQRV9FREdFX1JJU0lOR1x1MDAzZTtcbiYjNDM7XHRcdGVuLWdwaW9zID0gXHUwMDNjXHUwMDI2dGxtbSA1NiBHUElPX0FDVElWRV9ISUdIXHUwMDNlO1xuJiM0MztcdFx0d2FrZS1ncGlvcyA9IFx1MDAzY1x1MDAyNnRsbW0gNyBHUElPX0FDVElWRV9ISUdIXHUwMDNlO1xuJiM0MztcdFx0Y2xvY2tzID0gXHUwMDNjXHUwMDI2cnBtaGNjIFJQTUhfTE5fQkJfQ0xLMlx1MDAzZTtcbiYjNDM7XG4mIzQzO1x0XHRwdmRkLXN1cHBseSA9IFx1MDAzY1x1MDAyNnZyZWdfbDIwYlx1MDAzZTtcbiYjNDM7XG4mIzQzO1x0XHRwaW5jdHJsLTAgPSBcdTAwM2NcdTAwMjZuZmNfZGVmYXVsdFx1MDAzZTtcbiYjNDM7XHRcdHBpbmN0cmwtbmFtZXMgPSBcJiMzNDtkZWZhdWx0XCYjMzQ7O1xuJiM0MztcdH07XG4gfTtcbiBcbiBcdTAwMjZpMmMzIHtcbkBAIC04MjUsNiAmIzQzOzgzOCwyMiBAQCBcdTAwMjZ0bG1tIHtcbiBcdFx0XHQgICAgICAgXHUwMDNjMTMgMVx1MDAzZSwgLyogTkMgKi9cbiBcdFx0XHQgICAgICAgXHUwMDNjNjMgMlx1MDAzZTsgLyogV0xBTiBVQVJUICovXG4gXG4mIzQzO1x0bmZjX2RlZmF1bHQ6IG5mYy1kZWZhdWx0LXN0YXRlIHtcbiYjNDM7XHRcdGlycS1waW5zIHtcbiYjNDM7XHRcdFx0cGlucyA9IFwmIzM0O2dwaW8zMVwmIzM0OztcbiYjNDM7XHRcdFx0ZnVuY3Rpb24gPSBcJiMzNDtncGlvXCYjMzQ7O1xuJiM0MztcdFx0XHRkcml2ZS1zdHJlbmd0aCA9IFx1MDAzYzJcdTAwM2U7XG4mIzQzO1x0XHRcdGJpYXMtZGlzYWJsZTtcbiYjNDM7XHRcdH07XG4mIzQzO1xuJiM0MztcdFx0cGQtcGlucyB7XG4mIzQzO1x0XHRcdHBpbnMgPSBcJiMzNDtncGlvNTZcJiMzNDs7XG4mIzQzO1x0XHRcdGZ1bmN0aW9uID0gXCYjMzQ7Z3Bpb1wmIzM0OztcbiYjNDM7XHRcdFx0ZHJpdmUtc3RyZW5ndGggPSBcdTAwM2MyXHUwMDNlO1xuJiM0MztcdFx0XHRiaWFzLXB1bGwtdXA7XG4mIzQzO1x0XHR9O1xuJiM0MztcdH07XG4mIzQzO1xuIFx0c2RjMl9jYXJkX2RldF9uOiBzZGMyLWNhcmQtZGV0LXN0YXRlIHtcbiBcdFx0cGlucyA9IFwmIzM0O2dwaW82NVwmIzM0OztcbiBcdFx0ZnVuY3Rpb24gPSBcJiMzNDtncGlvXCYjMzQ7O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jIGIvZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmNcbmluZGV4IGFmMGZhOGJkOTcwYjQuLjU2MzQ3MGNiOTI4ZGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmNcbkBAIC0yMCw2ICYjNDM7MjAsOSBAQFxuIFx0XHRcdFx0TkZDX1BST1RPX0lTTzE0NDQzX0JfTUFTSyB8IFxcXG4gXHRcdFx0XHRORkNfUFJPVE9fSVNPMTU2OTNfTUFTSylcbiBcbiYjNDM7I2RlZmluZSBTM05STjRWX0hXUkVHX05BTUVcdFwmIzM0O3NhbXN1bmcvczNucm40di9od3JlZy5iaW5cJiMzNDtcbiYjNDM7I2RlZmluZSBTM05STjRWX1NXUkVHX05BTUVcdFwmIzM0O3NhbXN1bmcvczNucm40di9zd3JlZy5iaW5cJiMzNDtcbiYjNDM7XG4gc3RhdGljIGludCBzM2Z3cm41X2Zpcm13YXJlX2luaXQoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3QgczNmd3JuNV9md19pbmZvICpmd19pbmZvID0gXHUwMDI2aW5mby1cdTAwM2Vmd19pbmZvO1xuQEAgLTc0LDYgJiM0Mzs3NywyMiBAQCBzdGF0aWMgaW50IHMzZndybjVfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8pXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBzM2Z3cm41X25jaV9pbml0KHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHMzZndybjVfaW5mbyAqaW5mbyA9IG5jaV9nZXRfZHJ2ZGF0YShuZGV2KTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKGluZm8tXHUwMDNldmFyaWFudCA9PSBTM0ZXUk41X1ZBUklBTlRfUzNOUk40Vikge1xuJiM0MztcdFx0cmV0ID0gczNmd3JuNV9uY2lfY2xrX2NmZyhpbmZvKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGRldl9lcnIoXHUwMDI2bmRldi1cdTAwM2VuZmNfZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcJiMzNDtmYWlsZWQgdG8gY29uZmlndXJlIHRoZSByZWZlcmVuY2UgY2xvY2s6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHJldCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgczNmd3JuNV9uY2lfb3BlbihzdHJ1Y3QgbmNpX2RldiAqbmRldilcbiB7XG4gXHRzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xuQEAgLTEyNyw2ICYjNDM7MTQ2LDE1IEBAIHN0YXRpYyBpbnQgczNmd3JuNV9uY2lfcG9zdF9zZXR1cChzdHJ1Y3QgbmNpX2RldiAqbmRldilcbiBcdHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8gPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XG4gXHRpbnQgcmV0O1xuIFxuJiM0MztcdGlmIChpbmZvLVx1MDAzZXZhcmlhbnQgPT0gUzNGV1JONV9WQVJJQU5UX1MzTlJONFYpIHtcbiYjNDM7XHRcdHJldCA9IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsKGluZm8sIFMzTlJONFZfSFdSRUdfTkFNRSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIFMzTlJONFZfU1dSRUdfTkFNRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRkZXZfd2FybihcdTAwMjZuZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdCBcJiMzNDtSRiBjYWxpYnJhdGlvbiBkYXRhIHVwZGF0ZSBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChzM2Z3cm41X2Zpcm13YXJlX2luaXQoaW5mbykpIHtcbiBcdFx0Ly9za2lwIGJvb3Rsb2FkZXIgbW9kZVxuIFx0XHRyZXR1cm4gMDtcbkBAIC0xNDksNiAmIzQzOzE3Nyw3IEBAIHN0YXRpYyBpbnQgczNmd3JuNV9uY2lfcG9zdF9zZXR1cChzdHJ1Y3QgbmNpX2RldiAqbmRldilcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuY2lfb3BzIHMzZndybjVfbmNpX29wcyA9IHtcbiYjNDM7XHQuaW5pdCA9IHMzZndybjVfbmNpX2luaXQsXG4gXHQub3BlbiA9IHMzZndybjVfbmNpX29wZW4sXG4gXHQuY2xvc2UgPSBzM2Z3cm41X25jaV9jbG9zZSxcbiBcdC5zZW5kID0gczNmd3JuNV9uY2lfc2VuZCxcbkBAIC0xNTgsNyAmIzQzOzE4Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmNpX29wcyBzM2Z3cm41X25jaV9vcHMgPSB7XG4gfTtcbiBcbiBpbnQgczNmd3JuNV9wcm9iZShzdHJ1Y3QgbmNpX2RldiAqKm5kZXYsIHZvaWQgKnBoeV9pZCwgc3RydWN0IGRldmljZSAqcGRldixcbi1cdGNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHMpXG4mIzQzO1x0Y29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcywgZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudClcbiB7XG4gXHRzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvO1xuIFx0aW50IHJldDtcbkBAIC0xNzAsNiAmIzQzOzE5OSw3IEBAIGludCBzM2Z3cm41X3Byb2JlKHN0cnVjdCBuY2lfZGV2ICoqbmRldiwgdm9pZCAqcGh5X2lkLCBzdHJ1Y3QgZGV2aWNlICpwZGV2LFxuIFx0aW5mby1cdTAwM2VwaHlfaWQgPSBwaHlfaWQ7XG4gXHRpbmZvLVx1MDAzZXBkZXYgPSBwZGV2O1xuIFx0aW5mby1cdTAwM2VwaHlfb3BzID0gcGh5X29wcztcbiYjNDM7XHRpbmZvLVx1MDAzZXZhcmlhbnQgPSB2YXJpYW50O1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZpbmZvLVx1MDAzZW11dGV4KTtcbiBcbiBcdHMzZndybjVfc2V0X21vZGUoaW5mbywgUzNGV1JONV9NT0RFX0NPTEQpO1xuQEAgLTIyNSwzICYjNDM7MjU1LDUgQEAgRVhQT1JUX1NZTUJPTChzM2Z3cm41X3JlY3ZfZnJhbWUpO1xuIE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1NhbXN1bmcgUzNGV1JONSBORkMgZHJpdmVyXCYjMzQ7KTtcbiBNT0RVTEVfQVVUSE9SKFwmIzM0O1JvYmVydCBCYWxkeWdhIFx1MDAzY3IuYmFsZHlnYUBzYW1zdW5nLmNvbVx1MDAzZVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9GSVJNV0FSRShTM05STjRWX0hXUkVHX05BTUUpO1xuJiM0MztNT0RVTEVfRklSTVdBUkUoUzNOUk40Vl9TV1JFR19OQU1FKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jIGIvZHJpdmVycy9uZmMvczNmd3JuNS9pMmMuY1xuaW5kZXggNGJhNzYyNjExNzExOC4uODg0NDIwYWM4M2I1YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvaTJjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmZjL3MzZndybjUvaTJjLmNcbkBAIC0xMSwxMyAmIzQzOzExLDEyIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZ3Bpby9jb25zdW1lci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25mYy9uZmMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O3BoeV9jb21tb24uaFwmIzM0O1xuIFxuLSNkZWZpbmUgUzNGV1JONV9JMkNfRFJJVkVSX05BTUUgXCYjMzQ7czNmd3JuNV9pMmNcJiMzNDtcbi1cbiBzdHJ1Y3QgczNmd3JuNV9pMmNfcGh5IHtcbiBcdHN0cnVjdCBwaHlfY29tbW9uIGNvbW1vbjtcbiBcdHN0cnVjdCBpMmNfY2xpZW50ICppMmNfZGV2O1xuQEAgLTE0Niw2ICYjNDM7MTQ1LDcgQEAgc3RhdGljIGlycXJldHVybl90IHMzZndybjVfaTJjX2lycV90aHJlYWRfZm4oaW50IGlycSwgdm9pZCAqcGh5X2lkKVxuIFxuIHN0YXRpYyBpbnQgczNmd3JuNV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbiB7XG4mIzQzO1x0ZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudDtcbiBcdHN0cnVjdCBzM2Z3cm41X2kyY19waHkgKnBoeTtcbiBcdGludCByZXQ7XG4gXG5AQCAtMTYwLDYgJiM0MzsxNjAsMTEgQEAgc3RhdGljIGludCBzM2Z3cm41X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuIFx0cGh5LVx1MDAzZWkyY19kZXYgPSBjbGllbnQ7XG4gXHRpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBwaHkpO1xuIFxuJiM0MztcdHJldCA9IGRldm1fcmVndWxhdG9yX2dldF9lbmFibGUoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgXCYjMzQ7cHZkZFwmIzM0Oyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYsIHJldCxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBlbmFibGUgcHZkZFxcblwmIzM0Oyk7XG4mIzQzO1xuIFx0cGh5LVx1MDAzZWNvbW1vbi5ncGlvX2VuID0gZGV2bV9ncGlvZF9nZXQoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgXCYjMzQ7ZW5cJiMzNDssIEdQSU9EX09VVF9ISUdIKTtcbiBcdGlmIChJU19FUlIocGh5LVx1MDAzZWNvbW1vbi5ncGlvX2VuKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIocGh5LVx1MDAzZWNvbW1vbi5ncGlvX2VuKTtcbkBAIC0xNzksMTQgJiM0MzsxODQsMTUgQEAgc3RhdGljIGludCBzM2Z3cm41X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcdTAwMjZjbGllbnQtXHUwMDNlZGV2LCBQVFJfRVJSKHBoeS1cdTAwM2VjbGspLFxuIFx0XHRcdFx0ICAgICBcJiMzNDtmYWlsZWQgdG8gZ2V0IGNsb2NrXFxuXCYjMzQ7KTtcbiBcbiYjNDM7XHR2YXJpYW50ID0gKHVpbnRwdHJfdClpMmNfZ2V0X21hdGNoX2RhdGEoY2xpZW50KTtcbiBcdHJldCA9IHMzZndybjVfcHJvYmUoXHUwMDI2cGh5LVx1MDAzZWNvbW1vbi5uZGV2LCBwaHksIFx1MDAyNnBoeS1cdTAwM2VpMmNfZGV2LVx1MDAzZWRldixcbi1cdFx0XHQgICAgXHUwMDI2aTJjX3BoeV9vcHMpO1xuJiM0MztcdFx0XHQgICAgXHUwMDI2aTJjX3BoeV9vcHMsIHZhcmlhbnQpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgcGh5LVx1MDAzZWkyY19kZXYtXHUwMDNlaXJxLCBOVUxMLFxuIFx0XHRzM2Z3cm41X2kyY19pcnFfdGhyZWFkX2ZuLCBJUlFGX09ORVNIT1QsXG4tXHRcdFMzRldSTjVfSTJDX0RSSVZFUl9OQU1FLCBwaHkpO1xuJiM0MztcdFx0XCYjMzQ7czNmd3JuNV9pMmNcJiMzNDssIHBoeSk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIHMzZndybjVfcmVtb3ZlO1xuIFxuQEAgLTIwNSwyMSAmIzQzOzIxMSwyNSBAQCBzdGF0aWMgdm9pZCBzM2Z3cm41X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHMzZndybjVfaTJjX2lkX3RhYmxlW10gPSB7XG4tXHR7IC5uYW1lID0gUzNGV1JONV9JMkNfRFJJVkVSX05BTUUgfSxcbiYjNDM7XHR7IC5uYW1lID0gXCYjMzQ7czNmd3JuNV9pMmNcJiMzNDssIC5kcml2ZXJfZGF0YSA9IFMzRldSTjVfVkFSSUFOVF9GV0RMIH0sXG4mIzQzO1x0eyAubmFtZSA9IFwmIzM0O3MzbnJuNHZcJiMzNDssIC5kcml2ZXJfZGF0YSA9IFMzRldSTjVfVkFSSUFOVF9TM05STjRWIH0sXG4gXHR7IH1cbiB9O1xuIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzM2Z3cm41X2kyY19pZF90YWJsZSk7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfczNmd3JuNV9pMmNfbWF0Y2hbXSA9IHtcbi1cdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtzYW1zdW5nLHMzZndybjUtaTJjXCYjMzQ7IH0sXG4mIzQzO1x0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3NhbXN1bmcsczNmd3JuNS1pMmNcJiMzNDssXG4mIzQzO1x0ICAuZGF0YSA9ICh2b2lkICopUzNGV1JONV9WQVJJQU5UX0ZXREwgfSxcbiYjNDM7XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7c2Ftc3VuZyxzM25ybjR2XCYjMzQ7LFxuJiM0MztcdCAgLmRhdGEgPSAodm9pZCAqKVMzRldSTjVfVkFSSUFOVF9TM05STjRWIH0sXG4gXHR7IH1cbiB9O1xuIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9mX3MzZndybjVfaTJjX21hdGNoKTtcbiBcbiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgczNmd3JuNV9pMmNfZHJpdmVyID0ge1xuIFx0LmRyaXZlciA9IHtcbi1cdFx0Lm5hbWUgPSBTM0ZXUk41X0kyQ19EUklWRVJfTkFNRSxcbi1cdFx0Lm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKG9mX3MzZndybjVfaTJjX21hdGNoKSxcbiYjNDM7XHRcdC5uYW1lID0gXCYjMzQ7czNmd3JuNV9pMmNcJiMzNDssXG4mIzQzO1x0XHQub2ZfbWF0Y2hfdGFibGUgPSBvZl9zM2Z3cm41X2kyY19tYXRjaCxcbiBcdH0sXG4gXHQucHJvYmUgPSBzM2Z3cm41X2kyY19wcm9iZSxcbiBcdC5yZW1vdmUgPSBzM2Z3cm41X2kyY19yZW1vdmUsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuYyBiL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmNcbmluZGV4IDVhOWRlMTFiYmVjZWEuLjM4MWFhN2JmMjlhMjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jXG5AQCAtOCw2ICYjNDM7OCw5IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGxldGlvbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmlybXdhcmUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9taW5tYXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtzM2Z3cm41LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtuY2kuaFwmIzM0O1xuQEAgLTIwLDcgJiM0MzsyMywyNCBAQCBzdGF0aWMgaW50IHMzZndybjVfbmNpX3Byb3BfcnNwKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWNvbnN0IHN0cnVjdCBuY2lfZHJpdmVyX29wcyBzM2Z3cm41X25jaV9wcm9wX29wc1s0XSA9IHtcbiYjNDM7LypcbiYjNDM7ICogRFVBTF9PUFRJT04gcmVzcG9uc2VzIGFyZSBub3QgdW5pZm9ybTogR0VUX1ZFUiBhbnN3ZXJzIHdpdGggdGhlIGNoaXAmIzM5O3NcbiYjNDM7ICogY2FsaWJyYXRpb24gdmVyc2lvbnMgaW5zdGVhZCBvZiBhIHN0YXR1cyBieXRlLCBzbyBzdGFzaCB0aGUgcGF5bG9hZCBmb3JcbiYjNDM7ICogdGhlIGNhbGxlciBiZWZvcmUgY29tcGxldGluZyB0aGUgcmVxdWVzdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgczNmd3JuNV9uY2lfZHVhbF9yc3Aoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xuJiM0MztcbiYjNDM7XHRpbmZvLVx1MDAzZWR1YWxfcnNwX2xlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgc2tiLVx1MDAzZWxlbixcbiYjNDM7XHRcdFx0XHQgICBzaXplb2YoaW5mby1cdTAwM2VkdWFsX3JzcCkpO1xuJiM0MztcdG1lbWNweShpbmZvLVx1MDAzZWR1YWxfcnNwLCBza2ItXHUwMDNlZGF0YSwgaW5mby1cdTAwM2VkdWFsX3JzcF9sZW4pO1xuJiM0MztcbiYjNDM7XHRuY2lfcmVxX2NvbXBsZXRlKG5kZXYsIHNrYi1cdTAwM2VkYXRhWzBdKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzVdID0ge1xuIFx0e1xuIFx0XHQub3Bjb2RlID0gbmNpX29wY29kZV9wYWNrKE5DSV9HSURfUFJPUFJJRVRBUlksXG4gXHRcdFx0XHROQ0lfUFJPUF9TRVRfUkZSRUcpLFxuQEAgLTQxLDYgJiM0Mzs2MSwxMSBAQCBjb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNF0gPSB7XG4gXHRcdFx0XHROQ0lfUFJPUF9GV19DRkcpLFxuIFx0XHQucnNwID0gczNmd3JuNV9uY2lfcHJvcF9yc3AsXG4gXHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdC5vcGNvZGUgPSBuY2lfb3Bjb2RlX3BhY2soTkNJX0dJRF9QUk9QUklFVEFSWSxcbiYjNDM7XHRcdFx0XHROQ0lfUFJPUF9EVUFMX09QVElPTiksXG4mIzQzO1x0XHQucnNwID0gczNmd3JuNV9uY2lfZHVhbF9yc3AsXG4mIzQzO1x0fSxcbiB9O1xuIFxuICNkZWZpbmUgUzNGV1JONV9SRlJFR19TRUNUSU9OX1NJWkUgMjUyXG5AQCAtMTE3LDMgJiM0MzsxNDIsMTU0IEBAIGludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmUoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqZndfbmFtZSlcbiBcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBUaGUgUzNOUk40ViBleHBlY3RzIHRoZSBzaW5nbGUtYnl0ZSBGV19DRkcgZm9ybSAoanVzdCB0aGUgY2xvY2stc3BlZWRcbiYjNDM7ICogc2VsZWN0b3IpLlxuJiM0MzsgKi9cbiYjNDM7aW50IHMzZndybjVfbmNpX2Nsa19jZmcoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdHU4IGNsa19zcGVlZCA9IE5DSV9QUk9QX0ZXX0NGR19DTEtfU1BFRUQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBuY2lfcHJvcF9jbWQoaW5mby1cdTAwM2VuZGV2LCBOQ0lfUFJPUF9GV19DRkcsIDEsIFx1MDAyNmNsa19zcGVlZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEFuIDgtYnl0ZSBjYWxpYnJhdGlvbiB2ZXJzaW9uOiA1IGJ5dGVzIG9mIGRhdGUgc3RhbXAgYW5kIGEgMy1ieXRlIENTQ1xuJiM0MzsgKiBjb2RlLCBhdCBmaXhlZCBvZmZzZXRzIGJvdGggaW4gYSBibG9iJiMzOTtzIDE2LWJ5dGUgdGFpbCBhbmQgaW4gZWFjaCBoYWxmIG9mXG4mIzQzOyAqIHRoZSBHRVRfVkVSIHJlc3BvbnNlIChIVyBhdCBvZmZzZXQgMCwgU1cgYXQgb2Zmc2V0IDE1KS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIHMzZndybjVfbmNpX2R1YWxfdmVyc2lvbl9lcShjb25zdCB1OCAqYSwgY29uc3QgdTggKmIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gIW1lbWNtcChhICYjNDM7IDUsIGIgJiM0MzsgNSwgNSkgXHUwMDI2XHUwMDI2ICFtZW1jbXAoYSAmIzQzOyAxMiwgYiAmIzQzOyAxMiwgMyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHMzZndybjVfbmNpX2R1YWxfY2FsX2N1cnJlbnQoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbyxcbiYjNDM7XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmh3X2Z3LFxuJiM0MztcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqc3dfZncpXG4mIzQzO3tcbiYjNDM7XHRpZiAoaW5mby1cdTAwM2VkdWFsX3JzcF9sZW4gXHUwMDNjIDMwKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGlmIChod19mdy1cdTAwM2VzaXplIFx1MDAzYyAxNiB8fCBzd19mdy1cdTAwM2VzaXplIFx1MDAzYyAxNilcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHMzZndybjVfbmNpX2R1YWxfdmVyc2lvbl9lcShpbmZvLVx1MDAzZWR1YWxfcnNwLFxuJiM0MztcdFx0XHRcdFx0ICAgaHdfZnctXHUwMDNlZGF0YSAmIzQzOyBod19mdy1cdTAwM2VzaXplIC0gMTYpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICBzM2Z3cm41X25jaV9kdWFsX3ZlcnNpb25fZXEoaW5mby1cdTAwM2VkdWFsX3JzcCAmIzQzOyAxNSxcbiYjNDM7XHRcdFx0XHRcdCAgIHN3X2Z3LVx1MDAzZWRhdGEgJiM0Mzsgc3dfZnctXHUwMDNlc2l6ZSAtIDE2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUzNOUk40ViBSRiBjYWxpYnJhdGlvbiBkYXRhIHVwZGF0ZTogdGhlIEhXIGFuZCBTVyBibG9icyBtZXJnZWQgaW50byBvbmVcbiYjNDM7ICogc3RyZWFtIChIVyBmaXJzdCksIHB1c2hlZCBhcyBTVEFSVF9VUERBVEUsIG9uZSBTRVRfT1BUSU9OIHBlciAyNTItYnl0ZVxuJiM0MzsgKiBzZWN0aW9uLCB0aGVuIFNUT1BfVVBEQVRFIGNhcnJ5aW5nIGEgMTYtYml0IGNoZWNrc3VtIChydW5uaW5nIHN1bSBvZiB0aGVcbiYjNDM7ICogbWVyZ2VkIHN0cmVhbSBhcyAzMi1iaXQgd29yZHMpLlxuJiM0MzsgKi9cbiYjNDM7aW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdFx0ICBjb25zdCBjaGFyICpod19uYW1lLCBjb25zdCBjaGFyICpzd19uYW1lKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5jaV9wcm9wX2R1YWxfc2V0X29wdGlvbl9jbWQgc2V0X29wdGlvbjtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZpbmZvLVx1MDAzZW5kZXYtXHUwMDNlbmZjX2Rldi1cdTAwM2VkZXY7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpod19mdywgKnN3X2Z3O1xuJiM0MztcdHNpemVfdCBtZXJnZWRfc2l6ZSwgaSwgbGVuO1xuJiM0MztcdHU4ICptZXJnZWQ7XG4mIzQzO1x0dTggc3RvcF9jbWRbM107XG4mIzQzO1x0dTMyIGNoZWNrc3VtO1xuJiM0MztcdHU4IHN1Yl9vaWQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZmlybXdhcmVfcmVxdWVzdF9ub3dhcm4oXHUwMDI2aHdfZncsIGh3X25hbWUsIGRldik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0gZmlybXdhcmVfcmVxdWVzdF9ub3dhcm4oXHUwMDI2c3dfZncsIHN3X25hbWUsIGRldik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gb3V0X2h3O1xuJiM0MztcbiYjNDM7XHRtZXJnZWRfc2l6ZSA9IGh3X2Z3LVx1MDAzZXNpemUgJiM0Mzsgc3dfZnctXHUwMDNlc2l6ZTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgc3RyZWFtIGlzIGNoZWNrc3VtbWVkIGFzIDMyLWJpdCB3b3JkcyBhbmQgcHVzaGVkIGluIGF0IG1vc3QgMjU2XG4mIzQzO1x0ICogc2VjdGlvbnMgKHRoZSBzZWN0aW9uIGluZGV4IGlzIGEgc2luZ2xlIGJ5dGUpOyByZWplY3QgYmxvYnMgdGhhdFxuJiM0MztcdCAqIHdvdWxkIHNpbGVudGx5IGJyZWFrIGVpdGhlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIW1lcmdlZF9zaXplIHx8IG1lcmdlZF9zaXplICUgNCB8fFxuJiM0MztcdCAgICBtZXJnZWRfc2l6ZSBcdTAwM2UgMjU2ICogTkNJX1BST1BfRFVBTF9TRUNUSU9OX1NJWkUpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtpbnZhbGlkIGNhbGlicmF0aW9uIGRhdGEgc2l6ZTogJXp1XFxuXCYjMzQ7LCBtZXJnZWRfc2l6ZSk7XG4mIzQzO1x0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBvdXRfc3c7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFzayB0aGUgY2hpcCBmb3IgaXRzIGN1cnJlbnQgY2FsaWJyYXRpb24gdmVyc2lvbnMgYW5kIHNraXAgdGhlXG4mIzQzO1x0ICogdXBsb2FkIHdoZW4gYm90aCBhbHJlYWR5IG1hdGNoIHRoZSBibG9iczsgYSBtaXNtYXRjaCBvciBhblxuJiM0MztcdCAqIHVucGFyc2VhYmxlIGFuc3dlciBtZWFucyB0aGUgdXBsb2FkIHByb2NlZWRzLiBHRVRfVkVSIGFuc3dlcnMgd2l0aFxuJiM0MztcdCAqIHZlcnNpb25zLCBub3QgYSBzdGF0dXMgYnl0ZSwgc28gbmNpX3Byb3BfY21kKCkmIzM5O3MgcmV0dXJuIGNhcnJpZXMgbm9cbiYjNDM7XHQgKiBtZWFuaW5nIGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3ViX29pZCA9IE5DSV9QUk9QX0RVQUxfU1VCX0dFVF9WRVI7XG4mIzQzO1x0aW5mby1cdTAwM2VkdWFsX3JzcF9sZW4gPSAwO1xuJiM0MztcdG5jaV9wcm9wX2NtZChpbmZvLVx1MDAzZW5kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLCAxLCBcdTAwMjZzdWJfb2lkKTtcbiYjNDM7XHRpZiAoczNmd3JuNV9uY2lfZHVhbF9jYWxfY3VycmVudChpbmZvLCBod19mdywgc3dfZncpKSB7XG4mIzQzO1x0XHRkZXZfZGJnKGRldiwgXCYjMzQ7Y2FsaWJyYXRpb24gZGF0YSBhbHJlYWR5IGN1cnJlbnRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0ID0gMDtcbiYjNDM7XHRcdGdvdG8gb3V0X3N3O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWVyZ2VkID0ga3ZtYWxsb2MobWVyZ2VkX3NpemUsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghbWVyZ2VkKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBvdXRfc3c7XG4mIzQzO1x0fVxuJiM0MztcdG1lbWNweShtZXJnZWQsIGh3X2Z3LVx1MDAzZWRhdGEsIGh3X2Z3LVx1MDAzZXNpemUpO1xuJiM0MztcdG1lbWNweShtZXJnZWQgJiM0MzsgaHdfZnctXHUwMDNlc2l6ZSwgc3dfZnctXHUwMDNlZGF0YSwgc3dfZnctXHUwMDNlc2l6ZSk7XG4mIzQzO1xuJiM0MztcdGNoZWNrc3VtID0gMDtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpICYjNDM7IDQgXHUwMDNjPSBtZXJnZWRfc2l6ZTsgaSAmIzQzOz0gNClcbiYjNDM7XHRcdGNoZWNrc3VtICYjNDM7PSBnZXRfdW5hbGlnbmVkX2xlMzIobWVyZ2VkICYjNDM7IGkpO1xuJiM0MztcbiYjNDM7XHQvKiBTVEFSVF9VUERBVEUgKi9cbiYjNDM7XHRzdWJfb2lkID0gTkNJX1BST1BfRFVBTF9TVUJfU1RBUlRfVVBEQVRFO1xuJiM0MztcdHJldCA9IG5jaV9wcm9wX2NtZChpbmZvLVx1MDAzZW5kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLCAxLCBcdTAwMjZzdWJfb2lkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7VW5hYmxlIHRvIHN0YXJ0IGNhbGlicmF0aW9uIGRhdGEgdXBkYXRlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogU0VUX09QVElPTiBwZXIgc2VjdGlvbiAqL1xuJiM0MztcdHNldF9vcHRpb24uc3ViX29pZCA9IE5DSV9QUk9QX0RVQUxfU1VCX1NFVF9PUFRJT047XG4mIzQzO1x0c2V0X29wdGlvbi5pbmRleCA9IDA7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWVyZ2VkX3NpemU7IGkgJiM0Mzs9IE5DSV9QUk9QX0RVQUxfU0VDVElPTl9TSVpFKSB7XG4mIzQzO1x0XHRsZW4gPSBtaW5fdChzaXplX3QsIG1lcmdlZF9zaXplIC0gaSwgTkNJX1BST1BfRFVBTF9TRUNUSU9OX1NJWkUpO1xuJiM0MztcdFx0bWVtY3B5KHNldF9vcHRpb24uZGF0YSwgbWVyZ2VkICYjNDM7IGksIGxlbik7XG4mIzQzO1x0XHRyZXQgPSBuY2lfcHJvcF9jbWQoaW5mby1cdTAwM2VuZGV2LCBOQ0lfUFJPUF9EVUFMX09QVElPTixcbiYjNDM7XHRcdFx0XHQgICBsZW4gJiM0MzsgMiwgKF9fdTggKilcdTAwMjZzZXRfb3B0aW9uKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O2NhbGlicmF0aW9uIGRhdGEgdXBkYXRlIGVycm9yOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRyZXQpO1xuJiM0MztcdFx0XHQvKiBBYm9ydCBmb3JtOiBTVE9QX1VQREFURSB3aXRoIHRoZSBzdWItT0lEIGFsb25lLiAqL1xuJiM0MztcdFx0XHRzdWJfb2lkID0gTkNJX1BST1BfRFVBTF9TVUJfU1RPUF9VUERBVEU7XG4mIzQzO1x0XHRcdG5jaV9wcm9wX2NtZChpbmZvLVx1MDAzZW5kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLCAxLFxuJiM0MztcdFx0XHRcdCAgICAgXHUwMDI2c3ViX29pZCk7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c2V0X29wdGlvbi5pbmRleCYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBTVE9QX1VQREFURSB3aXRoIGNoZWNrc3VtICovXG4mIzQzO1x0c3RvcF9jbWRbMF0gPSBOQ0lfUFJPUF9EVUFMX1NVQl9TVE9QX1VQREFURTtcbiYjNDM7XHRwdXRfdW5hbGlnbmVkX2xlMTYoY2hlY2tzdW0sIFx1MDAyNnN0b3BfY21kWzFdKTtcbiYjNDM7XHRyZXQgPSBuY2lfcHJvcF9jbWQoaW5mby1cdTAwM2VuZGV2LCBOQ0lfUFJPUF9EVUFMX09QVElPTiwgMywgc3RvcF9jbWQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtVbmFibGUgdG8gc3RvcCBjYWxpYnJhdGlvbiBkYXRhIHVwZGF0ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRldl9kYmcoZGV2LCBcJiMzNDtjYWxpYnJhdGlvbiBkYXRhIHVwZGF0ZTogc3VjY2Vzc1xcblwmIzM0Oyk7XG4mIzQzO291dDpcbiYjNDM7XHRrdmZyZWUobWVyZ2VkKTtcbiYjNDM7b3V0X3N3OlxuJiM0MztcdHJlbGVhc2VfZmlybXdhcmUoc3dfZncpO1xuJiM0MztvdXRfaHc6XG4mIzQzO1x0cmVsZWFzZV9maXJtd2FyZShod19mdyk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmggYi9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oXG5pbmRleCBiYzRiY2UyYmJjNGQ5Li40NTNhMWM5ZDY1ZWIwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaFxuQEAgLTQwLDYgJiM0Mzs0MCw5IEBAIHN0cnVjdCBuY2lfcHJvcF9zdG9wX3JmcmVnX3JzcCB7XG4gXG4gI2RlZmluZSBOQ0lfUFJPUF9GV19DRkdcdFx0MHgyOFxuIFxuJiM0MzsvKiBTM05STjRWIHNpbmdsZS1ieXRlIEZXX0NGRyBwYXlsb2FkOyAweDExIHNlbGVjdHMgdGhlIDE5LjIgTUh6IHJlZmVyZW5jZS4gKi9cbiYjNDM7I2RlZmluZSBOQ0lfUFJPUF9GV19DRkdfQ0xLX1NQRUVEXHQweDExXG4mIzQzO1xuIHN0cnVjdCBuY2lfcHJvcF9md19jZmdfY21kIHtcbiBcdF9fdTggY2xrX3R5cGU7XG4gXHRfX3U4IGNsa19zcGVlZDtcbkBAIC01MCw3ICYjNDM7NTMsMjUgQEAgc3RydWN0IG5jaV9wcm9wX2Z3X2NmZ19yc3Age1xuIFx0X191OCBzdGF0dXM7XG4gfTtcbiBcbi1leHRlcm4gY29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzRdO1xuJiM0MzsjZGVmaW5lIE5DSV9QUk9QX0RVQUxfT1BUSU9OXHRcdDB4MmFcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTkNJX1BST1BfRFVBTF9TVUJfR0VUX1ZFUlx0MHgwMFxuJiM0MzsjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU1VCX1NUQVJUX1VQREFURVx0MHgwMVxuJiM0MzsjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU1VCX1NFVF9PUFRJT05cdDB4MDJcbiYjNDM7I2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NVQl9TVE9QX1VQREFURVx0MHgwM1xuJiM0MztcbiYjNDM7I2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRVx0MjUyXG4mIzQzO1xuJiM0MztzdHJ1Y3QgbmNpX3Byb3BfZHVhbF9zZXRfb3B0aW9uX2NtZCB7XG4mIzQzO1x0X191OCBzdWJfb2lkO1xuJiM0MztcdF9fdTggaW5kZXg7XG4mIzQzO1x0X191OCBkYXRhW05DSV9QUk9QX0RVQUxfU0VDVElPTl9TSVpFXTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNV07XG4gaW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZShzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLCBjb25zdCBjaGFyICpmd19uYW1lKTtcbiYjNDM7aW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdFx0ICBjb25zdCBjaGFyICpod19uYW1lLCBjb25zdCBjaGFyICpzd19uYW1lKTtcbiYjNDM7aW50IHMzZndybjVfbmNpX2Nsa19jZmcoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbyk7XG4gXG4gI2VuZGlmIC8qIF9fTE9DQUxfUzNGV1JONV9OQ0lfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L3MzZndybjUuaCBiL2RyaXZlcnMvbmZjL3MzZndybjUvczNmd3JuNS5oXG5pbmRleCAyYjQ5MjIzNjA5MGI4Li42M2Y2NzlmMTcxNjY2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS9zM2Z3cm41LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmZjL3MzZndybjUvczNmd3JuNS5oXG5AQCAtMjEsNiAmIzQzOzIxLDEzIEBAIGVudW0gczNmd3JuNV9tb2RlIHtcbiBcdFMzRldSTjVfTU9ERV9GVyxcbiB9O1xuIFxuJiM0MztlbnVtIHMzZndybjVfdmFyaWFudCB7XG4mIzQzO1x0LyogUzNGV1JONSAvIFMzRldSTjgyOiBmaXJtd2FyZSBpcyBkb3dubG9hZGVkIGJ5IHRoaXMgZHJpdmVyICovXG4mIzQzO1x0UzNGV1JONV9WQVJJQU5UX0ZXREwsXG4mIzQzO1x0LyogUzNOUk40Vjogbm8gZmlybXdhcmUgZG93bmxvYWQ7IEZXX0NGRyAmIzQzOyBEVUFMX09QVElPTiBicmluZy11cCAqL1xuJiM0MztcdFMzRldSTjVfVkFSSUFOVF9TM05STjRWLFxuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3QgczNmd3JuNV9waHlfb3BzIHtcbiBcdHZvaWQgKCpzZXRfd2FrZSkodm9pZCAqaWQsIGJvb2wgc2xlZXApO1xuIFx0dm9pZCAoKnNldF9tb2RlKSh2b2lkICppZCwgZW51bSBzM2Z3cm41X21vZGUpO1xuQEAgLTM2LDYgJiM0Mzs0MywxMSBAQCBzdHJ1Y3QgczNmd3JuNV9pbmZvIHtcbiBcdGNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHM7XG4gXG4gXHRzdHJ1Y3QgczNmd3JuNV9md19pbmZvIGZ3X2luZm87XG4mIzQzO1x0ZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudDtcbiYjNDM7XG4mIzQzO1x0LyogTGFzdCBEVUFMX09QVElPTiByZXNwb25zZSBwYXlsb2FkIChHRVRfVkVSIGNhcnJpZXMgdmVyc2lvbnMpLiAqL1xuJiM0MztcdHU4IGR1YWxfcnNwWzMyXTtcbiYjNDM7XHR1OCBkdWFsX3JzcF9sZW47XG4gXG4gXHRzdHJ1Y3QgbXV0ZXggbXV0ZXg7XG4gfTtcbkBAIC03OCw3ICYjNDM7OTAsNyBAQCBzdGF0aWMgaW5saW5lIGludCBzM2Z3cm41X3dyaXRlKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sIHN0cnVjdCBza19idWZmICpza2IpXG4gfVxuIFxuIGludCBzM2Z3cm41X3Byb2JlKHN0cnVjdCBuY2lfZGV2ICoqbmRldiwgdm9pZCAqcGh5X2lkLCBzdHJ1Y3QgZGV2aWNlICpwZGV2LFxuLVx0Y29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcyk7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcywgZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudCk7XG4gdm9pZCBzM2Z3cm41X3JlbW92ZShzdHJ1Y3QgbmNpX2RldiAqbmRldik7XG4gXG4gaW50IHMzZndybjVfcmVjdl9mcmFtZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L3VhcnQuYyBiL2RyaXZlcnMvbmZjL3MzZndybjUvdWFydC5jXG5pbmRleCA4ZjE0MmEyNTUxMDE2Li43NTM5N2MzZGJjNThiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS91YXJ0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmZjL3MzZndybjUvdWFydC5jXG5AQCAtMTM2LDcgJiM0MzsxMzYsNyBAQCBzdGF0aWMgaW50IHMzZndybjgyX3VhcnRfcHJvYmUoc3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldilcbiBcdH1cbiBcbiBcdHJldCA9IHMzZndybjVfcHJvYmUoXHUwMDI2cGh5LVx1MDAzZWNvbW1vbi5uZGV2LCBwaHksIFx1MDAyNnBoeS1cdTAwM2VzZXJfZGV2LVx1MDAzZWRldixcbi1cdFx0XHQgICAgXHUwMDI2dWFydF9waHlfb3BzKTtcbiYjNDM7XHRcdFx0ICAgIFx1MDAyNnVhcnRfcGh5X29wcywgUzNGV1JONV9WQVJJQU5UX0ZXREwpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfc2VyZGV2O1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIyOjM1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkNfTkNJJiMzNDssCiAgICAmIzM0O05GQ19TM0ZXUk41X0kyQyYjMzQ7LAogICAgJiMzNDtORkNfUzNGV1JOODJfVUFSVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3MzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsJiMzNDssCiAgICAmIzM0O3MzZndybjVfbmNpX2Nsa19jZmcmIzM0OywKICAgICYjMzQ7czNmd3JuNV9uY2lfZHVhbF9yc3AmIzM0OywKICAgICYjMzQ7czNmd3JuNV9uY2lfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBzM25ybjR2IHZhcmlhbnQgdG8gdGhlIHMzZndybjUgTkZDIGRyaXZlci4gSXQgaW50cm9kdWNlcyBuZXcgTkNJIHByb3ByaWV0YXJ5IGNvbW1hbmRzIGFuZCByZXNwb25zZXMsIGFuZCBhIG5ldyBSRiBjb25maWd1cmF0aW9uIHJvdXRpbmUuIFRoZSBkcml2ZXIgaXMgcmVhY2hhYmxlIHZpYSB0aGUgTkNJIGludGVyZmFjZSBhbmQgSTJDL1VBUlQgYnVzZXMsIHdoaWNoIGNhbiBiZSBmdXp6ZWQgdXNpbmcgdmlydHVhbCBkZXZpY2VzIG9yIHN5emthbGxlciYjMzk7cyBOQ0kgc3VwcG9ydC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDdiNDAyMGFhZTA1Mjc2ZDRhNDdjM2ZiYWQ3MTUzZDdkYTMyZWZiOTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAyMjozNToyNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3NhbXN1bmcsczNmd3JuNS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9uZmMvc2Ftc3VuZyxzM2Z3cm41LnlhbWwKaW5kZXggMTJiYWVlNDU3NTJjNy4uNDBhNjk0NjY4MDJiYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9uZmMvc2Ftc3VuZyxzM2Z3cm41LnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9uZmMvc2Ftc3VuZyxzM2Z3cm41LnlhbWwKQEAgLTE0LDYgJiM0MzsxNCw3IEBAIHByb3BlcnRpZXM6CiAgICAgZW51bToKICAgICAgIC0gc2Ftc3VuZyxzM2Z3cm41LWkyYwogICAgICAgLSBzYW1zdW5nLHMzZndybjgyCiYjNDM7ICAgICAgLSBzYW1zdW5nLHMzbnJuNHYKIAogICBlbi1ncGlvczoKICAgICBtYXhJdGVtczogMQpAQCAtMjksNiAmIzQzOzMwLDkgQEAgcHJvcGVydGllczoKICAgY2xvY2tzOgogICAgIG1heEl0ZW1zOiAxCiAKJiM0MzsgIHB2ZGQtc3VwcGx5OgomIzQzOyAgICBkZXNjcmlwdGlvbjogUFZERCBwb3dlciBzdXBwbHkKJiM0MzsKICAgd2FrZS1ncGlvczoKICAgICBtYXhJdGVtczogMQogICAgIGRlc2NyaXB0aW9uOgpAQCAtNTgsMTIgJiM0Mzs2MiwyNSBAQCBhbGxPZjoKICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgIGNvbXBhdGlibGU6CiAgICAgICAgICAgY29udGFpbnM6Ci0gICAgICAgICAgICBjb25zdDogc2Ftc3VuZyxzM2Z3cm41LWkyYwomIzQzOyAgICAgICAgICAgIGVudW06CiYjNDM7ICAgICAgICAgICAgICAtIHNhbXN1bmcsczNmd3JuNS1pMmMKJiM0MzsgICAgICAgICAgICAgIC0gc2Ftc3VuZyxzM25ybjR2CiAgICAgdGhlbjoKICAgICAgIHJlcXVpcmVkOgogICAgICAgICAtIGludGVycnVwdHMKICAgICAgICAgLSByZWcKIAomIzQzOyAgIyBEZXBsb3llZCBEVHMgZm9yIHRoZSBvbGRlciBwYXJ0cyBuZXZlciBkZXNjcmliZWQgYSBzdXBwbHksIHNvIFBWREQgaXMKJiM0MzsgICMgb25seSByZXF1aXJlZCBmb3IgdGhlIG5ldyBkZXZpY2UuCiYjNDM7ICAtIGlmOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgICAgICBjb250YWluczoKJiM0MzsgICAgICAgICAgICBjb25zdDogc2Ftc3VuZyxzM25ybjR2CiYjNDM7ICAgIHRoZW46CiYjNDM7ICAgICAgcmVxdWlyZWQ6CiYjNDM7ICAgICAgICAtIHB2ZGQtc3VwcGx5CiYjNDM7CiBleGFtcGxlczoKICAgLSB8CiAgICAgI2luY2x1ZGUgJmx0O2R0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oJmd0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21pbG9zLWZhaXJwaG9uZS1mcDYuZHRzIGIvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21pbG9zLWZhaXJwaG9uZS1mcDYuZHRzCmluZGV4IGViZGNhMGUyZDJmM2EuLmJkYmE4NDgyNzVkYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9taWxvcy1mYWlycGhvbmUtZnA2LmR0cwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbWlsb3MtZmFpcnBob25lLWZwNi5kdHMKQEAgLTYwMSw5ICYjNDM7NjAxLDIyIEBAICZhbXA7Z2NjIHsKIH07CiAKICZhbXA7aTJjMSB7Ci0JLyogU2Ftc3VuZyBORkMgQCAweDI3ICovCi0KIAlzdGF0dXMgPSAmIzM0O29rYXkmIzM0OzsKJiM0MzsKJiM0MzsJbmZjQDI3IHsKJiM0MzsJCWNvbXBhdGlibGUgPSAmIzM0O3NhbXN1bmcsczNucm40diYjMzQ7OwomIzQzOwkJcmVnID0gJmx0OzB4MjcmZ3Q7OwomIzQzOwomIzQzOwkJaW50ZXJydXB0cy1leHRlbmRlZCA9ICZsdDsmYW1wO3RsbW0gMzEgSVJRX1RZUEVfRURHRV9SSVNJTkcmZ3Q7OwomIzQzOwkJZW4tZ3Bpb3MgPSAmbHQ7JmFtcDt0bG1tIDU2IEdQSU9fQUNUSVZFX0hJR0gmZ3Q7OwomIzQzOwkJd2FrZS1ncGlvcyA9ICZsdDsmYW1wO3RsbW0gNyBHUElPX0FDVElWRV9ISUdIJmd0OzsKJiM0MzsJCWNsb2NrcyA9ICZsdDsmYW1wO3JwbWhjYyBSUE1IX0xOX0JCX0NMSzImZ3Q7OwomIzQzOwomIzQzOwkJcHZkZC1zdXBwbHkgPSAmbHQ7JmFtcDt2cmVnX2wyMGImZ3Q7OwomIzQzOwomIzQzOwkJcGluY3RybC0wID0gJmx0OyZhbXA7bmZjX2RlZmF1bHQmZ3Q7OwomIzQzOwkJcGluY3RybC1uYW1lcyA9ICYjMzQ7ZGVmYXVsdCYjMzQ7OwomIzQzOwl9OwogfTsKIAogJmFtcDtpMmMzIHsKQEAgLTgyNSw2ICYjNDM7ODM4LDIyIEBAICZhbXA7dGxtbSB7CiAJCQkgICAgICAgJmx0OzEzIDEmZ3Q7LCAvKiBOQyAqLwogCQkJICAgICAgICZsdDs2MyAyJmd0OzsgLyogV0xBTiBVQVJUICovCiAKJiM0MzsJbmZjX2RlZmF1bHQ6IG5mYy1kZWZhdWx0LXN0YXRlIHsKJiM0MzsJCWlycS1waW5zIHsKJiM0MzsJCQlwaW5zID0gJiMzNDtncGlvMzEmIzM0OzsKJiM0MzsJCQlmdW5jdGlvbiA9ICYjMzQ7Z3BpbyYjMzQ7OwomIzQzOwkJCWRyaXZlLXN0cmVuZ3RoID0gJmx0OzImZ3Q7OwomIzQzOwkJCWJpYXMtZGlzYWJsZTsKJiM0MzsJCX07CiYjNDM7CiYjNDM7CQlwZC1waW5zIHsKJiM0MzsJCQlwaW5zID0gJiMzNDtncGlvNTYmIzM0OzsKJiM0MzsJCQlmdW5jdGlvbiA9ICYjMzQ7Z3BpbyYjMzQ7OwomIzQzOwkJCWRyaXZlLXN0cmVuZ3RoID0gJmx0OzImZ3Q7OwomIzQzOwkJCWJpYXMtcHVsbC11cDsKJiM0MzsJCX07CiYjNDM7CX07CiYjNDM7CiAJc2RjMl9jYXJkX2RldF9uOiBzZGMyLWNhcmQtZGV0LXN0YXRlIHsKIAkJcGlucyA9ICYjMzQ7Z3BpbzY1JiMzNDs7CiAJCWZ1bmN0aW9uID0gJiMzNDtncGlvJiMzNDs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYyBiL2RyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jCmluZGV4IGFmMGZhOGJkOTcwYjQuLjU2MzQ3MGNiOTI4ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jCkBAIC0yMCw2ICYjNDM7MjAsOSBAQAogCQkJCU5GQ19QUk9UT19JU08xNDQ0M19CX01BU0sgfCBcCiAJCQkJTkZDX1BST1RPX0lTTzE1NjkzX01BU0spCiAKJiM0MzsjZGVmaW5lIFMzTlJONFZfSFdSRUdfTkFNRQkmIzM0O3NhbXN1bmcvczNucm40di9od3JlZy5iaW4mIzM0OwomIzQzOyNkZWZpbmUgUzNOUk40Vl9TV1JFR19OQU1FCSYjMzQ7c2Ftc3VuZy9zM25ybjR2L3N3cmVnLmJpbiYjMzQ7CiYjNDM7CiBzdGF0aWMgaW50IHMzZndybjVfZmlybXdhcmVfaW5pdChzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvKQogewogCXN0cnVjdCBzM2Z3cm41X2Z3X2luZm8gKmZ3X2luZm8gPSAmYW1wO2luZm8tJmd0O2Z3X2luZm87CkBAIC03NCw2ICYjNDM7NzcsMjIgQEAgc3RhdGljIGludCBzM2Z3cm41X2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvKQogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgaW50IHMzZndybjVfbmNpX2luaXQoc3RydWN0IG5jaV9kZXYgKm5kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKGluZm8tJmd0O3ZhcmlhbnQgPT0gUzNGV1JONV9WQVJJQU5UX1MzTlJONFYpIHsKJiM0MzsJCXJldCA9IHMzZndybjVfbmNpX2Nsa19jZmcoaW5mbyk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlkZXZfZXJyKCZhbXA7bmRldi0mZ3Q7bmZjX2Rldi0mZ3Q7ZGV2LAomIzQzOwkJCQkmIzM0O2ZhaWxlZCB0byBjb25maWd1cmUgdGhlIHJlZmVyZW5jZSBjbG9jazogJWRcbiYjMzQ7LAomIzQzOwkJCQlyZXQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBzM2Z3cm41X25jaV9vcGVuKHN0cnVjdCBuY2lfZGV2ICpuZGV2KQogewogCXN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8gPSBuY2lfZ2V0X2RydmRhdGEobmRldik7CkBAIC0xMjcsNiAmIzQzOzE0NiwxNSBAQCBzdGF0aWMgaW50IHMzZndybjVfbmNpX3Bvc3Rfc2V0dXAoc3RydWN0IG5jaV9kZXYgKm5kZXYpCiAJc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbyA9IG5jaV9nZXRfZHJ2ZGF0YShuZGV2KTsKIAlpbnQgcmV0OwogCiYjNDM7CWlmIChpbmZvLSZndDt2YXJpYW50ID09IFMzRldSTjVfVkFSSUFOVF9TM05STjRWKSB7CiYjNDM7CQlyZXQgPSBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbChpbmZvLCBTM05STjRWX0hXUkVHX05BTUUsCiYjNDM7CQkJCQkJICAgIFMzTlJONFZfU1dSRUdfTkFNRSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlkZXZfd2FybigmYW1wO25kZXYtJmd0O25mY19kZXYtJmd0O2RldiwKJiM0MzsJCQkJICYjMzQ7UkYgY2FsaWJyYXRpb24gZGF0YSB1cGRhdGUgZmFpbGVkOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwogCWlmIChzM2Z3cm41X2Zpcm13YXJlX2luaXQoaW5mbykpIHsKIAkJLy9za2lwIGJvb3Rsb2FkZXIgbW9kZQogCQlyZXR1cm4gMDsKQEAgLTE0OSw2ICYjNDM7MTc3LDcgQEAgc3RhdGljIGludCBzM2Z3cm41X25jaV9wb3N0X3NldHVwKHN0cnVjdCBuY2lfZGV2ICpuZGV2KQogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5jaV9vcHMgczNmd3JuNV9uY2lfb3BzID0gewomIzQzOwkuaW5pdCA9IHMzZndybjVfbmNpX2luaXQsCiAJLm9wZW4gPSBzM2Z3cm41X25jaV9vcGVuLAogCS5jbG9zZSA9IHMzZndybjVfbmNpX2Nsb3NlLAogCS5zZW5kID0gczNmd3JuNV9uY2lfc2VuZCwKQEAgLTE1OCw3ICYjNDM7MTg3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuY2lfb3BzIHMzZndybjVfbmNpX29wcyA9IHsKIH07CiAKIGludCBzM2Z3cm41X3Byb2JlKHN0cnVjdCBuY2lfZGV2ICoqbmRldiwgdm9pZCAqcGh5X2lkLCBzdHJ1Y3QgZGV2aWNlICpwZGV2LAotCWNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHMpCiYjNDM7CWNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHMsIGVudW0gczNmd3JuNV92YXJpYW50IHZhcmlhbnQpCiB7CiAJc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbzsKIAlpbnQgcmV0OwpAQCAtMTcwLDYgJiM0MzsxOTksNyBAQCBpbnQgczNmd3JuNV9wcm9iZShzdHJ1Y3QgbmNpX2RldiAqKm5kZXYsIHZvaWQgKnBoeV9pZCwgc3RydWN0IGRldmljZSAqcGRldiwKIAlpbmZvLSZndDtwaHlfaWQgPSBwaHlfaWQ7CiAJaW5mby0mZ3Q7cGRldiA9IHBkZXY7CiAJaW5mby0mZ3Q7cGh5X29wcyA9IHBoeV9vcHM7CiYjNDM7CWluZm8tJmd0O3ZhcmlhbnQgPSB2YXJpYW50OwogCW11dGV4X2luaXQoJmFtcDtpbmZvLSZndDttdXRleCk7CiAKIAlzM2Z3cm41X3NldF9tb2RlKGluZm8sIFMzRldSTjVfTU9ERV9DT0xEKTsKQEAgLTIyNSwzICYjNDM7MjU1LDUgQEAgRVhQT1JUX1NZTUJPTChzM2Z3cm41X3JlY3ZfZnJhbWUpOwogTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CiBNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtTYW1zdW5nIFMzRldSTjUgTkZDIGRyaXZlciYjMzQ7KTsKIE1PRFVMRV9BVVRIT1IoJiMzNDtSb2JlcnQgQmFsZHlnYSAmbHQ7ci5iYWxkeWdhQHNhbXN1bmcuY29tJmd0OyYjMzQ7KTsKJiM0MztNT0RVTEVfRklSTVdBUkUoUzNOUk40Vl9IV1JFR19OQU1FKTsKJiM0MztNT0RVTEVfRklSTVdBUkUoUzNOUk40Vl9TV1JFR19OQU1FKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvaTJjLmMgYi9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jCmluZGV4IDRiYTc2MjYxMTcxMTguLjg4NDQyMGFjODNiNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvaTJjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZmMvczNmd3JuNS9pMmMuYwpAQCAtMTEsMTMgJiM0MzsxMSwxMiBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2dwaW8vY29uc3VtZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaCZndDsKIAogI2luY2x1ZGUgJmx0O25ldC9uZmMvbmZjLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7cGh5X2NvbW1vbi5oJiMzNDsKIAotI2RlZmluZSBTM0ZXUk41X0kyQ19EUklWRVJfTkFNRSAmIzM0O3MzZndybjVfaTJjJiMzNDsKLQogc3RydWN0IHMzZndybjVfaTJjX3BoeSB7CiAJc3RydWN0IHBoeV9jb21tb24gY29tbW9uOwogCXN0cnVjdCBpMmNfY2xpZW50ICppMmNfZGV2OwpAQCAtMTQ2LDYgJiM0MzsxNDUsNyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgczNmd3JuNV9pMmNfaXJxX3RocmVhZF9mbihpbnQgaXJxLCB2b2lkICpwaHlfaWQpCiAKIHN0YXRpYyBpbnQgczNmd3JuNV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKJiM0MzsJZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudDsKIAlzdHJ1Y3QgczNmd3JuNV9pMmNfcGh5ICpwaHk7CiAJaW50IHJldDsKIApAQCAtMTYwLDYgJiM0MzsxNjAsMTEgQEAgc3RhdGljIGludCBzM2Z3cm41X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogCXBoeS0mZ3Q7aTJjX2RldiA9IGNsaWVudDsKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBwaHkpOwogCiYjNDM7CXJldCA9IGRldm1fcmVndWxhdG9yX2dldF9lbmFibGUoJmFtcDtjbGllbnQtJmd0O2RldiwgJiMzNDtwdmRkJiMzNDspOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoJmFtcDtjbGllbnQtJmd0O2RldiwgcmV0LAomIzQzOwkJCQkgICAgICYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBwdmRkXG4mIzM0Oyk7CiYjNDM7CiAJcGh5LSZndDtjb21tb24uZ3Bpb19lbiA9IGRldm1fZ3Bpb2RfZ2V0KCZhbXA7Y2xpZW50LSZndDtkZXYsICYjMzQ7ZW4mIzM0OywgR1BJT0RfT1VUX0hJR0gpOwogCWlmIChJU19FUlIocGh5LSZndDtjb21tb24uZ3Bpb19lbikpCiAJCXJldHVybiBQVFJfRVJSKHBoeS0mZ3Q7Y29tbW9uLmdwaW9fZW4pOwpAQCAtMTc5LDE0ICYjNDM7MTg0LDE1IEBAIHN0YXRpYyBpbnQgczNmd3JuNV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIAkJcmV0dXJuIGRldl9lcnJfcHJvYmUoJmFtcDtjbGllbnQtJmd0O2RldiwgUFRSX0VSUihwaHktJmd0O2NsayksCiAJCQkJICAgICAmIzM0O2ZhaWxlZCB0byBnZXQgY2xvY2tcbiYjMzQ7KTsKIAomIzQzOwl2YXJpYW50ID0gKHVpbnRwdHJfdClpMmNfZ2V0X21hdGNoX2RhdGEoY2xpZW50KTsKIAlyZXQgPSBzM2Z3cm41X3Byb2JlKCZhbXA7cGh5LSZndDtjb21tb24ubmRldiwgcGh5LCAmYW1wO3BoeS0mZ3Q7aTJjX2Rldi0mZ3Q7ZGV2LAotCQkJICAgICZhbXA7aTJjX3BoeV9vcHMpOwomIzQzOwkJCSAgICAmYW1wO2kyY19waHlfb3BzLCB2YXJpYW50KTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAogCXJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoJmFtcDtjbGllbnQtJmd0O2RldiwgcGh5LSZndDtpMmNfZGV2LSZndDtpcnEsIE5VTEwsCiAJCXMzZndybjVfaTJjX2lycV90aHJlYWRfZm4sIElSUUZfT05FU0hPVCwKLQkJUzNGV1JONV9JMkNfRFJJVkVSX05BTUUsIHBoeSk7CiYjNDM7CQkmIzM0O3MzZndybjVfaTJjJiMzNDssIHBoeSk7CiAJaWYgKHJldCkKIAkJZ290byBzM2Z3cm41X3JlbW92ZTsKIApAQCAtMjA1LDIxICYjNDM7MjExLDI1IEBAIHN0YXRpYyB2b2lkIHMzZndybjVfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgczNmd3JuNV9pMmNfaWRfdGFibGVbXSA9IHsKLQl7IC5uYW1lID0gUzNGV1JONV9JMkNfRFJJVkVSX05BTUUgfSwKJiM0MzsJeyAubmFtZSA9ICYjMzQ7czNmd3JuNV9pMmMmIzM0OywgLmRyaXZlcl9kYXRhID0gUzNGV1JONV9WQVJJQU5UX0ZXREwgfSwKJiM0MzsJeyAubmFtZSA9ICYjMzQ7czNucm40diYjMzQ7LCAuZHJpdmVyX2RhdGEgPSBTM0ZXUk41X1ZBUklBTlRfUzNOUk40ViB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzM2Z3cm41X2kyY19pZF90YWJsZSk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX3MzZndybjVfaTJjX21hdGNoW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICYjMzQ7c2Ftc3VuZyxzM2Z3cm41LWkyYyYjMzQ7IH0sCiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O3NhbXN1bmcsczNmd3JuNS1pMmMmIzM0OywKJiM0MzsJICAuZGF0YSA9ICh2b2lkICopUzNGV1JONV9WQVJJQU5UX0ZXREwgfSwKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7c2Ftc3VuZyxzM25ybjR2JiMzNDssCiYjNDM7CSAgLmRhdGEgPSAodm9pZCAqKVMzRldSTjVfVkFSSUFOVF9TM05STjRWIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgb2ZfczNmd3JuNV9pMmNfbWF0Y2gpOwogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgczNmd3JuNV9pMmNfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gUzNGV1JONV9JMkNfRFJJVkVSX05BTUUsCi0JCS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihvZl9zM2Z3cm41X2kyY19tYXRjaCksCiYjNDM7CQkubmFtZSA9ICYjMzQ7czNmd3JuNV9pMmMmIzM0OywKJiM0MzsJCS5vZl9tYXRjaF90YWJsZSA9IG9mX3MzZndybjVfaTJjX21hdGNoLAogCX0sCiAJLnByb2JlID0gczNmd3JuNV9pMmNfcHJvYmUsCiAJLnJlbW92ZSA9IHMzZndybjVfaTJjX3JlbW92ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmMgYi9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jCmluZGV4IDVhOWRlMTFiYmVjZWEuLjM4MWFhN2JmMjlhMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuYwpAQCAtOCw2ICYjNDM7OCw5IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9jb21wbGV0aW9uLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZmlybXdhcmUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWlubWF4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdW5hbGlnbmVkLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7czNmd3JuNS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7bmNpLmgmIzM0OwpAQCAtMjAsNyAmIzQzOzIzLDI0IEBAIHN0YXRpYyBpbnQgczNmd3JuNV9uY2lfcHJvcF9yc3Aoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpCiAJcmV0dXJuIDA7CiB9CiAKLWNvbnN0IHN0cnVjdCBuY2lfZHJpdmVyX29wcyBzM2Z3cm41X25jaV9wcm9wX29wc1s0XSA9IHsKJiM0MzsvKgomIzQzOyAqIERVQUxfT1BUSU9OIHJlc3BvbnNlcyBhcmUgbm90IHVuaWZvcm06IEdFVF9WRVIgYW5zd2VycyB3aXRoIHRoZSBjaGlwJiMzOTtzCiYjNDM7ICogY2FsaWJyYXRpb24gdmVyc2lvbnMgaW5zdGVhZCBvZiBhIHN0YXR1cyBieXRlLCBzbyBzdGFzaCB0aGUgcGF5bG9hZCBmb3IKJiM0MzsgKiB0aGUgY2FsbGVyIGJlZm9yZSBjb21wbGV0aW5nIHRoZSByZXF1ZXN0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgczNmd3JuNV9uY2lfZHVhbF9yc3Aoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpOwomIzQzOwomIzQzOwlpbmZvLSZndDtkdWFsX3JzcF9sZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHNrYi0mZ3Q7bGVuLAomIzQzOwkJCQkgICBzaXplb2YoaW5mby0mZ3Q7ZHVhbF9yc3ApKTsKJiM0MzsJbWVtY3B5KGluZm8tJmd0O2R1YWxfcnNwLCBza2ItJmd0O2RhdGEsIGluZm8tJmd0O2R1YWxfcnNwX2xlbik7CiYjNDM7CiYjNDM7CW5jaV9yZXFfY29tcGxldGUobmRldiwgc2tiLSZndDtkYXRhWzBdKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBuY2lfZHJpdmVyX29wcyBzM2Z3cm41X25jaV9wcm9wX29wc1s1XSA9IHsKIAl7CiAJCS5vcGNvZGUgPSBuY2lfb3Bjb2RlX3BhY2soTkNJX0dJRF9QUk9QUklFVEFSWSwKIAkJCQlOQ0lfUFJPUF9TRVRfUkZSRUcpLApAQCAtNDEsNiAmIzQzOzYxLDExIEBAIGNvbnN0IHN0cnVjdCBuY2lfZHJpdmVyX29wcyBzM2Z3cm41X25jaV9wcm9wX29wc1s0XSA9IHsKIAkJCQlOQ0lfUFJPUF9GV19DRkcpLAogCQkucnNwID0gczNmd3JuNV9uY2lfcHJvcF9yc3AsCiAJfSwKJiM0MzsJewomIzQzOwkJLm9wY29kZSA9IG5jaV9vcGNvZGVfcGFjayhOQ0lfR0lEX1BST1BSSUVUQVJZLAomIzQzOwkJCQlOQ0lfUFJPUF9EVUFMX09QVElPTiksCiYjNDM7CQkucnNwID0gczNmd3JuNV9uY2lfZHVhbF9yc3AsCiYjNDM7CX0sCiB9OwogCiAjZGVmaW5lIFMzRldSTjVfUkZSRUdfU0VDVElPTl9TSVpFIDI1MgpAQCAtMTE3LDMgJiM0MzsxNDIsMTU0IEBAIGludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmUoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqZndfbmFtZSkKIAlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKIAlyZXR1cm4gcmV0OwogfQomIzQzOwomIzQzOy8qCiYjNDM7ICogVGhlIFMzTlJONFYgZXhwZWN0cyB0aGUgc2luZ2xlLWJ5dGUgRldfQ0ZHIGZvcm0gKGp1c3QgdGhlIGNsb2NrLXNwZWVkCiYjNDM7ICogc2VsZWN0b3IpLgomIzQzOyAqLwomIzQzO2ludCBzM2Z3cm41X25jaV9jbGtfY2ZnKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8pCiYjNDM7ewomIzQzOwl1OCBjbGtfc3BlZWQgPSBOQ0lfUFJPUF9GV19DRkdfQ0xLX1NQRUVEOwomIzQzOwomIzQzOwlyZXR1cm4gbmNpX3Byb3BfY21kKGluZm8tJmd0O25kZXYsIE5DSV9QUk9QX0ZXX0NGRywgMSwgJmFtcDtjbGtfc3BlZWQpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEFuIDgtYnl0ZSBjYWxpYnJhdGlvbiB2ZXJzaW9uOiA1IGJ5dGVzIG9mIGRhdGUgc3RhbXAgYW5kIGEgMy1ieXRlIENTQwomIzQzOyAqIGNvZGUsIGF0IGZpeGVkIG9mZnNldHMgYm90aCBpbiBhIGJsb2ImIzM5O3MgMTYtYnl0ZSB0YWlsIGFuZCBpbiBlYWNoIGhhbGYgb2YKJiM0MzsgKiB0aGUgR0VUX1ZFUiByZXNwb25zZSAoSFcgYXQgb2Zmc2V0IDAsIFNXIGF0IG9mZnNldCAxNSkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgczNmd3JuNV9uY2lfZHVhbF92ZXJzaW9uX2VxKGNvbnN0IHU4ICphLCBjb25zdCB1OCAqYikKJiM0Mzt7CiYjNDM7CXJldHVybiAhbWVtY21wKGEgJiM0MzsgNSwgYiAmIzQzOyA1LCA1KSAmYW1wOyZhbXA7ICFtZW1jbXAoYSAmIzQzOyAxMiwgYiAmIzQzOyAxMiwgMyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHMzZndybjVfbmNpX2R1YWxfY2FsX2N1cnJlbnQoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbywKJiM0MzsJCQkJCSBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmh3X2Z3LAomIzQzOwkJCQkJIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqc3dfZncpCiYjNDM7ewomIzQzOwlpZiAoaW5mby0mZ3Q7ZHVhbF9yc3BfbGVuICZsdDsgMzApCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmIChod19mdy0mZ3Q7c2l6ZSAmbHQ7IDE2IHx8IHN3X2Z3LSZndDtzaXplICZsdDsgMTYpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiBzM2Z3cm41X25jaV9kdWFsX3ZlcnNpb25fZXEoaW5mby0mZ3Q7ZHVhbF9yc3AsCiYjNDM7CQkJCQkgICBod19mdy0mZ3Q7ZGF0YSAmIzQzOyBod19mdy0mZ3Q7c2l6ZSAtIDE2KSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBzM2Z3cm41X25jaV9kdWFsX3ZlcnNpb25fZXEoaW5mby0mZ3Q7ZHVhbF9yc3AgJiM0MzsgMTUsCiYjNDM7CQkJCQkgICBzd19mdy0mZ3Q7ZGF0YSAmIzQzOyBzd19mdy0mZ3Q7c2l6ZSAtIDE2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBTM05STjRWIFJGIGNhbGlicmF0aW9uIGRhdGEgdXBkYXRlOiB0aGUgSFcgYW5kIFNXIGJsb2JzIG1lcmdlZCBpbnRvIG9uZQomIzQzOyAqIHN0cmVhbSAoSFcgZmlyc3QpLCBwdXNoZWQgYXMgU1RBUlRfVVBEQVRFLCBvbmUgU0VUX09QVElPTiBwZXIgMjUyLWJ5dGUKJiM0MzsgKiBzZWN0aW9uLCB0aGVuIFNUT1BfVVBEQVRFIGNhcnJ5aW5nIGEgMTYtYml0IGNoZWNrc3VtIChydW5uaW5nIHN1bSBvZiB0aGUKJiM0MzsgKiBtZXJnZWQgc3RyZWFtIGFzIDMyLWJpdCB3b3JkcykuCiYjNDM7ICovCiYjNDM7aW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sCiYjNDM7CQkJCSAgY29uc3QgY2hhciAqaHdfbmFtZSwgY29uc3QgY2hhciAqc3dfbmFtZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuY2lfcHJvcF9kdWFsX3NldF9vcHRpb25fY21kIHNldF9vcHRpb247CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7aW5mby0mZ3Q7bmRldi0mZ3Q7bmZjX2Rldi0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmh3X2Z3LCAqc3dfZnc7CiYjNDM7CXNpemVfdCBtZXJnZWRfc2l6ZSwgaSwgbGVuOwomIzQzOwl1OCAqbWVyZ2VkOwomIzQzOwl1OCBzdG9wX2NtZFszXTsKJiM0MzsJdTMyIGNoZWNrc3VtOwomIzQzOwl1OCBzdWJfb2lkOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBmaXJtd2FyZV9yZXF1ZXN0X25vd2FybigmYW1wO2h3X2Z3LCBod19uYW1lLCBkZXYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IGZpcm13YXJlX3JlcXVlc3Rfbm93YXJuKCZhbXA7c3dfZncsIHN3X25hbWUsIGRldik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBvdXRfaHc7CiYjNDM7CiYjNDM7CW1lcmdlZF9zaXplID0gaHdfZnctJmd0O3NpemUgJiM0Mzsgc3dfZnctJmd0O3NpemU7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBzdHJlYW0gaXMgY2hlY2tzdW1tZWQgYXMgMzItYml0IHdvcmRzIGFuZCBwdXNoZWQgaW4gYXQgbW9zdCAyNTYKJiM0MzsJICogc2VjdGlvbnMgKHRoZSBzZWN0aW9uIGluZGV4IGlzIGEgc2luZ2xlIGJ5dGUpOyByZWplY3QgYmxvYnMgdGhhdAomIzQzOwkgKiB3b3VsZCBzaWxlbnRseSBicmVhayBlaXRoZXIuCiYjNDM7CSAqLwomIzQzOwlpZiAoIW1lcmdlZF9zaXplIHx8IG1lcmdlZF9zaXplICUgNCB8fAomIzQzOwkgICAgbWVyZ2VkX3NpemUgJmd0OyAyNTYgKiBOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRSkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7aW52YWxpZCBjYWxpYnJhdGlvbiBkYXRhIHNpemU6ICV6dVxuJiMzNDssIG1lcmdlZF9zaXplKTsKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIG91dF9zdzsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBc2sgdGhlIGNoaXAgZm9yIGl0cyBjdXJyZW50IGNhbGlicmF0aW9uIHZlcnNpb25zIGFuZCBza2lwIHRoZQomIzQzOwkgKiB1cGxvYWQgd2hlbiBib3RoIGFscmVhZHkgbWF0Y2ggdGhlIGJsb2JzOyBhIG1pc21hdGNoIG9yIGFuCiYjNDM7CSAqIHVucGFyc2VhYmxlIGFuc3dlciBtZWFucyB0aGUgdXBsb2FkIHByb2NlZWRzLiBHRVRfVkVSIGFuc3dlcnMgd2l0aAomIzQzOwkgKiB2ZXJzaW9ucywgbm90IGEgc3RhdHVzIGJ5dGUsIHNvIG5jaV9wcm9wX2NtZCgpJiMzOTtzIHJldHVybiBjYXJyaWVzIG5vCiYjNDM7CSAqIG1lYW5pbmcgaGVyZS4KJiM0MzsJICovCiYjNDM7CXN1Yl9vaWQgPSBOQ0lfUFJPUF9EVUFMX1NVQl9HRVRfVkVSOwomIzQzOwlpbmZvLSZndDtkdWFsX3JzcF9sZW4gPSAwOwomIzQzOwluY2lfcHJvcF9jbWQoaW5mby0mZ3Q7bmRldiwgTkNJX1BST1BfRFVBTF9PUFRJT04sIDEsICZhbXA7c3ViX29pZCk7CiYjNDM7CWlmIChzM2Z3cm41X25jaV9kdWFsX2NhbF9jdXJyZW50KGluZm8sIGh3X2Z3LCBzd19mdykpIHsKJiM0MzsJCWRldl9kYmcoZGV2LCAmIzM0O2NhbGlicmF0aW9uIGRhdGEgYWxyZWFkeSBjdXJyZW50XG4mIzM0Oyk7CiYjNDM7CQlyZXQgPSAwOwomIzQzOwkJZ290byBvdXRfc3c7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWVyZ2VkID0ga3ZtYWxsb2MobWVyZ2VkX3NpemUsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIW1lcmdlZCkgewomIzQzOwkJcmV0ID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gb3V0X3N3OwomIzQzOwl9CiYjNDM7CW1lbWNweShtZXJnZWQsIGh3X2Z3LSZndDtkYXRhLCBod19mdy0mZ3Q7c2l6ZSk7CiYjNDM7CW1lbWNweShtZXJnZWQgJiM0MzsgaHdfZnctJmd0O3NpemUsIHN3X2Z3LSZndDtkYXRhLCBzd19mdy0mZ3Q7c2l6ZSk7CiYjNDM7CiYjNDM7CWNoZWNrc3VtID0gMDsKJiM0MzsJZm9yIChpID0gMDsgaSAmIzQzOyA0ICZsdDs9IG1lcmdlZF9zaXplOyBpICYjNDM7PSA0KQomIzQzOwkJY2hlY2tzdW0gJiM0Mzs9IGdldF91bmFsaWduZWRfbGUzMihtZXJnZWQgJiM0MzsgaSk7CiYjNDM7CiYjNDM7CS8qIFNUQVJUX1VQREFURSAqLwomIzQzOwlzdWJfb2lkID0gTkNJX1BST1BfRFVBTF9TVUJfU1RBUlRfVVBEQVRFOwomIzQzOwlyZXQgPSBuY2lfcHJvcF9jbWQoaW5mby0mZ3Q7bmRldiwgTkNJX1BST1BfRFVBTF9PUFRJT04sIDEsICZhbXA7c3ViX29pZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtVbmFibGUgdG8gc3RhcnQgY2FsaWJyYXRpb24gZGF0YSB1cGRhdGVcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFNFVF9PUFRJT04gcGVyIHNlY3Rpb24gKi8KJiM0MzsJc2V0X29wdGlvbi5zdWJfb2lkID0gTkNJX1BST1BfRFVBTF9TVUJfU0VUX09QVElPTjsKJiM0MzsJc2V0X29wdGlvbi5pbmRleCA9IDA7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBtZXJnZWRfc2l6ZTsgaSAmIzQzOz0gTkNJX1BST1BfRFVBTF9TRUNUSU9OX1NJWkUpIHsKJiM0MzsJCWxlbiA9IG1pbl90KHNpemVfdCwgbWVyZ2VkX3NpemUgLSBpLCBOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRSk7CiYjNDM7CQltZW1jcHkoc2V0X29wdGlvbi5kYXRhLCBtZXJnZWQgJiM0MzsgaSwgbGVuKTsKJiM0MzsJCXJldCA9IG5jaV9wcm9wX2NtZChpbmZvLSZndDtuZGV2LCBOQ0lfUFJPUF9EVUFMX09QVElPTiwKJiM0MzsJCQkJICAgbGVuICYjNDM7IDIsIChfX3U4ICopJmFtcDtzZXRfb3B0aW9uKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQkJZGV2X2VycihkZXYsICYjMzQ7Y2FsaWJyYXRpb24gZGF0YSB1cGRhdGUgZXJyb3I6ICVkXG4mIzM0OywKJiM0MzsJCQkJcmV0KTsKJiM0MzsJCQkvKiBBYm9ydCBmb3JtOiBTVE9QX1VQREFURSB3aXRoIHRoZSBzdWItT0lEIGFsb25lLiAqLwomIzQzOwkJCXN1Yl9vaWQgPSBOQ0lfUFJPUF9EVUFMX1NVQl9TVE9QX1VQREFURTsKJiM0MzsJCQluY2lfcHJvcF9jbWQoaW5mby0mZ3Q7bmRldiwgTkNJX1BST1BfRFVBTF9PUFRJT04sIDEsCiYjNDM7CQkJCSAgICAgJmFtcDtzdWJfb2lkKTsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJCXNldF9vcHRpb24uaW5kZXgmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFNUT1BfVVBEQVRFIHdpdGggY2hlY2tzdW0gKi8KJiM0MzsJc3RvcF9jbWRbMF0gPSBOQ0lfUFJPUF9EVUFMX1NVQl9TVE9QX1VQREFURTsKJiM0MzsJcHV0X3VuYWxpZ25lZF9sZTE2KGNoZWNrc3VtLCAmYW1wO3N0b3BfY21kWzFdKTsKJiM0MzsJcmV0ID0gbmNpX3Byb3BfY21kKGluZm8tJmd0O25kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLCAzLCBzdG9wX2NtZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtVbmFibGUgdG8gc3RvcCBjYWxpYnJhdGlvbiBkYXRhIHVwZGF0ZVxuJiMzNDspOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZGV2X2RiZyhkZXYsICYjMzQ7Y2FsaWJyYXRpb24gZGF0YSB1cGRhdGU6IHN1Y2Nlc3NcbiYjMzQ7KTsKJiM0MztvdXQ6CiYjNDM7CWt2ZnJlZShtZXJnZWQpOwomIzQzO291dF9zdzoKJiM0MzsJcmVsZWFzZV9maXJtd2FyZShzd19mdyk7CiYjNDM7b3V0X2h3OgomIzQzOwlyZWxlYXNlX2Zpcm13YXJlKGh3X2Z3KTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oIGIvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaAppbmRleCBiYzRiY2UyYmJjNGQ5Li40NTNhMWM5ZDY1ZWIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmgKQEAgLTQwLDYgJiM0Mzs0MCw5IEBAIHN0cnVjdCBuY2lfcHJvcF9zdG9wX3JmcmVnX3JzcCB7CiAKICNkZWZpbmUgTkNJX1BST1BfRldfQ0ZHCQkweDI4CiAKJiM0MzsvKiBTM05STjRWIHNpbmdsZS1ieXRlIEZXX0NGRyBwYXlsb2FkOyAweDExIHNlbGVjdHMgdGhlIDE5LjIgTUh6IHJlZmVyZW5jZS4gKi8KJiM0MzsjZGVmaW5lIE5DSV9QUk9QX0ZXX0NGR19DTEtfU1BFRUQJMHgxMQomIzQzOwogc3RydWN0IG5jaV9wcm9wX2Z3X2NmZ19jbWQgewogCV9fdTggY2xrX3R5cGU7CiAJX191OCBjbGtfc3BlZWQ7CkBAIC01MCw3ICYjNDM7NTMsMjUgQEAgc3RydWN0IG5jaV9wcm9wX2Z3X2NmZ19yc3AgewogCV9fdTggc3RhdHVzOwogfTsKIAotZXh0ZXJuIGNvbnN0IHN0cnVjdCBuY2lfZHJpdmVyX29wcyBzM2Z3cm41X25jaV9wcm9wX29wc1s0XTsKJiM0MzsjZGVmaW5lIE5DSV9QUk9QX0RVQUxfT1BUSU9OCQkweDJhCiYjNDM7CiYjNDM7I2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NVQl9HRVRfVkVSCTB4MDAKJiM0MzsjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU1VCX1NUQVJUX1VQREFURQkweDAxCiYjNDM7I2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NVQl9TRVRfT1BUSU9OCTB4MDIKJiM0MzsjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU1VCX1NUT1BfVVBEQVRFCTB4MDMKJiM0MzsKJiM0MzsjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU0VDVElPTl9TSVpFCTI1MgomIzQzOwomIzQzO3N0cnVjdCBuY2lfcHJvcF9kdWFsX3NldF9vcHRpb25fY21kIHsKJiM0MzsJX191OCBzdWJfb2lkOwomIzQzOwlfX3U4IGluZGV4OwomIzQzOwlfX3U4IGRhdGFbTkNJX1BST1BfRFVBTF9TRUNUSU9OX1NJWkVdOwomIzQzO307CiYjNDM7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBuY2lfZHJpdmVyX29wcyBzM2Z3cm41X25jaV9wcm9wX29wc1s1XTsKIGludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmUoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqZndfbmFtZSk7CiYjNDM7aW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sCiYjNDM7CQkJCSAgY29uc3QgY2hhciAqaHdfbmFtZSwgY29uc3QgY2hhciAqc3dfbmFtZSk7CiYjNDM7aW50IHMzZndybjVfbmNpX2Nsa19jZmcoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbyk7CiAKICNlbmRpZiAvKiBfX0xPQ0FMX1MzRldSTjVfTkNJX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L3MzZndybjUuaCBiL2RyaXZlcnMvbmZjL3MzZndybjUvczNmd3JuNS5oCmluZGV4IDJiNDkyMjM2MDkwYjguLjYzZjY3OWYxNzE2NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvczNmd3JuNS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmZjL3MzZndybjUvczNmd3JuNS5oCkBAIC0yMSw2ICYjNDM7MjEsMTMgQEAgZW51bSBzM2Z3cm41X21vZGUgewogCVMzRldSTjVfTU9ERV9GVywKIH07CiAKJiM0MztlbnVtIHMzZndybjVfdmFyaWFudCB7CiYjNDM7CS8qIFMzRldSTjUgLyBTM0ZXUk44MjogZmlybXdhcmUgaXMgZG93bmxvYWRlZCBieSB0aGlzIGRyaXZlciAqLwomIzQzOwlTM0ZXUk41X1ZBUklBTlRfRldETCwKJiM0MzsJLyogUzNOUk40Vjogbm8gZmlybXdhcmUgZG93bmxvYWQ7IEZXX0NGRyAmIzQzOyBEVUFMX09QVElPTiBicmluZy11cCAqLwomIzQzOwlTM0ZXUk41X1ZBUklBTlRfUzNOUk40ViwKJiM0Mzt9OwomIzQzOwogc3RydWN0IHMzZndybjVfcGh5X29wcyB7CiAJdm9pZCAoKnNldF93YWtlKSh2b2lkICppZCwgYm9vbCBzbGVlcCk7CiAJdm9pZCAoKnNldF9tb2RlKSh2b2lkICppZCwgZW51bSBzM2Z3cm41X21vZGUpOwpAQCAtMzYsNiAmIzQzOzQzLDExIEBAIHN0cnVjdCBzM2Z3cm41X2luZm8gewogCWNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHM7CiAKIAlzdHJ1Y3QgczNmd3JuNV9md19pbmZvIGZ3X2luZm87CiYjNDM7CWVudW0gczNmd3JuNV92YXJpYW50IHZhcmlhbnQ7CiYjNDM7CiYjNDM7CS8qIExhc3QgRFVBTF9PUFRJT04gcmVzcG9uc2UgcGF5bG9hZCAoR0VUX1ZFUiBjYXJyaWVzIHZlcnNpb25zKS4gKi8KJiM0MzsJdTggZHVhbF9yc3BbMzJdOwomIzQzOwl1OCBkdWFsX3JzcF9sZW47CiAKIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CiB9OwpAQCAtNzgsNyAmIzQzOzkwLDcgQEAgc3RhdGljIGlubGluZSBpbnQgczNmd3JuNV93cml0ZShzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogfQogCiBpbnQgczNmd3JuNV9wcm9iZShzdHJ1Y3QgbmNpX2RldiAqKm5kZXYsIHZvaWQgKnBoeV9pZCwgc3RydWN0IGRldmljZSAqcGRldiwKLQljb25zdCBzdHJ1Y3QgczNmd3JuNV9waHlfb3BzICpwaHlfb3BzKTsKJiM0MzsJY29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcywgZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudCk7CiB2b2lkIHMzZndybjVfcmVtb3ZlKHN0cnVjdCBuY2lfZGV2ICpuZGV2KTsKIAogaW50IHMzZndybjVfcmVjdl9mcmFtZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvdWFydC5jIGIvZHJpdmVycy9uZmMvczNmd3JuNS91YXJ0LmMKaW5kZXggOGYxNDJhMjU1MTAxNi4uNzUzOTdjM2RiYzU4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS91YXJ0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZmMvczNmd3JuNS91YXJ0LmMKQEAgLTEzNiw3ICYjNDM7MTM2LDcgQEAgc3RhdGljIGludCBzM2Z3cm44Ml91YXJ0X3Byb2JlKHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXYpCiAJfQogCiAJcmV0ID0gczNmd3JuNV9wcm9iZSgmYW1wO3BoeS0mZ3Q7Y29tbW9uLm5kZXYsIHBoeSwgJmFtcDtwaHktJmd0O3Nlcl9kZXYtJmd0O2RldiwKLQkJCSAgICAmYW1wO3VhcnRfcGh5X29wcyk7CiYjNDM7CQkJICAgICZhbXA7dWFydF9waHlfb3BzLCBTM0ZXUk41X1ZBUklBTlRfRldETCk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gZXJyX3NlcmRldjsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTg0CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIFNlcmllcyBFdmFsdWF0aW9uOiBzM2Z3cm41IERyaXZlciBFbmhhbmNlbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBtb2RpZnlpbmcgdGhlIGBzM2Z3cm41YCBORkMgZHJpdmVyLiBTZWVtcyBsaWtlIGl0JiMzOTtzIGFkZGluZyBzdXBwb3J0IGZvciBhIG5ldyB2YXJpYW50LCBgczNucm40dmAuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIHNlZWluZyBpcyB0aGUgYWRkaXRpb24gb2YgYSBuZXcgY29tcGF0aWJsZSBzdHJpbmcsICYjMzQ7c2Ftc3VuZyxzM25ybjR2JiMzNDssIGluIHRoZSBkZXZpY2UgdHJlZSBiaW5kaW5ncywgYWxvbmcgd2l0aCBhIGNvcnJlc3BvbmRpbmcgZXhhbXBsZSBpbiBhIERUUyBmaWxlLiBUaGF0JiMzOTtzIHN0YW5kYXJkIHByb2NlZHVyZSBmb3IgYWRkaW5nIHN1cHBvcnQgZm9yIGEgbmV3IGhhcmR3YXJlIHJldi4gTm93LCBpdCBsb29rcyBsaWtlIGEgZmFpcmx5IGNvbXByZWhlbnNpdmUgY2hhbmdlLCB0b3VjaGluZyBzZXZlcmFsIGNvcmUgZmlsZXM6IGBjb3JlLmNgLCBgaTJjLmNgLCBgbmNpLmNgLCBgbmNpLmhgLCBgczNmd3JuNS5oYCwgYW5kIGB1YXJ0LmNgLiBMb29rcyBsaWtlIGl0JiMzOTtzIGEgZGVlcCBkaXZlLgoKTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcywgaG93IGlzIHRoaXMgZHJpdmVyICpyZWFjaGVkKj8gSXQmIzM5O3MgYW4gTkZDIGRyaXZlciwgc28gSSYjMzk7bSBleHBlY3RpbmcgTkNJIOKAkyB0aGUgTkZDIENvbnRyb2xsZXIgSW50ZXJmYWNlIOKAkyBpcyB0aGUgbGlrZWx5IGNhbmRpZGF0ZS4gWXVwLCBzZWVtcyBJIHdhcyBjb3JyZWN0LiBUaGUgcGF0Y2ggZXh0ZW5kcyB0aGUgZXhpc3RpbmcgTkNJIGZ1bmN0aW9uYWxpdHkgdG8gaGFuZGxlIHRoZSBgczNucm40dmAuIEkmIzM5O20gc2VlaW5nIGFkZGl0aW9ucyB0byBtYW5hZ2UgdGhlIHByb3ByaWV0YXJ5IGNvbW1hbmRzIGFuZCByZXNwb25zZXMgZm9yIHRoaXMgbmV3IHZhcmlhbnQsIGdvb2QuIFNwZWNpZmljYWxseSwgdGhlIGBzM2Z3cm41X25jaV9wcm9wX29wc2Agc3RydWN0dXJlIGlzIGJlaW5nIGV4dGVuZGVkIHdpdGggYE5DSV9QUk9QX0RVQUxfT1BUSU9OYCwgYW5kIHRoZXJlIGFyZSBuZXcgZnVuY3Rpb25zIGJlaW5nIGFkZGVkOiBgczNmd3JuNV9uY2lfZHVhbF9yc3BgLCBgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWxgLCBhbmQgYHMzZndybjVfbmNpX2Nsa19jZmdgLiBUaGlzIGlzIGFsbCBtYWtpbmcgc2Vuc2UsIGRlYWxpbmcgd2l0aCB0aGUgbG93LWxldmVsIGNvbW11bmljYXRpb24uCgpGaW5hbGx5LCBiZWZvcmUgSSBkaWcgdG9vIGRlZXAgaW50byB0aGUgY29kZSwgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCB0aGlzIGBzM2Z3cm41YCBkcml2ZXIgaXMgZXZlbiBlbmFibGVkIGluIGFueSBjb25maWcuIEdvaW5nIHRvIHJ1biBgZ3JlcHBlcmAgdG8gc2VhcmNoIGZvciBgQ09ORklHX05GQ19TM0ZXUk41YCB0byBzZWUgd2hhdCBJIGNhbiBmaW5kLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGNvZGUgaXMgYWN0dWFsbHkgdXNlZCBzb21ld2hlcmUhIE9rYXksIGxldCYjMzk7cyBzZWUgd2hhdCB0aGF0IHR1cm5zIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIyOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19ORkNfUzNGV1JONSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybS9jb25maWdzL2V4eW5vc19kZWZjb25maWc9ODM9Q09ORklHX05GQ19TSERMQz15XG5hcmNoL2FybS9jb25maWdzL2V4eW5vc19kZWZjb25maWc6ODQ6Q09ORklHX05GQ19TM0ZXUk41X0kyQz15XG5hcmNoL2FybS9jb25maWdzL2V4eW5vc19kZWZjb25maWctODUtQ09ORklHX0RFVlRNUEZTPXlcbi0tXG5hcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZz0xNzM9Q09ORklHX05GQ19TSERMQz15XG5hcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZzoxNzQ6Q09ORklHX05GQ19TM0ZXUk41X0kyQz1tXG5hcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZy0xNzUtQ09ORklHX1BDSUVQT1JUQlVTPXlcbi0tXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnPTIwOD1DT05GSUdfTkZDX05YUF9OQ0lfSTJDPW1cbmFyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWc6MjA5OkNPTkZJR19ORkNfUzNGV1JONV9JMkM9bVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZy0yMTAtQ09ORklHX1BDST15XG4tLVxuZHJpdmVycy9ncGlvL2dwaW9saWItb2YuYz00ODc9c3RhdGljIHN0cnVjdCBncGlvX2Rlc2MgKm9mX2ZpbmRfZ3Bpb19yZW5hbWUoc3RydWN0IGRldmljZV9ub2RlICpucCxcbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1vZi5jLTUyNi0jZW5kaWZcbmRyaXZlcnMvZ3Bpby9ncGlvbGliLW9mLmM6NTI3OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORkNfUzNGV1JONV9JMkMpXG5kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1vZi5jLTUyOC1cdFx0eyBcJiMzNDtlblwmIzM0OyxcdFx0XCYjMzQ7czNmd3JuNSxlbi1ncGlvc1wmIzM0OyxcdFwmIzM0O3NhbXN1bmcsczNmd3JuNS1pMmNcJiMzNDsgfSxcbi0tXG5kcml2ZXJzL25mYy9NYWtlZmlsZT0xNz1vYmotJChDT05GSUdfTkZDX05YUF9OQ0kpXHQmIzQzOz0gbnhwLW5jaS9cbmRyaXZlcnMvbmZjL01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19ORkNfUzNGV1JONSlcdCYjNDM7PSBzM2Z3cm41L1xuZHJpdmVycy9uZmMvTWFrZWZpbGUtMTktb2JqLSQoQ09ORklHX05GQ19TVDk1SEYpXHQmIzQzOz0gc3Q5NWhmL1xuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvTWFrZWZpbGU9OD1zM2Z3cm44Ml91YXJ0LW9ianMgPSB1YXJ0Lm9cbmRyaXZlcnMvbmZjL3MzZndybjUvTWFrZWZpbGUtOS1cbmRyaXZlcnMvbmZjL3MzZndybjUvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX05GQ19TM0ZXUk41KSAmIzQzOz0gczNmd3JuNS5vXG5kcml2ZXJzL25mYy9zM2Z3cm41L01ha2VmaWxlOjExOm9iai0kKENPTkZJR19ORkNfUzNGV1JONV9JMkMpICYjNDM7PSBzM2Z3cm41X2kyYy5vXG5kcml2ZXJzL25mYy9zM2Z3cm41L01ha2VmaWxlLTEyLW9iai0kKENPTkZJR19ORkNfUzNGV1JOODJfVUFSVCkgJiM0Mzs9IHMzZndybjgyX3VhcnQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIyOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTAwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIFMzRldSTjUgTkZDIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgQ09ORklHX05GQ19TM0ZXUk41YCBkcml2ZXIsIGFuZCBpdCBhbHNvIHVzZXMgYENPTkZJR19ORkNfUzNGV1JONV9JMkNgLiBSaWdodCBvZmYgdGhlIGJhdCwgaXQmIzM5O3MgcmVnaXN0ZXJpbmcgaXRzZWxmIHRocm91Z2ggYm90aCBgaTJjX2RyaXZlcmAgYW5kIGBzZXJkZXZfZGV2aWNlX2RyaXZlcmAsIHdoaWNoIGlzIGdvb2QgdG8ga25vdywgYW5kIG1lYW5zIEkgaGF2ZSBhIGZldyBkaWZmZXJlbnQgYW5nbGVzIHRvIGFwcHJvYWNoIHRoaXMuIENhbiBJIGZ1enogdGhpcyBlZmZlY3RpdmVseT8gQWJzb2x1dGVseS4gU3l6a2FsbGVyJiMzOTtzIGBzeXpfaTJjYCBhbmQgdmlydHVhbCBJMkMgZGV2aWNlcyB3b3VsZCBiZSBwZXJmZWN0IGZvciB0aGUgSTJDIGFzcGVjdC4gUGx1cywgdGhlIE5DSSBpbnRlcmZhY2UgaXMgZXhwb3NlZCB0byB1c2VyLXNwYWNlIHRocm91Z2ggbmV0bGluayBvciBzb2NrZXRzLCBhbmQgU3l6a2FsbGVyIGhhcyBzb2xpZCBzdXBwb3J0IGZvciBOQ0kvTkZDIGZ1enppbmcuIFRoYXQmIzM5O3MgYSBtYWpvciBhZHZhbnRhZ2UuCgpBaCwgd2FpdCwgaXQmIzM5O3MgYW4gTkNJIGRyaXZlciDigJMgYHMzZndybjVgLiBUaGF0IG1lYW5zIGl0IHJlZ2lzdGVycyB0aHJvdWdoIGBuY2lfYWxsb2NhdGVfZGV2aWNlYCBhbmQgYG5jaV9yZWdpc3Rlcl9kZXZpY2VgLiBUaGUgTkNJIGNvcmUgd2lsbCBoYW5kbGUgYSBsb3Qgb2YgdGhlIGNvbW11bmljYXRpb24sIHdoaWNoIGlzIGltcG9ydGFudCB0byByZW1lbWJlci4gVGhlIGRyaXZlciBpbXBsZW1lbnRzIGBuY2lfb3BzYCAoYHMzZndybjVfbmNpX29wc2ApLCB3aGljaCBpbmNsdWRlcyB0aGUgc3RhbmRhcmQgc3R1ZmYgbGlrZSBgaW5pdGAsIGBvcGVuYCwgYGNsb3NlYCwgYHNlbmRgLCBgc2V0dXBgLCBgcG9zdF9zZXR1cGAsIGFuZCBgcHJvcF9vcHNgLiBUaGlzIHBhdGNoIHNwZWNpZmljYWxseSBhZGRzIGBzM2Z3cm41X25jaV9pbml0YCB0byBgbmNpX29wc2AsIGFuZCBhbHNvIGBzM2Z3cm41X25jaV9kdWFsX3JzcGAgdG8gYHMzZndybjVfbmNpX3Byb3Bfb3BzYC4gSXQgYWRkcyBgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWxgIGFzIHdlbGwsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBzM2Z3cm41X25jaV9wb3N0X3NldHVwYC4KCk5vdywgaGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nOiBgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWxgIGNhbGxzIGBmaXJtd2FyZV9yZXF1ZXN0X25vd2FybmAuIFRoYXQmIzM5O3MgYSBiaWcgZmxhZy4gVGhhdCBtZWFucyBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEkgY2FuIGRlZmluaXRlbHkgdHJpZ2dlciB0aGF0IGNvZGUgcGF0aC4KCk9rYXksIGxldCYjMzk7cyBuYWlsIGRvd24gd2hpY2ggZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLiBXZSYjMzk7dmUgZ290OgoKKiAgIGBzM2Z3cm41X25jaV9pbml0YAoqICAgYHMzZndybjVfbmNpX2R1YWxfcnNwYAoqICAgYHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsYAoqICAgYHMzZndybjVfbmNpX2Nsa19jZmdgCgpJIG5lZWQgdG8gcXVpY2tseSBjaGVjayBgZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuY2AgdG8gc2VlIGlmIHRob3NlIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQgc3RhdGljIG9yIG5vdCB0byBjb25maXJtIHRoZXkmIzM5O3JlIGFjdHVhbGx5IGV4cG9zZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjI6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7czNmd3JuNV9uY2lfZHVhbF9yc3AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuYz0xOD1zdGF0aWMgaW50IHMzZndybjVfbmNpX3Byb3BfcnNwKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvbmNpLmMtMzAtICovXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jOjMxOnN0YXRpYyBpbnQgczNmd3JuNV9uY2lfZHVhbF9yc3Aoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jLTMyLXtcbi0tXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jPTQzPWNvbnN0IHN0cnVjdCBuY2lfZHJpdmVyX29wcyBzM2Z3cm41X25jaV9wcm9wX29wc1s1XSA9IHtcbi0tXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jLTY2LVx0XHRcdFx0TkNJX1BST1BfRFVBTF9PUFRJT04pLFxuZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuYzo2NzpcdFx0LnJzcCA9IHMzZndybjVfbmNpX2R1YWxfcnNwLFxuZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuYy02OC1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjI6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5MDUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5GQyBEcml2ZXIgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIG9wdGltaXplIGl0IGJhc2VkIG9uIHRoZSBpbnN0cnVjdGlvbiB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBgczNmd3JuNV9uY2lfZHVhbF9yc3BgIGlzIHN0YXRpYywgd2hpY2ggbWlnaHQgYmUgYSBwb3RlbnRpYWwgaXNzdWUuIEJ1dCBoYW5nIG9uLi4uIGl0JiMzOTtzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aGluIGBzM2Z3cm41X25jaV9wcm9wX29wc2AuIFRoaXMgbWVhbnMgdGhlIGNvbXBpbGVyIHdvbiYjMzk7dCBpbmxpbmUgaXQsIHdoaWNoIGFjdHVhbGx5IG1ha2VzIGl0IHN1aXRhYmxlIGZvciB1c2UuCgpMZXQmIzM5O3Mgc2Vl4oCmIEkga25vdyB0aGF0IGBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbGAgYW5kIGBzM2Z3cm41X25jaV9jbGtfY2ZnYCBhcmUgKm5vbiotc3RhdGljLCBzbyB0aGV5JiMzOTtyZSBpbiBhIGdvb2Qgc3RhdGUuIEhvd2V2ZXIsIEkgcmVjYWxsIHRoYXQgYHMzZndybjVfbmNpX2luaXRgICppcyogc3RhdGljLiBCdXQgaXQgaXMgcGFzc2VkIHdpdGhpbiBgbmNpX29wc2AuIFRoYXQgc2VlbXMgc2ltaWxhciB0byB0aGUgYHMzZndybjVfbmNpX2R1YWxfcnNwYCBzaXR1YXRpb24sIGFuZCBtYXkgYmUgZmluZS4KClRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCBgczNmd3JuNV9uY2lfaW5pdGAsIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgaXRzIGRlZmluaXRpb24gaW4gYGRyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jYC4gSSBuZWVkIHRvIHJldmlldyBob3cgaXQmIzM5O3MgdXNlZCB3aXRoaW4gdGhhdCBmaWxlIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgaW1tZWRpYXRlIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIyOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3MzZndybjVfbmNpX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmM9NDE9c3RhdGljIGludCBzM2Z3cm41X2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jLTc5LVxuZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmM6ODA6c3RhdGljIGludCBzM2Z3cm41X25jaV9pbml0KHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxuZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmMtODEte1xuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jPTE3OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5jaV9vcHMgczNmd3JuNV9uY2lfb3BzID0ge1xuZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmM6MTgwOlx0LmluaXQgPSBzM2Z3cm41X25jaV9pbml0LFxuZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmMtMTgxLVx0Lm9wZW4gPSBzM2Z3cm41X25jaV9vcGVuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIyOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzEyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIFN0YXRpYyBOYXR1cmUgb2YgYSBEdWFsIFJGIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBzaXR1YXRpb24gaXMgJiMzNDtzdGF0aWMmIzM0Oy4gVGhhdCBpbW1lZGlhdGVseSBzdWdnZXN0cyBhIHBvdGVudGlhbCBwcm9ibGVtIOKAkyBvciBhdCBsZWFzdCwgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgY2FyZWZ1bCBpbnZlc3RpZ2F0aW9uLiBJJiMzOTttIGluZmVycmluZyBhIGxhY2sgb2YgZHluYW1pc20sIHBvc3NpYmx5IGEgaGFyZGNvZGVkIGNvbmZpZ3VyYXRpb24gb3IgYSBmaXhlZCBzdGF0ZS4gVGhpcyBmZWVscyBsaWtlIGEgc21lbGwgdGVzdCwgc28gSSBuZWVkIHRvIGRpZyBkZWVwZXIuCgpNeSBpbW1lZGlhdGUgaW5zdGluY3QsIGdpdmVuIHRoZSBjb250ZXh0IG9mIGxpa2VseSBORkMvUkYgYW5kIGR1YWwgY29uZmlndXJhdGlvbnMsIGlzIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUga2VybmVsIGNvZGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgYHMzZndybjVgIGRyaXZlciwgYW5kIGl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRoYXQgdGhlIGtleSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgdGhpcyBkdWFsIFJGIHNldHVwIGlzIGBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbGAgd2l0aGluIGBkcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jYC4gSSBoYXZlIGEgZmVlbGluZyB0aGUgc3RhdGljLW5lc3MgSSYjMzk7bSBzZW5zaW5nIGlzIHJlZmxlY3RlZCBzb21ld2hlcmUgd2l0aGluIHRoYXQgZnVuY3Rpb24sIHdoZXRoZXIgaXQmIzM5O3MgdGhyb3VnaCB0aGUgcGFyYW1ldGVycyBwYXNzZWQsIHRoZSBsb2dpYyBmbG93LCBvciB0aGUgd2F5IHJlc291cmNlcyBhcmUgYWxsb2NhdGVkLiBNeSBndXQgc2F5cyB0aGF0IHRoaXMgaXMgdGhlIHBvaW50IHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIGlzIGhhcmRjb2RlZCwgcHJldmVudGluZyB0aGUgc3lzdGVtIGZyb20gYWRqdXN0aW5nIGR5bmFtaWNhbGx5IHRvIHVzZXIgbmVlZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIyOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3MzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jPTE0ND1zdGF0aWMgaW50IHMzZndybjVfbmNpX3Bvc3Rfc2V0dXAoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4tLVxuZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmMtMTQ5LVx0aWYgKGluZm8tXHUwMDNldmFyaWFudCA9PSBTM0ZXUk41X1ZBUklBTlRfUzNOUk40Vikge1xuZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmM6MTUwOlx0XHRyZXQgPSBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbChpbmZvLCBTM05STjRWX0hXUkVHX05BTUUsXG5kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYy0xNTEtXHRcdFx0XHRcdFx0ICAgIFMzTlJONFZfU1dSRUdfTkFNRSk7XG4tLVxuZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuYz0xNjc9c3RhdGljIGJvb2wgczNmd3JuNV9uY2lfZHVhbF9jYWxfY3VycmVudChzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLFxuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvbmNpLmMtMTg3LSAqL1xuZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuYzoxODg6aW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jLTE4OS1cdFx0XHRcdCAgY29uc3QgY2hhciAqaHdfbmFtZSwgY29uc3QgY2hhciAqc3dfbmFtZSlcbi0tXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oPTcyPWludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmUoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqZndfbmFtZSk7XG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oOjczOmludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbChzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLFxuZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaC03NC1cdFx0XHRcdCAgY29uc3QgY2hhciAqaHdfbmFtZSwgY29uc3QgY2hhciAqc3dfbmFtZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIyOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTU1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkFuYWx5emluZyB0aGUgTm9uLVN0YXRpYyBOYXR1cmUqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyB0aGlzIGlzIG5vdCBhIHN0YXRpYyBzaXR1YXRpb24sIHRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGF0IG1lLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBkeW5hbWljIGhlcmUuIFRoYXQgbWVhbnMgdGhlIGZvY3VzIHNoaWZ0cywgd2UgbmVlZCB0byBsb29rIGZvciB0aGUgdGhpbmdzIHRoYXQgYXJlIHZhcmlhYmxlLiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQmIzM5O3MgdGhlIG5leHQgc3RlcD8gTXkgZ3V0IHNheXMgd2UgbmVlZCB0byBsb29rIGF0IHdoYXQmIzM5O3MgY2hhbmdpbmcuIFJpZ2h0LiBPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoYXQgYHMzZndybjVfbmNpX2Nsa19jZmdgIGVsZW1lbnQuIFRoaXMgc2VlbXMgbGlrZSBhIHBpdm90YWwgcGllY2UsIGNvbnNpZGVyaW5nIHdoYXQgd2UmIzM5O3JlIGxvb2tpbmcgYXQuIEdvdHRhIGZpZ3VyZSBvdXQgd2hhdCBpdCYjMzk7cyBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7czNmd3JuNV9uY2lfY2xrX2NmZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYz04MD1zdGF0aWMgaW50IHMzZndybjVfbmNpX2luaXQoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4tLVxuZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmMtODUtXHRpZiAoaW5mby1cdTAwM2V2YXJpYW50ID09IFMzRldSTjVfVkFSSUFOVF9TM05STjRWKSB7XG5kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYzo4NjpcdFx0cmV0ID0gczNmd3JuNV9uY2lfY2xrX2NmZyhpbmZvKTtcbmRyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jLTg3LVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvbmNpLmM9NzM9aW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZShzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLCBjb25zdCBjaGFyICpmd19uYW1lKVxuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvbmNpLmMtMTQ5LSAqL1xuZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuYzoxNTA6aW50IHMzZndybjVfbmNpX2Nsa19jZmcoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbylcbmRyaXZlcnMvbmZjL3MzZndybjUvbmNpLmMtMTUxLXtcbi0tXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oPTczPWludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbChzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLFxuZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaC03NC1cdFx0XHRcdCAgY29uc3QgY2hhciAqaHdfbmFtZSwgY29uc3QgY2hhciAqc3dfbmFtZSk7XG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oOjc1OmludCBzM2Z3cm41X25jaV9jbGtfY2ZnKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8pO1xuZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaC03Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyNDAKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTM0ZXUk41IE5DSSBEcml2ZXIgRW50cnlwb2ludHMqKgoKT2theSwgc28gdGhpcyBpc24mIzM5O3QgYSBzdGF0aWMgc2l0dWF0aW9uLiBHb29kLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciB0aGUgUzNGV1JONSBOQ0kgZHJpdmVyLiBCYXNlZCBvbiB3aGF0JiMzOTtzIGhlcmUsIHRoZSBpbml0aWFsIGZ1bmN0aW9ucyB0byBjb25zaWRlciBhcmU6IGBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbGAsIGBzM2Z3cm41X25jaV9jbGtfY2ZnYCwgYHMzZndybjVfbmNpX2R1YWxfcnNwYCwgYW5kIGBzM2Z3cm41X25jaV9pbml0YC4KCldhaXQgYSBtaW51dGUsIGBzM2Z3cm41X25jaV9kdWFsX3JzcGAgYW5kIGBzM2Z3cm41X25jaV9pbml0YCBhcmUgKnN0YXRpYyouIE5vcm1hbGx5LCBJJiMzOTtkIHNraXAgdGhvc2UsIGJ1dCB0aGV5IGFyZSBhbHNvIHBhc3NlZCBhcm91bmQgYXMgZnVuY3Rpb24gcG9pbnRlcnMsIHdoaWNoIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgdGhleSB3b24mIzM5O3QgYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIFNpbmNlIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIGJ1dCB0aGVzZSAqYXJlKiBlbnRyeXBvaW50cyBmcm9tIHRoZSBOQ0kgY29yZSwgSSYjMzk7bGwgaW5jbHVkZSB0aGVtLiBUaHVzLCBgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWxgIGFuZCBgczNmd3JuNV9uY2lfY2xrX2NmZ2Agd2lsbCBiZSB0aGUgcHJpbWFyeSBmb2N1cy4gSW5jbHVkaW5nIGBzM2Z3cm41X25jaV9kdWFsX3JzcGAgYW5kIGBzM2Z3cm41X25jaV9pbml0YCBpcyBhbHNvIHJlbGV2YW50IGJlY2F1c2UgdGhleSBhcmUgaW1wb3J0YW50IHBhcnRzIG9mIHRoaXMgc3Vic3lzdGVtLgoKTm93LCBsZXQmIzM5O3MganVzdCBxdWlja2x5IGNoZWNrIGZvciBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBkZWZpbmVzLiBJdCBsb29rcyBsaWtlIGBORkNfUzNGV1JONWAgYW5kIGBORkNfUzNGV1JONV9JMkNgIGFyZSBsaWtlbHkgY2FuZGlkYXRlcy4gSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjaGVjayB0aGUgYGRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZ2AgZmlsZSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbnMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORkNfUzNGV1JONSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZzoyOmNvbmZpZyBORkNfUzNGV1JONVxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTMtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZy05LVxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnOjEwOmNvbmZpZyBORkNfUzNGV1JONV9JMkNcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZy0xMS1cdHRyaXN0YXRlIFwmIzM0O1NhbXN1bmcgUzNGV1JONSBJMkMgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjE2MgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoYXQgS2NvbmZpZyBmaWxlOgoKKipEaXZpbmcgaW50byB0aGUgTkZDIERyaXZlciYjMzk7cyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBjcmFjayBvcGVuIGBkcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWdgLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIFMzRldSTjUgTkZDIGRyaXZlciBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBJbW1lZGlhdGVseSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSB0eXBpY2FsIHN0cnVjdHVyZSBvZiBhIEtjb25maWcgZmlsZTogZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIGFuZCB0aGUgYWN0dWFsIGNvbmZpZ3VyYXRpb24gc3ltYm9scy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIG1haW4gZW5hYmxlIG9wdGlvbiBmb3IgdGhlIGRyaXZlciwgSSYjMzk7bSBzdXJlIGl0IHdpbGwgYmUgc29tZXRoaW5nIGxpa2UgYENPTkZJR19ORkNfUzNGV1JONWAuIFRoZW4gSSB3aWxsIGxvb2sgZm9yIGFueSBzdWItb3B0aW9ucywgbWF5YmUgSSB3aWxsIGZpbmQgc2V0dGluZ3MgdG8gdG9nZ2xlIHNwZWNpZmljIGZlYXR1cmVzLCBsaWtlIGRpZmZlcmVudCBORkMgbW9kZXMgb3IgcG93ZXItc2F2aW5nIGNvbmZpZ3VyYXRpb25zLCBvciBldmVuIGRlYnVnIG9wdGlvbnMuCgpJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIga2VybmVsIGNvbXBvbmVudHMsIGhhcmR3YXJlIGludGVyZmFjZXMgKGxpa2UgSTJDLCBTUEkpLCBvciBldmVuIG90aGVyIE5GQyBtb2R1bGVzIHRoaXMgZHJpdmVyIHJlbGllcyBvbi4gQXJlIHRoZXJlIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBkZXBlbmRlbmNpZXM/IFRoYXQgd2lsbCBpbmZsdWVuY2UgaG93IEkgaW50ZXJwcmV0IHRoZSBvcHRpb25zLgoKVGhlIGhlbHAgdGV4dCBpcyBjcnVjaWFsLiBJIGV4cGVjdCBpdCB0byBnaXZlIG1lIGEgY29uY2lzZSBkZXNjcmlwdGlvbiBvZiB0aGUgZHJpdmVyJiMzOTtzIHB1cnBvc2UsIHRoZSBkZXZpY2UgaXQgc3VwcG9ydHMsIGFuZCBwb3RlbnRpYWxseSBhbnkgbGltaXRhdGlvbnMgb3Iga25vd24gaXNzdWVzLiBUaGlzIGlzIGFsc28gd2hlcmUgSSB3aWxsIGZpbmQgaW5mb3JtYXRpb24gb24gaG93IHRoZSBvcHRpb25zIGludGVyYWN0IGFuZCB3aGF0IHRoZXkgZG8uCgpGaW5hbGx5LCBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkZWZhdWx0IHZhbHVlcyBvZiB0aGVzZSBvcHRpb25zLiBBcmUgdGhleSBzZW5zaWJsZSBmb3IgYSB3aWRlIHJhbmdlIG9mIGRldmljZXMsIG9yIGFyZSB0aGV5IGdlYXJlZCB0b3dhcmRzIGEgcGFydGljdWxhciBoYXJkd2FyZSBzZXR1cD8gVGhpcyBoZWxwcyBtZSB1bmRlcnN0YW5kIHRoZSBpbnRlbmRlZCB1c2UgY2FzZSBvZiB0aGUgZHJpdmVyLiBJZiB0aGUgZGVmYXVsdCBzZXR0aW5ncyBhcmUgb2JzY3VyZSwgSSYjMzk7bGwgbmVlZCB0byBkcmlsbCBkb3duIGRlZXBlciBpbnRvIHRoZSBkb2N1bWVudGF0aW9uLiBVbHRpbWF0ZWx5LCBJJiMzOTtsbCBiZSB1c2luZyB0aGlzIGluZm9ybWF0aW9uIHRvIGRldGVybWluZSBob3cgdG8gYmVzdCBidWlsZCBhbmQgY29uZmlndXJlIGEga2VybmVsIHdpdGggdGhpcyBkcml2ZXIsIGFuZCBob3cgdG8gdHJvdWJsZXNob290IGl0IGlmIHRoZXJlIGFyZSBhbnkgaXNzdWVzLiBUaGlzIGZpbGUgd2lsbCBiZSBteSByb2FkbWFwIHRvIHVuZGVyc3RhbmRpbmcgYW5kIGNvbnRyb2xsaW5nIHRoZSBTM0ZXUk41IGRyaXZlciYjMzk7cyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE5GQ19TM0ZXUk41XG4gICAzOlx0XHR0cmlzdGF0ZVxuICAgNDpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBDb3JlIGRyaXZlciBmb3IgU2Ftc3VuZyBTM0ZXUk41IE5GQyBjaGlwLiBDb250YWlucyBjb3JlIHV0aWxpdGllc1xuICAgNzpcdFx0ICBvZiBjaGlwLiBJdCYjMzk7cyBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IFBIWXMgdG8gYXZvaWQgZHVwbGljYXRpbmcgbG90c1xuICAgODpcdFx0ICBvZiBjb21tb24gY29kZS5cbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgTkZDX1MzRldSTjVfSTJDXG4gIDExOlx0XHR0cmlzdGF0ZSBcJiMzNDtTYW1zdW5nIFMzRldSTjUgSTJDIHN1cHBvcnRcJiMzNDtcbiAgMTI6XHRcdGRlcGVuZHMgb24gTkZDX05DSSBcdTAwMjZcdTAwMjYgSTJDXG4gIDEzOlx0XHRzZWxlY3QgTkZDX1MzRldSTjVcbiAgMTQ6XHRcdGRlZmF1bHQgblxuICAxNTpcdFx0aGVscFxuICAxNjpcdFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIGFuIEkyQyBpbnRlcmZhY2UgdG8gdGhlIFMzRldSTjUgY2hpcC5cbiAgMTc6XHRcdCAgU2VsZWN0IHRoaXMgaWYgeW91ciBwbGF0Zm9ybSBpcyB1c2luZyB0aGUgSTJDIGJ1cy5cbiAgMTg6XHRcbiAgMTk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIG0gaGVyZS4gVGhlIG1vZHVsZSB3aWxsXG4gIDIwOlx0XHQgIGJlIGNhbGxlZCBzM2Z3cm41X2kyYy5rby5cbiAgMjE6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuICAyMjpcdFxuICAyMzpcdGNvbmZpZyBORkNfUzNGV1JOODJfVUFSVFxuICAyNDpcdCAgICAgICAgdHJpc3RhdGUgXCYjMzQ7U2Ftc3VuZyBTM0ZXUk44MiBVQVJUIHN1cHBvcnRcJiMzNDtcbiAgMjU6XHQgICAgICAgIGRlcGVuZHMgb24gTkZDX05DSSBcdTAwMjZcdTAwMjYgU0VSSUFMX0RFVl9CVVNcbiAgMjY6XHQgICAgICAgIHNlbGVjdCBORkNfUzNGV1JONVxuICAyNzpcdCAgICAgICAgaGVscFxuICAyODpcdCAgICAgICAgICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIGEgVUFSVCBpbnRlcmZhY2UgdG8gdGhlIFMzRldSTjgyIGNoaXAuXG4gIDI5Olx0ICAgICAgICAgIFNlbGVjdCB0aGlzIGlmIHlvdXIgcGxhdGZvcm0gaXMgdXNpbmcgdGhlIFVBUlQgYnVzLlxuICAzMDpcdFxuICAzMTpcdCAgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgbSBoZXJlLiBUaGUgbW9kdWxlIHdpbGxcbiAgMzI6XHQgICAgICAgICAgYmUgY2FsbGVkIHMzZndybjgyX3VhcnQua28uXG4gIDMzOlx0ICAgICAgICAgIFNheSBOIGlmIHVuc3VyZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxNTkKCQkJCQkJCW91dHB1dDogMjA5CgkJCQkJCQl0aG91Z2h0czogNzk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gUGxhbiBmb3IgdGhlIFMzRldSTjUgTkZDIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYHMzZndybjVgIE5GQyBkcml2ZXIgYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZmlndXJlIG91dCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiAgSSBuZWVkIHRvIGdldCBzdXBwb3J0IGZvciB0aGlzIGBzM25ybjR2YCB2YXJpYW50IHdvcmtpbmcuICBUaGUgY29kZSBtZW50aW9ucyBgTkZDX1MzRldSTjVfSTJDYCBhbmQgYE5GQ19TM0ZXUk44Ml9VQVJUYCwgcmlnaHQ/IEFuZCBiYXNlZCBvbiB0aGUgZGVwZW5kZW5jaWVzLCBpdCBsb29rcyBsaWtlIGBORkNfUzNGV1JONV9JMkNgIGRlcGVuZHMgb24gYE5GQ19OQ0lgIGFuZCBgSTJDYCwgd2hpbGUgYE5GQ19TM0ZXUk44Ml9VQVJUYCBkZXBlbmRzIG9uIGBORkNfTkNJYCBhbmQgYFNFUklBTF9ERVZfQlVTYC4gTWFrZXMgc2Vuc2UuICBJIG5lZWQgYm90aCBvZiB0aG9zZSAtIGBORkNfUzNGV1JONV9JMkNgIGFuZCBgTkZDX1MzRldSTjgyX1VBUlRgLiAgYE5GQ19OQ0lgIGlzIGEgY29yZSBORkMgY29uZmlnLCBzbyBJJiMzOTtsbCBiZSBzdXJlIHRoYXQgaXMgaW5jbHVkZWQuIFdlIGNhbiBpbmNsdWRlIHRoZSBvdGhlcnMgaWYgbmVjZXNzYXJ5LgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgZnVuY3Rpb25zIHRoZW1zZWx2ZXMuICBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgSSBuZWVkIHRvIGZvY3VzIG9uOgoqICAgYHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsYAoqICAgYHMzZndybjVfbmNpX2Nsa19jZmdgCiogICBgczNmd3JuNV9uY2lfZHVhbF9yc3BgCiogICBgczNmd3JuNV9uY2lfaW5pdGAKCldhaXQsIGBzM2Z3cm41X25jaV9kdWFsX3JzcGAgYW5kIGBzM2Z3cm41X25jaV9pbml0YCBhcmUgc3RhdGljLiAgSG93ZXZlciwgdGhleSYjMzk7cmUgbm90IGlubGluZWQsIHdoaWNoIG1ha2VzIHRoZW0gZW50cnkgcG9pbnRzIGZvciB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuIFNvIEkgd2lsbCBpbmNsdWRlIHRoZW0uIGBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbGAgYW5kIGBzM2Z3cm41X25jaV9jbGtfY2ZnYCBhcmUgYWxzbyBub3Qgc3RhdGljLiBJIHRoaW5rIEkmIzM5O2xsIGluY2x1ZGUgdGhvc2UgdG9vIGJlY2F1c2UgdGhleSBhcmUgbm90IHN0YXRpYy4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQgbWUgZG91YmxlLWNoZWNrLiBgczNmd3JuNV9uY2lfaW5pdGAgaXMgc3RhdGljLiBZZXMuIEFuZCBgczNmd3JuNV9uY2lfZHVhbF9yc3BgIGlzIGFsc28gc3RhdGljLCBhcyBJIHRob3VnaHQuIFdoYXQgYWJvdXQgYHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsYD8gTm8sIG5vdCBzdGF0aWMuIEFuZCBgczNmd3JuNV9uY2lfY2xrX2NmZ2A/IEFsc28gbm90IHN0YXRpYy4KClNvLCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSBpbmNsdWRpbmcgaW4gdGhlIGZpbmFsIGxpc3Q6CgpGdW5jdGlvbnMgdG8gbG9vayBhdDoKKiAgIGBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbGAKKiAgIGBzM2Z3cm41X25jaV9jbGtfY2ZnYAoqICAgYHMzZndybjVfbmNpX2R1YWxfcnNwYAoqICAgYHMzZndybjVfbmNpX2luaXRgCgpDb25maWd1cmF0aW9ucyB0byBlbmFibGU6CiogICBgTkZDX1MzRldSTjVfSTJDYAoqICAgYE5GQ19TM0ZXUk44Ml9VQVJUYAoqICAgYE5GQ19OQ0lgCgpUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgYHMzbnJuNHZgIHZhcmlhbnQgdG8gdGhlIGBzM2Z3cm41YCBORkMgZHJpdmVyLiBUaGlzIG5ldyB2YXJpYW50IGhhcyBuZXcgTkNJIGNvbW1hbmRzIGFuZCByZXNwb25zZXMgYW5kIGludHJvZHVjZXMgYSBuZXcgUkYgY29uZmlndXJhdGlvbiByb3V0aW5lLiBUaGUgZHJpdmVyIGlzIGFjY2Vzc2libGUgdmlhIHRoZSBOQ0kgaW50ZXJmYWNlIGFuZCB0aGUgSTJDL1VBUlQgYnVzZXMuICBJIHNob3VsZCBiZSBhYmxlIHRvIGZ1enogaXQgdXNpbmcgdmlydHVhbCBkZXZpY2VzIG9yIHN5emthbGxlciYjMzk7cyBOQ0kgc3VwcG9ydC4KCk9uZSBmaW5hbCBjaGVjay4gSSBzZWUgdGhhdCBgczNmd3JuNV9uY2lfZHVhbF9yc3BgIGlzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgaW4gYHMzZndybjVfbmNpX3Byb3Bfb3BzYCwgc28gaXQgY2FuJiMzOTt0IGJlIGlubGluZWQuIFNpbWlsYXJseSwgYHMzZndybjVfbmNpX2luaXRgIGlzIGluIGBzM2Z3cm41X25jaV9vcHNgLgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgd2l0aCB0aGlzLiBJIHdpbGwgbm93IGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkNfTkNJJiMzNDssCiAgICAmIzM0O05GQ19TM0ZXUk41X0kyQyYjMzQ7LAogICAgJiMzNDtORkNfUzNGV1JOODJfVUFSVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3MzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsJiMzNDssCiAgICAmIzM0O3MzZndybjVfbmNpX2Nsa19jZmcmIzM0OywKICAgICYjMzQ7czNmd3JuNV9uY2lfZHVhbF9yc3AmIzM0OywKICAgICYjMzQ7czNmd3JuNV9uY2lfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBzM25ybjR2IHZhcmlhbnQgdG8gdGhlIHMzZndybjUgTkZDIGRyaXZlci4gSXQgaW50cm9kdWNlcyBuZXcgTkNJIHByb3ByaWV0YXJ5IGNvbW1hbmRzIGFuZCByZXNwb25zZXMsIGFuZCBhIG5ldyBSRiBjb25maWd1cmF0aW9uIHJvdXRpbmUuIFRoZSBkcml2ZXIgaXMgcmVhY2hhYmxlIHZpYSB0aGUgTkNJIGludGVyZmFjZSBhbmQgSTJDL1VBUlQgYnVzZXMsIHdoaWNoIGNhbiBiZSBmdXp6ZWQgdXNpbmcgdmlydHVhbCBkZXZpY2VzIG9yIHN5emthbGxlciYjMzk7cyBOQ0kgc3VwcG9ydC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZDX05DSSYjMzQ7LAogICAgJiMzNDtORkNfUzNGV1JONV9JMkMmIzM0OywKICAgICYjMzQ7TkZDX1MzRldSTjgyX1VBUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbCYjMzQ7LAogICAgJiMzNDtzM2Z3cm41X25jaV9jbGtfY2ZnJiMzNDssCiAgICAmIzM0O3MzZndybjVfbmNpX2R1YWxfcnNwJiMzNDssCiAgICAmIzM0O3MzZndybjVfbmNpX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgczNucm40diB2YXJpYW50IHRvIHRoZSBzM2Z3cm41IE5GQyBkcml2ZXIuIEl0IGludHJvZHVjZXMgbmV3IE5DSSBwcm9wcmlldGFyeSBjb21tYW5kcyBhbmQgcmVzcG9uc2VzLCBhbmQgYSBuZXcgUkYgY29uZmlndXJhdGlvbiByb3V0aW5lLiBUaGUgZHJpdmVyIGlzIHJlYWNoYWJsZSB2aWEgdGhlIE5DSSBpbnRlcmZhY2UgYW5kIEkyQy9VQVJUIGJ1c2VzLCB3aGljaCBjYW4gYmUgZnV6emVkIHVzaW5nIHZpcnR1YWwgZGV2aWNlcyBvciBzeXprYWxsZXImIzM5O3MgTkNJIHN1cHBvcnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIyOjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjI6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBhIG5ldyBORkMgY2hpcCB2YXJpYW50IChTM05STjRWKSBhbmQgYWRkcyBuZXcgTkNJIGNvbW1hbmRzIGZvciBmaXJtd2FyZSBjb25maWd1cmF0aW9uIGFuZCBjYWxpYnJhdGlvbiBkYXRhIHVwZGF0ZXMuIEFsbCBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB0aGUgZGV2aWNlIChzdWNoIGFzIGBzZXRfb3B0aW9uYCwgYHN0b3BfY21kYCwgYW5kIGBzdWJfb2lkYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYG5jaV9wcm9wX2NtZGAuIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgc2VudCBpcyBjYXJlZnVsbHkgY2FsY3VsYXRlZCB0byBtYXRjaCB0aGUgaW5pdGlhbGl6ZWQgYnl0ZXMsIHByZXZlbnRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGZyb20gYmVpbmcgc2VudC4gRGF0YSByZWNlaXZlZCBmcm9tIHRoZSBkZXZpY2UgaXMgY29waWVkIGludG8gYGluZm8tXHUwMDNlZHVhbF9yc3BgIHdpdGggaXRzIGxlbmd0aCB0cmFja2VkIGJ5IGBpbmZvLVx1MDAzZWR1YWxfcnNwX2xlbmAsIGFuZCBib3VuZHMgY2hlY2tzIGFyZSBwZXJmb3JtZWQgYmVmb3JlIGFjY2Vzc2luZyBpdC4gV2hpbGUgdGhlcmUgaXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIGlmIGBza2ItXHUwMDNlbGVuYCBpcyAwIGluIGBzM2Z3cm41X25jaV9kdWFsX3JzcGAgKGBza2ItXHUwMDNlZGF0YVswXWApLCB0aGlzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIHRvIHVzZXIgc3BhY2Ugb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgdXNlZCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gdGVzdCB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3YjQwMjBhYWUwNTI3NmQ0YTQ3YzNmYmFkNzE1M2Q3ZGEzMmVmYjkxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMjI6MzU6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L25mYy9zYW1zdW5nLHMzZndybjUueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3NhbXN1bmcsczNmd3JuNS55YW1sCmluZGV4IDEyYmFlZTQ1NzUyYzcuLjQwYTY5NDY2ODAyYmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3NhbXN1bmcsczNmd3JuNS55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3NhbXN1bmcsczNmd3JuNS55YW1sCkBAIC0xNCw2ICYjNDM7MTQsNyBAQCBwcm9wZXJ0aWVzOgogICAgIGVudW06CiAgICAgICAtIHNhbXN1bmcsczNmd3JuNS1pMmMKICAgICAgIC0gc2Ftc3VuZyxzM2Z3cm44MgomIzQzOyAgICAgIC0gc2Ftc3VuZyxzM25ybjR2CiAKICAgZW4tZ3Bpb3M6CiAgICAgbWF4SXRlbXM6IDEKQEAgLTI5LDYgJiM0MzszMCw5IEBAIHByb3BlcnRpZXM6CiAgIGNsb2NrczoKICAgICBtYXhJdGVtczogMQogCiYjNDM7ICBwdmRkLXN1cHBseToKJiM0MzsgICAgZGVzY3JpcHRpb246IFBWREQgcG93ZXIgc3VwcGx5CiYjNDM7CiAgIHdha2UtZ3Bpb3M6CiAgICAgbWF4SXRlbXM6IDEKICAgICBkZXNjcmlwdGlvbjoKQEAgLTU4LDEyICYjNDM7NjIsMjUgQEAgYWxsT2Y6CiAgICAgICBwcm9wZXJ0aWVzOgogICAgICAgICBjb21wYXRpYmxlOgogICAgICAgICAgIGNvbnRhaW5zOgotICAgICAgICAgICAgY29uc3Q6IHNhbXN1bmcsczNmd3JuNS1pMmMKJiM0MzsgICAgICAgICAgICBlbnVtOgomIzQzOyAgICAgICAgICAgICAgLSBzYW1zdW5nLHMzZndybjUtaTJjCiYjNDM7ICAgICAgICAgICAgICAtIHNhbXN1bmcsczNucm40dgogICAgIHRoZW46CiAgICAgICByZXF1aXJlZDoKICAgICAgICAgLSBpbnRlcnJ1cHRzCiAgICAgICAgIC0gcmVnCiAKJiM0MzsgICMgRGVwbG95ZWQgRFRzIGZvciB0aGUgb2xkZXIgcGFydHMgbmV2ZXIgZGVzY3JpYmVkIGEgc3VwcGx5LCBzbyBQVkREIGlzCiYjNDM7ICAjIG9ubHkgcmVxdWlyZWQgZm9yIHRoZSBuZXcgZGV2aWNlLgomIzQzOyAgLSBpZjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgY29tcGF0aWJsZToKJiM0MzsgICAgICAgICAgY29udGFpbnM6CiYjNDM7ICAgICAgICAgICAgY29uc3Q6IHNhbXN1bmcsczNucm40dgomIzQzOyAgICB0aGVuOgomIzQzOyAgICAgIHJlcXVpcmVkOgomIzQzOyAgICAgICAgLSBwdmRkLXN1cHBseQomIzQzOwogZXhhbXBsZXM6CiAgIC0gfAogICAgICNpbmNsdWRlICZsdDtkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaCZndDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9taWxvcy1mYWlycGhvbmUtZnA2LmR0cyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9taWxvcy1mYWlycGhvbmUtZnA2LmR0cwppbmRleCBlYmRjYTBlMmQyZjNhLi5iZGJhODQ4Mjc1ZGI0IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbWlsb3MtZmFpcnBob25lLWZwNi5kdHMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21pbG9zLWZhaXJwaG9uZS1mcDYuZHRzCkBAIC02MDEsOSAmIzQzOzYwMSwyMiBAQCAmYW1wO2djYyB7CiB9OwogCiAmYW1wO2kyYzEgewotCS8qIFNhbXN1bmcgTkZDIEAgMHgyNyAqLwotCiAJc3RhdHVzID0gJiMzNDtva2F5JiMzNDs7CiYjNDM7CiYjNDM7CW5mY0AyNyB7CiYjNDM7CQljb21wYXRpYmxlID0gJiMzNDtzYW1zdW5nLHMzbnJuNHYmIzM0OzsKJiM0MzsJCXJlZyA9ICZsdDsweDI3Jmd0OzsKJiM0MzsKJiM0MzsJCWludGVycnVwdHMtZXh0ZW5kZWQgPSAmbHQ7JmFtcDt0bG1tIDMxIElSUV9UWVBFX0VER0VfUklTSU5HJmd0OzsKJiM0MzsJCWVuLWdwaW9zID0gJmx0OyZhbXA7dGxtbSA1NiBHUElPX0FDVElWRV9ISUdIJmd0OzsKJiM0MzsJCXdha2UtZ3Bpb3MgPSAmbHQ7JmFtcDt0bG1tIDcgR1BJT19BQ1RJVkVfSElHSCZndDs7CiYjNDM7CQljbG9ja3MgPSAmbHQ7JmFtcDtycG1oY2MgUlBNSF9MTl9CQl9DTEsyJmd0OzsKJiM0MzsKJiM0MzsJCXB2ZGQtc3VwcGx5ID0gJmx0OyZhbXA7dnJlZ19sMjBiJmd0OzsKJiM0MzsKJiM0MzsJCXBpbmN0cmwtMCA9ICZsdDsmYW1wO25mY19kZWZhdWx0Jmd0OzsKJiM0MzsJCXBpbmN0cmwtbmFtZXMgPSAmIzM0O2RlZmF1bHQmIzM0OzsKJiM0MzsJfTsKIH07CiAKICZhbXA7aTJjMyB7CkBAIC04MjUsNiAmIzQzOzgzOCwyMiBAQCAmYW1wO3RsbW0gewogCQkJICAgICAgICZsdDsxMyAxJmd0OywgLyogTkMgKi8KIAkJCSAgICAgICAmbHQ7NjMgMiZndDs7IC8qIFdMQU4gVUFSVCAqLwogCiYjNDM7CW5mY19kZWZhdWx0OiBuZmMtZGVmYXVsdC1zdGF0ZSB7CiYjNDM7CQlpcnEtcGlucyB7CiYjNDM7CQkJcGlucyA9ICYjMzQ7Z3BpbzMxJiMzNDs7CiYjNDM7CQkJZnVuY3Rpb24gPSAmIzM0O2dwaW8mIzM0OzsKJiM0MzsJCQlkcml2ZS1zdHJlbmd0aCA9ICZsdDsyJmd0OzsKJiM0MzsJCQliaWFzLWRpc2FibGU7CiYjNDM7CQl9OwomIzQzOwomIzQzOwkJcGQtcGlucyB7CiYjNDM7CQkJcGlucyA9ICYjMzQ7Z3BpbzU2JiMzNDs7CiYjNDM7CQkJZnVuY3Rpb24gPSAmIzM0O2dwaW8mIzM0OzsKJiM0MzsJCQlkcml2ZS1zdHJlbmd0aCA9ICZsdDsyJmd0OzsKJiM0MzsJCQliaWFzLXB1bGwtdXA7CiYjNDM7CQl9OwomIzQzOwl9OwomIzQzOwogCXNkYzJfY2FyZF9kZXRfbjogc2RjMi1jYXJkLWRldC1zdGF0ZSB7CiAJCXBpbnMgPSAmIzM0O2dwaW82NSYjMzQ7OwogCQlmdW5jdGlvbiA9ICYjMzQ7Z3BpbyYjMzQ7OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmMgYi9kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYwppbmRleCBhZjBmYThiZDk3MGI0Li41NjM0NzBjYjkyOGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYwpAQCAtMjAsNiAmIzQzOzIwLDkgQEAKIAkJCQlORkNfUFJPVE9fSVNPMTQ0NDNfQl9NQVNLIHwgXAogCQkJCU5GQ19QUk9UT19JU08xNTY5M19NQVNLKQogCiYjNDM7I2RlZmluZSBTM05STjRWX0hXUkVHX05BTUUJJiMzNDtzYW1zdW5nL3MzbnJuNHYvaHdyZWcuYmluJiMzNDsKJiM0MzsjZGVmaW5lIFMzTlJONFZfU1dSRUdfTkFNRQkmIzM0O3NhbXN1bmcvczNucm40di9zd3JlZy5iaW4mIzM0OwomIzQzOwogc3RhdGljIGludCBzM2Z3cm41X2Zpcm13YXJlX2luaXQoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgczNmd3JuNV9md19pbmZvICpmd19pbmZvID0gJmFtcDtpbmZvLSZndDtmd19pbmZvOwpAQCAtNzQsNiAmIzQzOzc3LDIyIEBAIHN0YXRpYyBpbnQgczNmd3JuNV9maXJtd2FyZV91cGRhdGUoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbykKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIGludCBzM2Z3cm41X25jaV9pbml0KHN0cnVjdCBuY2lfZGV2ICpuZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbyA9IG5jaV9nZXRfZHJ2ZGF0YShuZGV2KTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CWlmIChpbmZvLSZndDt2YXJpYW50ID09IFMzRldSTjVfVkFSSUFOVF9TM05STjRWKSB7CiYjNDM7CQlyZXQgPSBzM2Z3cm41X25jaV9jbGtfY2ZnKGluZm8pOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZGV2X2VycigmYW1wO25kZXYtJmd0O25mY19kZXYtJmd0O2RldiwKJiM0MzsJCQkJJiMzNDtmYWlsZWQgdG8gY29uZmlndXJlIHRoZSByZWZlcmVuY2UgY2xvY2s6ICVkXG4mIzM0OywKJiM0MzsJCQkJcmV0KTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgczNmd3JuNV9uY2lfb3BlbihzdHJ1Y3QgbmNpX2RldiAqbmRldikKIHsKIAlzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpOwpAQCAtMTI3LDYgJiM0MzsxNDYsMTUgQEAgc3RhdGljIGludCBzM2Z3cm41X25jaV9wb3N0X3NldHVwKHN0cnVjdCBuY2lfZGV2ICpuZGV2KQogCXN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8gPSBuY2lfZ2V0X2RydmRhdGEobmRldik7CiAJaW50IHJldDsKIAomIzQzOwlpZiAoaW5mby0mZ3Q7dmFyaWFudCA9PSBTM0ZXUk41X1ZBUklBTlRfUzNOUk40VikgewomIzQzOwkJcmV0ID0gczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWwoaW5mbywgUzNOUk40Vl9IV1JFR19OQU1FLAomIzQzOwkJCQkJCSAgICBTM05STjRWX1NXUkVHX05BTUUpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZGV2X3dhcm4oJmFtcDtuZGV2LSZndDtuZmNfZGV2LSZndDtkZXYsCiYjNDM7CQkJCSAmIzM0O1JGIGNhbGlicmF0aW9uIGRhdGEgdXBkYXRlIGZhaWxlZDogJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKIAlpZiAoczNmd3JuNV9maXJtd2FyZV9pbml0KGluZm8pKSB7CiAJCS8vc2tpcCBib290bG9hZGVyIG1vZGUKIAkJcmV0dXJuIDA7CkBAIC0xNDksNiAmIzQzOzE3Nyw3IEBAIHN0YXRpYyBpbnQgczNmd3JuNV9uY2lfcG9zdF9zZXR1cChzdHJ1Y3QgbmNpX2RldiAqbmRldikKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuY2lfb3BzIHMzZndybjVfbmNpX29wcyA9IHsKJiM0MzsJLmluaXQgPSBzM2Z3cm41X25jaV9pbml0LAogCS5vcGVuID0gczNmd3JuNV9uY2lfb3BlbiwKIAkuY2xvc2UgPSBzM2Z3cm41X25jaV9jbG9zZSwKIAkuc2VuZCA9IHMzZndybjVfbmNpX3NlbmQsCkBAIC0xNTgsNyAmIzQzOzE4Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmNpX29wcyBzM2Z3cm41X25jaV9vcHMgPSB7CiB9OwogCiBpbnQgczNmd3JuNV9wcm9iZShzdHJ1Y3QgbmNpX2RldiAqKm5kZXYsIHZvaWQgKnBoeV9pZCwgc3RydWN0IGRldmljZSAqcGRldiwKLQljb25zdCBzdHJ1Y3QgczNmd3JuNV9waHlfb3BzICpwaHlfb3BzKQomIzQzOwljb25zdCBzdHJ1Y3QgczNmd3JuNV9waHlfb3BzICpwaHlfb3BzLCBlbnVtIHMzZndybjVfdmFyaWFudCB2YXJpYW50KQogewogCXN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm87CiAJaW50IHJldDsKQEAgLTE3MCw2ICYjNDM7MTk5LDcgQEAgaW50IHMzZndybjVfcHJvYmUoc3RydWN0IG5jaV9kZXYgKipuZGV2LCB2b2lkICpwaHlfaWQsIHN0cnVjdCBkZXZpY2UgKnBkZXYsCiAJaW5mby0mZ3Q7cGh5X2lkID0gcGh5X2lkOwogCWluZm8tJmd0O3BkZXYgPSBwZGV2OwogCWluZm8tJmd0O3BoeV9vcHMgPSBwaHlfb3BzOwomIzQzOwlpbmZvLSZndDt2YXJpYW50ID0gdmFyaWFudDsKIAltdXRleF9pbml0KCZhbXA7aW5mby0mZ3Q7bXV0ZXgpOwogCiAJczNmd3JuNV9zZXRfbW9kZShpbmZvLCBTM0ZXUk41X01PREVfQ09MRCk7CkBAIC0yMjUsMyAmIzQzOzI1NSw1IEBAIEVYUE9SVF9TWU1CT0woczNmd3JuNV9yZWN2X2ZyYW1lKTsKIE1PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwogTU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7U2Ftc3VuZyBTM0ZXUk41IE5GQyBkcml2ZXImIzM0Oyk7CiBNT0RVTEVfQVVUSE9SKCYjMzQ7Um9iZXJ0IEJhbGR5Z2EgJmx0O3IuYmFsZHlnYUBzYW1zdW5nLmNvbSZndDsmIzM0Oyk7CiYjNDM7TU9EVUxFX0ZJUk1XQVJFKFMzTlJONFZfSFdSRUdfTkFNRSk7CiYjNDM7TU9EVUxFX0ZJUk1XQVJFKFMzTlJONFZfU1dSRUdfTkFNRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jIGIvZHJpdmVycy9uZmMvczNmd3JuNS9pMmMuYwppbmRleCA0YmE3NjI2MTE3MTE4Li44ODQ0MjBhYzgzYjViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmZjL3MzZndybjUvaTJjLmMKQEAgLTExLDEzICYjNDM7MTEsMTIgQEAKICNpbmNsdWRlICZsdDtsaW51eC9ncGlvL2NvbnN1bWVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGVsYXkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDtuZXQvbmZjL25mYy5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3BoeV9jb21tb24uaCYjMzQ7CiAKLSNkZWZpbmUgUzNGV1JONV9JMkNfRFJJVkVSX05BTUUgJiMzNDtzM2Z3cm41X2kyYyYjMzQ7Ci0KIHN0cnVjdCBzM2Z3cm41X2kyY19waHkgewogCXN0cnVjdCBwaHlfY29tbW9uIGNvbW1vbjsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2RldjsKQEAgLTE0Niw2ICYjNDM7MTQ1LDcgQEAgc3RhdGljIGlycXJldHVybl90IHMzZndybjVfaTJjX2lycV90aHJlYWRfZm4oaW50IGlycSwgdm9pZCAqcGh5X2lkKQogCiBzdGF0aWMgaW50IHMzZndybjVfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiYjNDM7CWVudW0gczNmd3JuNV92YXJpYW50IHZhcmlhbnQ7CiAJc3RydWN0IHMzZndybjVfaTJjX3BoeSAqcGh5OwogCWludCByZXQ7CiAKQEAgLTE2MCw2ICYjNDM7MTYwLDExIEBAIHN0YXRpYyBpbnQgczNmd3JuNV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIAlwaHktJmd0O2kyY19kZXYgPSBjbGllbnQ7CiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgcGh5KTsKIAomIzQzOwlyZXQgPSBkZXZtX3JlZ3VsYXRvcl9nZXRfZW5hYmxlKCZhbXA7Y2xpZW50LSZndDtkZXYsICYjMzQ7cHZkZCYjMzQ7KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKCZhbXA7Y2xpZW50LSZndDtkZXYsIHJldCwKJiM0MzsJCQkJICAgICAmIzM0O2ZhaWxlZCB0byBlbmFibGUgcHZkZFxuJiMzNDspOwomIzQzOwogCXBoeS0mZ3Q7Y29tbW9uLmdwaW9fZW4gPSBkZXZtX2dwaW9kX2dldCgmYW1wO2NsaWVudC0mZ3Q7ZGV2LCAmIzM0O2VuJiMzNDssIEdQSU9EX09VVF9ISUdIKTsKIAlpZiAoSVNfRVJSKHBoeS0mZ3Q7Y29tbW9uLmdwaW9fZW4pKQogCQlyZXR1cm4gUFRSX0VSUihwaHktJmd0O2NvbW1vbi5ncGlvX2VuKTsKQEAgLTE3OSwxNCAmIzQzOzE4NCwxNSBAQCBzdGF0aWMgaW50IHMzZndybjVfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiAJCXJldHVybiBkZXZfZXJyX3Byb2JlKCZhbXA7Y2xpZW50LSZndDtkZXYsIFBUUl9FUlIocGh5LSZndDtjbGspLAogCQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gZ2V0IGNsb2NrXG4mIzM0Oyk7CiAKJiM0MzsJdmFyaWFudCA9ICh1aW50cHRyX3QpaTJjX2dldF9tYXRjaF9kYXRhKGNsaWVudCk7CiAJcmV0ID0gczNmd3JuNV9wcm9iZSgmYW1wO3BoeS0mZ3Q7Y29tbW9uLm5kZXYsIHBoeSwgJmFtcDtwaHktJmd0O2kyY19kZXYtJmd0O2RldiwKLQkJCSAgICAmYW1wO2kyY19waHlfb3BzKTsKJiM0MzsJCQkgICAgJmFtcDtpMmNfcGh5X29wcywgdmFyaWFudCk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKIAlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKCZhbXA7Y2xpZW50LSZndDtkZXYsIHBoeS0mZ3Q7aTJjX2Rldi0mZ3Q7aXJxLCBOVUxMLAogCQlzM2Z3cm41X2kyY19pcnFfdGhyZWFkX2ZuLCBJUlFGX09ORVNIT1QsCi0JCVMzRldSTjVfSTJDX0RSSVZFUl9OQU1FLCBwaHkpOwomIzQzOwkJJiMzNDtzM2Z3cm41X2kyYyYjMzQ7LCBwaHkpOwogCWlmIChyZXQpCiAJCWdvdG8gczNmd3JuNV9yZW1vdmU7CiAKQEAgLTIwNSwyMSAmIzQzOzIxMSwyNSBAQCBzdGF0aWMgdm9pZCBzM2Z3cm41X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHMzZndybjVfaTJjX2lkX3RhYmxlW10gPSB7Ci0JeyAubmFtZSA9IFMzRldSTjVfSTJDX0RSSVZFUl9OQU1FIH0sCiYjNDM7CXsgLm5hbWUgPSAmIzM0O3MzZndybjVfaTJjJiMzNDssIC5kcml2ZXJfZGF0YSA9IFMzRldSTjVfVkFSSUFOVF9GV0RMIH0sCiYjNDM7CXsgLm5hbWUgPSAmIzM0O3MzbnJuNHYmIzM0OywgLmRyaXZlcl9kYXRhID0gUzNGV1JONV9WQVJJQU5UX1MzTlJONFYgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgczNmd3JuNV9pMmNfaWRfdGFibGUpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9zM2Z3cm41X2kyY19tYXRjaFtdID0gewotCXsgLmNvbXBhdGlibGUgPSAmIzM0O3NhbXN1bmcsczNmd3JuNS1pMmMmIzM0OyB9LAomIzQzOwl7IC5jb21wYXRpYmxlID0gJiMzNDtzYW1zdW5nLHMzZndybjUtaTJjJiMzNDssCiYjNDM7CSAgLmRhdGEgPSAodm9pZCAqKVMzRldSTjVfVkFSSUFOVF9GV0RMIH0sCiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O3NhbXN1bmcsczNucm40diYjMzQ7LAomIzQzOwkgIC5kYXRhID0gKHZvaWQgKilTM0ZXUk41X1ZBUklBTlRfUzNOUk40ViB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9mX3MzZndybjVfaTJjX21hdGNoKTsKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHMzZndybjVfaTJjX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewotCQkubmFtZSA9IFMzRldSTjVfSTJDX0RSSVZFUl9OQU1FLAotCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIob2ZfczNmd3JuNV9pMmNfbWF0Y2gpLAomIzQzOwkJLm5hbWUgPSAmIzM0O3MzZndybjVfaTJjJiMzNDssCiYjNDM7CQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9zM2Z3cm41X2kyY19tYXRjaCwKIAl9LAogCS5wcm9iZSA9IHMzZndybjVfaTJjX3Byb2JlLAogCS5yZW1vdmUgPSBzM2Z3cm41X2kyY19yZW1vdmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jIGIvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuYwppbmRleCA1YTlkZTExYmJlY2VhLi4zODFhYTdiZjI5YTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmMKQEAgLTgsNiAmIzQzOzgsOSBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvY29tcGxldGlvbi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Zpcm13YXJlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21pbm1heC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3VuYWxpZ25lZC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3MzZndybjUuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O25jaS5oJiMzNDsKQEAgLTIwLDcgJiM0MzsyMywyNCBAQCBzdGF0aWMgaW50IHMzZndybjVfbmNpX3Byb3BfcnNwKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXJldHVybiAwOwogfQogCi1jb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNF0gPSB7CiYjNDM7LyoKJiM0MzsgKiBEVUFMX09QVElPTiByZXNwb25zZXMgYXJlIG5vdCB1bmlmb3JtOiBHRVRfVkVSIGFuc3dlcnMgd2l0aCB0aGUgY2hpcCYjMzk7cwomIzQzOyAqIGNhbGlicmF0aW9uIHZlcnNpb25zIGluc3RlYWQgb2YgYSBzdGF0dXMgYnl0ZSwgc28gc3Rhc2ggdGhlIHBheWxvYWQgZm9yCiYjNDM7ICogdGhlIGNhbGxlciBiZWZvcmUgY29tcGxldGluZyB0aGUgcmVxdWVzdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHMzZndybjVfbmNpX2R1YWxfcnNwKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbyA9IG5jaV9nZXRfZHJ2ZGF0YShuZGV2KTsKJiM0MzsKJiM0MzsJaW5mby0mZ3Q7ZHVhbF9yc3BfbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBza2ItJmd0O2xlbiwKJiM0MzsJCQkJICAgc2l6ZW9mKGluZm8tJmd0O2R1YWxfcnNwKSk7CiYjNDM7CW1lbWNweShpbmZvLSZndDtkdWFsX3JzcCwgc2tiLSZndDtkYXRhLCBpbmZvLSZndDtkdWFsX3JzcF9sZW4pOwomIzQzOwomIzQzOwluY2lfcmVxX2NvbXBsZXRlKG5kZXYsIHNrYi0mZ3Q7ZGF0YVswXSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNV0gPSB7CiAJewogCQkub3Bjb2RlID0gbmNpX29wY29kZV9wYWNrKE5DSV9HSURfUFJPUFJJRVRBUlksCiAJCQkJTkNJX1BST1BfU0VUX1JGUkVHKSwKQEAgLTQxLDYgJiM0Mzs2MSwxMSBAQCBjb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNF0gPSB7CiAJCQkJTkNJX1BST1BfRldfQ0ZHKSwKIAkJLnJzcCA9IHMzZndybjVfbmNpX3Byb3BfcnNwLAogCX0sCiYjNDM7CXsKJiM0MzsJCS5vcGNvZGUgPSBuY2lfb3Bjb2RlX3BhY2soTkNJX0dJRF9QUk9QUklFVEFSWSwKJiM0MzsJCQkJTkNJX1BST1BfRFVBTF9PUFRJT04pLAomIzQzOwkJLnJzcCA9IHMzZndybjVfbmNpX2R1YWxfcnNwLAomIzQzOwl9LAogfTsKIAogI2RlZmluZSBTM0ZXUk41X1JGUkVHX1NFQ1RJT05fU0laRSAyNTIKQEAgLTExNywzICYjNDM7MTQyLDE1NCBAQCBpbnQgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sIGNvbnN0IGNoYXIgKmZ3X25hbWUpCiAJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAJcmV0dXJuIHJldDsKIH0KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoZSBTM05STjRWIGV4cGVjdHMgdGhlIHNpbmdsZS1ieXRlIEZXX0NGRyBmb3JtIChqdXN0IHRoZSBjbG9jay1zcGVlZAomIzQzOyAqIHNlbGVjdG9yKS4KJiM0MzsgKi8KJiM0MztpbnQgczNmd3JuNV9uY2lfY2xrX2NmZyhzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJdTggY2xrX3NwZWVkID0gTkNJX1BST1BfRldfQ0ZHX0NMS19TUEVFRDsKJiM0MzsKJiM0MzsJcmV0dXJuIG5jaV9wcm9wX2NtZChpbmZvLSZndDtuZGV2LCBOQ0lfUFJPUF9GV19DRkcsIDEsICZhbXA7Y2xrX3NwZWVkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBbiA4LWJ5dGUgY2FsaWJyYXRpb24gdmVyc2lvbjogNSBieXRlcyBvZiBkYXRlIHN0YW1wIGFuZCBhIDMtYnl0ZSBDU0MKJiM0MzsgKiBjb2RlLCBhdCBmaXhlZCBvZmZzZXRzIGJvdGggaW4gYSBibG9iJiMzOTtzIDE2LWJ5dGUgdGFpbCBhbmQgaW4gZWFjaCBoYWxmIG9mCiYjNDM7ICogdGhlIEdFVF9WRVIgcmVzcG9uc2UgKEhXIGF0IG9mZnNldCAwLCBTVyBhdCBvZmZzZXQgMTUpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIHMzZndybjVfbmNpX2R1YWxfdmVyc2lvbl9lcShjb25zdCB1OCAqYSwgY29uc3QgdTggKmIpCiYjNDM7ewomIzQzOwlyZXR1cm4gIW1lbWNtcChhICYjNDM7IDUsIGIgJiM0MzsgNSwgNSkgJmFtcDsmYW1wOyAhbWVtY21wKGEgJiM0MzsgMTIsIGIgJiM0MzsgMTIsIDMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBzM2Z3cm41X25jaV9kdWFsX2NhbF9jdXJyZW50KHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sCiYjNDM7CQkJCQkgY29uc3Qgc3RydWN0IGZpcm13YXJlICpod19mdywKJiM0MzsJCQkJCSBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnN3X2Z3KQomIzQzO3sKJiM0MzsJaWYgKGluZm8tJmd0O2R1YWxfcnNwX2xlbiAmbHQ7IDMwKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlpZiAoaHdfZnctJmd0O3NpemUgJmx0OyAxNiB8fCBzd19mdy0mZ3Q7c2l6ZSAmbHQ7IDE2KQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gczNmd3JuNV9uY2lfZHVhbF92ZXJzaW9uX2VxKGluZm8tJmd0O2R1YWxfcnNwLAomIzQzOwkJCQkJICAgaHdfZnctJmd0O2RhdGEgJiM0MzsgaHdfZnctJmd0O3NpemUgLSAxNikgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgczNmd3JuNV9uY2lfZHVhbF92ZXJzaW9uX2VxKGluZm8tJmd0O2R1YWxfcnNwICYjNDM7IDE1LAomIzQzOwkJCQkJICAgc3dfZnctJmd0O2RhdGEgJiM0Mzsgc3dfZnctJmd0O3NpemUgLSAxNik7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUzNOUk40ViBSRiBjYWxpYnJhdGlvbiBkYXRhIHVwZGF0ZTogdGhlIEhXIGFuZCBTVyBibG9icyBtZXJnZWQgaW50byBvbmUKJiM0MzsgKiBzdHJlYW0gKEhXIGZpcnN0KSwgcHVzaGVkIGFzIFNUQVJUX1VQREFURSwgb25lIFNFVF9PUFRJT04gcGVyIDI1Mi1ieXRlCiYjNDM7ICogc2VjdGlvbiwgdGhlbiBTVE9QX1VQREFURSBjYXJyeWluZyBhIDE2LWJpdCBjaGVja3N1bSAocnVubmluZyBzdW0gb2YgdGhlCiYjNDM7ICogbWVyZ2VkIHN0cmVhbSBhcyAzMi1iaXQgd29yZHMpLgomIzQzOyAqLwomIzQzO2ludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbChzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLAomIzQzOwkJCQkgIGNvbnN0IGNoYXIgKmh3X25hbWUsIGNvbnN0IGNoYXIgKnN3X25hbWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmNpX3Byb3BfZHVhbF9zZXRfb3B0aW9uX2NtZCBzZXRfb3B0aW9uOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO2luZm8tJmd0O25kZXYtJmd0O25mY19kZXYtJmd0O2RldjsKJiM0MzsJY29uc3Qgc3RydWN0IGZpcm13YXJlICpod19mdywgKnN3X2Z3OwomIzQzOwlzaXplX3QgbWVyZ2VkX3NpemUsIGksIGxlbjsKJiM0MzsJdTggKm1lcmdlZDsKJiM0MzsJdTggc3RvcF9jbWRbM107CiYjNDM7CXUzMiBjaGVja3N1bTsKJiM0MzsJdTggc3ViX29pZDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gZmlybXdhcmVfcmVxdWVzdF9ub3dhcm4oJmFtcDtod19mdywgaHdfbmFtZSwgZGV2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSBmaXJtd2FyZV9yZXF1ZXN0X25vd2FybigmYW1wO3N3X2Z3LCBzd19uYW1lLCBkZXYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0X2h3OwomIzQzOwomIzQzOwltZXJnZWRfc2l6ZSA9IGh3X2Z3LSZndDtzaXplICYjNDM7IHN3X2Z3LSZndDtzaXplOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgc3RyZWFtIGlzIGNoZWNrc3VtbWVkIGFzIDMyLWJpdCB3b3JkcyBhbmQgcHVzaGVkIGluIGF0IG1vc3QgMjU2CiYjNDM7CSAqIHNlY3Rpb25zICh0aGUgc2VjdGlvbiBpbmRleCBpcyBhIHNpbmdsZSBieXRlKTsgcmVqZWN0IGJsb2JzIHRoYXQKJiM0MzsJICogd291bGQgc2lsZW50bHkgYnJlYWsgZWl0aGVyLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFtZXJnZWRfc2l6ZSB8fCBtZXJnZWRfc2l6ZSAlIDQgfHwKJiM0MzsJICAgIG1lcmdlZF9zaXplICZndDsgMjU2ICogTkNJX1BST1BfRFVBTF9TRUNUSU9OX1NJWkUpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O2ludmFsaWQgY2FsaWJyYXRpb24gZGF0YSBzaXplOiAlenVcbiYjMzQ7LCBtZXJnZWRfc2l6ZSk7CiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJZ290byBvdXRfc3c7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQXNrIHRoZSBjaGlwIGZvciBpdHMgY3VycmVudCBjYWxpYnJhdGlvbiB2ZXJzaW9ucyBhbmQgc2tpcCB0aGUKJiM0MzsJICogdXBsb2FkIHdoZW4gYm90aCBhbHJlYWR5IG1hdGNoIHRoZSBibG9iczsgYSBtaXNtYXRjaCBvciBhbgomIzQzOwkgKiB1bnBhcnNlYWJsZSBhbnN3ZXIgbWVhbnMgdGhlIHVwbG9hZCBwcm9jZWVkcy4gR0VUX1ZFUiBhbnN3ZXJzIHdpdGgKJiM0MzsJICogdmVyc2lvbnMsIG5vdCBhIHN0YXR1cyBieXRlLCBzbyBuY2lfcHJvcF9jbWQoKSYjMzk7cyByZXR1cm4gY2FycmllcyBubwomIzQzOwkgKiBtZWFuaW5nIGhlcmUuCiYjNDM7CSAqLwomIzQzOwlzdWJfb2lkID0gTkNJX1BST1BfRFVBTF9TVUJfR0VUX1ZFUjsKJiM0MzsJaW5mby0mZ3Q7ZHVhbF9yc3BfbGVuID0gMDsKJiM0MzsJbmNpX3Byb3BfY21kKGluZm8tJmd0O25kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLCAxLCAmYW1wO3N1Yl9vaWQpOwomIzQzOwlpZiAoczNmd3JuNV9uY2lfZHVhbF9jYWxfY3VycmVudChpbmZvLCBod19mdywgc3dfZncpKSB7CiYjNDM7CQlkZXZfZGJnKGRldiwgJiMzNDtjYWxpYnJhdGlvbiBkYXRhIGFscmVhZHkgY3VycmVudFxuJiMzNDspOwomIzQzOwkJcmV0ID0gMDsKJiM0MzsJCWdvdG8gb3V0X3N3OwomIzQzOwl9CiYjNDM7CiYjNDM7CW1lcmdlZCA9IGt2bWFsbG9jKG1lcmdlZF9zaXplLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFtZXJnZWQpIHsKJiM0MzsJCXJldCA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIG91dF9zdzsKJiM0MzsJfQomIzQzOwltZW1jcHkobWVyZ2VkLCBod19mdy0mZ3Q7ZGF0YSwgaHdfZnctJmd0O3NpemUpOwomIzQzOwltZW1jcHkobWVyZ2VkICYjNDM7IGh3X2Z3LSZndDtzaXplLCBzd19mdy0mZ3Q7ZGF0YSwgc3dfZnctJmd0O3NpemUpOwomIzQzOwomIzQzOwljaGVja3N1bSA9IDA7CiYjNDM7CWZvciAoaSA9IDA7IGkgJiM0MzsgNCAmbHQ7PSBtZXJnZWRfc2l6ZTsgaSAmIzQzOz0gNCkKJiM0MzsJCWNoZWNrc3VtICYjNDM7PSBnZXRfdW5hbGlnbmVkX2xlMzIobWVyZ2VkICYjNDM7IGkpOwomIzQzOwomIzQzOwkvKiBTVEFSVF9VUERBVEUgKi8KJiM0MzsJc3ViX29pZCA9IE5DSV9QUk9QX0RVQUxfU1VCX1NUQVJUX1VQREFURTsKJiM0MzsJcmV0ID0gbmNpX3Byb3BfY21kKGluZm8tJmd0O25kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLCAxLCAmYW1wO3N1Yl9vaWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7VW5hYmxlIHRvIHN0YXJ0IGNhbGlicmF0aW9uIGRhdGEgdXBkYXRlXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTRVRfT1BUSU9OIHBlciBzZWN0aW9uICovCiYjNDM7CXNldF9vcHRpb24uc3ViX29pZCA9IE5DSV9QUk9QX0RVQUxfU1VCX1NFVF9PUFRJT047CiYjNDM7CXNldF9vcHRpb24uaW5kZXggPSAwOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbWVyZ2VkX3NpemU7IGkgJiM0Mzs9IE5DSV9QUk9QX0RVQUxfU0VDVElPTl9TSVpFKSB7CiYjNDM7CQlsZW4gPSBtaW5fdChzaXplX3QsIG1lcmdlZF9zaXplIC0gaSwgTkNJX1BST1BfRFVBTF9TRUNUSU9OX1NJWkUpOwomIzQzOwkJbWVtY3B5KHNldF9vcHRpb24uZGF0YSwgbWVyZ2VkICYjNDM7IGksIGxlbik7CiYjNDM7CQlyZXQgPSBuY2lfcHJvcF9jbWQoaW5mby0mZ3Q7bmRldiwgTkNJX1BST1BfRFVBTF9PUFRJT04sCiYjNDM7CQkJCSAgIGxlbiAmIzQzOyAyLCAoX191OCAqKSZhbXA7c2V0X29wdGlvbik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJCWRldl9lcnIoZGV2LCAmIzM0O2NhbGlicmF0aW9uIGRhdGEgdXBkYXRlIGVycm9yOiAlZFxuJiMzNDssCiYjNDM7CQkJCXJldCk7CiYjNDM7CQkJLyogQWJvcnQgZm9ybTogU1RPUF9VUERBVEUgd2l0aCB0aGUgc3ViLU9JRCBhbG9uZS4gKi8KJiM0MzsJCQlzdWJfb2lkID0gTkNJX1BST1BfRFVBTF9TVUJfU1RPUF9VUERBVEU7CiYjNDM7CQkJbmNpX3Byb3BfY21kKGluZm8tJmd0O25kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLCAxLAomIzQzOwkJCQkgICAgICZhbXA7c3ViX29pZCk7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CQlzZXRfb3B0aW9uLmluZGV4JiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTVE9QX1VQREFURSB3aXRoIGNoZWNrc3VtICovCiYjNDM7CXN0b3BfY21kWzBdID0gTkNJX1BST1BfRFVBTF9TVUJfU1RPUF9VUERBVEU7CiYjNDM7CXB1dF91bmFsaWduZWRfbGUxNihjaGVja3N1bSwgJmFtcDtzdG9wX2NtZFsxXSk7CiYjNDM7CXJldCA9IG5jaV9wcm9wX2NtZChpbmZvLSZndDtuZGV2LCBOQ0lfUFJPUF9EVUFMX09QVElPTiwgMywgc3RvcF9jbWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7VW5hYmxlIHRvIHN0b3AgY2FsaWJyYXRpb24gZGF0YSB1cGRhdGVcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWRldl9kYmcoZGV2LCAmIzM0O2NhbGlicmF0aW9uIGRhdGEgdXBkYXRlOiBzdWNjZXNzXG4mIzM0Oyk7CiYjNDM7b3V0OgomIzQzOwlrdmZyZWUobWVyZ2VkKTsKJiM0MztvdXRfc3c6CiYjNDM7CXJlbGVhc2VfZmlybXdhcmUoc3dfZncpOwomIzQzO291dF9odzoKJiM0MzsJcmVsZWFzZV9maXJtd2FyZShod19mdyk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaCBiL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmgKaW5kZXggYmM0YmNlMmJiYzRkOS4uNDUzYTFjOWQ2NWViMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oCkBAIC00MCw2ICYjNDM7NDAsOSBAQCBzdHJ1Y3QgbmNpX3Byb3Bfc3RvcF9yZnJlZ19yc3AgewogCiAjZGVmaW5lIE5DSV9QUk9QX0ZXX0NGRwkJMHgyOAogCiYjNDM7LyogUzNOUk40ViBzaW5nbGUtYnl0ZSBGV19DRkcgcGF5bG9hZDsgMHgxMSBzZWxlY3RzIHRoZSAxOS4yIE1IeiByZWZlcmVuY2UuICovCiYjNDM7I2RlZmluZSBOQ0lfUFJPUF9GV19DRkdfQ0xLX1NQRUVECTB4MTEKJiM0MzsKIHN0cnVjdCBuY2lfcHJvcF9md19jZmdfY21kIHsKIAlfX3U4IGNsa190eXBlOwogCV9fdTggY2xrX3NwZWVkOwpAQCAtNTAsNyAmIzQzOzUzLDI1IEBAIHN0cnVjdCBuY2lfcHJvcF9md19jZmdfcnNwIHsKIAlfX3U4IHN0YXR1czsKIH07CiAKLWV4dGVybiBjb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNF07CiYjNDM7I2RlZmluZSBOQ0lfUFJPUF9EVUFMX09QVElPTgkJMHgyYQomIzQzOwomIzQzOyNkZWZpbmUgTkNJX1BST1BfRFVBTF9TVUJfR0VUX1ZFUgkweDAwCiYjNDM7I2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NVQl9TVEFSVF9VUERBVEUJMHgwMQomIzQzOyNkZWZpbmUgTkNJX1BST1BfRFVBTF9TVUJfU0VUX09QVElPTgkweDAyCiYjNDM7I2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NVQl9TVE9QX1VQREFURQkweDAzCiYjNDM7CiYjNDM7I2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRQkyNTIKJiM0MzsKJiM0MztzdHJ1Y3QgbmNpX3Byb3BfZHVhbF9zZXRfb3B0aW9uX2NtZCB7CiYjNDM7CV9fdTggc3ViX29pZDsKJiM0MzsJX191OCBpbmRleDsKJiM0MzsJX191OCBkYXRhW05DSV9QUk9QX0RVQUxfU0VDVElPTl9TSVpFXTsKJiM0Mzt9OwomIzQzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNV07CiBpbnQgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sIGNvbnN0IGNoYXIgKmZ3X25hbWUpOwomIzQzO2ludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbChzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLAomIzQzOwkJCQkgIGNvbnN0IGNoYXIgKmh3X25hbWUsIGNvbnN0IGNoYXIgKnN3X25hbWUpOwomIzQzO2ludCBzM2Z3cm41X25jaV9jbGtfY2ZnKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8pOwogCiAjZW5kaWYgLyogX19MT0NBTF9TM0ZXUk41X05DSV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvczNmd3JuNS9zM2Z3cm41LmggYi9kcml2ZXJzL25mYy9zM2Z3cm41L3MzZndybjUuaAppbmRleCAyYjQ5MjIzNjA5MGI4Li42M2Y2NzlmMTcxNjY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L3MzZndybjUuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25mYy9zM2Z3cm41L3MzZndybjUuaApAQCAtMjEsNiAmIzQzOzIxLDEzIEBAIGVudW0gczNmd3JuNV9tb2RlIHsKIAlTM0ZXUk41X01PREVfRlcsCiB9OwogCiYjNDM7ZW51bSBzM2Z3cm41X3ZhcmlhbnQgewomIzQzOwkvKiBTM0ZXUk41IC8gUzNGV1JOODI6IGZpcm13YXJlIGlzIGRvd25sb2FkZWQgYnkgdGhpcyBkcml2ZXIgKi8KJiM0MzsJUzNGV1JONV9WQVJJQU5UX0ZXREwsCiYjNDM7CS8qIFMzTlJONFY6IG5vIGZpcm13YXJlIGRvd25sb2FkOyBGV19DRkcgJiM0MzsgRFVBTF9PUFRJT04gYnJpbmctdXAgKi8KJiM0MzsJUzNGV1JONV9WQVJJQU5UX1MzTlJONFYsCiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgewogCXZvaWQgKCpzZXRfd2FrZSkodm9pZCAqaWQsIGJvb2wgc2xlZXApOwogCXZvaWQgKCpzZXRfbW9kZSkodm9pZCAqaWQsIGVudW0gczNmd3JuNV9tb2RlKTsKQEAgLTM2LDYgJiM0Mzs0MywxMSBAQCBzdHJ1Y3QgczNmd3JuNV9pbmZvIHsKIAljb25zdCBzdHJ1Y3QgczNmd3JuNV9waHlfb3BzICpwaHlfb3BzOwogCiAJc3RydWN0IHMzZndybjVfZndfaW5mbyBmd19pbmZvOwomIzQzOwllbnVtIHMzZndybjVfdmFyaWFudCB2YXJpYW50OwomIzQzOwomIzQzOwkvKiBMYXN0IERVQUxfT1BUSU9OIHJlc3BvbnNlIHBheWxvYWQgKEdFVF9WRVIgY2FycmllcyB2ZXJzaW9ucykuICovCiYjNDM7CXU4IGR1YWxfcnNwWzMyXTsKJiM0MzsJdTggZHVhbF9yc3BfbGVuOwogCiAJc3RydWN0IG11dGV4IG11dGV4OwogfTsKQEAgLTc4LDcgJiM0Mzs5MCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHMzZndybjVfd3JpdGUoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIH0KIAogaW50IHMzZndybjVfcHJvYmUoc3RydWN0IG5jaV9kZXYgKipuZGV2LCB2b2lkICpwaHlfaWQsIHN0cnVjdCBkZXZpY2UgKnBkZXYsCi0JY29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcyk7CiYjNDM7CWNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHMsIGVudW0gczNmd3JuNV92YXJpYW50IHZhcmlhbnQpOwogdm9pZCBzM2Z3cm41X3JlbW92ZShzdHJ1Y3QgbmNpX2RldiAqbmRldik7CiAKIGludCBzM2Z3cm41X3JlY3ZfZnJhbWUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L3VhcnQuYyBiL2RyaXZlcnMvbmZjL3MzZndybjUvdWFydC5jCmluZGV4IDhmMTQyYTI1NTEwMTYuLjc1Mzk3YzNkYmM1OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvdWFydC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmZjL3MzZndybjUvdWFydC5jCkBAIC0xMzYsNyAmIzQzOzEzNiw3IEBAIHN0YXRpYyBpbnQgczNmd3JuODJfdWFydF9wcm9iZShzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2KQogCX0KIAogCXJldCA9IHMzZndybjVfcHJvYmUoJmFtcDtwaHktJmd0O2NvbW1vbi5uZGV2LCBwaHksICZhbXA7cGh5LSZndDtzZXJfZGV2LSZndDtkZXYsCi0JCQkgICAgJmFtcDt1YXJ0X3BoeV9vcHMpOwomIzQzOwkJCSAgICAmYW1wO3VhcnRfcGh5X29wcywgUzNGV1JONV9WQVJJQU5UX0ZXREwpOwogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIGVycl9zZXJkZXY7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5ODEKCQkJCQkJCW91dHB1dDogMjQ3CgkJCQkJCQl0aG91Z2h0czogMjc3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBSZXZpZXc6IE5GQyBEcml2ZXIgUGF0Y2ggLSBTM05STjRWIFN1cHBvcnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBzdXBwb3J0IGZvciBhIG5ldyBORkMgY2hpcCwgUzNOUk40ViwgaW50byB0aGUgYHMzZndybjVgIGRyaXZlci4gTXkgaW5pdGlhbCBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc28gdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmb2N1cy4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBhZGRpbmcgZGV2aWNlIHRyZWUgYmluZGluZ3MsIHVwZGF0aW5nIHRoZSBkcml2ZXIgbG9naWMsIGludHJvZHVjaW5nIG5ldyBOQ0kgY29tbWFuZHMgKEZXX0NGRywgRFVBTF9PUFRJT04pLCBhbmQgaGFuZGxpbmcgZmlybXdhcmUgbG9hZGluZyBhbmQgY2FsaWJyYXRpb24gZGF0YS4gSSYjMzk7bSBzZWVpbmcgYHMzZndybjVfbmNpX2R1YWxfcnNwYCB3aGljaCBjb3BpZXMgZGF0YSBmcm9tIGFuIGBza2JgIGludG8gYGluZm8tJmd0O2R1YWxfcnNwYC4gIFRoZSBjb2RlIHVzZXMgYHNrYi0mZ3Q7ZGF0YVswXWAgZm9yIHN0YXR1cywgYW5kIEkgaW1tZWRpYXRlbHkgbm90ZSB0aGF0IGlmIGBza2ItJmd0O2xlbmAgaXMgemVybywgd2UgKmNvdWxkKiBoYXZlIGFuIG91dC1vZi1ib3VuZHMgcmVhZCwgYnV0IHRoYXQmIzM5O3MgYW4gKm91dC1vZi1ib3VuZHMqIHJlYWQsIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeS4gS0FTQU4gc2hvdWxkIGZsYWcgdGhhdCBvbmUsIGFuZCBpZiBpdCYjMzk7cyBoaXQsIGl0JiMzOTtzIG5vdCBhIEtNU0FOIHByb2JsZW0uCgpOZXh0LCBgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWxgIHVzZXMgYGluZm8tJmd0O2R1YWxfcnNwYCwgYnV0IEkmIzM5O20gcmVsaWV2ZWQgdG8gc2VlIHRoYXQgdGhlIGNvZGUgY2hlY2tzIGBpbmZvLSZndDtkdWFsX3JzcF9sZW5gIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIGRhdGEsIGF2b2lkaW5nIGFueSB1bmluaXRpYWxpemVkIHJlYWQgY29uY2VybnMuCgpMb29raW5nIGNsb3NlciBhdCBgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWxgIGFnYWluLCBJIHNlZSB0aGUgc3RhY2sgYWxsb2NhdGVkIGBzZXRfb3B0aW9uYCBzdHJ1Y3QsIHdoaWNoIGlzIG5vdCB6ZXJvLWluaXRpYWxpemVkLiBJJiMzOTttIGNoZWNraW5nIGl0IGNhcmVmdWxseSwgYXMgc3RhY2sgYWxsb2NhdGlvbiBpcyB1c3VhbGx5IGEgc291cmNlIG9mIHByb2JsZW1zLiBUaGUgY29kZSB0aGVuIGNvcGllcyBgbGVuYCBieXRlcyBmcm9tIGBtZXJnZWRgIGludG8gYHNldF9vcHRpb24uZGF0YWAuICBJbXBvcnRhbnRseSwgaXQgYXBwZWFycyBvbmx5IGBsZW4gJiM0MzsgMmAgYnl0ZXMgb2YgYHNldF9vcHRpb25gIGFyZSBzZW50IHRvIHRoZSBkZXZpY2UsIHRoZSBjb2RlIGNoZWNrcyB0byBlbnN1cmUgb25seSBpbml0aWFsaXplZCBkYXRhIGlzIHNlbnQsIHByZXZlbnRpbmcgYW55IHBvdGVudGlhbCBsZWFrLiAgSSBjb25maXJtZWQgdGhhdCB0aGUgc3RydWN0dXJlIGlzIHBhY2tlZCwgd2hpY2ggbWVhbnMgbm8gcGFkZGluZyBpcyBhZGRlZCwgc28gaXQmIzM5O3MgYWxsIGdvb2QuCgpJJiMzOTttIGNoZWNraW5nIHRoZSBgc3RvcF9jbWRgLCBgczNmd3JuNV9uY2lfY2xrX2NmZ2AgYW5kIHRoZSBvdGhlciBwYXJ0cyBvZiB0aGUgcm91dGluZSwgYW5kIHRoZXkgYXBwZWFyIGZ1bGx5IGluaXRpYWxpemVkLgoKSSYjMzk7bSBydW5uaW5nIHRocm91Z2ggdGhlIHBvdGVudGlhbCBwcm9ibGVtYXRpYyBzcG90cyBhZ2Fpbi4gIEkmIzM5O3ZlIGNoZWNrZWQgdGhlIG1lbW9yeSBzZW50IHRvIHRoZSBkZXZpY2UgYW5kIGNvbmZpcm1lZCBpdCYjMzk7cyBmdWxseSBpbml0aWFsaXplZCwgSSBjaGVja2VkIHRoYXQgaWYgdGhlIGNvZGUgcmVhZHMgbWVtb3J5IGl0JiMzOTtzIGFsd2F5cyBoYW5kbGVkIHNhZmVseSwgSSYjMzk7dmUgY2hlY2tlZCB0aGUgdXNhZ2Ugb2YgYGluZm8tJmd0O2R1YWxfcnNwYCwgd2hpY2ggaXMgdXNlZCwgYW5kIGxlbmd0aCBjaGVja2VkLgoKSW4gc3VtbWFyeSwgSSBjYW4mIzM5O3QgaWRlbnRpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcyBpbiB0aGlzIHBhdGNoLiAgVGhlIGNvZGUgc2VlbXMgd2VsbC1zdHJ1Y3R1cmVkLCBhbmQgYWxsIG1lbW9yeSB0cmFuc2ZlcnMgYXBwZWFyIHNhZmUuIFRoZSBPT0IgcG90ZW50aWFsIGluIGBza2ItJmd0O2RhdGFbMF1gIGlzIGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIHNwZWNpYWxpemVkIEtNU0FOIGZ1enppbmcgY2FtcGFpZ24gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGEgbmV3IE5GQyBjaGlwIHZhcmlhbnQgKFMzTlJONFYpIGFuZCBhZGRzIG5ldyBOQ0kgY29tbWFuZHMgZm9yIGZpcm13YXJlIGNvbmZpZ3VyYXRpb24gYW5kIGNhbGlicmF0aW9uIGRhdGEgdXBkYXRlcy4gQWxsIGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHRoZSBkZXZpY2UgKHN1Y2ggYXMgYHNldF9vcHRpb25gLCBgc3RvcF9jbWRgLCBhbmQgYHN1Yl9vaWRgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBgbmNpX3Byb3BfY21kYC4gVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSBzZW50IGlzIGNhcmVmdWxseSBjYWxjdWxhdGVkIHRvIG1hdGNoIHRoZSBpbml0aWFsaXplZCBieXRlcywgcHJldmVudGluZyBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgZnJvbSBiZWluZyBzZW50LiBEYXRhIHJlY2VpdmVkIGZyb20gdGhlIGRldmljZSBpcyBjb3BpZWQgaW50byBgaW5mby1cdTAwM2VkdWFsX3JzcGAgd2l0aCBpdHMgbGVuZ3RoIHRyYWNrZWQgYnkgYGluZm8tXHUwMDNlZHVhbF9yc3BfbGVuYCwgYW5kIGJvdW5kcyBjaGVja3MgYXJlIHBlcmZvcm1lZCBiZWZvcmUgYWNjZXNzaW5nIGl0LiBXaGlsZSB0aGVyZSBpcyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgaWYgYHNrYi1cdTAwM2VsZW5gIGlzIDAgaW4gYHMzZndybjVfbmNpX2R1YWxfcnNwYCAoYHNrYi1cdTAwM2VkYXRhWzBdYCksIHRoaXMgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgdG8gdXNlciBzcGFjZSBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB1c2VkIGluIGNvbnRyb2wgZmxvdy4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byB0ZXN0IHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGEgbmV3IE5GQyBjaGlwIHZhcmlhbnQgKFMzTlJONFYpIGFuZCBhZGRzIG5ldyBOQ0kgY29tbWFuZHMgZm9yIGZpcm13YXJlIGNvbmZpZ3VyYXRpb24gYW5kIGNhbGlicmF0aW9uIGRhdGEgdXBkYXRlcy4gQWxsIGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHRoZSBkZXZpY2UgKHN1Y2ggYXMgYHNldF9vcHRpb25gLCBgc3RvcF9jbWRgLCBhbmQgYHN1Yl9vaWRgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBgbmNpX3Byb3BfY21kYC4gVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSBzZW50IGlzIGNhcmVmdWxseSBjYWxjdWxhdGVkIHRvIG1hdGNoIHRoZSBpbml0aWFsaXplZCBieXRlcywgcHJldmVudGluZyBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgZnJvbSBiZWluZyBzZW50LiBEYXRhIHJlY2VpdmVkIGZyb20gdGhlIGRldmljZSBpcyBjb3BpZWQgaW50byBgaW5mby1cdTAwM2VkdWFsX3JzcGAgd2l0aCBpdHMgbGVuZ3RoIHRyYWNrZWQgYnkgYGluZm8tXHUwMDNlZHVhbF9yc3BfbGVuYCwgYW5kIGJvdW5kcyBjaGVja3MgYXJlIHBlcmZvcm1lZCBiZWZvcmUgYWNjZXNzaW5nIGl0LiBXaGlsZSB0aGVyZSBpcyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgaWYgYHNrYi1cdTAwM2VsZW5gIGlzIDAgaW4gYHMzZndybjVfbmNpX2R1YWxfcnNwYCAoYHNrYi1cdTAwM2VkYXRhWzBdYCksIHRoaXMgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgdG8gdXNlciBzcGFjZSBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB1c2VkIGluIGNvbnRyb2wgZmxvdy4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byB0ZXN0IHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIyOjM1OjI3Ljk4Njg1MzkzMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NDM0ODg2MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GQ19OQ0lcIixcbiAgICBcIk5GQ19TM0ZXUk41X0kyQ1wiLFxuICAgIFwiTkZDX1MzRldSTjgyX1VBUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbFwiLFxuICAgIFwiczNmd3JuNV9uY2lfY2xrX2NmZ1wiLFxuICAgIFwiczNmd3JuNV9uY2lfZHVhbF9yc3BcIixcbiAgICBcInMzZndybjVfbmNpX2luaXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgYSBuZXcgTkZDIGNoaXAgdmFyaWFudCAoUzNOUk40VikgYW5kIGFkZHMgbmV3IE5DSSBjb21tYW5kcyBmb3IgZmlybXdhcmUgY29uZmlndXJhdGlvbiBhbmQgY2FsaWJyYXRpb24gZGF0YSB1cGRhdGVzLiBBbGwgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdGhlIGRldmljZSAoc3VjaCBhcyBgc2V0X29wdGlvbmAsIGBzdG9wX2NtZGAsIGFuZCBgc3ViX29pZGApIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIGBuY2lfcHJvcF9jbWRgLiBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHNlbnQgaXMgY2FyZWZ1bGx5IGNhbGN1bGF0ZWQgdG8gbWF0Y2ggdGhlIGluaXRpYWxpemVkIGJ5dGVzLCBwcmV2ZW50aW5nIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSBmcm9tIGJlaW5nIHNlbnQuIERhdGEgcmVjZWl2ZWQgZnJvbSB0aGUgZGV2aWNlIGlzIGNvcGllZCBpbnRvIGBpbmZvLVxcdTAwM2VkdWFsX3JzcGAgd2l0aCBpdHMgbGVuZ3RoIHRyYWNrZWQgYnkgYGluZm8tXFx1MDAzZWR1YWxfcnNwX2xlbmAsIGFuZCBib3VuZHMgY2hlY2tzIGFyZSBwZXJmb3JtZWQgYmVmb3JlIGFjY2Vzc2luZyBpdC4gV2hpbGUgdGhlcmUgaXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIGlmIGBza2ItXFx1MDAzZWxlbmAgaXMgMCBpbiBgczNmd3JuNV9uY2lfZHVhbF9yc3BgIChgc2tiLVxcdTAwM2VkYXRhWzBdYCksIHRoaXMgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgdG8gdXNlciBzcGFjZSBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB1c2VkIGluIGNvbnRyb2wgZmxvdy4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byB0ZXN0IHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgczNucm40diB2YXJpYW50IHRvIHRoZSBzM2Z3cm41IE5GQyBkcml2ZXIuIEl0IGludHJvZHVjZXMgbmV3IE5DSSBwcm9wcmlldGFyeSBjb21tYW5kcyBhbmQgcmVzcG9uc2VzLCBhbmQgYSBuZXcgUkYgY29uZmlndXJhdGlvbiByb3V0aW5lLiBUaGUgZHJpdmVyIGlzIHJlYWNoYWJsZSB2aWEgdGhlIE5DSSBpbnRlcmZhY2UgYW5kIEkyQy9VQVJUIGJ1c2VzLCB3aGljaCBjYW4gYmUgZnV6emVkIHVzaW5nIHZpcnR1YWwgZGV2aWNlcyBvciBzeXprYWxsZXIncyBOQ0kgc3VwcG9ydC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjI6MzU6MjcuOTg2ODYwNzAyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODc4NDQxMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3YjQwMjBhYWUwNTI3NmQ0YTQ3YzNmYmFkNzE1M2Q3ZGEzMmVmYjkxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDExIDIyOjM1OjI3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3NhbXN1bmcsczNmd3JuNS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9uZmMvc2Ftc3VuZyxzM2Z3cm41LnlhbWxcXG5pbmRleCAxMmJhZWU0NTc1MmM3Li40MGE2OTQ2NjgwMmJiIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3NhbXN1bmcsczNmd3JuNS55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9uZmMvc2Ftc3VuZyxzM2Z3cm41LnlhbWxcXG5AQCAtMTQsNiArMTQsNyBAQCBwcm9wZXJ0aWVzOlxcbiAgICAgZW51bTpcXG4gICAgICAgLSBzYW1zdW5nLHMzZndybjUtaTJjXFxuICAgICAgIC0gc2Ftc3VuZyxzM2Z3cm44MlxcbisgICAgICAtIHNhbXN1bmcsczNucm40dlxcbiBcXG4gICBlbi1ncGlvczpcXG4gICAgIG1heEl0ZW1zOiAxXFxuQEAgLTI5LDYgKzMwLDkgQEAgcHJvcGVydGllczpcXG4gICBjbG9ja3M6XFxuICAgICBtYXhJdGVtczogMVxcbiBcXG4rICBwdmRkLXN1cHBseTpcXG4rICAgIGRlc2NyaXB0aW9uOiBQVkREIHBvd2VyIHN1cHBseVxcbitcXG4gICB3YWtlLWdwaW9zOlxcbiAgICAgbWF4SXRlbXM6IDFcXG4gICAgIGRlc2NyaXB0aW9uOlxcbkBAIC01OCwxMiArNjIsMjUgQEAgYWxsT2Y6XFxuICAgICAgIHByb3BlcnRpZXM6XFxuICAgICAgICAgY29tcGF0aWJsZTpcXG4gICAgICAgICAgIGNvbnRhaW5zOlxcbi0gICAgICAgICAgICBjb25zdDogc2Ftc3VuZyxzM2Z3cm41LWkyY1xcbisgICAgICAgICAgICBlbnVtOlxcbisgICAgICAgICAgICAgIC0gc2Ftc3VuZyxzM2Z3cm41LWkyY1xcbisgICAgICAgICAgICAgIC0gc2Ftc3VuZyxzM25ybjR2XFxuICAgICB0aGVuOlxcbiAgICAgICByZXF1aXJlZDpcXG4gICAgICAgICAtIGludGVycnVwdHNcXG4gICAgICAgICAtIHJlZ1xcbiBcXG4rICAjIERlcGxveWVkIERUcyBmb3IgdGhlIG9sZGVyIHBhcnRzIG5ldmVyIGRlc2NyaWJlZCBhIHN1cHBseSwgc28gUFZERCBpc1xcbisgICMgb25seSByZXF1aXJlZCBmb3IgdGhlIG5ldyBkZXZpY2UuXFxuKyAgLSBpZjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICBjb21wYXRpYmxlOlxcbisgICAgICAgICAgY29udGFpbnM6XFxuKyAgICAgICAgICAgIGNvbnN0OiBzYW1zdW5nLHMzbnJuNHZcXG4rICAgIHRoZW46XFxuKyAgICAgIHJlcXVpcmVkOlxcbisgICAgICAgIC0gcHZkZC1zdXBwbHlcXG4rXFxuIGV4YW1wbGVzOlxcbiAgIC0gfFxcbiAgICAgI2luY2x1ZGUgXFx1MDAzY2R0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbWlsb3MtZmFpcnBob25lLWZwNi5kdHMgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbWlsb3MtZmFpcnBob25lLWZwNi5kdHNcXG5pbmRleCBlYmRjYTBlMmQyZjNhLi5iZGJhODQ4Mjc1ZGI0IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9taWxvcy1mYWlycGhvbmUtZnA2LmR0c1xcbisrKyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9taWxvcy1mYWlycGhvbmUtZnA2LmR0c1xcbkBAIC02MDEsOSArNjAxLDIyIEBAIFxcdTAwMjZnY2Mge1xcbiB9O1xcbiBcXG4gXFx1MDAyNmkyYzEge1xcbi1cXHQvKiBTYW1zdW5nIE5GQyBAIDB4MjcgKi9cXG4tXFxuIFxcdHN0YXR1cyA9IFxcXCJva2F5XFxcIjtcXG4rXFxuK1xcdG5mY0AyNyB7XFxuK1xcdFxcdGNvbXBhdGlibGUgPSBcXFwic2Ftc3VuZyxzM25ybjR2XFxcIjtcXG4rXFx0XFx0cmVnID0gXFx1MDAzYzB4MjdcXHUwMDNlO1xcbitcXG4rXFx0XFx0aW50ZXJydXB0cy1leHRlbmRlZCA9IFxcdTAwM2NcXHUwMDI2dGxtbSAzMSBJUlFfVFlQRV9FREdFX1JJU0lOR1xcdTAwM2U7XFxuK1xcdFxcdGVuLWdwaW9zID0gXFx1MDAzY1xcdTAwMjZ0bG1tIDU2IEdQSU9fQUNUSVZFX0hJR0hcXHUwMDNlO1xcbitcXHRcXHR3YWtlLWdwaW9zID0gXFx1MDAzY1xcdTAwMjZ0bG1tIDcgR1BJT19BQ1RJVkVfSElHSFxcdTAwM2U7XFxuK1xcdFxcdGNsb2NrcyA9IFxcdTAwM2NcXHUwMDI2cnBtaGNjIFJQTUhfTE5fQkJfQ0xLMlxcdTAwM2U7XFxuK1xcbitcXHRcXHRwdmRkLXN1cHBseSA9IFxcdTAwM2NcXHUwMDI2dnJlZ19sMjBiXFx1MDAzZTtcXG4rXFxuK1xcdFxcdHBpbmN0cmwtMCA9IFxcdTAwM2NcXHUwMDI2bmZjX2RlZmF1bHRcXHUwMDNlO1xcbitcXHRcXHRwaW5jdHJsLW5hbWVzID0gXFxcImRlZmF1bHRcXFwiO1xcbitcXHR9O1xcbiB9O1xcbiBcXG4gXFx1MDAyNmkyYzMge1xcbkBAIC04MjUsNiArODM4LDIyIEBAIFxcdTAwMjZ0bG1tIHtcXG4gXFx0XFx0XFx0ICAgICAgIFxcdTAwM2MxMyAxXFx1MDAzZSwgLyogTkMgKi9cXG4gXFx0XFx0XFx0ICAgICAgIFxcdTAwM2M2MyAyXFx1MDAzZTsgLyogV0xBTiBVQVJUICovXFxuIFxcbitcXHRuZmNfZGVmYXVsdDogbmZjLWRlZmF1bHQtc3RhdGUge1xcbitcXHRcXHRpcnEtcGlucyB7XFxuK1xcdFxcdFxcdHBpbnMgPSBcXFwiZ3BpbzMxXFxcIjtcXG4rXFx0XFx0XFx0ZnVuY3Rpb24gPSBcXFwiZ3Bpb1xcXCI7XFxuK1xcdFxcdFxcdGRyaXZlLXN0cmVuZ3RoID0gXFx1MDAzYzJcXHUwMDNlO1xcbitcXHRcXHRcXHRiaWFzLWRpc2FibGU7XFxuK1xcdFxcdH07XFxuK1xcbitcXHRcXHRwZC1waW5zIHtcXG4rXFx0XFx0XFx0cGlucyA9IFxcXCJncGlvNTZcXFwiO1xcbitcXHRcXHRcXHRmdW5jdGlvbiA9IFxcXCJncGlvXFxcIjtcXG4rXFx0XFx0XFx0ZHJpdmUtc3RyZW5ndGggPSBcXHUwMDNjMlxcdTAwM2U7XFxuK1xcdFxcdFxcdGJpYXMtcHVsbC11cDtcXG4rXFx0XFx0fTtcXG4rXFx0fTtcXG4rXFxuIFxcdHNkYzJfY2FyZF9kZXRfbjogc2RjMi1jYXJkLWRldC1zdGF0ZSB7XFxuIFxcdFxcdHBpbnMgPSBcXFwiZ3BpbzY1XFxcIjtcXG4gXFx0XFx0ZnVuY3Rpb24gPSBcXFwiZ3Bpb1xcXCI7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jIGIvZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmNcXG5pbmRleCBhZjBmYThiZDk3MGI0Li41NjM0NzBjYjkyOGRlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jXFxuKysrIGIvZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmNcXG5AQCAtMjAsNiArMjAsOSBAQFxcbiBcXHRcXHRcXHRcXHRORkNfUFJPVE9fSVNPMTQ0NDNfQl9NQVNLIHwgXFxcXFxcbiBcXHRcXHRcXHRcXHRORkNfUFJPVE9fSVNPMTU2OTNfTUFTSylcXG4gXFxuKyNkZWZpbmUgUzNOUk40Vl9IV1JFR19OQU1FXFx0XFxcInNhbXN1bmcvczNucm40di9od3JlZy5iaW5cXFwiXFxuKyNkZWZpbmUgUzNOUk40Vl9TV1JFR19OQU1FXFx0XFxcInNhbXN1bmcvczNucm40di9zd3JlZy5iaW5cXFwiXFxuK1xcbiBzdGF0aWMgaW50IHMzZndybjVfZmlybXdhcmVfaW5pdChzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvKVxcbiB7XFxuIFxcdHN0cnVjdCBzM2Z3cm41X2Z3X2luZm8gKmZ3X2luZm8gPSBcXHUwMDI2aW5mby1cXHUwMDNlZndfaW5mbztcXG5AQCAtNzQsNiArNzcsMjIgQEAgc3RhdGljIGludCBzM2Z3cm41X2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHMzZndybjVfbmNpX2luaXQoc3RydWN0IG5jaV9kZXYgKm5kZXYpXFxuK3tcXG4rXFx0c3RydWN0IHMzZndybjVfaW5mbyAqaW5mbyA9IG5jaV9nZXRfZHJ2ZGF0YShuZGV2KTtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRpZiAoaW5mby1cXHUwMDNldmFyaWFudCA9PSBTM0ZXUk41X1ZBUklBTlRfUzNOUk40Vikge1xcbitcXHRcXHRyZXQgPSBzM2Z3cm41X25jaV9jbGtfY2ZnKGluZm8pO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2bmRldi1cXHUwMDNlbmZjX2Rldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXFwiZmFpbGVkIHRvIGNvbmZpZ3VyZSB0aGUgcmVmZXJlbmNlIGNsb2NrOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0cmV0KTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBzM2Z3cm41X25jaV9vcGVuKHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8gPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XFxuQEAgLTEyNyw2ICsxNDYsMTUgQEAgc3RhdGljIGludCBzM2Z3cm41X25jaV9wb3N0X3NldHVwKHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxcbiBcXHRzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4rXFx0aWYgKGluZm8tXFx1MDAzZXZhcmlhbnQgPT0gUzNGV1JONV9WQVJJQU5UX1MzTlJONFYpIHtcXG4rXFx0XFx0cmV0ID0gczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWwoaW5mbywgUzNOUk40Vl9IV1JFR19OQU1FLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgUzNOUk40Vl9TV1JFR19OQU1FKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZuZGV2LVxcdTAwM2VuZmNfZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdCBcXFwiUkYgY2FsaWJyYXRpb24gZGF0YSB1cGRhdGUgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChzM2Z3cm41X2Zpcm13YXJlX2luaXQoaW5mbykpIHtcXG4gXFx0XFx0Ly9za2lwIGJvb3Rsb2FkZXIgbW9kZVxcbiBcXHRcXHRyZXR1cm4gMDtcXG5AQCAtMTQ5LDYgKzE3Nyw3IEBAIHN0YXRpYyBpbnQgczNmd3JuNV9uY2lfcG9zdF9zZXR1cChzdHJ1Y3QgbmNpX2RldiAqbmRldilcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuY2lfb3BzIHMzZndybjVfbmNpX29wcyA9IHtcXG4rXFx0LmluaXQgPSBzM2Z3cm41X25jaV9pbml0LFxcbiBcXHQub3BlbiA9IHMzZndybjVfbmNpX29wZW4sXFxuIFxcdC5jbG9zZSA9IHMzZndybjVfbmNpX2Nsb3NlLFxcbiBcXHQuc2VuZCA9IHMzZndybjVfbmNpX3NlbmQsXFxuQEAgLTE1OCw3ICsxODcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5jaV9vcHMgczNmd3JuNV9uY2lfb3BzID0ge1xcbiB9O1xcbiBcXG4gaW50IHMzZndybjVfcHJvYmUoc3RydWN0IG5jaV9kZXYgKipuZGV2LCB2b2lkICpwaHlfaWQsIHN0cnVjdCBkZXZpY2UgKnBkZXYsXFxuLVxcdGNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHMpXFxuK1xcdGNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHMsIGVudW0gczNmd3JuNV92YXJpYW50IHZhcmlhbnQpXFxuIHtcXG4gXFx0c3RydWN0IHMzZndybjVfaW5mbyAqaW5mbztcXG4gXFx0aW50IHJldDtcXG5AQCAtMTcwLDYgKzE5OSw3IEBAIGludCBzM2Z3cm41X3Byb2JlKHN0cnVjdCBuY2lfZGV2ICoqbmRldiwgdm9pZCAqcGh5X2lkLCBzdHJ1Y3QgZGV2aWNlICpwZGV2LFxcbiBcXHRpbmZvLVxcdTAwM2VwaHlfaWQgPSBwaHlfaWQ7XFxuIFxcdGluZm8tXFx1MDAzZXBkZXYgPSBwZGV2O1xcbiBcXHRpbmZvLVxcdTAwM2VwaHlfb3BzID0gcGh5X29wcztcXG4rXFx0aW5mby1cXHUwMDNldmFyaWFudCA9IHZhcmlhbnQ7XFxuIFxcdG11dGV4X2luaXQoXFx1MDAyNmluZm8tXFx1MDAzZW11dGV4KTtcXG4gXFxuIFxcdHMzZndybjVfc2V0X21vZGUoaW5mbywgUzNGV1JONV9NT0RFX0NPTEQpO1xcbkBAIC0yMjUsMyArMjU1LDUgQEAgRVhQT1JUX1NZTUJPTChzM2Z3cm41X3JlY3ZfZnJhbWUpO1xcbiBNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuIE1PRFVMRV9ERVNDUklQVElPTihcXFwiU2Ftc3VuZyBTM0ZXUk41IE5GQyBkcml2ZXJcXFwiKTtcXG4gTU9EVUxFX0FVVEhPUihcXFwiUm9iZXJ0IEJhbGR5Z2EgXFx1MDAzY3IuYmFsZHlnYUBzYW1zdW5nLmNvbVxcdTAwM2VcXFwiKTtcXG4rTU9EVUxFX0ZJUk1XQVJFKFMzTlJONFZfSFdSRUdfTkFNRSk7XFxuK01PRFVMRV9GSVJNV0FSRShTM05STjRWX1NXUkVHX05BTUUpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jIGIvZHJpdmVycy9uZmMvczNmd3JuNS9pMmMuY1xcbmluZGV4IDRiYTc2MjYxMTcxMTguLjg4NDQyMGFjODNiNWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS9pMmMuY1xcbisrKyBiL2RyaXZlcnMvbmZjL3MzZndybjUvaTJjLmNcXG5AQCAtMTEsMTMgKzExLDEyIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ncGlvL2NvbnN1bWVyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvbmZjL25mYy5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcInBoeV9jb21tb24uaFxcXCJcXG4gXFxuLSNkZWZpbmUgUzNGV1JONV9JMkNfRFJJVkVSX05BTUUgXFxcInMzZndybjVfaTJjXFxcIlxcbi1cXG4gc3RydWN0IHMzZndybjVfaTJjX3BoeSB7XFxuIFxcdHN0cnVjdCBwaHlfY29tbW9uIGNvbW1vbjtcXG4gXFx0c3RydWN0IGkyY19jbGllbnQgKmkyY19kZXY7XFxuQEAgLTE0Niw2ICsxNDUsNyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgczNmd3JuNV9pMmNfaXJxX3RocmVhZF9mbihpbnQgaXJxLCB2b2lkICpwaHlfaWQpXFxuIFxcbiBzdGF0aWMgaW50IHMzZndybjVfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXFxuIHtcXG4rXFx0ZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudDtcXG4gXFx0c3RydWN0IHMzZndybjVfaTJjX3BoeSAqcGh5O1xcbiBcXHRpbnQgcmV0O1xcbiBcXG5AQCAtMTYwLDYgKzE2MCwxMSBAQCBzdGF0aWMgaW50IHMzZndybjVfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXFxuIFxcdHBoeS1cXHUwMDNlaTJjX2RldiA9IGNsaWVudDtcXG4gXFx0aTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgcGh5KTtcXG4gXFxuK1xcdHJldCA9IGRldm1fcmVndWxhdG9yX2dldF9lbmFibGUoXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2LCBcXFwicHZkZFxcXCIpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYsIHJldCxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIGVuYWJsZSBwdmRkXFxcXG5cXFwiKTtcXG4rXFxuIFxcdHBoeS1cXHUwMDNlY29tbW9uLmdwaW9fZW4gPSBkZXZtX2dwaW9kX2dldChcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYsIFxcXCJlblxcXCIsIEdQSU9EX09VVF9ISUdIKTtcXG4gXFx0aWYgKElTX0VSUihwaHktXFx1MDAzZWNvbW1vbi5ncGlvX2VuKSlcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIocGh5LVxcdTAwM2Vjb21tb24uZ3Bpb19lbik7XFxuQEAgLTE3OSwxNCArMTg0LDE1IEBAIHN0YXRpYyBpbnQgczNmd3JuNV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4gXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2LCBQVFJfRVJSKHBoeS1cXHUwMDNlY2xrKSxcXG4gXFx0XFx0XFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIGdldCBjbG9ja1xcXFxuXFxcIik7XFxuIFxcbitcXHR2YXJpYW50ID0gKHVpbnRwdHJfdClpMmNfZ2V0X21hdGNoX2RhdGEoY2xpZW50KTtcXG4gXFx0cmV0ID0gczNmd3JuNV9wcm9iZShcXHUwMDI2cGh5LVxcdTAwM2Vjb21tb24ubmRldiwgcGh5LCBcXHUwMDI2cGh5LVxcdTAwM2VpMmNfZGV2LVxcdTAwM2VkZXYsXFxuLVxcdFxcdFxcdCAgICBcXHUwMDI2aTJjX3BoeV9vcHMpO1xcbitcXHRcXHRcXHQgICAgXFx1MDAyNmkyY19waHlfb3BzLCB2YXJpYW50KTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldiwgcGh5LVxcdTAwM2VpMmNfZGV2LVxcdTAwM2VpcnEsIE5VTEwsXFxuIFxcdFxcdHMzZndybjVfaTJjX2lycV90aHJlYWRfZm4sIElSUUZfT05FU0hPVCxcXG4tXFx0XFx0UzNGV1JONV9JMkNfRFJJVkVSX05BTUUsIHBoeSk7XFxuK1xcdFxcdFxcXCJzM2Z3cm41X2kyY1xcXCIsIHBoeSk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gczNmd3JuNV9yZW1vdmU7XFxuIFxcbkBAIC0yMDUsMjEgKzIxMSwyNSBAQCBzdGF0aWMgdm9pZCBzM2Z3cm41X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHMzZndybjVfaTJjX2lkX3RhYmxlW10gPSB7XFxuLVxcdHsgLm5hbWUgPSBTM0ZXUk41X0kyQ19EUklWRVJfTkFNRSB9LFxcbitcXHR7IC5uYW1lID0gXFxcInMzZndybjVfaTJjXFxcIiwgLmRyaXZlcl9kYXRhID0gUzNGV1JONV9WQVJJQU5UX0ZXREwgfSxcXG4rXFx0eyAubmFtZSA9IFxcXCJzM25ybjR2XFxcIiwgLmRyaXZlcl9kYXRhID0gUzNGV1JONV9WQVJJQU5UX1MzTlJONFYgfSxcXG4gXFx0eyB9XFxuIH07XFxuIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzM2Z3cm41X2kyY19pZF90YWJsZSk7XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9zM2Z3cm41X2kyY19tYXRjaFtdID0ge1xcbi1cXHR7IC5jb21wYXRpYmxlID0gXFxcInNhbXN1bmcsczNmd3JuNS1pMmNcXFwiIH0sXFxuK1xcdHsgLmNvbXBhdGlibGUgPSBcXFwic2Ftc3VuZyxzM2Z3cm41LWkyY1xcXCIsXFxuK1xcdCAgLmRhdGEgPSAodm9pZCAqKVMzRldSTjVfVkFSSUFOVF9GV0RMIH0sXFxuK1xcdHsgLmNvbXBhdGlibGUgPSBcXFwic2Ftc3VuZyxzM25ybjR2XFxcIixcXG4rXFx0ICAuZGF0YSA9ICh2b2lkICopUzNGV1JONV9WQVJJQU5UX1MzTlJONFYgfSxcXG4gXFx0eyB9XFxuIH07XFxuIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9mX3MzZndybjVfaTJjX21hdGNoKTtcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzM2Z3cm41X2kyY19kcml2ZXIgPSB7XFxuIFxcdC5kcml2ZXIgPSB7XFxuLVxcdFxcdC5uYW1lID0gUzNGV1JONV9JMkNfRFJJVkVSX05BTUUsXFxuLVxcdFxcdC5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihvZl9zM2Z3cm41X2kyY19tYXRjaCksXFxuK1xcdFxcdC5uYW1lID0gXFxcInMzZndybjVfaTJjXFxcIixcXG4rXFx0XFx0Lm9mX21hdGNoX3RhYmxlID0gb2ZfczNmd3JuNV9pMmNfbWF0Y2gsXFxuIFxcdH0sXFxuIFxcdC5wcm9iZSA9IHMzZndybjVfaTJjX3Byb2JlLFxcbiBcXHQucmVtb3ZlID0gczNmd3JuNV9pMmNfcmVtb3ZlLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jIGIvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuY1xcbmluZGV4IDVhOWRlMTFiYmVjZWEuLjM4MWFhN2JmMjlhMjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuY1xcbisrKyBiL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmNcXG5AQCAtOCw2ICs4LDkgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9maXJtd2FyZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWlubWF4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC91bmFsaWduZWQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJzM2Z3cm41LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJuY2kuaFxcXCJcXG5AQCAtMjAsNyArMjMsMjQgQEAgc3RhdGljIGludCBzM2Z3cm41X25jaV9wcm9wX3JzcChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLWNvbnN0IHN0cnVjdCBuY2lfZHJpdmVyX29wcyBzM2Z3cm41X25jaV9wcm9wX29wc1s0XSA9IHtcXG4rLypcXG4rICogRFVBTF9PUFRJT04gcmVzcG9uc2VzIGFyZSBub3QgdW5pZm9ybTogR0VUX1ZFUiBhbnN3ZXJzIHdpdGggdGhlIGNoaXAnc1xcbisgKiBjYWxpYnJhdGlvbiB2ZXJzaW9ucyBpbnN0ZWFkIG9mIGEgc3RhdHVzIGJ5dGUsIHNvIHN0YXNoIHRoZSBwYXlsb2FkIGZvclxcbisgKiB0aGUgY2FsbGVyIGJlZm9yZSBjb21wbGV0aW5nIHRoZSByZXF1ZXN0LlxcbisgKi9cXG4rc3RhdGljIGludCBzM2Z3cm41X25jaV9kdWFsX3JzcChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xcbitcXG4rXFx0aW5mby1cXHUwMDNlZHVhbF9yc3BfbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBza2ItXFx1MDAzZWxlbixcXG4rXFx0XFx0XFx0XFx0ICAgc2l6ZW9mKGluZm8tXFx1MDAzZWR1YWxfcnNwKSk7XFxuK1xcdG1lbWNweShpbmZvLVxcdTAwM2VkdWFsX3JzcCwgc2tiLVxcdTAwM2VkYXRhLCBpbmZvLVxcdTAwM2VkdWFsX3JzcF9sZW4pO1xcbitcXG4rXFx0bmNpX3JlcV9jb21wbGV0ZShuZGV2LCBza2ItXFx1MDAzZWRhdGFbMF0pO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzVdID0ge1xcbiBcXHR7XFxuIFxcdFxcdC5vcGNvZGUgPSBuY2lfb3Bjb2RlX3BhY2soTkNJX0dJRF9QUk9QUklFVEFSWSxcXG4gXFx0XFx0XFx0XFx0TkNJX1BST1BfU0VUX1JGUkVHKSxcXG5AQCAtNDEsNiArNjEsMTEgQEAgY29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzRdID0ge1xcbiBcXHRcXHRcXHRcXHROQ0lfUFJPUF9GV19DRkcpLFxcbiBcXHRcXHQucnNwID0gczNmd3JuNV9uY2lfcHJvcF9yc3AsXFxuIFxcdH0sXFxuK1xcdHtcXG4rXFx0XFx0Lm9wY29kZSA9IG5jaV9vcGNvZGVfcGFjayhOQ0lfR0lEX1BST1BSSUVUQVJZLFxcbitcXHRcXHRcXHRcXHROQ0lfUFJPUF9EVUFMX09QVElPTiksXFxuK1xcdFxcdC5yc3AgPSBzM2Z3cm41X25jaV9kdWFsX3JzcCxcXG4rXFx0fSxcXG4gfTtcXG4gXFxuICNkZWZpbmUgUzNGV1JONV9SRlJFR19TRUNUSU9OX1NJWkUgMjUyXFxuQEAgLTExNywzICsxNDIsMTU0IEBAIGludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmUoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqZndfbmFtZSlcXG4gXFx0cmVsZWFzZV9maXJtd2FyZShmdyk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4rXFxuKy8qXFxuKyAqIFRoZSBTM05STjRWIGV4cGVjdHMgdGhlIHNpbmdsZS1ieXRlIEZXX0NGRyBmb3JtIChqdXN0IHRoZSBjbG9jay1zcGVlZFxcbisgKiBzZWxlY3RvcikuXFxuKyAqL1xcbitpbnQgczNmd3JuNV9uY2lfY2xrX2NmZyhzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvKVxcbit7XFxuK1xcdHU4IGNsa19zcGVlZCA9IE5DSV9QUk9QX0ZXX0NGR19DTEtfU1BFRUQ7XFxuK1xcbitcXHRyZXR1cm4gbmNpX3Byb3BfY21kKGluZm8tXFx1MDAzZW5kZXYsIE5DSV9QUk9QX0ZXX0NGRywgMSwgXFx1MDAyNmNsa19zcGVlZCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIEFuIDgtYnl0ZSBjYWxpYnJhdGlvbiB2ZXJzaW9uOiA1IGJ5dGVzIG9mIGRhdGUgc3RhbXAgYW5kIGEgMy1ieXRlIENTQ1xcbisgKiBjb2RlLCBhdCBmaXhlZCBvZmZzZXRzIGJvdGggaW4gYSBibG9iJ3MgMTYtYnl0ZSB0YWlsIGFuZCBpbiBlYWNoIGhhbGYgb2ZcXG4rICogdGhlIEdFVF9WRVIgcmVzcG9uc2UgKEhXIGF0IG9mZnNldCAwLCBTVyBhdCBvZmZzZXQgMTUpLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgczNmd3JuNV9uY2lfZHVhbF92ZXJzaW9uX2VxKGNvbnN0IHU4ICphLCBjb25zdCB1OCAqYilcXG4re1xcbitcXHRyZXR1cm4gIW1lbWNtcChhICsgNSwgYiArIDUsIDUpIFxcdTAwMjZcXHUwMDI2ICFtZW1jbXAoYSArIDEyLCBiICsgMTIsIDMpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBzM2Z3cm41X25jaV9kdWFsX2NhbF9jdXJyZW50KHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sXFxuK1xcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmh3X2Z3LFxcbitcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGZpcm13YXJlICpzd19mdylcXG4re1xcbitcXHRpZiAoaW5mby1cXHUwMDNlZHVhbF9yc3BfbGVuIFxcdTAwM2MgMzApXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKGh3X2Z3LVxcdTAwM2VzaXplIFxcdTAwM2MgMTYgfHwgc3dfZnctXFx1MDAzZXNpemUgXFx1MDAzYyAxNilcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIHMzZndybjVfbmNpX2R1YWxfdmVyc2lvbl9lcShpbmZvLVxcdTAwM2VkdWFsX3JzcCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgaHdfZnctXFx1MDAzZWRhdGEgKyBod19mdy1cXHUwMDNlc2l6ZSAtIDE2KSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgczNmd3JuNV9uY2lfZHVhbF92ZXJzaW9uX2VxKGluZm8tXFx1MDAzZWR1YWxfcnNwICsgMTUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN3X2Z3LVxcdTAwM2VkYXRhICsgc3dfZnctXFx1MDAzZXNpemUgLSAxNik7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFMzTlJONFYgUkYgY2FsaWJyYXRpb24gZGF0YSB1cGRhdGU6IHRoZSBIVyBhbmQgU1cgYmxvYnMgbWVyZ2VkIGludG8gb25lXFxuKyAqIHN0cmVhbSAoSFcgZmlyc3QpLCBwdXNoZWQgYXMgU1RBUlRfVVBEQVRFLCBvbmUgU0VUX09QVElPTiBwZXIgMjUyLWJ5dGVcXG4rICogc2VjdGlvbiwgdGhlbiBTVE9QX1VQREFURSBjYXJyeWluZyBhIDE2LWJpdCBjaGVja3N1bSAocnVubmluZyBzdW0gb2YgdGhlXFxuKyAqIG1lcmdlZCBzdHJlYW0gYXMgMzItYml0IHdvcmRzKS5cXG4rICovXFxuK2ludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbChzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLFxcbitcXHRcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKmh3X25hbWUsIGNvbnN0IGNoYXIgKnN3X25hbWUpXFxuK3tcXG4rXFx0c3RydWN0IG5jaV9wcm9wX2R1YWxfc2V0X29wdGlvbl9jbWQgc2V0X29wdGlvbjtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNmluZm8tXFx1MDAzZW5kZXYtXFx1MDAzZW5mY19kZXYtXFx1MDAzZWRldjtcXG4rXFx0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpod19mdywgKnN3X2Z3O1xcbitcXHRzaXplX3QgbWVyZ2VkX3NpemUsIGksIGxlbjtcXG4rXFx0dTggKm1lcmdlZDtcXG4rXFx0dTggc3RvcF9jbWRbM107XFxuK1xcdHUzMiBjaGVja3N1bTtcXG4rXFx0dTggc3ViX29pZDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGZpcm13YXJlX3JlcXVlc3Rfbm93YXJuKFxcdTAwMjZod19mdywgaHdfbmFtZSwgZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IGZpcm13YXJlX3JlcXVlc3Rfbm93YXJuKFxcdTAwMjZzd19mdywgc3dfbmFtZSwgZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gb3V0X2h3O1xcbitcXG4rXFx0bWVyZ2VkX3NpemUgPSBod19mdy1cXHUwMDNlc2l6ZSArIHN3X2Z3LVxcdTAwM2VzaXplO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIHN0cmVhbSBpcyBjaGVja3N1bW1lZCBhcyAzMi1iaXQgd29yZHMgYW5kIHB1c2hlZCBpbiBhdCBtb3N0IDI1NlxcbitcXHQgKiBzZWN0aW9ucyAodGhlIHNlY3Rpb24gaW5kZXggaXMgYSBzaW5nbGUgYnl0ZSk7IHJlamVjdCBibG9icyB0aGF0XFxuK1xcdCAqIHdvdWxkIHNpbGVudGx5IGJyZWFrIGVpdGhlci5cXG4rXFx0ICovXFxuK1xcdGlmICghbWVyZ2VkX3NpemUgfHwgbWVyZ2VkX3NpemUgJSA0IHx8XFxuK1xcdCAgICBtZXJnZWRfc2l6ZSBcXHUwMDNlIDI1NiAqIE5DSV9QUk9QX0RVQUxfU0VDVElPTl9TSVpFKSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiaW52YWxpZCBjYWxpYnJhdGlvbiBkYXRhIHNpemU6ICV6dVxcXFxuXFxcIiwgbWVyZ2VkX3NpemUpO1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIG91dF9zdztcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogQXNrIHRoZSBjaGlwIGZvciBpdHMgY3VycmVudCBjYWxpYnJhdGlvbiB2ZXJzaW9ucyBhbmQgc2tpcCB0aGVcXG4rXFx0ICogdXBsb2FkIHdoZW4gYm90aCBhbHJlYWR5IG1hdGNoIHRoZSBibG9iczsgYSBtaXNtYXRjaCBvciBhblxcbitcXHQgKiB1bnBhcnNlYWJsZSBhbnN3ZXIgbWVhbnMgdGhlIHVwbG9hZCBwcm9jZWVkcy4gR0VUX1ZFUiBhbnN3ZXJzIHdpdGhcXG4rXFx0ICogdmVyc2lvbnMsIG5vdCBhIHN0YXR1cyBieXRlLCBzbyBuY2lfcHJvcF9jbWQoKSdzIHJldHVybiBjYXJyaWVzIG5vXFxuK1xcdCAqIG1lYW5pbmcgaGVyZS5cXG4rXFx0ICovXFxuK1xcdHN1Yl9vaWQgPSBOQ0lfUFJPUF9EVUFMX1NVQl9HRVRfVkVSO1xcbitcXHRpbmZvLVxcdTAwM2VkdWFsX3JzcF9sZW4gPSAwO1xcbitcXHRuY2lfcHJvcF9jbWQoaW5mby1cXHUwMDNlbmRldiwgTkNJX1BST1BfRFVBTF9PUFRJT04sIDEsIFxcdTAwMjZzdWJfb2lkKTtcXG4rXFx0aWYgKHMzZndybjVfbmNpX2R1YWxfY2FsX2N1cnJlbnQoaW5mbywgaHdfZncsIHN3X2Z3KSkge1xcbitcXHRcXHRkZXZfZGJnKGRldiwgXFxcImNhbGlicmF0aW9uIGRhdGEgYWxyZWFkeSBjdXJyZW50XFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0Z290byBvdXRfc3c7XFxuK1xcdH1cXG4rXFxuK1xcdG1lcmdlZCA9IGt2bWFsbG9jKG1lcmdlZF9zaXplLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFtZXJnZWQpIHtcXG4rXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBvdXRfc3c7XFxuK1xcdH1cXG4rXFx0bWVtY3B5KG1lcmdlZCwgaHdfZnctXFx1MDAzZWRhdGEsIGh3X2Z3LVxcdTAwM2VzaXplKTtcXG4rXFx0bWVtY3B5KG1lcmdlZCArIGh3X2Z3LVxcdTAwM2VzaXplLCBzd19mdy1cXHUwMDNlZGF0YSwgc3dfZnctXFx1MDAzZXNpemUpO1xcbitcXG4rXFx0Y2hlY2tzdW0gPSAwO1xcbitcXHRmb3IgKGkgPSAwOyBpICsgNCBcXHUwMDNjPSBtZXJnZWRfc2l6ZTsgaSArPSA0KVxcbitcXHRcXHRjaGVja3N1bSArPSBnZXRfdW5hbGlnbmVkX2xlMzIobWVyZ2VkICsgaSk7XFxuK1xcbitcXHQvKiBTVEFSVF9VUERBVEUgKi9cXG4rXFx0c3ViX29pZCA9IE5DSV9QUk9QX0RVQUxfU1VCX1NUQVJUX1VQREFURTtcXG4rXFx0cmV0ID0gbmNpX3Byb3BfY21kKGluZm8tXFx1MDAzZW5kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLCAxLCBcXHUwMDI2c3ViX29pZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiVW5hYmxlIHRvIHN0YXJ0IGNhbGlicmF0aW9uIGRhdGEgdXBkYXRlXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFNFVF9PUFRJT04gcGVyIHNlY3Rpb24gKi9cXG4rXFx0c2V0X29wdGlvbi5zdWJfb2lkID0gTkNJX1BST1BfRFVBTF9TVUJfU0VUX09QVElPTjtcXG4rXFx0c2V0X29wdGlvbi5pbmRleCA9IDA7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtZXJnZWRfc2l6ZTsgaSArPSBOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRSkge1xcbitcXHRcXHRsZW4gPSBtaW5fdChzaXplX3QsIG1lcmdlZF9zaXplIC0gaSwgTkNJX1BST1BfRFVBTF9TRUNUSU9OX1NJWkUpO1xcbitcXHRcXHRtZW1jcHkoc2V0X29wdGlvbi5kYXRhLCBtZXJnZWQgKyBpLCBsZW4pO1xcbitcXHRcXHRyZXQgPSBuY2lfcHJvcF9jbWQoaW5mby1cXHUwMDNlbmRldiwgTkNJX1BST1BfRFVBTF9PUFRJT04sXFxuK1xcdFxcdFxcdFxcdCAgIGxlbiArIDIsIChfX3U4ICopXFx1MDAyNnNldF9vcHRpb24pO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbitcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcImNhbGlicmF0aW9uIGRhdGEgdXBkYXRlIGVycm9yOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0cmV0KTtcXG4rXFx0XFx0XFx0LyogQWJvcnQgZm9ybTogU1RPUF9VUERBVEUgd2l0aCB0aGUgc3ViLU9JRCBhbG9uZS4gKi9cXG4rXFx0XFx0XFx0c3ViX29pZCA9IE5DSV9QUk9QX0RVQUxfU1VCX1NUT1BfVVBEQVRFO1xcbitcXHRcXHRcXHRuY2lfcHJvcF9jbWQoaW5mby1cXHUwMDNlbmRldiwgTkNJX1BST1BfRFVBTF9PUFRJT04sIDEsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnN1Yl9vaWQpO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXHRcXHRzZXRfb3B0aW9uLmluZGV4Kys7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFNUT1BfVVBEQVRFIHdpdGggY2hlY2tzdW0gKi9cXG4rXFx0c3RvcF9jbWRbMF0gPSBOQ0lfUFJPUF9EVUFMX1NVQl9TVE9QX1VQREFURTtcXG4rXFx0cHV0X3VuYWxpZ25lZF9sZTE2KGNoZWNrc3VtLCBcXHUwMDI2c3RvcF9jbWRbMV0pO1xcbitcXHRyZXQgPSBuY2lfcHJvcF9jbWQoaW5mby1cXHUwMDNlbmRldiwgTkNJX1BST1BfRFVBTF9PUFRJT04sIDMsIHN0b3BfY21kKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJVbmFibGUgdG8gc3RvcCBjYWxpYnJhdGlvbiBkYXRhIHVwZGF0ZVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRkZXZfZGJnKGRldiwgXFxcImNhbGlicmF0aW9uIGRhdGEgdXBkYXRlOiBzdWNjZXNzXFxcXG5cXFwiKTtcXG4rb3V0OlxcbitcXHRrdmZyZWUobWVyZ2VkKTtcXG4rb3V0X3N3OlxcbitcXHRyZWxlYXNlX2Zpcm13YXJlKHN3X2Z3KTtcXG4rb3V0X2h3OlxcbitcXHRyZWxlYXNlX2Zpcm13YXJlKGh3X2Z3KTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oIGIvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaFxcbmluZGV4IGJjNGJjZTJiYmM0ZDkuLjQ1M2ExYzlkNjVlYjAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaFxcbisrKyBiL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmhcXG5AQCAtNDAsNiArNDAsOSBAQCBzdHJ1Y3QgbmNpX3Byb3Bfc3RvcF9yZnJlZ19yc3Age1xcbiBcXG4gI2RlZmluZSBOQ0lfUFJPUF9GV19DRkdcXHRcXHQweDI4XFxuIFxcbisvKiBTM05STjRWIHNpbmdsZS1ieXRlIEZXX0NGRyBwYXlsb2FkOyAweDExIHNlbGVjdHMgdGhlIDE5LjIgTUh6IHJlZmVyZW5jZS4gKi9cXG4rI2RlZmluZSBOQ0lfUFJPUF9GV19DRkdfQ0xLX1NQRUVEXFx0MHgxMVxcbitcXG4gc3RydWN0IG5jaV9wcm9wX2Z3X2NmZ19jbWQge1xcbiBcXHRfX3U4IGNsa190eXBlO1xcbiBcXHRfX3U4IGNsa19zcGVlZDtcXG5AQCAtNTAsNyArNTMsMjUgQEAgc3RydWN0IG5jaV9wcm9wX2Z3X2NmZ19yc3Age1xcbiBcXHRfX3U4IHN0YXR1cztcXG4gfTtcXG4gXFxuLWV4dGVybiBjb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNF07XFxuKyNkZWZpbmUgTkNJX1BST1BfRFVBTF9PUFRJT05cXHRcXHQweDJhXFxuK1xcbisjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU1VCX0dFVF9WRVJcXHQweDAwXFxuKyNkZWZpbmUgTkNJX1BST1BfRFVBTF9TVUJfU1RBUlRfVVBEQVRFXFx0MHgwMVxcbisjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU1VCX1NFVF9PUFRJT05cXHQweDAyXFxuKyNkZWZpbmUgTkNJX1BST1BfRFVBTF9TVUJfU1RPUF9VUERBVEVcXHQweDAzXFxuK1xcbisjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU0VDVElPTl9TSVpFXFx0MjUyXFxuK1xcbitzdHJ1Y3QgbmNpX3Byb3BfZHVhbF9zZXRfb3B0aW9uX2NtZCB7XFxuK1xcdF9fdTggc3ViX29pZDtcXG4rXFx0X191OCBpbmRleDtcXG4rXFx0X191OCBkYXRhW05DSV9QUk9QX0RVQUxfU0VDVElPTl9TSVpFXTtcXG4rfTtcXG4rXFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNV07XFxuIGludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmUoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqZndfbmFtZSk7XFxuK2ludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbChzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLFxcbitcXHRcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKmh3X25hbWUsIGNvbnN0IGNoYXIgKnN3X25hbWUpO1xcbitpbnQgczNmd3JuNV9uY2lfY2xrX2NmZyhzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvKTtcXG4gXFxuICNlbmRpZiAvKiBfX0xPQ0FMX1MzRldSTjVfTkNJX0hfICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvczNmd3JuNS5oIGIvZHJpdmVycy9uZmMvczNmd3JuNS9zM2Z3cm41LmhcXG5pbmRleCAyYjQ5MjIzNjA5MGI4Li42M2Y2NzlmMTcxNjY2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvczNmd3JuNS5oXFxuKysrIGIvZHJpdmVycy9uZmMvczNmd3JuNS9zM2Z3cm41LmhcXG5AQCAtMjEsNiArMjEsMTMgQEAgZW51bSBzM2Z3cm41X21vZGUge1xcbiBcXHRTM0ZXUk41X01PREVfRlcsXFxuIH07XFxuIFxcbitlbnVtIHMzZndybjVfdmFyaWFudCB7XFxuK1xcdC8qIFMzRldSTjUgLyBTM0ZXUk44MjogZmlybXdhcmUgaXMgZG93bmxvYWRlZCBieSB0aGlzIGRyaXZlciAqL1xcbitcXHRTM0ZXUk41X1ZBUklBTlRfRldETCxcXG4rXFx0LyogUzNOUk40Vjogbm8gZmlybXdhcmUgZG93bmxvYWQ7IEZXX0NGRyArIERVQUxfT1BUSU9OIGJyaW5nLXVwICovXFxuK1xcdFMzRldSTjVfVkFSSUFOVF9TM05STjRWLFxcbit9O1xcbitcXG4gc3RydWN0IHMzZndybjVfcGh5X29wcyB7XFxuIFxcdHZvaWQgKCpzZXRfd2FrZSkodm9pZCAqaWQsIGJvb2wgc2xlZXApO1xcbiBcXHR2b2lkICgqc2V0X21vZGUpKHZvaWQgKmlkLCBlbnVtIHMzZndybjVfbW9kZSk7XFxuQEAgLTM2LDYgKzQzLDExIEBAIHN0cnVjdCBzM2Z3cm41X2luZm8ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgczNmd3JuNV9waHlfb3BzICpwaHlfb3BzO1xcbiBcXG4gXFx0c3RydWN0IHMzZndybjVfZndfaW5mbyBmd19pbmZvO1xcbitcXHRlbnVtIHMzZndybjVfdmFyaWFudCB2YXJpYW50O1xcbitcXG4rXFx0LyogTGFzdCBEVUFMX09QVElPTiByZXNwb25zZSBwYXlsb2FkIChHRVRfVkVSIGNhcnJpZXMgdmVyc2lvbnMpLiAqL1xcbitcXHR1OCBkdWFsX3JzcFszMl07XFxuK1xcdHU4IGR1YWxfcnNwX2xlbjtcXG4gXFxuIFxcdHN0cnVjdCBtdXRleCBtdXRleDtcXG4gfTtcXG5AQCAtNzgsNyArOTAsNyBAQCBzdGF0aWMgaW5saW5lIGludCBzM2Z3cm41X3dyaXRlKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sIHN0cnVjdCBza19idWZmICpza2IpXFxuIH1cXG4gXFxuIGludCBzM2Z3cm41X3Byb2JlKHN0cnVjdCBuY2lfZGV2ICoqbmRldiwgdm9pZCAqcGh5X2lkLCBzdHJ1Y3QgZGV2aWNlICpwZGV2LFxcbi1cXHRjb25zdCBzdHJ1Y3QgczNmd3JuNV9waHlfb3BzICpwaHlfb3BzKTtcXG4rXFx0Y29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcywgZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudCk7XFxuIHZvaWQgczNmd3JuNV9yZW1vdmUoc3RydWN0IG5jaV9kZXYgKm5kZXYpO1xcbiBcXG4gaW50IHMzZndybjVfcmVjdl9mcmFtZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvczNmd3JuNS91YXJ0LmMgYi9kcml2ZXJzL25mYy9zM2Z3cm41L3VhcnQuY1xcbmluZGV4IDhmMTQyYTI1NTEwMTYuLjc1Mzk3YzNkYmM1OGIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS91YXJ0LmNcXG4rKysgYi9kcml2ZXJzL25mYy9zM2Z3cm41L3VhcnQuY1xcbkBAIC0xMzYsNyArMTM2LDcgQEAgc3RhdGljIGludCBzM2Z3cm44Ml91YXJ0X3Byb2JlKHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXYpXFxuIFxcdH1cXG4gXFxuIFxcdHJldCA9IHMzZndybjVfcHJvYmUoXFx1MDAyNnBoeS1cXHUwMDNlY29tbW9uLm5kZXYsIHBoeSwgXFx1MDAyNnBoeS1cXHUwMDNlc2VyX2Rldi1cXHUwMDNlZGV2LFxcbi1cXHRcXHRcXHQgICAgXFx1MDAyNnVhcnRfcGh5X29wcyk7XFxuK1xcdFxcdFxcdCAgICBcXHUwMDI2dWFydF9waHlfb3BzLCBTM0ZXUk41X1ZBUklBTlRfRldETCk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIGVycl9zZXJkZXY7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMjozNToyOC40NzU0MjY1NjFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1OTM3ODI4MTM4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORkNfTkNJXCIsXG4gICAgXCJORkNfUzNGV1JONV9JMkNcIixcbiAgICBcIk5GQ19TM0ZXUk44Ml9VQVJUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWxcIixcbiAgICBcInMzZndybjVfbmNpX2Nsa19jZmdcIixcbiAgICBcInMzZndybjVfbmNpX2R1YWxfcnNwXCIsXG4gICAgXCJzM2Z3cm41X25jaV9pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgczNucm40diB2YXJpYW50IHRvIHRoZSBzM2Z3cm41IE5GQyBkcml2ZXIuIEl0IGludHJvZHVjZXMgbmV3IE5DSSBwcm9wcmlldGFyeSBjb21tYW5kcyBhbmQgcmVzcG9uc2VzLCBhbmQgYSBuZXcgUkYgY29uZmlndXJhdGlvbiByb3V0aW5lLiBUaGUgZHJpdmVyIGlzIHJlYWNoYWJsZSB2aWEgdGhlIE5DSSBpbnRlcmZhY2UgYW5kIEkyQy9VQVJUIGJ1c2VzLCB3aGljaCBjYW4gYmUgZnV6emVkIHVzaW5nIHZpcnR1YWwgZGV2aWNlcyBvciBzeXprYWxsZXIncyBOQ0kgc3VwcG9ydC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2I0MDIwYWFlMDUyNzZkNGE0N2MzZmJhZDcxNTNkN2RhMzJlZmI5MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDIyOjM1OjI3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9uZmMvc2Ftc3VuZyxzM2Z3cm41LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L25mYy9zYW1zdW5nLHMzZndybjUueWFtbFxuaW5kZXggMTJiYWVlNDU3NTJjNy4uNDBhNjk0NjY4MDJiYiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3NhbXN1bmcsczNmd3JuNS55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L25mYy9zYW1zdW5nLHMzZndybjUueWFtbFxuQEAgLTE0LDYgKzE0LDcgQEAgcHJvcGVydGllczpcbiAgICAgZW51bTpcbiAgICAgICAtIHNhbXN1bmcsczNmd3JuNS1pMmNcbiAgICAgICAtIHNhbXN1bmcsczNmd3JuODJcbisgICAgICAtIHNhbXN1bmcsczNucm40dlxuIFxuICAgZW4tZ3Bpb3M6XG4gICAgIG1heEl0ZW1zOiAxXG5AQCAtMjksNiArMzAsOSBAQCBwcm9wZXJ0aWVzOlxuICAgY2xvY2tzOlxuICAgICBtYXhJdGVtczogMVxuIFxuKyAgcHZkZC1zdXBwbHk6XG4rICAgIGRlc2NyaXB0aW9uOiBQVkREIHBvd2VyIHN1cHBseVxuK1xuICAgd2FrZS1ncGlvczpcbiAgICAgbWF4SXRlbXM6IDFcbiAgICAgZGVzY3JpcHRpb246XG5AQCAtNTgsMTIgKzYyLDI1IEBAIGFsbE9mOlxuICAgICAgIHByb3BlcnRpZXM6XG4gICAgICAgICBjb21wYXRpYmxlOlxuICAgICAgICAgICBjb250YWluczpcbi0gICAgICAgICAgICBjb25zdDogc2Ftc3VuZyxzM2Z3cm41LWkyY1xuKyAgICAgICAgICAgIGVudW06XG4rICAgICAgICAgICAgICAtIHNhbXN1bmcsczNmd3JuNS1pMmNcbisgICAgICAgICAgICAgIC0gc2Ftc3VuZyxzM25ybjR2XG4gICAgIHRoZW46XG4gICAgICAgcmVxdWlyZWQ6XG4gICAgICAgICAtIGludGVycnVwdHNcbiAgICAgICAgIC0gcmVnXG4gXG4rICAjIERlcGxveWVkIERUcyBmb3IgdGhlIG9sZGVyIHBhcnRzIG5ldmVyIGRlc2NyaWJlZCBhIHN1cHBseSwgc28gUFZERCBpc1xuKyAgIyBvbmx5IHJlcXVpcmVkIGZvciB0aGUgbmV3IGRldmljZS5cbisgIC0gaWY6XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIGNvbXBhdGlibGU6XG4rICAgICAgICAgIGNvbnRhaW5zOlxuKyAgICAgICAgICAgIGNvbnN0OiBzYW1zdW5nLHMzbnJuNHZcbisgICAgdGhlbjpcbisgICAgICByZXF1aXJlZDpcbisgICAgICAgIC0gcHZkZC1zdXBwbHlcbitcbiBleGFtcGxlczpcbiAgIC0gfFxuICAgICAjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaFx1MDAzZVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9taWxvcy1mYWlycGhvbmUtZnA2LmR0cyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9taWxvcy1mYWlycGhvbmUtZnA2LmR0c1xuaW5kZXggZWJkY2EwZTJkMmYzYS4uYmRiYTg0ODI3NWRiNCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9taWxvcy1mYWlycGhvbmUtZnA2LmR0c1xuKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21pbG9zLWZhaXJwaG9uZS1mcDYuZHRzXG5AQCAtNjAxLDkgKzYwMSwyMiBAQCBcdTAwMjZnY2Mge1xuIH07XG4gXG4gXHUwMDI2aTJjMSB7XG4tXHQvKiBTYW1zdW5nIE5GQyBAIDB4MjcgKi9cbi1cbiBcdHN0YXR1cyA9IFwib2theVwiO1xuK1xuK1x0bmZjQDI3IHtcbitcdFx0Y29tcGF0aWJsZSA9IFwic2Ftc3VuZyxzM25ybjR2XCI7XG4rXHRcdHJlZyA9IFx1MDAzYzB4MjdcdTAwM2U7XG4rXG4rXHRcdGludGVycnVwdHMtZXh0ZW5kZWQgPSBcdTAwM2NcdTAwMjZ0bG1tIDMxIElSUV9UWVBFX0VER0VfUklTSU5HXHUwMDNlO1xuK1x0XHRlbi1ncGlvcyA9IFx1MDAzY1x1MDAyNnRsbW0gNTYgR1BJT19BQ1RJVkVfSElHSFx1MDAzZTtcbitcdFx0d2FrZS1ncGlvcyA9IFx1MDAzY1x1MDAyNnRsbW0gNyBHUElPX0FDVElWRV9ISUdIXHUwMDNlO1xuK1x0XHRjbG9ja3MgPSBcdTAwM2NcdTAwMjZycG1oY2MgUlBNSF9MTl9CQl9DTEsyXHUwMDNlO1xuK1xuK1x0XHRwdmRkLXN1cHBseSA9IFx1MDAzY1x1MDAyNnZyZWdfbDIwYlx1MDAzZTtcbitcbitcdFx0cGluY3RybC0wID0gXHUwMDNjXHUwMDI2bmZjX2RlZmF1bHRcdTAwM2U7XG4rXHRcdHBpbmN0cmwtbmFtZXMgPSBcImRlZmF1bHRcIjtcbitcdH07XG4gfTtcbiBcbiBcdTAwMjZpMmMzIHtcbkBAIC04MjUsNiArODM4LDIyIEBAIFx1MDAyNnRsbW0ge1xuIFx0XHRcdCAgICAgICBcdTAwM2MxMyAxXHUwMDNlLCAvKiBOQyAqL1xuIFx0XHRcdCAgICAgICBcdTAwM2M2MyAyXHUwMDNlOyAvKiBXTEFOIFVBUlQgKi9cbiBcbitcdG5mY19kZWZhdWx0OiBuZmMtZGVmYXVsdC1zdGF0ZSB7XG4rXHRcdGlycS1waW5zIHtcbitcdFx0XHRwaW5zID0gXCJncGlvMzFcIjtcbitcdFx0XHRmdW5jdGlvbiA9IFwiZ3Bpb1wiO1xuK1x0XHRcdGRyaXZlLXN0cmVuZ3RoID0gXHUwMDNjMlx1MDAzZTtcbitcdFx0XHRiaWFzLWRpc2FibGU7XG4rXHRcdH07XG4rXG4rXHRcdHBkLXBpbnMge1xuK1x0XHRcdHBpbnMgPSBcImdwaW81NlwiO1xuK1x0XHRcdGZ1bmN0aW9uID0gXCJncGlvXCI7XG4rXHRcdFx0ZHJpdmUtc3RyZW5ndGggPSBcdTAwM2MyXHUwMDNlO1xuK1x0XHRcdGJpYXMtcHVsbC11cDtcbitcdFx0fTtcbitcdH07XG4rXG4gXHRzZGMyX2NhcmRfZGV0X246IHNkYzItY2FyZC1kZXQtc3RhdGUge1xuIFx0XHRwaW5zID0gXCJncGlvNjVcIjtcbiBcdFx0ZnVuY3Rpb24gPSBcImdwaW9cIjtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYyBiL2RyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jXG5pbmRleCBhZjBmYThiZDk3MGI0Li41NjM0NzBjYjkyOGRlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmNcbisrKyBiL2RyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jXG5AQCAtMjAsNiArMjAsOSBAQFxuIFx0XHRcdFx0TkZDX1BST1RPX0lTTzE0NDQzX0JfTUFTSyB8IFxcXG4gXHRcdFx0XHRORkNfUFJPVE9fSVNPMTU2OTNfTUFTSylcbiBcbisjZGVmaW5lIFMzTlJONFZfSFdSRUdfTkFNRVx0XCJzYW1zdW5nL3MzbnJuNHYvaHdyZWcuYmluXCJcbisjZGVmaW5lIFMzTlJONFZfU1dSRUdfTkFNRVx0XCJzYW1zdW5nL3MzbnJuNHYvc3dyZWcuYmluXCJcbitcbiBzdGF0aWMgaW50IHMzZndybjVfZmlybXdhcmVfaW5pdChzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBzM2Z3cm41X2Z3X2luZm8gKmZ3X2luZm8gPSBcdTAwMjZpbmZvLVx1MDAzZWZ3X2luZm87XG5AQCAtNzQsNiArNzcsMjIgQEAgc3RhdGljIGludCBzM2Z3cm41X2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rc3RhdGljIGludCBzM2Z3cm41X25jaV9pbml0KHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxuK3tcbitcdHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8gPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdGlmIChpbmZvLVx1MDAzZXZhcmlhbnQgPT0gUzNGV1JONV9WQVJJQU5UX1MzTlJONFYpIHtcbitcdFx0cmV0ID0gczNmd3JuNV9uY2lfY2xrX2NmZyhpbmZvKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRkZXZfZXJyKFx1MDAyNm5kZXYtXHUwMDNlbmZjX2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcImZhaWxlZCB0byBjb25maWd1cmUgdGhlIHJlZmVyZW5jZSBjbG9jazogJWRcXG5cIixcbitcdFx0XHRcdHJldCk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiBzdGF0aWMgaW50IHMzZndybjVfbmNpX29wZW4oc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4ge1xuIFx0c3RydWN0IHMzZndybjVfaW5mbyAqaW5mbyA9IG5jaV9nZXRfZHJ2ZGF0YShuZGV2KTtcbkBAIC0xMjcsNiArMTQ2LDE1IEBAIHN0YXRpYyBpbnQgczNmd3JuNV9uY2lfcG9zdF9zZXR1cChzdHJ1Y3QgbmNpX2RldiAqbmRldilcbiBcdHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8gPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XG4gXHRpbnQgcmV0O1xuIFxuK1x0aWYgKGluZm8tXHUwMDNldmFyaWFudCA9PSBTM0ZXUk41X1ZBUklBTlRfUzNOUk40Vikge1xuK1x0XHRyZXQgPSBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbChpbmZvLCBTM05STjRWX0hXUkVHX05BTUUsXG4rXHRcdFx0XHRcdFx0ICAgIFMzTlJONFZfU1dSRUdfTkFNRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0ZGV2X3dhcm4oXHUwMDI2bmRldi1cdTAwM2VuZmNfZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdCBcIlJGIGNhbGlicmF0aW9uIGRhdGEgdXBkYXRlIGZhaWxlZDogJWRcXG5cIiwgcmV0KTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4gXHRpZiAoczNmd3JuNV9maXJtd2FyZV9pbml0KGluZm8pKSB7XG4gXHRcdC8vc2tpcCBib290bG9hZGVyIG1vZGVcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTQ5LDYgKzE3Nyw3IEBAIHN0YXRpYyBpbnQgczNmd3JuNV9uY2lfcG9zdF9zZXR1cChzdHJ1Y3QgbmNpX2RldiAqbmRldilcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuY2lfb3BzIHMzZndybjVfbmNpX29wcyA9IHtcbitcdC5pbml0ID0gczNmd3JuNV9uY2lfaW5pdCxcbiBcdC5vcGVuID0gczNmd3JuNV9uY2lfb3BlbixcbiBcdC5jbG9zZSA9IHMzZndybjVfbmNpX2Nsb3NlLFxuIFx0LnNlbmQgPSBzM2Z3cm41X25jaV9zZW5kLFxuQEAgLTE1OCw3ICsxODcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5jaV9vcHMgczNmd3JuNV9uY2lfb3BzID0ge1xuIH07XG4gXG4gaW50IHMzZndybjVfcHJvYmUoc3RydWN0IG5jaV9kZXYgKipuZGV2LCB2b2lkICpwaHlfaWQsIHN0cnVjdCBkZXZpY2UgKnBkZXYsXG4tXHRjb25zdCBzdHJ1Y3QgczNmd3JuNV9waHlfb3BzICpwaHlfb3BzKVxuK1x0Y29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcywgZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudClcbiB7XG4gXHRzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvO1xuIFx0aW50IHJldDtcbkBAIC0xNzAsNiArMTk5LDcgQEAgaW50IHMzZndybjVfcHJvYmUoc3RydWN0IG5jaV9kZXYgKipuZGV2LCB2b2lkICpwaHlfaWQsIHN0cnVjdCBkZXZpY2UgKnBkZXYsXG4gXHRpbmZvLVx1MDAzZXBoeV9pZCA9IHBoeV9pZDtcbiBcdGluZm8tXHUwMDNlcGRldiA9IHBkZXY7XG4gXHRpbmZvLVx1MDAzZXBoeV9vcHMgPSBwaHlfb3BzO1xuK1x0aW5mby1cdTAwM2V2YXJpYW50ID0gdmFyaWFudDtcbiBcdG11dGV4X2luaXQoXHUwMDI2aW5mby1cdTAwM2VtdXRleCk7XG4gXG4gXHRzM2Z3cm41X3NldF9tb2RlKGluZm8sIFMzRldSTjVfTU9ERV9DT0xEKTtcbkBAIC0yMjUsMyArMjU1LDUgQEAgRVhQT1JUX1NZTUJPTChzM2Z3cm41X3JlY3ZfZnJhbWUpO1xuIE1PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuIE1PRFVMRV9ERVNDUklQVElPTihcIlNhbXN1bmcgUzNGV1JONSBORkMgZHJpdmVyXCIpO1xuIE1PRFVMRV9BVVRIT1IoXCJSb2JlcnQgQmFsZHlnYSBcdTAwM2NyLmJhbGR5Z2FAc2Ftc3VuZy5jb21cdTAwM2VcIik7XG4rTU9EVUxFX0ZJUk1XQVJFKFMzTlJONFZfSFdSRUdfTkFNRSk7XG4rTU9EVUxFX0ZJUk1XQVJFKFMzTlJONFZfU1dSRUdfTkFNRSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvczNmd3JuNS9pMmMuYyBiL2RyaXZlcnMvbmZjL3MzZndybjUvaTJjLmNcbmluZGV4IDRiYTc2MjYxMTcxMTguLjg4NDQyMGFjODNiNWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jXG4rKysgYi9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jXG5AQCAtMTEsMTMgKzExLDEyIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZ3Bpby9jb25zdW1lci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmZjL25mYy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJwaHlfY29tbW9uLmhcIlxuIFxuLSNkZWZpbmUgUzNGV1JONV9JMkNfRFJJVkVSX05BTUUgXCJzM2Z3cm41X2kyY1wiXG4tXG4gc3RydWN0IHMzZndybjVfaTJjX3BoeSB7XG4gXHRzdHJ1Y3QgcGh5X2NvbW1vbiBjb21tb247XG4gXHRzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2RldjtcbkBAIC0xNDYsNiArMTQ1LDcgQEAgc3RhdGljIGlycXJldHVybl90IHMzZndybjVfaTJjX2lycV90aHJlYWRfZm4oaW50IGlycSwgdm9pZCAqcGh5X2lkKVxuIFxuIHN0YXRpYyBpbnQgczNmd3JuNV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbiB7XG4rXHRlbnVtIHMzZndybjVfdmFyaWFudCB2YXJpYW50O1xuIFx0c3RydWN0IHMzZndybjVfaTJjX3BoeSAqcGh5O1xuIFx0aW50IHJldDtcbiBcbkBAIC0xNjAsNiArMTYwLDExIEBAIHN0YXRpYyBpbnQgczNmd3JuNV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbiBcdHBoeS1cdTAwM2VpMmNfZGV2ID0gY2xpZW50O1xuIFx0aTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgcGh5KTtcbiBcbitcdHJldCA9IGRldm1fcmVndWxhdG9yX2dldF9lbmFibGUoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgXCJwdmRkXCIpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgcmV0LFxuK1x0XHRcdFx0ICAgICBcImZhaWxlZCB0byBlbmFibGUgcHZkZFxcblwiKTtcbitcbiBcdHBoeS1cdTAwM2Vjb21tb24uZ3Bpb19lbiA9IGRldm1fZ3Bpb2RfZ2V0KFx1MDAyNmNsaWVudC1cdTAwM2VkZXYsIFwiZW5cIiwgR1BJT0RfT1VUX0hJR0gpO1xuIFx0aWYgKElTX0VSUihwaHktXHUwMDNlY29tbW9uLmdwaW9fZW4pKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihwaHktXHUwMDNlY29tbW9uLmdwaW9fZW4pO1xuQEAgLTE3OSwxNCArMTg0LDE1IEBAIHN0YXRpYyBpbnQgczNmd3JuNV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbiBcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgUFRSX0VSUihwaHktXHUwMDNlY2xrKSxcbiBcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gZ2V0IGNsb2NrXFxuXCIpO1xuIFxuK1x0dmFyaWFudCA9ICh1aW50cHRyX3QpaTJjX2dldF9tYXRjaF9kYXRhKGNsaWVudCk7XG4gXHRyZXQgPSBzM2Z3cm41X3Byb2JlKFx1MDAyNnBoeS1cdTAwM2Vjb21tb24ubmRldiwgcGh5LCBcdTAwMjZwaHktXHUwMDNlaTJjX2Rldi1cdTAwM2VkZXYsXG4tXHRcdFx0ICAgIFx1MDAyNmkyY19waHlfb3BzKTtcbitcdFx0XHQgICAgXHUwMDI2aTJjX3BoeV9vcHMsIHZhcmlhbnQpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgcGh5LVx1MDAzZWkyY19kZXYtXHUwMDNlaXJxLCBOVUxMLFxuIFx0XHRzM2Z3cm41X2kyY19pcnFfdGhyZWFkX2ZuLCBJUlFGX09ORVNIT1QsXG4tXHRcdFMzRldSTjVfSTJDX0RSSVZFUl9OQU1FLCBwaHkpO1xuK1x0XHRcInMzZndybjVfaTJjXCIsIHBoeSk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIHMzZndybjVfcmVtb3ZlO1xuIFxuQEAgLTIwNSwyMSArMjExLDI1IEBAIHN0YXRpYyB2b2lkIHMzZndybjVfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgczNmd3JuNV9pMmNfaWRfdGFibGVbXSA9IHtcbi1cdHsgLm5hbWUgPSBTM0ZXUk41X0kyQ19EUklWRVJfTkFNRSB9LFxuK1x0eyAubmFtZSA9IFwiczNmd3JuNV9pMmNcIiwgLmRyaXZlcl9kYXRhID0gUzNGV1JONV9WQVJJQU5UX0ZXREwgfSxcbitcdHsgLm5hbWUgPSBcInMzbnJuNHZcIiwgLmRyaXZlcl9kYXRhID0gUzNGV1JONV9WQVJJQU5UX1MzTlJONFYgfSxcbiBcdHsgfVxuIH07XG4gTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHMzZndybjVfaTJjX2lkX3RhYmxlKTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9zM2Z3cm41X2kyY19tYXRjaFtdID0ge1xuLVx0eyAuY29tcGF0aWJsZSA9IFwic2Ftc3VuZyxzM2Z3cm41LWkyY1wiIH0sXG4rXHR7IC5jb21wYXRpYmxlID0gXCJzYW1zdW5nLHMzZndybjUtaTJjXCIsXG4rXHQgIC5kYXRhID0gKHZvaWQgKilTM0ZXUk41X1ZBUklBTlRfRldETCB9LFxuK1x0eyAuY29tcGF0aWJsZSA9IFwic2Ftc3VuZyxzM25ybjR2XCIsXG4rXHQgIC5kYXRhID0gKHZvaWQgKilTM0ZXUk41X1ZBUklBTlRfUzNOUk40ViB9LFxuIFx0eyB9XG4gfTtcbiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBvZl9zM2Z3cm41X2kyY19tYXRjaCk7XG4gXG4gc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHMzZndybjVfaTJjX2RyaXZlciA9IHtcbiBcdC5kcml2ZXIgPSB7XG4tXHRcdC5uYW1lID0gUzNGV1JONV9JMkNfRFJJVkVSX05BTUUsXG4tXHRcdC5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihvZl9zM2Z3cm41X2kyY19tYXRjaCksXG4rXHRcdC5uYW1lID0gXCJzM2Z3cm41X2kyY1wiLFxuK1x0XHQub2ZfbWF0Y2hfdGFibGUgPSBvZl9zM2Z3cm41X2kyY19tYXRjaCxcbiBcdH0sXG4gXHQucHJvYmUgPSBzM2Z3cm41X2kyY19wcm9iZSxcbiBcdC5yZW1vdmUgPSBzM2Z3cm41X2kyY19yZW1vdmUsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuYyBiL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmNcbmluZGV4IDVhOWRlMTFiYmVjZWEuLjM4MWFhN2JmMjlhMjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jXG4rKysgYi9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jXG5AQCAtOCw2ICs4LDkgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maXJtd2FyZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWlubWF4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiczNmd3JuNS5oXCJcbiAjaW5jbHVkZSBcIm5jaS5oXCJcbkBAIC0yMCw3ICsyMywyNCBAQCBzdGF0aWMgaW50IHMzZndybjVfbmNpX3Byb3BfcnNwKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWNvbnN0IHN0cnVjdCBuY2lfZHJpdmVyX29wcyBzM2Z3cm41X25jaV9wcm9wX29wc1s0XSA9IHtcbisvKlxuKyAqIERVQUxfT1BUSU9OIHJlc3BvbnNlcyBhcmUgbm90IHVuaWZvcm06IEdFVF9WRVIgYW5zd2VycyB3aXRoIHRoZSBjaGlwJ3NcbisgKiBjYWxpYnJhdGlvbiB2ZXJzaW9ucyBpbnN0ZWFkIG9mIGEgc3RhdHVzIGJ5dGUsIHNvIHN0YXNoIHRoZSBwYXlsb2FkIGZvclxuKyAqIHRoZSBjYWxsZXIgYmVmb3JlIGNvbXBsZXRpbmcgdGhlIHJlcXVlc3QuXG4rICovXG4rc3RhdGljIGludCBzM2Z3cm41X25jaV9kdWFsX3JzcChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xuK1xuK1x0aW5mby1cdTAwM2VkdWFsX3JzcF9sZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHNrYi1cdTAwM2VsZW4sXG4rXHRcdFx0XHQgICBzaXplb2YoaW5mby1cdTAwM2VkdWFsX3JzcCkpO1xuK1x0bWVtY3B5KGluZm8tXHUwMDNlZHVhbF9yc3AsIHNrYi1cdTAwM2VkYXRhLCBpbmZvLVx1MDAzZWR1YWxfcnNwX2xlbik7XG4rXG4rXHRuY2lfcmVxX2NvbXBsZXRlKG5kZXYsIHNrYi1cdTAwM2VkYXRhWzBdKTtcbitcdHJldHVybiAwO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNV0gPSB7XG4gXHR7XG4gXHRcdC5vcGNvZGUgPSBuY2lfb3Bjb2RlX3BhY2soTkNJX0dJRF9QUk9QUklFVEFSWSxcbiBcdFx0XHRcdE5DSV9QUk9QX1NFVF9SRlJFRyksXG5AQCAtNDEsNiArNjEsMTEgQEAgY29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzRdID0ge1xuIFx0XHRcdFx0TkNJX1BST1BfRldfQ0ZHKSxcbiBcdFx0LnJzcCA9IHMzZndybjVfbmNpX3Byb3BfcnNwLFxuIFx0fSxcbitcdHtcbitcdFx0Lm9wY29kZSA9IG5jaV9vcGNvZGVfcGFjayhOQ0lfR0lEX1BST1BSSUVUQVJZLFxuK1x0XHRcdFx0TkNJX1BST1BfRFVBTF9PUFRJT04pLFxuK1x0XHQucnNwID0gczNmd3JuNV9uY2lfZHVhbF9yc3AsXG4rXHR9LFxuIH07XG4gXG4gI2RlZmluZSBTM0ZXUk41X1JGUkVHX1NFQ1RJT05fU0laRSAyNTJcbkBAIC0xMTcsMyArMTQyLDE1NCBAQCBpbnQgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sIGNvbnN0IGNoYXIgKmZ3X25hbWUpXG4gXHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuK1xuKy8qXG4rICogVGhlIFMzTlJONFYgZXhwZWN0cyB0aGUgc2luZ2xlLWJ5dGUgRldfQ0ZHIGZvcm0gKGp1c3QgdGhlIGNsb2NrLXNwZWVkXG4rICogc2VsZWN0b3IpLlxuKyAqL1xuK2ludCBzM2Z3cm41X25jaV9jbGtfY2ZnKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8pXG4re1xuK1x0dTggY2xrX3NwZWVkID0gTkNJX1BST1BfRldfQ0ZHX0NMS19TUEVFRDtcbitcbitcdHJldHVybiBuY2lfcHJvcF9jbWQoaW5mby1cdTAwM2VuZGV2LCBOQ0lfUFJPUF9GV19DRkcsIDEsIFx1MDAyNmNsa19zcGVlZCk7XG4rfVxuK1xuKy8qXG4rICogQW4gOC1ieXRlIGNhbGlicmF0aW9uIHZlcnNpb246IDUgYnl0ZXMgb2YgZGF0ZSBzdGFtcCBhbmQgYSAzLWJ5dGUgQ1NDXG4rICogY29kZSwgYXQgZml4ZWQgb2Zmc2V0cyBib3RoIGluIGEgYmxvYidzIDE2LWJ5dGUgdGFpbCBhbmQgaW4gZWFjaCBoYWxmIG9mXG4rICogdGhlIEdFVF9WRVIgcmVzcG9uc2UgKEhXIGF0IG9mZnNldCAwLCBTVyBhdCBvZmZzZXQgMTUpLlxuKyAqL1xuK3N0YXRpYyBib29sIHMzZndybjVfbmNpX2R1YWxfdmVyc2lvbl9lcShjb25zdCB1OCAqYSwgY29uc3QgdTggKmIpXG4re1xuK1x0cmV0dXJuICFtZW1jbXAoYSArIDUsIGIgKyA1LCA1KSBcdTAwMjZcdTAwMjYgIW1lbWNtcChhICsgMTIsIGIgKyAxMiwgMyk7XG4rfVxuK1xuK3N0YXRpYyBib29sIHMzZndybjVfbmNpX2R1YWxfY2FsX2N1cnJlbnQoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbyxcbitcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqaHdfZncsXG4rXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnN3X2Z3KVxuK3tcbitcdGlmIChpbmZvLVx1MDAzZWR1YWxfcnNwX2xlbiBcdTAwM2MgMzApXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmIChod19mdy1cdTAwM2VzaXplIFx1MDAzYyAxNiB8fCBzd19mdy1cdTAwM2VzaXplIFx1MDAzYyAxNilcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0dXJuIHMzZndybjVfbmNpX2R1YWxfdmVyc2lvbl9lcShpbmZvLVx1MDAzZWR1YWxfcnNwLFxuK1x0XHRcdFx0XHQgICBod19mdy1cdTAwM2VkYXRhICsgaHdfZnctXHUwMDNlc2l6ZSAtIDE2KSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBzM2Z3cm41X25jaV9kdWFsX3ZlcnNpb25fZXEoaW5mby1cdTAwM2VkdWFsX3JzcCArIDE1LFxuK1x0XHRcdFx0XHQgICBzd19mdy1cdTAwM2VkYXRhICsgc3dfZnctXHUwMDNlc2l6ZSAtIDE2KTtcbit9XG4rXG4rLypcbisgKiBTM05STjRWIFJGIGNhbGlicmF0aW9uIGRhdGEgdXBkYXRlOiB0aGUgSFcgYW5kIFNXIGJsb2JzIG1lcmdlZCBpbnRvIG9uZVxuKyAqIHN0cmVhbSAoSFcgZmlyc3QpLCBwdXNoZWQgYXMgU1RBUlRfVVBEQVRFLCBvbmUgU0VUX09QVElPTiBwZXIgMjUyLWJ5dGVcbisgKiBzZWN0aW9uLCB0aGVuIFNUT1BfVVBEQVRFIGNhcnJ5aW5nIGEgMTYtYml0IGNoZWNrc3VtIChydW5uaW5nIHN1bSBvZiB0aGVcbisgKiBtZXJnZWQgc3RyZWFtIGFzIDMyLWJpdCB3b3JkcykuXG4rICovXG4raW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sXG4rXHRcdFx0XHQgIGNvbnN0IGNoYXIgKmh3X25hbWUsIGNvbnN0IGNoYXIgKnN3X25hbWUpXG4re1xuK1x0c3RydWN0IG5jaV9wcm9wX2R1YWxfc2V0X29wdGlvbl9jbWQgc2V0X29wdGlvbjtcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmluZm8tXHUwMDNlbmRldi1cdTAwM2VuZmNfZGV2LVx1MDAzZWRldjtcbitcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqaHdfZncsICpzd19mdztcbitcdHNpemVfdCBtZXJnZWRfc2l6ZSwgaSwgbGVuO1xuK1x0dTggKm1lcmdlZDtcbitcdHU4IHN0b3BfY21kWzNdO1xuK1x0dTMyIGNoZWNrc3VtO1xuK1x0dTggc3ViX29pZDtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBmaXJtd2FyZV9yZXF1ZXN0X25vd2FybihcdTAwMjZod19mdywgaHdfbmFtZSwgZGV2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSBmaXJtd2FyZV9yZXF1ZXN0X25vd2FybihcdTAwMjZzd19mdywgc3dfbmFtZSwgZGV2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gb3V0X2h3O1xuK1xuK1x0bWVyZ2VkX3NpemUgPSBod19mdy1cdTAwM2VzaXplICsgc3dfZnctXHUwMDNlc2l6ZTtcbitcbitcdC8qXG4rXHQgKiBUaGUgc3RyZWFtIGlzIGNoZWNrc3VtbWVkIGFzIDMyLWJpdCB3b3JkcyBhbmQgcHVzaGVkIGluIGF0IG1vc3QgMjU2XG4rXHQgKiBzZWN0aW9ucyAodGhlIHNlY3Rpb24gaW5kZXggaXMgYSBzaW5nbGUgYnl0ZSk7IHJlamVjdCBibG9icyB0aGF0XG4rXHQgKiB3b3VsZCBzaWxlbnRseSBicmVhayBlaXRoZXIuXG4rXHQgKi9cbitcdGlmICghbWVyZ2VkX3NpemUgfHwgbWVyZ2VkX3NpemUgJSA0IHx8XG4rXHQgICAgbWVyZ2VkX3NpemUgXHUwMDNlIDI1NiAqIE5DSV9QUk9QX0RVQUxfU0VDVElPTl9TSVpFKSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcImludmFsaWQgY2FsaWJyYXRpb24gZGF0YSBzaXplOiAlenVcXG5cIiwgbWVyZ2VkX3NpemUpO1xuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIG91dF9zdztcbitcdH1cbitcbitcdC8qXG4rXHQgKiBBc2sgdGhlIGNoaXAgZm9yIGl0cyBjdXJyZW50IGNhbGlicmF0aW9uIHZlcnNpb25zIGFuZCBza2lwIHRoZVxuK1x0ICogdXBsb2FkIHdoZW4gYm90aCBhbHJlYWR5IG1hdGNoIHRoZSBibG9iczsgYSBtaXNtYXRjaCBvciBhblxuK1x0ICogdW5wYXJzZWFibGUgYW5zd2VyIG1lYW5zIHRoZSB1cGxvYWQgcHJvY2VlZHMuIEdFVF9WRVIgYW5zd2VycyB3aXRoXG4rXHQgKiB2ZXJzaW9ucywgbm90IGEgc3RhdHVzIGJ5dGUsIHNvIG5jaV9wcm9wX2NtZCgpJ3MgcmV0dXJuIGNhcnJpZXMgbm9cbitcdCAqIG1lYW5pbmcgaGVyZS5cbitcdCAqL1xuK1x0c3ViX29pZCA9IE5DSV9QUk9QX0RVQUxfU1VCX0dFVF9WRVI7XG4rXHRpbmZvLVx1MDAzZWR1YWxfcnNwX2xlbiA9IDA7XG4rXHRuY2lfcHJvcF9jbWQoaW5mby1cdTAwM2VuZGV2LCBOQ0lfUFJPUF9EVUFMX09QVElPTiwgMSwgXHUwMDI2c3ViX29pZCk7XG4rXHRpZiAoczNmd3JuNV9uY2lfZHVhbF9jYWxfY3VycmVudChpbmZvLCBod19mdywgc3dfZncpKSB7XG4rXHRcdGRldl9kYmcoZGV2LCBcImNhbGlicmF0aW9uIGRhdGEgYWxyZWFkeSBjdXJyZW50XFxuXCIpO1xuK1x0XHRyZXQgPSAwO1xuK1x0XHRnb3RvIG91dF9zdztcbitcdH1cbitcbitcdG1lcmdlZCA9IGt2bWFsbG9jKG1lcmdlZF9zaXplLCBHRlBfS0VSTkVMKTtcbitcdGlmICghbWVyZ2VkKSB7XG4rXHRcdHJldCA9IC1FTk9NRU07XG4rXHRcdGdvdG8gb3V0X3N3O1xuK1x0fVxuK1x0bWVtY3B5KG1lcmdlZCwgaHdfZnctXHUwMDNlZGF0YSwgaHdfZnctXHUwMDNlc2l6ZSk7XG4rXHRtZW1jcHkobWVyZ2VkICsgaHdfZnctXHUwMDNlc2l6ZSwgc3dfZnctXHUwMDNlZGF0YSwgc3dfZnctXHUwMDNlc2l6ZSk7XG4rXG4rXHRjaGVja3N1bSA9IDA7XG4rXHRmb3IgKGkgPSAwOyBpICsgNCBcdTAwM2M9IG1lcmdlZF9zaXplOyBpICs9IDQpXG4rXHRcdGNoZWNrc3VtICs9IGdldF91bmFsaWduZWRfbGUzMihtZXJnZWQgKyBpKTtcbitcbitcdC8qIFNUQVJUX1VQREFURSAqL1xuK1x0c3ViX29pZCA9IE5DSV9QUk9QX0RVQUxfU1VCX1NUQVJUX1VQREFURTtcbitcdHJldCA9IG5jaV9wcm9wX2NtZChpbmZvLVx1MDAzZW5kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLCAxLCBcdTAwMjZzdWJfb2lkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiVW5hYmxlIHRvIHN0YXJ0IGNhbGlicmF0aW9uIGRhdGEgdXBkYXRlXFxuXCIpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdC8qIFNFVF9PUFRJT04gcGVyIHNlY3Rpb24gKi9cbitcdHNldF9vcHRpb24uc3ViX29pZCA9IE5DSV9QUk9QX0RVQUxfU1VCX1NFVF9PUFRJT047XG4rXHRzZXRfb3B0aW9uLmluZGV4ID0gMDtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1lcmdlZF9zaXplOyBpICs9IE5DSV9QUk9QX0RVQUxfU0VDVElPTl9TSVpFKSB7XG4rXHRcdGxlbiA9IG1pbl90KHNpemVfdCwgbWVyZ2VkX3NpemUgLSBpLCBOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRSk7XG4rXHRcdG1lbWNweShzZXRfb3B0aW9uLmRhdGEsIG1lcmdlZCArIGksIGxlbik7XG4rXHRcdHJldCA9IG5jaV9wcm9wX2NtZChpbmZvLVx1MDAzZW5kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLFxuK1x0XHRcdFx0ICAgbGVuICsgMiwgKF9fdTggKilcdTAwMjZzZXRfb3B0aW9uKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRcdGRldl9lcnIoZGV2LCBcImNhbGlicmF0aW9uIGRhdGEgdXBkYXRlIGVycm9yOiAlZFxcblwiLFxuK1x0XHRcdFx0cmV0KTtcbitcdFx0XHQvKiBBYm9ydCBmb3JtOiBTVE9QX1VQREFURSB3aXRoIHRoZSBzdWItT0lEIGFsb25lLiAqL1xuK1x0XHRcdHN1Yl9vaWQgPSBOQ0lfUFJPUF9EVUFMX1NVQl9TVE9QX1VQREFURTtcbitcdFx0XHRuY2lfcHJvcF9jbWQoaW5mby1cdTAwM2VuZGV2LCBOQ0lfUFJPUF9EVUFMX09QVElPTiwgMSxcbitcdFx0XHRcdCAgICAgXHUwMDI2c3ViX29pZCk7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdFx0c2V0X29wdGlvbi5pbmRleCsrO1xuK1x0fVxuK1xuK1x0LyogU1RPUF9VUERBVEUgd2l0aCBjaGVja3N1bSAqL1xuK1x0c3RvcF9jbWRbMF0gPSBOQ0lfUFJPUF9EVUFMX1NVQl9TVE9QX1VQREFURTtcbitcdHB1dF91bmFsaWduZWRfbGUxNihjaGVja3N1bSwgXHUwMDI2c3RvcF9jbWRbMV0pO1xuK1x0cmV0ID0gbmNpX3Byb3BfY21kKGluZm8tXHUwMDNlbmRldiwgTkNJX1BST1BfRFVBTF9PUFRJT04sIDMsIHN0b3BfY21kKTtcbitcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiVW5hYmxlIHRvIHN0b3AgY2FsaWJyYXRpb24gZGF0YSB1cGRhdGVcXG5cIik7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0ZGV2X2RiZyhkZXYsIFwiY2FsaWJyYXRpb24gZGF0YSB1cGRhdGU6IHN1Y2Nlc3NcXG5cIik7XG4rb3V0OlxuK1x0a3ZmcmVlKG1lcmdlZCk7XG4rb3V0X3N3OlxuK1x0cmVsZWFzZV9maXJtd2FyZShzd19mdyk7XG4rb3V0X2h3OlxuK1x0cmVsZWFzZV9maXJtd2FyZShod19mdyk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oIGIvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaFxuaW5kZXggYmM0YmNlMmJiYzRkOS4uNDUzYTFjOWQ2NWViMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmhcbisrKyBiL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmhcbkBAIC00MCw2ICs0MCw5IEBAIHN0cnVjdCBuY2lfcHJvcF9zdG9wX3JmcmVnX3JzcCB7XG4gXG4gI2RlZmluZSBOQ0lfUFJPUF9GV19DRkdcdFx0MHgyOFxuIFxuKy8qIFMzTlJONFYgc2luZ2xlLWJ5dGUgRldfQ0ZHIHBheWxvYWQ7IDB4MTEgc2VsZWN0cyB0aGUgMTkuMiBNSHogcmVmZXJlbmNlLiAqL1xuKyNkZWZpbmUgTkNJX1BST1BfRldfQ0ZHX0NMS19TUEVFRFx0MHgxMVxuK1xuIHN0cnVjdCBuY2lfcHJvcF9md19jZmdfY21kIHtcbiBcdF9fdTggY2xrX3R5cGU7XG4gXHRfX3U4IGNsa19zcGVlZDtcbkBAIC01MCw3ICs1MywyNSBAQCBzdHJ1Y3QgbmNpX3Byb3BfZndfY2ZnX3JzcCB7XG4gXHRfX3U4IHN0YXR1cztcbiB9O1xuIFxuLWV4dGVybiBjb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNF07XG4rI2RlZmluZSBOQ0lfUFJPUF9EVUFMX09QVElPTlx0XHQweDJhXG4rXG4rI2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NVQl9HRVRfVkVSXHQweDAwXG4rI2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NVQl9TVEFSVF9VUERBVEVcdDB4MDFcbisjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU1VCX1NFVF9PUFRJT05cdDB4MDJcbisjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU1VCX1NUT1BfVVBEQVRFXHQweDAzXG4rXG4rI2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRVx0MjUyXG4rXG4rc3RydWN0IG5jaV9wcm9wX2R1YWxfc2V0X29wdGlvbl9jbWQge1xuK1x0X191OCBzdWJfb2lkO1xuK1x0X191OCBpbmRleDtcbitcdF9fdTggZGF0YVtOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRV07XG4rfTtcbitcbitleHRlcm4gY29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzVdO1xuIGludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmUoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqZndfbmFtZSk7XG4raW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sXG4rXHRcdFx0XHQgIGNvbnN0IGNoYXIgKmh3X25hbWUsIGNvbnN0IGNoYXIgKnN3X25hbWUpO1xuK2ludCBzM2Z3cm41X25jaV9jbGtfY2ZnKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8pO1xuIFxuICNlbmRpZiAvKiBfX0xPQ0FMX1MzRldSTjVfTkNJX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvczNmd3JuNS9zM2Z3cm41LmggYi9kcml2ZXJzL25mYy9zM2Z3cm41L3MzZndybjUuaFxuaW5kZXggMmI0OTIyMzYwOTBiOC4uNjNmNjc5ZjE3MTY2NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvczNmd3JuNS5oXG4rKysgYi9kcml2ZXJzL25mYy9zM2Z3cm41L3MzZndybjUuaFxuQEAgLTIxLDYgKzIxLDEzIEBAIGVudW0gczNmd3JuNV9tb2RlIHtcbiBcdFMzRldSTjVfTU9ERV9GVyxcbiB9O1xuIFxuK2VudW0gczNmd3JuNV92YXJpYW50IHtcbitcdC8qIFMzRldSTjUgLyBTM0ZXUk44MjogZmlybXdhcmUgaXMgZG93bmxvYWRlZCBieSB0aGlzIGRyaXZlciAqL1xuK1x0UzNGV1JONV9WQVJJQU5UX0ZXREwsXG4rXHQvKiBTM05STjRWOiBubyBmaXJtd2FyZSBkb3dubG9hZDsgRldfQ0ZHICsgRFVBTF9PUFRJT04gYnJpbmctdXAgKi9cbitcdFMzRldSTjVfVkFSSUFOVF9TM05STjRWLFxuK307XG4rXG4gc3RydWN0IHMzZndybjVfcGh5X29wcyB7XG4gXHR2b2lkICgqc2V0X3dha2UpKHZvaWQgKmlkLCBib29sIHNsZWVwKTtcbiBcdHZvaWQgKCpzZXRfbW9kZSkodm9pZCAqaWQsIGVudW0gczNmd3JuNV9tb2RlKTtcbkBAIC0zNiw2ICs0MywxMSBAQCBzdHJ1Y3QgczNmd3JuNV9pbmZvIHtcbiBcdGNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHM7XG4gXG4gXHRzdHJ1Y3QgczNmd3JuNV9md19pbmZvIGZ3X2luZm87XG4rXHRlbnVtIHMzZndybjVfdmFyaWFudCB2YXJpYW50O1xuK1xuK1x0LyogTGFzdCBEVUFMX09QVElPTiByZXNwb25zZSBwYXlsb2FkIChHRVRfVkVSIGNhcnJpZXMgdmVyc2lvbnMpLiAqL1xuK1x0dTggZHVhbF9yc3BbMzJdO1xuK1x0dTggZHVhbF9yc3BfbGVuO1xuIFxuIFx0c3RydWN0IG11dGV4IG11dGV4O1xuIH07XG5AQCAtNzgsNyArOTAsNyBAQCBzdGF0aWMgaW5saW5lIGludCBzM2Z3cm41X3dyaXRlKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sIHN0cnVjdCBza19idWZmICpza2IpXG4gfVxuIFxuIGludCBzM2Z3cm41X3Byb2JlKHN0cnVjdCBuY2lfZGV2ICoqbmRldiwgdm9pZCAqcGh5X2lkLCBzdHJ1Y3QgZGV2aWNlICpwZGV2LFxuLVx0Y29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcyk7XG4rXHRjb25zdCBzdHJ1Y3QgczNmd3JuNV9waHlfb3BzICpwaHlfb3BzLCBlbnVtIHMzZndybjVfdmFyaWFudCB2YXJpYW50KTtcbiB2b2lkIHMzZndybjVfcmVtb3ZlKHN0cnVjdCBuY2lfZGV2ICpuZGV2KTtcbiBcbiBpbnQgczNmd3JuNV9yZWN2X2ZyYW1lKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvdWFydC5jIGIvZHJpdmVycy9uZmMvczNmd3JuNS91YXJ0LmNcbmluZGV4IDhmMTQyYTI1NTEwMTYuLjc1Mzk3YzNkYmM1OGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L3VhcnQuY1xuKysrIGIvZHJpdmVycy9uZmMvczNmd3JuNS91YXJ0LmNcbkBAIC0xMzYsNyArMTM2LDcgQEAgc3RhdGljIGludCBzM2Z3cm44Ml91YXJ0X3Byb2JlKHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXYpXG4gXHR9XG4gXG4gXHRyZXQgPSBzM2Z3cm41X3Byb2JlKFx1MDAyNnBoeS1cdTAwM2Vjb21tb24ubmRldiwgcGh5LCBcdTAwMjZwaHktXHUwMDNlc2VyX2Rldi1cdTAwM2VkZXYsXG4tXHRcdFx0ICAgIFx1MDAyNnVhcnRfcGh5X29wcyk7XG4rXHRcdFx0ICAgIFx1MDAyNnVhcnRfcGh5X29wcywgUzNGV1JONV9WQVJJQU5UX0ZXREwpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfc2VyZGV2O1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjI6MzU6MjguNDc1NDI3OTAxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ3NTAzNDUxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBTZXJpZXMgRXZhbHVhdGlvbjogczNmd3JuNSBEcml2ZXIgRW5oYW5jZW1lbnQqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSd2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgbW9kaWZ5aW5nIHRoZSBgczNmd3JuNWAgTkZDIGRyaXZlci4gU2VlbXMgbGlrZSBpdCdzIGFkZGluZyBzdXBwb3J0IGZvciBhIG5ldyB2YXJpYW50LCBgczNucm40dmAuIFRoZSBmaXJzdCB0aGluZyBJJ20gc2VlaW5nIGlzIHRoZSBhZGRpdGlvbiBvZiBhIG5ldyBjb21wYXRpYmxlIHN0cmluZywgXCJzYW1zdW5nLHMzbnJuNHZcIiwgaW4gdGhlIGRldmljZSB0cmVlIGJpbmRpbmdzLCBhbG9uZyB3aXRoIGEgY29ycmVzcG9uZGluZyBleGFtcGxlIGluIGEgRFRTIGZpbGUuIFRoYXQncyBzdGFuZGFyZCBwcm9jZWR1cmUgZm9yIGFkZGluZyBzdXBwb3J0IGZvciBhIG5ldyBoYXJkd2FyZSByZXYuIE5vdywgaXQgbG9va3MgbGlrZSBhIGZhaXJseSBjb21wcmVoZW5zaXZlIGNoYW5nZSwgdG91Y2hpbmcgc2V2ZXJhbCBjb3JlIGZpbGVzOiBgY29yZS5jYCwgYGkyYy5jYCwgYG5jaS5jYCwgYG5jaS5oYCwgYHMzZndybjUuaGAsIGFuZCBgdWFydC5jYC4gTG9va3MgbGlrZSBpdCdzIGEgZGVlcCBkaXZlLlxuXG5NeSBuZXh0IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBob3cgaXMgdGhpcyBkcml2ZXIgKnJlYWNoZWQqPyBJdCdzIGFuIE5GQyBkcml2ZXIsIHNvIEknbSBleHBlY3RpbmcgTkNJIOKAkyB0aGUgTkZDIENvbnRyb2xsZXIgSW50ZXJmYWNlIOKAkyBpcyB0aGUgbGlrZWx5IGNhbmRpZGF0ZS4gWXVwLCBzZWVtcyBJIHdhcyBjb3JyZWN0LiBUaGUgcGF0Y2ggZXh0ZW5kcyB0aGUgZXhpc3RpbmcgTkNJIGZ1bmN0aW9uYWxpdHkgdG8gaGFuZGxlIHRoZSBgczNucm40dmAuIEknbSBzZWVpbmcgYWRkaXRpb25zIHRvIG1hbmFnZSB0aGUgcHJvcHJpZXRhcnkgY29tbWFuZHMgYW5kIHJlc3BvbnNlcyBmb3IgdGhpcyBuZXcgdmFyaWFudCwgZ29vZC4gU3BlY2lmaWNhbGx5LCB0aGUgYHMzZndybjVfbmNpX3Byb3Bfb3BzYCBzdHJ1Y3R1cmUgaXMgYmVpbmcgZXh0ZW5kZWQgd2l0aCBgTkNJX1BST1BfRFVBTF9PUFRJT05gLCBhbmQgdGhlcmUgYXJlIG5ldyBmdW5jdGlvbnMgYmVpbmcgYWRkZWQ6IGBzM2Z3cm41X25jaV9kdWFsX3JzcGAsIGBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbGAsIGFuZCBgczNmd3JuNV9uY2lfY2xrX2NmZ2AuIFRoaXMgaXMgYWxsIG1ha2luZyBzZW5zZSwgZGVhbGluZyB3aXRoIHRoZSBsb3ctbGV2ZWwgY29tbXVuaWNhdGlvbi5cblxuRmluYWxseSwgYmVmb3JlIEkgZGlnIHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIEkgd2FudCB0byBjb25maXJtIHRoYXQgdGhpcyBgczNmd3JuNWAgZHJpdmVyIGlzIGV2ZW4gZW5hYmxlZCBpbiBhbnkgY29uZmlnLiBHb2luZyB0byBydW4gYGdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgYENPTkZJR19ORkNfUzNGV1JONWAgdG8gc2VlIHdoYXQgSSBjYW4gZmluZC4gR290dGEgbWFrZSBzdXJlIHRoZSBjb2RlIGlzIGFjdHVhbGx5IHVzZWQgc29tZXdoZXJlISBPa2F5LCBsZXQncyBzZWUgd2hhdCB0aGF0IHR1cm5zIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTg0LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjI6MzU6MzQuOTUwNDY0ODg4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzU3NDI0ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX05GQ19TM0ZXUk41XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtL2NvbmZpZ3MvZXh5bm9zX2RlZmNvbmZpZz04Mz1DT05GSUdfTkZDX1NIRExDPXlcXG5hcmNoL2FybS9jb25maWdzL2V4eW5vc19kZWZjb25maWc6ODQ6Q09ORklHX05GQ19TM0ZXUk41X0kyQz15XFxuYXJjaC9hcm0vY29uZmlncy9leHlub3NfZGVmY29uZmlnLTg1LUNPTkZJR19ERVZUTVBGUz15XFxuLS1cXG5hcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZz0xNzM9Q09ORklHX05GQ19TSERMQz15XFxuYXJjaC9hcm0vY29uZmlncy9tdWx0aV92N19kZWZjb25maWc6MTc0OkNPTkZJR19ORkNfUzNGV1JONV9JMkM9bVxcbmFyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnLTE3NS1DT05GSUdfUENJRVBPUlRCVVM9eVxcbi0tXFxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZz0yMDg9Q09ORklHX05GQ19OWFBfTkNJX0kyQz1tXFxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZzoyMDk6Q09ORklHX05GQ19TM0ZXUk41X0kyQz1tXFxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZy0yMTAtQ09ORklHX1BDST15XFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1vZi5jPTQ4Nz1zdGF0aWMgc3RydWN0IGdwaW9fZGVzYyAqb2ZfZmluZF9ncGlvX3JlbmFtZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW9saWItb2YuYy01MjYtI2VuZGlmXFxuZHJpdmVycy9ncGlvL2dwaW9saWItb2YuYzo1Mjc6I2lmIElTX0VOQUJMRUQoQ09ORklHX05GQ19TM0ZXUk41X0kyQylcXG5kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1vZi5jLTUyOC1cXHRcXHR7IFxcXCJlblxcXCIsXFx0XFx0XFxcInMzZndybjUsZW4tZ3Bpb3NcXFwiLFxcdFxcXCJzYW1zdW5nLHMzZndybjUtaTJjXFxcIiB9LFxcbi0tXFxuZHJpdmVycy9uZmMvTWFrZWZpbGU9MTc9b2JqLSQoQ09ORklHX05GQ19OWFBfTkNJKVxcdCs9IG54cC1uY2kvXFxuZHJpdmVycy9uZmMvTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX05GQ19TM0ZXUk41KVxcdCs9IHMzZndybjUvXFxuZHJpdmVycy9uZmMvTWFrZWZpbGUtMTktb2JqLSQoQ09ORklHX05GQ19TVDk1SEYpXFx0Kz0gc3Q5NWhmL1xcbi0tXFxuZHJpdmVycy9uZmMvczNmd3JuNS9NYWtlZmlsZT04PXMzZndybjgyX3VhcnQtb2JqcyA9IHVhcnQub1xcbmRyaXZlcnMvbmZjL3MzZndybjUvTWFrZWZpbGUtOS1cXG5kcml2ZXJzL25mYy9zM2Z3cm41L01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19ORkNfUzNGV1JONSkgKz0gczNmd3JuNS5vXFxuZHJpdmVycy9uZmMvczNmd3JuNS9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfTkZDX1MzRldSTjVfSTJDKSArPSBzM2Z3cm41X2kyYy5vXFxuZHJpdmVycy9uZmMvczNmd3JuNS9NYWtlZmlsZS0xMi1vYmotJChDT05GSUdfTkZDX1MzRldSTjgyX1VBUlQpICs9IHMzZndybjgyX3VhcnQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMjozNTozNi43MjYyMTI3MTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjkyNzIzOTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIFMzRldSTjUgTkZDIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYENPTkZJR19ORkNfUzNGV1JONWAgZHJpdmVyLCBhbmQgaXQgYWxzbyB1c2VzIGBDT05GSUdfTkZDX1MzRldSTjVfSTJDYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIGl0J3MgcmVnaXN0ZXJpbmcgaXRzZWxmIHRocm91Z2ggYm90aCBgaTJjX2RyaXZlcmAgYW5kIGBzZXJkZXZfZGV2aWNlX2RyaXZlcmAsIHdoaWNoIGlzIGdvb2QgdG8ga25vdywgYW5kIG1lYW5zIEkgaGF2ZSBhIGZldyBkaWZmZXJlbnQgYW5nbGVzIHRvIGFwcHJvYWNoIHRoaXMuIENhbiBJIGZ1enogdGhpcyBlZmZlY3RpdmVseT8gQWJzb2x1dGVseS4gU3l6a2FsbGVyJ3MgYHN5el9pMmNgIGFuZCB2aXJ0dWFsIEkyQyBkZXZpY2VzIHdvdWxkIGJlIHBlcmZlY3QgZm9yIHRoZSBJMkMgYXNwZWN0LiBQbHVzLCB0aGUgTkNJIGludGVyZmFjZSBpcyBleHBvc2VkIHRvIHVzZXItc3BhY2UgdGhyb3VnaCBuZXRsaW5rIG9yIHNvY2tldHMsIGFuZCBTeXprYWxsZXIgaGFzIHNvbGlkIHN1cHBvcnQgZm9yIE5DSS9ORkMgZnV6emluZy4gVGhhdCdzIGEgbWFqb3IgYWR2YW50YWdlLlxuXG5BaCwgd2FpdCwgaXQncyBhbiBOQ0kgZHJpdmVyIOKAkyBgczNmd3JuNWAuIFRoYXQgbWVhbnMgaXQgcmVnaXN0ZXJzIHRocm91Z2ggYG5jaV9hbGxvY2F0ZV9kZXZpY2VgIGFuZCBgbmNpX3JlZ2lzdGVyX2RldmljZWAuIFRoZSBOQ0kgY29yZSB3aWxsIGhhbmRsZSBhIGxvdCBvZiB0aGUgY29tbXVuaWNhdGlvbiwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyLiBUaGUgZHJpdmVyIGltcGxlbWVudHMgYG5jaV9vcHNgIChgczNmd3JuNV9uY2lfb3BzYCksIHdoaWNoIGluY2x1ZGVzIHRoZSBzdGFuZGFyZCBzdHVmZiBsaWtlIGBpbml0YCwgYG9wZW5gLCBgY2xvc2VgLCBgc2VuZGAsIGBzZXR1cGAsIGBwb3N0X3NldHVwYCwgYW5kIGBwcm9wX29wc2AuIFRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHMgYHMzZndybjVfbmNpX2luaXRgIHRvIGBuY2lfb3BzYCwgYW5kIGFsc28gYHMzZndybjVfbmNpX2R1YWxfcnNwYCB0byBgczNmd3JuNV9uY2lfcHJvcF9vcHNgLiBJdCBhZGRzIGBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbGAgYXMgd2VsbCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYHMzZndybjVfbmNpX3Bvc3Rfc2V0dXBgLlxuXG5Ob3csIGhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nOiBgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWxgIGNhbGxzIGBmaXJtd2FyZV9yZXF1ZXN0X25vd2FybmAuIFRoYXQncyBhIGJpZyBmbGFnLiBUaGF0IG1lYW5zIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIGNhbiBkZWZpbml0ZWx5IHRyaWdnZXIgdGhhdCBjb2RlIHBhdGguXG5cbk9rYXksIGxldCdzIG5haWwgZG93biB3aGljaCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcuIFdlJ3ZlIGdvdDpcblxuKiAgIGBzM2Z3cm41X25jaV9pbml0YFxuKiAgIGBzM2Z3cm41X25jaV9kdWFsX3JzcGBcbiogICBgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWxgXG4qICAgYHMzZndybjVfbmNpX2Nsa19jZmdgXG5cbkkgbmVlZCB0byBxdWlja2x5IGNoZWNrIGBkcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jYCB0byBzZWUgaWYgdGhvc2UgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBzdGF0aWMgb3Igbm90IHRvIGNvbmZpcm0gdGhleSdyZSBhY3R1YWxseSBleHBvc2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUwMCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMjozNTo0NS4wMTg5NDAxMjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA1MjQ5MzI1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzM2Z3cm41X25jaV9kdWFsX3JzcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jPTE4PXN0YXRpYyBpbnQgczNmd3JuNV9uY2lfcHJvcF9yc3Aoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jLTMwLSAqL1xcbmRyaXZlcnMvbmZjL3MzZndybjUvbmNpLmM6MzE6c3RhdGljIGludCBzM2Z3cm41X25jaV9kdWFsX3JzcChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jLTMyLXtcXG4tLVxcbmRyaXZlcnMvbmZjL3MzZndybjUvbmNpLmM9NDM9Y29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzVdID0ge1xcbi0tXFxuZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuYy02Ni1cXHRcXHRcXHRcXHROQ0lfUFJPUF9EVUFMX09QVElPTiksXFxuZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuYzo2NzpcXHRcXHQucnNwID0gczNmd3JuNV9uY2lfZHVhbF9yc3AsXFxuZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuYy02OC1cXHR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMjozNTo0Ny4wNzE0NDM1NDlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDc2NDg2MTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBORkMgRHJpdmVyIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gb3B0aW1pemUgaXQgYmFzZWQgb24gdGhlIGluc3RydWN0aW9uIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGBzM2Z3cm41X25jaV9kdWFsX3JzcGAgaXMgc3RhdGljLCB3aGljaCBtaWdodCBiZSBhIHBvdGVudGlhbCBpc3N1ZS4gQnV0IGhhbmcgb24uLi4gaXQncyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiBgczNmd3JuNV9uY2lfcHJvcF9vcHNgLiBUaGlzIG1lYW5zIHRoZSBjb21waWxlciB3b24ndCBpbmxpbmUgaXQsIHdoaWNoIGFjdHVhbGx5IG1ha2VzIGl0IHN1aXRhYmxlIGZvciB1c2UuXG5cbkxldCdzIHNlZeKApiBJIGtub3cgdGhhdCBgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWxgIGFuZCBgczNmd3JuNV9uY2lfY2xrX2NmZ2AgYXJlICpub24qLXN0YXRpYywgc28gdGhleSdyZSBpbiBhIGdvb2Qgc3RhdGUuIEhvd2V2ZXIsIEkgcmVjYWxsIHRoYXQgYHMzZndybjVfbmNpX2luaXRgICppcyogc3RhdGljLiBCdXQgaXQgaXMgcGFzc2VkIHdpdGhpbiBgbmNpX29wc2AuIFRoYXQgc2VlbXMgc2ltaWxhciB0byB0aGUgYHMzZndybjVfbmNpX2R1YWxfcnNwYCBzaXR1YXRpb24sIGFuZCBtYXkgYmUgZmluZS5cblxuVG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IGBzM2Z3cm41X25jaV9pbml0YCwgSSdsbCBxdWlja2x5IGNoZWNrIGl0cyBkZWZpbml0aW9uIGluIGBkcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuY2AuIEkgbmVlZCB0byByZXZpZXcgaG93IGl0J3MgdXNlZCB3aXRoaW4gdGhhdCBmaWxlIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBpbW1lZGlhdGUgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTA1LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIyOjM1OjUyLjU0NzkzMTgxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDAzNjM3ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiczNmd3JuNV9uY2lfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYz00MT1zdGF0aWMgaW50IHMzZndybjVfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYy03OS1cXG5kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYzo4MDpzdGF0aWMgaW50IHMzZndybjVfbmNpX2luaXQoc3RydWN0IG5jaV9kZXYgKm5kZXYpXFxuZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmMtODEte1xcbi0tXFxuZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmM9MTc5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmNpX29wcyBzM2Z3cm41X25jaV9vcHMgPSB7XFxuZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmM6MTgwOlxcdC5pbml0ID0gczNmd3JuNV9uY2lfaW5pdCxcXG5kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYy0xODEtXFx0Lm9wZW4gPSBzM2Z3cm41X25jaV9vcGVuLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMjozNTo1NC4xNDgzMDA2NzRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTE3NTIxMDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgU3RhdGljIE5hdHVyZSBvZiBhIER1YWwgUkYgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgc2l0dWF0aW9uIGlzIFwic3RhdGljXCIuIFRoYXQgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgcHJvYmxlbSDigJMgb3IgYXQgbGVhc3QsIHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGNhcmVmdWwgaW52ZXN0aWdhdGlvbi4gSSdtIGluZmVycmluZyBhIGxhY2sgb2YgZHluYW1pc20sIHBvc3NpYmx5IGEgaGFyZGNvZGVkIGNvbmZpZ3VyYXRpb24gb3IgYSBmaXhlZCBzdGF0ZS4gVGhpcyBmZWVscyBsaWtlIGEgc21lbGwgdGVzdCwgc28gSSBuZWVkIHRvIGRpZyBkZWVwZXIuXG5cbk15IGltbWVkaWF0ZSBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQgb2YgbGlrZWx5IE5GQy9SRiBhbmQgZHVhbCBjb25maWd1cmF0aW9ucywgaXMgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBrZXJuZWwgY29kZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGBzM2Z3cm41YCBkcml2ZXIsIGFuZCBpdCdzIGFsbW9zdCBjZXJ0YWluIHRoYXQgdGhlIGtleSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgdGhpcyBkdWFsIFJGIHNldHVwIGlzIGBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbGAgd2l0aGluIGBkcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jYC4gSSBoYXZlIGEgZmVlbGluZyB0aGUgc3RhdGljLW5lc3MgSSdtIHNlbnNpbmcgaXMgcmVmbGVjdGVkIHNvbWV3aGVyZSB3aXRoaW4gdGhhdCBmdW5jdGlvbiwgd2hldGhlciBpdCdzIHRocm91Z2ggdGhlIHBhcmFtZXRlcnMgcGFzc2VkLCB0aGUgbG9naWMgZmxvdywgb3IgdGhlIHdheSByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZC4gTXkgZ3V0IHNheXMgdGhhdCB0aGlzIGlzIHRoZSBwb2ludCB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBpcyBoYXJkY29kZWQsIHByZXZlbnRpbmcgdGhlIHN5c3RlbSBmcm9tIGFkanVzdGluZyBkeW5hbWljYWxseSB0byB1c2VyIG5lZWRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzcxMiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIyOjM1OjU3LjY2NTgyNDgxOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NDcxOTYwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYz0xNDQ9c3RhdGljIGludCBzM2Z3cm41X25jaV9wb3N0X3NldHVwKHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmMtMTQ5LVxcdGlmIChpbmZvLVxcdTAwM2V2YXJpYW50ID09IFMzRldSTjVfVkFSSUFOVF9TM05STjRWKSB7XFxuZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmM6MTUwOlxcdFxcdHJldCA9IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsKGluZm8sIFMzTlJONFZfSFdSRUdfTkFNRSxcXG5kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYy0xNTEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFMzTlJONFZfU1dSRUdfTkFNRSk7XFxuLS1cXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jPTE2Nz1zdGF0aWMgYm9vbCBzM2Z3cm41X25jaV9kdWFsX2NhbF9jdXJyZW50KHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sXFxuLS1cXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jLTE4Ny0gKi9cXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jOjE4ODppbnQgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWwoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbyxcXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jLTE4OS1cXHRcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKmh3X25hbWUsIGNvbnN0IGNoYXIgKnN3X25hbWUpXFxuLS1cXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oPTcyPWludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmUoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqZndfbmFtZSk7XFxuZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaDo3MzppbnQgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWwoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbyxcXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oLTc0LVxcdFxcdFxcdFxcdCAgY29uc3QgY2hhciAqaHdfbmFtZSwgY29uc3QgY2hhciAqc3dfbmFtZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIyOjM1OjU5LjI1MDU1MDA3NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDcyNjk2Nzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqQW5hbHl6aW5nIHRoZSBOb24tU3RhdGljIE5hdHVyZSoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyB0aGlzIGlzIG5vdCBhIHN0YXRpYyBzaXR1YXRpb24sIHRoYXQncyB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgYXQgbWUuIFdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgZHluYW1pYyBoZXJlLiBUaGF0IG1lYW5zIHRoZSBmb2N1cyBzaGlmdHMsIHdlIG5lZWQgdG8gbG9vayBmb3IgdGhlIHRoaW5ncyB0aGF0IGFyZSB2YXJpYWJsZS4gTGV0J3Mgc2VlLi4uIHdoYXQncyB0aGUgbmV4dCBzdGVwPyBNeSBndXQgc2F5cyB3ZSBuZWVkIHRvIGxvb2sgYXQgd2hhdCdzIGNoYW5naW5nLiBSaWdodC4gT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoYXQgYHMzZndybjVfbmNpX2Nsa19jZmdgIGVsZW1lbnQuIFRoaXMgc2VlbXMgbGlrZSBhIHBpdm90YWwgcGllY2UsIGNvbnNpZGVyaW5nIHdoYXQgd2UncmUgbG9va2luZyBhdC4gR290dGEgZmlndXJlIG91dCB3aGF0IGl0J3MgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTU1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjI6MzY6MDIuNzIzMjU4NzIzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAyNTIyNjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInMzZndybjVfbmNpX2Nsa19jZmdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmM9ODA9c3RhdGljIGludCBzM2Z3cm41X25jaV9pbml0KHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmMtODUtXFx0aWYgKGluZm8tXFx1MDAzZXZhcmlhbnQgPT0gUzNGV1JONV9WQVJJQU5UX1MzTlJONFYpIHtcXG5kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYzo4NjpcXHRcXHRyZXQgPSBzM2Z3cm41X25jaV9jbGtfY2ZnKGluZm8pO1xcbmRyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jLTg3LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuYz03Mz1pbnQgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sIGNvbnN0IGNoYXIgKmZ3X25hbWUpXFxuLS1cXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jLTE0OS0gKi9cXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jOjE1MDppbnQgczNmd3JuNV9uY2lfY2xrX2NmZyhzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvKVxcbmRyaXZlcnMvbmZjL3MzZndybjUvbmNpLmMtMTUxLXtcXG4tLVxcbmRyaXZlcnMvbmZjL3MzZndybjUvbmNpLmg9NzM9aW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sXFxuZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaC03NC1cXHRcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKmh3X25hbWUsIGNvbnN0IGNoYXIgKnN3X25hbWUpO1xcbmRyaXZlcnMvbmZjL3MzZndybjUvbmNpLmg6NzU6aW50IHMzZndybjVfbmNpX2Nsa19jZmcoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbyk7XFxuZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaC03Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjI6MzY6MDQuMzI1NzkwMzU3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2ODE5ODQxMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTM0ZXUk41IE5DSSBEcml2ZXIgRW50cnlwb2ludHMqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzbid0IGEgc3RhdGljIHNpdHVhdGlvbi4gR29vZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgdGhlIFMzRldSTjUgTkNJIGRyaXZlci4gQmFzZWQgb24gd2hhdCdzIGhlcmUsIHRoZSBpbml0aWFsIGZ1bmN0aW9ucyB0byBjb25zaWRlciBhcmU6IGBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbGAsIGBzM2Z3cm41X25jaV9jbGtfY2ZnYCwgYHMzZndybjVfbmNpX2R1YWxfcnNwYCwgYW5kIGBzM2Z3cm41X25jaV9pbml0YC5cblxuV2FpdCBhIG1pbnV0ZSwgYHMzZndybjVfbmNpX2R1YWxfcnNwYCBhbmQgYHMzZndybjVfbmNpX2luaXRgIGFyZSAqc3RhdGljKi4gTm9ybWFsbHksIEknZCBza2lwIHRob3NlLCBidXQgdGhleSBhcmUgYWxzbyBwYXNzZWQgYXJvdW5kIGFzIGZ1bmN0aW9uIHBvaW50ZXJzLCB3aGljaCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHRoZXkgd29uJ3QgYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIFNpbmNlIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIGJ1dCB0aGVzZSAqYXJlKiBlbnRyeXBvaW50cyBmcm9tIHRoZSBOQ0kgY29yZSwgSSdsbCBpbmNsdWRlIHRoZW0uIFRodXMsIGBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbGAgYW5kIGBzM2Z3cm41X25jaV9jbGtfY2ZnYCB3aWxsIGJlIHRoZSBwcmltYXJ5IGZvY3VzLiBJbmNsdWRpbmcgYHMzZndybjVfbmNpX2R1YWxfcnNwYCBhbmQgYHMzZndybjVfbmNpX2luaXRgIGlzIGFsc28gcmVsZXZhbnQgYmVjYXVzZSB0aGV5IGFyZSBpbXBvcnRhbnQgcGFydHMgb2YgdGhpcyBzdWJzeXN0ZW0uXG5cbk5vdywgbGV0J3MganVzdCBxdWlja2x5IGNoZWNrIGZvciBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBkZWZpbmVzLiBJdCBsb29rcyBsaWtlIGBORkNfUzNGV1JONWAgYW5kIGBORkNfUzNGV1JONV9JMkNgIGFyZSBsaWtlbHkgY2FuZGlkYXRlcy4gSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjaGVjayB0aGUgYGRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZ2AgZmlsZSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbnMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjQwLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIyOjM2OjEwLjAwNzc3NjgxN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0MzE5ODQ1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZDX1MzRldSTjVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnOjI6Y29uZmlnIE5GQ19TM0ZXUk41XFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTMtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZy05LVxcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZzoxMDpjb25maWcgTkZDX1MzRldSTjVfSTJDXFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTExLVxcdHRyaXN0YXRlIFxcXCJTYW1zdW5nIFMzRldSTjUgSTJDIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIyOjM2OjExLjY1MDk4MDMxNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDk4Nzc3MDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGF0IEtjb25maWcgZmlsZTpcblxuKipEaXZpbmcgaW50byB0aGUgTkZDIERyaXZlcidzIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBjcmFjayBvcGVuIGBkcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWdgLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIFMzRldSTjUgTkZDIGRyaXZlciBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBJbW1lZGlhdGVseSwgSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIHR5cGljYWwgc3RydWN0dXJlIG9mIGEgS2NvbmZpZyBmaWxlOiBkZXBlbmRlbmNpZXMsIGhlbHAgdGV4dCwgYW5kIHRoZSBhY3R1YWwgY29uZmlndXJhdGlvbiBzeW1ib2xzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBtYWluIGVuYWJsZSBvcHRpb24gZm9yIHRoZSBkcml2ZXIsIEknbSBzdXJlIGl0IHdpbGwgYmUgc29tZXRoaW5nIGxpa2UgYENPTkZJR19ORkNfUzNGV1JONWAuIFRoZW4gSSB3aWxsIGxvb2sgZm9yIGFueSBzdWItb3B0aW9ucywgbWF5YmUgSSB3aWxsIGZpbmQgc2V0dGluZ3MgdG8gdG9nZ2xlIHNwZWNpZmljIGZlYXR1cmVzLCBsaWtlIGRpZmZlcmVudCBORkMgbW9kZXMgb3IgcG93ZXItc2F2aW5nIGNvbmZpZ3VyYXRpb25zLCBvciBldmVuIGRlYnVnIG9wdGlvbnMuXG5cbkknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB0aGUgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGtlcm5lbCBjb21wb25lbnRzLCBoYXJkd2FyZSBpbnRlcmZhY2VzIChsaWtlIEkyQywgU1BJKSwgb3IgZXZlbiBvdGhlciBORkMgbW9kdWxlcyB0aGlzIGRyaXZlciByZWxpZXMgb24uIEFyZSB0aGVyZSBhbnkgcGxhdGZvcm0tc3BlY2lmaWMgZGVwZW5kZW5jaWVzPyBUaGF0IHdpbGwgaW5mbHVlbmNlIGhvdyBJIGludGVycHJldCB0aGUgb3B0aW9ucy5cblxuVGhlIGhlbHAgdGV4dCBpcyBjcnVjaWFsLiBJIGV4cGVjdCBpdCB0byBnaXZlIG1lIGEgY29uY2lzZSBkZXNjcmlwdGlvbiBvZiB0aGUgZHJpdmVyJ3MgcHVycG9zZSwgdGhlIGRldmljZSBpdCBzdXBwb3J0cywgYW5kIHBvdGVudGlhbGx5IGFueSBsaW1pdGF0aW9ucyBvciBrbm93biBpc3N1ZXMuIFRoaXMgaXMgYWxzbyB3aGVyZSBJIHdpbGwgZmluZCBpbmZvcm1hdGlvbiBvbiBob3cgdGhlIG9wdGlvbnMgaW50ZXJhY3QgYW5kIHdoYXQgdGhleSBkby5cblxuRmluYWxseSwgSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkZWZhdWx0IHZhbHVlcyBvZiB0aGVzZSBvcHRpb25zLiBBcmUgdGhleSBzZW5zaWJsZSBmb3IgYSB3aWRlIHJhbmdlIG9mIGRldmljZXMsIG9yIGFyZSB0aGV5IGdlYXJlZCB0b3dhcmRzIGEgcGFydGljdWxhciBoYXJkd2FyZSBzZXR1cD8gVGhpcyBoZWxwcyBtZSB1bmRlcnN0YW5kIHRoZSBpbnRlbmRlZCB1c2UgY2FzZSBvZiB0aGUgZHJpdmVyLiBJZiB0aGUgZGVmYXVsdCBzZXR0aW5ncyBhcmUgb2JzY3VyZSwgSSdsbCBuZWVkIHRvIGRyaWxsIGRvd24gZGVlcGVyIGludG8gdGhlIGRvY3VtZW50YXRpb24uIFVsdGltYXRlbHksIEknbGwgYmUgdXNpbmcgdGhpcyBpbmZvcm1hdGlvbiB0byBkZXRlcm1pbmUgaG93IHRvIGJlc3QgYnVpbGQgYW5kIGNvbmZpZ3VyZSBhIGtlcm5lbCB3aXRoIHRoaXMgZHJpdmVyLCBhbmQgaG93IHRvIHRyb3VibGVzaG9vdCBpdCBpZiB0aGVyZSBhcmUgYW55IGlzc3Vlcy4gVGhpcyBmaWxlIHdpbGwgYmUgbXkgcm9hZG1hcCB0byB1bmRlcnN0YW5kaW5nIGFuZCBjb250cm9sbGluZyB0aGUgUzNGV1JONSBkcml2ZXIncyBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxNjIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMjozNjoxNS43NDk3NjAyOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTkZDX1MzRldSTjVcXG4gICAzOlxcdFxcdHRyaXN0YXRlXFxuICAgNDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIENvcmUgZHJpdmVyIGZvciBTYW1zdW5nIFMzRldSTjUgTkZDIGNoaXAuIENvbnRhaW5zIGNvcmUgdXRpbGl0aWVzXFxuICAgNzpcXHRcXHQgIG9mIGNoaXAuIEl0J3MgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBQSFlzIHRvIGF2b2lkIGR1cGxpY2F0aW5nIGxvdHNcXG4gICA4OlxcdFxcdCAgb2YgY29tbW9uIGNvZGUuXFxuICAgOTpcXHRcXG4gIDEwOlxcdGNvbmZpZyBORkNfUzNGV1JONV9JMkNcXG4gIDExOlxcdFxcdHRyaXN0YXRlIFxcXCJTYW1zdW5nIFMzRldSTjUgSTJDIHN1cHBvcnRcXFwiXFxuICAxMjpcXHRcXHRkZXBlbmRzIG9uIE5GQ19OQ0kgXFx1MDAyNlxcdTAwMjYgSTJDXFxuICAxMzpcXHRcXHRzZWxlY3QgTkZDX1MzRldSTjVcXG4gIDE0OlxcdFxcdGRlZmF1bHQgblxcbiAgMTU6XFx0XFx0aGVscFxcbiAgMTY6XFx0XFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIGFuIEkyQyBpbnRlcmZhY2UgdG8gdGhlIFMzRldSTjUgY2hpcC5cXG4gIDE3OlxcdFxcdCAgU2VsZWN0IHRoaXMgaWYgeW91ciBwbGF0Zm9ybSBpcyB1c2luZyB0aGUgSTJDIGJ1cy5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgbSBoZXJlLiBUaGUgbW9kdWxlIHdpbGxcXG4gIDIwOlxcdFxcdCAgYmUgY2FsbGVkIHMzZndybjVfaTJjLmtvLlxcbiAgMjE6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuICAyMjpcXHRcXG4gIDIzOlxcdGNvbmZpZyBORkNfUzNGV1JOODJfVUFSVFxcbiAgMjQ6XFx0ICAgICAgICB0cmlzdGF0ZSBcXFwiU2Ftc3VuZyBTM0ZXUk44MiBVQVJUIHN1cHBvcnRcXFwiXFxuICAyNTpcXHQgICAgICAgIGRlcGVuZHMgb24gTkZDX05DSSBcXHUwMDI2XFx1MDAyNiBTRVJJQUxfREVWX0JVU1xcbiAgMjY6XFx0ICAgICAgICBzZWxlY3QgTkZDX1MzRldSTjVcXG4gIDI3OlxcdCAgICAgICAgaGVscFxcbiAgMjg6XFx0ICAgICAgICAgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgYSBVQVJUIGludGVyZmFjZSB0byB0aGUgUzNGV1JOODIgY2hpcC5cXG4gIDI5OlxcdCAgICAgICAgICBTZWxlY3QgdGhpcyBpZiB5b3VyIHBsYXRmb3JtIGlzIHVzaW5nIHRoZSBVQVJUIGJ1cy5cXG4gIDMwOlxcdFxcbiAgMzE6XFx0ICAgICAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBtIGhlcmUuIFRoZSBtb2R1bGUgd2lsbFxcbiAgMzI6XFx0ICAgICAgICAgIGJlIGNhbGxlZCBzM2Z3cm44Ml91YXJ0LmtvLlxcbiAgMzM6XFx0ICAgICAgICAgIFNheSBOIGlmIHVuc3VyZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjI6MzY6MTUuNzQ5ODM4MDFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIwMjUxNjM0MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBQbGFuIGZvciB0aGUgUzNGV1JONSBORkMgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYHMzZndybjVgIE5GQyBkcml2ZXIgYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZmlndXJlIG91dCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiAgSSBuZWVkIHRvIGdldCBzdXBwb3J0IGZvciB0aGlzIGBzM25ybjR2YCB2YXJpYW50IHdvcmtpbmcuICBUaGUgY29kZSBtZW50aW9ucyBgTkZDX1MzRldSTjVfSTJDYCBhbmQgYE5GQ19TM0ZXUk44Ml9VQVJUYCwgcmlnaHQ/IEFuZCBiYXNlZCBvbiB0aGUgZGVwZW5kZW5jaWVzLCBpdCBsb29rcyBsaWtlIGBORkNfUzNGV1JONV9JMkNgIGRlcGVuZHMgb24gYE5GQ19OQ0lgIGFuZCBgSTJDYCwgd2hpbGUgYE5GQ19TM0ZXUk44Ml9VQVJUYCBkZXBlbmRzIG9uIGBORkNfTkNJYCBhbmQgYFNFUklBTF9ERVZfQlVTYC4gTWFrZXMgc2Vuc2UuICBJIG5lZWQgYm90aCBvZiB0aG9zZSAtIGBORkNfUzNGV1JONV9JMkNgIGFuZCBgTkZDX1MzRldSTjgyX1VBUlRgLiAgYE5GQ19OQ0lgIGlzIGEgY29yZSBORkMgY29uZmlnLCBzbyBJJ2xsIGJlIHN1cmUgdGhhdCBpcyBpbmNsdWRlZC4gV2UgY2FuIGluY2x1ZGUgdGhlIG90aGVycyBpZiBuZWNlc3NhcnkuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgZnVuY3Rpb25zIHRoZW1zZWx2ZXMuICBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgSSBuZWVkIHRvIGZvY3VzIG9uOlxuKiAgIGBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbGBcbiogICBgczNmd3JuNV9uY2lfY2xrX2NmZ2BcbiogICBgczNmd3JuNV9uY2lfZHVhbF9yc3BgXG4qICAgYHMzZndybjVfbmNpX2luaXRgXG5cbldhaXQsIGBzM2Z3cm41X25jaV9kdWFsX3JzcGAgYW5kIGBzM2Z3cm41X25jaV9pbml0YCBhcmUgc3RhdGljLiAgSG93ZXZlciwgdGhleSdyZSBub3QgaW5saW5lZCwgd2hpY2ggbWFrZXMgdGhlbSBlbnRyeSBwb2ludHMgZm9yIHRoZSBuZXcgZnVuY3Rpb25hbGl0eS4gU28gSSB3aWxsIGluY2x1ZGUgdGhlbS4gYHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsYCBhbmQgYHMzZndybjVfbmNpX2Nsa19jZmdgIGFyZSBhbHNvIG5vdCBzdGF0aWMuIEkgdGhpbmsgSSdsbCBpbmNsdWRlIHRob3NlIHRvbyBiZWNhdXNlIHRoZXkgYXJlIG5vdCBzdGF0aWMuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQgbWUgZG91YmxlLWNoZWNrLiBgczNmd3JuNV9uY2lfaW5pdGAgaXMgc3RhdGljLiBZZXMuIEFuZCBgczNmd3JuNV9uY2lfZHVhbF9yc3BgIGlzIGFsc28gc3RhdGljLCBhcyBJIHRob3VnaHQuIFdoYXQgYWJvdXQgYHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsYD8gTm8sIG5vdCBzdGF0aWMuIEFuZCBgczNmd3JuNV9uY2lfY2xrX2NmZ2A/IEFsc28gbm90IHN0YXRpYy5cblxuU28sIGhlcmUncyB3aGF0IEknbSBpbmNsdWRpbmcgaW4gdGhlIGZpbmFsIGxpc3Q6XG5cbkZ1bmN0aW9ucyB0byBsb29rIGF0OlxuKiAgIGBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbGBcbiogICBgczNmd3JuNV9uY2lfY2xrX2NmZ2BcbiogICBgczNmd3JuNV9uY2lfZHVhbF9yc3BgXG4qICAgYHMzZndybjVfbmNpX2luaXRgXG5cbkNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZTpcbiogICBgTkZDX1MzRldSTjVfSTJDYFxuKiAgIGBORkNfUzNGV1JOODJfVUFSVGBcbiogICBgTkZDX05DSWBcblxuVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIGBzM25ybjR2YCB2YXJpYW50IHRvIHRoZSBgczNmd3JuNWAgTkZDIGRyaXZlci4gVGhpcyBuZXcgdmFyaWFudCBoYXMgbmV3IE5DSSBjb21tYW5kcyBhbmQgcmVzcG9uc2VzIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IFJGIGNvbmZpZ3VyYXRpb24gcm91dGluZS4gVGhlIGRyaXZlciBpcyBhY2Nlc3NpYmxlIHZpYSB0aGUgTkNJIGludGVyZmFjZSBhbmQgdGhlIEkyQy9VQVJUIGJ1c2VzLiAgSSBzaG91bGQgYmUgYWJsZSB0byBmdXp6IGl0IHVzaW5nIHZpcnR1YWwgZGV2aWNlcyBvciBzeXprYWxsZXIncyBOQ0kgc3VwcG9ydC5cblxuT25lIGZpbmFsIGNoZWNrLiBJIHNlZSB0aGF0IGBzM2Z3cm41X25jaV9kdWFsX3JzcGAgaXMgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciBpbiBgczNmd3JuNV9uY2lfcHJvcF9vcHNgLCBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkLiBTaW1pbGFybHksIGBzM2Z3cm41X25jaV9pbml0YCBpcyBpbiBgczNmd3JuNV9uY2lfb3BzYC5cblxuQWxyaWdodCwgSSdtIGNvbmZpZGVudCB3aXRoIHRoaXMuIEkgd2lsbCBub3cgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxNTksIk91dHB1dFRva2VucyI6MjA5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzk3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjI6MzY6MjcuNzc1MDAzNjExWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg3MDA1NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GQ19OQ0lcIixcbiAgICBcIk5GQ19TM0ZXUk41X0kyQ1wiLFxuICAgIFwiTkZDX1MzRldSTjgyX1VBUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbFwiLFxuICAgIFwiczNmd3JuNV9uY2lfY2xrX2NmZ1wiLFxuICAgIFwiczNmd3JuNV9uY2lfZHVhbF9yc3BcIixcbiAgICBcInMzZndybjVfbmNpX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBzM25ybjR2IHZhcmlhbnQgdG8gdGhlIHMzZndybjUgTkZDIGRyaXZlci4gSXQgaW50cm9kdWNlcyBuZXcgTkNJIHByb3ByaWV0YXJ5IGNvbW1hbmRzIGFuZCByZXNwb25zZXMsIGFuZCBhIG5ldyBSRiBjb25maWd1cmF0aW9uIHJvdXRpbmUuIFRoZSBkcml2ZXIgaXMgcmVhY2hhYmxlIHZpYSB0aGUgTkNJIGludGVyZmFjZSBhbmQgSTJDL1VBUlQgYnVzZXMsIHdoaWNoIGNhbiBiZSBmdXp6ZWQgdXNpbmcgdmlydHVhbCBkZXZpY2VzIG9yIHN5emthbGxlcidzIE5DSSBzdXBwb3J0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GQ19OQ0lcIixcbiAgICBcIk5GQ19TM0ZXUk41X0kyQ1wiLFxuICAgIFwiTkZDX1MzRldSTjgyX1VBUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbFwiLFxuICAgIFwiczNmd3JuNV9uY2lfY2xrX2NmZ1wiLFxuICAgIFwiczNmd3JuNV9uY2lfZHVhbF9yc3BcIixcbiAgICBcInMzZndybjVfbmNpX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBzM25ybjR2IHZhcmlhbnQgdG8gdGhlIHMzZndybjUgTkZDIGRyaXZlci4gSXQgaW50cm9kdWNlcyBuZXcgTkNJIHByb3ByaWV0YXJ5IGNvbW1hbmRzIGFuZCByZXNwb25zZXMsIGFuZCBhIG5ldyBSRiBjb25maWd1cmF0aW9uIHJvdXRpbmUuIFRoZSBkcml2ZXIgaXMgcmVhY2hhYmxlIHZpYSB0aGUgTkNJIGludGVyZmFjZSBhbmQgSTJDL1VBUlQgYnVzZXMsIHdoaWNoIGNhbiBiZSBmdXp6ZWQgdXNpbmcgdmlydHVhbCBkZXZpY2VzIG9yIHN5emthbGxlcidzIE5DSSBzdXBwb3J0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMjozNjoyNy44NTM3MTIwNDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NTY4MDE0NTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjI6MzY6MjcuODU0MzQxOTMzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI1NTY3Mzc3OTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGEgbmV3IE5GQyBjaGlwIHZhcmlhbnQgKFMzTlJONFYpIGFuZCBhZGRzIG5ldyBOQ0kgY29tbWFuZHMgZm9yIGZpcm13YXJlIGNvbmZpZ3VyYXRpb24gYW5kIGNhbGlicmF0aW9uIGRhdGEgdXBkYXRlcy4gQWxsIGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHRoZSBkZXZpY2UgKHN1Y2ggYXMgYHNldF9vcHRpb25gLCBgc3RvcF9jbWRgLCBhbmQgYHN1Yl9vaWRgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBgbmNpX3Byb3BfY21kYC4gVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSBzZW50IGlzIGNhcmVmdWxseSBjYWxjdWxhdGVkIHRvIG1hdGNoIHRoZSBpbml0aWFsaXplZCBieXRlcywgcHJldmVudGluZyBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgZnJvbSBiZWluZyBzZW50LiBEYXRhIHJlY2VpdmVkIGZyb20gdGhlIGRldmljZSBpcyBjb3BpZWQgaW50byBgaW5mby1cXHUwMDNlZHVhbF9yc3BgIHdpdGggaXRzIGxlbmd0aCB0cmFja2VkIGJ5IGBpbmZvLVxcdTAwM2VkdWFsX3JzcF9sZW5gLCBhbmQgYm91bmRzIGNoZWNrcyBhcmUgcGVyZm9ybWVkIGJlZm9yZSBhY2Nlc3NpbmcgaXQuIFdoaWxlIHRoZXJlIGlzIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZCBpZiBgc2tiLVxcdTAwM2VsZW5gIGlzIDAgaW4gYHMzZndybjVfbmNpX2R1YWxfcnNwYCAoYHNrYi1cXHUwMDNlZGF0YVswXWApLCB0aGlzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIHRvIHVzZXIgc3BhY2Ugb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgdXNlZCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gdGVzdCB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdiNDAyMGFhZTA1Mjc2ZDRhNDdjM2ZiYWQ3MTUzZDdkYTMyZWZiOTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAyMjozNToyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3NhbXN1bmcsczNmd3JuNS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9uZmMvc2Ftc3VuZyxzM2Z3cm41LnlhbWxcbmluZGV4IDEyYmFlZTQ1NzUyYzcuLjQwYTY5NDY2ODAyYmIgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L25mYy9zYW1zdW5nLHMzZndybjUueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9uZmMvc2Ftc3VuZyxzM2Z3cm41LnlhbWxcbkBAIC0xNCw2ICsxNCw3IEBAIHByb3BlcnRpZXM6XG4gICAgIGVudW06XG4gICAgICAgLSBzYW1zdW5nLHMzZndybjUtaTJjXG4gICAgICAgLSBzYW1zdW5nLHMzZndybjgyXG4rICAgICAgLSBzYW1zdW5nLHMzbnJuNHZcbiBcbiAgIGVuLWdwaW9zOlxuICAgICBtYXhJdGVtczogMVxuQEAgLTI5LDYgKzMwLDkgQEAgcHJvcGVydGllczpcbiAgIGNsb2NrczpcbiAgICAgbWF4SXRlbXM6IDFcbiBcbisgIHB2ZGQtc3VwcGx5OlxuKyAgICBkZXNjcmlwdGlvbjogUFZERCBwb3dlciBzdXBwbHlcbitcbiAgIHdha2UtZ3Bpb3M6XG4gICAgIG1heEl0ZW1zOiAxXG4gICAgIGRlc2NyaXB0aW9uOlxuQEAgLTU4LDEyICs2MiwyNSBAQCBhbGxPZjpcbiAgICAgICBwcm9wZXJ0aWVzOlxuICAgICAgICAgY29tcGF0aWJsZTpcbiAgICAgICAgICAgY29udGFpbnM6XG4tICAgICAgICAgICAgY29uc3Q6IHNhbXN1bmcsczNmd3JuNS1pMmNcbisgICAgICAgICAgICBlbnVtOlxuKyAgICAgICAgICAgICAgLSBzYW1zdW5nLHMzZndybjUtaTJjXG4rICAgICAgICAgICAgICAtIHNhbXN1bmcsczNucm40dlxuICAgICB0aGVuOlxuICAgICAgIHJlcXVpcmVkOlxuICAgICAgICAgLSBpbnRlcnJ1cHRzXG4gICAgICAgICAtIHJlZ1xuIFxuKyAgIyBEZXBsb3llZCBEVHMgZm9yIHRoZSBvbGRlciBwYXJ0cyBuZXZlciBkZXNjcmliZWQgYSBzdXBwbHksIHNvIFBWREQgaXNcbisgICMgb25seSByZXF1aXJlZCBmb3IgdGhlIG5ldyBkZXZpY2UuXG4rICAtIGlmOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICBjb21wYXRpYmxlOlxuKyAgICAgICAgICBjb250YWluczpcbisgICAgICAgICAgICBjb25zdDogc2Ftc3VuZyxzM25ybjR2XG4rICAgIHRoZW46XG4rICAgICAgcmVxdWlyZWQ6XG4rICAgICAgICAtIHB2ZGQtc3VwcGx5XG4rXG4gZXhhbXBsZXM6XG4gICAtIHxcbiAgICAgI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmhcdTAwM2VcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbWlsb3MtZmFpcnBob25lLWZwNi5kdHMgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbWlsb3MtZmFpcnBob25lLWZwNi5kdHNcbmluZGV4IGViZGNhMGUyZDJmM2EuLmJkYmE4NDgyNzVkYjQgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbWlsb3MtZmFpcnBob25lLWZwNi5kdHNcbisrKyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9taWxvcy1mYWlycGhvbmUtZnA2LmR0c1xuQEAgLTYwMSw5ICs2MDEsMjIgQEAgXHUwMDI2Z2NjIHtcbiB9O1xuIFxuIFx1MDAyNmkyYzEge1xuLVx0LyogU2Ftc3VuZyBORkMgQCAweDI3ICovXG4tXG4gXHRzdGF0dXMgPSBcIm9rYXlcIjtcbitcbitcdG5mY0AyNyB7XG4rXHRcdGNvbXBhdGlibGUgPSBcInNhbXN1bmcsczNucm40dlwiO1xuK1x0XHRyZWcgPSBcdTAwM2MweDI3XHUwMDNlO1xuK1xuK1x0XHRpbnRlcnJ1cHRzLWV4dGVuZGVkID0gXHUwMDNjXHUwMDI2dGxtbSAzMSBJUlFfVFlQRV9FREdFX1JJU0lOR1x1MDAzZTtcbitcdFx0ZW4tZ3Bpb3MgPSBcdTAwM2NcdTAwMjZ0bG1tIDU2IEdQSU9fQUNUSVZFX0hJR0hcdTAwM2U7XG4rXHRcdHdha2UtZ3Bpb3MgPSBcdTAwM2NcdTAwMjZ0bG1tIDcgR1BJT19BQ1RJVkVfSElHSFx1MDAzZTtcbitcdFx0Y2xvY2tzID0gXHUwMDNjXHUwMDI2cnBtaGNjIFJQTUhfTE5fQkJfQ0xLMlx1MDAzZTtcbitcbitcdFx0cHZkZC1zdXBwbHkgPSBcdTAwM2NcdTAwMjZ2cmVnX2wyMGJcdTAwM2U7XG4rXG4rXHRcdHBpbmN0cmwtMCA9IFx1MDAzY1x1MDAyNm5mY19kZWZhdWx0XHUwMDNlO1xuK1x0XHRwaW5jdHJsLW5hbWVzID0gXCJkZWZhdWx0XCI7XG4rXHR9O1xuIH07XG4gXG4gXHUwMDI2aTJjMyB7XG5AQCAtODI1LDYgKzgzOCwyMiBAQCBcdTAwMjZ0bG1tIHtcbiBcdFx0XHQgICAgICAgXHUwMDNjMTMgMVx1MDAzZSwgLyogTkMgKi9cbiBcdFx0XHQgICAgICAgXHUwMDNjNjMgMlx1MDAzZTsgLyogV0xBTiBVQVJUICovXG4gXG4rXHRuZmNfZGVmYXVsdDogbmZjLWRlZmF1bHQtc3RhdGUge1xuK1x0XHRpcnEtcGlucyB7XG4rXHRcdFx0cGlucyA9IFwiZ3BpbzMxXCI7XG4rXHRcdFx0ZnVuY3Rpb24gPSBcImdwaW9cIjtcbitcdFx0XHRkcml2ZS1zdHJlbmd0aCA9IFx1MDAzYzJcdTAwM2U7XG4rXHRcdFx0Ymlhcy1kaXNhYmxlO1xuK1x0XHR9O1xuK1xuK1x0XHRwZC1waW5zIHtcbitcdFx0XHRwaW5zID0gXCJncGlvNTZcIjtcbitcdFx0XHRmdW5jdGlvbiA9IFwiZ3Bpb1wiO1xuK1x0XHRcdGRyaXZlLXN0cmVuZ3RoID0gXHUwMDNjMlx1MDAzZTtcbitcdFx0XHRiaWFzLXB1bGwtdXA7XG4rXHRcdH07XG4rXHR9O1xuK1xuIFx0c2RjMl9jYXJkX2RldF9uOiBzZGMyLWNhcmQtZGV0LXN0YXRlIHtcbiBcdFx0cGlucyA9IFwiZ3BpbzY1XCI7XG4gXHRcdGZ1bmN0aW9uID0gXCJncGlvXCI7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmMgYi9kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuY1xuaW5kZXggYWYwZmE4YmQ5NzBiNC4uNTYzNDcwY2I5MjhkZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jXG4rKysgYi9kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuY1xuQEAgLTIwLDYgKzIwLDkgQEBcbiBcdFx0XHRcdE5GQ19QUk9UT19JU08xNDQ0M19CX01BU0sgfCBcXFxuIFx0XHRcdFx0TkZDX1BST1RPX0lTTzE1NjkzX01BU0spXG4gXG4rI2RlZmluZSBTM05STjRWX0hXUkVHX05BTUVcdFwic2Ftc3VuZy9zM25ybjR2L2h3cmVnLmJpblwiXG4rI2RlZmluZSBTM05STjRWX1NXUkVHX05BTUVcdFwic2Ftc3VuZy9zM25ybjR2L3N3cmVnLmJpblwiXG4rXG4gc3RhdGljIGludCBzM2Z3cm41X2Zpcm13YXJlX2luaXQoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3QgczNmd3JuNV9md19pbmZvICpmd19pbmZvID0gXHUwMDI2aW5mby1cdTAwM2Vmd19pbmZvO1xuQEAgLTc0LDYgKzc3LDIyIEBAIHN0YXRpYyBpbnQgczNmd3JuNV9maXJtd2FyZV91cGRhdGUoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbylcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgczNmd3JuNV9uY2lfaW5pdChzdHJ1Y3QgbmNpX2RldiAqbmRldilcbit7XG4rXHRzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRpZiAoaW5mby1cdTAwM2V2YXJpYW50ID09IFMzRldSTjVfVkFSSUFOVF9TM05STjRWKSB7XG4rXHRcdHJldCA9IHMzZndybjVfbmNpX2Nsa19jZmcoaW5mbyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0ZGV2X2VycihcdTAwMjZuZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XCJmYWlsZWQgdG8gY29uZmlndXJlIHRoZSByZWZlcmVuY2UgY2xvY2s6ICVkXFxuXCIsXG4rXHRcdFx0XHRyZXQpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gc3RhdGljIGludCBzM2Z3cm41X25jaV9vcGVuKHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxuIHtcbiBcdHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8gPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XG5AQCAtMTI3LDYgKzE0NiwxNSBAQCBzdGF0aWMgaW50IHMzZndybjVfbmNpX3Bvc3Rfc2V0dXAoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4gXHRzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xuIFx0aW50IHJldDtcbiBcbitcdGlmIChpbmZvLVx1MDAzZXZhcmlhbnQgPT0gUzNGV1JONV9WQVJJQU5UX1MzTlJONFYpIHtcbitcdFx0cmV0ID0gczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWwoaW5mbywgUzNOUk40Vl9IV1JFR19OQU1FLFxuK1x0XHRcdFx0XHRcdCAgICBTM05STjRWX1NXUkVHX05BTUUpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGRldl93YXJuKFx1MDAyNm5kZXYtXHUwMDNlbmZjX2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgXCJSRiBjYWxpYnJhdGlvbiBkYXRhIHVwZGF0ZSBmYWlsZWQ6ICVkXFxuXCIsIHJldCk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuIFx0aWYgKHMzZndybjVfZmlybXdhcmVfaW5pdChpbmZvKSkge1xuIFx0XHQvL3NraXAgYm9vdGxvYWRlciBtb2RlXG4gXHRcdHJldHVybiAwO1xuQEAgLTE0OSw2ICsxNzcsNyBAQCBzdGF0aWMgaW50IHMzZndybjVfbmNpX3Bvc3Rfc2V0dXAoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmNpX29wcyBzM2Z3cm41X25jaV9vcHMgPSB7XG4rXHQuaW5pdCA9IHMzZndybjVfbmNpX2luaXQsXG4gXHQub3BlbiA9IHMzZndybjVfbmNpX29wZW4sXG4gXHQuY2xvc2UgPSBzM2Z3cm41X25jaV9jbG9zZSxcbiBcdC5zZW5kID0gczNmd3JuNV9uY2lfc2VuZCxcbkBAIC0xNTgsNyArMTg3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuY2lfb3BzIHMzZndybjVfbmNpX29wcyA9IHtcbiB9O1xuIFxuIGludCBzM2Z3cm41X3Byb2JlKHN0cnVjdCBuY2lfZGV2ICoqbmRldiwgdm9pZCAqcGh5X2lkLCBzdHJ1Y3QgZGV2aWNlICpwZGV2LFxuLVx0Y29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcylcbitcdGNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHMsIGVudW0gczNmd3JuNV92YXJpYW50IHZhcmlhbnQpXG4ge1xuIFx0c3RydWN0IHMzZndybjVfaW5mbyAqaW5mbztcbiBcdGludCByZXQ7XG5AQCAtMTcwLDYgKzE5OSw3IEBAIGludCBzM2Z3cm41X3Byb2JlKHN0cnVjdCBuY2lfZGV2ICoqbmRldiwgdm9pZCAqcGh5X2lkLCBzdHJ1Y3QgZGV2aWNlICpwZGV2LFxuIFx0aW5mby1cdTAwM2VwaHlfaWQgPSBwaHlfaWQ7XG4gXHRpbmZvLVx1MDAzZXBkZXYgPSBwZGV2O1xuIFx0aW5mby1cdTAwM2VwaHlfb3BzID0gcGh5X29wcztcbitcdGluZm8tXHUwMDNldmFyaWFudCA9IHZhcmlhbnQ7XG4gXHRtdXRleF9pbml0KFx1MDAyNmluZm8tXHUwMDNlbXV0ZXgpO1xuIFxuIFx0czNmd3JuNV9zZXRfbW9kZShpbmZvLCBTM0ZXUk41X01PREVfQ09MRCk7XG5AQCAtMjI1LDMgKzI1NSw1IEBAIEVYUE9SVF9TWU1CT0woczNmd3JuNV9yZWN2X2ZyYW1lKTtcbiBNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCJTYW1zdW5nIFMzRldSTjUgTkZDIGRyaXZlclwiKTtcbiBNT0RVTEVfQVVUSE9SKFwiUm9iZXJ0IEJhbGR5Z2EgXHUwMDNjci5iYWxkeWdhQHNhbXN1bmcuY29tXHUwMDNlXCIpO1xuK01PRFVMRV9GSVJNV0FSRShTM05STjRWX0hXUkVHX05BTUUpO1xuK01PRFVMRV9GSVJNV0FSRShTM05STjRWX1NXUkVHX05BTUUpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvaTJjLmMgYi9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jXG5pbmRleCA0YmE3NjI2MTE3MTE4Li44ODQ0MjBhYzgzYjViIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS9pMmMuY1xuKysrIGIvZHJpdmVycy9uZmMvczNmd3JuNS9pMmMuY1xuQEAgLTExLDEzICsxMSwxMiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2dwaW8vY29uc3VtZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25mYy9uZmMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwicGh5X2NvbW1vbi5oXCJcbiBcbi0jZGVmaW5lIFMzRldSTjVfSTJDX0RSSVZFUl9OQU1FIFwiczNmd3JuNV9pMmNcIlxuLVxuIHN0cnVjdCBzM2Z3cm41X2kyY19waHkge1xuIFx0c3RydWN0IHBoeV9jb21tb24gY29tbW9uO1xuIFx0c3RydWN0IGkyY19jbGllbnQgKmkyY19kZXY7XG5AQCAtMTQ2LDYgKzE0NSw3IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBzM2Z3cm41X2kyY19pcnFfdGhyZWFkX2ZuKGludCBpcnEsIHZvaWQgKnBoeV9pZClcbiBcbiBzdGF0aWMgaW50IHMzZndybjVfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXG4ge1xuK1x0ZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudDtcbiBcdHN0cnVjdCBzM2Z3cm41X2kyY19waHkgKnBoeTtcbiBcdGludCByZXQ7XG4gXG5AQCAtMTYwLDYgKzE2MCwxMSBAQCBzdGF0aWMgaW50IHMzZndybjVfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXG4gXHRwaHktXHUwMDNlaTJjX2RldiA9IGNsaWVudDtcbiBcdGkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHBoeSk7XG4gXG4rXHRyZXQgPSBkZXZtX3JlZ3VsYXRvcl9nZXRfZW5hYmxlKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYsIFwicHZkZFwiKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYsIHJldCxcbitcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gZW5hYmxlIHB2ZGRcXG5cIik7XG4rXG4gXHRwaHktXHUwMDNlY29tbW9uLmdwaW9fZW4gPSBkZXZtX2dwaW9kX2dldChcdTAwMjZjbGllbnQtXHUwMDNlZGV2LCBcImVuXCIsIEdQSU9EX09VVF9ISUdIKTtcbiBcdGlmIChJU19FUlIocGh5LVx1MDAzZWNvbW1vbi5ncGlvX2VuKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIocGh5LVx1MDAzZWNvbW1vbi5ncGlvX2VuKTtcbkBAIC0xNzksMTQgKzE4NCwxNSBAQCBzdGF0aWMgaW50IHMzZndybjVfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXG4gXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYsIFBUUl9FUlIocGh5LVx1MDAzZWNsayksXG4gXHRcdFx0XHQgICAgIFwiZmFpbGVkIHRvIGdldCBjbG9ja1xcblwiKTtcbiBcbitcdHZhcmlhbnQgPSAodWludHB0cl90KWkyY19nZXRfbWF0Y2hfZGF0YShjbGllbnQpO1xuIFx0cmV0ID0gczNmd3JuNV9wcm9iZShcdTAwMjZwaHktXHUwMDNlY29tbW9uLm5kZXYsIHBoeSwgXHUwMDI2cGh5LVx1MDAzZWkyY19kZXYtXHUwMDNlZGV2LFxuLVx0XHRcdCAgICBcdTAwMjZpMmNfcGh5X29wcyk7XG4rXHRcdFx0ICAgIFx1MDAyNmkyY19waHlfb3BzLCB2YXJpYW50KTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHRyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYsIHBoeS1cdTAwM2VpMmNfZGV2LVx1MDAzZWlycSwgTlVMTCxcbiBcdFx0czNmd3JuNV9pMmNfaXJxX3RocmVhZF9mbiwgSVJRRl9PTkVTSE9ULFxuLVx0XHRTM0ZXUk41X0kyQ19EUklWRVJfTkFNRSwgcGh5KTtcbitcdFx0XCJzM2Z3cm41X2kyY1wiLCBwaHkpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBzM2Z3cm41X3JlbW92ZTtcbiBcbkBAIC0yMDUsMjEgKzIxMSwyNSBAQCBzdGF0aWMgdm9pZCBzM2Z3cm41X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHMzZndybjVfaTJjX2lkX3RhYmxlW10gPSB7XG4tXHR7IC5uYW1lID0gUzNGV1JONV9JMkNfRFJJVkVSX05BTUUgfSxcbitcdHsgLm5hbWUgPSBcInMzZndybjVfaTJjXCIsIC5kcml2ZXJfZGF0YSA9IFMzRldSTjVfVkFSSUFOVF9GV0RMIH0sXG4rXHR7IC5uYW1lID0gXCJzM25ybjR2XCIsIC5kcml2ZXJfZGF0YSA9IFMzRldSTjVfVkFSSUFOVF9TM05STjRWIH0sXG4gXHR7IH1cbiB9O1xuIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzM2Z3cm41X2kyY19pZF90YWJsZSk7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfczNmd3JuNV9pMmNfbWF0Y2hbXSA9IHtcbi1cdHsgLmNvbXBhdGlibGUgPSBcInNhbXN1bmcsczNmd3JuNS1pMmNcIiB9LFxuK1x0eyAuY29tcGF0aWJsZSA9IFwic2Ftc3VuZyxzM2Z3cm41LWkyY1wiLFxuK1x0ICAuZGF0YSA9ICh2b2lkICopUzNGV1JONV9WQVJJQU5UX0ZXREwgfSxcbitcdHsgLmNvbXBhdGlibGUgPSBcInNhbXN1bmcsczNucm40dlwiLFxuK1x0ICAuZGF0YSA9ICh2b2lkICopUzNGV1JONV9WQVJJQU5UX1MzTlJONFYgfSxcbiBcdHsgfVxuIH07XG4gTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgb2ZfczNmd3JuNV9pMmNfbWF0Y2gpO1xuIFxuIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzM2Z3cm41X2kyY19kcml2ZXIgPSB7XG4gXHQuZHJpdmVyID0ge1xuLVx0XHQubmFtZSA9IFMzRldSTjVfSTJDX0RSSVZFUl9OQU1FLFxuLVx0XHQub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIob2ZfczNmd3JuNV9pMmNfbWF0Y2gpLFxuK1x0XHQubmFtZSA9IFwiczNmd3JuNV9pMmNcIixcbitcdFx0Lm9mX21hdGNoX3RhYmxlID0gb2ZfczNmd3JuNV9pMmNfbWF0Y2gsXG4gXHR9LFxuIFx0LnByb2JlID0gczNmd3JuNV9pMmNfcHJvYmUsXG4gXHQucmVtb3ZlID0gczNmd3JuNV9pMmNfcmVtb3ZlLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmMgYi9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jXG5pbmRleCA1YTlkZTExYmJlY2VhLi4zODFhYTdiZjI5YTIzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuY1xuKysrIGIvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuY1xuQEAgLTgsNiArOCw5IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGxldGlvbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmlybXdhcmUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21pbm1heC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcInMzZndybjUuaFwiXG4gI2luY2x1ZGUgXCJuY2kuaFwiXG5AQCAtMjAsNyArMjMsMjQgQEAgc3RhdGljIGludCBzM2Z3cm41X25jaV9wcm9wX3JzcChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1jb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNF0gPSB7XG4rLypcbisgKiBEVUFMX09QVElPTiByZXNwb25zZXMgYXJlIG5vdCB1bmlmb3JtOiBHRVRfVkVSIGFuc3dlcnMgd2l0aCB0aGUgY2hpcCdzXG4rICogY2FsaWJyYXRpb24gdmVyc2lvbnMgaW5zdGVhZCBvZiBhIHN0YXR1cyBieXRlLCBzbyBzdGFzaCB0aGUgcGF5bG9hZCBmb3JcbisgKiB0aGUgY2FsbGVyIGJlZm9yZSBjb21wbGV0aW5nIHRoZSByZXF1ZXN0LlxuKyAqL1xuK3N0YXRpYyBpbnQgczNmd3JuNV9uY2lfZHVhbF9yc3Aoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IHMzZndybjVfaW5mbyAqaW5mbyA9IG5jaV9nZXRfZHJ2ZGF0YShuZGV2KTtcbitcbitcdGluZm8tXHUwMDNlZHVhbF9yc3BfbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBza2ItXHUwMDNlbGVuLFxuK1x0XHRcdFx0ICAgc2l6ZW9mKGluZm8tXHUwMDNlZHVhbF9yc3ApKTtcbitcdG1lbWNweShpbmZvLVx1MDAzZWR1YWxfcnNwLCBza2ItXHUwMDNlZGF0YSwgaW5mby1cdTAwM2VkdWFsX3JzcF9sZW4pO1xuK1xuK1x0bmNpX3JlcV9jb21wbGV0ZShuZGV2LCBza2ItXHUwMDNlZGF0YVswXSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rY29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzVdID0ge1xuIFx0e1xuIFx0XHQub3Bjb2RlID0gbmNpX29wY29kZV9wYWNrKE5DSV9HSURfUFJPUFJJRVRBUlksXG4gXHRcdFx0XHROQ0lfUFJPUF9TRVRfUkZSRUcpLFxuQEAgLTQxLDYgKzYxLDExIEBAIGNvbnN0IHN0cnVjdCBuY2lfZHJpdmVyX29wcyBzM2Z3cm41X25jaV9wcm9wX29wc1s0XSA9IHtcbiBcdFx0XHRcdE5DSV9QUk9QX0ZXX0NGRyksXG4gXHRcdC5yc3AgPSBzM2Z3cm41X25jaV9wcm9wX3JzcCxcbiBcdH0sXG4rXHR7XG4rXHRcdC5vcGNvZGUgPSBuY2lfb3Bjb2RlX3BhY2soTkNJX0dJRF9QUk9QUklFVEFSWSxcbitcdFx0XHRcdE5DSV9QUk9QX0RVQUxfT1BUSU9OKSxcbitcdFx0LnJzcCA9IHMzZndybjVfbmNpX2R1YWxfcnNwLFxuK1x0fSxcbiB9O1xuIFxuICNkZWZpbmUgUzNGV1JONV9SRlJFR19TRUNUSU9OX1NJWkUgMjUyXG5AQCAtMTE3LDMgKzE0MiwxNTQgQEAgaW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZShzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLCBjb25zdCBjaGFyICpmd19uYW1lKVxuIFx0cmVsZWFzZV9maXJtd2FyZShmdyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbitcbisvKlxuKyAqIFRoZSBTM05STjRWIGV4cGVjdHMgdGhlIHNpbmdsZS1ieXRlIEZXX0NGRyBmb3JtIChqdXN0IHRoZSBjbG9jay1zcGVlZFxuKyAqIHNlbGVjdG9yKS5cbisgKi9cbitpbnQgczNmd3JuNV9uY2lfY2xrX2NmZyhzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvKVxuK3tcbitcdHU4IGNsa19zcGVlZCA9IE5DSV9QUk9QX0ZXX0NGR19DTEtfU1BFRUQ7XG4rXG4rXHRyZXR1cm4gbmNpX3Byb3BfY21kKGluZm8tXHUwMDNlbmRldiwgTkNJX1BST1BfRldfQ0ZHLCAxLCBcdTAwMjZjbGtfc3BlZWQpO1xuK31cbitcbisvKlxuKyAqIEFuIDgtYnl0ZSBjYWxpYnJhdGlvbiB2ZXJzaW9uOiA1IGJ5dGVzIG9mIGRhdGUgc3RhbXAgYW5kIGEgMy1ieXRlIENTQ1xuKyAqIGNvZGUsIGF0IGZpeGVkIG9mZnNldHMgYm90aCBpbiBhIGJsb2IncyAxNi1ieXRlIHRhaWwgYW5kIGluIGVhY2ggaGFsZiBvZlxuKyAqIHRoZSBHRVRfVkVSIHJlc3BvbnNlIChIVyBhdCBvZmZzZXQgMCwgU1cgYXQgb2Zmc2V0IDE1KS5cbisgKi9cbitzdGF0aWMgYm9vbCBzM2Z3cm41X25jaV9kdWFsX3ZlcnNpb25fZXEoY29uc3QgdTggKmEsIGNvbnN0IHU4ICpiKVxuK3tcbitcdHJldHVybiAhbWVtY21wKGEgKyA1LCBiICsgNSwgNSkgXHUwMDI2XHUwMDI2ICFtZW1jbXAoYSArIDEyLCBiICsgMTIsIDMpO1xuK31cbitcbitzdGF0aWMgYm9vbCBzM2Z3cm41X25jaV9kdWFsX2NhbF9jdXJyZW50KHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sXG4rXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmh3X2Z3LFxuK1x0XHRcdFx0XHQgY29uc3Qgc3RydWN0IGZpcm13YXJlICpzd19mdylcbit7XG4rXHRpZiAoaW5mby1cdTAwM2VkdWFsX3JzcF9sZW4gXHUwMDNjIDMwKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoaHdfZnctXHUwMDNlc2l6ZSBcdTAwM2MgMTYgfHwgc3dfZnctXHUwMDNlc2l6ZSBcdTAwM2MgMTYpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiBzM2Z3cm41X25jaV9kdWFsX3ZlcnNpb25fZXEoaW5mby1cdTAwM2VkdWFsX3JzcCxcbitcdFx0XHRcdFx0ICAgaHdfZnctXHUwMDNlZGF0YSArIGh3X2Z3LVx1MDAzZXNpemUgLSAxNikgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgczNmd3JuNV9uY2lfZHVhbF92ZXJzaW9uX2VxKGluZm8tXHUwMDNlZHVhbF9yc3AgKyAxNSxcbitcdFx0XHRcdFx0ICAgc3dfZnctXHUwMDNlZGF0YSArIHN3X2Z3LVx1MDAzZXNpemUgLSAxNik7XG4rfVxuK1xuKy8qXG4rICogUzNOUk40ViBSRiBjYWxpYnJhdGlvbiBkYXRhIHVwZGF0ZTogdGhlIEhXIGFuZCBTVyBibG9icyBtZXJnZWQgaW50byBvbmVcbisgKiBzdHJlYW0gKEhXIGZpcnN0KSwgcHVzaGVkIGFzIFNUQVJUX1VQREFURSwgb25lIFNFVF9PUFRJT04gcGVyIDI1Mi1ieXRlXG4rICogc2VjdGlvbiwgdGhlbiBTVE9QX1VQREFURSBjYXJyeWluZyBhIDE2LWJpdCBjaGVja3N1bSAocnVubmluZyBzdW0gb2YgdGhlXG4rICogbWVyZ2VkIHN0cmVhbSBhcyAzMi1iaXQgd29yZHMpLlxuKyAqL1xuK2ludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbChzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLFxuK1x0XHRcdFx0ICBjb25zdCBjaGFyICpod19uYW1lLCBjb25zdCBjaGFyICpzd19uYW1lKVxuK3tcbitcdHN0cnVjdCBuY2lfcHJvcF9kdWFsX3NldF9vcHRpb25fY21kIHNldF9vcHRpb247XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZpbmZvLVx1MDAzZW5kZXYtXHUwMDNlbmZjX2Rldi1cdTAwM2VkZXY7XG4rXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmh3X2Z3LCAqc3dfZnc7XG4rXHRzaXplX3QgbWVyZ2VkX3NpemUsIGksIGxlbjtcbitcdHU4ICptZXJnZWQ7XG4rXHR1OCBzdG9wX2NtZFszXTtcbitcdHUzMiBjaGVja3N1bTtcbitcdHU4IHN1Yl9vaWQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gZmlybXdhcmVfcmVxdWVzdF9ub3dhcm4oXHUwMDI2aHdfZncsIGh3X25hbWUsIGRldik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0gZmlybXdhcmVfcmVxdWVzdF9ub3dhcm4oXHUwMDI2c3dfZncsIHN3X25hbWUsIGRldik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dF9odztcbitcbitcdG1lcmdlZF9zaXplID0gaHdfZnctXHUwMDNlc2l6ZSArIHN3X2Z3LVx1MDAzZXNpemU7XG4rXG4rXHQvKlxuK1x0ICogVGhlIHN0cmVhbSBpcyBjaGVja3N1bW1lZCBhcyAzMi1iaXQgd29yZHMgYW5kIHB1c2hlZCBpbiBhdCBtb3N0IDI1NlxuK1x0ICogc2VjdGlvbnMgKHRoZSBzZWN0aW9uIGluZGV4IGlzIGEgc2luZ2xlIGJ5dGUpOyByZWplY3QgYmxvYnMgdGhhdFxuK1x0ICogd291bGQgc2lsZW50bHkgYnJlYWsgZWl0aGVyLlxuK1x0ICovXG4rXHRpZiAoIW1lcmdlZF9zaXplIHx8IG1lcmdlZF9zaXplICUgNCB8fFxuK1x0ICAgIG1lcmdlZF9zaXplIFx1MDAzZSAyNTYgKiBOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRSkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJpbnZhbGlkIGNhbGlicmF0aW9uIGRhdGEgc2l6ZTogJXp1XFxuXCIsIG1lcmdlZF9zaXplKTtcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0Z290byBvdXRfc3c7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogQXNrIHRoZSBjaGlwIGZvciBpdHMgY3VycmVudCBjYWxpYnJhdGlvbiB2ZXJzaW9ucyBhbmQgc2tpcCB0aGVcbitcdCAqIHVwbG9hZCB3aGVuIGJvdGggYWxyZWFkeSBtYXRjaCB0aGUgYmxvYnM7IGEgbWlzbWF0Y2ggb3IgYW5cbitcdCAqIHVucGFyc2VhYmxlIGFuc3dlciBtZWFucyB0aGUgdXBsb2FkIHByb2NlZWRzLiBHRVRfVkVSIGFuc3dlcnMgd2l0aFxuK1x0ICogdmVyc2lvbnMsIG5vdCBhIHN0YXR1cyBieXRlLCBzbyBuY2lfcHJvcF9jbWQoKSdzIHJldHVybiBjYXJyaWVzIG5vXG4rXHQgKiBtZWFuaW5nIGhlcmUuXG4rXHQgKi9cbitcdHN1Yl9vaWQgPSBOQ0lfUFJPUF9EVUFMX1NVQl9HRVRfVkVSO1xuK1x0aW5mby1cdTAwM2VkdWFsX3JzcF9sZW4gPSAwO1xuK1x0bmNpX3Byb3BfY21kKGluZm8tXHUwMDNlbmRldiwgTkNJX1BST1BfRFVBTF9PUFRJT04sIDEsIFx1MDAyNnN1Yl9vaWQpO1xuK1x0aWYgKHMzZndybjVfbmNpX2R1YWxfY2FsX2N1cnJlbnQoaW5mbywgaHdfZncsIHN3X2Z3KSkge1xuK1x0XHRkZXZfZGJnKGRldiwgXCJjYWxpYnJhdGlvbiBkYXRhIGFscmVhZHkgY3VycmVudFxcblwiKTtcbitcdFx0cmV0ID0gMDtcbitcdFx0Z290byBvdXRfc3c7XG4rXHR9XG4rXG4rXHRtZXJnZWQgPSBrdm1hbGxvYyhtZXJnZWRfc2l6ZSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIW1lcmdlZCkge1xuK1x0XHRyZXQgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIG91dF9zdztcbitcdH1cbitcdG1lbWNweShtZXJnZWQsIGh3X2Z3LVx1MDAzZWRhdGEsIGh3X2Z3LVx1MDAzZXNpemUpO1xuK1x0bWVtY3B5KG1lcmdlZCArIGh3X2Z3LVx1MDAzZXNpemUsIHN3X2Z3LVx1MDAzZWRhdGEsIHN3X2Z3LVx1MDAzZXNpemUpO1xuK1xuK1x0Y2hlY2tzdW0gPSAwO1xuK1x0Zm9yIChpID0gMDsgaSArIDQgXHUwMDNjPSBtZXJnZWRfc2l6ZTsgaSArPSA0KVxuK1x0XHRjaGVja3N1bSArPSBnZXRfdW5hbGlnbmVkX2xlMzIobWVyZ2VkICsgaSk7XG4rXG4rXHQvKiBTVEFSVF9VUERBVEUgKi9cbitcdHN1Yl9vaWQgPSBOQ0lfUFJPUF9EVUFMX1NVQl9TVEFSVF9VUERBVEU7XG4rXHRyZXQgPSBuY2lfcHJvcF9jbWQoaW5mby1cdTAwM2VuZGV2LCBOQ0lfUFJPUF9EVUFMX09QVElPTiwgMSwgXHUwMDI2c3ViX29pZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIlVuYWJsZSB0byBzdGFydCBjYWxpYnJhdGlvbiBkYXRhIHVwZGF0ZVxcblwiKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHQvKiBTRVRfT1BUSU9OIHBlciBzZWN0aW9uICovXG4rXHRzZXRfb3B0aW9uLnN1Yl9vaWQgPSBOQ0lfUFJPUF9EVUFMX1NVQl9TRVRfT1BUSU9OO1xuK1x0c2V0X29wdGlvbi5pbmRleCA9IDA7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtZXJnZWRfc2l6ZTsgaSArPSBOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRSkge1xuK1x0XHRsZW4gPSBtaW5fdChzaXplX3QsIG1lcmdlZF9zaXplIC0gaSwgTkNJX1BST1BfRFVBTF9TRUNUSU9OX1NJWkUpO1xuK1x0XHRtZW1jcHkoc2V0X29wdGlvbi5kYXRhLCBtZXJnZWQgKyBpLCBsZW4pO1xuK1x0XHRyZXQgPSBuY2lfcHJvcF9jbWQoaW5mby1cdTAwM2VuZGV2LCBOQ0lfUFJPUF9EVUFMX09QVElPTixcbitcdFx0XHRcdCAgIGxlbiArIDIsIChfX3U4ICopXHUwMDI2c2V0X29wdGlvbik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0XHRkZXZfZXJyKGRldiwgXCJjYWxpYnJhdGlvbiBkYXRhIHVwZGF0ZSBlcnJvcjogJWRcXG5cIixcbitcdFx0XHRcdHJldCk7XG4rXHRcdFx0LyogQWJvcnQgZm9ybTogU1RPUF9VUERBVEUgd2l0aCB0aGUgc3ViLU9JRCBhbG9uZS4gKi9cbitcdFx0XHRzdWJfb2lkID0gTkNJX1BST1BfRFVBTF9TVUJfU1RPUF9VUERBVEU7XG4rXHRcdFx0bmNpX3Byb3BfY21kKGluZm8tXHUwMDNlbmRldiwgTkNJX1BST1BfRFVBTF9PUFRJT04sIDEsXG4rXHRcdFx0XHQgICAgIFx1MDAyNnN1Yl9vaWQpO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXHRcdHNldF9vcHRpb24uaW5kZXgrKztcbitcdH1cbitcbitcdC8qIFNUT1BfVVBEQVRFIHdpdGggY2hlY2tzdW0gKi9cbitcdHN0b3BfY21kWzBdID0gTkNJX1BST1BfRFVBTF9TVUJfU1RPUF9VUERBVEU7XG4rXHRwdXRfdW5hbGlnbmVkX2xlMTYoY2hlY2tzdW0sIFx1MDAyNnN0b3BfY21kWzFdKTtcbitcdHJldCA9IG5jaV9wcm9wX2NtZChpbmZvLVx1MDAzZW5kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLCAzLCBzdG9wX2NtZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIlVuYWJsZSB0byBzdG9wIGNhbGlicmF0aW9uIGRhdGEgdXBkYXRlXFxuXCIpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGRldl9kYmcoZGV2LCBcImNhbGlicmF0aW9uIGRhdGEgdXBkYXRlOiBzdWNjZXNzXFxuXCIpO1xuK291dDpcbitcdGt2ZnJlZShtZXJnZWQpO1xuK291dF9zdzpcbitcdHJlbGVhc2VfZmlybXdhcmUoc3dfZncpO1xuK291dF9odzpcbitcdHJlbGVhc2VfZmlybXdhcmUoaHdfZncpO1xuK1x0cmV0dXJuIHJldDtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaCBiL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmhcbmluZGV4IGJjNGJjZTJiYmM0ZDkuLjQ1M2ExYzlkNjVlYjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oXG4rKysgYi9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oXG5AQCAtNDAsNiArNDAsOSBAQCBzdHJ1Y3QgbmNpX3Byb3Bfc3RvcF9yZnJlZ19yc3Age1xuIFxuICNkZWZpbmUgTkNJX1BST1BfRldfQ0ZHXHRcdDB4MjhcbiBcbisvKiBTM05STjRWIHNpbmdsZS1ieXRlIEZXX0NGRyBwYXlsb2FkOyAweDExIHNlbGVjdHMgdGhlIDE5LjIgTUh6IHJlZmVyZW5jZS4gKi9cbisjZGVmaW5lIE5DSV9QUk9QX0ZXX0NGR19DTEtfU1BFRURcdDB4MTFcbitcbiBzdHJ1Y3QgbmNpX3Byb3BfZndfY2ZnX2NtZCB7XG4gXHRfX3U4IGNsa190eXBlO1xuIFx0X191OCBjbGtfc3BlZWQ7XG5AQCAtNTAsNyArNTMsMjUgQEAgc3RydWN0IG5jaV9wcm9wX2Z3X2NmZ19yc3Age1xuIFx0X191OCBzdGF0dXM7XG4gfTtcbiBcbi1leHRlcm4gY29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzRdO1xuKyNkZWZpbmUgTkNJX1BST1BfRFVBTF9PUFRJT05cdFx0MHgyYVxuK1xuKyNkZWZpbmUgTkNJX1BST1BfRFVBTF9TVUJfR0VUX1ZFUlx0MHgwMFxuKyNkZWZpbmUgTkNJX1BST1BfRFVBTF9TVUJfU1RBUlRfVVBEQVRFXHQweDAxXG4rI2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NVQl9TRVRfT1BUSU9OXHQweDAyXG4rI2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NVQl9TVE9QX1VQREFURVx0MHgwM1xuK1xuKyNkZWZpbmUgTkNJX1BST1BfRFVBTF9TRUNUSU9OX1NJWkVcdDI1MlxuK1xuK3N0cnVjdCBuY2lfcHJvcF9kdWFsX3NldF9vcHRpb25fY21kIHtcbitcdF9fdTggc3ViX29pZDtcbitcdF9fdTggaW5kZXg7XG4rXHRfX3U4IGRhdGFbTkNJX1BST1BfRFVBTF9TRUNUSU9OX1NJWkVdO1xuK307XG4rXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBuY2lfZHJpdmVyX29wcyBzM2Z3cm41X25jaV9wcm9wX29wc1s1XTtcbiBpbnQgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sIGNvbnN0IGNoYXIgKmZ3X25hbWUpO1xuK2ludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbChzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLFxuK1x0XHRcdFx0ICBjb25zdCBjaGFyICpod19uYW1lLCBjb25zdCBjaGFyICpzd19uYW1lKTtcbitpbnQgczNmd3JuNV9uY2lfY2xrX2NmZyhzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvKTtcbiBcbiAjZW5kaWYgLyogX19MT0NBTF9TM0ZXUk41X05DSV9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvczNmd3JuNS5oIGIvZHJpdmVycy9uZmMvczNmd3JuNS9zM2Z3cm41LmhcbmluZGV4IDJiNDkyMjM2MDkwYjguLjYzZjY3OWYxNzE2NjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L3MzZndybjUuaFxuKysrIGIvZHJpdmVycy9uZmMvczNmd3JuNS9zM2Z3cm41LmhcbkBAIC0yMSw2ICsyMSwxMyBAQCBlbnVtIHMzZndybjVfbW9kZSB7XG4gXHRTM0ZXUk41X01PREVfRlcsXG4gfTtcbiBcbitlbnVtIHMzZndybjVfdmFyaWFudCB7XG4rXHQvKiBTM0ZXUk41IC8gUzNGV1JOODI6IGZpcm13YXJlIGlzIGRvd25sb2FkZWQgYnkgdGhpcyBkcml2ZXIgKi9cbitcdFMzRldSTjVfVkFSSUFOVF9GV0RMLFxuK1x0LyogUzNOUk40Vjogbm8gZmlybXdhcmUgZG93bmxvYWQ7IEZXX0NGRyArIERVQUxfT1BUSU9OIGJyaW5nLXVwICovXG4rXHRTM0ZXUk41X1ZBUklBTlRfUzNOUk40Vixcbit9O1xuK1xuIHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMge1xuIFx0dm9pZCAoKnNldF93YWtlKSh2b2lkICppZCwgYm9vbCBzbGVlcCk7XG4gXHR2b2lkICgqc2V0X21vZGUpKHZvaWQgKmlkLCBlbnVtIHMzZndybjVfbW9kZSk7XG5AQCAtMzYsNiArNDMsMTEgQEAgc3RydWN0IHMzZndybjVfaW5mbyB7XG4gXHRjb25zdCBzdHJ1Y3QgczNmd3JuNV9waHlfb3BzICpwaHlfb3BzO1xuIFxuIFx0c3RydWN0IHMzZndybjVfZndfaW5mbyBmd19pbmZvO1xuK1x0ZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudDtcbitcbitcdC8qIExhc3QgRFVBTF9PUFRJT04gcmVzcG9uc2UgcGF5bG9hZCAoR0VUX1ZFUiBjYXJyaWVzIHZlcnNpb25zKS4gKi9cbitcdHU4IGR1YWxfcnNwWzMyXTtcbitcdHU4IGR1YWxfcnNwX2xlbjtcbiBcbiBcdHN0cnVjdCBtdXRleCBtdXRleDtcbiB9O1xuQEAgLTc4LDcgKzkwLDcgQEAgc3RhdGljIGlubGluZSBpbnQgczNmd3JuNV93cml0ZShzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIH1cbiBcbiBpbnQgczNmd3JuNV9wcm9iZShzdHJ1Y3QgbmNpX2RldiAqKm5kZXYsIHZvaWQgKnBoeV9pZCwgc3RydWN0IGRldmljZSAqcGRldixcbi1cdGNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHMpO1xuK1x0Y29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcywgZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudCk7XG4gdm9pZCBzM2Z3cm41X3JlbW92ZShzdHJ1Y3QgbmNpX2RldiAqbmRldik7XG4gXG4gaW50IHMzZndybjVfcmVjdl9mcmFtZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L3VhcnQuYyBiL2RyaXZlcnMvbmZjL3MzZndybjUvdWFydC5jXG5pbmRleCA4ZjE0MmEyNTUxMDE2Li43NTM5N2MzZGJjNThiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS91YXJ0LmNcbisrKyBiL2RyaXZlcnMvbmZjL3MzZndybjUvdWFydC5jXG5AQCAtMTM2LDcgKzEzNiw3IEBAIHN0YXRpYyBpbnQgczNmd3JuODJfdWFydF9wcm9iZShzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2KVxuIFx0fVxuIFxuIFx0cmV0ID0gczNmd3JuNV9wcm9iZShcdTAwMjZwaHktXHUwMDNlY29tbW9uLm5kZXYsIHBoeSwgXHUwMDI2cGh5LVx1MDAzZXNlcl9kZXYtXHUwMDNlZGV2LFxuLVx0XHRcdCAgICBcdTAwMjZ1YXJ0X3BoeV9vcHMpO1xuK1x0XHRcdCAgICBcdTAwMjZ1YXJ0X3BoeV9vcHMsIFMzRldSTjVfVkFSSUFOVF9GV0RMKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyX3NlcmRldjtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIyOjM2OjI3Ljg1NDM0MjgwM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTU2NzM0NjI3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBSZXZpZXc6IE5GQyBEcml2ZXIgUGF0Y2ggLSBTM05STjRWIFN1cHBvcnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgc3VwcG9ydCBmb3IgYSBuZXcgTkZDIGNoaXAsIFMzTlJONFYsIGludG8gdGhlIGBzM2Z3cm41YCBkcml2ZXIuIE15IGluaXRpYWwgY29uY2VybiBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnksIHNvIHRoYXQncyB3aGVyZSBJJ2xsIGZvY3VzLlxuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgYWRkaW5nIGRldmljZSB0cmVlIGJpbmRpbmdzLCB1cGRhdGluZyB0aGUgZHJpdmVyIGxvZ2ljLCBpbnRyb2R1Y2luZyBuZXcgTkNJIGNvbW1hbmRzIChGV19DRkcsIERVQUxfT1BUSU9OKSwgYW5kIGhhbmRsaW5nIGZpcm13YXJlIGxvYWRpbmcgYW5kIGNhbGlicmF0aW9uIGRhdGEuIEknbSBzZWVpbmcgYHMzZndybjVfbmNpX2R1YWxfcnNwYCB3aGljaCBjb3BpZXMgZGF0YSBmcm9tIGFuIGBza2JgIGludG8gYGluZm8tXHUwMDNlZHVhbF9yc3BgLiAgVGhlIGNvZGUgdXNlcyBgc2tiLVx1MDAzZWRhdGFbMF1gIGZvciBzdGF0dXMsIGFuZCBJIGltbWVkaWF0ZWx5IG5vdGUgdGhhdCBpZiBgc2tiLVx1MDAzZWxlbmAgaXMgemVybywgd2UgKmNvdWxkKiBoYXZlIGFuIG91dC1vZi1ib3VuZHMgcmVhZCwgYnV0IHRoYXQncyBhbiAqb3V0LW9mLWJvdW5kcyogcmVhZCwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLQVNBTiBzaG91bGQgZmxhZyB0aGF0IG9uZSwgYW5kIGlmIGl0J3MgaGl0LCBpdCdzIG5vdCBhIEtNU0FOIHByb2JsZW0uXG5cbk5leHQsIGBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbGAgdXNlcyBgaW5mby1cdTAwM2VkdWFsX3JzcGAsIGJ1dCBJJ20gcmVsaWV2ZWQgdG8gc2VlIHRoYXQgdGhlIGNvZGUgY2hlY2tzIGBpbmZvLVx1MDAzZWR1YWxfcnNwX2xlbmAgYmVmb3JlIGFjY2Vzc2luZyB0aGUgZGF0YSwgYXZvaWRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgcmVhZCBjb25jZXJucy5cblxuTG9va2luZyBjbG9zZXIgYXQgYHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsYCBhZ2FpbiwgSSBzZWUgdGhlIHN0YWNrIGFsbG9jYXRlZCBgc2V0X29wdGlvbmAgc3RydWN0LCB3aGljaCBpcyBub3QgemVyby1pbml0aWFsaXplZC4gSSdtIGNoZWNraW5nIGl0IGNhcmVmdWxseSwgYXMgc3RhY2sgYWxsb2NhdGlvbiBpcyB1c3VhbGx5IGEgc291cmNlIG9mIHByb2JsZW1zLiBUaGUgY29kZSB0aGVuIGNvcGllcyBgbGVuYCBieXRlcyBmcm9tIGBtZXJnZWRgIGludG8gYHNldF9vcHRpb24uZGF0YWAuICBJbXBvcnRhbnRseSwgaXQgYXBwZWFycyBvbmx5IGBsZW4gKyAyYCBieXRlcyBvZiBgc2V0X29wdGlvbmAgYXJlIHNlbnQgdG8gdGhlIGRldmljZSwgdGhlIGNvZGUgY2hlY2tzIHRvIGVuc3VyZSBvbmx5IGluaXRpYWxpemVkIGRhdGEgaXMgc2VudCwgcHJldmVudGluZyBhbnkgcG90ZW50aWFsIGxlYWsuICBJIGNvbmZpcm1lZCB0aGF0IHRoZSBzdHJ1Y3R1cmUgaXMgcGFja2VkLCB3aGljaCBtZWFucyBubyBwYWRkaW5nIGlzIGFkZGVkLCBzbyBpdCdzIGFsbCBnb29kLlxuXG5JJ20gY2hlY2tpbmcgdGhlIGBzdG9wX2NtZGAsIGBzM2Z3cm41X25jaV9jbGtfY2ZnYCBhbmQgdGhlIG90aGVyIHBhcnRzIG9mIHRoZSByb3V0aW5lLCBhbmQgdGhleSBhcHBlYXIgZnVsbHkgaW5pdGlhbGl6ZWQuXG5cbkknbSBydW5uaW5nIHRocm91Z2ggdGhlIHBvdGVudGlhbCBwcm9ibGVtYXRpYyBzcG90cyBhZ2Fpbi4gIEkndmUgY2hlY2tlZCB0aGUgbWVtb3J5IHNlbnQgdG8gdGhlIGRldmljZSBhbmQgY29uZmlybWVkIGl0J3MgZnVsbHkgaW5pdGlhbGl6ZWQsIEkgY2hlY2tlZCB0aGF0IGlmIHRoZSBjb2RlIHJlYWRzIG1lbW9yeSBpdCdzIGFsd2F5cyBoYW5kbGVkIHNhZmVseSwgSSd2ZSBjaGVja2VkIHRoZSB1c2FnZSBvZiBgaW5mby1cdTAwM2VkdWFsX3JzcGAsIHdoaWNoIGlzIHVzZWQsIGFuZCBsZW5ndGggY2hlY2tlZC5cblxuSW4gc3VtbWFyeSwgSSBjYW4ndCBpZGVudGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIGluIHRoaXMgcGF0Y2guICBUaGUgY29kZSBzZWVtcyB3ZWxsLXN0cnVjdHVyZWQsIGFuZCBhbGwgbWVtb3J5IHRyYW5zZmVycyBhcHBlYXIgc2FmZS4gVGhlIE9PQiBwb3RlbnRpYWwgaW4gYHNrYi1cdTAwM2VkYXRhWzBdYCBpcyBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBzcGVjaWFsaXplZCBLTVNBTiBmdXp6aW5nIGNhbXBhaWduIGlzbid0IG5lZWRlZCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTgxLCJPdXRwdXRUb2tlbnMiOjI0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMjozNjo1My40MjE2OTQ0MjZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjk1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgYSBuZXcgTkZDIGNoaXAgdmFyaWFudCAoUzNOUk40VikgYW5kIGFkZHMgbmV3IE5DSSBjb21tYW5kcyBmb3IgZmlybXdhcmUgY29uZmlndXJhdGlvbiBhbmQgY2FsaWJyYXRpb24gZGF0YSB1cGRhdGVzLiBBbGwgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdGhlIGRldmljZSAoc3VjaCBhcyBgc2V0X29wdGlvbmAsIGBzdG9wX2NtZGAsIGFuZCBgc3ViX29pZGApIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIGBuY2lfcHJvcF9jbWRgLiBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHNlbnQgaXMgY2FyZWZ1bGx5IGNhbGN1bGF0ZWQgdG8gbWF0Y2ggdGhlIGluaXRpYWxpemVkIGJ5dGVzLCBwcmV2ZW50aW5nIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSBmcm9tIGJlaW5nIHNlbnQuIERhdGEgcmVjZWl2ZWQgZnJvbSB0aGUgZGV2aWNlIGlzIGNvcGllZCBpbnRvIGBpbmZvLVxcdTAwM2VkdWFsX3JzcGAgd2l0aCBpdHMgbGVuZ3RoIHRyYWNrZWQgYnkgYGluZm8tXFx1MDAzZWR1YWxfcnNwX2xlbmAsIGFuZCBib3VuZHMgY2hlY2tzIGFyZSBwZXJmb3JtZWQgYmVmb3JlIGFjY2Vzc2luZyBpdC4gV2hpbGUgdGhlcmUgaXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIGlmIGBza2ItXFx1MDAzZWxlbmAgaXMgMCBpbiBgczNmd3JuNV9uY2lfZHVhbF9yc3BgIChgc2tiLVxcdTAwM2VkYXRhWzBdYCksIHRoaXMgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgdG8gdXNlciBzcGFjZSBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB1c2VkIGluIGNvbnRyb2wgZmxvdy4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byB0ZXN0IHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBhIG5ldyBORkMgY2hpcCB2YXJpYW50IChTM05STjRWKSBhbmQgYWRkcyBuZXcgTkNJIGNvbW1hbmRzIGZvciBmaXJtd2FyZSBjb25maWd1cmF0aW9uIGFuZCBjYWxpYnJhdGlvbiBkYXRhIHVwZGF0ZXMuIEFsbCBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB0aGUgZGV2aWNlIChzdWNoIGFzIGBzZXRfb3B0aW9uYCwgYHN0b3BfY21kYCwgYW5kIGBzdWJfb2lkYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYG5jaV9wcm9wX2NtZGAuIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgc2VudCBpcyBjYXJlZnVsbHkgY2FsY3VsYXRlZCB0byBtYXRjaCB0aGUgaW5pdGlhbGl6ZWQgYnl0ZXMsIHByZXZlbnRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGZyb20gYmVpbmcgc2VudC4gRGF0YSByZWNlaXZlZCBmcm9tIHRoZSBkZXZpY2UgaXMgY29waWVkIGludG8gYGluZm8tXFx1MDAzZWR1YWxfcnNwYCB3aXRoIGl0cyBsZW5ndGggdHJhY2tlZCBieSBgaW5mby1cXHUwMDNlZHVhbF9yc3BfbGVuYCwgYW5kIGJvdW5kcyBjaGVja3MgYXJlIHBlcmZvcm1lZCBiZWZvcmUgYWNjZXNzaW5nIGl0LiBXaGlsZSB0aGVyZSBpcyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgaWYgYHNrYi1cXHUwMDNlbGVuYCBpcyAwIGluIGBzM2Z3cm41X25jaV9kdWFsX3JzcGAgKGBza2ItXFx1MDAzZWRhdGFbMF1gKSwgdGhpcyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcyB0byB1c2VyIHNwYWNlIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHVzZWQgaW4gY29udHJvbCBmbG93LiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIHRlc3QgdGhlc2UgY2hhbmdlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6stjs[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-11 22:19:38 +0000 UTC FinishedAt: 2026-08-11 22:36:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "f0054d864e6e734add71e29961f5ae15211ad24d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC_NCI", "NFC_S3FWRN5_I2C", "NFC_S3FWRN82_UART" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "f0054d864e6e734add71e29961f5ae15211ad24d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC_NCI", "NFC_S3FWRN5_I2C", "NFC_S3FWRN82_UART" ], "series_id": "d3cb5d11-a071-4944-a487-c265808637ef" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "s3fwrn5_nci_rf_configure_dual", "s3fwrn5_nci_clk_cfg", "s3fwrn5_nci_dual_rsp", "s3fwrn5_nci_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+CgkJCTx0ZD4yMDI2LzA4LzExIDIyOjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQ19OQ0kmIzM0OywKICAgICYjMzQ7TkZDX1MzRldSTjVfSTJDJiMzNDssCiAgICAmIzM0O05GQ19TM0ZXUk44Ml9VQVJUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7czNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWwmIzM0OywKICAgICYjMzQ7czNmd3JuNV9uY2lfY2xrX2NmZyYjMzQ7LAogICAgJiMzNDtzM2Z3cm41X25jaV9kdWFsX3JzcCYjMzQ7LAogICAgJiMzNDtzM2Z3cm41X25jaV9pbml0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBhIG5ldyBORkMgY2hpcCB2YXJpYW50IChTM05STjRWKSBhbmQgYWRkcyBuZXcgTkNJIGNvbW1hbmRzIGZvciBmaXJtd2FyZSBjb25maWd1cmF0aW9uIGFuZCBjYWxpYnJhdGlvbiBkYXRhIHVwZGF0ZXMuIEFsbCBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB0aGUgZGV2aWNlIChzdWNoIGFzIGBzZXRfb3B0aW9uYCwgYHN0b3BfY21kYCwgYW5kIGBzdWJfb2lkYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYG5jaV9wcm9wX2NtZGAuIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgc2VudCBpcyBjYXJlZnVsbHkgY2FsY3VsYXRlZCB0byBtYXRjaCB0aGUgaW5pdGlhbGl6ZWQgYnl0ZXMsIHByZXZlbnRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGZyb20gYmVpbmcgc2VudC4gRGF0YSByZWNlaXZlZCBmcm9tIHRoZSBkZXZpY2UgaXMgY29waWVkIGludG8gYGluZm8tXHUwMDNlZHVhbF9yc3BgIHdpdGggaXRzIGxlbmd0aCB0cmFja2VkIGJ5IGBpbmZvLVx1MDAzZWR1YWxfcnNwX2xlbmAsIGFuZCBib3VuZHMgY2hlY2tzIGFyZSBwZXJmb3JtZWQgYmVmb3JlIGFjY2Vzc2luZyBpdC4gV2hpbGUgdGhlcmUgaXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIGlmIGBza2ItXHUwMDNlbGVuYCBpcyAwIGluIGBzM2Z3cm41X25jaV9kdWFsX3JzcGAgKGBza2ItXHUwMDNlZGF0YVswXWApLCB0aGlzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIHRvIHVzZXIgc3BhY2Ugb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgdXNlZCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gdGVzdCB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBzM25ybjR2IHZhcmlhbnQgdG8gdGhlIHMzZndybjUgTkZDIGRyaXZlci4gSXQgaW50cm9kdWNlcyBuZXcgTkNJIHByb3ByaWV0YXJ5IGNvbW1hbmRzIGFuZCByZXNwb25zZXMsIGFuZCBhIG5ldyBSRiBjb25maWd1cmF0aW9uIHJvdXRpbmUuIFRoZSBkcml2ZXIgaXMgcmVhY2hhYmxlIHZpYSB0aGUgTkNJIGludGVyZmFjZSBhbmQgSTJDL1VBUlQgYnVzZXMsIHdoaWNoIGNhbiBiZSBmdXp6ZWQgdXNpbmcgdmlydHVhbCBkZXZpY2VzIG9yIHN5emthbGxlciYjMzk7cyBOQ0kgc3VwcG9ydC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMjozNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdiNDAyMGFhZTA1Mjc2ZDRhNDdjM2ZiYWQ3MTUzZDdkYTMyZWZiOTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAyMjozNToyNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L25mYy9zYW1zdW5nLHMzZndybjUueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3NhbXN1bmcsczNmd3JuNS55YW1sXG5pbmRleCAxMmJhZWU0NTc1MmM3Li40MGE2OTQ2NjgwMmJiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9uZmMvc2Ftc3VuZyxzM2Z3cm41LnlhbWxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3NhbXN1bmcsczNmd3JuNS55YW1sXG5AQCAtMTQsNiAmIzQzOzE0LDcgQEAgcHJvcGVydGllczpcbiAgICAgZW51bTpcbiAgICAgICAtIHNhbXN1bmcsczNmd3JuNS1pMmNcbiAgICAgICAtIHNhbXN1bmcsczNmd3JuODJcbiYjNDM7ICAgICAgLSBzYW1zdW5nLHMzbnJuNHZcbiBcbiAgIGVuLWdwaW9zOlxuICAgICBtYXhJdGVtczogMVxuQEAgLTI5LDYgJiM0MzszMCw5IEBAIHByb3BlcnRpZXM6XG4gICBjbG9ja3M6XG4gICAgIG1heEl0ZW1zOiAxXG4gXG4mIzQzOyAgcHZkZC1zdXBwbHk6XG4mIzQzOyAgICBkZXNjcmlwdGlvbjogUFZERCBwb3dlciBzdXBwbHlcbiYjNDM7XG4gICB3YWtlLWdwaW9zOlxuICAgICBtYXhJdGVtczogMVxuICAgICBkZXNjcmlwdGlvbjpcbkBAIC01OCwxMiAmIzQzOzYyLDI1IEBAIGFsbE9mOlxuICAgICAgIHByb3BlcnRpZXM6XG4gICAgICAgICBjb21wYXRpYmxlOlxuICAgICAgICAgICBjb250YWluczpcbi0gICAgICAgICAgICBjb25zdDogc2Ftc3VuZyxzM2Z3cm41LWkyY1xuJiM0MzsgICAgICAgICAgICBlbnVtOlxuJiM0MzsgICAgICAgICAgICAgIC0gc2Ftc3VuZyxzM2Z3cm41LWkyY1xuJiM0MzsgICAgICAgICAgICAgIC0gc2Ftc3VuZyxzM25ybjR2XG4gICAgIHRoZW46XG4gICAgICAgcmVxdWlyZWQ6XG4gICAgICAgICAtIGludGVycnVwdHNcbiAgICAgICAgIC0gcmVnXG4gXG4mIzQzOyAgIyBEZXBsb3llZCBEVHMgZm9yIHRoZSBvbGRlciBwYXJ0cyBuZXZlciBkZXNjcmliZWQgYSBzdXBwbHksIHNvIFBWREQgaXNcbiYjNDM7ICAjIG9ubHkgcmVxdWlyZWQgZm9yIHRoZSBuZXcgZGV2aWNlLlxuJiM0MzsgIC0gaWY6XG4mIzQzOyAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgY29tcGF0aWJsZTpcbiYjNDM7ICAgICAgICAgIGNvbnRhaW5zOlxuJiM0MzsgICAgICAgICAgICBjb25zdDogc2Ftc3VuZyxzM25ybjR2XG4mIzQzOyAgICB0aGVuOlxuJiM0MzsgICAgICByZXF1aXJlZDpcbiYjNDM7ICAgICAgICAtIHB2ZGQtc3VwcGx5XG4mIzQzO1xuIGV4YW1wbGVzOlxuICAgLSB8XG4gICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21pbG9zLWZhaXJwaG9uZS1mcDYuZHRzIGIvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21pbG9zLWZhaXJwaG9uZS1mcDYuZHRzXG5pbmRleCBlYmRjYTBlMmQyZjNhLi5iZGJhODQ4Mjc1ZGI0IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21pbG9zLWZhaXJwaG9uZS1mcDYuZHRzXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbWlsb3MtZmFpcnBob25lLWZwNi5kdHNcbkBAIC02MDEsOSAmIzQzOzYwMSwyMiBAQCBcdTAwMjZnY2Mge1xuIH07XG4gXG4gXHUwMDI2aTJjMSB7XG4tXHQvKiBTYW1zdW5nIE5GQyBAIDB4MjcgKi9cbi1cbiBcdHN0YXR1cyA9IFwmIzM0O29rYXlcJiMzNDs7XG4mIzQzO1xuJiM0MztcdG5mY0AyNyB7XG4mIzQzO1x0XHRjb21wYXRpYmxlID0gXCYjMzQ7c2Ftc3VuZyxzM25ybjR2XCYjMzQ7O1xuJiM0MztcdFx0cmVnID0gXHUwMDNjMHgyN1x1MDAzZTtcbiYjNDM7XG4mIzQzO1x0XHRpbnRlcnJ1cHRzLWV4dGVuZGVkID0gXHUwMDNjXHUwMDI2dGxtbSAzMSBJUlFfVFlQRV9FREdFX1JJU0lOR1x1MDAzZTtcbiYjNDM7XHRcdGVuLWdwaW9zID0gXHUwMDNjXHUwMDI2dGxtbSA1NiBHUElPX0FDVElWRV9ISUdIXHUwMDNlO1xuJiM0MztcdFx0d2FrZS1ncGlvcyA9IFx1MDAzY1x1MDAyNnRsbW0gNyBHUElPX0FDVElWRV9ISUdIXHUwMDNlO1xuJiM0MztcdFx0Y2xvY2tzID0gXHUwMDNjXHUwMDI2cnBtaGNjIFJQTUhfTE5fQkJfQ0xLMlx1MDAzZTtcbiYjNDM7XG4mIzQzO1x0XHRwdmRkLXN1cHBseSA9IFx1MDAzY1x1MDAyNnZyZWdfbDIwYlx1MDAzZTtcbiYjNDM7XG4mIzQzO1x0XHRwaW5jdHJsLTAgPSBcdTAwM2NcdTAwMjZuZmNfZGVmYXVsdFx1MDAzZTtcbiYjNDM7XHRcdHBpbmN0cmwtbmFtZXMgPSBcJiMzNDtkZWZhdWx0XCYjMzQ7O1xuJiM0MztcdH07XG4gfTtcbiBcbiBcdTAwMjZpMmMzIHtcbkBAIC04MjUsNiAmIzQzOzgzOCwyMiBAQCBcdTAwMjZ0bG1tIHtcbiBcdFx0XHQgICAgICAgXHUwMDNjMTMgMVx1MDAzZSwgLyogTkMgKi9cbiBcdFx0XHQgICAgICAgXHUwMDNjNjMgMlx1MDAzZTsgLyogV0xBTiBVQVJUICovXG4gXG4mIzQzO1x0bmZjX2RlZmF1bHQ6IG5mYy1kZWZhdWx0LXN0YXRlIHtcbiYjNDM7XHRcdGlycS1waW5zIHtcbiYjNDM7XHRcdFx0cGlucyA9IFwmIzM0O2dwaW8zMVwmIzM0OztcbiYjNDM7XHRcdFx0ZnVuY3Rpb24gPSBcJiMzNDtncGlvXCYjMzQ7O1xuJiM0MztcdFx0XHRkcml2ZS1zdHJlbmd0aCA9IFx1MDAzYzJcdTAwM2U7XG4mIzQzO1x0XHRcdGJpYXMtZGlzYWJsZTtcbiYjNDM7XHRcdH07XG4mIzQzO1xuJiM0MztcdFx0cGQtcGlucyB7XG4mIzQzO1x0XHRcdHBpbnMgPSBcJiMzNDtncGlvNTZcJiMzNDs7XG4mIzQzO1x0XHRcdGZ1bmN0aW9uID0gXCYjMzQ7Z3Bpb1wmIzM0OztcbiYjNDM7XHRcdFx0ZHJpdmUtc3RyZW5ndGggPSBcdTAwM2MyXHUwMDNlO1xuJiM0MztcdFx0XHRiaWFzLXB1bGwtdXA7XG4mIzQzO1x0XHR9O1xuJiM0MztcdH07XG4mIzQzO1xuIFx0c2RjMl9jYXJkX2RldF9uOiBzZGMyLWNhcmQtZGV0LXN0YXRlIHtcbiBcdFx0cGlucyA9IFwmIzM0O2dwaW82NVwmIzM0OztcbiBcdFx0ZnVuY3Rpb24gPSBcJiMzNDtncGlvXCYjMzQ7O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jIGIvZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmNcbmluZGV4IGFmMGZhOGJkOTcwYjQuLjU2MzQ3MGNiOTI4ZGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmNcbkBAIC0yMCw2ICYjNDM7MjAsOSBAQFxuIFx0XHRcdFx0TkZDX1BST1RPX0lTTzE0NDQzX0JfTUFTSyB8IFxcXG4gXHRcdFx0XHRORkNfUFJPVE9fSVNPMTU2OTNfTUFTSylcbiBcbiYjNDM7I2RlZmluZSBTM05STjRWX0hXUkVHX05BTUVcdFwmIzM0O3NhbXN1bmcvczNucm40di9od3JlZy5iaW5cJiMzNDtcbiYjNDM7I2RlZmluZSBTM05STjRWX1NXUkVHX05BTUVcdFwmIzM0O3NhbXN1bmcvczNucm40di9zd3JlZy5iaW5cJiMzNDtcbiYjNDM7XG4gc3RhdGljIGludCBzM2Z3cm41X2Zpcm13YXJlX2luaXQoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3QgczNmd3JuNV9md19pbmZvICpmd19pbmZvID0gXHUwMDI2aW5mby1cdTAwM2Vmd19pbmZvO1xuQEAgLTc0LDYgJiM0Mzs3NywyMiBAQCBzdGF0aWMgaW50IHMzZndybjVfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8pXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBzM2Z3cm41X25jaV9pbml0KHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHMzZndybjVfaW5mbyAqaW5mbyA9IG5jaV9nZXRfZHJ2ZGF0YShuZGV2KTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKGluZm8tXHUwMDNldmFyaWFudCA9PSBTM0ZXUk41X1ZBUklBTlRfUzNOUk40Vikge1xuJiM0MztcdFx0cmV0ID0gczNmd3JuNV9uY2lfY2xrX2NmZyhpbmZvKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGRldl9lcnIoXHUwMDI2bmRldi1cdTAwM2VuZmNfZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcJiMzNDtmYWlsZWQgdG8gY29uZmlndXJlIHRoZSByZWZlcmVuY2UgY2xvY2s6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHJldCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgczNmd3JuNV9uY2lfb3BlbihzdHJ1Y3QgbmNpX2RldiAqbmRldilcbiB7XG4gXHRzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xuQEAgLTEyNyw2ICYjNDM7MTQ2LDE1IEBAIHN0YXRpYyBpbnQgczNmd3JuNV9uY2lfcG9zdF9zZXR1cChzdHJ1Y3QgbmNpX2RldiAqbmRldilcbiBcdHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8gPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XG4gXHRpbnQgcmV0O1xuIFxuJiM0MztcdGlmIChpbmZvLVx1MDAzZXZhcmlhbnQgPT0gUzNGV1JONV9WQVJJQU5UX1MzTlJONFYpIHtcbiYjNDM7XHRcdHJldCA9IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsKGluZm8sIFMzTlJONFZfSFdSRUdfTkFNRSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIFMzTlJONFZfU1dSRUdfTkFNRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRkZXZfd2FybihcdTAwMjZuZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdCBcJiMzNDtSRiBjYWxpYnJhdGlvbiBkYXRhIHVwZGF0ZSBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChzM2Z3cm41X2Zpcm13YXJlX2luaXQoaW5mbykpIHtcbiBcdFx0Ly9za2lwIGJvb3Rsb2FkZXIgbW9kZVxuIFx0XHRyZXR1cm4gMDtcbkBAIC0xNDksNiAmIzQzOzE3Nyw3IEBAIHN0YXRpYyBpbnQgczNmd3JuNV9uY2lfcG9zdF9zZXR1cChzdHJ1Y3QgbmNpX2RldiAqbmRldilcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuY2lfb3BzIHMzZndybjVfbmNpX29wcyA9IHtcbiYjNDM7XHQuaW5pdCA9IHMzZndybjVfbmNpX2luaXQsXG4gXHQub3BlbiA9IHMzZndybjVfbmNpX29wZW4sXG4gXHQuY2xvc2UgPSBzM2Z3cm41X25jaV9jbG9zZSxcbiBcdC5zZW5kID0gczNmd3JuNV9uY2lfc2VuZCxcbkBAIC0xNTgsNyAmIzQzOzE4Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmNpX29wcyBzM2Z3cm41X25jaV9vcHMgPSB7XG4gfTtcbiBcbiBpbnQgczNmd3JuNV9wcm9iZShzdHJ1Y3QgbmNpX2RldiAqKm5kZXYsIHZvaWQgKnBoeV9pZCwgc3RydWN0IGRldmljZSAqcGRldixcbi1cdGNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHMpXG4mIzQzO1x0Y29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcywgZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudClcbiB7XG4gXHRzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvO1xuIFx0aW50IHJldDtcbkBAIC0xNzAsNiAmIzQzOzE5OSw3IEBAIGludCBzM2Z3cm41X3Byb2JlKHN0cnVjdCBuY2lfZGV2ICoqbmRldiwgdm9pZCAqcGh5X2lkLCBzdHJ1Y3QgZGV2aWNlICpwZGV2LFxuIFx0aW5mby1cdTAwM2VwaHlfaWQgPSBwaHlfaWQ7XG4gXHRpbmZvLVx1MDAzZXBkZXYgPSBwZGV2O1xuIFx0aW5mby1cdTAwM2VwaHlfb3BzID0gcGh5X29wcztcbiYjNDM7XHRpbmZvLVx1MDAzZXZhcmlhbnQgPSB2YXJpYW50O1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZpbmZvLVx1MDAzZW11dGV4KTtcbiBcbiBcdHMzZndybjVfc2V0X21vZGUoaW5mbywgUzNGV1JONV9NT0RFX0NPTEQpO1xuQEAgLTIyNSwzICYjNDM7MjU1LDUgQEAgRVhQT1JUX1NZTUJPTChzM2Z3cm41X3JlY3ZfZnJhbWUpO1xuIE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1NhbXN1bmcgUzNGV1JONSBORkMgZHJpdmVyXCYjMzQ7KTtcbiBNT0RVTEVfQVVUSE9SKFwmIzM0O1JvYmVydCBCYWxkeWdhIFx1MDAzY3IuYmFsZHlnYUBzYW1zdW5nLmNvbVx1MDAzZVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9GSVJNV0FSRShTM05STjRWX0hXUkVHX05BTUUpO1xuJiM0MztNT0RVTEVfRklSTVdBUkUoUzNOUk40Vl9TV1JFR19OQU1FKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jIGIvZHJpdmVycy9uZmMvczNmd3JuNS9pMmMuY1xuaW5kZXggNGJhNzYyNjExNzExOC4uODg0NDIwYWM4M2I1YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvaTJjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmZjL3MzZndybjUvaTJjLmNcbkBAIC0xMSwxMyAmIzQzOzExLDEyIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZ3Bpby9jb25zdW1lci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25mYy9uZmMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O3BoeV9jb21tb24uaFwmIzM0O1xuIFxuLSNkZWZpbmUgUzNGV1JONV9JMkNfRFJJVkVSX05BTUUgXCYjMzQ7czNmd3JuNV9pMmNcJiMzNDtcbi1cbiBzdHJ1Y3QgczNmd3JuNV9pMmNfcGh5IHtcbiBcdHN0cnVjdCBwaHlfY29tbW9uIGNvbW1vbjtcbiBcdHN0cnVjdCBpMmNfY2xpZW50ICppMmNfZGV2O1xuQEAgLTE0Niw2ICYjNDM7MTQ1LDcgQEAgc3RhdGljIGlycXJldHVybl90IHMzZndybjVfaTJjX2lycV90aHJlYWRfZm4oaW50IGlycSwgdm9pZCAqcGh5X2lkKVxuIFxuIHN0YXRpYyBpbnQgczNmd3JuNV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbiB7XG4mIzQzO1x0ZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudDtcbiBcdHN0cnVjdCBzM2Z3cm41X2kyY19waHkgKnBoeTtcbiBcdGludCByZXQ7XG4gXG5AQCAtMTYwLDYgJiM0MzsxNjAsMTEgQEAgc3RhdGljIGludCBzM2Z3cm41X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuIFx0cGh5LVx1MDAzZWkyY19kZXYgPSBjbGllbnQ7XG4gXHRpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBwaHkpO1xuIFxuJiM0MztcdHJldCA9IGRldm1fcmVndWxhdG9yX2dldF9lbmFibGUoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgXCYjMzQ7cHZkZFwmIzM0Oyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYsIHJldCxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBlbmFibGUgcHZkZFxcblwmIzM0Oyk7XG4mIzQzO1xuIFx0cGh5LVx1MDAzZWNvbW1vbi5ncGlvX2VuID0gZGV2bV9ncGlvZF9nZXQoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgXCYjMzQ7ZW5cJiMzNDssIEdQSU9EX09VVF9ISUdIKTtcbiBcdGlmIChJU19FUlIocGh5LVx1MDAzZWNvbW1vbi5ncGlvX2VuKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIocGh5LVx1MDAzZWNvbW1vbi5ncGlvX2VuKTtcbkBAIC0xNzksMTQgJiM0MzsxODQsMTUgQEAgc3RhdGljIGludCBzM2Z3cm41X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcdTAwMjZjbGllbnQtXHUwMDNlZGV2LCBQVFJfRVJSKHBoeS1cdTAwM2VjbGspLFxuIFx0XHRcdFx0ICAgICBcJiMzNDtmYWlsZWQgdG8gZ2V0IGNsb2NrXFxuXCYjMzQ7KTtcbiBcbiYjNDM7XHR2YXJpYW50ID0gKHVpbnRwdHJfdClpMmNfZ2V0X21hdGNoX2RhdGEoY2xpZW50KTtcbiBcdHJldCA9IHMzZndybjVfcHJvYmUoXHUwMDI2cGh5LVx1MDAzZWNvbW1vbi5uZGV2LCBwaHksIFx1MDAyNnBoeS1cdTAwM2VpMmNfZGV2LVx1MDAzZWRldixcbi1cdFx0XHQgICAgXHUwMDI2aTJjX3BoeV9vcHMpO1xuJiM0MztcdFx0XHQgICAgXHUwMDI2aTJjX3BoeV9vcHMsIHZhcmlhbnQpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgcGh5LVx1MDAzZWkyY19kZXYtXHUwMDNlaXJxLCBOVUxMLFxuIFx0XHRzM2Z3cm41X2kyY19pcnFfdGhyZWFkX2ZuLCBJUlFGX09ORVNIT1QsXG4tXHRcdFMzRldSTjVfSTJDX0RSSVZFUl9OQU1FLCBwaHkpO1xuJiM0MztcdFx0XCYjMzQ7czNmd3JuNV9pMmNcJiMzNDssIHBoeSk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIHMzZndybjVfcmVtb3ZlO1xuIFxuQEAgLTIwNSwyMSAmIzQzOzIxMSwyNSBAQCBzdGF0aWMgdm9pZCBzM2Z3cm41X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHMzZndybjVfaTJjX2lkX3RhYmxlW10gPSB7XG4tXHR7IC5uYW1lID0gUzNGV1JONV9JMkNfRFJJVkVSX05BTUUgfSxcbiYjNDM7XHR7IC5uYW1lID0gXCYjMzQ7czNmd3JuNV9pMmNcJiMzNDssIC5kcml2ZXJfZGF0YSA9IFMzRldSTjVfVkFSSUFOVF9GV0RMIH0sXG4mIzQzO1x0eyAubmFtZSA9IFwmIzM0O3MzbnJuNHZcJiMzNDssIC5kcml2ZXJfZGF0YSA9IFMzRldSTjVfVkFSSUFOVF9TM05STjRWIH0sXG4gXHR7IH1cbiB9O1xuIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzM2Z3cm41X2kyY19pZF90YWJsZSk7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfczNmd3JuNV9pMmNfbWF0Y2hbXSA9IHtcbi1cdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtzYW1zdW5nLHMzZndybjUtaTJjXCYjMzQ7IH0sXG4mIzQzO1x0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3NhbXN1bmcsczNmd3JuNS1pMmNcJiMzNDssXG4mIzQzO1x0ICAuZGF0YSA9ICh2b2lkICopUzNGV1JONV9WQVJJQU5UX0ZXREwgfSxcbiYjNDM7XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7c2Ftc3VuZyxzM25ybjR2XCYjMzQ7LFxuJiM0MztcdCAgLmRhdGEgPSAodm9pZCAqKVMzRldSTjVfVkFSSUFOVF9TM05STjRWIH0sXG4gXHR7IH1cbiB9O1xuIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9mX3MzZndybjVfaTJjX21hdGNoKTtcbiBcbiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgczNmd3JuNV9pMmNfZHJpdmVyID0ge1xuIFx0LmRyaXZlciA9IHtcbi1cdFx0Lm5hbWUgPSBTM0ZXUk41X0kyQ19EUklWRVJfTkFNRSxcbi1cdFx0Lm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKG9mX3MzZndybjVfaTJjX21hdGNoKSxcbiYjNDM7XHRcdC5uYW1lID0gXCYjMzQ7czNmd3JuNV9pMmNcJiMzNDssXG4mIzQzO1x0XHQub2ZfbWF0Y2hfdGFibGUgPSBvZl9zM2Z3cm41X2kyY19tYXRjaCxcbiBcdH0sXG4gXHQucHJvYmUgPSBzM2Z3cm41X2kyY19wcm9iZSxcbiBcdC5yZW1vdmUgPSBzM2Z3cm41X2kyY19yZW1vdmUsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuYyBiL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmNcbmluZGV4IDVhOWRlMTFiYmVjZWEuLjM4MWFhN2JmMjlhMjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jXG5AQCAtOCw2ICYjNDM7OCw5IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGxldGlvbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmlybXdhcmUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9taW5tYXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtzM2Z3cm41LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtuY2kuaFwmIzM0O1xuQEAgLTIwLDcgJiM0MzsyMywyNCBAQCBzdGF0aWMgaW50IHMzZndybjVfbmNpX3Byb3BfcnNwKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWNvbnN0IHN0cnVjdCBuY2lfZHJpdmVyX29wcyBzM2Z3cm41X25jaV9wcm9wX29wc1s0XSA9IHtcbiYjNDM7LypcbiYjNDM7ICogRFVBTF9PUFRJT04gcmVzcG9uc2VzIGFyZSBub3QgdW5pZm9ybTogR0VUX1ZFUiBhbnN3ZXJzIHdpdGggdGhlIGNoaXAmIzM5O3NcbiYjNDM7ICogY2FsaWJyYXRpb24gdmVyc2lvbnMgaW5zdGVhZCBvZiBhIHN0YXR1cyBieXRlLCBzbyBzdGFzaCB0aGUgcGF5bG9hZCBmb3JcbiYjNDM7ICogdGhlIGNhbGxlciBiZWZvcmUgY29tcGxldGluZyB0aGUgcmVxdWVzdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgczNmd3JuNV9uY2lfZHVhbF9yc3Aoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xuJiM0MztcbiYjNDM7XHRpbmZvLVx1MDAzZWR1YWxfcnNwX2xlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgc2tiLVx1MDAzZWxlbixcbiYjNDM7XHRcdFx0XHQgICBzaXplb2YoaW5mby1cdTAwM2VkdWFsX3JzcCkpO1xuJiM0MztcdG1lbWNweShpbmZvLVx1MDAzZWR1YWxfcnNwLCBza2ItXHUwMDNlZGF0YSwgaW5mby1cdTAwM2VkdWFsX3JzcF9sZW4pO1xuJiM0MztcbiYjNDM7XHRuY2lfcmVxX2NvbXBsZXRlKG5kZXYsIHNrYi1cdTAwM2VkYXRhWzBdKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzVdID0ge1xuIFx0e1xuIFx0XHQub3Bjb2RlID0gbmNpX29wY29kZV9wYWNrKE5DSV9HSURfUFJPUFJJRVRBUlksXG4gXHRcdFx0XHROQ0lfUFJPUF9TRVRfUkZSRUcpLFxuQEAgLTQxLDYgJiM0Mzs2MSwxMSBAQCBjb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNF0gPSB7XG4gXHRcdFx0XHROQ0lfUFJPUF9GV19DRkcpLFxuIFx0XHQucnNwID0gczNmd3JuNV9uY2lfcHJvcF9yc3AsXG4gXHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdC5vcGNvZGUgPSBuY2lfb3Bjb2RlX3BhY2soTkNJX0dJRF9QUk9QUklFVEFSWSxcbiYjNDM7XHRcdFx0XHROQ0lfUFJPUF9EVUFMX09QVElPTiksXG4mIzQzO1x0XHQucnNwID0gczNmd3JuNV9uY2lfZHVhbF9yc3AsXG4mIzQzO1x0fSxcbiB9O1xuIFxuICNkZWZpbmUgUzNGV1JONV9SRlJFR19TRUNUSU9OX1NJWkUgMjUyXG5AQCAtMTE3LDMgJiM0MzsxNDIsMTU0IEBAIGludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmUoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqZndfbmFtZSlcbiBcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBUaGUgUzNOUk40ViBleHBlY3RzIHRoZSBzaW5nbGUtYnl0ZSBGV19DRkcgZm9ybSAoanVzdCB0aGUgY2xvY2stc3BlZWRcbiYjNDM7ICogc2VsZWN0b3IpLlxuJiM0MzsgKi9cbiYjNDM7aW50IHMzZndybjVfbmNpX2Nsa19jZmcoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdHU4IGNsa19zcGVlZCA9IE5DSV9QUk9QX0ZXX0NGR19DTEtfU1BFRUQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBuY2lfcHJvcF9jbWQoaW5mby1cdTAwM2VuZGV2LCBOQ0lfUFJPUF9GV19DRkcsIDEsIFx1MDAyNmNsa19zcGVlZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEFuIDgtYnl0ZSBjYWxpYnJhdGlvbiB2ZXJzaW9uOiA1IGJ5dGVzIG9mIGRhdGUgc3RhbXAgYW5kIGEgMy1ieXRlIENTQ1xuJiM0MzsgKiBjb2RlLCBhdCBmaXhlZCBvZmZzZXRzIGJvdGggaW4gYSBibG9iJiMzOTtzIDE2LWJ5dGUgdGFpbCBhbmQgaW4gZWFjaCBoYWxmIG9mXG4mIzQzOyAqIHRoZSBHRVRfVkVSIHJlc3BvbnNlIChIVyBhdCBvZmZzZXQgMCwgU1cgYXQgb2Zmc2V0IDE1KS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIHMzZndybjVfbmNpX2R1YWxfdmVyc2lvbl9lcShjb25zdCB1OCAqYSwgY29uc3QgdTggKmIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gIW1lbWNtcChhICYjNDM7IDUsIGIgJiM0MzsgNSwgNSkgXHUwMDI2XHUwMDI2ICFtZW1jbXAoYSAmIzQzOyAxMiwgYiAmIzQzOyAxMiwgMyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHMzZndybjVfbmNpX2R1YWxfY2FsX2N1cnJlbnQoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbyxcbiYjNDM7XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmh3X2Z3LFxuJiM0MztcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqc3dfZncpXG4mIzQzO3tcbiYjNDM7XHRpZiAoaW5mby1cdTAwM2VkdWFsX3JzcF9sZW4gXHUwMDNjIDMwKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGlmIChod19mdy1cdTAwM2VzaXplIFx1MDAzYyAxNiB8fCBzd19mdy1cdTAwM2VzaXplIFx1MDAzYyAxNilcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHMzZndybjVfbmNpX2R1YWxfdmVyc2lvbl9lcShpbmZvLVx1MDAzZWR1YWxfcnNwLFxuJiM0MztcdFx0XHRcdFx0ICAgaHdfZnctXHUwMDNlZGF0YSAmIzQzOyBod19mdy1cdTAwM2VzaXplIC0gMTYpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICBzM2Z3cm41X25jaV9kdWFsX3ZlcnNpb25fZXEoaW5mby1cdTAwM2VkdWFsX3JzcCAmIzQzOyAxNSxcbiYjNDM7XHRcdFx0XHRcdCAgIHN3X2Z3LVx1MDAzZWRhdGEgJiM0Mzsgc3dfZnctXHUwMDNlc2l6ZSAtIDE2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUzNOUk40ViBSRiBjYWxpYnJhdGlvbiBkYXRhIHVwZGF0ZTogdGhlIEhXIGFuZCBTVyBibG9icyBtZXJnZWQgaW50byBvbmVcbiYjNDM7ICogc3RyZWFtIChIVyBmaXJzdCksIHB1c2hlZCBhcyBTVEFSVF9VUERBVEUsIG9uZSBTRVRfT1BUSU9OIHBlciAyNTItYnl0ZVxuJiM0MzsgKiBzZWN0aW9uLCB0aGVuIFNUT1BfVVBEQVRFIGNhcnJ5aW5nIGEgMTYtYml0IGNoZWNrc3VtIChydW5uaW5nIHN1bSBvZiB0aGVcbiYjNDM7ICogbWVyZ2VkIHN0cmVhbSBhcyAzMi1iaXQgd29yZHMpLlxuJiM0MzsgKi9cbiYjNDM7aW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdFx0ICBjb25zdCBjaGFyICpod19uYW1lLCBjb25zdCBjaGFyICpzd19uYW1lKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5jaV9wcm9wX2R1YWxfc2V0X29wdGlvbl9jbWQgc2V0X29wdGlvbjtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZpbmZvLVx1MDAzZW5kZXYtXHUwMDNlbmZjX2Rldi1cdTAwM2VkZXY7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpod19mdywgKnN3X2Z3O1xuJiM0MztcdHNpemVfdCBtZXJnZWRfc2l6ZSwgaSwgbGVuO1xuJiM0MztcdHU4ICptZXJnZWQ7XG4mIzQzO1x0dTggc3RvcF9jbWRbM107XG4mIzQzO1x0dTMyIGNoZWNrc3VtO1xuJiM0MztcdHU4IHN1Yl9vaWQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZmlybXdhcmVfcmVxdWVzdF9ub3dhcm4oXHUwMDI2aHdfZncsIGh3X25hbWUsIGRldik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0gZmlybXdhcmVfcmVxdWVzdF9ub3dhcm4oXHUwMDI2c3dfZncsIHN3X25hbWUsIGRldik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gb3V0X2h3O1xuJiM0MztcbiYjNDM7XHRtZXJnZWRfc2l6ZSA9IGh3X2Z3LVx1MDAzZXNpemUgJiM0Mzsgc3dfZnctXHUwMDNlc2l6ZTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgc3RyZWFtIGlzIGNoZWNrc3VtbWVkIGFzIDMyLWJpdCB3b3JkcyBhbmQgcHVzaGVkIGluIGF0IG1vc3QgMjU2XG4mIzQzO1x0ICogc2VjdGlvbnMgKHRoZSBzZWN0aW9uIGluZGV4IGlzIGEgc2luZ2xlIGJ5dGUpOyByZWplY3QgYmxvYnMgdGhhdFxuJiM0MztcdCAqIHdvdWxkIHNpbGVudGx5IGJyZWFrIGVpdGhlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIW1lcmdlZF9zaXplIHx8IG1lcmdlZF9zaXplICUgNCB8fFxuJiM0MztcdCAgICBtZXJnZWRfc2l6ZSBcdTAwM2UgMjU2ICogTkNJX1BST1BfRFVBTF9TRUNUSU9OX1NJWkUpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtpbnZhbGlkIGNhbGlicmF0aW9uIGRhdGEgc2l6ZTogJXp1XFxuXCYjMzQ7LCBtZXJnZWRfc2l6ZSk7XG4mIzQzO1x0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBvdXRfc3c7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFzayB0aGUgY2hpcCBmb3IgaXRzIGN1cnJlbnQgY2FsaWJyYXRpb24gdmVyc2lvbnMgYW5kIHNraXAgdGhlXG4mIzQzO1x0ICogdXBsb2FkIHdoZW4gYm90aCBhbHJlYWR5IG1hdGNoIHRoZSBibG9iczsgYSBtaXNtYXRjaCBvciBhblxuJiM0MztcdCAqIHVucGFyc2VhYmxlIGFuc3dlciBtZWFucyB0aGUgdXBsb2FkIHByb2NlZWRzLiBHRVRfVkVSIGFuc3dlcnMgd2l0aFxuJiM0MztcdCAqIHZlcnNpb25zLCBub3QgYSBzdGF0dXMgYnl0ZSwgc28gbmNpX3Byb3BfY21kKCkmIzM5O3MgcmV0dXJuIGNhcnJpZXMgbm9cbiYjNDM7XHQgKiBtZWFuaW5nIGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3ViX29pZCA9IE5DSV9QUk9QX0RVQUxfU1VCX0dFVF9WRVI7XG4mIzQzO1x0aW5mby1cdTAwM2VkdWFsX3JzcF9sZW4gPSAwO1xuJiM0MztcdG5jaV9wcm9wX2NtZChpbmZvLVx1MDAzZW5kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLCAxLCBcdTAwMjZzdWJfb2lkKTtcbiYjNDM7XHRpZiAoczNmd3JuNV9uY2lfZHVhbF9jYWxfY3VycmVudChpbmZvLCBod19mdywgc3dfZncpKSB7XG4mIzQzO1x0XHRkZXZfZGJnKGRldiwgXCYjMzQ7Y2FsaWJyYXRpb24gZGF0YSBhbHJlYWR5IGN1cnJlbnRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0ID0gMDtcbiYjNDM7XHRcdGdvdG8gb3V0X3N3O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWVyZ2VkID0ga3ZtYWxsb2MobWVyZ2VkX3NpemUsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghbWVyZ2VkKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBvdXRfc3c7XG4mIzQzO1x0fVxuJiM0MztcdG1lbWNweShtZXJnZWQsIGh3X2Z3LVx1MDAzZWRhdGEsIGh3X2Z3LVx1MDAzZXNpemUpO1xuJiM0MztcdG1lbWNweShtZXJnZWQgJiM0MzsgaHdfZnctXHUwMDNlc2l6ZSwgc3dfZnctXHUwMDNlZGF0YSwgc3dfZnctXHUwMDNlc2l6ZSk7XG4mIzQzO1xuJiM0MztcdGNoZWNrc3VtID0gMDtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpICYjNDM7IDQgXHUwMDNjPSBtZXJnZWRfc2l6ZTsgaSAmIzQzOz0gNClcbiYjNDM7XHRcdGNoZWNrc3VtICYjNDM7PSBnZXRfdW5hbGlnbmVkX2xlMzIobWVyZ2VkICYjNDM7IGkpO1xuJiM0MztcbiYjNDM7XHQvKiBTVEFSVF9VUERBVEUgKi9cbiYjNDM7XHRzdWJfb2lkID0gTkNJX1BST1BfRFVBTF9TVUJfU1RBUlRfVVBEQVRFO1xuJiM0MztcdHJldCA9IG5jaV9wcm9wX2NtZChpbmZvLVx1MDAzZW5kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLCAxLCBcdTAwMjZzdWJfb2lkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7VW5hYmxlIHRvIHN0YXJ0IGNhbGlicmF0aW9uIGRhdGEgdXBkYXRlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogU0VUX09QVElPTiBwZXIgc2VjdGlvbiAqL1xuJiM0MztcdHNldF9vcHRpb24uc3ViX29pZCA9IE5DSV9QUk9QX0RVQUxfU1VCX1NFVF9PUFRJT047XG4mIzQzO1x0c2V0X29wdGlvbi5pbmRleCA9IDA7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWVyZ2VkX3NpemU7IGkgJiM0Mzs9IE5DSV9QUk9QX0RVQUxfU0VDVElPTl9TSVpFKSB7XG4mIzQzO1x0XHRsZW4gPSBtaW5fdChzaXplX3QsIG1lcmdlZF9zaXplIC0gaSwgTkNJX1BST1BfRFVBTF9TRUNUSU9OX1NJWkUpO1xuJiM0MztcdFx0bWVtY3B5KHNldF9vcHRpb24uZGF0YSwgbWVyZ2VkICYjNDM7IGksIGxlbik7XG4mIzQzO1x0XHRyZXQgPSBuY2lfcHJvcF9jbWQoaW5mby1cdTAwM2VuZGV2LCBOQ0lfUFJPUF9EVUFMX09QVElPTixcbiYjNDM7XHRcdFx0XHQgICBsZW4gJiM0MzsgMiwgKF9fdTggKilcdTAwMjZzZXRfb3B0aW9uKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O2NhbGlicmF0aW9uIGRhdGEgdXBkYXRlIGVycm9yOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRyZXQpO1xuJiM0MztcdFx0XHQvKiBBYm9ydCBmb3JtOiBTVE9QX1VQREFURSB3aXRoIHRoZSBzdWItT0lEIGFsb25lLiAqL1xuJiM0MztcdFx0XHRzdWJfb2lkID0gTkNJX1BST1BfRFVBTF9TVUJfU1RPUF9VUERBVEU7XG4mIzQzO1x0XHRcdG5jaV9wcm9wX2NtZChpbmZvLVx1MDAzZW5kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLCAxLFxuJiM0MztcdFx0XHRcdCAgICAgXHUwMDI2c3ViX29pZCk7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c2V0X29wdGlvbi5pbmRleCYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBTVE9QX1VQREFURSB3aXRoIGNoZWNrc3VtICovXG4mIzQzO1x0c3RvcF9jbWRbMF0gPSBOQ0lfUFJPUF9EVUFMX1NVQl9TVE9QX1VQREFURTtcbiYjNDM7XHRwdXRfdW5hbGlnbmVkX2xlMTYoY2hlY2tzdW0sIFx1MDAyNnN0b3BfY21kWzFdKTtcbiYjNDM7XHRyZXQgPSBuY2lfcHJvcF9jbWQoaW5mby1cdTAwM2VuZGV2LCBOQ0lfUFJPUF9EVUFMX09QVElPTiwgMywgc3RvcF9jbWQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtVbmFibGUgdG8gc3RvcCBjYWxpYnJhdGlvbiBkYXRhIHVwZGF0ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRldl9kYmcoZGV2LCBcJiMzNDtjYWxpYnJhdGlvbiBkYXRhIHVwZGF0ZTogc3VjY2Vzc1xcblwmIzM0Oyk7XG4mIzQzO291dDpcbiYjNDM7XHRrdmZyZWUobWVyZ2VkKTtcbiYjNDM7b3V0X3N3OlxuJiM0MztcdHJlbGVhc2VfZmlybXdhcmUoc3dfZncpO1xuJiM0MztvdXRfaHc6XG4mIzQzO1x0cmVsZWFzZV9maXJtd2FyZShod19mdyk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmggYi9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oXG5pbmRleCBiYzRiY2UyYmJjNGQ5Li40NTNhMWM5ZDY1ZWIwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaFxuQEAgLTQwLDYgJiM0Mzs0MCw5IEBAIHN0cnVjdCBuY2lfcHJvcF9zdG9wX3JmcmVnX3JzcCB7XG4gXG4gI2RlZmluZSBOQ0lfUFJPUF9GV19DRkdcdFx0MHgyOFxuIFxuJiM0MzsvKiBTM05STjRWIHNpbmdsZS1ieXRlIEZXX0NGRyBwYXlsb2FkOyAweDExIHNlbGVjdHMgdGhlIDE5LjIgTUh6IHJlZmVyZW5jZS4gKi9cbiYjNDM7I2RlZmluZSBOQ0lfUFJPUF9GV19DRkdfQ0xLX1NQRUVEXHQweDExXG4mIzQzO1xuIHN0cnVjdCBuY2lfcHJvcF9md19jZmdfY21kIHtcbiBcdF9fdTggY2xrX3R5cGU7XG4gXHRfX3U4IGNsa19zcGVlZDtcbkBAIC01MCw3ICYjNDM7NTMsMjUgQEAgc3RydWN0IG5jaV9wcm9wX2Z3X2NmZ19yc3Age1xuIFx0X191OCBzdGF0dXM7XG4gfTtcbiBcbi1leHRlcm4gY29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzRdO1xuJiM0MzsjZGVmaW5lIE5DSV9QUk9QX0RVQUxfT1BUSU9OXHRcdDB4MmFcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTkNJX1BST1BfRFVBTF9TVUJfR0VUX1ZFUlx0MHgwMFxuJiM0MzsjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU1VCX1NUQVJUX1VQREFURVx0MHgwMVxuJiM0MzsjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU1VCX1NFVF9PUFRJT05cdDB4MDJcbiYjNDM7I2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NVQl9TVE9QX1VQREFURVx0MHgwM1xuJiM0MztcbiYjNDM7I2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRVx0MjUyXG4mIzQzO1xuJiM0MztzdHJ1Y3QgbmNpX3Byb3BfZHVhbF9zZXRfb3B0aW9uX2NtZCB7XG4mIzQzO1x0X191OCBzdWJfb2lkO1xuJiM0MztcdF9fdTggaW5kZXg7XG4mIzQzO1x0X191OCBkYXRhW05DSV9QUk9QX0RVQUxfU0VDVElPTl9TSVpFXTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNV07XG4gaW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZShzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLCBjb25zdCBjaGFyICpmd19uYW1lKTtcbiYjNDM7aW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdFx0ICBjb25zdCBjaGFyICpod19uYW1lLCBjb25zdCBjaGFyICpzd19uYW1lKTtcbiYjNDM7aW50IHMzZndybjVfbmNpX2Nsa19jZmcoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbyk7XG4gXG4gI2VuZGlmIC8qIF9fTE9DQUxfUzNGV1JONV9OQ0lfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L3MzZndybjUuaCBiL2RyaXZlcnMvbmZjL3MzZndybjUvczNmd3JuNS5oXG5pbmRleCAyYjQ5MjIzNjA5MGI4Li42M2Y2NzlmMTcxNjY2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS9zM2Z3cm41LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmZjL3MzZndybjUvczNmd3JuNS5oXG5AQCAtMjEsNiAmIzQzOzIxLDEzIEBAIGVudW0gczNmd3JuNV9tb2RlIHtcbiBcdFMzRldSTjVfTU9ERV9GVyxcbiB9O1xuIFxuJiM0MztlbnVtIHMzZndybjVfdmFyaWFudCB7XG4mIzQzO1x0LyogUzNGV1JONSAvIFMzRldSTjgyOiBmaXJtd2FyZSBpcyBkb3dubG9hZGVkIGJ5IHRoaXMgZHJpdmVyICovXG4mIzQzO1x0UzNGV1JONV9WQVJJQU5UX0ZXREwsXG4mIzQzO1x0LyogUzNOUk40Vjogbm8gZmlybXdhcmUgZG93bmxvYWQ7IEZXX0NGRyAmIzQzOyBEVUFMX09QVElPTiBicmluZy11cCAqL1xuJiM0MztcdFMzRldSTjVfVkFSSUFOVF9TM05STjRWLFxuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3QgczNmd3JuNV9waHlfb3BzIHtcbiBcdHZvaWQgKCpzZXRfd2FrZSkodm9pZCAqaWQsIGJvb2wgc2xlZXApO1xuIFx0dm9pZCAoKnNldF9tb2RlKSh2b2lkICppZCwgZW51bSBzM2Z3cm41X21vZGUpO1xuQEAgLTM2LDYgJiM0Mzs0MywxMSBAQCBzdHJ1Y3QgczNmd3JuNV9pbmZvIHtcbiBcdGNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHM7XG4gXG4gXHRzdHJ1Y3QgczNmd3JuNV9md19pbmZvIGZ3X2luZm87XG4mIzQzO1x0ZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudDtcbiYjNDM7XG4mIzQzO1x0LyogTGFzdCBEVUFMX09QVElPTiByZXNwb25zZSBwYXlsb2FkIChHRVRfVkVSIGNhcnJpZXMgdmVyc2lvbnMpLiAqL1xuJiM0MztcdHU4IGR1YWxfcnNwWzMyXTtcbiYjNDM7XHR1OCBkdWFsX3JzcF9sZW47XG4gXG4gXHRzdHJ1Y3QgbXV0ZXggbXV0ZXg7XG4gfTtcbkBAIC03OCw3ICYjNDM7OTAsNyBAQCBzdGF0aWMgaW5saW5lIGludCBzM2Z3cm41X3dyaXRlKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sIHN0cnVjdCBza19idWZmICpza2IpXG4gfVxuIFxuIGludCBzM2Z3cm41X3Byb2JlKHN0cnVjdCBuY2lfZGV2ICoqbmRldiwgdm9pZCAqcGh5X2lkLCBzdHJ1Y3QgZGV2aWNlICpwZGV2LFxuLVx0Y29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcyk7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcywgZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudCk7XG4gdm9pZCBzM2Z3cm41X3JlbW92ZShzdHJ1Y3QgbmNpX2RldiAqbmRldik7XG4gXG4gaW50IHMzZndybjVfcmVjdl9mcmFtZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L3VhcnQuYyBiL2RyaXZlcnMvbmZjL3MzZndybjUvdWFydC5jXG5pbmRleCA4ZjE0MmEyNTUxMDE2Li43NTM5N2MzZGJjNThiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS91YXJ0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmZjL3MzZndybjUvdWFydC5jXG5AQCAtMTM2LDcgJiM0MzsxMzYsNyBAQCBzdGF0aWMgaW50IHMzZndybjgyX3VhcnRfcHJvYmUoc3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldilcbiBcdH1cbiBcbiBcdHJldCA9IHMzZndybjVfcHJvYmUoXHUwMDI2cGh5LVx1MDAzZWNvbW1vbi5uZGV2LCBwaHksIFx1MDAyNnBoeS1cdTAwM2VzZXJfZGV2LVx1MDAzZWRldixcbi1cdFx0XHQgICAgXHUwMDI2dWFydF9waHlfb3BzKTtcbiYjNDM7XHRcdFx0ICAgIFx1MDAyNnVhcnRfcGh5X29wcywgUzNGV1JONV9WQVJJQU5UX0ZXREwpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfc2VyZGV2O1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIyOjM1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkNfTkNJJiMzNDssCiAgICAmIzM0O05GQ19TM0ZXUk41X0kyQyYjMzQ7LAogICAgJiMzNDtORkNfUzNGV1JOODJfVUFSVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3MzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsJiMzNDssCiAgICAmIzM0O3MzZndybjVfbmNpX2Nsa19jZmcmIzM0OywKICAgICYjMzQ7czNmd3JuNV9uY2lfZHVhbF9yc3AmIzM0OywKICAgICYjMzQ7czNmd3JuNV9uY2lfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBzM25ybjR2IHZhcmlhbnQgdG8gdGhlIHMzZndybjUgTkZDIGRyaXZlci4gSXQgaW50cm9kdWNlcyBuZXcgTkNJIHByb3ByaWV0YXJ5IGNvbW1hbmRzIGFuZCByZXNwb25zZXMsIGFuZCBhIG5ldyBSRiBjb25maWd1cmF0aW9uIHJvdXRpbmUuIFRoZSBkcml2ZXIgaXMgcmVhY2hhYmxlIHZpYSB0aGUgTkNJIGludGVyZmFjZSBhbmQgSTJDL1VBUlQgYnVzZXMsIHdoaWNoIGNhbiBiZSBmdXp6ZWQgdXNpbmcgdmlydHVhbCBkZXZpY2VzIG9yIHN5emthbGxlciYjMzk7cyBOQ0kgc3VwcG9ydC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDdiNDAyMGFhZTA1Mjc2ZDRhNDdjM2ZiYWQ3MTUzZDdkYTMyZWZiOTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAyMjozNToyNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3NhbXN1bmcsczNmd3JuNS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9uZmMvc2Ftc3VuZyxzM2Z3cm41LnlhbWwKaW5kZXggMTJiYWVlNDU3NTJjNy4uNDBhNjk0NjY4MDJiYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9uZmMvc2Ftc3VuZyxzM2Z3cm41LnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9uZmMvc2Ftc3VuZyxzM2Z3cm41LnlhbWwKQEAgLTE0LDYgJiM0MzsxNCw3IEBAIHByb3BlcnRpZXM6CiAgICAgZW51bToKICAgICAgIC0gc2Ftc3VuZyxzM2Z3cm41LWkyYwogICAgICAgLSBzYW1zdW5nLHMzZndybjgyCiYjNDM7ICAgICAgLSBzYW1zdW5nLHMzbnJuNHYKIAogICBlbi1ncGlvczoKICAgICBtYXhJdGVtczogMQpAQCAtMjksNiAmIzQzOzMwLDkgQEAgcHJvcGVydGllczoKICAgY2xvY2tzOgogICAgIG1heEl0ZW1zOiAxCiAKJiM0MzsgIHB2ZGQtc3VwcGx5OgomIzQzOyAgICBkZXNjcmlwdGlvbjogUFZERCBwb3dlciBzdXBwbHkKJiM0MzsKICAgd2FrZS1ncGlvczoKICAgICBtYXhJdGVtczogMQogICAgIGRlc2NyaXB0aW9uOgpAQCAtNTgsMTIgJiM0Mzs2MiwyNSBAQCBhbGxPZjoKICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgIGNvbXBhdGlibGU6CiAgICAgICAgICAgY29udGFpbnM6Ci0gICAgICAgICAgICBjb25zdDogc2Ftc3VuZyxzM2Z3cm41LWkyYwomIzQzOyAgICAgICAgICAgIGVudW06CiYjNDM7ICAgICAgICAgICAgICAtIHNhbXN1bmcsczNmd3JuNS1pMmMKJiM0MzsgICAgICAgICAgICAgIC0gc2Ftc3VuZyxzM25ybjR2CiAgICAgdGhlbjoKICAgICAgIHJlcXVpcmVkOgogICAgICAgICAtIGludGVycnVwdHMKICAgICAgICAgLSByZWcKIAomIzQzOyAgIyBEZXBsb3llZCBEVHMgZm9yIHRoZSBvbGRlciBwYXJ0cyBuZXZlciBkZXNjcmliZWQgYSBzdXBwbHksIHNvIFBWREQgaXMKJiM0MzsgICMgb25seSByZXF1aXJlZCBmb3IgdGhlIG5ldyBkZXZpY2UuCiYjNDM7ICAtIGlmOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgICAgICBjb250YWluczoKJiM0MzsgICAgICAgICAgICBjb25zdDogc2Ftc3VuZyxzM25ybjR2CiYjNDM7ICAgIHRoZW46CiYjNDM7ICAgICAgcmVxdWlyZWQ6CiYjNDM7ICAgICAgICAtIHB2ZGQtc3VwcGx5CiYjNDM7CiBleGFtcGxlczoKICAgLSB8CiAgICAgI2luY2x1ZGUgJmx0O2R0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oJmd0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21pbG9zLWZhaXJwaG9uZS1mcDYuZHRzIGIvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21pbG9zLWZhaXJwaG9uZS1mcDYuZHRzCmluZGV4IGViZGNhMGUyZDJmM2EuLmJkYmE4NDgyNzVkYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9taWxvcy1mYWlycGhvbmUtZnA2LmR0cwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbWlsb3MtZmFpcnBob25lLWZwNi5kdHMKQEAgLTYwMSw5ICYjNDM7NjAxLDIyIEBAICZhbXA7Z2NjIHsKIH07CiAKICZhbXA7aTJjMSB7Ci0JLyogU2Ftc3VuZyBORkMgQCAweDI3ICovCi0KIAlzdGF0dXMgPSAmIzM0O29rYXkmIzM0OzsKJiM0MzsKJiM0MzsJbmZjQDI3IHsKJiM0MzsJCWNvbXBhdGlibGUgPSAmIzM0O3NhbXN1bmcsczNucm40diYjMzQ7OwomIzQzOwkJcmVnID0gJmx0OzB4MjcmZ3Q7OwomIzQzOwomIzQzOwkJaW50ZXJydXB0cy1leHRlbmRlZCA9ICZsdDsmYW1wO3RsbW0gMzEgSVJRX1RZUEVfRURHRV9SSVNJTkcmZ3Q7OwomIzQzOwkJZW4tZ3Bpb3MgPSAmbHQ7JmFtcDt0bG1tIDU2IEdQSU9fQUNUSVZFX0hJR0gmZ3Q7OwomIzQzOwkJd2FrZS1ncGlvcyA9ICZsdDsmYW1wO3RsbW0gNyBHUElPX0FDVElWRV9ISUdIJmd0OzsKJiM0MzsJCWNsb2NrcyA9ICZsdDsmYW1wO3JwbWhjYyBSUE1IX0xOX0JCX0NMSzImZ3Q7OwomIzQzOwomIzQzOwkJcHZkZC1zdXBwbHkgPSAmbHQ7JmFtcDt2cmVnX2wyMGImZ3Q7OwomIzQzOwomIzQzOwkJcGluY3RybC0wID0gJmx0OyZhbXA7bmZjX2RlZmF1bHQmZ3Q7OwomIzQzOwkJcGluY3RybC1uYW1lcyA9ICYjMzQ7ZGVmYXVsdCYjMzQ7OwomIzQzOwl9OwogfTsKIAogJmFtcDtpMmMzIHsKQEAgLTgyNSw2ICYjNDM7ODM4LDIyIEBAICZhbXA7dGxtbSB7CiAJCQkgICAgICAgJmx0OzEzIDEmZ3Q7LCAvKiBOQyAqLwogCQkJICAgICAgICZsdDs2MyAyJmd0OzsgLyogV0xBTiBVQVJUICovCiAKJiM0MzsJbmZjX2RlZmF1bHQ6IG5mYy1kZWZhdWx0LXN0YXRlIHsKJiM0MzsJCWlycS1waW5zIHsKJiM0MzsJCQlwaW5zID0gJiMzNDtncGlvMzEmIzM0OzsKJiM0MzsJCQlmdW5jdGlvbiA9ICYjMzQ7Z3BpbyYjMzQ7OwomIzQzOwkJCWRyaXZlLXN0cmVuZ3RoID0gJmx0OzImZ3Q7OwomIzQzOwkJCWJpYXMtZGlzYWJsZTsKJiM0MzsJCX07CiYjNDM7CiYjNDM7CQlwZC1waW5zIHsKJiM0MzsJCQlwaW5zID0gJiMzNDtncGlvNTYmIzM0OzsKJiM0MzsJCQlmdW5jdGlvbiA9ICYjMzQ7Z3BpbyYjMzQ7OwomIzQzOwkJCWRyaXZlLXN0cmVuZ3RoID0gJmx0OzImZ3Q7OwomIzQzOwkJCWJpYXMtcHVsbC11cDsKJiM0MzsJCX07CiYjNDM7CX07CiYjNDM7CiAJc2RjMl9jYXJkX2RldF9uOiBzZGMyLWNhcmQtZGV0LXN0YXRlIHsKIAkJcGlucyA9ICYjMzQ7Z3BpbzY1JiMzNDs7CiAJCWZ1bmN0aW9uID0gJiMzNDtncGlvJiMzNDs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYyBiL2RyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jCmluZGV4IGFmMGZhOGJkOTcwYjQuLjU2MzQ3MGNiOTI4ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jCkBAIC0yMCw2ICYjNDM7MjAsOSBAQAogCQkJCU5GQ19QUk9UT19JU08xNDQ0M19CX01BU0sgfCBcCiAJCQkJTkZDX1BST1RPX0lTTzE1NjkzX01BU0spCiAKJiM0MzsjZGVmaW5lIFMzTlJONFZfSFdSRUdfTkFNRQkmIzM0O3NhbXN1bmcvczNucm40di9od3JlZy5iaW4mIzM0OwomIzQzOyNkZWZpbmUgUzNOUk40Vl9TV1JFR19OQU1FCSYjMzQ7c2Ftc3VuZy9zM25ybjR2L3N3cmVnLmJpbiYjMzQ7CiYjNDM7CiBzdGF0aWMgaW50IHMzZndybjVfZmlybXdhcmVfaW5pdChzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvKQogewogCXN0cnVjdCBzM2Z3cm41X2Z3X2luZm8gKmZ3X2luZm8gPSAmYW1wO2luZm8tJmd0O2Z3X2luZm87CkBAIC03NCw2ICYjNDM7NzcsMjIgQEAgc3RhdGljIGludCBzM2Z3cm41X2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvKQogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgaW50IHMzZndybjVfbmNpX2luaXQoc3RydWN0IG5jaV9kZXYgKm5kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKGluZm8tJmd0O3ZhcmlhbnQgPT0gUzNGV1JONV9WQVJJQU5UX1MzTlJONFYpIHsKJiM0MzsJCXJldCA9IHMzZndybjVfbmNpX2Nsa19jZmcoaW5mbyk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlkZXZfZXJyKCZhbXA7bmRldi0mZ3Q7bmZjX2Rldi0mZ3Q7ZGV2LAomIzQzOwkJCQkmIzM0O2ZhaWxlZCB0byBjb25maWd1cmUgdGhlIHJlZmVyZW5jZSBjbG9jazogJWRcbiYjMzQ7LAomIzQzOwkJCQlyZXQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBzM2Z3cm41X25jaV9vcGVuKHN0cnVjdCBuY2lfZGV2ICpuZGV2KQogewogCXN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8gPSBuY2lfZ2V0X2RydmRhdGEobmRldik7CkBAIC0xMjcsNiAmIzQzOzE0NiwxNSBAQCBzdGF0aWMgaW50IHMzZndybjVfbmNpX3Bvc3Rfc2V0dXAoc3RydWN0IG5jaV9kZXYgKm5kZXYpCiAJc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbyA9IG5jaV9nZXRfZHJ2ZGF0YShuZGV2KTsKIAlpbnQgcmV0OwogCiYjNDM7CWlmIChpbmZvLSZndDt2YXJpYW50ID09IFMzRldSTjVfVkFSSUFOVF9TM05STjRWKSB7CiYjNDM7CQlyZXQgPSBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbChpbmZvLCBTM05STjRWX0hXUkVHX05BTUUsCiYjNDM7CQkJCQkJICAgIFMzTlJONFZfU1dSRUdfTkFNRSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlkZXZfd2FybigmYW1wO25kZXYtJmd0O25mY19kZXYtJmd0O2RldiwKJiM0MzsJCQkJICYjMzQ7UkYgY2FsaWJyYXRpb24gZGF0YSB1cGRhdGUgZmFpbGVkOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwogCWlmIChzM2Z3cm41X2Zpcm13YXJlX2luaXQoaW5mbykpIHsKIAkJLy9za2lwIGJvb3Rsb2FkZXIgbW9kZQogCQlyZXR1cm4gMDsKQEAgLTE0OSw2ICYjNDM7MTc3LDcgQEAgc3RhdGljIGludCBzM2Z3cm41X25jaV9wb3N0X3NldHVwKHN0cnVjdCBuY2lfZGV2ICpuZGV2KQogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5jaV9vcHMgczNmd3JuNV9uY2lfb3BzID0gewomIzQzOwkuaW5pdCA9IHMzZndybjVfbmNpX2luaXQsCiAJLm9wZW4gPSBzM2Z3cm41X25jaV9vcGVuLAogCS5jbG9zZSA9IHMzZndybjVfbmNpX2Nsb3NlLAogCS5zZW5kID0gczNmd3JuNV9uY2lfc2VuZCwKQEAgLTE1OCw3ICYjNDM7MTg3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuY2lfb3BzIHMzZndybjVfbmNpX29wcyA9IHsKIH07CiAKIGludCBzM2Z3cm41X3Byb2JlKHN0cnVjdCBuY2lfZGV2ICoqbmRldiwgdm9pZCAqcGh5X2lkLCBzdHJ1Y3QgZGV2aWNlICpwZGV2LAotCWNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHMpCiYjNDM7CWNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHMsIGVudW0gczNmd3JuNV92YXJpYW50IHZhcmlhbnQpCiB7CiAJc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbzsKIAlpbnQgcmV0OwpAQCAtMTcwLDYgJiM0MzsxOTksNyBAQCBpbnQgczNmd3JuNV9wcm9iZShzdHJ1Y3QgbmNpX2RldiAqKm5kZXYsIHZvaWQgKnBoeV9pZCwgc3RydWN0IGRldmljZSAqcGRldiwKIAlpbmZvLSZndDtwaHlfaWQgPSBwaHlfaWQ7CiAJaW5mby0mZ3Q7cGRldiA9IHBkZXY7CiAJaW5mby0mZ3Q7cGh5X29wcyA9IHBoeV9vcHM7CiYjNDM7CWluZm8tJmd0O3ZhcmlhbnQgPSB2YXJpYW50OwogCW11dGV4X2luaXQoJmFtcDtpbmZvLSZndDttdXRleCk7CiAKIAlzM2Z3cm41X3NldF9tb2RlKGluZm8sIFMzRldSTjVfTU9ERV9DT0xEKTsKQEAgLTIyNSwzICYjNDM7MjU1LDUgQEAgRVhQT1JUX1NZTUJPTChzM2Z3cm41X3JlY3ZfZnJhbWUpOwogTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CiBNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtTYW1zdW5nIFMzRldSTjUgTkZDIGRyaXZlciYjMzQ7KTsKIE1PRFVMRV9BVVRIT1IoJiMzNDtSb2JlcnQgQmFsZHlnYSAmbHQ7ci5iYWxkeWdhQHNhbXN1bmcuY29tJmd0OyYjMzQ7KTsKJiM0MztNT0RVTEVfRklSTVdBUkUoUzNOUk40Vl9IV1JFR19OQU1FKTsKJiM0MztNT0RVTEVfRklSTVdBUkUoUzNOUk40Vl9TV1JFR19OQU1FKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvaTJjLmMgYi9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jCmluZGV4IDRiYTc2MjYxMTcxMTguLjg4NDQyMGFjODNiNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvaTJjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZmMvczNmd3JuNS9pMmMuYwpAQCAtMTEsMTMgJiM0MzsxMSwxMiBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2dwaW8vY29uc3VtZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaCZndDsKIAogI2luY2x1ZGUgJmx0O25ldC9uZmMvbmZjLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7cGh5X2NvbW1vbi5oJiMzNDsKIAotI2RlZmluZSBTM0ZXUk41X0kyQ19EUklWRVJfTkFNRSAmIzM0O3MzZndybjVfaTJjJiMzNDsKLQogc3RydWN0IHMzZndybjVfaTJjX3BoeSB7CiAJc3RydWN0IHBoeV9jb21tb24gY29tbW9uOwogCXN0cnVjdCBpMmNfY2xpZW50ICppMmNfZGV2OwpAQCAtMTQ2LDYgJiM0MzsxNDUsNyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgczNmd3JuNV9pMmNfaXJxX3RocmVhZF9mbihpbnQgaXJxLCB2b2lkICpwaHlfaWQpCiAKIHN0YXRpYyBpbnQgczNmd3JuNV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKJiM0MzsJZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudDsKIAlzdHJ1Y3QgczNmd3JuNV9pMmNfcGh5ICpwaHk7CiAJaW50IHJldDsKIApAQCAtMTYwLDYgJiM0MzsxNjAsMTEgQEAgc3RhdGljIGludCBzM2Z3cm41X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogCXBoeS0mZ3Q7aTJjX2RldiA9IGNsaWVudDsKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBwaHkpOwogCiYjNDM7CXJldCA9IGRldm1fcmVndWxhdG9yX2dldF9lbmFibGUoJmFtcDtjbGllbnQtJmd0O2RldiwgJiMzNDtwdmRkJiMzNDspOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoJmFtcDtjbGllbnQtJmd0O2RldiwgcmV0LAomIzQzOwkJCQkgICAgICYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBwdmRkXG4mIzM0Oyk7CiYjNDM7CiAJcGh5LSZndDtjb21tb24uZ3Bpb19lbiA9IGRldm1fZ3Bpb2RfZ2V0KCZhbXA7Y2xpZW50LSZndDtkZXYsICYjMzQ7ZW4mIzM0OywgR1BJT0RfT1VUX0hJR0gpOwogCWlmIChJU19FUlIocGh5LSZndDtjb21tb24uZ3Bpb19lbikpCiAJCXJldHVybiBQVFJfRVJSKHBoeS0mZ3Q7Y29tbW9uLmdwaW9fZW4pOwpAQCAtMTc5LDE0ICYjNDM7MTg0LDE1IEBAIHN0YXRpYyBpbnQgczNmd3JuNV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIAkJcmV0dXJuIGRldl9lcnJfcHJvYmUoJmFtcDtjbGllbnQtJmd0O2RldiwgUFRSX0VSUihwaHktJmd0O2NsayksCiAJCQkJICAgICAmIzM0O2ZhaWxlZCB0byBnZXQgY2xvY2tcbiYjMzQ7KTsKIAomIzQzOwl2YXJpYW50ID0gKHVpbnRwdHJfdClpMmNfZ2V0X21hdGNoX2RhdGEoY2xpZW50KTsKIAlyZXQgPSBzM2Z3cm41X3Byb2JlKCZhbXA7cGh5LSZndDtjb21tb24ubmRldiwgcGh5LCAmYW1wO3BoeS0mZ3Q7aTJjX2Rldi0mZ3Q7ZGV2LAotCQkJICAgICZhbXA7aTJjX3BoeV9vcHMpOwomIzQzOwkJCSAgICAmYW1wO2kyY19waHlfb3BzLCB2YXJpYW50KTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAogCXJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoJmFtcDtjbGllbnQtJmd0O2RldiwgcGh5LSZndDtpMmNfZGV2LSZndDtpcnEsIE5VTEwsCiAJCXMzZndybjVfaTJjX2lycV90aHJlYWRfZm4sIElSUUZfT05FU0hPVCwKLQkJUzNGV1JONV9JMkNfRFJJVkVSX05BTUUsIHBoeSk7CiYjNDM7CQkmIzM0O3MzZndybjVfaTJjJiMzNDssIHBoeSk7CiAJaWYgKHJldCkKIAkJZ290byBzM2Z3cm41X3JlbW92ZTsKIApAQCAtMjA1LDIxICYjNDM7MjExLDI1IEBAIHN0YXRpYyB2b2lkIHMzZndybjVfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgczNmd3JuNV9pMmNfaWRfdGFibGVbXSA9IHsKLQl7IC5uYW1lID0gUzNGV1JONV9JMkNfRFJJVkVSX05BTUUgfSwKJiM0MzsJeyAubmFtZSA9ICYjMzQ7czNmd3JuNV9pMmMmIzM0OywgLmRyaXZlcl9kYXRhID0gUzNGV1JONV9WQVJJQU5UX0ZXREwgfSwKJiM0MzsJeyAubmFtZSA9ICYjMzQ7czNucm40diYjMzQ7LCAuZHJpdmVyX2RhdGEgPSBTM0ZXUk41X1ZBUklBTlRfUzNOUk40ViB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzM2Z3cm41X2kyY19pZF90YWJsZSk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX3MzZndybjVfaTJjX21hdGNoW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICYjMzQ7c2Ftc3VuZyxzM2Z3cm41LWkyYyYjMzQ7IH0sCiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O3NhbXN1bmcsczNmd3JuNS1pMmMmIzM0OywKJiM0MzsJICAuZGF0YSA9ICh2b2lkICopUzNGV1JONV9WQVJJQU5UX0ZXREwgfSwKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7c2Ftc3VuZyxzM25ybjR2JiMzNDssCiYjNDM7CSAgLmRhdGEgPSAodm9pZCAqKVMzRldSTjVfVkFSSUFOVF9TM05STjRWIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgb2ZfczNmd3JuNV9pMmNfbWF0Y2gpOwogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgczNmd3JuNV9pMmNfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gUzNGV1JONV9JMkNfRFJJVkVSX05BTUUsCi0JCS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihvZl9zM2Z3cm41X2kyY19tYXRjaCksCiYjNDM7CQkubmFtZSA9ICYjMzQ7czNmd3JuNV9pMmMmIzM0OywKJiM0MzsJCS5vZl9tYXRjaF90YWJsZSA9IG9mX3MzZndybjVfaTJjX21hdGNoLAogCX0sCiAJLnByb2JlID0gczNmd3JuNV9pMmNfcHJvYmUsCiAJLnJlbW92ZSA9IHMzZndybjVfaTJjX3JlbW92ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmMgYi9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jCmluZGV4IDVhOWRlMTFiYmVjZWEuLjM4MWFhN2JmMjlhMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuYwpAQCAtOCw2ICYjNDM7OCw5IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9jb21wbGV0aW9uLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZmlybXdhcmUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWlubWF4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdW5hbGlnbmVkLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7czNmd3JuNS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7bmNpLmgmIzM0OwpAQCAtMjAsNyAmIzQzOzIzLDI0IEBAIHN0YXRpYyBpbnQgczNmd3JuNV9uY2lfcHJvcF9yc3Aoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpCiAJcmV0dXJuIDA7CiB9CiAKLWNvbnN0IHN0cnVjdCBuY2lfZHJpdmVyX29wcyBzM2Z3cm41X25jaV9wcm9wX29wc1s0XSA9IHsKJiM0MzsvKgomIzQzOyAqIERVQUxfT1BUSU9OIHJlc3BvbnNlcyBhcmUgbm90IHVuaWZvcm06IEdFVF9WRVIgYW5zd2VycyB3aXRoIHRoZSBjaGlwJiMzOTtzCiYjNDM7ICogY2FsaWJyYXRpb24gdmVyc2lvbnMgaW5zdGVhZCBvZiBhIHN0YXR1cyBieXRlLCBzbyBzdGFzaCB0aGUgcGF5bG9hZCBmb3IKJiM0MzsgKiB0aGUgY2FsbGVyIGJlZm9yZSBjb21wbGV0aW5nIHRoZSByZXF1ZXN0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgczNmd3JuNV9uY2lfZHVhbF9yc3Aoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpOwomIzQzOwomIzQzOwlpbmZvLSZndDtkdWFsX3JzcF9sZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHNrYi0mZ3Q7bGVuLAomIzQzOwkJCQkgICBzaXplb2YoaW5mby0mZ3Q7ZHVhbF9yc3ApKTsKJiM0MzsJbWVtY3B5KGluZm8tJmd0O2R1YWxfcnNwLCBza2ItJmd0O2RhdGEsIGluZm8tJmd0O2R1YWxfcnNwX2xlbik7CiYjNDM7CiYjNDM7CW5jaV9yZXFfY29tcGxldGUobmRldiwgc2tiLSZndDtkYXRhWzBdKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBuY2lfZHJpdmVyX29wcyBzM2Z3cm41X25jaV9wcm9wX29wc1s1XSA9IHsKIAl7CiAJCS5vcGNvZGUgPSBuY2lfb3Bjb2RlX3BhY2soTkNJX0dJRF9QUk9QUklFVEFSWSwKIAkJCQlOQ0lfUFJPUF9TRVRfUkZSRUcpLApAQCAtNDEsNiAmIzQzOzYxLDExIEBAIGNvbnN0IHN0cnVjdCBuY2lfZHJpdmVyX29wcyBzM2Z3cm41X25jaV9wcm9wX29wc1s0XSA9IHsKIAkJCQlOQ0lfUFJPUF9GV19DRkcpLAogCQkucnNwID0gczNmd3JuNV9uY2lfcHJvcF9yc3AsCiAJfSwKJiM0MzsJewomIzQzOwkJLm9wY29kZSA9IG5jaV9vcGNvZGVfcGFjayhOQ0lfR0lEX1BST1BSSUVUQVJZLAomIzQzOwkJCQlOQ0lfUFJPUF9EVUFMX09QVElPTiksCiYjNDM7CQkucnNwID0gczNmd3JuNV9uY2lfZHVhbF9yc3AsCiYjNDM7CX0sCiB9OwogCiAjZGVmaW5lIFMzRldSTjVfUkZSRUdfU0VDVElPTl9TSVpFIDI1MgpAQCAtMTE3LDMgJiM0MzsxNDIsMTU0IEBAIGludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmUoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqZndfbmFtZSkKIAlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKIAlyZXR1cm4gcmV0OwogfQomIzQzOwomIzQzOy8qCiYjNDM7ICogVGhlIFMzTlJONFYgZXhwZWN0cyB0aGUgc2luZ2xlLWJ5dGUgRldfQ0ZHIGZvcm0gKGp1c3QgdGhlIGNsb2NrLXNwZWVkCiYjNDM7ICogc2VsZWN0b3IpLgomIzQzOyAqLwomIzQzO2ludCBzM2Z3cm41X25jaV9jbGtfY2ZnKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8pCiYjNDM7ewomIzQzOwl1OCBjbGtfc3BlZWQgPSBOQ0lfUFJPUF9GV19DRkdfQ0xLX1NQRUVEOwomIzQzOwomIzQzOwlyZXR1cm4gbmNpX3Byb3BfY21kKGluZm8tJmd0O25kZXYsIE5DSV9QUk9QX0ZXX0NGRywgMSwgJmFtcDtjbGtfc3BlZWQpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEFuIDgtYnl0ZSBjYWxpYnJhdGlvbiB2ZXJzaW9uOiA1IGJ5dGVzIG9mIGRhdGUgc3RhbXAgYW5kIGEgMy1ieXRlIENTQwomIzQzOyAqIGNvZGUsIGF0IGZpeGVkIG9mZnNldHMgYm90aCBpbiBhIGJsb2ImIzM5O3MgMTYtYnl0ZSB0YWlsIGFuZCBpbiBlYWNoIGhhbGYgb2YKJiM0MzsgKiB0aGUgR0VUX1ZFUiByZXNwb25zZSAoSFcgYXQgb2Zmc2V0IDAsIFNXIGF0IG9mZnNldCAxNSkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgczNmd3JuNV9uY2lfZHVhbF92ZXJzaW9uX2VxKGNvbnN0IHU4ICphLCBjb25zdCB1OCAqYikKJiM0Mzt7CiYjNDM7CXJldHVybiAhbWVtY21wKGEgJiM0MzsgNSwgYiAmIzQzOyA1LCA1KSAmYW1wOyZhbXA7ICFtZW1jbXAoYSAmIzQzOyAxMiwgYiAmIzQzOyAxMiwgMyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHMzZndybjVfbmNpX2R1YWxfY2FsX2N1cnJlbnQoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbywKJiM0MzsJCQkJCSBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmh3X2Z3LAomIzQzOwkJCQkJIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqc3dfZncpCiYjNDM7ewomIzQzOwlpZiAoaW5mby0mZ3Q7ZHVhbF9yc3BfbGVuICZsdDsgMzApCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmIChod19mdy0mZ3Q7c2l6ZSAmbHQ7IDE2IHx8IHN3X2Z3LSZndDtzaXplICZsdDsgMTYpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiBzM2Z3cm41X25jaV9kdWFsX3ZlcnNpb25fZXEoaW5mby0mZ3Q7ZHVhbF9yc3AsCiYjNDM7CQkJCQkgICBod19mdy0mZ3Q7ZGF0YSAmIzQzOyBod19mdy0mZ3Q7c2l6ZSAtIDE2KSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBzM2Z3cm41X25jaV9kdWFsX3ZlcnNpb25fZXEoaW5mby0mZ3Q7ZHVhbF9yc3AgJiM0MzsgMTUsCiYjNDM7CQkJCQkgICBzd19mdy0mZ3Q7ZGF0YSAmIzQzOyBzd19mdy0mZ3Q7c2l6ZSAtIDE2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBTM05STjRWIFJGIGNhbGlicmF0aW9uIGRhdGEgdXBkYXRlOiB0aGUgSFcgYW5kIFNXIGJsb2JzIG1lcmdlZCBpbnRvIG9uZQomIzQzOyAqIHN0cmVhbSAoSFcgZmlyc3QpLCBwdXNoZWQgYXMgU1RBUlRfVVBEQVRFLCBvbmUgU0VUX09QVElPTiBwZXIgMjUyLWJ5dGUKJiM0MzsgKiBzZWN0aW9uLCB0aGVuIFNUT1BfVVBEQVRFIGNhcnJ5aW5nIGEgMTYtYml0IGNoZWNrc3VtIChydW5uaW5nIHN1bSBvZiB0aGUKJiM0MzsgKiBtZXJnZWQgc3RyZWFtIGFzIDMyLWJpdCB3b3JkcykuCiYjNDM7ICovCiYjNDM7aW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sCiYjNDM7CQkJCSAgY29uc3QgY2hhciAqaHdfbmFtZSwgY29uc3QgY2hhciAqc3dfbmFtZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuY2lfcHJvcF9kdWFsX3NldF9vcHRpb25fY21kIHNldF9vcHRpb247CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7aW5mby0mZ3Q7bmRldi0mZ3Q7bmZjX2Rldi0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmh3X2Z3LCAqc3dfZnc7CiYjNDM7CXNpemVfdCBtZXJnZWRfc2l6ZSwgaSwgbGVuOwomIzQzOwl1OCAqbWVyZ2VkOwomIzQzOwl1OCBzdG9wX2NtZFszXTsKJiM0MzsJdTMyIGNoZWNrc3VtOwomIzQzOwl1OCBzdWJfb2lkOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBmaXJtd2FyZV9yZXF1ZXN0X25vd2FybigmYW1wO2h3X2Z3LCBod19uYW1lLCBkZXYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IGZpcm13YXJlX3JlcXVlc3Rfbm93YXJuKCZhbXA7c3dfZncsIHN3X25hbWUsIGRldik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBvdXRfaHc7CiYjNDM7CiYjNDM7CW1lcmdlZF9zaXplID0gaHdfZnctJmd0O3NpemUgJiM0Mzsgc3dfZnctJmd0O3NpemU7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBzdHJlYW0gaXMgY2hlY2tzdW1tZWQgYXMgMzItYml0IHdvcmRzIGFuZCBwdXNoZWQgaW4gYXQgbW9zdCAyNTYKJiM0MzsJICogc2VjdGlvbnMgKHRoZSBzZWN0aW9uIGluZGV4IGlzIGEgc2luZ2xlIGJ5dGUpOyByZWplY3QgYmxvYnMgdGhhdAomIzQzOwkgKiB3b3VsZCBzaWxlbnRseSBicmVhayBlaXRoZXIuCiYjNDM7CSAqLwomIzQzOwlpZiAoIW1lcmdlZF9zaXplIHx8IG1lcmdlZF9zaXplICUgNCB8fAomIzQzOwkgICAgbWVyZ2VkX3NpemUgJmd0OyAyNTYgKiBOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRSkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7aW52YWxpZCBjYWxpYnJhdGlvbiBkYXRhIHNpemU6ICV6dVxuJiMzNDssIG1lcmdlZF9zaXplKTsKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIG91dF9zdzsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBc2sgdGhlIGNoaXAgZm9yIGl0cyBjdXJyZW50IGNhbGlicmF0aW9uIHZlcnNpb25zIGFuZCBza2lwIHRoZQomIzQzOwkgKiB1cGxvYWQgd2hlbiBib3RoIGFscmVhZHkgbWF0Y2ggdGhlIGJsb2JzOyBhIG1pc21hdGNoIG9yIGFuCiYjNDM7CSAqIHVucGFyc2VhYmxlIGFuc3dlciBtZWFucyB0aGUgdXBsb2FkIHByb2NlZWRzLiBHRVRfVkVSIGFuc3dlcnMgd2l0aAomIzQzOwkgKiB2ZXJzaW9ucywgbm90IGEgc3RhdHVzIGJ5dGUsIHNvIG5jaV9wcm9wX2NtZCgpJiMzOTtzIHJldHVybiBjYXJyaWVzIG5vCiYjNDM7CSAqIG1lYW5pbmcgaGVyZS4KJiM0MzsJICovCiYjNDM7CXN1Yl9vaWQgPSBOQ0lfUFJPUF9EVUFMX1NVQl9HRVRfVkVSOwomIzQzOwlpbmZvLSZndDtkdWFsX3JzcF9sZW4gPSAwOwomIzQzOwluY2lfcHJvcF9jbWQoaW5mby0mZ3Q7bmRldiwgTkNJX1BST1BfRFVBTF9PUFRJT04sIDEsICZhbXA7c3ViX29pZCk7CiYjNDM7CWlmIChzM2Z3cm41X25jaV9kdWFsX2NhbF9jdXJyZW50KGluZm8sIGh3X2Z3LCBzd19mdykpIHsKJiM0MzsJCWRldl9kYmcoZGV2LCAmIzM0O2NhbGlicmF0aW9uIGRhdGEgYWxyZWFkeSBjdXJyZW50XG4mIzM0Oyk7CiYjNDM7CQlyZXQgPSAwOwomIzQzOwkJZ290byBvdXRfc3c7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWVyZ2VkID0ga3ZtYWxsb2MobWVyZ2VkX3NpemUsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIW1lcmdlZCkgewomIzQzOwkJcmV0ID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gb3V0X3N3OwomIzQzOwl9CiYjNDM7CW1lbWNweShtZXJnZWQsIGh3X2Z3LSZndDtkYXRhLCBod19mdy0mZ3Q7c2l6ZSk7CiYjNDM7CW1lbWNweShtZXJnZWQgJiM0MzsgaHdfZnctJmd0O3NpemUsIHN3X2Z3LSZndDtkYXRhLCBzd19mdy0mZ3Q7c2l6ZSk7CiYjNDM7CiYjNDM7CWNoZWNrc3VtID0gMDsKJiM0MzsJZm9yIChpID0gMDsgaSAmIzQzOyA0ICZsdDs9IG1lcmdlZF9zaXplOyBpICYjNDM7PSA0KQomIzQzOwkJY2hlY2tzdW0gJiM0Mzs9IGdldF91bmFsaWduZWRfbGUzMihtZXJnZWQgJiM0MzsgaSk7CiYjNDM7CiYjNDM7CS8qIFNUQVJUX1VQREFURSAqLwomIzQzOwlzdWJfb2lkID0gTkNJX1BST1BfRFVBTF9TVUJfU1RBUlRfVVBEQVRFOwomIzQzOwlyZXQgPSBuY2lfcHJvcF9jbWQoaW5mby0mZ3Q7bmRldiwgTkNJX1BST1BfRFVBTF9PUFRJT04sIDEsICZhbXA7c3ViX29pZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtVbmFibGUgdG8gc3RhcnQgY2FsaWJyYXRpb24gZGF0YSB1cGRhdGVcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFNFVF9PUFRJT04gcGVyIHNlY3Rpb24gKi8KJiM0MzsJc2V0X29wdGlvbi5zdWJfb2lkID0gTkNJX1BST1BfRFVBTF9TVUJfU0VUX09QVElPTjsKJiM0MzsJc2V0X29wdGlvbi5pbmRleCA9IDA7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBtZXJnZWRfc2l6ZTsgaSAmIzQzOz0gTkNJX1BST1BfRFVBTF9TRUNUSU9OX1NJWkUpIHsKJiM0MzsJCWxlbiA9IG1pbl90KHNpemVfdCwgbWVyZ2VkX3NpemUgLSBpLCBOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRSk7CiYjNDM7CQltZW1jcHkoc2V0X29wdGlvbi5kYXRhLCBtZXJnZWQgJiM0MzsgaSwgbGVuKTsKJiM0MzsJCXJldCA9IG5jaV9wcm9wX2NtZChpbmZvLSZndDtuZGV2LCBOQ0lfUFJPUF9EVUFMX09QVElPTiwKJiM0MzsJCQkJICAgbGVuICYjNDM7IDIsIChfX3U4ICopJmFtcDtzZXRfb3B0aW9uKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQkJZGV2X2VycihkZXYsICYjMzQ7Y2FsaWJyYXRpb24gZGF0YSB1cGRhdGUgZXJyb3I6ICVkXG4mIzM0OywKJiM0MzsJCQkJcmV0KTsKJiM0MzsJCQkvKiBBYm9ydCBmb3JtOiBTVE9QX1VQREFURSB3aXRoIHRoZSBzdWItT0lEIGFsb25lLiAqLwomIzQzOwkJCXN1Yl9vaWQgPSBOQ0lfUFJPUF9EVUFMX1NVQl9TVE9QX1VQREFURTsKJiM0MzsJCQluY2lfcHJvcF9jbWQoaW5mby0mZ3Q7bmRldiwgTkNJX1BST1BfRFVBTF9PUFRJT04sIDEsCiYjNDM7CQkJCSAgICAgJmFtcDtzdWJfb2lkKTsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJCXNldF9vcHRpb24uaW5kZXgmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFNUT1BfVVBEQVRFIHdpdGggY2hlY2tzdW0gKi8KJiM0MzsJc3RvcF9jbWRbMF0gPSBOQ0lfUFJPUF9EVUFMX1NVQl9TVE9QX1VQREFURTsKJiM0MzsJcHV0X3VuYWxpZ25lZF9sZTE2KGNoZWNrc3VtLCAmYW1wO3N0b3BfY21kWzFdKTsKJiM0MzsJcmV0ID0gbmNpX3Byb3BfY21kKGluZm8tJmd0O25kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLCAzLCBzdG9wX2NtZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtVbmFibGUgdG8gc3RvcCBjYWxpYnJhdGlvbiBkYXRhIHVwZGF0ZVxuJiMzNDspOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZGV2X2RiZyhkZXYsICYjMzQ7Y2FsaWJyYXRpb24gZGF0YSB1cGRhdGU6IHN1Y2Nlc3NcbiYjMzQ7KTsKJiM0MztvdXQ6CiYjNDM7CWt2ZnJlZShtZXJnZWQpOwomIzQzO291dF9zdzoKJiM0MzsJcmVsZWFzZV9maXJtd2FyZShzd19mdyk7CiYjNDM7b3V0X2h3OgomIzQzOwlyZWxlYXNlX2Zpcm13YXJlKGh3X2Z3KTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oIGIvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaAppbmRleCBiYzRiY2UyYmJjNGQ5Li40NTNhMWM5ZDY1ZWIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmgKQEAgLTQwLDYgJiM0Mzs0MCw5IEBAIHN0cnVjdCBuY2lfcHJvcF9zdG9wX3JmcmVnX3JzcCB7CiAKICNkZWZpbmUgTkNJX1BST1BfRldfQ0ZHCQkweDI4CiAKJiM0MzsvKiBTM05STjRWIHNpbmdsZS1ieXRlIEZXX0NGRyBwYXlsb2FkOyAweDExIHNlbGVjdHMgdGhlIDE5LjIgTUh6IHJlZmVyZW5jZS4gKi8KJiM0MzsjZGVmaW5lIE5DSV9QUk9QX0ZXX0NGR19DTEtfU1BFRUQJMHgxMQomIzQzOwogc3RydWN0IG5jaV9wcm9wX2Z3X2NmZ19jbWQgewogCV9fdTggY2xrX3R5cGU7CiAJX191OCBjbGtfc3BlZWQ7CkBAIC01MCw3ICYjNDM7NTMsMjUgQEAgc3RydWN0IG5jaV9wcm9wX2Z3X2NmZ19yc3AgewogCV9fdTggc3RhdHVzOwogfTsKIAotZXh0ZXJuIGNvbnN0IHN0cnVjdCBuY2lfZHJpdmVyX29wcyBzM2Z3cm41X25jaV9wcm9wX29wc1s0XTsKJiM0MzsjZGVmaW5lIE5DSV9QUk9QX0RVQUxfT1BUSU9OCQkweDJhCiYjNDM7CiYjNDM7I2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NVQl9HRVRfVkVSCTB4MDAKJiM0MzsjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU1VCX1NUQVJUX1VQREFURQkweDAxCiYjNDM7I2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NVQl9TRVRfT1BUSU9OCTB4MDIKJiM0MzsjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU1VCX1NUT1BfVVBEQVRFCTB4MDMKJiM0MzsKJiM0MzsjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU0VDVElPTl9TSVpFCTI1MgomIzQzOwomIzQzO3N0cnVjdCBuY2lfcHJvcF9kdWFsX3NldF9vcHRpb25fY21kIHsKJiM0MzsJX191OCBzdWJfb2lkOwomIzQzOwlfX3U4IGluZGV4OwomIzQzOwlfX3U4IGRhdGFbTkNJX1BST1BfRFVBTF9TRUNUSU9OX1NJWkVdOwomIzQzO307CiYjNDM7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBuY2lfZHJpdmVyX29wcyBzM2Z3cm41X25jaV9wcm9wX29wc1s1XTsKIGludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmUoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqZndfbmFtZSk7CiYjNDM7aW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sCiYjNDM7CQkJCSAgY29uc3QgY2hhciAqaHdfbmFtZSwgY29uc3QgY2hhciAqc3dfbmFtZSk7CiYjNDM7aW50IHMzZndybjVfbmNpX2Nsa19jZmcoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbyk7CiAKICNlbmRpZiAvKiBfX0xPQ0FMX1MzRldSTjVfTkNJX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L3MzZndybjUuaCBiL2RyaXZlcnMvbmZjL3MzZndybjUvczNmd3JuNS5oCmluZGV4IDJiNDkyMjM2MDkwYjguLjYzZjY3OWYxNzE2NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvczNmd3JuNS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmZjL3MzZndybjUvczNmd3JuNS5oCkBAIC0yMSw2ICYjNDM7MjEsMTMgQEAgZW51bSBzM2Z3cm41X21vZGUgewogCVMzRldSTjVfTU9ERV9GVywKIH07CiAKJiM0MztlbnVtIHMzZndybjVfdmFyaWFudCB7CiYjNDM7CS8qIFMzRldSTjUgLyBTM0ZXUk44MjogZmlybXdhcmUgaXMgZG93bmxvYWRlZCBieSB0aGlzIGRyaXZlciAqLwomIzQzOwlTM0ZXUk41X1ZBUklBTlRfRldETCwKJiM0MzsJLyogUzNOUk40Vjogbm8gZmlybXdhcmUgZG93bmxvYWQ7IEZXX0NGRyAmIzQzOyBEVUFMX09QVElPTiBicmluZy11cCAqLwomIzQzOwlTM0ZXUk41X1ZBUklBTlRfUzNOUk40ViwKJiM0Mzt9OwomIzQzOwogc3RydWN0IHMzZndybjVfcGh5X29wcyB7CiAJdm9pZCAoKnNldF93YWtlKSh2b2lkICppZCwgYm9vbCBzbGVlcCk7CiAJdm9pZCAoKnNldF9tb2RlKSh2b2lkICppZCwgZW51bSBzM2Z3cm41X21vZGUpOwpAQCAtMzYsNiAmIzQzOzQzLDExIEBAIHN0cnVjdCBzM2Z3cm41X2luZm8gewogCWNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHM7CiAKIAlzdHJ1Y3QgczNmd3JuNV9md19pbmZvIGZ3X2luZm87CiYjNDM7CWVudW0gczNmd3JuNV92YXJpYW50IHZhcmlhbnQ7CiYjNDM7CiYjNDM7CS8qIExhc3QgRFVBTF9PUFRJT04gcmVzcG9uc2UgcGF5bG9hZCAoR0VUX1ZFUiBjYXJyaWVzIHZlcnNpb25zKS4gKi8KJiM0MzsJdTggZHVhbF9yc3BbMzJdOwomIzQzOwl1OCBkdWFsX3JzcF9sZW47CiAKIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CiB9OwpAQCAtNzgsNyAmIzQzOzkwLDcgQEAgc3RhdGljIGlubGluZSBpbnQgczNmd3JuNV93cml0ZShzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogfQogCiBpbnQgczNmd3JuNV9wcm9iZShzdHJ1Y3QgbmNpX2RldiAqKm5kZXYsIHZvaWQgKnBoeV9pZCwgc3RydWN0IGRldmljZSAqcGRldiwKLQljb25zdCBzdHJ1Y3QgczNmd3JuNV9waHlfb3BzICpwaHlfb3BzKTsKJiM0MzsJY29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcywgZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudCk7CiB2b2lkIHMzZndybjVfcmVtb3ZlKHN0cnVjdCBuY2lfZGV2ICpuZGV2KTsKIAogaW50IHMzZndybjVfcmVjdl9mcmFtZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvdWFydC5jIGIvZHJpdmVycy9uZmMvczNmd3JuNS91YXJ0LmMKaW5kZXggOGYxNDJhMjU1MTAxNi4uNzUzOTdjM2RiYzU4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS91YXJ0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZmMvczNmd3JuNS91YXJ0LmMKQEAgLTEzNiw3ICYjNDM7MTM2LDcgQEAgc3RhdGljIGludCBzM2Z3cm44Ml91YXJ0X3Byb2JlKHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXYpCiAJfQogCiAJcmV0ID0gczNmd3JuNV9wcm9iZSgmYW1wO3BoeS0mZ3Q7Y29tbW9uLm5kZXYsIHBoeSwgJmFtcDtwaHktJmd0O3Nlcl9kZXYtJmd0O2RldiwKLQkJCSAgICAmYW1wO3VhcnRfcGh5X29wcyk7CiYjNDM7CQkJICAgICZhbXA7dWFydF9waHlfb3BzLCBTM0ZXUk41X1ZBUklBTlRfRldETCk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gZXJyX3NlcmRldjsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTg0CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIFNlcmllcyBFdmFsdWF0aW9uOiBzM2Z3cm41IERyaXZlciBFbmhhbmNlbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBtb2RpZnlpbmcgdGhlIGBzM2Z3cm41YCBORkMgZHJpdmVyLiBTZWVtcyBsaWtlIGl0JiMzOTtzIGFkZGluZyBzdXBwb3J0IGZvciBhIG5ldyB2YXJpYW50LCBgczNucm40dmAuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIHNlZWluZyBpcyB0aGUgYWRkaXRpb24gb2YgYSBuZXcgY29tcGF0aWJsZSBzdHJpbmcsICYjMzQ7c2Ftc3VuZyxzM25ybjR2JiMzNDssIGluIHRoZSBkZXZpY2UgdHJlZSBiaW5kaW5ncywgYWxvbmcgd2l0aCBhIGNvcnJlc3BvbmRpbmcgZXhhbXBsZSBpbiBhIERUUyBmaWxlLiBUaGF0JiMzOTtzIHN0YW5kYXJkIHByb2NlZHVyZSBmb3IgYWRkaW5nIHN1cHBvcnQgZm9yIGEgbmV3IGhhcmR3YXJlIHJldi4gTm93LCBpdCBsb29rcyBsaWtlIGEgZmFpcmx5IGNvbXByZWhlbnNpdmUgY2hhbmdlLCB0b3VjaGluZyBzZXZlcmFsIGNvcmUgZmlsZXM6IGBjb3JlLmNgLCBgaTJjLmNgLCBgbmNpLmNgLCBgbmNpLmhgLCBgczNmd3JuNS5oYCwgYW5kIGB1YXJ0LmNgLiBMb29rcyBsaWtlIGl0JiMzOTtzIGEgZGVlcCBkaXZlLgoKTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcywgaG93IGlzIHRoaXMgZHJpdmVyICpyZWFjaGVkKj8gSXQmIzM5O3MgYW4gTkZDIGRyaXZlciwgc28gSSYjMzk7bSBleHBlY3RpbmcgTkNJIOKAkyB0aGUgTkZDIENvbnRyb2xsZXIgSW50ZXJmYWNlIOKAkyBpcyB0aGUgbGlrZWx5IGNhbmRpZGF0ZS4gWXVwLCBzZWVtcyBJIHdhcyBjb3JyZWN0LiBUaGUgcGF0Y2ggZXh0ZW5kcyB0aGUgZXhpc3RpbmcgTkNJIGZ1bmN0aW9uYWxpdHkgdG8gaGFuZGxlIHRoZSBgczNucm40dmAuIEkmIzM5O20gc2VlaW5nIGFkZGl0aW9ucyB0byBtYW5hZ2UgdGhlIHByb3ByaWV0YXJ5IGNvbW1hbmRzIGFuZCByZXNwb25zZXMgZm9yIHRoaXMgbmV3IHZhcmlhbnQsIGdvb2QuIFNwZWNpZmljYWxseSwgdGhlIGBzM2Z3cm41X25jaV9wcm9wX29wc2Agc3RydWN0dXJlIGlzIGJlaW5nIGV4dGVuZGVkIHdpdGggYE5DSV9QUk9QX0RVQUxfT1BUSU9OYCwgYW5kIHRoZXJlIGFyZSBuZXcgZnVuY3Rpb25zIGJlaW5nIGFkZGVkOiBgczNmd3JuNV9uY2lfZHVhbF9yc3BgLCBgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWxgLCBhbmQgYHMzZndybjVfbmNpX2Nsa19jZmdgLiBUaGlzIGlzIGFsbCBtYWtpbmcgc2Vuc2UsIGRlYWxpbmcgd2l0aCB0aGUgbG93LWxldmVsIGNvbW11bmljYXRpb24uCgpGaW5hbGx5LCBiZWZvcmUgSSBkaWcgdG9vIGRlZXAgaW50byB0aGUgY29kZSwgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCB0aGlzIGBzM2Z3cm41YCBkcml2ZXIgaXMgZXZlbiBlbmFibGVkIGluIGFueSBjb25maWcuIEdvaW5nIHRvIHJ1biBgZ3JlcHBlcmAgdG8gc2VhcmNoIGZvciBgQ09ORklHX05GQ19TM0ZXUk41YCB0byBzZWUgd2hhdCBJIGNhbiBmaW5kLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGNvZGUgaXMgYWN0dWFsbHkgdXNlZCBzb21ld2hlcmUhIE9rYXksIGxldCYjMzk7cyBzZWUgd2hhdCB0aGF0IHR1cm5zIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIyOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19ORkNfUzNGV1JONSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybS9jb25maWdzL2V4eW5vc19kZWZjb25maWc9ODM9Q09ORklHX05GQ19TSERMQz15XG5hcmNoL2FybS9jb25maWdzL2V4eW5vc19kZWZjb25maWc6ODQ6Q09ORklHX05GQ19TM0ZXUk41X0kyQz15XG5hcmNoL2FybS9jb25maWdzL2V4eW5vc19kZWZjb25maWctODUtQ09ORklHX0RFVlRNUEZTPXlcbi0tXG5hcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZz0xNzM9Q09ORklHX05GQ19TSERMQz15XG5hcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZzoxNzQ6Q09ORklHX05GQ19TM0ZXUk41X0kyQz1tXG5hcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZy0xNzUtQ09ORklHX1BDSUVQT1JUQlVTPXlcbi0tXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnPTIwOD1DT05GSUdfTkZDX05YUF9OQ0lfSTJDPW1cbmFyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWc6MjA5OkNPTkZJR19ORkNfUzNGV1JONV9JMkM9bVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZy0yMTAtQ09ORklHX1BDST15XG4tLVxuZHJpdmVycy9ncGlvL2dwaW9saWItb2YuYz00ODc9c3RhdGljIHN0cnVjdCBncGlvX2Rlc2MgKm9mX2ZpbmRfZ3Bpb19yZW5hbWUoc3RydWN0IGRldmljZV9ub2RlICpucCxcbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1vZi5jLTUyNi0jZW5kaWZcbmRyaXZlcnMvZ3Bpby9ncGlvbGliLW9mLmM6NTI3OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORkNfUzNGV1JONV9JMkMpXG5kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1vZi5jLTUyOC1cdFx0eyBcJiMzNDtlblwmIzM0OyxcdFx0XCYjMzQ7czNmd3JuNSxlbi1ncGlvc1wmIzM0OyxcdFwmIzM0O3NhbXN1bmcsczNmd3JuNS1pMmNcJiMzNDsgfSxcbi0tXG5kcml2ZXJzL25mYy9NYWtlZmlsZT0xNz1vYmotJChDT05GSUdfTkZDX05YUF9OQ0kpXHQmIzQzOz0gbnhwLW5jaS9cbmRyaXZlcnMvbmZjL01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19ORkNfUzNGV1JONSlcdCYjNDM7PSBzM2Z3cm41L1xuZHJpdmVycy9uZmMvTWFrZWZpbGUtMTktb2JqLSQoQ09ORklHX05GQ19TVDk1SEYpXHQmIzQzOz0gc3Q5NWhmL1xuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvTWFrZWZpbGU9OD1zM2Z3cm44Ml91YXJ0LW9ianMgPSB1YXJ0Lm9cbmRyaXZlcnMvbmZjL3MzZndybjUvTWFrZWZpbGUtOS1cbmRyaXZlcnMvbmZjL3MzZndybjUvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX05GQ19TM0ZXUk41KSAmIzQzOz0gczNmd3JuNS5vXG5kcml2ZXJzL25mYy9zM2Z3cm41L01ha2VmaWxlOjExOm9iai0kKENPTkZJR19ORkNfUzNGV1JONV9JMkMpICYjNDM7PSBzM2Z3cm41X2kyYy5vXG5kcml2ZXJzL25mYy9zM2Z3cm41L01ha2VmaWxlLTEyLW9iai0kKENPTkZJR19ORkNfUzNGV1JOODJfVUFSVCkgJiM0Mzs9IHMzZndybjgyX3VhcnQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIyOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTAwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIFMzRldSTjUgTkZDIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgQ09ORklHX05GQ19TM0ZXUk41YCBkcml2ZXIsIGFuZCBpdCBhbHNvIHVzZXMgYENPTkZJR19ORkNfUzNGV1JONV9JMkNgLiBSaWdodCBvZmYgdGhlIGJhdCwgaXQmIzM5O3MgcmVnaXN0ZXJpbmcgaXRzZWxmIHRocm91Z2ggYm90aCBgaTJjX2RyaXZlcmAgYW5kIGBzZXJkZXZfZGV2aWNlX2RyaXZlcmAsIHdoaWNoIGlzIGdvb2QgdG8ga25vdywgYW5kIG1lYW5zIEkgaGF2ZSBhIGZldyBkaWZmZXJlbnQgYW5nbGVzIHRvIGFwcHJvYWNoIHRoaXMuIENhbiBJIGZ1enogdGhpcyBlZmZlY3RpdmVseT8gQWJzb2x1dGVseS4gU3l6a2FsbGVyJiMzOTtzIGBzeXpfaTJjYCBhbmQgdmlydHVhbCBJMkMgZGV2aWNlcyB3b3VsZCBiZSBwZXJmZWN0IGZvciB0aGUgSTJDIGFzcGVjdC4gUGx1cywgdGhlIE5DSSBpbnRlcmZhY2UgaXMgZXhwb3NlZCB0byB1c2VyLXNwYWNlIHRocm91Z2ggbmV0bGluayBvciBzb2NrZXRzLCBhbmQgU3l6a2FsbGVyIGhhcyBzb2xpZCBzdXBwb3J0IGZvciBOQ0kvTkZDIGZ1enppbmcuIFRoYXQmIzM5O3MgYSBtYWpvciBhZHZhbnRhZ2UuCgpBaCwgd2FpdCwgaXQmIzM5O3MgYW4gTkNJIGRyaXZlciDigJMgYHMzZndybjVgLiBUaGF0IG1lYW5zIGl0IHJlZ2lzdGVycyB0aHJvdWdoIGBuY2lfYWxsb2NhdGVfZGV2aWNlYCBhbmQgYG5jaV9yZWdpc3Rlcl9kZXZpY2VgLiBUaGUgTkNJIGNvcmUgd2lsbCBoYW5kbGUgYSBsb3Qgb2YgdGhlIGNvbW11bmljYXRpb24sIHdoaWNoIGlzIGltcG9ydGFudCB0byByZW1lbWJlci4gVGhlIGRyaXZlciBpbXBsZW1lbnRzIGBuY2lfb3BzYCAoYHMzZndybjVfbmNpX29wc2ApLCB3aGljaCBpbmNsdWRlcyB0aGUgc3RhbmRhcmQgc3R1ZmYgbGlrZSBgaW5pdGAsIGBvcGVuYCwgYGNsb3NlYCwgYHNlbmRgLCBgc2V0dXBgLCBgcG9zdF9zZXR1cGAsIGFuZCBgcHJvcF9vcHNgLiBUaGlzIHBhdGNoIHNwZWNpZmljYWxseSBhZGRzIGBzM2Z3cm41X25jaV9pbml0YCB0byBgbmNpX29wc2AsIGFuZCBhbHNvIGBzM2Z3cm41X25jaV9kdWFsX3JzcGAgdG8gYHMzZndybjVfbmNpX3Byb3Bfb3BzYC4gSXQgYWRkcyBgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWxgIGFzIHdlbGwsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBzM2Z3cm41X25jaV9wb3N0X3NldHVwYC4KCk5vdywgaGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nOiBgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWxgIGNhbGxzIGBmaXJtd2FyZV9yZXF1ZXN0X25vd2FybmAuIFRoYXQmIzM5O3MgYSBiaWcgZmxhZy4gVGhhdCBtZWFucyBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEkgY2FuIGRlZmluaXRlbHkgdHJpZ2dlciB0aGF0IGNvZGUgcGF0aC4KCk9rYXksIGxldCYjMzk7cyBuYWlsIGRvd24gd2hpY2ggZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLiBXZSYjMzk7dmUgZ290OgoKKiAgIGBzM2Z3cm41X25jaV9pbml0YAoqICAgYHMzZndybjVfbmNpX2R1YWxfcnNwYAoqICAgYHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsYAoqICAgYHMzZndybjVfbmNpX2Nsa19jZmdgCgpJIG5lZWQgdG8gcXVpY2tseSBjaGVjayBgZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuY2AgdG8gc2VlIGlmIHRob3NlIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQgc3RhdGljIG9yIG5vdCB0byBjb25maXJtIHRoZXkmIzM5O3JlIGFjdHVhbGx5IGV4cG9zZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjI6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7czNmd3JuNV9uY2lfZHVhbF9yc3AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuYz0xOD1zdGF0aWMgaW50IHMzZndybjVfbmNpX3Byb3BfcnNwKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvbmNpLmMtMzAtICovXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jOjMxOnN0YXRpYyBpbnQgczNmd3JuNV9uY2lfZHVhbF9yc3Aoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jLTMyLXtcbi0tXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jPTQzPWNvbnN0IHN0cnVjdCBuY2lfZHJpdmVyX29wcyBzM2Z3cm41X25jaV9wcm9wX29wc1s1XSA9IHtcbi0tXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jLTY2LVx0XHRcdFx0TkNJX1BST1BfRFVBTF9PUFRJT04pLFxuZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuYzo2NzpcdFx0LnJzcCA9IHMzZndybjVfbmNpX2R1YWxfcnNwLFxuZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuYy02OC1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjI6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5MDUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5GQyBEcml2ZXIgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIG9wdGltaXplIGl0IGJhc2VkIG9uIHRoZSBpbnN0cnVjdGlvbiB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBgczNmd3JuNV9uY2lfZHVhbF9yc3BgIGlzIHN0YXRpYywgd2hpY2ggbWlnaHQgYmUgYSBwb3RlbnRpYWwgaXNzdWUuIEJ1dCBoYW5nIG9uLi4uIGl0JiMzOTtzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aGluIGBzM2Z3cm41X25jaV9wcm9wX29wc2AuIFRoaXMgbWVhbnMgdGhlIGNvbXBpbGVyIHdvbiYjMzk7dCBpbmxpbmUgaXQsIHdoaWNoIGFjdHVhbGx5IG1ha2VzIGl0IHN1aXRhYmxlIGZvciB1c2UuCgpMZXQmIzM5O3Mgc2Vl4oCmIEkga25vdyB0aGF0IGBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbGAgYW5kIGBzM2Z3cm41X25jaV9jbGtfY2ZnYCBhcmUgKm5vbiotc3RhdGljLCBzbyB0aGV5JiMzOTtyZSBpbiBhIGdvb2Qgc3RhdGUuIEhvd2V2ZXIsIEkgcmVjYWxsIHRoYXQgYHMzZndybjVfbmNpX2luaXRgICppcyogc3RhdGljLiBCdXQgaXQgaXMgcGFzc2VkIHdpdGhpbiBgbmNpX29wc2AuIFRoYXQgc2VlbXMgc2ltaWxhciB0byB0aGUgYHMzZndybjVfbmNpX2R1YWxfcnNwYCBzaXR1YXRpb24sIGFuZCBtYXkgYmUgZmluZS4KClRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCBgczNmd3JuNV9uY2lfaW5pdGAsIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgaXRzIGRlZmluaXRpb24gaW4gYGRyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jYC4gSSBuZWVkIHRvIHJldmlldyBob3cgaXQmIzM5O3MgdXNlZCB3aXRoaW4gdGhhdCBmaWxlIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgaW1tZWRpYXRlIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIyOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3MzZndybjVfbmNpX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmM9NDE9c3RhdGljIGludCBzM2Z3cm41X2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jLTc5LVxuZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmM6ODA6c3RhdGljIGludCBzM2Z3cm41X25jaV9pbml0KHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxuZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmMtODEte1xuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jPTE3OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5jaV9vcHMgczNmd3JuNV9uY2lfb3BzID0ge1xuZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmM6MTgwOlx0LmluaXQgPSBzM2Z3cm41X25jaV9pbml0LFxuZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmMtMTgxLVx0Lm9wZW4gPSBzM2Z3cm41X25jaV9vcGVuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIyOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzEyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIFN0YXRpYyBOYXR1cmUgb2YgYSBEdWFsIFJGIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBzaXR1YXRpb24gaXMgJiMzNDtzdGF0aWMmIzM0Oy4gVGhhdCBpbW1lZGlhdGVseSBzdWdnZXN0cyBhIHBvdGVudGlhbCBwcm9ibGVtIOKAkyBvciBhdCBsZWFzdCwgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgY2FyZWZ1bCBpbnZlc3RpZ2F0aW9uLiBJJiMzOTttIGluZmVycmluZyBhIGxhY2sgb2YgZHluYW1pc20sIHBvc3NpYmx5IGEgaGFyZGNvZGVkIGNvbmZpZ3VyYXRpb24gb3IgYSBmaXhlZCBzdGF0ZS4gVGhpcyBmZWVscyBsaWtlIGEgc21lbGwgdGVzdCwgc28gSSBuZWVkIHRvIGRpZyBkZWVwZXIuCgpNeSBpbW1lZGlhdGUgaW5zdGluY3QsIGdpdmVuIHRoZSBjb250ZXh0IG9mIGxpa2VseSBORkMvUkYgYW5kIGR1YWwgY29uZmlndXJhdGlvbnMsIGlzIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUga2VybmVsIGNvZGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgYHMzZndybjVgIGRyaXZlciwgYW5kIGl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRoYXQgdGhlIGtleSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgdGhpcyBkdWFsIFJGIHNldHVwIGlzIGBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbGAgd2l0aGluIGBkcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jYC4gSSBoYXZlIGEgZmVlbGluZyB0aGUgc3RhdGljLW5lc3MgSSYjMzk7bSBzZW5zaW5nIGlzIHJlZmxlY3RlZCBzb21ld2hlcmUgd2l0aGluIHRoYXQgZnVuY3Rpb24sIHdoZXRoZXIgaXQmIzM5O3MgdGhyb3VnaCB0aGUgcGFyYW1ldGVycyBwYXNzZWQsIHRoZSBsb2dpYyBmbG93LCBvciB0aGUgd2F5IHJlc291cmNlcyBhcmUgYWxsb2NhdGVkLiBNeSBndXQgc2F5cyB0aGF0IHRoaXMgaXMgdGhlIHBvaW50IHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIGlzIGhhcmRjb2RlZCwgcHJldmVudGluZyB0aGUgc3lzdGVtIGZyb20gYWRqdXN0aW5nIGR5bmFtaWNhbGx5IHRvIHVzZXIgbmVlZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIyOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3MzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jPTE0ND1zdGF0aWMgaW50IHMzZndybjVfbmNpX3Bvc3Rfc2V0dXAoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4tLVxuZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmMtMTQ5LVx0aWYgKGluZm8tXHUwMDNldmFyaWFudCA9PSBTM0ZXUk41X1ZBUklBTlRfUzNOUk40Vikge1xuZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmM6MTUwOlx0XHRyZXQgPSBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbChpbmZvLCBTM05STjRWX0hXUkVHX05BTUUsXG5kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYy0xNTEtXHRcdFx0XHRcdFx0ICAgIFMzTlJONFZfU1dSRUdfTkFNRSk7XG4tLVxuZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuYz0xNjc9c3RhdGljIGJvb2wgczNmd3JuNV9uY2lfZHVhbF9jYWxfY3VycmVudChzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLFxuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvbmNpLmMtMTg3LSAqL1xuZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuYzoxODg6aW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jLTE4OS1cdFx0XHRcdCAgY29uc3QgY2hhciAqaHdfbmFtZSwgY29uc3QgY2hhciAqc3dfbmFtZSlcbi0tXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oPTcyPWludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmUoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqZndfbmFtZSk7XG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oOjczOmludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbChzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLFxuZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaC03NC1cdFx0XHRcdCAgY29uc3QgY2hhciAqaHdfbmFtZSwgY29uc3QgY2hhciAqc3dfbmFtZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIyOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTU1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkFuYWx5emluZyB0aGUgTm9uLVN0YXRpYyBOYXR1cmUqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyB0aGlzIGlzIG5vdCBhIHN0YXRpYyBzaXR1YXRpb24sIHRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGF0IG1lLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBkeW5hbWljIGhlcmUuIFRoYXQgbWVhbnMgdGhlIGZvY3VzIHNoaWZ0cywgd2UgbmVlZCB0byBsb29rIGZvciB0aGUgdGhpbmdzIHRoYXQgYXJlIHZhcmlhYmxlLiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQmIzM5O3MgdGhlIG5leHQgc3RlcD8gTXkgZ3V0IHNheXMgd2UgbmVlZCB0byBsb29rIGF0IHdoYXQmIzM5O3MgY2hhbmdpbmcuIFJpZ2h0LiBPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoYXQgYHMzZndybjVfbmNpX2Nsa19jZmdgIGVsZW1lbnQuIFRoaXMgc2VlbXMgbGlrZSBhIHBpdm90YWwgcGllY2UsIGNvbnNpZGVyaW5nIHdoYXQgd2UmIzM5O3JlIGxvb2tpbmcgYXQuIEdvdHRhIGZpZ3VyZSBvdXQgd2hhdCBpdCYjMzk7cyBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7czNmd3JuNV9uY2lfY2xrX2NmZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYz04MD1zdGF0aWMgaW50IHMzZndybjVfbmNpX2luaXQoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4tLVxuZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmMtODUtXHRpZiAoaW5mby1cdTAwM2V2YXJpYW50ID09IFMzRldSTjVfVkFSSUFOVF9TM05STjRWKSB7XG5kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYzo4NjpcdFx0cmV0ID0gczNmd3JuNV9uY2lfY2xrX2NmZyhpbmZvKTtcbmRyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jLTg3LVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvbmNpLmM9NzM9aW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZShzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLCBjb25zdCBjaGFyICpmd19uYW1lKVxuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvbmNpLmMtMTQ5LSAqL1xuZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuYzoxNTA6aW50IHMzZndybjVfbmNpX2Nsa19jZmcoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbylcbmRyaXZlcnMvbmZjL3MzZndybjUvbmNpLmMtMTUxLXtcbi0tXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oPTczPWludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbChzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLFxuZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaC03NC1cdFx0XHRcdCAgY29uc3QgY2hhciAqaHdfbmFtZSwgY29uc3QgY2hhciAqc3dfbmFtZSk7XG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oOjc1OmludCBzM2Z3cm41X25jaV9jbGtfY2ZnKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8pO1xuZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaC03Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyNDAKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTM0ZXUk41IE5DSSBEcml2ZXIgRW50cnlwb2ludHMqKgoKT2theSwgc28gdGhpcyBpc24mIzM5O3QgYSBzdGF0aWMgc2l0dWF0aW9uLiBHb29kLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciB0aGUgUzNGV1JONSBOQ0kgZHJpdmVyLiBCYXNlZCBvbiB3aGF0JiMzOTtzIGhlcmUsIHRoZSBpbml0aWFsIGZ1bmN0aW9ucyB0byBjb25zaWRlciBhcmU6IGBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbGAsIGBzM2Z3cm41X25jaV9jbGtfY2ZnYCwgYHMzZndybjVfbmNpX2R1YWxfcnNwYCwgYW5kIGBzM2Z3cm41X25jaV9pbml0YC4KCldhaXQgYSBtaW51dGUsIGBzM2Z3cm41X25jaV9kdWFsX3JzcGAgYW5kIGBzM2Z3cm41X25jaV9pbml0YCBhcmUgKnN0YXRpYyouIE5vcm1hbGx5LCBJJiMzOTtkIHNraXAgdGhvc2UsIGJ1dCB0aGV5IGFyZSBhbHNvIHBhc3NlZCBhcm91bmQgYXMgZnVuY3Rpb24gcG9pbnRlcnMsIHdoaWNoIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgdGhleSB3b24mIzM5O3QgYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIFNpbmNlIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIGJ1dCB0aGVzZSAqYXJlKiBlbnRyeXBvaW50cyBmcm9tIHRoZSBOQ0kgY29yZSwgSSYjMzk7bGwgaW5jbHVkZSB0aGVtLiBUaHVzLCBgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWxgIGFuZCBgczNmd3JuNV9uY2lfY2xrX2NmZ2Agd2lsbCBiZSB0aGUgcHJpbWFyeSBmb2N1cy4gSW5jbHVkaW5nIGBzM2Z3cm41X25jaV9kdWFsX3JzcGAgYW5kIGBzM2Z3cm41X25jaV9pbml0YCBpcyBhbHNvIHJlbGV2YW50IGJlY2F1c2UgdGhleSBhcmUgaW1wb3J0YW50IHBhcnRzIG9mIHRoaXMgc3Vic3lzdGVtLgoKTm93LCBsZXQmIzM5O3MganVzdCBxdWlja2x5IGNoZWNrIGZvciBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBkZWZpbmVzLiBJdCBsb29rcyBsaWtlIGBORkNfUzNGV1JONWAgYW5kIGBORkNfUzNGV1JONV9JMkNgIGFyZSBsaWtlbHkgY2FuZGlkYXRlcy4gSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjaGVjayB0aGUgYGRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZ2AgZmlsZSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbnMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORkNfUzNGV1JONSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZzoyOmNvbmZpZyBORkNfUzNGV1JONVxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTMtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZy05LVxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnOjEwOmNvbmZpZyBORkNfUzNGV1JONV9JMkNcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZy0xMS1cdHRyaXN0YXRlIFwmIzM0O1NhbXN1bmcgUzNGV1JONSBJMkMgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjE2MgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoYXQgS2NvbmZpZyBmaWxlOgoKKipEaXZpbmcgaW50byB0aGUgTkZDIERyaXZlciYjMzk7cyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBjcmFjayBvcGVuIGBkcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWdgLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIFMzRldSTjUgTkZDIGRyaXZlciBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBJbW1lZGlhdGVseSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSB0eXBpY2FsIHN0cnVjdHVyZSBvZiBhIEtjb25maWcgZmlsZTogZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIGFuZCB0aGUgYWN0dWFsIGNvbmZpZ3VyYXRpb24gc3ltYm9scy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIG1haW4gZW5hYmxlIG9wdGlvbiBmb3IgdGhlIGRyaXZlciwgSSYjMzk7bSBzdXJlIGl0IHdpbGwgYmUgc29tZXRoaW5nIGxpa2UgYENPTkZJR19ORkNfUzNGV1JONWAuIFRoZW4gSSB3aWxsIGxvb2sgZm9yIGFueSBzdWItb3B0aW9ucywgbWF5YmUgSSB3aWxsIGZpbmQgc2V0dGluZ3MgdG8gdG9nZ2xlIHNwZWNpZmljIGZlYXR1cmVzLCBsaWtlIGRpZmZlcmVudCBORkMgbW9kZXMgb3IgcG93ZXItc2F2aW5nIGNvbmZpZ3VyYXRpb25zLCBvciBldmVuIGRlYnVnIG9wdGlvbnMuCgpJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIga2VybmVsIGNvbXBvbmVudHMsIGhhcmR3YXJlIGludGVyZmFjZXMgKGxpa2UgSTJDLCBTUEkpLCBvciBldmVuIG90aGVyIE5GQyBtb2R1bGVzIHRoaXMgZHJpdmVyIHJlbGllcyBvbi4gQXJlIHRoZXJlIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBkZXBlbmRlbmNpZXM/IFRoYXQgd2lsbCBpbmZsdWVuY2UgaG93IEkgaW50ZXJwcmV0IHRoZSBvcHRpb25zLgoKVGhlIGhlbHAgdGV4dCBpcyBjcnVjaWFsLiBJIGV4cGVjdCBpdCB0byBnaXZlIG1lIGEgY29uY2lzZSBkZXNjcmlwdGlvbiBvZiB0aGUgZHJpdmVyJiMzOTtzIHB1cnBvc2UsIHRoZSBkZXZpY2UgaXQgc3VwcG9ydHMsIGFuZCBwb3RlbnRpYWxseSBhbnkgbGltaXRhdGlvbnMgb3Iga25vd24gaXNzdWVzLiBUaGlzIGlzIGFsc28gd2hlcmUgSSB3aWxsIGZpbmQgaW5mb3JtYXRpb24gb24gaG93IHRoZSBvcHRpb25zIGludGVyYWN0IGFuZCB3aGF0IHRoZXkgZG8uCgpGaW5hbGx5LCBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkZWZhdWx0IHZhbHVlcyBvZiB0aGVzZSBvcHRpb25zLiBBcmUgdGhleSBzZW5zaWJsZSBmb3IgYSB3aWRlIHJhbmdlIG9mIGRldmljZXMsIG9yIGFyZSB0aGV5IGdlYXJlZCB0b3dhcmRzIGEgcGFydGljdWxhciBoYXJkd2FyZSBzZXR1cD8gVGhpcyBoZWxwcyBtZSB1bmRlcnN0YW5kIHRoZSBpbnRlbmRlZCB1c2UgY2FzZSBvZiB0aGUgZHJpdmVyLiBJZiB0aGUgZGVmYXVsdCBzZXR0aW5ncyBhcmUgb2JzY3VyZSwgSSYjMzk7bGwgbmVlZCB0byBkcmlsbCBkb3duIGRlZXBlciBpbnRvIHRoZSBkb2N1bWVudGF0aW9uLiBVbHRpbWF0ZWx5LCBJJiMzOTtsbCBiZSB1c2luZyB0aGlzIGluZm9ybWF0aW9uIHRvIGRldGVybWluZSBob3cgdG8gYmVzdCBidWlsZCBhbmQgY29uZmlndXJlIGEga2VybmVsIHdpdGggdGhpcyBkcml2ZXIsIGFuZCBob3cgdG8gdHJvdWJsZXNob290IGl0IGlmIHRoZXJlIGFyZSBhbnkgaXNzdWVzLiBUaGlzIGZpbGUgd2lsbCBiZSBteSByb2FkbWFwIHRvIHVuZGVyc3RhbmRpbmcgYW5kIGNvbnRyb2xsaW5nIHRoZSBTM0ZXUk41IGRyaXZlciYjMzk7cyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE5GQ19TM0ZXUk41XG4gICAzOlx0XHR0cmlzdGF0ZVxuICAgNDpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBDb3JlIGRyaXZlciBmb3IgU2Ftc3VuZyBTM0ZXUk41IE5GQyBjaGlwLiBDb250YWlucyBjb3JlIHV0aWxpdGllc1xuICAgNzpcdFx0ICBvZiBjaGlwLiBJdCYjMzk7cyBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IFBIWXMgdG8gYXZvaWQgZHVwbGljYXRpbmcgbG90c1xuICAgODpcdFx0ICBvZiBjb21tb24gY29kZS5cbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgTkZDX1MzRldSTjVfSTJDXG4gIDExOlx0XHR0cmlzdGF0ZSBcJiMzNDtTYW1zdW5nIFMzRldSTjUgSTJDIHN1cHBvcnRcJiMzNDtcbiAgMTI6XHRcdGRlcGVuZHMgb24gTkZDX05DSSBcdTAwMjZcdTAwMjYgSTJDXG4gIDEzOlx0XHRzZWxlY3QgTkZDX1MzRldSTjVcbiAgMTQ6XHRcdGRlZmF1bHQgblxuICAxNTpcdFx0aGVscFxuICAxNjpcdFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIGFuIEkyQyBpbnRlcmZhY2UgdG8gdGhlIFMzRldSTjUgY2hpcC5cbiAgMTc6XHRcdCAgU2VsZWN0IHRoaXMgaWYgeW91ciBwbGF0Zm9ybSBpcyB1c2luZyB0aGUgSTJDIGJ1cy5cbiAgMTg6XHRcbiAgMTk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIG0gaGVyZS4gVGhlIG1vZHVsZSB3aWxsXG4gIDIwOlx0XHQgIGJlIGNhbGxlZCBzM2Z3cm41X2kyYy5rby5cbiAgMjE6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuICAyMjpcdFxuICAyMzpcdGNvbmZpZyBORkNfUzNGV1JOODJfVUFSVFxuICAyNDpcdCAgICAgICAgdHJpc3RhdGUgXCYjMzQ7U2Ftc3VuZyBTM0ZXUk44MiBVQVJUIHN1cHBvcnRcJiMzNDtcbiAgMjU6XHQgICAgICAgIGRlcGVuZHMgb24gTkZDX05DSSBcdTAwMjZcdTAwMjYgU0VSSUFMX0RFVl9CVVNcbiAgMjY6XHQgICAgICAgIHNlbGVjdCBORkNfUzNGV1JONVxuICAyNzpcdCAgICAgICAgaGVscFxuICAyODpcdCAgICAgICAgICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIGEgVUFSVCBpbnRlcmZhY2UgdG8gdGhlIFMzRldSTjgyIGNoaXAuXG4gIDI5Olx0ICAgICAgICAgIFNlbGVjdCB0aGlzIGlmIHlvdXIgcGxhdGZvcm0gaXMgdXNpbmcgdGhlIFVBUlQgYnVzLlxuICAzMDpcdFxuICAzMTpcdCAgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgbSBoZXJlLiBUaGUgbW9kdWxlIHdpbGxcbiAgMzI6XHQgICAgICAgICAgYmUgY2FsbGVkIHMzZndybjgyX3VhcnQua28uXG4gIDMzOlx0ICAgICAgICAgIFNheSBOIGlmIHVuc3VyZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxNTkKCQkJCQkJCW91dHB1dDogMjA5CgkJCQkJCQl0aG91Z2h0czogNzk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gUGxhbiBmb3IgdGhlIFMzRldSTjUgTkZDIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYHMzZndybjVgIE5GQyBkcml2ZXIgYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZmlndXJlIG91dCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiAgSSBuZWVkIHRvIGdldCBzdXBwb3J0IGZvciB0aGlzIGBzM25ybjR2YCB2YXJpYW50IHdvcmtpbmcuICBUaGUgY29kZSBtZW50aW9ucyBgTkZDX1MzRldSTjVfSTJDYCBhbmQgYE5GQ19TM0ZXUk44Ml9VQVJUYCwgcmlnaHQ/IEFuZCBiYXNlZCBvbiB0aGUgZGVwZW5kZW5jaWVzLCBpdCBsb29rcyBsaWtlIGBORkNfUzNGV1JONV9JMkNgIGRlcGVuZHMgb24gYE5GQ19OQ0lgIGFuZCBgSTJDYCwgd2hpbGUgYE5GQ19TM0ZXUk44Ml9VQVJUYCBkZXBlbmRzIG9uIGBORkNfTkNJYCBhbmQgYFNFUklBTF9ERVZfQlVTYC4gTWFrZXMgc2Vuc2UuICBJIG5lZWQgYm90aCBvZiB0aG9zZSAtIGBORkNfUzNGV1JONV9JMkNgIGFuZCBgTkZDX1MzRldSTjgyX1VBUlRgLiAgYE5GQ19OQ0lgIGlzIGEgY29yZSBORkMgY29uZmlnLCBzbyBJJiMzOTtsbCBiZSBzdXJlIHRoYXQgaXMgaW5jbHVkZWQuIFdlIGNhbiBpbmNsdWRlIHRoZSBvdGhlcnMgaWYgbmVjZXNzYXJ5LgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgZnVuY3Rpb25zIHRoZW1zZWx2ZXMuICBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgSSBuZWVkIHRvIGZvY3VzIG9uOgoqICAgYHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsYAoqICAgYHMzZndybjVfbmNpX2Nsa19jZmdgCiogICBgczNmd3JuNV9uY2lfZHVhbF9yc3BgCiogICBgczNmd3JuNV9uY2lfaW5pdGAKCldhaXQsIGBzM2Z3cm41X25jaV9kdWFsX3JzcGAgYW5kIGBzM2Z3cm41X25jaV9pbml0YCBhcmUgc3RhdGljLiAgSG93ZXZlciwgdGhleSYjMzk7cmUgbm90IGlubGluZWQsIHdoaWNoIG1ha2VzIHRoZW0gZW50cnkgcG9pbnRzIGZvciB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuIFNvIEkgd2lsbCBpbmNsdWRlIHRoZW0uIGBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbGAgYW5kIGBzM2Z3cm41X25jaV9jbGtfY2ZnYCBhcmUgYWxzbyBub3Qgc3RhdGljLiBJIHRoaW5rIEkmIzM5O2xsIGluY2x1ZGUgdGhvc2UgdG9vIGJlY2F1c2UgdGhleSBhcmUgbm90IHN0YXRpYy4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQgbWUgZG91YmxlLWNoZWNrLiBgczNmd3JuNV9uY2lfaW5pdGAgaXMgc3RhdGljLiBZZXMuIEFuZCBgczNmd3JuNV9uY2lfZHVhbF9yc3BgIGlzIGFsc28gc3RhdGljLCBhcyBJIHRob3VnaHQuIFdoYXQgYWJvdXQgYHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsYD8gTm8sIG5vdCBzdGF0aWMuIEFuZCBgczNmd3JuNV9uY2lfY2xrX2NmZ2A/IEFsc28gbm90IHN0YXRpYy4KClNvLCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSBpbmNsdWRpbmcgaW4gdGhlIGZpbmFsIGxpc3Q6CgpGdW5jdGlvbnMgdG8gbG9vayBhdDoKKiAgIGBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbGAKKiAgIGBzM2Z3cm41X25jaV9jbGtfY2ZnYAoqICAgYHMzZndybjVfbmNpX2R1YWxfcnNwYAoqICAgYHMzZndybjVfbmNpX2luaXRgCgpDb25maWd1cmF0aW9ucyB0byBlbmFibGU6CiogICBgTkZDX1MzRldSTjVfSTJDYAoqICAgYE5GQ19TM0ZXUk44Ml9VQVJUYAoqICAgYE5GQ19OQ0lgCgpUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgYHMzbnJuNHZgIHZhcmlhbnQgdG8gdGhlIGBzM2Z3cm41YCBORkMgZHJpdmVyLiBUaGlzIG5ldyB2YXJpYW50IGhhcyBuZXcgTkNJIGNvbW1hbmRzIGFuZCByZXNwb25zZXMgYW5kIGludHJvZHVjZXMgYSBuZXcgUkYgY29uZmlndXJhdGlvbiByb3V0aW5lLiBUaGUgZHJpdmVyIGlzIGFjY2Vzc2libGUgdmlhIHRoZSBOQ0kgaW50ZXJmYWNlIGFuZCB0aGUgSTJDL1VBUlQgYnVzZXMuICBJIHNob3VsZCBiZSBhYmxlIHRvIGZ1enogaXQgdXNpbmcgdmlydHVhbCBkZXZpY2VzIG9yIHN5emthbGxlciYjMzk7cyBOQ0kgc3VwcG9ydC4KCk9uZSBmaW5hbCBjaGVjay4gSSBzZWUgdGhhdCBgczNmd3JuNV9uY2lfZHVhbF9yc3BgIGlzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgaW4gYHMzZndybjVfbmNpX3Byb3Bfb3BzYCwgc28gaXQgY2FuJiMzOTt0IGJlIGlubGluZWQuIFNpbWlsYXJseSwgYHMzZndybjVfbmNpX2luaXRgIGlzIGluIGBzM2Z3cm41X25jaV9vcHNgLgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgd2l0aCB0aGlzLiBJIHdpbGwgbm93IGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkNfTkNJJiMzNDssCiAgICAmIzM0O05GQ19TM0ZXUk41X0kyQyYjMzQ7LAogICAgJiMzNDtORkNfUzNGV1JOODJfVUFSVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3MzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsJiMzNDssCiAgICAmIzM0O3MzZndybjVfbmNpX2Nsa19jZmcmIzM0OywKICAgICYjMzQ7czNmd3JuNV9uY2lfZHVhbF9yc3AmIzM0OywKICAgICYjMzQ7czNmd3JuNV9uY2lfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBzM25ybjR2IHZhcmlhbnQgdG8gdGhlIHMzZndybjUgTkZDIGRyaXZlci4gSXQgaW50cm9kdWNlcyBuZXcgTkNJIHByb3ByaWV0YXJ5IGNvbW1hbmRzIGFuZCByZXNwb25zZXMsIGFuZCBhIG5ldyBSRiBjb25maWd1cmF0aW9uIHJvdXRpbmUuIFRoZSBkcml2ZXIgaXMgcmVhY2hhYmxlIHZpYSB0aGUgTkNJIGludGVyZmFjZSBhbmQgSTJDL1VBUlQgYnVzZXMsIHdoaWNoIGNhbiBiZSBmdXp6ZWQgdXNpbmcgdmlydHVhbCBkZXZpY2VzIG9yIHN5emthbGxlciYjMzk7cyBOQ0kgc3VwcG9ydC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZDX05DSSYjMzQ7LAogICAgJiMzNDtORkNfUzNGV1JONV9JMkMmIzM0OywKICAgICYjMzQ7TkZDX1MzRldSTjgyX1VBUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbCYjMzQ7LAogICAgJiMzNDtzM2Z3cm41X25jaV9jbGtfY2ZnJiMzNDssCiAgICAmIzM0O3MzZndybjVfbmNpX2R1YWxfcnNwJiMzNDssCiAgICAmIzM0O3MzZndybjVfbmNpX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgczNucm40diB2YXJpYW50IHRvIHRoZSBzM2Z3cm41IE5GQyBkcml2ZXIuIEl0IGludHJvZHVjZXMgbmV3IE5DSSBwcm9wcmlldGFyeSBjb21tYW5kcyBhbmQgcmVzcG9uc2VzLCBhbmQgYSBuZXcgUkYgY29uZmlndXJhdGlvbiByb3V0aW5lLiBUaGUgZHJpdmVyIGlzIHJlYWNoYWJsZSB2aWEgdGhlIE5DSSBpbnRlcmZhY2UgYW5kIEkyQy9VQVJUIGJ1c2VzLCB3aGljaCBjYW4gYmUgZnV6emVkIHVzaW5nIHZpcnR1YWwgZGV2aWNlcyBvciBzeXprYWxsZXImIzM5O3MgTkNJIHN1cHBvcnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIyOjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjI6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBhIG5ldyBORkMgY2hpcCB2YXJpYW50IChTM05STjRWKSBhbmQgYWRkcyBuZXcgTkNJIGNvbW1hbmRzIGZvciBmaXJtd2FyZSBjb25maWd1cmF0aW9uIGFuZCBjYWxpYnJhdGlvbiBkYXRhIHVwZGF0ZXMuIEFsbCBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB0aGUgZGV2aWNlIChzdWNoIGFzIGBzZXRfb3B0aW9uYCwgYHN0b3BfY21kYCwgYW5kIGBzdWJfb2lkYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYG5jaV9wcm9wX2NtZGAuIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgc2VudCBpcyBjYXJlZnVsbHkgY2FsY3VsYXRlZCB0byBtYXRjaCB0aGUgaW5pdGlhbGl6ZWQgYnl0ZXMsIHByZXZlbnRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGZyb20gYmVpbmcgc2VudC4gRGF0YSByZWNlaXZlZCBmcm9tIHRoZSBkZXZpY2UgaXMgY29waWVkIGludG8gYGluZm8tXHUwMDNlZHVhbF9yc3BgIHdpdGggaXRzIGxlbmd0aCB0cmFja2VkIGJ5IGBpbmZvLVx1MDAzZWR1YWxfcnNwX2xlbmAsIGFuZCBib3VuZHMgY2hlY2tzIGFyZSBwZXJmb3JtZWQgYmVmb3JlIGFjY2Vzc2luZyBpdC4gV2hpbGUgdGhlcmUgaXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIGlmIGBza2ItXHUwMDNlbGVuYCBpcyAwIGluIGBzM2Z3cm41X25jaV9kdWFsX3JzcGAgKGBza2ItXHUwMDNlZGF0YVswXWApLCB0aGlzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIHRvIHVzZXIgc3BhY2Ugb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgdXNlZCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gdGVzdCB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3YjQwMjBhYWUwNTI3NmQ0YTQ3YzNmYmFkNzE1M2Q3ZGEzMmVmYjkxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMjI6MzU6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L25mYy9zYW1zdW5nLHMzZndybjUueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3NhbXN1bmcsczNmd3JuNS55YW1sCmluZGV4IDEyYmFlZTQ1NzUyYzcuLjQwYTY5NDY2ODAyYmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3NhbXN1bmcsczNmd3JuNS55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3NhbXN1bmcsczNmd3JuNS55YW1sCkBAIC0xNCw2ICYjNDM7MTQsNyBAQCBwcm9wZXJ0aWVzOgogICAgIGVudW06CiAgICAgICAtIHNhbXN1bmcsczNmd3JuNS1pMmMKICAgICAgIC0gc2Ftc3VuZyxzM2Z3cm44MgomIzQzOyAgICAgIC0gc2Ftc3VuZyxzM25ybjR2CiAKICAgZW4tZ3Bpb3M6CiAgICAgbWF4SXRlbXM6IDEKQEAgLTI5LDYgJiM0MzszMCw5IEBAIHByb3BlcnRpZXM6CiAgIGNsb2NrczoKICAgICBtYXhJdGVtczogMQogCiYjNDM7ICBwdmRkLXN1cHBseToKJiM0MzsgICAgZGVzY3JpcHRpb246IFBWREQgcG93ZXIgc3VwcGx5CiYjNDM7CiAgIHdha2UtZ3Bpb3M6CiAgICAgbWF4SXRlbXM6IDEKICAgICBkZXNjcmlwdGlvbjoKQEAgLTU4LDEyICYjNDM7NjIsMjUgQEAgYWxsT2Y6CiAgICAgICBwcm9wZXJ0aWVzOgogICAgICAgICBjb21wYXRpYmxlOgogICAgICAgICAgIGNvbnRhaW5zOgotICAgICAgICAgICAgY29uc3Q6IHNhbXN1bmcsczNmd3JuNS1pMmMKJiM0MzsgICAgICAgICAgICBlbnVtOgomIzQzOyAgICAgICAgICAgICAgLSBzYW1zdW5nLHMzZndybjUtaTJjCiYjNDM7ICAgICAgICAgICAgICAtIHNhbXN1bmcsczNucm40dgogICAgIHRoZW46CiAgICAgICByZXF1aXJlZDoKICAgICAgICAgLSBpbnRlcnJ1cHRzCiAgICAgICAgIC0gcmVnCiAKJiM0MzsgICMgRGVwbG95ZWQgRFRzIGZvciB0aGUgb2xkZXIgcGFydHMgbmV2ZXIgZGVzY3JpYmVkIGEgc3VwcGx5LCBzbyBQVkREIGlzCiYjNDM7ICAjIG9ubHkgcmVxdWlyZWQgZm9yIHRoZSBuZXcgZGV2aWNlLgomIzQzOyAgLSBpZjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgY29tcGF0aWJsZToKJiM0MzsgICAgICAgICAgY29udGFpbnM6CiYjNDM7ICAgICAgICAgICAgY29uc3Q6IHNhbXN1bmcsczNucm40dgomIzQzOyAgICB0aGVuOgomIzQzOyAgICAgIHJlcXVpcmVkOgomIzQzOyAgICAgICAgLSBwdmRkLXN1cHBseQomIzQzOwogZXhhbXBsZXM6CiAgIC0gfAogICAgICNpbmNsdWRlICZsdDtkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaCZndDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9taWxvcy1mYWlycGhvbmUtZnA2LmR0cyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9taWxvcy1mYWlycGhvbmUtZnA2LmR0cwppbmRleCBlYmRjYTBlMmQyZjNhLi5iZGJhODQ4Mjc1ZGI0IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbWlsb3MtZmFpcnBob25lLWZwNi5kdHMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21pbG9zLWZhaXJwaG9uZS1mcDYuZHRzCkBAIC02MDEsOSAmIzQzOzYwMSwyMiBAQCAmYW1wO2djYyB7CiB9OwogCiAmYW1wO2kyYzEgewotCS8qIFNhbXN1bmcgTkZDIEAgMHgyNyAqLwotCiAJc3RhdHVzID0gJiMzNDtva2F5JiMzNDs7CiYjNDM7CiYjNDM7CW5mY0AyNyB7CiYjNDM7CQljb21wYXRpYmxlID0gJiMzNDtzYW1zdW5nLHMzbnJuNHYmIzM0OzsKJiM0MzsJCXJlZyA9ICZsdDsweDI3Jmd0OzsKJiM0MzsKJiM0MzsJCWludGVycnVwdHMtZXh0ZW5kZWQgPSAmbHQ7JmFtcDt0bG1tIDMxIElSUV9UWVBFX0VER0VfUklTSU5HJmd0OzsKJiM0MzsJCWVuLWdwaW9zID0gJmx0OyZhbXA7dGxtbSA1NiBHUElPX0FDVElWRV9ISUdIJmd0OzsKJiM0MzsJCXdha2UtZ3Bpb3MgPSAmbHQ7JmFtcDt0bG1tIDcgR1BJT19BQ1RJVkVfSElHSCZndDs7CiYjNDM7CQljbG9ja3MgPSAmbHQ7JmFtcDtycG1oY2MgUlBNSF9MTl9CQl9DTEsyJmd0OzsKJiM0MzsKJiM0MzsJCXB2ZGQtc3VwcGx5ID0gJmx0OyZhbXA7dnJlZ19sMjBiJmd0OzsKJiM0MzsKJiM0MzsJCXBpbmN0cmwtMCA9ICZsdDsmYW1wO25mY19kZWZhdWx0Jmd0OzsKJiM0MzsJCXBpbmN0cmwtbmFtZXMgPSAmIzM0O2RlZmF1bHQmIzM0OzsKJiM0MzsJfTsKIH07CiAKICZhbXA7aTJjMyB7CkBAIC04MjUsNiAmIzQzOzgzOCwyMiBAQCAmYW1wO3RsbW0gewogCQkJICAgICAgICZsdDsxMyAxJmd0OywgLyogTkMgKi8KIAkJCSAgICAgICAmbHQ7NjMgMiZndDs7IC8qIFdMQU4gVUFSVCAqLwogCiYjNDM7CW5mY19kZWZhdWx0OiBuZmMtZGVmYXVsdC1zdGF0ZSB7CiYjNDM7CQlpcnEtcGlucyB7CiYjNDM7CQkJcGlucyA9ICYjMzQ7Z3BpbzMxJiMzNDs7CiYjNDM7CQkJZnVuY3Rpb24gPSAmIzM0O2dwaW8mIzM0OzsKJiM0MzsJCQlkcml2ZS1zdHJlbmd0aCA9ICZsdDsyJmd0OzsKJiM0MzsJCQliaWFzLWRpc2FibGU7CiYjNDM7CQl9OwomIzQzOwomIzQzOwkJcGQtcGlucyB7CiYjNDM7CQkJcGlucyA9ICYjMzQ7Z3BpbzU2JiMzNDs7CiYjNDM7CQkJZnVuY3Rpb24gPSAmIzM0O2dwaW8mIzM0OzsKJiM0MzsJCQlkcml2ZS1zdHJlbmd0aCA9ICZsdDsyJmd0OzsKJiM0MzsJCQliaWFzLXB1bGwtdXA7CiYjNDM7CQl9OwomIzQzOwl9OwomIzQzOwogCXNkYzJfY2FyZF9kZXRfbjogc2RjMi1jYXJkLWRldC1zdGF0ZSB7CiAJCXBpbnMgPSAmIzM0O2dwaW82NSYjMzQ7OwogCQlmdW5jdGlvbiA9ICYjMzQ7Z3BpbyYjMzQ7OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmMgYi9kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYwppbmRleCBhZjBmYThiZDk3MGI0Li41NjM0NzBjYjkyOGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYwpAQCAtMjAsNiAmIzQzOzIwLDkgQEAKIAkJCQlORkNfUFJPVE9fSVNPMTQ0NDNfQl9NQVNLIHwgXAogCQkJCU5GQ19QUk9UT19JU08xNTY5M19NQVNLKQogCiYjNDM7I2RlZmluZSBTM05STjRWX0hXUkVHX05BTUUJJiMzNDtzYW1zdW5nL3MzbnJuNHYvaHdyZWcuYmluJiMzNDsKJiM0MzsjZGVmaW5lIFMzTlJONFZfU1dSRUdfTkFNRQkmIzM0O3NhbXN1bmcvczNucm40di9zd3JlZy5iaW4mIzM0OwomIzQzOwogc3RhdGljIGludCBzM2Z3cm41X2Zpcm13YXJlX2luaXQoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgczNmd3JuNV9md19pbmZvICpmd19pbmZvID0gJmFtcDtpbmZvLSZndDtmd19pbmZvOwpAQCAtNzQsNiAmIzQzOzc3LDIyIEBAIHN0YXRpYyBpbnQgczNmd3JuNV9maXJtd2FyZV91cGRhdGUoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbykKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIGludCBzM2Z3cm41X25jaV9pbml0KHN0cnVjdCBuY2lfZGV2ICpuZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbyA9IG5jaV9nZXRfZHJ2ZGF0YShuZGV2KTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CWlmIChpbmZvLSZndDt2YXJpYW50ID09IFMzRldSTjVfVkFSSUFOVF9TM05STjRWKSB7CiYjNDM7CQlyZXQgPSBzM2Z3cm41X25jaV9jbGtfY2ZnKGluZm8pOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZGV2X2VycigmYW1wO25kZXYtJmd0O25mY19kZXYtJmd0O2RldiwKJiM0MzsJCQkJJiMzNDtmYWlsZWQgdG8gY29uZmlndXJlIHRoZSByZWZlcmVuY2UgY2xvY2s6ICVkXG4mIzM0OywKJiM0MzsJCQkJcmV0KTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgczNmd3JuNV9uY2lfb3BlbihzdHJ1Y3QgbmNpX2RldiAqbmRldikKIHsKIAlzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpOwpAQCAtMTI3LDYgJiM0MzsxNDYsMTUgQEAgc3RhdGljIGludCBzM2Z3cm41X25jaV9wb3N0X3NldHVwKHN0cnVjdCBuY2lfZGV2ICpuZGV2KQogCXN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8gPSBuY2lfZ2V0X2RydmRhdGEobmRldik7CiAJaW50IHJldDsKIAomIzQzOwlpZiAoaW5mby0mZ3Q7dmFyaWFudCA9PSBTM0ZXUk41X1ZBUklBTlRfUzNOUk40VikgewomIzQzOwkJcmV0ID0gczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWwoaW5mbywgUzNOUk40Vl9IV1JFR19OQU1FLAomIzQzOwkJCQkJCSAgICBTM05STjRWX1NXUkVHX05BTUUpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZGV2X3dhcm4oJmFtcDtuZGV2LSZndDtuZmNfZGV2LSZndDtkZXYsCiYjNDM7CQkJCSAmIzM0O1JGIGNhbGlicmF0aW9uIGRhdGEgdXBkYXRlIGZhaWxlZDogJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKIAlpZiAoczNmd3JuNV9maXJtd2FyZV9pbml0KGluZm8pKSB7CiAJCS8vc2tpcCBib290bG9hZGVyIG1vZGUKIAkJcmV0dXJuIDA7CkBAIC0xNDksNiAmIzQzOzE3Nyw3IEBAIHN0YXRpYyBpbnQgczNmd3JuNV9uY2lfcG9zdF9zZXR1cChzdHJ1Y3QgbmNpX2RldiAqbmRldikKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuY2lfb3BzIHMzZndybjVfbmNpX29wcyA9IHsKJiM0MzsJLmluaXQgPSBzM2Z3cm41X25jaV9pbml0LAogCS5vcGVuID0gczNmd3JuNV9uY2lfb3BlbiwKIAkuY2xvc2UgPSBzM2Z3cm41X25jaV9jbG9zZSwKIAkuc2VuZCA9IHMzZndybjVfbmNpX3NlbmQsCkBAIC0xNTgsNyAmIzQzOzE4Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmNpX29wcyBzM2Z3cm41X25jaV9vcHMgPSB7CiB9OwogCiBpbnQgczNmd3JuNV9wcm9iZShzdHJ1Y3QgbmNpX2RldiAqKm5kZXYsIHZvaWQgKnBoeV9pZCwgc3RydWN0IGRldmljZSAqcGRldiwKLQljb25zdCBzdHJ1Y3QgczNmd3JuNV9waHlfb3BzICpwaHlfb3BzKQomIzQzOwljb25zdCBzdHJ1Y3QgczNmd3JuNV9waHlfb3BzICpwaHlfb3BzLCBlbnVtIHMzZndybjVfdmFyaWFudCB2YXJpYW50KQogewogCXN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm87CiAJaW50IHJldDsKQEAgLTE3MCw2ICYjNDM7MTk5LDcgQEAgaW50IHMzZndybjVfcHJvYmUoc3RydWN0IG5jaV9kZXYgKipuZGV2LCB2b2lkICpwaHlfaWQsIHN0cnVjdCBkZXZpY2UgKnBkZXYsCiAJaW5mby0mZ3Q7cGh5X2lkID0gcGh5X2lkOwogCWluZm8tJmd0O3BkZXYgPSBwZGV2OwogCWluZm8tJmd0O3BoeV9vcHMgPSBwaHlfb3BzOwomIzQzOwlpbmZvLSZndDt2YXJpYW50ID0gdmFyaWFudDsKIAltdXRleF9pbml0KCZhbXA7aW5mby0mZ3Q7bXV0ZXgpOwogCiAJczNmd3JuNV9zZXRfbW9kZShpbmZvLCBTM0ZXUk41X01PREVfQ09MRCk7CkBAIC0yMjUsMyAmIzQzOzI1NSw1IEBAIEVYUE9SVF9TWU1CT0woczNmd3JuNV9yZWN2X2ZyYW1lKTsKIE1PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwogTU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7U2Ftc3VuZyBTM0ZXUk41IE5GQyBkcml2ZXImIzM0Oyk7CiBNT0RVTEVfQVVUSE9SKCYjMzQ7Um9iZXJ0IEJhbGR5Z2EgJmx0O3IuYmFsZHlnYUBzYW1zdW5nLmNvbSZndDsmIzM0Oyk7CiYjNDM7TU9EVUxFX0ZJUk1XQVJFKFMzTlJONFZfSFdSRUdfTkFNRSk7CiYjNDM7TU9EVUxFX0ZJUk1XQVJFKFMzTlJONFZfU1dSRUdfTkFNRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jIGIvZHJpdmVycy9uZmMvczNmd3JuNS9pMmMuYwppbmRleCA0YmE3NjI2MTE3MTE4Li44ODQ0MjBhYzgzYjViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmZjL3MzZndybjUvaTJjLmMKQEAgLTExLDEzICYjNDM7MTEsMTIgQEAKICNpbmNsdWRlICZsdDtsaW51eC9ncGlvL2NvbnN1bWVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGVsYXkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDtuZXQvbmZjL25mYy5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3BoeV9jb21tb24uaCYjMzQ7CiAKLSNkZWZpbmUgUzNGV1JONV9JMkNfRFJJVkVSX05BTUUgJiMzNDtzM2Z3cm41X2kyYyYjMzQ7Ci0KIHN0cnVjdCBzM2Z3cm41X2kyY19waHkgewogCXN0cnVjdCBwaHlfY29tbW9uIGNvbW1vbjsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2RldjsKQEAgLTE0Niw2ICYjNDM7MTQ1LDcgQEAgc3RhdGljIGlycXJldHVybl90IHMzZndybjVfaTJjX2lycV90aHJlYWRfZm4oaW50IGlycSwgdm9pZCAqcGh5X2lkKQogCiBzdGF0aWMgaW50IHMzZndybjVfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiYjNDM7CWVudW0gczNmd3JuNV92YXJpYW50IHZhcmlhbnQ7CiAJc3RydWN0IHMzZndybjVfaTJjX3BoeSAqcGh5OwogCWludCByZXQ7CiAKQEAgLTE2MCw2ICYjNDM7MTYwLDExIEBAIHN0YXRpYyBpbnQgczNmd3JuNV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIAlwaHktJmd0O2kyY19kZXYgPSBjbGllbnQ7CiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgcGh5KTsKIAomIzQzOwlyZXQgPSBkZXZtX3JlZ3VsYXRvcl9nZXRfZW5hYmxlKCZhbXA7Y2xpZW50LSZndDtkZXYsICYjMzQ7cHZkZCYjMzQ7KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKCZhbXA7Y2xpZW50LSZndDtkZXYsIHJldCwKJiM0MzsJCQkJICAgICAmIzM0O2ZhaWxlZCB0byBlbmFibGUgcHZkZFxuJiMzNDspOwomIzQzOwogCXBoeS0mZ3Q7Y29tbW9uLmdwaW9fZW4gPSBkZXZtX2dwaW9kX2dldCgmYW1wO2NsaWVudC0mZ3Q7ZGV2LCAmIzM0O2VuJiMzNDssIEdQSU9EX09VVF9ISUdIKTsKIAlpZiAoSVNfRVJSKHBoeS0mZ3Q7Y29tbW9uLmdwaW9fZW4pKQogCQlyZXR1cm4gUFRSX0VSUihwaHktJmd0O2NvbW1vbi5ncGlvX2VuKTsKQEAgLTE3OSwxNCAmIzQzOzE4NCwxNSBAQCBzdGF0aWMgaW50IHMzZndybjVfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiAJCXJldHVybiBkZXZfZXJyX3Byb2JlKCZhbXA7Y2xpZW50LSZndDtkZXYsIFBUUl9FUlIocGh5LSZndDtjbGspLAogCQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gZ2V0IGNsb2NrXG4mIzM0Oyk7CiAKJiM0MzsJdmFyaWFudCA9ICh1aW50cHRyX3QpaTJjX2dldF9tYXRjaF9kYXRhKGNsaWVudCk7CiAJcmV0ID0gczNmd3JuNV9wcm9iZSgmYW1wO3BoeS0mZ3Q7Y29tbW9uLm5kZXYsIHBoeSwgJmFtcDtwaHktJmd0O2kyY19kZXYtJmd0O2RldiwKLQkJCSAgICAmYW1wO2kyY19waHlfb3BzKTsKJiM0MzsJCQkgICAgJmFtcDtpMmNfcGh5X29wcywgdmFyaWFudCk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKIAlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKCZhbXA7Y2xpZW50LSZndDtkZXYsIHBoeS0mZ3Q7aTJjX2Rldi0mZ3Q7aXJxLCBOVUxMLAogCQlzM2Z3cm41X2kyY19pcnFfdGhyZWFkX2ZuLCBJUlFGX09ORVNIT1QsCi0JCVMzRldSTjVfSTJDX0RSSVZFUl9OQU1FLCBwaHkpOwomIzQzOwkJJiMzNDtzM2Z3cm41X2kyYyYjMzQ7LCBwaHkpOwogCWlmIChyZXQpCiAJCWdvdG8gczNmd3JuNV9yZW1vdmU7CiAKQEAgLTIwNSwyMSAmIzQzOzIxMSwyNSBAQCBzdGF0aWMgdm9pZCBzM2Z3cm41X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHMzZndybjVfaTJjX2lkX3RhYmxlW10gPSB7Ci0JeyAubmFtZSA9IFMzRldSTjVfSTJDX0RSSVZFUl9OQU1FIH0sCiYjNDM7CXsgLm5hbWUgPSAmIzM0O3MzZndybjVfaTJjJiMzNDssIC5kcml2ZXJfZGF0YSA9IFMzRldSTjVfVkFSSUFOVF9GV0RMIH0sCiYjNDM7CXsgLm5hbWUgPSAmIzM0O3MzbnJuNHYmIzM0OywgLmRyaXZlcl9kYXRhID0gUzNGV1JONV9WQVJJQU5UX1MzTlJONFYgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgczNmd3JuNV9pMmNfaWRfdGFibGUpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9zM2Z3cm41X2kyY19tYXRjaFtdID0gewotCXsgLmNvbXBhdGlibGUgPSAmIzM0O3NhbXN1bmcsczNmd3JuNS1pMmMmIzM0OyB9LAomIzQzOwl7IC5jb21wYXRpYmxlID0gJiMzNDtzYW1zdW5nLHMzZndybjUtaTJjJiMzNDssCiYjNDM7CSAgLmRhdGEgPSAodm9pZCAqKVMzRldSTjVfVkFSSUFOVF9GV0RMIH0sCiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O3NhbXN1bmcsczNucm40diYjMzQ7LAomIzQzOwkgIC5kYXRhID0gKHZvaWQgKilTM0ZXUk41X1ZBUklBTlRfUzNOUk40ViB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9mX3MzZndybjVfaTJjX21hdGNoKTsKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHMzZndybjVfaTJjX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewotCQkubmFtZSA9IFMzRldSTjVfSTJDX0RSSVZFUl9OQU1FLAotCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIob2ZfczNmd3JuNV9pMmNfbWF0Y2gpLAomIzQzOwkJLm5hbWUgPSAmIzM0O3MzZndybjVfaTJjJiMzNDssCiYjNDM7CQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9zM2Z3cm41X2kyY19tYXRjaCwKIAl9LAogCS5wcm9iZSA9IHMzZndybjVfaTJjX3Byb2JlLAogCS5yZW1vdmUgPSBzM2Z3cm41X2kyY19yZW1vdmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jIGIvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuYwppbmRleCA1YTlkZTExYmJlY2VhLi4zODFhYTdiZjI5YTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmMKQEAgLTgsNiAmIzQzOzgsOSBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvY29tcGxldGlvbi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Zpcm13YXJlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21pbm1heC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3VuYWxpZ25lZC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3MzZndybjUuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O25jaS5oJiMzNDsKQEAgLTIwLDcgJiM0MzsyMywyNCBAQCBzdGF0aWMgaW50IHMzZndybjVfbmNpX3Byb3BfcnNwKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXJldHVybiAwOwogfQogCi1jb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNF0gPSB7CiYjNDM7LyoKJiM0MzsgKiBEVUFMX09QVElPTiByZXNwb25zZXMgYXJlIG5vdCB1bmlmb3JtOiBHRVRfVkVSIGFuc3dlcnMgd2l0aCB0aGUgY2hpcCYjMzk7cwomIzQzOyAqIGNhbGlicmF0aW9uIHZlcnNpb25zIGluc3RlYWQgb2YgYSBzdGF0dXMgYnl0ZSwgc28gc3Rhc2ggdGhlIHBheWxvYWQgZm9yCiYjNDM7ICogdGhlIGNhbGxlciBiZWZvcmUgY29tcGxldGluZyB0aGUgcmVxdWVzdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHMzZndybjVfbmNpX2R1YWxfcnNwKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbyA9IG5jaV9nZXRfZHJ2ZGF0YShuZGV2KTsKJiM0MzsKJiM0MzsJaW5mby0mZ3Q7ZHVhbF9yc3BfbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBza2ItJmd0O2xlbiwKJiM0MzsJCQkJICAgc2l6ZW9mKGluZm8tJmd0O2R1YWxfcnNwKSk7CiYjNDM7CW1lbWNweShpbmZvLSZndDtkdWFsX3JzcCwgc2tiLSZndDtkYXRhLCBpbmZvLSZndDtkdWFsX3JzcF9sZW4pOwomIzQzOwomIzQzOwluY2lfcmVxX2NvbXBsZXRlKG5kZXYsIHNrYi0mZ3Q7ZGF0YVswXSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNV0gPSB7CiAJewogCQkub3Bjb2RlID0gbmNpX29wY29kZV9wYWNrKE5DSV9HSURfUFJPUFJJRVRBUlksCiAJCQkJTkNJX1BST1BfU0VUX1JGUkVHKSwKQEAgLTQxLDYgJiM0Mzs2MSwxMSBAQCBjb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNF0gPSB7CiAJCQkJTkNJX1BST1BfRldfQ0ZHKSwKIAkJLnJzcCA9IHMzZndybjVfbmNpX3Byb3BfcnNwLAogCX0sCiYjNDM7CXsKJiM0MzsJCS5vcGNvZGUgPSBuY2lfb3Bjb2RlX3BhY2soTkNJX0dJRF9QUk9QUklFVEFSWSwKJiM0MzsJCQkJTkNJX1BST1BfRFVBTF9PUFRJT04pLAomIzQzOwkJLnJzcCA9IHMzZndybjVfbmNpX2R1YWxfcnNwLAomIzQzOwl9LAogfTsKIAogI2RlZmluZSBTM0ZXUk41X1JGUkVHX1NFQ1RJT05fU0laRSAyNTIKQEAgLTExNywzICYjNDM7MTQyLDE1NCBAQCBpbnQgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sIGNvbnN0IGNoYXIgKmZ3X25hbWUpCiAJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAJcmV0dXJuIHJldDsKIH0KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoZSBTM05STjRWIGV4cGVjdHMgdGhlIHNpbmdsZS1ieXRlIEZXX0NGRyBmb3JtIChqdXN0IHRoZSBjbG9jay1zcGVlZAomIzQzOyAqIHNlbGVjdG9yKS4KJiM0MzsgKi8KJiM0MztpbnQgczNmd3JuNV9uY2lfY2xrX2NmZyhzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJdTggY2xrX3NwZWVkID0gTkNJX1BST1BfRldfQ0ZHX0NMS19TUEVFRDsKJiM0MzsKJiM0MzsJcmV0dXJuIG5jaV9wcm9wX2NtZChpbmZvLSZndDtuZGV2LCBOQ0lfUFJPUF9GV19DRkcsIDEsICZhbXA7Y2xrX3NwZWVkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBbiA4LWJ5dGUgY2FsaWJyYXRpb24gdmVyc2lvbjogNSBieXRlcyBvZiBkYXRlIHN0YW1wIGFuZCBhIDMtYnl0ZSBDU0MKJiM0MzsgKiBjb2RlLCBhdCBmaXhlZCBvZmZzZXRzIGJvdGggaW4gYSBibG9iJiMzOTtzIDE2LWJ5dGUgdGFpbCBhbmQgaW4gZWFjaCBoYWxmIG9mCiYjNDM7ICogdGhlIEdFVF9WRVIgcmVzcG9uc2UgKEhXIGF0IG9mZnNldCAwLCBTVyBhdCBvZmZzZXQgMTUpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIHMzZndybjVfbmNpX2R1YWxfdmVyc2lvbl9lcShjb25zdCB1OCAqYSwgY29uc3QgdTggKmIpCiYjNDM7ewomIzQzOwlyZXR1cm4gIW1lbWNtcChhICYjNDM7IDUsIGIgJiM0MzsgNSwgNSkgJmFtcDsmYW1wOyAhbWVtY21wKGEgJiM0MzsgMTIsIGIgJiM0MzsgMTIsIDMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBzM2Z3cm41X25jaV9kdWFsX2NhbF9jdXJyZW50KHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sCiYjNDM7CQkJCQkgY29uc3Qgc3RydWN0IGZpcm13YXJlICpod19mdywKJiM0MzsJCQkJCSBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnN3X2Z3KQomIzQzO3sKJiM0MzsJaWYgKGluZm8tJmd0O2R1YWxfcnNwX2xlbiAmbHQ7IDMwKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlpZiAoaHdfZnctJmd0O3NpemUgJmx0OyAxNiB8fCBzd19mdy0mZ3Q7c2l6ZSAmbHQ7IDE2KQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gczNmd3JuNV9uY2lfZHVhbF92ZXJzaW9uX2VxKGluZm8tJmd0O2R1YWxfcnNwLAomIzQzOwkJCQkJICAgaHdfZnctJmd0O2RhdGEgJiM0MzsgaHdfZnctJmd0O3NpemUgLSAxNikgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgczNmd3JuNV9uY2lfZHVhbF92ZXJzaW9uX2VxKGluZm8tJmd0O2R1YWxfcnNwICYjNDM7IDE1LAomIzQzOwkJCQkJICAgc3dfZnctJmd0O2RhdGEgJiM0Mzsgc3dfZnctJmd0O3NpemUgLSAxNik7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUzNOUk40ViBSRiBjYWxpYnJhdGlvbiBkYXRhIHVwZGF0ZTogdGhlIEhXIGFuZCBTVyBibG9icyBtZXJnZWQgaW50byBvbmUKJiM0MzsgKiBzdHJlYW0gKEhXIGZpcnN0KSwgcHVzaGVkIGFzIFNUQVJUX1VQREFURSwgb25lIFNFVF9PUFRJT04gcGVyIDI1Mi1ieXRlCiYjNDM7ICogc2VjdGlvbiwgdGhlbiBTVE9QX1VQREFURSBjYXJyeWluZyBhIDE2LWJpdCBjaGVja3N1bSAocnVubmluZyBzdW0gb2YgdGhlCiYjNDM7ICogbWVyZ2VkIHN0cmVhbSBhcyAzMi1iaXQgd29yZHMpLgomIzQzOyAqLwomIzQzO2ludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbChzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLAomIzQzOwkJCQkgIGNvbnN0IGNoYXIgKmh3X25hbWUsIGNvbnN0IGNoYXIgKnN3X25hbWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmNpX3Byb3BfZHVhbF9zZXRfb3B0aW9uX2NtZCBzZXRfb3B0aW9uOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO2luZm8tJmd0O25kZXYtJmd0O25mY19kZXYtJmd0O2RldjsKJiM0MzsJY29uc3Qgc3RydWN0IGZpcm13YXJlICpod19mdywgKnN3X2Z3OwomIzQzOwlzaXplX3QgbWVyZ2VkX3NpemUsIGksIGxlbjsKJiM0MzsJdTggKm1lcmdlZDsKJiM0MzsJdTggc3RvcF9jbWRbM107CiYjNDM7CXUzMiBjaGVja3N1bTsKJiM0MzsJdTggc3ViX29pZDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gZmlybXdhcmVfcmVxdWVzdF9ub3dhcm4oJmFtcDtod19mdywgaHdfbmFtZSwgZGV2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSBmaXJtd2FyZV9yZXF1ZXN0X25vd2FybigmYW1wO3N3X2Z3LCBzd19uYW1lLCBkZXYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0X2h3OwomIzQzOwomIzQzOwltZXJnZWRfc2l6ZSA9IGh3X2Z3LSZndDtzaXplICYjNDM7IHN3X2Z3LSZndDtzaXplOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgc3RyZWFtIGlzIGNoZWNrc3VtbWVkIGFzIDMyLWJpdCB3b3JkcyBhbmQgcHVzaGVkIGluIGF0IG1vc3QgMjU2CiYjNDM7CSAqIHNlY3Rpb25zICh0aGUgc2VjdGlvbiBpbmRleCBpcyBhIHNpbmdsZSBieXRlKTsgcmVqZWN0IGJsb2JzIHRoYXQKJiM0MzsJICogd291bGQgc2lsZW50bHkgYnJlYWsgZWl0aGVyLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFtZXJnZWRfc2l6ZSB8fCBtZXJnZWRfc2l6ZSAlIDQgfHwKJiM0MzsJICAgIG1lcmdlZF9zaXplICZndDsgMjU2ICogTkNJX1BST1BfRFVBTF9TRUNUSU9OX1NJWkUpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O2ludmFsaWQgY2FsaWJyYXRpb24gZGF0YSBzaXplOiAlenVcbiYjMzQ7LCBtZXJnZWRfc2l6ZSk7CiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJZ290byBvdXRfc3c7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQXNrIHRoZSBjaGlwIGZvciBpdHMgY3VycmVudCBjYWxpYnJhdGlvbiB2ZXJzaW9ucyBhbmQgc2tpcCB0aGUKJiM0MzsJICogdXBsb2FkIHdoZW4gYm90aCBhbHJlYWR5IG1hdGNoIHRoZSBibG9iczsgYSBtaXNtYXRjaCBvciBhbgomIzQzOwkgKiB1bnBhcnNlYWJsZSBhbnN3ZXIgbWVhbnMgdGhlIHVwbG9hZCBwcm9jZWVkcy4gR0VUX1ZFUiBhbnN3ZXJzIHdpdGgKJiM0MzsJICogdmVyc2lvbnMsIG5vdCBhIHN0YXR1cyBieXRlLCBzbyBuY2lfcHJvcF9jbWQoKSYjMzk7cyByZXR1cm4gY2FycmllcyBubwomIzQzOwkgKiBtZWFuaW5nIGhlcmUuCiYjNDM7CSAqLwomIzQzOwlzdWJfb2lkID0gTkNJX1BST1BfRFVBTF9TVUJfR0VUX1ZFUjsKJiM0MzsJaW5mby0mZ3Q7ZHVhbF9yc3BfbGVuID0gMDsKJiM0MzsJbmNpX3Byb3BfY21kKGluZm8tJmd0O25kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLCAxLCAmYW1wO3N1Yl9vaWQpOwomIzQzOwlpZiAoczNmd3JuNV9uY2lfZHVhbF9jYWxfY3VycmVudChpbmZvLCBod19mdywgc3dfZncpKSB7CiYjNDM7CQlkZXZfZGJnKGRldiwgJiMzNDtjYWxpYnJhdGlvbiBkYXRhIGFscmVhZHkgY3VycmVudFxuJiMzNDspOwomIzQzOwkJcmV0ID0gMDsKJiM0MzsJCWdvdG8gb3V0X3N3OwomIzQzOwl9CiYjNDM7CiYjNDM7CW1lcmdlZCA9IGt2bWFsbG9jKG1lcmdlZF9zaXplLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFtZXJnZWQpIHsKJiM0MzsJCXJldCA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIG91dF9zdzsKJiM0MzsJfQomIzQzOwltZW1jcHkobWVyZ2VkLCBod19mdy0mZ3Q7ZGF0YSwgaHdfZnctJmd0O3NpemUpOwomIzQzOwltZW1jcHkobWVyZ2VkICYjNDM7IGh3X2Z3LSZndDtzaXplLCBzd19mdy0mZ3Q7ZGF0YSwgc3dfZnctJmd0O3NpemUpOwomIzQzOwomIzQzOwljaGVja3N1bSA9IDA7CiYjNDM7CWZvciAoaSA9IDA7IGkgJiM0MzsgNCAmbHQ7PSBtZXJnZWRfc2l6ZTsgaSAmIzQzOz0gNCkKJiM0MzsJCWNoZWNrc3VtICYjNDM7PSBnZXRfdW5hbGlnbmVkX2xlMzIobWVyZ2VkICYjNDM7IGkpOwomIzQzOwomIzQzOwkvKiBTVEFSVF9VUERBVEUgKi8KJiM0MzsJc3ViX29pZCA9IE5DSV9QUk9QX0RVQUxfU1VCX1NUQVJUX1VQREFURTsKJiM0MzsJcmV0ID0gbmNpX3Byb3BfY21kKGluZm8tJmd0O25kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLCAxLCAmYW1wO3N1Yl9vaWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7VW5hYmxlIHRvIHN0YXJ0IGNhbGlicmF0aW9uIGRhdGEgdXBkYXRlXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTRVRfT1BUSU9OIHBlciBzZWN0aW9uICovCiYjNDM7CXNldF9vcHRpb24uc3ViX29pZCA9IE5DSV9QUk9QX0RVQUxfU1VCX1NFVF9PUFRJT047CiYjNDM7CXNldF9vcHRpb24uaW5kZXggPSAwOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbWVyZ2VkX3NpemU7IGkgJiM0Mzs9IE5DSV9QUk9QX0RVQUxfU0VDVElPTl9TSVpFKSB7CiYjNDM7CQlsZW4gPSBtaW5fdChzaXplX3QsIG1lcmdlZF9zaXplIC0gaSwgTkNJX1BST1BfRFVBTF9TRUNUSU9OX1NJWkUpOwomIzQzOwkJbWVtY3B5KHNldF9vcHRpb24uZGF0YSwgbWVyZ2VkICYjNDM7IGksIGxlbik7CiYjNDM7CQlyZXQgPSBuY2lfcHJvcF9jbWQoaW5mby0mZ3Q7bmRldiwgTkNJX1BST1BfRFVBTF9PUFRJT04sCiYjNDM7CQkJCSAgIGxlbiAmIzQzOyAyLCAoX191OCAqKSZhbXA7c2V0X29wdGlvbik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJCWRldl9lcnIoZGV2LCAmIzM0O2NhbGlicmF0aW9uIGRhdGEgdXBkYXRlIGVycm9yOiAlZFxuJiMzNDssCiYjNDM7CQkJCXJldCk7CiYjNDM7CQkJLyogQWJvcnQgZm9ybTogU1RPUF9VUERBVEUgd2l0aCB0aGUgc3ViLU9JRCBhbG9uZS4gKi8KJiM0MzsJCQlzdWJfb2lkID0gTkNJX1BST1BfRFVBTF9TVUJfU1RPUF9VUERBVEU7CiYjNDM7CQkJbmNpX3Byb3BfY21kKGluZm8tJmd0O25kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLCAxLAomIzQzOwkJCQkgICAgICZhbXA7c3ViX29pZCk7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CQlzZXRfb3B0aW9uLmluZGV4JiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTVE9QX1VQREFURSB3aXRoIGNoZWNrc3VtICovCiYjNDM7CXN0b3BfY21kWzBdID0gTkNJX1BST1BfRFVBTF9TVUJfU1RPUF9VUERBVEU7CiYjNDM7CXB1dF91bmFsaWduZWRfbGUxNihjaGVja3N1bSwgJmFtcDtzdG9wX2NtZFsxXSk7CiYjNDM7CXJldCA9IG5jaV9wcm9wX2NtZChpbmZvLSZndDtuZGV2LCBOQ0lfUFJPUF9EVUFMX09QVElPTiwgMywgc3RvcF9jbWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7VW5hYmxlIHRvIHN0b3AgY2FsaWJyYXRpb24gZGF0YSB1cGRhdGVcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWRldl9kYmcoZGV2LCAmIzM0O2NhbGlicmF0aW9uIGRhdGEgdXBkYXRlOiBzdWNjZXNzXG4mIzM0Oyk7CiYjNDM7b3V0OgomIzQzOwlrdmZyZWUobWVyZ2VkKTsKJiM0MztvdXRfc3c6CiYjNDM7CXJlbGVhc2VfZmlybXdhcmUoc3dfZncpOwomIzQzO291dF9odzoKJiM0MzsJcmVsZWFzZV9maXJtd2FyZShod19mdyk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaCBiL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmgKaW5kZXggYmM0YmNlMmJiYzRkOS4uNDUzYTFjOWQ2NWViMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oCkBAIC00MCw2ICYjNDM7NDAsOSBAQCBzdHJ1Y3QgbmNpX3Byb3Bfc3RvcF9yZnJlZ19yc3AgewogCiAjZGVmaW5lIE5DSV9QUk9QX0ZXX0NGRwkJMHgyOAogCiYjNDM7LyogUzNOUk40ViBzaW5nbGUtYnl0ZSBGV19DRkcgcGF5bG9hZDsgMHgxMSBzZWxlY3RzIHRoZSAxOS4yIE1IeiByZWZlcmVuY2UuICovCiYjNDM7I2RlZmluZSBOQ0lfUFJPUF9GV19DRkdfQ0xLX1NQRUVECTB4MTEKJiM0MzsKIHN0cnVjdCBuY2lfcHJvcF9md19jZmdfY21kIHsKIAlfX3U4IGNsa190eXBlOwogCV9fdTggY2xrX3NwZWVkOwpAQCAtNTAsNyAmIzQzOzUzLDI1IEBAIHN0cnVjdCBuY2lfcHJvcF9md19jZmdfcnNwIHsKIAlfX3U4IHN0YXR1czsKIH07CiAKLWV4dGVybiBjb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNF07CiYjNDM7I2RlZmluZSBOQ0lfUFJPUF9EVUFMX09QVElPTgkJMHgyYQomIzQzOwomIzQzOyNkZWZpbmUgTkNJX1BST1BfRFVBTF9TVUJfR0VUX1ZFUgkweDAwCiYjNDM7I2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NVQl9TVEFSVF9VUERBVEUJMHgwMQomIzQzOyNkZWZpbmUgTkNJX1BST1BfRFVBTF9TVUJfU0VUX09QVElPTgkweDAyCiYjNDM7I2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NVQl9TVE9QX1VQREFURQkweDAzCiYjNDM7CiYjNDM7I2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRQkyNTIKJiM0MzsKJiM0MztzdHJ1Y3QgbmNpX3Byb3BfZHVhbF9zZXRfb3B0aW9uX2NtZCB7CiYjNDM7CV9fdTggc3ViX29pZDsKJiM0MzsJX191OCBpbmRleDsKJiM0MzsJX191OCBkYXRhW05DSV9QUk9QX0RVQUxfU0VDVElPTl9TSVpFXTsKJiM0Mzt9OwomIzQzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNV07CiBpbnQgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sIGNvbnN0IGNoYXIgKmZ3X25hbWUpOwomIzQzO2ludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbChzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLAomIzQzOwkJCQkgIGNvbnN0IGNoYXIgKmh3X25hbWUsIGNvbnN0IGNoYXIgKnN3X25hbWUpOwomIzQzO2ludCBzM2Z3cm41X25jaV9jbGtfY2ZnKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8pOwogCiAjZW5kaWYgLyogX19MT0NBTF9TM0ZXUk41X05DSV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvczNmd3JuNS9zM2Z3cm41LmggYi9kcml2ZXJzL25mYy9zM2Z3cm41L3MzZndybjUuaAppbmRleCAyYjQ5MjIzNjA5MGI4Li42M2Y2NzlmMTcxNjY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L3MzZndybjUuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25mYy9zM2Z3cm41L3MzZndybjUuaApAQCAtMjEsNiAmIzQzOzIxLDEzIEBAIGVudW0gczNmd3JuNV9tb2RlIHsKIAlTM0ZXUk41X01PREVfRlcsCiB9OwogCiYjNDM7ZW51bSBzM2Z3cm41X3ZhcmlhbnQgewomIzQzOwkvKiBTM0ZXUk41IC8gUzNGV1JOODI6IGZpcm13YXJlIGlzIGRvd25sb2FkZWQgYnkgdGhpcyBkcml2ZXIgKi8KJiM0MzsJUzNGV1JONV9WQVJJQU5UX0ZXREwsCiYjNDM7CS8qIFMzTlJONFY6IG5vIGZpcm13YXJlIGRvd25sb2FkOyBGV19DRkcgJiM0MzsgRFVBTF9PUFRJT04gYnJpbmctdXAgKi8KJiM0MzsJUzNGV1JONV9WQVJJQU5UX1MzTlJONFYsCiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgewogCXZvaWQgKCpzZXRfd2FrZSkodm9pZCAqaWQsIGJvb2wgc2xlZXApOwogCXZvaWQgKCpzZXRfbW9kZSkodm9pZCAqaWQsIGVudW0gczNmd3JuNV9tb2RlKTsKQEAgLTM2LDYgJiM0Mzs0MywxMSBAQCBzdHJ1Y3QgczNmd3JuNV9pbmZvIHsKIAljb25zdCBzdHJ1Y3QgczNmd3JuNV9waHlfb3BzICpwaHlfb3BzOwogCiAJc3RydWN0IHMzZndybjVfZndfaW5mbyBmd19pbmZvOwomIzQzOwllbnVtIHMzZndybjVfdmFyaWFudCB2YXJpYW50OwomIzQzOwomIzQzOwkvKiBMYXN0IERVQUxfT1BUSU9OIHJlc3BvbnNlIHBheWxvYWQgKEdFVF9WRVIgY2FycmllcyB2ZXJzaW9ucykuICovCiYjNDM7CXU4IGR1YWxfcnNwWzMyXTsKJiM0MzsJdTggZHVhbF9yc3BfbGVuOwogCiAJc3RydWN0IG11dGV4IG11dGV4OwogfTsKQEAgLTc4LDcgJiM0Mzs5MCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHMzZndybjVfd3JpdGUoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIH0KIAogaW50IHMzZndybjVfcHJvYmUoc3RydWN0IG5jaV9kZXYgKipuZGV2LCB2b2lkICpwaHlfaWQsIHN0cnVjdCBkZXZpY2UgKnBkZXYsCi0JY29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcyk7CiYjNDM7CWNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHMsIGVudW0gczNmd3JuNV92YXJpYW50IHZhcmlhbnQpOwogdm9pZCBzM2Z3cm41X3JlbW92ZShzdHJ1Y3QgbmNpX2RldiAqbmRldik7CiAKIGludCBzM2Z3cm41X3JlY3ZfZnJhbWUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L3VhcnQuYyBiL2RyaXZlcnMvbmZjL3MzZndybjUvdWFydC5jCmluZGV4IDhmMTQyYTI1NTEwMTYuLjc1Mzk3YzNkYmM1OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvdWFydC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmZjL3MzZndybjUvdWFydC5jCkBAIC0xMzYsNyAmIzQzOzEzNiw3IEBAIHN0YXRpYyBpbnQgczNmd3JuODJfdWFydF9wcm9iZShzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2KQogCX0KIAogCXJldCA9IHMzZndybjVfcHJvYmUoJmFtcDtwaHktJmd0O2NvbW1vbi5uZGV2LCBwaHksICZhbXA7cGh5LSZndDtzZXJfZGV2LSZndDtkZXYsCi0JCQkgICAgJmFtcDt1YXJ0X3BoeV9vcHMpOwomIzQzOwkJCSAgICAmYW1wO3VhcnRfcGh5X29wcywgUzNGV1JONV9WQVJJQU5UX0ZXREwpOwogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIGVycl9zZXJkZXY7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5ODEKCQkJCQkJCW91dHB1dDogMjQ3CgkJCQkJCQl0aG91Z2h0czogMjc3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBSZXZpZXc6IE5GQyBEcml2ZXIgUGF0Y2ggLSBTM05STjRWIFN1cHBvcnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBzdXBwb3J0IGZvciBhIG5ldyBORkMgY2hpcCwgUzNOUk40ViwgaW50byB0aGUgYHMzZndybjVgIGRyaXZlci4gTXkgaW5pdGlhbCBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc28gdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmb2N1cy4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBhZGRpbmcgZGV2aWNlIHRyZWUgYmluZGluZ3MsIHVwZGF0aW5nIHRoZSBkcml2ZXIgbG9naWMsIGludHJvZHVjaW5nIG5ldyBOQ0kgY29tbWFuZHMgKEZXX0NGRywgRFVBTF9PUFRJT04pLCBhbmQgaGFuZGxpbmcgZmlybXdhcmUgbG9hZGluZyBhbmQgY2FsaWJyYXRpb24gZGF0YS4gSSYjMzk7bSBzZWVpbmcgYHMzZndybjVfbmNpX2R1YWxfcnNwYCB3aGljaCBjb3BpZXMgZGF0YSBmcm9tIGFuIGBza2JgIGludG8gYGluZm8tJmd0O2R1YWxfcnNwYC4gIFRoZSBjb2RlIHVzZXMgYHNrYi0mZ3Q7ZGF0YVswXWAgZm9yIHN0YXR1cywgYW5kIEkgaW1tZWRpYXRlbHkgbm90ZSB0aGF0IGlmIGBza2ItJmd0O2xlbmAgaXMgemVybywgd2UgKmNvdWxkKiBoYXZlIGFuIG91dC1vZi1ib3VuZHMgcmVhZCwgYnV0IHRoYXQmIzM5O3MgYW4gKm91dC1vZi1ib3VuZHMqIHJlYWQsIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeS4gS0FTQU4gc2hvdWxkIGZsYWcgdGhhdCBvbmUsIGFuZCBpZiBpdCYjMzk7cyBoaXQsIGl0JiMzOTtzIG5vdCBhIEtNU0FOIHByb2JsZW0uCgpOZXh0LCBgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWxgIHVzZXMgYGluZm8tJmd0O2R1YWxfcnNwYCwgYnV0IEkmIzM5O20gcmVsaWV2ZWQgdG8gc2VlIHRoYXQgdGhlIGNvZGUgY2hlY2tzIGBpbmZvLSZndDtkdWFsX3JzcF9sZW5gIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIGRhdGEsIGF2b2lkaW5nIGFueSB1bmluaXRpYWxpemVkIHJlYWQgY29uY2VybnMuCgpMb29raW5nIGNsb3NlciBhdCBgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWxgIGFnYWluLCBJIHNlZSB0aGUgc3RhY2sgYWxsb2NhdGVkIGBzZXRfb3B0aW9uYCBzdHJ1Y3QsIHdoaWNoIGlzIG5vdCB6ZXJvLWluaXRpYWxpemVkLiBJJiMzOTttIGNoZWNraW5nIGl0IGNhcmVmdWxseSwgYXMgc3RhY2sgYWxsb2NhdGlvbiBpcyB1c3VhbGx5IGEgc291cmNlIG9mIHByb2JsZW1zLiBUaGUgY29kZSB0aGVuIGNvcGllcyBgbGVuYCBieXRlcyBmcm9tIGBtZXJnZWRgIGludG8gYHNldF9vcHRpb24uZGF0YWAuICBJbXBvcnRhbnRseSwgaXQgYXBwZWFycyBvbmx5IGBsZW4gJiM0MzsgMmAgYnl0ZXMgb2YgYHNldF9vcHRpb25gIGFyZSBzZW50IHRvIHRoZSBkZXZpY2UsIHRoZSBjb2RlIGNoZWNrcyB0byBlbnN1cmUgb25seSBpbml0aWFsaXplZCBkYXRhIGlzIHNlbnQsIHByZXZlbnRpbmcgYW55IHBvdGVudGlhbCBsZWFrLiAgSSBjb25maXJtZWQgdGhhdCB0aGUgc3RydWN0dXJlIGlzIHBhY2tlZCwgd2hpY2ggbWVhbnMgbm8gcGFkZGluZyBpcyBhZGRlZCwgc28gaXQmIzM5O3MgYWxsIGdvb2QuCgpJJiMzOTttIGNoZWNraW5nIHRoZSBgc3RvcF9jbWRgLCBgczNmd3JuNV9uY2lfY2xrX2NmZ2AgYW5kIHRoZSBvdGhlciBwYXJ0cyBvZiB0aGUgcm91dGluZSwgYW5kIHRoZXkgYXBwZWFyIGZ1bGx5IGluaXRpYWxpemVkLgoKSSYjMzk7bSBydW5uaW5nIHRocm91Z2ggdGhlIHBvdGVudGlhbCBwcm9ibGVtYXRpYyBzcG90cyBhZ2Fpbi4gIEkmIzM5O3ZlIGNoZWNrZWQgdGhlIG1lbW9yeSBzZW50IHRvIHRoZSBkZXZpY2UgYW5kIGNvbmZpcm1lZCBpdCYjMzk7cyBmdWxseSBpbml0aWFsaXplZCwgSSBjaGVja2VkIHRoYXQgaWYgdGhlIGNvZGUgcmVhZHMgbWVtb3J5IGl0JiMzOTtzIGFsd2F5cyBoYW5kbGVkIHNhZmVseSwgSSYjMzk7dmUgY2hlY2tlZCB0aGUgdXNhZ2Ugb2YgYGluZm8tJmd0O2R1YWxfcnNwYCwgd2hpY2ggaXMgdXNlZCwgYW5kIGxlbmd0aCBjaGVja2VkLgoKSW4gc3VtbWFyeSwgSSBjYW4mIzM5O3QgaWRlbnRpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcyBpbiB0aGlzIHBhdGNoLiAgVGhlIGNvZGUgc2VlbXMgd2VsbC1zdHJ1Y3R1cmVkLCBhbmQgYWxsIG1lbW9yeSB0cmFuc2ZlcnMgYXBwZWFyIHNhZmUuIFRoZSBPT0IgcG90ZW50aWFsIGluIGBza2ItJmd0O2RhdGFbMF1gIGlzIGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIHNwZWNpYWxpemVkIEtNU0FOIGZ1enppbmcgY2FtcGFpZ24gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGEgbmV3IE5GQyBjaGlwIHZhcmlhbnQgKFMzTlJONFYpIGFuZCBhZGRzIG5ldyBOQ0kgY29tbWFuZHMgZm9yIGZpcm13YXJlIGNvbmZpZ3VyYXRpb24gYW5kIGNhbGlicmF0aW9uIGRhdGEgdXBkYXRlcy4gQWxsIGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHRoZSBkZXZpY2UgKHN1Y2ggYXMgYHNldF9vcHRpb25gLCBgc3RvcF9jbWRgLCBhbmQgYHN1Yl9vaWRgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBgbmNpX3Byb3BfY21kYC4gVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSBzZW50IGlzIGNhcmVmdWxseSBjYWxjdWxhdGVkIHRvIG1hdGNoIHRoZSBpbml0aWFsaXplZCBieXRlcywgcHJldmVudGluZyBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgZnJvbSBiZWluZyBzZW50LiBEYXRhIHJlY2VpdmVkIGZyb20gdGhlIGRldmljZSBpcyBjb3BpZWQgaW50byBgaW5mby1cdTAwM2VkdWFsX3JzcGAgd2l0aCBpdHMgbGVuZ3RoIHRyYWNrZWQgYnkgYGluZm8tXHUwMDNlZHVhbF9yc3BfbGVuYCwgYW5kIGJvdW5kcyBjaGVja3MgYXJlIHBlcmZvcm1lZCBiZWZvcmUgYWNjZXNzaW5nIGl0LiBXaGlsZSB0aGVyZSBpcyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgaWYgYHNrYi1cdTAwM2VsZW5gIGlzIDAgaW4gYHMzZndybjVfbmNpX2R1YWxfcnNwYCAoYHNrYi1cdTAwM2VkYXRhWzBdYCksIHRoaXMgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgdG8gdXNlciBzcGFjZSBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB1c2VkIGluIGNvbnRyb2wgZmxvdy4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byB0ZXN0IHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGEgbmV3IE5GQyBjaGlwIHZhcmlhbnQgKFMzTlJONFYpIGFuZCBhZGRzIG5ldyBOQ0kgY29tbWFuZHMgZm9yIGZpcm13YXJlIGNvbmZpZ3VyYXRpb24gYW5kIGNhbGlicmF0aW9uIGRhdGEgdXBkYXRlcy4gQWxsIGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHRoZSBkZXZpY2UgKHN1Y2ggYXMgYHNldF9vcHRpb25gLCBgc3RvcF9jbWRgLCBhbmQgYHN1Yl9vaWRgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBgbmNpX3Byb3BfY21kYC4gVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSBzZW50IGlzIGNhcmVmdWxseSBjYWxjdWxhdGVkIHRvIG1hdGNoIHRoZSBpbml0aWFsaXplZCBieXRlcywgcHJldmVudGluZyBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgZnJvbSBiZWluZyBzZW50LiBEYXRhIHJlY2VpdmVkIGZyb20gdGhlIGRldmljZSBpcyBjb3BpZWQgaW50byBgaW5mby1cdTAwM2VkdWFsX3JzcGAgd2l0aCBpdHMgbGVuZ3RoIHRyYWNrZWQgYnkgYGluZm8tXHUwMDNlZHVhbF9yc3BfbGVuYCwgYW5kIGJvdW5kcyBjaGVja3MgYXJlIHBlcmZvcm1lZCBiZWZvcmUgYWNjZXNzaW5nIGl0LiBXaGlsZSB0aGVyZSBpcyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgaWYgYHNrYi1cdTAwM2VsZW5gIGlzIDAgaW4gYHMzZndybjVfbmNpX2R1YWxfcnNwYCAoYHNrYi1cdTAwM2VkYXRhWzBdYCksIHRoaXMgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgdG8gdXNlciBzcGFjZSBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB1c2VkIGluIGNvbnRyb2wgZmxvdy4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byB0ZXN0IHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIyOjM1OjI3Ljk4Njg1MzkzMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NDM0ODg2MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GQ19OQ0lcIixcbiAgICBcIk5GQ19TM0ZXUk41X0kyQ1wiLFxuICAgIFwiTkZDX1MzRldSTjgyX1VBUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbFwiLFxuICAgIFwiczNmd3JuNV9uY2lfY2xrX2NmZ1wiLFxuICAgIFwiczNmd3JuNV9uY2lfZHVhbF9yc3BcIixcbiAgICBcInMzZndybjVfbmNpX2luaXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgYSBuZXcgTkZDIGNoaXAgdmFyaWFudCAoUzNOUk40VikgYW5kIGFkZHMgbmV3IE5DSSBjb21tYW5kcyBmb3IgZmlybXdhcmUgY29uZmlndXJhdGlvbiBhbmQgY2FsaWJyYXRpb24gZGF0YSB1cGRhdGVzLiBBbGwgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdGhlIGRldmljZSAoc3VjaCBhcyBgc2V0X29wdGlvbmAsIGBzdG9wX2NtZGAsIGFuZCBgc3ViX29pZGApIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIGBuY2lfcHJvcF9jbWRgLiBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHNlbnQgaXMgY2FyZWZ1bGx5IGNhbGN1bGF0ZWQgdG8gbWF0Y2ggdGhlIGluaXRpYWxpemVkIGJ5dGVzLCBwcmV2ZW50aW5nIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSBmcm9tIGJlaW5nIHNlbnQuIERhdGEgcmVjZWl2ZWQgZnJvbSB0aGUgZGV2aWNlIGlzIGNvcGllZCBpbnRvIGBpbmZvLVxcdTAwM2VkdWFsX3JzcGAgd2l0aCBpdHMgbGVuZ3RoIHRyYWNrZWQgYnkgYGluZm8tXFx1MDAzZWR1YWxfcnNwX2xlbmAsIGFuZCBib3VuZHMgY2hlY2tzIGFyZSBwZXJmb3JtZWQgYmVmb3JlIGFjY2Vzc2luZyBpdC4gV2hpbGUgdGhlcmUgaXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIGlmIGBza2ItXFx1MDAzZWxlbmAgaXMgMCBpbiBgczNmd3JuNV9uY2lfZHVhbF9yc3BgIChgc2tiLVxcdTAwM2VkYXRhWzBdYCksIHRoaXMgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgdG8gdXNlciBzcGFjZSBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB1c2VkIGluIGNvbnRyb2wgZmxvdy4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byB0ZXN0IHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgczNucm40diB2YXJpYW50IHRvIHRoZSBzM2Z3cm41IE5GQyBkcml2ZXIuIEl0IGludHJvZHVjZXMgbmV3IE5DSSBwcm9wcmlldGFyeSBjb21tYW5kcyBhbmQgcmVzcG9uc2VzLCBhbmQgYSBuZXcgUkYgY29uZmlndXJhdGlvbiByb3V0aW5lLiBUaGUgZHJpdmVyIGlzIHJlYWNoYWJsZSB2aWEgdGhlIE5DSSBpbnRlcmZhY2UgYW5kIEkyQy9VQVJUIGJ1c2VzLCB3aGljaCBjYW4gYmUgZnV6emVkIHVzaW5nIHZpcnR1YWwgZGV2aWNlcyBvciBzeXprYWxsZXIncyBOQ0kgc3VwcG9ydC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjI6MzU6MjcuOTg2ODYwNzAyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODc4NDQxMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3YjQwMjBhYWUwNTI3NmQ0YTQ3YzNmYmFkNzE1M2Q3ZGEzMmVmYjkxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDExIDIyOjM1OjI3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3NhbXN1bmcsczNmd3JuNS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9uZmMvc2Ftc3VuZyxzM2Z3cm41LnlhbWxcXG5pbmRleCAxMmJhZWU0NTc1MmM3Li40MGE2OTQ2NjgwMmJiIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3NhbXN1bmcsczNmd3JuNS55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9uZmMvc2Ftc3VuZyxzM2Z3cm41LnlhbWxcXG5AQCAtMTQsNiArMTQsNyBAQCBwcm9wZXJ0aWVzOlxcbiAgICAgZW51bTpcXG4gICAgICAgLSBzYW1zdW5nLHMzZndybjUtaTJjXFxuICAgICAgIC0gc2Ftc3VuZyxzM2Z3cm44MlxcbisgICAgICAtIHNhbXN1bmcsczNucm40dlxcbiBcXG4gICBlbi1ncGlvczpcXG4gICAgIG1heEl0ZW1zOiAxXFxuQEAgLTI5LDYgKzMwLDkgQEAgcHJvcGVydGllczpcXG4gICBjbG9ja3M6XFxuICAgICBtYXhJdGVtczogMVxcbiBcXG4rICBwdmRkLXN1cHBseTpcXG4rICAgIGRlc2NyaXB0aW9uOiBQVkREIHBvd2VyIHN1cHBseVxcbitcXG4gICB3YWtlLWdwaW9zOlxcbiAgICAgbWF4SXRlbXM6IDFcXG4gICAgIGRlc2NyaXB0aW9uOlxcbkBAIC01OCwxMiArNjIsMjUgQEAgYWxsT2Y6XFxuICAgICAgIHByb3BlcnRpZXM6XFxuICAgICAgICAgY29tcGF0aWJsZTpcXG4gICAgICAgICAgIGNvbnRhaW5zOlxcbi0gICAgICAgICAgICBjb25zdDogc2Ftc3VuZyxzM2Z3cm41LWkyY1xcbisgICAgICAgICAgICBlbnVtOlxcbisgICAgICAgICAgICAgIC0gc2Ftc3VuZyxzM2Z3cm41LWkyY1xcbisgICAgICAgICAgICAgIC0gc2Ftc3VuZyxzM25ybjR2XFxuICAgICB0aGVuOlxcbiAgICAgICByZXF1aXJlZDpcXG4gICAgICAgICAtIGludGVycnVwdHNcXG4gICAgICAgICAtIHJlZ1xcbiBcXG4rICAjIERlcGxveWVkIERUcyBmb3IgdGhlIG9sZGVyIHBhcnRzIG5ldmVyIGRlc2NyaWJlZCBhIHN1cHBseSwgc28gUFZERCBpc1xcbisgICMgb25seSByZXF1aXJlZCBmb3IgdGhlIG5ldyBkZXZpY2UuXFxuKyAgLSBpZjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICBjb21wYXRpYmxlOlxcbisgICAgICAgICAgY29udGFpbnM6XFxuKyAgICAgICAgICAgIGNvbnN0OiBzYW1zdW5nLHMzbnJuNHZcXG4rICAgIHRoZW46XFxuKyAgICAgIHJlcXVpcmVkOlxcbisgICAgICAgIC0gcHZkZC1zdXBwbHlcXG4rXFxuIGV4YW1wbGVzOlxcbiAgIC0gfFxcbiAgICAgI2luY2x1ZGUgXFx1MDAzY2R0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbWlsb3MtZmFpcnBob25lLWZwNi5kdHMgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbWlsb3MtZmFpcnBob25lLWZwNi5kdHNcXG5pbmRleCBlYmRjYTBlMmQyZjNhLi5iZGJhODQ4Mjc1ZGI0IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9taWxvcy1mYWlycGhvbmUtZnA2LmR0c1xcbisrKyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9taWxvcy1mYWlycGhvbmUtZnA2LmR0c1xcbkBAIC02MDEsOSArNjAxLDIyIEBAIFxcdTAwMjZnY2Mge1xcbiB9O1xcbiBcXG4gXFx1MDAyNmkyYzEge1xcbi1cXHQvKiBTYW1zdW5nIE5GQyBAIDB4MjcgKi9cXG4tXFxuIFxcdHN0YXR1cyA9IFxcXCJva2F5XFxcIjtcXG4rXFxuK1xcdG5mY0AyNyB7XFxuK1xcdFxcdGNvbXBhdGlibGUgPSBcXFwic2Ftc3VuZyxzM25ybjR2XFxcIjtcXG4rXFx0XFx0cmVnID0gXFx1MDAzYzB4MjdcXHUwMDNlO1xcbitcXG4rXFx0XFx0aW50ZXJydXB0cy1leHRlbmRlZCA9IFxcdTAwM2NcXHUwMDI2dGxtbSAzMSBJUlFfVFlQRV9FREdFX1JJU0lOR1xcdTAwM2U7XFxuK1xcdFxcdGVuLWdwaW9zID0gXFx1MDAzY1xcdTAwMjZ0bG1tIDU2IEdQSU9fQUNUSVZFX0hJR0hcXHUwMDNlO1xcbitcXHRcXHR3YWtlLWdwaW9zID0gXFx1MDAzY1xcdTAwMjZ0bG1tIDcgR1BJT19BQ1RJVkVfSElHSFxcdTAwM2U7XFxuK1xcdFxcdGNsb2NrcyA9IFxcdTAwM2NcXHUwMDI2cnBtaGNjIFJQTUhfTE5fQkJfQ0xLMlxcdTAwM2U7XFxuK1xcbitcXHRcXHRwdmRkLXN1cHBseSA9IFxcdTAwM2NcXHUwMDI2dnJlZ19sMjBiXFx1MDAzZTtcXG4rXFxuK1xcdFxcdHBpbmN0cmwtMCA9IFxcdTAwM2NcXHUwMDI2bmZjX2RlZmF1bHRcXHUwMDNlO1xcbitcXHRcXHRwaW5jdHJsLW5hbWVzID0gXFxcImRlZmF1bHRcXFwiO1xcbitcXHR9O1xcbiB9O1xcbiBcXG4gXFx1MDAyNmkyYzMge1xcbkBAIC04MjUsNiArODM4LDIyIEBAIFxcdTAwMjZ0bG1tIHtcXG4gXFx0XFx0XFx0ICAgICAgIFxcdTAwM2MxMyAxXFx1MDAzZSwgLyogTkMgKi9cXG4gXFx0XFx0XFx0ICAgICAgIFxcdTAwM2M2MyAyXFx1MDAzZTsgLyogV0xBTiBVQVJUICovXFxuIFxcbitcXHRuZmNfZGVmYXVsdDogbmZjLWRlZmF1bHQtc3RhdGUge1xcbitcXHRcXHRpcnEtcGlucyB7XFxuK1xcdFxcdFxcdHBpbnMgPSBcXFwiZ3BpbzMxXFxcIjtcXG4rXFx0XFx0XFx0ZnVuY3Rpb24gPSBcXFwiZ3Bpb1xcXCI7XFxuK1xcdFxcdFxcdGRyaXZlLXN0cmVuZ3RoID0gXFx1MDAzYzJcXHUwMDNlO1xcbitcXHRcXHRcXHRiaWFzLWRpc2FibGU7XFxuK1xcdFxcdH07XFxuK1xcbitcXHRcXHRwZC1waW5zIHtcXG4rXFx0XFx0XFx0cGlucyA9IFxcXCJncGlvNTZcXFwiO1xcbitcXHRcXHRcXHRmdW5jdGlvbiA9IFxcXCJncGlvXFxcIjtcXG4rXFx0XFx0XFx0ZHJpdmUtc3RyZW5ndGggPSBcXHUwMDNjMlxcdTAwM2U7XFxuK1xcdFxcdFxcdGJpYXMtcHVsbC11cDtcXG4rXFx0XFx0fTtcXG4rXFx0fTtcXG4rXFxuIFxcdHNkYzJfY2FyZF9kZXRfbjogc2RjMi1jYXJkLWRldC1zdGF0ZSB7XFxuIFxcdFxcdHBpbnMgPSBcXFwiZ3BpbzY1XFxcIjtcXG4gXFx0XFx0ZnVuY3Rpb24gPSBcXFwiZ3Bpb1xcXCI7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jIGIvZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmNcXG5pbmRleCBhZjBmYThiZDk3MGI0Li41NjM0NzBjYjkyOGRlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jXFxuKysrIGIvZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmNcXG5AQCAtMjAsNiArMjAsOSBAQFxcbiBcXHRcXHRcXHRcXHRORkNfUFJPVE9fSVNPMTQ0NDNfQl9NQVNLIHwgXFxcXFxcbiBcXHRcXHRcXHRcXHRORkNfUFJPVE9fSVNPMTU2OTNfTUFTSylcXG4gXFxuKyNkZWZpbmUgUzNOUk40Vl9IV1JFR19OQU1FXFx0XFxcInNhbXN1bmcvczNucm40di9od3JlZy5iaW5cXFwiXFxuKyNkZWZpbmUgUzNOUk40Vl9TV1JFR19OQU1FXFx0XFxcInNhbXN1bmcvczNucm40di9zd3JlZy5iaW5cXFwiXFxuK1xcbiBzdGF0aWMgaW50IHMzZndybjVfZmlybXdhcmVfaW5pdChzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvKVxcbiB7XFxuIFxcdHN0cnVjdCBzM2Z3cm41X2Z3X2luZm8gKmZ3X2luZm8gPSBcXHUwMDI2aW5mby1cXHUwMDNlZndfaW5mbztcXG5AQCAtNzQsNiArNzcsMjIgQEAgc3RhdGljIGludCBzM2Z3cm41X2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHMzZndybjVfbmNpX2luaXQoc3RydWN0IG5jaV9kZXYgKm5kZXYpXFxuK3tcXG4rXFx0c3RydWN0IHMzZndybjVfaW5mbyAqaW5mbyA9IG5jaV9nZXRfZHJ2ZGF0YShuZGV2KTtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRpZiAoaW5mby1cXHUwMDNldmFyaWFudCA9PSBTM0ZXUk41X1ZBUklBTlRfUzNOUk40Vikge1xcbitcXHRcXHRyZXQgPSBzM2Z3cm41X25jaV9jbGtfY2ZnKGluZm8pO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2bmRldi1cXHUwMDNlbmZjX2Rldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXFwiZmFpbGVkIHRvIGNvbmZpZ3VyZSB0aGUgcmVmZXJlbmNlIGNsb2NrOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0cmV0KTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBzM2Z3cm41X25jaV9vcGVuKHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8gPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XFxuQEAgLTEyNyw2ICsxNDYsMTUgQEAgc3RhdGljIGludCBzM2Z3cm41X25jaV9wb3N0X3NldHVwKHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxcbiBcXHRzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4rXFx0aWYgKGluZm8tXFx1MDAzZXZhcmlhbnQgPT0gUzNGV1JONV9WQVJJQU5UX1MzTlJONFYpIHtcXG4rXFx0XFx0cmV0ID0gczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWwoaW5mbywgUzNOUk40Vl9IV1JFR19OQU1FLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgUzNOUk40Vl9TV1JFR19OQU1FKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZuZGV2LVxcdTAwM2VuZmNfZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdCBcXFwiUkYgY2FsaWJyYXRpb24gZGF0YSB1cGRhdGUgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChzM2Z3cm41X2Zpcm13YXJlX2luaXQoaW5mbykpIHtcXG4gXFx0XFx0Ly9za2lwIGJvb3Rsb2FkZXIgbW9kZVxcbiBcXHRcXHRyZXR1cm4gMDtcXG5AQCAtMTQ5LDYgKzE3Nyw3IEBAIHN0YXRpYyBpbnQgczNmd3JuNV9uY2lfcG9zdF9zZXR1cChzdHJ1Y3QgbmNpX2RldiAqbmRldilcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuY2lfb3BzIHMzZndybjVfbmNpX29wcyA9IHtcXG4rXFx0LmluaXQgPSBzM2Z3cm41X25jaV9pbml0LFxcbiBcXHQub3BlbiA9IHMzZndybjVfbmNpX29wZW4sXFxuIFxcdC5jbG9zZSA9IHMzZndybjVfbmNpX2Nsb3NlLFxcbiBcXHQuc2VuZCA9IHMzZndybjVfbmNpX3NlbmQsXFxuQEAgLTE1OCw3ICsxODcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5jaV9vcHMgczNmd3JuNV9uY2lfb3BzID0ge1xcbiB9O1xcbiBcXG4gaW50IHMzZndybjVfcHJvYmUoc3RydWN0IG5jaV9kZXYgKipuZGV2LCB2b2lkICpwaHlfaWQsIHN0cnVjdCBkZXZpY2UgKnBkZXYsXFxuLVxcdGNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHMpXFxuK1xcdGNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHMsIGVudW0gczNmd3JuNV92YXJpYW50IHZhcmlhbnQpXFxuIHtcXG4gXFx0c3RydWN0IHMzZndybjVfaW5mbyAqaW5mbztcXG4gXFx0aW50IHJldDtcXG5AQCAtMTcwLDYgKzE5OSw3IEBAIGludCBzM2Z3cm41X3Byb2JlKHN0cnVjdCBuY2lfZGV2ICoqbmRldiwgdm9pZCAqcGh5X2lkLCBzdHJ1Y3QgZGV2aWNlICpwZGV2LFxcbiBcXHRpbmZvLVxcdTAwM2VwaHlfaWQgPSBwaHlfaWQ7XFxuIFxcdGluZm8tXFx1MDAzZXBkZXYgPSBwZGV2O1xcbiBcXHRpbmZvLVxcdTAwM2VwaHlfb3BzID0gcGh5X29wcztcXG4rXFx0aW5mby1cXHUwMDNldmFyaWFudCA9IHZhcmlhbnQ7XFxuIFxcdG11dGV4X2luaXQoXFx1MDAyNmluZm8tXFx1MDAzZW11dGV4KTtcXG4gXFxuIFxcdHMzZndybjVfc2V0X21vZGUoaW5mbywgUzNGV1JONV9NT0RFX0NPTEQpO1xcbkBAIC0yMjUsMyArMjU1LDUgQEAgRVhQT1JUX1NZTUJPTChzM2Z3cm41X3JlY3ZfZnJhbWUpO1xcbiBNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuIE1PRFVMRV9ERVNDUklQVElPTihcXFwiU2Ftc3VuZyBTM0ZXUk41IE5GQyBkcml2ZXJcXFwiKTtcXG4gTU9EVUxFX0FVVEhPUihcXFwiUm9iZXJ0IEJhbGR5Z2EgXFx1MDAzY3IuYmFsZHlnYUBzYW1zdW5nLmNvbVxcdTAwM2VcXFwiKTtcXG4rTU9EVUxFX0ZJUk1XQVJFKFMzTlJONFZfSFdSRUdfTkFNRSk7XFxuK01PRFVMRV9GSVJNV0FSRShTM05STjRWX1NXUkVHX05BTUUpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jIGIvZHJpdmVycy9uZmMvczNmd3JuNS9pMmMuY1xcbmluZGV4IDRiYTc2MjYxMTcxMTguLjg4NDQyMGFjODNiNWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS9pMmMuY1xcbisrKyBiL2RyaXZlcnMvbmZjL3MzZndybjUvaTJjLmNcXG5AQCAtMTEsMTMgKzExLDEyIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ncGlvL2NvbnN1bWVyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvbmZjL25mYy5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcInBoeV9jb21tb24uaFxcXCJcXG4gXFxuLSNkZWZpbmUgUzNGV1JONV9JMkNfRFJJVkVSX05BTUUgXFxcInMzZndybjVfaTJjXFxcIlxcbi1cXG4gc3RydWN0IHMzZndybjVfaTJjX3BoeSB7XFxuIFxcdHN0cnVjdCBwaHlfY29tbW9uIGNvbW1vbjtcXG4gXFx0c3RydWN0IGkyY19jbGllbnQgKmkyY19kZXY7XFxuQEAgLTE0Niw2ICsxNDUsNyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgczNmd3JuNV9pMmNfaXJxX3RocmVhZF9mbihpbnQgaXJxLCB2b2lkICpwaHlfaWQpXFxuIFxcbiBzdGF0aWMgaW50IHMzZndybjVfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXFxuIHtcXG4rXFx0ZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudDtcXG4gXFx0c3RydWN0IHMzZndybjVfaTJjX3BoeSAqcGh5O1xcbiBcXHRpbnQgcmV0O1xcbiBcXG5AQCAtMTYwLDYgKzE2MCwxMSBAQCBzdGF0aWMgaW50IHMzZndybjVfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXFxuIFxcdHBoeS1cXHUwMDNlaTJjX2RldiA9IGNsaWVudDtcXG4gXFx0aTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgcGh5KTtcXG4gXFxuK1xcdHJldCA9IGRldm1fcmVndWxhdG9yX2dldF9lbmFibGUoXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2LCBcXFwicHZkZFxcXCIpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYsIHJldCxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIGVuYWJsZSBwdmRkXFxcXG5cXFwiKTtcXG4rXFxuIFxcdHBoeS1cXHUwMDNlY29tbW9uLmdwaW9fZW4gPSBkZXZtX2dwaW9kX2dldChcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYsIFxcXCJlblxcXCIsIEdQSU9EX09VVF9ISUdIKTtcXG4gXFx0aWYgKElTX0VSUihwaHktXFx1MDAzZWNvbW1vbi5ncGlvX2VuKSlcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIocGh5LVxcdTAwM2Vjb21tb24uZ3Bpb19lbik7XFxuQEAgLTE3OSwxNCArMTg0LDE1IEBAIHN0YXRpYyBpbnQgczNmd3JuNV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4gXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2LCBQVFJfRVJSKHBoeS1cXHUwMDNlY2xrKSxcXG4gXFx0XFx0XFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIGdldCBjbG9ja1xcXFxuXFxcIik7XFxuIFxcbitcXHR2YXJpYW50ID0gKHVpbnRwdHJfdClpMmNfZ2V0X21hdGNoX2RhdGEoY2xpZW50KTtcXG4gXFx0cmV0ID0gczNmd3JuNV9wcm9iZShcXHUwMDI2cGh5LVxcdTAwM2Vjb21tb24ubmRldiwgcGh5LCBcXHUwMDI2cGh5LVxcdTAwM2VpMmNfZGV2LVxcdTAwM2VkZXYsXFxuLVxcdFxcdFxcdCAgICBcXHUwMDI2aTJjX3BoeV9vcHMpO1xcbitcXHRcXHRcXHQgICAgXFx1MDAyNmkyY19waHlfb3BzLCB2YXJpYW50KTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldiwgcGh5LVxcdTAwM2VpMmNfZGV2LVxcdTAwM2VpcnEsIE5VTEwsXFxuIFxcdFxcdHMzZndybjVfaTJjX2lycV90aHJlYWRfZm4sIElSUUZfT05FU0hPVCxcXG4tXFx0XFx0UzNGV1JONV9JMkNfRFJJVkVSX05BTUUsIHBoeSk7XFxuK1xcdFxcdFxcXCJzM2Z3cm41X2kyY1xcXCIsIHBoeSk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gczNmd3JuNV9yZW1vdmU7XFxuIFxcbkBAIC0yMDUsMjEgKzIxMSwyNSBAQCBzdGF0aWMgdm9pZCBzM2Z3cm41X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHMzZndybjVfaTJjX2lkX3RhYmxlW10gPSB7XFxuLVxcdHsgLm5hbWUgPSBTM0ZXUk41X0kyQ19EUklWRVJfTkFNRSB9LFxcbitcXHR7IC5uYW1lID0gXFxcInMzZndybjVfaTJjXFxcIiwgLmRyaXZlcl9kYXRhID0gUzNGV1JONV9WQVJJQU5UX0ZXREwgfSxcXG4rXFx0eyAubmFtZSA9IFxcXCJzM25ybjR2XFxcIiwgLmRyaXZlcl9kYXRhID0gUzNGV1JONV9WQVJJQU5UX1MzTlJONFYgfSxcXG4gXFx0eyB9XFxuIH07XFxuIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzM2Z3cm41X2kyY19pZF90YWJsZSk7XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9zM2Z3cm41X2kyY19tYXRjaFtdID0ge1xcbi1cXHR7IC5jb21wYXRpYmxlID0gXFxcInNhbXN1bmcsczNmd3JuNS1pMmNcXFwiIH0sXFxuK1xcdHsgLmNvbXBhdGlibGUgPSBcXFwic2Ftc3VuZyxzM2Z3cm41LWkyY1xcXCIsXFxuK1xcdCAgLmRhdGEgPSAodm9pZCAqKVMzRldSTjVfVkFSSUFOVF9GV0RMIH0sXFxuK1xcdHsgLmNvbXBhdGlibGUgPSBcXFwic2Ftc3VuZyxzM25ybjR2XFxcIixcXG4rXFx0ICAuZGF0YSA9ICh2b2lkICopUzNGV1JONV9WQVJJQU5UX1MzTlJONFYgfSxcXG4gXFx0eyB9XFxuIH07XFxuIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9mX3MzZndybjVfaTJjX21hdGNoKTtcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzM2Z3cm41X2kyY19kcml2ZXIgPSB7XFxuIFxcdC5kcml2ZXIgPSB7XFxuLVxcdFxcdC5uYW1lID0gUzNGV1JONV9JMkNfRFJJVkVSX05BTUUsXFxuLVxcdFxcdC5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihvZl9zM2Z3cm41X2kyY19tYXRjaCksXFxuK1xcdFxcdC5uYW1lID0gXFxcInMzZndybjVfaTJjXFxcIixcXG4rXFx0XFx0Lm9mX21hdGNoX3RhYmxlID0gb2ZfczNmd3JuNV9pMmNfbWF0Y2gsXFxuIFxcdH0sXFxuIFxcdC5wcm9iZSA9IHMzZndybjVfaTJjX3Byb2JlLFxcbiBcXHQucmVtb3ZlID0gczNmd3JuNV9pMmNfcmVtb3ZlLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jIGIvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuY1xcbmluZGV4IDVhOWRlMTFiYmVjZWEuLjM4MWFhN2JmMjlhMjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuY1xcbisrKyBiL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmNcXG5AQCAtOCw2ICs4LDkgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9maXJtd2FyZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWlubWF4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC91bmFsaWduZWQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJzM2Z3cm41LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJuY2kuaFxcXCJcXG5AQCAtMjAsNyArMjMsMjQgQEAgc3RhdGljIGludCBzM2Z3cm41X25jaV9wcm9wX3JzcChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLWNvbnN0IHN0cnVjdCBuY2lfZHJpdmVyX29wcyBzM2Z3cm41X25jaV9wcm9wX29wc1s0XSA9IHtcXG4rLypcXG4rICogRFVBTF9PUFRJT04gcmVzcG9uc2VzIGFyZSBub3QgdW5pZm9ybTogR0VUX1ZFUiBhbnN3ZXJzIHdpdGggdGhlIGNoaXAnc1xcbisgKiBjYWxpYnJhdGlvbiB2ZXJzaW9ucyBpbnN0ZWFkIG9mIGEgc3RhdHVzIGJ5dGUsIHNvIHN0YXNoIHRoZSBwYXlsb2FkIGZvclxcbisgKiB0aGUgY2FsbGVyIGJlZm9yZSBjb21wbGV0aW5nIHRoZSByZXF1ZXN0LlxcbisgKi9cXG4rc3RhdGljIGludCBzM2Z3cm41X25jaV9kdWFsX3JzcChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xcbitcXG4rXFx0aW5mby1cXHUwMDNlZHVhbF9yc3BfbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBza2ItXFx1MDAzZWxlbixcXG4rXFx0XFx0XFx0XFx0ICAgc2l6ZW9mKGluZm8tXFx1MDAzZWR1YWxfcnNwKSk7XFxuK1xcdG1lbWNweShpbmZvLVxcdTAwM2VkdWFsX3JzcCwgc2tiLVxcdTAwM2VkYXRhLCBpbmZvLVxcdTAwM2VkdWFsX3JzcF9sZW4pO1xcbitcXG4rXFx0bmNpX3JlcV9jb21wbGV0ZShuZGV2LCBza2ItXFx1MDAzZWRhdGFbMF0pO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzVdID0ge1xcbiBcXHR7XFxuIFxcdFxcdC5vcGNvZGUgPSBuY2lfb3Bjb2RlX3BhY2soTkNJX0dJRF9QUk9QUklFVEFSWSxcXG4gXFx0XFx0XFx0XFx0TkNJX1BST1BfU0VUX1JGUkVHKSxcXG5AQCAtNDEsNiArNjEsMTEgQEAgY29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzRdID0ge1xcbiBcXHRcXHRcXHRcXHROQ0lfUFJPUF9GV19DRkcpLFxcbiBcXHRcXHQucnNwID0gczNmd3JuNV9uY2lfcHJvcF9yc3AsXFxuIFxcdH0sXFxuK1xcdHtcXG4rXFx0XFx0Lm9wY29kZSA9IG5jaV9vcGNvZGVfcGFjayhOQ0lfR0lEX1BST1BSSUVUQVJZLFxcbitcXHRcXHRcXHRcXHROQ0lfUFJPUF9EVUFMX09QVElPTiksXFxuK1xcdFxcdC5yc3AgPSBzM2Z3cm41X25jaV9kdWFsX3JzcCxcXG4rXFx0fSxcXG4gfTtcXG4gXFxuICNkZWZpbmUgUzNGV1JONV9SRlJFR19TRUNUSU9OX1NJWkUgMjUyXFxuQEAgLTExNywzICsxNDIsMTU0IEBAIGludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmUoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqZndfbmFtZSlcXG4gXFx0cmVsZWFzZV9maXJtd2FyZShmdyk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4rXFxuKy8qXFxuKyAqIFRoZSBTM05STjRWIGV4cGVjdHMgdGhlIHNpbmdsZS1ieXRlIEZXX0NGRyBmb3JtIChqdXN0IHRoZSBjbG9jay1zcGVlZFxcbisgKiBzZWxlY3RvcikuXFxuKyAqL1xcbitpbnQgczNmd3JuNV9uY2lfY2xrX2NmZyhzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvKVxcbit7XFxuK1xcdHU4IGNsa19zcGVlZCA9IE5DSV9QUk9QX0ZXX0NGR19DTEtfU1BFRUQ7XFxuK1xcbitcXHRyZXR1cm4gbmNpX3Byb3BfY21kKGluZm8tXFx1MDAzZW5kZXYsIE5DSV9QUk9QX0ZXX0NGRywgMSwgXFx1MDAyNmNsa19zcGVlZCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIEFuIDgtYnl0ZSBjYWxpYnJhdGlvbiB2ZXJzaW9uOiA1IGJ5dGVzIG9mIGRhdGUgc3RhbXAgYW5kIGEgMy1ieXRlIENTQ1xcbisgKiBjb2RlLCBhdCBmaXhlZCBvZmZzZXRzIGJvdGggaW4gYSBibG9iJ3MgMTYtYnl0ZSB0YWlsIGFuZCBpbiBlYWNoIGhhbGYgb2ZcXG4rICogdGhlIEdFVF9WRVIgcmVzcG9uc2UgKEhXIGF0IG9mZnNldCAwLCBTVyBhdCBvZmZzZXQgMTUpLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgczNmd3JuNV9uY2lfZHVhbF92ZXJzaW9uX2VxKGNvbnN0IHU4ICphLCBjb25zdCB1OCAqYilcXG4re1xcbitcXHRyZXR1cm4gIW1lbWNtcChhICsgNSwgYiArIDUsIDUpIFxcdTAwMjZcXHUwMDI2ICFtZW1jbXAoYSArIDEyLCBiICsgMTIsIDMpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBzM2Z3cm41X25jaV9kdWFsX2NhbF9jdXJyZW50KHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sXFxuK1xcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmh3X2Z3LFxcbitcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGZpcm13YXJlICpzd19mdylcXG4re1xcbitcXHRpZiAoaW5mby1cXHUwMDNlZHVhbF9yc3BfbGVuIFxcdTAwM2MgMzApXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKGh3X2Z3LVxcdTAwM2VzaXplIFxcdTAwM2MgMTYgfHwgc3dfZnctXFx1MDAzZXNpemUgXFx1MDAzYyAxNilcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIHMzZndybjVfbmNpX2R1YWxfdmVyc2lvbl9lcShpbmZvLVxcdTAwM2VkdWFsX3JzcCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgaHdfZnctXFx1MDAzZWRhdGEgKyBod19mdy1cXHUwMDNlc2l6ZSAtIDE2KSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgczNmd3JuNV9uY2lfZHVhbF92ZXJzaW9uX2VxKGluZm8tXFx1MDAzZWR1YWxfcnNwICsgMTUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN3X2Z3LVxcdTAwM2VkYXRhICsgc3dfZnctXFx1MDAzZXNpemUgLSAxNik7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFMzTlJONFYgUkYgY2FsaWJyYXRpb24gZGF0YSB1cGRhdGU6IHRoZSBIVyBhbmQgU1cgYmxvYnMgbWVyZ2VkIGludG8gb25lXFxuKyAqIHN0cmVhbSAoSFcgZmlyc3QpLCBwdXNoZWQgYXMgU1RBUlRfVVBEQVRFLCBvbmUgU0VUX09QVElPTiBwZXIgMjUyLWJ5dGVcXG4rICogc2VjdGlvbiwgdGhlbiBTVE9QX1VQREFURSBjYXJyeWluZyBhIDE2LWJpdCBjaGVja3N1bSAocnVubmluZyBzdW0gb2YgdGhlXFxuKyAqIG1lcmdlZCBzdHJlYW0gYXMgMzItYml0IHdvcmRzKS5cXG4rICovXFxuK2ludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbChzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLFxcbitcXHRcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKmh3X25hbWUsIGNvbnN0IGNoYXIgKnN3X25hbWUpXFxuK3tcXG4rXFx0c3RydWN0IG5jaV9wcm9wX2R1YWxfc2V0X29wdGlvbl9jbWQgc2V0X29wdGlvbjtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNmluZm8tXFx1MDAzZW5kZXYtXFx1MDAzZW5mY19kZXYtXFx1MDAzZWRldjtcXG4rXFx0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpod19mdywgKnN3X2Z3O1xcbitcXHRzaXplX3QgbWVyZ2VkX3NpemUsIGksIGxlbjtcXG4rXFx0dTggKm1lcmdlZDtcXG4rXFx0dTggc3RvcF9jbWRbM107XFxuK1xcdHUzMiBjaGVja3N1bTtcXG4rXFx0dTggc3ViX29pZDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGZpcm13YXJlX3JlcXVlc3Rfbm93YXJuKFxcdTAwMjZod19mdywgaHdfbmFtZSwgZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IGZpcm13YXJlX3JlcXVlc3Rfbm93YXJuKFxcdTAwMjZzd19mdywgc3dfbmFtZSwgZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gb3V0X2h3O1xcbitcXG4rXFx0bWVyZ2VkX3NpemUgPSBod19mdy1cXHUwMDNlc2l6ZSArIHN3X2Z3LVxcdTAwM2VzaXplO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIHN0cmVhbSBpcyBjaGVja3N1bW1lZCBhcyAzMi1iaXQgd29yZHMgYW5kIHB1c2hlZCBpbiBhdCBtb3N0IDI1NlxcbitcXHQgKiBzZWN0aW9ucyAodGhlIHNlY3Rpb24gaW5kZXggaXMgYSBzaW5nbGUgYnl0ZSk7IHJlamVjdCBibG9icyB0aGF0XFxuK1xcdCAqIHdvdWxkIHNpbGVudGx5IGJyZWFrIGVpdGhlci5cXG4rXFx0ICovXFxuK1xcdGlmICghbWVyZ2VkX3NpemUgfHwgbWVyZ2VkX3NpemUgJSA0IHx8XFxuK1xcdCAgICBtZXJnZWRfc2l6ZSBcXHUwMDNlIDI1NiAqIE5DSV9QUk9QX0RVQUxfU0VDVElPTl9TSVpFKSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiaW52YWxpZCBjYWxpYnJhdGlvbiBkYXRhIHNpemU6ICV6dVxcXFxuXFxcIiwgbWVyZ2VkX3NpemUpO1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIG91dF9zdztcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogQXNrIHRoZSBjaGlwIGZvciBpdHMgY3VycmVudCBjYWxpYnJhdGlvbiB2ZXJzaW9ucyBhbmQgc2tpcCB0aGVcXG4rXFx0ICogdXBsb2FkIHdoZW4gYm90aCBhbHJlYWR5IG1hdGNoIHRoZSBibG9iczsgYSBtaXNtYXRjaCBvciBhblxcbitcXHQgKiB1bnBhcnNlYWJsZSBhbnN3ZXIgbWVhbnMgdGhlIHVwbG9hZCBwcm9jZWVkcy4gR0VUX1ZFUiBhbnN3ZXJzIHdpdGhcXG4rXFx0ICogdmVyc2lvbnMsIG5vdCBhIHN0YXR1cyBieXRlLCBzbyBuY2lfcHJvcF9jbWQoKSdzIHJldHVybiBjYXJyaWVzIG5vXFxuK1xcdCAqIG1lYW5pbmcgaGVyZS5cXG4rXFx0ICovXFxuK1xcdHN1Yl9vaWQgPSBOQ0lfUFJPUF9EVUFMX1NVQl9HRVRfVkVSO1xcbitcXHRpbmZvLVxcdTAwM2VkdWFsX3JzcF9sZW4gPSAwO1xcbitcXHRuY2lfcHJvcF9jbWQoaW5mby1cXHUwMDNlbmRldiwgTkNJX1BST1BfRFVBTF9PUFRJT04sIDEsIFxcdTAwMjZzdWJfb2lkKTtcXG4rXFx0aWYgKHMzZndybjVfbmNpX2R1YWxfY2FsX2N1cnJlbnQoaW5mbywgaHdfZncsIHN3X2Z3KSkge1xcbitcXHRcXHRkZXZfZGJnKGRldiwgXFxcImNhbGlicmF0aW9uIGRhdGEgYWxyZWFkeSBjdXJyZW50XFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0Z290byBvdXRfc3c7XFxuK1xcdH1cXG4rXFxuK1xcdG1lcmdlZCA9IGt2bWFsbG9jKG1lcmdlZF9zaXplLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFtZXJnZWQpIHtcXG4rXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBvdXRfc3c7XFxuK1xcdH1cXG4rXFx0bWVtY3B5KG1lcmdlZCwgaHdfZnctXFx1MDAzZWRhdGEsIGh3X2Z3LVxcdTAwM2VzaXplKTtcXG4rXFx0bWVtY3B5KG1lcmdlZCArIGh3X2Z3LVxcdTAwM2VzaXplLCBzd19mdy1cXHUwMDNlZGF0YSwgc3dfZnctXFx1MDAzZXNpemUpO1xcbitcXG4rXFx0Y2hlY2tzdW0gPSAwO1xcbitcXHRmb3IgKGkgPSAwOyBpICsgNCBcXHUwMDNjPSBtZXJnZWRfc2l6ZTsgaSArPSA0KVxcbitcXHRcXHRjaGVja3N1bSArPSBnZXRfdW5hbGlnbmVkX2xlMzIobWVyZ2VkICsgaSk7XFxuK1xcbitcXHQvKiBTVEFSVF9VUERBVEUgKi9cXG4rXFx0c3ViX29pZCA9IE5DSV9QUk9QX0RVQUxfU1VCX1NUQVJUX1VQREFURTtcXG4rXFx0cmV0ID0gbmNpX3Byb3BfY21kKGluZm8tXFx1MDAzZW5kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLCAxLCBcXHUwMDI2c3ViX29pZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiVW5hYmxlIHRvIHN0YXJ0IGNhbGlicmF0aW9uIGRhdGEgdXBkYXRlXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFNFVF9PUFRJT04gcGVyIHNlY3Rpb24gKi9cXG4rXFx0c2V0X29wdGlvbi5zdWJfb2lkID0gTkNJX1BST1BfRFVBTF9TVUJfU0VUX09QVElPTjtcXG4rXFx0c2V0X29wdGlvbi5pbmRleCA9IDA7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtZXJnZWRfc2l6ZTsgaSArPSBOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRSkge1xcbitcXHRcXHRsZW4gPSBtaW5fdChzaXplX3QsIG1lcmdlZF9zaXplIC0gaSwgTkNJX1BST1BfRFVBTF9TRUNUSU9OX1NJWkUpO1xcbitcXHRcXHRtZW1jcHkoc2V0X29wdGlvbi5kYXRhLCBtZXJnZWQgKyBpLCBsZW4pO1xcbitcXHRcXHRyZXQgPSBuY2lfcHJvcF9jbWQoaW5mby1cXHUwMDNlbmRldiwgTkNJX1BST1BfRFVBTF9PUFRJT04sXFxuK1xcdFxcdFxcdFxcdCAgIGxlbiArIDIsIChfX3U4ICopXFx1MDAyNnNldF9vcHRpb24pO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbitcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcImNhbGlicmF0aW9uIGRhdGEgdXBkYXRlIGVycm9yOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0cmV0KTtcXG4rXFx0XFx0XFx0LyogQWJvcnQgZm9ybTogU1RPUF9VUERBVEUgd2l0aCB0aGUgc3ViLU9JRCBhbG9uZS4gKi9cXG4rXFx0XFx0XFx0c3ViX29pZCA9IE5DSV9QUk9QX0RVQUxfU1VCX1NUT1BfVVBEQVRFO1xcbitcXHRcXHRcXHRuY2lfcHJvcF9jbWQoaW5mby1cXHUwMDNlbmRldiwgTkNJX1BST1BfRFVBTF9PUFRJT04sIDEsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnN1Yl9vaWQpO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXHRcXHRzZXRfb3B0aW9uLmluZGV4Kys7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFNUT1BfVVBEQVRFIHdpdGggY2hlY2tzdW0gKi9cXG4rXFx0c3RvcF9jbWRbMF0gPSBOQ0lfUFJPUF9EVUFMX1NVQl9TVE9QX1VQREFURTtcXG4rXFx0cHV0X3VuYWxpZ25lZF9sZTE2KGNoZWNrc3VtLCBcXHUwMDI2c3RvcF9jbWRbMV0pO1xcbitcXHRyZXQgPSBuY2lfcHJvcF9jbWQoaW5mby1cXHUwMDNlbmRldiwgTkNJX1BST1BfRFVBTF9PUFRJT04sIDMsIHN0b3BfY21kKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJVbmFibGUgdG8gc3RvcCBjYWxpYnJhdGlvbiBkYXRhIHVwZGF0ZVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRkZXZfZGJnKGRldiwgXFxcImNhbGlicmF0aW9uIGRhdGEgdXBkYXRlOiBzdWNjZXNzXFxcXG5cXFwiKTtcXG4rb3V0OlxcbitcXHRrdmZyZWUobWVyZ2VkKTtcXG4rb3V0X3N3OlxcbitcXHRyZWxlYXNlX2Zpcm13YXJlKHN3X2Z3KTtcXG4rb3V0X2h3OlxcbitcXHRyZWxlYXNlX2Zpcm13YXJlKGh3X2Z3KTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oIGIvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaFxcbmluZGV4IGJjNGJjZTJiYmM0ZDkuLjQ1M2ExYzlkNjVlYjAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaFxcbisrKyBiL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmhcXG5AQCAtNDAsNiArNDAsOSBAQCBzdHJ1Y3QgbmNpX3Byb3Bfc3RvcF9yZnJlZ19yc3Age1xcbiBcXG4gI2RlZmluZSBOQ0lfUFJPUF9GV19DRkdcXHRcXHQweDI4XFxuIFxcbisvKiBTM05STjRWIHNpbmdsZS1ieXRlIEZXX0NGRyBwYXlsb2FkOyAweDExIHNlbGVjdHMgdGhlIDE5LjIgTUh6IHJlZmVyZW5jZS4gKi9cXG4rI2RlZmluZSBOQ0lfUFJPUF9GV19DRkdfQ0xLX1NQRUVEXFx0MHgxMVxcbitcXG4gc3RydWN0IG5jaV9wcm9wX2Z3X2NmZ19jbWQge1xcbiBcXHRfX3U4IGNsa190eXBlO1xcbiBcXHRfX3U4IGNsa19zcGVlZDtcXG5AQCAtNTAsNyArNTMsMjUgQEAgc3RydWN0IG5jaV9wcm9wX2Z3X2NmZ19yc3Age1xcbiBcXHRfX3U4IHN0YXR1cztcXG4gfTtcXG4gXFxuLWV4dGVybiBjb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNF07XFxuKyNkZWZpbmUgTkNJX1BST1BfRFVBTF9PUFRJT05cXHRcXHQweDJhXFxuK1xcbisjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU1VCX0dFVF9WRVJcXHQweDAwXFxuKyNkZWZpbmUgTkNJX1BST1BfRFVBTF9TVUJfU1RBUlRfVVBEQVRFXFx0MHgwMVxcbisjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU1VCX1NFVF9PUFRJT05cXHQweDAyXFxuKyNkZWZpbmUgTkNJX1BST1BfRFVBTF9TVUJfU1RPUF9VUERBVEVcXHQweDAzXFxuK1xcbisjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU0VDVElPTl9TSVpFXFx0MjUyXFxuK1xcbitzdHJ1Y3QgbmNpX3Byb3BfZHVhbF9zZXRfb3B0aW9uX2NtZCB7XFxuK1xcdF9fdTggc3ViX29pZDtcXG4rXFx0X191OCBpbmRleDtcXG4rXFx0X191OCBkYXRhW05DSV9QUk9QX0RVQUxfU0VDVElPTl9TSVpFXTtcXG4rfTtcXG4rXFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNV07XFxuIGludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmUoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqZndfbmFtZSk7XFxuK2ludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbChzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLFxcbitcXHRcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKmh3X25hbWUsIGNvbnN0IGNoYXIgKnN3X25hbWUpO1xcbitpbnQgczNmd3JuNV9uY2lfY2xrX2NmZyhzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvKTtcXG4gXFxuICNlbmRpZiAvKiBfX0xPQ0FMX1MzRldSTjVfTkNJX0hfICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvczNmd3JuNS5oIGIvZHJpdmVycy9uZmMvczNmd3JuNS9zM2Z3cm41LmhcXG5pbmRleCAyYjQ5MjIzNjA5MGI4Li42M2Y2NzlmMTcxNjY2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvczNmd3JuNS5oXFxuKysrIGIvZHJpdmVycy9uZmMvczNmd3JuNS9zM2Z3cm41LmhcXG5AQCAtMjEsNiArMjEsMTMgQEAgZW51bSBzM2Z3cm41X21vZGUge1xcbiBcXHRTM0ZXUk41X01PREVfRlcsXFxuIH07XFxuIFxcbitlbnVtIHMzZndybjVfdmFyaWFudCB7XFxuK1xcdC8qIFMzRldSTjUgLyBTM0ZXUk44MjogZmlybXdhcmUgaXMgZG93bmxvYWRlZCBieSB0aGlzIGRyaXZlciAqL1xcbitcXHRTM0ZXUk41X1ZBUklBTlRfRldETCxcXG4rXFx0LyogUzNOUk40Vjogbm8gZmlybXdhcmUgZG93bmxvYWQ7IEZXX0NGRyArIERVQUxfT1BUSU9OIGJyaW5nLXVwICovXFxuK1xcdFMzRldSTjVfVkFSSUFOVF9TM05STjRWLFxcbit9O1xcbitcXG4gc3RydWN0IHMzZndybjVfcGh5X29wcyB7XFxuIFxcdHZvaWQgKCpzZXRfd2FrZSkodm9pZCAqaWQsIGJvb2wgc2xlZXApO1xcbiBcXHR2b2lkICgqc2V0X21vZGUpKHZvaWQgKmlkLCBlbnVtIHMzZndybjVfbW9kZSk7XFxuQEAgLTM2LDYgKzQzLDExIEBAIHN0cnVjdCBzM2Z3cm41X2luZm8ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgczNmd3JuNV9waHlfb3BzICpwaHlfb3BzO1xcbiBcXG4gXFx0c3RydWN0IHMzZndybjVfZndfaW5mbyBmd19pbmZvO1xcbitcXHRlbnVtIHMzZndybjVfdmFyaWFudCB2YXJpYW50O1xcbitcXG4rXFx0LyogTGFzdCBEVUFMX09QVElPTiByZXNwb25zZSBwYXlsb2FkIChHRVRfVkVSIGNhcnJpZXMgdmVyc2lvbnMpLiAqL1xcbitcXHR1OCBkdWFsX3JzcFszMl07XFxuK1xcdHU4IGR1YWxfcnNwX2xlbjtcXG4gXFxuIFxcdHN0cnVjdCBtdXRleCBtdXRleDtcXG4gfTtcXG5AQCAtNzgsNyArOTAsNyBAQCBzdGF0aWMgaW5saW5lIGludCBzM2Z3cm41X3dyaXRlKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sIHN0cnVjdCBza19idWZmICpza2IpXFxuIH1cXG4gXFxuIGludCBzM2Z3cm41X3Byb2JlKHN0cnVjdCBuY2lfZGV2ICoqbmRldiwgdm9pZCAqcGh5X2lkLCBzdHJ1Y3QgZGV2aWNlICpwZGV2LFxcbi1cXHRjb25zdCBzdHJ1Y3QgczNmd3JuNV9waHlfb3BzICpwaHlfb3BzKTtcXG4rXFx0Y29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcywgZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudCk7XFxuIHZvaWQgczNmd3JuNV9yZW1vdmUoc3RydWN0IG5jaV9kZXYgKm5kZXYpO1xcbiBcXG4gaW50IHMzZndybjVfcmVjdl9mcmFtZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvczNmd3JuNS91YXJ0LmMgYi9kcml2ZXJzL25mYy9zM2Z3cm41L3VhcnQuY1xcbmluZGV4IDhmMTQyYTI1NTEwMTYuLjc1Mzk3YzNkYmM1OGIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS91YXJ0LmNcXG4rKysgYi9kcml2ZXJzL25mYy9zM2Z3cm41L3VhcnQuY1xcbkBAIC0xMzYsNyArMTM2LDcgQEAgc3RhdGljIGludCBzM2Z3cm44Ml91YXJ0X3Byb2JlKHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXYpXFxuIFxcdH1cXG4gXFxuIFxcdHJldCA9IHMzZndybjVfcHJvYmUoXFx1MDAyNnBoeS1cXHUwMDNlY29tbW9uLm5kZXYsIHBoeSwgXFx1MDAyNnBoeS1cXHUwMDNlc2VyX2Rldi1cXHUwMDNlZGV2LFxcbi1cXHRcXHRcXHQgICAgXFx1MDAyNnVhcnRfcGh5X29wcyk7XFxuK1xcdFxcdFxcdCAgICBcXHUwMDI2dWFydF9waHlfb3BzLCBTM0ZXUk41X1ZBUklBTlRfRldETCk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIGVycl9zZXJkZXY7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMjozNToyOC40NzU0MjY1NjFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1OTM3ODI4MTM4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORkNfTkNJXCIsXG4gICAgXCJORkNfUzNGV1JONV9JMkNcIixcbiAgICBcIk5GQ19TM0ZXUk44Ml9VQVJUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWxcIixcbiAgICBcInMzZndybjVfbmNpX2Nsa19jZmdcIixcbiAgICBcInMzZndybjVfbmNpX2R1YWxfcnNwXCIsXG4gICAgXCJzM2Z3cm41X25jaV9pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgczNucm40diB2YXJpYW50IHRvIHRoZSBzM2Z3cm41IE5GQyBkcml2ZXIuIEl0IGludHJvZHVjZXMgbmV3IE5DSSBwcm9wcmlldGFyeSBjb21tYW5kcyBhbmQgcmVzcG9uc2VzLCBhbmQgYSBuZXcgUkYgY29uZmlndXJhdGlvbiByb3V0aW5lLiBUaGUgZHJpdmVyIGlzIHJlYWNoYWJsZSB2aWEgdGhlIE5DSSBpbnRlcmZhY2UgYW5kIEkyQy9VQVJUIGJ1c2VzLCB3aGljaCBjYW4gYmUgZnV6emVkIHVzaW5nIHZpcnR1YWwgZGV2aWNlcyBvciBzeXprYWxsZXIncyBOQ0kgc3VwcG9ydC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2I0MDIwYWFlMDUyNzZkNGE0N2MzZmJhZDcxNTNkN2RhMzJlZmI5MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDIyOjM1OjI3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9uZmMvc2Ftc3VuZyxzM2Z3cm41LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L25mYy9zYW1zdW5nLHMzZndybjUueWFtbFxuaW5kZXggMTJiYWVlNDU3NTJjNy4uNDBhNjk0NjY4MDJiYiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3NhbXN1bmcsczNmd3JuNS55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L25mYy9zYW1zdW5nLHMzZndybjUueWFtbFxuQEAgLTE0LDYgKzE0LDcgQEAgcHJvcGVydGllczpcbiAgICAgZW51bTpcbiAgICAgICAtIHNhbXN1bmcsczNmd3JuNS1pMmNcbiAgICAgICAtIHNhbXN1bmcsczNmd3JuODJcbisgICAgICAtIHNhbXN1bmcsczNucm40dlxuIFxuICAgZW4tZ3Bpb3M6XG4gICAgIG1heEl0ZW1zOiAxXG5AQCAtMjksNiArMzAsOSBAQCBwcm9wZXJ0aWVzOlxuICAgY2xvY2tzOlxuICAgICBtYXhJdGVtczogMVxuIFxuKyAgcHZkZC1zdXBwbHk6XG4rICAgIGRlc2NyaXB0aW9uOiBQVkREIHBvd2VyIHN1cHBseVxuK1xuICAgd2FrZS1ncGlvczpcbiAgICAgbWF4SXRlbXM6IDFcbiAgICAgZGVzY3JpcHRpb246XG5AQCAtNTgsMTIgKzYyLDI1IEBAIGFsbE9mOlxuICAgICAgIHByb3BlcnRpZXM6XG4gICAgICAgICBjb21wYXRpYmxlOlxuICAgICAgICAgICBjb250YWluczpcbi0gICAgICAgICAgICBjb25zdDogc2Ftc3VuZyxzM2Z3cm41LWkyY1xuKyAgICAgICAgICAgIGVudW06XG4rICAgICAgICAgICAgICAtIHNhbXN1bmcsczNmd3JuNS1pMmNcbisgICAgICAgICAgICAgIC0gc2Ftc3VuZyxzM25ybjR2XG4gICAgIHRoZW46XG4gICAgICAgcmVxdWlyZWQ6XG4gICAgICAgICAtIGludGVycnVwdHNcbiAgICAgICAgIC0gcmVnXG4gXG4rICAjIERlcGxveWVkIERUcyBmb3IgdGhlIG9sZGVyIHBhcnRzIG5ldmVyIGRlc2NyaWJlZCBhIHN1cHBseSwgc28gUFZERCBpc1xuKyAgIyBvbmx5IHJlcXVpcmVkIGZvciB0aGUgbmV3IGRldmljZS5cbisgIC0gaWY6XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIGNvbXBhdGlibGU6XG4rICAgICAgICAgIGNvbnRhaW5zOlxuKyAgICAgICAgICAgIGNvbnN0OiBzYW1zdW5nLHMzbnJuNHZcbisgICAgdGhlbjpcbisgICAgICByZXF1aXJlZDpcbisgICAgICAgIC0gcHZkZC1zdXBwbHlcbitcbiBleGFtcGxlczpcbiAgIC0gfFxuICAgICAjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaFx1MDAzZVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9taWxvcy1mYWlycGhvbmUtZnA2LmR0cyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9taWxvcy1mYWlycGhvbmUtZnA2LmR0c1xuaW5kZXggZWJkY2EwZTJkMmYzYS4uYmRiYTg0ODI3NWRiNCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9taWxvcy1mYWlycGhvbmUtZnA2LmR0c1xuKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21pbG9zLWZhaXJwaG9uZS1mcDYuZHRzXG5AQCAtNjAxLDkgKzYwMSwyMiBAQCBcdTAwMjZnY2Mge1xuIH07XG4gXG4gXHUwMDI2aTJjMSB7XG4tXHQvKiBTYW1zdW5nIE5GQyBAIDB4MjcgKi9cbi1cbiBcdHN0YXR1cyA9IFwib2theVwiO1xuK1xuK1x0bmZjQDI3IHtcbitcdFx0Y29tcGF0aWJsZSA9IFwic2Ftc3VuZyxzM25ybjR2XCI7XG4rXHRcdHJlZyA9IFx1MDAzYzB4MjdcdTAwM2U7XG4rXG4rXHRcdGludGVycnVwdHMtZXh0ZW5kZWQgPSBcdTAwM2NcdTAwMjZ0bG1tIDMxIElSUV9UWVBFX0VER0VfUklTSU5HXHUwMDNlO1xuK1x0XHRlbi1ncGlvcyA9IFx1MDAzY1x1MDAyNnRsbW0gNTYgR1BJT19BQ1RJVkVfSElHSFx1MDAzZTtcbitcdFx0d2FrZS1ncGlvcyA9IFx1MDAzY1x1MDAyNnRsbW0gNyBHUElPX0FDVElWRV9ISUdIXHUwMDNlO1xuK1x0XHRjbG9ja3MgPSBcdTAwM2NcdTAwMjZycG1oY2MgUlBNSF9MTl9CQl9DTEsyXHUwMDNlO1xuK1xuK1x0XHRwdmRkLXN1cHBseSA9IFx1MDAzY1x1MDAyNnZyZWdfbDIwYlx1MDAzZTtcbitcbitcdFx0cGluY3RybC0wID0gXHUwMDNjXHUwMDI2bmZjX2RlZmF1bHRcdTAwM2U7XG4rXHRcdHBpbmN0cmwtbmFtZXMgPSBcImRlZmF1bHRcIjtcbitcdH07XG4gfTtcbiBcbiBcdTAwMjZpMmMzIHtcbkBAIC04MjUsNiArODM4LDIyIEBAIFx1MDAyNnRsbW0ge1xuIFx0XHRcdCAgICAgICBcdTAwM2MxMyAxXHUwMDNlLCAvKiBOQyAqL1xuIFx0XHRcdCAgICAgICBcdTAwM2M2MyAyXHUwMDNlOyAvKiBXTEFOIFVBUlQgKi9cbiBcbitcdG5mY19kZWZhdWx0OiBuZmMtZGVmYXVsdC1zdGF0ZSB7XG4rXHRcdGlycS1waW5zIHtcbitcdFx0XHRwaW5zID0gXCJncGlvMzFcIjtcbitcdFx0XHRmdW5jdGlvbiA9IFwiZ3Bpb1wiO1xuK1x0XHRcdGRyaXZlLXN0cmVuZ3RoID0gXHUwMDNjMlx1MDAzZTtcbitcdFx0XHRiaWFzLWRpc2FibGU7XG4rXHRcdH07XG4rXG4rXHRcdHBkLXBpbnMge1xuK1x0XHRcdHBpbnMgPSBcImdwaW81NlwiO1xuK1x0XHRcdGZ1bmN0aW9uID0gXCJncGlvXCI7XG4rXHRcdFx0ZHJpdmUtc3RyZW5ndGggPSBcdTAwM2MyXHUwMDNlO1xuK1x0XHRcdGJpYXMtcHVsbC11cDtcbitcdFx0fTtcbitcdH07XG4rXG4gXHRzZGMyX2NhcmRfZGV0X246IHNkYzItY2FyZC1kZXQtc3RhdGUge1xuIFx0XHRwaW5zID0gXCJncGlvNjVcIjtcbiBcdFx0ZnVuY3Rpb24gPSBcImdwaW9cIjtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYyBiL2RyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jXG5pbmRleCBhZjBmYThiZDk3MGI0Li41NjM0NzBjYjkyOGRlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmNcbisrKyBiL2RyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jXG5AQCAtMjAsNiArMjAsOSBAQFxuIFx0XHRcdFx0TkZDX1BST1RPX0lTTzE0NDQzX0JfTUFTSyB8IFxcXG4gXHRcdFx0XHRORkNfUFJPVE9fSVNPMTU2OTNfTUFTSylcbiBcbisjZGVmaW5lIFMzTlJONFZfSFdSRUdfTkFNRVx0XCJzYW1zdW5nL3MzbnJuNHYvaHdyZWcuYmluXCJcbisjZGVmaW5lIFMzTlJONFZfU1dSRUdfTkFNRVx0XCJzYW1zdW5nL3MzbnJuNHYvc3dyZWcuYmluXCJcbitcbiBzdGF0aWMgaW50IHMzZndybjVfZmlybXdhcmVfaW5pdChzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBzM2Z3cm41X2Z3X2luZm8gKmZ3X2luZm8gPSBcdTAwMjZpbmZvLVx1MDAzZWZ3X2luZm87XG5AQCAtNzQsNiArNzcsMjIgQEAgc3RhdGljIGludCBzM2Z3cm41X2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rc3RhdGljIGludCBzM2Z3cm41X25jaV9pbml0KHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxuK3tcbitcdHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8gPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdGlmIChpbmZvLVx1MDAzZXZhcmlhbnQgPT0gUzNGV1JONV9WQVJJQU5UX1MzTlJONFYpIHtcbitcdFx0cmV0ID0gczNmd3JuNV9uY2lfY2xrX2NmZyhpbmZvKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRkZXZfZXJyKFx1MDAyNm5kZXYtXHUwMDNlbmZjX2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcImZhaWxlZCB0byBjb25maWd1cmUgdGhlIHJlZmVyZW5jZSBjbG9jazogJWRcXG5cIixcbitcdFx0XHRcdHJldCk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiBzdGF0aWMgaW50IHMzZndybjVfbmNpX29wZW4oc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4ge1xuIFx0c3RydWN0IHMzZndybjVfaW5mbyAqaW5mbyA9IG5jaV9nZXRfZHJ2ZGF0YShuZGV2KTtcbkBAIC0xMjcsNiArMTQ2LDE1IEBAIHN0YXRpYyBpbnQgczNmd3JuNV9uY2lfcG9zdF9zZXR1cChzdHJ1Y3QgbmNpX2RldiAqbmRldilcbiBcdHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8gPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XG4gXHRpbnQgcmV0O1xuIFxuK1x0aWYgKGluZm8tXHUwMDNldmFyaWFudCA9PSBTM0ZXUk41X1ZBUklBTlRfUzNOUk40Vikge1xuK1x0XHRyZXQgPSBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbChpbmZvLCBTM05STjRWX0hXUkVHX05BTUUsXG4rXHRcdFx0XHRcdFx0ICAgIFMzTlJONFZfU1dSRUdfTkFNRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0ZGV2X3dhcm4oXHUwMDI2bmRldi1cdTAwM2VuZmNfZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdCBcIlJGIGNhbGlicmF0aW9uIGRhdGEgdXBkYXRlIGZhaWxlZDogJWRcXG5cIiwgcmV0KTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4gXHRpZiAoczNmd3JuNV9maXJtd2FyZV9pbml0KGluZm8pKSB7XG4gXHRcdC8vc2tpcCBib290bG9hZGVyIG1vZGVcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTQ5LDYgKzE3Nyw3IEBAIHN0YXRpYyBpbnQgczNmd3JuNV9uY2lfcG9zdF9zZXR1cChzdHJ1Y3QgbmNpX2RldiAqbmRldilcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuY2lfb3BzIHMzZndybjVfbmNpX29wcyA9IHtcbitcdC5pbml0ID0gczNmd3JuNV9uY2lfaW5pdCxcbiBcdC5vcGVuID0gczNmd3JuNV9uY2lfb3BlbixcbiBcdC5jbG9zZSA9IHMzZndybjVfbmNpX2Nsb3NlLFxuIFx0LnNlbmQgPSBzM2Z3cm41X25jaV9zZW5kLFxuQEAgLTE1OCw3ICsxODcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5jaV9vcHMgczNmd3JuNV9uY2lfb3BzID0ge1xuIH07XG4gXG4gaW50IHMzZndybjVfcHJvYmUoc3RydWN0IG5jaV9kZXYgKipuZGV2LCB2b2lkICpwaHlfaWQsIHN0cnVjdCBkZXZpY2UgKnBkZXYsXG4tXHRjb25zdCBzdHJ1Y3QgczNmd3JuNV9waHlfb3BzICpwaHlfb3BzKVxuK1x0Y29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcywgZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudClcbiB7XG4gXHRzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvO1xuIFx0aW50IHJldDtcbkBAIC0xNzAsNiArMTk5LDcgQEAgaW50IHMzZndybjVfcHJvYmUoc3RydWN0IG5jaV9kZXYgKipuZGV2LCB2b2lkICpwaHlfaWQsIHN0cnVjdCBkZXZpY2UgKnBkZXYsXG4gXHRpbmZvLVx1MDAzZXBoeV9pZCA9IHBoeV9pZDtcbiBcdGluZm8tXHUwMDNlcGRldiA9IHBkZXY7XG4gXHRpbmZvLVx1MDAzZXBoeV9vcHMgPSBwaHlfb3BzO1xuK1x0aW5mby1cdTAwM2V2YXJpYW50ID0gdmFyaWFudDtcbiBcdG11dGV4X2luaXQoXHUwMDI2aW5mby1cdTAwM2VtdXRleCk7XG4gXG4gXHRzM2Z3cm41X3NldF9tb2RlKGluZm8sIFMzRldSTjVfTU9ERV9DT0xEKTtcbkBAIC0yMjUsMyArMjU1LDUgQEAgRVhQT1JUX1NZTUJPTChzM2Z3cm41X3JlY3ZfZnJhbWUpO1xuIE1PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuIE1PRFVMRV9ERVNDUklQVElPTihcIlNhbXN1bmcgUzNGV1JONSBORkMgZHJpdmVyXCIpO1xuIE1PRFVMRV9BVVRIT1IoXCJSb2JlcnQgQmFsZHlnYSBcdTAwM2NyLmJhbGR5Z2FAc2Ftc3VuZy5jb21cdTAwM2VcIik7XG4rTU9EVUxFX0ZJUk1XQVJFKFMzTlJONFZfSFdSRUdfTkFNRSk7XG4rTU9EVUxFX0ZJUk1XQVJFKFMzTlJONFZfU1dSRUdfTkFNRSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvczNmd3JuNS9pMmMuYyBiL2RyaXZlcnMvbmZjL3MzZndybjUvaTJjLmNcbmluZGV4IDRiYTc2MjYxMTcxMTguLjg4NDQyMGFjODNiNWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jXG4rKysgYi9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jXG5AQCAtMTEsMTMgKzExLDEyIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZ3Bpby9jb25zdW1lci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmZjL25mYy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJwaHlfY29tbW9uLmhcIlxuIFxuLSNkZWZpbmUgUzNGV1JONV9JMkNfRFJJVkVSX05BTUUgXCJzM2Z3cm41X2kyY1wiXG4tXG4gc3RydWN0IHMzZndybjVfaTJjX3BoeSB7XG4gXHRzdHJ1Y3QgcGh5X2NvbW1vbiBjb21tb247XG4gXHRzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2RldjtcbkBAIC0xNDYsNiArMTQ1LDcgQEAgc3RhdGljIGlycXJldHVybl90IHMzZndybjVfaTJjX2lycV90aHJlYWRfZm4oaW50IGlycSwgdm9pZCAqcGh5X2lkKVxuIFxuIHN0YXRpYyBpbnQgczNmd3JuNV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbiB7XG4rXHRlbnVtIHMzZndybjVfdmFyaWFudCB2YXJpYW50O1xuIFx0c3RydWN0IHMzZndybjVfaTJjX3BoeSAqcGh5O1xuIFx0aW50IHJldDtcbiBcbkBAIC0xNjAsNiArMTYwLDExIEBAIHN0YXRpYyBpbnQgczNmd3JuNV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbiBcdHBoeS1cdTAwM2VpMmNfZGV2ID0gY2xpZW50O1xuIFx0aTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgcGh5KTtcbiBcbitcdHJldCA9IGRldm1fcmVndWxhdG9yX2dldF9lbmFibGUoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgXCJwdmRkXCIpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgcmV0LFxuK1x0XHRcdFx0ICAgICBcImZhaWxlZCB0byBlbmFibGUgcHZkZFxcblwiKTtcbitcbiBcdHBoeS1cdTAwM2Vjb21tb24uZ3Bpb19lbiA9IGRldm1fZ3Bpb2RfZ2V0KFx1MDAyNmNsaWVudC1cdTAwM2VkZXYsIFwiZW5cIiwgR1BJT0RfT1VUX0hJR0gpO1xuIFx0aWYgKElTX0VSUihwaHktXHUwMDNlY29tbW9uLmdwaW9fZW4pKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihwaHktXHUwMDNlY29tbW9uLmdwaW9fZW4pO1xuQEAgLTE3OSwxNCArMTg0LDE1IEBAIHN0YXRpYyBpbnQgczNmd3JuNV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbiBcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgUFRSX0VSUihwaHktXHUwMDNlY2xrKSxcbiBcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gZ2V0IGNsb2NrXFxuXCIpO1xuIFxuK1x0dmFyaWFudCA9ICh1aW50cHRyX3QpaTJjX2dldF9tYXRjaF9kYXRhKGNsaWVudCk7XG4gXHRyZXQgPSBzM2Z3cm41X3Byb2JlKFx1MDAyNnBoeS1cdTAwM2Vjb21tb24ubmRldiwgcGh5LCBcdTAwMjZwaHktXHUwMDNlaTJjX2Rldi1cdTAwM2VkZXYsXG4tXHRcdFx0ICAgIFx1MDAyNmkyY19waHlfb3BzKTtcbitcdFx0XHQgICAgXHUwMDI2aTJjX3BoeV9vcHMsIHZhcmlhbnQpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgcGh5LVx1MDAzZWkyY19kZXYtXHUwMDNlaXJxLCBOVUxMLFxuIFx0XHRzM2Z3cm41X2kyY19pcnFfdGhyZWFkX2ZuLCBJUlFGX09ORVNIT1QsXG4tXHRcdFMzRldSTjVfSTJDX0RSSVZFUl9OQU1FLCBwaHkpO1xuK1x0XHRcInMzZndybjVfaTJjXCIsIHBoeSk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIHMzZndybjVfcmVtb3ZlO1xuIFxuQEAgLTIwNSwyMSArMjExLDI1IEBAIHN0YXRpYyB2b2lkIHMzZndybjVfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgczNmd3JuNV9pMmNfaWRfdGFibGVbXSA9IHtcbi1cdHsgLm5hbWUgPSBTM0ZXUk41X0kyQ19EUklWRVJfTkFNRSB9LFxuK1x0eyAubmFtZSA9IFwiczNmd3JuNV9pMmNcIiwgLmRyaXZlcl9kYXRhID0gUzNGV1JONV9WQVJJQU5UX0ZXREwgfSxcbitcdHsgLm5hbWUgPSBcInMzbnJuNHZcIiwgLmRyaXZlcl9kYXRhID0gUzNGV1JONV9WQVJJQU5UX1MzTlJONFYgfSxcbiBcdHsgfVxuIH07XG4gTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHMzZndybjVfaTJjX2lkX3RhYmxlKTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9zM2Z3cm41X2kyY19tYXRjaFtdID0ge1xuLVx0eyAuY29tcGF0aWJsZSA9IFwic2Ftc3VuZyxzM2Z3cm41LWkyY1wiIH0sXG4rXHR7IC5jb21wYXRpYmxlID0gXCJzYW1zdW5nLHMzZndybjUtaTJjXCIsXG4rXHQgIC5kYXRhID0gKHZvaWQgKilTM0ZXUk41X1ZBUklBTlRfRldETCB9LFxuK1x0eyAuY29tcGF0aWJsZSA9IFwic2Ftc3VuZyxzM25ybjR2XCIsXG4rXHQgIC5kYXRhID0gKHZvaWQgKilTM0ZXUk41X1ZBUklBTlRfUzNOUk40ViB9LFxuIFx0eyB9XG4gfTtcbiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBvZl9zM2Z3cm41X2kyY19tYXRjaCk7XG4gXG4gc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHMzZndybjVfaTJjX2RyaXZlciA9IHtcbiBcdC5kcml2ZXIgPSB7XG4tXHRcdC5uYW1lID0gUzNGV1JONV9JMkNfRFJJVkVSX05BTUUsXG4tXHRcdC5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihvZl9zM2Z3cm41X2kyY19tYXRjaCksXG4rXHRcdC5uYW1lID0gXCJzM2Z3cm41X2kyY1wiLFxuK1x0XHQub2ZfbWF0Y2hfdGFibGUgPSBvZl9zM2Z3cm41X2kyY19tYXRjaCxcbiBcdH0sXG4gXHQucHJvYmUgPSBzM2Z3cm41X2kyY19wcm9iZSxcbiBcdC5yZW1vdmUgPSBzM2Z3cm41X2kyY19yZW1vdmUsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuYyBiL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmNcbmluZGV4IDVhOWRlMTFiYmVjZWEuLjM4MWFhN2JmMjlhMjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jXG4rKysgYi9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jXG5AQCAtOCw2ICs4LDkgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maXJtd2FyZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWlubWF4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiczNmd3JuNS5oXCJcbiAjaW5jbHVkZSBcIm5jaS5oXCJcbkBAIC0yMCw3ICsyMywyNCBAQCBzdGF0aWMgaW50IHMzZndybjVfbmNpX3Byb3BfcnNwKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWNvbnN0IHN0cnVjdCBuY2lfZHJpdmVyX29wcyBzM2Z3cm41X25jaV9wcm9wX29wc1s0XSA9IHtcbisvKlxuKyAqIERVQUxfT1BUSU9OIHJlc3BvbnNlcyBhcmUgbm90IHVuaWZvcm06IEdFVF9WRVIgYW5zd2VycyB3aXRoIHRoZSBjaGlwJ3NcbisgKiBjYWxpYnJhdGlvbiB2ZXJzaW9ucyBpbnN0ZWFkIG9mIGEgc3RhdHVzIGJ5dGUsIHNvIHN0YXNoIHRoZSBwYXlsb2FkIGZvclxuKyAqIHRoZSBjYWxsZXIgYmVmb3JlIGNvbXBsZXRpbmcgdGhlIHJlcXVlc3QuXG4rICovXG4rc3RhdGljIGludCBzM2Z3cm41X25jaV9kdWFsX3JzcChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xuK1xuK1x0aW5mby1cdTAwM2VkdWFsX3JzcF9sZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHNrYi1cdTAwM2VsZW4sXG4rXHRcdFx0XHQgICBzaXplb2YoaW5mby1cdTAwM2VkdWFsX3JzcCkpO1xuK1x0bWVtY3B5KGluZm8tXHUwMDNlZHVhbF9yc3AsIHNrYi1cdTAwM2VkYXRhLCBpbmZvLVx1MDAzZWR1YWxfcnNwX2xlbik7XG4rXG4rXHRuY2lfcmVxX2NvbXBsZXRlKG5kZXYsIHNrYi1cdTAwM2VkYXRhWzBdKTtcbitcdHJldHVybiAwO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNV0gPSB7XG4gXHR7XG4gXHRcdC5vcGNvZGUgPSBuY2lfb3Bjb2RlX3BhY2soTkNJX0dJRF9QUk9QUklFVEFSWSxcbiBcdFx0XHRcdE5DSV9QUk9QX1NFVF9SRlJFRyksXG5AQCAtNDEsNiArNjEsMTEgQEAgY29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzRdID0ge1xuIFx0XHRcdFx0TkNJX1BST1BfRldfQ0ZHKSxcbiBcdFx0LnJzcCA9IHMzZndybjVfbmNpX3Byb3BfcnNwLFxuIFx0fSxcbitcdHtcbitcdFx0Lm9wY29kZSA9IG5jaV9vcGNvZGVfcGFjayhOQ0lfR0lEX1BST1BSSUVUQVJZLFxuK1x0XHRcdFx0TkNJX1BST1BfRFVBTF9PUFRJT04pLFxuK1x0XHQucnNwID0gczNmd3JuNV9uY2lfZHVhbF9yc3AsXG4rXHR9LFxuIH07XG4gXG4gI2RlZmluZSBTM0ZXUk41X1JGUkVHX1NFQ1RJT05fU0laRSAyNTJcbkBAIC0xMTcsMyArMTQyLDE1NCBAQCBpbnQgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sIGNvbnN0IGNoYXIgKmZ3X25hbWUpXG4gXHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuK1xuKy8qXG4rICogVGhlIFMzTlJONFYgZXhwZWN0cyB0aGUgc2luZ2xlLWJ5dGUgRldfQ0ZHIGZvcm0gKGp1c3QgdGhlIGNsb2NrLXNwZWVkXG4rICogc2VsZWN0b3IpLlxuKyAqL1xuK2ludCBzM2Z3cm41X25jaV9jbGtfY2ZnKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8pXG4re1xuK1x0dTggY2xrX3NwZWVkID0gTkNJX1BST1BfRldfQ0ZHX0NMS19TUEVFRDtcbitcbitcdHJldHVybiBuY2lfcHJvcF9jbWQoaW5mby1cdTAwM2VuZGV2LCBOQ0lfUFJPUF9GV19DRkcsIDEsIFx1MDAyNmNsa19zcGVlZCk7XG4rfVxuK1xuKy8qXG4rICogQW4gOC1ieXRlIGNhbGlicmF0aW9uIHZlcnNpb246IDUgYnl0ZXMgb2YgZGF0ZSBzdGFtcCBhbmQgYSAzLWJ5dGUgQ1NDXG4rICogY29kZSwgYXQgZml4ZWQgb2Zmc2V0cyBib3RoIGluIGEgYmxvYidzIDE2LWJ5dGUgdGFpbCBhbmQgaW4gZWFjaCBoYWxmIG9mXG4rICogdGhlIEdFVF9WRVIgcmVzcG9uc2UgKEhXIGF0IG9mZnNldCAwLCBTVyBhdCBvZmZzZXQgMTUpLlxuKyAqL1xuK3N0YXRpYyBib29sIHMzZndybjVfbmNpX2R1YWxfdmVyc2lvbl9lcShjb25zdCB1OCAqYSwgY29uc3QgdTggKmIpXG4re1xuK1x0cmV0dXJuICFtZW1jbXAoYSArIDUsIGIgKyA1LCA1KSBcdTAwMjZcdTAwMjYgIW1lbWNtcChhICsgMTIsIGIgKyAxMiwgMyk7XG4rfVxuK1xuK3N0YXRpYyBib29sIHMzZndybjVfbmNpX2R1YWxfY2FsX2N1cnJlbnQoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbyxcbitcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqaHdfZncsXG4rXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnN3X2Z3KVxuK3tcbitcdGlmIChpbmZvLVx1MDAzZWR1YWxfcnNwX2xlbiBcdTAwM2MgMzApXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmIChod19mdy1cdTAwM2VzaXplIFx1MDAzYyAxNiB8fCBzd19mdy1cdTAwM2VzaXplIFx1MDAzYyAxNilcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0dXJuIHMzZndybjVfbmNpX2R1YWxfdmVyc2lvbl9lcShpbmZvLVx1MDAzZWR1YWxfcnNwLFxuK1x0XHRcdFx0XHQgICBod19mdy1cdTAwM2VkYXRhICsgaHdfZnctXHUwMDNlc2l6ZSAtIDE2KSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBzM2Z3cm41X25jaV9kdWFsX3ZlcnNpb25fZXEoaW5mby1cdTAwM2VkdWFsX3JzcCArIDE1LFxuK1x0XHRcdFx0XHQgICBzd19mdy1cdTAwM2VkYXRhICsgc3dfZnctXHUwMDNlc2l6ZSAtIDE2KTtcbit9XG4rXG4rLypcbisgKiBTM05STjRWIFJGIGNhbGlicmF0aW9uIGRhdGEgdXBkYXRlOiB0aGUgSFcgYW5kIFNXIGJsb2JzIG1lcmdlZCBpbnRvIG9uZVxuKyAqIHN0cmVhbSAoSFcgZmlyc3QpLCBwdXNoZWQgYXMgU1RBUlRfVVBEQVRFLCBvbmUgU0VUX09QVElPTiBwZXIgMjUyLWJ5dGVcbisgKiBzZWN0aW9uLCB0aGVuIFNUT1BfVVBEQVRFIGNhcnJ5aW5nIGEgMTYtYml0IGNoZWNrc3VtIChydW5uaW5nIHN1bSBvZiB0aGVcbisgKiBtZXJnZWQgc3RyZWFtIGFzIDMyLWJpdCB3b3JkcykuXG4rICovXG4raW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sXG4rXHRcdFx0XHQgIGNvbnN0IGNoYXIgKmh3X25hbWUsIGNvbnN0IGNoYXIgKnN3X25hbWUpXG4re1xuK1x0c3RydWN0IG5jaV9wcm9wX2R1YWxfc2V0X29wdGlvbl9jbWQgc2V0X29wdGlvbjtcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmluZm8tXHUwMDNlbmRldi1cdTAwM2VuZmNfZGV2LVx1MDAzZWRldjtcbitcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqaHdfZncsICpzd19mdztcbitcdHNpemVfdCBtZXJnZWRfc2l6ZSwgaSwgbGVuO1xuK1x0dTggKm1lcmdlZDtcbitcdHU4IHN0b3BfY21kWzNdO1xuK1x0dTMyIGNoZWNrc3VtO1xuK1x0dTggc3ViX29pZDtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBmaXJtd2FyZV9yZXF1ZXN0X25vd2FybihcdTAwMjZod19mdywgaHdfbmFtZSwgZGV2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSBmaXJtd2FyZV9yZXF1ZXN0X25vd2FybihcdTAwMjZzd19mdywgc3dfbmFtZSwgZGV2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gb3V0X2h3O1xuK1xuK1x0bWVyZ2VkX3NpemUgPSBod19mdy1cdTAwM2VzaXplICsgc3dfZnctXHUwMDNlc2l6ZTtcbitcbitcdC8qXG4rXHQgKiBUaGUgc3RyZWFtIGlzIGNoZWNrc3VtbWVkIGFzIDMyLWJpdCB3b3JkcyBhbmQgcHVzaGVkIGluIGF0IG1vc3QgMjU2XG4rXHQgKiBzZWN0aW9ucyAodGhlIHNlY3Rpb24gaW5kZXggaXMgYSBzaW5nbGUgYnl0ZSk7IHJlamVjdCBibG9icyB0aGF0XG4rXHQgKiB3b3VsZCBzaWxlbnRseSBicmVhayBlaXRoZXIuXG4rXHQgKi9cbitcdGlmICghbWVyZ2VkX3NpemUgfHwgbWVyZ2VkX3NpemUgJSA0IHx8XG4rXHQgICAgbWVyZ2VkX3NpemUgXHUwMDNlIDI1NiAqIE5DSV9QUk9QX0RVQUxfU0VDVElPTl9TSVpFKSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcImludmFsaWQgY2FsaWJyYXRpb24gZGF0YSBzaXplOiAlenVcXG5cIiwgbWVyZ2VkX3NpemUpO1xuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIG91dF9zdztcbitcdH1cbitcbitcdC8qXG4rXHQgKiBBc2sgdGhlIGNoaXAgZm9yIGl0cyBjdXJyZW50IGNhbGlicmF0aW9uIHZlcnNpb25zIGFuZCBza2lwIHRoZVxuK1x0ICogdXBsb2FkIHdoZW4gYm90aCBhbHJlYWR5IG1hdGNoIHRoZSBibG9iczsgYSBtaXNtYXRjaCBvciBhblxuK1x0ICogdW5wYXJzZWFibGUgYW5zd2VyIG1lYW5zIHRoZSB1cGxvYWQgcHJvY2VlZHMuIEdFVF9WRVIgYW5zd2VycyB3aXRoXG4rXHQgKiB2ZXJzaW9ucywgbm90IGEgc3RhdHVzIGJ5dGUsIHNvIG5jaV9wcm9wX2NtZCgpJ3MgcmV0dXJuIGNhcnJpZXMgbm9cbitcdCAqIG1lYW5pbmcgaGVyZS5cbitcdCAqL1xuK1x0c3ViX29pZCA9IE5DSV9QUk9QX0RVQUxfU1VCX0dFVF9WRVI7XG4rXHRpbmZvLVx1MDAzZWR1YWxfcnNwX2xlbiA9IDA7XG4rXHRuY2lfcHJvcF9jbWQoaW5mby1cdTAwM2VuZGV2LCBOQ0lfUFJPUF9EVUFMX09QVElPTiwgMSwgXHUwMDI2c3ViX29pZCk7XG4rXHRpZiAoczNmd3JuNV9uY2lfZHVhbF9jYWxfY3VycmVudChpbmZvLCBod19mdywgc3dfZncpKSB7XG4rXHRcdGRldl9kYmcoZGV2LCBcImNhbGlicmF0aW9uIGRhdGEgYWxyZWFkeSBjdXJyZW50XFxuXCIpO1xuK1x0XHRyZXQgPSAwO1xuK1x0XHRnb3RvIG91dF9zdztcbitcdH1cbitcbitcdG1lcmdlZCA9IGt2bWFsbG9jKG1lcmdlZF9zaXplLCBHRlBfS0VSTkVMKTtcbitcdGlmICghbWVyZ2VkKSB7XG4rXHRcdHJldCA9IC1FTk9NRU07XG4rXHRcdGdvdG8gb3V0X3N3O1xuK1x0fVxuK1x0bWVtY3B5KG1lcmdlZCwgaHdfZnctXHUwMDNlZGF0YSwgaHdfZnctXHUwMDNlc2l6ZSk7XG4rXHRtZW1jcHkobWVyZ2VkICsgaHdfZnctXHUwMDNlc2l6ZSwgc3dfZnctXHUwMDNlZGF0YSwgc3dfZnctXHUwMDNlc2l6ZSk7XG4rXG4rXHRjaGVja3N1bSA9IDA7XG4rXHRmb3IgKGkgPSAwOyBpICsgNCBcdTAwM2M9IG1lcmdlZF9zaXplOyBpICs9IDQpXG4rXHRcdGNoZWNrc3VtICs9IGdldF91bmFsaWduZWRfbGUzMihtZXJnZWQgKyBpKTtcbitcbitcdC8qIFNUQVJUX1VQREFURSAqL1xuK1x0c3ViX29pZCA9IE5DSV9QUk9QX0RVQUxfU1VCX1NUQVJUX1VQREFURTtcbitcdHJldCA9IG5jaV9wcm9wX2NtZChpbmZvLVx1MDAzZW5kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLCAxLCBcdTAwMjZzdWJfb2lkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiVW5hYmxlIHRvIHN0YXJ0IGNhbGlicmF0aW9uIGRhdGEgdXBkYXRlXFxuXCIpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdC8qIFNFVF9PUFRJT04gcGVyIHNlY3Rpb24gKi9cbitcdHNldF9vcHRpb24uc3ViX29pZCA9IE5DSV9QUk9QX0RVQUxfU1VCX1NFVF9PUFRJT047XG4rXHRzZXRfb3B0aW9uLmluZGV4ID0gMDtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1lcmdlZF9zaXplOyBpICs9IE5DSV9QUk9QX0RVQUxfU0VDVElPTl9TSVpFKSB7XG4rXHRcdGxlbiA9IG1pbl90KHNpemVfdCwgbWVyZ2VkX3NpemUgLSBpLCBOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRSk7XG4rXHRcdG1lbWNweShzZXRfb3B0aW9uLmRhdGEsIG1lcmdlZCArIGksIGxlbik7XG4rXHRcdHJldCA9IG5jaV9wcm9wX2NtZChpbmZvLVx1MDAzZW5kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLFxuK1x0XHRcdFx0ICAgbGVuICsgMiwgKF9fdTggKilcdTAwMjZzZXRfb3B0aW9uKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRcdGRldl9lcnIoZGV2LCBcImNhbGlicmF0aW9uIGRhdGEgdXBkYXRlIGVycm9yOiAlZFxcblwiLFxuK1x0XHRcdFx0cmV0KTtcbitcdFx0XHQvKiBBYm9ydCBmb3JtOiBTVE9QX1VQREFURSB3aXRoIHRoZSBzdWItT0lEIGFsb25lLiAqL1xuK1x0XHRcdHN1Yl9vaWQgPSBOQ0lfUFJPUF9EVUFMX1NVQl9TVE9QX1VQREFURTtcbitcdFx0XHRuY2lfcHJvcF9jbWQoaW5mby1cdTAwM2VuZGV2LCBOQ0lfUFJPUF9EVUFMX09QVElPTiwgMSxcbitcdFx0XHRcdCAgICAgXHUwMDI2c3ViX29pZCk7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdFx0c2V0X29wdGlvbi5pbmRleCsrO1xuK1x0fVxuK1xuK1x0LyogU1RPUF9VUERBVEUgd2l0aCBjaGVja3N1bSAqL1xuK1x0c3RvcF9jbWRbMF0gPSBOQ0lfUFJPUF9EVUFMX1NVQl9TVE9QX1VQREFURTtcbitcdHB1dF91bmFsaWduZWRfbGUxNihjaGVja3N1bSwgXHUwMDI2c3RvcF9jbWRbMV0pO1xuK1x0cmV0ID0gbmNpX3Byb3BfY21kKGluZm8tXHUwMDNlbmRldiwgTkNJX1BST1BfRFVBTF9PUFRJT04sIDMsIHN0b3BfY21kKTtcbitcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiVW5hYmxlIHRvIHN0b3AgY2FsaWJyYXRpb24gZGF0YSB1cGRhdGVcXG5cIik7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0ZGV2X2RiZyhkZXYsIFwiY2FsaWJyYXRpb24gZGF0YSB1cGRhdGU6IHN1Y2Nlc3NcXG5cIik7XG4rb3V0OlxuK1x0a3ZmcmVlKG1lcmdlZCk7XG4rb3V0X3N3OlxuK1x0cmVsZWFzZV9maXJtd2FyZShzd19mdyk7XG4rb3V0X2h3OlxuK1x0cmVsZWFzZV9maXJtd2FyZShod19mdyk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oIGIvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaFxuaW5kZXggYmM0YmNlMmJiYzRkOS4uNDUzYTFjOWQ2NWViMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmhcbisrKyBiL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmhcbkBAIC00MCw2ICs0MCw5IEBAIHN0cnVjdCBuY2lfcHJvcF9zdG9wX3JmcmVnX3JzcCB7XG4gXG4gI2RlZmluZSBOQ0lfUFJPUF9GV19DRkdcdFx0MHgyOFxuIFxuKy8qIFMzTlJONFYgc2luZ2xlLWJ5dGUgRldfQ0ZHIHBheWxvYWQ7IDB4MTEgc2VsZWN0cyB0aGUgMTkuMiBNSHogcmVmZXJlbmNlLiAqL1xuKyNkZWZpbmUgTkNJX1BST1BfRldfQ0ZHX0NMS19TUEVFRFx0MHgxMVxuK1xuIHN0cnVjdCBuY2lfcHJvcF9md19jZmdfY21kIHtcbiBcdF9fdTggY2xrX3R5cGU7XG4gXHRfX3U4IGNsa19zcGVlZDtcbkBAIC01MCw3ICs1MywyNSBAQCBzdHJ1Y3QgbmNpX3Byb3BfZndfY2ZnX3JzcCB7XG4gXHRfX3U4IHN0YXR1cztcbiB9O1xuIFxuLWV4dGVybiBjb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNF07XG4rI2RlZmluZSBOQ0lfUFJPUF9EVUFMX09QVElPTlx0XHQweDJhXG4rXG4rI2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NVQl9HRVRfVkVSXHQweDAwXG4rI2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NVQl9TVEFSVF9VUERBVEVcdDB4MDFcbisjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU1VCX1NFVF9PUFRJT05cdDB4MDJcbisjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU1VCX1NUT1BfVVBEQVRFXHQweDAzXG4rXG4rI2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRVx0MjUyXG4rXG4rc3RydWN0IG5jaV9wcm9wX2R1YWxfc2V0X29wdGlvbl9jbWQge1xuK1x0X191OCBzdWJfb2lkO1xuK1x0X191OCBpbmRleDtcbitcdF9fdTggZGF0YVtOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRV07XG4rfTtcbitcbitleHRlcm4gY29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzVdO1xuIGludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmUoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqZndfbmFtZSk7XG4raW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sXG4rXHRcdFx0XHQgIGNvbnN0IGNoYXIgKmh3X25hbWUsIGNvbnN0IGNoYXIgKnN3X25hbWUpO1xuK2ludCBzM2Z3cm41X25jaV9jbGtfY2ZnKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8pO1xuIFxuICNlbmRpZiAvKiBfX0xPQ0FMX1MzRldSTjVfTkNJX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvczNmd3JuNS9zM2Z3cm41LmggYi9kcml2ZXJzL25mYy9zM2Z3cm41L3MzZndybjUuaFxuaW5kZXggMmI0OTIyMzYwOTBiOC4uNjNmNjc5ZjE3MTY2NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvczNmd3JuNS5oXG4rKysgYi9kcml2ZXJzL25mYy9zM2Z3cm41L3MzZndybjUuaFxuQEAgLTIxLDYgKzIxLDEzIEBAIGVudW0gczNmd3JuNV9tb2RlIHtcbiBcdFMzRldSTjVfTU9ERV9GVyxcbiB9O1xuIFxuK2VudW0gczNmd3JuNV92YXJpYW50IHtcbitcdC8qIFMzRldSTjUgLyBTM0ZXUk44MjogZmlybXdhcmUgaXMgZG93bmxvYWRlZCBieSB0aGlzIGRyaXZlciAqL1xuK1x0UzNGV1JONV9WQVJJQU5UX0ZXREwsXG4rXHQvKiBTM05STjRWOiBubyBmaXJtd2FyZSBkb3dubG9hZDsgRldfQ0ZHICsgRFVBTF9PUFRJT04gYnJpbmctdXAgKi9cbitcdFMzRldSTjVfVkFSSUFOVF9TM05STjRWLFxuK307XG4rXG4gc3RydWN0IHMzZndybjVfcGh5X29wcyB7XG4gXHR2b2lkICgqc2V0X3dha2UpKHZvaWQgKmlkLCBib29sIHNsZWVwKTtcbiBcdHZvaWQgKCpzZXRfbW9kZSkodm9pZCAqaWQsIGVudW0gczNmd3JuNV9tb2RlKTtcbkBAIC0zNiw2ICs0MywxMSBAQCBzdHJ1Y3QgczNmd3JuNV9pbmZvIHtcbiBcdGNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHM7XG4gXG4gXHRzdHJ1Y3QgczNmd3JuNV9md19pbmZvIGZ3X2luZm87XG4rXHRlbnVtIHMzZndybjVfdmFyaWFudCB2YXJpYW50O1xuK1xuK1x0LyogTGFzdCBEVUFMX09QVElPTiByZXNwb25zZSBwYXlsb2FkIChHRVRfVkVSIGNhcnJpZXMgdmVyc2lvbnMpLiAqL1xuK1x0dTggZHVhbF9yc3BbMzJdO1xuK1x0dTggZHVhbF9yc3BfbGVuO1xuIFxuIFx0c3RydWN0IG11dGV4IG11dGV4O1xuIH07XG5AQCAtNzgsNyArOTAsNyBAQCBzdGF0aWMgaW5saW5lIGludCBzM2Z3cm41X3dyaXRlKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sIHN0cnVjdCBza19idWZmICpza2IpXG4gfVxuIFxuIGludCBzM2Z3cm41X3Byb2JlKHN0cnVjdCBuY2lfZGV2ICoqbmRldiwgdm9pZCAqcGh5X2lkLCBzdHJ1Y3QgZGV2aWNlICpwZGV2LFxuLVx0Y29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcyk7XG4rXHRjb25zdCBzdHJ1Y3QgczNmd3JuNV9waHlfb3BzICpwaHlfb3BzLCBlbnVtIHMzZndybjVfdmFyaWFudCB2YXJpYW50KTtcbiB2b2lkIHMzZndybjVfcmVtb3ZlKHN0cnVjdCBuY2lfZGV2ICpuZGV2KTtcbiBcbiBpbnQgczNmd3JuNV9yZWN2X2ZyYW1lKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvdWFydC5jIGIvZHJpdmVycy9uZmMvczNmd3JuNS91YXJ0LmNcbmluZGV4IDhmMTQyYTI1NTEwMTYuLjc1Mzk3YzNkYmM1OGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L3VhcnQuY1xuKysrIGIvZHJpdmVycy9uZmMvczNmd3JuNS91YXJ0LmNcbkBAIC0xMzYsNyArMTM2LDcgQEAgc3RhdGljIGludCBzM2Z3cm44Ml91YXJ0X3Byb2JlKHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXYpXG4gXHR9XG4gXG4gXHRyZXQgPSBzM2Z3cm41X3Byb2JlKFx1MDAyNnBoeS1cdTAwM2Vjb21tb24ubmRldiwgcGh5LCBcdTAwMjZwaHktXHUwMDNlc2VyX2Rldi1cdTAwM2VkZXYsXG4tXHRcdFx0ICAgIFx1MDAyNnVhcnRfcGh5X29wcyk7XG4rXHRcdFx0ICAgIFx1MDAyNnVhcnRfcGh5X29wcywgUzNGV1JONV9WQVJJQU5UX0ZXREwpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfc2VyZGV2O1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjI6MzU6MjguNDc1NDI3OTAxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ3NTAzNDUxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBTZXJpZXMgRXZhbHVhdGlvbjogczNmd3JuNSBEcml2ZXIgRW5oYW5jZW1lbnQqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSd2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgbW9kaWZ5aW5nIHRoZSBgczNmd3JuNWAgTkZDIGRyaXZlci4gU2VlbXMgbGlrZSBpdCdzIGFkZGluZyBzdXBwb3J0IGZvciBhIG5ldyB2YXJpYW50LCBgczNucm40dmAuIFRoZSBmaXJzdCB0aGluZyBJJ20gc2VlaW5nIGlzIHRoZSBhZGRpdGlvbiBvZiBhIG5ldyBjb21wYXRpYmxlIHN0cmluZywgXCJzYW1zdW5nLHMzbnJuNHZcIiwgaW4gdGhlIGRldmljZSB0cmVlIGJpbmRpbmdzLCBhbG9uZyB3aXRoIGEgY29ycmVzcG9uZGluZyBleGFtcGxlIGluIGEgRFRTIGZpbGUuIFRoYXQncyBzdGFuZGFyZCBwcm9jZWR1cmUgZm9yIGFkZGluZyBzdXBwb3J0IGZvciBhIG5ldyBoYXJkd2FyZSByZXYuIE5vdywgaXQgbG9va3MgbGlrZSBhIGZhaXJseSBjb21wcmVoZW5zaXZlIGNoYW5nZSwgdG91Y2hpbmcgc2V2ZXJhbCBjb3JlIGZpbGVzOiBgY29yZS5jYCwgYGkyYy5jYCwgYG5jaS5jYCwgYG5jaS5oYCwgYHMzZndybjUuaGAsIGFuZCBgdWFydC5jYC4gTG9va3MgbGlrZSBpdCdzIGEgZGVlcCBkaXZlLlxuXG5NeSBuZXh0IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBob3cgaXMgdGhpcyBkcml2ZXIgKnJlYWNoZWQqPyBJdCdzIGFuIE5GQyBkcml2ZXIsIHNvIEknbSBleHBlY3RpbmcgTkNJIOKAkyB0aGUgTkZDIENvbnRyb2xsZXIgSW50ZXJmYWNlIOKAkyBpcyB0aGUgbGlrZWx5IGNhbmRpZGF0ZS4gWXVwLCBzZWVtcyBJIHdhcyBjb3JyZWN0LiBUaGUgcGF0Y2ggZXh0ZW5kcyB0aGUgZXhpc3RpbmcgTkNJIGZ1bmN0aW9uYWxpdHkgdG8gaGFuZGxlIHRoZSBgczNucm40dmAuIEknbSBzZWVpbmcgYWRkaXRpb25zIHRvIG1hbmFnZSB0aGUgcHJvcHJpZXRhcnkgY29tbWFuZHMgYW5kIHJlc3BvbnNlcyBmb3IgdGhpcyBuZXcgdmFyaWFudCwgZ29vZC4gU3BlY2lmaWNhbGx5LCB0aGUgYHMzZndybjVfbmNpX3Byb3Bfb3BzYCBzdHJ1Y3R1cmUgaXMgYmVpbmcgZXh0ZW5kZWQgd2l0aCBgTkNJX1BST1BfRFVBTF9PUFRJT05gLCBhbmQgdGhlcmUgYXJlIG5ldyBmdW5jdGlvbnMgYmVpbmcgYWRkZWQ6IGBzM2Z3cm41X25jaV9kdWFsX3JzcGAsIGBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbGAsIGFuZCBgczNmd3JuNV9uY2lfY2xrX2NmZ2AuIFRoaXMgaXMgYWxsIG1ha2luZyBzZW5zZSwgZGVhbGluZyB3aXRoIHRoZSBsb3ctbGV2ZWwgY29tbXVuaWNhdGlvbi5cblxuRmluYWxseSwgYmVmb3JlIEkgZGlnIHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIEkgd2FudCB0byBjb25maXJtIHRoYXQgdGhpcyBgczNmd3JuNWAgZHJpdmVyIGlzIGV2ZW4gZW5hYmxlZCBpbiBhbnkgY29uZmlnLiBHb2luZyB0byBydW4gYGdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgYENPTkZJR19ORkNfUzNGV1JONWAgdG8gc2VlIHdoYXQgSSBjYW4gZmluZC4gR290dGEgbWFrZSBzdXJlIHRoZSBjb2RlIGlzIGFjdHVhbGx5IHVzZWQgc29tZXdoZXJlISBPa2F5LCBsZXQncyBzZWUgd2hhdCB0aGF0IHR1cm5zIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTg0LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjI6MzU6MzQuOTUwNDY0ODg4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzU3NDI0ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX05GQ19TM0ZXUk41XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtL2NvbmZpZ3MvZXh5bm9zX2RlZmNvbmZpZz04Mz1DT05GSUdfTkZDX1NIRExDPXlcXG5hcmNoL2FybS9jb25maWdzL2V4eW5vc19kZWZjb25maWc6ODQ6Q09ORklHX05GQ19TM0ZXUk41X0kyQz15XFxuYXJjaC9hcm0vY29uZmlncy9leHlub3NfZGVmY29uZmlnLTg1LUNPTkZJR19ERVZUTVBGUz15XFxuLS1cXG5hcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZz0xNzM9Q09ORklHX05GQ19TSERMQz15XFxuYXJjaC9hcm0vY29uZmlncy9tdWx0aV92N19kZWZjb25maWc6MTc0OkNPTkZJR19ORkNfUzNGV1JONV9JMkM9bVxcbmFyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnLTE3NS1DT05GSUdfUENJRVBPUlRCVVM9eVxcbi0tXFxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZz0yMDg9Q09ORklHX05GQ19OWFBfTkNJX0kyQz1tXFxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZzoyMDk6Q09ORklHX05GQ19TM0ZXUk41X0kyQz1tXFxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZy0yMTAtQ09ORklHX1BDST15XFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1vZi5jPTQ4Nz1zdGF0aWMgc3RydWN0IGdwaW9fZGVzYyAqb2ZfZmluZF9ncGlvX3JlbmFtZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW9saWItb2YuYy01MjYtI2VuZGlmXFxuZHJpdmVycy9ncGlvL2dwaW9saWItb2YuYzo1Mjc6I2lmIElTX0VOQUJMRUQoQ09ORklHX05GQ19TM0ZXUk41X0kyQylcXG5kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1vZi5jLTUyOC1cXHRcXHR7IFxcXCJlblxcXCIsXFx0XFx0XFxcInMzZndybjUsZW4tZ3Bpb3NcXFwiLFxcdFxcXCJzYW1zdW5nLHMzZndybjUtaTJjXFxcIiB9LFxcbi0tXFxuZHJpdmVycy9uZmMvTWFrZWZpbGU9MTc9b2JqLSQoQ09ORklHX05GQ19OWFBfTkNJKVxcdCs9IG54cC1uY2kvXFxuZHJpdmVycy9uZmMvTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX05GQ19TM0ZXUk41KVxcdCs9IHMzZndybjUvXFxuZHJpdmVycy9uZmMvTWFrZWZpbGUtMTktb2JqLSQoQ09ORklHX05GQ19TVDk1SEYpXFx0Kz0gc3Q5NWhmL1xcbi0tXFxuZHJpdmVycy9uZmMvczNmd3JuNS9NYWtlZmlsZT04PXMzZndybjgyX3VhcnQtb2JqcyA9IHVhcnQub1xcbmRyaXZlcnMvbmZjL3MzZndybjUvTWFrZWZpbGUtOS1cXG5kcml2ZXJzL25mYy9zM2Z3cm41L01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19ORkNfUzNGV1JONSkgKz0gczNmd3JuNS5vXFxuZHJpdmVycy9uZmMvczNmd3JuNS9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfTkZDX1MzRldSTjVfSTJDKSArPSBzM2Z3cm41X2kyYy5vXFxuZHJpdmVycy9uZmMvczNmd3JuNS9NYWtlZmlsZS0xMi1vYmotJChDT05GSUdfTkZDX1MzRldSTjgyX1VBUlQpICs9IHMzZndybjgyX3VhcnQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMjozNTozNi43MjYyMTI3MTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjkyNzIzOTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIFMzRldSTjUgTkZDIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYENPTkZJR19ORkNfUzNGV1JONWAgZHJpdmVyLCBhbmQgaXQgYWxzbyB1c2VzIGBDT05GSUdfTkZDX1MzRldSTjVfSTJDYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIGl0J3MgcmVnaXN0ZXJpbmcgaXRzZWxmIHRocm91Z2ggYm90aCBgaTJjX2RyaXZlcmAgYW5kIGBzZXJkZXZfZGV2aWNlX2RyaXZlcmAsIHdoaWNoIGlzIGdvb2QgdG8ga25vdywgYW5kIG1lYW5zIEkgaGF2ZSBhIGZldyBkaWZmZXJlbnQgYW5nbGVzIHRvIGFwcHJvYWNoIHRoaXMuIENhbiBJIGZ1enogdGhpcyBlZmZlY3RpdmVseT8gQWJzb2x1dGVseS4gU3l6a2FsbGVyJ3MgYHN5el9pMmNgIGFuZCB2aXJ0dWFsIEkyQyBkZXZpY2VzIHdvdWxkIGJlIHBlcmZlY3QgZm9yIHRoZSBJMkMgYXNwZWN0LiBQbHVzLCB0aGUgTkNJIGludGVyZmFjZSBpcyBleHBvc2VkIHRvIHVzZXItc3BhY2UgdGhyb3VnaCBuZXRsaW5rIG9yIHNvY2tldHMsIGFuZCBTeXprYWxsZXIgaGFzIHNvbGlkIHN1cHBvcnQgZm9yIE5DSS9ORkMgZnV6emluZy4gVGhhdCdzIGEgbWFqb3IgYWR2YW50YWdlLlxuXG5BaCwgd2FpdCwgaXQncyBhbiBOQ0kgZHJpdmVyIOKAkyBgczNmd3JuNWAuIFRoYXQgbWVhbnMgaXQgcmVnaXN0ZXJzIHRocm91Z2ggYG5jaV9hbGxvY2F0ZV9kZXZpY2VgIGFuZCBgbmNpX3JlZ2lzdGVyX2RldmljZWAuIFRoZSBOQ0kgY29yZSB3aWxsIGhhbmRsZSBhIGxvdCBvZiB0aGUgY29tbXVuaWNhdGlvbiwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyLiBUaGUgZHJpdmVyIGltcGxlbWVudHMgYG5jaV9vcHNgIChgczNmd3JuNV9uY2lfb3BzYCksIHdoaWNoIGluY2x1ZGVzIHRoZSBzdGFuZGFyZCBzdHVmZiBsaWtlIGBpbml0YCwgYG9wZW5gLCBgY2xvc2VgLCBgc2VuZGAsIGBzZXR1cGAsIGBwb3N0X3NldHVwYCwgYW5kIGBwcm9wX29wc2AuIFRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHMgYHMzZndybjVfbmNpX2luaXRgIHRvIGBuY2lfb3BzYCwgYW5kIGFsc28gYHMzZndybjVfbmNpX2R1YWxfcnNwYCB0byBgczNmd3JuNV9uY2lfcHJvcF9vcHNgLiBJdCBhZGRzIGBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbGAgYXMgd2VsbCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYHMzZndybjVfbmNpX3Bvc3Rfc2V0dXBgLlxuXG5Ob3csIGhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nOiBgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWxgIGNhbGxzIGBmaXJtd2FyZV9yZXF1ZXN0X25vd2FybmAuIFRoYXQncyBhIGJpZyBmbGFnLiBUaGF0IG1lYW5zIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIGNhbiBkZWZpbml0ZWx5IHRyaWdnZXIgdGhhdCBjb2RlIHBhdGguXG5cbk9rYXksIGxldCdzIG5haWwgZG93biB3aGljaCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcuIFdlJ3ZlIGdvdDpcblxuKiAgIGBzM2Z3cm41X25jaV9pbml0YFxuKiAgIGBzM2Z3cm41X25jaV9kdWFsX3JzcGBcbiogICBgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWxgXG4qICAgYHMzZndybjVfbmNpX2Nsa19jZmdgXG5cbkkgbmVlZCB0byBxdWlja2x5IGNoZWNrIGBkcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jYCB0byBzZWUgaWYgdGhvc2UgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBzdGF0aWMgb3Igbm90IHRvIGNvbmZpcm0gdGhleSdyZSBhY3R1YWxseSBleHBvc2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUwMCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMjozNTo0NS4wMTg5NDAxMjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA1MjQ5MzI1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzM2Z3cm41X25jaV9kdWFsX3JzcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jPTE4PXN0YXRpYyBpbnQgczNmd3JuNV9uY2lfcHJvcF9yc3Aoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jLTMwLSAqL1xcbmRyaXZlcnMvbmZjL3MzZndybjUvbmNpLmM6MzE6c3RhdGljIGludCBzM2Z3cm41X25jaV9kdWFsX3JzcChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jLTMyLXtcXG4tLVxcbmRyaXZlcnMvbmZjL3MzZndybjUvbmNpLmM9NDM9Y29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzVdID0ge1xcbi0tXFxuZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuYy02Ni1cXHRcXHRcXHRcXHROQ0lfUFJPUF9EVUFMX09QVElPTiksXFxuZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuYzo2NzpcXHRcXHQucnNwID0gczNmd3JuNV9uY2lfZHVhbF9yc3AsXFxuZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuYy02OC1cXHR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMjozNTo0Ny4wNzE0NDM1NDlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDc2NDg2MTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBORkMgRHJpdmVyIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gb3B0aW1pemUgaXQgYmFzZWQgb24gdGhlIGluc3RydWN0aW9uIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGBzM2Z3cm41X25jaV9kdWFsX3JzcGAgaXMgc3RhdGljLCB3aGljaCBtaWdodCBiZSBhIHBvdGVudGlhbCBpc3N1ZS4gQnV0IGhhbmcgb24uLi4gaXQncyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiBgczNmd3JuNV9uY2lfcHJvcF9vcHNgLiBUaGlzIG1lYW5zIHRoZSBjb21waWxlciB3b24ndCBpbmxpbmUgaXQsIHdoaWNoIGFjdHVhbGx5IG1ha2VzIGl0IHN1aXRhYmxlIGZvciB1c2UuXG5cbkxldCdzIHNlZeKApiBJIGtub3cgdGhhdCBgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWxgIGFuZCBgczNmd3JuNV9uY2lfY2xrX2NmZ2AgYXJlICpub24qLXN0YXRpYywgc28gdGhleSdyZSBpbiBhIGdvb2Qgc3RhdGUuIEhvd2V2ZXIsIEkgcmVjYWxsIHRoYXQgYHMzZndybjVfbmNpX2luaXRgICppcyogc3RhdGljLiBCdXQgaXQgaXMgcGFzc2VkIHdpdGhpbiBgbmNpX29wc2AuIFRoYXQgc2VlbXMgc2ltaWxhciB0byB0aGUgYHMzZndybjVfbmNpX2R1YWxfcnNwYCBzaXR1YXRpb24sIGFuZCBtYXkgYmUgZmluZS5cblxuVG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IGBzM2Z3cm41X25jaV9pbml0YCwgSSdsbCBxdWlja2x5IGNoZWNrIGl0cyBkZWZpbml0aW9uIGluIGBkcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuY2AuIEkgbmVlZCB0byByZXZpZXcgaG93IGl0J3MgdXNlZCB3aXRoaW4gdGhhdCBmaWxlIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBpbW1lZGlhdGUgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTA1LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIyOjM1OjUyLjU0NzkzMTgxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDAzNjM3ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiczNmd3JuNV9uY2lfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYz00MT1zdGF0aWMgaW50IHMzZndybjVfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYy03OS1cXG5kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYzo4MDpzdGF0aWMgaW50IHMzZndybjVfbmNpX2luaXQoc3RydWN0IG5jaV9kZXYgKm5kZXYpXFxuZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmMtODEte1xcbi0tXFxuZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmM9MTc5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmNpX29wcyBzM2Z3cm41X25jaV9vcHMgPSB7XFxuZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmM6MTgwOlxcdC5pbml0ID0gczNmd3JuNV9uY2lfaW5pdCxcXG5kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYy0xODEtXFx0Lm9wZW4gPSBzM2Z3cm41X25jaV9vcGVuLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMjozNTo1NC4xNDgzMDA2NzRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTE3NTIxMDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgU3RhdGljIE5hdHVyZSBvZiBhIER1YWwgUkYgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgc2l0dWF0aW9uIGlzIFwic3RhdGljXCIuIFRoYXQgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgcHJvYmxlbSDigJMgb3IgYXQgbGVhc3QsIHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGNhcmVmdWwgaW52ZXN0aWdhdGlvbi4gSSdtIGluZmVycmluZyBhIGxhY2sgb2YgZHluYW1pc20sIHBvc3NpYmx5IGEgaGFyZGNvZGVkIGNvbmZpZ3VyYXRpb24gb3IgYSBmaXhlZCBzdGF0ZS4gVGhpcyBmZWVscyBsaWtlIGEgc21lbGwgdGVzdCwgc28gSSBuZWVkIHRvIGRpZyBkZWVwZXIuXG5cbk15IGltbWVkaWF0ZSBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQgb2YgbGlrZWx5IE5GQy9SRiBhbmQgZHVhbCBjb25maWd1cmF0aW9ucywgaXMgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBrZXJuZWwgY29kZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGBzM2Z3cm41YCBkcml2ZXIsIGFuZCBpdCdzIGFsbW9zdCBjZXJ0YWluIHRoYXQgdGhlIGtleSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgdGhpcyBkdWFsIFJGIHNldHVwIGlzIGBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbGAgd2l0aGluIGBkcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jYC4gSSBoYXZlIGEgZmVlbGluZyB0aGUgc3RhdGljLW5lc3MgSSdtIHNlbnNpbmcgaXMgcmVmbGVjdGVkIHNvbWV3aGVyZSB3aXRoaW4gdGhhdCBmdW5jdGlvbiwgd2hldGhlciBpdCdzIHRocm91Z2ggdGhlIHBhcmFtZXRlcnMgcGFzc2VkLCB0aGUgbG9naWMgZmxvdywgb3IgdGhlIHdheSByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZC4gTXkgZ3V0IHNheXMgdGhhdCB0aGlzIGlzIHRoZSBwb2ludCB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBpcyBoYXJkY29kZWQsIHByZXZlbnRpbmcgdGhlIHN5c3RlbSBmcm9tIGFkanVzdGluZyBkeW5hbWljYWxseSB0byB1c2VyIG5lZWRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzcxMiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIyOjM1OjU3LjY2NTgyNDgxOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NDcxOTYwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYz0xNDQ9c3RhdGljIGludCBzM2Z3cm41X25jaV9wb3N0X3NldHVwKHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmMtMTQ5LVxcdGlmIChpbmZvLVxcdTAwM2V2YXJpYW50ID09IFMzRldSTjVfVkFSSUFOVF9TM05STjRWKSB7XFxuZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmM6MTUwOlxcdFxcdHJldCA9IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsKGluZm8sIFMzTlJONFZfSFdSRUdfTkFNRSxcXG5kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYy0xNTEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFMzTlJONFZfU1dSRUdfTkFNRSk7XFxuLS1cXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jPTE2Nz1zdGF0aWMgYm9vbCBzM2Z3cm41X25jaV9kdWFsX2NhbF9jdXJyZW50KHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sXFxuLS1cXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jLTE4Ny0gKi9cXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jOjE4ODppbnQgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWwoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbyxcXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jLTE4OS1cXHRcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKmh3X25hbWUsIGNvbnN0IGNoYXIgKnN3X25hbWUpXFxuLS1cXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oPTcyPWludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmUoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqZndfbmFtZSk7XFxuZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaDo3MzppbnQgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWwoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbyxcXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oLTc0LVxcdFxcdFxcdFxcdCAgY29uc3QgY2hhciAqaHdfbmFtZSwgY29uc3QgY2hhciAqc3dfbmFtZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIyOjM1OjU5LjI1MDU1MDA3NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDcyNjk2Nzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqQW5hbHl6aW5nIHRoZSBOb24tU3RhdGljIE5hdHVyZSoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyB0aGlzIGlzIG5vdCBhIHN0YXRpYyBzaXR1YXRpb24sIHRoYXQncyB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgYXQgbWUuIFdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgZHluYW1pYyBoZXJlLiBUaGF0IG1lYW5zIHRoZSBmb2N1cyBzaGlmdHMsIHdlIG5lZWQgdG8gbG9vayBmb3IgdGhlIHRoaW5ncyB0aGF0IGFyZSB2YXJpYWJsZS4gTGV0J3Mgc2VlLi4uIHdoYXQncyB0aGUgbmV4dCBzdGVwPyBNeSBndXQgc2F5cyB3ZSBuZWVkIHRvIGxvb2sgYXQgd2hhdCdzIGNoYW5naW5nLiBSaWdodC4gT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoYXQgYHMzZndybjVfbmNpX2Nsa19jZmdgIGVsZW1lbnQuIFRoaXMgc2VlbXMgbGlrZSBhIHBpdm90YWwgcGllY2UsIGNvbnNpZGVyaW5nIHdoYXQgd2UncmUgbG9va2luZyBhdC4gR290dGEgZmlndXJlIG91dCB3aGF0IGl0J3MgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTU1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjI6MzY6MDIuNzIzMjU4NzIzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAyNTIyNjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInMzZndybjVfbmNpX2Nsa19jZmdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmM9ODA9c3RhdGljIGludCBzM2Z3cm41X25jaV9pbml0KHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmMtODUtXFx0aWYgKGluZm8tXFx1MDAzZXZhcmlhbnQgPT0gUzNGV1JONV9WQVJJQU5UX1MzTlJONFYpIHtcXG5kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYzo4NjpcXHRcXHRyZXQgPSBzM2Z3cm41X25jaV9jbGtfY2ZnKGluZm8pO1xcbmRyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jLTg3LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuYz03Mz1pbnQgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sIGNvbnN0IGNoYXIgKmZ3X25hbWUpXFxuLS1cXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jLTE0OS0gKi9cXG5kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jOjE1MDppbnQgczNmd3JuNV9uY2lfY2xrX2NmZyhzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvKVxcbmRyaXZlcnMvbmZjL3MzZndybjUvbmNpLmMtMTUxLXtcXG4tLVxcbmRyaXZlcnMvbmZjL3MzZndybjUvbmNpLmg9NzM9aW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sXFxuZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaC03NC1cXHRcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKmh3X25hbWUsIGNvbnN0IGNoYXIgKnN3X25hbWUpO1xcbmRyaXZlcnMvbmZjL3MzZndybjUvbmNpLmg6NzU6aW50IHMzZndybjVfbmNpX2Nsa19jZmcoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbyk7XFxuZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaC03Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjI6MzY6MDQuMzI1NzkwMzU3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2ODE5ODQxMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTM0ZXUk41IE5DSSBEcml2ZXIgRW50cnlwb2ludHMqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzbid0IGEgc3RhdGljIHNpdHVhdGlvbi4gR29vZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgdGhlIFMzRldSTjUgTkNJIGRyaXZlci4gQmFzZWQgb24gd2hhdCdzIGhlcmUsIHRoZSBpbml0aWFsIGZ1bmN0aW9ucyB0byBjb25zaWRlciBhcmU6IGBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbGAsIGBzM2Z3cm41X25jaV9jbGtfY2ZnYCwgYHMzZndybjVfbmNpX2R1YWxfcnNwYCwgYW5kIGBzM2Z3cm41X25jaV9pbml0YC5cblxuV2FpdCBhIG1pbnV0ZSwgYHMzZndybjVfbmNpX2R1YWxfcnNwYCBhbmQgYHMzZndybjVfbmNpX2luaXRgIGFyZSAqc3RhdGljKi4gTm9ybWFsbHksIEknZCBza2lwIHRob3NlLCBidXQgdGhleSBhcmUgYWxzbyBwYXNzZWQgYXJvdW5kIGFzIGZ1bmN0aW9uIHBvaW50ZXJzLCB3aGljaCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHRoZXkgd29uJ3QgYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIFNpbmNlIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIGJ1dCB0aGVzZSAqYXJlKiBlbnRyeXBvaW50cyBmcm9tIHRoZSBOQ0kgY29yZSwgSSdsbCBpbmNsdWRlIHRoZW0uIFRodXMsIGBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbGAgYW5kIGBzM2Z3cm41X25jaV9jbGtfY2ZnYCB3aWxsIGJlIHRoZSBwcmltYXJ5IGZvY3VzLiBJbmNsdWRpbmcgYHMzZndybjVfbmNpX2R1YWxfcnNwYCBhbmQgYHMzZndybjVfbmNpX2luaXRgIGlzIGFsc28gcmVsZXZhbnQgYmVjYXVzZSB0aGV5IGFyZSBpbXBvcnRhbnQgcGFydHMgb2YgdGhpcyBzdWJzeXN0ZW0uXG5cbk5vdywgbGV0J3MganVzdCBxdWlja2x5IGNoZWNrIGZvciBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBkZWZpbmVzLiBJdCBsb29rcyBsaWtlIGBORkNfUzNGV1JONWAgYW5kIGBORkNfUzNGV1JONV9JMkNgIGFyZSBsaWtlbHkgY2FuZGlkYXRlcy4gSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjaGVjayB0aGUgYGRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZ2AgZmlsZSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbnMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjQwLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIyOjM2OjEwLjAwNzc3NjgxN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0MzE5ODQ1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZDX1MzRldSTjVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnOjI6Y29uZmlnIE5GQ19TM0ZXUk41XFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTMtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZy05LVxcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZzoxMDpjb25maWcgTkZDX1MzRldSTjVfSTJDXFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTExLVxcdHRyaXN0YXRlIFxcXCJTYW1zdW5nIFMzRldSTjUgSTJDIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIyOjM2OjExLjY1MDk4MDMxNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDk4Nzc3MDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGF0IEtjb25maWcgZmlsZTpcblxuKipEaXZpbmcgaW50byB0aGUgTkZDIERyaXZlcidzIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBjcmFjayBvcGVuIGBkcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWdgLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIFMzRldSTjUgTkZDIGRyaXZlciBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBJbW1lZGlhdGVseSwgSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIHR5cGljYWwgc3RydWN0dXJlIG9mIGEgS2NvbmZpZyBmaWxlOiBkZXBlbmRlbmNpZXMsIGhlbHAgdGV4dCwgYW5kIHRoZSBhY3R1YWwgY29uZmlndXJhdGlvbiBzeW1ib2xzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBtYWluIGVuYWJsZSBvcHRpb24gZm9yIHRoZSBkcml2ZXIsIEknbSBzdXJlIGl0IHdpbGwgYmUgc29tZXRoaW5nIGxpa2UgYENPTkZJR19ORkNfUzNGV1JONWAuIFRoZW4gSSB3aWxsIGxvb2sgZm9yIGFueSBzdWItb3B0aW9ucywgbWF5YmUgSSB3aWxsIGZpbmQgc2V0dGluZ3MgdG8gdG9nZ2xlIHNwZWNpZmljIGZlYXR1cmVzLCBsaWtlIGRpZmZlcmVudCBORkMgbW9kZXMgb3IgcG93ZXItc2F2aW5nIGNvbmZpZ3VyYXRpb25zLCBvciBldmVuIGRlYnVnIG9wdGlvbnMuXG5cbkknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB0aGUgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGtlcm5lbCBjb21wb25lbnRzLCBoYXJkd2FyZSBpbnRlcmZhY2VzIChsaWtlIEkyQywgU1BJKSwgb3IgZXZlbiBvdGhlciBORkMgbW9kdWxlcyB0aGlzIGRyaXZlciByZWxpZXMgb24uIEFyZSB0aGVyZSBhbnkgcGxhdGZvcm0tc3BlY2lmaWMgZGVwZW5kZW5jaWVzPyBUaGF0IHdpbGwgaW5mbHVlbmNlIGhvdyBJIGludGVycHJldCB0aGUgb3B0aW9ucy5cblxuVGhlIGhlbHAgdGV4dCBpcyBjcnVjaWFsLiBJIGV4cGVjdCBpdCB0byBnaXZlIG1lIGEgY29uY2lzZSBkZXNjcmlwdGlvbiBvZiB0aGUgZHJpdmVyJ3MgcHVycG9zZSwgdGhlIGRldmljZSBpdCBzdXBwb3J0cywgYW5kIHBvdGVudGlhbGx5IGFueSBsaW1pdGF0aW9ucyBvciBrbm93biBpc3N1ZXMuIFRoaXMgaXMgYWxzbyB3aGVyZSBJIHdpbGwgZmluZCBpbmZvcm1hdGlvbiBvbiBob3cgdGhlIG9wdGlvbnMgaW50ZXJhY3QgYW5kIHdoYXQgdGhleSBkby5cblxuRmluYWxseSwgSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkZWZhdWx0IHZhbHVlcyBvZiB0aGVzZSBvcHRpb25zLiBBcmUgdGhleSBzZW5zaWJsZSBmb3IgYSB3aWRlIHJhbmdlIG9mIGRldmljZXMsIG9yIGFyZSB0aGV5IGdlYXJlZCB0b3dhcmRzIGEgcGFydGljdWxhciBoYXJkd2FyZSBzZXR1cD8gVGhpcyBoZWxwcyBtZSB1bmRlcnN0YW5kIHRoZSBpbnRlbmRlZCB1c2UgY2FzZSBvZiB0aGUgZHJpdmVyLiBJZiB0aGUgZGVmYXVsdCBzZXR0aW5ncyBhcmUgb2JzY3VyZSwgSSdsbCBuZWVkIHRvIGRyaWxsIGRvd24gZGVlcGVyIGludG8gdGhlIGRvY3VtZW50YXRpb24uIFVsdGltYXRlbHksIEknbGwgYmUgdXNpbmcgdGhpcyBpbmZvcm1hdGlvbiB0byBkZXRlcm1pbmUgaG93IHRvIGJlc3QgYnVpbGQgYW5kIGNvbmZpZ3VyZSBhIGtlcm5lbCB3aXRoIHRoaXMgZHJpdmVyLCBhbmQgaG93IHRvIHRyb3VibGVzaG9vdCBpdCBpZiB0aGVyZSBhcmUgYW55IGlzc3Vlcy4gVGhpcyBmaWxlIHdpbGwgYmUgbXkgcm9hZG1hcCB0byB1bmRlcnN0YW5kaW5nIGFuZCBjb250cm9sbGluZyB0aGUgUzNGV1JONSBkcml2ZXIncyBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxNjIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMjozNjoxNS43NDk3NjAyOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTkZDX1MzRldSTjVcXG4gICAzOlxcdFxcdHRyaXN0YXRlXFxuICAgNDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIENvcmUgZHJpdmVyIGZvciBTYW1zdW5nIFMzRldSTjUgTkZDIGNoaXAuIENvbnRhaW5zIGNvcmUgdXRpbGl0aWVzXFxuICAgNzpcXHRcXHQgIG9mIGNoaXAuIEl0J3MgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBQSFlzIHRvIGF2b2lkIGR1cGxpY2F0aW5nIGxvdHNcXG4gICA4OlxcdFxcdCAgb2YgY29tbW9uIGNvZGUuXFxuICAgOTpcXHRcXG4gIDEwOlxcdGNvbmZpZyBORkNfUzNGV1JONV9JMkNcXG4gIDExOlxcdFxcdHRyaXN0YXRlIFxcXCJTYW1zdW5nIFMzRldSTjUgSTJDIHN1cHBvcnRcXFwiXFxuICAxMjpcXHRcXHRkZXBlbmRzIG9uIE5GQ19OQ0kgXFx1MDAyNlxcdTAwMjYgSTJDXFxuICAxMzpcXHRcXHRzZWxlY3QgTkZDX1MzRldSTjVcXG4gIDE0OlxcdFxcdGRlZmF1bHQgblxcbiAgMTU6XFx0XFx0aGVscFxcbiAgMTY6XFx0XFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIGFuIEkyQyBpbnRlcmZhY2UgdG8gdGhlIFMzRldSTjUgY2hpcC5cXG4gIDE3OlxcdFxcdCAgU2VsZWN0IHRoaXMgaWYgeW91ciBwbGF0Zm9ybSBpcyB1c2luZyB0aGUgSTJDIGJ1cy5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgbSBoZXJlLiBUaGUgbW9kdWxlIHdpbGxcXG4gIDIwOlxcdFxcdCAgYmUgY2FsbGVkIHMzZndybjVfaTJjLmtvLlxcbiAgMjE6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuICAyMjpcXHRcXG4gIDIzOlxcdGNvbmZpZyBORkNfUzNGV1JOODJfVUFSVFxcbiAgMjQ6XFx0ICAgICAgICB0cmlzdGF0ZSBcXFwiU2Ftc3VuZyBTM0ZXUk44MiBVQVJUIHN1cHBvcnRcXFwiXFxuICAyNTpcXHQgICAgICAgIGRlcGVuZHMgb24gTkZDX05DSSBcXHUwMDI2XFx1MDAyNiBTRVJJQUxfREVWX0JVU1xcbiAgMjY6XFx0ICAgICAgICBzZWxlY3QgTkZDX1MzRldSTjVcXG4gIDI3OlxcdCAgICAgICAgaGVscFxcbiAgMjg6XFx0ICAgICAgICAgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgYSBVQVJUIGludGVyZmFjZSB0byB0aGUgUzNGV1JOODIgY2hpcC5cXG4gIDI5OlxcdCAgICAgICAgICBTZWxlY3QgdGhpcyBpZiB5b3VyIHBsYXRmb3JtIGlzIHVzaW5nIHRoZSBVQVJUIGJ1cy5cXG4gIDMwOlxcdFxcbiAgMzE6XFx0ICAgICAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBtIGhlcmUuIFRoZSBtb2R1bGUgd2lsbFxcbiAgMzI6XFx0ICAgICAgICAgIGJlIGNhbGxlZCBzM2Z3cm44Ml91YXJ0LmtvLlxcbiAgMzM6XFx0ICAgICAgICAgIFNheSBOIGlmIHVuc3VyZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjI6MzY6MTUuNzQ5ODM4MDFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIwMjUxNjM0MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBQbGFuIGZvciB0aGUgUzNGV1JONSBORkMgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYHMzZndybjVgIE5GQyBkcml2ZXIgYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZmlndXJlIG91dCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiAgSSBuZWVkIHRvIGdldCBzdXBwb3J0IGZvciB0aGlzIGBzM25ybjR2YCB2YXJpYW50IHdvcmtpbmcuICBUaGUgY29kZSBtZW50aW9ucyBgTkZDX1MzRldSTjVfSTJDYCBhbmQgYE5GQ19TM0ZXUk44Ml9VQVJUYCwgcmlnaHQ/IEFuZCBiYXNlZCBvbiB0aGUgZGVwZW5kZW5jaWVzLCBpdCBsb29rcyBsaWtlIGBORkNfUzNGV1JONV9JMkNgIGRlcGVuZHMgb24gYE5GQ19OQ0lgIGFuZCBgSTJDYCwgd2hpbGUgYE5GQ19TM0ZXUk44Ml9VQVJUYCBkZXBlbmRzIG9uIGBORkNfTkNJYCBhbmQgYFNFUklBTF9ERVZfQlVTYC4gTWFrZXMgc2Vuc2UuICBJIG5lZWQgYm90aCBvZiB0aG9zZSAtIGBORkNfUzNGV1JONV9JMkNgIGFuZCBgTkZDX1MzRldSTjgyX1VBUlRgLiAgYE5GQ19OQ0lgIGlzIGEgY29yZSBORkMgY29uZmlnLCBzbyBJJ2xsIGJlIHN1cmUgdGhhdCBpcyBpbmNsdWRlZC4gV2UgY2FuIGluY2x1ZGUgdGhlIG90aGVycyBpZiBuZWNlc3NhcnkuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgZnVuY3Rpb25zIHRoZW1zZWx2ZXMuICBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgSSBuZWVkIHRvIGZvY3VzIG9uOlxuKiAgIGBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbGBcbiogICBgczNmd3JuNV9uY2lfY2xrX2NmZ2BcbiogICBgczNmd3JuNV9uY2lfZHVhbF9yc3BgXG4qICAgYHMzZndybjVfbmNpX2luaXRgXG5cbldhaXQsIGBzM2Z3cm41X25jaV9kdWFsX3JzcGAgYW5kIGBzM2Z3cm41X25jaV9pbml0YCBhcmUgc3RhdGljLiAgSG93ZXZlciwgdGhleSdyZSBub3QgaW5saW5lZCwgd2hpY2ggbWFrZXMgdGhlbSBlbnRyeSBwb2ludHMgZm9yIHRoZSBuZXcgZnVuY3Rpb25hbGl0eS4gU28gSSB3aWxsIGluY2x1ZGUgdGhlbS4gYHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsYCBhbmQgYHMzZndybjVfbmNpX2Nsa19jZmdgIGFyZSBhbHNvIG5vdCBzdGF0aWMuIEkgdGhpbmsgSSdsbCBpbmNsdWRlIHRob3NlIHRvbyBiZWNhdXNlIHRoZXkgYXJlIG5vdCBzdGF0aWMuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQgbWUgZG91YmxlLWNoZWNrLiBgczNmd3JuNV9uY2lfaW5pdGAgaXMgc3RhdGljLiBZZXMuIEFuZCBgczNmd3JuNV9uY2lfZHVhbF9yc3BgIGlzIGFsc28gc3RhdGljLCBhcyBJIHRob3VnaHQuIFdoYXQgYWJvdXQgYHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsYD8gTm8sIG5vdCBzdGF0aWMuIEFuZCBgczNmd3JuNV9uY2lfY2xrX2NmZ2A/IEFsc28gbm90IHN0YXRpYy5cblxuU28sIGhlcmUncyB3aGF0IEknbSBpbmNsdWRpbmcgaW4gdGhlIGZpbmFsIGxpc3Q6XG5cbkZ1bmN0aW9ucyB0byBsb29rIGF0OlxuKiAgIGBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbGBcbiogICBgczNmd3JuNV9uY2lfY2xrX2NmZ2BcbiogICBgczNmd3JuNV9uY2lfZHVhbF9yc3BgXG4qICAgYHMzZndybjVfbmNpX2luaXRgXG5cbkNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZTpcbiogICBgTkZDX1MzRldSTjVfSTJDYFxuKiAgIGBORkNfUzNGV1JOODJfVUFSVGBcbiogICBgTkZDX05DSWBcblxuVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIGBzM25ybjR2YCB2YXJpYW50IHRvIHRoZSBgczNmd3JuNWAgTkZDIGRyaXZlci4gVGhpcyBuZXcgdmFyaWFudCBoYXMgbmV3IE5DSSBjb21tYW5kcyBhbmQgcmVzcG9uc2VzIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IFJGIGNvbmZpZ3VyYXRpb24gcm91dGluZS4gVGhlIGRyaXZlciBpcyBhY2Nlc3NpYmxlIHZpYSB0aGUgTkNJIGludGVyZmFjZSBhbmQgdGhlIEkyQy9VQVJUIGJ1c2VzLiAgSSBzaG91bGQgYmUgYWJsZSB0byBmdXp6IGl0IHVzaW5nIHZpcnR1YWwgZGV2aWNlcyBvciBzeXprYWxsZXIncyBOQ0kgc3VwcG9ydC5cblxuT25lIGZpbmFsIGNoZWNrLiBJIHNlZSB0aGF0IGBzM2Z3cm41X25jaV9kdWFsX3JzcGAgaXMgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciBpbiBgczNmd3JuNV9uY2lfcHJvcF9vcHNgLCBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkLiBTaW1pbGFybHksIGBzM2Z3cm41X25jaV9pbml0YCBpcyBpbiBgczNmd3JuNV9uY2lfb3BzYC5cblxuQWxyaWdodCwgSSdtIGNvbmZpZGVudCB3aXRoIHRoaXMuIEkgd2lsbCBub3cgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxNTksIk91dHB1dFRva2VucyI6MjA5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzk3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjI6MzY6MjcuNzc1MDAzNjExWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg3MDA1NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GQ19OQ0lcIixcbiAgICBcIk5GQ19TM0ZXUk41X0kyQ1wiLFxuICAgIFwiTkZDX1MzRldSTjgyX1VBUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbFwiLFxuICAgIFwiczNmd3JuNV9uY2lfY2xrX2NmZ1wiLFxuICAgIFwiczNmd3JuNV9uY2lfZHVhbF9yc3BcIixcbiAgICBcInMzZndybjVfbmNpX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBzM25ybjR2IHZhcmlhbnQgdG8gdGhlIHMzZndybjUgTkZDIGRyaXZlci4gSXQgaW50cm9kdWNlcyBuZXcgTkNJIHByb3ByaWV0YXJ5IGNvbW1hbmRzIGFuZCByZXNwb25zZXMsIGFuZCBhIG5ldyBSRiBjb25maWd1cmF0aW9uIHJvdXRpbmUuIFRoZSBkcml2ZXIgaXMgcmVhY2hhYmxlIHZpYSB0aGUgTkNJIGludGVyZmFjZSBhbmQgSTJDL1VBUlQgYnVzZXMsIHdoaWNoIGNhbiBiZSBmdXp6ZWQgdXNpbmcgdmlydHVhbCBkZXZpY2VzIG9yIHN5emthbGxlcidzIE5DSSBzdXBwb3J0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GQ19OQ0lcIixcbiAgICBcIk5GQ19TM0ZXUk41X0kyQ1wiLFxuICAgIFwiTkZDX1MzRldSTjgyX1VBUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbFwiLFxuICAgIFwiczNmd3JuNV9uY2lfY2xrX2NmZ1wiLFxuICAgIFwiczNmd3JuNV9uY2lfZHVhbF9yc3BcIixcbiAgICBcInMzZndybjVfbmNpX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBzM25ybjR2IHZhcmlhbnQgdG8gdGhlIHMzZndybjUgTkZDIGRyaXZlci4gSXQgaW50cm9kdWNlcyBuZXcgTkNJIHByb3ByaWV0YXJ5IGNvbW1hbmRzIGFuZCByZXNwb25zZXMsIGFuZCBhIG5ldyBSRiBjb25maWd1cmF0aW9uIHJvdXRpbmUuIFRoZSBkcml2ZXIgaXMgcmVhY2hhYmxlIHZpYSB0aGUgTkNJIGludGVyZmFjZSBhbmQgSTJDL1VBUlQgYnVzZXMsIHdoaWNoIGNhbiBiZSBmdXp6ZWQgdXNpbmcgdmlydHVhbCBkZXZpY2VzIG9yIHN5emthbGxlcidzIE5DSSBzdXBwb3J0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMjozNjoyNy44NTM3MTIwNDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NTY4MDE0NTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjI6MzY6MjcuODU0MzQxOTMzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI1NTY3Mzc3OTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGEgbmV3IE5GQyBjaGlwIHZhcmlhbnQgKFMzTlJONFYpIGFuZCBhZGRzIG5ldyBOQ0kgY29tbWFuZHMgZm9yIGZpcm13YXJlIGNvbmZpZ3VyYXRpb24gYW5kIGNhbGlicmF0aW9uIGRhdGEgdXBkYXRlcy4gQWxsIGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHRoZSBkZXZpY2UgKHN1Y2ggYXMgYHNldF9vcHRpb25gLCBgc3RvcF9jbWRgLCBhbmQgYHN1Yl9vaWRgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBgbmNpX3Byb3BfY21kYC4gVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSBzZW50IGlzIGNhcmVmdWxseSBjYWxjdWxhdGVkIHRvIG1hdGNoIHRoZSBpbml0aWFsaXplZCBieXRlcywgcHJldmVudGluZyBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgZnJvbSBiZWluZyBzZW50LiBEYXRhIHJlY2VpdmVkIGZyb20gdGhlIGRldmljZSBpcyBjb3BpZWQgaW50byBgaW5mby1cXHUwMDNlZHVhbF9yc3BgIHdpdGggaXRzIGxlbmd0aCB0cmFja2VkIGJ5IGBpbmZvLVxcdTAwM2VkdWFsX3JzcF9sZW5gLCBhbmQgYm91bmRzIGNoZWNrcyBhcmUgcGVyZm9ybWVkIGJlZm9yZSBhY2Nlc3NpbmcgaXQuIFdoaWxlIHRoZXJlIGlzIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZCBpZiBgc2tiLVxcdTAwM2VsZW5gIGlzIDAgaW4gYHMzZndybjVfbmNpX2R1YWxfcnNwYCAoYHNrYi1cXHUwMDNlZGF0YVswXWApLCB0aGlzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIHRvIHVzZXIgc3BhY2Ugb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgdXNlZCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gdGVzdCB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdiNDAyMGFhZTA1Mjc2ZDRhNDdjM2ZiYWQ3MTUzZDdkYTMyZWZiOTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAyMjozNToyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3NhbXN1bmcsczNmd3JuNS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9uZmMvc2Ftc3VuZyxzM2Z3cm41LnlhbWxcbmluZGV4IDEyYmFlZTQ1NzUyYzcuLjQwYTY5NDY2ODAyYmIgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L25mYy9zYW1zdW5nLHMzZndybjUueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9uZmMvc2Ftc3VuZyxzM2Z3cm41LnlhbWxcbkBAIC0xNCw2ICsxNCw3IEBAIHByb3BlcnRpZXM6XG4gICAgIGVudW06XG4gICAgICAgLSBzYW1zdW5nLHMzZndybjUtaTJjXG4gICAgICAgLSBzYW1zdW5nLHMzZndybjgyXG4rICAgICAgLSBzYW1zdW5nLHMzbnJuNHZcbiBcbiAgIGVuLWdwaW9zOlxuICAgICBtYXhJdGVtczogMVxuQEAgLTI5LDYgKzMwLDkgQEAgcHJvcGVydGllczpcbiAgIGNsb2NrczpcbiAgICAgbWF4SXRlbXM6IDFcbiBcbisgIHB2ZGQtc3VwcGx5OlxuKyAgICBkZXNjcmlwdGlvbjogUFZERCBwb3dlciBzdXBwbHlcbitcbiAgIHdha2UtZ3Bpb3M6XG4gICAgIG1heEl0ZW1zOiAxXG4gICAgIGRlc2NyaXB0aW9uOlxuQEAgLTU4LDEyICs2MiwyNSBAQCBhbGxPZjpcbiAgICAgICBwcm9wZXJ0aWVzOlxuICAgICAgICAgY29tcGF0aWJsZTpcbiAgICAgICAgICAgY29udGFpbnM6XG4tICAgICAgICAgICAgY29uc3Q6IHNhbXN1bmcsczNmd3JuNS1pMmNcbisgICAgICAgICAgICBlbnVtOlxuKyAgICAgICAgICAgICAgLSBzYW1zdW5nLHMzZndybjUtaTJjXG4rICAgICAgICAgICAgICAtIHNhbXN1bmcsczNucm40dlxuICAgICB0aGVuOlxuICAgICAgIHJlcXVpcmVkOlxuICAgICAgICAgLSBpbnRlcnJ1cHRzXG4gICAgICAgICAtIHJlZ1xuIFxuKyAgIyBEZXBsb3llZCBEVHMgZm9yIHRoZSBvbGRlciBwYXJ0cyBuZXZlciBkZXNjcmliZWQgYSBzdXBwbHksIHNvIFBWREQgaXNcbisgICMgb25seSByZXF1aXJlZCBmb3IgdGhlIG5ldyBkZXZpY2UuXG4rICAtIGlmOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICBjb21wYXRpYmxlOlxuKyAgICAgICAgICBjb250YWluczpcbisgICAgICAgICAgICBjb25zdDogc2Ftc3VuZyxzM25ybjR2XG4rICAgIHRoZW46XG4rICAgICAgcmVxdWlyZWQ6XG4rICAgICAgICAtIHB2ZGQtc3VwcGx5XG4rXG4gZXhhbXBsZXM6XG4gICAtIHxcbiAgICAgI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmhcdTAwM2VcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbWlsb3MtZmFpcnBob25lLWZwNi5kdHMgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbWlsb3MtZmFpcnBob25lLWZwNi5kdHNcbmluZGV4IGViZGNhMGUyZDJmM2EuLmJkYmE4NDgyNzVkYjQgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbWlsb3MtZmFpcnBob25lLWZwNi5kdHNcbisrKyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9taWxvcy1mYWlycGhvbmUtZnA2LmR0c1xuQEAgLTYwMSw5ICs2MDEsMjIgQEAgXHUwMDI2Z2NjIHtcbiB9O1xuIFxuIFx1MDAyNmkyYzEge1xuLVx0LyogU2Ftc3VuZyBORkMgQCAweDI3ICovXG4tXG4gXHRzdGF0dXMgPSBcIm9rYXlcIjtcbitcbitcdG5mY0AyNyB7XG4rXHRcdGNvbXBhdGlibGUgPSBcInNhbXN1bmcsczNucm40dlwiO1xuK1x0XHRyZWcgPSBcdTAwM2MweDI3XHUwMDNlO1xuK1xuK1x0XHRpbnRlcnJ1cHRzLWV4dGVuZGVkID0gXHUwMDNjXHUwMDI2dGxtbSAzMSBJUlFfVFlQRV9FREdFX1JJU0lOR1x1MDAzZTtcbitcdFx0ZW4tZ3Bpb3MgPSBcdTAwM2NcdTAwMjZ0bG1tIDU2IEdQSU9fQUNUSVZFX0hJR0hcdTAwM2U7XG4rXHRcdHdha2UtZ3Bpb3MgPSBcdTAwM2NcdTAwMjZ0bG1tIDcgR1BJT19BQ1RJVkVfSElHSFx1MDAzZTtcbitcdFx0Y2xvY2tzID0gXHUwMDNjXHUwMDI2cnBtaGNjIFJQTUhfTE5fQkJfQ0xLMlx1MDAzZTtcbitcbitcdFx0cHZkZC1zdXBwbHkgPSBcdTAwM2NcdTAwMjZ2cmVnX2wyMGJcdTAwM2U7XG4rXG4rXHRcdHBpbmN0cmwtMCA9IFx1MDAzY1x1MDAyNm5mY19kZWZhdWx0XHUwMDNlO1xuK1x0XHRwaW5jdHJsLW5hbWVzID0gXCJkZWZhdWx0XCI7XG4rXHR9O1xuIH07XG4gXG4gXHUwMDI2aTJjMyB7XG5AQCAtODI1LDYgKzgzOCwyMiBAQCBcdTAwMjZ0bG1tIHtcbiBcdFx0XHQgICAgICAgXHUwMDNjMTMgMVx1MDAzZSwgLyogTkMgKi9cbiBcdFx0XHQgICAgICAgXHUwMDNjNjMgMlx1MDAzZTsgLyogV0xBTiBVQVJUICovXG4gXG4rXHRuZmNfZGVmYXVsdDogbmZjLWRlZmF1bHQtc3RhdGUge1xuK1x0XHRpcnEtcGlucyB7XG4rXHRcdFx0cGlucyA9IFwiZ3BpbzMxXCI7XG4rXHRcdFx0ZnVuY3Rpb24gPSBcImdwaW9cIjtcbitcdFx0XHRkcml2ZS1zdHJlbmd0aCA9IFx1MDAzYzJcdTAwM2U7XG4rXHRcdFx0Ymlhcy1kaXNhYmxlO1xuK1x0XHR9O1xuK1xuK1x0XHRwZC1waW5zIHtcbitcdFx0XHRwaW5zID0gXCJncGlvNTZcIjtcbitcdFx0XHRmdW5jdGlvbiA9IFwiZ3Bpb1wiO1xuK1x0XHRcdGRyaXZlLXN0cmVuZ3RoID0gXHUwMDNjMlx1MDAzZTtcbitcdFx0XHRiaWFzLXB1bGwtdXA7XG4rXHRcdH07XG4rXHR9O1xuK1xuIFx0c2RjMl9jYXJkX2RldF9uOiBzZGMyLWNhcmQtZGV0LXN0YXRlIHtcbiBcdFx0cGlucyA9IFwiZ3BpbzY1XCI7XG4gXHRcdGZ1bmN0aW9uID0gXCJncGlvXCI7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmMgYi9kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuY1xuaW5kZXggYWYwZmE4YmQ5NzBiNC4uNTYzNDcwY2I5MjhkZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jXG4rKysgYi9kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuY1xuQEAgLTIwLDYgKzIwLDkgQEBcbiBcdFx0XHRcdE5GQ19QUk9UT19JU08xNDQ0M19CX01BU0sgfCBcXFxuIFx0XHRcdFx0TkZDX1BST1RPX0lTTzE1NjkzX01BU0spXG4gXG4rI2RlZmluZSBTM05STjRWX0hXUkVHX05BTUVcdFwic2Ftc3VuZy9zM25ybjR2L2h3cmVnLmJpblwiXG4rI2RlZmluZSBTM05STjRWX1NXUkVHX05BTUVcdFwic2Ftc3VuZy9zM25ybjR2L3N3cmVnLmJpblwiXG4rXG4gc3RhdGljIGludCBzM2Z3cm41X2Zpcm13YXJlX2luaXQoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3QgczNmd3JuNV9md19pbmZvICpmd19pbmZvID0gXHUwMDI2aW5mby1cdTAwM2Vmd19pbmZvO1xuQEAgLTc0LDYgKzc3LDIyIEBAIHN0YXRpYyBpbnQgczNmd3JuNV9maXJtd2FyZV91cGRhdGUoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbylcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgczNmd3JuNV9uY2lfaW5pdChzdHJ1Y3QgbmNpX2RldiAqbmRldilcbit7XG4rXHRzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRpZiAoaW5mby1cdTAwM2V2YXJpYW50ID09IFMzRldSTjVfVkFSSUFOVF9TM05STjRWKSB7XG4rXHRcdHJldCA9IHMzZndybjVfbmNpX2Nsa19jZmcoaW5mbyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0ZGV2X2VycihcdTAwMjZuZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XCJmYWlsZWQgdG8gY29uZmlndXJlIHRoZSByZWZlcmVuY2UgY2xvY2s6ICVkXFxuXCIsXG4rXHRcdFx0XHRyZXQpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gc3RhdGljIGludCBzM2Z3cm41X25jaV9vcGVuKHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxuIHtcbiBcdHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8gPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XG5AQCAtMTI3LDYgKzE0NiwxNSBAQCBzdGF0aWMgaW50IHMzZndybjVfbmNpX3Bvc3Rfc2V0dXAoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4gXHRzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xuIFx0aW50IHJldDtcbiBcbitcdGlmIChpbmZvLVx1MDAzZXZhcmlhbnQgPT0gUzNGV1JONV9WQVJJQU5UX1MzTlJONFYpIHtcbitcdFx0cmV0ID0gczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWwoaW5mbywgUzNOUk40Vl9IV1JFR19OQU1FLFxuK1x0XHRcdFx0XHRcdCAgICBTM05STjRWX1NXUkVHX05BTUUpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGRldl93YXJuKFx1MDAyNm5kZXYtXHUwMDNlbmZjX2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgXCJSRiBjYWxpYnJhdGlvbiBkYXRhIHVwZGF0ZSBmYWlsZWQ6ICVkXFxuXCIsIHJldCk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuIFx0aWYgKHMzZndybjVfZmlybXdhcmVfaW5pdChpbmZvKSkge1xuIFx0XHQvL3NraXAgYm9vdGxvYWRlciBtb2RlXG4gXHRcdHJldHVybiAwO1xuQEAgLTE0OSw2ICsxNzcsNyBAQCBzdGF0aWMgaW50IHMzZndybjVfbmNpX3Bvc3Rfc2V0dXAoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmNpX29wcyBzM2Z3cm41X25jaV9vcHMgPSB7XG4rXHQuaW5pdCA9IHMzZndybjVfbmNpX2luaXQsXG4gXHQub3BlbiA9IHMzZndybjVfbmNpX29wZW4sXG4gXHQuY2xvc2UgPSBzM2Z3cm41X25jaV9jbG9zZSxcbiBcdC5zZW5kID0gczNmd3JuNV9uY2lfc2VuZCxcbkBAIC0xNTgsNyArMTg3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuY2lfb3BzIHMzZndybjVfbmNpX29wcyA9IHtcbiB9O1xuIFxuIGludCBzM2Z3cm41X3Byb2JlKHN0cnVjdCBuY2lfZGV2ICoqbmRldiwgdm9pZCAqcGh5X2lkLCBzdHJ1Y3QgZGV2aWNlICpwZGV2LFxuLVx0Y29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcylcbitcdGNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHMsIGVudW0gczNmd3JuNV92YXJpYW50IHZhcmlhbnQpXG4ge1xuIFx0c3RydWN0IHMzZndybjVfaW5mbyAqaW5mbztcbiBcdGludCByZXQ7XG5AQCAtMTcwLDYgKzE5OSw3IEBAIGludCBzM2Z3cm41X3Byb2JlKHN0cnVjdCBuY2lfZGV2ICoqbmRldiwgdm9pZCAqcGh5X2lkLCBzdHJ1Y3QgZGV2aWNlICpwZGV2LFxuIFx0aW5mby1cdTAwM2VwaHlfaWQgPSBwaHlfaWQ7XG4gXHRpbmZvLVx1MDAzZXBkZXYgPSBwZGV2O1xuIFx0aW5mby1cdTAwM2VwaHlfb3BzID0gcGh5X29wcztcbitcdGluZm8tXHUwMDNldmFyaWFudCA9IHZhcmlhbnQ7XG4gXHRtdXRleF9pbml0KFx1MDAyNmluZm8tXHUwMDNlbXV0ZXgpO1xuIFxuIFx0czNmd3JuNV9zZXRfbW9kZShpbmZvLCBTM0ZXUk41X01PREVfQ09MRCk7XG5AQCAtMjI1LDMgKzI1NSw1IEBAIEVYUE9SVF9TWU1CT0woczNmd3JuNV9yZWN2X2ZyYW1lKTtcbiBNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCJTYW1zdW5nIFMzRldSTjUgTkZDIGRyaXZlclwiKTtcbiBNT0RVTEVfQVVUSE9SKFwiUm9iZXJ0IEJhbGR5Z2EgXHUwMDNjci5iYWxkeWdhQHNhbXN1bmcuY29tXHUwMDNlXCIpO1xuK01PRFVMRV9GSVJNV0FSRShTM05STjRWX0hXUkVHX05BTUUpO1xuK01PRFVMRV9GSVJNV0FSRShTM05STjRWX1NXUkVHX05BTUUpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvaTJjLmMgYi9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jXG5pbmRleCA0YmE3NjI2MTE3MTE4Li44ODQ0MjBhYzgzYjViIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS9pMmMuY1xuKysrIGIvZHJpdmVycy9uZmMvczNmd3JuNS9pMmMuY1xuQEAgLTExLDEzICsxMSwxMiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2dwaW8vY29uc3VtZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25mYy9uZmMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwicGh5X2NvbW1vbi5oXCJcbiBcbi0jZGVmaW5lIFMzRldSTjVfSTJDX0RSSVZFUl9OQU1FIFwiczNmd3JuNV9pMmNcIlxuLVxuIHN0cnVjdCBzM2Z3cm41X2kyY19waHkge1xuIFx0c3RydWN0IHBoeV9jb21tb24gY29tbW9uO1xuIFx0c3RydWN0IGkyY19jbGllbnQgKmkyY19kZXY7XG5AQCAtMTQ2LDYgKzE0NSw3IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBzM2Z3cm41X2kyY19pcnFfdGhyZWFkX2ZuKGludCBpcnEsIHZvaWQgKnBoeV9pZClcbiBcbiBzdGF0aWMgaW50IHMzZndybjVfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXG4ge1xuK1x0ZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudDtcbiBcdHN0cnVjdCBzM2Z3cm41X2kyY19waHkgKnBoeTtcbiBcdGludCByZXQ7XG4gXG5AQCAtMTYwLDYgKzE2MCwxMSBAQCBzdGF0aWMgaW50IHMzZndybjVfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXG4gXHRwaHktXHUwMDNlaTJjX2RldiA9IGNsaWVudDtcbiBcdGkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHBoeSk7XG4gXG4rXHRyZXQgPSBkZXZtX3JlZ3VsYXRvcl9nZXRfZW5hYmxlKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYsIFwicHZkZFwiKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYsIHJldCxcbitcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gZW5hYmxlIHB2ZGRcXG5cIik7XG4rXG4gXHRwaHktXHUwMDNlY29tbW9uLmdwaW9fZW4gPSBkZXZtX2dwaW9kX2dldChcdTAwMjZjbGllbnQtXHUwMDNlZGV2LCBcImVuXCIsIEdQSU9EX09VVF9ISUdIKTtcbiBcdGlmIChJU19FUlIocGh5LVx1MDAzZWNvbW1vbi5ncGlvX2VuKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIocGh5LVx1MDAzZWNvbW1vbi5ncGlvX2VuKTtcbkBAIC0xNzksMTQgKzE4NCwxNSBAQCBzdGF0aWMgaW50IHMzZndybjVfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXG4gXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYsIFBUUl9FUlIocGh5LVx1MDAzZWNsayksXG4gXHRcdFx0XHQgICAgIFwiZmFpbGVkIHRvIGdldCBjbG9ja1xcblwiKTtcbiBcbitcdHZhcmlhbnQgPSAodWludHB0cl90KWkyY19nZXRfbWF0Y2hfZGF0YShjbGllbnQpO1xuIFx0cmV0ID0gczNmd3JuNV9wcm9iZShcdTAwMjZwaHktXHUwMDNlY29tbW9uLm5kZXYsIHBoeSwgXHUwMDI2cGh5LVx1MDAzZWkyY19kZXYtXHUwMDNlZGV2LFxuLVx0XHRcdCAgICBcdTAwMjZpMmNfcGh5X29wcyk7XG4rXHRcdFx0ICAgIFx1MDAyNmkyY19waHlfb3BzLCB2YXJpYW50KTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHRyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYsIHBoeS1cdTAwM2VpMmNfZGV2LVx1MDAzZWlycSwgTlVMTCxcbiBcdFx0czNmd3JuNV9pMmNfaXJxX3RocmVhZF9mbiwgSVJRRl9PTkVTSE9ULFxuLVx0XHRTM0ZXUk41X0kyQ19EUklWRVJfTkFNRSwgcGh5KTtcbitcdFx0XCJzM2Z3cm41X2kyY1wiLCBwaHkpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBzM2Z3cm41X3JlbW92ZTtcbiBcbkBAIC0yMDUsMjEgKzIxMSwyNSBAQCBzdGF0aWMgdm9pZCBzM2Z3cm41X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHMzZndybjVfaTJjX2lkX3RhYmxlW10gPSB7XG4tXHR7IC5uYW1lID0gUzNGV1JONV9JMkNfRFJJVkVSX05BTUUgfSxcbitcdHsgLm5hbWUgPSBcInMzZndybjVfaTJjXCIsIC5kcml2ZXJfZGF0YSA9IFMzRldSTjVfVkFSSUFOVF9GV0RMIH0sXG4rXHR7IC5uYW1lID0gXCJzM25ybjR2XCIsIC5kcml2ZXJfZGF0YSA9IFMzRldSTjVfVkFSSUFOVF9TM05STjRWIH0sXG4gXHR7IH1cbiB9O1xuIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzM2Z3cm41X2kyY19pZF90YWJsZSk7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfczNmd3JuNV9pMmNfbWF0Y2hbXSA9IHtcbi1cdHsgLmNvbXBhdGlibGUgPSBcInNhbXN1bmcsczNmd3JuNS1pMmNcIiB9LFxuK1x0eyAuY29tcGF0aWJsZSA9IFwic2Ftc3VuZyxzM2Z3cm41LWkyY1wiLFxuK1x0ICAuZGF0YSA9ICh2b2lkICopUzNGV1JONV9WQVJJQU5UX0ZXREwgfSxcbitcdHsgLmNvbXBhdGlibGUgPSBcInNhbXN1bmcsczNucm40dlwiLFxuK1x0ICAuZGF0YSA9ICh2b2lkICopUzNGV1JONV9WQVJJQU5UX1MzTlJONFYgfSxcbiBcdHsgfVxuIH07XG4gTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgb2ZfczNmd3JuNV9pMmNfbWF0Y2gpO1xuIFxuIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzM2Z3cm41X2kyY19kcml2ZXIgPSB7XG4gXHQuZHJpdmVyID0ge1xuLVx0XHQubmFtZSA9IFMzRldSTjVfSTJDX0RSSVZFUl9OQU1FLFxuLVx0XHQub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIob2ZfczNmd3JuNV9pMmNfbWF0Y2gpLFxuK1x0XHQubmFtZSA9IFwiczNmd3JuNV9pMmNcIixcbitcdFx0Lm9mX21hdGNoX3RhYmxlID0gb2ZfczNmd3JuNV9pMmNfbWF0Y2gsXG4gXHR9LFxuIFx0LnByb2JlID0gczNmd3JuNV9pMmNfcHJvYmUsXG4gXHQucmVtb3ZlID0gczNmd3JuNV9pMmNfcmVtb3ZlLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmMgYi9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jXG5pbmRleCA1YTlkZTExYmJlY2VhLi4zODFhYTdiZjI5YTIzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuY1xuKysrIGIvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuY1xuQEAgLTgsNiArOCw5IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGxldGlvbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmlybXdhcmUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21pbm1heC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcInMzZndybjUuaFwiXG4gI2luY2x1ZGUgXCJuY2kuaFwiXG5AQCAtMjAsNyArMjMsMjQgQEAgc3RhdGljIGludCBzM2Z3cm41X25jaV9wcm9wX3JzcChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1jb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNF0gPSB7XG4rLypcbisgKiBEVUFMX09QVElPTiByZXNwb25zZXMgYXJlIG5vdCB1bmlmb3JtOiBHRVRfVkVSIGFuc3dlcnMgd2l0aCB0aGUgY2hpcCdzXG4rICogY2FsaWJyYXRpb24gdmVyc2lvbnMgaW5zdGVhZCBvZiBhIHN0YXR1cyBieXRlLCBzbyBzdGFzaCB0aGUgcGF5bG9hZCBmb3JcbisgKiB0aGUgY2FsbGVyIGJlZm9yZSBjb21wbGV0aW5nIHRoZSByZXF1ZXN0LlxuKyAqL1xuK3N0YXRpYyBpbnQgczNmd3JuNV9uY2lfZHVhbF9yc3Aoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IHMzZndybjVfaW5mbyAqaW5mbyA9IG5jaV9nZXRfZHJ2ZGF0YShuZGV2KTtcbitcbitcdGluZm8tXHUwMDNlZHVhbF9yc3BfbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBza2ItXHUwMDNlbGVuLFxuK1x0XHRcdFx0ICAgc2l6ZW9mKGluZm8tXHUwMDNlZHVhbF9yc3ApKTtcbitcdG1lbWNweShpbmZvLVx1MDAzZWR1YWxfcnNwLCBza2ItXHUwMDNlZGF0YSwgaW5mby1cdTAwM2VkdWFsX3JzcF9sZW4pO1xuK1xuK1x0bmNpX3JlcV9jb21wbGV0ZShuZGV2LCBza2ItXHUwMDNlZGF0YVswXSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rY29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzVdID0ge1xuIFx0e1xuIFx0XHQub3Bjb2RlID0gbmNpX29wY29kZV9wYWNrKE5DSV9HSURfUFJPUFJJRVRBUlksXG4gXHRcdFx0XHROQ0lfUFJPUF9TRVRfUkZSRUcpLFxuQEAgLTQxLDYgKzYxLDExIEBAIGNvbnN0IHN0cnVjdCBuY2lfZHJpdmVyX29wcyBzM2Z3cm41X25jaV9wcm9wX29wc1s0XSA9IHtcbiBcdFx0XHRcdE5DSV9QUk9QX0ZXX0NGRyksXG4gXHRcdC5yc3AgPSBzM2Z3cm41X25jaV9wcm9wX3JzcCxcbiBcdH0sXG4rXHR7XG4rXHRcdC5vcGNvZGUgPSBuY2lfb3Bjb2RlX3BhY2soTkNJX0dJRF9QUk9QUklFVEFSWSxcbitcdFx0XHRcdE5DSV9QUk9QX0RVQUxfT1BUSU9OKSxcbitcdFx0LnJzcCA9IHMzZndybjVfbmNpX2R1YWxfcnNwLFxuK1x0fSxcbiB9O1xuIFxuICNkZWZpbmUgUzNGV1JONV9SRlJFR19TRUNUSU9OX1NJWkUgMjUyXG5AQCAtMTE3LDMgKzE0MiwxNTQgQEAgaW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZShzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLCBjb25zdCBjaGFyICpmd19uYW1lKVxuIFx0cmVsZWFzZV9maXJtd2FyZShmdyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbitcbisvKlxuKyAqIFRoZSBTM05STjRWIGV4cGVjdHMgdGhlIHNpbmdsZS1ieXRlIEZXX0NGRyBmb3JtIChqdXN0IHRoZSBjbG9jay1zcGVlZFxuKyAqIHNlbGVjdG9yKS5cbisgKi9cbitpbnQgczNmd3JuNV9uY2lfY2xrX2NmZyhzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvKVxuK3tcbitcdHU4IGNsa19zcGVlZCA9IE5DSV9QUk9QX0ZXX0NGR19DTEtfU1BFRUQ7XG4rXG4rXHRyZXR1cm4gbmNpX3Byb3BfY21kKGluZm8tXHUwMDNlbmRldiwgTkNJX1BST1BfRldfQ0ZHLCAxLCBcdTAwMjZjbGtfc3BlZWQpO1xuK31cbitcbisvKlxuKyAqIEFuIDgtYnl0ZSBjYWxpYnJhdGlvbiB2ZXJzaW9uOiA1IGJ5dGVzIG9mIGRhdGUgc3RhbXAgYW5kIGEgMy1ieXRlIENTQ1xuKyAqIGNvZGUsIGF0IGZpeGVkIG9mZnNldHMgYm90aCBpbiBhIGJsb2IncyAxNi1ieXRlIHRhaWwgYW5kIGluIGVhY2ggaGFsZiBvZlxuKyAqIHRoZSBHRVRfVkVSIHJlc3BvbnNlIChIVyBhdCBvZmZzZXQgMCwgU1cgYXQgb2Zmc2V0IDE1KS5cbisgKi9cbitzdGF0aWMgYm9vbCBzM2Z3cm41X25jaV9kdWFsX3ZlcnNpb25fZXEoY29uc3QgdTggKmEsIGNvbnN0IHU4ICpiKVxuK3tcbitcdHJldHVybiAhbWVtY21wKGEgKyA1LCBiICsgNSwgNSkgXHUwMDI2XHUwMDI2ICFtZW1jbXAoYSArIDEyLCBiICsgMTIsIDMpO1xuK31cbitcbitzdGF0aWMgYm9vbCBzM2Z3cm41X25jaV9kdWFsX2NhbF9jdXJyZW50KHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sXG4rXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmh3X2Z3LFxuK1x0XHRcdFx0XHQgY29uc3Qgc3RydWN0IGZpcm13YXJlICpzd19mdylcbit7XG4rXHRpZiAoaW5mby1cdTAwM2VkdWFsX3JzcF9sZW4gXHUwMDNjIDMwKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoaHdfZnctXHUwMDNlc2l6ZSBcdTAwM2MgMTYgfHwgc3dfZnctXHUwMDNlc2l6ZSBcdTAwM2MgMTYpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiBzM2Z3cm41X25jaV9kdWFsX3ZlcnNpb25fZXEoaW5mby1cdTAwM2VkdWFsX3JzcCxcbitcdFx0XHRcdFx0ICAgaHdfZnctXHUwMDNlZGF0YSArIGh3X2Z3LVx1MDAzZXNpemUgLSAxNikgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgczNmd3JuNV9uY2lfZHVhbF92ZXJzaW9uX2VxKGluZm8tXHUwMDNlZHVhbF9yc3AgKyAxNSxcbitcdFx0XHRcdFx0ICAgc3dfZnctXHUwMDNlZGF0YSArIHN3X2Z3LVx1MDAzZXNpemUgLSAxNik7XG4rfVxuK1xuKy8qXG4rICogUzNOUk40ViBSRiBjYWxpYnJhdGlvbiBkYXRhIHVwZGF0ZTogdGhlIEhXIGFuZCBTVyBibG9icyBtZXJnZWQgaW50byBvbmVcbisgKiBzdHJlYW0gKEhXIGZpcnN0KSwgcHVzaGVkIGFzIFNUQVJUX1VQREFURSwgb25lIFNFVF9PUFRJT04gcGVyIDI1Mi1ieXRlXG4rICogc2VjdGlvbiwgdGhlbiBTVE9QX1VQREFURSBjYXJyeWluZyBhIDE2LWJpdCBjaGVja3N1bSAocnVubmluZyBzdW0gb2YgdGhlXG4rICogbWVyZ2VkIHN0cmVhbSBhcyAzMi1iaXQgd29yZHMpLlxuKyAqL1xuK2ludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbChzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLFxuK1x0XHRcdFx0ICBjb25zdCBjaGFyICpod19uYW1lLCBjb25zdCBjaGFyICpzd19uYW1lKVxuK3tcbitcdHN0cnVjdCBuY2lfcHJvcF9kdWFsX3NldF9vcHRpb25fY21kIHNldF9vcHRpb247XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZpbmZvLVx1MDAzZW5kZXYtXHUwMDNlbmZjX2Rldi1cdTAwM2VkZXY7XG4rXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmh3X2Z3LCAqc3dfZnc7XG4rXHRzaXplX3QgbWVyZ2VkX3NpemUsIGksIGxlbjtcbitcdHU4ICptZXJnZWQ7XG4rXHR1OCBzdG9wX2NtZFszXTtcbitcdHUzMiBjaGVja3N1bTtcbitcdHU4IHN1Yl9vaWQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gZmlybXdhcmVfcmVxdWVzdF9ub3dhcm4oXHUwMDI2aHdfZncsIGh3X25hbWUsIGRldik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0gZmlybXdhcmVfcmVxdWVzdF9ub3dhcm4oXHUwMDI2c3dfZncsIHN3X25hbWUsIGRldik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dF9odztcbitcbitcdG1lcmdlZF9zaXplID0gaHdfZnctXHUwMDNlc2l6ZSArIHN3X2Z3LVx1MDAzZXNpemU7XG4rXG4rXHQvKlxuK1x0ICogVGhlIHN0cmVhbSBpcyBjaGVja3N1bW1lZCBhcyAzMi1iaXQgd29yZHMgYW5kIHB1c2hlZCBpbiBhdCBtb3N0IDI1NlxuK1x0ICogc2VjdGlvbnMgKHRoZSBzZWN0aW9uIGluZGV4IGlzIGEgc2luZ2xlIGJ5dGUpOyByZWplY3QgYmxvYnMgdGhhdFxuK1x0ICogd291bGQgc2lsZW50bHkgYnJlYWsgZWl0aGVyLlxuK1x0ICovXG4rXHRpZiAoIW1lcmdlZF9zaXplIHx8IG1lcmdlZF9zaXplICUgNCB8fFxuK1x0ICAgIG1lcmdlZF9zaXplIFx1MDAzZSAyNTYgKiBOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRSkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJpbnZhbGlkIGNhbGlicmF0aW9uIGRhdGEgc2l6ZTogJXp1XFxuXCIsIG1lcmdlZF9zaXplKTtcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0Z290byBvdXRfc3c7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogQXNrIHRoZSBjaGlwIGZvciBpdHMgY3VycmVudCBjYWxpYnJhdGlvbiB2ZXJzaW9ucyBhbmQgc2tpcCB0aGVcbitcdCAqIHVwbG9hZCB3aGVuIGJvdGggYWxyZWFkeSBtYXRjaCB0aGUgYmxvYnM7IGEgbWlzbWF0Y2ggb3IgYW5cbitcdCAqIHVucGFyc2VhYmxlIGFuc3dlciBtZWFucyB0aGUgdXBsb2FkIHByb2NlZWRzLiBHRVRfVkVSIGFuc3dlcnMgd2l0aFxuK1x0ICogdmVyc2lvbnMsIG5vdCBhIHN0YXR1cyBieXRlLCBzbyBuY2lfcHJvcF9jbWQoKSdzIHJldHVybiBjYXJyaWVzIG5vXG4rXHQgKiBtZWFuaW5nIGhlcmUuXG4rXHQgKi9cbitcdHN1Yl9vaWQgPSBOQ0lfUFJPUF9EVUFMX1NVQl9HRVRfVkVSO1xuK1x0aW5mby1cdTAwM2VkdWFsX3JzcF9sZW4gPSAwO1xuK1x0bmNpX3Byb3BfY21kKGluZm8tXHUwMDNlbmRldiwgTkNJX1BST1BfRFVBTF9PUFRJT04sIDEsIFx1MDAyNnN1Yl9vaWQpO1xuK1x0aWYgKHMzZndybjVfbmNpX2R1YWxfY2FsX2N1cnJlbnQoaW5mbywgaHdfZncsIHN3X2Z3KSkge1xuK1x0XHRkZXZfZGJnKGRldiwgXCJjYWxpYnJhdGlvbiBkYXRhIGFscmVhZHkgY3VycmVudFxcblwiKTtcbitcdFx0cmV0ID0gMDtcbitcdFx0Z290byBvdXRfc3c7XG4rXHR9XG4rXG4rXHRtZXJnZWQgPSBrdm1hbGxvYyhtZXJnZWRfc2l6ZSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIW1lcmdlZCkge1xuK1x0XHRyZXQgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIG91dF9zdztcbitcdH1cbitcdG1lbWNweShtZXJnZWQsIGh3X2Z3LVx1MDAzZWRhdGEsIGh3X2Z3LVx1MDAzZXNpemUpO1xuK1x0bWVtY3B5KG1lcmdlZCArIGh3X2Z3LVx1MDAzZXNpemUsIHN3X2Z3LVx1MDAzZWRhdGEsIHN3X2Z3LVx1MDAzZXNpemUpO1xuK1xuK1x0Y2hlY2tzdW0gPSAwO1xuK1x0Zm9yIChpID0gMDsgaSArIDQgXHUwMDNjPSBtZXJnZWRfc2l6ZTsgaSArPSA0KVxuK1x0XHRjaGVja3N1bSArPSBnZXRfdW5hbGlnbmVkX2xlMzIobWVyZ2VkICsgaSk7XG4rXG4rXHQvKiBTVEFSVF9VUERBVEUgKi9cbitcdHN1Yl9vaWQgPSBOQ0lfUFJPUF9EVUFMX1NVQl9TVEFSVF9VUERBVEU7XG4rXHRyZXQgPSBuY2lfcHJvcF9jbWQoaW5mby1cdTAwM2VuZGV2LCBOQ0lfUFJPUF9EVUFMX09QVElPTiwgMSwgXHUwMDI2c3ViX29pZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIlVuYWJsZSB0byBzdGFydCBjYWxpYnJhdGlvbiBkYXRhIHVwZGF0ZVxcblwiKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHQvKiBTRVRfT1BUSU9OIHBlciBzZWN0aW9uICovXG4rXHRzZXRfb3B0aW9uLnN1Yl9vaWQgPSBOQ0lfUFJPUF9EVUFMX1NVQl9TRVRfT1BUSU9OO1xuK1x0c2V0X29wdGlvbi5pbmRleCA9IDA7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtZXJnZWRfc2l6ZTsgaSArPSBOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRSkge1xuK1x0XHRsZW4gPSBtaW5fdChzaXplX3QsIG1lcmdlZF9zaXplIC0gaSwgTkNJX1BST1BfRFVBTF9TRUNUSU9OX1NJWkUpO1xuK1x0XHRtZW1jcHkoc2V0X29wdGlvbi5kYXRhLCBtZXJnZWQgKyBpLCBsZW4pO1xuK1x0XHRyZXQgPSBuY2lfcHJvcF9jbWQoaW5mby1cdTAwM2VuZGV2LCBOQ0lfUFJPUF9EVUFMX09QVElPTixcbitcdFx0XHRcdCAgIGxlbiArIDIsIChfX3U4ICopXHUwMDI2c2V0X29wdGlvbik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0XHRkZXZfZXJyKGRldiwgXCJjYWxpYnJhdGlvbiBkYXRhIHVwZGF0ZSBlcnJvcjogJWRcXG5cIixcbitcdFx0XHRcdHJldCk7XG4rXHRcdFx0LyogQWJvcnQgZm9ybTogU1RPUF9VUERBVEUgd2l0aCB0aGUgc3ViLU9JRCBhbG9uZS4gKi9cbitcdFx0XHRzdWJfb2lkID0gTkNJX1BST1BfRFVBTF9TVUJfU1RPUF9VUERBVEU7XG4rXHRcdFx0bmNpX3Byb3BfY21kKGluZm8tXHUwMDNlbmRldiwgTkNJX1BST1BfRFVBTF9PUFRJT04sIDEsXG4rXHRcdFx0XHQgICAgIFx1MDAyNnN1Yl9vaWQpO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXHRcdHNldF9vcHRpb24uaW5kZXgrKztcbitcdH1cbitcbitcdC8qIFNUT1BfVVBEQVRFIHdpdGggY2hlY2tzdW0gKi9cbitcdHN0b3BfY21kWzBdID0gTkNJX1BST1BfRFVBTF9TVUJfU1RPUF9VUERBVEU7XG4rXHRwdXRfdW5hbGlnbmVkX2xlMTYoY2hlY2tzdW0sIFx1MDAyNnN0b3BfY21kWzFdKTtcbitcdHJldCA9IG5jaV9wcm9wX2NtZChpbmZvLVx1MDAzZW5kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLCAzLCBzdG9wX2NtZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIlVuYWJsZSB0byBzdG9wIGNhbGlicmF0aW9uIGRhdGEgdXBkYXRlXFxuXCIpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGRldl9kYmcoZGV2LCBcImNhbGlicmF0aW9uIGRhdGEgdXBkYXRlOiBzdWNjZXNzXFxuXCIpO1xuK291dDpcbitcdGt2ZnJlZShtZXJnZWQpO1xuK291dF9zdzpcbitcdHJlbGVhc2VfZmlybXdhcmUoc3dfZncpO1xuK291dF9odzpcbitcdHJlbGVhc2VfZmlybXdhcmUoaHdfZncpO1xuK1x0cmV0dXJuIHJldDtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaCBiL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmhcbmluZGV4IGJjNGJjZTJiYmM0ZDkuLjQ1M2ExYzlkNjVlYjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oXG4rKysgYi9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oXG5AQCAtNDAsNiArNDAsOSBAQCBzdHJ1Y3QgbmNpX3Byb3Bfc3RvcF9yZnJlZ19yc3Age1xuIFxuICNkZWZpbmUgTkNJX1BST1BfRldfQ0ZHXHRcdDB4MjhcbiBcbisvKiBTM05STjRWIHNpbmdsZS1ieXRlIEZXX0NGRyBwYXlsb2FkOyAweDExIHNlbGVjdHMgdGhlIDE5LjIgTUh6IHJlZmVyZW5jZS4gKi9cbisjZGVmaW5lIE5DSV9QUk9QX0ZXX0NGR19DTEtfU1BFRURcdDB4MTFcbitcbiBzdHJ1Y3QgbmNpX3Byb3BfZndfY2ZnX2NtZCB7XG4gXHRfX3U4IGNsa190eXBlO1xuIFx0X191OCBjbGtfc3BlZWQ7XG5AQCAtNTAsNyArNTMsMjUgQEAgc3RydWN0IG5jaV9wcm9wX2Z3X2NmZ19yc3Age1xuIFx0X191OCBzdGF0dXM7XG4gfTtcbiBcbi1leHRlcm4gY29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzRdO1xuKyNkZWZpbmUgTkNJX1BST1BfRFVBTF9PUFRJT05cdFx0MHgyYVxuK1xuKyNkZWZpbmUgTkNJX1BST1BfRFVBTF9TVUJfR0VUX1ZFUlx0MHgwMFxuKyNkZWZpbmUgTkNJX1BST1BfRFVBTF9TVUJfU1RBUlRfVVBEQVRFXHQweDAxXG4rI2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NVQl9TRVRfT1BUSU9OXHQweDAyXG4rI2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NVQl9TVE9QX1VQREFURVx0MHgwM1xuK1xuKyNkZWZpbmUgTkNJX1BST1BfRFVBTF9TRUNUSU9OX1NJWkVcdDI1MlxuK1xuK3N0cnVjdCBuY2lfcHJvcF9kdWFsX3NldF9vcHRpb25fY21kIHtcbitcdF9fdTggc3ViX29pZDtcbitcdF9fdTggaW5kZXg7XG4rXHRfX3U4IGRhdGFbTkNJX1BST1BfRFVBTF9TRUNUSU9OX1NJWkVdO1xuK307XG4rXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBuY2lfZHJpdmVyX29wcyBzM2Z3cm41X25jaV9wcm9wX29wc1s1XTtcbiBpbnQgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sIGNvbnN0IGNoYXIgKmZ3X25hbWUpO1xuK2ludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbChzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLFxuK1x0XHRcdFx0ICBjb25zdCBjaGFyICpod19uYW1lLCBjb25zdCBjaGFyICpzd19uYW1lKTtcbitpbnQgczNmd3JuNV9uY2lfY2xrX2NmZyhzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvKTtcbiBcbiAjZW5kaWYgLyogX19MT0NBTF9TM0ZXUk41X05DSV9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvczNmd3JuNS5oIGIvZHJpdmVycy9uZmMvczNmd3JuNS9zM2Z3cm41LmhcbmluZGV4IDJiNDkyMjM2MDkwYjguLjYzZjY3OWYxNzE2NjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L3MzZndybjUuaFxuKysrIGIvZHJpdmVycy9uZmMvczNmd3JuNS9zM2Z3cm41LmhcbkBAIC0yMSw2ICsyMSwxMyBAQCBlbnVtIHMzZndybjVfbW9kZSB7XG4gXHRTM0ZXUk41X01PREVfRlcsXG4gfTtcbiBcbitlbnVtIHMzZndybjVfdmFyaWFudCB7XG4rXHQvKiBTM0ZXUk41IC8gUzNGV1JOODI6IGZpcm13YXJlIGlzIGRvd25sb2FkZWQgYnkgdGhpcyBkcml2ZXIgKi9cbitcdFMzRldSTjVfVkFSSUFOVF9GV0RMLFxuK1x0LyogUzNOUk40Vjogbm8gZmlybXdhcmUgZG93bmxvYWQ7IEZXX0NGRyArIERVQUxfT1BUSU9OIGJyaW5nLXVwICovXG4rXHRTM0ZXUk41X1ZBUklBTlRfUzNOUk40Vixcbit9O1xuK1xuIHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMge1xuIFx0dm9pZCAoKnNldF93YWtlKSh2b2lkICppZCwgYm9vbCBzbGVlcCk7XG4gXHR2b2lkICgqc2V0X21vZGUpKHZvaWQgKmlkLCBlbnVtIHMzZndybjVfbW9kZSk7XG5AQCAtMzYsNiArNDMsMTEgQEAgc3RydWN0IHMzZndybjVfaW5mbyB7XG4gXHRjb25zdCBzdHJ1Y3QgczNmd3JuNV9waHlfb3BzICpwaHlfb3BzO1xuIFxuIFx0c3RydWN0IHMzZndybjVfZndfaW5mbyBmd19pbmZvO1xuK1x0ZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudDtcbitcbitcdC8qIExhc3QgRFVBTF9PUFRJT04gcmVzcG9uc2UgcGF5bG9hZCAoR0VUX1ZFUiBjYXJyaWVzIHZlcnNpb25zKS4gKi9cbitcdHU4IGR1YWxfcnNwWzMyXTtcbitcdHU4IGR1YWxfcnNwX2xlbjtcbiBcbiBcdHN0cnVjdCBtdXRleCBtdXRleDtcbiB9O1xuQEAgLTc4LDcgKzkwLDcgQEAgc3RhdGljIGlubGluZSBpbnQgczNmd3JuNV93cml0ZShzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIH1cbiBcbiBpbnQgczNmd3JuNV9wcm9iZShzdHJ1Y3QgbmNpX2RldiAqKm5kZXYsIHZvaWQgKnBoeV9pZCwgc3RydWN0IGRldmljZSAqcGRldixcbi1cdGNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHMpO1xuK1x0Y29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcywgZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudCk7XG4gdm9pZCBzM2Z3cm41X3JlbW92ZShzdHJ1Y3QgbmNpX2RldiAqbmRldik7XG4gXG4gaW50IHMzZndybjVfcmVjdl9mcmFtZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L3VhcnQuYyBiL2RyaXZlcnMvbmZjL3MzZndybjUvdWFydC5jXG5pbmRleCA4ZjE0MmEyNTUxMDE2Li43NTM5N2MzZGJjNThiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS91YXJ0LmNcbisrKyBiL2RyaXZlcnMvbmZjL3MzZndybjUvdWFydC5jXG5AQCAtMTM2LDcgKzEzNiw3IEBAIHN0YXRpYyBpbnQgczNmd3JuODJfdWFydF9wcm9iZShzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2KVxuIFx0fVxuIFxuIFx0cmV0ID0gczNmd3JuNV9wcm9iZShcdTAwMjZwaHktXHUwMDNlY29tbW9uLm5kZXYsIHBoeSwgXHUwMDI2cGh5LVx1MDAzZXNlcl9kZXYtXHUwMDNlZGV2LFxuLVx0XHRcdCAgICBcdTAwMjZ1YXJ0X3BoeV9vcHMpO1xuK1x0XHRcdCAgICBcdTAwMjZ1YXJ0X3BoeV9vcHMsIFMzRldSTjVfVkFSSUFOVF9GV0RMKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyX3NlcmRldjtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIyOjM2OjI3Ljg1NDM0MjgwM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTU2NzM0NjI3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBSZXZpZXc6IE5GQyBEcml2ZXIgUGF0Y2ggLSBTM05STjRWIFN1cHBvcnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgc3VwcG9ydCBmb3IgYSBuZXcgTkZDIGNoaXAsIFMzTlJONFYsIGludG8gdGhlIGBzM2Z3cm41YCBkcml2ZXIuIE15IGluaXRpYWwgY29uY2VybiBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnksIHNvIHRoYXQncyB3aGVyZSBJJ2xsIGZvY3VzLlxuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgYWRkaW5nIGRldmljZSB0cmVlIGJpbmRpbmdzLCB1cGRhdGluZyB0aGUgZHJpdmVyIGxvZ2ljLCBpbnRyb2R1Y2luZyBuZXcgTkNJIGNvbW1hbmRzIChGV19DRkcsIERVQUxfT1BUSU9OKSwgYW5kIGhhbmRsaW5nIGZpcm13YXJlIGxvYWRpbmcgYW5kIGNhbGlicmF0aW9uIGRhdGEuIEknbSBzZWVpbmcgYHMzZndybjVfbmNpX2R1YWxfcnNwYCB3aGljaCBjb3BpZXMgZGF0YSBmcm9tIGFuIGBza2JgIGludG8gYGluZm8tXHUwMDNlZHVhbF9yc3BgLiAgVGhlIGNvZGUgdXNlcyBgc2tiLVx1MDAzZWRhdGFbMF1gIGZvciBzdGF0dXMsIGFuZCBJIGltbWVkaWF0ZWx5IG5vdGUgdGhhdCBpZiBgc2tiLVx1MDAzZWxlbmAgaXMgemVybywgd2UgKmNvdWxkKiBoYXZlIGFuIG91dC1vZi1ib3VuZHMgcmVhZCwgYnV0IHRoYXQncyBhbiAqb3V0LW9mLWJvdW5kcyogcmVhZCwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLQVNBTiBzaG91bGQgZmxhZyB0aGF0IG9uZSwgYW5kIGlmIGl0J3MgaGl0LCBpdCdzIG5vdCBhIEtNU0FOIHByb2JsZW0uXG5cbk5leHQsIGBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbGAgdXNlcyBgaW5mby1cdTAwM2VkdWFsX3JzcGAsIGJ1dCBJJ20gcmVsaWV2ZWQgdG8gc2VlIHRoYXQgdGhlIGNvZGUgY2hlY2tzIGBpbmZvLVx1MDAzZWR1YWxfcnNwX2xlbmAgYmVmb3JlIGFjY2Vzc2luZyB0aGUgZGF0YSwgYXZvaWRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgcmVhZCBjb25jZXJucy5cblxuTG9va2luZyBjbG9zZXIgYXQgYHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsYCBhZ2FpbiwgSSBzZWUgdGhlIHN0YWNrIGFsbG9jYXRlZCBgc2V0X29wdGlvbmAgc3RydWN0LCB3aGljaCBpcyBub3QgemVyby1pbml0aWFsaXplZC4gSSdtIGNoZWNraW5nIGl0IGNhcmVmdWxseSwgYXMgc3RhY2sgYWxsb2NhdGlvbiBpcyB1c3VhbGx5IGEgc291cmNlIG9mIHByb2JsZW1zLiBUaGUgY29kZSB0aGVuIGNvcGllcyBgbGVuYCBieXRlcyBmcm9tIGBtZXJnZWRgIGludG8gYHNldF9vcHRpb24uZGF0YWAuICBJbXBvcnRhbnRseSwgaXQgYXBwZWFycyBvbmx5IGBsZW4gKyAyYCBieXRlcyBvZiBgc2V0X29wdGlvbmAgYXJlIHNlbnQgdG8gdGhlIGRldmljZSwgdGhlIGNvZGUgY2hlY2tzIHRvIGVuc3VyZSBvbmx5IGluaXRpYWxpemVkIGRhdGEgaXMgc2VudCwgcHJldmVudGluZyBhbnkgcG90ZW50aWFsIGxlYWsuICBJIGNvbmZpcm1lZCB0aGF0IHRoZSBzdHJ1Y3R1cmUgaXMgcGFja2VkLCB3aGljaCBtZWFucyBubyBwYWRkaW5nIGlzIGFkZGVkLCBzbyBpdCdzIGFsbCBnb29kLlxuXG5JJ20gY2hlY2tpbmcgdGhlIGBzdG9wX2NtZGAsIGBzM2Z3cm41X25jaV9jbGtfY2ZnYCBhbmQgdGhlIG90aGVyIHBhcnRzIG9mIHRoZSByb3V0aW5lLCBhbmQgdGhleSBhcHBlYXIgZnVsbHkgaW5pdGlhbGl6ZWQuXG5cbkknbSBydW5uaW5nIHRocm91Z2ggdGhlIHBvdGVudGlhbCBwcm9ibGVtYXRpYyBzcG90cyBhZ2Fpbi4gIEkndmUgY2hlY2tlZCB0aGUgbWVtb3J5IHNlbnQgdG8gdGhlIGRldmljZSBhbmQgY29uZmlybWVkIGl0J3MgZnVsbHkgaW5pdGlhbGl6ZWQsIEkgY2hlY2tlZCB0aGF0IGlmIHRoZSBjb2RlIHJlYWRzIG1lbW9yeSBpdCdzIGFsd2F5cyBoYW5kbGVkIHNhZmVseSwgSSd2ZSBjaGVja2VkIHRoZSB1c2FnZSBvZiBgaW5mby1cdTAwM2VkdWFsX3JzcGAsIHdoaWNoIGlzIHVzZWQsIGFuZCBsZW5ndGggY2hlY2tlZC5cblxuSW4gc3VtbWFyeSwgSSBjYW4ndCBpZGVudGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIGluIHRoaXMgcGF0Y2guICBUaGUgY29kZSBzZWVtcyB3ZWxsLXN0cnVjdHVyZWQsIGFuZCBhbGwgbWVtb3J5IHRyYW5zZmVycyBhcHBlYXIgc2FmZS4gVGhlIE9PQiBwb3RlbnRpYWwgaW4gYHNrYi1cdTAwM2VkYXRhWzBdYCBpcyBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBzcGVjaWFsaXplZCBLTVNBTiBmdXp6aW5nIGNhbXBhaWduIGlzbid0IG5lZWRlZCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTgxLCJPdXRwdXRUb2tlbnMiOjI0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMjozNjo1My40MjE2OTQ0MjZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjk1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgYSBuZXcgTkZDIGNoaXAgdmFyaWFudCAoUzNOUk40VikgYW5kIGFkZHMgbmV3IE5DSSBjb21tYW5kcyBmb3IgZmlybXdhcmUgY29uZmlndXJhdGlvbiBhbmQgY2FsaWJyYXRpb24gZGF0YSB1cGRhdGVzLiBBbGwgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdGhlIGRldmljZSAoc3VjaCBhcyBgc2V0X29wdGlvbmAsIGBzdG9wX2NtZGAsIGFuZCBgc3ViX29pZGApIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIGBuY2lfcHJvcF9jbWRgLiBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHNlbnQgaXMgY2FyZWZ1bGx5IGNhbGN1bGF0ZWQgdG8gbWF0Y2ggdGhlIGluaXRpYWxpemVkIGJ5dGVzLCBwcmV2ZW50aW5nIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSBmcm9tIGJlaW5nIHNlbnQuIERhdGEgcmVjZWl2ZWQgZnJvbSB0aGUgZGV2aWNlIGlzIGNvcGllZCBpbnRvIGBpbmZvLVxcdTAwM2VkdWFsX3JzcGAgd2l0aCBpdHMgbGVuZ3RoIHRyYWNrZWQgYnkgYGluZm8tXFx1MDAzZWR1YWxfcnNwX2xlbmAsIGFuZCBib3VuZHMgY2hlY2tzIGFyZSBwZXJmb3JtZWQgYmVmb3JlIGFjY2Vzc2luZyBpdC4gV2hpbGUgdGhlcmUgaXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIGlmIGBza2ItXFx1MDAzZWxlbmAgaXMgMCBpbiBgczNmd3JuNV9uY2lfZHVhbF9yc3BgIChgc2tiLVxcdTAwM2VkYXRhWzBdYCksIHRoaXMgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgdG8gdXNlciBzcGFjZSBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB1c2VkIGluIGNvbnRyb2wgZmxvdy4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byB0ZXN0IHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBhIG5ldyBORkMgY2hpcCB2YXJpYW50IChTM05STjRWKSBhbmQgYWRkcyBuZXcgTkNJIGNvbW1hbmRzIGZvciBmaXJtd2FyZSBjb25maWd1cmF0aW9uIGFuZCBjYWxpYnJhdGlvbiBkYXRhIHVwZGF0ZXMuIEFsbCBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB0aGUgZGV2aWNlIChzdWNoIGFzIGBzZXRfb3B0aW9uYCwgYHN0b3BfY21kYCwgYW5kIGBzdWJfb2lkYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYG5jaV9wcm9wX2NtZGAuIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgc2VudCBpcyBjYXJlZnVsbHkgY2FsY3VsYXRlZCB0byBtYXRjaCB0aGUgaW5pdGlhbGl6ZWQgYnl0ZXMsIHByZXZlbnRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGZyb20gYmVpbmcgc2VudC4gRGF0YSByZWNlaXZlZCBmcm9tIHRoZSBkZXZpY2UgaXMgY29waWVkIGludG8gYGluZm8tXFx1MDAzZWR1YWxfcnNwYCB3aXRoIGl0cyBsZW5ndGggdHJhY2tlZCBieSBgaW5mby1cXHUwMDNlZHVhbF9yc3BfbGVuYCwgYW5kIGJvdW5kcyBjaGVja3MgYXJlIHBlcmZvcm1lZCBiZWZvcmUgYWNjZXNzaW5nIGl0LiBXaGlsZSB0aGVyZSBpcyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgaWYgYHNrYi1cXHUwMDNlbGVuYCBpcyAwIGluIGBzM2Z3cm41X25jaV9kdWFsX3JzcGAgKGBza2ItXFx1MDAzZWRhdGFbMF1gKSwgdGhpcyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcyB0byB1c2VyIHNwYWNlIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHVzZWQgaW4gY29udHJvbCBmbG93LiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIHRlc3QgdGhlc2UgY2hhbmdlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6stjs[1] Phase: Succeeded StartedAt: 2026-08-11 22:37:05 +0000 UTC FinishedAt: 2026-08-11 22:37:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6stjs[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-11 22:37:05 +0000 UTC FinishedAt: 2026-08-11 22:37:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6stjs[2] Phase: Succeeded StartedAt: 2026-08-11 22:37:05 +0000 UTC FinishedAt: 2026-08-12 00:15:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6stjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"d3cb5d11-a071-4944-a487-c265808637ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-11 22:37:05 +0000 UTC FinishedAt: 2026-08-12 00:15:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_init"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"d3cb5d11-a071-4944-a487-c265808637ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6stjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"d3cb5d11-a071-4944-a487-c265808637ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-11 22:37:05 +0000 UTC FinishedAt: 2026-08-11 22:37:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6stjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"d3cb5d11-a071-4944-a487-c265808637ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-11 22:37:05 +0000 UTC FinishedAt: 2026-08-11 22:37:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow6stjs/series-workflow6stjs-convert-artifact-2060800528/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6stjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"d3cb5d11-a071-4944-a487-c265808637ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-11 22:37:15 +0000 UTC FinishedAt: 2026-08-11 22:53:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6stjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"d3cb5d11-a071-4944-a487-c265808637ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-11 22:37:15 +0000 UTC FinishedAt: 2026-08-11 22:53:20 +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:*17e07e6f-6626-4d71-8ba9-babc7e524b4d,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-workflow6stjs/series-workflow6stjs-convert-artifact-2060800528/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": "11217314-462f-466d-ab25-afc6afe77710", "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-workflow6stjs/series-workflow6stjs-build-action-1904111254/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6stjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"d3cb5d11-a071-4944-a487-c265808637ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-11 22:37:15 +0000 UTC FinishedAt: 2026-08-11 22:53:10 +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:*17e07e6f-6626-4d71-8ba9-babc7e524b4d,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-workflow6stjs/series-workflow6stjs-convert-artifact-2060800528/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": "11217314-462f-466d-ab25-afc6afe77710", "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-workflow6stjs/series-workflow6stjs-build-action-1904111254/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6stjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"d3cb5d11-a071-4944-a487-c265808637ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-11 22:53:20 +0000 UTC FinishedAt: 2026-08-11 22:53:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6stjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"d3cb5d11-a071-4944-a487-c265808637ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-11 22:53:20 +0000 UTC FinishedAt: 2026-08-11 22:53:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6stjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"d3cb5d11-a071-4944-a487-c265808637ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-11 22:53:20 +0000 UTC FinishedAt: 2026-08-11 22:53:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6stjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"d3cb5d11-a071-4944-a487-c265808637ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-11 22:53:20 +0000 UTC FinishedAt: 2026-08-11 22:53:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"d3cb5d11-a071-4944-a487-c265808637ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow6stjs/series-workflow6stjs-convert-artifact-862958199/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6stjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"d3cb5d11-a071-4944-a487-c265808637ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-11 22:53:31 +0000 UTC FinishedAt: 2026-08-11 22:55:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6stjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"d3cb5d11-a071-4944-a487-c265808637ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-11 22:53:31 +0000 UTC FinishedAt: 2026-08-11 22:55:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*11217314-462f-466d-ab25-afc6afe77710,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-workflow6stjs/series-workflow6stjs-build-action-1904111254/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-workflow6stjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"d3cb5d11-a071-4944-a487-c265808637ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-11 22:55:41 +0000 UTC FinishedAt: 2026-08-11 22:55:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6stjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"d3cb5d11-a071-4944-a487-c265808637ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-11 22:55:41 +0000 UTC FinishedAt: 2026-08-11 22:55:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6stjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"d3cb5d11-a071-4944-a487-c265808637ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-11 22:55:41 +0000 UTC FinishedAt: 2026-08-11 23:12:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6stjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"d3cb5d11-a071-4944-a487-c265808637ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-11 22:55:41 +0000 UTC FinishedAt: 2026-08-11 23:12:05 +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:*17e07e6f-6626-4d71-8ba9-babc7e524b4d,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-workflow6stjs/series-workflow6stjs-convert-artifact-862958199/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": "c4890f41-814d-4abd-8f33-1b0676eb01c6", "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-workflow6stjs/series-workflow6stjs-build-action-49841467/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6stjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"d3cb5d11-a071-4944-a487-c265808637ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-11 22:55:41 +0000 UTC FinishedAt: 2026-08-11 23:11: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:*17e07e6f-6626-4d71-8ba9-babc7e524b4d,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-workflow6stjs/series-workflow6stjs-convert-artifact-862958199/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": "c4890f41-814d-4abd-8f33-1b0676eb01c6", "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-workflow6stjs/series-workflow6stjs-build-action-49841467/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6stjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"d3cb5d11-a071-4944-a487-c265808637ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-11 23:12:05 +0000 UTC FinishedAt: 2026-08-11 23:12:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6stjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"d3cb5d11-a071-4944-a487-c265808637ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-11 23:12:05 +0000 UTC FinishedAt: 2026-08-11 23:12:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6stjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"d3cb5d11-a071-4944-a487-c265808637ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-11 23:12:05 +0000 UTC FinishedAt: 2026-08-11 23:13:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6stjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"d3cb5d11-a071-4944-a487-c265808637ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-11 23:12:05 +0000 UTC FinishedAt: 2026-08-11 23:13:48 +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:*c4890f41-814d-4abd-8f33-1b0676eb01c6,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-workflow6stjs/series-workflow6stjs-build-action-49841467/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-workflow6stjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"d3cb5d11-a071-4944-a487-c265808637ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-11 23:13:58 +0000 UTC FinishedAt: 2026-08-12 00:15:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6stjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"d3cb5d11-a071-4944-a487-c265808637ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-11 23:13:58 +0000 UTC FinishedAt: 2026-08-12 00:15:18 +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":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_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:*11217314-462f-466d-ab25-afc6afe77710,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c4890f41-814d-4abd-8f33-1b0676eb01c6,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-workflow6stjs/series-workflow6stjs-build-action-1904111254/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-workflow6stjs/series-workflow6stjs-build-action-49841467/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6stjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"d3cb5d11-a071-4944-a487-c265808637ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-11 23:13:58 +0000 UTC FinishedAt: 2026-08-11 23:14:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6stjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"d3cb5d11-a071-4944-a487-c265808637ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-11 23:13:58 +0000 UTC FinishedAt: 2026-08-11 23:14:03 +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":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_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-workflow6stjs/series-workflow6stjs-convert-artifact-3981386160/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6stjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"d3cb5d11-a071-4944-a487-c265808637ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-11 23:13:58 +0000 UTC FinishedAt: 2026-08-11 23:13:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6stjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"d3cb5d11-a071-4944-a487-c265808637ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-11 23:13:58 +0000 UTC FinishedAt: 2026-08-11 23:13:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6stjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"d3cb5d11-a071-4944-a487-c265808637ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-11 23:13:58 +0000 UTC FinishedAt: 2026-08-11 23:13:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6stjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"d3cb5d11-a071-4944-a487-c265808637ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-11 23:14:08 +0000 UTC FinishedAt: 2026-08-12 00:15:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6stjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_nci_dual_rsp","s3fwrn5_nci_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f0054d864e6e734add71e29961f5ae15211ad24d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_NCI","NFC_S3FWRN5_I2C","NFC_S3FWRN82_UART"],"series_id":"d3cb5d11-a071-4944-a487-c265808637ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-11 23:14:08 +0000 UTC FinishedAt: 2026-08-12 00:15:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*11217314-462f-466d-ab25-afc6afe77710,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c4890f41-814d-4abd-8f33-1b0676eb01c6,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-workflow6stjs/series-workflow6stjs-build-action-1904111254/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-workflow6stjs/series-workflow6stjs-build-action-49841467/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-workflow6stjs/series-workflow6stjs-convert-artifact-3981386160/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,}