Name: series-workfloww7rqv Phase: Succeeded StartedAt: 2026-07-21 10:00:53 +0000 UTC FinishedAt: 2026-07-21 14:53:29 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7rqv[0] Phase: Succeeded StartedAt: 2026-07-21 10:00:53 +0000 UTC FinishedAt: 2026-07-21 10:21:19 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7rqv[0].run-triage Phase: Succeeded StartedAt: 2026-07-21 10:00:53 +0000 UTC FinishedAt: 2026-07-21 10:21:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXFAT_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXFAT_FS" ], "series_id": "62222c22-14fe-488e-8e13-ddcb8200d9ab" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "fs_bdev_freeze", "__exfat_fs_error" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYRkFUX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZnNfYmRldl9mcmVlemUmIzM0OywKICAgICYjMzQ7X19leGZhdF9mc19lcnJvciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBWRlMgYmxvY2sgZGV2aWNlIGZyZWV6aW5nIGxvZ2ljIChgZnNfYmRldl9mcmVlemVgKSB0byBwcm9wZXJseSB0aGF3IHRoZSBzdXBlcmJsb2NrIGlmIGBzeW5jX2Jsb2NrZGV2YCBmYWlscywgcHJldmVudGluZyBhIGZyb3plbiBzdGF0ZSBsZWFrLiBJdCBhbHNvIG1vZGlmaWVzIGV4ZmF0IGVycm9yIGhhbmRsaW5nIChgX19leGZhdF9mc19lcnJvcmApIHRvIHNldCBhIHNodXRkb3duIGZsYWcgaW5zdGVhZCBvZiBkaXJlY3RseSBtb2RpZnlpbmcgYHNiLVx1MDAzZXNfZmxhZ3NgIHdpdGggYFNCX1JET05MWWAgd2l0aG91dCBob2xkaW5nIHRoZSBgc191bW91bnRgIHNlbWFwaG9yZSwgd2hpY2ggcHJldmlvdXNseSBjYXVzZWQgZGVhZGxvY2tzIHdpdGggYGZyZWV6ZV9zdXBlcigpYC4gQm90aCBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMDoxNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDRhMTZlMTM4MzRmM2FhMzk1ODBiZWVhN2YyOGFkY2ZjYTIxZTkyNWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyMSAxMDoxNjo1MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leGZhdC9taXNjLmMgYi9mcy9leGZhdC9taXNjLmNcbmluZGV4IDZmMTFhOTZhNGZmYTg0Li5kYmIzYjI5MDcwNDU0NSAxMDA2NDRcbi0tLSBhL2ZzL2V4ZmF0L21pc2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXhmYXQvbWlzYy5jXG5AQCAtNDEsNyAmIzQzOzQxLDE0IEBAIHZvaWQgX19leGZhdF9mc19lcnJvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgcmVwb3J0LCBjb25zdCBjaGFyICpmbXQsIC4uLilcbiBcdFx0cGFuaWMoXCYjMzQ7ZXhGQVQtZnMgKCVzKTogZnMgcGFuaWMgZnJvbSBwcmV2aW91cyBlcnJvclxcblwmIzM0OyxcbiBcdFx0XHRzYi1cdTAwM2VzX2lkKTtcbiBcdH0gZWxzZSBpZiAob3B0cy1cdTAwM2VlcnJvcnMgPT0gRVhGQVRfRVJST1JTX1JPIFx1MDAyNlx1MDAyNiAhc2JfcmRvbmx5KHNiKSkge1xuLVx0XHRzYi1cdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcbiYjNDM7XHRcdHNldF9iaXQoRVhGQVRfRkxBR1NfU0hVVERPV04sIFx1MDAyNkVYRkFUX1NCKHNiKS1cdTAwM2VzX2V4ZmF0X2ZsYWdzKTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBXZSBoYXZlIGFscmVhZHkgc2V0IEVYRkFUX0ZMQUdTX1NIVVRET1dOIGZsYWcgdG8gc3RvcCBhbGwgdXBkYXRlc1xuJiM0MztcdFx0ICogdG8gZmlsZXN5c3RlbSwgc28gaXQgZG9lc24mIzM5O3QgbmVlZCB0byBzZXQgU0JfUkRPTkxZIGZsYWcgaGVyZVxuJiM0MztcdFx0ICogYmVjYXVzZSB0aGUgZmxhZyBzaG91bGQgYmUgc2V0IGNvdmVyZWQgdy8gc2ItXHUwMDNlc191bW91bnQgc2VtYXBob3JlXG4mIzQzO1x0XHQgKiB2aWEgcmVtb3VudCBwcm9jZWR1cmUsIG90aGVyd2lzZSwgaXQgd2lsbCBjb25mdXNlIGNvZGUgbGlrZVxuJiM0MztcdFx0ICogZnJlZXplX3N1cGVyKCkgd2hpY2ggd2lsbCBsZWFkIHRvIGRlYWRsb2NrcyBhbmQgb3RoZXIgcHJvYmxlbXMuXG4mIzQzO1x0XHQgKi9cbiBcdFx0ZXhmYXRfZXJyKHNiLCBcJiMzNDtGaWxlc3lzdGVtIGhhcyBiZWVuIHNldCByZWFkLW9ubHlcJiMzNDspO1xuIFx0fVxuIH1cbmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuY1xuaW5kZXggYThmZDYxMTM2YWFmZTUuLjkwOWQ4YjlhYmI4ODdhIDEwMDY0NFxuLS0tIGEvZnMvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvc3VwZXIuY1xuQEAgLTE0ODEsOCAmIzQzOzE0ODEsMjMgQEAgc3RhdGljIGludCBmc19iZGV2X2ZyZWV6ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuIFx0ZWxzZVxuIFx0XHRlcnJvciA9IGZyZWV6ZV9zdXBlcihzYixcbiBcdFx0XHRcdEZSRUVaRV9NQVlfTkVTVCB8IEZSRUVaRV9IT0xERVJfVVNFUlNQQUNFLCBOVUxMKTtcbi1cdGlmICghZXJyb3IpXG4mIzQzO1x0aWYgKCFlcnJvcikge1xuIFx0XHRlcnJvciA9IHN5bmNfYmxvY2tkZXYoYmRldik7XG4mIzQzO1x0XHRpZiAoZXJyb3IpIHtcbiYjNDM7XHRcdFx0aWYgKHNiLVx1MDAzZXNfb3AtXHUwMDNldGhhd19zdXBlcilcbiYjNDM7XHRcdFx0XHQodm9pZClzYi1cdTAwM2VzX29wLVx1MDAzZXRoYXdfc3VwZXIoXG4mIzQzO1x0XHRcdFx0XHRzYixcbiYjNDM7XHRcdFx0XHRcdEZSRUVaRV9NQVlfTkVTVCB8XG4mIzQzO1x0XHRcdFx0XHRcdEZSRUVaRV9IT0xERVJfVVNFUlNQQUNFLFxuJiM0MztcdFx0XHRcdFx0TlVMTCk7XG4mIzQzO1x0XHRcdGVsc2VcbiYjNDM7XHRcdFx0XHQodm9pZCl0aGF3X3N1cGVyKFxuJiM0MztcdFx0XHRcdFx0c2IsXG4mIzQzO1x0XHRcdFx0XHRGUkVFWkVfTUFZX05FU1QgfFxuJiM0MztcdFx0XHRcdFx0XHRGUkVFWkVfSE9MREVSX1VTRVJTUEFDRSxcbiYjNDM7XHRcdFx0XHRcdE5VTEwpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiBcdGRlYWN0aXZhdGVfc3VwZXIoc2IpO1xuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMDoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhGQVRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmc19iZGV2X2ZyZWV6ZSYjMzQ7LAogICAgJiMzNDtfX2V4ZmF0X2ZzX2Vycm9yJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFZGUyBibG9jayBkZXZpY2UgZnJlZXppbmcgbG9naWMgKGBmc19iZGV2X2ZyZWV6ZWApIHRvIHByb3Blcmx5IHRoYXcgdGhlIHN1cGVyYmxvY2sgaWYgYHN5bmNfYmxvY2tkZXZgIGZhaWxzLCBwcmV2ZW50aW5nIGEgZnJvemVuIHN0YXRlIGxlYWsuIEl0IGFsc28gbW9kaWZpZXMgZXhmYXQgZXJyb3IgaGFuZGxpbmcgKGBfX2V4ZmF0X2ZzX2Vycm9yYCkgdG8gc2V0IGEgc2h1dGRvd24gZmxhZyBpbnN0ZWFkIG9mIGRpcmVjdGx5IG1vZGlmeWluZyBgc2ItXHUwMDNlc19mbGFnc2Agd2l0aCBgU0JfUkRPTkxZYCB3aXRob3V0IGhvbGRpbmcgdGhlIGBzX3Vtb3VudGAgc2VtYXBob3JlLCB3aGljaCBwcmV2aW91c2x5IGNhdXNlZCBkZWFkbG9ja3Mgd2l0aCBgZnJlZXplX3N1cGVyKClgLiBCb3RoIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0YTE2ZTEzODM0ZjNhYTM5NTgwYmVlYTdmMjhhZGNmY2EyMWU5MjVkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgMjEgMTA6MTY6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leGZhdC9taXNjLmMgYi9mcy9leGZhdC9taXNjLmMKaW5kZXggNmYxMWE5NmE0ZmZhODQuLmRiYjNiMjkwNzA0NTQ1IDEwMDY0NAotLS0gYS9mcy9leGZhdC9taXNjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXhmYXQvbWlzYy5jCkBAIC00MSw3ICYjNDM7NDEsMTQgQEAgdm9pZCBfX2V4ZmF0X2ZzX2Vycm9yKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCByZXBvcnQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogCQlwYW5pYygmIzM0O2V4RkFULWZzICglcyk6IGZzIHBhbmljIGZyb20gcHJldmlvdXMgZXJyb3JcbiYjMzQ7LAogCQkJc2ItJmd0O3NfaWQpOwogCX0gZWxzZSBpZiAob3B0cy0mZ3Q7ZXJyb3JzID09IEVYRkFUX0VSUk9SU19STyAmYW1wOyZhbXA7ICFzYl9yZG9ubHkoc2IpKSB7Ci0JCXNiLSZndDtzX2ZsYWdzIHw9IFNCX1JET05MWTsKJiM0MzsJCXNldF9iaXQoRVhGQVRfRkxBR1NfU0hVVERPV04sICZhbXA7RVhGQVRfU0Ioc2IpLSZndDtzX2V4ZmF0X2ZsYWdzKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBXZSBoYXZlIGFscmVhZHkgc2V0IEVYRkFUX0ZMQUdTX1NIVVRET1dOIGZsYWcgdG8gc3RvcCBhbGwgdXBkYXRlcwomIzQzOwkJICogdG8gZmlsZXN5c3RlbSwgc28gaXQgZG9lc24mIzM5O3QgbmVlZCB0byBzZXQgU0JfUkRPTkxZIGZsYWcgaGVyZQomIzQzOwkJICogYmVjYXVzZSB0aGUgZmxhZyBzaG91bGQgYmUgc2V0IGNvdmVyZWQgdy8gc2ItJmd0O3NfdW1vdW50IHNlbWFwaG9yZQomIzQzOwkJICogdmlhIHJlbW91bnQgcHJvY2VkdXJlLCBvdGhlcndpc2UsIGl0IHdpbGwgY29uZnVzZSBjb2RlIGxpa2UKJiM0MzsJCSAqIGZyZWV6ZV9zdXBlcigpIHdoaWNoIHdpbGwgbGVhZCB0byBkZWFkbG9ja3MgYW5kIG90aGVyIHByb2JsZW1zLgomIzQzOwkJICovCiAJCWV4ZmF0X2VycihzYiwgJiMzNDtGaWxlc3lzdGVtIGhhcyBiZWVuIHNldCByZWFkLW9ubHkmIzM0Oyk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmMKaW5kZXggYThmZDYxMTM2YWFmZTUuLjkwOWQ4YjlhYmI4ODdhIDEwMDY0NAotLS0gYS9mcy9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3N1cGVyLmMKQEAgLTE0ODEsOCAmIzQzOzE0ODEsMjMgQEAgc3RhdGljIGludCBmc19iZGV2X2ZyZWV6ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQogCWVsc2UKIAkJZXJyb3IgPSBmcmVlemVfc3VwZXIoc2IsCiAJCQkJRlJFRVpFX01BWV9ORVNUIHwgRlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UsIE5VTEwpOwotCWlmICghZXJyb3IpCiYjNDM7CWlmICghZXJyb3IpIHsKIAkJZXJyb3IgPSBzeW5jX2Jsb2NrZGV2KGJkZXYpOwomIzQzOwkJaWYgKGVycm9yKSB7CiYjNDM7CQkJaWYgKHNiLSZndDtzX29wLSZndDt0aGF3X3N1cGVyKQomIzQzOwkJCQkodm9pZClzYi0mZ3Q7c19vcC0mZ3Q7dGhhd19zdXBlcigKJiM0MzsJCQkJCXNiLAomIzQzOwkJCQkJRlJFRVpFX01BWV9ORVNUIHwKJiM0MzsJCQkJCQlGUkVFWkVfSE9MREVSX1VTRVJTUEFDRSwKJiM0MzsJCQkJCU5VTEwpOwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJKHZvaWQpdGhhd19zdXBlcigKJiM0MzsJCQkJCXNiLAomIzQzOwkJCQkJRlJFRVpFX01BWV9ORVNUIHwKJiM0MzsJCQkJCQlGUkVFWkVfSE9MREVSX1VTRVJTUEFDRSwKJiM0MzsJCQkJCU5VTEwpOwomIzQzOwkJfQomIzQzOwl9CiAJZGVhY3RpdmF0ZV9zdXBlcihzYik7CiAJcmV0dXJuIGVycm9yOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzU0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRXhGQVQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoZXNlIHR3byBwYXRjaGVzLCBvbmUgdG91Y2hpbmcgYGZzL2V4ZmF0L21pc2MuY2AgYW5kIHRoZSBvdGhlciBgZnMvc3VwZXIuY2AuIFRoZSBmaXJzdCBvbmUsIGluIGBtaXNjLmNgLCBsb29rcyBsaWtlIGl0JiMzOTtzIHR3ZWFraW5nIGBfX2V4ZmF0X2ZzX2Vycm9yYC4gSW5zdGVhZCBvZiBkaXJlY3RseSBzZXR0aW5nIGBTQl9SRE9OTFlgIG9uIHRoZSBzdXBlciBibG9jayYjMzk7cyBmbGFncyAoYHNiLSZndDtzX2ZsYWdzYCksIGl0JiMzOTtzIG5vdyBzZXR0aW5nIGBFWEZBVF9GTEFHU19TSFVURE9XTmAuIEludGVyZXN0aW5nLiBUaGF04oCZcyBhIGNoYW5nZSBpbiBob3cgd2UgaGFuZGxlIGVycm9ycyBhbmQgcG90ZW50aWFsbHkgc2h1dGRvd24gdGhlIGZpbGVzeXN0ZW0gZ3JhY2VmdWxseS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IHNoaWZ0LgoKVGhlIHNlY29uZCBwYXRjaCBtb2RpZmllcyBgZnNfYmRldl9mcmVlemVgIGluIGBmcy9zdXBlci5jYC4gVGhhdOKAmXMgYSBmdW5kYW1lbnRhbCBWRlMgZnVuY3Rpb24sIHdoaWNoIGlzIHdvcnRoIGEgY2xvc2VyIGxvb2ssIGVzcGVjaWFsbHkgd2l0aCB0aGUgcG90ZW50aWFsIGludGVycGxheSB3aXRoIHRoZSBmaXJzdCBjaGFuZ2UuIFRoZSBtb2RpZmljYXRpb24gaW52b2x2ZXMgdGhhd2luZyB0aGUgc3VwZXJibG9jayBpZiBgc3luY19ibG9ja2RldihiZGV2KWAgZmFpbHMuIFRoYXQgc3VnZ2VzdHMgdGhpcyBtYXkgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiB0aGUgZnJlZXplL3RoYXcgcHJvY2Vzcy4gVGhpcyBpcyBvYnZpb3VzbHkgcmVsYXRlZCB0byBibG9jayBkZXZpY2Ugc3luY2hyb25pemF0aW9uLCBzbyBsZXQmIzM5O3Mga2VlcCB0aGF0IGluIG1pbmQuCgpCZWZvcmUgSSBnbyB0b28gZGVlcCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4gU28sIG15IG5leHQgbW92ZSBpcyB0byBzZWFyY2ggdGhlIGNvZGViYXNlLiBJJiMzOTtsbCB1c2UgYGdpdCBncmVwYCB0byBmaW5kIGFsbCBvY2N1cnJlbmNlcyBvZiBib3RoIGBmc19iZGV2X2ZyZWV6ZWAgYW5kIGBfX2V4ZmF0X2ZzX2Vycm9yYCB3aXRoaW4gdGhlIHJlbGV2YW50IGZpbGUgdHJlZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlaXIgdXNlcywgcG90ZW50aWFsIGludGVyYWN0aW9ucywgYW5kIGFueSBvdGhlciByZWxldmFudCBjb2RlIGluIHRoaXMgYXJlYS4gRnJvbSB0aGVyZSwgSSBjYW4gc3RhcnQgdG8gZm9ybSBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBhdGNoIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgZmlsZXN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmc19iZGV2X2ZyZWV6ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zdXBlci5jPTE0Mzc9c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqZ2V0X2JkZXZfc3VwZXIoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbi0tXG5mcy9zdXBlci5jLTE0NTItLyoqXG5mcy9zdXBlci5jOjE0NTM6ICogZnNfYmRldl9mcmVlemUgLSBmcmVlemUgb3duaW5nIGZpbGVzeXN0ZW0gb2YgYmxvY2sgZGV2aWNlXG5mcy9zdXBlci5jLTE0NTQtICogQGJkZXY6IGJsb2NrIGRldmljZVxuLS1cbmZzL3N1cGVyLmMtMTQ2Ni0gKi9cbmZzL3N1cGVyLmM6MTQ2NzpzdGF0aWMgaW50IGZzX2JkZXZfZnJlZXplKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG5mcy9zdXBlci5jLTE0Njgte1xuLS1cbmZzL3N1cGVyLmM9MTU1Mj1jb25zdCBzdHJ1Y3QgYmxrX2hvbGRlcl9vcHMgZnNfaG9sZGVyX29wcyA9IHtcbi0tXG5mcy9zdXBlci5jLTE1NTQtXHQuc3luY1x0XHRcdD0gZnNfYmRldl9zeW5jLFxuZnMvc3VwZXIuYzoxNTU1Olx0LmZyZWV6ZVx0XHRcdD0gZnNfYmRldl9mcmVlemUsXG5mcy9zdXBlci5jLTE1NTYtXHQudGhhd1x0XHRcdD0gZnNfYmRldl90aGF3LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMDQKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uOgoKKipUcmFjaW5nIHRoZSBGcmVlemUgT3BlcmF0aW9uKioKClJpZ2h0LCBzbyBgZnNfYmRldl9mcmVlemVgIGlzIGNsZWFybHkgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGluIGZyZWV6aW5nIGEgYmxvY2sgZGV2aWNlIGZvciBhIGZpbGVzeXN0ZW0sIGFuZCBpdCYjMzk7cyBiZWluZyBjYWxsZWQgdGhyb3VnaCB0aGUgYGZzX2hvbGRlcl9vcHMuZnJlZXplYCBtZWNoYW5pc20uIFRoYXQmIzM5O3MgZ29vZCwgdGhhdCBnaXZlcyBtZSBhIHNwZWNpZmljIHBvaW50IHRvIHN0YXJ0LgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKmNvbnRleHQqIG9mIHRoaXMgZnJlZXplIG9wZXJhdGlvbi4gYGZzX2hvbGRlcl9vcHNgLi4udGhhdCYjMzk7cyBhbiBpbnRlcmZhY2UsIGEgY29sbGVjdGlvbiBvZiBvcGVyYXRpb25zIGEgZmlsZXN5c3RlbSBpbXBsZW1lbnRzLCByaWdodD8gSSBuZWVkIHRvIGtub3cgKndobyogb3IgKndoYXQqIGlzIHVzaW5nIHRoaXMgc3BlY2lmaWMgYGZzX2hvbGRlcl9vcHNgIHN0cnVjdHVyZSB0aGF0JiMzOTtzIGNhbGxpbmcgYGZyZWV6ZWAuIEtub3dpbmcgd2hlcmUgYGZzX2hvbGRlcl9vcHNgIGlzICp1c2VkKiB3aWxsIGdpdmUgbWUgdGhlIGJpZ2dlciBwaWN0dXJlLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHdob2xlIHZvbHVtZSBncm91cCwgYSBzaW5nbGUgZmlsZXN5c3RlbSwgc29tZSBraW5kIG9mIGxheWVyZWQgc3RvcmFnZT8gVGhpcyB3aWxsIGRldGVybWluZSB0aGUgc2NvcGUgYW5kIGltcGxpY2F0aW9ucyBvZiB0aGUgZnJlZXplLiBMZXQmIzM5O3MgdHJhY2UgYmFjayB0aGUgY2FsbHMuLi4gbGV0JiMzOTtzIGZpZ3VyZSBvdXQgdGhlIGNhbGxlcnMgb2YgYGZzX2hvbGRlcl9vcHNgLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGRlYnVnZ2VyIGFuZCBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNyb3NzLXJlZmVyZW5jZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnNfaG9sZGVyX29wcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9idHJmcy9kZXYtcmVwbGFjZS5jPTIzMj1zdGF0aWMgaW50IGJ0cmZzX2luaXRfZGV2X3JlcGxhY2VfdGd0ZGV2KHN0cnVjdCBidHJmc19mc19pbmZvICpmc19pbmZvLFxuLS1cbmZzL2J0cmZzL2Rldi1yZXBsYWNlLmMtMjUwLVx0YmRldl9maWxlID0gYmRldl9maWxlX29wZW5fYnlfcGF0aChkZXZpY2VfcGF0aCwgQkxLX09QRU5fV1JJVEUsXG5mcy9idHJmcy9kZXYtcmVwbGFjZS5jOjI1MTpcdFx0XHRcdFx0ICAgZnNfaW5mby1cdTAwM2VzYiwgXHUwMDI2ZnNfaG9sZGVyX29wcyk7XG5mcy9idHJmcy9kZXYtcmVwbGFjZS5jLTI1Mi1cdGlmIChJU19FUlIoYmRldl9maWxlKSkge1xuLS1cbmZzL2J0cmZzL3ZvbHVtZXMuYz00NzY9YnRyZnNfZ2V0X2JkZXZfYW5kX3NiKGNvbnN0IGNoYXIgKmRldmljZV9wYXRoLCBibGtfbW9kZV90IGZsYWdzLCB2b2lkICpob2xkZXIsXG4tLVxuZnMvYnRyZnMvdm9sdW1lcy5jLTQ4Mi1cbmZzL2J0cmZzL3ZvbHVtZXMuYzo0ODM6XHQqYmRldl9maWxlID0gYmRldl9maWxlX29wZW5fYnlfcGF0aChkZXZpY2VfcGF0aCwgZmxhZ3MsIGhvbGRlciwgXHUwMDI2ZnNfaG9sZGVyX29wcyk7XG5mcy9idHJmcy92b2x1bWVzLmMtNDg0LVxuLS1cbmZzL2J0cmZzL3ZvbHVtZXMuYz0yODQ4PWludCBidHJmc19pbml0X25ld19kZXZpY2Uoc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmZzX2luZm8sIGNvbnN0IGNoYXIgKmRldmljZV9wYXRoKVxuLS1cbmZzL2J0cmZzL3ZvbHVtZXMuYy0yODY2LVx0YmRldl9maWxlID0gYmRldl9maWxlX29wZW5fYnlfcGF0aChkZXZpY2VfcGF0aCwgQkxLX09QRU5fV1JJVEUsXG5mcy9idHJmcy92b2x1bWVzLmM6Mjg2NzpcdFx0XHRcdFx0ICAgZnNfaW5mby1cdTAwM2VzYiwgXHUwMDI2ZnNfaG9sZGVyX29wcyk7XG5mcy9idHJmcy92b2x1bWVzLmMtMjg2OC1cdGlmIChJU19FUlIoYmRldl9maWxlKSlcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NTk3MT1zdGF0aWMgc3RydWN0IGZpbGUgKmV4dDRfZ2V0X2pvdXJuYWxfYmxrZGV2KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTU5ODUtXHRcdEJMS19PUEVOX1JFQUQgfCBCTEtfT1BFTl9XUklURSB8IEJMS19PUEVOX1JFU1RSSUNUX1dSSVRFUyxcbmZzL2V4dDQvc3VwZXIuYzo1OTg2Olx0XHRzYiwgXHUwMDI2ZnNfaG9sZGVyX29wcyk7XG5mcy9leHQ0L3N1cGVyLmMtNTk4Ny1cdGlmIChJU19FUlIoYmRldl9maWxlKSkge1xuLS1cbmZzL3N1cGVyLmM9MTUyMj1zdGF0aWMgaW50IGZzX2JkZXZfdGhhdyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuLS1cbmZzL3N1cGVyLmMtMTU1MS1cbmZzL3N1cGVyLmM6MTU1Mjpjb25zdCBzdHJ1Y3QgYmxrX2hvbGRlcl9vcHMgZnNfaG9sZGVyX29wcyA9IHtcbmZzL3N1cGVyLmMtMTU1My1cdC5tYXJrX2RlYWRcdFx0PSBmc19iZGV2X21hcmtfZGVhZCxcbi0tXG5mcy9zdXBlci5jLTE1NTctfTtcbmZzL3N1cGVyLmM6MTU1ODpFWFBPUlRfU1lNQk9MX0dQTChmc19ob2xkZXJfb3BzKTtcbmZzL3N1cGVyLmMtMTU1OS1cbmZzL3N1cGVyLmM9MTU2MD1pbnQgc2V0dXBfYmRldl9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgc2JfZmxhZ3MsXG4tLVxuZnMvc3VwZXIuYy0xNTY2LVxuZnMvc3VwZXIuYzoxNTY3Olx0YmRldl9maWxlID0gYmRldl9maWxlX29wZW5fYnlfZGV2KHNiLVx1MDAzZXNfZGV2LCBtb2RlLCBzYiwgXHUwMDI2ZnNfaG9sZGVyX29wcyk7XG5mcy9zdXBlci5jLTE1NjgtXHRpZiAoSVNfRVJSKGJkZXZfZmlsZSkpIHtcbi0tXG5mcy94ZnMveGZzX3N1cGVyLmM9Mzk0PXhmc19ibGtkZXZfZ2V0KFxuLS1cbmZzL3hmcy94ZnNfc3VwZXIuYy00MDMtXHQqYmRldl9maWxlcCA9IGJkZXZfZmlsZV9vcGVuX2J5X3BhdGgobmFtZSwgbW9kZSxcbmZzL3hmcy94ZnNfc3VwZXIuYzo0MDQ6XHRcdFx0bXAtXHUwMDNlbV9zdXBlciwgXHUwMDI2ZnNfaG9sZGVyX29wcyk7XG5mcy94ZnMveGZzX3N1cGVyLmMtNDA1LVx0aWYgKElTX0VSUigqYmRldl9maWxlcCkpIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oPTE3NTA9c3RydWN0IGJsa19ob2xkZXJfb3BzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTE3NzMtLypcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTc3NDogKiBGb3IgZmlsZXN5c3RlbXMgdXNpbmcgQGZzX2hvbGRlcl9vcHMsIHRoZSBAaG9sZGVyIGFyZ3VtZW50IHBhc3NlZCB0b1xuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xNzc1LSAqIGhlbHBlcnMgdXNlZCB0byBvcGVuIGFuZCBjbGFpbSBibG9jayBkZXZpY2VzIHZpYVxuLS1cbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTc3Ny0gKi9cbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTc3ODpleHRlcm4gY29uc3Qgc3RydWN0IGJsa19ob2xkZXJfb3BzIGZzX2hvbGRlcl9vcHM7XG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTE3NzktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY1NQoJCQkJCQkJb3V0cHV0OiAxNgoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQgSSYjMzk7bSB0aGlua2luZyBoZXJlLgoKKipEZWNvbnN0cnVjdGluZyBCbG9jayBEZXZpY2UgRnJlZXppbmcgT3BlcmF0aW9ucyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIHVzYWdlIG9mIGBmc19ob2xkZXJfb3BzYCBhbmQgaXQmIzM5O3MgcG9wcGluZyB1cCBpbiBgc2V0dXBfYmRldl9zdXBlcmAgYW5kIGEgZmV3IG90aGVyIGxvY2F0aW9ucywgd2hpY2ggaXNuJiMzOTt0IGVudGlyZWx5IHN1cnByaXNpbmcuIFRoYXQgZnVuY3Rpb24gaXMgcHJldHR5IGZ1bmRhbWVudGFsIGZvciBlc3RhYmxpc2hpbmcgYmxvY2sgZGV2aWNlIHN1cGVyYmxvY2tzLCBzbyBob2xkZXIgb3BlcmF0aW9ucyBhcmUgbGlrZWx5IHJlbGV2YW50IHRoZXJlLiBNeSBwcmltYXJ5IGludGVyZXN0IGlzIHdpdGggdGhlIGBmcmVlemVgIG9wZXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhpcyBjb250ZXh0LCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIGJsb2NrIGRldmljZXMuIFRoZSBrZXkgcXVlc3Rpb24gaXMsICp3aG8qIGlzIGNhbGxpbmcgdGhpcyBgZnJlZXplYCBmdW5jdGlvbiBkZWZpbmVkIGluIGBibGtfaG9sZGVyX29wc2A/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsZXJzIG9mIGBmcmVlemVgIHdpdGhpbiBgYmxrX2hvbGRlcl9vcHNgLiBUaW1lIHRvIGRpZyBkZWVwZXIgYW5kIGZpbmQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oy1cdTAwM2VmcmVlemUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDczMSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2xpYmF0YS5yc3Q9MjY4PWZvbGxvd3MgYSBzdWNjZXNzZnVsIHJlc2V0LlxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2xpYmF0YS5yc3QtMjY5LVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2xpYmF0YS5yc3Q6MjcwOlRoZSBvcHRpb25hbCBgYC1cdTAwM2VmcmVlemUoKWBgIGNhbGxiYWNrIGNhbiBiZSB1c2VkIGZvciBmcmVlemluZyB0aGUgcG9ydFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2xpYmF0YS5yc3QtMjcxLWhhcmR3YXJlLXdpc2UgKGUuZy4gbWFzayBpbnRlcnJ1cHQgYW5kIHN0b3AgRE1BIGVuZ2luZSkuIElmIGEgcG9ydFxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9saWJhdGEucnN0PTI3NT1UaGUgb3B0aW9uYWwgYGAtXHUwMDNldGhhdygpYGAgY2FsbGJhY2sgaXMgY2FsbGVkIHRvIHBlcmZvcm0gdGhlIG9wcG9zaXRlIG9mXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbGliYXRhLnJzdDoyNzY6YGAtXHUwMDNlZnJlZXplKClgYDogcHJlcGFyZSB0aGUgcG9ydCBmb3Igbm9ybWFsIG9wZXJhdGlvbiBvbmNlIGFnYWluLiBVbm1hc2tcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9saWJhdGEucnN0LTI3Ny1pbnRlcnJ1cHRzLCBzdGFydCBETUEgZW5naW5lLCBldGMuXG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3BtL2RldmljZXMucnN0PTUxNz10aGUgc3lzdGVtIChcJiMzNDtwb3dlciBvZmZcJiMzNDspLiAgVGhlIHBoYXNlcyB1c2VkIHRvIGFjY29tcGxpc2ggdGhpcyBhcmU6IGBgcHJlcGFyZWBgLFxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9wbS9kZXZpY2VzLnJzdC01MjQtXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvcG0vZGV2aWNlcy5yc3Q6NTI1OiAgICAyLlx0VGhlIGBgLVx1MDAzZWZyZWV6ZWBgIG1ldGhvZHMgc2hvdWxkIHF1aWVzY2UgdGhlIGRldmljZSBzbyB0aGF0IGl0IGRvZXNuJiMzOTt0XG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvcG0vZGV2aWNlcy5yc3QtNTI2LVx0Z2VuZXJhdGUgSVJRcyBvciBETUEsIGFuZCB0aGV5IG1heSBuZWVkIHRvIHNhdmUgdGhlIHZhbHVlcyBvZiBkZXZpY2Vcbi0tXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvcG0vZGV2aWNlcy5yc3Q9NzY0PXRyYW5zaXRpb24gaW50byBhIHNsZWVwIHN0YXRlLCB0aGF0IGNhbiBiZSBkb25lIGJ5IGNhbGxpbmdcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9wbS9kZXZpY2VzLnJzdDo3NjU6OmM6ZnVuYzpgcG1fcnVudGltZV9yZXN1bWVgIGZyb20gdGhlIGBgLVx1MDAzZXN1c3BlbmRgYCBjYWxsYmFjayAob3IgdGhlIGBgLVx1MDAzZWZyZWV6ZWBgXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvcG0vZGV2aWNlcy5yc3QtNzY2LW9yIGBgLVx1MDAzZXBvd2Vyb2ZmYGAgY2FsbGJhY2sgZm9yIHRyYW5zaXRpb25zIHJlbGF0ZWQgdG8gaGliZXJuYXRpb24pIG9mIGVpdGhlciB0aGVcbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3Q9MjIwPW9yIGJvdHRvbSBoYWxmKS5cbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QtMjgzLWBgZnJlZXplX3N1cGVyYGBcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdDoyODQ6XHRDYWxsZWQgaW5zdGVhZCBvZiAtXHUwMDNlZnJlZXplX2ZzIGNhbGxiYWNrIGlmIHByb3ZpZGVkLlxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0OjI4NTpcdE1haW4gZGlmZmVyZW5jZSBpcyB0aGF0IC1cdTAwM2VmcmVlemVfc3VwZXIgaXMgY2FsbGVkIHdpdGhvdXQgdGFraW5nXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QtMjg2LVx0ZG93bl93cml0ZShcdTAwMjZzYi1cdTAwM2VzX3Vtb3VudCkuIElmIGZpbGVzeXN0ZW0gaW1wbGVtZW50cyBpdCBhbmQgd2FudHNcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdDoyODc6XHQtXHUwMDNlZnJlZXplX2ZzIHRvIGJlIGNhbGxlZCB0b28sIHRoZW4gaXQgaGFzIHRvIGNhbGwgLVx1MDAzZWZyZWV6ZV9mc1xuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0LTI4OC1cdGV4cGxpY2l0bHkgZnJvbSB0aGlzIGNhbGxiYWNrLiBPcHRpb25hbC5cbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QtMjk2LVx0Y2FsbGVkIHdoZW4gVkZTIGlzIHVubG9ja2luZyBhIGZpbGVzeXN0ZW0gYW5kIG1ha2luZyBpdCB3cml0YWJsZVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0OjI5NzpcdGFnYWluIGFmdGVyIC1cdTAwM2VmcmVlemVfc3VwZXIuIE9wdGlvbmFsLlxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0LTI5OC1cbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QtMzAwLVx0Y2FsbGVkIHdoZW4gVkZTIGlzIHVubG9ja2luZyBhIGZpbGVzeXN0ZW0gYW5kIG1ha2luZyBpdCB3cml0YWJsZVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0OjMwMTpcdGFnYWluIGFmdGVyIC1cdTAwM2VmcmVlemVfZnMuIE9wdGlvbmFsLlxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0LTMwMi1cbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3hmcy94ZnMtb25saW5lLWZzY2stZGVzaWduLnJzdD0zMDA3PWxvbmcgZW5vdWdoIHRvIGNoZWNrIGFuZCBjb3JyZWN0IHRoZSBzdW1tYXJ5IGNvdW50ZXJzLlxuLS1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMveGZzL3hmcy1vbmxpbmUtZnNjay1kZXNpZ24ucnN0LTMwMjEtfCAtIEFkZGluZyBhbiBleHRyYSBsb2NrIHRvIHByZXZlbnQgb3RoZXJzIGZyb20gdGhhd2luZyB0aGUgZmlsZXN5c3RlbSAgICAgfFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy94ZnMveGZzLW9ubGluZS1mc2NrLWRlc2lnbi5yc3Q6MzAyMjp8ICAgcmVxdWlyZWQgdGhlIGFkZGl0aW9uIG9mIGEgYGAtXHUwMDNlZnJlZXplX3N1cGVyYGAgZnVuY3Rpb24gdG8gd3JhcCAgICAgICAgIHxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMveGZzL3hmcy1vbmxpbmUtZnNjay1kZXNpZ24ucnN0LTMwMjMtfCAgIGBgZnJlZXplX2ZzKClgYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuLS1cbkRvY3VtZW50YXRpb24vcG93ZXIvcGNpLnJzdD01NzU9VGhlIHBjaV9wbV9mcmVlemUoKSByb3V0aW5lIGlzIHF1aXRlIHNpbWlsYXIgdG8gcGNpX3BtX3N1c3BlbmQoKSwgYnV0IGl0IHJ1bnNcbkRvY3VtZW50YXRpb24vcG93ZXIvcGNpLnJzdDo1NzY6dGhlIGRldmljZSBkcml2ZXImIzM5O3MgcG0tXHUwMDNlZnJlZXplKCkgY2FsbGJhY2ssIGlmIGRlZmluZWQsIGluc3RlYWQgb2YgcG0tXHUwMDNlc3VzcGVuZCgpLFxuRG9jdW1lbnRhdGlvbi9wb3dlci9wY2kucnN0LTU3Ny1hbmQgaXQgZG9lc24mIzM5O3QgYXBwbHkgdGhlIHN1c3BlbmQtcmVsYXRlZCBoYXJkd2FyZSBxdWlya3MuICBJdCBpcyBleGVjdXRlZFxuLS1cbkRvY3VtZW50YXRpb24vcG93ZXIvcGNpLnJzdD01ODE9VGhlIHBjaV9wbV9mcmVlemVfbm9pcnEoKSByb3V0aW5lLCBpbiB0dXJuLCBpcyBzaW1pbGFyIHRvXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL3BjaS5yc3Q6NTgyOnBjaV9wbV9zdXNwZW5kX25vaXJxKCksIGJ1dCBpdCBjYWxscyB0aGUgZGV2aWNlIGRyaXZlciYjMzk7cyBwbS1cdTAwM2VmcmVlemVfbm9pcnEoKVxuRG9jdW1lbnRhdGlvbi9wb3dlci9wY2kucnN0LTU4My1yb3V0aW5lIGluc3RlYWQgb2YgcG0tXHUwMDNlc3VzcGVuZF9ub2lycSgpLiAgSXQgYWxzbyBkb2VzbiYjMzk7dCBhdHRlbXB0IHRvIHByZXBhcmUgdGhlXG4tLVxuRG9jdW1lbnRhdGlvbi9wb3dlci9ydW50aW1lX3BtLnJzdD03Mjk9ZHJpdmVyL2Jhc2UvcG93ZXIvZ2VuZXJpY19vcHMuYzpcbi0tXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL3J1bnRpbWVfcG0ucnN0LTc1Ni0gIGBpbnQgcG1fZ2VuZXJpY19mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KTtgXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL3J1bnRpbWVfcG0ucnN0Ojc1NzogICAgLSBpZiB0aGUgZGV2aWNlIGhhcyBub3QgYmVlbiBzdXNwZW5kZWQgYXQgcnVuIHRpbWUsIGludm9rZSB0aGUgLVx1MDAzZWZyZWV6ZSgpXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL3J1bnRpbWVfcG0ucnN0LTc1OC0gICAgICBjYWxsYmFjayBwcm92aWRlZCBieSBpdHMgZHJpdmVyIGFuZCByZXR1cm4gaXRzIHJlc3VsdCwgb3IgcmV0dXJuIDAgaWYgbm90XG4tLVxuRG9jdW1lbnRhdGlvbi9wb3dlci9ydW50aW1lX3BtLnJzdC03NjEtICBgaW50IHBtX2dlbmVyaWNfZnJlZXplX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldik7YFxuRG9jdW1lbnRhdGlvbi9wb3dlci9ydW50aW1lX3BtLnJzdDo3NjI6ICAgIC0gaWYgcG1fcnVudGltZV9zdXNwZW5kZWQoZGV2KSByZXR1cm5zIFwmIzM0O2ZhbHNlXCYjMzQ7LCBpbnZva2UgdGhlIC1cdTAwM2VmcmVlemVfbm9pcnEoKVxuRG9jdW1lbnRhdGlvbi9wb3dlci9ydW50aW1lX3BtLnJzdC03NjMtICAgICAgY2FsbGJhY2sgcHJvdmlkZWQgYnkgdGhlIGRldmljZSYjMzk7cyBkcml2ZXIgYW5kIHJldHVybiBpdHMgcmVzdWx0LCBvciByZXR1cm5cbi0tXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL3J1bnRpbWVfcG0ucnN0PTc5ND1wcm92aWRlIGl0cyBvd24gY2FsbGJhY2tzIGZvciAtXHUwMDNlcnVudGltZV9pZGxlKCksIC1cdTAwM2VydW50aW1lX3N1c3BlbmQoKSxcbkRvY3VtZW50YXRpb24vcG93ZXIvcnVudGltZV9wbS5yc3QtNzk1LS1cdTAwM2VydW50aW1lX3Jlc3VtZSgpLCAtXHUwMDNlc3VzcGVuZCgpLCAtXHUwMDNlc3VzcGVuZF9ub2lycSgpLCAtXHUwMDNlcmVzdW1lKCksXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL3J1bnRpbWVfcG0ucnN0Ojc5NjotXHUwMDNlcmVzdW1lX25vaXJxKCksIC1cdTAwM2VmcmVlemUoKSwgLVx1MDAzZWZyZWV6ZV9ub2lycSgpLCAtXHUwMDNldGhhdygpLCAtXHUwMDNldGhhd19ub2lycSgpLFxuRG9jdW1lbnRhdGlvbi9wb3dlci9ydW50aW1lX3BtLnJzdC03OTctLVx1MDAzZXBvd2Vyb2ZmKCksIC1cdTAwM2Vwb3dlcm9mZl9ub2lycSgpLCAtXHUwMDNlcmVzdG9yZSgpLCAtXHUwMDNlcmVzdG9yZV9ub2lycSgpIGluIHRoZVxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX2RyaXZlci5jPTYzMD1zdGF0aWMgaW50IGVlaF9yZXNldF9kZXZpY2Uoc3RydWN0IGVlaF9wZSAqcGUsIHN0cnVjdCBwY2lfYnVzICpidXMsXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfZHJpdmVyLmMtNjQzLVx0LyogcGNpYmlvcyB3aWxsIGNsZWFyIHRoZSBjb3VudGVyOyBzYXZlIHRoZSB2YWx1ZSAqL1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfZHJpdmVyLmM6NjQ0Olx0Y250ID0gcGUtXHUwMDNlZnJlZXplX2NvdW50O1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfZHJpdmVyLmMtNjQ1LVx0dHN0YW1wID0gcGUtXHUwMDNldHN0YW1wO1xuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX2RyaXZlci5jLTcxMS1cdHBlLVx1MDAzZXRzdGFtcCA9IHRzdGFtcDtcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX2RyaXZlci5jOjcxMjpcdHBlLVx1MDAzZWZyZWV6ZV9jb3VudCA9IGNudDtcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX2RyaXZlci5jLTcxMy1cbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9kcml2ZXIuYz04MzY9dm9pZCBlZWhfaGFuZGxlX25vcm1hbF9ldmVudChzdHJ1Y3QgZWVoX3BlICpwZSlcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9kcml2ZXIuYy05MjUtXHRlZWhfcGVfdXBkYXRlX3RpbWVfc3RhbXAocGUpO1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfZHJpdmVyLmM6OTI2Olx0cGUtXHUwMDNlZnJlZXplX2NvdW50JiM0MzsmIzQzOztcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX2RyaXZlci5jOjkyNzpcdGlmIChwZS1cdTAwM2VmcmVlemVfY291bnQgXHUwMDNlIGVlaF9tYXhfZnJlZXplcykge1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfZHJpdmVyLmMtOTI4LVx0XHRwcl9lcnIoXCYjMzQ7RUVIOiBQSEIjJXgtUEUjJXggaGFzIGZhaWxlZCAlZCB0aW1lcyBpbiB0aGUgbGFzdCBob3VyIGFuZCBoYXMgYmVlbiBwZXJtYW5lbnRseSBkaXNhYmxlZC5cXG5cJiMzNDssXG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9kcml2ZXIuYy05MjktXHRcdCAgICAgICBwZS1cdTAwM2VwaGItXHUwMDNlZ2xvYmFsX251bWJlciwgcGUtXHUwMDNlYWRkcixcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX2RyaXZlci5jOjkzMDpcdFx0ICAgICAgIHBlLVx1MDAzZWZyZWV6ZV9jb3VudCk7XG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9kcml2ZXIuYy05MzEtXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfZHJpdmVyLmMtOTQ1LVx0cHJfd2FybihcJiMzNDtFRUg6IFRoaXMgUENJIGRldmljZSBoYXMgZmFpbGVkICVkIHRpbWVzIGluIHRoZSBsYXN0IGhvdXIgYW5kIHdpbGwgYmUgcGVybWFuZW50bHkgZGlzYWJsZWQgYWZ0ZXIgJWQgZmFpbHVyZXMuXFxuXCYjMzQ7LFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfZHJpdmVyLmM6OTQ2Olx0XHRwZS1cdTAwM2VmcmVlemVfY291bnQsIGVlaF9tYXhfZnJlZXplcyk7XG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9kcml2ZXIuYy05NDctXHRwcl9pbmZvKFwmIzM0O0VFSDogTm90aWZ5IGRldmljZSBkcml2ZXJzIHRvIHNodXRkb3duXFxuXCYjMzQ7KTtcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9wZS5jPTQ5MD12b2lkIGVlaF9wZV91cGRhdGVfdGltZV9zdGFtcChzdHJ1Y3QgZWVoX3BlICpwZSlcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9wZS5jLTQ5NS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX3BlLmM6NDk2Olx0aWYgKHBlLVx1MDAzZWZyZWV6ZV9jb3VudCBcdTAwM2M9IDApIHtcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX3BlLmM6NDk3Olx0XHRwZS1cdTAwM2VmcmVlemVfY291bnQgPSAwO1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfcGUuYy00OTgtXHRcdHBlLVx1MDAzZXRzdGFtcCA9IGt0aW1lX2dldF9zZWNvbmRzKCk7XG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfcGUuYy01MDItXHRcdFx0cGUtXHUwMDNldHN0YW1wID0gdHN0YW1wO1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfcGUuYzo1MDM6XHRcdFx0cGUtXHUwMDNlZnJlZXplX2NvdW50ID0gMDtcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX3BlLmMtNTA0LVx0XHR9XG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NtcC5jPTQ3PXN0YXRpYyB2b2lkIG1wYzg1eHhfZ2l2ZV90aW1lYmFzZSh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zbXAuYy01Ny1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zbXAuYzo1ODpcdHFvcmlxX3BtX29wcy1cdTAwM2VmcmVlemVfdGltZV9iYXNlKHRydWUpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NtcC5jLTU5LSNpZmRlZiBDT05GSUdfUFBDNjRcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc21wLmMtOTAtXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc21wLmM6OTE6XHRxb3JpcV9wbV9vcHMtXHUwMDNlZnJlZXplX3RpbWVfYmFzZShmYWxzZSk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc21wLmMtOTItXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L2VlaC1wb3dlcm52LmM9NDUzPXN0YXRpYyBpbnQgcG52X2VlaF9zZXRfb3B0aW9uKHN0cnVjdCBlZWhfcGUgKnBlLCBpbnQgb3B0aW9uKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9lZWgtcG93ZXJudi5jLTQ4Mi1cdGlmIChmcmVlemVfcGUpIHtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9lZWgtcG93ZXJudi5jOjQ4MzpcdFx0aWYgKHBoYi1cdTAwM2VmcmVlemVfcGUpIHtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9lZWgtcG93ZXJudi5jOjQ4NDpcdFx0XHRwaGItXHUwMDNlZnJlZXplX3BlKHBoYiwgcGUtXHUwMDNlYWRkcik7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvZWVoLXBvd2VybnYuYy00ODUtXHRcdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L2VlaC1wb3dlcm52LmM9NTY1PXN0YXRpYyBpbnQgcG52X2VlaF9nZXRfcGVfc3RhdGUoc3RydWN0IGVlaF9wZSAqcGUpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L2VlaC1wb3dlcm52LmMtNjUzLVx0ICAgICEocGUtXHUwMDNlc3RhdGUgXHUwMDI2IEVFSF9QRV9JU09MQVRFRCkpIHtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9lZWgtcG93ZXJudi5jOjY1NDpcdFx0aWYgKHBoYi1cdTAwM2VmcmVlemVfcGUpXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvZWVoLXBvd2VybnYuYzo2NTU6XHRcdFx0cGhiLVx1MDAzZWZyZWV6ZV9wZShwaGIsIHBlLVx1MDAzZWFkZHIpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L2VlaC1wb3dlcm52LmMtNjU2LVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9lZWgtcG93ZXJudi5jPTEzMzk9c3RhdGljIGludCBwbnZfZWVoX2dldF9wZShzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L2VlaC1wb3dlcm52LmMtMTM2Ni1cdGlmICghKGRldl9wZS1cdTAwM2VzdGF0ZSBcdTAwMjYgRUVIX1BFX0lTT0xBVEVEKSlcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9lZWgtcG93ZXJudi5jOjEzNjc6XHRcdHBoYi1cdTAwM2VmcmVlemVfcGUocGhiLCBwZV9ubyk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvZWVoLXBvd2VybnYuYy0xMzY4LVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9lZWgtcG93ZXJudi5jLTEzODUtXHRcdGlmICghKGRldl9wZS1cdTAwM2VzdGF0ZSBcdTAwMjYgRUVIX1BFX0lTT0xBVEVEKSlcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9lZWgtcG93ZXJudi5jOjEzODY6XHRcdFx0cGhiLVx1MDAzZWZyZWV6ZV9wZShwaGIsIGRldl9wZS1cdTAwM2VhZGRyKTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9lZWgtcG93ZXJudi5jLTEzODctXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3BjaS1pb2RhLmM9MjQ4NT1zdGF0aWMgdm9pZCBfX2luaXQgcG52X3BjaV9pbml0X2lvZGFfcGhiKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3BjaS1pb2RhLmMtMjY2NS1cdHBoYi1cdTAwM2VnZXRfcGVfc3RhdGUgPSBwbnZfaW9kYV9nZXRfcGVfc3RhdGU7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvcGNpLWlvZGEuYzoyNjY2Olx0cGhiLVx1MDAzZWZyZWV6ZV9wZSA9IHBudl9pb2RhX2ZyZWV6ZV9wZTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9wY2ktaW9kYS5jLTI2NjctXHRwaGItXHUwMDNldW5mcmVlemVfcGUgPSBwbnZfaW9kYV91bmZyZWV6ZV9wZTtcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvcGNpLmM9NTI3PXN0YXRpYyB2b2lkIHBudl9wY2lfY29uZmlnX2NoZWNrX2VlaChzdHJ1Y3QgcGNpX2RuICpwZG4pXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3BjaS5jLTU3NC1cdFx0ICovXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvcGNpLmM6NTc1Olx0XHRpZiAocGhiLVx1MDAzZWZyZWV6ZV9wZSlcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9wY2kuYzo1NzY6XHRcdFx0cGhiLVx1MDAzZWZyZWV6ZV9wZShwaGIsIHBlX25vKTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9wY2kuYy01NzctXG4tLVxuYmxvY2svYmRldi5jPTMwMT1pbnQgYmRldl9mcmVlemUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbi0tXG5ibG9jay9iZGV2LmMtMzEyLVx0bXV0ZXhfbG9jayhcdTAwMjZiZGV2LVx1MDAzZWJkX2hvbGRlcl9sb2NrKTtcbmJsb2NrL2JkZXYuYzozMTM6XHRpZiAoYmRldi1cdTAwM2ViZF9ob2xkZXJfb3BzIFx1MDAyNlx1MDAyNiBiZGV2LVx1MDAzZWJkX2hvbGRlcl9vcHMtXHUwMDNlZnJlZXplKSB7XG5ibG9jay9iZGV2LmM6MzE0Olx0XHRlcnJvciA9IGJkZXYtXHUwMDNlYmRfaG9sZGVyX29wcy1cdTAwM2VmcmVlemUoYmRldik7XG5ibG9jay9iZGV2LmMtMzE1LVx0XHRsb2NrZGVwX2Fzc2VydF9ub3RfaGVsZChcdTAwMjZiZGV2LVx1MDAzZWJkX2hvbGRlcl9sb2NrKTtcbi0tXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM9MTE4Mj1zdGF0aWMgdm9pZCBiaW5kZXJfY2xlYW51cF9yZWZfb2xvY2tlZChzdHJ1Y3QgYmluZGVyX3JlZiAqcmVmKVxuLS1cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy0xMjI0LVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jOjEyMjU6XHRpZiAocmVmLVx1MDAzZWZyZWV6ZSkge1xuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jOjEyMjY6XHRcdGJpbmRlcl9kZXF1ZXVlX3dvcmsocmVmLVx1MDAzZXByb2MsIFx1MDAyNnJlZi1cdTAwM2VmcmVlemUtXHUwMDNld29yayk7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtMTIyNy1cdFx0YmluZGVyX3N0YXRzX2RlbGV0ZWQoQklOREVSX1NUQVRfRlJFRVpFKTtcbi0tXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM9MTM1Mj1zdGF0aWMgdm9pZCBiaW5kZXJfZnJlZV9yZWYoc3RydWN0IGJpbmRlcl9yZWYgKnJlZilcbi0tXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtMTM1Ni1cdGtmcmVlKHJlZi1cdTAwM2VkZWF0aCk7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM6MTM1NzpcdGtmcmVlKHJlZi1cdTAwM2VmcmVlemUpO1xuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jLTEzNTgtXHRrZnJlZShyZWYpO1xuLS1cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYz0xNjU5PXN0YXRpYyB2b2lkIGJpbmRlcl9mcmVlX3RyYW5zYWN0aW9uKHN0cnVjdCBiaW5kZXJfdHJhbnNhY3Rpb24gKnQpXG4tLVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jLTE2ODItXHRcdGlmICghdGFyZ2V0X3Byb2MtXHUwMDNlb3V0c3RhbmRpbmdfdHhucyBcdTAwMjZcdTAwMjYgdGFyZ2V0X3Byb2MtXHUwMDNlaXNfZnJvemVuKVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jOjE2ODM6XHRcdFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlX2FsbChcdTAwMjZ0YXJnZXRfcHJvYy1cdTAwM2VmcmVlemVfd2FpdCk7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtMTY4NC1cdFx0aWYgKHQtXHUwMDNlYnVmZmVyKVxuLS1cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYz0zOTM3PWJpbmRlcl9yZXF1ZXN0X2ZyZWV6ZV9ub3RpZmljYXRpb24oc3RydWN0IGJpbmRlcl9wcm9jICpwcm9jLFxuLS1cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy0zOTU3LVx0YmluZGVyX25vZGVfbG9jayhyZWYtXHUwMDNlbm9kZSk7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM6Mzk1ODpcdGlmIChyZWYtXHUwMDNlZnJlZXplKSB7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtMzk1OS1cdFx0YmluZGVyX3VzZXJfZXJyb3IoXCYjMzQ7JWQ6JWQgQkNfUkVRVUVTVF9GUkVFWkVfTk9USUZJQ0FUSU9OIGFscmVhZHkgc2V0XFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy0zOTcwLVx0ZnJlZXplLVx1MDAzZXdvcmsudHlwZSA9IEJJTkRFUl9XT1JLX0ZST1pFTl9CSU5ERVI7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM6Mzk3MTpcdHJlZi1cdTAwM2VmcmVlemUgPSBmcmVlemU7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtMzk3Mi1cbi0tXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM9Mzk5MD1iaW5kZXJfY2xlYXJfZnJlZXplX25vdGlmaWNhdGlvbihzdHJ1Y3QgYmluZGVyX3Byb2MgKnByb2MsXG4tLVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jLTQwMDctXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM6NDAwODpcdGlmICghcmVmLVx1MDAzZWZyZWV6ZSkge1xuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jLTQwMDktXHRcdGJpbmRlcl91c2VyX2Vycm9yKFwmIzM0OyVkOiVkIEJDX0NMRUFSX0ZSRUVaRV9OT1RJRklDQVRJT04gZnJlZXplIG5vdGlmaWNhdGlvbiBub3QgYWN0aXZlXFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy00MDE0LVx0fVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jOjQwMTU6XHRmcmVlemUgPSByZWYtXHUwMDNlZnJlZXplO1xuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jLTQwMTYtXHRiaW5kZXJfaW5uZXJfcHJvY19sb2NrKHByb2MpO1xuLS1cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy00MDI1LVx0fVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jOjQwMjY6XHRyZWYtXHUwMDNlZnJlZXplID0gTlVMTDtcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy00MDI3LVx0Lypcbi0tXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM9NTY0MD1zdGF0aWMgdm9pZCBiaW5kZXJfYWRkX2ZyZWV6ZV93b3JrKHN0cnVjdCBiaW5kZXJfcHJvYyAqcHJvYywgYm9vbCBpc19mcm96ZW4pXG4tLVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jLTU2NjMtXHRcdFx0YmluZGVyX2lubmVyX3Byb2NfbG9jayhyZWYtXHUwMDNlcHJvYyk7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM6NTY2NDpcdFx0XHRpZiAoIXJlZi1cdTAwM2VmcmVlemUpIHtcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy01NjY1LVx0XHRcdFx0YmluZGVyX2lubmVyX3Byb2NfdW5sb2NrKHJlZi1cdTAwM2Vwcm9jKTtcbi0tXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtNTY2Ny1cdFx0XHR9XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM6NTY2ODpcdFx0XHRyZWYtXHUwMDNlZnJlZXplLVx1MDAzZXdvcmsudHlwZSA9IEJJTkRFUl9XT1JLX0ZST1pFTl9CSU5ERVI7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM6NTY2OTpcdFx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZyZWYtXHUwMDNlZnJlZXplLVx1MDAzZXdvcmsuZW50cnkpKSB7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM6NTY3MDpcdFx0XHRcdHJlZi1cdTAwM2VmcmVlemUtXHUwMDNlaXNfZnJvemVuID0gaXNfZnJvemVuO1xuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jOjU2NzE6XHRcdFx0XHRiaW5kZXJfZW5xdWV1ZV93b3JrX2lsb2NrZWQoXHUwMDI2cmVmLVx1MDAzZWZyZWV6ZS1cdTAwM2V3b3JrLCBcdTAwMjZyZWYtXHUwMDNlcHJvYy1cdTAwM2V0b2RvKTtcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy01NjcyLVx0XHRcdFx0YmluZGVyX3dha2V1cF9wcm9jX2lsb2NrZWQocmVmLVx1MDAzZXByb2MpO1xuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jLTU2NzMtXHRcdFx0fSBlbHNlIHtcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYzo1Njc0Olx0XHRcdFx0aWYgKHJlZi1cdTAwM2VmcmVlemUtXHUwMDNlc2VudCBcdTAwMjZcdTAwMjYgcmVmLVx1MDAzZWZyZWV6ZS1cdTAwM2Vpc19mcm96ZW4gIT0gaXNfZnJvemVuKVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jOjU2NzU6XHRcdFx0XHRcdHJlZi1cdTAwM2VmcmVlemUtXHUwMDNlcmVzZW5kID0gdHJ1ZTtcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYzo1Njc2Olx0XHRcdFx0cmVmLVx1MDAzZWZyZWV6ZS1cdTAwM2Vpc19mcm96ZW4gPSBpc19mcm96ZW47XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtNTY3Ny1cdFx0XHR9XG4tLVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jPTU2OTE9c3RhdGljIGludCBiaW5kZXJfaW9jdGxfZnJlZXplKHN0cnVjdCBiaW5kZXJfZnJlZXplX2luZm8gKmluZm8sXG4tLVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jLTU3MTgtXHRcdHJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jOjU3MTk6XHRcdFx0dGFyZ2V0X3Byb2MtXHUwMDNlZnJlZXplX3dhaXQsXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtNTcyMC1cdFx0XHQoIXRhcmdldF9wcm9jLVx1MDAzZW91dHN0YW5kaW5nX3R4bnMpLFxuLS1cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYz02MDY3PXN0YXRpYyBpbnQgYmluZGVyX29wZW4oc3RydWN0IGlub2RlICpub2RwLCBzdHJ1Y3QgZmlsZSAqZmlscClcbi0tXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtNjA4OC1cdElOSVRfTElTVF9IRUFEKFx1MDAyNnByb2MtXHUwMDNldG9kbyk7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM6NjA4OTpcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2cHJvYy1cdTAwM2VmcmVlemVfd2FpdCk7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtNjA5MC1cdHByb2MtXHUwMDNlZGVmYXVsdF9wcmlvcml0eSA9IHRhc2tfbmljZShjdXJyZW50KTtcbi0tXG5kcml2ZXJzL2F0YS9saWJhaGNpX3BsYXRmb3JtLmM9Nzk4PXZvaWQgYWhjaV9wbGF0Zm9ybV9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvYXRhL2xpYmFoY2lfcGxhdGZvcm0uYy04MDgtXHRcdC8qIERpc2FibGUgcG9ydCBpbnRlcnJ1cHRzICovXG5kcml2ZXJzL2F0YS9saWJhaGNpX3BsYXRmb3JtLmM6ODA5Olx0XHRpZiAoYXAtXHUwMDNlb3BzLVx1MDAzZWZyZWV6ZSlcbmRyaXZlcnMvYXRhL2xpYmFoY2lfcGxhdGZvcm0uYzo4MTA6XHRcdFx0YXAtXHUwMDNlb3BzLVx1MDAzZWZyZWV6ZShhcCk7XG5kcml2ZXJzL2F0YS9saWJhaGNpX3BsYXRmb3JtLmMtODExLVxuLS1cbmRyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmM9NjM5NT12b2lkIGF0YV9wY2lfc2h1dGRvd25fb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMtNjQwNS1cdFx0LyogRGlzYWJsZSBwb3J0IGludGVycnVwdHMgKi9cbmRyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmM6NjQwNjpcdFx0aWYgKGFwLVx1MDAzZW9wcy1cdTAwM2VmcmVlemUpXG5kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jOjY0MDc6XHRcdFx0YXAtXHUwMDNlb3BzLVx1MDAzZWZyZWV6ZShhcCk7XG5kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jLTY0MDgtXG4tLVxuZHJpdmVycy9hdGEvbGliYXRhLWVoLmM9MTExMD1FWFBPUlRfU1lNQk9MX0dQTChhdGFfcG9ydF9hYm9ydCk7XG4tLVxuZHJpdmVycy9hdGEvbGliYXRhLWVoLmMtMTEyMC0gKlxuZHJpdmVycy9hdGEvbGliYXRhLWVoLmM6MTEyMTogKlx0YXAtXHUwMDNlb3BzLVx1MDAzZWZyZWV6ZSgpIGNhbGxiYWNrIGNhbiBiZSB1c2VkIGZvciBmcmVlemluZyB0aGUgcG9ydFxuZHJpdmVycy9hdGEvbGliYXRhLWVoLmMtMTEyMi0gKlx0aGFyZHdhcmUtd2lzZSAoZS5nLiBtYXNrIGludGVycnVwdCBhbmQgc3RvcCBETUEgZW5naW5lKS4gIElmIGFcbi0tXG5kcml2ZXJzL2F0YS9saWJhdGEtZWguYz0xMTMwPXN0YXRpYyB2b2lkIF9fYXRhX3BvcnRfZnJlZXplKHN0cnVjdCBhdGFfcG9ydCAqYXApXG5kcml2ZXJzL2F0YS9saWJhdGEtZWguYy0xMTMxLXtcbmRyaXZlcnMvYXRhL2xpYmF0YS1laC5jOjExMzI6XHRpZiAoYXAtXHUwMDNlb3BzLVx1MDAzZWZyZWV6ZSlcbmRyaXZlcnMvYXRhL2xpYmF0YS1laC5jOjExMzM6XHRcdGFwLVx1MDAzZW9wcy1cdTAwM2VmcmVlemUoYXApO1xuZHJpdmVycy9hdGEvbGliYXRhLWVoLmMtMTEzNC1cbi0tXG5kcml2ZXJzL2F0YS9zYXRhX3Byb21pc2UuYz0xODM9c3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHBkY19zYXRhX29wcyA9IHtcbi0tXG5kcml2ZXJzL2F0YS9zYXRhX3Byb21pc2UuYy0xOTQtLyogRmlyc3QtZ2VuZXJhdGlvbiBjaGlwcyBuZWVkIGEgbW9yZSByZXN0cmljdGl2ZSAtXHUwMDNlY2hlY2tfYXRhcGlfZG1hIG9wLFxuZHJpdmVycy9hdGEvc2F0YV9wcm9taXNlLmM6MTk1OiAgIGFuZCAtXHUwMDNlZnJlZXplL3RoYXcgdGhhdCBpZ25vcmUgdGhlIGhvdHBsdWcgY29udHJvbHMuICovXG5kcml2ZXJzL2F0YS9zYXRhX3Byb21pc2UuYy0xOTYtc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHBkY19vbGRfc2F0YV9vcHMgPSB7XG4tLVxuZHJpdmVycy9hdGEvc2F0YV9wcm9taXNlLmM9NzA2PXN0YXRpYyB2b2lkIHBkY19zYXRhX2ZyZWV6ZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKVxuLS1cbmRyaXZlcnMvYXRhL3NhdGFfcHJvbWlzZS5jLTcxOC1cdCAqIDIpIGFwLVx1MDAzZWxvY2sgPT0gXHUwMDI2YXAtXHUwMDNlaG9zdC1cdTAwM2Vsb2NrXG5kcml2ZXJzL2F0YS9zYXRhX3Byb21pc2UuYzo3MTk6XHQgKiAzKSAtXHUwMDNlZnJlZXplKCkgYW5kIC1cdTAwM2V0aGF3KCkgYXJlIGNhbGxlZCB3aXRoIGFwLVx1MDAzZWxvY2sgaGVsZFxuZHJpdmVycy9hdGEvc2F0YV9wcm9taXNlLmMtNzIwLVx0ICovXG4tLVxuZHJpdmVycy9iYXNlL3BsYXRmb3JtLmM9MTIyNz1pbnQgcGxhdGZvcm1fcG1fZnJlZXplKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYy0xMjM1LVx0aWYgKGRydi1cdTAwM2VwbSkge1xuZHJpdmVycy9iYXNlL3BsYXRmb3JtLmM6MTIzNjpcdFx0aWYgKGRydi1cdTAwM2VwbS1cdTAwM2VmcmVlemUpXG5kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYzoxMjM3Olx0XHRcdHJldCA9IGRydi1cdTAwM2VwbS1cdTAwM2VmcmVlemUoZGV2KTtcbmRyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jLTEyMzgtXHR9IGVsc2Uge1xuLS1cbmRyaXZlcnMvYmFzZS9wb3dlci9tYWluLmM9MzY2PXN0YXRpYyBwbV9jYWxsYmFja190IHBtX29wKGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpvcHMsIHBtX21lc3NhZ2VfdCBzdGF0ZSlcbi0tXG5kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jLTM3Ny1cdGNhc2UgUE1fRVZFTlRfUVVJRVNDRTpcbmRyaXZlcnMvYmFzZS9wb3dlci9tYWluLmM6Mzc4Olx0XHRyZXR1cm4gb3BzLVx1MDAzZWZyZWV6ZTtcbmRyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMtMzc5LVx0Y2FzZSBQTV9FVkVOVF9QT1dFUk9GRjpcbi0tXG5kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jPTQwMD1zdGF0aWMgcG1fY2FsbGJhY2tfdCBwbV9sYXRlX2Vhcmx5X29wKGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpvcHMsXG4tLVxuZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYy00MTItXHRjYXNlIFBNX0VWRU5UX1FVSUVTQ0U6XG5kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jOjQxMzpcdFx0cmV0dXJuIG9wcy1cdTAwM2VmcmVlemVfbGF0ZTtcbmRyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMtNDE0LVx0Y2FzZSBQTV9FVkVOVF9QT1dFUk9GRjpcbi0tXG5kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jPTQzNj1zdGF0aWMgcG1fY2FsbGJhY2tfdCBwbV9ub2lycV9vcChjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqb3BzLCBwbV9tZXNzYWdlX3Qgc3RhdGUpXG4tLVxuZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYy00NDctXHRjYXNlIFBNX0VWRU5UX1FVSUVTQ0U6XG5kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jOjQ0ODpcdFx0cmV0dXJuIG9wcy1cdTAwM2VmcmVlemVfbm9pcnE7XG5kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jLTQ0OS1cdGNhc2UgUE1fRVZFTlRfUE9XRVJPRkY6XG4tLVxuZHJpdmVycy9ncHUvaG9zdDF4L2Rldi5oPTMwNz1zdGF0aWMgaW5saW5lIHZvaWQgaG9zdDF4X2h3X2NkbWFfZnJlZXplKHN0cnVjdCBob3N0MXggKmhvc3QsXG4tLVxuZHJpdmVycy9ncHUvaG9zdDF4L2Rldi5oLTMwOS17XG5kcml2ZXJzL2dwdS9ob3N0MXgvZGV2Lmg6MzEwOlx0aG9zdC1cdTAwM2VjZG1hX29wLVx1MDAzZWZyZWV6ZShjZG1hKTtcbmRyaXZlcnMvZ3B1L2hvc3QxeC9kZXYuaC0zMTEtfVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL2NoaXAuYz02NzMwPXZvaWQgc3RhcnRfZnJlZXplX2hhbmRsaW5nKHN0cnVjdCBoZmkxX3Bwb3J0ZGF0YSAqcHBkLCBpbnQgZmxhZ3MpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hmaTEvY2hpcC5jLTY3NjMtXHQvKiBxdWV1ZSBub24taW50ZXJydXB0IGhhbmRsZXIgKi9cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL2NoaXAuYzo2NzY0Olx0cXVldWVfd29yayhwcGQtXHUwMDNlaGZpMV93cSwgXHUwMDI2cHBkLVx1MDAzZWZyZWV6ZV93b3JrKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL2NoaXAuYy02NzY1LX1cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9jaGlwLmM9OTg3MT12b2lkIGhmaTFfcXVpZXRfc2VyZGVzKHN0cnVjdCBoZmkxX3Bwb3J0ZGF0YSAqcHBkKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL2NoaXAuYy05ODk2LVx0Y2xlYXJfcmN2Y3RybChkZCwgUkNWX0NUUkxfUkNWX1BPUlRfRU5BQkxFX1NNQVNLKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL2NoaXAuYzo5ODk3Olx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZwcGQtXHUwMDNlZnJlZXplX3dvcmspO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hmaTEvY2hpcC5jLTk4OTgtfVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL2luaXQuYz01ODg9dm9pZCBoZmkxX2luaXRfcHBvcnRkYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgaGZpMV9wcG9ydGRhdGEgKnBwZCxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9pbml0LmMtNjE2LVx0SU5JVF9XT1JLKFx1MDAyNnBwZC1cdTAwM2VsaW5rX2Rvd25fd29yaywgaGFuZGxlX2xpbmtfZG93bik7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9pbml0LmM6NjE3Olx0SU5JVF9XT1JLKFx1MDAyNnBwZC1cdTAwM2VmcmVlemVfd29yaywgaGFuZGxlX2ZyZWV6ZSk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9pbml0LmMtNjE4LVx0SU5JVF9XT1JLKFx1MDAyNnBwZC1cdTAwM2VsaW5rX2Rvd25ncmFkZV93b3JrLCBoYW5kbGVfbGlua19kb3duZ3JhZGUpO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jdHJsLmM9Mjc1Mz1zdGF0aWMgaW50IGlyZG1hX3NjX3FwX3VwbG9hZF9jb250ZXh0KHN0cnVjdCBpcmRtYV9zY19kZXYgKmRldixcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvY3RybC5jLTI3NzEtXHQgICAgICBGSUVMRF9QUkVQKElSRE1BX0NRUFNRX1VDVFhfUkFXRk9STUFULCBpbmZvLVx1MDAzZXJhd19mb3JtYXQpIHxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jdHJsLmM6Mjc3MjpcdCAgICAgIEZJRUxEX1BSRVAoSVJETUFfQ1FQU1FfVUNUWF9GUkVFWkVRUCwgaW5mby1cdTAwM2VmcmVlemVfcXApIHxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jdHJsLmMtMjc3My1cdCAgICAgIEZJRUxEX1BSRVAoSVJETUFfQ1FQU1FfV1FFVkFMSUQsIGNxcC1cdTAwM2Vwb2xhcml0eSk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM9Mzg1PXZvaWQga3N6OTQ3N19yX21pYl9jbnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsIHUxNiBhZGRyLCB1NjQgKmNudClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0zOTItXHQvKiByZXRhaW4gdGhlIGZsdXNoL2ZyZWV6ZSBiaXQgKi9cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jOjM5MzpcdGRhdGEgPSBwLVx1MDAzZWZyZWV6ZSA/IE1JQl9DT1VOVEVSX0ZMVVNIX0ZSRUVaRSA6IDA7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0zOTQtXHRkYXRhIHw9IE1JQl9DT1VOVEVSX1JFQUQ7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM9NDE5PXZvaWQga3N6OTQ3N19mcmVlemVfbWliKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LCBib29sIGZyZWV6ZSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy00MjgtXHQvKiB1c2VkIGJ5IE1JQiBjb3VudGVyIHJlYWRpbmcgY29kZSB0byBrbm93IGZyZWV6ZSBpcyBlbmFibGVkICovXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYzo0Mjk6XHRwLVx1MDAzZWZyZWV6ZSA9IGZyZWV6ZTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTQzMC1cdG11dGV4X3VubG9jayhcdTAwMjZwLVx1MDAzZW1pYi5jbnRfbXV0ZXgpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2J1ZmZlcnMuYz0xMzcxPWludCBtbHhzd19zcF9zYl9wb29sX3NldChzdHJ1Y3QgbWx4c3dfY29yZSAqbWx4c3dfY29yZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9idWZmZXJzLmMtMTM4OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2J1ZmZlcnMuYzoxMzkwOlx0aWYgKHByLVx1MDAzZWZyZWV6ZV9tb2RlIFx1MDAyNlx1MDAyNiBwci1cdTAwM2Vtb2RlICE9IG1vZGUpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2J1ZmZlcnMuYy0xMzkxLVx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtDaGFuZ2luZyB0aGlzIHBvb2wmIzM5O3MgdGhyZXNob2xkIHR5cGUgaXMgZm9yYmlkZGVuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9idWZmZXJzLmMtMTM5NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2J1ZmZlcnMuYzoxMzk1Olx0aWYgKHByLVx1MDAzZWZyZWV6ZV9zaXplIFx1MDAyNlx1MDAyNiBwci1cdTAwM2VzaXplICE9IHNpemUpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2J1ZmZlcnMuYy0xMzk2LVx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtDaGFuZ2luZyB0aGlzIHBvb2wmIzM5O3Mgc2l6ZSBpcyBmb3JiaWRkZW5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2J1ZmZlcnMuYz0xNDk5PWludCBtbHhzd19zcF9zYl90Y19wb29sX2JpbmRfc2V0KHN0cnVjdCBtbHhzd19jb3JlX3BvcnQgKm1seHN3X2NvcmVfcG9ydCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9idWZmZXJzLmMtMTUyOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2J1ZmZlcnMuYzoxNTMwOlx0aWYgKGNtLVx1MDAzZWZyZWV6ZV9wb29sIFx1MDAyNlx1MDAyNiBjbS1cdTAwM2Vwb29sX2luZGV4ICE9IHBvb2xfaW5kZXgpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2J1ZmZlcnMuYy0xNTMxLVx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtCaW5kaW5nIHRoaXMgVEMgdG8gYSBkaWZmZXJlbnQgcG9vbCBpcyBmb3JiaWRkZW5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2J1ZmZlcnMuYy0xNTM0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fYnVmZmVycy5jOjE1MzU6XHRpZiAoY20tXHUwMDNlZnJlZXplX3RocmVzaCBcdTAwMjZcdTAwMjYgY20tXHUwMDNlbWF4X2J1ZmYgIT0gdGhyZXNob2xkKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9idWZmZXJzLmMtMTUzNi1cdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7Q2hhbmdpbmcgdGhpcyBUQyYjMzk7cyB0aHJlc2hvbGQgaXMgZm9yYmlkZGVuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM9NzkyPXN0YXRpYyBpbnQgYnJjbWZfc2Rpb2RfZnJlZXplcl9hdHRhY2goc3RydWN0IGJyY21mX3NkaW9fZGV2ICpzZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy03OTYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6Nzk3Olx0c2Rpb2Rldi1cdTAwM2VmcmVlemVyID0ga3phbGxvY19vYmooKnNkaW9kZXYtXHUwMDNlZnJlZXplcik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6Nzk4Olx0aWYgKCFzZGlvZGV2LVx1MDAzZWZyZWV6ZXIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtNzk5LVx0XHRyZXR1cm4gLUVOT01FTTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzo4MDA6XHRhdG9taWNfc2V0KFx1MDAyNnNkaW9kZXYtXHUwMDNlZnJlZXplci1cdTAwM2V0aHJlYWRfY291bnQsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjgwMTpcdGF0b21pY19zZXQoXHUwMDI2c2Rpb2Rldi1cdTAwM2VmcmVlemVyLVx1MDAzZWZyZWV6aW5nLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzo4MDI6XHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNnNkaW9kZXYtXHUwMDNlZnJlZXplci1cdTAwM2V0aHJlYWRfZnJlZXplKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzo4MDM6XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2c2Rpb2Rldi1cdTAwM2VmcmVlemVyLVx1MDAzZXJlc3VtZWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTgwNC1cdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYz04MDc9c3RhdGljIHZvaWQgYnJjbWZfc2Rpb2RfZnJlZXplcl9kZXRhY2goc3RydWN0IGJyY21mX3NkaW9fZGV2ICpzZGlvZGV2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTgwOC17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6ODA5Olx0aWYgKHNkaW9kZXYtXHUwMDNlZnJlZXplcikge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjgxMDpcdFx0V0FSTl9PTihhdG9taWNfcmVhZChcdTAwMjZzZGlvZGV2LVx1MDAzZWZyZWV6ZXItXHUwMDNlZnJlZXppbmcpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzo4MTE6XHRcdGtmcmVlKHNkaW9kZXYtXHUwMDNlZnJlZXplcik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6ODEyOlx0XHRzZGlvZGV2LVx1MDAzZWZyZWV6ZXIgPSBOVUxMO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTgxMy1cdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM9ODE2PXN0YXRpYyBpbnQgYnJjbWZfc2Rpb2RfZnJlZXplcl9vbihzdHJ1Y3QgYnJjbWZfc2Rpb19kZXYgKnNkaW9kZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtODE3LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzo4MTg6XHRhdG9taWNfdCAqZXhwZWN0ID0gXHUwMDI2c2Rpb2Rldi1cdTAwM2VmcmVlemVyLVx1MDAzZXRocmVhZF9jb3VudDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy04MTktXHRpbnQgcmVzID0gMDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy04MjAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6ODIxOlx0c2Rpb2Rldi1cdTAwM2VmcmVlemVyLVx1MDAzZWZyb3plbl9jb3VudCA9IDA7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6ODIyOlx0cmVpbml0X2NvbXBsZXRpb24oXHUwMDI2c2Rpb2Rldi1cdTAwM2VmcmVlemVyLVx1MDAzZXJlc3VtZWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjgyMzpcdGF0b21pY19zZXQoXHUwMDI2c2Rpb2Rldi1cdTAwM2VmcmVlemVyLVx1MDAzZWZyZWV6aW5nLCAxKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy04MjQtXHRicmNtZl9zZGlvX3RyaWdnZXJfZHBjKHNkaW9kZXYtXHUwMDNlYnVzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzo4MjU6XHR3YWl0X2V2ZW50KHNkaW9kZXYtXHUwMDNlZnJlZXplci1cdTAwM2V0aHJlYWRfZnJlZXplLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjgyNjpcdFx0ICAgYXRvbWljX3JlYWQoZXhwZWN0KSA9PSBzZGlvZGV2LVx1MDAzZWZyZWV6ZXItXHUwMDNlZnJvemVuX2NvdW50KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy04MjctXHRzZGlvX2NsYWltX2hvc3Qoc2Rpb2Rldi1cdTAwM2VmdW5jMSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jPTgzMz1zdGF0aWMgdm9pZCBicmNtZl9zZGlvZF9mcmVlemVyX29mZihzdHJ1Y3QgYnJjbWZfc2Rpb19kZXYgKnNkaW9kZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTgzNy1cdHNkaW9fcmVsZWFzZV9ob3N0KHNkaW9kZXYtXHUwMDNlZnVuYzEpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjgzODpcdGF0b21pY19zZXQoXHUwMDI2c2Rpb2Rldi1cdTAwM2VmcmVlemVyLVx1MDAzZWZyZWV6aW5nLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzo4Mzk6XHRjb21wbGV0ZV9hbGwoXHUwMDI2c2Rpb2Rldi1cdTAwM2VmcmVlemVyLVx1MDAzZXJlc3VtZWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTg0MC19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jPTg0Mj1ib29sIGJyY21mX3NkaW9kX2ZyZWV6aW5nKHN0cnVjdCBicmNtZl9zZGlvX2RldiAqc2Rpb2Rldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtODQ0LVx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX1BNX1NMRUVQKSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzo4NDU6XHRcdGF0b21pY19yZWFkKFx1MDAyNnNkaW9kZXYtXHUwMDNlZnJlZXplci1cdTAwM2VmcmVlemluZyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtODQ2LX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM9ODQ4PXZvaWQgYnJjbWZfc2Rpb2RfdHJ5X2ZyZWV6ZShzdHJ1Y3QgYnJjbWZfc2Rpb19kZXYgKnNkaW9kZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTg1MS1cdFx0cmV0dXJuO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjg1MjpcdHNkaW9kZXYtXHUwMDNlZnJlZXplci1cdTAwM2Vmcm96ZW5fY291bnQmIzQzOyYjNDM7O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjg1MzpcdHdha2VfdXAoXHUwMDI2c2Rpb2Rldi1cdTAwM2VmcmVlemVyLVx1MDAzZXRocmVhZF9mcmVlemUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjg1NDpcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2c2Rpb2Rldi1cdTAwM2VmcmVlemVyLVx1MDAzZXJlc3VtZWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTg1NS19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jPTg1Nz12b2lkIGJyY21mX3NkaW9kX2ZyZWV6ZXJfY291bnQoc3RydWN0IGJyY21mX3NkaW9fZGV2ICpzZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy04NTktXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUE1fU0xFRVApKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjg2MDpcdFx0YXRvbWljX2luYyhcdTAwMjZzZGlvZGV2LVx1MDAzZWZyZWV6ZXItXHUwMDNldGhyZWFkX2NvdW50KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy04NjEtfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYz04NjM9dm9pZCBicmNtZl9zZGlvZF9mcmVlemVyX3VuY291bnQoc3RydWN0IGJyY21mX3NkaW9fZGV2ICpzZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy04NjUtXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUE1fU0xFRVApKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjg2NjpcdFx0YXRvbWljX2RlYyhcdTAwMjZzZGlvZGV2LVx1MDAzZWZyZWV6ZXItXHUwMDNldGhyZWFkX2NvdW50KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy04NjctfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jPTI1NDg9c3RhdGljIHZvaWQgcnR3X2NvZXhfcnVuX2NvZXgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcmVhc29uKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jLTI1ODgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYzoyNTg5Olx0aWYgKGNvZXgtXHUwMDNlZnJlZXplIFx1MDAyNlx1MDAyNiBjb2V4X2RtLVx1MDAzZXJlYXNvbiA9PSBDT0VYX1JTTl9CVElORk8gXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYy0yNTkwLVx0ICAgICFjb2V4X3N0YXQtXHUwMDNlYnRfc2V0dXBfbGluaykge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jPTI3MDg9c3RhdGljIHZvaWQgX19ydHdfY29leF9pbml0X2h3X2NvbmZpZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIHdpZmlfb25seSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYy0yNzUzLVx0XHRjb2V4LVx1MDAzZXN0b3BfZG0gPSBmYWxzZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jOjI3NTQ6XHRcdGNvZXgtXHUwMDNlZnJlZXplID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jLTI3NTUtXHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmM9Mjg2OT12b2lkIHJ0d19jb2V4X3NjYW5fbm90aWZ5KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHR5cGUpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmMtMjg3Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jOjI4Nzc6XHRjb2V4LVx1MDAzZWZyZWV6ZSA9IGZhbHNlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmMtMjg3OC1cdHJ0d19jb2V4X3dyaXRlX3NjYmQocnR3ZGV2LCBDT0VYX1NDQkRfQUNUSVZFIHwgQ09FWF9TQ0JEX09OT0ZGLCB0cnVlKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYz0yOTMzPXZvaWQgcnR3X2NvZXhfY29ubmVjdF9ub3RpZnkoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggdHlwZSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYy0yOTcyLVx0XHQgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jOjI5NzM6XHRcdGNvZXgtXHUwMDNlZnJlZXplID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jLTI5NzQtXHRcdGllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsocnR3ZGV2LVx1MDAzZWh3LCBcdTAwMjZjb2V4LVx1MDAzZWRlZnJlZXplX3dvcmssXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmMtMjk3Ny1cdFx0Y29leF9zdGF0LVx1MDAzZXdsX2hpX3ByaV90YXNrMSA9IGZhbHNlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmM6Mjk3ODpcdFx0Y29leC1cdTAwM2VmcmVlemUgPSBmYWxzZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jLTI5NzktXHRcdGNvZXhfc3RhdC1cdTAwM2V3bF9jb25uZWN0aW5nID0gZmFsc2U7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmM9MzQ5MT12b2lkIHJ0d19jb2V4X2RlZnJlZXplX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jLTM0OTgtXHRtdXRleF9sb2NrKFx1MDAyNnJ0d2Rldi1cdTAwM2VtdXRleCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYzozNDk5Olx0Y29leC1cdTAwM2VmcmVlemUgPSBmYWxzZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jLTM1MDAtXHRjb2V4X3N0YXQtXHUwMDNld2xfaGlfcHJpX3Rhc2sxID0gZmFsc2U7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmM9MzkzNj12b2lkIHJ0d19jb2V4X2Rpc3BsYXlfY29leF9pbmZvKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBzZXFfZmlsZSAqbSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYy0zOTk1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmM6Mzk5NjpcdH0gZWxzZSBpZiAoY29leC1cdTAwM2VmcmVlemUpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jLTM5OTctXHRcdHNlcV9wdXRzKG0sIFwmIzM0Oz09PT09PT09PT09PVtjb2V4X2ZyZWV6ZV09PT09PT09PT09PT1cXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbnZkaW1tL2RpbW1fZGV2cy5jPTQxMD1zdGF0aWMgdW1vZGVfdCBudmRpbW1fdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYSwgaW50IG4pXG4tLVxuZHJpdmVycy9udmRpbW0vZGltbV9kZXZzLmMtNDIxLVx0XHQvKiBBcmUgdGhlcmUgYW55IHN0YXRlIG11dGF0aW9uIG9wcyAobWFrZSB3cml0YWJsZSk/ICovXG5kcml2ZXJzL252ZGltbS9kaW1tX2RldnMuYzo0MjI6XHRcdGlmIChudmRpbW0tXHUwMDNlc2VjLm9wcy1cdTAwM2VmcmVlemUgfHwgbnZkaW1tLVx1MDAzZXNlYy5vcHMtXHUwMDNlZGlzYWJsZVxuZHJpdmVycy9udmRpbW0vZGltbV9kZXZzLmMtNDIzLVx0XHRcdFx0fHwgbnZkaW1tLVx1MDAzZXNlYy5vcHMtXHUwMDNlY2hhbmdlX2tleVxuLS1cbmRyaXZlcnMvbnZkaW1tL2RpbW1fZGV2cy5jLTQyOS1cbmRyaXZlcnMvbnZkaW1tL2RpbW1fZGV2cy5jOjQzMDpcdGlmIChudmRpbW0tXHUwMDNlc2VjLm9wcy1cdTAwM2VmcmVlemUpXG5kcml2ZXJzL252ZGltbS9kaW1tX2RldnMuYy00MzEtXHRcdHJldHVybiBhLVx1MDAzZW1vZGU7XG4tLVxuZHJpdmVycy9udmRpbW0vZGltbV9kZXZzLmM9NjcwPWludCBudmRpbW1fc2VjdXJpdHlfZnJlZXplKHN0cnVjdCBudmRpbW0gKm52ZGltbSlcbi0tXG5kcml2ZXJzL252ZGltbS9kaW1tX2RldnMuYy02NzUtXG5kcml2ZXJzL252ZGltbS9kaW1tX2RldnMuYzo2NzY6XHRpZiAoIW52ZGltbS1cdTAwM2VzZWMub3BzIHx8ICFudmRpbW0tXHUwMDNlc2VjLm9wcy1cdTAwM2VmcmVlemUpXG5kcml2ZXJzL252ZGltbS9kaW1tX2RldnMuYy02NzctXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5kcml2ZXJzL252ZGltbS9kaW1tX2RldnMuYy02ODYtXG5kcml2ZXJzL252ZGltbS9kaW1tX2RldnMuYzo2ODc6XHRyYyA9IG52ZGltbS1cdTAwM2VzZWMub3BzLVx1MDAzZWZyZWV6ZShudmRpbW0pO1xuZHJpdmVycy9udmRpbW0vZGltbV9kZXZzLmMtNjg4LVx0bnZkaW1tLVx1MDAzZXNlYy5mbGFncyA9IG52ZGltbV9zZWN1cml0eV9mbGFncyhudmRpbW0sIE5WRElNTV9VU0VSKTtcbi0tXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmM9MTA2Mz1zdGF0aWMgaW50IHBjaV9wbV9mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xMDg4LVxuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jOjEwODk6XHRpZiAocG0tXHUwMDNlZnJlZXplKSB7XG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMtMTA5MC1cdFx0aW50IGVycm9yO1xuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jLTEwOTEtXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmM6MTA5MjpcdFx0ZXJyb3IgPSBwbS1cdTAwM2VmcmVlemUoZGV2KTtcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYzoxMDkzOlx0XHRzdXNwZW5kX3JlcG9ydF9yZXN1bHQoZGV2LCBwbS1cdTAwM2VmcmVlemUsIGVycm9yKTtcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xMDk0LVx0XHRpZiAoZXJyb3IpXG4tLVxuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jPTExMDE9c3RhdGljIGludCBwY2lfcG1fZnJlZXplX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMtMTEwOC1cbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYzoxMTA5Olx0aWYgKHBtIFx1MDAyNlx1MDAyNiBwbS1cdTAwM2VmcmVlemVfbm9pcnEpIHtcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xMTEwLVx0XHRpbnQgZXJyb3I7XG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMtMTExMS1cbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYzoxMTEyOlx0XHRlcnJvciA9IHBtLVx1MDAzZWZyZWV6ZV9ub2lycShkZXYpO1xuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jOjExMTM6XHRcdHN1c3BlbmRfcmVwb3J0X3Jlc3VsdChkZXYsIHBtLVx1MDAzZWZyZWV6ZV9ub2lycSwgZXJyb3IpO1xuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jLTExMTQtXHRcdGlmIChlcnJvcilcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9wbS5jPTI3PXN0YXRpYyBpbnQgZG9fc2NzaV9mcmVlemUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqcG0pXG5kcml2ZXJzL3Njc2kvc2NzaV9wbS5jLTI4LXtcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDk0CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgRnJlZXppbmcgTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gdGhpcyBwYXRjaCBpbiBgZnMvc3VwZXIuY2AuIEl0IHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gYGZzX2JkZXZfZnJlZXplYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFdhaXQgYSBtaW51dGUsIHdoZXJlIGlzICp0aGF0KiBjYWxsZWQgZnJvbT8gUmlnaHQsIGBmc19iZGV2X2ZyZWV6ZWAgaXMgaW52b2tlZCBieSBgYmRldl9mcmVlemVgLiBUaGF0JiMzOTtzIGluIGBibG9jay9iZGV2LmNgLiBBbHJpZ2h0LCBzbyBsZXQmIzM5O3Mgc2hpZnQgZ2VhcnMgYW5kIGRpdmUgaW50byBgYmRldl9mcmVlemVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGhlcmUgdG8gc2VlIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24gaW4gdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmRldl9mcmVlemUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmRldi5jPTI4NT1FWFBPUlRfU1lNQk9MKHN5bmNfYmxvY2tkZXZfcmFuZ2UpO1xuLS1cbmJsb2NrL2JkZXYuYy0yODctLyoqXG5ibG9jay9iZGV2LmM6Mjg4OiAqIGJkZXZfZnJlZXplIC0gbG9jayBhIGZpbGVzeXN0ZW0gYW5kIGZvcmNlIGl0IGludG8gYSBjb25zaXN0ZW50IHN0YXRlXG5ibG9jay9iZGV2LmMtMjg5LSAqIEBiZGV2Olx0YmxvY2tkZXZpY2UgdG8gbG9ja1xuLS1cbmJsb2NrL2JkZXYuYy0yOTQtICogdW5mcmVlemUgcHJvY2VzcyBjYW4gdW5mcmVlemUgdGhlIGZyb3plbiBmaWxlc3lzdGVtIGFjdHVhbGx5IHdoZW4gbXVsdGlwbGVcbmJsb2NrL2JkZXYuYzoyOTU6ICogZnJlZXplIHJlcXVlc3RzIGFycml2ZSBzaW11bHRhbmVvdXNseS4gSXQgY291bnRzIHVwIGluIGJkZXZfZnJlZXplKCkgYW5kXG5ibG9jay9iZGV2LmMtMjk2LSAqIGNvdW50IGRvd24gaW4gYmRldl90aGF3KCkuIFdoZW4gaXQgYmVjb21lcyAwLCB0aGF3X2JkZXYoKSB3aWxsIHVuZnJlZXplXG4tLVxuYmxvY2svYmRldi5jLTMwMC0gKi9cbmJsb2NrL2JkZXYuYzozMDE6aW50IGJkZXZfZnJlZXplKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG5ibG9jay9iZGV2LmMtMzAyLXtcbi0tXG5ibG9jay9iZGV2LmMtMzI2LX1cbmJsb2NrL2JkZXYuYzozMjc6RVhQT1JUX1NZTUJPTChiZGV2X2ZyZWV6ZSk7XG5ibG9jay9iZGV2LmMtMzI4LVxuLS1cbmJsb2NrL2JkZXYuYy0zMzItICpcbmJsb2NrL2JkZXYuYzozMzM6ICogVW5sb2NrcyB0aGUgZmlsZXN5c3RlbSBhbmQgbWFya3MgaXQgd3JpdGVhYmxlIGFnYWluIGFmdGVyIGJkZXZfZnJlZXplKCkuXG5ibG9jay9iZGV2LmMtMzM0LSAqXG4tLVxuZHJpdmVycy9tZC9kbS5jPTI5MzI9c3RhdGljIGludCBsb2NrX2ZzKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZClcbi0tXG5kcml2ZXJzL21kL2RtLmMtMjkzNy1cbmRyaXZlcnMvbWQvZG0uYzoyOTM4Olx0ciA9IGJkZXZfZnJlZXplKG1kLVx1MDAzZWRpc2stXHUwMDNlcGFydDApO1xuZHJpdmVycy9tZC9kbS5jLTI5MzktXHRpZiAoIXIpXG4tLVxuZnMvZXhmYXQvc3VwZXIuYz0xNTU9aW50IGV4ZmF0X2ZvcmNlX3NodXRkb3duKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBmbGFncylcbi0tXG5mcy9leGZhdC9zdXBlci5jLTE2Ni1cdGNhc2UgRVhGQVRfR09JTkdfRE9XTl9GVUxMU1lOQzpcbmZzL2V4ZmF0L3N1cGVyLmM6MTY3Olx0XHRyZXQgPSBiZGV2X2ZyZWV6ZShzYi1cdTAwM2VzX2JkZXYpO1xuZnMvZXhmYXQvc3VwZXIuYy0xNjgtXHRcdGlmIChyZXQpXG4tLVxuZnMvZXh0NC9pb2N0bC5jPTgxMD1pbnQgZXh0NF9mb3JjZV9zaHV0ZG93bihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgZmxhZ3MpXG4tLVxuZnMvZXh0NC9pb2N0bC5jLTgyNS1cdGNhc2UgRVhUNF9HT0lOR19GTEFHU19ERUZBVUxUOlxuZnMvZXh0NC9pb2N0bC5jOjgyNjpcdFx0cmV0ID0gYmRldl9mcmVlemUoc2ItXHUwMDNlc19iZGV2KTtcbmZzL2V4dDQvaW9jdGwuYy04MjctXHRcdGlmIChyZXQpXG4tLVxuZnMvZjJmcy9maWxlLmM9MjQ1Mz1pbnQgZjJmc19kb19zaHV0ZG93bihzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksIHVuc2lnbmVkIGludCBmbGFnLFxuLS1cbmZzL2YyZnMvZmlsZS5jLTI0NjAtXHRjYXNlIEYyRlNfR09JTkdfRE9XTl9GVUxMU1lOQzpcbmZzL2YyZnMvZmlsZS5jOjI0NjE6XHRcdHJldCA9IGJkZXZfZnJlZXplKHNiLVx1MDAzZXNfYmRldik7XG5mcy9mMmZzL2ZpbGUuYy0yNDYyLVx0XHRpZiAocmV0KVxuLS1cbmZzL250ZnMvc3VwZXIuYz0xODIwPWludCBudGZzX2ZvcmNlX3NodXRkb3duKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBmbGFncylcbi0tXG5mcy9udGZzL3N1cGVyLmMtMTgzMC1cdGNhc2UgRlNfU0hVVERPV05fRkxBR1NfTE9HRkxVU0g6XG5mcy9udGZzL3N1cGVyLmM6MTgzMTpcdFx0cmV0ID0gYmRldl9mcmVlemUoc2ItXHUwMDNlc19iZGV2KTtcbmZzL250ZnMvc3VwZXIuYy0xODMyLVx0XHRpZiAocmV0KVxuLS1cbmZzL250ZnMzL2ZpbGUuYz0xOTc9c3RhdGljIGludCBudGZzX2ZvcmNlX3NodXRkb3duKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBmbGFncylcbi0tXG5mcy9udGZzMy9maWxlLmMtMjA1LVx0LyogTm8gYWRkaXRpb25hbCBvcHRpb25zIHlldCAoZmxhZ3MpLiAqL1xuZnMvbnRmczMvZmlsZS5jOjIwNjpcdGVyciA9IGJkZXZfZnJlZXplKHNiLVx1MDAzZXNfYmRldik7XG5mcy9udGZzMy9maWxlLmMtMjA3LVx0aWYgKGVycilcbi0tXG5mcy9zdXBlci5jPTE0Mzc9c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqZ2V0X2JkZXZfc3VwZXIoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbi0tXG5mcy9zdXBlci5jLTE0NTItLyoqXG5mcy9zdXBlci5jOjE0NTM6ICogZnNfYmRldl9mcmVlemUgLSBmcmVlemUgb3duaW5nIGZpbGVzeXN0ZW0gb2YgYmxvY2sgZGV2aWNlXG5mcy9zdXBlci5jLTE0NTQtICogQGJkZXY6IGJsb2NrIGRldmljZVxuLS1cbmZzL3N1cGVyLmMtMTQ2Ni0gKi9cbmZzL3N1cGVyLmM6MTQ2NzpzdGF0aWMgaW50IGZzX2JkZXZfZnJlZXplKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG5mcy9zdXBlci5jLTE0Njgte1xuLS1cbmZzL3N1cGVyLmM9MTU1Mj1jb25zdCBzdHJ1Y3QgYmxrX2hvbGRlcl9vcHMgZnNfaG9sZGVyX29wcyA9IHtcbi0tXG5mcy9zdXBlci5jLTE1NTQtXHQuc3luY1x0XHRcdD0gZnNfYmRldl9zeW5jLFxuZnMvc3VwZXIuYzoxNTU1Olx0LmZyZWV6ZVx0XHRcdD0gZnNfYmRldl9mcmVlemUsXG5mcy9zdXBlci5jLTE1NTYtXHQudGhhd1x0XHRcdD0gZnNfYmRldl90aGF3LFxuLS1cbmZzL3hmcy94ZnNfZnNvcHMuYz00NTE9eGZzX2ZzX2dvaW5nZG93bihcbi0tXG5mcy94ZnMveGZzX2Zzb3BzLmMtNDU2LVx0Y2FzZSBYRlNfRlNPUF9HT0lOR19GTEFHU19ERUZBVUxUOiB7XG5mcy94ZnMveGZzX2Zzb3BzLmM6NDU3Olx0XHRpZiAoIWJkZXZfZnJlZXplKG1wLVx1MDAzZW1fc3VwZXItXHUwMDNlc19iZGV2KSkge1xuZnMveGZzL3hmc19mc29wcy5jLTQ1OC1cdFx0XHR4ZnNfZm9yY2Vfc2h1dGRvd24obXAsIFNIVVRET1dOX0ZPUkNFX1VNT1VOVCk7XG4tLVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaD0xODMyPXN0YXRpYyBpbmxpbmUgaW50IGVhcmx5X2xvb2t1cF9iZGV2KGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBkZXZfdCAqZGV2KVxuLS1cbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTgzNy1cbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTgzODppbnQgYmRldl9mcmVlemUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldik7XG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTE4MzktaW50IGJkZXZfdGhhdyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyNDEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA4MzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMgaW4gdGhlIEZpbGVzeXN0ZW0gQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgc29tZSByZWNlbnQgY2hhbmdlcyBpbiB0aGUgZmlsZXN5c3RlbSBjb2RlLCB0cnlpbmcgdG8gaWRlbnRpZnkgcHJvbWlzaW5nIGFyZWFzIGZvciBmdXp6aW5nLiBGaXJzdCwgSSBub3RpY2VkIHRoYXQgYGJkZXZfZnJlZXplYCBpcyBhIGZ1bmN0aW9uIGNhbGxlZCBieSBzZXZlcmFsIGZpbGVzeXN0ZW0tc3BlY2lmaWMgc2h1dGRvd24gcm91dGluZXM6IGBleGZhdF9mb3JjZV9zaHV0ZG93bmAsIGBleHQ0X2ZvcmNlX3NodXRkb3duYCwgYGYyZnNfZG9fc2h1dGRvd25gLCBgbnRmc19mb3JjZV9zaHV0ZG93bmAsIGB4ZnNfZnNfZ29pbmdkb3duYCwgYW5kIGV2ZW4gaW5kaXJlY3RseSB0aHJvdWdoIGBsb2NrX2ZzYCBpbiBgZG0uY2AuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKQnV0IHRoZSBrZXkgY2hhbmdlIGlzIGluIGBmcy9zdXBlci5jYCwgc3BlY2lmaWNhbGx5IGluIGBmc19iZGV2X2ZyZWV6ZWAuIFRoaXMgcGF0Y2ggYWRkcyBlcnJvciBoYW5kbGluZyBhZnRlciB0aGUgYHN5bmNfYmxvY2tkZXZgIGNhbGwuIElmIGBzeW5jX2Jsb2NrZGV2YCBmYWlscywgdGhlIHN1cGVyYmxvY2sgaXMgbm93IHRoYXdlZC4gVGhpcyBpcyBkZWZpbml0ZWx5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlIGJlY2F1c2UgaXQgaW50cm9kdWNlcyBhIG5ldyBmYWlsdXJlIHBhdGggYW5kIHJvbGxiYWNrIHNjZW5hcmlvLiBUaGlzIGFyZWEgbmVlZHMgbW9yZSBzY3J1dGlueS4gQSBzeW5jaHJvbml6YXRpb24gZXJyb3IgZHVyaW5nIGZyZWV6ZS90aGF3IGNvdWxkIGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uIG9yIGluY29uc2lzdGVuY2llcywgYW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgY2FuIGJlIHRhcmdldGVkIGJ5IGZ1enppbmcuCgpOZXh0LCBJIGxvb2tlZCBhdCBhIHJlbGF0ZWQgY2hhbmdlIGluIGBmcy9leGZhdC9taXNjLmNgLiBUaGlzIHBhdGNoIG1vZGlmaWVzIGhvdyBleEZBVCBoYW5kbGVzIGVycm9ycyB3aGVuIHRoZSBgZXJyb3JzPXJlbW91bnQtcm9gIG9wdGlvbiBpcyBzZXQuIEluc3RlYWQgb2Ygc2V0dGluZyB0aGUgYFNCX1JET05MWWAgZmxhZyBkaXJlY3RseSwgaXQgbm93IHNldHMgYEVYRkFUX0ZMQUdTX1NIVVRET1dOYC4gVGhpcyBjaGFuZ2Ugc2VlbXMgc3VidGxlIGJ1dCBjb3VsZCBhbHNvIGludHJvZHVjZSBuZXcgc3RhdGVzIG9yIGNvZGUgcGF0aHMgdGhhdCBhcmUgd29ydGggZXhwbG9yaW5nIHRocm91Z2ggZnV6emluZy4gVGhlIGNvbW1lbnQgaW5kaWNhdGVzIHRoaXMgY2hhbmdlIGhlbHBzIGF2b2lkIHBvdGVudGlhbCBkZWFkbG9ja3Mgd2l0aCBgZnJlZXplX3N1cGVyKClgLgoKU28sIHRoZSBmb2N1cyBvZiBteSBmdXp6aW5nIGVmZm9ydHMgc2hvdWxkIGJlIG9uIGBmc19iZGV2X2ZyZWV6ZWAgYW5kIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gaXQsIGVzcGVjaWFsbHkgdGhlIG5ldyByb2xsYmFjayBwYXRoIGFmdGVyIGBzeW5jX2Jsb2NrZGV2YCBmYWlsdXJlLiBXZSB3YW50IHRvIGNoZWNrIGBmc19iZGV2X2ZyZWV6ZWAgYmVjYXVzZSBpdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGBGSUZSRUVaRWAgaW9jdGwsIGFzIHdlbGwgYXMgdmlhIGRtLCBhbmQgdGhlIGRpZmZlcmVudCBmaWxlc3lzdGVtIHNodXRkb3duIHBhdGhzLiBBbmQgc2Vjb25kYXJpbHksIG9uIHRoZSBlcnJvciBoYW5kbGluZyBpbiBgX19leGZhdF9mc19lcnJvcmAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gdGhvc2UgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmc19iZGV2X2ZyZWV6ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zdXBlci5jPTE0Mzc9c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqZ2V0X2JkZXZfc3VwZXIoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbi0tXG5mcy9zdXBlci5jLTE0NTItLyoqXG5mcy9zdXBlci5jOjE0NTM6ICogZnNfYmRldl9mcmVlemUgLSBmcmVlemUgb3duaW5nIGZpbGVzeXN0ZW0gb2YgYmxvY2sgZGV2aWNlXG5mcy9zdXBlci5jLTE0NTQtICogQGJkZXY6IGJsb2NrIGRldmljZVxuLS1cbmZzL3N1cGVyLmMtMTQ2Ni0gKi9cbmZzL3N1cGVyLmM6MTQ2NzpzdGF0aWMgaW50IGZzX2JkZXZfZnJlZXplKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG5mcy9zdXBlci5jLTE0Njgte1xuLS1cbmZzL3N1cGVyLmM9MTU1Mj1jb25zdCBzdHJ1Y3QgYmxrX2hvbGRlcl9vcHMgZnNfaG9sZGVyX29wcyA9IHtcbi0tXG5mcy9zdXBlci5jLTE1NTQtXHQuc3luY1x0XHRcdD0gZnNfYmRldl9zeW5jLFxuZnMvc3VwZXIuYzoxNTU1Olx0LmZyZWV6ZVx0XHRcdD0gZnNfYmRldl9mcmVlemUsXG5mcy9zdXBlci5jLTE1NTYtXHQudGhhd1x0XHRcdD0gZnNfYmRldl90aGF3LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDgxMwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEZpbGVzeXN0ZW0gRnJlZXppbmcgQmVoYXZpb3IqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoaXMgYGZzX2JkZXZfZnJlZXplYCBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gYmUgdHJpZ2dlcmVkIHRocm91Z2ggYGZzX2hvbGRlcl9vcHMuZnJlZXplYC4gVGhhdCBtYWtlcyBzZW5zZSwgYXMgYGZzX2hvbGRlcl9vcHNgIGFyZSwgYXMgSSByZWNhbGwsIGludm9sdmVkIHdoZW4gYSBmaWxlc3lzdGVtIGludGVyYWN0cyB3aXRoIGEgYmxvY2sgZGV2aWNlLCBvcGVuaW5nIGl0LCBsaWtlbHkgZm9yIEkvTy4gU28sIHRoZSBzZXF1ZW5jZSBpczogd2UgY2FsbCBgYmRldl9mcmVlemVgIG9uIHRoZSBibG9jayBkZXZpY2UgaXRzZWxmLCB3aGljaCBpbiB0dXJuIGhhbmRzIGNvbnRyb2wgdG8gYGZzX2JkZXZfZnJlZXplYC4gVGhlIHF1ZXN0aW9uIG5vdyBpczogd2hhdCBhY3R1YWxseSAqY2FsbHMqIGBiZGV2X2ZyZWV6ZWAgaW4gdGhlIGZpcnN0IHBsYWNlPyBNeSBndXQgZmVlbGluZyBzYXlzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIGBGSUZSRUVaRWAgaW9jdGwuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBodW5jaDsgSSYjMzk7bGwgcG9wIG92ZXIgdG8gYGJsb2NrL2lvY3RsLmNgIHRvIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JkZXZfZnJlZXplJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2JkZXYuYz0yODU9RVhQT1JUX1NZTUJPTChzeW5jX2Jsb2NrZGV2X3JhbmdlKTtcbi0tXG5ibG9jay9iZGV2LmMtMjg3LS8qKlxuYmxvY2svYmRldi5jOjI4ODogKiBiZGV2X2ZyZWV6ZSAtIGxvY2sgYSBmaWxlc3lzdGVtIGFuZCBmb3JjZSBpdCBpbnRvIGEgY29uc2lzdGVudCBzdGF0ZVxuYmxvY2svYmRldi5jLTI4OS0gKiBAYmRldjpcdGJsb2NrZGV2aWNlIHRvIGxvY2tcbi0tXG5ibG9jay9iZGV2LmMtMjk0LSAqIHVuZnJlZXplIHByb2Nlc3MgY2FuIHVuZnJlZXplIHRoZSBmcm96ZW4gZmlsZXN5c3RlbSBhY3R1YWxseSB3aGVuIG11bHRpcGxlXG5ibG9jay9iZGV2LmM6Mjk1OiAqIGZyZWV6ZSByZXF1ZXN0cyBhcnJpdmUgc2ltdWx0YW5lb3VzbHkuIEl0IGNvdW50cyB1cCBpbiBiZGV2X2ZyZWV6ZSgpIGFuZFxuYmxvY2svYmRldi5jLTI5Ni0gKiBjb3VudCBkb3duIGluIGJkZXZfdGhhdygpLiBXaGVuIGl0IGJlY29tZXMgMCwgdGhhd19iZGV2KCkgd2lsbCB1bmZyZWV6ZVxuLS1cbmJsb2NrL2JkZXYuYy0zMDAtICovXG5ibG9jay9iZGV2LmM6MzAxOmludCBiZGV2X2ZyZWV6ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuYmxvY2svYmRldi5jLTMwMi17XG4tLVxuYmxvY2svYmRldi5jLTMyNi19XG5ibG9jay9iZGV2LmM6MzI3OkVYUE9SVF9TWU1CT0woYmRldl9mcmVlemUpO1xuYmxvY2svYmRldi5jLTMyOC1cbi0tXG5ibG9jay9iZGV2LmMtMzMyLSAqXG5ibG9jay9iZGV2LmM6MzMzOiAqIFVubG9ja3MgdGhlIGZpbGVzeXN0ZW0gYW5kIG1hcmtzIGl0IHdyaXRlYWJsZSBhZ2FpbiBhZnRlciBiZGV2X2ZyZWV6ZSgpLlxuYmxvY2svYmRldi5jLTMzNC0gKlxuLS1cbmRyaXZlcnMvbWQvZG0uYz0yOTMyPXN0YXRpYyBpbnQgbG9ja19mcyhzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpXG4tLVxuZHJpdmVycy9tZC9kbS5jLTI5MzctXG5kcml2ZXJzL21kL2RtLmM6MjkzODpcdHIgPSBiZGV2X2ZyZWV6ZShtZC1cdTAwM2VkaXNrLVx1MDAzZXBhcnQwKTtcbmRyaXZlcnMvbWQvZG0uYy0yOTM5LVx0aWYgKCFyKVxuLS1cbmZzL2V4ZmF0L3N1cGVyLmM9MTU1PWludCBleGZhdF9mb3JjZV9zaHV0ZG93bihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgZmxhZ3MpXG4tLVxuZnMvZXhmYXQvc3VwZXIuYy0xNjYtXHRjYXNlIEVYRkFUX0dPSU5HX0RPV05fRlVMTFNZTkM6XG5mcy9leGZhdC9zdXBlci5jOjE2NzpcdFx0cmV0ID0gYmRldl9mcmVlemUoc2ItXHUwMDNlc19iZGV2KTtcbmZzL2V4ZmF0L3N1cGVyLmMtMTY4LVx0XHRpZiAocmV0KVxuLS1cbmZzL2V4dDQvaW9jdGwuYz04MTA9aW50IGV4dDRfZm9yY2Vfc2h1dGRvd24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGZsYWdzKVxuLS1cbmZzL2V4dDQvaW9jdGwuYy04MjUtXHRjYXNlIEVYVDRfR09JTkdfRkxBR1NfREVGQVVMVDpcbmZzL2V4dDQvaW9jdGwuYzo4MjY6XHRcdHJldCA9IGJkZXZfZnJlZXplKHNiLVx1MDAzZXNfYmRldik7XG5mcy9leHQ0L2lvY3RsLmMtODI3LVx0XHRpZiAocmV0KVxuLS1cbmZzL2YyZnMvZmlsZS5jPTI0NTM9aW50IGYyZnNfZG9fc2h1dGRvd24oc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLCB1bnNpZ25lZCBpbnQgZmxhZyxcbi0tXG5mcy9mMmZzL2ZpbGUuYy0yNDYwLVx0Y2FzZSBGMkZTX0dPSU5HX0RPV05fRlVMTFNZTkM6XG5mcy9mMmZzL2ZpbGUuYzoyNDYxOlx0XHRyZXQgPSBiZGV2X2ZyZWV6ZShzYi1cdTAwM2VzX2JkZXYpO1xuZnMvZjJmcy9maWxlLmMtMjQ2Mi1cdFx0aWYgKHJldClcbi0tXG5mcy9udGZzL3N1cGVyLmM9MTgyMD1pbnQgbnRmc19mb3JjZV9zaHV0ZG93bihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgZmxhZ3MpXG4tLVxuZnMvbnRmcy9zdXBlci5jLTE4MzAtXHRjYXNlIEZTX1NIVVRET1dOX0ZMQUdTX0xPR0ZMVVNIOlxuZnMvbnRmcy9zdXBlci5jOjE4MzE6XHRcdHJldCA9IGJkZXZfZnJlZXplKHNiLVx1MDAzZXNfYmRldik7XG5mcy9udGZzL3N1cGVyLmMtMTgzMi1cdFx0aWYgKHJldClcbi0tXG5mcy9udGZzMy9maWxlLmM9MTk3PXN0YXRpYyBpbnQgbnRmc19mb3JjZV9zaHV0ZG93bihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgZmxhZ3MpXG4tLVxuZnMvbnRmczMvZmlsZS5jLTIwNS1cdC8qIE5vIGFkZGl0aW9uYWwgb3B0aW9ucyB5ZXQgKGZsYWdzKS4gKi9cbmZzL250ZnMzL2ZpbGUuYzoyMDY6XHRlcnIgPSBiZGV2X2ZyZWV6ZShzYi1cdTAwM2VzX2JkZXYpO1xuZnMvbnRmczMvZmlsZS5jLTIwNy1cdGlmIChlcnIpXG4tLVxuZnMvc3VwZXIuYz0xNDM3PXN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmdldF9iZGV2X3N1cGVyKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG4tLVxuZnMvc3VwZXIuYy0xNDUyLS8qKlxuZnMvc3VwZXIuYzoxNDUzOiAqIGZzX2JkZXZfZnJlZXplIC0gZnJlZXplIG93bmluZyBmaWxlc3lzdGVtIG9mIGJsb2NrIGRldmljZVxuZnMvc3VwZXIuYy0xNDU0LSAqIEBiZGV2OiBibG9jayBkZXZpY2Vcbi0tXG5mcy9zdXBlci5jLTE0NjYtICovXG5mcy9zdXBlci5jOjE0Njc6c3RhdGljIGludCBmc19iZGV2X2ZyZWV6ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuZnMvc3VwZXIuYy0xNDY4LXtcbi0tXG5mcy9zdXBlci5jPTE1NTI9Y29uc3Qgc3RydWN0IGJsa19ob2xkZXJfb3BzIGZzX2hvbGRlcl9vcHMgPSB7XG4tLVxuZnMvc3VwZXIuYy0xNTU0LVx0LnN5bmNcdFx0XHQ9IGZzX2JkZXZfc3luYyxcbmZzL3N1cGVyLmM6MTU1NTpcdC5mcmVlemVcdFx0XHQ9IGZzX2JkZXZfZnJlZXplLFxuZnMvc3VwZXIuYy0xNTU2LVx0LnRoYXdcdFx0XHQ9IGZzX2JkZXZfdGhhdyxcbi0tXG5mcy94ZnMveGZzX2Zzb3BzLmM9NDUxPXhmc19mc19nb2luZ2Rvd24oXG4tLVxuZnMveGZzL3hmc19mc29wcy5jLTQ1Ni1cdGNhc2UgWEZTX0ZTT1BfR09JTkdfRkxBR1NfREVGQVVMVDoge1xuZnMveGZzL3hmc19mc29wcy5jOjQ1NzpcdFx0aWYgKCFiZGV2X2ZyZWV6ZShtcC1cdTAwM2VtX3N1cGVyLVx1MDAzZXNfYmRldikpIHtcbmZzL3hmcy94ZnNfZnNvcHMuYy00NTgtXHRcdFx0eGZzX2ZvcmNlX3NodXRkb3duKG1wLCBTSFVURE9XTl9GT1JDRV9VTU9VTlQpO1xuLS1cbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg9MTgzMj1zdGF0aWMgaW5saW5lIGludCBlYXJseV9sb29rdXBfYmRldihjb25zdCBjaGFyICpwYXRobmFtZSwgZGV2X3QgKmRldilcbi0tXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTE4MzctXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjE4Mzg6aW50IGJkZXZfZnJlZXplKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpO1xuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xODM5LWludCBiZGV2X3RoYXcoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjQwCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBGcmVlemUgTWVjaGFuaXNtKioKClJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgZnJlZXppbmcgd29ya3MsIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBgRklGUkVFWkVgIGlvY3RsIGluIGBmcy9pb2N0bC5jYCAqc3BlY2lmaWNhbGx5KiBjYWxscyBgZnJlZXplX3N1cGVyYC4gVGhhdCBtYWtlcyBzZW5zZSwgdGFyZ2V0aW5nIHRoZSBzdXBlcmJsb2NrIGxldmVsLiBCdXQgaG9sZCBvbiwgSSByZWNhbGwgYGJkZXZfZnJlZXplYCBiZWluZyBpbiB0aGUgbWl4IHRvby4gQWggeWVzLCBJIHJlbWVtYmVyIG5vdywgYGJkZXZfZnJlZXplYCBpcyBkZWZpbml0ZWx5IHVzZWQgYnkgdGhlIGRldmljZSBtYXBwZXIgKGBkbWApIGFuZCBpbiBmaWxlc3lzdGVtIHNodXRkb3duIGlvY3RscyAtIHRoYXQmIzM5O3MgYSBrZXkgZGlzdGluY3Rpb24uIE5vdywgdGhlIGNvbnRleHQgaGFzIHNoaWZ0ZWQgYSBsaXR0bGUsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYEZJRlJFRVpFYCBvcGVyYXRpbmcgZGlyZWN0bHkgb24gYSBibG9jayBkZXZpY2UgLSB0aGF0IHJhaXNlcyBhIGZsYWcuIEkgbmVlZCB0byBiZSBzdXJlLiBTbywgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGluIGBibG9jay9pb2N0bC5jYC4gTGV0JiMzOTtzIGdldCB0aGUgZnVsbCBzdG9yeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RklGUkVFWkUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNycS5yc3Q9OTc9Q29tbWFuZFx0ICAgIEZ1bmN0aW9uXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNycS5yc3QtMTE4LVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNycS5yc3Q6MTE5OmBgamBgXHQgICAgRm9yY2libHkgXCYjMzQ7SnVzdCB0aGF3IGl0XCYjMzQ7IC0gZmlsZXN5c3RlbXMgZnJvemVuIGJ5IHRoZSBGSUZSRUVaRSBpb2N0bC5cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzcnEucnN0LTEyMC1cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c3JxLnJzdD0yMTE9cHJvY2Vzc2VzLlxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzcnEucnN0LTIxMy1cJiMzNDtqdXN0IHRoYXcgYGBpdChqKWBgXCYjMzQ7IGlzIHVzZWZ1bCBpZiB5b3VyIHN5c3RlbSBiZWNvbWVzIHVucmVzcG9uc2l2ZSBkdWUgdG8gYVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNycS5yc3Q6MjE0OmZyb3plbiAocHJvYmFibHkgcm9vdCkgZmlsZXN5c3RlbSB2aWEgdGhlIEZJRlJFRVpFIGlvY3RsLlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNycS5yc3QtMjE1LVxuLS1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdD0yMjA9b3IgYm90dG9tIGhhbGYpLlxuLS1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdC0yOTItXHRjb25zaXN0ZW50IHN0YXRlLiAgVGhpcyBtZXRob2QgaXMgY3VycmVudGx5IHVzZWQgYnkgdGhlIExvZ2ljYWxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdDoyOTM6XHRWb2x1bWUgTWFuYWdlciAoTFZNKSBhbmQgaW9jdGwoRklGUkVFWkUpLiBPcHRpb25hbC5cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdC0yOTQtXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvc3lzcnEucnN0PTUzPUNPTkZJR19NQUdJQ19TWVNSUV9ERUZBVUxUX0VOQUJMRSDlv4XpobvmmK/ku6UgMTYg6L+b5Yi25pWw5YaZ5YWl44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvc3lzcnEucnN0LTExNS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2FkbWluLWd1aWRlL3N5c3JxLnJzdDoxMTY6YGBqYGBcdCAgICDlvLrliLbmgKfnmoQg4oCc6Kej5Ya75a6D4oCdIC0g55So5LqO6KKrIEZJRlJFRVpFIGlvY3RsIOaTjeS9nOWGu+S9j+eahOaWh+S7tuezu+e7n+OAglxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvc3lzcnEucnN0LTExNy1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9hZG1pbi1ndWlkZS9zeXNycS5yc3Q9MTk0PXN5c2xvZ2Qva2xvZ2Qg6L+b56iL5piv6L+Q6KGM55qE77yM5a6D5Lus5LuN5bCG6KKr6K6w5b2V44CC77yJXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvc3lzcnEucnN0LTE5OC1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2FkbWluLWd1aWRlL3N5c3JxLnJzdDoxOTk6XCYjMzQ7anVzdCB0aGF3IGBgaXQoailgYCBcJiMzNDsg55So5LqO5b2T5L2g55qE57O757uf55Sx5LqO5LiA5LiqIEZJRlJFRVpFIGlvY3RsIOiwg+eUqOiAjOS6p+eUn+eahOaWh+S7tlxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvc3lzcnEucnN0LTIwMC3ns7vnu5/lhrvnu5PvvIzogIzlr7zoh7TnmoTkuI3lk43lupTml7bjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9hZG1pbi1ndWlkZS9zeXNycS5yc3Q9NTM9Q09ORklHX01BR0lDX1NZU1JRX0RFRkFVTFRfRU5BQkxFIOW/hemgiOaYr+S7pSAxNiDpgLLliLbmlbjlr6vlhaXjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9hZG1pbi1ndWlkZS9zeXNycS5yc3QtMTE1LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvc3lzcnEucnN0OjExNjpgYGpgYFx0ICAgIOW8t+WItuaAp+eahCDigJzop6Plh43lroPigJ0gLSDnlKjmlrzooqsgRklGUkVFWkUgaW9jdGwg5pON5L2c5YeN5L2P55qE5paH5Lu257O757Wx44CCXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9hZG1pbi1ndWlkZS9zeXNycS5yc3QtMTE3LVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2FkbWluLWd1aWRlL3N5c3JxLnJzdD0xOTQ9c3lzbG9nZC9rbG9nZCDpgLLnqIvmmK/pgYvooYznmoTvvIzlroPlgJHku43lsIfooqvoqJjpjITjgILvvIlcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9hZG1pbi1ndWlkZS9zeXNycS5yc3QtMTk4LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvc3lzcnEucnN0OjE5OTpcJiMzNDtqdXN0IHRoYXcgYGBpdChqKWBgIFwmIzM0OyDnlKjmlrznlbbkvaDnmoTns7vntbHnlLHmlrzkuIDlgIsgRklGUkVFWkUgaW9jdGwg6Kq/55So6ICM55Si55Sf55qE5paH5Lu2XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9hZG1pbi1ndWlkZS9zeXNycS5yc3QtMjAwLeezu+e1seWHjee1kO+8jOiAjOWwjuiHtOeahOS4jemfv+aHieaZguOAglxuLS1cbmZzL2lvY3RsLmM9NDkyPXN0YXRpYyBpbnQgZG9fdmZzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgZmQsXG4tLVxuZnMvaW9jdGwuYy01MjMtXG5mcy9pb2N0bC5jOjUyNDpcdGNhc2UgRklGUkVFWkU6XG5mcy9pb2N0bC5jLTUyNS1cdFx0cmV0dXJuIGlvY3RsX2ZzZnJlZXplKGZpbHApO1xuLS1cbmZzL3hmcy9saWJ4ZnMveGZzX2ZzLmg9MTE2Nz1zdHJ1Y3QgeGZzX3ZlcmlmeV9tZWRpYSB7XG4tLVxuZnMveGZzL2xpYnhmcy94ZnNfZnMuaC0xMjYwLVxuZnMveGZzL2xpYnhmcy94ZnNfZnMuaDoxMjYxOiNkZWZpbmUgWEZTX0lPQ19GUkVFWkVcdFx0ICAgICBfSU9XUigmIzM5O1gmIzM5OywgMTE5LCBpbnQpXHQvKiBha2EgRklGUkVFWkUgKi9cbmZzL3hmcy9saWJ4ZnMveGZzX2ZzLmgtMTI2Mi0jZGVmaW5lIFhGU19JT0NfVEhBV1x0XHQgICAgIF9JT1dSKCYjMzk7WCYjMzk7LCAxMjAsIGludClcdC8qIGFrYSBGSVRIQVcgKi9cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaD0yMjY9c3RydWN0IGZpbGVfYXR0ciB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMzE1LSNkZWZpbmUgRklHRVRCU1ogICBfSU8oMHgwMCwyKVx0LyogZ2V0IHRoZSBibG9jayBzaXplIHVzZWQgZm9yIGJtYXAgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oOjMxNjojZGVmaW5lIEZJRlJFRVpFXHRfSU9XUigmIzM5O1gmIzM5OywgMTE5LCBpbnQpXHQvKiBGcmVlemUgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oLTMxNy0jZGVmaW5lIEZJVEhBV1x0XHRfSU9XUigmIzM5O1gmIzM5OywgMTIwLCBpbnQpXHQvKiBUaGF3ICovXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2xhbmRsb2NrLmg9MjQ4PXN0cnVjdCBsYW5kbG9ja19uZXRfcG9ydF9hdHRyIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbGFuZGxvY2suaC0zMDQtICogICAqIElPQ1RMIGNvbW1hbmRzIHRhcmdldGluZyBmaWxlIGRlc2NyaXB0aW9ucyAoYGBGSU9OQklPYGAsIGBgRklPQVNZTkNgYCksXG5pbmNsdWRlL3VhcGkvbGludXgvbGFuZGxvY2suaDozMDU6ICogICAqIElPQ1RMIGNvbW1hbmRzIHRhcmdldGluZyBmaWxlIHN5c3RlbXMgKGBgRklGUkVFWkVgYCwgYGBGSVRIQVdgYCxcbmluY2x1ZGUvdWFwaS9saW51eC9sYW5kbG9jay5oLTMwNi0gKiAgICAgYGBGSUdFVEJTWmBgLCBgYEZTX0lPQ19HRVRGU1VVSURgYCwgYGBGU19JT0NfR0VURlNTWVNGU1BBVEhgYClcbi0tXG5zZWN1cml0eS9sYW5kbG9jay9mcy5jPTEyNz1zdGF0aWMgX19hdHRyaWJ1dGVfY29uc3RfXyBib29sIGlzX21hc2tlZF9kZXZpY2VfaW9jdGwoY29uc3QgdW5zaWduZWQgaW50IGNtZClcbi0tXG5zZWN1cml0eS9sYW5kbG9jay9mcy5jLTE0Ny1cdC8qXG5zZWN1cml0eS9sYW5kbG9jay9mcy5jOjE0ODpcdCAqIEZJRlJFRVpFIGFuZCBGSVRIQVcgZnJlZXplIGFuZCB0aGF3IHRoZSBmaWxlIHN5c3RlbSB3aGljaCB0aGVcbnNlY3VyaXR5L2xhbmRsb2NrL2ZzLmMtMTQ5LVx0ICogZ2l2ZW4gZmlsZSBiZWxvbmdzIHRvLiAgUmVxdWlyZXMgQ0FQX1NZU19BRE1JTi5cbi0tXG5zZWN1cml0eS9sYW5kbG9jay9mcy5jLTE1NS1cdCAqL1xuc2VjdXJpdHkvbGFuZGxvY2svZnMuYzoxNTY6XHRjYXNlIEZJRlJFRVpFOlxuc2VjdXJpdHkvbGFuZGxvY2svZnMuYy0xNTctXHRjYXNlIEZJVEhBVzpcbi0tXG50b29scy9odi9odl92c3NfZGFlbW9uLmM9MzQ9c3RhdGljIGludCB2c3NfZG9fZnJlZXplKGNoYXIgKmRpciwgdW5zaWduZWQgaW50IGNtZClcbi0tXG50b29scy9odi9odl92c3NfZGFlbW9uLmMtNTItXHRpZiAocmV0KSB7XG50b29scy9odi9odl92c3NfZGFlbW9uLmM6NTM6XHRcdGlmICgoY21kID09IEZJRlJFRVpFIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFQlVTWSkgfHxcbnRvb2xzL2h2L2h2X3Zzc19kYWVtb24uYy01NC1cdFx0ICAgIChjbWQgPT0gRklUSEFXIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5WQUwpKSB7XG4tLVxudG9vbHMvaHYvaHZfdnNzX2RhZW1vbi5jPTExMz1zdGF0aWMgaW50IHZzc19vcGVyYXRlKGludCBvcGVyYXRpb24pXG4tLVxudG9vbHMvaHYvaHZfdnNzX2RhZW1vbi5jLTEyNS1cdGNhc2UgVlNTX09QX0ZSRUVaRTpcbnRvb2xzL2h2L2h2X3Zzc19kYWVtb24uYzoxMjY6XHRcdGNtZCA9IEZJRlJFRVpFO1xudG9vbHMvaHYvaHZfdnNzX2RhZW1vbi5jLTEyNy1cdFx0YnJlYWs7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg9MTQyPXN0cnVjdCBmc3hhdHRyIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0yMjItI2RlZmluZSBGSUdFVEJTWiAgIF9JTygweDAwLDIpXHQvKiBnZXQgdGhlIGJsb2NrIHNpemUgdXNlZCBmb3IgYm1hcCAqL1xudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg6MjIzOiNkZWZpbmUgRklGUkVFWkVcdF9JT1dSKCYjMzk7WCYjMzk7LCAxMTksIGludClcdC8qIEZyZWV6ZSAqL1xudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMjI0LSNkZWZpbmUgRklUSEFXXHRcdF9JT1dSKCYjMzk7WCYjMzk7LCAxMjAsIGludClcdC8qIFRoYXcgKi9cbi0tXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaD0yMjY9c3RydWN0IGZpbGVfYXR0ciB7XG4tLVxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMzE1LSNkZWZpbmUgRklHRVRCU1ogICBfSU8oMHgwMCwyKVx0LyogZ2V0IHRoZSBibG9jayBzaXplIHVzZWQgZm9yIGJtYXAgKi9cbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvdWFwaS9saW51eC9mcy5oOjMxNjojZGVmaW5lIEZJRlJFRVpFXHRfSU9XUigmIzM5O1gmIzM5OywgMTE5LCBpbnQpXHQvKiBGcmVlemUgKi9cbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvdWFwaS9saW51eC9mcy5oLTMxNy0jZGVmaW5lIEZJVEhBV1x0XHRfSU9XUigmIzM5O1gmIzM5OywgMTIwLCBpbnQpXHQvKiBUaGF3ICovXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGFuZGxvY2svZnNfdGVzdC5jPTQwMjA9VEVTVF9GX0ZPUksobGF5b3V0MSwgYmxhbmtldF9wZXJtaXR0ZWRfaW9jdGxzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xhbmRsb2NrL2ZzX3Rlc3QuYy00MDM4LVx0RVhQRUNUX05FKEVBQ0NFUywgaW9jdGxfZXJyb3IoX21ldGFkYXRhLCBmZCwgRklPUVNJWkUpKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xhbmRsb2NrL2ZzX3Rlc3QuYzo0MDM5Olx0RVhQRUNUX05FKEVBQ0NFUywgaW9jdGxfZXJyb3IoX21ldGFkYXRhLCBmZCwgRklGUkVFWkUpKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xhbmRsb2NrL2ZzX3Rlc3QuYy00MDQwLVx0RVhQRUNUX05FKEVBQ0NFUywgaW9jdGxfZXJyb3IoX21ldGFkYXRhLCBmZCwgRklUSEFXKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjgwCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIEZJRlJFRVpFIE1lY2hhbmlzbSoqCgpSaWdodCwgc28gYEZJRlJFRVpFYCBpcyB0aGUgc3lzY2FsbCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGhlcmUsIGFuZCB0aGUga2VybmVsIHVzZXMgYGlvY3RsX2ZzZnJlZXplYCB0byBoYW5kbGUgaXQuIFRoYXQgaW1tZWRpYXRlbHkgY2xpY2tzIGZvciBtZTsgYGlvY3RsX2ZzZnJlZXplYCBpcyB0aGUgb2J2aW91cyBwbGFjZSB0byBsb29rIGZvciB0aGUgbWVhdCBvZiB0aGUgZnVuY3Rpb25hbGl0eS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24uIFRpbWUgdG8gc2VlIHByZWNpc2VseSBob3cgdGhlIGtlcm5lbCBvcmNoZXN0cmF0ZXMgdGhpcyBmaWxlIHN5c3RlbSBmcmVlemluZy4gV2hhdCBhcmUgdGhlIGtleSBsb2NraW5nIG1lY2hhbmlzbXMgYmVpbmcgZW1wbG95ZWQ/IEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlIGxheWVycz8gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgdG8gZW5zdXJlIHRoaXMgZnJlZXppbmcgYW5kIHRoYXdpbmcgcHJvY2VzcyBpcyByb2J1c3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5mb3Jlc2VlbiBpc3N1ZXMgaW4gbXkgc3lzdGVtIGRlc2lnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9jdGxfZnNmcmVlemUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9jdGwuYz0zNjM9c3RhdGljIGludCBpb2N0bF9maW9hc3luYyh1bnNpZ25lZCBpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbmZzL2lvY3RsLmMtMzg0LVxuZnMvaW9jdGwuYzozODU6c3RhdGljIGludCBpb2N0bF9mc2ZyZWV6ZShzdHJ1Y3QgZmlsZSAqZmlscClcbmZzL2lvY3RsLmMtMzg2LXtcbi0tXG5mcy9pb2N0bC5jPTQ5Mj1zdGF0aWMgaW50IGRvX3Zmc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGZkLFxuLS1cbmZzL2lvY3RsLmMtNTI0LVx0Y2FzZSBGSUZSRUVaRTpcbmZzL2lvY3RsLmM6NTI1Olx0XHRyZXR1cm4gaW9jdGxfZnNmcmVlemUoZmlscCk7XG5mcy9pb2N0bC5jLTUyNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU2NTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBpb2N0bF9mc2ZyZWV6ZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBpdCYjMzk7cyBhY2hpZXZpbmcuIEkmIzM5O20gYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBnZW5lcmFsIGxhbmRzY2FwZSBvZiBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgYW5kIGlvY3RsIGNhbGxzLCBidXQgdGhlIHNwZWNpZmljcyBvZiBgZnNmcmVlemVgIGFyZSB3aGF0IEkmIzM5O20gZm9jdXNpbmcgb24gbm93LiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIGNvbnNpc3RlbmN5IGFuZCBkYXRhIGludGVncml0eS4gV2hhdCBhcmUgdGhlIGtleSB1bmRlcmx5aW5nIG1lY2hhbmlzbXM/IFdoYXQgZG9lcyB0aGlzIG1lYW4gZm9yIGEgbGl2ZSBzeXN0ZW0/IEl0JiMzOTtzIGNsZWFybHkgcmVsYXRlZCB0byBmcmVlemluZyBhIGZpbGVzeXN0ZW0sIGJ1dCBJIG5lZWQgdG8gZ3Jhc3AgdGhlIG51YW5jZXMg4oCTIGRvZXMgdGhpcyBpbnZvbHZlIGEgc2ltcGxlIHBhdXNlIGluIG9wZXJhdGlvbnMsIG9yIG1vcmUgZWxhYm9yYXRlIGNvb3JkaW5hdGlvbiB3aXRoIHRoZSBibG9jayBsYXllcj8gQXJlIHRoZXJlIGRpZmZlcmVudCBsZXZlbHMgb2YgZnJlZXppbmcgc3VwcG9ydGVkPyBJIG5lZWQgdG8gY29uc2lkZXIgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGxvY2tpbmcgc3RyYXRlZ2llcyB0aGF0IGFyZSBpbXBsZW1lbnRlZCB0byBlbnN1cmUgdGhlIGZyZWV6ZSBpcyBhdG9taWMgYW5kIHNhZmUuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBmcmVlemUvdGhhdyBpcyBpbXBvcnRhbnQgaW4gYXJlYXMgbGlrZSBiYWNrdXBzIGFuZCBzbmFwc2hvdHMuIEl0IHdpbGwgYmUgaW50ZXJlc3RpbmcgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgZGVzaWduZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvaW9jdGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzg1Olx0c3RhdGljIGludCBpb2N0bF9mc2ZyZWV6ZShzdHJ1Y3QgZmlsZSAqZmlscClcbiAzODY6XHR7XG4gMzg3Olx0XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZmlsZV9pbm9kZShmaWxwKS1cdTAwM2VpX3NiO1xuIDM4ODpcdFxuIDM4OTpcdFx0aWYgKCFuc19jYXBhYmxlKHNiLVx1MDAzZXNfdXNlcl9ucywgQ0FQX1NZU19BRE1JTikpXG4gMzkwOlx0XHRcdHJldHVybiAtRVBFUk07XG4gMzkxOlx0XG4gMzkyOlx0XHQvKiBJZiBmaWxlc3lzdGVtIGRvZXNuJiMzOTt0IHN1cHBvcnQgZnJlZXplIGZlYXR1cmUsIHJldHVybi4gKi9cbiAzOTM6XHRcdGlmIChzYi1cdTAwM2VzX29wLVx1MDAzZWZyZWV6ZV9mcyA9PSBOVUxMIFx1MDAyNlx1MDAyNiBzYi1cdTAwM2VzX29wLVx1MDAzZWZyZWV6ZV9zdXBlciA9PSBOVUxMKVxuIDM5NDpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gMzk1Olx0XG4gMzk2Olx0XHQvKiBGcmVlemUgKi9cbiAzOTc6XHRcdGlmIChzYi1cdTAwM2VzX29wLVx1MDAzZWZyZWV6ZV9zdXBlcilcbiAzOTg6XHRcdFx0cmV0dXJuIHNiLVx1MDAzZXNfb3AtXHUwMDNlZnJlZXplX3N1cGVyKHNiLCBGUkVFWkVfSE9MREVSX1VTRVJTUEFDRSwgTlVMTCk7XG4gMzk5Olx0XHRyZXR1cm4gZnJlZXplX3N1cGVyKHNiLCBGUkVFWkVfSE9MREVSX1VTRVJTUEFDRSwgTlVMTCk7XG4gNDAwOlx0fVxuIDQwMTpcdFxuIDQwMjpcdHN0YXRpYyBpbnQgaW9jdGxfZnN0aGF3KHN0cnVjdCBmaWxlICpmaWxwKVxuIDQwMzpcdHtcbiA0MDQ6XHRcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBmaWxlX2lub2RlKGZpbHApLVx1MDAzZWlfc2I7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MjQyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkZyZWV6aW5nIHRoZSBGaWxlc3lzdGVtOiBBIENsb3NlciBMb29rKioKClJpZ2h0LCBzbyBgaW9jdGxfZnNmcmVlemVgIGluaXRpYXRlcyB0aGUgZmlsZXN5c3RlbSBmcmVlemUgYnkgY2FsbGluZyBgZnJlZXplX3N1cGVyYC4gVGhhdCYjMzk7cyB0aGUgZXhwZWN0ZWQgc3RhcnRpbmcgcG9pbnQuIEJ1dCBJJiMzOTttIG5vdGljaW5nIHNvbWV0aGluZzogaXQgKmRvZXNuJiMzOTt0KiBhcHBlYXIgdG8gZGlyZWN0bHkgY2FsbCBgYmRldl9mcmVlemVgIG9yIGBmc19iZGV2X2ZyZWV6ZWAuIFRoYXQmIzM5O3MgYSBiaXQgdW51c3VhbDsgSSB3b3VsZCBoYXZlIGFzc3VtZWQgdGhvc2Ugd2VyZSBpbnRlZ3JhbCB0byBhIGNvbXBsZXRlIGZyZWV6ZSBzZXF1ZW5jZS4KCkhvbGQgb24sIHRob3VnaC4uLiBkaWRuJiMzOTt0IEkgc2VlIGBiZGV2X2ZyZWV6ZWAgbWVudGlvbmVkIHNvbWV3aGVyZSBlbHNlPyBBaCwgeWVzISBgZXhmYXRfZm9yY2Vfc2h1dGRvd25gIHV0aWxpemVzIGBiZGV2X2ZyZWV6ZWAgYW5kIHByZXN1bWFibHkgb3RoZXIgbW9kdWxlcyB0b28uIEludGVyZXN0aW5nLiBJdCBzZWVtcyBsaWtlIHRoZSBibG9jayBkZXZpY2UgZnJlZXplIGlzIGhhbmRsZWQgc2VwYXJhdGVseSwgcGVyaGFwcyB1bmRlciBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzLiBHaXZlbiB0aGF0LCBJIHNob3VsZCBkaWcgaW50byBgZXhmYXRfZm9yY2Vfc2h1dGRvd25gIHRvIHNlZSB3aGVuIGFuZCB3aHkgYGJkZXZfZnJlZXplYCBpcyBiZWluZyBpbnZva2VkIHRoZXJlLiBUaGlzIGNvdWxkIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBmcmVlemluZyBwcm9jZXNzIGFuZCBpZGVudGlmeWluZyBhbnkgcG90ZW50aWFsIGdhcHMgb3IgaW5lZmZpY2llbmNpZXMgaW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3Mgc3BlY2lhbCBhYm91dCBgZXhmYXRgIHN1Y2ggdGhhdCBpdCB1c2VzIGBiZGV2X2ZyZWV6ZWAgZXhwbGljaXRseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXhmYXRfZm9yY2Vfc2h1dGRvd24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXhmYXQvZXhmYXRfZnMuaD01Njk9bG9uZyBleGZhdF9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsXG5mcy9leGZhdC9leGZhdF9mcy5oLTU3MC1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgYXJnKTtcbmZzL2V4ZmF0L2V4ZmF0X2ZzLmg6NTcxOmludCBleGZhdF9mb3JjZV9zaHV0ZG93bihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgZmxhZ3MpO1xuZnMvZXhmYXQvZXhmYXRfZnMuaC01NzItXG4tLVxuZnMvZXhmYXQvZmlsZS5jPTU0NT1zdGF0aWMgaW50IGV4ZmF0X2lvY3RsX3NodXRkb3duKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmZzL2V4ZmF0L2ZpbGUuYy01NTQtXG5mcy9leGZhdC9maWxlLmM6NTU1Olx0cmV0dXJuIGV4ZmF0X2ZvcmNlX3NodXRkb3duKHNiLCBmbGFncyk7XG5mcy9leGZhdC9maWxlLmMtNTU2LX1cbi0tXG5mcy9leGZhdC9zdXBlci5jPTExNj1zdGF0aWMgaW50IGV4ZmF0X3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKnJvb3QpXG4tLVxuZnMvZXhmYXQvc3VwZXIuYy0xNTQtXG5mcy9leGZhdC9zdXBlci5jOjE1NTppbnQgZXhmYXRfZm9yY2Vfc2h1dGRvd24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGZsYWdzKVxuZnMvZXhmYXQvc3VwZXIuYy0xNTYte1xuLS1cbmZzL2V4ZmF0L3N1cGVyLmM9MTg1PXN0YXRpYyB2b2lkIGV4ZmF0X3NodXRkb3duKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leGZhdC9zdXBlci5jLTE4Ni17XG5mcy9leGZhdC9zdXBlci5jOjE4NzpcdGV4ZmF0X2ZvcmNlX3NodXRkb3duKHNiLCBFWEZBVF9HT0lOR19ET1dOX05PU1lOQyk7XG5mcy9leGZhdC9zdXBlci5jLTE4OC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTg3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogOTI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBleEZBVCBTaHV0ZG93biBNZWNoYW5pc20qKgoKT2theSwgc28gSSYjMzk7dmUgdHJhY2VkIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgaXQgbG9va3MgbGlrZSBgZXhmYXRfZm9yY2Vfc2h1dGRvd25gIGdldHMgY2FsbGVkIHRocm91Z2ggYGV4ZmF0X2lvY3RsX3NodXRkb3duYC4gVGhpcyBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoYXQgbWVhbnMgdGhlIGBFWEZBVF9JT0NfU0hVVERPV05gIGlvY3RsLCBhcyB3ZWxsIGFzIHNpbWlsYXIgaW9jdGxzIGZyb20gb3RoZXIgZmlsZXN5c3RlbXMsIGNhbiB0cmlnZ2VyIGBiZGV2X2ZyZWV6ZWAuIFVsdGltYXRlbHksIGBiZGV2X2ZyZWV6ZWAgdGhlbiBjYWxscyBgZnNfYmRldl9mcmVlemVgLgoKTm93LCB0aGUgY3J1Y2lhbCBsaW5rIGlzIHRoYXQgYGZzX2JkZXZfZnJlZXplYCBpcyBpbnZva2VkIHdoZW4gYGJkZXZfZnJlZXplYCBpcyBjYWxsZWQgb24gYSBibG9jayBkZXZpY2UgdGhhdCBoYXMgYGZzX2hvbGRlcl9vcHNgLiBBbmQsIGFzIEkgcmVjYWxsLCB3aGVuIGV4RkFUIG1vdW50cyBhIGJsb2NrIGRldmljZSwgaXQgZG9lcyBzbyB1c2luZyBgZnNfaG9sZGVyX29wc2AuIFNvLCBhIGBiZGV2X2ZyZWV6ZWAgY2FsbCBvbiBgc2ItJmd0O3NfYmRldmAgd2lsbCwgaW4gZmFjdCwgaW52b2tlIGBmc19iZGV2X2ZyZWV6ZWAuIFRoYXQmIzM5O3MgdGhlIGNvcmUuCgpMZXQgbWUgcmVmcmVzaCBteSBtZW1vcnkgb24gYGZzX2JkZXZfZnJlZXplYDogaXQgcmV0cmlldmVzIHRoZSBzdXBlcmJsb2NrLCBjaGVja3MgZm9yIGl0cyBleGlzdGVuY2UsIGFuZCB0aGVuIGNhbGxzIHRoZSBzdXBlcmJsb2NrJiMzOTtzIGBmcmVlemVfc3VwZXJgIGZ1bmN0aW9uLiBJZiB0aGF0IHN1Y2NlZWRzLCBpdCBzeW5jaHJvbml6ZXMgdGhlIGJsb2NrIGRldmljZSBhbmQgaGFuZGxlcyBhbnkgZXJyb3JzIGJ5IHRoYXdpbmcgdGhlIHN1cGVyYmxvY2suIFRoaXMgY29kZSBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgd2lsbCB3b3JrLiBUaGUgcGF0Y2ggaW4gYGZzL2V4ZmF0L21pc2MuY2AgY29uZmlybXMgdGhpcy4KCmBgYGMKc3RhdGljIGludCBmc19iZGV2X2ZyZWV6ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQp7CglzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZ2V0X2JkZXZfc3VwZXIoYmRldik7CglpbnQgZXJyb3IgPSAwOwoKCWlmICghc2IpCgkJcmV0dXJuIC1FSU5WQUw7CgoJaWYgKHNiLSZndDtzX29wLSZndDtmcmVlemVfc3VwZXIpCgkJZXJyb3IgPSBzYi0mZ3Q7c19vcC0mZ3Q7ZnJlZXplX3N1cGVyKHNiLAoJCQkJRlJFRVpFX01BWV9ORVNUIHwgRlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UsIE5VTEwpOwoJZWxzZQoJCWVycm9yID0gZnJlZXplX3N1cGVyKHNiLAoJCQkJRlJFRVpFX01BWV9ORVNUIHwgRlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UsIE5VTEwpOwoJaWYgKCFlcnJvcikgewoJCWVycm9yID0gc3luY19ibG9ja2RldihiZGV2KTsKCQlpZiAoZXJyb3IpIHsKCQkJaWYgKHNiLSZndDtzX29wLSZndDt0aGF3X3N1cGVyKQoJCQkJKHZvaWQpc2ItJmd0O3Nfb3AtJmd0O3RoYXdfc3VwZXIoCgkJCQkJc2IsCgkJCQkJRlJFRVpFX01BWV9ORVNUIHwKCQkJCQkJRlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UsCgkJCQkJTlVMTCk7CgkJCWVsc2UKCQkJCSh2b2lkKXRoYXdfc3VwZXIoCgkJCQkJc2IsCgkJCQkJRlJFRVpFX01BWV9ORVNUIHwKCQkJCQkJRlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UsCgkJCQkJTlVMTCk7CgkJfQoJfQoJZGVhY3RpdmF0ZV9zdXBlcihzYik7CglyZXR1cm4gZXJyb3I7Cn0KYGBgCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBleGZhdCBlcnJvciBoYW5kbGluZy4gV2UmIzM5O3JlIGludGVyZXN0ZWQgaW4gdGhlIGBfX2V4ZmF0X2ZzX2Vycm9yYCBmdW5jdGlvbi4KCmBgYGMKdm9pZCBfX2V4ZmF0X2ZzX2Vycm9yKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCByZXBvcnQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQp7Ci4uLgoJfSBlbHNlIGlmIChvcHRzLSZndDtlcnJvcnMgPT0gRVhGQVRfRVJST1JTX1JPICZhbXA7JmFtcDsgIXNiX3Jkb25seShzYikpIHsKCQlzZXRfYml0KEVYRkFUX0ZMQUdTX1NIVVRET1dOLCAmYW1wO0VYRkFUX1NCKHNiKS0mZ3Q7c19leGZhdF9mbGFncyk7CgkJLyoKCQkgKiBXZSBoYXZlIGFscmVhZHkgc2V0IEVYRkFUX0ZMQUdTX1NIVVRET1dOIGZsYWcgdG8gc3RvcCBhbGwgdXBkYXRlcwoJCSAqIHRvIGZpbGVzeXN0ZW0sIHNvIGl0IGRvZXNuJiMzOTt0IG5lZWQgdG8gc2V0IFNCX1JET05MWSBmbGFnIGhlcmUKCQkgKiBiZWNhdXNlIHRoZSBmbGFnIHNob3VsZCBiZSBzZXQgY292ZXJlZCB3LyBzYi0mZ3Q7c191bW91bnQgc2VtYXBob3JlCgkJICogdmlhIHJlbW91bnQgcHJvY2VkdXJlLCBvdGhlcndpc2UsIGl0IHdpbGwgY29uZnVzZSBjb2RlIGxpa2UKCQkgKiBmcmVlemVfc3VwZXIoKSB3aGljaCB3aWxsIGxlYWQgdG8gZGVhZGxvY2tzIGFuZCBvdGhlciBwcm9ibGVtcy4KCQkgKi8KCQlleGZhdF9lcnIoc2IsICYjMzQ7RmlsZXN5c3RlbSBoYXMgYmVlbiBzZXQgcmVhZC1vbmx5JiMzNDspOwoJfQp9CmBgYAoKVGhpcyBnZXRzIGNhbGxlZCB3aGVuIGFuIGVycm9yIG9jY3VycyBpbiBleEZBVCBhbmQgdGhlIGBlcnJvcnM9cmVtb3VudC1yb2Agb3B0aW9uIGlzIHNldC4gU28sIHdlIGhhdmUgdHdvIGxpa2VseSBlbnRyeSBwb2ludHM6IGBmc19iZGV2X2ZyZWV6ZWAgKHRyaWdnZXJlZCBieSB0aGUgaW9jdGwpIGFuZCBgX19leGZhdF9mc19lcnJvcmAgKHRyaWdnZXJlZCBieSBhbiBlcnJvcikuIFRoaXMgbWVhbnMgdGhlIGZvY3VzIHNob3VsZCBiZSBvbiB0aGVzZSB0d28gYXJlYXMuCgpMZXQgbWUgY29uZmlybSBpZiBgZnNfYmRldl9mcmVlemVgIGluIGBmcy9zdXBlci5jYCBpcyBleHBvcnRlZCBvciBpZiBpdCBjYW4gYmUgbW9kaWZpZWQgZWFzaWx5LiBZZXMsIGl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uIHNvIHdlIGNhbiBtb2RpZnkgaXQuIGBDT05GSUdfRVhGQVRfRlNgIGlzLCBvYnZpb3VzbHksIHJlcXVpcmVkLCBhbmQgYENPTkZJR19CTE9DS2AgaXMgbmVlZGVkIGZvciB0aGUgYmxvY2sgZGV2aWNlcy4KU28sIGBFWEZBVF9GU2AgaXMgdGhlIG1haW4gY29uZmlnIHdlIG5lZWQgdG8gd29ycnkgYWJvdXQuIEkmIzM5O2xsIHRha2UgYW5vdGhlciBsb29rIGF0IGBmc19iZGV2X2ZyZWV6ZWAgdG8gZW5zdXJlIG15IHVuZGVyc3RhbmRpbmcgaXMgY29tcGxldGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvc3VwZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQ2MDpcdCAqIGJsb2NrIGRldmljZSBhbmQgd29uJiMzOTt0IGJlIHVuZnJvemVuIHVudGlsIGFsbCBibG9jayBkZXZpY2VzIGFyZVxuMTQ2MTpcdCAqIHVuZnJvemVuLiBFYWNoIGJsb2NrIGRldmljZSBjYW4gb25seSBmcmVlemUgdGhlIGZpbGVzeXN0ZW0gb25jZSBhcyB3ZVxuMTQ2MjpcdCAqIG5lc3QgZnJlZXplcyBmb3IgYmxvY2sgZGV2aWNlcyBpbiB0aGUgYmxvY2sgbGF5ZXIuXG4xNDYzOlx0ICpcbjE0NjQ6XHQgKiBSZXR1cm46IElmIHRoZSBmcmVlemUgd2FzIHN1Y2Nlc3NmdWwgemVybyBpcyByZXR1cm5lZC4gSWYgdGhlIGZyZWV6ZVxuMTQ2NTpcdCAqICAgICAgICAgZmFpbGVkIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpcyByZXR1cm5lZC5cbjE0NjY6XHQgKi9cbjE0Njc6XHRzdGF0aWMgaW50IGZzX2JkZXZfZnJlZXplKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG4xNDY4Olx0e1xuMTQ2OTpcdFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYjtcbjE0NzA6XHRcdGludCBlcnJvciA9IDA7XG4xNDcxOlx0XG4xNDcyOlx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmJkZXYtXHUwMDNlYmRfZnNmcmVlemVfbXV0ZXgpO1xuMTQ3MzpcdFxuMTQ3NDpcdFx0c2IgPSBnZXRfYmRldl9zdXBlcihiZGV2KTtcbjE0NzU6XHRcdGlmICghc2IpXG4xNDc2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTQ3NzpcdFxuMTQ3ODpcdFx0aWYgKHNiLVx1MDAzZXNfb3AtXHUwMDNlZnJlZXplX3N1cGVyKVxuMTQ3OTpcdFx0XHRlcnJvciA9IHNiLVx1MDAzZXNfb3AtXHUwMDNlZnJlZXplX3N1cGVyKHNiLFxuMTQ4MDpcdFx0XHRcdFx0RlJFRVpFX01BWV9ORVNUIHwgRlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UsIE5VTEwpO1xuMTQ4MTpcdFx0ZWxzZVxuMTQ4MjpcdFx0XHRlcnJvciA9IGZyZWV6ZV9zdXBlcihzYixcbjE0ODM6XHRcdFx0XHRcdEZSRUVaRV9NQVlfTkVTVCB8IEZSRUVaRV9IT0xERVJfVVNFUlNQQUNFLCBOVUxMKTtcbjE0ODQ6XHRcdGlmICghZXJyb3IpIHtcbjE0ODU6XHRcdFx0ZXJyb3IgPSBzeW5jX2Jsb2NrZGV2KGJkZXYpO1xuMTQ4NjpcdFx0XHRpZiAoZXJyb3IpIHtcbjE0ODc6XHRcdFx0XHRpZiAoc2ItXHUwMDNlc19vcC1cdTAwM2V0aGF3X3N1cGVyKVxuMTQ4ODpcdFx0XHRcdFx0KHZvaWQpc2ItXHUwMDNlc19vcC1cdTAwM2V0aGF3X3N1cGVyKFxuMTQ4OTpcdFx0XHRcdFx0XHRzYixcbjE0OTA6XHRcdFx0XHRcdFx0RlJFRVpFX01BWV9ORVNUIHxcbjE0OTE6XHRcdFx0XHRcdFx0XHRGUkVFWkVfSE9MREVSX1VTRVJTUEFDRSxcbjE0OTI6XHRcdFx0XHRcdFx0TlVMTCk7XG4xNDkzOlx0XHRcdFx0ZWxzZVxuMTQ5NDpcdFx0XHRcdFx0KHZvaWQpdGhhd19zdXBlcihcbjE0OTU6XHRcdFx0XHRcdFx0c2IsXG4xNDk2Olx0XHRcdFx0XHRcdEZSRUVaRV9NQVlfTkVTVCB8XG4xNDk3Olx0XHRcdFx0XHRcdFx0RlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UsXG4xNDk4Olx0XHRcdFx0XHRcdE5VTEwpO1xuMTQ5OTpcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NTY0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlF1aWNrIFNjYW4gb2YgdGhlIFNpdHVhdGlvbioqCgpBbHJpZ2h0LCBzbyBgZnNfYmRldl9mcmVlemVgIC0gaXQmIzM5O3MgYSAqc3RhdGljKiBmdW5jdGlvbi4gR290IGl0LiBUaGF0IGltbWVkaWF0ZWx5IG5hcnJvd3MgZG93biBpdHMgc2NvcGUuICBJdCYjMzk7cyBub3QgZXhwb3J0ZWQgZ2xvYmFsbHksIHNvIGl0cyB1c2UgaXMgbGlrZWx5IGNvbnRhaW5lZCB3aXRoaW4gYSBzcGVjaWZpYyBtb2R1bGUgb3IgZmlsZSwgd2hpY2ggaXMgdXNlZnVsIHRvIHJlbWVtYmVyLiBOb3csIHdoZXJlIHdhcyB0aGF0IG90aGVyIG9uZT8gIEFoIHllcywgYF9fZXhmYXRfZnNfZXJyb3JgLiBJIGtub3cgdGhhdCBvbmUgdG9vLiBJJiMzOTttIHByZXR0eSBzdXJlIGl0IHJlc2lkZXMgaW4gYGZzL2V4ZmF0L21pc2MuY2AuICBUaGF0IGZpbGUgaXMgbGlrZSBhIGNhdGNoLWFsbCBmb3IgdmFyaW91cyB1dGlsaXR5IGZ1bmN0aW9ucyBpbiB0aGUgZXhGQVQgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbiwgSSBjYW4gdmlzdWFsaXplIHRoZSBzdHJ1Y3R1cmUgb2YgdGhhdCBvbmUgcHJldHR5IHdlbGwsIGF0IGxlYXN0IGluIG15IGhlYWQuIFRoaW5raW5nIGFib3V0IHRob3NlIGZpbGUgbmFtZXMgYW5kIGZ1bmN0aW9ucyBpbW1lZGlhdGVseSBzdGFydHMgdG8gcGFpbnQgYSBwaWN0dXJlIGFib3V0IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGluZ3MgaW4gdGhlIGNvZGUtYmFzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leGZhdC9taXNjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMwOlx0XHRzdHJ1Y3QgdmFfZm9ybWF0IHZhZjtcbiAgMzE6XHRcbiAgMzI6XHRcdGlmIChyZXBvcnQpIHtcbiAgMzM6XHRcdFx0dmFfc3RhcnQoYXJncywgZm10KTtcbiAgMzQ6XHRcdFx0dmFmLmZtdCA9IGZtdDtcbiAgMzU6XHRcdFx0dmFmLnZhID0gXHUwMDI2YXJncztcbiAgMzY6XHRcdFx0ZXhmYXRfZXJyKHNiLCBcJiMzNDtlcnJvciwgJXBWXCYjMzQ7LCBcdTAwMjZ2YWYpO1xuICAzNzpcdFx0XHR2YV9lbmQoYXJncyk7XG4gIDM4Olx0XHR9XG4gIDM5Olx0XG4gIDQwOlx0XHRpZiAob3B0cy1cdTAwM2VlcnJvcnMgPT0gRVhGQVRfRVJST1JTX1BBTklDKSB7XG4gIDQxOlx0XHRcdHBhbmljKFwmIzM0O2V4RkFULWZzICglcyk6IGZzIHBhbmljIGZyb20gcHJldmlvdXMgZXJyb3JcXG5cJiMzNDssXG4gIDQyOlx0XHRcdFx0c2ItXHUwMDNlc19pZCk7XG4gIDQzOlx0XHR9IGVsc2UgaWYgKG9wdHMtXHUwMDNlZXJyb3JzID09IEVYRkFUX0VSUk9SU19STyBcdTAwMjZcdTAwMjYgIXNiX3Jkb25seShzYikpIHtcbiAgNDQ6XHRcdFx0c2V0X2JpdChFWEZBVF9GTEFHU19TSFVURE9XTiwgXHUwMDI2RVhGQVRfU0Ioc2IpLVx1MDAzZXNfZXhmYXRfZmxhZ3MpO1xuICA0NTpcdFx0XHQvKlxuICA0NjpcdFx0XHQgKiBXZSBoYXZlIGFscmVhZHkgc2V0IEVYRkFUX0ZMQUdTX1NIVVRET1dOIGZsYWcgdG8gc3RvcCBhbGwgdXBkYXRlc1xuICA0NzpcdFx0XHQgKiB0byBmaWxlc3lzdGVtLCBzbyBpdCBkb2VzbiYjMzk7dCBuZWVkIHRvIHNldCBTQl9SRE9OTFkgZmxhZyBoZXJlXG4gIDQ4Olx0XHRcdCAqIGJlY2F1c2UgdGhlIGZsYWcgc2hvdWxkIGJlIHNldCBjb3ZlcmVkIHcvIHNiLVx1MDAzZXNfdW1vdW50IHNlbWFwaG9yZVxuICA0OTpcdFx0XHQgKiB2aWEgcmVtb3VudCBwcm9jZWR1cmUsIG90aGVyd2lzZSwgaXQgd2lsbCBjb25mdXNlIGNvZGUgbGlrZVxuICA1MDpcdFx0XHQgKiBmcmVlemVfc3VwZXIoKSB3aGljaCB3aWxsIGxlYWQgdG8gZGVhZGxvY2tzIGFuZCBvdGhlciBwcm9ibGVtcy5cbiAgNTE6XHRcdFx0ICovXG4gIDUyOlx0XHRcdGV4ZmF0X2VycihzYiwgXCYjMzQ7RmlsZXN5c3RlbSBoYXMgYmVlbiBzZXQgcmVhZC1vbmx5XCYjMzQ7KTtcbiAgNTM6XHRcdH1cbiAgNTQ6XHR9XG4gIDU1Olx0XG4gIDU2Olx0I2RlZmluZSBTRUNTX1BFUl9NSU4gICAgKDYwKVxuICA1NzpcdCNkZWZpbmUgVElNRVpPTkVfU0VDKHgpXHQoKHgpICogMTUgKiBTRUNTX1BFUl9NSU4pXG4gIDU4Olx0XG4gIDU5Olx0c3RhdGljIHZvaWQgZXhmYXRfYWRqdXN0X3R6KHN0cnVjdCB0aW1lc3BlYzY0ICp0cywgdTggdHpfb2ZmKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDMzNwoJCQkJCQkJb3V0cHV0OiAxNjkKCQkJCQkJCXRob3VnaHRzOiAxODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBmc19iZGV2X2ZyZWV6ZWAgYW5kIGBfX2V4ZmF0X2ZzX2Vycm9yYC4gUmlnaHQgYXdheSwgSSBzZWUgdGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcywgbWVhbmluZyB0aGV5JiMzOTtyZSBub3QganVzdCBjb3NtZXRpYyBvciByZWZhY3RvcmluZywgYnV0IGFjdHVhbGx5ICpjaGFuZ2UqIGhvdyB0aGUgc3lzdGVtIGJlaGF2ZXMuIEdvb2QsIHRoYXQmIzM5O3Mgd2hhdCB3ZSBuZWVkIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLgoKYGZzX2JkZXZfZnJlZXplYC4uLiBhaCwgdGhhdCYjMzk7cyB0aGUgb25lIHRoYXQgd2FzIGxlYXZpbmcgdGhlIHN1cGVyYmxvY2sgZnJvemVuIGFmdGVyIGEgYHN5bmNfYmxvY2tkZXZgIGZhaWx1cmUuIERlZmluaXRlbHkgYSBuYXN0eSBvbmUsIGFuZCBleGFjdGx5IHRoZSBraW5kIG9mIHRoaW5nIHN5emthbGxlciBsb3ZlcyB0byB0cmlwIHVwIG9uLiBFeGNlbGxlbnQuIFRoZSBvdGhlciBvbmUsIGBfX2V4ZmF0X2ZzX2Vycm9yYCwgc291bmRzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBhIGRlYWRsb2NrIHNpdHVhdGlvbiB3aGVuIGBTQl9SRE9OTFlgIGlzIHNldCB3aXRob3V0IHRoZSBgc191bW91bnRgIHNlbWFwaG9yZS4gVGhpcyBpcyBhbm90aGVyIGNsYXNzaWMuIENvbmN1cnJlbmN5IGJ1Z3MgYXJlIGFsd2F5cyBwcmltZSB0YXJnZXRzLgoKUGVyZmVjdCwgdGhpcyBoaXRzIHRoZSBzd2VldCBzcG90IG9mIHN5emthbGxlciYjMzk7cyBzdHJlbmd0aHMuIFdlICp3YW50KiB0byBmdXp6IHRoZXNlIGZpeGVzLgoKTGV0JiMzOTtzIHNlZSwgd2hhdCBjb25maWdzIGRvIHdlIG5lZWQ/IEp1c3QgYEVYRkFUX0ZTYC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrLi4uIHllcCwgYENPTkZJR19FWEZBVF9GU2AgaXMgdGhlIG9uZS4gQWxsIGdvb2QuCgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYRkFUX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZnNfYmRldl9mcmVlemUmIzM0OywKICAgICYjMzQ7X19leGZhdF9mc19lcnJvciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBWRlMgYmxvY2sgZGV2aWNlIGZyZWV6aW5nIGxvZ2ljIChgZnNfYmRldl9mcmVlemVgKSB0byBwcm9wZXJseSB0aGF3IHRoZSBzdXBlcmJsb2NrIGlmIGBzeW5jX2Jsb2NrZGV2YCBmYWlscywgcHJldmVudGluZyBhIGZyb3plbiBzdGF0ZSBsZWFrLiBJdCBhbHNvIG1vZGlmaWVzIGV4ZmF0IGVycm9yIGhhbmRsaW5nIChgX19leGZhdF9mc19lcnJvcmApIHRvIHNldCBhIHNodXRkb3duIGZsYWcgaW5zdGVhZCBvZiBkaXJlY3RseSBtb2RpZnlpbmcgYHNiLVx1MDAzZXNfZmxhZ3NgIHdpdGggYFNCX1JET05MWWAgd2l0aG91dCBob2xkaW5nIHRoZSBgc191bW91bnRgIHNlbWFwaG9yZSwgd2hpY2ggcHJldmlvdXNseSBjYXVzZWQgZGVhZGxvY2tzIHdpdGggYGZyZWV6ZV9zdXBlcigpYC4gQm90aCBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhGQVRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmc19iZGV2X2ZyZWV6ZSYjMzQ7LAogICAgJiMzNDtfX2V4ZmF0X2ZzX2Vycm9yJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFZGUyBibG9jayBkZXZpY2UgZnJlZXppbmcgbG9naWMgKGBmc19iZGV2X2ZyZWV6ZWApIHRvIHByb3Blcmx5IHRoYXcgdGhlIHN1cGVyYmxvY2sgaWYgYHN5bmNfYmxvY2tkZXZgIGZhaWxzLCBwcmV2ZW50aW5nIGEgZnJvemVuIHN0YXRlIGxlYWsuIEl0IGFsc28gbW9kaWZpZXMgZXhmYXQgZXJyb3IgaGFuZGxpbmcgKGBfX2V4ZmF0X2ZzX2Vycm9yYCkgdG8gc2V0IGEgc2h1dGRvd24gZmxhZyBpbnN0ZWFkIG9mIGRpcmVjdGx5IG1vZGlmeWluZyBgc2ItXHUwMDNlc19mbGFnc2Agd2l0aCBgU0JfUkRPTkxZYCB3aXRob3V0IGhvbGRpbmcgdGhlIGBzX3Vtb3VudGAgc2VtYXBob3JlLCB3aGljaCBwcmV2aW91c2x5IGNhdXNlZCBkZWFkbG9ja3Mgd2l0aCBgZnJlZXplX3N1cGVyKClgLiBCb3RoIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTY6NTQuMTA5MjI3MDgzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk3NDkwOTIxMDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYRkFUX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnNfYmRldl9mcmVlemVcIixcbiAgICBcIl9fZXhmYXRfZnNfZXJyb3JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBWRlMgYmxvY2sgZGV2aWNlIGZyZWV6aW5nIGxvZ2ljIChgZnNfYmRldl9mcmVlemVgKSB0byBwcm9wZXJseSB0aGF3IHRoZSBzdXBlcmJsb2NrIGlmIGBzeW5jX2Jsb2NrZGV2YCBmYWlscywgcHJldmVudGluZyBhIGZyb3plbiBzdGF0ZSBsZWFrLiBJdCBhbHNvIG1vZGlmaWVzIGV4ZmF0IGVycm9yIGhhbmRsaW5nIChgX19leGZhdF9mc19lcnJvcmApIHRvIHNldCBhIHNodXRkb3duIGZsYWcgaW5zdGVhZCBvZiBkaXJlY3RseSBtb2RpZnlpbmcgYHNiLVxcdTAwM2VzX2ZsYWdzYCB3aXRoIGBTQl9SRE9OTFlgIHdpdGhvdXQgaG9sZGluZyB0aGUgYHNfdW1vdW50YCBzZW1hcGhvcmUsIHdoaWNoIHByZXZpb3VzbHkgY2F1c2VkIGRlYWRsb2NrcyB3aXRoIGBmcmVlemVfc3VwZXIoKWAuIEJvdGggYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29kZSBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDEwOjE2OjU0LjEwOTIzNDg2M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYyOTAxMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNGExNmUxMzgzNGYzYWEzOTU4MGJlZWE3ZjI4YWRjZmNhMjFlOTI1ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCAyMSAxMDoxNjo1MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9leGZhdC9taXNjLmMgYi9mcy9leGZhdC9taXNjLmNcXG5pbmRleCA2ZjExYTk2YTRmZmE4NC4uZGJiM2IyOTA3MDQ1NDUgMTAwNjQ0XFxuLS0tIGEvZnMvZXhmYXQvbWlzYy5jXFxuKysrIGIvZnMvZXhmYXQvbWlzYy5jXFxuQEAgLTQxLDcgKzQxLDE0IEBAIHZvaWQgX19leGZhdF9mc19lcnJvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgcmVwb3J0LCBjb25zdCBjaGFyICpmbXQsIC4uLilcXG4gXFx0XFx0cGFuaWMoXFxcImV4RkFULWZzICglcyk6IGZzIHBhbmljIGZyb20gcHJldmlvdXMgZXJyb3JcXFxcblxcXCIsXFxuIFxcdFxcdFxcdHNiLVxcdTAwM2VzX2lkKTtcXG4gXFx0fSBlbHNlIGlmIChvcHRzLVxcdTAwM2VlcnJvcnMgPT0gRVhGQVRfRVJST1JTX1JPIFxcdTAwMjZcXHUwMDI2ICFzYl9yZG9ubHkoc2IpKSB7XFxuLVxcdFxcdHNiLVxcdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcXG4rXFx0XFx0c2V0X2JpdChFWEZBVF9GTEFHU19TSFVURE9XTiwgXFx1MDAyNkVYRkFUX1NCKHNiKS1cXHUwMDNlc19leGZhdF9mbGFncyk7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFdlIGhhdmUgYWxyZWFkeSBzZXQgRVhGQVRfRkxBR1NfU0hVVERPV04gZmxhZyB0byBzdG9wIGFsbCB1cGRhdGVzXFxuK1xcdFxcdCAqIHRvIGZpbGVzeXN0ZW0sIHNvIGl0IGRvZXNuJ3QgbmVlZCB0byBzZXQgU0JfUkRPTkxZIGZsYWcgaGVyZVxcbitcXHRcXHQgKiBiZWNhdXNlIHRoZSBmbGFnIHNob3VsZCBiZSBzZXQgY292ZXJlZCB3LyBzYi1cXHUwMDNlc191bW91bnQgc2VtYXBob3JlXFxuK1xcdFxcdCAqIHZpYSByZW1vdW50IHByb2NlZHVyZSwgb3RoZXJ3aXNlLCBpdCB3aWxsIGNvbmZ1c2UgY29kZSBsaWtlXFxuK1xcdFxcdCAqIGZyZWV6ZV9zdXBlcigpIHdoaWNoIHdpbGwgbGVhZCB0byBkZWFkbG9ja3MgYW5kIG90aGVyIHByb2JsZW1zLlxcbitcXHRcXHQgKi9cXG4gXFx0XFx0ZXhmYXRfZXJyKHNiLCBcXFwiRmlsZXN5c3RlbSBoYXMgYmVlbiBzZXQgcmVhZC1vbmx5XFxcIik7XFxuIFxcdH1cXG4gfVxcbmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuY1xcbmluZGV4IGE4ZmQ2MTEzNmFhZmU1Li45MDlkOGI5YWJiODg3YSAxMDA2NDRcXG4tLS0gYS9mcy9zdXBlci5jXFxuKysrIGIvZnMvc3VwZXIuY1xcbkBAIC0xNDgxLDggKzE0ODEsMjMgQEAgc3RhdGljIGludCBmc19iZGV2X2ZyZWV6ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxcbiBcXHRlbHNlXFxuIFxcdFxcdGVycm9yID0gZnJlZXplX3N1cGVyKHNiLFxcbiBcXHRcXHRcXHRcXHRGUkVFWkVfTUFZX05FU1QgfCBGUkVFWkVfSE9MREVSX1VTRVJTUEFDRSwgTlVMTCk7XFxuLVxcdGlmICghZXJyb3IpXFxuK1xcdGlmICghZXJyb3IpIHtcXG4gXFx0XFx0ZXJyb3IgPSBzeW5jX2Jsb2NrZGV2KGJkZXYpO1xcbitcXHRcXHRpZiAoZXJyb3IpIHtcXG4rXFx0XFx0XFx0aWYgKHNiLVxcdTAwM2VzX29wLVxcdTAwM2V0aGF3X3N1cGVyKVxcbitcXHRcXHRcXHRcXHQodm9pZClzYi1cXHUwMDNlc19vcC1cXHUwMDNldGhhd19zdXBlcihcXG4rXFx0XFx0XFx0XFx0XFx0c2IsXFxuK1xcdFxcdFxcdFxcdFxcdEZSRUVaRV9NQVlfTkVTVCB8XFxuK1xcdFxcdFxcdFxcdFxcdFxcdEZSRUVaRV9IT0xERVJfVVNFUlNQQUNFLFxcbitcXHRcXHRcXHRcXHRcXHROVUxMKTtcXG4rXFx0XFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRcXHQodm9pZCl0aGF3X3N1cGVyKFxcbitcXHRcXHRcXHRcXHRcXHRzYixcXG4rXFx0XFx0XFx0XFx0XFx0RlJFRVpFX01BWV9ORVNUIHxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0RlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UsXFxuK1xcdFxcdFxcdFxcdFxcdE5VTEwpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFx0ZGVhY3RpdmF0ZV9zdXBlcihzYik7XFxuIFxcdHJldHVybiBlcnJvcjtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxNjo1NC42NzMxOTEwMDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxOTY5MjY5NDk0NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhGQVRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmc19iZGV2X2ZyZWV6ZVwiLFxuICAgIFwiX19leGZhdF9mc19lcnJvclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFZGUyBibG9jayBkZXZpY2UgZnJlZXppbmcgbG9naWMgKGBmc19iZGV2X2ZyZWV6ZWApIHRvIHByb3Blcmx5IHRoYXcgdGhlIHN1cGVyYmxvY2sgaWYgYHN5bmNfYmxvY2tkZXZgIGZhaWxzLCBwcmV2ZW50aW5nIGEgZnJvemVuIHN0YXRlIGxlYWsuIEl0IGFsc28gbW9kaWZpZXMgZXhmYXQgZXJyb3IgaGFuZGxpbmcgKGBfX2V4ZmF0X2ZzX2Vycm9yYCkgdG8gc2V0IGEgc2h1dGRvd24gZmxhZyBpbnN0ZWFkIG9mIGRpcmVjdGx5IG1vZGlmeWluZyBgc2ItXFx1MDAzZXNfZmxhZ3NgIHdpdGggYFNCX1JET05MWWAgd2l0aG91dCBob2xkaW5nIHRoZSBgc191bW91bnRgIHNlbWFwaG9yZSwgd2hpY2ggcHJldmlvdXNseSBjYXVzZWQgZGVhZGxvY2tzIHdpdGggYGZyZWV6ZV9zdXBlcigpYC4gQm90aCBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0YTE2ZTEzODM0ZjNhYTM5NTgwYmVlYTdmMjhhZGNmY2EyMWU5MjVkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjEgMTA6MTY6NTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leGZhdC9taXNjLmMgYi9mcy9leGZhdC9taXNjLmNcbmluZGV4IDZmMTFhOTZhNGZmYTg0Li5kYmIzYjI5MDcwNDU0NSAxMDA2NDRcbi0tLSBhL2ZzL2V4ZmF0L21pc2MuY1xuKysrIGIvZnMvZXhmYXQvbWlzYy5jXG5AQCAtNDEsNyArNDEsMTQgQEAgdm9pZCBfX2V4ZmF0X2ZzX2Vycm9yKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCByZXBvcnQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuIFx0XHRwYW5pYyhcImV4RkFULWZzICglcyk6IGZzIHBhbmljIGZyb20gcHJldmlvdXMgZXJyb3JcXG5cIixcbiBcdFx0XHRzYi1cdTAwM2VzX2lkKTtcbiBcdH0gZWxzZSBpZiAob3B0cy1cdTAwM2VlcnJvcnMgPT0gRVhGQVRfRVJST1JTX1JPIFx1MDAyNlx1MDAyNiAhc2JfcmRvbmx5KHNiKSkge1xuLVx0XHRzYi1cdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcbitcdFx0c2V0X2JpdChFWEZBVF9GTEFHU19TSFVURE9XTiwgXHUwMDI2RVhGQVRfU0Ioc2IpLVx1MDAzZXNfZXhmYXRfZmxhZ3MpO1xuK1x0XHQvKlxuK1x0XHQgKiBXZSBoYXZlIGFscmVhZHkgc2V0IEVYRkFUX0ZMQUdTX1NIVVRET1dOIGZsYWcgdG8gc3RvcCBhbGwgdXBkYXRlc1xuK1x0XHQgKiB0byBmaWxlc3lzdGVtLCBzbyBpdCBkb2Vzbid0IG5lZWQgdG8gc2V0IFNCX1JET05MWSBmbGFnIGhlcmVcbitcdFx0ICogYmVjYXVzZSB0aGUgZmxhZyBzaG91bGQgYmUgc2V0IGNvdmVyZWQgdy8gc2ItXHUwMDNlc191bW91bnQgc2VtYXBob3JlXG4rXHRcdCAqIHZpYSByZW1vdW50IHByb2NlZHVyZSwgb3RoZXJ3aXNlLCBpdCB3aWxsIGNvbmZ1c2UgY29kZSBsaWtlXG4rXHRcdCAqIGZyZWV6ZV9zdXBlcigpIHdoaWNoIHdpbGwgbGVhZCB0byBkZWFkbG9ja3MgYW5kIG90aGVyIHByb2JsZW1zLlxuK1x0XHQgKi9cbiBcdFx0ZXhmYXRfZXJyKHNiLCBcIkZpbGVzeXN0ZW0gaGFzIGJlZW4gc2V0IHJlYWQtb25seVwiKTtcbiBcdH1cbiB9XG5kaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmNcbmluZGV4IGE4ZmQ2MTEzNmFhZmU1Li45MDlkOGI5YWJiODg3YSAxMDA2NDRcbi0tLSBhL2ZzL3N1cGVyLmNcbisrKyBiL2ZzL3N1cGVyLmNcbkBAIC0xNDgxLDggKzE0ODEsMjMgQEAgc3RhdGljIGludCBmc19iZGV2X2ZyZWV6ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuIFx0ZWxzZVxuIFx0XHRlcnJvciA9IGZyZWV6ZV9zdXBlcihzYixcbiBcdFx0XHRcdEZSRUVaRV9NQVlfTkVTVCB8IEZSRUVaRV9IT0xERVJfVVNFUlNQQUNFLCBOVUxMKTtcbi1cdGlmICghZXJyb3IpXG4rXHRpZiAoIWVycm9yKSB7XG4gXHRcdGVycm9yID0gc3luY19ibG9ja2RldihiZGV2KTtcbitcdFx0aWYgKGVycm9yKSB7XG4rXHRcdFx0aWYgKHNiLVx1MDAzZXNfb3AtXHUwMDNldGhhd19zdXBlcilcbitcdFx0XHRcdCh2b2lkKXNiLVx1MDAzZXNfb3AtXHUwMDNldGhhd19zdXBlcihcbitcdFx0XHRcdFx0c2IsXG4rXHRcdFx0XHRcdEZSRUVaRV9NQVlfTkVTVCB8XG4rXHRcdFx0XHRcdFx0RlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UsXG4rXHRcdFx0XHRcdE5VTEwpO1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdCh2b2lkKXRoYXdfc3VwZXIoXG4rXHRcdFx0XHRcdHNiLFxuK1x0XHRcdFx0XHRGUkVFWkVfTUFZX05FU1QgfFxuK1x0XHRcdFx0XHRcdEZSRUVaRV9IT0xERVJfVVNFUlNQQUNFLFxuK1x0XHRcdFx0XHROVUxMKTtcbitcdFx0fVxuK1x0fVxuIFx0ZGVhY3RpdmF0ZV9zdXBlcihzYik7XG4gXHRyZXR1cm4gZXJyb3I7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTY6NTQuNjczMTkzMTAzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY3ODIyNTA5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFeEZBVCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoZXNlIHR3byBwYXRjaGVzLCBvbmUgdG91Y2hpbmcgYGZzL2V4ZmF0L21pc2MuY2AgYW5kIHRoZSBvdGhlciBgZnMvc3VwZXIuY2AuIFRoZSBmaXJzdCBvbmUsIGluIGBtaXNjLmNgLCBsb29rcyBsaWtlIGl0J3MgdHdlYWtpbmcgYF9fZXhmYXRfZnNfZXJyb3JgLiBJbnN0ZWFkIG9mIGRpcmVjdGx5IHNldHRpbmcgYFNCX1JET05MWWAgb24gdGhlIHN1cGVyIGJsb2NrJ3MgZmxhZ3MgKGBzYi1cdTAwM2VzX2ZsYWdzYCksIGl0J3Mgbm93IHNldHRpbmcgYEVYRkFUX0ZMQUdTX1NIVVRET1dOYC4gSW50ZXJlc3RpbmcuIFRoYXTigJlzIGEgY2hhbmdlIGluIGhvdyB3ZSBoYW5kbGUgZXJyb3JzIGFuZCBwb3RlbnRpYWxseSBzaHV0ZG93biB0aGUgZmlsZXN5c3RlbSBncmFjZWZ1bGx5LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgc2hpZnQuXG5cblRoZSBzZWNvbmQgcGF0Y2ggbW9kaWZpZXMgYGZzX2JkZXZfZnJlZXplYCBpbiBgZnMvc3VwZXIuY2AuIFRoYXTigJlzIGEgZnVuZGFtZW50YWwgVkZTIGZ1bmN0aW9uLCB3aGljaCBpcyB3b3J0aCBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IHdpdGggdGhlIHBvdGVudGlhbCBpbnRlcnBsYXkgd2l0aCB0aGUgZmlyc3QgY2hhbmdlLiBUaGUgbW9kaWZpY2F0aW9uIGludm9sdmVzIHRoYXdpbmcgdGhlIHN1cGVyYmxvY2sgaWYgYHN5bmNfYmxvY2tkZXYoYmRldilgIGZhaWxzLiBUaGF0IHN1Z2dlc3RzIHRoaXMgbWF5IGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGZyZWV6ZS90aGF3IHByb2Nlc3MuIFRoaXMgaXMgb2J2aW91c2x5IHJlbGF0ZWQgdG8gYmxvY2sgZGV2aWNlIHN5bmNocm9uaXphdGlvbiwgc28gbGV0J3Mga2VlcCB0aGF0IGluIG1pbmQuXG5cbkJlZm9yZSBJIGdvIHRvbyBkZWVwLCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBTbywgbXkgbmV4dCBtb3ZlIGlzIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UuIEknbGwgdXNlIGBnaXQgZ3JlcGAgdG8gZmluZCBhbGwgb2NjdXJyZW5jZXMgb2YgYm90aCBgZnNfYmRldl9mcmVlemVgIGFuZCBgX19leGZhdF9mc19lcnJvcmAgd2l0aGluIHRoZSByZWxldmFudCBmaWxlIHRyZWUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZWlyIHVzZXMsIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgY29kZSBpbiB0aGlzIGFyZWEuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IHRvIGZvcm0gYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwYXRjaCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIGZpbGVzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNTQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxNzoxMS40NTU0NDY5NTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzUwOTE2NDY1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmc19iZGV2X2ZyZWV6ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9zdXBlci5jPTE0Mzc9c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqZ2V0X2JkZXZfc3VwZXIoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcXG4tLVxcbmZzL3N1cGVyLmMtMTQ1Mi0vKipcXG5mcy9zdXBlci5jOjE0NTM6ICogZnNfYmRldl9mcmVlemUgLSBmcmVlemUgb3duaW5nIGZpbGVzeXN0ZW0gb2YgYmxvY2sgZGV2aWNlXFxuZnMvc3VwZXIuYy0xNDU0LSAqIEBiZGV2OiBibG9jayBkZXZpY2VcXG4tLVxcbmZzL3N1cGVyLmMtMTQ2Ni0gKi9cXG5mcy9zdXBlci5jOjE0Njc6c3RhdGljIGludCBmc19iZGV2X2ZyZWV6ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxcbmZzL3N1cGVyLmMtMTQ2OC17XFxuLS1cXG5mcy9zdXBlci5jPTE1NTI9Y29uc3Qgc3RydWN0IGJsa19ob2xkZXJfb3BzIGZzX2hvbGRlcl9vcHMgPSB7XFxuLS1cXG5mcy9zdXBlci5jLTE1NTQtXFx0LnN5bmNcXHRcXHRcXHQ9IGZzX2JkZXZfc3luYyxcXG5mcy9zdXBlci5jOjE1NTU6XFx0LmZyZWV6ZVxcdFxcdFxcdD0gZnNfYmRldl9mcmVlemUsXFxuZnMvc3VwZXIuYy0xNTU2LVxcdC50aGF3XFx0XFx0XFx0PSBmc19iZGV2X3RoYXcsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDEwOjE3OjE0Ljk2NDYxNjg5MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNTMzMzQyMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gdGhlIHdlZWRzIG9mIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb246XG5cbioqVHJhY2luZyB0aGUgRnJlZXplIE9wZXJhdGlvbioqXG5cblJpZ2h0LCBzbyBgZnNfYmRldl9mcmVlemVgIGlzIGNsZWFybHkgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGluIGZyZWV6aW5nIGEgYmxvY2sgZGV2aWNlIGZvciBhIGZpbGVzeXN0ZW0sIGFuZCBpdCdzIGJlaW5nIGNhbGxlZCB0aHJvdWdoIHRoZSBgZnNfaG9sZGVyX29wcy5mcmVlemVgIG1lY2hhbmlzbS4gVGhhdCdzIGdvb2QsIHRoYXQgZ2l2ZXMgbWUgYSBzcGVjaWZpYyBwb2ludCB0byBzdGFydC5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKmNvbnRleHQqIG9mIHRoaXMgZnJlZXplIG9wZXJhdGlvbi4gYGZzX2hvbGRlcl9vcHNgLi4udGhhdCdzIGFuIGludGVyZmFjZSwgYSBjb2xsZWN0aW9uIG9mIG9wZXJhdGlvbnMgYSBmaWxlc3lzdGVtIGltcGxlbWVudHMsIHJpZ2h0PyBJIG5lZWQgdG8ga25vdyAqd2hvKiBvciAqd2hhdCogaXMgdXNpbmcgdGhpcyBzcGVjaWZpYyBgZnNfaG9sZGVyX29wc2Agc3RydWN0dXJlIHRoYXQncyBjYWxsaW5nIGBmcmVlemVgLiBLbm93aW5nIHdoZXJlIGBmc19ob2xkZXJfb3BzYCBpcyAqdXNlZCogd2lsbCBnaXZlIG1lIHRoZSBiaWdnZXIgcGljdHVyZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSB3aG9sZSB2b2x1bWUgZ3JvdXAsIGEgc2luZ2xlIGZpbGVzeXN0ZW0sIHNvbWUga2luZCBvZiBsYXllcmVkIHN0b3JhZ2U/IFRoaXMgd2lsbCBkZXRlcm1pbmUgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhlIGZyZWV6ZS4gTGV0J3MgdHJhY2UgYmFjayB0aGUgY2FsbHMuLi4gbGV0J3MgZmlndXJlIG91dCB0aGUgY2FsbGVycyBvZiBgZnNfaG9sZGVyX29wc2AuIFRpbWUgdG8gZmlyZSB1cCB0aGUgZGVidWdnZXIgYW5kIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY3Jvc3MtcmVmZXJlbmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIwNCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDEwOjE3OjE5LjExNzk1MzczNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTkwODUyMzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZzX2hvbGRlcl9vcHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYnRyZnMvZGV2LXJlcGxhY2UuYz0yMzI9c3RhdGljIGludCBidHJmc19pbml0X2Rldl9yZXBsYWNlX3RndGRldihzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbyxcXG4tLVxcbmZzL2J0cmZzL2Rldi1yZXBsYWNlLmMtMjUwLVxcdGJkZXZfZmlsZSA9IGJkZXZfZmlsZV9vcGVuX2J5X3BhdGgoZGV2aWNlX3BhdGgsIEJMS19PUEVOX1dSSVRFLFxcbmZzL2J0cmZzL2Rldi1yZXBsYWNlLmM6MjUxOlxcdFxcdFxcdFxcdFxcdCAgIGZzX2luZm8tXFx1MDAzZXNiLCBcXHUwMDI2ZnNfaG9sZGVyX29wcyk7XFxuZnMvYnRyZnMvZGV2LXJlcGxhY2UuYy0yNTItXFx0aWYgKElTX0VSUihiZGV2X2ZpbGUpKSB7XFxuLS1cXG5mcy9idHJmcy92b2x1bWVzLmM9NDc2PWJ0cmZzX2dldF9iZGV2X2FuZF9zYihjb25zdCBjaGFyICpkZXZpY2VfcGF0aCwgYmxrX21vZGVfdCBmbGFncywgdm9pZCAqaG9sZGVyLFxcbi0tXFxuZnMvYnRyZnMvdm9sdW1lcy5jLTQ4Mi1cXG5mcy9idHJmcy92b2x1bWVzLmM6NDgzOlxcdCpiZGV2X2ZpbGUgPSBiZGV2X2ZpbGVfb3Blbl9ieV9wYXRoKGRldmljZV9wYXRoLCBmbGFncywgaG9sZGVyLCBcXHUwMDI2ZnNfaG9sZGVyX29wcyk7XFxuZnMvYnRyZnMvdm9sdW1lcy5jLTQ4NC1cXG4tLVxcbmZzL2J0cmZzL3ZvbHVtZXMuYz0yODQ4PWludCBidHJmc19pbml0X25ld19kZXZpY2Uoc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmZzX2luZm8sIGNvbnN0IGNoYXIgKmRldmljZV9wYXRoKVxcbi0tXFxuZnMvYnRyZnMvdm9sdW1lcy5jLTI4NjYtXFx0YmRldl9maWxlID0gYmRldl9maWxlX29wZW5fYnlfcGF0aChkZXZpY2VfcGF0aCwgQkxLX09QRU5fV1JJVEUsXFxuZnMvYnRyZnMvdm9sdW1lcy5jOjI4Njc6XFx0XFx0XFx0XFx0XFx0ICAgZnNfaW5mby1cXHUwMDNlc2IsIFxcdTAwMjZmc19ob2xkZXJfb3BzKTtcXG5mcy9idHJmcy92b2x1bWVzLmMtMjg2OC1cXHRpZiAoSVNfRVJSKGJkZXZfZmlsZSkpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTk3MT1zdGF0aWMgc3RydWN0IGZpbGUgKmV4dDRfZ2V0X2pvdXJuYWxfYmxrZGV2KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNTk4NS1cXHRcXHRCTEtfT1BFTl9SRUFEIHwgQkxLX09QRU5fV1JJVEUgfCBCTEtfT1BFTl9SRVNUUklDVF9XUklURVMsXFxuZnMvZXh0NC9zdXBlci5jOjU5ODY6XFx0XFx0c2IsIFxcdTAwMjZmc19ob2xkZXJfb3BzKTtcXG5mcy9leHQ0L3N1cGVyLmMtNTk4Ny1cXHRpZiAoSVNfRVJSKGJkZXZfZmlsZSkpIHtcXG4tLVxcbmZzL3N1cGVyLmM9MTUyMj1zdGF0aWMgaW50IGZzX2JkZXZfdGhhdyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxcbi0tXFxuZnMvc3VwZXIuYy0xNTUxLVxcbmZzL3N1cGVyLmM6MTU1Mjpjb25zdCBzdHJ1Y3QgYmxrX2hvbGRlcl9vcHMgZnNfaG9sZGVyX29wcyA9IHtcXG5mcy9zdXBlci5jLTE1NTMtXFx0Lm1hcmtfZGVhZFxcdFxcdD0gZnNfYmRldl9tYXJrX2RlYWQsXFxuLS1cXG5mcy9zdXBlci5jLTE1NTctfTtcXG5mcy9zdXBlci5jOjE1NTg6RVhQT1JUX1NZTUJPTF9HUEwoZnNfaG9sZGVyX29wcyk7XFxuZnMvc3VwZXIuYy0xNTU5LVxcbmZzL3N1cGVyLmM9MTU2MD1pbnQgc2V0dXBfYmRldl9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgc2JfZmxhZ3MsXFxuLS1cXG5mcy9zdXBlci5jLTE1NjYtXFxuZnMvc3VwZXIuYzoxNTY3OlxcdGJkZXZfZmlsZSA9IGJkZXZfZmlsZV9vcGVuX2J5X2RldihzYi1cXHUwMDNlc19kZXYsIG1vZGUsIHNiLCBcXHUwMDI2ZnNfaG9sZGVyX29wcyk7XFxuZnMvc3VwZXIuYy0xNTY4LVxcdGlmIChJU19FUlIoYmRldl9maWxlKSkge1xcbi0tXFxuZnMveGZzL3hmc19zdXBlci5jPTM5ND14ZnNfYmxrZGV2X2dldChcXG4tLVxcbmZzL3hmcy94ZnNfc3VwZXIuYy00MDMtXFx0KmJkZXZfZmlsZXAgPSBiZGV2X2ZpbGVfb3Blbl9ieV9wYXRoKG5hbWUsIG1vZGUsXFxuZnMveGZzL3hmc19zdXBlci5jOjQwNDpcXHRcXHRcXHRtcC1cXHUwMDNlbV9zdXBlciwgXFx1MDAyNmZzX2hvbGRlcl9vcHMpO1xcbmZzL3hmcy94ZnNfc3VwZXIuYy00MDUtXFx0aWYgKElTX0VSUigqYmRldl9maWxlcCkpIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg9MTc1MD1zdHJ1Y3QgYmxrX2hvbGRlcl9vcHMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xNzczLS8qXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaDoxNzc0OiAqIEZvciBmaWxlc3lzdGVtcyB1c2luZyBAZnNfaG9sZGVyX29wcywgdGhlIEBob2xkZXIgYXJndW1lbnQgcGFzc2VkIHRvXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xNzc1LSAqIGhlbHBlcnMgdXNlZCB0byBvcGVuIGFuZCBjbGFpbSBibG9jayBkZXZpY2VzIHZpYVxcbi0tXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xNzc3LSAqL1xcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTc3ODpleHRlcm4gY29uc3Qgc3RydWN0IGJsa19ob2xkZXJfb3BzIGZzX2hvbGRlcl9vcHM7XFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xNzc5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxNzoyMi4zMDg4MTE3NzFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODA1MDE2ODg1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlIHdoYXQgSSdtIHRoaW5raW5nIGhlcmUuXG5cbioqRGVjb25zdHJ1Y3RpbmcgQmxvY2sgRGV2aWNlIEZyZWV6aW5nIE9wZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdHJhY2luZyB0aGUgdXNhZ2Ugb2YgYGZzX2hvbGRlcl9vcHNgIGFuZCBpdCdzIHBvcHBpbmcgdXAgaW4gYHNldHVwX2JkZXZfc3VwZXJgIGFuZCBhIGZldyBvdGhlciBsb2NhdGlvbnMsIHdoaWNoIGlzbid0IGVudGlyZWx5IHN1cnByaXNpbmcuIFRoYXQgZnVuY3Rpb24gaXMgcHJldHR5IGZ1bmRhbWVudGFsIGZvciBlc3RhYmxpc2hpbmcgYmxvY2sgZGV2aWNlIHN1cGVyYmxvY2tzLCBzbyBob2xkZXIgb3BlcmF0aW9ucyBhcmUgbGlrZWx5IHJlbGV2YW50IHRoZXJlLiBNeSBwcmltYXJ5IGludGVyZXN0IGlzIHdpdGggdGhlIGBmcmVlemVgIG9wZXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhpcyBjb250ZXh0LCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIGJsb2NrIGRldmljZXMuIFRoZSBrZXkgcXVlc3Rpb24gaXMsICp3aG8qIGlzIGNhbGxpbmcgdGhpcyBgZnJlZXplYCBmdW5jdGlvbiBkZWZpbmVkIGluIGBibGtfaG9sZGVyX29wc2A/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsZXJzIG9mIGBmcmVlemVgIHdpdGhpbiBgYmxrX2hvbGRlcl9vcHNgLiBUaW1lIHRvIGRpZyBkZWVwZXIgYW5kIGZpbmQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjU1LCJPdXRwdXRUb2tlbnMiOjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTc6NDAuMzU4OTgzMDEzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzczMTY3NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiLVxcdTAwM2VmcmVlemVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA3MzEgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9saWJhdGEucnN0PTI2OD1mb2xsb3dzIGEgc3VjY2Vzc2Z1bCByZXNldC5cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbGliYXRhLnJzdC0yNjktXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2xpYmF0YS5yc3Q6MjcwOlRoZSBvcHRpb25hbCBgYC1cXHUwMDNlZnJlZXplKClgYCBjYWxsYmFjayBjYW4gYmUgdXNlZCBmb3IgZnJlZXppbmcgdGhlIHBvcnRcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbGliYXRhLnJzdC0yNzEtaGFyZHdhcmUtd2lzZSAoZS5nLiBtYXNrIGludGVycnVwdCBhbmQgc3RvcCBETUEgZW5naW5lKS4gSWYgYSBwb3J0XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbGliYXRhLnJzdD0yNzU9VGhlIG9wdGlvbmFsIGBgLVxcdTAwM2V0aGF3KClgYCBjYWxsYmFjayBpcyBjYWxsZWQgdG8gcGVyZm9ybSB0aGUgb3Bwb3NpdGUgb2ZcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbGliYXRhLnJzdDoyNzY6YGAtXFx1MDAzZWZyZWV6ZSgpYGA6IHByZXBhcmUgdGhlIHBvcnQgZm9yIG5vcm1hbCBvcGVyYXRpb24gb25jZSBhZ2Fpbi4gVW5tYXNrXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2xpYmF0YS5yc3QtMjc3LWludGVycnVwdHMsIHN0YXJ0IERNQSBlbmdpbmUsIGV0Yy5cXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9wbS9kZXZpY2VzLnJzdD01MTc9dGhlIHN5c3RlbSAoXFxcInBvd2VyIG9mZlxcXCIpLiAgVGhlIHBoYXNlcyB1c2VkIHRvIGFjY29tcGxpc2ggdGhpcyBhcmU6IGBgcHJlcGFyZWBgLFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3BtL2RldmljZXMucnN0LTUyNC1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvcG0vZGV2aWNlcy5yc3Q6NTI1OiAgICAyLlxcdFRoZSBgYC1cXHUwMDNlZnJlZXplYGAgbWV0aG9kcyBzaG91bGQgcXVpZXNjZSB0aGUgZGV2aWNlIHNvIHRoYXQgaXQgZG9lc24ndFxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9wbS9kZXZpY2VzLnJzdC01MjYtXFx0Z2VuZXJhdGUgSVJRcyBvciBETUEsIGFuZCB0aGV5IG1heSBuZWVkIHRvIHNhdmUgdGhlIHZhbHVlcyBvZiBkZXZpY2VcXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9wbS9kZXZpY2VzLnJzdD03NjQ9dHJhbnNpdGlvbiBpbnRvIGEgc2xlZXAgc3RhdGUsIHRoYXQgY2FuIGJlIGRvbmUgYnkgY2FsbGluZ1xcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9wbS9kZXZpY2VzLnJzdDo3NjU6OmM6ZnVuYzpgcG1fcnVudGltZV9yZXN1bWVgIGZyb20gdGhlIGBgLVxcdTAwM2VzdXNwZW5kYGAgY2FsbGJhY2sgKG9yIHRoZSBgYC1cXHUwMDNlZnJlZXplYGBcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvcG0vZGV2aWNlcy5yc3QtNzY2LW9yIGBgLVxcdTAwM2Vwb3dlcm9mZmBgIGNhbGxiYWNrIGZvciB0cmFuc2l0aW9ucyByZWxhdGVkIHRvIGhpYmVybmF0aW9uKSBvZiBlaXRoZXIgdGhlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3Q9MjIwPW9yIGJvdHRvbSBoYWxmKS5cXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdC0yODMtYGBmcmVlemVfc3VwZXJgYFxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdDoyODQ6XFx0Q2FsbGVkIGluc3RlYWQgb2YgLVxcdTAwM2VmcmVlemVfZnMgY2FsbGJhY2sgaWYgcHJvdmlkZWQuXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0OjI4NTpcXHRNYWluIGRpZmZlcmVuY2UgaXMgdGhhdCAtXFx1MDAzZWZyZWV6ZV9zdXBlciBpcyBjYWxsZWQgd2l0aG91dCB0YWtpbmdcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QtMjg2LVxcdGRvd25fd3JpdGUoXFx1MDAyNnNiLVxcdTAwM2VzX3Vtb3VudCkuIElmIGZpbGVzeXN0ZW0gaW1wbGVtZW50cyBpdCBhbmQgd2FudHNcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3Q6Mjg3OlxcdC1cXHUwMDNlZnJlZXplX2ZzIHRvIGJlIGNhbGxlZCB0b28sIHRoZW4gaXQgaGFzIHRvIGNhbGwgLVxcdTAwM2VmcmVlemVfZnNcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QtMjg4LVxcdGV4cGxpY2l0bHkgZnJvbSB0aGlzIGNhbGxiYWNrLiBPcHRpb25hbC5cXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdC0yOTYtXFx0Y2FsbGVkIHdoZW4gVkZTIGlzIHVubG9ja2luZyBhIGZpbGVzeXN0ZW0gYW5kIG1ha2luZyBpdCB3cml0YWJsZVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdDoyOTc6XFx0YWdhaW4gYWZ0ZXIgLVxcdTAwM2VmcmVlemVfc3VwZXIuIE9wdGlvbmFsLlxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdC0yOTgtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QtMzAwLVxcdGNhbGxlZCB3aGVuIFZGUyBpcyB1bmxvY2tpbmcgYSBmaWxlc3lzdGVtIGFuZCBtYWtpbmcgaXQgd3JpdGFibGVcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3Q6MzAxOlxcdGFnYWluIGFmdGVyIC1cXHUwMDNlZnJlZXplX2ZzLiBPcHRpb25hbC5cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QtMzAyLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy94ZnMveGZzLW9ubGluZS1mc2NrLWRlc2lnbi5yc3Q9MzAwNz1sb25nIGVub3VnaCB0byBjaGVjayBhbmQgY29ycmVjdCB0aGUgc3VtbWFyeSBjb3VudGVycy5cXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMveGZzL3hmcy1vbmxpbmUtZnNjay1kZXNpZ24ucnN0LTMwMjEtfCAtIEFkZGluZyBhbiBleHRyYSBsb2NrIHRvIHByZXZlbnQgb3RoZXJzIGZyb20gdGhhd2luZyB0aGUgZmlsZXN5c3RlbSAgICAgfFxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMveGZzL3hmcy1vbmxpbmUtZnNjay1kZXNpZ24ucnN0OjMwMjI6fCAgIHJlcXVpcmVkIHRoZSBhZGRpdGlvbiBvZiBhIGBgLVxcdTAwM2VmcmVlemVfc3VwZXJgYCBmdW5jdGlvbiB0byB3cmFwICAgICAgICAgfFxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMveGZzL3hmcy1vbmxpbmUtZnNjay1kZXNpZ24ucnN0LTMwMjMtfCAgIGBgZnJlZXplX2ZzKClgYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wb3dlci9wY2kucnN0PTU3NT1UaGUgcGNpX3BtX2ZyZWV6ZSgpIHJvdXRpbmUgaXMgcXVpdGUgc2ltaWxhciB0byBwY2lfcG1fc3VzcGVuZCgpLCBidXQgaXQgcnVuc1xcbkRvY3VtZW50YXRpb24vcG93ZXIvcGNpLnJzdDo1NzY6dGhlIGRldmljZSBkcml2ZXIncyBwbS1cXHUwMDNlZnJlZXplKCkgY2FsbGJhY2ssIGlmIGRlZmluZWQsIGluc3RlYWQgb2YgcG0tXFx1MDAzZXN1c3BlbmQoKSxcXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL3BjaS5yc3QtNTc3LWFuZCBpdCBkb2Vzbid0IGFwcGx5IHRoZSBzdXNwZW5kLXJlbGF0ZWQgaGFyZHdhcmUgcXVpcmtzLiAgSXQgaXMgZXhlY3V0ZWRcXG4tLVxcbkRvY3VtZW50YXRpb24vcG93ZXIvcGNpLnJzdD01ODE9VGhlIHBjaV9wbV9mcmVlemVfbm9pcnEoKSByb3V0aW5lLCBpbiB0dXJuLCBpcyBzaW1pbGFyIHRvXFxuRG9jdW1lbnRhdGlvbi9wb3dlci9wY2kucnN0OjU4MjpwY2lfcG1fc3VzcGVuZF9ub2lycSgpLCBidXQgaXQgY2FsbHMgdGhlIGRldmljZSBkcml2ZXIncyBwbS1cXHUwMDNlZnJlZXplX25vaXJxKClcXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL3BjaS5yc3QtNTgzLXJvdXRpbmUgaW5zdGVhZCBvZiBwbS1cXHUwMDNlc3VzcGVuZF9ub2lycSgpLiAgSXQgYWxzbyBkb2Vzbid0IGF0dGVtcHQgdG8gcHJlcGFyZSB0aGVcXG4tLVxcbkRvY3VtZW50YXRpb24vcG93ZXIvcnVudGltZV9wbS5yc3Q9NzI5PWRyaXZlci9iYXNlL3Bvd2VyL2dlbmVyaWNfb3BzLmM6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL3J1bnRpbWVfcG0ucnN0LTc1Ni0gIGBpbnQgcG1fZ2VuZXJpY19mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KTtgXFxuRG9jdW1lbnRhdGlvbi9wb3dlci9ydW50aW1lX3BtLnJzdDo3NTc6ICAgIC0gaWYgdGhlIGRldmljZSBoYXMgbm90IGJlZW4gc3VzcGVuZGVkIGF0IHJ1biB0aW1lLCBpbnZva2UgdGhlIC1cXHUwMDNlZnJlZXplKClcXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL3J1bnRpbWVfcG0ucnN0LTc1OC0gICAgICBjYWxsYmFjayBwcm92aWRlZCBieSBpdHMgZHJpdmVyIGFuZCByZXR1cm4gaXRzIHJlc3VsdCwgb3IgcmV0dXJuIDAgaWYgbm90XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL3J1bnRpbWVfcG0ucnN0LTc2MS0gIGBpbnQgcG1fZ2VuZXJpY19mcmVlemVfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KTtgXFxuRG9jdW1lbnRhdGlvbi9wb3dlci9ydW50aW1lX3BtLnJzdDo3NjI6ICAgIC0gaWYgcG1fcnVudGltZV9zdXNwZW5kZWQoZGV2KSByZXR1cm5zIFxcXCJmYWxzZVxcXCIsIGludm9rZSB0aGUgLVxcdTAwM2VmcmVlemVfbm9pcnEoKVxcbkRvY3VtZW50YXRpb24vcG93ZXIvcnVudGltZV9wbS5yc3QtNzYzLSAgICAgIGNhbGxiYWNrIHByb3ZpZGVkIGJ5IHRoZSBkZXZpY2UncyBkcml2ZXIgYW5kIHJldHVybiBpdHMgcmVzdWx0LCBvciByZXR1cm5cXG4tLVxcbkRvY3VtZW50YXRpb24vcG93ZXIvcnVudGltZV9wbS5yc3Q9Nzk0PXByb3ZpZGUgaXRzIG93biBjYWxsYmFja3MgZm9yIC1cXHUwMDNlcnVudGltZV9pZGxlKCksIC1cXHUwMDNlcnVudGltZV9zdXNwZW5kKCksXFxuRG9jdW1lbnRhdGlvbi9wb3dlci9ydW50aW1lX3BtLnJzdC03OTUtLVxcdTAwM2VydW50aW1lX3Jlc3VtZSgpLCAtXFx1MDAzZXN1c3BlbmQoKSwgLVxcdTAwM2VzdXNwZW5kX25vaXJxKCksIC1cXHUwMDNlcmVzdW1lKCksXFxuRG9jdW1lbnRhdGlvbi9wb3dlci9ydW50aW1lX3BtLnJzdDo3OTY6LVxcdTAwM2VyZXN1bWVfbm9pcnEoKSwgLVxcdTAwM2VmcmVlemUoKSwgLVxcdTAwM2VmcmVlemVfbm9pcnEoKSwgLVxcdTAwM2V0aGF3KCksIC1cXHUwMDNldGhhd19ub2lycSgpLFxcbkRvY3VtZW50YXRpb24vcG93ZXIvcnVudGltZV9wbS5yc3QtNzk3LS1cXHUwMDNlcG93ZXJvZmYoKSwgLVxcdTAwM2Vwb3dlcm9mZl9ub2lycSgpLCAtXFx1MDAzZXJlc3RvcmUoKSwgLVxcdTAwM2VyZXN0b3JlX25vaXJxKCkgaW4gdGhlXFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9kcml2ZXIuYz02MzA9c3RhdGljIGludCBlZWhfcmVzZXRfZGV2aWNlKHN0cnVjdCBlZWhfcGUgKnBlLCBzdHJ1Y3QgcGNpX2J1cyAqYnVzLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfZHJpdmVyLmMtNjQzLVxcdC8qIHBjaWJpb3Mgd2lsbCBjbGVhciB0aGUgY291bnRlcjsgc2F2ZSB0aGUgdmFsdWUgKi9cXG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9kcml2ZXIuYzo2NDQ6XFx0Y250ID0gcGUtXFx1MDAzZWZyZWV6ZV9jb3VudDtcXG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9kcml2ZXIuYy02NDUtXFx0dHN0YW1wID0gcGUtXFx1MDAzZXRzdGFtcDtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX2RyaXZlci5jLTcxMS1cXHRwZS1cXHUwMDNldHN0YW1wID0gdHN0YW1wO1xcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX2RyaXZlci5jOjcxMjpcXHRwZS1cXHUwMDNlZnJlZXplX2NvdW50ID0gY250O1xcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX2RyaXZlci5jLTcxMy1cXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX2RyaXZlci5jPTgzNj12b2lkIGVlaF9oYW5kbGVfbm9ybWFsX2V2ZW50KHN0cnVjdCBlZWhfcGUgKnBlKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfZHJpdmVyLmMtOTI1LVxcdGVlaF9wZV91cGRhdGVfdGltZV9zdGFtcChwZSk7XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfZHJpdmVyLmM6OTI2OlxcdHBlLVxcdTAwM2VmcmVlemVfY291bnQrKztcXG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9kcml2ZXIuYzo5Mjc6XFx0aWYgKHBlLVxcdTAwM2VmcmVlemVfY291bnQgXFx1MDAzZSBlZWhfbWF4X2ZyZWV6ZXMpIHtcXG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9kcml2ZXIuYy05MjgtXFx0XFx0cHJfZXJyKFxcXCJFRUg6IFBIQiMleC1QRSMleCBoYXMgZmFpbGVkICVkIHRpbWVzIGluIHRoZSBsYXN0IGhvdXIgYW5kIGhhcyBiZWVuIHBlcm1hbmVudGx5IGRpc2FibGVkLlxcXFxuXFxcIixcXG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9kcml2ZXIuYy05MjktXFx0XFx0ICAgICAgIHBlLVxcdTAwM2VwaGItXFx1MDAzZWdsb2JhbF9udW1iZXIsIHBlLVxcdTAwM2VhZGRyLFxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX2RyaXZlci5jOjkzMDpcXHRcXHQgICAgICAgcGUtXFx1MDAzZWZyZWV6ZV9jb3VudCk7XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfZHJpdmVyLmMtOTMxLVxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfZHJpdmVyLmMtOTQ1LVxcdHByX3dhcm4oXFxcIkVFSDogVGhpcyBQQ0kgZGV2aWNlIGhhcyBmYWlsZWQgJWQgdGltZXMgaW4gdGhlIGxhc3QgaG91ciBhbmQgd2lsbCBiZSBwZXJtYW5lbnRseSBkaXNhYmxlZCBhZnRlciAlZCBmYWlsdXJlcy5cXFxcblxcXCIsXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfZHJpdmVyLmM6OTQ2OlxcdFxcdHBlLVxcdTAwM2VmcmVlemVfY291bnQsIGVlaF9tYXhfZnJlZXplcyk7XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfZHJpdmVyLmMtOTQ3LVxcdHByX2luZm8oXFxcIkVFSDogTm90aWZ5IGRldmljZSBkcml2ZXJzIHRvIHNodXRkb3duXFxcXG5cXFwiKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX3BlLmM9NDkwPXZvaWQgZWVoX3BlX3VwZGF0ZV90aW1lX3N0YW1wKHN0cnVjdCBlZWhfcGUgKnBlKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfcGUuYy00OTUtXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfcGUuYzo0OTY6XFx0aWYgKHBlLVxcdTAwM2VmcmVlemVfY291bnQgXFx1MDAzYz0gMCkge1xcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX3BlLmM6NDk3OlxcdFxcdHBlLVxcdTAwM2VmcmVlemVfY291bnQgPSAwO1xcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX3BlLmMtNDk4LVxcdFxcdHBlLVxcdTAwM2V0c3RhbXAgPSBrdGltZV9nZXRfc2Vjb25kcygpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfcGUuYy01MDItXFx0XFx0XFx0cGUtXFx1MDAzZXRzdGFtcCA9IHRzdGFtcDtcXG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9wZS5jOjUwMzpcXHRcXHRcXHRwZS1cXHUwMDNlZnJlZXplX2NvdW50ID0gMDtcXG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9wZS5jLTUwNC1cXHRcXHR9XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc21wLmM9NDc9c3RhdGljIHZvaWQgbXBjODV4eF9naXZlX3RpbWViYXNlKHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc21wLmMtNTctXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NtcC5jOjU4OlxcdHFvcmlxX3BtX29wcy1cXHUwMDNlZnJlZXplX3RpbWVfYmFzZSh0cnVlKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc21wLmMtNTktI2lmZGVmIENPTkZJR19QUEM2NFxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NtcC5jLTkwLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zbXAuYzo5MTpcXHRxb3JpcV9wbV9vcHMtXFx1MDAzZWZyZWV6ZV90aW1lX2Jhc2UoZmFsc2UpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zbXAuYy05Mi1cXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9lZWgtcG93ZXJudi5jPTQ1Mz1zdGF0aWMgaW50IHBudl9lZWhfc2V0X29wdGlvbihzdHJ1Y3QgZWVoX3BlICpwZSwgaW50IG9wdGlvbilcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9lZWgtcG93ZXJudi5jLTQ4Mi1cXHRpZiAoZnJlZXplX3BlKSB7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L2VlaC1wb3dlcm52LmM6NDgzOlxcdFxcdGlmIChwaGItXFx1MDAzZWZyZWV6ZV9wZSkge1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9lZWgtcG93ZXJudi5jOjQ4NDpcXHRcXHRcXHRwaGItXFx1MDAzZWZyZWV6ZV9wZShwaGIsIHBlLVxcdTAwM2VhZGRyKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvZWVoLXBvd2VybnYuYy00ODUtXFx0XFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvZWVoLXBvd2VybnYuYz01NjU9c3RhdGljIGludCBwbnZfZWVoX2dldF9wZV9zdGF0ZShzdHJ1Y3QgZWVoX3BlICpwZSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9lZWgtcG93ZXJudi5jLTY1My1cXHQgICAgIShwZS1cXHUwMDNlc3RhdGUgXFx1MDAyNiBFRUhfUEVfSVNPTEFURUQpKSB7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L2VlaC1wb3dlcm52LmM6NjU0OlxcdFxcdGlmIChwaGItXFx1MDAzZWZyZWV6ZV9wZSlcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvZWVoLXBvd2VybnYuYzo2NTU6XFx0XFx0XFx0cGhiLVxcdTAwM2VmcmVlemVfcGUocGhiLCBwZS1cXHUwMDNlYWRkcik7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L2VlaC1wb3dlcm52LmMtNjU2LVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L2VlaC1wb3dlcm52LmM9MTMzOT1zdGF0aWMgaW50IHBudl9lZWhfZ2V0X3BlKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9lZWgtcG93ZXJudi5jLTEzNjYtXFx0aWYgKCEoZGV2X3BlLVxcdTAwM2VzdGF0ZSBcXHUwMDI2IEVFSF9QRV9JU09MQVRFRCkpXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L2VlaC1wb3dlcm52LmM6MTM2NzpcXHRcXHRwaGItXFx1MDAzZWZyZWV6ZV9wZShwaGIsIHBlX25vKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvZWVoLXBvd2VybnYuYy0xMzY4LVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L2VlaC1wb3dlcm52LmMtMTM4NS1cXHRcXHRpZiAoIShkZXZfcGUtXFx1MDAzZXN0YXRlIFxcdTAwMjYgRUVIX1BFX0lTT0xBVEVEKSlcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvZWVoLXBvd2VybnYuYzoxMzg2OlxcdFxcdFxcdHBoYi1cXHUwMDNlZnJlZXplX3BlKHBoYiwgZGV2X3BlLVxcdTAwM2VhZGRyKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvZWVoLXBvd2VybnYuYy0xMzg3LVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3BjaS1pb2RhLmM9MjQ4NT1zdGF0aWMgdm9pZCBfX2luaXQgcG52X3BjaV9pbml0X2lvZGFfcGhiKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvcGNpLWlvZGEuYy0yNjY1LVxcdHBoYi1cXHUwMDNlZ2V0X3BlX3N0YXRlID0gcG52X2lvZGFfZ2V0X3BlX3N0YXRlO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9wY2ktaW9kYS5jOjI2NjY6XFx0cGhiLVxcdTAwM2VmcmVlemVfcGUgPSBwbnZfaW9kYV9mcmVlemVfcGU7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3BjaS1pb2RhLmMtMjY2Ny1cXHRwaGItXFx1MDAzZXVuZnJlZXplX3BlID0gcG52X2lvZGFfdW5mcmVlemVfcGU7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvcGNpLmM9NTI3PXN0YXRpYyB2b2lkIHBudl9wY2lfY29uZmlnX2NoZWNrX2VlaChzdHJ1Y3QgcGNpX2RuICpwZG4pXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvcGNpLmMtNTc0LVxcdFxcdCAqL1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9wY2kuYzo1NzU6XFx0XFx0aWYgKHBoYi1cXHUwMDNlZnJlZXplX3BlKVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9wY2kuYzo1NzY6XFx0XFx0XFx0cGhiLVxcdTAwM2VmcmVlemVfcGUocGhiLCBwZV9ubyk7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3BjaS5jLTU3Ny1cXG4tLVxcbmJsb2NrL2JkZXYuYz0zMDE9aW50IGJkZXZfZnJlZXplKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXFxuLS1cXG5ibG9jay9iZGV2LmMtMzEyLVxcdG11dGV4X2xvY2soXFx1MDAyNmJkZXYtXFx1MDAzZWJkX2hvbGRlcl9sb2NrKTtcXG5ibG9jay9iZGV2LmM6MzEzOlxcdGlmIChiZGV2LVxcdTAwM2ViZF9ob2xkZXJfb3BzIFxcdTAwMjZcXHUwMDI2IGJkZXYtXFx1MDAzZWJkX2hvbGRlcl9vcHMtXFx1MDAzZWZyZWV6ZSkge1xcbmJsb2NrL2JkZXYuYzozMTQ6XFx0XFx0ZXJyb3IgPSBiZGV2LVxcdTAwM2ViZF9ob2xkZXJfb3BzLVxcdTAwM2VmcmVlemUoYmRldik7XFxuYmxvY2svYmRldi5jLTMxNS1cXHRcXHRsb2NrZGVwX2Fzc2VydF9ub3RfaGVsZChcXHUwMDI2YmRldi1cXHUwMDNlYmRfaG9sZGVyX2xvY2spO1xcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jPTExODI9c3RhdGljIHZvaWQgYmluZGVyX2NsZWFudXBfcmVmX29sb2NrZWQoc3RydWN0IGJpbmRlcl9yZWYgKnJlZilcXG4tLVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy0xMjI0LVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYzoxMjI1OlxcdGlmIChyZWYtXFx1MDAzZWZyZWV6ZSkge1xcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYzoxMjI2OlxcdFxcdGJpbmRlcl9kZXF1ZXVlX3dvcmsocmVmLVxcdTAwM2Vwcm9jLCBcXHUwMDI2cmVmLVxcdTAwM2VmcmVlemUtXFx1MDAzZXdvcmspO1xcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy0xMjI3LVxcdFxcdGJpbmRlcl9zdGF0c19kZWxldGVkKEJJTkRFUl9TVEFUX0ZSRUVaRSk7XFxuLS1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM9MTM1Mj1zdGF0aWMgdm9pZCBiaW5kZXJfZnJlZV9yZWYoc3RydWN0IGJpbmRlcl9yZWYgKnJlZilcXG4tLVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy0xMzU2LVxcdGtmcmVlKHJlZi1cXHUwMDNlZGVhdGgpO1xcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYzoxMzU3OlxcdGtmcmVlKHJlZi1cXHUwMDNlZnJlZXplKTtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtMTM1OC1cXHRrZnJlZShyZWYpO1xcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jPTE2NTk9c3RhdGljIHZvaWQgYmluZGVyX2ZyZWVfdHJhbnNhY3Rpb24oc3RydWN0IGJpbmRlcl90cmFuc2FjdGlvbiAqdClcXG4tLVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy0xNjgyLVxcdFxcdGlmICghdGFyZ2V0X3Byb2MtXFx1MDAzZW91dHN0YW5kaW5nX3R4bnMgXFx1MDAyNlxcdTAwMjYgdGFyZ2V0X3Byb2MtXFx1MDAzZWlzX2Zyb3plbilcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM6MTY4MzpcXHRcXHRcXHR3YWtlX3VwX2ludGVycnVwdGlibGVfYWxsKFxcdTAwMjZ0YXJnZXRfcHJvYy1cXHUwMDNlZnJlZXplX3dhaXQpO1xcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy0xNjg0LVxcdFxcdGlmICh0LVxcdTAwM2VidWZmZXIpXFxuLS1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM9MzkzNz1iaW5kZXJfcmVxdWVzdF9mcmVlemVfbm90aWZpY2F0aW9uKHN0cnVjdCBiaW5kZXJfcHJvYyAqcHJvYyxcXG4tLVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy0zOTU3LVxcdGJpbmRlcl9ub2RlX2xvY2socmVmLVxcdTAwM2Vub2RlKTtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM6Mzk1ODpcXHRpZiAocmVmLVxcdTAwM2VmcmVlemUpIHtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtMzk1OS1cXHRcXHRiaW5kZXJfdXNlcl9lcnJvcihcXFwiJWQ6JWQgQkNfUkVRVUVTVF9GUkVFWkVfTk9USUZJQ0FUSU9OIGFscmVhZHkgc2V0XFxcXG5cXFwiLFxcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jLTM5NzAtXFx0ZnJlZXplLVxcdTAwM2V3b3JrLnR5cGUgPSBCSU5ERVJfV09SS19GUk9aRU5fQklOREVSO1xcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYzozOTcxOlxcdHJlZi1cXHUwMDNlZnJlZXplID0gZnJlZXplO1xcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy0zOTcyLVxcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jPTM5OTA9YmluZGVyX2NsZWFyX2ZyZWV6ZV9ub3RpZmljYXRpb24oc3RydWN0IGJpbmRlcl9wcm9jICpwcm9jLFxcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jLTQwMDctXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jOjQwMDg6XFx0aWYgKCFyZWYtXFx1MDAzZWZyZWV6ZSkge1xcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy00MDA5LVxcdFxcdGJpbmRlcl91c2VyX2Vycm9yKFxcXCIlZDolZCBCQ19DTEVBUl9GUkVFWkVfTk9USUZJQ0FUSU9OIGZyZWV6ZSBub3RpZmljYXRpb24gbm90IGFjdGl2ZVxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy00MDE0LVxcdH1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM6NDAxNTpcXHRmcmVlemUgPSByZWYtXFx1MDAzZWZyZWV6ZTtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtNDAxNi1cXHRiaW5kZXJfaW5uZXJfcHJvY19sb2NrKHByb2MpO1xcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jLTQwMjUtXFx0fVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYzo0MDI2OlxcdHJlZi1cXHUwMDNlZnJlZXplID0gTlVMTDtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtNDAyNy1cXHQvKlxcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jPTU2NDA9c3RhdGljIHZvaWQgYmluZGVyX2FkZF9mcmVlemVfd29yayhzdHJ1Y3QgYmluZGVyX3Byb2MgKnByb2MsIGJvb2wgaXNfZnJvemVuKVxcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jLTU2NjMtXFx0XFx0XFx0YmluZGVyX2lubmVyX3Byb2NfbG9jayhyZWYtXFx1MDAzZXByb2MpO1xcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYzo1NjY0OlxcdFxcdFxcdGlmICghcmVmLVxcdTAwM2VmcmVlemUpIHtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtNTY2NS1cXHRcXHRcXHRcXHRiaW5kZXJfaW5uZXJfcHJvY191bmxvY2socmVmLVxcdTAwM2Vwcm9jKTtcXG4tLVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy01NjY3LVxcdFxcdFxcdH1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM6NTY2ODpcXHRcXHRcXHRyZWYtXFx1MDAzZWZyZWV6ZS1cXHUwMDNld29yay50eXBlID0gQklOREVSX1dPUktfRlJPWkVOX0JJTkRFUjtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM6NTY2OTpcXHRcXHRcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2cmVmLVxcdTAwM2VmcmVlemUtXFx1MDAzZXdvcmsuZW50cnkpKSB7XFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jOjU2NzA6XFx0XFx0XFx0XFx0cmVmLVxcdTAwM2VmcmVlemUtXFx1MDAzZWlzX2Zyb3plbiA9IGlzX2Zyb3plbjtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM6NTY3MTpcXHRcXHRcXHRcXHRiaW5kZXJfZW5xdWV1ZV93b3JrX2lsb2NrZWQoXFx1MDAyNnJlZi1cXHUwMDNlZnJlZXplLVxcdTAwM2V3b3JrLCBcXHUwMDI2cmVmLVxcdTAwM2Vwcm9jLVxcdTAwM2V0b2RvKTtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtNTY3Mi1cXHRcXHRcXHRcXHRiaW5kZXJfd2FrZXVwX3Byb2NfaWxvY2tlZChyZWYtXFx1MDAzZXByb2MpO1xcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy01NjczLVxcdFxcdFxcdH0gZWxzZSB7XFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jOjU2NzQ6XFx0XFx0XFx0XFx0aWYgKHJlZi1cXHUwMDNlZnJlZXplLVxcdTAwM2VzZW50IFxcdTAwMjZcXHUwMDI2IHJlZi1cXHUwMDNlZnJlZXplLVxcdTAwM2Vpc19mcm96ZW4gIT0gaXNfZnJvemVuKVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYzo1Njc1OlxcdFxcdFxcdFxcdFxcdHJlZi1cXHUwMDNlZnJlZXplLVxcdTAwM2VyZXNlbmQgPSB0cnVlO1xcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYzo1Njc2OlxcdFxcdFxcdFxcdHJlZi1cXHUwMDNlZnJlZXplLVxcdTAwM2Vpc19mcm96ZW4gPSBpc19mcm96ZW47XFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jLTU2NzctXFx0XFx0XFx0fVxcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jPTU2OTE9c3RhdGljIGludCBiaW5kZXJfaW9jdGxfZnJlZXplKHN0cnVjdCBiaW5kZXJfZnJlZXplX2luZm8gKmluZm8sXFxuLS1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtNTcxOC1cXHRcXHRyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM6NTcxOTpcXHRcXHRcXHR0YXJnZXRfcHJvYy1cXHUwMDNlZnJlZXplX3dhaXQsXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jLTU3MjAtXFx0XFx0XFx0KCF0YXJnZXRfcHJvYy1cXHUwMDNlb3V0c3RhbmRpbmdfdHhucyksXFxuLS1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM9NjA2Nz1zdGF0aWMgaW50IGJpbmRlcl9vcGVuKHN0cnVjdCBpbm9kZSAqbm9kcCwgc3RydWN0IGZpbGUgKmZpbHApXFxuLS1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtNjA4OC1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cHJvYy1cXHUwMDNldG9kbyk7XFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jOjYwODk6XFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2cHJvYy1cXHUwMDNlZnJlZXplX3dhaXQpO1xcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy02MDkwLVxcdHByb2MtXFx1MDAzZWRlZmF1bHRfcHJpb3JpdHkgPSB0YXNrX25pY2UoY3VycmVudCk7XFxuLS1cXG5kcml2ZXJzL2F0YS9saWJhaGNpX3BsYXRmb3JtLmM9Nzk4PXZvaWQgYWhjaV9wbGF0Zm9ybV9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9hdGEvbGliYWhjaV9wbGF0Zm9ybS5jLTgwOC1cXHRcXHQvKiBEaXNhYmxlIHBvcnQgaW50ZXJydXB0cyAqL1xcbmRyaXZlcnMvYXRhL2xpYmFoY2lfcGxhdGZvcm0uYzo4MDk6XFx0XFx0aWYgKGFwLVxcdTAwM2VvcHMtXFx1MDAzZWZyZWV6ZSlcXG5kcml2ZXJzL2F0YS9saWJhaGNpX3BsYXRmb3JtLmM6ODEwOlxcdFxcdFxcdGFwLVxcdTAwM2VvcHMtXFx1MDAzZWZyZWV6ZShhcCk7XFxuZHJpdmVycy9hdGEvbGliYWhjaV9wbGF0Zm9ybS5jLTgxMS1cXG4tLVxcbmRyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmM9NjM5NT12b2lkIGF0YV9wY2lfc2h1dGRvd25fb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYy02NDA1LVxcdFxcdC8qIERpc2FibGUgcG9ydCBpbnRlcnJ1cHRzICovXFxuZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYzo2NDA2OlxcdFxcdGlmIChhcC1cXHUwMDNlb3BzLVxcdTAwM2VmcmVlemUpXFxuZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYzo2NDA3OlxcdFxcdFxcdGFwLVxcdTAwM2VvcHMtXFx1MDAzZWZyZWV6ZShhcCk7XFxuZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYy02NDA4LVxcbi0tXFxuZHJpdmVycy9hdGEvbGliYXRhLWVoLmM9MTExMD1FWFBPUlRfU1lNQk9MX0dQTChhdGFfcG9ydF9hYm9ydCk7XFxuLS1cXG5kcml2ZXJzL2F0YS9saWJhdGEtZWguYy0xMTIwLSAqXFxuZHJpdmVycy9hdGEvbGliYXRhLWVoLmM6MTEyMTogKlxcdGFwLVxcdTAwM2VvcHMtXFx1MDAzZWZyZWV6ZSgpIGNhbGxiYWNrIGNhbiBiZSB1c2VkIGZvciBmcmVlemluZyB0aGUgcG9ydFxcbmRyaXZlcnMvYXRhL2xpYmF0YS1laC5jLTExMjItICpcXHRoYXJkd2FyZS13aXNlIChlLmcuIG1hc2sgaW50ZXJydXB0IGFuZCBzdG9wIERNQSBlbmdpbmUpLiAgSWYgYVxcbi0tXFxuZHJpdmVycy9hdGEvbGliYXRhLWVoLmM9MTEzMD1zdGF0aWMgdm9pZCBfX2F0YV9wb3J0X2ZyZWV6ZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKVxcbmRyaXZlcnMvYXRhL2xpYmF0YS1laC5jLTExMzEte1xcbmRyaXZlcnMvYXRhL2xpYmF0YS1laC5jOjExMzI6XFx0aWYgKGFwLVxcdTAwM2VvcHMtXFx1MDAzZWZyZWV6ZSlcXG5kcml2ZXJzL2F0YS9saWJhdGEtZWguYzoxMTMzOlxcdFxcdGFwLVxcdTAwM2VvcHMtXFx1MDAzZWZyZWV6ZShhcCk7XFxuZHJpdmVycy9hdGEvbGliYXRhLWVoLmMtMTEzNC1cXG4tLVxcbmRyaXZlcnMvYXRhL3NhdGFfcHJvbWlzZS5jPTE4Mz1zdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgcGRjX3NhdGFfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9hdGEvc2F0YV9wcm9taXNlLmMtMTk0LS8qIEZpcnN0LWdlbmVyYXRpb24gY2hpcHMgbmVlZCBhIG1vcmUgcmVzdHJpY3RpdmUgLVxcdTAwM2VjaGVja19hdGFwaV9kbWEgb3AsXFxuZHJpdmVycy9hdGEvc2F0YV9wcm9taXNlLmM6MTk1OiAgIGFuZCAtXFx1MDAzZWZyZWV6ZS90aGF3IHRoYXQgaWdub3JlIHRoZSBob3RwbHVnIGNvbnRyb2xzLiAqL1xcbmRyaXZlcnMvYXRhL3NhdGFfcHJvbWlzZS5jLTE5Ni1zdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgcGRjX29sZF9zYXRhX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvYXRhL3NhdGFfcHJvbWlzZS5jPTcwNj1zdGF0aWMgdm9pZCBwZGNfc2F0YV9mcmVlemUoc3RydWN0IGF0YV9wb3J0ICphcClcXG4tLVxcbmRyaXZlcnMvYXRhL3NhdGFfcHJvbWlzZS5jLTcxOC1cXHQgKiAyKSBhcC1cXHUwMDNlbG9jayA9PSBcXHUwMDI2YXAtXFx1MDAzZWhvc3QtXFx1MDAzZWxvY2tcXG5kcml2ZXJzL2F0YS9zYXRhX3Byb21pc2UuYzo3MTk6XFx0ICogMykgLVxcdTAwM2VmcmVlemUoKSBhbmQgLVxcdTAwM2V0aGF3KCkgYXJlIGNhbGxlZCB3aXRoIGFwLVxcdTAwM2Vsb2NrIGhlbGRcXG5kcml2ZXJzL2F0YS9zYXRhX3Byb21pc2UuYy03MjAtXFx0ICovXFxuLS1cXG5kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYz0xMjI3PWludCBwbGF0Zm9ybV9wbV9mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMtMTIzNS1cXHRpZiAoZHJ2LVxcdTAwM2VwbSkge1xcbmRyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jOjEyMzY6XFx0XFx0aWYgKGRydi1cXHUwMDNlcG0tXFx1MDAzZWZyZWV6ZSlcXG5kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYzoxMjM3OlxcdFxcdFxcdHJldCA9IGRydi1cXHUwMDNlcG0tXFx1MDAzZWZyZWV6ZShkZXYpO1xcbmRyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jLTEyMzgtXFx0fSBlbHNlIHtcXG4tLVxcbmRyaXZlcnMvYmFzZS9wb3dlci9tYWluLmM9MzY2PXN0YXRpYyBwbV9jYWxsYmFja190IHBtX29wKGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpvcHMsIHBtX21lc3NhZ2VfdCBzdGF0ZSlcXG4tLVxcbmRyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMtMzc3LVxcdGNhc2UgUE1fRVZFTlRfUVVJRVNDRTpcXG5kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jOjM3ODpcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VmcmVlemU7XFxuZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYy0zNzktXFx0Y2FzZSBQTV9FVkVOVF9QT1dFUk9GRjpcXG4tLVxcbmRyaXZlcnMvYmFzZS9wb3dlci9tYWluLmM9NDAwPXN0YXRpYyBwbV9jYWxsYmFja190IHBtX2xhdGVfZWFybHlfb3AoY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgKm9wcyxcXG4tLVxcbmRyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMtNDEyLVxcdGNhc2UgUE1fRVZFTlRfUVVJRVNDRTpcXG5kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jOjQxMzpcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VmcmVlemVfbGF0ZTtcXG5kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jLTQxNC1cXHRjYXNlIFBNX0VWRU5UX1BPV0VST0ZGOlxcbi0tXFxuZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYz00MzY9c3RhdGljIHBtX2NhbGxiYWNrX3QgcG1fbm9pcnFfb3AoY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgKm9wcywgcG1fbWVzc2FnZV90IHN0YXRlKVxcbi0tXFxuZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYy00NDctXFx0Y2FzZSBQTV9FVkVOVF9RVUlFU0NFOlxcbmRyaXZlcnMvYmFzZS9wb3dlci9tYWluLmM6NDQ4OlxcdFxcdHJldHVybiBvcHMtXFx1MDAzZWZyZWV6ZV9ub2lycTtcXG5kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jLTQ0OS1cXHRjYXNlIFBNX0VWRU5UX1BPV0VST0ZGOlxcbi0tXFxuZHJpdmVycy9ncHUvaG9zdDF4L2Rldi5oPTMwNz1zdGF0aWMgaW5saW5lIHZvaWQgaG9zdDF4X2h3X2NkbWFfZnJlZXplKHN0cnVjdCBob3N0MXggKmhvc3QsXFxuLS1cXG5kcml2ZXJzL2dwdS9ob3N0MXgvZGV2LmgtMzA5LXtcXG5kcml2ZXJzL2dwdS9ob3N0MXgvZGV2Lmg6MzEwOlxcdGhvc3QtXFx1MDAzZWNkbWFfb3AtXFx1MDAzZWZyZWV6ZShjZG1hKTtcXG5kcml2ZXJzL2dwdS9ob3N0MXgvZGV2LmgtMzExLX1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL2NoaXAuYz02NzMwPXZvaWQgc3RhcnRfZnJlZXplX2hhbmRsaW5nKHN0cnVjdCBoZmkxX3Bwb3J0ZGF0YSAqcHBkLCBpbnQgZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9jaGlwLmMtNjc2My1cXHQvKiBxdWV1ZSBub24taW50ZXJydXB0IGhhbmRsZXIgKi9cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9jaGlwLmM6Njc2NDpcXHRxdWV1ZV93b3JrKHBwZC1cXHUwMDNlaGZpMV93cSwgXFx1MDAyNnBwZC1cXHUwMDNlZnJlZXplX3dvcmspO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL2NoaXAuYy02NzY1LX1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL2NoaXAuYz05ODcxPXZvaWQgaGZpMV9xdWlldF9zZXJkZXMoc3RydWN0IGhmaTFfcHBvcnRkYXRhICpwcGQpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9jaGlwLmMtOTg5Ni1cXHRjbGVhcl9yY3ZjdHJsKGRkLCBSQ1ZfQ1RSTF9SQ1ZfUE9SVF9FTkFCTEVfU01BU0spO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL2NoaXAuYzo5ODk3OlxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnBwZC1cXHUwMDNlZnJlZXplX3dvcmspO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL2NoaXAuYy05ODk4LX1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL2luaXQuYz01ODg9dm9pZCBoZmkxX2luaXRfcHBvcnRkYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgaGZpMV9wcG9ydGRhdGEgKnBwZCxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL2luaXQuYy02MTYtXFx0SU5JVF9XT1JLKFxcdTAwMjZwcGQtXFx1MDAzZWxpbmtfZG93bl93b3JrLCBoYW5kbGVfbGlua19kb3duKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9pbml0LmM6NjE3OlxcdElOSVRfV09SSyhcXHUwMDI2cHBkLVxcdTAwM2VmcmVlemVfd29yaywgaGFuZGxlX2ZyZWV6ZSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hmaTEvaW5pdC5jLTYxOC1cXHRJTklUX1dPUksoXFx1MDAyNnBwZC1cXHUwMDNlbGlua19kb3duZ3JhZGVfd29yaywgaGFuZGxlX2xpbmtfZG93bmdyYWRlKTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jdHJsLmM9Mjc1Mz1zdGF0aWMgaW50IGlyZG1hX3NjX3FwX3VwbG9hZF9jb250ZXh0KHN0cnVjdCBpcmRtYV9zY19kZXYgKmRldixcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jdHJsLmMtMjc3MS1cXHQgICAgICBGSUVMRF9QUkVQKElSRE1BX0NRUFNRX1VDVFhfUkFXRk9STUFULCBpbmZvLVxcdTAwM2VyYXdfZm9ybWF0KSB8XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2N0cmwuYzoyNzcyOlxcdCAgICAgIEZJRUxEX1BSRVAoSVJETUFfQ1FQU1FfVUNUWF9GUkVFWkVRUCwgaW5mby1cXHUwMDNlZnJlZXplX3FwKSB8XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2N0cmwuYy0yNzczLVxcdCAgICAgIEZJRUxEX1BSRVAoSVJETUFfQ1FQU1FfV1FFVkFMSUQsIGNxcC1cXHUwMDNlcG9sYXJpdHkpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM9Mzg1PXZvaWQga3N6OTQ3N19yX21pYl9jbnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsIHUxNiBhZGRyLCB1NjQgKmNudClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTM5Mi1cXHQvKiByZXRhaW4gdGhlIGZsdXNoL2ZyZWV6ZSBiaXQgKi9cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYzozOTM6XFx0ZGF0YSA9IHAtXFx1MDAzZWZyZWV6ZSA/IE1JQl9DT1VOVEVSX0ZMVVNIX0ZSRUVaRSA6IDA7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMtMzk0LVxcdGRhdGEgfD0gTUlCX0NPVU5URVJfUkVBRDtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jPTQxOT12b2lkIGtzejk0NzdfZnJlZXplX21pYihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgYm9vbCBmcmVlemUpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy00MjgtXFx0LyogdXNlZCBieSBNSUIgY291bnRlciByZWFkaW5nIGNvZGUgdG8ga25vdyBmcmVlemUgaXMgZW5hYmxlZCAqL1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jOjQyOTpcXHRwLVxcdTAwM2VmcmVlemUgPSBmcmVlemU7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMtNDMwLVxcdG11dGV4X3VubG9jayhcXHUwMDI2cC1cXHUwMDNlbWliLmNudF9tdXRleCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9idWZmZXJzLmM9MTM3MT1pbnQgbWx4c3dfc3Bfc2JfcG9vbF9zZXQoc3RydWN0IG1seHN3X2NvcmUgKm1seHN3X2NvcmUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9idWZmZXJzLmMtMTM4OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9idWZmZXJzLmM6MTM5MDpcXHRpZiAocHItXFx1MDAzZWZyZWV6ZV9tb2RlIFxcdTAwMjZcXHUwMDI2IHByLVxcdTAwM2Vtb2RlICE9IG1vZGUpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9idWZmZXJzLmMtMTM5MS1cXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiQ2hhbmdpbmcgdGhpcyBwb29sJ3MgdGhyZXNob2xkIHR5cGUgaXMgZm9yYmlkZGVuXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9idWZmZXJzLmMtMTM5NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9idWZmZXJzLmM6MTM5NTpcXHRpZiAocHItXFx1MDAzZWZyZWV6ZV9zaXplIFxcdTAwMjZcXHUwMDI2IHByLVxcdTAwM2VzaXplICE9IHNpemUpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9idWZmZXJzLmMtMTM5Ni1cXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiQ2hhbmdpbmcgdGhpcyBwb29sJ3Mgc2l6ZSBpcyBmb3JiaWRkZW5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2J1ZmZlcnMuYz0xNDk5PWludCBtbHhzd19zcF9zYl90Y19wb29sX2JpbmRfc2V0KHN0cnVjdCBtbHhzd19jb3JlX3BvcnQgKm1seHN3X2NvcmVfcG9ydCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2J1ZmZlcnMuYy0xNTI5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2J1ZmZlcnMuYzoxNTMwOlxcdGlmIChjbS1cXHUwMDNlZnJlZXplX3Bvb2wgXFx1MDAyNlxcdTAwMjYgY20tXFx1MDAzZXBvb2xfaW5kZXggIT0gcG9vbF9pbmRleCkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2J1ZmZlcnMuYy0xNTMxLVxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJCaW5kaW5nIHRoaXMgVEMgdG8gYSBkaWZmZXJlbnQgcG9vbCBpcyBmb3JiaWRkZW5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2J1ZmZlcnMuYy0xNTM0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2J1ZmZlcnMuYzoxNTM1OlxcdGlmIChjbS1cXHUwMDNlZnJlZXplX3RocmVzaCBcXHUwMDI2XFx1MDAyNiBjbS1cXHUwMDNlbWF4X2J1ZmYgIT0gdGhyZXNob2xkKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fYnVmZmVycy5jLTE1MzYtXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkNoYW5naW5nIHRoaXMgVEMncyB0aHJlc2hvbGQgaXMgZm9yYmlkZGVuXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM9NzkyPXN0YXRpYyBpbnQgYnJjbWZfc2Rpb2RfZnJlZXplcl9hdHRhY2goc3RydWN0IGJyY21mX3NkaW9fZGV2ICpzZGlvZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTc5Ni1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6Nzk3OlxcdHNkaW9kZXYtXFx1MDAzZWZyZWV6ZXIgPSBremFsbG9jX29iaigqc2Rpb2Rldi1cXHUwMDNlZnJlZXplcik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjc5ODpcXHRpZiAoIXNkaW9kZXYtXFx1MDAzZWZyZWV6ZXIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTc5OS1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6ODAwOlxcdGF0b21pY19zZXQoXFx1MDAyNnNkaW9kZXYtXFx1MDAzZWZyZWV6ZXItXFx1MDAzZXRocmVhZF9jb3VudCwgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjgwMTpcXHRhdG9taWNfc2V0KFxcdTAwMjZzZGlvZGV2LVxcdTAwM2VmcmVlemVyLVxcdTAwM2VmcmVlemluZywgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjgwMjpcXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZzZGlvZGV2LVxcdTAwM2VmcmVlemVyLVxcdTAwM2V0aHJlYWRfZnJlZXplKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6ODAzOlxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2c2Rpb2Rldi1cXHUwMDNlZnJlZXplci1cXHUwMDNlcmVzdW1lZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTgwNC1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYz04MDc9c3RhdGljIHZvaWQgYnJjbWZfc2Rpb2RfZnJlZXplcl9kZXRhY2goc3RydWN0IGJyY21mX3NkaW9fZGV2ICpzZGlvZGV2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy04MDgte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzo4MDk6XFx0aWYgKHNkaW9kZXYtXFx1MDAzZWZyZWV6ZXIpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6ODEwOlxcdFxcdFdBUk5fT04oYXRvbWljX3JlYWQoXFx1MDAyNnNkaW9kZXYtXFx1MDAzZWZyZWV6ZXItXFx1MDAzZWZyZWV6aW5nKSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjgxMTpcXHRcXHRrZnJlZShzZGlvZGV2LVxcdTAwM2VmcmVlemVyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6ODEyOlxcdFxcdHNkaW9kZXYtXFx1MDAzZWZyZWV6ZXIgPSBOVUxMO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy04MTMtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jPTgxNj1zdGF0aWMgaW50IGJyY21mX3NkaW9kX2ZyZWV6ZXJfb24oc3RydWN0IGJyY21mX3NkaW9fZGV2ICpzZGlvZGV2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy04MTcte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzo4MTg6XFx0YXRvbWljX3QgKmV4cGVjdCA9IFxcdTAwMjZzZGlvZGV2LVxcdTAwM2VmcmVlemVyLVxcdTAwM2V0aHJlYWRfY291bnQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTgxOS1cXHRpbnQgcmVzID0gMDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtODIwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzo4MjE6XFx0c2Rpb2Rldi1cXHUwMDNlZnJlZXplci1cXHUwMDNlZnJvemVuX2NvdW50ID0gMDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6ODIyOlxcdHJlaW5pdF9jb21wbGV0aW9uKFxcdTAwMjZzZGlvZGV2LVxcdTAwM2VmcmVlemVyLVxcdTAwM2VyZXN1bWVkKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6ODIzOlxcdGF0b21pY19zZXQoXFx1MDAyNnNkaW9kZXYtXFx1MDAzZWZyZWV6ZXItXFx1MDAzZWZyZWV6aW5nLCAxKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtODI0LVxcdGJyY21mX3NkaW9fdHJpZ2dlcl9kcGMoc2Rpb2Rldi1cXHUwMDNlYnVzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6ODI1OlxcdHdhaXRfZXZlbnQoc2Rpb2Rldi1cXHUwMDNlZnJlZXplci1cXHUwMDNldGhyZWFkX2ZyZWV6ZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6ODI2OlxcdFxcdCAgIGF0b21pY19yZWFkKGV4cGVjdCkgPT0gc2Rpb2Rldi1cXHUwMDNlZnJlZXplci1cXHUwMDNlZnJvemVuX2NvdW50KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtODI3LVxcdHNkaW9fY2xhaW1faG9zdChzZGlvZGV2LVxcdTAwM2VmdW5jMSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM9ODMzPXN0YXRpYyB2b2lkIGJyY21mX3NkaW9kX2ZyZWV6ZXJfb2ZmKHN0cnVjdCBicmNtZl9zZGlvX2RldiAqc2Rpb2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy04MzctXFx0c2Rpb19yZWxlYXNlX2hvc3Qoc2Rpb2Rldi1cXHUwMDNlZnVuYzEpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzo4Mzg6XFx0YXRvbWljX3NldChcXHUwMDI2c2Rpb2Rldi1cXHUwMDNlZnJlZXplci1cXHUwMDNlZnJlZXppbmcsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzo4Mzk6XFx0Y29tcGxldGVfYWxsKFxcdTAwMjZzZGlvZGV2LVxcdTAwM2VmcmVlemVyLVxcdTAwM2VyZXN1bWVkKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtODQwLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYz04NDI9Ym9vbCBicmNtZl9zZGlvZF9mcmVlemluZyhzdHJ1Y3QgYnJjbWZfc2Rpb19kZXYgKnNkaW9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtODQ0LVxcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19QTV9TTEVFUCkgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6ODQ1OlxcdFxcdGF0b21pY19yZWFkKFxcdTAwMjZzZGlvZGV2LVxcdTAwM2VmcmVlemVyLVxcdTAwM2VmcmVlemluZyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTg0Ni19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM9ODQ4PXZvaWQgYnJjbWZfc2Rpb2RfdHJ5X2ZyZWV6ZShzdHJ1Y3QgYnJjbWZfc2Rpb19kZXYgKnNkaW9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtODUxLVxcdFxcdHJldHVybjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6ODUyOlxcdHNkaW9kZXYtXFx1MDAzZWZyZWV6ZXItXFx1MDAzZWZyb3plbl9jb3VudCsrO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzo4NTM6XFx0d2FrZV91cChcXHUwMDI2c2Rpb2Rldi1cXHUwMDNlZnJlZXplci1cXHUwMDNldGhyZWFkX2ZyZWV6ZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjg1NDpcXHR3YWl0X2Zvcl9jb21wbGV0aW9uKFxcdTAwMjZzZGlvZGV2LVxcdTAwM2VmcmVlemVyLVxcdTAwM2VyZXN1bWVkKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtODU1LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYz04NTc9dm9pZCBicmNtZl9zZGlvZF9mcmVlemVyX2NvdW50KHN0cnVjdCBicmNtZl9zZGlvX2RldiAqc2Rpb2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy04NTktXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BNX1NMRUVQKSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6ODYwOlxcdFxcdGF0b21pY19pbmMoXFx1MDAyNnNkaW9kZXYtXFx1MDAzZWZyZWV6ZXItXFx1MDAzZXRocmVhZF9jb3VudCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTg2MS19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM9ODYzPXZvaWQgYnJjbWZfc2Rpb2RfZnJlZXplcl91bmNvdW50KHN0cnVjdCBicmNtZl9zZGlvX2RldiAqc2Rpb2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy04NjUtXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BNX1NMRUVQKSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6ODY2OlxcdFxcdGF0b21pY19kZWMoXFx1MDAyNnNkaW9kZXYtXFx1MDAzZWZyZWV6ZXItXFx1MDAzZXRocmVhZF9jb3VudCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTg2Ny19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYz0yNTQ4PXN0YXRpYyB2b2lkIHJ0d19jb2V4X3J1bl9jb2V4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHJlYXNvbilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jLTI1ODgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmM6MjU4OTpcXHRpZiAoY29leC1cXHUwMDNlZnJlZXplIFxcdTAwMjZcXHUwMDI2IGNvZXhfZG0tXFx1MDAzZXJlYXNvbiA9PSBDT0VYX1JTTl9CVElORk8gXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYy0yNTkwLVxcdCAgICAhY29leF9zdGF0LVxcdTAwM2VidF9zZXR1cF9saW5rKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYz0yNzA4PXN0YXRpYyB2b2lkIF9fcnR3X2NvZXhfaW5pdF9od19jb25maWcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgYm9vbCB3aWZpX29ubHkpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYy0yNzUzLVxcdFxcdGNvZXgtXFx1MDAzZXN0b3BfZG0gPSBmYWxzZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYzoyNzU0OlxcdFxcdGNvZXgtXFx1MDAzZWZyZWV6ZSA9IHRydWU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmMtMjc1NS1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYz0yODY5PXZvaWQgcnR3X2NvZXhfc2Nhbl9ub3RpZnkoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggdHlwZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jLTI4NzYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmM6Mjg3NzpcXHRjb2V4LVxcdTAwM2VmcmVlemUgPSBmYWxzZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYy0yODc4LVxcdHJ0d19jb2V4X3dyaXRlX3NjYmQocnR3ZGV2LCBDT0VYX1NDQkRfQUNUSVZFIHwgQ09FWF9TQ0JEX09OT0ZGLCB0cnVlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jPTI5MzM9dm9pZCBydHdfY29leF9jb25uZWN0X25vdGlmeShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCB0eXBlKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmMtMjk3Mi1cXHRcXHQgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYzoyOTczOlxcdFxcdGNvZXgtXFx1MDAzZWZyZWV6ZSA9IHRydWU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmMtMjk3NC1cXHRcXHRpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHJ0d2Rldi1cXHUwMDNlaHcsIFxcdTAwMjZjb2V4LVxcdTAwM2VkZWZyZWV6ZV93b3JrLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmMtMjk3Ny1cXHRcXHRjb2V4X3N0YXQtXFx1MDAzZXdsX2hpX3ByaV90YXNrMSA9IGZhbHNlO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jOjI5Nzg6XFx0XFx0Y29leC1cXHUwMDNlZnJlZXplID0gZmFsc2U7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmMtMjk3OS1cXHRcXHRjb2V4X3N0YXQtXFx1MDAzZXdsX2Nvbm5lY3RpbmcgPSBmYWxzZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jPTM0OTE9dm9pZCBydHdfY29leF9kZWZyZWV6ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jLTM0OTgtXFx0bXV0ZXhfbG9jayhcXHUwMDI2cnR3ZGV2LVxcdTAwM2VtdXRleCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmM6MzQ5OTpcXHRjb2V4LVxcdTAwM2VmcmVlemUgPSBmYWxzZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYy0zNTAwLVxcdGNvZXhfc3RhdC1cXHUwMDNld2xfaGlfcHJpX3Rhc2sxID0gZmFsc2U7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYz0zOTM2PXZvaWQgcnR3X2NvZXhfZGlzcGxheV9jb2V4X2luZm8oc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHNlcV9maWxlICptKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmMtMzk5NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYzozOTk2OlxcdH0gZWxzZSBpZiAoY29leC1cXHUwMDNlZnJlZXplKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmMtMzk5Ny1cXHRcXHRzZXFfcHV0cyhtLCBcXFwiPT09PT09PT09PT09W2NvZXhfZnJlZXplXT09PT09PT09PT09PVxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL252ZGltbS9kaW1tX2RldnMuYz00MTA9c3RhdGljIHVtb2RlX3QgbnZkaW1tX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludCBuKVxcbi0tXFxuZHJpdmVycy9udmRpbW0vZGltbV9kZXZzLmMtNDIxLVxcdFxcdC8qIEFyZSB0aGVyZSBhbnkgc3RhdGUgbXV0YXRpb24gb3BzIChtYWtlIHdyaXRhYmxlKT8gKi9cXG5kcml2ZXJzL252ZGltbS9kaW1tX2RldnMuYzo0MjI6XFx0XFx0aWYgKG52ZGltbS1cXHUwMDNlc2VjLm9wcy1cXHUwMDNlZnJlZXplIHx8IG52ZGltbS1cXHUwMDNlc2VjLm9wcy1cXHUwMDNlZGlzYWJsZVxcbmRyaXZlcnMvbnZkaW1tL2RpbW1fZGV2cy5jLTQyMy1cXHRcXHRcXHRcXHR8fCBudmRpbW0tXFx1MDAzZXNlYy5vcHMtXFx1MDAzZWNoYW5nZV9rZXlcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2RpbW1fZGV2cy5jLTQyOS1cXG5kcml2ZXJzL252ZGltbS9kaW1tX2RldnMuYzo0MzA6XFx0aWYgKG52ZGltbS1cXHUwMDNlc2VjLm9wcy1cXHUwMDNlZnJlZXplKVxcbmRyaXZlcnMvbnZkaW1tL2RpbW1fZGV2cy5jLTQzMS1cXHRcXHRyZXR1cm4gYS1cXHUwMDNlbW9kZTtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2RpbW1fZGV2cy5jPTY3MD1pbnQgbnZkaW1tX3NlY3VyaXR5X2ZyZWV6ZShzdHJ1Y3QgbnZkaW1tICpudmRpbW0pXFxuLS1cXG5kcml2ZXJzL252ZGltbS9kaW1tX2RldnMuYy02NzUtXFxuZHJpdmVycy9udmRpbW0vZGltbV9kZXZzLmM6Njc2OlxcdGlmICghbnZkaW1tLVxcdTAwM2VzZWMub3BzIHx8ICFudmRpbW0tXFx1MDAzZXNlYy5vcHMtXFx1MDAzZWZyZWV6ZSlcXG5kcml2ZXJzL252ZGltbS9kaW1tX2RldnMuYy02NzctXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuZHJpdmVycy9udmRpbW0vZGltbV9kZXZzLmMtNjg2LVxcbmRyaXZlcnMvbnZkaW1tL2RpbW1fZGV2cy5jOjY4NzpcXHRyYyA9IG52ZGltbS1cXHUwMDNlc2VjLm9wcy1cXHUwMDNlZnJlZXplKG52ZGltbSk7XFxuZHJpdmVycy9udmRpbW0vZGltbV9kZXZzLmMtNjg4LVxcdG52ZGltbS1cXHUwMDNlc2VjLmZsYWdzID0gbnZkaW1tX3NlY3VyaXR5X2ZsYWdzKG52ZGltbSwgTlZESU1NX1VTRVIpO1xcbi0tXFxuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jPTEwNjM9c3RhdGljIGludCBwY2lfcG1fZnJlZXplKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xMDg4LVxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYzoxMDg5OlxcdGlmIChwbS1cXHUwMDNlZnJlZXplKSB7XFxuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jLTEwOTAtXFx0XFx0aW50IGVycm9yO1xcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xMDkxLVxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYzoxMDkyOlxcdFxcdGVycm9yID0gcG0tXFx1MDAzZWZyZWV6ZShkZXYpO1xcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYzoxMDkzOlxcdFxcdHN1c3BlbmRfcmVwb3J0X3Jlc3VsdChkZXYsIHBtLVxcdTAwM2VmcmVlemUsIGVycm9yKTtcXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMtMTA5NC1cXHRcXHRpZiAoZXJyb3IpXFxuLS1cXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmM9MTEwMT1zdGF0aWMgaW50IHBjaV9wbV9mcmVlemVfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jLTExMDgtXFxuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jOjExMDk6XFx0aWYgKHBtIFxcdTAwMjZcXHUwMDI2IHBtLVxcdTAwM2VmcmVlemVfbm9pcnEpIHtcXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMtMTExMC1cXHRcXHRpbnQgZXJyb3I7XFxuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jLTExMTEtXFxuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jOjExMTI6XFx0XFx0ZXJyb3IgPSBwbS1cXHUwMDNlZnJlZXplX25vaXJxKGRldik7XFxuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jOjExMTM6XFx0XFx0c3VzcGVuZF9yZXBvcnRfcmVzdWx0KGRldiwgcG0tXFx1MDAzZWZyZWV6ZV9ub2lycSwgZXJyb3IpO1xcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xMTE0LVxcdFxcdGlmIChlcnJvcilcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX3BtLmM9Mjc9c3RhdGljIGludCBkb19zY3NpX2ZyZWV6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbSlcXG5kcml2ZXJzL3Njc2kvc2NzaV9wbS5jLTI4LXtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTc6NDIuNDk2MzA0Mzc2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM5MzQzMDgzMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJhY2luZyB0aGUgRnJlZXppbmcgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoaXMgcGF0Y2ggaW4gYGZzL3N1cGVyLmNgLiBJdCBzZWVtcyB0byBiZSByZWxhdGVkIHRvIGBmc19iZGV2X2ZyZWV6ZWAsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBXYWl0IGEgbWludXRlLCB3aGVyZSBpcyAqdGhhdCogY2FsbGVkIGZyb20/IFJpZ2h0LCBgZnNfYmRldl9mcmVlemVgIGlzIGludm9rZWQgYnkgYGJkZXZfZnJlZXplYC4gVGhhdCdzIGluIGBibG9jay9iZGV2LmNgLiBBbHJpZ2h0LCBzbyBsZXQncyBzaGlmdCBnZWFycyBhbmQgZGl2ZSBpbnRvIGBiZGV2X2ZyZWV6ZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgaGVyZSB0byBzZWUgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2UuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uIGluIHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDk0LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTc6NTYuNDMwNjE1OTI0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDY3MTc3NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJkZXZfZnJlZXplXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2JkZXYuYz0yODU9RVhQT1JUX1NZTUJPTChzeW5jX2Jsb2NrZGV2X3JhbmdlKTtcXG4tLVxcbmJsb2NrL2JkZXYuYy0yODctLyoqXFxuYmxvY2svYmRldi5jOjI4ODogKiBiZGV2X2ZyZWV6ZSAtIGxvY2sgYSBmaWxlc3lzdGVtIGFuZCBmb3JjZSBpdCBpbnRvIGEgY29uc2lzdGVudCBzdGF0ZVxcbmJsb2NrL2JkZXYuYy0yODktICogQGJkZXY6XFx0YmxvY2tkZXZpY2UgdG8gbG9ja1xcbi0tXFxuYmxvY2svYmRldi5jLTI5NC0gKiB1bmZyZWV6ZSBwcm9jZXNzIGNhbiB1bmZyZWV6ZSB0aGUgZnJvemVuIGZpbGVzeXN0ZW0gYWN0dWFsbHkgd2hlbiBtdWx0aXBsZVxcbmJsb2NrL2JkZXYuYzoyOTU6ICogZnJlZXplIHJlcXVlc3RzIGFycml2ZSBzaW11bHRhbmVvdXNseS4gSXQgY291bnRzIHVwIGluIGJkZXZfZnJlZXplKCkgYW5kXFxuYmxvY2svYmRldi5jLTI5Ni0gKiBjb3VudCBkb3duIGluIGJkZXZfdGhhdygpLiBXaGVuIGl0IGJlY29tZXMgMCwgdGhhd19iZGV2KCkgd2lsbCB1bmZyZWV6ZVxcbi0tXFxuYmxvY2svYmRldi5jLTMwMC0gKi9cXG5ibG9jay9iZGV2LmM6MzAxOmludCBiZGV2X2ZyZWV6ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxcbmJsb2NrL2JkZXYuYy0zMDIte1xcbi0tXFxuYmxvY2svYmRldi5jLTMyNi19XFxuYmxvY2svYmRldi5jOjMyNzpFWFBPUlRfU1lNQk9MKGJkZXZfZnJlZXplKTtcXG5ibG9jay9iZGV2LmMtMzI4LVxcbi0tXFxuYmxvY2svYmRldi5jLTMzMi0gKlxcbmJsb2NrL2JkZXYuYzozMzM6ICogVW5sb2NrcyB0aGUgZmlsZXN5c3RlbSBhbmQgbWFya3MgaXQgd3JpdGVhYmxlIGFnYWluIGFmdGVyIGJkZXZfZnJlZXplKCkuXFxuYmxvY2svYmRldi5jLTMzNC0gKlxcbi0tXFxuZHJpdmVycy9tZC9kbS5jPTI5MzI9c3RhdGljIGludCBsb2NrX2ZzKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZClcXG4tLVxcbmRyaXZlcnMvbWQvZG0uYy0yOTM3LVxcbmRyaXZlcnMvbWQvZG0uYzoyOTM4OlxcdHIgPSBiZGV2X2ZyZWV6ZShtZC1cXHUwMDNlZGlzay1cXHUwMDNlcGFydDApO1xcbmRyaXZlcnMvbWQvZG0uYy0yOTM5LVxcdGlmICghcilcXG4tLVxcbmZzL2V4ZmF0L3N1cGVyLmM9MTU1PWludCBleGZhdF9mb3JjZV9zaHV0ZG93bihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgZmxhZ3MpXFxuLS1cXG5mcy9leGZhdC9zdXBlci5jLTE2Ni1cXHRjYXNlIEVYRkFUX0dPSU5HX0RPV05fRlVMTFNZTkM6XFxuZnMvZXhmYXQvc3VwZXIuYzoxNjc6XFx0XFx0cmV0ID0gYmRldl9mcmVlemUoc2ItXFx1MDAzZXNfYmRldik7XFxuZnMvZXhmYXQvc3VwZXIuYy0xNjgtXFx0XFx0aWYgKHJldClcXG4tLVxcbmZzL2V4dDQvaW9jdGwuYz04MTA9aW50IGV4dDRfZm9yY2Vfc2h1dGRvd24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGZsYWdzKVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTgyNS1cXHRjYXNlIEVYVDRfR09JTkdfRkxBR1NfREVGQVVMVDpcXG5mcy9leHQ0L2lvY3RsLmM6ODI2OlxcdFxcdHJldCA9IGJkZXZfZnJlZXplKHNiLVxcdTAwM2VzX2JkZXYpO1xcbmZzL2V4dDQvaW9jdGwuYy04MjctXFx0XFx0aWYgKHJldClcXG4tLVxcbmZzL2YyZnMvZmlsZS5jPTI0NTM9aW50IGYyZnNfZG9fc2h1dGRvd24oc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLCB1bnNpZ25lZCBpbnQgZmxhZyxcXG4tLVxcbmZzL2YyZnMvZmlsZS5jLTI0NjAtXFx0Y2FzZSBGMkZTX0dPSU5HX0RPV05fRlVMTFNZTkM6XFxuZnMvZjJmcy9maWxlLmM6MjQ2MTpcXHRcXHRyZXQgPSBiZGV2X2ZyZWV6ZShzYi1cXHUwMDNlc19iZGV2KTtcXG5mcy9mMmZzL2ZpbGUuYy0yNDYyLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5mcy9udGZzL3N1cGVyLmM9MTgyMD1pbnQgbnRmc19mb3JjZV9zaHV0ZG93bihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgZmxhZ3MpXFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtMTgzMC1cXHRjYXNlIEZTX1NIVVRET1dOX0ZMQUdTX0xPR0ZMVVNIOlxcbmZzL250ZnMvc3VwZXIuYzoxODMxOlxcdFxcdHJldCA9IGJkZXZfZnJlZXplKHNiLVxcdTAwM2VzX2JkZXYpO1xcbmZzL250ZnMvc3VwZXIuYy0xODMyLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5mcy9udGZzMy9maWxlLmM9MTk3PXN0YXRpYyBpbnQgbnRmc19mb3JjZV9zaHV0ZG93bihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgZmxhZ3MpXFxuLS1cXG5mcy9udGZzMy9maWxlLmMtMjA1LVxcdC8qIE5vIGFkZGl0aW9uYWwgb3B0aW9ucyB5ZXQgKGZsYWdzKS4gKi9cXG5mcy9udGZzMy9maWxlLmM6MjA2OlxcdGVyciA9IGJkZXZfZnJlZXplKHNiLVxcdTAwM2VzX2JkZXYpO1xcbmZzL250ZnMzL2ZpbGUuYy0yMDctXFx0aWYgKGVycilcXG4tLVxcbmZzL3N1cGVyLmM9MTQzNz1zdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICpnZXRfYmRldl9zdXBlcihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxcbi0tXFxuZnMvc3VwZXIuYy0xNDUyLS8qKlxcbmZzL3N1cGVyLmM6MTQ1MzogKiBmc19iZGV2X2ZyZWV6ZSAtIGZyZWV6ZSBvd25pbmcgZmlsZXN5c3RlbSBvZiBibG9jayBkZXZpY2VcXG5mcy9zdXBlci5jLTE0NTQtICogQGJkZXY6IGJsb2NrIGRldmljZVxcbi0tXFxuZnMvc3VwZXIuYy0xNDY2LSAqL1xcbmZzL3N1cGVyLmM6MTQ2NzpzdGF0aWMgaW50IGZzX2JkZXZfZnJlZXplKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXFxuZnMvc3VwZXIuYy0xNDY4LXtcXG4tLVxcbmZzL3N1cGVyLmM9MTU1Mj1jb25zdCBzdHJ1Y3QgYmxrX2hvbGRlcl9vcHMgZnNfaG9sZGVyX29wcyA9IHtcXG4tLVxcbmZzL3N1cGVyLmMtMTU1NC1cXHQuc3luY1xcdFxcdFxcdD0gZnNfYmRldl9zeW5jLFxcbmZzL3N1cGVyLmM6MTU1NTpcXHQuZnJlZXplXFx0XFx0XFx0PSBmc19iZGV2X2ZyZWV6ZSxcXG5mcy9zdXBlci5jLTE1NTYtXFx0LnRoYXdcXHRcXHRcXHQ9IGZzX2JkZXZfdGhhdyxcXG4tLVxcbmZzL3hmcy94ZnNfZnNvcHMuYz00NTE9eGZzX2ZzX2dvaW5nZG93bihcXG4tLVxcbmZzL3hmcy94ZnNfZnNvcHMuYy00NTYtXFx0Y2FzZSBYRlNfRlNPUF9HT0lOR19GTEFHU19ERUZBVUxUOiB7XFxuZnMveGZzL3hmc19mc29wcy5jOjQ1NzpcXHRcXHRpZiAoIWJkZXZfZnJlZXplKG1wLVxcdTAwM2VtX3N1cGVyLVxcdTAwM2VzX2JkZXYpKSB7XFxuZnMveGZzL3hmc19mc29wcy5jLTQ1OC1cXHRcXHRcXHR4ZnNfZm9yY2Vfc2h1dGRvd24obXAsIFNIVVRET1dOX0ZPUkNFX1VNT1VOVCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oPTE4MzI9c3RhdGljIGlubGluZSBpbnQgZWFybHlfbG9va3VwX2JkZXYoY29uc3QgY2hhciAqcGF0aG5hbWUsIGRldl90ICpkZXYpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTE4MzctXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaDoxODM4OmludCBiZGV2X2ZyZWV6ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTtcXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTE4MzktaW50IGJkZXZfdGhhdyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTc6NTkuODk3ODAxNzQ0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDA2NTAzNzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzIGluIHRoZSBGaWxlc3lzdGVtIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCBzb21lIHJlY2VudCBjaGFuZ2VzIGluIHRoZSBmaWxlc3lzdGVtIGNvZGUsIHRyeWluZyB0byBpZGVudGlmeSBwcm9taXNpbmcgYXJlYXMgZm9yIGZ1enppbmcuIEZpcnN0LCBJIG5vdGljZWQgdGhhdCBgYmRldl9mcmVlemVgIGlzIGEgZnVuY3Rpb24gY2FsbGVkIGJ5IHNldmVyYWwgZmlsZXN5c3RlbS1zcGVjaWZpYyBzaHV0ZG93biByb3V0aW5lczogYGV4ZmF0X2ZvcmNlX3NodXRkb3duYCwgYGV4dDRfZm9yY2Vfc2h1dGRvd25gLCBgZjJmc19kb19zaHV0ZG93bmAsIGBudGZzX2ZvcmNlX3NodXRkb3duYCwgYHhmc19mc19nb2luZ2Rvd25gLCBhbmQgZXZlbiBpbmRpcmVjdGx5IHRocm91Z2ggYGxvY2tfZnNgIGluIGBkbS5jYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuQnV0IHRoZSBrZXkgY2hhbmdlIGlzIGluIGBmcy9zdXBlci5jYCwgc3BlY2lmaWNhbGx5IGluIGBmc19iZGV2X2ZyZWV6ZWAuIFRoaXMgcGF0Y2ggYWRkcyBlcnJvciBoYW5kbGluZyBhZnRlciB0aGUgYHN5bmNfYmxvY2tkZXZgIGNhbGwuIElmIGBzeW5jX2Jsb2NrZGV2YCBmYWlscywgdGhlIHN1cGVyYmxvY2sgaXMgbm93IHRoYXdlZC4gVGhpcyBpcyBkZWZpbml0ZWx5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlIGJlY2F1c2UgaXQgaW50cm9kdWNlcyBhIG5ldyBmYWlsdXJlIHBhdGggYW5kIHJvbGxiYWNrIHNjZW5hcmlvLiBUaGlzIGFyZWEgbmVlZHMgbW9yZSBzY3J1dGlueS4gQSBzeW5jaHJvbml6YXRpb24gZXJyb3IgZHVyaW5nIGZyZWV6ZS90aGF3IGNvdWxkIGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uIG9yIGluY29uc2lzdGVuY2llcywgYW5kIGl0J3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBjYW4gYmUgdGFyZ2V0ZWQgYnkgZnV6emluZy5cblxuTmV4dCwgSSBsb29rZWQgYXQgYSByZWxhdGVkIGNoYW5nZSBpbiBgZnMvZXhmYXQvbWlzYy5jYC4gVGhpcyBwYXRjaCBtb2RpZmllcyBob3cgZXhGQVQgaGFuZGxlcyBlcnJvcnMgd2hlbiB0aGUgYGVycm9ycz1yZW1vdW50LXJvYCBvcHRpb24gaXMgc2V0LiBJbnN0ZWFkIG9mIHNldHRpbmcgdGhlIGBTQl9SRE9OTFlgIGZsYWcgZGlyZWN0bHksIGl0IG5vdyBzZXRzIGBFWEZBVF9GTEFHU19TSFVURE9XTmAuIFRoaXMgY2hhbmdlIHNlZW1zIHN1YnRsZSBidXQgY291bGQgYWxzbyBpbnRyb2R1Y2UgbmV3IHN0YXRlcyBvciBjb2RlIHBhdGhzIHRoYXQgYXJlIHdvcnRoIGV4cGxvcmluZyB0aHJvdWdoIGZ1enppbmcuIFRoZSBjb21tZW50IGluZGljYXRlcyB0aGlzIGNoYW5nZSBoZWxwcyBhdm9pZCBwb3RlbnRpYWwgZGVhZGxvY2tzIHdpdGggYGZyZWV6ZV9zdXBlcigpYC5cblxuU28sIHRoZSBmb2N1cyBvZiBteSBmdXp6aW5nIGVmZm9ydHMgc2hvdWxkIGJlIG9uIGBmc19iZGV2X2ZyZWV6ZWAgYW5kIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gaXQsIGVzcGVjaWFsbHkgdGhlIG5ldyByb2xsYmFjayBwYXRoIGFmdGVyIGBzeW5jX2Jsb2NrZGV2YCBmYWlsdXJlLiBXZSB3YW50IHRvIGNoZWNrIGBmc19iZGV2X2ZyZWV6ZWAgYmVjYXVzZSBpdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGBGSUZSRUVaRWAgaW9jdGwsIGFzIHdlbGwgYXMgdmlhIGRtLCBhbmQgdGhlIGRpZmZlcmVudCBmaWxlc3lzdGVtIHNodXRkb3duIHBhdGhzLiBBbmQgc2Vjb25kYXJpbHksIG9uIHRoZSBlcnJvciBoYW5kbGluZyBpbiBgX19leGZhdF9mc19lcnJvcmAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gdGhvc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTI0MSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxODowOS45MDQzMDg3MDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NzQwNTg0NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnNfYmRldl9mcmVlemVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvc3VwZXIuYz0xNDM3PXN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmdldF9iZGV2X3N1cGVyKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXFxuLS1cXG5mcy9zdXBlci5jLTE0NTItLyoqXFxuZnMvc3VwZXIuYzoxNDUzOiAqIGZzX2JkZXZfZnJlZXplIC0gZnJlZXplIG93bmluZyBmaWxlc3lzdGVtIG9mIGJsb2NrIGRldmljZVxcbmZzL3N1cGVyLmMtMTQ1NC0gKiBAYmRldjogYmxvY2sgZGV2aWNlXFxuLS1cXG5mcy9zdXBlci5jLTE0NjYtICovXFxuZnMvc3VwZXIuYzoxNDY3OnN0YXRpYyBpbnQgZnNfYmRldl9mcmVlemUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcXG5mcy9zdXBlci5jLTE0Njgte1xcbi0tXFxuZnMvc3VwZXIuYz0xNTUyPWNvbnN0IHN0cnVjdCBibGtfaG9sZGVyX29wcyBmc19ob2xkZXJfb3BzID0ge1xcbi0tXFxuZnMvc3VwZXIuYy0xNTU0LVxcdC5zeW5jXFx0XFx0XFx0PSBmc19iZGV2X3N5bmMsXFxuZnMvc3VwZXIuYzoxNTU1OlxcdC5mcmVlemVcXHRcXHRcXHQ9IGZzX2JkZXZfZnJlZXplLFxcbmZzL3N1cGVyLmMtMTU1Ni1cXHQudGhhd1xcdFxcdFxcdD0gZnNfYmRldl90aGF3LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxODoxMi41NzgzNzcxMjFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzMjUwNDcwMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgRmlsZXN5c3RlbSBGcmVlemluZyBCZWhhdmlvcioqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoaXMgYGZzX2JkZXZfZnJlZXplYCBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gYmUgdHJpZ2dlcmVkIHRocm91Z2ggYGZzX2hvbGRlcl9vcHMuZnJlZXplYC4gVGhhdCBtYWtlcyBzZW5zZSwgYXMgYGZzX2hvbGRlcl9vcHNgIGFyZSwgYXMgSSByZWNhbGwsIGludm9sdmVkIHdoZW4gYSBmaWxlc3lzdGVtIGludGVyYWN0cyB3aXRoIGEgYmxvY2sgZGV2aWNlLCBvcGVuaW5nIGl0LCBsaWtlbHkgZm9yIEkvTy4gU28sIHRoZSBzZXF1ZW5jZSBpczogd2UgY2FsbCBgYmRldl9mcmVlemVgIG9uIHRoZSBibG9jayBkZXZpY2UgaXRzZWxmLCB3aGljaCBpbiB0dXJuIGhhbmRzIGNvbnRyb2wgdG8gYGZzX2JkZXZfZnJlZXplYC4gVGhlIHF1ZXN0aW9uIG5vdyBpczogd2hhdCBhY3R1YWxseSAqY2FsbHMqIGBiZGV2X2ZyZWV6ZWAgaW4gdGhlIGZpcnN0IHBsYWNlPyBNeSBndXQgZmVlbGluZyBzYXlzIGl0J3MgcmVsYXRlZCB0byB0aGUgYEZJRlJFRVpFYCBpb2N0bC4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IGh1bmNoOyBJJ2xsIHBvcCBvdmVyIHRvIGBibG9jay9pb2N0bC5jYCB0byB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDgxMywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDEwOjE4OjQzLjkwMzQyNzMxN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4NjE2MjQ1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiZGV2X2ZyZWV6ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iZGV2LmM9Mjg1PUVYUE9SVF9TWU1CT0woc3luY19ibG9ja2Rldl9yYW5nZSk7XFxuLS1cXG5ibG9jay9iZGV2LmMtMjg3LS8qKlxcbmJsb2NrL2JkZXYuYzoyODg6ICogYmRldl9mcmVlemUgLSBsb2NrIGEgZmlsZXN5c3RlbSBhbmQgZm9yY2UgaXQgaW50byBhIGNvbnNpc3RlbnQgc3RhdGVcXG5ibG9jay9iZGV2LmMtMjg5LSAqIEBiZGV2OlxcdGJsb2NrZGV2aWNlIHRvIGxvY2tcXG4tLVxcbmJsb2NrL2JkZXYuYy0yOTQtICogdW5mcmVlemUgcHJvY2VzcyBjYW4gdW5mcmVlemUgdGhlIGZyb3plbiBmaWxlc3lzdGVtIGFjdHVhbGx5IHdoZW4gbXVsdGlwbGVcXG5ibG9jay9iZGV2LmM6Mjk1OiAqIGZyZWV6ZSByZXF1ZXN0cyBhcnJpdmUgc2ltdWx0YW5lb3VzbHkuIEl0IGNvdW50cyB1cCBpbiBiZGV2X2ZyZWV6ZSgpIGFuZFxcbmJsb2NrL2JkZXYuYy0yOTYtICogY291bnQgZG93biBpbiBiZGV2X3RoYXcoKS4gV2hlbiBpdCBiZWNvbWVzIDAsIHRoYXdfYmRldigpIHdpbGwgdW5mcmVlemVcXG4tLVxcbmJsb2NrL2JkZXYuYy0zMDAtICovXFxuYmxvY2svYmRldi5jOjMwMTppbnQgYmRldl9mcmVlemUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcXG5ibG9jay9iZGV2LmMtMzAyLXtcXG4tLVxcbmJsb2NrL2JkZXYuYy0zMjYtfVxcbmJsb2NrL2JkZXYuYzozMjc6RVhQT1JUX1NZTUJPTChiZGV2X2ZyZWV6ZSk7XFxuYmxvY2svYmRldi5jLTMyOC1cXG4tLVxcbmJsb2NrL2JkZXYuYy0zMzItICpcXG5ibG9jay9iZGV2LmM6MzMzOiAqIFVubG9ja3MgdGhlIGZpbGVzeXN0ZW0gYW5kIG1hcmtzIGl0IHdyaXRlYWJsZSBhZ2FpbiBhZnRlciBiZGV2X2ZyZWV6ZSgpLlxcbmJsb2NrL2JkZXYuYy0zMzQtICpcXG4tLVxcbmRyaXZlcnMvbWQvZG0uYz0yOTMyPXN0YXRpYyBpbnQgbG9ja19mcyhzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpXFxuLS1cXG5kcml2ZXJzL21kL2RtLmMtMjkzNy1cXG5kcml2ZXJzL21kL2RtLmM6MjkzODpcXHRyID0gYmRldl9mcmVlemUobWQtXFx1MDAzZWRpc2stXFx1MDAzZXBhcnQwKTtcXG5kcml2ZXJzL21kL2RtLmMtMjkzOS1cXHRpZiAoIXIpXFxuLS1cXG5mcy9leGZhdC9zdXBlci5jPTE1NT1pbnQgZXhmYXRfZm9yY2Vfc2h1dGRvd24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGZsYWdzKVxcbi0tXFxuZnMvZXhmYXQvc3VwZXIuYy0xNjYtXFx0Y2FzZSBFWEZBVF9HT0lOR19ET1dOX0ZVTExTWU5DOlxcbmZzL2V4ZmF0L3N1cGVyLmM6MTY3OlxcdFxcdHJldCA9IGJkZXZfZnJlZXplKHNiLVxcdTAwM2VzX2JkZXYpO1xcbmZzL2V4ZmF0L3N1cGVyLmMtMTY4LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5mcy9leHQ0L2lvY3RsLmM9ODEwPWludCBleHQ0X2ZvcmNlX3NodXRkb3duKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBmbGFncylcXG4tLVxcbmZzL2V4dDQvaW9jdGwuYy04MjUtXFx0Y2FzZSBFWFQ0X0dPSU5HX0ZMQUdTX0RFRkFVTFQ6XFxuZnMvZXh0NC9pb2N0bC5jOjgyNjpcXHRcXHRyZXQgPSBiZGV2X2ZyZWV6ZShzYi1cXHUwMDNlc19iZGV2KTtcXG5mcy9leHQ0L2lvY3RsLmMtODI3LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYz0yNDUzPWludCBmMmZzX2RvX3NodXRkb3duKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSwgdW5zaWduZWQgaW50IGZsYWcsXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYy0yNDYwLVxcdGNhc2UgRjJGU19HT0lOR19ET1dOX0ZVTExTWU5DOlxcbmZzL2YyZnMvZmlsZS5jOjI0NjE6XFx0XFx0cmV0ID0gYmRldl9mcmVlemUoc2ItXFx1MDAzZXNfYmRldik7XFxuZnMvZjJmcy9maWxlLmMtMjQ2Mi1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZnMvbnRmcy9zdXBlci5jPTE4MjA9aW50IG50ZnNfZm9yY2Vfc2h1dGRvd24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGZsYWdzKVxcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTE4MzAtXFx0Y2FzZSBGU19TSFVURE9XTl9GTEFHU19MT0dGTFVTSDpcXG5mcy9udGZzL3N1cGVyLmM6MTgzMTpcXHRcXHRyZXQgPSBiZGV2X2ZyZWV6ZShzYi1cXHUwMDNlc19iZGV2KTtcXG5mcy9udGZzL3N1cGVyLmMtMTgzMi1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZnMvbnRmczMvZmlsZS5jPTE5Nz1zdGF0aWMgaW50IG50ZnNfZm9yY2Vfc2h1dGRvd24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGZsYWdzKVxcbi0tXFxuZnMvbnRmczMvZmlsZS5jLTIwNS1cXHQvKiBObyBhZGRpdGlvbmFsIG9wdGlvbnMgeWV0IChmbGFncykuICovXFxuZnMvbnRmczMvZmlsZS5jOjIwNjpcXHRlcnIgPSBiZGV2X2ZyZWV6ZShzYi1cXHUwMDNlc19iZGV2KTtcXG5mcy9udGZzMy9maWxlLmMtMjA3LVxcdGlmIChlcnIpXFxuLS1cXG5mcy9zdXBlci5jPTE0Mzc9c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqZ2V0X2JkZXZfc3VwZXIoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcXG4tLVxcbmZzL3N1cGVyLmMtMTQ1Mi0vKipcXG5mcy9zdXBlci5jOjE0NTM6ICogZnNfYmRldl9mcmVlemUgLSBmcmVlemUgb3duaW5nIGZpbGVzeXN0ZW0gb2YgYmxvY2sgZGV2aWNlXFxuZnMvc3VwZXIuYy0xNDU0LSAqIEBiZGV2OiBibG9jayBkZXZpY2VcXG4tLVxcbmZzL3N1cGVyLmMtMTQ2Ni0gKi9cXG5mcy9zdXBlci5jOjE0Njc6c3RhdGljIGludCBmc19iZGV2X2ZyZWV6ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxcbmZzL3N1cGVyLmMtMTQ2OC17XFxuLS1cXG5mcy9zdXBlci5jPTE1NTI9Y29uc3Qgc3RydWN0IGJsa19ob2xkZXJfb3BzIGZzX2hvbGRlcl9vcHMgPSB7XFxuLS1cXG5mcy9zdXBlci5jLTE1NTQtXFx0LnN5bmNcXHRcXHRcXHQ9IGZzX2JkZXZfc3luYyxcXG5mcy9zdXBlci5jOjE1NTU6XFx0LmZyZWV6ZVxcdFxcdFxcdD0gZnNfYmRldl9mcmVlemUsXFxuZnMvc3VwZXIuYy0xNTU2LVxcdC50aGF3XFx0XFx0XFx0PSBmc19iZGV2X3RoYXcsXFxuLS1cXG5mcy94ZnMveGZzX2Zzb3BzLmM9NDUxPXhmc19mc19nb2luZ2Rvd24oXFxuLS1cXG5mcy94ZnMveGZzX2Zzb3BzLmMtNDU2LVxcdGNhc2UgWEZTX0ZTT1BfR09JTkdfRkxBR1NfREVGQVVMVDoge1xcbmZzL3hmcy94ZnNfZnNvcHMuYzo0NTc6XFx0XFx0aWYgKCFiZGV2X2ZyZWV6ZShtcC1cXHUwMDNlbV9zdXBlci1cXHUwMDNlc19iZGV2KSkge1xcbmZzL3hmcy94ZnNfZnNvcHMuYy00NTgtXFx0XFx0XFx0eGZzX2ZvcmNlX3NodXRkb3duKG1wLCBTSFVURE9XTl9GT1JDRV9VTU9VTlQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaD0xODMyPXN0YXRpYyBpbmxpbmUgaW50IGVhcmx5X2xvb2t1cF9iZGV2KGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBkZXZfdCAqZGV2KVxcbi0tXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xODM3LVxcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTgzODppbnQgYmRldl9mcmVlemUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldik7XFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xODM5LWludCBiZGV2X3RoYXcoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDEwOjE4OjQ2LjI4OTU5NDQ4NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDI2NzY4OTM4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgRnJlZXplIE1lY2hhbmlzbSoqXG5cblJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBmcmVlemluZyB3b3JrcywgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGBGSUZSRUVaRWAgaW9jdGwgaW4gYGZzL2lvY3RsLmNgICpzcGVjaWZpY2FsbHkqIGNhbGxzIGBmcmVlemVfc3VwZXJgLiBUaGF0IG1ha2VzIHNlbnNlLCB0YXJnZXRpbmcgdGhlIHN1cGVyYmxvY2sgbGV2ZWwuIEJ1dCBob2xkIG9uLCBJIHJlY2FsbCBgYmRldl9mcmVlemVgIGJlaW5nIGluIHRoZSBtaXggdG9vLiBBaCB5ZXMsIEkgcmVtZW1iZXIgbm93LCBgYmRldl9mcmVlemVgIGlzIGRlZmluaXRlbHkgdXNlZCBieSB0aGUgZGV2aWNlIG1hcHBlciAoYGRtYCkgYW5kIGluIGZpbGVzeXN0ZW0gc2h1dGRvd24gaW9jdGxzIC0gdGhhdCdzIGEga2V5IGRpc3RpbmN0aW9uLiBOb3csIHRoZSBjb250ZXh0IGhhcyBzaGlmdGVkIGEgbGl0dGxlLCBJJ20gdGhpbmtpbmcgYWJvdXQgYEZJRlJFRVpFYCBvcGVyYXRpbmcgZGlyZWN0bHkgb24gYSBibG9jayBkZXZpY2UgLSB0aGF0IHJhaXNlcyBhIGZsYWcuIEkgbmVlZCB0byBiZSBzdXJlLiBTbywgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgaW4gYGJsb2NrL2lvY3RsLmNgLiBMZXQncyBnZXQgdGhlIGZ1bGwgc3RvcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNjQwLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTg6NTYuNTU3Mjg2Njg0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQxNTI3ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkZJRlJFRVpFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzcnEucnN0PTk3PUNvbW1hbmRcXHQgICAgRnVuY3Rpb25cXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzcnEucnN0LTExOC1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c3JxLnJzdDoxMTk6YGBqYGBcXHQgICAgRm9yY2libHkgXFxcIkp1c3QgdGhhdyBpdFxcXCIgLSBmaWxlc3lzdGVtcyBmcm96ZW4gYnkgdGhlIEZJRlJFRVpFIGlvY3RsLlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzcnEucnN0LTEyMC1cXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzcnEucnN0PTIxMT1wcm9jZXNzZXMuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c3JxLnJzdC0yMTMtXFxcImp1c3QgdGhhdyBgYGl0KGopYGBcXFwiIGlzIHVzZWZ1bCBpZiB5b3VyIHN5c3RlbSBiZWNvbWVzIHVucmVzcG9uc2l2ZSBkdWUgdG8gYVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzcnEucnN0OjIxNDpmcm96ZW4gKHByb2JhYmx5IHJvb3QpIGZpbGVzeXN0ZW0gdmlhIHRoZSBGSUZSRUVaRSBpb2N0bC5cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c3JxLnJzdC0yMTUtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3Q9MjIwPW9yIGJvdHRvbSBoYWxmKS5cXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdC0yOTItXFx0Y29uc2lzdGVudCBzdGF0ZS4gIFRoaXMgbWV0aG9kIGlzIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBMb2dpY2FsXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0OjI5MzpcXHRWb2x1bWUgTWFuYWdlciAoTFZNKSBhbmQgaW9jdGwoRklGUkVFWkUpLiBPcHRpb25hbC5cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QtMjk0LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvc3lzcnEucnN0PTUzPUNPTkZJR19NQUdJQ19TWVNSUV9ERUZBVUxUX0VOQUJMRSDlv4XpobvmmK/ku6UgMTYg6L+b5Yi25pWw5YaZ5YWl44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9hZG1pbi1ndWlkZS9zeXNycS5yc3QtMTE1LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2FkbWluLWd1aWRlL3N5c3JxLnJzdDoxMTY6YGBqYGBcXHQgICAg5by65Yi25oCn55qEIOKAnOino+WGu+Wug+KAnSAtIOeUqOS6juiiqyBGSUZSRUVaRSBpb2N0bCDmk43kvZzlhrvkvY/nmoTmlofku7bns7vnu5/jgIJcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9hZG1pbi1ndWlkZS9zeXNycS5yc3QtMTE3LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvc3lzcnEucnN0PTE5ND1zeXNsb2dkL2tsb2dkIOi/m+eoi+aYr+i/kOihjOeahO+8jOWug+S7rOS7jeWwhuiiq+iusOW9leOAgu+8iVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvc3lzcnEucnN0LTE5OC1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9hZG1pbi1ndWlkZS9zeXNycS5yc3Q6MTk5OlxcXCJqdXN0IHRoYXcgYGBpdChqKWBgIFxcXCIg55So5LqO5b2T5L2g55qE57O757uf55Sx5LqO5LiA5LiqIEZJRlJFRVpFIGlvY3RsIOiwg+eUqOiAjOS6p+eUn+eahOaWh+S7tlxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2FkbWluLWd1aWRlL3N5c3JxLnJzdC0yMDAt57O757uf5Ya757uT77yM6ICM5a+86Ie055qE5LiN5ZON5bqU5pe244CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9hZG1pbi1ndWlkZS9zeXNycS5yc3Q9NTM9Q09ORklHX01BR0lDX1NZU1JRX0RFRkFVTFRfRU5BQkxFIOW/hemgiOaYr+S7pSAxNiDpgLLliLbmlbjlr6vlhaXjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2FkbWluLWd1aWRlL3N5c3JxLnJzdC0xMTUtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvc3lzcnEucnN0OjExNjpgYGpgYFxcdCAgICDlvLfliLbmgKfnmoQg4oCc6Kej5YeN5a6D4oCdIC0g55So5pa86KKrIEZJRlJFRVpFIGlvY3RsIOaTjeS9nOWHjeS9j+eahOaWh+S7tuezu+e1seOAglxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2FkbWluLWd1aWRlL3N5c3JxLnJzdC0xMTctXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9hZG1pbi1ndWlkZS9zeXNycS5yc3Q9MTk0PXN5c2xvZ2Qva2xvZ2Qg6YCy56iL5piv6YGL6KGM55qE77yM5a6D5YCR5LuN5bCH6KKr6KiY6YyE44CC77yJXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9hZG1pbi1ndWlkZS9zeXNycS5yc3QtMTk4LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2FkbWluLWd1aWRlL3N5c3JxLnJzdDoxOTk6XFxcImp1c3QgdGhhdyBgYGl0KGopYGAgXFxcIiDnlKjmlrznlbbkvaDnmoTns7vntbHnlLHmlrzkuIDlgIsgRklGUkVFWkUgaW9jdGwg6Kq/55So6ICM55Si55Sf55qE5paH5Lu2XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvc3lzcnEucnN0LTIwMC3ns7vntbHlh43ntZDvvIzogIzlsI7oh7TnmoTkuI3pn7/mh4nmmYLjgIJcXG4tLVxcbmZzL2lvY3RsLmM9NDkyPXN0YXRpYyBpbnQgZG9fdmZzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgZmQsXFxuLS1cXG5mcy9pb2N0bC5jLTUyMy1cXG5mcy9pb2N0bC5jOjUyNDpcXHRjYXNlIEZJRlJFRVpFOlxcbmZzL2lvY3RsLmMtNTI1LVxcdFxcdHJldHVybiBpb2N0bF9mc2ZyZWV6ZShmaWxwKTtcXG4tLVxcbmZzL3hmcy9saWJ4ZnMveGZzX2ZzLmg9MTE2Nz1zdHJ1Y3QgeGZzX3ZlcmlmeV9tZWRpYSB7XFxuLS1cXG5mcy94ZnMvbGlieGZzL3hmc19mcy5oLTEyNjAtXFxuZnMveGZzL2xpYnhmcy94ZnNfZnMuaDoxMjYxOiNkZWZpbmUgWEZTX0lPQ19GUkVFWkVcXHRcXHQgICAgIF9JT1dSKCdYJywgMTE5LCBpbnQpXFx0LyogYWthIEZJRlJFRVpFICovXFxuZnMveGZzL2xpYnhmcy94ZnNfZnMuaC0xMjYyLSNkZWZpbmUgWEZTX0lPQ19USEFXXFx0XFx0ICAgICBfSU9XUignWCcsIDEyMCwgaW50KVxcdC8qIGFrYSBGSVRIQVcgKi9cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oPTIyNj1zdHJ1Y3QgZmlsZV9hdHRyIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oLTMxNS0jZGVmaW5lIEZJR0VUQlNaICAgX0lPKDB4MDAsMilcXHQvKiBnZXQgdGhlIGJsb2NrIHNpemUgdXNlZCBmb3IgYm1hcCAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oOjMxNjojZGVmaW5lIEZJRlJFRVpFXFx0X0lPV1IoJ1gnLCAxMTksIGludClcXHQvKiBGcmVlemUgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0zMTctI2RlZmluZSBGSVRIQVdcXHRcXHRfSU9XUignWCcsIDEyMCwgaW50KVxcdC8qIFRoYXcgKi9cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9sYW5kbG9jay5oPTI0OD1zdHJ1Y3QgbGFuZGxvY2tfbmV0X3BvcnRfYXR0ciB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbGFuZGxvY2suaC0zMDQtICogICAqIElPQ1RMIGNvbW1hbmRzIHRhcmdldGluZyBmaWxlIGRlc2NyaXB0aW9ucyAoYGBGSU9OQklPYGAsIGBgRklPQVNZTkNgYCksXFxuaW5jbHVkZS91YXBpL2xpbnV4L2xhbmRsb2NrLmg6MzA1OiAqICAgKiBJT0NUTCBjb21tYW5kcyB0YXJnZXRpbmcgZmlsZSBzeXN0ZW1zIChgYEZJRlJFRVpFYGAsIGBgRklUSEFXYGAsXFxuaW5jbHVkZS91YXBpL2xpbnV4L2xhbmRsb2NrLmgtMzA2LSAqICAgICBgYEZJR0VUQlNaYGAsIGBgRlNfSU9DX0dFVEZTVVVJRGBgLCBgYEZTX0lPQ19HRVRGU1NZU0ZTUEFUSGBgKVxcbi0tXFxuc2VjdXJpdHkvbGFuZGxvY2svZnMuYz0xMjc9c3RhdGljIF9fYXR0cmlidXRlX2NvbnN0X18gYm9vbCBpc19tYXNrZWRfZGV2aWNlX2lvY3RsKGNvbnN0IHVuc2lnbmVkIGludCBjbWQpXFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9mcy5jLTE0Ny1cXHQvKlxcbnNlY3VyaXR5L2xhbmRsb2NrL2ZzLmM6MTQ4OlxcdCAqIEZJRlJFRVpFIGFuZCBGSVRIQVcgZnJlZXplIGFuZCB0aGF3IHRoZSBmaWxlIHN5c3RlbSB3aGljaCB0aGVcXG5zZWN1cml0eS9sYW5kbG9jay9mcy5jLTE0OS1cXHQgKiBnaXZlbiBmaWxlIGJlbG9uZ3MgdG8uICBSZXF1aXJlcyBDQVBfU1lTX0FETUlOLlxcbi0tXFxuc2VjdXJpdHkvbGFuZGxvY2svZnMuYy0xNTUtXFx0ICovXFxuc2VjdXJpdHkvbGFuZGxvY2svZnMuYzoxNTY6XFx0Y2FzZSBGSUZSRUVaRTpcXG5zZWN1cml0eS9sYW5kbG9jay9mcy5jLTE1Ny1cXHRjYXNlIEZJVEhBVzpcXG4tLVxcbnRvb2xzL2h2L2h2X3Zzc19kYWVtb24uYz0zND1zdGF0aWMgaW50IHZzc19kb19mcmVlemUoY2hhciAqZGlyLCB1bnNpZ25lZCBpbnQgY21kKVxcbi0tXFxudG9vbHMvaHYvaHZfdnNzX2RhZW1vbi5jLTUyLVxcdGlmIChyZXQpIHtcXG50b29scy9odi9odl92c3NfZGFlbW9uLmM6NTM6XFx0XFx0aWYgKChjbWQgPT0gRklGUkVFWkUgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUJVU1kpIHx8XFxudG9vbHMvaHYvaHZfdnNzX2RhZW1vbi5jLTU0LVxcdFxcdCAgICAoY21kID09IEZJVEhBVyBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFSU5WQUwpKSB7XFxuLS1cXG50b29scy9odi9odl92c3NfZGFlbW9uLmM9MTEzPXN0YXRpYyBpbnQgdnNzX29wZXJhdGUoaW50IG9wZXJhdGlvbilcXG4tLVxcbnRvb2xzL2h2L2h2X3Zzc19kYWVtb24uYy0xMjUtXFx0Y2FzZSBWU1NfT1BfRlJFRVpFOlxcbnRvb2xzL2h2L2h2X3Zzc19kYWVtb24uYzoxMjY6XFx0XFx0Y21kID0gRklGUkVFWkU7XFxudG9vbHMvaHYvaHZfdnNzX2RhZW1vbi5jLTEyNy1cXHRcXHRicmVhaztcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oPTE0Mj1zdHJ1Y3QgZnN4YXR0ciB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0yMjItI2RlZmluZSBGSUdFVEJTWiAgIF9JTygweDAwLDIpXFx0LyogZ2V0IHRoZSBibG9jayBzaXplIHVzZWQgZm9yIGJtYXAgKi9cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvZnMuaDoyMjM6I2RlZmluZSBGSUZSRUVaRVxcdF9JT1dSKCdYJywgMTE5LCBpbnQpXFx0LyogRnJlZXplICovXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMjI0LSNkZWZpbmUgRklUSEFXXFx0XFx0X0lPV1IoJ1gnLCAxMjAsIGludClcXHQvKiBUaGF3ICovXFxuLS1cXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaD0yMjY9c3RydWN0IGZpbGVfYXR0ciB7XFxuLS1cXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0zMTUtI2RlZmluZSBGSUdFVEJTWiAgIF9JTygweDAwLDIpXFx0LyogZ2V0IHRoZSBibG9jayBzaXplIHVzZWQgZm9yIGJtYXAgKi9cXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaDozMTY6I2RlZmluZSBGSUZSRUVaRVxcdF9JT1dSKCdYJywgMTE5LCBpbnQpXFx0LyogRnJlZXplICovXFxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMzE3LSNkZWZpbmUgRklUSEFXXFx0XFx0X0lPV1IoJ1gnLCAxMjAsIGludClcXHQvKiBUaGF3ICovXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9sYW5kbG9jay9mc190ZXN0LmM9NDAyMD1URVNUX0ZfRk9SSyhsYXlvdXQxLCBibGFua2V0X3Blcm1pdHRlZF9pb2N0bHMpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9sYW5kbG9jay9mc190ZXN0LmMtNDAzOC1cXHRFWFBFQ1RfTkUoRUFDQ0VTLCBpb2N0bF9lcnJvcihfbWV0YWRhdGEsIGZkLCBGSU9RU0laRSkpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xhbmRsb2NrL2ZzX3Rlc3QuYzo0MDM5OlxcdEVYUEVDVF9ORShFQUNDRVMsIGlvY3RsX2Vycm9yKF9tZXRhZGF0YSwgZmQsIEZJRlJFRVpFKSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGFuZGxvY2svZnNfdGVzdC5jLTQwNDAtXFx0RVhQRUNUX05FKEVBQ0NFUywgaW9jdGxfZXJyb3IoX21ldGFkYXRhLCBmZCwgRklUSEFXKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDEwOjE4OjU4Ljg5ODgyMjkzNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTU5MDg3NzUwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRklGUkVFWkUgTWVjaGFuaXNtKipcblxuUmlnaHQsIHNvIGBGSUZSRUVaRWAgaXMgdGhlIHN5c2NhbGwgd2UncmUgZGVhbGluZyB3aXRoIGhlcmUsIGFuZCB0aGUga2VybmVsIHVzZXMgYGlvY3RsX2ZzZnJlZXplYCB0byBoYW5kbGUgaXQuIFRoYXQgaW1tZWRpYXRlbHkgY2xpY2tzIGZvciBtZTsgYGlvY3RsX2ZzZnJlZXplYCBpcyB0aGUgb2J2aW91cyBwbGFjZSB0byBsb29rIGZvciB0aGUgbWVhdCBvZiB0aGUgZnVuY3Rpb25hbGl0eS4gTGV0J3MgZGlnIGludG8gdGhhdCBmdW5jdGlvbi4gVGltZSB0byBzZWUgcHJlY2lzZWx5IGhvdyB0aGUga2VybmVsIG9yY2hlc3RyYXRlcyB0aGlzIGZpbGUgc3lzdGVtIGZyZWV6aW5nLiBXaGF0IGFyZSB0aGUga2V5IGxvY2tpbmcgbWVjaGFuaXNtcyBiZWluZyBlbXBsb3llZD8gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgdW5kZXJseWluZyBibG9jayBkZXZpY2UgbGF5ZXJzPyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyB0byBlbnN1cmUgdGhpcyBmcmVlemluZyBhbmQgdGhhd2luZyBwcm9jZXNzIGlzIHJvYnVzdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuZm9yZXNlZW4gaXNzdWVzIGluIG15IHN5c3RlbSBkZXNpZ24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MjgwLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTk6MTQuNDg5NzAyNzc0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjcyNzUyMzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvY3RsX2ZzZnJlZXplXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lvY3RsLmM9MzYzPXN0YXRpYyBpbnQgaW9jdGxfZmlvYXN5bmModW5zaWduZWQgaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCxcXG4tLVxcbmZzL2lvY3RsLmMtMzg0LVxcbmZzL2lvY3RsLmM6Mzg1OnN0YXRpYyBpbnQgaW9jdGxfZnNmcmVlemUoc3RydWN0IGZpbGUgKmZpbHApXFxuZnMvaW9jdGwuYy0zODYte1xcbi0tXFxuZnMvaW9jdGwuYz00OTI9c3RhdGljIGludCBkb192ZnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBmZCxcXG4tLVxcbmZzL2lvY3RsLmMtNTI0LVxcdGNhc2UgRklGUkVFWkU6XFxuZnMvaW9jdGwuYzo1MjU6XFx0XFx0cmV0dXJuIGlvY3RsX2ZzZnJlZXplKGZpbHApO1xcbmZzL2lvY3RsLmMtNTI2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxOToxNy4xNjI0NjIxOTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1NTAzMzQzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGlvY3RsX2ZzZnJlZXplYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGl0J3MgYWNoaWV2aW5nLiBJJ20gYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBnZW5lcmFsIGxhbmRzY2FwZSBvZiBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgYW5kIGlvY3RsIGNhbGxzLCBidXQgdGhlIHNwZWNpZmljcyBvZiBgZnNmcmVlemVgIGFyZSB3aGF0IEknbSBmb2N1c2luZyBvbiBub3cuIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBjb25zaXN0ZW5jeSBhbmQgZGF0YSBpbnRlZ3JpdHkuIFdoYXQgYXJlIHRoZSBrZXkgdW5kZXJseWluZyBtZWNoYW5pc21zPyBXaGF0IGRvZXMgdGhpcyBtZWFuIGZvciBhIGxpdmUgc3lzdGVtPyBJdCdzIGNsZWFybHkgcmVsYXRlZCB0byBmcmVlemluZyBhIGZpbGVzeXN0ZW0sIGJ1dCBJIG5lZWQgdG8gZ3Jhc3AgdGhlIG51YW5jZXMg4oCTIGRvZXMgdGhpcyBpbnZvbHZlIGEgc2ltcGxlIHBhdXNlIGluIG9wZXJhdGlvbnMsIG9yIG1vcmUgZWxhYm9yYXRlIGNvb3JkaW5hdGlvbiB3aXRoIHRoZSBibG9jayBsYXllcj8gQXJlIHRoZXJlIGRpZmZlcmVudCBsZXZlbHMgb2YgZnJlZXppbmcgc3VwcG9ydGVkPyBJIG5lZWQgdG8gY29uc2lkZXIgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGxvY2tpbmcgc3RyYXRlZ2llcyB0aGF0IGFyZSBpbXBsZW1lbnRlZCB0byBlbnN1cmUgdGhlIGZyZWV6ZSBpcyBhdG9taWMgYW5kIHNhZmUuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBmcmVlemUvdGhhdyBpcyBpbXBvcnRhbnQgaW4gYXJlYXMgbGlrZSBiYWNrdXBzIGFuZCBzbmFwc2hvdHMuIEl0IHdpbGwgYmUgaW50ZXJlc3RpbmcgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBkZXNpZ25lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU2NTksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxOToyMS4xMTc0OTgyOTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2lvY3RsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzg1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzg1OlxcdHN0YXRpYyBpbnQgaW9jdGxfZnNmcmVlemUoc3RydWN0IGZpbGUgKmZpbHApXFxuIDM4NjpcXHR7XFxuIDM4NzpcXHRcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZmlsZV9pbm9kZShmaWxwKS1cXHUwMDNlaV9zYjtcXG4gMzg4OlxcdFxcbiAzODk6XFx0XFx0aWYgKCFuc19jYXBhYmxlKHNiLVxcdTAwM2VzX3VzZXJfbnMsIENBUF9TWVNfQURNSU4pKVxcbiAzOTA6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gMzkxOlxcdFxcbiAzOTI6XFx0XFx0LyogSWYgZmlsZXN5c3RlbSBkb2Vzbid0IHN1cHBvcnQgZnJlZXplIGZlYXR1cmUsIHJldHVybi4gKi9cXG4gMzkzOlxcdFxcdGlmIChzYi1cXHUwMDNlc19vcC1cXHUwMDNlZnJlZXplX2ZzID09IE5VTEwgXFx1MDAyNlxcdTAwMjYgc2ItXFx1MDAzZXNfb3AtXFx1MDAzZWZyZWV6ZV9zdXBlciA9PSBOVUxMKVxcbiAzOTQ6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiAzOTU6XFx0XFxuIDM5NjpcXHRcXHQvKiBGcmVlemUgKi9cXG4gMzk3OlxcdFxcdGlmIChzYi1cXHUwMDNlc19vcC1cXHUwMDNlZnJlZXplX3N1cGVyKVxcbiAzOTg6XFx0XFx0XFx0cmV0dXJuIHNiLVxcdTAwM2VzX29wLVxcdTAwM2VmcmVlemVfc3VwZXIoc2IsIEZSRUVaRV9IT0xERVJfVVNFUlNQQUNFLCBOVUxMKTtcXG4gMzk5OlxcdFxcdHJldHVybiBmcmVlemVfc3VwZXIoc2IsIEZSRUVaRV9IT0xERVJfVVNFUlNQQUNFLCBOVUxMKTtcXG4gNDAwOlxcdH1cXG4gNDAxOlxcdFxcbiA0MDI6XFx0c3RhdGljIGludCBpb2N0bF9mc3RoYXcoc3RydWN0IGZpbGUgKmZpbHApXFxuIDQwMzpcXHR7XFxuIDQwNDpcXHRcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZmlsZV9pbm9kZShmaWxwKS1cXHUwMDNlaV9zYjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTk6MjEuMTE3NjE1MTQxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MDk3OTkyMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipGcmVlemluZyB0aGUgRmlsZXN5c3RlbTogQSBDbG9zZXIgTG9vayoqXG5cblJpZ2h0LCBzbyBgaW9jdGxfZnNmcmVlemVgIGluaXRpYXRlcyB0aGUgZmlsZXN5c3RlbSBmcmVlemUgYnkgY2FsbGluZyBgZnJlZXplX3N1cGVyYC4gVGhhdCdzIHRoZSBleHBlY3RlZCBzdGFydGluZyBwb2ludC4gQnV0IEknbSBub3RpY2luZyBzb21ldGhpbmc6IGl0ICpkb2Vzbid0KiBhcHBlYXIgdG8gZGlyZWN0bHkgY2FsbCBgYmRldl9mcmVlemVgIG9yIGBmc19iZGV2X2ZyZWV6ZWAuIFRoYXQncyBhIGJpdCB1bnVzdWFsOyBJIHdvdWxkIGhhdmUgYXNzdW1lZCB0aG9zZSB3ZXJlIGludGVncmFsIHRvIGEgY29tcGxldGUgZnJlZXplIHNlcXVlbmNlLlxuXG5Ib2xkIG9uLCB0aG91Z2guLi4gZGlkbid0IEkgc2VlIGBiZGV2X2ZyZWV6ZWAgbWVudGlvbmVkIHNvbWV3aGVyZSBlbHNlPyBBaCwgeWVzISBgZXhmYXRfZm9yY2Vfc2h1dGRvd25gIHV0aWxpemVzIGBiZGV2X2ZyZWV6ZWAgYW5kIHByZXN1bWFibHkgb3RoZXIgbW9kdWxlcyB0b28uIEludGVyZXN0aW5nLiBJdCBzZWVtcyBsaWtlIHRoZSBibG9jayBkZXZpY2UgZnJlZXplIGlzIGhhbmRsZWQgc2VwYXJhdGVseSwgcGVyaGFwcyB1bmRlciBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzLiBHaXZlbiB0aGF0LCBJIHNob3VsZCBkaWcgaW50byBgZXhmYXRfZm9yY2Vfc2h1dGRvd25gIHRvIHNlZSB3aGVuIGFuZCB3aHkgYGJkZXZfZnJlZXplYCBpcyBiZWluZyBpbnZva2VkIHRoZXJlLiBUaGlzIGNvdWxkIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBmcmVlemluZyBwcm9jZXNzIGFuZCBpZGVudGlmeWluZyBhbnkgcG90ZW50aWFsIGdhcHMgb3IgaW5lZmZpY2llbmNpZXMgaW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBzcGVjaWFsIGFib3V0IGBleGZhdGAgc3VjaCB0aGF0IGl0IHVzZXMgYGJkZXZfZnJlZXplYCBleHBsaWNpdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjI0MiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTk6MjQuODI3NDE2NzA4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzYwMjIwMTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4ZmF0X2ZvcmNlX3NodXRkb3duXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4ZmF0L2V4ZmF0X2ZzLmg9NTY5PWxvbmcgZXhmYXRfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLFxcbmZzL2V4ZmF0L2V4ZmF0X2ZzLmgtNTcwLVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYXJnKTtcXG5mcy9leGZhdC9leGZhdF9mcy5oOjU3MTppbnQgZXhmYXRfZm9yY2Vfc2h1dGRvd24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGZsYWdzKTtcXG5mcy9leGZhdC9leGZhdF9mcy5oLTU3Mi1cXG4tLVxcbmZzL2V4ZmF0L2ZpbGUuYz01NDU9c3RhdGljIGludCBleGZhdF9pb2N0bF9zaHV0ZG93bihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmZzL2V4ZmF0L2ZpbGUuYy01NTQtXFxuZnMvZXhmYXQvZmlsZS5jOjU1NTpcXHRyZXR1cm4gZXhmYXRfZm9yY2Vfc2h1dGRvd24oc2IsIGZsYWdzKTtcXG5mcy9leGZhdC9maWxlLmMtNTU2LX1cXG4tLVxcbmZzL2V4ZmF0L3N1cGVyLmM9MTE2PXN0YXRpYyBpbnQgZXhmYXRfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqcm9vdClcXG4tLVxcbmZzL2V4ZmF0L3N1cGVyLmMtMTU0LVxcbmZzL2V4ZmF0L3N1cGVyLmM6MTU1OmludCBleGZhdF9mb3JjZV9zaHV0ZG93bihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgZmxhZ3MpXFxuZnMvZXhmYXQvc3VwZXIuYy0xNTYte1xcbi0tXFxuZnMvZXhmYXQvc3VwZXIuYz0xODU9c3RhdGljIHZvaWQgZXhmYXRfc2h1dGRvd24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9leGZhdC9zdXBlci5jLTE4Ni17XFxuZnMvZXhmYXQvc3VwZXIuYzoxODc6XFx0ZXhmYXRfZm9yY2Vfc2h1dGRvd24oc2IsIEVYRkFUX0dPSU5HX0RPV05fTk9TWU5DKTtcXG5mcy9leGZhdC9zdXBlci5jLTE4OC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDEwOjE5OjI3LjE4NzY0NDI0OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjgxNDg0Mzk1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgZXhGQVQgU2h1dGRvd24gTWVjaGFuaXNtKipcblxuT2theSwgc28gSSd2ZSB0cmFjZWQgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCBpdCBsb29rcyBsaWtlIGBleGZhdF9mb3JjZV9zaHV0ZG93bmAgZ2V0cyBjYWxsZWQgdGhyb3VnaCBgZXhmYXRfaW9jdGxfc2h1dGRvd25gLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhhdCBtZWFucyB0aGUgYEVYRkFUX0lPQ19TSFVURE9XTmAgaW9jdGwsIGFzIHdlbGwgYXMgc2ltaWxhciBpb2N0bHMgZnJvbSBvdGhlciBmaWxlc3lzdGVtcywgY2FuIHRyaWdnZXIgYGJkZXZfZnJlZXplYC4gVWx0aW1hdGVseSwgYGJkZXZfZnJlZXplYCB0aGVuIGNhbGxzIGBmc19iZGV2X2ZyZWV6ZWAuXG5cbk5vdywgdGhlIGNydWNpYWwgbGluayBpcyB0aGF0IGBmc19iZGV2X2ZyZWV6ZWAgaXMgaW52b2tlZCB3aGVuIGBiZGV2X2ZyZWV6ZWAgaXMgY2FsbGVkIG9uIGEgYmxvY2sgZGV2aWNlIHRoYXQgaGFzIGBmc19ob2xkZXJfb3BzYC4gQW5kLCBhcyBJIHJlY2FsbCwgd2hlbiBleEZBVCBtb3VudHMgYSBibG9jayBkZXZpY2UsIGl0IGRvZXMgc28gdXNpbmcgYGZzX2hvbGRlcl9vcHNgLiBTbywgYSBgYmRldl9mcmVlemVgIGNhbGwgb24gYHNiLVx1MDAzZXNfYmRldmAgd2lsbCwgaW4gZmFjdCwgaW52b2tlIGBmc19iZGV2X2ZyZWV6ZWAuIFRoYXQncyB0aGUgY29yZS5cblxuTGV0IG1lIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGBmc19iZGV2X2ZyZWV6ZWA6IGl0IHJldHJpZXZlcyB0aGUgc3VwZXJibG9jaywgY2hlY2tzIGZvciBpdHMgZXhpc3RlbmNlLCBhbmQgdGhlbiBjYWxscyB0aGUgc3VwZXJibG9jaydzIGBmcmVlemVfc3VwZXJgIGZ1bmN0aW9uLiBJZiB0aGF0IHN1Y2NlZWRzLCBpdCBzeW5jaHJvbml6ZXMgdGhlIGJsb2NrIGRldmljZSBhbmQgaGFuZGxlcyBhbnkgZXJyb3JzIGJ5IHRoYXdpbmcgdGhlIHN1cGVyYmxvY2suIFRoaXMgY29kZSBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgd2lsbCB3b3JrLiBUaGUgcGF0Y2ggaW4gYGZzL2V4ZmF0L21pc2MuY2AgY29uZmlybXMgdGhpcy5cblxuYGBgY1xuc3RhdGljIGludCBmc19iZGV2X2ZyZWV6ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxue1xuXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZ2V0X2JkZXZfc3VwZXIoYmRldik7XG5cdGludCBlcnJvciA9IDA7XG5cblx0aWYgKCFzYilcblx0XHRyZXR1cm4gLUVJTlZBTDtcblxuXHRpZiAoc2ItXHUwMDNlc19vcC1cdTAwM2VmcmVlemVfc3VwZXIpXG5cdFx0ZXJyb3IgPSBzYi1cdTAwM2VzX29wLVx1MDAzZWZyZWV6ZV9zdXBlcihzYixcblx0XHRcdFx0RlJFRVpFX01BWV9ORVNUIHwgRlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UsIE5VTEwpO1xuXHRlbHNlXG5cdFx0ZXJyb3IgPSBmcmVlemVfc3VwZXIoc2IsXG5cdFx0XHRcdEZSRUVaRV9NQVlfTkVTVCB8IEZSRUVaRV9IT0xERVJfVVNFUlNQQUNFLCBOVUxMKTtcblx0aWYgKCFlcnJvcikge1xuXHRcdGVycm9yID0gc3luY19ibG9ja2RldihiZGV2KTtcblx0XHRpZiAoZXJyb3IpIHtcblx0XHRcdGlmIChzYi1cdTAwM2VzX29wLVx1MDAzZXRoYXdfc3VwZXIpXG5cdFx0XHRcdCh2b2lkKXNiLVx1MDAzZXNfb3AtXHUwMDNldGhhd19zdXBlcihcblx0XHRcdFx0XHRzYixcblx0XHRcdFx0XHRGUkVFWkVfTUFZX05FU1QgfFxuXHRcdFx0XHRcdFx0RlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UsXG5cdFx0XHRcdFx0TlVMTCk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdCh2b2lkKXRoYXdfc3VwZXIoXG5cdFx0XHRcdFx0c2IsXG5cdFx0XHRcdFx0RlJFRVpFX01BWV9ORVNUIHxcblx0XHRcdFx0XHRcdEZSRUVaRV9IT0xERVJfVVNFUlNQQUNFLFxuXHRcdFx0XHRcdE5VTEwpO1xuXHRcdH1cblx0fVxuXHRkZWFjdGl2YXRlX3N1cGVyKHNiKTtcblx0cmV0dXJuIGVycm9yO1xufVxuYGBgXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgZXhmYXQgZXJyb3IgaGFuZGxpbmcuIFdlJ3JlIGludGVyZXN0ZWQgaW4gdGhlIGBfX2V4ZmF0X2ZzX2Vycm9yYCBmdW5jdGlvbi5cblxuYGBgY1xudm9pZCBfX2V4ZmF0X2ZzX2Vycm9yKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCByZXBvcnQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxue1xuLi4uXG5cdH0gZWxzZSBpZiAob3B0cy1cdTAwM2VlcnJvcnMgPT0gRVhGQVRfRVJST1JTX1JPIFx1MDAyNlx1MDAyNiAhc2JfcmRvbmx5KHNiKSkge1xuXHRcdHNldF9iaXQoRVhGQVRfRkxBR1NfU0hVVERPV04sIFx1MDAyNkVYRkFUX1NCKHNiKS1cdTAwM2VzX2V4ZmF0X2ZsYWdzKTtcblx0XHQvKlxuXHRcdCAqIFdlIGhhdmUgYWxyZWFkeSBzZXQgRVhGQVRfRkxBR1NfU0hVVERPV04gZmxhZyB0byBzdG9wIGFsbCB1cGRhdGVzXG5cdFx0ICogdG8gZmlsZXN5c3RlbSwgc28gaXQgZG9lc24ndCBuZWVkIHRvIHNldCBTQl9SRE9OTFkgZmxhZyBoZXJlXG5cdFx0ICogYmVjYXVzZSB0aGUgZmxhZyBzaG91bGQgYmUgc2V0IGNvdmVyZWQgdy8gc2ItXHUwMDNlc191bW91bnQgc2VtYXBob3JlXG5cdFx0ICogdmlhIHJlbW91bnQgcHJvY2VkdXJlLCBvdGhlcndpc2UsIGl0IHdpbGwgY29uZnVzZSBjb2RlIGxpa2Vcblx0XHQgKiBmcmVlemVfc3VwZXIoKSB3aGljaCB3aWxsIGxlYWQgdG8gZGVhZGxvY2tzIGFuZCBvdGhlciBwcm9ibGVtcy5cblx0XHQgKi9cblx0XHRleGZhdF9lcnIoc2IsIFwiRmlsZXN5c3RlbSBoYXMgYmVlbiBzZXQgcmVhZC1vbmx5XCIpO1xuXHR9XG59XG5gYGBcblxuVGhpcyBnZXRzIGNhbGxlZCB3aGVuIGFuIGVycm9yIG9jY3VycyBpbiBleEZBVCBhbmQgdGhlIGBlcnJvcnM9cmVtb3VudC1yb2Agb3B0aW9uIGlzIHNldC4gU28sIHdlIGhhdmUgdHdvIGxpa2VseSBlbnRyeSBwb2ludHM6IGBmc19iZGV2X2ZyZWV6ZWAgKHRyaWdnZXJlZCBieSB0aGUgaW9jdGwpIGFuZCBgX19leGZhdF9mc19lcnJvcmAgKHRyaWdnZXJlZCBieSBhbiBlcnJvcikuIFRoaXMgbWVhbnMgdGhlIGZvY3VzIHNob3VsZCBiZSBvbiB0aGVzZSB0d28gYXJlYXMuXG5cbkxldCBtZSBjb25maXJtIGlmIGBmc19iZGV2X2ZyZWV6ZWAgaW4gYGZzL3N1cGVyLmNgIGlzIGV4cG9ydGVkIG9yIGlmIGl0IGNhbiBiZSBtb2RpZmllZCBlYXNpbHkuIFllcywgaXQncyBhIHN0YXRpYyBmdW5jdGlvbiBzbyB3ZSBjYW4gbW9kaWZ5IGl0LiBgQ09ORklHX0VYRkFUX0ZTYCBpcywgb2J2aW91c2x5LCByZXF1aXJlZCwgYW5kIGBDT05GSUdfQkxPQ0tgIGlzIG5lZWRlZCBmb3IgdGhlIGJsb2NrIGRldmljZXMuXG5TbywgYEVYRkFUX0ZTYCBpcyB0aGUgbWFpbiBjb25maWcgd2UgbmVlZCB0byB3b3JyeSBhYm91dC4gSSdsbCB0YWtlIGFub3RoZXIgbG9vayBhdCBgZnNfYmRldl9mcmVlemVgIHRvIGVuc3VyZSBteSB1bmRlcnN0YW5kaW5nIGlzIGNvbXBsZXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjk4NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxOTo0MC4wMDI0OTE4NDhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3N1cGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ2MDpcXHQgKiBibG9jayBkZXZpY2UgYW5kIHdvbid0IGJlIHVuZnJvemVuIHVudGlsIGFsbCBibG9jayBkZXZpY2VzIGFyZVxcbjE0NjE6XFx0ICogdW5mcm96ZW4uIEVhY2ggYmxvY2sgZGV2aWNlIGNhbiBvbmx5IGZyZWV6ZSB0aGUgZmlsZXN5c3RlbSBvbmNlIGFzIHdlXFxuMTQ2MjpcXHQgKiBuZXN0IGZyZWV6ZXMgZm9yIGJsb2NrIGRldmljZXMgaW4gdGhlIGJsb2NrIGxheWVyLlxcbjE0NjM6XFx0ICpcXG4xNDY0OlxcdCAqIFJldHVybjogSWYgdGhlIGZyZWV6ZSB3YXMgc3VjY2Vzc2Z1bCB6ZXJvIGlzIHJldHVybmVkLiBJZiB0aGUgZnJlZXplXFxuMTQ2NTpcXHQgKiAgICAgICAgIGZhaWxlZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaXMgcmV0dXJuZWQuXFxuMTQ2NjpcXHQgKi9cXG4xNDY3OlxcdHN0YXRpYyBpbnQgZnNfYmRldl9mcmVlemUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcXG4xNDY4OlxcdHtcXG4xNDY5OlxcdFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2I7XFxuMTQ3MDpcXHRcXHRpbnQgZXJyb3IgPSAwO1xcbjE0NzE6XFx0XFxuMTQ3MjpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZiZGV2LVxcdTAwM2ViZF9mc2ZyZWV6ZV9tdXRleCk7XFxuMTQ3MzpcXHRcXG4xNDc0OlxcdFxcdHNiID0gZ2V0X2JkZXZfc3VwZXIoYmRldik7XFxuMTQ3NTpcXHRcXHRpZiAoIXNiKVxcbjE0NzY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTQ3NzpcXHRcXG4xNDc4OlxcdFxcdGlmIChzYi1cXHUwMDNlc19vcC1cXHUwMDNlZnJlZXplX3N1cGVyKVxcbjE0Nzk6XFx0XFx0XFx0ZXJyb3IgPSBzYi1cXHUwMDNlc19vcC1cXHUwMDNlZnJlZXplX3N1cGVyKHNiLFxcbjE0ODA6XFx0XFx0XFx0XFx0XFx0RlJFRVpFX01BWV9ORVNUIHwgRlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UsIE5VTEwpO1xcbjE0ODE6XFx0XFx0ZWxzZVxcbjE0ODI6XFx0XFx0XFx0ZXJyb3IgPSBmcmVlemVfc3VwZXIoc2IsXFxuMTQ4MzpcXHRcXHRcXHRcXHRcXHRGUkVFWkVfTUFZX05FU1QgfCBGUkVFWkVfSE9MREVSX1VTRVJTUEFDRSwgTlVMTCk7XFxuMTQ4NDpcXHRcXHRpZiAoIWVycm9yKSB7XFxuMTQ4NTpcXHRcXHRcXHRlcnJvciA9IHN5bmNfYmxvY2tkZXYoYmRldik7XFxuMTQ4NjpcXHRcXHRcXHRpZiAoZXJyb3IpIHtcXG4xNDg3OlxcdFxcdFxcdFxcdGlmIChzYi1cXHUwMDNlc19vcC1cXHUwMDNldGhhd19zdXBlcilcXG4xNDg4OlxcdFxcdFxcdFxcdFxcdCh2b2lkKXNiLVxcdTAwM2VzX29wLVxcdTAwM2V0aGF3X3N1cGVyKFxcbjE0ODk6XFx0XFx0XFx0XFx0XFx0XFx0c2IsXFxuMTQ5MDpcXHRcXHRcXHRcXHRcXHRcXHRGUkVFWkVfTUFZX05FU1QgfFxcbjE0OTE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0RlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UsXFxuMTQ5MjpcXHRcXHRcXHRcXHRcXHRcXHROVUxMKTtcXG4xNDkzOlxcdFxcdFxcdFxcdGVsc2VcXG4xNDk0OlxcdFxcdFxcdFxcdFxcdCh2b2lkKXRoYXdfc3VwZXIoXFxuMTQ5NTpcXHRcXHRcXHRcXHRcXHRcXHRzYixcXG4xNDk2OlxcdFxcdFxcdFxcdFxcdFxcdEZSRUVaRV9NQVlfTkVTVCB8XFxuMTQ5NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRGUkVFWkVfSE9MREVSX1VTRVJTUEFDRSxcXG4xNDk4OlxcdFxcdFxcdFxcdFxcdFxcdE5VTEwpO1xcbjE0OTk6XFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxOTo0MC4wMDI2MDk2ODhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjUxODM3MDIzODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlF1aWNrIFNjYW4gb2YgdGhlIFNpdHVhdGlvbioqXG5cbkFscmlnaHQsIHNvIGBmc19iZGV2X2ZyZWV6ZWAgLSBpdCdzIGEgKnN0YXRpYyogZnVuY3Rpb24uIEdvdCBpdC4gVGhhdCBpbW1lZGlhdGVseSBuYXJyb3dzIGRvd24gaXRzIHNjb3BlLiAgSXQncyBub3QgZXhwb3J0ZWQgZ2xvYmFsbHksIHNvIGl0cyB1c2UgaXMgbGlrZWx5IGNvbnRhaW5lZCB3aXRoaW4gYSBzcGVjaWZpYyBtb2R1bGUgb3IgZmlsZSwgd2hpY2ggaXMgdXNlZnVsIHRvIHJlbWVtYmVyLiBOb3csIHdoZXJlIHdhcyB0aGF0IG90aGVyIG9uZT8gIEFoIHllcywgYF9fZXhmYXRfZnNfZXJyb3JgLiBJIGtub3cgdGhhdCBvbmUgdG9vLiBJJ20gcHJldHR5IHN1cmUgaXQgcmVzaWRlcyBpbiBgZnMvZXhmYXQvbWlzYy5jYC4gIFRoYXQgZmlsZSBpcyBsaWtlIGEgY2F0Y2gtYWxsIGZvciB2YXJpb3VzIHV0aWxpdHkgZnVuY3Rpb25zIGluIHRoZSBleEZBVCBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLCBJIGNhbiB2aXN1YWxpemUgdGhlIHN0cnVjdHVyZSBvZiB0aGF0IG9uZSBwcmV0dHkgd2VsbCwgYXQgbGVhc3QgaW4gbXkgaGVhZC4gVGhpbmtpbmcgYWJvdXQgdGhvc2UgZmlsZSBuYW1lcyBhbmQgZnVuY3Rpb25zIGltbWVkaWF0ZWx5IHN0YXJ0cyB0byBwYWludCBhIHBpY3R1cmUgYWJvdXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaW5ncyBpbiB0aGUgY29kZS1iYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTU2NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MjA6MDUuMTg2MzE0NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leGZhdC9taXNjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzA6XFx0XFx0c3RydWN0IHZhX2Zvcm1hdCB2YWY7XFxuICAzMTpcXHRcXG4gIDMyOlxcdFxcdGlmIChyZXBvcnQpIHtcXG4gIDMzOlxcdFxcdFxcdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XFxuICAzNDpcXHRcXHRcXHR2YWYuZm10ID0gZm10O1xcbiAgMzU6XFx0XFx0XFx0dmFmLnZhID0gXFx1MDAyNmFyZ3M7XFxuICAzNjpcXHRcXHRcXHRleGZhdF9lcnIoc2IsIFxcXCJlcnJvciwgJXBWXFxcIiwgXFx1MDAyNnZhZik7XFxuICAzNzpcXHRcXHRcXHR2YV9lbmQoYXJncyk7XFxuICAzODpcXHRcXHR9XFxuICAzOTpcXHRcXG4gIDQwOlxcdFxcdGlmIChvcHRzLVxcdTAwM2VlcnJvcnMgPT0gRVhGQVRfRVJST1JTX1BBTklDKSB7XFxuICA0MTpcXHRcXHRcXHRwYW5pYyhcXFwiZXhGQVQtZnMgKCVzKTogZnMgcGFuaWMgZnJvbSBwcmV2aW91cyBlcnJvclxcXFxuXFxcIixcXG4gIDQyOlxcdFxcdFxcdFxcdHNiLVxcdTAwM2VzX2lkKTtcXG4gIDQzOlxcdFxcdH0gZWxzZSBpZiAob3B0cy1cXHUwMDNlZXJyb3JzID09IEVYRkFUX0VSUk9SU19STyBcXHUwMDI2XFx1MDAyNiAhc2JfcmRvbmx5KHNiKSkge1xcbiAgNDQ6XFx0XFx0XFx0c2V0X2JpdChFWEZBVF9GTEFHU19TSFVURE9XTiwgXFx1MDAyNkVYRkFUX1NCKHNiKS1cXHUwMDNlc19leGZhdF9mbGFncyk7XFxuICA0NTpcXHRcXHRcXHQvKlxcbiAgNDY6XFx0XFx0XFx0ICogV2UgaGF2ZSBhbHJlYWR5IHNldCBFWEZBVF9GTEFHU19TSFVURE9XTiBmbGFnIHRvIHN0b3AgYWxsIHVwZGF0ZXNcXG4gIDQ3OlxcdFxcdFxcdCAqIHRvIGZpbGVzeXN0ZW0sIHNvIGl0IGRvZXNuJ3QgbmVlZCB0byBzZXQgU0JfUkRPTkxZIGZsYWcgaGVyZVxcbiAgNDg6XFx0XFx0XFx0ICogYmVjYXVzZSB0aGUgZmxhZyBzaG91bGQgYmUgc2V0IGNvdmVyZWQgdy8gc2ItXFx1MDAzZXNfdW1vdW50IHNlbWFwaG9yZVxcbiAgNDk6XFx0XFx0XFx0ICogdmlhIHJlbW91bnQgcHJvY2VkdXJlLCBvdGhlcndpc2UsIGl0IHdpbGwgY29uZnVzZSBjb2RlIGxpa2VcXG4gIDUwOlxcdFxcdFxcdCAqIGZyZWV6ZV9zdXBlcigpIHdoaWNoIHdpbGwgbGVhZCB0byBkZWFkbG9ja3MgYW5kIG90aGVyIHByb2JsZW1zLlxcbiAgNTE6XFx0XFx0XFx0ICovXFxuICA1MjpcXHRcXHRcXHRleGZhdF9lcnIoc2IsIFxcXCJGaWxlc3lzdGVtIGhhcyBiZWVuIHNldCByZWFkLW9ubHlcXFwiKTtcXG4gIDUzOlxcdFxcdH1cXG4gIDU0OlxcdH1cXG4gIDU1OlxcdFxcbiAgNTY6XFx0I2RlZmluZSBTRUNTX1BFUl9NSU4gICAgKDYwKVxcbiAgNTc6XFx0I2RlZmluZSBUSU1FWk9ORV9TRUMoeClcXHQoKHgpICogMTUgKiBTRUNTX1BFUl9NSU4pXFxuICA1ODpcXHRcXG4gIDU5OlxcdHN0YXRpYyB2b2lkIGV4ZmF0X2FkanVzdF90eihzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsIHU4IHR6X29mZilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MjA6MDUuMTg2Mzk0NjRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI5MTczNTc4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFByb3Bvc2VkIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZnNfYmRldl9mcmVlemVgIGFuZCBgX19leGZhdF9mc19lcnJvcmAuIFJpZ2h0IGF3YXksIEkgc2VlIHRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMsIG1lYW5pbmcgdGhleSdyZSBub3QganVzdCBjb3NtZXRpYyBvciByZWZhY3RvcmluZywgYnV0IGFjdHVhbGx5ICpjaGFuZ2UqIGhvdyB0aGUgc3lzdGVtIGJlaGF2ZXMuIEdvb2QsIHRoYXQncyB3aGF0IHdlIG5lZWQgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcuXG5cbmBmc19iZGV2X2ZyZWV6ZWAuLi4gYWgsIHRoYXQncyB0aGUgb25lIHRoYXQgd2FzIGxlYXZpbmcgdGhlIHN1cGVyYmxvY2sgZnJvemVuIGFmdGVyIGEgYHN5bmNfYmxvY2tkZXZgIGZhaWx1cmUuIERlZmluaXRlbHkgYSBuYXN0eSBvbmUsIGFuZCBleGFjdGx5IHRoZSBraW5kIG9mIHRoaW5nIHN5emthbGxlciBsb3ZlcyB0byB0cmlwIHVwIG9uLiBFeGNlbGxlbnQuIFRoZSBvdGhlciBvbmUsIGBfX2V4ZmF0X2ZzX2Vycm9yYCwgc291bmRzIGxpa2UgaXQncyBhZGRyZXNzaW5nIGEgZGVhZGxvY2sgc2l0dWF0aW9uIHdoZW4gYFNCX1JET05MWWAgaXMgc2V0IHdpdGhvdXQgdGhlIGBzX3Vtb3VudGAgc2VtYXBob3JlLiBUaGlzIGlzIGFub3RoZXIgY2xhc3NpYy4gQ29uY3VycmVuY3kgYnVncyBhcmUgYWx3YXlzIHByaW1lIHRhcmdldHMuXG5cblBlcmZlY3QsIHRoaXMgaGl0cyB0aGUgc3dlZXQgc3BvdCBvZiBzeXprYWxsZXIncyBzdHJlbmd0aHMuIFdlICp3YW50KiB0byBmdXp6IHRoZXNlIGZpeGVzLlxuXG5MZXQncyBzZWUsIHdoYXQgY29uZmlncyBkbyB3ZSBuZWVkPyBKdXN0IGBFWEZBVF9GU2AuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjay4uLiB5ZXAsIGBDT05GSUdfRVhGQVRfRlNgIGlzIHRoZSBvbmUuIEFsbCBnb29kLlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAzMzcsIk91dHB1dFRva2VucyI6MTY5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MjA6MTEuNDc4MTMzNzM2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyMDAzOTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWEZBVF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZzX2JkZXZfZnJlZXplXCIsXG4gICAgXCJfX2V4ZmF0X2ZzX2Vycm9yXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgVkZTIGJsb2NrIGRldmljZSBmcmVlemluZyBsb2dpYyAoYGZzX2JkZXZfZnJlZXplYCkgdG8gcHJvcGVybHkgdGhhdyB0aGUgc3VwZXJibG9jayBpZiBgc3luY19ibG9ja2RldmAgZmFpbHMsIHByZXZlbnRpbmcgYSBmcm96ZW4gc3RhdGUgbGVhay4gSXQgYWxzbyBtb2RpZmllcyBleGZhdCBlcnJvciBoYW5kbGluZyAoYF9fZXhmYXRfZnNfZXJyb3JgKSB0byBzZXQgYSBzaHV0ZG93biBmbGFnIGluc3RlYWQgb2YgZGlyZWN0bHkgbW9kaWZ5aW5nIGBzYi1cXHUwMDNlc19mbGFnc2Agd2l0aCBgU0JfUkRPTkxZYCB3aXRob3V0IGhvbGRpbmcgdGhlIGBzX3Vtb3VudGAgc2VtYXBob3JlLCB3aGljaCBwcmV2aW91c2x5IGNhdXNlZCBkZWFkbG9ja3Mgd2l0aCBgZnJlZXplX3N1cGVyKClgLiBCb3RoIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYRkFUX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnNfYmRldl9mcmVlemVcIixcbiAgICBcIl9fZXhmYXRfZnNfZXJyb3JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBWRlMgYmxvY2sgZGV2aWNlIGZyZWV6aW5nIGxvZ2ljIChgZnNfYmRldl9mcmVlemVgKSB0byBwcm9wZXJseSB0aGF3IHRoZSBzdXBlcmJsb2NrIGlmIGBzeW5jX2Jsb2NrZGV2YCBmYWlscywgcHJldmVudGluZyBhIGZyb3plbiBzdGF0ZSBsZWFrLiBJdCBhbHNvIG1vZGlmaWVzIGV4ZmF0IGVycm9yIGhhbmRsaW5nIChgX19leGZhdF9mc19lcnJvcmApIHRvIHNldCBhIHNodXRkb3duIGZsYWcgaW5zdGVhZCBvZiBkaXJlY3RseSBtb2RpZnlpbmcgYHNiLVxcdTAwM2VzX2ZsYWdzYCB3aXRoIGBTQl9SRE9OTFlgIHdpdGhvdXQgaG9sZGluZyB0aGUgYHNfdW1vdW50YCBzZW1hcGhvcmUsIHdoaWNoIHByZXZpb3VzbHkgY2F1c2VkIGRlYWRsb2NrcyB3aXRoIGBmcmVlemVfc3VwZXIoKWAuIEJvdGggYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29kZSBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workfloww7rqv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-21 10:00:53 +0000 UTC FinishedAt: 2026-07-21 10:20:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXFAT_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXFAT_FS" ], "series_id": "62222c22-14fe-488e-8e13-ddcb8200d9ab" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "fs_bdev_freeze", "__exfat_fs_error" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYRkFUX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZnNfYmRldl9mcmVlemUmIzM0OywKICAgICYjMzQ7X19leGZhdF9mc19lcnJvciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBWRlMgYmxvY2sgZGV2aWNlIGZyZWV6aW5nIGxvZ2ljIChgZnNfYmRldl9mcmVlemVgKSB0byBwcm9wZXJseSB0aGF3IHRoZSBzdXBlcmJsb2NrIGlmIGBzeW5jX2Jsb2NrZGV2YCBmYWlscywgcHJldmVudGluZyBhIGZyb3plbiBzdGF0ZSBsZWFrLiBJdCBhbHNvIG1vZGlmaWVzIGV4ZmF0IGVycm9yIGhhbmRsaW5nIChgX19leGZhdF9mc19lcnJvcmApIHRvIHNldCBhIHNodXRkb3duIGZsYWcgaW5zdGVhZCBvZiBkaXJlY3RseSBtb2RpZnlpbmcgYHNiLVx1MDAzZXNfZmxhZ3NgIHdpdGggYFNCX1JET05MWWAgd2l0aG91dCBob2xkaW5nIHRoZSBgc191bW91bnRgIHNlbWFwaG9yZSwgd2hpY2ggcHJldmlvdXNseSBjYXVzZWQgZGVhZGxvY2tzIHdpdGggYGZyZWV6ZV9zdXBlcigpYC4gQm90aCBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMDoxNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDRhMTZlMTM4MzRmM2FhMzk1ODBiZWVhN2YyOGFkY2ZjYTIxZTkyNWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyMSAxMDoxNjo1MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leGZhdC9taXNjLmMgYi9mcy9leGZhdC9taXNjLmNcbmluZGV4IDZmMTFhOTZhNGZmYTg0Li5kYmIzYjI5MDcwNDU0NSAxMDA2NDRcbi0tLSBhL2ZzL2V4ZmF0L21pc2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXhmYXQvbWlzYy5jXG5AQCAtNDEsNyAmIzQzOzQxLDE0IEBAIHZvaWQgX19leGZhdF9mc19lcnJvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgcmVwb3J0LCBjb25zdCBjaGFyICpmbXQsIC4uLilcbiBcdFx0cGFuaWMoXCYjMzQ7ZXhGQVQtZnMgKCVzKTogZnMgcGFuaWMgZnJvbSBwcmV2aW91cyBlcnJvclxcblwmIzM0OyxcbiBcdFx0XHRzYi1cdTAwM2VzX2lkKTtcbiBcdH0gZWxzZSBpZiAob3B0cy1cdTAwM2VlcnJvcnMgPT0gRVhGQVRfRVJST1JTX1JPIFx1MDAyNlx1MDAyNiAhc2JfcmRvbmx5KHNiKSkge1xuLVx0XHRzYi1cdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcbiYjNDM7XHRcdHNldF9iaXQoRVhGQVRfRkxBR1NfU0hVVERPV04sIFx1MDAyNkVYRkFUX1NCKHNiKS1cdTAwM2VzX2V4ZmF0X2ZsYWdzKTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBXZSBoYXZlIGFscmVhZHkgc2V0IEVYRkFUX0ZMQUdTX1NIVVRET1dOIGZsYWcgdG8gc3RvcCBhbGwgdXBkYXRlc1xuJiM0MztcdFx0ICogdG8gZmlsZXN5c3RlbSwgc28gaXQgZG9lc24mIzM5O3QgbmVlZCB0byBzZXQgU0JfUkRPTkxZIGZsYWcgaGVyZVxuJiM0MztcdFx0ICogYmVjYXVzZSB0aGUgZmxhZyBzaG91bGQgYmUgc2V0IGNvdmVyZWQgdy8gc2ItXHUwMDNlc191bW91bnQgc2VtYXBob3JlXG4mIzQzO1x0XHQgKiB2aWEgcmVtb3VudCBwcm9jZWR1cmUsIG90aGVyd2lzZSwgaXQgd2lsbCBjb25mdXNlIGNvZGUgbGlrZVxuJiM0MztcdFx0ICogZnJlZXplX3N1cGVyKCkgd2hpY2ggd2lsbCBsZWFkIHRvIGRlYWRsb2NrcyBhbmQgb3RoZXIgcHJvYmxlbXMuXG4mIzQzO1x0XHQgKi9cbiBcdFx0ZXhmYXRfZXJyKHNiLCBcJiMzNDtGaWxlc3lzdGVtIGhhcyBiZWVuIHNldCByZWFkLW9ubHlcJiMzNDspO1xuIFx0fVxuIH1cbmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuY1xuaW5kZXggYThmZDYxMTM2YWFmZTUuLjkwOWQ4YjlhYmI4ODdhIDEwMDY0NFxuLS0tIGEvZnMvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvc3VwZXIuY1xuQEAgLTE0ODEsOCAmIzQzOzE0ODEsMjMgQEAgc3RhdGljIGludCBmc19iZGV2X2ZyZWV6ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuIFx0ZWxzZVxuIFx0XHRlcnJvciA9IGZyZWV6ZV9zdXBlcihzYixcbiBcdFx0XHRcdEZSRUVaRV9NQVlfTkVTVCB8IEZSRUVaRV9IT0xERVJfVVNFUlNQQUNFLCBOVUxMKTtcbi1cdGlmICghZXJyb3IpXG4mIzQzO1x0aWYgKCFlcnJvcikge1xuIFx0XHRlcnJvciA9IHN5bmNfYmxvY2tkZXYoYmRldik7XG4mIzQzO1x0XHRpZiAoZXJyb3IpIHtcbiYjNDM7XHRcdFx0aWYgKHNiLVx1MDAzZXNfb3AtXHUwMDNldGhhd19zdXBlcilcbiYjNDM7XHRcdFx0XHQodm9pZClzYi1cdTAwM2VzX29wLVx1MDAzZXRoYXdfc3VwZXIoXG4mIzQzO1x0XHRcdFx0XHRzYixcbiYjNDM7XHRcdFx0XHRcdEZSRUVaRV9NQVlfTkVTVCB8XG4mIzQzO1x0XHRcdFx0XHRcdEZSRUVaRV9IT0xERVJfVVNFUlNQQUNFLFxuJiM0MztcdFx0XHRcdFx0TlVMTCk7XG4mIzQzO1x0XHRcdGVsc2VcbiYjNDM7XHRcdFx0XHQodm9pZCl0aGF3X3N1cGVyKFxuJiM0MztcdFx0XHRcdFx0c2IsXG4mIzQzO1x0XHRcdFx0XHRGUkVFWkVfTUFZX05FU1QgfFxuJiM0MztcdFx0XHRcdFx0XHRGUkVFWkVfSE9MREVSX1VTRVJTUEFDRSxcbiYjNDM7XHRcdFx0XHRcdE5VTEwpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiBcdGRlYWN0aXZhdGVfc3VwZXIoc2IpO1xuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMDoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhGQVRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmc19iZGV2X2ZyZWV6ZSYjMzQ7LAogICAgJiMzNDtfX2V4ZmF0X2ZzX2Vycm9yJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFZGUyBibG9jayBkZXZpY2UgZnJlZXppbmcgbG9naWMgKGBmc19iZGV2X2ZyZWV6ZWApIHRvIHByb3Blcmx5IHRoYXcgdGhlIHN1cGVyYmxvY2sgaWYgYHN5bmNfYmxvY2tkZXZgIGZhaWxzLCBwcmV2ZW50aW5nIGEgZnJvemVuIHN0YXRlIGxlYWsuIEl0IGFsc28gbW9kaWZpZXMgZXhmYXQgZXJyb3IgaGFuZGxpbmcgKGBfX2V4ZmF0X2ZzX2Vycm9yYCkgdG8gc2V0IGEgc2h1dGRvd24gZmxhZyBpbnN0ZWFkIG9mIGRpcmVjdGx5IG1vZGlmeWluZyBgc2ItXHUwMDNlc19mbGFnc2Agd2l0aCBgU0JfUkRPTkxZYCB3aXRob3V0IGhvbGRpbmcgdGhlIGBzX3Vtb3VudGAgc2VtYXBob3JlLCB3aGljaCBwcmV2aW91c2x5IGNhdXNlZCBkZWFkbG9ja3Mgd2l0aCBgZnJlZXplX3N1cGVyKClgLiBCb3RoIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0YTE2ZTEzODM0ZjNhYTM5NTgwYmVlYTdmMjhhZGNmY2EyMWU5MjVkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgMjEgMTA6MTY6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leGZhdC9taXNjLmMgYi9mcy9leGZhdC9taXNjLmMKaW5kZXggNmYxMWE5NmE0ZmZhODQuLmRiYjNiMjkwNzA0NTQ1IDEwMDY0NAotLS0gYS9mcy9leGZhdC9taXNjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXhmYXQvbWlzYy5jCkBAIC00MSw3ICYjNDM7NDEsMTQgQEAgdm9pZCBfX2V4ZmF0X2ZzX2Vycm9yKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCByZXBvcnQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogCQlwYW5pYygmIzM0O2V4RkFULWZzICglcyk6IGZzIHBhbmljIGZyb20gcHJldmlvdXMgZXJyb3JcbiYjMzQ7LAogCQkJc2ItJmd0O3NfaWQpOwogCX0gZWxzZSBpZiAob3B0cy0mZ3Q7ZXJyb3JzID09IEVYRkFUX0VSUk9SU19STyAmYW1wOyZhbXA7ICFzYl9yZG9ubHkoc2IpKSB7Ci0JCXNiLSZndDtzX2ZsYWdzIHw9IFNCX1JET05MWTsKJiM0MzsJCXNldF9iaXQoRVhGQVRfRkxBR1NfU0hVVERPV04sICZhbXA7RVhGQVRfU0Ioc2IpLSZndDtzX2V4ZmF0X2ZsYWdzKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBXZSBoYXZlIGFscmVhZHkgc2V0IEVYRkFUX0ZMQUdTX1NIVVRET1dOIGZsYWcgdG8gc3RvcCBhbGwgdXBkYXRlcwomIzQzOwkJICogdG8gZmlsZXN5c3RlbSwgc28gaXQgZG9lc24mIzM5O3QgbmVlZCB0byBzZXQgU0JfUkRPTkxZIGZsYWcgaGVyZQomIzQzOwkJICogYmVjYXVzZSB0aGUgZmxhZyBzaG91bGQgYmUgc2V0IGNvdmVyZWQgdy8gc2ItJmd0O3NfdW1vdW50IHNlbWFwaG9yZQomIzQzOwkJICogdmlhIHJlbW91bnQgcHJvY2VkdXJlLCBvdGhlcndpc2UsIGl0IHdpbGwgY29uZnVzZSBjb2RlIGxpa2UKJiM0MzsJCSAqIGZyZWV6ZV9zdXBlcigpIHdoaWNoIHdpbGwgbGVhZCB0byBkZWFkbG9ja3MgYW5kIG90aGVyIHByb2JsZW1zLgomIzQzOwkJICovCiAJCWV4ZmF0X2VycihzYiwgJiMzNDtGaWxlc3lzdGVtIGhhcyBiZWVuIHNldCByZWFkLW9ubHkmIzM0Oyk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmMKaW5kZXggYThmZDYxMTM2YWFmZTUuLjkwOWQ4YjlhYmI4ODdhIDEwMDY0NAotLS0gYS9mcy9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3N1cGVyLmMKQEAgLTE0ODEsOCAmIzQzOzE0ODEsMjMgQEAgc3RhdGljIGludCBmc19iZGV2X2ZyZWV6ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQogCWVsc2UKIAkJZXJyb3IgPSBmcmVlemVfc3VwZXIoc2IsCiAJCQkJRlJFRVpFX01BWV9ORVNUIHwgRlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UsIE5VTEwpOwotCWlmICghZXJyb3IpCiYjNDM7CWlmICghZXJyb3IpIHsKIAkJZXJyb3IgPSBzeW5jX2Jsb2NrZGV2KGJkZXYpOwomIzQzOwkJaWYgKGVycm9yKSB7CiYjNDM7CQkJaWYgKHNiLSZndDtzX29wLSZndDt0aGF3X3N1cGVyKQomIzQzOwkJCQkodm9pZClzYi0mZ3Q7c19vcC0mZ3Q7dGhhd19zdXBlcigKJiM0MzsJCQkJCXNiLAomIzQzOwkJCQkJRlJFRVpFX01BWV9ORVNUIHwKJiM0MzsJCQkJCQlGUkVFWkVfSE9MREVSX1VTRVJTUEFDRSwKJiM0MzsJCQkJCU5VTEwpOwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJKHZvaWQpdGhhd19zdXBlcigKJiM0MzsJCQkJCXNiLAomIzQzOwkJCQkJRlJFRVpFX01BWV9ORVNUIHwKJiM0MzsJCQkJCQlGUkVFWkVfSE9MREVSX1VTRVJTUEFDRSwKJiM0MzsJCQkJCU5VTEwpOwomIzQzOwkJfQomIzQzOwl9CiAJZGVhY3RpdmF0ZV9zdXBlcihzYik7CiAJcmV0dXJuIGVycm9yOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzU0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRXhGQVQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoZXNlIHR3byBwYXRjaGVzLCBvbmUgdG91Y2hpbmcgYGZzL2V4ZmF0L21pc2MuY2AgYW5kIHRoZSBvdGhlciBgZnMvc3VwZXIuY2AuIFRoZSBmaXJzdCBvbmUsIGluIGBtaXNjLmNgLCBsb29rcyBsaWtlIGl0JiMzOTtzIHR3ZWFraW5nIGBfX2V4ZmF0X2ZzX2Vycm9yYC4gSW5zdGVhZCBvZiBkaXJlY3RseSBzZXR0aW5nIGBTQl9SRE9OTFlgIG9uIHRoZSBzdXBlciBibG9jayYjMzk7cyBmbGFncyAoYHNiLSZndDtzX2ZsYWdzYCksIGl0JiMzOTtzIG5vdyBzZXR0aW5nIGBFWEZBVF9GTEFHU19TSFVURE9XTmAuIEludGVyZXN0aW5nLiBUaGF04oCZcyBhIGNoYW5nZSBpbiBob3cgd2UgaGFuZGxlIGVycm9ycyBhbmQgcG90ZW50aWFsbHkgc2h1dGRvd24gdGhlIGZpbGVzeXN0ZW0gZ3JhY2VmdWxseS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IHNoaWZ0LgoKVGhlIHNlY29uZCBwYXRjaCBtb2RpZmllcyBgZnNfYmRldl9mcmVlemVgIGluIGBmcy9zdXBlci5jYC4gVGhhdOKAmXMgYSBmdW5kYW1lbnRhbCBWRlMgZnVuY3Rpb24sIHdoaWNoIGlzIHdvcnRoIGEgY2xvc2VyIGxvb2ssIGVzcGVjaWFsbHkgd2l0aCB0aGUgcG90ZW50aWFsIGludGVycGxheSB3aXRoIHRoZSBmaXJzdCBjaGFuZ2UuIFRoZSBtb2RpZmljYXRpb24gaW52b2x2ZXMgdGhhd2luZyB0aGUgc3VwZXJibG9jayBpZiBgc3luY19ibG9ja2RldihiZGV2KWAgZmFpbHMuIFRoYXQgc3VnZ2VzdHMgdGhpcyBtYXkgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiB0aGUgZnJlZXplL3RoYXcgcHJvY2Vzcy4gVGhpcyBpcyBvYnZpb3VzbHkgcmVsYXRlZCB0byBibG9jayBkZXZpY2Ugc3luY2hyb25pemF0aW9uLCBzbyBsZXQmIzM5O3Mga2VlcCB0aGF0IGluIG1pbmQuCgpCZWZvcmUgSSBnbyB0b28gZGVlcCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4gU28sIG15IG5leHQgbW92ZSBpcyB0byBzZWFyY2ggdGhlIGNvZGViYXNlLiBJJiMzOTtsbCB1c2UgYGdpdCBncmVwYCB0byBmaW5kIGFsbCBvY2N1cnJlbmNlcyBvZiBib3RoIGBmc19iZGV2X2ZyZWV6ZWAgYW5kIGBfX2V4ZmF0X2ZzX2Vycm9yYCB3aXRoaW4gdGhlIHJlbGV2YW50IGZpbGUgdHJlZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlaXIgdXNlcywgcG90ZW50aWFsIGludGVyYWN0aW9ucywgYW5kIGFueSBvdGhlciByZWxldmFudCBjb2RlIGluIHRoaXMgYXJlYS4gRnJvbSB0aGVyZSwgSSBjYW4gc3RhcnQgdG8gZm9ybSBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBhdGNoIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgZmlsZXN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmc19iZGV2X2ZyZWV6ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zdXBlci5jPTE0Mzc9c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqZ2V0X2JkZXZfc3VwZXIoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbi0tXG5mcy9zdXBlci5jLTE0NTItLyoqXG5mcy9zdXBlci5jOjE0NTM6ICogZnNfYmRldl9mcmVlemUgLSBmcmVlemUgb3duaW5nIGZpbGVzeXN0ZW0gb2YgYmxvY2sgZGV2aWNlXG5mcy9zdXBlci5jLTE0NTQtICogQGJkZXY6IGJsb2NrIGRldmljZVxuLS1cbmZzL3N1cGVyLmMtMTQ2Ni0gKi9cbmZzL3N1cGVyLmM6MTQ2NzpzdGF0aWMgaW50IGZzX2JkZXZfZnJlZXplKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG5mcy9zdXBlci5jLTE0Njgte1xuLS1cbmZzL3N1cGVyLmM9MTU1Mj1jb25zdCBzdHJ1Y3QgYmxrX2hvbGRlcl9vcHMgZnNfaG9sZGVyX29wcyA9IHtcbi0tXG5mcy9zdXBlci5jLTE1NTQtXHQuc3luY1x0XHRcdD0gZnNfYmRldl9zeW5jLFxuZnMvc3VwZXIuYzoxNTU1Olx0LmZyZWV6ZVx0XHRcdD0gZnNfYmRldl9mcmVlemUsXG5mcy9zdXBlci5jLTE1NTYtXHQudGhhd1x0XHRcdD0gZnNfYmRldl90aGF3LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMDQKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uOgoKKipUcmFjaW5nIHRoZSBGcmVlemUgT3BlcmF0aW9uKioKClJpZ2h0LCBzbyBgZnNfYmRldl9mcmVlemVgIGlzIGNsZWFybHkgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGluIGZyZWV6aW5nIGEgYmxvY2sgZGV2aWNlIGZvciBhIGZpbGVzeXN0ZW0sIGFuZCBpdCYjMzk7cyBiZWluZyBjYWxsZWQgdGhyb3VnaCB0aGUgYGZzX2hvbGRlcl9vcHMuZnJlZXplYCBtZWNoYW5pc20uIFRoYXQmIzM5O3MgZ29vZCwgdGhhdCBnaXZlcyBtZSBhIHNwZWNpZmljIHBvaW50IHRvIHN0YXJ0LgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKmNvbnRleHQqIG9mIHRoaXMgZnJlZXplIG9wZXJhdGlvbi4gYGZzX2hvbGRlcl9vcHNgLi4udGhhdCYjMzk7cyBhbiBpbnRlcmZhY2UsIGEgY29sbGVjdGlvbiBvZiBvcGVyYXRpb25zIGEgZmlsZXN5c3RlbSBpbXBsZW1lbnRzLCByaWdodD8gSSBuZWVkIHRvIGtub3cgKndobyogb3IgKndoYXQqIGlzIHVzaW5nIHRoaXMgc3BlY2lmaWMgYGZzX2hvbGRlcl9vcHNgIHN0cnVjdHVyZSB0aGF0JiMzOTtzIGNhbGxpbmcgYGZyZWV6ZWAuIEtub3dpbmcgd2hlcmUgYGZzX2hvbGRlcl9vcHNgIGlzICp1c2VkKiB3aWxsIGdpdmUgbWUgdGhlIGJpZ2dlciBwaWN0dXJlLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHdob2xlIHZvbHVtZSBncm91cCwgYSBzaW5nbGUgZmlsZXN5c3RlbSwgc29tZSBraW5kIG9mIGxheWVyZWQgc3RvcmFnZT8gVGhpcyB3aWxsIGRldGVybWluZSB0aGUgc2NvcGUgYW5kIGltcGxpY2F0aW9ucyBvZiB0aGUgZnJlZXplLiBMZXQmIzM5O3MgdHJhY2UgYmFjayB0aGUgY2FsbHMuLi4gbGV0JiMzOTtzIGZpZ3VyZSBvdXQgdGhlIGNhbGxlcnMgb2YgYGZzX2hvbGRlcl9vcHNgLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGRlYnVnZ2VyIGFuZCBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNyb3NzLXJlZmVyZW5jZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnNfaG9sZGVyX29wcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9idHJmcy9kZXYtcmVwbGFjZS5jPTIzMj1zdGF0aWMgaW50IGJ0cmZzX2luaXRfZGV2X3JlcGxhY2VfdGd0ZGV2KHN0cnVjdCBidHJmc19mc19pbmZvICpmc19pbmZvLFxuLS1cbmZzL2J0cmZzL2Rldi1yZXBsYWNlLmMtMjUwLVx0YmRldl9maWxlID0gYmRldl9maWxlX29wZW5fYnlfcGF0aChkZXZpY2VfcGF0aCwgQkxLX09QRU5fV1JJVEUsXG5mcy9idHJmcy9kZXYtcmVwbGFjZS5jOjI1MTpcdFx0XHRcdFx0ICAgZnNfaW5mby1cdTAwM2VzYiwgXHUwMDI2ZnNfaG9sZGVyX29wcyk7XG5mcy9idHJmcy9kZXYtcmVwbGFjZS5jLTI1Mi1cdGlmIChJU19FUlIoYmRldl9maWxlKSkge1xuLS1cbmZzL2J0cmZzL3ZvbHVtZXMuYz00NzY9YnRyZnNfZ2V0X2JkZXZfYW5kX3NiKGNvbnN0IGNoYXIgKmRldmljZV9wYXRoLCBibGtfbW9kZV90IGZsYWdzLCB2b2lkICpob2xkZXIsXG4tLVxuZnMvYnRyZnMvdm9sdW1lcy5jLTQ4Mi1cbmZzL2J0cmZzL3ZvbHVtZXMuYzo0ODM6XHQqYmRldl9maWxlID0gYmRldl9maWxlX29wZW5fYnlfcGF0aChkZXZpY2VfcGF0aCwgZmxhZ3MsIGhvbGRlciwgXHUwMDI2ZnNfaG9sZGVyX29wcyk7XG5mcy9idHJmcy92b2x1bWVzLmMtNDg0LVxuLS1cbmZzL2J0cmZzL3ZvbHVtZXMuYz0yODQ4PWludCBidHJmc19pbml0X25ld19kZXZpY2Uoc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmZzX2luZm8sIGNvbnN0IGNoYXIgKmRldmljZV9wYXRoKVxuLS1cbmZzL2J0cmZzL3ZvbHVtZXMuYy0yODY2LVx0YmRldl9maWxlID0gYmRldl9maWxlX29wZW5fYnlfcGF0aChkZXZpY2VfcGF0aCwgQkxLX09QRU5fV1JJVEUsXG5mcy9idHJmcy92b2x1bWVzLmM6Mjg2NzpcdFx0XHRcdFx0ICAgZnNfaW5mby1cdTAwM2VzYiwgXHUwMDI2ZnNfaG9sZGVyX29wcyk7XG5mcy9idHJmcy92b2x1bWVzLmMtMjg2OC1cdGlmIChJU19FUlIoYmRldl9maWxlKSlcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NTk3MT1zdGF0aWMgc3RydWN0IGZpbGUgKmV4dDRfZ2V0X2pvdXJuYWxfYmxrZGV2KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTU5ODUtXHRcdEJMS19PUEVOX1JFQUQgfCBCTEtfT1BFTl9XUklURSB8IEJMS19PUEVOX1JFU1RSSUNUX1dSSVRFUyxcbmZzL2V4dDQvc3VwZXIuYzo1OTg2Olx0XHRzYiwgXHUwMDI2ZnNfaG9sZGVyX29wcyk7XG5mcy9leHQ0L3N1cGVyLmMtNTk4Ny1cdGlmIChJU19FUlIoYmRldl9maWxlKSkge1xuLS1cbmZzL3N1cGVyLmM9MTUyMj1zdGF0aWMgaW50IGZzX2JkZXZfdGhhdyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuLS1cbmZzL3N1cGVyLmMtMTU1MS1cbmZzL3N1cGVyLmM6MTU1Mjpjb25zdCBzdHJ1Y3QgYmxrX2hvbGRlcl9vcHMgZnNfaG9sZGVyX29wcyA9IHtcbmZzL3N1cGVyLmMtMTU1My1cdC5tYXJrX2RlYWRcdFx0PSBmc19iZGV2X21hcmtfZGVhZCxcbi0tXG5mcy9zdXBlci5jLTE1NTctfTtcbmZzL3N1cGVyLmM6MTU1ODpFWFBPUlRfU1lNQk9MX0dQTChmc19ob2xkZXJfb3BzKTtcbmZzL3N1cGVyLmMtMTU1OS1cbmZzL3N1cGVyLmM9MTU2MD1pbnQgc2V0dXBfYmRldl9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgc2JfZmxhZ3MsXG4tLVxuZnMvc3VwZXIuYy0xNTY2LVxuZnMvc3VwZXIuYzoxNTY3Olx0YmRldl9maWxlID0gYmRldl9maWxlX29wZW5fYnlfZGV2KHNiLVx1MDAzZXNfZGV2LCBtb2RlLCBzYiwgXHUwMDI2ZnNfaG9sZGVyX29wcyk7XG5mcy9zdXBlci5jLTE1NjgtXHRpZiAoSVNfRVJSKGJkZXZfZmlsZSkpIHtcbi0tXG5mcy94ZnMveGZzX3N1cGVyLmM9Mzk0PXhmc19ibGtkZXZfZ2V0KFxuLS1cbmZzL3hmcy94ZnNfc3VwZXIuYy00MDMtXHQqYmRldl9maWxlcCA9IGJkZXZfZmlsZV9vcGVuX2J5X3BhdGgobmFtZSwgbW9kZSxcbmZzL3hmcy94ZnNfc3VwZXIuYzo0MDQ6XHRcdFx0bXAtXHUwMDNlbV9zdXBlciwgXHUwMDI2ZnNfaG9sZGVyX29wcyk7XG5mcy94ZnMveGZzX3N1cGVyLmMtNDA1LVx0aWYgKElTX0VSUigqYmRldl9maWxlcCkpIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oPTE3NTA9c3RydWN0IGJsa19ob2xkZXJfb3BzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTE3NzMtLypcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTc3NDogKiBGb3IgZmlsZXN5c3RlbXMgdXNpbmcgQGZzX2hvbGRlcl9vcHMsIHRoZSBAaG9sZGVyIGFyZ3VtZW50IHBhc3NlZCB0b1xuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xNzc1LSAqIGhlbHBlcnMgdXNlZCB0byBvcGVuIGFuZCBjbGFpbSBibG9jayBkZXZpY2VzIHZpYVxuLS1cbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTc3Ny0gKi9cbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTc3ODpleHRlcm4gY29uc3Qgc3RydWN0IGJsa19ob2xkZXJfb3BzIGZzX2hvbGRlcl9vcHM7XG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTE3NzktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY1NQoJCQkJCQkJb3V0cHV0OiAxNgoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQgSSYjMzk7bSB0aGlua2luZyBoZXJlLgoKKipEZWNvbnN0cnVjdGluZyBCbG9jayBEZXZpY2UgRnJlZXppbmcgT3BlcmF0aW9ucyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIHVzYWdlIG9mIGBmc19ob2xkZXJfb3BzYCBhbmQgaXQmIzM5O3MgcG9wcGluZyB1cCBpbiBgc2V0dXBfYmRldl9zdXBlcmAgYW5kIGEgZmV3IG90aGVyIGxvY2F0aW9ucywgd2hpY2ggaXNuJiMzOTt0IGVudGlyZWx5IHN1cnByaXNpbmcuIFRoYXQgZnVuY3Rpb24gaXMgcHJldHR5IGZ1bmRhbWVudGFsIGZvciBlc3RhYmxpc2hpbmcgYmxvY2sgZGV2aWNlIHN1cGVyYmxvY2tzLCBzbyBob2xkZXIgb3BlcmF0aW9ucyBhcmUgbGlrZWx5IHJlbGV2YW50IHRoZXJlLiBNeSBwcmltYXJ5IGludGVyZXN0IGlzIHdpdGggdGhlIGBmcmVlemVgIG9wZXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhpcyBjb250ZXh0LCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIGJsb2NrIGRldmljZXMuIFRoZSBrZXkgcXVlc3Rpb24gaXMsICp3aG8qIGlzIGNhbGxpbmcgdGhpcyBgZnJlZXplYCBmdW5jdGlvbiBkZWZpbmVkIGluIGBibGtfaG9sZGVyX29wc2A/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsZXJzIG9mIGBmcmVlemVgIHdpdGhpbiBgYmxrX2hvbGRlcl9vcHNgLiBUaW1lIHRvIGRpZyBkZWVwZXIgYW5kIGZpbmQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oy1cdTAwM2VmcmVlemUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDczMSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2xpYmF0YS5yc3Q9MjY4PWZvbGxvd3MgYSBzdWNjZXNzZnVsIHJlc2V0LlxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2xpYmF0YS5yc3QtMjY5LVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2xpYmF0YS5yc3Q6MjcwOlRoZSBvcHRpb25hbCBgYC1cdTAwM2VmcmVlemUoKWBgIGNhbGxiYWNrIGNhbiBiZSB1c2VkIGZvciBmcmVlemluZyB0aGUgcG9ydFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2xpYmF0YS5yc3QtMjcxLWhhcmR3YXJlLXdpc2UgKGUuZy4gbWFzayBpbnRlcnJ1cHQgYW5kIHN0b3AgRE1BIGVuZ2luZSkuIElmIGEgcG9ydFxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9saWJhdGEucnN0PTI3NT1UaGUgb3B0aW9uYWwgYGAtXHUwMDNldGhhdygpYGAgY2FsbGJhY2sgaXMgY2FsbGVkIHRvIHBlcmZvcm0gdGhlIG9wcG9zaXRlIG9mXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbGliYXRhLnJzdDoyNzY6YGAtXHUwMDNlZnJlZXplKClgYDogcHJlcGFyZSB0aGUgcG9ydCBmb3Igbm9ybWFsIG9wZXJhdGlvbiBvbmNlIGFnYWluLiBVbm1hc2tcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9saWJhdGEucnN0LTI3Ny1pbnRlcnJ1cHRzLCBzdGFydCBETUEgZW5naW5lLCBldGMuXG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3BtL2RldmljZXMucnN0PTUxNz10aGUgc3lzdGVtIChcJiMzNDtwb3dlciBvZmZcJiMzNDspLiAgVGhlIHBoYXNlcyB1c2VkIHRvIGFjY29tcGxpc2ggdGhpcyBhcmU6IGBgcHJlcGFyZWBgLFxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9wbS9kZXZpY2VzLnJzdC01MjQtXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvcG0vZGV2aWNlcy5yc3Q6NTI1OiAgICAyLlx0VGhlIGBgLVx1MDAzZWZyZWV6ZWBgIG1ldGhvZHMgc2hvdWxkIHF1aWVzY2UgdGhlIGRldmljZSBzbyB0aGF0IGl0IGRvZXNuJiMzOTt0XG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvcG0vZGV2aWNlcy5yc3QtNTI2LVx0Z2VuZXJhdGUgSVJRcyBvciBETUEsIGFuZCB0aGV5IG1heSBuZWVkIHRvIHNhdmUgdGhlIHZhbHVlcyBvZiBkZXZpY2Vcbi0tXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvcG0vZGV2aWNlcy5yc3Q9NzY0PXRyYW5zaXRpb24gaW50byBhIHNsZWVwIHN0YXRlLCB0aGF0IGNhbiBiZSBkb25lIGJ5IGNhbGxpbmdcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9wbS9kZXZpY2VzLnJzdDo3NjU6OmM6ZnVuYzpgcG1fcnVudGltZV9yZXN1bWVgIGZyb20gdGhlIGBgLVx1MDAzZXN1c3BlbmRgYCBjYWxsYmFjayAob3IgdGhlIGBgLVx1MDAzZWZyZWV6ZWBgXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvcG0vZGV2aWNlcy5yc3QtNzY2LW9yIGBgLVx1MDAzZXBvd2Vyb2ZmYGAgY2FsbGJhY2sgZm9yIHRyYW5zaXRpb25zIHJlbGF0ZWQgdG8gaGliZXJuYXRpb24pIG9mIGVpdGhlciB0aGVcbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3Q9MjIwPW9yIGJvdHRvbSBoYWxmKS5cbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QtMjgzLWBgZnJlZXplX3N1cGVyYGBcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdDoyODQ6XHRDYWxsZWQgaW5zdGVhZCBvZiAtXHUwMDNlZnJlZXplX2ZzIGNhbGxiYWNrIGlmIHByb3ZpZGVkLlxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0OjI4NTpcdE1haW4gZGlmZmVyZW5jZSBpcyB0aGF0IC1cdTAwM2VmcmVlemVfc3VwZXIgaXMgY2FsbGVkIHdpdGhvdXQgdGFraW5nXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QtMjg2LVx0ZG93bl93cml0ZShcdTAwMjZzYi1cdTAwM2VzX3Vtb3VudCkuIElmIGZpbGVzeXN0ZW0gaW1wbGVtZW50cyBpdCBhbmQgd2FudHNcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdDoyODc6XHQtXHUwMDNlZnJlZXplX2ZzIHRvIGJlIGNhbGxlZCB0b28sIHRoZW4gaXQgaGFzIHRvIGNhbGwgLVx1MDAzZWZyZWV6ZV9mc1xuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0LTI4OC1cdGV4cGxpY2l0bHkgZnJvbSB0aGlzIGNhbGxiYWNrLiBPcHRpb25hbC5cbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QtMjk2LVx0Y2FsbGVkIHdoZW4gVkZTIGlzIHVubG9ja2luZyBhIGZpbGVzeXN0ZW0gYW5kIG1ha2luZyBpdCB3cml0YWJsZVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0OjI5NzpcdGFnYWluIGFmdGVyIC1cdTAwM2VmcmVlemVfc3VwZXIuIE9wdGlvbmFsLlxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0LTI5OC1cbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QtMzAwLVx0Y2FsbGVkIHdoZW4gVkZTIGlzIHVubG9ja2luZyBhIGZpbGVzeXN0ZW0gYW5kIG1ha2luZyBpdCB3cml0YWJsZVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0OjMwMTpcdGFnYWluIGFmdGVyIC1cdTAwM2VmcmVlemVfZnMuIE9wdGlvbmFsLlxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0LTMwMi1cbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3hmcy94ZnMtb25saW5lLWZzY2stZGVzaWduLnJzdD0zMDA3PWxvbmcgZW5vdWdoIHRvIGNoZWNrIGFuZCBjb3JyZWN0IHRoZSBzdW1tYXJ5IGNvdW50ZXJzLlxuLS1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMveGZzL3hmcy1vbmxpbmUtZnNjay1kZXNpZ24ucnN0LTMwMjEtfCAtIEFkZGluZyBhbiBleHRyYSBsb2NrIHRvIHByZXZlbnQgb3RoZXJzIGZyb20gdGhhd2luZyB0aGUgZmlsZXN5c3RlbSAgICAgfFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy94ZnMveGZzLW9ubGluZS1mc2NrLWRlc2lnbi5yc3Q6MzAyMjp8ICAgcmVxdWlyZWQgdGhlIGFkZGl0aW9uIG9mIGEgYGAtXHUwMDNlZnJlZXplX3N1cGVyYGAgZnVuY3Rpb24gdG8gd3JhcCAgICAgICAgIHxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMveGZzL3hmcy1vbmxpbmUtZnNjay1kZXNpZ24ucnN0LTMwMjMtfCAgIGBgZnJlZXplX2ZzKClgYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuLS1cbkRvY3VtZW50YXRpb24vcG93ZXIvcGNpLnJzdD01NzU9VGhlIHBjaV9wbV9mcmVlemUoKSByb3V0aW5lIGlzIHF1aXRlIHNpbWlsYXIgdG8gcGNpX3BtX3N1c3BlbmQoKSwgYnV0IGl0IHJ1bnNcbkRvY3VtZW50YXRpb24vcG93ZXIvcGNpLnJzdDo1NzY6dGhlIGRldmljZSBkcml2ZXImIzM5O3MgcG0tXHUwMDNlZnJlZXplKCkgY2FsbGJhY2ssIGlmIGRlZmluZWQsIGluc3RlYWQgb2YgcG0tXHUwMDNlc3VzcGVuZCgpLFxuRG9jdW1lbnRhdGlvbi9wb3dlci9wY2kucnN0LTU3Ny1hbmQgaXQgZG9lc24mIzM5O3QgYXBwbHkgdGhlIHN1c3BlbmQtcmVsYXRlZCBoYXJkd2FyZSBxdWlya3MuICBJdCBpcyBleGVjdXRlZFxuLS1cbkRvY3VtZW50YXRpb24vcG93ZXIvcGNpLnJzdD01ODE9VGhlIHBjaV9wbV9mcmVlemVfbm9pcnEoKSByb3V0aW5lLCBpbiB0dXJuLCBpcyBzaW1pbGFyIHRvXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL3BjaS5yc3Q6NTgyOnBjaV9wbV9zdXNwZW5kX25vaXJxKCksIGJ1dCBpdCBjYWxscyB0aGUgZGV2aWNlIGRyaXZlciYjMzk7cyBwbS1cdTAwM2VmcmVlemVfbm9pcnEoKVxuRG9jdW1lbnRhdGlvbi9wb3dlci9wY2kucnN0LTU4My1yb3V0aW5lIGluc3RlYWQgb2YgcG0tXHUwMDNlc3VzcGVuZF9ub2lycSgpLiAgSXQgYWxzbyBkb2VzbiYjMzk7dCBhdHRlbXB0IHRvIHByZXBhcmUgdGhlXG4tLVxuRG9jdW1lbnRhdGlvbi9wb3dlci9ydW50aW1lX3BtLnJzdD03Mjk9ZHJpdmVyL2Jhc2UvcG93ZXIvZ2VuZXJpY19vcHMuYzpcbi0tXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL3J1bnRpbWVfcG0ucnN0LTc1Ni0gIGBpbnQgcG1fZ2VuZXJpY19mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KTtgXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL3J1bnRpbWVfcG0ucnN0Ojc1NzogICAgLSBpZiB0aGUgZGV2aWNlIGhhcyBub3QgYmVlbiBzdXNwZW5kZWQgYXQgcnVuIHRpbWUsIGludm9rZSB0aGUgLVx1MDAzZWZyZWV6ZSgpXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL3J1bnRpbWVfcG0ucnN0LTc1OC0gICAgICBjYWxsYmFjayBwcm92aWRlZCBieSBpdHMgZHJpdmVyIGFuZCByZXR1cm4gaXRzIHJlc3VsdCwgb3IgcmV0dXJuIDAgaWYgbm90XG4tLVxuRG9jdW1lbnRhdGlvbi9wb3dlci9ydW50aW1lX3BtLnJzdC03NjEtICBgaW50IHBtX2dlbmVyaWNfZnJlZXplX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldik7YFxuRG9jdW1lbnRhdGlvbi9wb3dlci9ydW50aW1lX3BtLnJzdDo3NjI6ICAgIC0gaWYgcG1fcnVudGltZV9zdXNwZW5kZWQoZGV2KSByZXR1cm5zIFwmIzM0O2ZhbHNlXCYjMzQ7LCBpbnZva2UgdGhlIC1cdTAwM2VmcmVlemVfbm9pcnEoKVxuRG9jdW1lbnRhdGlvbi9wb3dlci9ydW50aW1lX3BtLnJzdC03NjMtICAgICAgY2FsbGJhY2sgcHJvdmlkZWQgYnkgdGhlIGRldmljZSYjMzk7cyBkcml2ZXIgYW5kIHJldHVybiBpdHMgcmVzdWx0LCBvciByZXR1cm5cbi0tXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL3J1bnRpbWVfcG0ucnN0PTc5ND1wcm92aWRlIGl0cyBvd24gY2FsbGJhY2tzIGZvciAtXHUwMDNlcnVudGltZV9pZGxlKCksIC1cdTAwM2VydW50aW1lX3N1c3BlbmQoKSxcbkRvY3VtZW50YXRpb24vcG93ZXIvcnVudGltZV9wbS5yc3QtNzk1LS1cdTAwM2VydW50aW1lX3Jlc3VtZSgpLCAtXHUwMDNlc3VzcGVuZCgpLCAtXHUwMDNlc3VzcGVuZF9ub2lycSgpLCAtXHUwMDNlcmVzdW1lKCksXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL3J1bnRpbWVfcG0ucnN0Ojc5NjotXHUwMDNlcmVzdW1lX25vaXJxKCksIC1cdTAwM2VmcmVlemUoKSwgLVx1MDAzZWZyZWV6ZV9ub2lycSgpLCAtXHUwMDNldGhhdygpLCAtXHUwMDNldGhhd19ub2lycSgpLFxuRG9jdW1lbnRhdGlvbi9wb3dlci9ydW50aW1lX3BtLnJzdC03OTctLVx1MDAzZXBvd2Vyb2ZmKCksIC1cdTAwM2Vwb3dlcm9mZl9ub2lycSgpLCAtXHUwMDNlcmVzdG9yZSgpLCAtXHUwMDNlcmVzdG9yZV9ub2lycSgpIGluIHRoZVxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX2RyaXZlci5jPTYzMD1zdGF0aWMgaW50IGVlaF9yZXNldF9kZXZpY2Uoc3RydWN0IGVlaF9wZSAqcGUsIHN0cnVjdCBwY2lfYnVzICpidXMsXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfZHJpdmVyLmMtNjQzLVx0LyogcGNpYmlvcyB3aWxsIGNsZWFyIHRoZSBjb3VudGVyOyBzYXZlIHRoZSB2YWx1ZSAqL1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfZHJpdmVyLmM6NjQ0Olx0Y250ID0gcGUtXHUwMDNlZnJlZXplX2NvdW50O1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfZHJpdmVyLmMtNjQ1LVx0dHN0YW1wID0gcGUtXHUwMDNldHN0YW1wO1xuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX2RyaXZlci5jLTcxMS1cdHBlLVx1MDAzZXRzdGFtcCA9IHRzdGFtcDtcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX2RyaXZlci5jOjcxMjpcdHBlLVx1MDAzZWZyZWV6ZV9jb3VudCA9IGNudDtcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX2RyaXZlci5jLTcxMy1cbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9kcml2ZXIuYz04MzY9dm9pZCBlZWhfaGFuZGxlX25vcm1hbF9ldmVudChzdHJ1Y3QgZWVoX3BlICpwZSlcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9kcml2ZXIuYy05MjUtXHRlZWhfcGVfdXBkYXRlX3RpbWVfc3RhbXAocGUpO1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfZHJpdmVyLmM6OTI2Olx0cGUtXHUwMDNlZnJlZXplX2NvdW50JiM0MzsmIzQzOztcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX2RyaXZlci5jOjkyNzpcdGlmIChwZS1cdTAwM2VmcmVlemVfY291bnQgXHUwMDNlIGVlaF9tYXhfZnJlZXplcykge1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfZHJpdmVyLmMtOTI4LVx0XHRwcl9lcnIoXCYjMzQ7RUVIOiBQSEIjJXgtUEUjJXggaGFzIGZhaWxlZCAlZCB0aW1lcyBpbiB0aGUgbGFzdCBob3VyIGFuZCBoYXMgYmVlbiBwZXJtYW5lbnRseSBkaXNhYmxlZC5cXG5cJiMzNDssXG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9kcml2ZXIuYy05MjktXHRcdCAgICAgICBwZS1cdTAwM2VwaGItXHUwMDNlZ2xvYmFsX251bWJlciwgcGUtXHUwMDNlYWRkcixcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX2RyaXZlci5jOjkzMDpcdFx0ICAgICAgIHBlLVx1MDAzZWZyZWV6ZV9jb3VudCk7XG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9kcml2ZXIuYy05MzEtXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfZHJpdmVyLmMtOTQ1LVx0cHJfd2FybihcJiMzNDtFRUg6IFRoaXMgUENJIGRldmljZSBoYXMgZmFpbGVkICVkIHRpbWVzIGluIHRoZSBsYXN0IGhvdXIgYW5kIHdpbGwgYmUgcGVybWFuZW50bHkgZGlzYWJsZWQgYWZ0ZXIgJWQgZmFpbHVyZXMuXFxuXCYjMzQ7LFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfZHJpdmVyLmM6OTQ2Olx0XHRwZS1cdTAwM2VmcmVlemVfY291bnQsIGVlaF9tYXhfZnJlZXplcyk7XG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9kcml2ZXIuYy05NDctXHRwcl9pbmZvKFwmIzM0O0VFSDogTm90aWZ5IGRldmljZSBkcml2ZXJzIHRvIHNodXRkb3duXFxuXCYjMzQ7KTtcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9wZS5jPTQ5MD12b2lkIGVlaF9wZV91cGRhdGVfdGltZV9zdGFtcChzdHJ1Y3QgZWVoX3BlICpwZSlcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9wZS5jLTQ5NS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX3BlLmM6NDk2Olx0aWYgKHBlLVx1MDAzZWZyZWV6ZV9jb3VudCBcdTAwM2M9IDApIHtcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX3BlLmM6NDk3Olx0XHRwZS1cdTAwM2VmcmVlemVfY291bnQgPSAwO1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfcGUuYy00OTgtXHRcdHBlLVx1MDAzZXRzdGFtcCA9IGt0aW1lX2dldF9zZWNvbmRzKCk7XG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfcGUuYy01MDItXHRcdFx0cGUtXHUwMDNldHN0YW1wID0gdHN0YW1wO1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfcGUuYzo1MDM6XHRcdFx0cGUtXHUwMDNlZnJlZXplX2NvdW50ID0gMDtcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX3BlLmMtNTA0LVx0XHR9XG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NtcC5jPTQ3PXN0YXRpYyB2b2lkIG1wYzg1eHhfZ2l2ZV90aW1lYmFzZSh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zbXAuYy01Ny1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zbXAuYzo1ODpcdHFvcmlxX3BtX29wcy1cdTAwM2VmcmVlemVfdGltZV9iYXNlKHRydWUpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NtcC5jLTU5LSNpZmRlZiBDT05GSUdfUFBDNjRcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc21wLmMtOTAtXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc21wLmM6OTE6XHRxb3JpcV9wbV9vcHMtXHUwMDNlZnJlZXplX3RpbWVfYmFzZShmYWxzZSk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc21wLmMtOTItXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L2VlaC1wb3dlcm52LmM9NDUzPXN0YXRpYyBpbnQgcG52X2VlaF9zZXRfb3B0aW9uKHN0cnVjdCBlZWhfcGUgKnBlLCBpbnQgb3B0aW9uKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9lZWgtcG93ZXJudi5jLTQ4Mi1cdGlmIChmcmVlemVfcGUpIHtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9lZWgtcG93ZXJudi5jOjQ4MzpcdFx0aWYgKHBoYi1cdTAwM2VmcmVlemVfcGUpIHtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9lZWgtcG93ZXJudi5jOjQ4NDpcdFx0XHRwaGItXHUwMDNlZnJlZXplX3BlKHBoYiwgcGUtXHUwMDNlYWRkcik7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvZWVoLXBvd2VybnYuYy00ODUtXHRcdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L2VlaC1wb3dlcm52LmM9NTY1PXN0YXRpYyBpbnQgcG52X2VlaF9nZXRfcGVfc3RhdGUoc3RydWN0IGVlaF9wZSAqcGUpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L2VlaC1wb3dlcm52LmMtNjUzLVx0ICAgICEocGUtXHUwMDNlc3RhdGUgXHUwMDI2IEVFSF9QRV9JU09MQVRFRCkpIHtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9lZWgtcG93ZXJudi5jOjY1NDpcdFx0aWYgKHBoYi1cdTAwM2VmcmVlemVfcGUpXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvZWVoLXBvd2VybnYuYzo2NTU6XHRcdFx0cGhiLVx1MDAzZWZyZWV6ZV9wZShwaGIsIHBlLVx1MDAzZWFkZHIpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L2VlaC1wb3dlcm52LmMtNjU2LVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9lZWgtcG93ZXJudi5jPTEzMzk9c3RhdGljIGludCBwbnZfZWVoX2dldF9wZShzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L2VlaC1wb3dlcm52LmMtMTM2Ni1cdGlmICghKGRldl9wZS1cdTAwM2VzdGF0ZSBcdTAwMjYgRUVIX1BFX0lTT0xBVEVEKSlcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9lZWgtcG93ZXJudi5jOjEzNjc6XHRcdHBoYi1cdTAwM2VmcmVlemVfcGUocGhiLCBwZV9ubyk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvZWVoLXBvd2VybnYuYy0xMzY4LVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9lZWgtcG93ZXJudi5jLTEzODUtXHRcdGlmICghKGRldl9wZS1cdTAwM2VzdGF0ZSBcdTAwMjYgRUVIX1BFX0lTT0xBVEVEKSlcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9lZWgtcG93ZXJudi5jOjEzODY6XHRcdFx0cGhiLVx1MDAzZWZyZWV6ZV9wZShwaGIsIGRldl9wZS1cdTAwM2VhZGRyKTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9lZWgtcG93ZXJudi5jLTEzODctXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3BjaS1pb2RhLmM9MjQ4NT1zdGF0aWMgdm9pZCBfX2luaXQgcG52X3BjaV9pbml0X2lvZGFfcGhiKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3BjaS1pb2RhLmMtMjY2NS1cdHBoYi1cdTAwM2VnZXRfcGVfc3RhdGUgPSBwbnZfaW9kYV9nZXRfcGVfc3RhdGU7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvcGNpLWlvZGEuYzoyNjY2Olx0cGhiLVx1MDAzZWZyZWV6ZV9wZSA9IHBudl9pb2RhX2ZyZWV6ZV9wZTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9wY2ktaW9kYS5jLTI2NjctXHRwaGItXHUwMDNldW5mcmVlemVfcGUgPSBwbnZfaW9kYV91bmZyZWV6ZV9wZTtcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvcGNpLmM9NTI3PXN0YXRpYyB2b2lkIHBudl9wY2lfY29uZmlnX2NoZWNrX2VlaChzdHJ1Y3QgcGNpX2RuICpwZG4pXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3BjaS5jLTU3NC1cdFx0ICovXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvcGNpLmM6NTc1Olx0XHRpZiAocGhiLVx1MDAzZWZyZWV6ZV9wZSlcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9wY2kuYzo1NzY6XHRcdFx0cGhiLVx1MDAzZWZyZWV6ZV9wZShwaGIsIHBlX25vKTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9wY2kuYy01NzctXG4tLVxuYmxvY2svYmRldi5jPTMwMT1pbnQgYmRldl9mcmVlemUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbi0tXG5ibG9jay9iZGV2LmMtMzEyLVx0bXV0ZXhfbG9jayhcdTAwMjZiZGV2LVx1MDAzZWJkX2hvbGRlcl9sb2NrKTtcbmJsb2NrL2JkZXYuYzozMTM6XHRpZiAoYmRldi1cdTAwM2ViZF9ob2xkZXJfb3BzIFx1MDAyNlx1MDAyNiBiZGV2LVx1MDAzZWJkX2hvbGRlcl9vcHMtXHUwMDNlZnJlZXplKSB7XG5ibG9jay9iZGV2LmM6MzE0Olx0XHRlcnJvciA9IGJkZXYtXHUwMDNlYmRfaG9sZGVyX29wcy1cdTAwM2VmcmVlemUoYmRldik7XG5ibG9jay9iZGV2LmMtMzE1LVx0XHRsb2NrZGVwX2Fzc2VydF9ub3RfaGVsZChcdTAwMjZiZGV2LVx1MDAzZWJkX2hvbGRlcl9sb2NrKTtcbi0tXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM9MTE4Mj1zdGF0aWMgdm9pZCBiaW5kZXJfY2xlYW51cF9yZWZfb2xvY2tlZChzdHJ1Y3QgYmluZGVyX3JlZiAqcmVmKVxuLS1cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy0xMjI0LVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jOjEyMjU6XHRpZiAocmVmLVx1MDAzZWZyZWV6ZSkge1xuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jOjEyMjY6XHRcdGJpbmRlcl9kZXF1ZXVlX3dvcmsocmVmLVx1MDAzZXByb2MsIFx1MDAyNnJlZi1cdTAwM2VmcmVlemUtXHUwMDNld29yayk7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtMTIyNy1cdFx0YmluZGVyX3N0YXRzX2RlbGV0ZWQoQklOREVSX1NUQVRfRlJFRVpFKTtcbi0tXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM9MTM1Mj1zdGF0aWMgdm9pZCBiaW5kZXJfZnJlZV9yZWYoc3RydWN0IGJpbmRlcl9yZWYgKnJlZilcbi0tXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtMTM1Ni1cdGtmcmVlKHJlZi1cdTAwM2VkZWF0aCk7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM6MTM1NzpcdGtmcmVlKHJlZi1cdTAwM2VmcmVlemUpO1xuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jLTEzNTgtXHRrZnJlZShyZWYpO1xuLS1cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYz0xNjU5PXN0YXRpYyB2b2lkIGJpbmRlcl9mcmVlX3RyYW5zYWN0aW9uKHN0cnVjdCBiaW5kZXJfdHJhbnNhY3Rpb24gKnQpXG4tLVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jLTE2ODItXHRcdGlmICghdGFyZ2V0X3Byb2MtXHUwMDNlb3V0c3RhbmRpbmdfdHhucyBcdTAwMjZcdTAwMjYgdGFyZ2V0X3Byb2MtXHUwMDNlaXNfZnJvemVuKVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jOjE2ODM6XHRcdFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlX2FsbChcdTAwMjZ0YXJnZXRfcHJvYy1cdTAwM2VmcmVlemVfd2FpdCk7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtMTY4NC1cdFx0aWYgKHQtXHUwMDNlYnVmZmVyKVxuLS1cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYz0zOTM3PWJpbmRlcl9yZXF1ZXN0X2ZyZWV6ZV9ub3RpZmljYXRpb24oc3RydWN0IGJpbmRlcl9wcm9jICpwcm9jLFxuLS1cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy0zOTU3LVx0YmluZGVyX25vZGVfbG9jayhyZWYtXHUwMDNlbm9kZSk7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM6Mzk1ODpcdGlmIChyZWYtXHUwMDNlZnJlZXplKSB7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtMzk1OS1cdFx0YmluZGVyX3VzZXJfZXJyb3IoXCYjMzQ7JWQ6JWQgQkNfUkVRVUVTVF9GUkVFWkVfTk9USUZJQ0FUSU9OIGFscmVhZHkgc2V0XFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy0zOTcwLVx0ZnJlZXplLVx1MDAzZXdvcmsudHlwZSA9IEJJTkRFUl9XT1JLX0ZST1pFTl9CSU5ERVI7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM6Mzk3MTpcdHJlZi1cdTAwM2VmcmVlemUgPSBmcmVlemU7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtMzk3Mi1cbi0tXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM9Mzk5MD1iaW5kZXJfY2xlYXJfZnJlZXplX25vdGlmaWNhdGlvbihzdHJ1Y3QgYmluZGVyX3Byb2MgKnByb2MsXG4tLVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jLTQwMDctXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM6NDAwODpcdGlmICghcmVmLVx1MDAzZWZyZWV6ZSkge1xuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jLTQwMDktXHRcdGJpbmRlcl91c2VyX2Vycm9yKFwmIzM0OyVkOiVkIEJDX0NMRUFSX0ZSRUVaRV9OT1RJRklDQVRJT04gZnJlZXplIG5vdGlmaWNhdGlvbiBub3QgYWN0aXZlXFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy00MDE0LVx0fVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jOjQwMTU6XHRmcmVlemUgPSByZWYtXHUwMDNlZnJlZXplO1xuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jLTQwMTYtXHRiaW5kZXJfaW5uZXJfcHJvY19sb2NrKHByb2MpO1xuLS1cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy00MDI1LVx0fVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jOjQwMjY6XHRyZWYtXHUwMDNlZnJlZXplID0gTlVMTDtcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy00MDI3LVx0Lypcbi0tXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM9NTY0MD1zdGF0aWMgdm9pZCBiaW5kZXJfYWRkX2ZyZWV6ZV93b3JrKHN0cnVjdCBiaW5kZXJfcHJvYyAqcHJvYywgYm9vbCBpc19mcm96ZW4pXG4tLVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jLTU2NjMtXHRcdFx0YmluZGVyX2lubmVyX3Byb2NfbG9jayhyZWYtXHUwMDNlcHJvYyk7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM6NTY2NDpcdFx0XHRpZiAoIXJlZi1cdTAwM2VmcmVlemUpIHtcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy01NjY1LVx0XHRcdFx0YmluZGVyX2lubmVyX3Byb2NfdW5sb2NrKHJlZi1cdTAwM2Vwcm9jKTtcbi0tXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtNTY2Ny1cdFx0XHR9XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM6NTY2ODpcdFx0XHRyZWYtXHUwMDNlZnJlZXplLVx1MDAzZXdvcmsudHlwZSA9IEJJTkRFUl9XT1JLX0ZST1pFTl9CSU5ERVI7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM6NTY2OTpcdFx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZyZWYtXHUwMDNlZnJlZXplLVx1MDAzZXdvcmsuZW50cnkpKSB7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM6NTY3MDpcdFx0XHRcdHJlZi1cdTAwM2VmcmVlemUtXHUwMDNlaXNfZnJvemVuID0gaXNfZnJvemVuO1xuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jOjU2NzE6XHRcdFx0XHRiaW5kZXJfZW5xdWV1ZV93b3JrX2lsb2NrZWQoXHUwMDI2cmVmLVx1MDAzZWZyZWV6ZS1cdTAwM2V3b3JrLCBcdTAwMjZyZWYtXHUwMDNlcHJvYy1cdTAwM2V0b2RvKTtcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy01NjcyLVx0XHRcdFx0YmluZGVyX3dha2V1cF9wcm9jX2lsb2NrZWQocmVmLVx1MDAzZXByb2MpO1xuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jLTU2NzMtXHRcdFx0fSBlbHNlIHtcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYzo1Njc0Olx0XHRcdFx0aWYgKHJlZi1cdTAwM2VmcmVlemUtXHUwMDNlc2VudCBcdTAwMjZcdTAwMjYgcmVmLVx1MDAzZWZyZWV6ZS1cdTAwM2Vpc19mcm96ZW4gIT0gaXNfZnJvemVuKVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jOjU2NzU6XHRcdFx0XHRcdHJlZi1cdTAwM2VmcmVlemUtXHUwMDNlcmVzZW5kID0gdHJ1ZTtcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYzo1Njc2Olx0XHRcdFx0cmVmLVx1MDAzZWZyZWV6ZS1cdTAwM2Vpc19mcm96ZW4gPSBpc19mcm96ZW47XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtNTY3Ny1cdFx0XHR9XG4tLVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jPTU2OTE9c3RhdGljIGludCBiaW5kZXJfaW9jdGxfZnJlZXplKHN0cnVjdCBiaW5kZXJfZnJlZXplX2luZm8gKmluZm8sXG4tLVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jLTU3MTgtXHRcdHJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jOjU3MTk6XHRcdFx0dGFyZ2V0X3Byb2MtXHUwMDNlZnJlZXplX3dhaXQsXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtNTcyMC1cdFx0XHQoIXRhcmdldF9wcm9jLVx1MDAzZW91dHN0YW5kaW5nX3R4bnMpLFxuLS1cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYz02MDY3PXN0YXRpYyBpbnQgYmluZGVyX29wZW4oc3RydWN0IGlub2RlICpub2RwLCBzdHJ1Y3QgZmlsZSAqZmlscClcbi0tXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtNjA4OC1cdElOSVRfTElTVF9IRUFEKFx1MDAyNnByb2MtXHUwMDNldG9kbyk7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM6NjA4OTpcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2cHJvYy1cdTAwM2VmcmVlemVfd2FpdCk7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtNjA5MC1cdHByb2MtXHUwMDNlZGVmYXVsdF9wcmlvcml0eSA9IHRhc2tfbmljZShjdXJyZW50KTtcbi0tXG5kcml2ZXJzL2F0YS9saWJhaGNpX3BsYXRmb3JtLmM9Nzk4PXZvaWQgYWhjaV9wbGF0Zm9ybV9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvYXRhL2xpYmFoY2lfcGxhdGZvcm0uYy04MDgtXHRcdC8qIERpc2FibGUgcG9ydCBpbnRlcnJ1cHRzICovXG5kcml2ZXJzL2F0YS9saWJhaGNpX3BsYXRmb3JtLmM6ODA5Olx0XHRpZiAoYXAtXHUwMDNlb3BzLVx1MDAzZWZyZWV6ZSlcbmRyaXZlcnMvYXRhL2xpYmFoY2lfcGxhdGZvcm0uYzo4MTA6XHRcdFx0YXAtXHUwMDNlb3BzLVx1MDAzZWZyZWV6ZShhcCk7XG5kcml2ZXJzL2F0YS9saWJhaGNpX3BsYXRmb3JtLmMtODExLVxuLS1cbmRyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmM9NjM5NT12b2lkIGF0YV9wY2lfc2h1dGRvd25fb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMtNjQwNS1cdFx0LyogRGlzYWJsZSBwb3J0IGludGVycnVwdHMgKi9cbmRyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmM6NjQwNjpcdFx0aWYgKGFwLVx1MDAzZW9wcy1cdTAwM2VmcmVlemUpXG5kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jOjY0MDc6XHRcdFx0YXAtXHUwMDNlb3BzLVx1MDAzZWZyZWV6ZShhcCk7XG5kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jLTY0MDgtXG4tLVxuZHJpdmVycy9hdGEvbGliYXRhLWVoLmM9MTExMD1FWFBPUlRfU1lNQk9MX0dQTChhdGFfcG9ydF9hYm9ydCk7XG4tLVxuZHJpdmVycy9hdGEvbGliYXRhLWVoLmMtMTEyMC0gKlxuZHJpdmVycy9hdGEvbGliYXRhLWVoLmM6MTEyMTogKlx0YXAtXHUwMDNlb3BzLVx1MDAzZWZyZWV6ZSgpIGNhbGxiYWNrIGNhbiBiZSB1c2VkIGZvciBmcmVlemluZyB0aGUgcG9ydFxuZHJpdmVycy9hdGEvbGliYXRhLWVoLmMtMTEyMi0gKlx0aGFyZHdhcmUtd2lzZSAoZS5nLiBtYXNrIGludGVycnVwdCBhbmQgc3RvcCBETUEgZW5naW5lKS4gIElmIGFcbi0tXG5kcml2ZXJzL2F0YS9saWJhdGEtZWguYz0xMTMwPXN0YXRpYyB2b2lkIF9fYXRhX3BvcnRfZnJlZXplKHN0cnVjdCBhdGFfcG9ydCAqYXApXG5kcml2ZXJzL2F0YS9saWJhdGEtZWguYy0xMTMxLXtcbmRyaXZlcnMvYXRhL2xpYmF0YS1laC5jOjExMzI6XHRpZiAoYXAtXHUwMDNlb3BzLVx1MDAzZWZyZWV6ZSlcbmRyaXZlcnMvYXRhL2xpYmF0YS1laC5jOjExMzM6XHRcdGFwLVx1MDAzZW9wcy1cdTAwM2VmcmVlemUoYXApO1xuZHJpdmVycy9hdGEvbGliYXRhLWVoLmMtMTEzNC1cbi0tXG5kcml2ZXJzL2F0YS9zYXRhX3Byb21pc2UuYz0xODM9c3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHBkY19zYXRhX29wcyA9IHtcbi0tXG5kcml2ZXJzL2F0YS9zYXRhX3Byb21pc2UuYy0xOTQtLyogRmlyc3QtZ2VuZXJhdGlvbiBjaGlwcyBuZWVkIGEgbW9yZSByZXN0cmljdGl2ZSAtXHUwMDNlY2hlY2tfYXRhcGlfZG1hIG9wLFxuZHJpdmVycy9hdGEvc2F0YV9wcm9taXNlLmM6MTk1OiAgIGFuZCAtXHUwMDNlZnJlZXplL3RoYXcgdGhhdCBpZ25vcmUgdGhlIGhvdHBsdWcgY29udHJvbHMuICovXG5kcml2ZXJzL2F0YS9zYXRhX3Byb21pc2UuYy0xOTYtc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHBkY19vbGRfc2F0YV9vcHMgPSB7XG4tLVxuZHJpdmVycy9hdGEvc2F0YV9wcm9taXNlLmM9NzA2PXN0YXRpYyB2b2lkIHBkY19zYXRhX2ZyZWV6ZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKVxuLS1cbmRyaXZlcnMvYXRhL3NhdGFfcHJvbWlzZS5jLTcxOC1cdCAqIDIpIGFwLVx1MDAzZWxvY2sgPT0gXHUwMDI2YXAtXHUwMDNlaG9zdC1cdTAwM2Vsb2NrXG5kcml2ZXJzL2F0YS9zYXRhX3Byb21pc2UuYzo3MTk6XHQgKiAzKSAtXHUwMDNlZnJlZXplKCkgYW5kIC1cdTAwM2V0aGF3KCkgYXJlIGNhbGxlZCB3aXRoIGFwLVx1MDAzZWxvY2sgaGVsZFxuZHJpdmVycy9hdGEvc2F0YV9wcm9taXNlLmMtNzIwLVx0ICovXG4tLVxuZHJpdmVycy9iYXNlL3BsYXRmb3JtLmM9MTIyNz1pbnQgcGxhdGZvcm1fcG1fZnJlZXplKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYy0xMjM1LVx0aWYgKGRydi1cdTAwM2VwbSkge1xuZHJpdmVycy9iYXNlL3BsYXRmb3JtLmM6MTIzNjpcdFx0aWYgKGRydi1cdTAwM2VwbS1cdTAwM2VmcmVlemUpXG5kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYzoxMjM3Olx0XHRcdHJldCA9IGRydi1cdTAwM2VwbS1cdTAwM2VmcmVlemUoZGV2KTtcbmRyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jLTEyMzgtXHR9IGVsc2Uge1xuLS1cbmRyaXZlcnMvYmFzZS9wb3dlci9tYWluLmM9MzY2PXN0YXRpYyBwbV9jYWxsYmFja190IHBtX29wKGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpvcHMsIHBtX21lc3NhZ2VfdCBzdGF0ZSlcbi0tXG5kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jLTM3Ny1cdGNhc2UgUE1fRVZFTlRfUVVJRVNDRTpcbmRyaXZlcnMvYmFzZS9wb3dlci9tYWluLmM6Mzc4Olx0XHRyZXR1cm4gb3BzLVx1MDAzZWZyZWV6ZTtcbmRyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMtMzc5LVx0Y2FzZSBQTV9FVkVOVF9QT1dFUk9GRjpcbi0tXG5kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jPTQwMD1zdGF0aWMgcG1fY2FsbGJhY2tfdCBwbV9sYXRlX2Vhcmx5X29wKGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpvcHMsXG4tLVxuZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYy00MTItXHRjYXNlIFBNX0VWRU5UX1FVSUVTQ0U6XG5kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jOjQxMzpcdFx0cmV0dXJuIG9wcy1cdTAwM2VmcmVlemVfbGF0ZTtcbmRyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMtNDE0LVx0Y2FzZSBQTV9FVkVOVF9QT1dFUk9GRjpcbi0tXG5kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jPTQzNj1zdGF0aWMgcG1fY2FsbGJhY2tfdCBwbV9ub2lycV9vcChjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqb3BzLCBwbV9tZXNzYWdlX3Qgc3RhdGUpXG4tLVxuZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYy00NDctXHRjYXNlIFBNX0VWRU5UX1FVSUVTQ0U6XG5kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jOjQ0ODpcdFx0cmV0dXJuIG9wcy1cdTAwM2VmcmVlemVfbm9pcnE7XG5kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jLTQ0OS1cdGNhc2UgUE1fRVZFTlRfUE9XRVJPRkY6XG4tLVxuZHJpdmVycy9ncHUvaG9zdDF4L2Rldi5oPTMwNz1zdGF0aWMgaW5saW5lIHZvaWQgaG9zdDF4X2h3X2NkbWFfZnJlZXplKHN0cnVjdCBob3N0MXggKmhvc3QsXG4tLVxuZHJpdmVycy9ncHUvaG9zdDF4L2Rldi5oLTMwOS17XG5kcml2ZXJzL2dwdS9ob3N0MXgvZGV2Lmg6MzEwOlx0aG9zdC1cdTAwM2VjZG1hX29wLVx1MDAzZWZyZWV6ZShjZG1hKTtcbmRyaXZlcnMvZ3B1L2hvc3QxeC9kZXYuaC0zMTEtfVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL2NoaXAuYz02NzMwPXZvaWQgc3RhcnRfZnJlZXplX2hhbmRsaW5nKHN0cnVjdCBoZmkxX3Bwb3J0ZGF0YSAqcHBkLCBpbnQgZmxhZ3MpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hmaTEvY2hpcC5jLTY3NjMtXHQvKiBxdWV1ZSBub24taW50ZXJydXB0IGhhbmRsZXIgKi9cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL2NoaXAuYzo2NzY0Olx0cXVldWVfd29yayhwcGQtXHUwMDNlaGZpMV93cSwgXHUwMDI2cHBkLVx1MDAzZWZyZWV6ZV93b3JrKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL2NoaXAuYy02NzY1LX1cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9jaGlwLmM9OTg3MT12b2lkIGhmaTFfcXVpZXRfc2VyZGVzKHN0cnVjdCBoZmkxX3Bwb3J0ZGF0YSAqcHBkKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL2NoaXAuYy05ODk2LVx0Y2xlYXJfcmN2Y3RybChkZCwgUkNWX0NUUkxfUkNWX1BPUlRfRU5BQkxFX1NNQVNLKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL2NoaXAuYzo5ODk3Olx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZwcGQtXHUwMDNlZnJlZXplX3dvcmspO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hmaTEvY2hpcC5jLTk4OTgtfVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL2luaXQuYz01ODg9dm9pZCBoZmkxX2luaXRfcHBvcnRkYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgaGZpMV9wcG9ydGRhdGEgKnBwZCxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9pbml0LmMtNjE2LVx0SU5JVF9XT1JLKFx1MDAyNnBwZC1cdTAwM2VsaW5rX2Rvd25fd29yaywgaGFuZGxlX2xpbmtfZG93bik7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9pbml0LmM6NjE3Olx0SU5JVF9XT1JLKFx1MDAyNnBwZC1cdTAwM2VmcmVlemVfd29yaywgaGFuZGxlX2ZyZWV6ZSk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9pbml0LmMtNjE4LVx0SU5JVF9XT1JLKFx1MDAyNnBwZC1cdTAwM2VsaW5rX2Rvd25ncmFkZV93b3JrLCBoYW5kbGVfbGlua19kb3duZ3JhZGUpO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jdHJsLmM9Mjc1Mz1zdGF0aWMgaW50IGlyZG1hX3NjX3FwX3VwbG9hZF9jb250ZXh0KHN0cnVjdCBpcmRtYV9zY19kZXYgKmRldixcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvY3RybC5jLTI3NzEtXHQgICAgICBGSUVMRF9QUkVQKElSRE1BX0NRUFNRX1VDVFhfUkFXRk9STUFULCBpbmZvLVx1MDAzZXJhd19mb3JtYXQpIHxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jdHJsLmM6Mjc3MjpcdCAgICAgIEZJRUxEX1BSRVAoSVJETUFfQ1FQU1FfVUNUWF9GUkVFWkVRUCwgaW5mby1cdTAwM2VmcmVlemVfcXApIHxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jdHJsLmMtMjc3My1cdCAgICAgIEZJRUxEX1BSRVAoSVJETUFfQ1FQU1FfV1FFVkFMSUQsIGNxcC1cdTAwM2Vwb2xhcml0eSk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM9Mzg1PXZvaWQga3N6OTQ3N19yX21pYl9jbnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsIHUxNiBhZGRyLCB1NjQgKmNudClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0zOTItXHQvKiByZXRhaW4gdGhlIGZsdXNoL2ZyZWV6ZSBiaXQgKi9cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jOjM5MzpcdGRhdGEgPSBwLVx1MDAzZWZyZWV6ZSA/IE1JQl9DT1VOVEVSX0ZMVVNIX0ZSRUVaRSA6IDA7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0zOTQtXHRkYXRhIHw9IE1JQl9DT1VOVEVSX1JFQUQ7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM9NDE5PXZvaWQga3N6OTQ3N19mcmVlemVfbWliKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LCBib29sIGZyZWV6ZSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy00MjgtXHQvKiB1c2VkIGJ5IE1JQiBjb3VudGVyIHJlYWRpbmcgY29kZSB0byBrbm93IGZyZWV6ZSBpcyBlbmFibGVkICovXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYzo0Mjk6XHRwLVx1MDAzZWZyZWV6ZSA9IGZyZWV6ZTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTQzMC1cdG11dGV4X3VubG9jayhcdTAwMjZwLVx1MDAzZW1pYi5jbnRfbXV0ZXgpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2J1ZmZlcnMuYz0xMzcxPWludCBtbHhzd19zcF9zYl9wb29sX3NldChzdHJ1Y3QgbWx4c3dfY29yZSAqbWx4c3dfY29yZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9idWZmZXJzLmMtMTM4OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2J1ZmZlcnMuYzoxMzkwOlx0aWYgKHByLVx1MDAzZWZyZWV6ZV9tb2RlIFx1MDAyNlx1MDAyNiBwci1cdTAwM2Vtb2RlICE9IG1vZGUpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2J1ZmZlcnMuYy0xMzkxLVx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtDaGFuZ2luZyB0aGlzIHBvb2wmIzM5O3MgdGhyZXNob2xkIHR5cGUgaXMgZm9yYmlkZGVuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9idWZmZXJzLmMtMTM5NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2J1ZmZlcnMuYzoxMzk1Olx0aWYgKHByLVx1MDAzZWZyZWV6ZV9zaXplIFx1MDAyNlx1MDAyNiBwci1cdTAwM2VzaXplICE9IHNpemUpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2J1ZmZlcnMuYy0xMzk2LVx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtDaGFuZ2luZyB0aGlzIHBvb2wmIzM5O3Mgc2l6ZSBpcyBmb3JiaWRkZW5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2J1ZmZlcnMuYz0xNDk5PWludCBtbHhzd19zcF9zYl90Y19wb29sX2JpbmRfc2V0KHN0cnVjdCBtbHhzd19jb3JlX3BvcnQgKm1seHN3X2NvcmVfcG9ydCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9idWZmZXJzLmMtMTUyOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2J1ZmZlcnMuYzoxNTMwOlx0aWYgKGNtLVx1MDAzZWZyZWV6ZV9wb29sIFx1MDAyNlx1MDAyNiBjbS1cdTAwM2Vwb29sX2luZGV4ICE9IHBvb2xfaW5kZXgpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2J1ZmZlcnMuYy0xNTMxLVx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtCaW5kaW5nIHRoaXMgVEMgdG8gYSBkaWZmZXJlbnQgcG9vbCBpcyBmb3JiaWRkZW5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2J1ZmZlcnMuYy0xNTM0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fYnVmZmVycy5jOjE1MzU6XHRpZiAoY20tXHUwMDNlZnJlZXplX3RocmVzaCBcdTAwMjZcdTAwMjYgY20tXHUwMDNlbWF4X2J1ZmYgIT0gdGhyZXNob2xkKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9idWZmZXJzLmMtMTUzNi1cdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7Q2hhbmdpbmcgdGhpcyBUQyYjMzk7cyB0aHJlc2hvbGQgaXMgZm9yYmlkZGVuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM9NzkyPXN0YXRpYyBpbnQgYnJjbWZfc2Rpb2RfZnJlZXplcl9hdHRhY2goc3RydWN0IGJyY21mX3NkaW9fZGV2ICpzZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy03OTYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6Nzk3Olx0c2Rpb2Rldi1cdTAwM2VmcmVlemVyID0ga3phbGxvY19vYmooKnNkaW9kZXYtXHUwMDNlZnJlZXplcik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6Nzk4Olx0aWYgKCFzZGlvZGV2LVx1MDAzZWZyZWV6ZXIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtNzk5LVx0XHRyZXR1cm4gLUVOT01FTTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzo4MDA6XHRhdG9taWNfc2V0KFx1MDAyNnNkaW9kZXYtXHUwMDNlZnJlZXplci1cdTAwM2V0aHJlYWRfY291bnQsIDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjgwMTpcdGF0b21pY19zZXQoXHUwMDI2c2Rpb2Rldi1cdTAwM2VmcmVlemVyLVx1MDAzZWZyZWV6aW5nLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzo4MDI6XHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNnNkaW9kZXYtXHUwMDNlZnJlZXplci1cdTAwM2V0aHJlYWRfZnJlZXplKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzo4MDM6XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2c2Rpb2Rldi1cdTAwM2VmcmVlemVyLVx1MDAzZXJlc3VtZWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTgwNC1cdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYz04MDc9c3RhdGljIHZvaWQgYnJjbWZfc2Rpb2RfZnJlZXplcl9kZXRhY2goc3RydWN0IGJyY21mX3NkaW9fZGV2ICpzZGlvZGV2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTgwOC17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6ODA5Olx0aWYgKHNkaW9kZXYtXHUwMDNlZnJlZXplcikge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjgxMDpcdFx0V0FSTl9PTihhdG9taWNfcmVhZChcdTAwMjZzZGlvZGV2LVx1MDAzZWZyZWV6ZXItXHUwMDNlZnJlZXppbmcpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzo4MTE6XHRcdGtmcmVlKHNkaW9kZXYtXHUwMDNlZnJlZXplcik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6ODEyOlx0XHRzZGlvZGV2LVx1MDAzZWZyZWV6ZXIgPSBOVUxMO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTgxMy1cdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM9ODE2PXN0YXRpYyBpbnQgYnJjbWZfc2Rpb2RfZnJlZXplcl9vbihzdHJ1Y3QgYnJjbWZfc2Rpb19kZXYgKnNkaW9kZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtODE3LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzo4MTg6XHRhdG9taWNfdCAqZXhwZWN0ID0gXHUwMDI2c2Rpb2Rldi1cdTAwM2VmcmVlemVyLVx1MDAzZXRocmVhZF9jb3VudDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy04MTktXHRpbnQgcmVzID0gMDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy04MjAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6ODIxOlx0c2Rpb2Rldi1cdTAwM2VmcmVlemVyLVx1MDAzZWZyb3plbl9jb3VudCA9IDA7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6ODIyOlx0cmVpbml0X2NvbXBsZXRpb24oXHUwMDI2c2Rpb2Rldi1cdTAwM2VmcmVlemVyLVx1MDAzZXJlc3VtZWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjgyMzpcdGF0b21pY19zZXQoXHUwMDI2c2Rpb2Rldi1cdTAwM2VmcmVlemVyLVx1MDAzZWZyZWV6aW5nLCAxKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy04MjQtXHRicmNtZl9zZGlvX3RyaWdnZXJfZHBjKHNkaW9kZXYtXHUwMDNlYnVzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzo4MjU6XHR3YWl0X2V2ZW50KHNkaW9kZXYtXHUwMDNlZnJlZXplci1cdTAwM2V0aHJlYWRfZnJlZXplLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjgyNjpcdFx0ICAgYXRvbWljX3JlYWQoZXhwZWN0KSA9PSBzZGlvZGV2LVx1MDAzZWZyZWV6ZXItXHUwMDNlZnJvemVuX2NvdW50KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy04MjctXHRzZGlvX2NsYWltX2hvc3Qoc2Rpb2Rldi1cdTAwM2VmdW5jMSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jPTgzMz1zdGF0aWMgdm9pZCBicmNtZl9zZGlvZF9mcmVlemVyX29mZihzdHJ1Y3QgYnJjbWZfc2Rpb19kZXYgKnNkaW9kZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTgzNy1cdHNkaW9fcmVsZWFzZV9ob3N0KHNkaW9kZXYtXHUwMDNlZnVuYzEpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjgzODpcdGF0b21pY19zZXQoXHUwMDI2c2Rpb2Rldi1cdTAwM2VmcmVlemVyLVx1MDAzZWZyZWV6aW5nLCAwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzo4Mzk6XHRjb21wbGV0ZV9hbGwoXHUwMDI2c2Rpb2Rldi1cdTAwM2VmcmVlemVyLVx1MDAzZXJlc3VtZWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTg0MC19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jPTg0Mj1ib29sIGJyY21mX3NkaW9kX2ZyZWV6aW5nKHN0cnVjdCBicmNtZl9zZGlvX2RldiAqc2Rpb2Rldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtODQ0LVx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX1BNX1NMRUVQKSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzo4NDU6XHRcdGF0b21pY19yZWFkKFx1MDAyNnNkaW9kZXYtXHUwMDNlZnJlZXplci1cdTAwM2VmcmVlemluZyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtODQ2LX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM9ODQ4PXZvaWQgYnJjbWZfc2Rpb2RfdHJ5X2ZyZWV6ZShzdHJ1Y3QgYnJjbWZfc2Rpb19kZXYgKnNkaW9kZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTg1MS1cdFx0cmV0dXJuO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjg1MjpcdHNkaW9kZXYtXHUwMDNlZnJlZXplci1cdTAwM2Vmcm96ZW5fY291bnQmIzQzOyYjNDM7O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjg1MzpcdHdha2VfdXAoXHUwMDI2c2Rpb2Rldi1cdTAwM2VmcmVlemVyLVx1MDAzZXRocmVhZF9mcmVlemUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjg1NDpcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2c2Rpb2Rldi1cdTAwM2VmcmVlemVyLVx1MDAzZXJlc3VtZWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTg1NS19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jPTg1Nz12b2lkIGJyY21mX3NkaW9kX2ZyZWV6ZXJfY291bnQoc3RydWN0IGJyY21mX3NkaW9fZGV2ICpzZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy04NTktXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUE1fU0xFRVApKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjg2MDpcdFx0YXRvbWljX2luYyhcdTAwMjZzZGlvZGV2LVx1MDAzZWZyZWV6ZXItXHUwMDNldGhyZWFkX2NvdW50KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy04NjEtfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYz04NjM9dm9pZCBicmNtZl9zZGlvZF9mcmVlemVyX3VuY291bnQoc3RydWN0IGJyY21mX3NkaW9fZGV2ICpzZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy04NjUtXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUE1fU0xFRVApKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjg2NjpcdFx0YXRvbWljX2RlYyhcdTAwMjZzZGlvZGV2LVx1MDAzZWZyZWV6ZXItXHUwMDNldGhyZWFkX2NvdW50KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy04NjctfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jPTI1NDg9c3RhdGljIHZvaWQgcnR3X2NvZXhfcnVuX2NvZXgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcmVhc29uKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jLTI1ODgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYzoyNTg5Olx0aWYgKGNvZXgtXHUwMDNlZnJlZXplIFx1MDAyNlx1MDAyNiBjb2V4X2RtLVx1MDAzZXJlYXNvbiA9PSBDT0VYX1JTTl9CVElORk8gXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYy0yNTkwLVx0ICAgICFjb2V4X3N0YXQtXHUwMDNlYnRfc2V0dXBfbGluaykge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jPTI3MDg9c3RhdGljIHZvaWQgX19ydHdfY29leF9pbml0X2h3X2NvbmZpZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIHdpZmlfb25seSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYy0yNzUzLVx0XHRjb2V4LVx1MDAzZXN0b3BfZG0gPSBmYWxzZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jOjI3NTQ6XHRcdGNvZXgtXHUwMDNlZnJlZXplID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jLTI3NTUtXHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmM9Mjg2OT12b2lkIHJ0d19jb2V4X3NjYW5fbm90aWZ5KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHR5cGUpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmMtMjg3Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jOjI4Nzc6XHRjb2V4LVx1MDAzZWZyZWV6ZSA9IGZhbHNlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmMtMjg3OC1cdHJ0d19jb2V4X3dyaXRlX3NjYmQocnR3ZGV2LCBDT0VYX1NDQkRfQUNUSVZFIHwgQ09FWF9TQ0JEX09OT0ZGLCB0cnVlKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYz0yOTMzPXZvaWQgcnR3X2NvZXhfY29ubmVjdF9ub3RpZnkoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggdHlwZSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYy0yOTcyLVx0XHQgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jOjI5NzM6XHRcdGNvZXgtXHUwMDNlZnJlZXplID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jLTI5NzQtXHRcdGllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsocnR3ZGV2LVx1MDAzZWh3LCBcdTAwMjZjb2V4LVx1MDAzZWRlZnJlZXplX3dvcmssXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmMtMjk3Ny1cdFx0Y29leF9zdGF0LVx1MDAzZXdsX2hpX3ByaV90YXNrMSA9IGZhbHNlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmM6Mjk3ODpcdFx0Y29leC1cdTAwM2VmcmVlemUgPSBmYWxzZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jLTI5NzktXHRcdGNvZXhfc3RhdC1cdTAwM2V3bF9jb25uZWN0aW5nID0gZmFsc2U7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmM9MzQ5MT12b2lkIHJ0d19jb2V4X2RlZnJlZXplX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jLTM0OTgtXHRtdXRleF9sb2NrKFx1MDAyNnJ0d2Rldi1cdTAwM2VtdXRleCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYzozNDk5Olx0Y29leC1cdTAwM2VmcmVlemUgPSBmYWxzZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jLTM1MDAtXHRjb2V4X3N0YXQtXHUwMDNld2xfaGlfcHJpX3Rhc2sxID0gZmFsc2U7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmM9MzkzNj12b2lkIHJ0d19jb2V4X2Rpc3BsYXlfY29leF9pbmZvKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBzZXFfZmlsZSAqbSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYy0zOTk1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmM6Mzk5NjpcdH0gZWxzZSBpZiAoY29leC1cdTAwM2VmcmVlemUpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jLTM5OTctXHRcdHNlcV9wdXRzKG0sIFwmIzM0Oz09PT09PT09PT09PVtjb2V4X2ZyZWV6ZV09PT09PT09PT09PT1cXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbnZkaW1tL2RpbW1fZGV2cy5jPTQxMD1zdGF0aWMgdW1vZGVfdCBudmRpbW1fdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYSwgaW50IG4pXG4tLVxuZHJpdmVycy9udmRpbW0vZGltbV9kZXZzLmMtNDIxLVx0XHQvKiBBcmUgdGhlcmUgYW55IHN0YXRlIG11dGF0aW9uIG9wcyAobWFrZSB3cml0YWJsZSk/ICovXG5kcml2ZXJzL252ZGltbS9kaW1tX2RldnMuYzo0MjI6XHRcdGlmIChudmRpbW0tXHUwMDNlc2VjLm9wcy1cdTAwM2VmcmVlemUgfHwgbnZkaW1tLVx1MDAzZXNlYy5vcHMtXHUwMDNlZGlzYWJsZVxuZHJpdmVycy9udmRpbW0vZGltbV9kZXZzLmMtNDIzLVx0XHRcdFx0fHwgbnZkaW1tLVx1MDAzZXNlYy5vcHMtXHUwMDNlY2hhbmdlX2tleVxuLS1cbmRyaXZlcnMvbnZkaW1tL2RpbW1fZGV2cy5jLTQyOS1cbmRyaXZlcnMvbnZkaW1tL2RpbW1fZGV2cy5jOjQzMDpcdGlmIChudmRpbW0tXHUwMDNlc2VjLm9wcy1cdTAwM2VmcmVlemUpXG5kcml2ZXJzL252ZGltbS9kaW1tX2RldnMuYy00MzEtXHRcdHJldHVybiBhLVx1MDAzZW1vZGU7XG4tLVxuZHJpdmVycy9udmRpbW0vZGltbV9kZXZzLmM9NjcwPWludCBudmRpbW1fc2VjdXJpdHlfZnJlZXplKHN0cnVjdCBudmRpbW0gKm52ZGltbSlcbi0tXG5kcml2ZXJzL252ZGltbS9kaW1tX2RldnMuYy02NzUtXG5kcml2ZXJzL252ZGltbS9kaW1tX2RldnMuYzo2NzY6XHRpZiAoIW52ZGltbS1cdTAwM2VzZWMub3BzIHx8ICFudmRpbW0tXHUwMDNlc2VjLm9wcy1cdTAwM2VmcmVlemUpXG5kcml2ZXJzL252ZGltbS9kaW1tX2RldnMuYy02NzctXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5kcml2ZXJzL252ZGltbS9kaW1tX2RldnMuYy02ODYtXG5kcml2ZXJzL252ZGltbS9kaW1tX2RldnMuYzo2ODc6XHRyYyA9IG52ZGltbS1cdTAwM2VzZWMub3BzLVx1MDAzZWZyZWV6ZShudmRpbW0pO1xuZHJpdmVycy9udmRpbW0vZGltbV9kZXZzLmMtNjg4LVx0bnZkaW1tLVx1MDAzZXNlYy5mbGFncyA9IG52ZGltbV9zZWN1cml0eV9mbGFncyhudmRpbW0sIE5WRElNTV9VU0VSKTtcbi0tXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmM9MTA2Mz1zdGF0aWMgaW50IHBjaV9wbV9mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xMDg4LVxuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jOjEwODk6XHRpZiAocG0tXHUwMDNlZnJlZXplKSB7XG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMtMTA5MC1cdFx0aW50IGVycm9yO1xuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jLTEwOTEtXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmM6MTA5MjpcdFx0ZXJyb3IgPSBwbS1cdTAwM2VmcmVlemUoZGV2KTtcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYzoxMDkzOlx0XHRzdXNwZW5kX3JlcG9ydF9yZXN1bHQoZGV2LCBwbS1cdTAwM2VmcmVlemUsIGVycm9yKTtcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xMDk0LVx0XHRpZiAoZXJyb3IpXG4tLVxuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jPTExMDE9c3RhdGljIGludCBwY2lfcG1fZnJlZXplX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMtMTEwOC1cbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYzoxMTA5Olx0aWYgKHBtIFx1MDAyNlx1MDAyNiBwbS1cdTAwM2VmcmVlemVfbm9pcnEpIHtcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xMTEwLVx0XHRpbnQgZXJyb3I7XG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMtMTExMS1cbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYzoxMTEyOlx0XHRlcnJvciA9IHBtLVx1MDAzZWZyZWV6ZV9ub2lycShkZXYpO1xuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jOjExMTM6XHRcdHN1c3BlbmRfcmVwb3J0X3Jlc3VsdChkZXYsIHBtLVx1MDAzZWZyZWV6ZV9ub2lycSwgZXJyb3IpO1xuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jLTExMTQtXHRcdGlmIChlcnJvcilcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9wbS5jPTI3PXN0YXRpYyBpbnQgZG9fc2NzaV9mcmVlemUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqcG0pXG5kcml2ZXJzL3Njc2kvc2NzaV9wbS5jLTI4LXtcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDk0CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgRnJlZXppbmcgTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gdGhpcyBwYXRjaCBpbiBgZnMvc3VwZXIuY2AuIEl0IHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gYGZzX2JkZXZfZnJlZXplYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFdhaXQgYSBtaW51dGUsIHdoZXJlIGlzICp0aGF0KiBjYWxsZWQgZnJvbT8gUmlnaHQsIGBmc19iZGV2X2ZyZWV6ZWAgaXMgaW52b2tlZCBieSBgYmRldl9mcmVlemVgLiBUaGF0JiMzOTtzIGluIGBibG9jay9iZGV2LmNgLiBBbHJpZ2h0LCBzbyBsZXQmIzM5O3Mgc2hpZnQgZ2VhcnMgYW5kIGRpdmUgaW50byBgYmRldl9mcmVlemVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGhlcmUgdG8gc2VlIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24gaW4gdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmRldl9mcmVlemUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmRldi5jPTI4NT1FWFBPUlRfU1lNQk9MKHN5bmNfYmxvY2tkZXZfcmFuZ2UpO1xuLS1cbmJsb2NrL2JkZXYuYy0yODctLyoqXG5ibG9jay9iZGV2LmM6Mjg4OiAqIGJkZXZfZnJlZXplIC0gbG9jayBhIGZpbGVzeXN0ZW0gYW5kIGZvcmNlIGl0IGludG8gYSBjb25zaXN0ZW50IHN0YXRlXG5ibG9jay9iZGV2LmMtMjg5LSAqIEBiZGV2Olx0YmxvY2tkZXZpY2UgdG8gbG9ja1xuLS1cbmJsb2NrL2JkZXYuYy0yOTQtICogdW5mcmVlemUgcHJvY2VzcyBjYW4gdW5mcmVlemUgdGhlIGZyb3plbiBmaWxlc3lzdGVtIGFjdHVhbGx5IHdoZW4gbXVsdGlwbGVcbmJsb2NrL2JkZXYuYzoyOTU6ICogZnJlZXplIHJlcXVlc3RzIGFycml2ZSBzaW11bHRhbmVvdXNseS4gSXQgY291bnRzIHVwIGluIGJkZXZfZnJlZXplKCkgYW5kXG5ibG9jay9iZGV2LmMtMjk2LSAqIGNvdW50IGRvd24gaW4gYmRldl90aGF3KCkuIFdoZW4gaXQgYmVjb21lcyAwLCB0aGF3X2JkZXYoKSB3aWxsIHVuZnJlZXplXG4tLVxuYmxvY2svYmRldi5jLTMwMC0gKi9cbmJsb2NrL2JkZXYuYzozMDE6aW50IGJkZXZfZnJlZXplKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG5ibG9jay9iZGV2LmMtMzAyLXtcbi0tXG5ibG9jay9iZGV2LmMtMzI2LX1cbmJsb2NrL2JkZXYuYzozMjc6RVhQT1JUX1NZTUJPTChiZGV2X2ZyZWV6ZSk7XG5ibG9jay9iZGV2LmMtMzI4LVxuLS1cbmJsb2NrL2JkZXYuYy0zMzItICpcbmJsb2NrL2JkZXYuYzozMzM6ICogVW5sb2NrcyB0aGUgZmlsZXN5c3RlbSBhbmQgbWFya3MgaXQgd3JpdGVhYmxlIGFnYWluIGFmdGVyIGJkZXZfZnJlZXplKCkuXG5ibG9jay9iZGV2LmMtMzM0LSAqXG4tLVxuZHJpdmVycy9tZC9kbS5jPTI5MzI9c3RhdGljIGludCBsb2NrX2ZzKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZClcbi0tXG5kcml2ZXJzL21kL2RtLmMtMjkzNy1cbmRyaXZlcnMvbWQvZG0uYzoyOTM4Olx0ciA9IGJkZXZfZnJlZXplKG1kLVx1MDAzZWRpc2stXHUwMDNlcGFydDApO1xuZHJpdmVycy9tZC9kbS5jLTI5MzktXHRpZiAoIXIpXG4tLVxuZnMvZXhmYXQvc3VwZXIuYz0xNTU9aW50IGV4ZmF0X2ZvcmNlX3NodXRkb3duKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBmbGFncylcbi0tXG5mcy9leGZhdC9zdXBlci5jLTE2Ni1cdGNhc2UgRVhGQVRfR09JTkdfRE9XTl9GVUxMU1lOQzpcbmZzL2V4ZmF0L3N1cGVyLmM6MTY3Olx0XHRyZXQgPSBiZGV2X2ZyZWV6ZShzYi1cdTAwM2VzX2JkZXYpO1xuZnMvZXhmYXQvc3VwZXIuYy0xNjgtXHRcdGlmIChyZXQpXG4tLVxuZnMvZXh0NC9pb2N0bC5jPTgxMD1pbnQgZXh0NF9mb3JjZV9zaHV0ZG93bihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgZmxhZ3MpXG4tLVxuZnMvZXh0NC9pb2N0bC5jLTgyNS1cdGNhc2UgRVhUNF9HT0lOR19GTEFHU19ERUZBVUxUOlxuZnMvZXh0NC9pb2N0bC5jOjgyNjpcdFx0cmV0ID0gYmRldl9mcmVlemUoc2ItXHUwMDNlc19iZGV2KTtcbmZzL2V4dDQvaW9jdGwuYy04MjctXHRcdGlmIChyZXQpXG4tLVxuZnMvZjJmcy9maWxlLmM9MjQ1Mz1pbnQgZjJmc19kb19zaHV0ZG93bihzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksIHVuc2lnbmVkIGludCBmbGFnLFxuLS1cbmZzL2YyZnMvZmlsZS5jLTI0NjAtXHRjYXNlIEYyRlNfR09JTkdfRE9XTl9GVUxMU1lOQzpcbmZzL2YyZnMvZmlsZS5jOjI0NjE6XHRcdHJldCA9IGJkZXZfZnJlZXplKHNiLVx1MDAzZXNfYmRldik7XG5mcy9mMmZzL2ZpbGUuYy0yNDYyLVx0XHRpZiAocmV0KVxuLS1cbmZzL250ZnMvc3VwZXIuYz0xODIwPWludCBudGZzX2ZvcmNlX3NodXRkb3duKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBmbGFncylcbi0tXG5mcy9udGZzL3N1cGVyLmMtMTgzMC1cdGNhc2UgRlNfU0hVVERPV05fRkxBR1NfTE9HRkxVU0g6XG5mcy9udGZzL3N1cGVyLmM6MTgzMTpcdFx0cmV0ID0gYmRldl9mcmVlemUoc2ItXHUwMDNlc19iZGV2KTtcbmZzL250ZnMvc3VwZXIuYy0xODMyLVx0XHRpZiAocmV0KVxuLS1cbmZzL250ZnMzL2ZpbGUuYz0xOTc9c3RhdGljIGludCBudGZzX2ZvcmNlX3NodXRkb3duKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBmbGFncylcbi0tXG5mcy9udGZzMy9maWxlLmMtMjA1LVx0LyogTm8gYWRkaXRpb25hbCBvcHRpb25zIHlldCAoZmxhZ3MpLiAqL1xuZnMvbnRmczMvZmlsZS5jOjIwNjpcdGVyciA9IGJkZXZfZnJlZXplKHNiLVx1MDAzZXNfYmRldik7XG5mcy9udGZzMy9maWxlLmMtMjA3LVx0aWYgKGVycilcbi0tXG5mcy9zdXBlci5jPTE0Mzc9c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqZ2V0X2JkZXZfc3VwZXIoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbi0tXG5mcy9zdXBlci5jLTE0NTItLyoqXG5mcy9zdXBlci5jOjE0NTM6ICogZnNfYmRldl9mcmVlemUgLSBmcmVlemUgb3duaW5nIGZpbGVzeXN0ZW0gb2YgYmxvY2sgZGV2aWNlXG5mcy9zdXBlci5jLTE0NTQtICogQGJkZXY6IGJsb2NrIGRldmljZVxuLS1cbmZzL3N1cGVyLmMtMTQ2Ni0gKi9cbmZzL3N1cGVyLmM6MTQ2NzpzdGF0aWMgaW50IGZzX2JkZXZfZnJlZXplKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG5mcy9zdXBlci5jLTE0Njgte1xuLS1cbmZzL3N1cGVyLmM9MTU1Mj1jb25zdCBzdHJ1Y3QgYmxrX2hvbGRlcl9vcHMgZnNfaG9sZGVyX29wcyA9IHtcbi0tXG5mcy9zdXBlci5jLTE1NTQtXHQuc3luY1x0XHRcdD0gZnNfYmRldl9zeW5jLFxuZnMvc3VwZXIuYzoxNTU1Olx0LmZyZWV6ZVx0XHRcdD0gZnNfYmRldl9mcmVlemUsXG5mcy9zdXBlci5jLTE1NTYtXHQudGhhd1x0XHRcdD0gZnNfYmRldl90aGF3LFxuLS1cbmZzL3hmcy94ZnNfZnNvcHMuYz00NTE9eGZzX2ZzX2dvaW5nZG93bihcbi0tXG5mcy94ZnMveGZzX2Zzb3BzLmMtNDU2LVx0Y2FzZSBYRlNfRlNPUF9HT0lOR19GTEFHU19ERUZBVUxUOiB7XG5mcy94ZnMveGZzX2Zzb3BzLmM6NDU3Olx0XHRpZiAoIWJkZXZfZnJlZXplKG1wLVx1MDAzZW1fc3VwZXItXHUwMDNlc19iZGV2KSkge1xuZnMveGZzL3hmc19mc29wcy5jLTQ1OC1cdFx0XHR4ZnNfZm9yY2Vfc2h1dGRvd24obXAsIFNIVVRET1dOX0ZPUkNFX1VNT1VOVCk7XG4tLVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaD0xODMyPXN0YXRpYyBpbmxpbmUgaW50IGVhcmx5X2xvb2t1cF9iZGV2KGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBkZXZfdCAqZGV2KVxuLS1cbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTgzNy1cbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTgzODppbnQgYmRldl9mcmVlemUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldik7XG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTE4MzktaW50IGJkZXZfdGhhdyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyNDEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA4MzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMgaW4gdGhlIEZpbGVzeXN0ZW0gQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgc29tZSByZWNlbnQgY2hhbmdlcyBpbiB0aGUgZmlsZXN5c3RlbSBjb2RlLCB0cnlpbmcgdG8gaWRlbnRpZnkgcHJvbWlzaW5nIGFyZWFzIGZvciBmdXp6aW5nLiBGaXJzdCwgSSBub3RpY2VkIHRoYXQgYGJkZXZfZnJlZXplYCBpcyBhIGZ1bmN0aW9uIGNhbGxlZCBieSBzZXZlcmFsIGZpbGVzeXN0ZW0tc3BlY2lmaWMgc2h1dGRvd24gcm91dGluZXM6IGBleGZhdF9mb3JjZV9zaHV0ZG93bmAsIGBleHQ0X2ZvcmNlX3NodXRkb3duYCwgYGYyZnNfZG9fc2h1dGRvd25gLCBgbnRmc19mb3JjZV9zaHV0ZG93bmAsIGB4ZnNfZnNfZ29pbmdkb3duYCwgYW5kIGV2ZW4gaW5kaXJlY3RseSB0aHJvdWdoIGBsb2NrX2ZzYCBpbiBgZG0uY2AuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKQnV0IHRoZSBrZXkgY2hhbmdlIGlzIGluIGBmcy9zdXBlci5jYCwgc3BlY2lmaWNhbGx5IGluIGBmc19iZGV2X2ZyZWV6ZWAuIFRoaXMgcGF0Y2ggYWRkcyBlcnJvciBoYW5kbGluZyBhZnRlciB0aGUgYHN5bmNfYmxvY2tkZXZgIGNhbGwuIElmIGBzeW5jX2Jsb2NrZGV2YCBmYWlscywgdGhlIHN1cGVyYmxvY2sgaXMgbm93IHRoYXdlZC4gVGhpcyBpcyBkZWZpbml0ZWx5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlIGJlY2F1c2UgaXQgaW50cm9kdWNlcyBhIG5ldyBmYWlsdXJlIHBhdGggYW5kIHJvbGxiYWNrIHNjZW5hcmlvLiBUaGlzIGFyZWEgbmVlZHMgbW9yZSBzY3J1dGlueS4gQSBzeW5jaHJvbml6YXRpb24gZXJyb3IgZHVyaW5nIGZyZWV6ZS90aGF3IGNvdWxkIGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uIG9yIGluY29uc2lzdGVuY2llcywgYW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgY2FuIGJlIHRhcmdldGVkIGJ5IGZ1enppbmcuCgpOZXh0LCBJIGxvb2tlZCBhdCBhIHJlbGF0ZWQgY2hhbmdlIGluIGBmcy9leGZhdC9taXNjLmNgLiBUaGlzIHBhdGNoIG1vZGlmaWVzIGhvdyBleEZBVCBoYW5kbGVzIGVycm9ycyB3aGVuIHRoZSBgZXJyb3JzPXJlbW91bnQtcm9gIG9wdGlvbiBpcyBzZXQuIEluc3RlYWQgb2Ygc2V0dGluZyB0aGUgYFNCX1JET05MWWAgZmxhZyBkaXJlY3RseSwgaXQgbm93IHNldHMgYEVYRkFUX0ZMQUdTX1NIVVRET1dOYC4gVGhpcyBjaGFuZ2Ugc2VlbXMgc3VidGxlIGJ1dCBjb3VsZCBhbHNvIGludHJvZHVjZSBuZXcgc3RhdGVzIG9yIGNvZGUgcGF0aHMgdGhhdCBhcmUgd29ydGggZXhwbG9yaW5nIHRocm91Z2ggZnV6emluZy4gVGhlIGNvbW1lbnQgaW5kaWNhdGVzIHRoaXMgY2hhbmdlIGhlbHBzIGF2b2lkIHBvdGVudGlhbCBkZWFkbG9ja3Mgd2l0aCBgZnJlZXplX3N1cGVyKClgLgoKU28sIHRoZSBmb2N1cyBvZiBteSBmdXp6aW5nIGVmZm9ydHMgc2hvdWxkIGJlIG9uIGBmc19iZGV2X2ZyZWV6ZWAgYW5kIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gaXQsIGVzcGVjaWFsbHkgdGhlIG5ldyByb2xsYmFjayBwYXRoIGFmdGVyIGBzeW5jX2Jsb2NrZGV2YCBmYWlsdXJlLiBXZSB3YW50IHRvIGNoZWNrIGBmc19iZGV2X2ZyZWV6ZWAgYmVjYXVzZSBpdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGBGSUZSRUVaRWAgaW9jdGwsIGFzIHdlbGwgYXMgdmlhIGRtLCBhbmQgdGhlIGRpZmZlcmVudCBmaWxlc3lzdGVtIHNodXRkb3duIHBhdGhzLiBBbmQgc2Vjb25kYXJpbHksIG9uIHRoZSBlcnJvciBoYW5kbGluZyBpbiBgX19leGZhdF9mc19lcnJvcmAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gdGhvc2UgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmc19iZGV2X2ZyZWV6ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zdXBlci5jPTE0Mzc9c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqZ2V0X2JkZXZfc3VwZXIoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbi0tXG5mcy9zdXBlci5jLTE0NTItLyoqXG5mcy9zdXBlci5jOjE0NTM6ICogZnNfYmRldl9mcmVlemUgLSBmcmVlemUgb3duaW5nIGZpbGVzeXN0ZW0gb2YgYmxvY2sgZGV2aWNlXG5mcy9zdXBlci5jLTE0NTQtICogQGJkZXY6IGJsb2NrIGRldmljZVxuLS1cbmZzL3N1cGVyLmMtMTQ2Ni0gKi9cbmZzL3N1cGVyLmM6MTQ2NzpzdGF0aWMgaW50IGZzX2JkZXZfZnJlZXplKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG5mcy9zdXBlci5jLTE0Njgte1xuLS1cbmZzL3N1cGVyLmM9MTU1Mj1jb25zdCBzdHJ1Y3QgYmxrX2hvbGRlcl9vcHMgZnNfaG9sZGVyX29wcyA9IHtcbi0tXG5mcy9zdXBlci5jLTE1NTQtXHQuc3luY1x0XHRcdD0gZnNfYmRldl9zeW5jLFxuZnMvc3VwZXIuYzoxNTU1Olx0LmZyZWV6ZVx0XHRcdD0gZnNfYmRldl9mcmVlemUsXG5mcy9zdXBlci5jLTE1NTYtXHQudGhhd1x0XHRcdD0gZnNfYmRldl90aGF3LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDgxMwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEZpbGVzeXN0ZW0gRnJlZXppbmcgQmVoYXZpb3IqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoaXMgYGZzX2JkZXZfZnJlZXplYCBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gYmUgdHJpZ2dlcmVkIHRocm91Z2ggYGZzX2hvbGRlcl9vcHMuZnJlZXplYC4gVGhhdCBtYWtlcyBzZW5zZSwgYXMgYGZzX2hvbGRlcl9vcHNgIGFyZSwgYXMgSSByZWNhbGwsIGludm9sdmVkIHdoZW4gYSBmaWxlc3lzdGVtIGludGVyYWN0cyB3aXRoIGEgYmxvY2sgZGV2aWNlLCBvcGVuaW5nIGl0LCBsaWtlbHkgZm9yIEkvTy4gU28sIHRoZSBzZXF1ZW5jZSBpczogd2UgY2FsbCBgYmRldl9mcmVlemVgIG9uIHRoZSBibG9jayBkZXZpY2UgaXRzZWxmLCB3aGljaCBpbiB0dXJuIGhhbmRzIGNvbnRyb2wgdG8gYGZzX2JkZXZfZnJlZXplYC4gVGhlIHF1ZXN0aW9uIG5vdyBpczogd2hhdCBhY3R1YWxseSAqY2FsbHMqIGBiZGV2X2ZyZWV6ZWAgaW4gdGhlIGZpcnN0IHBsYWNlPyBNeSBndXQgZmVlbGluZyBzYXlzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIGBGSUZSRUVaRWAgaW9jdGwuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBodW5jaDsgSSYjMzk7bGwgcG9wIG92ZXIgdG8gYGJsb2NrL2lvY3RsLmNgIHRvIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JkZXZfZnJlZXplJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2JkZXYuYz0yODU9RVhQT1JUX1NZTUJPTChzeW5jX2Jsb2NrZGV2X3JhbmdlKTtcbi0tXG5ibG9jay9iZGV2LmMtMjg3LS8qKlxuYmxvY2svYmRldi5jOjI4ODogKiBiZGV2X2ZyZWV6ZSAtIGxvY2sgYSBmaWxlc3lzdGVtIGFuZCBmb3JjZSBpdCBpbnRvIGEgY29uc2lzdGVudCBzdGF0ZVxuYmxvY2svYmRldi5jLTI4OS0gKiBAYmRldjpcdGJsb2NrZGV2aWNlIHRvIGxvY2tcbi0tXG5ibG9jay9iZGV2LmMtMjk0LSAqIHVuZnJlZXplIHByb2Nlc3MgY2FuIHVuZnJlZXplIHRoZSBmcm96ZW4gZmlsZXN5c3RlbSBhY3R1YWxseSB3aGVuIG11bHRpcGxlXG5ibG9jay9iZGV2LmM6Mjk1OiAqIGZyZWV6ZSByZXF1ZXN0cyBhcnJpdmUgc2ltdWx0YW5lb3VzbHkuIEl0IGNvdW50cyB1cCBpbiBiZGV2X2ZyZWV6ZSgpIGFuZFxuYmxvY2svYmRldi5jLTI5Ni0gKiBjb3VudCBkb3duIGluIGJkZXZfdGhhdygpLiBXaGVuIGl0IGJlY29tZXMgMCwgdGhhd19iZGV2KCkgd2lsbCB1bmZyZWV6ZVxuLS1cbmJsb2NrL2JkZXYuYy0zMDAtICovXG5ibG9jay9iZGV2LmM6MzAxOmludCBiZGV2X2ZyZWV6ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuYmxvY2svYmRldi5jLTMwMi17XG4tLVxuYmxvY2svYmRldi5jLTMyNi19XG5ibG9jay9iZGV2LmM6MzI3OkVYUE9SVF9TWU1CT0woYmRldl9mcmVlemUpO1xuYmxvY2svYmRldi5jLTMyOC1cbi0tXG5ibG9jay9iZGV2LmMtMzMyLSAqXG5ibG9jay9iZGV2LmM6MzMzOiAqIFVubG9ja3MgdGhlIGZpbGVzeXN0ZW0gYW5kIG1hcmtzIGl0IHdyaXRlYWJsZSBhZ2FpbiBhZnRlciBiZGV2X2ZyZWV6ZSgpLlxuYmxvY2svYmRldi5jLTMzNC0gKlxuLS1cbmRyaXZlcnMvbWQvZG0uYz0yOTMyPXN0YXRpYyBpbnQgbG9ja19mcyhzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpXG4tLVxuZHJpdmVycy9tZC9kbS5jLTI5MzctXG5kcml2ZXJzL21kL2RtLmM6MjkzODpcdHIgPSBiZGV2X2ZyZWV6ZShtZC1cdTAwM2VkaXNrLVx1MDAzZXBhcnQwKTtcbmRyaXZlcnMvbWQvZG0uYy0yOTM5LVx0aWYgKCFyKVxuLS1cbmZzL2V4ZmF0L3N1cGVyLmM9MTU1PWludCBleGZhdF9mb3JjZV9zaHV0ZG93bihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgZmxhZ3MpXG4tLVxuZnMvZXhmYXQvc3VwZXIuYy0xNjYtXHRjYXNlIEVYRkFUX0dPSU5HX0RPV05fRlVMTFNZTkM6XG5mcy9leGZhdC9zdXBlci5jOjE2NzpcdFx0cmV0ID0gYmRldl9mcmVlemUoc2ItXHUwMDNlc19iZGV2KTtcbmZzL2V4ZmF0L3N1cGVyLmMtMTY4LVx0XHRpZiAocmV0KVxuLS1cbmZzL2V4dDQvaW9jdGwuYz04MTA9aW50IGV4dDRfZm9yY2Vfc2h1dGRvd24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGZsYWdzKVxuLS1cbmZzL2V4dDQvaW9jdGwuYy04MjUtXHRjYXNlIEVYVDRfR09JTkdfRkxBR1NfREVGQVVMVDpcbmZzL2V4dDQvaW9jdGwuYzo4MjY6XHRcdHJldCA9IGJkZXZfZnJlZXplKHNiLVx1MDAzZXNfYmRldik7XG5mcy9leHQ0L2lvY3RsLmMtODI3LVx0XHRpZiAocmV0KVxuLS1cbmZzL2YyZnMvZmlsZS5jPTI0NTM9aW50IGYyZnNfZG9fc2h1dGRvd24oc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLCB1bnNpZ25lZCBpbnQgZmxhZyxcbi0tXG5mcy9mMmZzL2ZpbGUuYy0yNDYwLVx0Y2FzZSBGMkZTX0dPSU5HX0RPV05fRlVMTFNZTkM6XG5mcy9mMmZzL2ZpbGUuYzoyNDYxOlx0XHRyZXQgPSBiZGV2X2ZyZWV6ZShzYi1cdTAwM2VzX2JkZXYpO1xuZnMvZjJmcy9maWxlLmMtMjQ2Mi1cdFx0aWYgKHJldClcbi0tXG5mcy9udGZzL3N1cGVyLmM9MTgyMD1pbnQgbnRmc19mb3JjZV9zaHV0ZG93bihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgZmxhZ3MpXG4tLVxuZnMvbnRmcy9zdXBlci5jLTE4MzAtXHRjYXNlIEZTX1NIVVRET1dOX0ZMQUdTX0xPR0ZMVVNIOlxuZnMvbnRmcy9zdXBlci5jOjE4MzE6XHRcdHJldCA9IGJkZXZfZnJlZXplKHNiLVx1MDAzZXNfYmRldik7XG5mcy9udGZzL3N1cGVyLmMtMTgzMi1cdFx0aWYgKHJldClcbi0tXG5mcy9udGZzMy9maWxlLmM9MTk3PXN0YXRpYyBpbnQgbnRmc19mb3JjZV9zaHV0ZG93bihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgZmxhZ3MpXG4tLVxuZnMvbnRmczMvZmlsZS5jLTIwNS1cdC8qIE5vIGFkZGl0aW9uYWwgb3B0aW9ucyB5ZXQgKGZsYWdzKS4gKi9cbmZzL250ZnMzL2ZpbGUuYzoyMDY6XHRlcnIgPSBiZGV2X2ZyZWV6ZShzYi1cdTAwM2VzX2JkZXYpO1xuZnMvbnRmczMvZmlsZS5jLTIwNy1cdGlmIChlcnIpXG4tLVxuZnMvc3VwZXIuYz0xNDM3PXN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmdldF9iZGV2X3N1cGVyKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG4tLVxuZnMvc3VwZXIuYy0xNDUyLS8qKlxuZnMvc3VwZXIuYzoxNDUzOiAqIGZzX2JkZXZfZnJlZXplIC0gZnJlZXplIG93bmluZyBmaWxlc3lzdGVtIG9mIGJsb2NrIGRldmljZVxuZnMvc3VwZXIuYy0xNDU0LSAqIEBiZGV2OiBibG9jayBkZXZpY2Vcbi0tXG5mcy9zdXBlci5jLTE0NjYtICovXG5mcy9zdXBlci5jOjE0Njc6c3RhdGljIGludCBmc19iZGV2X2ZyZWV6ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuZnMvc3VwZXIuYy0xNDY4LXtcbi0tXG5mcy9zdXBlci5jPTE1NTI9Y29uc3Qgc3RydWN0IGJsa19ob2xkZXJfb3BzIGZzX2hvbGRlcl9vcHMgPSB7XG4tLVxuZnMvc3VwZXIuYy0xNTU0LVx0LnN5bmNcdFx0XHQ9IGZzX2JkZXZfc3luYyxcbmZzL3N1cGVyLmM6MTU1NTpcdC5mcmVlemVcdFx0XHQ9IGZzX2JkZXZfZnJlZXplLFxuZnMvc3VwZXIuYy0xNTU2LVx0LnRoYXdcdFx0XHQ9IGZzX2JkZXZfdGhhdyxcbi0tXG5mcy94ZnMveGZzX2Zzb3BzLmM9NDUxPXhmc19mc19nb2luZ2Rvd24oXG4tLVxuZnMveGZzL3hmc19mc29wcy5jLTQ1Ni1cdGNhc2UgWEZTX0ZTT1BfR09JTkdfRkxBR1NfREVGQVVMVDoge1xuZnMveGZzL3hmc19mc29wcy5jOjQ1NzpcdFx0aWYgKCFiZGV2X2ZyZWV6ZShtcC1cdTAwM2VtX3N1cGVyLVx1MDAzZXNfYmRldikpIHtcbmZzL3hmcy94ZnNfZnNvcHMuYy00NTgtXHRcdFx0eGZzX2ZvcmNlX3NodXRkb3duKG1wLCBTSFVURE9XTl9GT1JDRV9VTU9VTlQpO1xuLS1cbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg9MTgzMj1zdGF0aWMgaW5saW5lIGludCBlYXJseV9sb29rdXBfYmRldihjb25zdCBjaGFyICpwYXRobmFtZSwgZGV2X3QgKmRldilcbi0tXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTE4MzctXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjE4Mzg6aW50IGJkZXZfZnJlZXplKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpO1xuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xODM5LWludCBiZGV2X3RoYXcoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjQwCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBGcmVlemUgTWVjaGFuaXNtKioKClJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgZnJlZXppbmcgd29ya3MsIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBgRklGUkVFWkVgIGlvY3RsIGluIGBmcy9pb2N0bC5jYCAqc3BlY2lmaWNhbGx5KiBjYWxscyBgZnJlZXplX3N1cGVyYC4gVGhhdCBtYWtlcyBzZW5zZSwgdGFyZ2V0aW5nIHRoZSBzdXBlcmJsb2NrIGxldmVsLiBCdXQgaG9sZCBvbiwgSSByZWNhbGwgYGJkZXZfZnJlZXplYCBiZWluZyBpbiB0aGUgbWl4IHRvby4gQWggeWVzLCBJIHJlbWVtYmVyIG5vdywgYGJkZXZfZnJlZXplYCBpcyBkZWZpbml0ZWx5IHVzZWQgYnkgdGhlIGRldmljZSBtYXBwZXIgKGBkbWApIGFuZCBpbiBmaWxlc3lzdGVtIHNodXRkb3duIGlvY3RscyAtIHRoYXQmIzM5O3MgYSBrZXkgZGlzdGluY3Rpb24uIE5vdywgdGhlIGNvbnRleHQgaGFzIHNoaWZ0ZWQgYSBsaXR0bGUsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYEZJRlJFRVpFYCBvcGVyYXRpbmcgZGlyZWN0bHkgb24gYSBibG9jayBkZXZpY2UgLSB0aGF0IHJhaXNlcyBhIGZsYWcuIEkgbmVlZCB0byBiZSBzdXJlLiBTbywgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGluIGBibG9jay9pb2N0bC5jYC4gTGV0JiMzOTtzIGdldCB0aGUgZnVsbCBzdG9yeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RklGUkVFWkUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNycS5yc3Q9OTc9Q29tbWFuZFx0ICAgIEZ1bmN0aW9uXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNycS5yc3QtMTE4LVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNycS5yc3Q6MTE5OmBgamBgXHQgICAgRm9yY2libHkgXCYjMzQ7SnVzdCB0aGF3IGl0XCYjMzQ7IC0gZmlsZXN5c3RlbXMgZnJvemVuIGJ5IHRoZSBGSUZSRUVaRSBpb2N0bC5cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzcnEucnN0LTEyMC1cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c3JxLnJzdD0yMTE9cHJvY2Vzc2VzLlxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzcnEucnN0LTIxMy1cJiMzNDtqdXN0IHRoYXcgYGBpdChqKWBgXCYjMzQ7IGlzIHVzZWZ1bCBpZiB5b3VyIHN5c3RlbSBiZWNvbWVzIHVucmVzcG9uc2l2ZSBkdWUgdG8gYVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNycS5yc3Q6MjE0OmZyb3plbiAocHJvYmFibHkgcm9vdCkgZmlsZXN5c3RlbSB2aWEgdGhlIEZJRlJFRVpFIGlvY3RsLlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNycS5yc3QtMjE1LVxuLS1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdD0yMjA9b3IgYm90dG9tIGhhbGYpLlxuLS1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdC0yOTItXHRjb25zaXN0ZW50IHN0YXRlLiAgVGhpcyBtZXRob2QgaXMgY3VycmVudGx5IHVzZWQgYnkgdGhlIExvZ2ljYWxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdDoyOTM6XHRWb2x1bWUgTWFuYWdlciAoTFZNKSBhbmQgaW9jdGwoRklGUkVFWkUpLiBPcHRpb25hbC5cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdC0yOTQtXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvc3lzcnEucnN0PTUzPUNPTkZJR19NQUdJQ19TWVNSUV9ERUZBVUxUX0VOQUJMRSDlv4XpobvmmK/ku6UgMTYg6L+b5Yi25pWw5YaZ5YWl44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvc3lzcnEucnN0LTExNS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2FkbWluLWd1aWRlL3N5c3JxLnJzdDoxMTY6YGBqYGBcdCAgICDlvLrliLbmgKfnmoQg4oCc6Kej5Ya75a6D4oCdIC0g55So5LqO6KKrIEZJRlJFRVpFIGlvY3RsIOaTjeS9nOWGu+S9j+eahOaWh+S7tuezu+e7n+OAglxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvc3lzcnEucnN0LTExNy1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9hZG1pbi1ndWlkZS9zeXNycS5yc3Q9MTk0PXN5c2xvZ2Qva2xvZ2Qg6L+b56iL5piv6L+Q6KGM55qE77yM5a6D5Lus5LuN5bCG6KKr6K6w5b2V44CC77yJXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvc3lzcnEucnN0LTE5OC1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2FkbWluLWd1aWRlL3N5c3JxLnJzdDoxOTk6XCYjMzQ7anVzdCB0aGF3IGBgaXQoailgYCBcJiMzNDsg55So5LqO5b2T5L2g55qE57O757uf55Sx5LqO5LiA5LiqIEZJRlJFRVpFIGlvY3RsIOiwg+eUqOiAjOS6p+eUn+eahOaWh+S7tlxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvc3lzcnEucnN0LTIwMC3ns7vnu5/lhrvnu5PvvIzogIzlr7zoh7TnmoTkuI3lk43lupTml7bjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9hZG1pbi1ndWlkZS9zeXNycS5yc3Q9NTM9Q09ORklHX01BR0lDX1NZU1JRX0RFRkFVTFRfRU5BQkxFIOW/hemgiOaYr+S7pSAxNiDpgLLliLbmlbjlr6vlhaXjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9hZG1pbi1ndWlkZS9zeXNycS5yc3QtMTE1LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvc3lzcnEucnN0OjExNjpgYGpgYFx0ICAgIOW8t+WItuaAp+eahCDigJzop6Plh43lroPigJ0gLSDnlKjmlrzooqsgRklGUkVFWkUgaW9jdGwg5pON5L2c5YeN5L2P55qE5paH5Lu257O757Wx44CCXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9hZG1pbi1ndWlkZS9zeXNycS5yc3QtMTE3LVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2FkbWluLWd1aWRlL3N5c3JxLnJzdD0xOTQ9c3lzbG9nZC9rbG9nZCDpgLLnqIvmmK/pgYvooYznmoTvvIzlroPlgJHku43lsIfooqvoqJjpjITjgILvvIlcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9hZG1pbi1ndWlkZS9zeXNycS5yc3QtMTk4LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvc3lzcnEucnN0OjE5OTpcJiMzNDtqdXN0IHRoYXcgYGBpdChqKWBgIFwmIzM0OyDnlKjmlrznlbbkvaDnmoTns7vntbHnlLHmlrzkuIDlgIsgRklGUkVFWkUgaW9jdGwg6Kq/55So6ICM55Si55Sf55qE5paH5Lu2XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9hZG1pbi1ndWlkZS9zeXNycS5yc3QtMjAwLeezu+e1seWHjee1kO+8jOiAjOWwjuiHtOeahOS4jemfv+aHieaZguOAglxuLS1cbmZzL2lvY3RsLmM9NDkyPXN0YXRpYyBpbnQgZG9fdmZzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgZmQsXG4tLVxuZnMvaW9jdGwuYy01MjMtXG5mcy9pb2N0bC5jOjUyNDpcdGNhc2UgRklGUkVFWkU6XG5mcy9pb2N0bC5jLTUyNS1cdFx0cmV0dXJuIGlvY3RsX2ZzZnJlZXplKGZpbHApO1xuLS1cbmZzL3hmcy9saWJ4ZnMveGZzX2ZzLmg9MTE2Nz1zdHJ1Y3QgeGZzX3ZlcmlmeV9tZWRpYSB7XG4tLVxuZnMveGZzL2xpYnhmcy94ZnNfZnMuaC0xMjYwLVxuZnMveGZzL2xpYnhmcy94ZnNfZnMuaDoxMjYxOiNkZWZpbmUgWEZTX0lPQ19GUkVFWkVcdFx0ICAgICBfSU9XUigmIzM5O1gmIzM5OywgMTE5LCBpbnQpXHQvKiBha2EgRklGUkVFWkUgKi9cbmZzL3hmcy9saWJ4ZnMveGZzX2ZzLmgtMTI2Mi0jZGVmaW5lIFhGU19JT0NfVEhBV1x0XHQgICAgIF9JT1dSKCYjMzk7WCYjMzk7LCAxMjAsIGludClcdC8qIGFrYSBGSVRIQVcgKi9cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaD0yMjY9c3RydWN0IGZpbGVfYXR0ciB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMzE1LSNkZWZpbmUgRklHRVRCU1ogICBfSU8oMHgwMCwyKVx0LyogZ2V0IHRoZSBibG9jayBzaXplIHVzZWQgZm9yIGJtYXAgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oOjMxNjojZGVmaW5lIEZJRlJFRVpFXHRfSU9XUigmIzM5O1gmIzM5OywgMTE5LCBpbnQpXHQvKiBGcmVlemUgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oLTMxNy0jZGVmaW5lIEZJVEhBV1x0XHRfSU9XUigmIzM5O1gmIzM5OywgMTIwLCBpbnQpXHQvKiBUaGF3ICovXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2xhbmRsb2NrLmg9MjQ4PXN0cnVjdCBsYW5kbG9ja19uZXRfcG9ydF9hdHRyIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbGFuZGxvY2suaC0zMDQtICogICAqIElPQ1RMIGNvbW1hbmRzIHRhcmdldGluZyBmaWxlIGRlc2NyaXB0aW9ucyAoYGBGSU9OQklPYGAsIGBgRklPQVNZTkNgYCksXG5pbmNsdWRlL3VhcGkvbGludXgvbGFuZGxvY2suaDozMDU6ICogICAqIElPQ1RMIGNvbW1hbmRzIHRhcmdldGluZyBmaWxlIHN5c3RlbXMgKGBgRklGUkVFWkVgYCwgYGBGSVRIQVdgYCxcbmluY2x1ZGUvdWFwaS9saW51eC9sYW5kbG9jay5oLTMwNi0gKiAgICAgYGBGSUdFVEJTWmBgLCBgYEZTX0lPQ19HRVRGU1VVSURgYCwgYGBGU19JT0NfR0VURlNTWVNGU1BBVEhgYClcbi0tXG5zZWN1cml0eS9sYW5kbG9jay9mcy5jPTEyNz1zdGF0aWMgX19hdHRyaWJ1dGVfY29uc3RfXyBib29sIGlzX21hc2tlZF9kZXZpY2VfaW9jdGwoY29uc3QgdW5zaWduZWQgaW50IGNtZClcbi0tXG5zZWN1cml0eS9sYW5kbG9jay9mcy5jLTE0Ny1cdC8qXG5zZWN1cml0eS9sYW5kbG9jay9mcy5jOjE0ODpcdCAqIEZJRlJFRVpFIGFuZCBGSVRIQVcgZnJlZXplIGFuZCB0aGF3IHRoZSBmaWxlIHN5c3RlbSB3aGljaCB0aGVcbnNlY3VyaXR5L2xhbmRsb2NrL2ZzLmMtMTQ5LVx0ICogZ2l2ZW4gZmlsZSBiZWxvbmdzIHRvLiAgUmVxdWlyZXMgQ0FQX1NZU19BRE1JTi5cbi0tXG5zZWN1cml0eS9sYW5kbG9jay9mcy5jLTE1NS1cdCAqL1xuc2VjdXJpdHkvbGFuZGxvY2svZnMuYzoxNTY6XHRjYXNlIEZJRlJFRVpFOlxuc2VjdXJpdHkvbGFuZGxvY2svZnMuYy0xNTctXHRjYXNlIEZJVEhBVzpcbi0tXG50b29scy9odi9odl92c3NfZGFlbW9uLmM9MzQ9c3RhdGljIGludCB2c3NfZG9fZnJlZXplKGNoYXIgKmRpciwgdW5zaWduZWQgaW50IGNtZClcbi0tXG50b29scy9odi9odl92c3NfZGFlbW9uLmMtNTItXHRpZiAocmV0KSB7XG50b29scy9odi9odl92c3NfZGFlbW9uLmM6NTM6XHRcdGlmICgoY21kID09IEZJRlJFRVpFIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFQlVTWSkgfHxcbnRvb2xzL2h2L2h2X3Zzc19kYWVtb24uYy01NC1cdFx0ICAgIChjbWQgPT0gRklUSEFXIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5WQUwpKSB7XG4tLVxudG9vbHMvaHYvaHZfdnNzX2RhZW1vbi5jPTExMz1zdGF0aWMgaW50IHZzc19vcGVyYXRlKGludCBvcGVyYXRpb24pXG4tLVxudG9vbHMvaHYvaHZfdnNzX2RhZW1vbi5jLTEyNS1cdGNhc2UgVlNTX09QX0ZSRUVaRTpcbnRvb2xzL2h2L2h2X3Zzc19kYWVtb24uYzoxMjY6XHRcdGNtZCA9IEZJRlJFRVpFO1xudG9vbHMvaHYvaHZfdnNzX2RhZW1vbi5jLTEyNy1cdFx0YnJlYWs7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg9MTQyPXN0cnVjdCBmc3hhdHRyIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0yMjItI2RlZmluZSBGSUdFVEJTWiAgIF9JTygweDAwLDIpXHQvKiBnZXQgdGhlIGJsb2NrIHNpemUgdXNlZCBmb3IgYm1hcCAqL1xudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg6MjIzOiNkZWZpbmUgRklGUkVFWkVcdF9JT1dSKCYjMzk7WCYjMzk7LCAxMTksIGludClcdC8qIEZyZWV6ZSAqL1xudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMjI0LSNkZWZpbmUgRklUSEFXXHRcdF9JT1dSKCYjMzk7WCYjMzk7LCAxMjAsIGludClcdC8qIFRoYXcgKi9cbi0tXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaD0yMjY9c3RydWN0IGZpbGVfYXR0ciB7XG4tLVxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMzE1LSNkZWZpbmUgRklHRVRCU1ogICBfSU8oMHgwMCwyKVx0LyogZ2V0IHRoZSBibG9jayBzaXplIHVzZWQgZm9yIGJtYXAgKi9cbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvdWFwaS9saW51eC9mcy5oOjMxNjojZGVmaW5lIEZJRlJFRVpFXHRfSU9XUigmIzM5O1gmIzM5OywgMTE5LCBpbnQpXHQvKiBGcmVlemUgKi9cbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvdWFwaS9saW51eC9mcy5oLTMxNy0jZGVmaW5lIEZJVEhBV1x0XHRfSU9XUigmIzM5O1gmIzM5OywgMTIwLCBpbnQpXHQvKiBUaGF3ICovXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGFuZGxvY2svZnNfdGVzdC5jPTQwMjA9VEVTVF9GX0ZPUksobGF5b3V0MSwgYmxhbmtldF9wZXJtaXR0ZWRfaW9jdGxzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xhbmRsb2NrL2ZzX3Rlc3QuYy00MDM4LVx0RVhQRUNUX05FKEVBQ0NFUywgaW9jdGxfZXJyb3IoX21ldGFkYXRhLCBmZCwgRklPUVNJWkUpKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xhbmRsb2NrL2ZzX3Rlc3QuYzo0MDM5Olx0RVhQRUNUX05FKEVBQ0NFUywgaW9jdGxfZXJyb3IoX21ldGFkYXRhLCBmZCwgRklGUkVFWkUpKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xhbmRsb2NrL2ZzX3Rlc3QuYy00MDQwLVx0RVhQRUNUX05FKEVBQ0NFUywgaW9jdGxfZXJyb3IoX21ldGFkYXRhLCBmZCwgRklUSEFXKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjgwCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIEZJRlJFRVpFIE1lY2hhbmlzbSoqCgpSaWdodCwgc28gYEZJRlJFRVpFYCBpcyB0aGUgc3lzY2FsbCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGhlcmUsIGFuZCB0aGUga2VybmVsIHVzZXMgYGlvY3RsX2ZzZnJlZXplYCB0byBoYW5kbGUgaXQuIFRoYXQgaW1tZWRpYXRlbHkgY2xpY2tzIGZvciBtZTsgYGlvY3RsX2ZzZnJlZXplYCBpcyB0aGUgb2J2aW91cyBwbGFjZSB0byBsb29rIGZvciB0aGUgbWVhdCBvZiB0aGUgZnVuY3Rpb25hbGl0eS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24uIFRpbWUgdG8gc2VlIHByZWNpc2VseSBob3cgdGhlIGtlcm5lbCBvcmNoZXN0cmF0ZXMgdGhpcyBmaWxlIHN5c3RlbSBmcmVlemluZy4gV2hhdCBhcmUgdGhlIGtleSBsb2NraW5nIG1lY2hhbmlzbXMgYmVpbmcgZW1wbG95ZWQ/IEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlIGxheWVycz8gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgdG8gZW5zdXJlIHRoaXMgZnJlZXppbmcgYW5kIHRoYXdpbmcgcHJvY2VzcyBpcyByb2J1c3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5mb3Jlc2VlbiBpc3N1ZXMgaW4gbXkgc3lzdGVtIGRlc2lnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9jdGxfZnNmcmVlemUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9jdGwuYz0zNjM9c3RhdGljIGludCBpb2N0bF9maW9hc3luYyh1bnNpZ25lZCBpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbmZzL2lvY3RsLmMtMzg0LVxuZnMvaW9jdGwuYzozODU6c3RhdGljIGludCBpb2N0bF9mc2ZyZWV6ZShzdHJ1Y3QgZmlsZSAqZmlscClcbmZzL2lvY3RsLmMtMzg2LXtcbi0tXG5mcy9pb2N0bC5jPTQ5Mj1zdGF0aWMgaW50IGRvX3Zmc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGZkLFxuLS1cbmZzL2lvY3RsLmMtNTI0LVx0Y2FzZSBGSUZSRUVaRTpcbmZzL2lvY3RsLmM6NTI1Olx0XHRyZXR1cm4gaW9jdGxfZnNmcmVlemUoZmlscCk7XG5mcy9pb2N0bC5jLTUyNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU2NTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBpb2N0bF9mc2ZyZWV6ZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBpdCYjMzk7cyBhY2hpZXZpbmcuIEkmIzM5O20gYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBnZW5lcmFsIGxhbmRzY2FwZSBvZiBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgYW5kIGlvY3RsIGNhbGxzLCBidXQgdGhlIHNwZWNpZmljcyBvZiBgZnNmcmVlemVgIGFyZSB3aGF0IEkmIzM5O20gZm9jdXNpbmcgb24gbm93LiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIGNvbnNpc3RlbmN5IGFuZCBkYXRhIGludGVncml0eS4gV2hhdCBhcmUgdGhlIGtleSB1bmRlcmx5aW5nIG1lY2hhbmlzbXM/IFdoYXQgZG9lcyB0aGlzIG1lYW4gZm9yIGEgbGl2ZSBzeXN0ZW0/IEl0JiMzOTtzIGNsZWFybHkgcmVsYXRlZCB0byBmcmVlemluZyBhIGZpbGVzeXN0ZW0sIGJ1dCBJIG5lZWQgdG8gZ3Jhc3AgdGhlIG51YW5jZXMg4oCTIGRvZXMgdGhpcyBpbnZvbHZlIGEgc2ltcGxlIHBhdXNlIGluIG9wZXJhdGlvbnMsIG9yIG1vcmUgZWxhYm9yYXRlIGNvb3JkaW5hdGlvbiB3aXRoIHRoZSBibG9jayBsYXllcj8gQXJlIHRoZXJlIGRpZmZlcmVudCBsZXZlbHMgb2YgZnJlZXppbmcgc3VwcG9ydGVkPyBJIG5lZWQgdG8gY29uc2lkZXIgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGxvY2tpbmcgc3RyYXRlZ2llcyB0aGF0IGFyZSBpbXBsZW1lbnRlZCB0byBlbnN1cmUgdGhlIGZyZWV6ZSBpcyBhdG9taWMgYW5kIHNhZmUuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBmcmVlemUvdGhhdyBpcyBpbXBvcnRhbnQgaW4gYXJlYXMgbGlrZSBiYWNrdXBzIGFuZCBzbmFwc2hvdHMuIEl0IHdpbGwgYmUgaW50ZXJlc3RpbmcgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgZGVzaWduZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvaW9jdGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzg1Olx0c3RhdGljIGludCBpb2N0bF9mc2ZyZWV6ZShzdHJ1Y3QgZmlsZSAqZmlscClcbiAzODY6XHR7XG4gMzg3Olx0XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZmlsZV9pbm9kZShmaWxwKS1cdTAwM2VpX3NiO1xuIDM4ODpcdFxuIDM4OTpcdFx0aWYgKCFuc19jYXBhYmxlKHNiLVx1MDAzZXNfdXNlcl9ucywgQ0FQX1NZU19BRE1JTikpXG4gMzkwOlx0XHRcdHJldHVybiAtRVBFUk07XG4gMzkxOlx0XG4gMzkyOlx0XHQvKiBJZiBmaWxlc3lzdGVtIGRvZXNuJiMzOTt0IHN1cHBvcnQgZnJlZXplIGZlYXR1cmUsIHJldHVybi4gKi9cbiAzOTM6XHRcdGlmIChzYi1cdTAwM2VzX29wLVx1MDAzZWZyZWV6ZV9mcyA9PSBOVUxMIFx1MDAyNlx1MDAyNiBzYi1cdTAwM2VzX29wLVx1MDAzZWZyZWV6ZV9zdXBlciA9PSBOVUxMKVxuIDM5NDpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gMzk1Olx0XG4gMzk2Olx0XHQvKiBGcmVlemUgKi9cbiAzOTc6XHRcdGlmIChzYi1cdTAwM2VzX29wLVx1MDAzZWZyZWV6ZV9zdXBlcilcbiAzOTg6XHRcdFx0cmV0dXJuIHNiLVx1MDAzZXNfb3AtXHUwMDNlZnJlZXplX3N1cGVyKHNiLCBGUkVFWkVfSE9MREVSX1VTRVJTUEFDRSwgTlVMTCk7XG4gMzk5Olx0XHRyZXR1cm4gZnJlZXplX3N1cGVyKHNiLCBGUkVFWkVfSE9MREVSX1VTRVJTUEFDRSwgTlVMTCk7XG4gNDAwOlx0fVxuIDQwMTpcdFxuIDQwMjpcdHN0YXRpYyBpbnQgaW9jdGxfZnN0aGF3KHN0cnVjdCBmaWxlICpmaWxwKVxuIDQwMzpcdHtcbiA0MDQ6XHRcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBmaWxlX2lub2RlKGZpbHApLVx1MDAzZWlfc2I7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MjQyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkZyZWV6aW5nIHRoZSBGaWxlc3lzdGVtOiBBIENsb3NlciBMb29rKioKClJpZ2h0LCBzbyBgaW9jdGxfZnNmcmVlemVgIGluaXRpYXRlcyB0aGUgZmlsZXN5c3RlbSBmcmVlemUgYnkgY2FsbGluZyBgZnJlZXplX3N1cGVyYC4gVGhhdCYjMzk7cyB0aGUgZXhwZWN0ZWQgc3RhcnRpbmcgcG9pbnQuIEJ1dCBJJiMzOTttIG5vdGljaW5nIHNvbWV0aGluZzogaXQgKmRvZXNuJiMzOTt0KiBhcHBlYXIgdG8gZGlyZWN0bHkgY2FsbCBgYmRldl9mcmVlemVgIG9yIGBmc19iZGV2X2ZyZWV6ZWAuIFRoYXQmIzM5O3MgYSBiaXQgdW51c3VhbDsgSSB3b3VsZCBoYXZlIGFzc3VtZWQgdGhvc2Ugd2VyZSBpbnRlZ3JhbCB0byBhIGNvbXBsZXRlIGZyZWV6ZSBzZXF1ZW5jZS4KCkhvbGQgb24sIHRob3VnaC4uLiBkaWRuJiMzOTt0IEkgc2VlIGBiZGV2X2ZyZWV6ZWAgbWVudGlvbmVkIHNvbWV3aGVyZSBlbHNlPyBBaCwgeWVzISBgZXhmYXRfZm9yY2Vfc2h1dGRvd25gIHV0aWxpemVzIGBiZGV2X2ZyZWV6ZWAgYW5kIHByZXN1bWFibHkgb3RoZXIgbW9kdWxlcyB0b28uIEludGVyZXN0aW5nLiBJdCBzZWVtcyBsaWtlIHRoZSBibG9jayBkZXZpY2UgZnJlZXplIGlzIGhhbmRsZWQgc2VwYXJhdGVseSwgcGVyaGFwcyB1bmRlciBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzLiBHaXZlbiB0aGF0LCBJIHNob3VsZCBkaWcgaW50byBgZXhmYXRfZm9yY2Vfc2h1dGRvd25gIHRvIHNlZSB3aGVuIGFuZCB3aHkgYGJkZXZfZnJlZXplYCBpcyBiZWluZyBpbnZva2VkIHRoZXJlLiBUaGlzIGNvdWxkIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBmcmVlemluZyBwcm9jZXNzIGFuZCBpZGVudGlmeWluZyBhbnkgcG90ZW50aWFsIGdhcHMgb3IgaW5lZmZpY2llbmNpZXMgaW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3Mgc3BlY2lhbCBhYm91dCBgZXhmYXRgIHN1Y2ggdGhhdCBpdCB1c2VzIGBiZGV2X2ZyZWV6ZWAgZXhwbGljaXRseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXhmYXRfZm9yY2Vfc2h1dGRvd24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXhmYXQvZXhmYXRfZnMuaD01Njk9bG9uZyBleGZhdF9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsXG5mcy9leGZhdC9leGZhdF9mcy5oLTU3MC1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgYXJnKTtcbmZzL2V4ZmF0L2V4ZmF0X2ZzLmg6NTcxOmludCBleGZhdF9mb3JjZV9zaHV0ZG93bihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgZmxhZ3MpO1xuZnMvZXhmYXQvZXhmYXRfZnMuaC01NzItXG4tLVxuZnMvZXhmYXQvZmlsZS5jPTU0NT1zdGF0aWMgaW50IGV4ZmF0X2lvY3RsX3NodXRkb3duKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmZzL2V4ZmF0L2ZpbGUuYy01NTQtXG5mcy9leGZhdC9maWxlLmM6NTU1Olx0cmV0dXJuIGV4ZmF0X2ZvcmNlX3NodXRkb3duKHNiLCBmbGFncyk7XG5mcy9leGZhdC9maWxlLmMtNTU2LX1cbi0tXG5mcy9leGZhdC9zdXBlci5jPTExNj1zdGF0aWMgaW50IGV4ZmF0X3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKnJvb3QpXG4tLVxuZnMvZXhmYXQvc3VwZXIuYy0xNTQtXG5mcy9leGZhdC9zdXBlci5jOjE1NTppbnQgZXhmYXRfZm9yY2Vfc2h1dGRvd24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGZsYWdzKVxuZnMvZXhmYXQvc3VwZXIuYy0xNTYte1xuLS1cbmZzL2V4ZmF0L3N1cGVyLmM9MTg1PXN0YXRpYyB2b2lkIGV4ZmF0X3NodXRkb3duKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leGZhdC9zdXBlci5jLTE4Ni17XG5mcy9leGZhdC9zdXBlci5jOjE4NzpcdGV4ZmF0X2ZvcmNlX3NodXRkb3duKHNiLCBFWEZBVF9HT0lOR19ET1dOX05PU1lOQyk7XG5mcy9leGZhdC9zdXBlci5jLTE4OC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTg3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogOTI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBleEZBVCBTaHV0ZG93biBNZWNoYW5pc20qKgoKT2theSwgc28gSSYjMzk7dmUgdHJhY2VkIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgaXQgbG9va3MgbGlrZSBgZXhmYXRfZm9yY2Vfc2h1dGRvd25gIGdldHMgY2FsbGVkIHRocm91Z2ggYGV4ZmF0X2lvY3RsX3NodXRkb3duYC4gVGhpcyBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoYXQgbWVhbnMgdGhlIGBFWEZBVF9JT0NfU0hVVERPV05gIGlvY3RsLCBhcyB3ZWxsIGFzIHNpbWlsYXIgaW9jdGxzIGZyb20gb3RoZXIgZmlsZXN5c3RlbXMsIGNhbiB0cmlnZ2VyIGBiZGV2X2ZyZWV6ZWAuIFVsdGltYXRlbHksIGBiZGV2X2ZyZWV6ZWAgdGhlbiBjYWxscyBgZnNfYmRldl9mcmVlemVgLgoKTm93LCB0aGUgY3J1Y2lhbCBsaW5rIGlzIHRoYXQgYGZzX2JkZXZfZnJlZXplYCBpcyBpbnZva2VkIHdoZW4gYGJkZXZfZnJlZXplYCBpcyBjYWxsZWQgb24gYSBibG9jayBkZXZpY2UgdGhhdCBoYXMgYGZzX2hvbGRlcl9vcHNgLiBBbmQsIGFzIEkgcmVjYWxsLCB3aGVuIGV4RkFUIG1vdW50cyBhIGJsb2NrIGRldmljZSwgaXQgZG9lcyBzbyB1c2luZyBgZnNfaG9sZGVyX29wc2AuIFNvLCBhIGBiZGV2X2ZyZWV6ZWAgY2FsbCBvbiBgc2ItJmd0O3NfYmRldmAgd2lsbCwgaW4gZmFjdCwgaW52b2tlIGBmc19iZGV2X2ZyZWV6ZWAuIFRoYXQmIzM5O3MgdGhlIGNvcmUuCgpMZXQgbWUgcmVmcmVzaCBteSBtZW1vcnkgb24gYGZzX2JkZXZfZnJlZXplYDogaXQgcmV0cmlldmVzIHRoZSBzdXBlcmJsb2NrLCBjaGVja3MgZm9yIGl0cyBleGlzdGVuY2UsIGFuZCB0aGVuIGNhbGxzIHRoZSBzdXBlcmJsb2NrJiMzOTtzIGBmcmVlemVfc3VwZXJgIGZ1bmN0aW9uLiBJZiB0aGF0IHN1Y2NlZWRzLCBpdCBzeW5jaHJvbml6ZXMgdGhlIGJsb2NrIGRldmljZSBhbmQgaGFuZGxlcyBhbnkgZXJyb3JzIGJ5IHRoYXdpbmcgdGhlIHN1cGVyYmxvY2suIFRoaXMgY29kZSBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgd2lsbCB3b3JrLiBUaGUgcGF0Y2ggaW4gYGZzL2V4ZmF0L21pc2MuY2AgY29uZmlybXMgdGhpcy4KCmBgYGMKc3RhdGljIGludCBmc19iZGV2X2ZyZWV6ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQp7CglzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZ2V0X2JkZXZfc3VwZXIoYmRldik7CglpbnQgZXJyb3IgPSAwOwoKCWlmICghc2IpCgkJcmV0dXJuIC1FSU5WQUw7CgoJaWYgKHNiLSZndDtzX29wLSZndDtmcmVlemVfc3VwZXIpCgkJZXJyb3IgPSBzYi0mZ3Q7c19vcC0mZ3Q7ZnJlZXplX3N1cGVyKHNiLAoJCQkJRlJFRVpFX01BWV9ORVNUIHwgRlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UsIE5VTEwpOwoJZWxzZQoJCWVycm9yID0gZnJlZXplX3N1cGVyKHNiLAoJCQkJRlJFRVpFX01BWV9ORVNUIHwgRlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UsIE5VTEwpOwoJaWYgKCFlcnJvcikgewoJCWVycm9yID0gc3luY19ibG9ja2RldihiZGV2KTsKCQlpZiAoZXJyb3IpIHsKCQkJaWYgKHNiLSZndDtzX29wLSZndDt0aGF3X3N1cGVyKQoJCQkJKHZvaWQpc2ItJmd0O3Nfb3AtJmd0O3RoYXdfc3VwZXIoCgkJCQkJc2IsCgkJCQkJRlJFRVpFX01BWV9ORVNUIHwKCQkJCQkJRlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UsCgkJCQkJTlVMTCk7CgkJCWVsc2UKCQkJCSh2b2lkKXRoYXdfc3VwZXIoCgkJCQkJc2IsCgkJCQkJRlJFRVpFX01BWV9ORVNUIHwKCQkJCQkJRlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UsCgkJCQkJTlVMTCk7CgkJfQoJfQoJZGVhY3RpdmF0ZV9zdXBlcihzYik7CglyZXR1cm4gZXJyb3I7Cn0KYGBgCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBleGZhdCBlcnJvciBoYW5kbGluZy4gV2UmIzM5O3JlIGludGVyZXN0ZWQgaW4gdGhlIGBfX2V4ZmF0X2ZzX2Vycm9yYCBmdW5jdGlvbi4KCmBgYGMKdm9pZCBfX2V4ZmF0X2ZzX2Vycm9yKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCByZXBvcnQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQp7Ci4uLgoJfSBlbHNlIGlmIChvcHRzLSZndDtlcnJvcnMgPT0gRVhGQVRfRVJST1JTX1JPICZhbXA7JmFtcDsgIXNiX3Jkb25seShzYikpIHsKCQlzZXRfYml0KEVYRkFUX0ZMQUdTX1NIVVRET1dOLCAmYW1wO0VYRkFUX1NCKHNiKS0mZ3Q7c19leGZhdF9mbGFncyk7CgkJLyoKCQkgKiBXZSBoYXZlIGFscmVhZHkgc2V0IEVYRkFUX0ZMQUdTX1NIVVRET1dOIGZsYWcgdG8gc3RvcCBhbGwgdXBkYXRlcwoJCSAqIHRvIGZpbGVzeXN0ZW0sIHNvIGl0IGRvZXNuJiMzOTt0IG5lZWQgdG8gc2V0IFNCX1JET05MWSBmbGFnIGhlcmUKCQkgKiBiZWNhdXNlIHRoZSBmbGFnIHNob3VsZCBiZSBzZXQgY292ZXJlZCB3LyBzYi0mZ3Q7c191bW91bnQgc2VtYXBob3JlCgkJICogdmlhIHJlbW91bnQgcHJvY2VkdXJlLCBvdGhlcndpc2UsIGl0IHdpbGwgY29uZnVzZSBjb2RlIGxpa2UKCQkgKiBmcmVlemVfc3VwZXIoKSB3aGljaCB3aWxsIGxlYWQgdG8gZGVhZGxvY2tzIGFuZCBvdGhlciBwcm9ibGVtcy4KCQkgKi8KCQlleGZhdF9lcnIoc2IsICYjMzQ7RmlsZXN5c3RlbSBoYXMgYmVlbiBzZXQgcmVhZC1vbmx5JiMzNDspOwoJfQp9CmBgYAoKVGhpcyBnZXRzIGNhbGxlZCB3aGVuIGFuIGVycm9yIG9jY3VycyBpbiBleEZBVCBhbmQgdGhlIGBlcnJvcnM9cmVtb3VudC1yb2Agb3B0aW9uIGlzIHNldC4gU28sIHdlIGhhdmUgdHdvIGxpa2VseSBlbnRyeSBwb2ludHM6IGBmc19iZGV2X2ZyZWV6ZWAgKHRyaWdnZXJlZCBieSB0aGUgaW9jdGwpIGFuZCBgX19leGZhdF9mc19lcnJvcmAgKHRyaWdnZXJlZCBieSBhbiBlcnJvcikuIFRoaXMgbWVhbnMgdGhlIGZvY3VzIHNob3VsZCBiZSBvbiB0aGVzZSB0d28gYXJlYXMuCgpMZXQgbWUgY29uZmlybSBpZiBgZnNfYmRldl9mcmVlemVgIGluIGBmcy9zdXBlci5jYCBpcyBleHBvcnRlZCBvciBpZiBpdCBjYW4gYmUgbW9kaWZpZWQgZWFzaWx5LiBZZXMsIGl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uIHNvIHdlIGNhbiBtb2RpZnkgaXQuIGBDT05GSUdfRVhGQVRfRlNgIGlzLCBvYnZpb3VzbHksIHJlcXVpcmVkLCBhbmQgYENPTkZJR19CTE9DS2AgaXMgbmVlZGVkIGZvciB0aGUgYmxvY2sgZGV2aWNlcy4KU28sIGBFWEZBVF9GU2AgaXMgdGhlIG1haW4gY29uZmlnIHdlIG5lZWQgdG8gd29ycnkgYWJvdXQuIEkmIzM5O2xsIHRha2UgYW5vdGhlciBsb29rIGF0IGBmc19iZGV2X2ZyZWV6ZWAgdG8gZW5zdXJlIG15IHVuZGVyc3RhbmRpbmcgaXMgY29tcGxldGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvc3VwZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQ2MDpcdCAqIGJsb2NrIGRldmljZSBhbmQgd29uJiMzOTt0IGJlIHVuZnJvemVuIHVudGlsIGFsbCBibG9jayBkZXZpY2VzIGFyZVxuMTQ2MTpcdCAqIHVuZnJvemVuLiBFYWNoIGJsb2NrIGRldmljZSBjYW4gb25seSBmcmVlemUgdGhlIGZpbGVzeXN0ZW0gb25jZSBhcyB3ZVxuMTQ2MjpcdCAqIG5lc3QgZnJlZXplcyBmb3IgYmxvY2sgZGV2aWNlcyBpbiB0aGUgYmxvY2sgbGF5ZXIuXG4xNDYzOlx0ICpcbjE0NjQ6XHQgKiBSZXR1cm46IElmIHRoZSBmcmVlemUgd2FzIHN1Y2Nlc3NmdWwgemVybyBpcyByZXR1cm5lZC4gSWYgdGhlIGZyZWV6ZVxuMTQ2NTpcdCAqICAgICAgICAgZmFpbGVkIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpcyByZXR1cm5lZC5cbjE0NjY6XHQgKi9cbjE0Njc6XHRzdGF0aWMgaW50IGZzX2JkZXZfZnJlZXplKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG4xNDY4Olx0e1xuMTQ2OTpcdFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYjtcbjE0NzA6XHRcdGludCBlcnJvciA9IDA7XG4xNDcxOlx0XG4xNDcyOlx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmJkZXYtXHUwMDNlYmRfZnNmcmVlemVfbXV0ZXgpO1xuMTQ3MzpcdFxuMTQ3NDpcdFx0c2IgPSBnZXRfYmRldl9zdXBlcihiZGV2KTtcbjE0NzU6XHRcdGlmICghc2IpXG4xNDc2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTQ3NzpcdFxuMTQ3ODpcdFx0aWYgKHNiLVx1MDAzZXNfb3AtXHUwMDNlZnJlZXplX3N1cGVyKVxuMTQ3OTpcdFx0XHRlcnJvciA9IHNiLVx1MDAzZXNfb3AtXHUwMDNlZnJlZXplX3N1cGVyKHNiLFxuMTQ4MDpcdFx0XHRcdFx0RlJFRVpFX01BWV9ORVNUIHwgRlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UsIE5VTEwpO1xuMTQ4MTpcdFx0ZWxzZVxuMTQ4MjpcdFx0XHRlcnJvciA9IGZyZWV6ZV9zdXBlcihzYixcbjE0ODM6XHRcdFx0XHRcdEZSRUVaRV9NQVlfTkVTVCB8IEZSRUVaRV9IT0xERVJfVVNFUlNQQUNFLCBOVUxMKTtcbjE0ODQ6XHRcdGlmICghZXJyb3IpIHtcbjE0ODU6XHRcdFx0ZXJyb3IgPSBzeW5jX2Jsb2NrZGV2KGJkZXYpO1xuMTQ4NjpcdFx0XHRpZiAoZXJyb3IpIHtcbjE0ODc6XHRcdFx0XHRpZiAoc2ItXHUwMDNlc19vcC1cdTAwM2V0aGF3X3N1cGVyKVxuMTQ4ODpcdFx0XHRcdFx0KHZvaWQpc2ItXHUwMDNlc19vcC1cdTAwM2V0aGF3X3N1cGVyKFxuMTQ4OTpcdFx0XHRcdFx0XHRzYixcbjE0OTA6XHRcdFx0XHRcdFx0RlJFRVpFX01BWV9ORVNUIHxcbjE0OTE6XHRcdFx0XHRcdFx0XHRGUkVFWkVfSE9MREVSX1VTRVJTUEFDRSxcbjE0OTI6XHRcdFx0XHRcdFx0TlVMTCk7XG4xNDkzOlx0XHRcdFx0ZWxzZVxuMTQ5NDpcdFx0XHRcdFx0KHZvaWQpdGhhd19zdXBlcihcbjE0OTU6XHRcdFx0XHRcdFx0c2IsXG4xNDk2Olx0XHRcdFx0XHRcdEZSRUVaRV9NQVlfTkVTVCB8XG4xNDk3Olx0XHRcdFx0XHRcdFx0RlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UsXG4xNDk4Olx0XHRcdFx0XHRcdE5VTEwpO1xuMTQ5OTpcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NTY0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlF1aWNrIFNjYW4gb2YgdGhlIFNpdHVhdGlvbioqCgpBbHJpZ2h0LCBzbyBgZnNfYmRldl9mcmVlemVgIC0gaXQmIzM5O3MgYSAqc3RhdGljKiBmdW5jdGlvbi4gR290IGl0LiBUaGF0IGltbWVkaWF0ZWx5IG5hcnJvd3MgZG93biBpdHMgc2NvcGUuICBJdCYjMzk7cyBub3QgZXhwb3J0ZWQgZ2xvYmFsbHksIHNvIGl0cyB1c2UgaXMgbGlrZWx5IGNvbnRhaW5lZCB3aXRoaW4gYSBzcGVjaWZpYyBtb2R1bGUgb3IgZmlsZSwgd2hpY2ggaXMgdXNlZnVsIHRvIHJlbWVtYmVyLiBOb3csIHdoZXJlIHdhcyB0aGF0IG90aGVyIG9uZT8gIEFoIHllcywgYF9fZXhmYXRfZnNfZXJyb3JgLiBJIGtub3cgdGhhdCBvbmUgdG9vLiBJJiMzOTttIHByZXR0eSBzdXJlIGl0IHJlc2lkZXMgaW4gYGZzL2V4ZmF0L21pc2MuY2AuICBUaGF0IGZpbGUgaXMgbGlrZSBhIGNhdGNoLWFsbCBmb3IgdmFyaW91cyB1dGlsaXR5IGZ1bmN0aW9ucyBpbiB0aGUgZXhGQVQgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbiwgSSBjYW4gdmlzdWFsaXplIHRoZSBzdHJ1Y3R1cmUgb2YgdGhhdCBvbmUgcHJldHR5IHdlbGwsIGF0IGxlYXN0IGluIG15IGhlYWQuIFRoaW5raW5nIGFib3V0IHRob3NlIGZpbGUgbmFtZXMgYW5kIGZ1bmN0aW9ucyBpbW1lZGlhdGVseSBzdGFydHMgdG8gcGFpbnQgYSBwaWN0dXJlIGFib3V0IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGluZ3MgaW4gdGhlIGNvZGUtYmFzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leGZhdC9taXNjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMwOlx0XHRzdHJ1Y3QgdmFfZm9ybWF0IHZhZjtcbiAgMzE6XHRcbiAgMzI6XHRcdGlmIChyZXBvcnQpIHtcbiAgMzM6XHRcdFx0dmFfc3RhcnQoYXJncywgZm10KTtcbiAgMzQ6XHRcdFx0dmFmLmZtdCA9IGZtdDtcbiAgMzU6XHRcdFx0dmFmLnZhID0gXHUwMDI2YXJncztcbiAgMzY6XHRcdFx0ZXhmYXRfZXJyKHNiLCBcJiMzNDtlcnJvciwgJXBWXCYjMzQ7LCBcdTAwMjZ2YWYpO1xuICAzNzpcdFx0XHR2YV9lbmQoYXJncyk7XG4gIDM4Olx0XHR9XG4gIDM5Olx0XG4gIDQwOlx0XHRpZiAob3B0cy1cdTAwM2VlcnJvcnMgPT0gRVhGQVRfRVJST1JTX1BBTklDKSB7XG4gIDQxOlx0XHRcdHBhbmljKFwmIzM0O2V4RkFULWZzICglcyk6IGZzIHBhbmljIGZyb20gcHJldmlvdXMgZXJyb3JcXG5cJiMzNDssXG4gIDQyOlx0XHRcdFx0c2ItXHUwMDNlc19pZCk7XG4gIDQzOlx0XHR9IGVsc2UgaWYgKG9wdHMtXHUwMDNlZXJyb3JzID09IEVYRkFUX0VSUk9SU19STyBcdTAwMjZcdTAwMjYgIXNiX3Jkb25seShzYikpIHtcbiAgNDQ6XHRcdFx0c2V0X2JpdChFWEZBVF9GTEFHU19TSFVURE9XTiwgXHUwMDI2RVhGQVRfU0Ioc2IpLVx1MDAzZXNfZXhmYXRfZmxhZ3MpO1xuICA0NTpcdFx0XHQvKlxuICA0NjpcdFx0XHQgKiBXZSBoYXZlIGFscmVhZHkgc2V0IEVYRkFUX0ZMQUdTX1NIVVRET1dOIGZsYWcgdG8gc3RvcCBhbGwgdXBkYXRlc1xuICA0NzpcdFx0XHQgKiB0byBmaWxlc3lzdGVtLCBzbyBpdCBkb2VzbiYjMzk7dCBuZWVkIHRvIHNldCBTQl9SRE9OTFkgZmxhZyBoZXJlXG4gIDQ4Olx0XHRcdCAqIGJlY2F1c2UgdGhlIGZsYWcgc2hvdWxkIGJlIHNldCBjb3ZlcmVkIHcvIHNiLVx1MDAzZXNfdW1vdW50IHNlbWFwaG9yZVxuICA0OTpcdFx0XHQgKiB2aWEgcmVtb3VudCBwcm9jZWR1cmUsIG90aGVyd2lzZSwgaXQgd2lsbCBjb25mdXNlIGNvZGUgbGlrZVxuICA1MDpcdFx0XHQgKiBmcmVlemVfc3VwZXIoKSB3aGljaCB3aWxsIGxlYWQgdG8gZGVhZGxvY2tzIGFuZCBvdGhlciBwcm9ibGVtcy5cbiAgNTE6XHRcdFx0ICovXG4gIDUyOlx0XHRcdGV4ZmF0X2VycihzYiwgXCYjMzQ7RmlsZXN5c3RlbSBoYXMgYmVlbiBzZXQgcmVhZC1vbmx5XCYjMzQ7KTtcbiAgNTM6XHRcdH1cbiAgNTQ6XHR9XG4gIDU1Olx0XG4gIDU2Olx0I2RlZmluZSBTRUNTX1BFUl9NSU4gICAgKDYwKVxuICA1NzpcdCNkZWZpbmUgVElNRVpPTkVfU0VDKHgpXHQoKHgpICogMTUgKiBTRUNTX1BFUl9NSU4pXG4gIDU4Olx0XG4gIDU5Olx0c3RhdGljIHZvaWQgZXhmYXRfYWRqdXN0X3R6KHN0cnVjdCB0aW1lc3BlYzY0ICp0cywgdTggdHpfb2ZmKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDMzNwoJCQkJCQkJb3V0cHV0OiAxNjkKCQkJCQkJCXRob3VnaHRzOiAxODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBmc19iZGV2X2ZyZWV6ZWAgYW5kIGBfX2V4ZmF0X2ZzX2Vycm9yYC4gUmlnaHQgYXdheSwgSSBzZWUgdGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcywgbWVhbmluZyB0aGV5JiMzOTtyZSBub3QganVzdCBjb3NtZXRpYyBvciByZWZhY3RvcmluZywgYnV0IGFjdHVhbGx5ICpjaGFuZ2UqIGhvdyB0aGUgc3lzdGVtIGJlaGF2ZXMuIEdvb2QsIHRoYXQmIzM5O3Mgd2hhdCB3ZSBuZWVkIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLgoKYGZzX2JkZXZfZnJlZXplYC4uLiBhaCwgdGhhdCYjMzk7cyB0aGUgb25lIHRoYXQgd2FzIGxlYXZpbmcgdGhlIHN1cGVyYmxvY2sgZnJvemVuIGFmdGVyIGEgYHN5bmNfYmxvY2tkZXZgIGZhaWx1cmUuIERlZmluaXRlbHkgYSBuYXN0eSBvbmUsIGFuZCBleGFjdGx5IHRoZSBraW5kIG9mIHRoaW5nIHN5emthbGxlciBsb3ZlcyB0byB0cmlwIHVwIG9uLiBFeGNlbGxlbnQuIFRoZSBvdGhlciBvbmUsIGBfX2V4ZmF0X2ZzX2Vycm9yYCwgc291bmRzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBhIGRlYWRsb2NrIHNpdHVhdGlvbiB3aGVuIGBTQl9SRE9OTFlgIGlzIHNldCB3aXRob3V0IHRoZSBgc191bW91bnRgIHNlbWFwaG9yZS4gVGhpcyBpcyBhbm90aGVyIGNsYXNzaWMuIENvbmN1cnJlbmN5IGJ1Z3MgYXJlIGFsd2F5cyBwcmltZSB0YXJnZXRzLgoKUGVyZmVjdCwgdGhpcyBoaXRzIHRoZSBzd2VldCBzcG90IG9mIHN5emthbGxlciYjMzk7cyBzdHJlbmd0aHMuIFdlICp3YW50KiB0byBmdXp6IHRoZXNlIGZpeGVzLgoKTGV0JiMzOTtzIHNlZSwgd2hhdCBjb25maWdzIGRvIHdlIG5lZWQ/IEp1c3QgYEVYRkFUX0ZTYC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrLi4uIHllcCwgYENPTkZJR19FWEZBVF9GU2AgaXMgdGhlIG9uZS4gQWxsIGdvb2QuCgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYRkFUX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZnNfYmRldl9mcmVlemUmIzM0OywKICAgICYjMzQ7X19leGZhdF9mc19lcnJvciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBWRlMgYmxvY2sgZGV2aWNlIGZyZWV6aW5nIGxvZ2ljIChgZnNfYmRldl9mcmVlemVgKSB0byBwcm9wZXJseSB0aGF3IHRoZSBzdXBlcmJsb2NrIGlmIGBzeW5jX2Jsb2NrZGV2YCBmYWlscywgcHJldmVudGluZyBhIGZyb3plbiBzdGF0ZSBsZWFrLiBJdCBhbHNvIG1vZGlmaWVzIGV4ZmF0IGVycm9yIGhhbmRsaW5nIChgX19leGZhdF9mc19lcnJvcmApIHRvIHNldCBhIHNodXRkb3duIGZsYWcgaW5zdGVhZCBvZiBkaXJlY3RseSBtb2RpZnlpbmcgYHNiLVx1MDAzZXNfZmxhZ3NgIHdpdGggYFNCX1JET05MWWAgd2l0aG91dCBob2xkaW5nIHRoZSBgc191bW91bnRgIHNlbWFwaG9yZSwgd2hpY2ggcHJldmlvdXNseSBjYXVzZWQgZGVhZGxvY2tzIHdpdGggYGZyZWV6ZV9zdXBlcigpYC4gQm90aCBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhGQVRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmc19iZGV2X2ZyZWV6ZSYjMzQ7LAogICAgJiMzNDtfX2V4ZmF0X2ZzX2Vycm9yJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFZGUyBibG9jayBkZXZpY2UgZnJlZXppbmcgbG9naWMgKGBmc19iZGV2X2ZyZWV6ZWApIHRvIHByb3Blcmx5IHRoYXcgdGhlIHN1cGVyYmxvY2sgaWYgYHN5bmNfYmxvY2tkZXZgIGZhaWxzLCBwcmV2ZW50aW5nIGEgZnJvemVuIHN0YXRlIGxlYWsuIEl0IGFsc28gbW9kaWZpZXMgZXhmYXQgZXJyb3IgaGFuZGxpbmcgKGBfX2V4ZmF0X2ZzX2Vycm9yYCkgdG8gc2V0IGEgc2h1dGRvd24gZmxhZyBpbnN0ZWFkIG9mIGRpcmVjdGx5IG1vZGlmeWluZyBgc2ItXHUwMDNlc19mbGFnc2Agd2l0aCBgU0JfUkRPTkxZYCB3aXRob3V0IGhvbGRpbmcgdGhlIGBzX3Vtb3VudGAgc2VtYXBob3JlLCB3aGljaCBwcmV2aW91c2x5IGNhdXNlZCBkZWFkbG9ja3Mgd2l0aCBgZnJlZXplX3N1cGVyKClgLiBCb3RoIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTY6NTQuMTA5MjI3MDgzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk3NDkwOTIxMDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYRkFUX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnNfYmRldl9mcmVlemVcIixcbiAgICBcIl9fZXhmYXRfZnNfZXJyb3JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBWRlMgYmxvY2sgZGV2aWNlIGZyZWV6aW5nIGxvZ2ljIChgZnNfYmRldl9mcmVlemVgKSB0byBwcm9wZXJseSB0aGF3IHRoZSBzdXBlcmJsb2NrIGlmIGBzeW5jX2Jsb2NrZGV2YCBmYWlscywgcHJldmVudGluZyBhIGZyb3plbiBzdGF0ZSBsZWFrLiBJdCBhbHNvIG1vZGlmaWVzIGV4ZmF0IGVycm9yIGhhbmRsaW5nIChgX19leGZhdF9mc19lcnJvcmApIHRvIHNldCBhIHNodXRkb3duIGZsYWcgaW5zdGVhZCBvZiBkaXJlY3RseSBtb2RpZnlpbmcgYHNiLVxcdTAwM2VzX2ZsYWdzYCB3aXRoIGBTQl9SRE9OTFlgIHdpdGhvdXQgaG9sZGluZyB0aGUgYHNfdW1vdW50YCBzZW1hcGhvcmUsIHdoaWNoIHByZXZpb3VzbHkgY2F1c2VkIGRlYWRsb2NrcyB3aXRoIGBmcmVlemVfc3VwZXIoKWAuIEJvdGggYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29kZSBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDEwOjE2OjU0LjEwOTIzNDg2M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYyOTAxMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNGExNmUxMzgzNGYzYWEzOTU4MGJlZWE3ZjI4YWRjZmNhMjFlOTI1ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCAyMSAxMDoxNjo1MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9leGZhdC9taXNjLmMgYi9mcy9leGZhdC9taXNjLmNcXG5pbmRleCA2ZjExYTk2YTRmZmE4NC4uZGJiM2IyOTA3MDQ1NDUgMTAwNjQ0XFxuLS0tIGEvZnMvZXhmYXQvbWlzYy5jXFxuKysrIGIvZnMvZXhmYXQvbWlzYy5jXFxuQEAgLTQxLDcgKzQxLDE0IEBAIHZvaWQgX19leGZhdF9mc19lcnJvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgcmVwb3J0LCBjb25zdCBjaGFyICpmbXQsIC4uLilcXG4gXFx0XFx0cGFuaWMoXFxcImV4RkFULWZzICglcyk6IGZzIHBhbmljIGZyb20gcHJldmlvdXMgZXJyb3JcXFxcblxcXCIsXFxuIFxcdFxcdFxcdHNiLVxcdTAwM2VzX2lkKTtcXG4gXFx0fSBlbHNlIGlmIChvcHRzLVxcdTAwM2VlcnJvcnMgPT0gRVhGQVRfRVJST1JTX1JPIFxcdTAwMjZcXHUwMDI2ICFzYl9yZG9ubHkoc2IpKSB7XFxuLVxcdFxcdHNiLVxcdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcXG4rXFx0XFx0c2V0X2JpdChFWEZBVF9GTEFHU19TSFVURE9XTiwgXFx1MDAyNkVYRkFUX1NCKHNiKS1cXHUwMDNlc19leGZhdF9mbGFncyk7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFdlIGhhdmUgYWxyZWFkeSBzZXQgRVhGQVRfRkxBR1NfU0hVVERPV04gZmxhZyB0byBzdG9wIGFsbCB1cGRhdGVzXFxuK1xcdFxcdCAqIHRvIGZpbGVzeXN0ZW0sIHNvIGl0IGRvZXNuJ3QgbmVlZCB0byBzZXQgU0JfUkRPTkxZIGZsYWcgaGVyZVxcbitcXHRcXHQgKiBiZWNhdXNlIHRoZSBmbGFnIHNob3VsZCBiZSBzZXQgY292ZXJlZCB3LyBzYi1cXHUwMDNlc191bW91bnQgc2VtYXBob3JlXFxuK1xcdFxcdCAqIHZpYSByZW1vdW50IHByb2NlZHVyZSwgb3RoZXJ3aXNlLCBpdCB3aWxsIGNvbmZ1c2UgY29kZSBsaWtlXFxuK1xcdFxcdCAqIGZyZWV6ZV9zdXBlcigpIHdoaWNoIHdpbGwgbGVhZCB0byBkZWFkbG9ja3MgYW5kIG90aGVyIHByb2JsZW1zLlxcbitcXHRcXHQgKi9cXG4gXFx0XFx0ZXhmYXRfZXJyKHNiLCBcXFwiRmlsZXN5c3RlbSBoYXMgYmVlbiBzZXQgcmVhZC1vbmx5XFxcIik7XFxuIFxcdH1cXG4gfVxcbmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuY1xcbmluZGV4IGE4ZmQ2MTEzNmFhZmU1Li45MDlkOGI5YWJiODg3YSAxMDA2NDRcXG4tLS0gYS9mcy9zdXBlci5jXFxuKysrIGIvZnMvc3VwZXIuY1xcbkBAIC0xNDgxLDggKzE0ODEsMjMgQEAgc3RhdGljIGludCBmc19iZGV2X2ZyZWV6ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxcbiBcXHRlbHNlXFxuIFxcdFxcdGVycm9yID0gZnJlZXplX3N1cGVyKHNiLFxcbiBcXHRcXHRcXHRcXHRGUkVFWkVfTUFZX05FU1QgfCBGUkVFWkVfSE9MREVSX1VTRVJTUEFDRSwgTlVMTCk7XFxuLVxcdGlmICghZXJyb3IpXFxuK1xcdGlmICghZXJyb3IpIHtcXG4gXFx0XFx0ZXJyb3IgPSBzeW5jX2Jsb2NrZGV2KGJkZXYpO1xcbitcXHRcXHRpZiAoZXJyb3IpIHtcXG4rXFx0XFx0XFx0aWYgKHNiLVxcdTAwM2VzX29wLVxcdTAwM2V0aGF3X3N1cGVyKVxcbitcXHRcXHRcXHRcXHQodm9pZClzYi1cXHUwMDNlc19vcC1cXHUwMDNldGhhd19zdXBlcihcXG4rXFx0XFx0XFx0XFx0XFx0c2IsXFxuK1xcdFxcdFxcdFxcdFxcdEZSRUVaRV9NQVlfTkVTVCB8XFxuK1xcdFxcdFxcdFxcdFxcdFxcdEZSRUVaRV9IT0xERVJfVVNFUlNQQUNFLFxcbitcXHRcXHRcXHRcXHRcXHROVUxMKTtcXG4rXFx0XFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRcXHQodm9pZCl0aGF3X3N1cGVyKFxcbitcXHRcXHRcXHRcXHRcXHRzYixcXG4rXFx0XFx0XFx0XFx0XFx0RlJFRVpFX01BWV9ORVNUIHxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0RlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UsXFxuK1xcdFxcdFxcdFxcdFxcdE5VTEwpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFx0ZGVhY3RpdmF0ZV9zdXBlcihzYik7XFxuIFxcdHJldHVybiBlcnJvcjtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxNjo1NC42NzMxOTEwMDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxOTY5MjY5NDk0NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhGQVRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmc19iZGV2X2ZyZWV6ZVwiLFxuICAgIFwiX19leGZhdF9mc19lcnJvclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFZGUyBibG9jayBkZXZpY2UgZnJlZXppbmcgbG9naWMgKGBmc19iZGV2X2ZyZWV6ZWApIHRvIHByb3Blcmx5IHRoYXcgdGhlIHN1cGVyYmxvY2sgaWYgYHN5bmNfYmxvY2tkZXZgIGZhaWxzLCBwcmV2ZW50aW5nIGEgZnJvemVuIHN0YXRlIGxlYWsuIEl0IGFsc28gbW9kaWZpZXMgZXhmYXQgZXJyb3IgaGFuZGxpbmcgKGBfX2V4ZmF0X2ZzX2Vycm9yYCkgdG8gc2V0IGEgc2h1dGRvd24gZmxhZyBpbnN0ZWFkIG9mIGRpcmVjdGx5IG1vZGlmeWluZyBgc2ItXFx1MDAzZXNfZmxhZ3NgIHdpdGggYFNCX1JET05MWWAgd2l0aG91dCBob2xkaW5nIHRoZSBgc191bW91bnRgIHNlbWFwaG9yZSwgd2hpY2ggcHJldmlvdXNseSBjYXVzZWQgZGVhZGxvY2tzIHdpdGggYGZyZWV6ZV9zdXBlcigpYC4gQm90aCBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0YTE2ZTEzODM0ZjNhYTM5NTgwYmVlYTdmMjhhZGNmY2EyMWU5MjVkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjEgMTA6MTY6NTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leGZhdC9taXNjLmMgYi9mcy9leGZhdC9taXNjLmNcbmluZGV4IDZmMTFhOTZhNGZmYTg0Li5kYmIzYjI5MDcwNDU0NSAxMDA2NDRcbi0tLSBhL2ZzL2V4ZmF0L21pc2MuY1xuKysrIGIvZnMvZXhmYXQvbWlzYy5jXG5AQCAtNDEsNyArNDEsMTQgQEAgdm9pZCBfX2V4ZmF0X2ZzX2Vycm9yKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCByZXBvcnQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuIFx0XHRwYW5pYyhcImV4RkFULWZzICglcyk6IGZzIHBhbmljIGZyb20gcHJldmlvdXMgZXJyb3JcXG5cIixcbiBcdFx0XHRzYi1cdTAwM2VzX2lkKTtcbiBcdH0gZWxzZSBpZiAob3B0cy1cdTAwM2VlcnJvcnMgPT0gRVhGQVRfRVJST1JTX1JPIFx1MDAyNlx1MDAyNiAhc2JfcmRvbmx5KHNiKSkge1xuLVx0XHRzYi1cdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcbitcdFx0c2V0X2JpdChFWEZBVF9GTEFHU19TSFVURE9XTiwgXHUwMDI2RVhGQVRfU0Ioc2IpLVx1MDAzZXNfZXhmYXRfZmxhZ3MpO1xuK1x0XHQvKlxuK1x0XHQgKiBXZSBoYXZlIGFscmVhZHkgc2V0IEVYRkFUX0ZMQUdTX1NIVVRET1dOIGZsYWcgdG8gc3RvcCBhbGwgdXBkYXRlc1xuK1x0XHQgKiB0byBmaWxlc3lzdGVtLCBzbyBpdCBkb2Vzbid0IG5lZWQgdG8gc2V0IFNCX1JET05MWSBmbGFnIGhlcmVcbitcdFx0ICogYmVjYXVzZSB0aGUgZmxhZyBzaG91bGQgYmUgc2V0IGNvdmVyZWQgdy8gc2ItXHUwMDNlc191bW91bnQgc2VtYXBob3JlXG4rXHRcdCAqIHZpYSByZW1vdW50IHByb2NlZHVyZSwgb3RoZXJ3aXNlLCBpdCB3aWxsIGNvbmZ1c2UgY29kZSBsaWtlXG4rXHRcdCAqIGZyZWV6ZV9zdXBlcigpIHdoaWNoIHdpbGwgbGVhZCB0byBkZWFkbG9ja3MgYW5kIG90aGVyIHByb2JsZW1zLlxuK1x0XHQgKi9cbiBcdFx0ZXhmYXRfZXJyKHNiLCBcIkZpbGVzeXN0ZW0gaGFzIGJlZW4gc2V0IHJlYWQtb25seVwiKTtcbiBcdH1cbiB9XG5kaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmNcbmluZGV4IGE4ZmQ2MTEzNmFhZmU1Li45MDlkOGI5YWJiODg3YSAxMDA2NDRcbi0tLSBhL2ZzL3N1cGVyLmNcbisrKyBiL2ZzL3N1cGVyLmNcbkBAIC0xNDgxLDggKzE0ODEsMjMgQEAgc3RhdGljIGludCBmc19iZGV2X2ZyZWV6ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuIFx0ZWxzZVxuIFx0XHRlcnJvciA9IGZyZWV6ZV9zdXBlcihzYixcbiBcdFx0XHRcdEZSRUVaRV9NQVlfTkVTVCB8IEZSRUVaRV9IT0xERVJfVVNFUlNQQUNFLCBOVUxMKTtcbi1cdGlmICghZXJyb3IpXG4rXHRpZiAoIWVycm9yKSB7XG4gXHRcdGVycm9yID0gc3luY19ibG9ja2RldihiZGV2KTtcbitcdFx0aWYgKGVycm9yKSB7XG4rXHRcdFx0aWYgKHNiLVx1MDAzZXNfb3AtXHUwMDNldGhhd19zdXBlcilcbitcdFx0XHRcdCh2b2lkKXNiLVx1MDAzZXNfb3AtXHUwMDNldGhhd19zdXBlcihcbitcdFx0XHRcdFx0c2IsXG4rXHRcdFx0XHRcdEZSRUVaRV9NQVlfTkVTVCB8XG4rXHRcdFx0XHRcdFx0RlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UsXG4rXHRcdFx0XHRcdE5VTEwpO1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdCh2b2lkKXRoYXdfc3VwZXIoXG4rXHRcdFx0XHRcdHNiLFxuK1x0XHRcdFx0XHRGUkVFWkVfTUFZX05FU1QgfFxuK1x0XHRcdFx0XHRcdEZSRUVaRV9IT0xERVJfVVNFUlNQQUNFLFxuK1x0XHRcdFx0XHROVUxMKTtcbitcdFx0fVxuK1x0fVxuIFx0ZGVhY3RpdmF0ZV9zdXBlcihzYik7XG4gXHRyZXR1cm4gZXJyb3I7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTY6NTQuNjczMTkzMTAzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY3ODIyNTA5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFeEZBVCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoZXNlIHR3byBwYXRjaGVzLCBvbmUgdG91Y2hpbmcgYGZzL2V4ZmF0L21pc2MuY2AgYW5kIHRoZSBvdGhlciBgZnMvc3VwZXIuY2AuIFRoZSBmaXJzdCBvbmUsIGluIGBtaXNjLmNgLCBsb29rcyBsaWtlIGl0J3MgdHdlYWtpbmcgYF9fZXhmYXRfZnNfZXJyb3JgLiBJbnN0ZWFkIG9mIGRpcmVjdGx5IHNldHRpbmcgYFNCX1JET05MWWAgb24gdGhlIHN1cGVyIGJsb2NrJ3MgZmxhZ3MgKGBzYi1cdTAwM2VzX2ZsYWdzYCksIGl0J3Mgbm93IHNldHRpbmcgYEVYRkFUX0ZMQUdTX1NIVVRET1dOYC4gSW50ZXJlc3RpbmcuIFRoYXTigJlzIGEgY2hhbmdlIGluIGhvdyB3ZSBoYW5kbGUgZXJyb3JzIGFuZCBwb3RlbnRpYWxseSBzaHV0ZG93biB0aGUgZmlsZXN5c3RlbSBncmFjZWZ1bGx5LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgc2hpZnQuXG5cblRoZSBzZWNvbmQgcGF0Y2ggbW9kaWZpZXMgYGZzX2JkZXZfZnJlZXplYCBpbiBgZnMvc3VwZXIuY2AuIFRoYXTigJlzIGEgZnVuZGFtZW50YWwgVkZTIGZ1bmN0aW9uLCB3aGljaCBpcyB3b3J0aCBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IHdpdGggdGhlIHBvdGVudGlhbCBpbnRlcnBsYXkgd2l0aCB0aGUgZmlyc3QgY2hhbmdlLiBUaGUgbW9kaWZpY2F0aW9uIGludm9sdmVzIHRoYXdpbmcgdGhlIHN1cGVyYmxvY2sgaWYgYHN5bmNfYmxvY2tkZXYoYmRldilgIGZhaWxzLiBUaGF0IHN1Z2dlc3RzIHRoaXMgbWF5IGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGZyZWV6ZS90aGF3IHByb2Nlc3MuIFRoaXMgaXMgb2J2aW91c2x5IHJlbGF0ZWQgdG8gYmxvY2sgZGV2aWNlIHN5bmNocm9uaXphdGlvbiwgc28gbGV0J3Mga2VlcCB0aGF0IGluIG1pbmQuXG5cbkJlZm9yZSBJIGdvIHRvbyBkZWVwLCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBTbywgbXkgbmV4dCBtb3ZlIGlzIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UuIEknbGwgdXNlIGBnaXQgZ3JlcGAgdG8gZmluZCBhbGwgb2NjdXJyZW5jZXMgb2YgYm90aCBgZnNfYmRldl9mcmVlemVgIGFuZCBgX19leGZhdF9mc19lcnJvcmAgd2l0aGluIHRoZSByZWxldmFudCBmaWxlIHRyZWUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZWlyIHVzZXMsIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgY29kZSBpbiB0aGlzIGFyZWEuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IHRvIGZvcm0gYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwYXRjaCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIGZpbGVzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNTQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxNzoxMS40NTU0NDY5NTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzUwOTE2NDY1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmc19iZGV2X2ZyZWV6ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9zdXBlci5jPTE0Mzc9c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqZ2V0X2JkZXZfc3VwZXIoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcXG4tLVxcbmZzL3N1cGVyLmMtMTQ1Mi0vKipcXG5mcy9zdXBlci5jOjE0NTM6ICogZnNfYmRldl9mcmVlemUgLSBmcmVlemUgb3duaW5nIGZpbGVzeXN0ZW0gb2YgYmxvY2sgZGV2aWNlXFxuZnMvc3VwZXIuYy0xNDU0LSAqIEBiZGV2OiBibG9jayBkZXZpY2VcXG4tLVxcbmZzL3N1cGVyLmMtMTQ2Ni0gKi9cXG5mcy9zdXBlci5jOjE0Njc6c3RhdGljIGludCBmc19iZGV2X2ZyZWV6ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxcbmZzL3N1cGVyLmMtMTQ2OC17XFxuLS1cXG5mcy9zdXBlci5jPTE1NTI9Y29uc3Qgc3RydWN0IGJsa19ob2xkZXJfb3BzIGZzX2hvbGRlcl9vcHMgPSB7XFxuLS1cXG5mcy9zdXBlci5jLTE1NTQtXFx0LnN5bmNcXHRcXHRcXHQ9IGZzX2JkZXZfc3luYyxcXG5mcy9zdXBlci5jOjE1NTU6XFx0LmZyZWV6ZVxcdFxcdFxcdD0gZnNfYmRldl9mcmVlemUsXFxuZnMvc3VwZXIuYy0xNTU2LVxcdC50aGF3XFx0XFx0XFx0PSBmc19iZGV2X3RoYXcsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDEwOjE3OjE0Ljk2NDYxNjg5MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNTMzMzQyMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gdGhlIHdlZWRzIG9mIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb246XG5cbioqVHJhY2luZyB0aGUgRnJlZXplIE9wZXJhdGlvbioqXG5cblJpZ2h0LCBzbyBgZnNfYmRldl9mcmVlemVgIGlzIGNsZWFybHkgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGluIGZyZWV6aW5nIGEgYmxvY2sgZGV2aWNlIGZvciBhIGZpbGVzeXN0ZW0sIGFuZCBpdCdzIGJlaW5nIGNhbGxlZCB0aHJvdWdoIHRoZSBgZnNfaG9sZGVyX29wcy5mcmVlemVgIG1lY2hhbmlzbS4gVGhhdCdzIGdvb2QsIHRoYXQgZ2l2ZXMgbWUgYSBzcGVjaWZpYyBwb2ludCB0byBzdGFydC5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKmNvbnRleHQqIG9mIHRoaXMgZnJlZXplIG9wZXJhdGlvbi4gYGZzX2hvbGRlcl9vcHNgLi4udGhhdCdzIGFuIGludGVyZmFjZSwgYSBjb2xsZWN0aW9uIG9mIG9wZXJhdGlvbnMgYSBmaWxlc3lzdGVtIGltcGxlbWVudHMsIHJpZ2h0PyBJIG5lZWQgdG8ga25vdyAqd2hvKiBvciAqd2hhdCogaXMgdXNpbmcgdGhpcyBzcGVjaWZpYyBgZnNfaG9sZGVyX29wc2Agc3RydWN0dXJlIHRoYXQncyBjYWxsaW5nIGBmcmVlemVgLiBLbm93aW5nIHdoZXJlIGBmc19ob2xkZXJfb3BzYCBpcyAqdXNlZCogd2lsbCBnaXZlIG1lIHRoZSBiaWdnZXIgcGljdHVyZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSB3aG9sZSB2b2x1bWUgZ3JvdXAsIGEgc2luZ2xlIGZpbGVzeXN0ZW0sIHNvbWUga2luZCBvZiBsYXllcmVkIHN0b3JhZ2U/IFRoaXMgd2lsbCBkZXRlcm1pbmUgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhlIGZyZWV6ZS4gTGV0J3MgdHJhY2UgYmFjayB0aGUgY2FsbHMuLi4gbGV0J3MgZmlndXJlIG91dCB0aGUgY2FsbGVycyBvZiBgZnNfaG9sZGVyX29wc2AuIFRpbWUgdG8gZmlyZSB1cCB0aGUgZGVidWdnZXIgYW5kIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY3Jvc3MtcmVmZXJlbmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIwNCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDEwOjE3OjE5LjExNzk1MzczNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTkwODUyMzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZzX2hvbGRlcl9vcHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYnRyZnMvZGV2LXJlcGxhY2UuYz0yMzI9c3RhdGljIGludCBidHJmc19pbml0X2Rldl9yZXBsYWNlX3RndGRldihzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbyxcXG4tLVxcbmZzL2J0cmZzL2Rldi1yZXBsYWNlLmMtMjUwLVxcdGJkZXZfZmlsZSA9IGJkZXZfZmlsZV9vcGVuX2J5X3BhdGgoZGV2aWNlX3BhdGgsIEJMS19PUEVOX1dSSVRFLFxcbmZzL2J0cmZzL2Rldi1yZXBsYWNlLmM6MjUxOlxcdFxcdFxcdFxcdFxcdCAgIGZzX2luZm8tXFx1MDAzZXNiLCBcXHUwMDI2ZnNfaG9sZGVyX29wcyk7XFxuZnMvYnRyZnMvZGV2LXJlcGxhY2UuYy0yNTItXFx0aWYgKElTX0VSUihiZGV2X2ZpbGUpKSB7XFxuLS1cXG5mcy9idHJmcy92b2x1bWVzLmM9NDc2PWJ0cmZzX2dldF9iZGV2X2FuZF9zYihjb25zdCBjaGFyICpkZXZpY2VfcGF0aCwgYmxrX21vZGVfdCBmbGFncywgdm9pZCAqaG9sZGVyLFxcbi0tXFxuZnMvYnRyZnMvdm9sdW1lcy5jLTQ4Mi1cXG5mcy9idHJmcy92b2x1bWVzLmM6NDgzOlxcdCpiZGV2X2ZpbGUgPSBiZGV2X2ZpbGVfb3Blbl9ieV9wYXRoKGRldmljZV9wYXRoLCBmbGFncywgaG9sZGVyLCBcXHUwMDI2ZnNfaG9sZGVyX29wcyk7XFxuZnMvYnRyZnMvdm9sdW1lcy5jLTQ4NC1cXG4tLVxcbmZzL2J0cmZzL3ZvbHVtZXMuYz0yODQ4PWludCBidHJmc19pbml0X25ld19kZXZpY2Uoc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmZzX2luZm8sIGNvbnN0IGNoYXIgKmRldmljZV9wYXRoKVxcbi0tXFxuZnMvYnRyZnMvdm9sdW1lcy5jLTI4NjYtXFx0YmRldl9maWxlID0gYmRldl9maWxlX29wZW5fYnlfcGF0aChkZXZpY2VfcGF0aCwgQkxLX09QRU5fV1JJVEUsXFxuZnMvYnRyZnMvdm9sdW1lcy5jOjI4Njc6XFx0XFx0XFx0XFx0XFx0ICAgZnNfaW5mby1cXHUwMDNlc2IsIFxcdTAwMjZmc19ob2xkZXJfb3BzKTtcXG5mcy9idHJmcy92b2x1bWVzLmMtMjg2OC1cXHRpZiAoSVNfRVJSKGJkZXZfZmlsZSkpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTk3MT1zdGF0aWMgc3RydWN0IGZpbGUgKmV4dDRfZ2V0X2pvdXJuYWxfYmxrZGV2KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNTk4NS1cXHRcXHRCTEtfT1BFTl9SRUFEIHwgQkxLX09QRU5fV1JJVEUgfCBCTEtfT1BFTl9SRVNUUklDVF9XUklURVMsXFxuZnMvZXh0NC9zdXBlci5jOjU5ODY6XFx0XFx0c2IsIFxcdTAwMjZmc19ob2xkZXJfb3BzKTtcXG5mcy9leHQ0L3N1cGVyLmMtNTk4Ny1cXHRpZiAoSVNfRVJSKGJkZXZfZmlsZSkpIHtcXG4tLVxcbmZzL3N1cGVyLmM9MTUyMj1zdGF0aWMgaW50IGZzX2JkZXZfdGhhdyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxcbi0tXFxuZnMvc3VwZXIuYy0xNTUxLVxcbmZzL3N1cGVyLmM6MTU1Mjpjb25zdCBzdHJ1Y3QgYmxrX2hvbGRlcl9vcHMgZnNfaG9sZGVyX29wcyA9IHtcXG5mcy9zdXBlci5jLTE1NTMtXFx0Lm1hcmtfZGVhZFxcdFxcdD0gZnNfYmRldl9tYXJrX2RlYWQsXFxuLS1cXG5mcy9zdXBlci5jLTE1NTctfTtcXG5mcy9zdXBlci5jOjE1NTg6RVhQT1JUX1NZTUJPTF9HUEwoZnNfaG9sZGVyX29wcyk7XFxuZnMvc3VwZXIuYy0xNTU5LVxcbmZzL3N1cGVyLmM9MTU2MD1pbnQgc2V0dXBfYmRldl9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgc2JfZmxhZ3MsXFxuLS1cXG5mcy9zdXBlci5jLTE1NjYtXFxuZnMvc3VwZXIuYzoxNTY3OlxcdGJkZXZfZmlsZSA9IGJkZXZfZmlsZV9vcGVuX2J5X2RldihzYi1cXHUwMDNlc19kZXYsIG1vZGUsIHNiLCBcXHUwMDI2ZnNfaG9sZGVyX29wcyk7XFxuZnMvc3VwZXIuYy0xNTY4LVxcdGlmIChJU19FUlIoYmRldl9maWxlKSkge1xcbi0tXFxuZnMveGZzL3hmc19zdXBlci5jPTM5ND14ZnNfYmxrZGV2X2dldChcXG4tLVxcbmZzL3hmcy94ZnNfc3VwZXIuYy00MDMtXFx0KmJkZXZfZmlsZXAgPSBiZGV2X2ZpbGVfb3Blbl9ieV9wYXRoKG5hbWUsIG1vZGUsXFxuZnMveGZzL3hmc19zdXBlci5jOjQwNDpcXHRcXHRcXHRtcC1cXHUwMDNlbV9zdXBlciwgXFx1MDAyNmZzX2hvbGRlcl9vcHMpO1xcbmZzL3hmcy94ZnNfc3VwZXIuYy00MDUtXFx0aWYgKElTX0VSUigqYmRldl9maWxlcCkpIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg9MTc1MD1zdHJ1Y3QgYmxrX2hvbGRlcl9vcHMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xNzczLS8qXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaDoxNzc0OiAqIEZvciBmaWxlc3lzdGVtcyB1c2luZyBAZnNfaG9sZGVyX29wcywgdGhlIEBob2xkZXIgYXJndW1lbnQgcGFzc2VkIHRvXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xNzc1LSAqIGhlbHBlcnMgdXNlZCB0byBvcGVuIGFuZCBjbGFpbSBibG9jayBkZXZpY2VzIHZpYVxcbi0tXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xNzc3LSAqL1xcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTc3ODpleHRlcm4gY29uc3Qgc3RydWN0IGJsa19ob2xkZXJfb3BzIGZzX2hvbGRlcl9vcHM7XFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xNzc5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxNzoyMi4zMDg4MTE3NzFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODA1MDE2ODg1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlIHdoYXQgSSdtIHRoaW5raW5nIGhlcmUuXG5cbioqRGVjb25zdHJ1Y3RpbmcgQmxvY2sgRGV2aWNlIEZyZWV6aW5nIE9wZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdHJhY2luZyB0aGUgdXNhZ2Ugb2YgYGZzX2hvbGRlcl9vcHNgIGFuZCBpdCdzIHBvcHBpbmcgdXAgaW4gYHNldHVwX2JkZXZfc3VwZXJgIGFuZCBhIGZldyBvdGhlciBsb2NhdGlvbnMsIHdoaWNoIGlzbid0IGVudGlyZWx5IHN1cnByaXNpbmcuIFRoYXQgZnVuY3Rpb24gaXMgcHJldHR5IGZ1bmRhbWVudGFsIGZvciBlc3RhYmxpc2hpbmcgYmxvY2sgZGV2aWNlIHN1cGVyYmxvY2tzLCBzbyBob2xkZXIgb3BlcmF0aW9ucyBhcmUgbGlrZWx5IHJlbGV2YW50IHRoZXJlLiBNeSBwcmltYXJ5IGludGVyZXN0IGlzIHdpdGggdGhlIGBmcmVlemVgIG9wZXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhpcyBjb250ZXh0LCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIGJsb2NrIGRldmljZXMuIFRoZSBrZXkgcXVlc3Rpb24gaXMsICp3aG8qIGlzIGNhbGxpbmcgdGhpcyBgZnJlZXplYCBmdW5jdGlvbiBkZWZpbmVkIGluIGBibGtfaG9sZGVyX29wc2A/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsZXJzIG9mIGBmcmVlemVgIHdpdGhpbiBgYmxrX2hvbGRlcl9vcHNgLiBUaW1lIHRvIGRpZyBkZWVwZXIgYW5kIGZpbmQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjU1LCJPdXRwdXRUb2tlbnMiOjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTc6NDAuMzU4OTgzMDEzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzczMTY3NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiLVxcdTAwM2VmcmVlemVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA3MzEgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9saWJhdGEucnN0PTI2OD1mb2xsb3dzIGEgc3VjY2Vzc2Z1bCByZXNldC5cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbGliYXRhLnJzdC0yNjktXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2xpYmF0YS5yc3Q6MjcwOlRoZSBvcHRpb25hbCBgYC1cXHUwMDNlZnJlZXplKClgYCBjYWxsYmFjayBjYW4gYmUgdXNlZCBmb3IgZnJlZXppbmcgdGhlIHBvcnRcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbGliYXRhLnJzdC0yNzEtaGFyZHdhcmUtd2lzZSAoZS5nLiBtYXNrIGludGVycnVwdCBhbmQgc3RvcCBETUEgZW5naW5lKS4gSWYgYSBwb3J0XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbGliYXRhLnJzdD0yNzU9VGhlIG9wdGlvbmFsIGBgLVxcdTAwM2V0aGF3KClgYCBjYWxsYmFjayBpcyBjYWxsZWQgdG8gcGVyZm9ybSB0aGUgb3Bwb3NpdGUgb2ZcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbGliYXRhLnJzdDoyNzY6YGAtXFx1MDAzZWZyZWV6ZSgpYGA6IHByZXBhcmUgdGhlIHBvcnQgZm9yIG5vcm1hbCBvcGVyYXRpb24gb25jZSBhZ2Fpbi4gVW5tYXNrXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2xpYmF0YS5yc3QtMjc3LWludGVycnVwdHMsIHN0YXJ0IERNQSBlbmdpbmUsIGV0Yy5cXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9wbS9kZXZpY2VzLnJzdD01MTc9dGhlIHN5c3RlbSAoXFxcInBvd2VyIG9mZlxcXCIpLiAgVGhlIHBoYXNlcyB1c2VkIHRvIGFjY29tcGxpc2ggdGhpcyBhcmU6IGBgcHJlcGFyZWBgLFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3BtL2RldmljZXMucnN0LTUyNC1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvcG0vZGV2aWNlcy5yc3Q6NTI1OiAgICAyLlxcdFRoZSBgYC1cXHUwMDNlZnJlZXplYGAgbWV0aG9kcyBzaG91bGQgcXVpZXNjZSB0aGUgZGV2aWNlIHNvIHRoYXQgaXQgZG9lc24ndFxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9wbS9kZXZpY2VzLnJzdC01MjYtXFx0Z2VuZXJhdGUgSVJRcyBvciBETUEsIGFuZCB0aGV5IG1heSBuZWVkIHRvIHNhdmUgdGhlIHZhbHVlcyBvZiBkZXZpY2VcXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9wbS9kZXZpY2VzLnJzdD03NjQ9dHJhbnNpdGlvbiBpbnRvIGEgc2xlZXAgc3RhdGUsIHRoYXQgY2FuIGJlIGRvbmUgYnkgY2FsbGluZ1xcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9wbS9kZXZpY2VzLnJzdDo3NjU6OmM6ZnVuYzpgcG1fcnVudGltZV9yZXN1bWVgIGZyb20gdGhlIGBgLVxcdTAwM2VzdXNwZW5kYGAgY2FsbGJhY2sgKG9yIHRoZSBgYC1cXHUwMDNlZnJlZXplYGBcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvcG0vZGV2aWNlcy5yc3QtNzY2LW9yIGBgLVxcdTAwM2Vwb3dlcm9mZmBgIGNhbGxiYWNrIGZvciB0cmFuc2l0aW9ucyByZWxhdGVkIHRvIGhpYmVybmF0aW9uKSBvZiBlaXRoZXIgdGhlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3Q9MjIwPW9yIGJvdHRvbSBoYWxmKS5cXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdC0yODMtYGBmcmVlemVfc3VwZXJgYFxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdDoyODQ6XFx0Q2FsbGVkIGluc3RlYWQgb2YgLVxcdTAwM2VmcmVlemVfZnMgY2FsbGJhY2sgaWYgcHJvdmlkZWQuXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0OjI4NTpcXHRNYWluIGRpZmZlcmVuY2UgaXMgdGhhdCAtXFx1MDAzZWZyZWV6ZV9zdXBlciBpcyBjYWxsZWQgd2l0aG91dCB0YWtpbmdcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QtMjg2LVxcdGRvd25fd3JpdGUoXFx1MDAyNnNiLVxcdTAwM2VzX3Vtb3VudCkuIElmIGZpbGVzeXN0ZW0gaW1wbGVtZW50cyBpdCBhbmQgd2FudHNcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3Q6Mjg3OlxcdC1cXHUwMDNlZnJlZXplX2ZzIHRvIGJlIGNhbGxlZCB0b28sIHRoZW4gaXQgaGFzIHRvIGNhbGwgLVxcdTAwM2VmcmVlemVfZnNcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QtMjg4LVxcdGV4cGxpY2l0bHkgZnJvbSB0aGlzIGNhbGxiYWNrLiBPcHRpb25hbC5cXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdC0yOTYtXFx0Y2FsbGVkIHdoZW4gVkZTIGlzIHVubG9ja2luZyBhIGZpbGVzeXN0ZW0gYW5kIG1ha2luZyBpdCB3cml0YWJsZVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdDoyOTc6XFx0YWdhaW4gYWZ0ZXIgLVxcdTAwM2VmcmVlemVfc3VwZXIuIE9wdGlvbmFsLlxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdC0yOTgtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QtMzAwLVxcdGNhbGxlZCB3aGVuIFZGUyBpcyB1bmxvY2tpbmcgYSBmaWxlc3lzdGVtIGFuZCBtYWtpbmcgaXQgd3JpdGFibGVcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3Q6MzAxOlxcdGFnYWluIGFmdGVyIC1cXHUwMDNlZnJlZXplX2ZzLiBPcHRpb25hbC5cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QtMzAyLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy94ZnMveGZzLW9ubGluZS1mc2NrLWRlc2lnbi5yc3Q9MzAwNz1sb25nIGVub3VnaCB0byBjaGVjayBhbmQgY29ycmVjdCB0aGUgc3VtbWFyeSBjb3VudGVycy5cXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMveGZzL3hmcy1vbmxpbmUtZnNjay1kZXNpZ24ucnN0LTMwMjEtfCAtIEFkZGluZyBhbiBleHRyYSBsb2NrIHRvIHByZXZlbnQgb3RoZXJzIGZyb20gdGhhd2luZyB0aGUgZmlsZXN5c3RlbSAgICAgfFxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMveGZzL3hmcy1vbmxpbmUtZnNjay1kZXNpZ24ucnN0OjMwMjI6fCAgIHJlcXVpcmVkIHRoZSBhZGRpdGlvbiBvZiBhIGBgLVxcdTAwM2VmcmVlemVfc3VwZXJgYCBmdW5jdGlvbiB0byB3cmFwICAgICAgICAgfFxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMveGZzL3hmcy1vbmxpbmUtZnNjay1kZXNpZ24ucnN0LTMwMjMtfCAgIGBgZnJlZXplX2ZzKClgYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wb3dlci9wY2kucnN0PTU3NT1UaGUgcGNpX3BtX2ZyZWV6ZSgpIHJvdXRpbmUgaXMgcXVpdGUgc2ltaWxhciB0byBwY2lfcG1fc3VzcGVuZCgpLCBidXQgaXQgcnVuc1xcbkRvY3VtZW50YXRpb24vcG93ZXIvcGNpLnJzdDo1NzY6dGhlIGRldmljZSBkcml2ZXIncyBwbS1cXHUwMDNlZnJlZXplKCkgY2FsbGJhY2ssIGlmIGRlZmluZWQsIGluc3RlYWQgb2YgcG0tXFx1MDAzZXN1c3BlbmQoKSxcXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL3BjaS5yc3QtNTc3LWFuZCBpdCBkb2Vzbid0IGFwcGx5IHRoZSBzdXNwZW5kLXJlbGF0ZWQgaGFyZHdhcmUgcXVpcmtzLiAgSXQgaXMgZXhlY3V0ZWRcXG4tLVxcbkRvY3VtZW50YXRpb24vcG93ZXIvcGNpLnJzdD01ODE9VGhlIHBjaV9wbV9mcmVlemVfbm9pcnEoKSByb3V0aW5lLCBpbiB0dXJuLCBpcyBzaW1pbGFyIHRvXFxuRG9jdW1lbnRhdGlvbi9wb3dlci9wY2kucnN0OjU4MjpwY2lfcG1fc3VzcGVuZF9ub2lycSgpLCBidXQgaXQgY2FsbHMgdGhlIGRldmljZSBkcml2ZXIncyBwbS1cXHUwMDNlZnJlZXplX25vaXJxKClcXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL3BjaS5yc3QtNTgzLXJvdXRpbmUgaW5zdGVhZCBvZiBwbS1cXHUwMDNlc3VzcGVuZF9ub2lycSgpLiAgSXQgYWxzbyBkb2Vzbid0IGF0dGVtcHQgdG8gcHJlcGFyZSB0aGVcXG4tLVxcbkRvY3VtZW50YXRpb24vcG93ZXIvcnVudGltZV9wbS5yc3Q9NzI5PWRyaXZlci9iYXNlL3Bvd2VyL2dlbmVyaWNfb3BzLmM6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL3J1bnRpbWVfcG0ucnN0LTc1Ni0gIGBpbnQgcG1fZ2VuZXJpY19mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KTtgXFxuRG9jdW1lbnRhdGlvbi9wb3dlci9ydW50aW1lX3BtLnJzdDo3NTc6ICAgIC0gaWYgdGhlIGRldmljZSBoYXMgbm90IGJlZW4gc3VzcGVuZGVkIGF0IHJ1biB0aW1lLCBpbnZva2UgdGhlIC1cXHUwMDNlZnJlZXplKClcXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL3J1bnRpbWVfcG0ucnN0LTc1OC0gICAgICBjYWxsYmFjayBwcm92aWRlZCBieSBpdHMgZHJpdmVyIGFuZCByZXR1cm4gaXRzIHJlc3VsdCwgb3IgcmV0dXJuIDAgaWYgbm90XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL3J1bnRpbWVfcG0ucnN0LTc2MS0gIGBpbnQgcG1fZ2VuZXJpY19mcmVlemVfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KTtgXFxuRG9jdW1lbnRhdGlvbi9wb3dlci9ydW50aW1lX3BtLnJzdDo3NjI6ICAgIC0gaWYgcG1fcnVudGltZV9zdXNwZW5kZWQoZGV2KSByZXR1cm5zIFxcXCJmYWxzZVxcXCIsIGludm9rZSB0aGUgLVxcdTAwM2VmcmVlemVfbm9pcnEoKVxcbkRvY3VtZW50YXRpb24vcG93ZXIvcnVudGltZV9wbS5yc3QtNzYzLSAgICAgIGNhbGxiYWNrIHByb3ZpZGVkIGJ5IHRoZSBkZXZpY2UncyBkcml2ZXIgYW5kIHJldHVybiBpdHMgcmVzdWx0LCBvciByZXR1cm5cXG4tLVxcbkRvY3VtZW50YXRpb24vcG93ZXIvcnVudGltZV9wbS5yc3Q9Nzk0PXByb3ZpZGUgaXRzIG93biBjYWxsYmFja3MgZm9yIC1cXHUwMDNlcnVudGltZV9pZGxlKCksIC1cXHUwMDNlcnVudGltZV9zdXNwZW5kKCksXFxuRG9jdW1lbnRhdGlvbi9wb3dlci9ydW50aW1lX3BtLnJzdC03OTUtLVxcdTAwM2VydW50aW1lX3Jlc3VtZSgpLCAtXFx1MDAzZXN1c3BlbmQoKSwgLVxcdTAwM2VzdXNwZW5kX25vaXJxKCksIC1cXHUwMDNlcmVzdW1lKCksXFxuRG9jdW1lbnRhdGlvbi9wb3dlci9ydW50aW1lX3BtLnJzdDo3OTY6LVxcdTAwM2VyZXN1bWVfbm9pcnEoKSwgLVxcdTAwM2VmcmVlemUoKSwgLVxcdTAwM2VmcmVlemVfbm9pcnEoKSwgLVxcdTAwM2V0aGF3KCksIC1cXHUwMDNldGhhd19ub2lycSgpLFxcbkRvY3VtZW50YXRpb24vcG93ZXIvcnVudGltZV9wbS5yc3QtNzk3LS1cXHUwMDNlcG93ZXJvZmYoKSwgLVxcdTAwM2Vwb3dlcm9mZl9ub2lycSgpLCAtXFx1MDAzZXJlc3RvcmUoKSwgLVxcdTAwM2VyZXN0b3JlX25vaXJxKCkgaW4gdGhlXFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9kcml2ZXIuYz02MzA9c3RhdGljIGludCBlZWhfcmVzZXRfZGV2aWNlKHN0cnVjdCBlZWhfcGUgKnBlLCBzdHJ1Y3QgcGNpX2J1cyAqYnVzLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfZHJpdmVyLmMtNjQzLVxcdC8qIHBjaWJpb3Mgd2lsbCBjbGVhciB0aGUgY291bnRlcjsgc2F2ZSB0aGUgdmFsdWUgKi9cXG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9kcml2ZXIuYzo2NDQ6XFx0Y250ID0gcGUtXFx1MDAzZWZyZWV6ZV9jb3VudDtcXG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9kcml2ZXIuYy02NDUtXFx0dHN0YW1wID0gcGUtXFx1MDAzZXRzdGFtcDtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX2RyaXZlci5jLTcxMS1cXHRwZS1cXHUwMDNldHN0YW1wID0gdHN0YW1wO1xcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX2RyaXZlci5jOjcxMjpcXHRwZS1cXHUwMDNlZnJlZXplX2NvdW50ID0gY250O1xcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX2RyaXZlci5jLTcxMy1cXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX2RyaXZlci5jPTgzNj12b2lkIGVlaF9oYW5kbGVfbm9ybWFsX2V2ZW50KHN0cnVjdCBlZWhfcGUgKnBlKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfZHJpdmVyLmMtOTI1LVxcdGVlaF9wZV91cGRhdGVfdGltZV9zdGFtcChwZSk7XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfZHJpdmVyLmM6OTI2OlxcdHBlLVxcdTAwM2VmcmVlemVfY291bnQrKztcXG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9kcml2ZXIuYzo5Mjc6XFx0aWYgKHBlLVxcdTAwM2VmcmVlemVfY291bnQgXFx1MDAzZSBlZWhfbWF4X2ZyZWV6ZXMpIHtcXG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9kcml2ZXIuYy05MjgtXFx0XFx0cHJfZXJyKFxcXCJFRUg6IFBIQiMleC1QRSMleCBoYXMgZmFpbGVkICVkIHRpbWVzIGluIHRoZSBsYXN0IGhvdXIgYW5kIGhhcyBiZWVuIHBlcm1hbmVudGx5IGRpc2FibGVkLlxcXFxuXFxcIixcXG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9kcml2ZXIuYy05MjktXFx0XFx0ICAgICAgIHBlLVxcdTAwM2VwaGItXFx1MDAzZWdsb2JhbF9udW1iZXIsIHBlLVxcdTAwM2VhZGRyLFxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX2RyaXZlci5jOjkzMDpcXHRcXHQgICAgICAgcGUtXFx1MDAzZWZyZWV6ZV9jb3VudCk7XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfZHJpdmVyLmMtOTMxLVxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfZHJpdmVyLmMtOTQ1LVxcdHByX3dhcm4oXFxcIkVFSDogVGhpcyBQQ0kgZGV2aWNlIGhhcyBmYWlsZWQgJWQgdGltZXMgaW4gdGhlIGxhc3QgaG91ciBhbmQgd2lsbCBiZSBwZXJtYW5lbnRseSBkaXNhYmxlZCBhZnRlciAlZCBmYWlsdXJlcy5cXFxcblxcXCIsXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfZHJpdmVyLmM6OTQ2OlxcdFxcdHBlLVxcdTAwM2VmcmVlemVfY291bnQsIGVlaF9tYXhfZnJlZXplcyk7XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfZHJpdmVyLmMtOTQ3LVxcdHByX2luZm8oXFxcIkVFSDogTm90aWZ5IGRldmljZSBkcml2ZXJzIHRvIHNodXRkb3duXFxcXG5cXFwiKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX3BlLmM9NDkwPXZvaWQgZWVoX3BlX3VwZGF0ZV90aW1lX3N0YW1wKHN0cnVjdCBlZWhfcGUgKnBlKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfcGUuYy00OTUtXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfcGUuYzo0OTY6XFx0aWYgKHBlLVxcdTAwM2VmcmVlemVfY291bnQgXFx1MDAzYz0gMCkge1xcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX3BlLmM6NDk3OlxcdFxcdHBlLVxcdTAwM2VmcmVlemVfY291bnQgPSAwO1xcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX3BlLmMtNDk4LVxcdFxcdHBlLVxcdTAwM2V0c3RhbXAgPSBrdGltZV9nZXRfc2Vjb25kcygpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfcGUuYy01MDItXFx0XFx0XFx0cGUtXFx1MDAzZXRzdGFtcCA9IHRzdGFtcDtcXG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9wZS5jOjUwMzpcXHRcXHRcXHRwZS1cXHUwMDNlZnJlZXplX2NvdW50ID0gMDtcXG5hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9wZS5jLTUwNC1cXHRcXHR9XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc21wLmM9NDc9c3RhdGljIHZvaWQgbXBjODV4eF9naXZlX3RpbWViYXNlKHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc21wLmMtNTctXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NtcC5jOjU4OlxcdHFvcmlxX3BtX29wcy1cXHUwMDNlZnJlZXplX3RpbWVfYmFzZSh0cnVlKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc21wLmMtNTktI2lmZGVmIENPTkZJR19QUEM2NFxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NtcC5jLTkwLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zbXAuYzo5MTpcXHRxb3JpcV9wbV9vcHMtXFx1MDAzZWZyZWV6ZV90aW1lX2Jhc2UoZmFsc2UpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zbXAuYy05Mi1cXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9lZWgtcG93ZXJudi5jPTQ1Mz1zdGF0aWMgaW50IHBudl9lZWhfc2V0X29wdGlvbihzdHJ1Y3QgZWVoX3BlICpwZSwgaW50IG9wdGlvbilcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9lZWgtcG93ZXJudi5jLTQ4Mi1cXHRpZiAoZnJlZXplX3BlKSB7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L2VlaC1wb3dlcm52LmM6NDgzOlxcdFxcdGlmIChwaGItXFx1MDAzZWZyZWV6ZV9wZSkge1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9lZWgtcG93ZXJudi5jOjQ4NDpcXHRcXHRcXHRwaGItXFx1MDAzZWZyZWV6ZV9wZShwaGIsIHBlLVxcdTAwM2VhZGRyKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvZWVoLXBvd2VybnYuYy00ODUtXFx0XFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvZWVoLXBvd2VybnYuYz01NjU9c3RhdGljIGludCBwbnZfZWVoX2dldF9wZV9zdGF0ZShzdHJ1Y3QgZWVoX3BlICpwZSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9lZWgtcG93ZXJudi5jLTY1My1cXHQgICAgIShwZS1cXHUwMDNlc3RhdGUgXFx1MDAyNiBFRUhfUEVfSVNPTEFURUQpKSB7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L2VlaC1wb3dlcm52LmM6NjU0OlxcdFxcdGlmIChwaGItXFx1MDAzZWZyZWV6ZV9wZSlcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvZWVoLXBvd2VybnYuYzo2NTU6XFx0XFx0XFx0cGhiLVxcdTAwM2VmcmVlemVfcGUocGhiLCBwZS1cXHUwMDNlYWRkcik7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L2VlaC1wb3dlcm52LmMtNjU2LVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L2VlaC1wb3dlcm52LmM9MTMzOT1zdGF0aWMgaW50IHBudl9lZWhfZ2V0X3BlKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9lZWgtcG93ZXJudi5jLTEzNjYtXFx0aWYgKCEoZGV2X3BlLVxcdTAwM2VzdGF0ZSBcXHUwMDI2IEVFSF9QRV9JU09MQVRFRCkpXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L2VlaC1wb3dlcm52LmM6MTM2NzpcXHRcXHRwaGItXFx1MDAzZWZyZWV6ZV9wZShwaGIsIHBlX25vKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvZWVoLXBvd2VybnYuYy0xMzY4LVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L2VlaC1wb3dlcm52LmMtMTM4NS1cXHRcXHRpZiAoIShkZXZfcGUtXFx1MDAzZXN0YXRlIFxcdTAwMjYgRUVIX1BFX0lTT0xBVEVEKSlcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvZWVoLXBvd2VybnYuYzoxMzg2OlxcdFxcdFxcdHBoYi1cXHUwMDNlZnJlZXplX3BlKHBoYiwgZGV2X3BlLVxcdTAwM2VhZGRyKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvZWVoLXBvd2VybnYuYy0xMzg3LVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3BjaS1pb2RhLmM9MjQ4NT1zdGF0aWMgdm9pZCBfX2luaXQgcG52X3BjaV9pbml0X2lvZGFfcGhiKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvcGNpLWlvZGEuYy0yNjY1LVxcdHBoYi1cXHUwMDNlZ2V0X3BlX3N0YXRlID0gcG52X2lvZGFfZ2V0X3BlX3N0YXRlO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9wY2ktaW9kYS5jOjI2NjY6XFx0cGhiLVxcdTAwM2VmcmVlemVfcGUgPSBwbnZfaW9kYV9mcmVlemVfcGU7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3BjaS1pb2RhLmMtMjY2Ny1cXHRwaGItXFx1MDAzZXVuZnJlZXplX3BlID0gcG52X2lvZGFfdW5mcmVlemVfcGU7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvcGNpLmM9NTI3PXN0YXRpYyB2b2lkIHBudl9wY2lfY29uZmlnX2NoZWNrX2VlaChzdHJ1Y3QgcGNpX2RuICpwZG4pXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvcGNpLmMtNTc0LVxcdFxcdCAqL1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9wY2kuYzo1NzU6XFx0XFx0aWYgKHBoYi1cXHUwMDNlZnJlZXplX3BlKVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9wY2kuYzo1NzY6XFx0XFx0XFx0cGhiLVxcdTAwM2VmcmVlemVfcGUocGhiLCBwZV9ubyk7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3BjaS5jLTU3Ny1cXG4tLVxcbmJsb2NrL2JkZXYuYz0zMDE9aW50IGJkZXZfZnJlZXplKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXFxuLS1cXG5ibG9jay9iZGV2LmMtMzEyLVxcdG11dGV4X2xvY2soXFx1MDAyNmJkZXYtXFx1MDAzZWJkX2hvbGRlcl9sb2NrKTtcXG5ibG9jay9iZGV2LmM6MzEzOlxcdGlmIChiZGV2LVxcdTAwM2ViZF9ob2xkZXJfb3BzIFxcdTAwMjZcXHUwMDI2IGJkZXYtXFx1MDAzZWJkX2hvbGRlcl9vcHMtXFx1MDAzZWZyZWV6ZSkge1xcbmJsb2NrL2JkZXYuYzozMTQ6XFx0XFx0ZXJyb3IgPSBiZGV2LVxcdTAwM2ViZF9ob2xkZXJfb3BzLVxcdTAwM2VmcmVlemUoYmRldik7XFxuYmxvY2svYmRldi5jLTMxNS1cXHRcXHRsb2NrZGVwX2Fzc2VydF9ub3RfaGVsZChcXHUwMDI2YmRldi1cXHUwMDNlYmRfaG9sZGVyX2xvY2spO1xcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jPTExODI9c3RhdGljIHZvaWQgYmluZGVyX2NsZWFudXBfcmVmX29sb2NrZWQoc3RydWN0IGJpbmRlcl9yZWYgKnJlZilcXG4tLVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy0xMjI0LVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYzoxMjI1OlxcdGlmIChyZWYtXFx1MDAzZWZyZWV6ZSkge1xcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYzoxMjI2OlxcdFxcdGJpbmRlcl9kZXF1ZXVlX3dvcmsocmVmLVxcdTAwM2Vwcm9jLCBcXHUwMDI2cmVmLVxcdTAwM2VmcmVlemUtXFx1MDAzZXdvcmspO1xcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy0xMjI3LVxcdFxcdGJpbmRlcl9zdGF0c19kZWxldGVkKEJJTkRFUl9TVEFUX0ZSRUVaRSk7XFxuLS1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM9MTM1Mj1zdGF0aWMgdm9pZCBiaW5kZXJfZnJlZV9yZWYoc3RydWN0IGJpbmRlcl9yZWYgKnJlZilcXG4tLVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy0xMzU2LVxcdGtmcmVlKHJlZi1cXHUwMDNlZGVhdGgpO1xcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYzoxMzU3OlxcdGtmcmVlKHJlZi1cXHUwMDNlZnJlZXplKTtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtMTM1OC1cXHRrZnJlZShyZWYpO1xcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jPTE2NTk9c3RhdGljIHZvaWQgYmluZGVyX2ZyZWVfdHJhbnNhY3Rpb24oc3RydWN0IGJpbmRlcl90cmFuc2FjdGlvbiAqdClcXG4tLVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy0xNjgyLVxcdFxcdGlmICghdGFyZ2V0X3Byb2MtXFx1MDAzZW91dHN0YW5kaW5nX3R4bnMgXFx1MDAyNlxcdTAwMjYgdGFyZ2V0X3Byb2MtXFx1MDAzZWlzX2Zyb3plbilcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM6MTY4MzpcXHRcXHRcXHR3YWtlX3VwX2ludGVycnVwdGlibGVfYWxsKFxcdTAwMjZ0YXJnZXRfcHJvYy1cXHUwMDNlZnJlZXplX3dhaXQpO1xcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy0xNjg0LVxcdFxcdGlmICh0LVxcdTAwM2VidWZmZXIpXFxuLS1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM9MzkzNz1iaW5kZXJfcmVxdWVzdF9mcmVlemVfbm90aWZpY2F0aW9uKHN0cnVjdCBiaW5kZXJfcHJvYyAqcHJvYyxcXG4tLVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy0zOTU3LVxcdGJpbmRlcl9ub2RlX2xvY2socmVmLVxcdTAwM2Vub2RlKTtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM6Mzk1ODpcXHRpZiAocmVmLVxcdTAwM2VmcmVlemUpIHtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtMzk1OS1cXHRcXHRiaW5kZXJfdXNlcl9lcnJvcihcXFwiJWQ6JWQgQkNfUkVRVUVTVF9GUkVFWkVfTk9USUZJQ0FUSU9OIGFscmVhZHkgc2V0XFxcXG5cXFwiLFxcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jLTM5NzAtXFx0ZnJlZXplLVxcdTAwM2V3b3JrLnR5cGUgPSBCSU5ERVJfV09SS19GUk9aRU5fQklOREVSO1xcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYzozOTcxOlxcdHJlZi1cXHUwMDNlZnJlZXplID0gZnJlZXplO1xcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy0zOTcyLVxcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jPTM5OTA9YmluZGVyX2NsZWFyX2ZyZWV6ZV9ub3RpZmljYXRpb24oc3RydWN0IGJpbmRlcl9wcm9jICpwcm9jLFxcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jLTQwMDctXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jOjQwMDg6XFx0aWYgKCFyZWYtXFx1MDAzZWZyZWV6ZSkge1xcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy00MDA5LVxcdFxcdGJpbmRlcl91c2VyX2Vycm9yKFxcXCIlZDolZCBCQ19DTEVBUl9GUkVFWkVfTk9USUZJQ0FUSU9OIGZyZWV6ZSBub3RpZmljYXRpb24gbm90IGFjdGl2ZVxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy00MDE0LVxcdH1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM6NDAxNTpcXHRmcmVlemUgPSByZWYtXFx1MDAzZWZyZWV6ZTtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtNDAxNi1cXHRiaW5kZXJfaW5uZXJfcHJvY19sb2NrKHByb2MpO1xcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jLTQwMjUtXFx0fVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYzo0MDI2OlxcdHJlZi1cXHUwMDNlZnJlZXplID0gTlVMTDtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtNDAyNy1cXHQvKlxcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jPTU2NDA9c3RhdGljIHZvaWQgYmluZGVyX2FkZF9mcmVlemVfd29yayhzdHJ1Y3QgYmluZGVyX3Byb2MgKnByb2MsIGJvb2wgaXNfZnJvemVuKVxcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jLTU2NjMtXFx0XFx0XFx0YmluZGVyX2lubmVyX3Byb2NfbG9jayhyZWYtXFx1MDAzZXByb2MpO1xcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYzo1NjY0OlxcdFxcdFxcdGlmICghcmVmLVxcdTAwM2VmcmVlemUpIHtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtNTY2NS1cXHRcXHRcXHRcXHRiaW5kZXJfaW5uZXJfcHJvY191bmxvY2socmVmLVxcdTAwM2Vwcm9jKTtcXG4tLVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy01NjY3LVxcdFxcdFxcdH1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM6NTY2ODpcXHRcXHRcXHRyZWYtXFx1MDAzZWZyZWV6ZS1cXHUwMDNld29yay50eXBlID0gQklOREVSX1dPUktfRlJPWkVOX0JJTkRFUjtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM6NTY2OTpcXHRcXHRcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2cmVmLVxcdTAwM2VmcmVlemUtXFx1MDAzZXdvcmsuZW50cnkpKSB7XFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jOjU2NzA6XFx0XFx0XFx0XFx0cmVmLVxcdTAwM2VmcmVlemUtXFx1MDAzZWlzX2Zyb3plbiA9IGlzX2Zyb3plbjtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM6NTY3MTpcXHRcXHRcXHRcXHRiaW5kZXJfZW5xdWV1ZV93b3JrX2lsb2NrZWQoXFx1MDAyNnJlZi1cXHUwMDNlZnJlZXplLVxcdTAwM2V3b3JrLCBcXHUwMDI2cmVmLVxcdTAwM2Vwcm9jLVxcdTAwM2V0b2RvKTtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtNTY3Mi1cXHRcXHRcXHRcXHRiaW5kZXJfd2FrZXVwX3Byb2NfaWxvY2tlZChyZWYtXFx1MDAzZXByb2MpO1xcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy01NjczLVxcdFxcdFxcdH0gZWxzZSB7XFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jOjU2NzQ6XFx0XFx0XFx0XFx0aWYgKHJlZi1cXHUwMDNlZnJlZXplLVxcdTAwM2VzZW50IFxcdTAwMjZcXHUwMDI2IHJlZi1cXHUwMDNlZnJlZXplLVxcdTAwM2Vpc19mcm96ZW4gIT0gaXNfZnJvemVuKVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYzo1Njc1OlxcdFxcdFxcdFxcdFxcdHJlZi1cXHUwMDNlZnJlZXplLVxcdTAwM2VyZXNlbmQgPSB0cnVlO1xcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYzo1Njc2OlxcdFxcdFxcdFxcdHJlZi1cXHUwMDNlZnJlZXplLVxcdTAwM2Vpc19mcm96ZW4gPSBpc19mcm96ZW47XFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jLTU2NzctXFx0XFx0XFx0fVxcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jPTU2OTE9c3RhdGljIGludCBiaW5kZXJfaW9jdGxfZnJlZXplKHN0cnVjdCBiaW5kZXJfZnJlZXplX2luZm8gKmluZm8sXFxuLS1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtNTcxOC1cXHRcXHRyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM6NTcxOTpcXHRcXHRcXHR0YXJnZXRfcHJvYy1cXHUwMDNlZnJlZXplX3dhaXQsXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jLTU3MjAtXFx0XFx0XFx0KCF0YXJnZXRfcHJvYy1cXHUwMDNlb3V0c3RhbmRpbmdfdHhucyksXFxuLS1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmM9NjA2Nz1zdGF0aWMgaW50IGJpbmRlcl9vcGVuKHN0cnVjdCBpbm9kZSAqbm9kcCwgc3RydWN0IGZpbGUgKmZpbHApXFxuLS1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMtNjA4OC1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cHJvYy1cXHUwMDNldG9kbyk7XFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jOjYwODk6XFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2cHJvYy1cXHUwMDNlZnJlZXplX3dhaXQpO1xcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYy02MDkwLVxcdHByb2MtXFx1MDAzZWRlZmF1bHRfcHJpb3JpdHkgPSB0YXNrX25pY2UoY3VycmVudCk7XFxuLS1cXG5kcml2ZXJzL2F0YS9saWJhaGNpX3BsYXRmb3JtLmM9Nzk4PXZvaWQgYWhjaV9wbGF0Zm9ybV9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9hdGEvbGliYWhjaV9wbGF0Zm9ybS5jLTgwOC1cXHRcXHQvKiBEaXNhYmxlIHBvcnQgaW50ZXJydXB0cyAqL1xcbmRyaXZlcnMvYXRhL2xpYmFoY2lfcGxhdGZvcm0uYzo4MDk6XFx0XFx0aWYgKGFwLVxcdTAwM2VvcHMtXFx1MDAzZWZyZWV6ZSlcXG5kcml2ZXJzL2F0YS9saWJhaGNpX3BsYXRmb3JtLmM6ODEwOlxcdFxcdFxcdGFwLVxcdTAwM2VvcHMtXFx1MDAzZWZyZWV6ZShhcCk7XFxuZHJpdmVycy9hdGEvbGliYWhjaV9wbGF0Zm9ybS5jLTgxMS1cXG4tLVxcbmRyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmM9NjM5NT12b2lkIGF0YV9wY2lfc2h1dGRvd25fb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYy02NDA1LVxcdFxcdC8qIERpc2FibGUgcG9ydCBpbnRlcnJ1cHRzICovXFxuZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYzo2NDA2OlxcdFxcdGlmIChhcC1cXHUwMDNlb3BzLVxcdTAwM2VmcmVlemUpXFxuZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYzo2NDA3OlxcdFxcdFxcdGFwLVxcdTAwM2VvcHMtXFx1MDAzZWZyZWV6ZShhcCk7XFxuZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYy02NDA4LVxcbi0tXFxuZHJpdmVycy9hdGEvbGliYXRhLWVoLmM9MTExMD1FWFBPUlRfU1lNQk9MX0dQTChhdGFfcG9ydF9hYm9ydCk7XFxuLS1cXG5kcml2ZXJzL2F0YS9saWJhdGEtZWguYy0xMTIwLSAqXFxuZHJpdmVycy9hdGEvbGliYXRhLWVoLmM6MTEyMTogKlxcdGFwLVxcdTAwM2VvcHMtXFx1MDAzZWZyZWV6ZSgpIGNhbGxiYWNrIGNhbiBiZSB1c2VkIGZvciBmcmVlemluZyB0aGUgcG9ydFxcbmRyaXZlcnMvYXRhL2xpYmF0YS1laC5jLTExMjItICpcXHRoYXJkd2FyZS13aXNlIChlLmcuIG1hc2sgaW50ZXJydXB0IGFuZCBzdG9wIERNQSBlbmdpbmUpLiAgSWYgYVxcbi0tXFxuZHJpdmVycy9hdGEvbGliYXRhLWVoLmM9MTEzMD1zdGF0aWMgdm9pZCBfX2F0YV9wb3J0X2ZyZWV6ZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKVxcbmRyaXZlcnMvYXRhL2xpYmF0YS1laC5jLTExMzEte1xcbmRyaXZlcnMvYXRhL2xpYmF0YS1laC5jOjExMzI6XFx0aWYgKGFwLVxcdTAwM2VvcHMtXFx1MDAzZWZyZWV6ZSlcXG5kcml2ZXJzL2F0YS9saWJhdGEtZWguYzoxMTMzOlxcdFxcdGFwLVxcdTAwM2VvcHMtXFx1MDAzZWZyZWV6ZShhcCk7XFxuZHJpdmVycy9hdGEvbGliYXRhLWVoLmMtMTEzNC1cXG4tLVxcbmRyaXZlcnMvYXRhL3NhdGFfcHJvbWlzZS5jPTE4Mz1zdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgcGRjX3NhdGFfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9hdGEvc2F0YV9wcm9taXNlLmMtMTk0LS8qIEZpcnN0LWdlbmVyYXRpb24gY2hpcHMgbmVlZCBhIG1vcmUgcmVzdHJpY3RpdmUgLVxcdTAwM2VjaGVja19hdGFwaV9kbWEgb3AsXFxuZHJpdmVycy9hdGEvc2F0YV9wcm9taXNlLmM6MTk1OiAgIGFuZCAtXFx1MDAzZWZyZWV6ZS90aGF3IHRoYXQgaWdub3JlIHRoZSBob3RwbHVnIGNvbnRyb2xzLiAqL1xcbmRyaXZlcnMvYXRhL3NhdGFfcHJvbWlzZS5jLTE5Ni1zdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgcGRjX29sZF9zYXRhX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvYXRhL3NhdGFfcHJvbWlzZS5jPTcwNj1zdGF0aWMgdm9pZCBwZGNfc2F0YV9mcmVlemUoc3RydWN0IGF0YV9wb3J0ICphcClcXG4tLVxcbmRyaXZlcnMvYXRhL3NhdGFfcHJvbWlzZS5jLTcxOC1cXHQgKiAyKSBhcC1cXHUwMDNlbG9jayA9PSBcXHUwMDI2YXAtXFx1MDAzZWhvc3QtXFx1MDAzZWxvY2tcXG5kcml2ZXJzL2F0YS9zYXRhX3Byb21pc2UuYzo3MTk6XFx0ICogMykgLVxcdTAwM2VmcmVlemUoKSBhbmQgLVxcdTAwM2V0aGF3KCkgYXJlIGNhbGxlZCB3aXRoIGFwLVxcdTAwM2Vsb2NrIGhlbGRcXG5kcml2ZXJzL2F0YS9zYXRhX3Byb21pc2UuYy03MjAtXFx0ICovXFxuLS1cXG5kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYz0xMjI3PWludCBwbGF0Zm9ybV9wbV9mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMtMTIzNS1cXHRpZiAoZHJ2LVxcdTAwM2VwbSkge1xcbmRyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jOjEyMzY6XFx0XFx0aWYgKGRydi1cXHUwMDNlcG0tXFx1MDAzZWZyZWV6ZSlcXG5kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYzoxMjM3OlxcdFxcdFxcdHJldCA9IGRydi1cXHUwMDNlcG0tXFx1MDAzZWZyZWV6ZShkZXYpO1xcbmRyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jLTEyMzgtXFx0fSBlbHNlIHtcXG4tLVxcbmRyaXZlcnMvYmFzZS9wb3dlci9tYWluLmM9MzY2PXN0YXRpYyBwbV9jYWxsYmFja190IHBtX29wKGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpvcHMsIHBtX21lc3NhZ2VfdCBzdGF0ZSlcXG4tLVxcbmRyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMtMzc3LVxcdGNhc2UgUE1fRVZFTlRfUVVJRVNDRTpcXG5kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jOjM3ODpcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VmcmVlemU7XFxuZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYy0zNzktXFx0Y2FzZSBQTV9FVkVOVF9QT1dFUk9GRjpcXG4tLVxcbmRyaXZlcnMvYmFzZS9wb3dlci9tYWluLmM9NDAwPXN0YXRpYyBwbV9jYWxsYmFja190IHBtX2xhdGVfZWFybHlfb3AoY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgKm9wcyxcXG4tLVxcbmRyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMtNDEyLVxcdGNhc2UgUE1fRVZFTlRfUVVJRVNDRTpcXG5kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jOjQxMzpcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VmcmVlemVfbGF0ZTtcXG5kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jLTQxNC1cXHRjYXNlIFBNX0VWRU5UX1BPV0VST0ZGOlxcbi0tXFxuZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYz00MzY9c3RhdGljIHBtX2NhbGxiYWNrX3QgcG1fbm9pcnFfb3AoY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgKm9wcywgcG1fbWVzc2FnZV90IHN0YXRlKVxcbi0tXFxuZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYy00NDctXFx0Y2FzZSBQTV9FVkVOVF9RVUlFU0NFOlxcbmRyaXZlcnMvYmFzZS9wb3dlci9tYWluLmM6NDQ4OlxcdFxcdHJldHVybiBvcHMtXFx1MDAzZWZyZWV6ZV9ub2lycTtcXG5kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jLTQ0OS1cXHRjYXNlIFBNX0VWRU5UX1BPV0VST0ZGOlxcbi0tXFxuZHJpdmVycy9ncHUvaG9zdDF4L2Rldi5oPTMwNz1zdGF0aWMgaW5saW5lIHZvaWQgaG9zdDF4X2h3X2NkbWFfZnJlZXplKHN0cnVjdCBob3N0MXggKmhvc3QsXFxuLS1cXG5kcml2ZXJzL2dwdS9ob3N0MXgvZGV2LmgtMzA5LXtcXG5kcml2ZXJzL2dwdS9ob3N0MXgvZGV2Lmg6MzEwOlxcdGhvc3QtXFx1MDAzZWNkbWFfb3AtXFx1MDAzZWZyZWV6ZShjZG1hKTtcXG5kcml2ZXJzL2dwdS9ob3N0MXgvZGV2LmgtMzExLX1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL2NoaXAuYz02NzMwPXZvaWQgc3RhcnRfZnJlZXplX2hhbmRsaW5nKHN0cnVjdCBoZmkxX3Bwb3J0ZGF0YSAqcHBkLCBpbnQgZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9jaGlwLmMtNjc2My1cXHQvKiBxdWV1ZSBub24taW50ZXJydXB0IGhhbmRsZXIgKi9cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9jaGlwLmM6Njc2NDpcXHRxdWV1ZV93b3JrKHBwZC1cXHUwMDNlaGZpMV93cSwgXFx1MDAyNnBwZC1cXHUwMDNlZnJlZXplX3dvcmspO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL2NoaXAuYy02NzY1LX1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL2NoaXAuYz05ODcxPXZvaWQgaGZpMV9xdWlldF9zZXJkZXMoc3RydWN0IGhmaTFfcHBvcnRkYXRhICpwcGQpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9jaGlwLmMtOTg5Ni1cXHRjbGVhcl9yY3ZjdHJsKGRkLCBSQ1ZfQ1RSTF9SQ1ZfUE9SVF9FTkFCTEVfU01BU0spO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL2NoaXAuYzo5ODk3OlxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnBwZC1cXHUwMDNlZnJlZXplX3dvcmspO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL2NoaXAuYy05ODk4LX1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL2luaXQuYz01ODg9dm9pZCBoZmkxX2luaXRfcHBvcnRkYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgaGZpMV9wcG9ydGRhdGEgKnBwZCxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL2luaXQuYy02MTYtXFx0SU5JVF9XT1JLKFxcdTAwMjZwcGQtXFx1MDAzZWxpbmtfZG93bl93b3JrLCBoYW5kbGVfbGlua19kb3duKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9pbml0LmM6NjE3OlxcdElOSVRfV09SSyhcXHUwMDI2cHBkLVxcdTAwM2VmcmVlemVfd29yaywgaGFuZGxlX2ZyZWV6ZSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hmaTEvaW5pdC5jLTYxOC1cXHRJTklUX1dPUksoXFx1MDAyNnBwZC1cXHUwMDNlbGlua19kb3duZ3JhZGVfd29yaywgaGFuZGxlX2xpbmtfZG93bmdyYWRlKTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jdHJsLmM9Mjc1Mz1zdGF0aWMgaW50IGlyZG1hX3NjX3FwX3VwbG9hZF9jb250ZXh0KHN0cnVjdCBpcmRtYV9zY19kZXYgKmRldixcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jdHJsLmMtMjc3MS1cXHQgICAgICBGSUVMRF9QUkVQKElSRE1BX0NRUFNRX1VDVFhfUkFXRk9STUFULCBpbmZvLVxcdTAwM2VyYXdfZm9ybWF0KSB8XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2N0cmwuYzoyNzcyOlxcdCAgICAgIEZJRUxEX1BSRVAoSVJETUFfQ1FQU1FfVUNUWF9GUkVFWkVRUCwgaW5mby1cXHUwMDNlZnJlZXplX3FwKSB8XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2N0cmwuYy0yNzczLVxcdCAgICAgIEZJRUxEX1BSRVAoSVJETUFfQ1FQU1FfV1FFVkFMSUQsIGNxcC1cXHUwMDNlcG9sYXJpdHkpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM9Mzg1PXZvaWQga3N6OTQ3N19yX21pYl9jbnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsIHUxNiBhZGRyLCB1NjQgKmNudClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTM5Mi1cXHQvKiByZXRhaW4gdGhlIGZsdXNoL2ZyZWV6ZSBiaXQgKi9cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYzozOTM6XFx0ZGF0YSA9IHAtXFx1MDAzZWZyZWV6ZSA/IE1JQl9DT1VOVEVSX0ZMVVNIX0ZSRUVaRSA6IDA7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMtMzk0LVxcdGRhdGEgfD0gTUlCX0NPVU5URVJfUkVBRDtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jPTQxOT12b2lkIGtzejk0NzdfZnJlZXplX21pYihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgYm9vbCBmcmVlemUpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy00MjgtXFx0LyogdXNlZCBieSBNSUIgY291bnRlciByZWFkaW5nIGNvZGUgdG8ga25vdyBmcmVlemUgaXMgZW5hYmxlZCAqL1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jOjQyOTpcXHRwLVxcdTAwM2VmcmVlemUgPSBmcmVlemU7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMtNDMwLVxcdG11dGV4X3VubG9jayhcXHUwMDI2cC1cXHUwMDNlbWliLmNudF9tdXRleCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9idWZmZXJzLmM9MTM3MT1pbnQgbWx4c3dfc3Bfc2JfcG9vbF9zZXQoc3RydWN0IG1seHN3X2NvcmUgKm1seHN3X2NvcmUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9idWZmZXJzLmMtMTM4OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9idWZmZXJzLmM6MTM5MDpcXHRpZiAocHItXFx1MDAzZWZyZWV6ZV9tb2RlIFxcdTAwMjZcXHUwMDI2IHByLVxcdTAwM2Vtb2RlICE9IG1vZGUpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9idWZmZXJzLmMtMTM5MS1cXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiQ2hhbmdpbmcgdGhpcyBwb29sJ3MgdGhyZXNob2xkIHR5cGUgaXMgZm9yYmlkZGVuXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9idWZmZXJzLmMtMTM5NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9idWZmZXJzLmM6MTM5NTpcXHRpZiAocHItXFx1MDAzZWZyZWV6ZV9zaXplIFxcdTAwMjZcXHUwMDI2IHByLVxcdTAwM2VzaXplICE9IHNpemUpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9idWZmZXJzLmMtMTM5Ni1cXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiQ2hhbmdpbmcgdGhpcyBwb29sJ3Mgc2l6ZSBpcyBmb3JiaWRkZW5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2J1ZmZlcnMuYz0xNDk5PWludCBtbHhzd19zcF9zYl90Y19wb29sX2JpbmRfc2V0KHN0cnVjdCBtbHhzd19jb3JlX3BvcnQgKm1seHN3X2NvcmVfcG9ydCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2J1ZmZlcnMuYy0xNTI5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2J1ZmZlcnMuYzoxNTMwOlxcdGlmIChjbS1cXHUwMDNlZnJlZXplX3Bvb2wgXFx1MDAyNlxcdTAwMjYgY20tXFx1MDAzZXBvb2xfaW5kZXggIT0gcG9vbF9pbmRleCkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2J1ZmZlcnMuYy0xNTMxLVxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJCaW5kaW5nIHRoaXMgVEMgdG8gYSBkaWZmZXJlbnQgcG9vbCBpcyBmb3JiaWRkZW5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2J1ZmZlcnMuYy0xNTM0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2J1ZmZlcnMuYzoxNTM1OlxcdGlmIChjbS1cXHUwMDNlZnJlZXplX3RocmVzaCBcXHUwMDI2XFx1MDAyNiBjbS1cXHUwMDNlbWF4X2J1ZmYgIT0gdGhyZXNob2xkKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fYnVmZmVycy5jLTE1MzYtXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkNoYW5naW5nIHRoaXMgVEMncyB0aHJlc2hvbGQgaXMgZm9yYmlkZGVuXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM9NzkyPXN0YXRpYyBpbnQgYnJjbWZfc2Rpb2RfZnJlZXplcl9hdHRhY2goc3RydWN0IGJyY21mX3NkaW9fZGV2ICpzZGlvZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTc5Ni1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6Nzk3OlxcdHNkaW9kZXYtXFx1MDAzZWZyZWV6ZXIgPSBremFsbG9jX29iaigqc2Rpb2Rldi1cXHUwMDNlZnJlZXplcik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjc5ODpcXHRpZiAoIXNkaW9kZXYtXFx1MDAzZWZyZWV6ZXIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTc5OS1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6ODAwOlxcdGF0b21pY19zZXQoXFx1MDAyNnNkaW9kZXYtXFx1MDAzZWZyZWV6ZXItXFx1MDAzZXRocmVhZF9jb3VudCwgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjgwMTpcXHRhdG9taWNfc2V0KFxcdTAwMjZzZGlvZGV2LVxcdTAwM2VmcmVlemVyLVxcdTAwM2VmcmVlemluZywgMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjgwMjpcXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZzZGlvZGV2LVxcdTAwM2VmcmVlemVyLVxcdTAwM2V0aHJlYWRfZnJlZXplKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6ODAzOlxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2c2Rpb2Rldi1cXHUwMDNlZnJlZXplci1cXHUwMDNlcmVzdW1lZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTgwNC1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYz04MDc9c3RhdGljIHZvaWQgYnJjbWZfc2Rpb2RfZnJlZXplcl9kZXRhY2goc3RydWN0IGJyY21mX3NkaW9fZGV2ICpzZGlvZGV2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy04MDgte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzo4MDk6XFx0aWYgKHNkaW9kZXYtXFx1MDAzZWZyZWV6ZXIpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6ODEwOlxcdFxcdFdBUk5fT04oYXRvbWljX3JlYWQoXFx1MDAyNnNkaW9kZXYtXFx1MDAzZWZyZWV6ZXItXFx1MDAzZWZyZWV6aW5nKSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjgxMTpcXHRcXHRrZnJlZShzZGlvZGV2LVxcdTAwM2VmcmVlemVyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6ODEyOlxcdFxcdHNkaW9kZXYtXFx1MDAzZWZyZWV6ZXIgPSBOVUxMO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy04MTMtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jPTgxNj1zdGF0aWMgaW50IGJyY21mX3NkaW9kX2ZyZWV6ZXJfb24oc3RydWN0IGJyY21mX3NkaW9fZGV2ICpzZGlvZGV2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy04MTcte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzo4MTg6XFx0YXRvbWljX3QgKmV4cGVjdCA9IFxcdTAwMjZzZGlvZGV2LVxcdTAwM2VmcmVlemVyLVxcdTAwM2V0aHJlYWRfY291bnQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTgxOS1cXHRpbnQgcmVzID0gMDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtODIwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzo4MjE6XFx0c2Rpb2Rldi1cXHUwMDNlZnJlZXplci1cXHUwMDNlZnJvemVuX2NvdW50ID0gMDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6ODIyOlxcdHJlaW5pdF9jb21wbGV0aW9uKFxcdTAwMjZzZGlvZGV2LVxcdTAwM2VmcmVlemVyLVxcdTAwM2VyZXN1bWVkKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6ODIzOlxcdGF0b21pY19zZXQoXFx1MDAyNnNkaW9kZXYtXFx1MDAzZWZyZWV6ZXItXFx1MDAzZWZyZWV6aW5nLCAxKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtODI0LVxcdGJyY21mX3NkaW9fdHJpZ2dlcl9kcGMoc2Rpb2Rldi1cXHUwMDNlYnVzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6ODI1OlxcdHdhaXRfZXZlbnQoc2Rpb2Rldi1cXHUwMDNlZnJlZXplci1cXHUwMDNldGhyZWFkX2ZyZWV6ZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6ODI2OlxcdFxcdCAgIGF0b21pY19yZWFkKGV4cGVjdCkgPT0gc2Rpb2Rldi1cXHUwMDNlZnJlZXplci1cXHUwMDNlZnJvemVuX2NvdW50KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtODI3LVxcdHNkaW9fY2xhaW1faG9zdChzZGlvZGV2LVxcdTAwM2VmdW5jMSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM9ODMzPXN0YXRpYyB2b2lkIGJyY21mX3NkaW9kX2ZyZWV6ZXJfb2ZmKHN0cnVjdCBicmNtZl9zZGlvX2RldiAqc2Rpb2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy04MzctXFx0c2Rpb19yZWxlYXNlX2hvc3Qoc2Rpb2Rldi1cXHUwMDNlZnVuYzEpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzo4Mzg6XFx0YXRvbWljX3NldChcXHUwMDI2c2Rpb2Rldi1cXHUwMDNlZnJlZXplci1cXHUwMDNlZnJlZXppbmcsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzo4Mzk6XFx0Y29tcGxldGVfYWxsKFxcdTAwMjZzZGlvZGV2LVxcdTAwM2VmcmVlemVyLVxcdTAwM2VyZXN1bWVkKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtODQwLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYz04NDI9Ym9vbCBicmNtZl9zZGlvZF9mcmVlemluZyhzdHJ1Y3QgYnJjbWZfc2Rpb19kZXYgKnNkaW9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtODQ0LVxcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19QTV9TTEVFUCkgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6ODQ1OlxcdFxcdGF0b21pY19yZWFkKFxcdTAwMjZzZGlvZGV2LVxcdTAwM2VmcmVlemVyLVxcdTAwM2VmcmVlemluZyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTg0Ni19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM9ODQ4PXZvaWQgYnJjbWZfc2Rpb2RfdHJ5X2ZyZWV6ZShzdHJ1Y3QgYnJjbWZfc2Rpb19kZXYgKnNkaW9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtODUxLVxcdFxcdHJldHVybjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6ODUyOlxcdHNkaW9kZXYtXFx1MDAzZWZyZWV6ZXItXFx1MDAzZWZyb3plbl9jb3VudCsrO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzo4NTM6XFx0d2FrZV91cChcXHUwMDI2c2Rpb2Rldi1cXHUwMDNlZnJlZXplci1cXHUwMDNldGhyZWFkX2ZyZWV6ZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjg1NDpcXHR3YWl0X2Zvcl9jb21wbGV0aW9uKFxcdTAwMjZzZGlvZGV2LVxcdTAwM2VmcmVlemVyLVxcdTAwM2VyZXN1bWVkKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtODU1LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYz04NTc9dm9pZCBicmNtZl9zZGlvZF9mcmVlemVyX2NvdW50KHN0cnVjdCBicmNtZl9zZGlvX2RldiAqc2Rpb2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy04NTktXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BNX1NMRUVQKSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6ODYwOlxcdFxcdGF0b21pY19pbmMoXFx1MDAyNnNkaW9kZXYtXFx1MDAzZWZyZWV6ZXItXFx1MDAzZXRocmVhZF9jb3VudCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTg2MS19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM9ODYzPXZvaWQgYnJjbWZfc2Rpb2RfZnJlZXplcl91bmNvdW50KHN0cnVjdCBicmNtZl9zZGlvX2RldiAqc2Rpb2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy04NjUtXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BNX1NMRUVQKSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6ODY2OlxcdFxcdGF0b21pY19kZWMoXFx1MDAyNnNkaW9kZXYtXFx1MDAzZWZyZWV6ZXItXFx1MDAzZXRocmVhZF9jb3VudCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTg2Ny19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYz0yNTQ4PXN0YXRpYyB2b2lkIHJ0d19jb2V4X3J1bl9jb2V4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHJlYXNvbilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jLTI1ODgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmM6MjU4OTpcXHRpZiAoY29leC1cXHUwMDNlZnJlZXplIFxcdTAwMjZcXHUwMDI2IGNvZXhfZG0tXFx1MDAzZXJlYXNvbiA9PSBDT0VYX1JTTl9CVElORk8gXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYy0yNTkwLVxcdCAgICAhY29leF9zdGF0LVxcdTAwM2VidF9zZXR1cF9saW5rKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYz0yNzA4PXN0YXRpYyB2b2lkIF9fcnR3X2NvZXhfaW5pdF9od19jb25maWcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgYm9vbCB3aWZpX29ubHkpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYy0yNzUzLVxcdFxcdGNvZXgtXFx1MDAzZXN0b3BfZG0gPSBmYWxzZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYzoyNzU0OlxcdFxcdGNvZXgtXFx1MDAzZWZyZWV6ZSA9IHRydWU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmMtMjc1NS1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYz0yODY5PXZvaWQgcnR3X2NvZXhfc2Nhbl9ub3RpZnkoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggdHlwZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jLTI4NzYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmM6Mjg3NzpcXHRjb2V4LVxcdTAwM2VmcmVlemUgPSBmYWxzZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYy0yODc4LVxcdHJ0d19jb2V4X3dyaXRlX3NjYmQocnR3ZGV2LCBDT0VYX1NDQkRfQUNUSVZFIHwgQ09FWF9TQ0JEX09OT0ZGLCB0cnVlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jPTI5MzM9dm9pZCBydHdfY29leF9jb25uZWN0X25vdGlmeShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCB0eXBlKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmMtMjk3Mi1cXHRcXHQgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYzoyOTczOlxcdFxcdGNvZXgtXFx1MDAzZWZyZWV6ZSA9IHRydWU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmMtMjk3NC1cXHRcXHRpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHJ0d2Rldi1cXHUwMDNlaHcsIFxcdTAwMjZjb2V4LVxcdTAwM2VkZWZyZWV6ZV93b3JrLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmMtMjk3Ny1cXHRcXHRjb2V4X3N0YXQtXFx1MDAzZXdsX2hpX3ByaV90YXNrMSA9IGZhbHNlO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jOjI5Nzg6XFx0XFx0Y29leC1cXHUwMDNlZnJlZXplID0gZmFsc2U7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmMtMjk3OS1cXHRcXHRjb2V4X3N0YXQtXFx1MDAzZXdsX2Nvbm5lY3RpbmcgPSBmYWxzZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jPTM0OTE9dm9pZCBydHdfY29leF9kZWZyZWV6ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jLTM0OTgtXFx0bXV0ZXhfbG9jayhcXHUwMDI2cnR3ZGV2LVxcdTAwM2VtdXRleCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmM6MzQ5OTpcXHRjb2V4LVxcdTAwM2VmcmVlemUgPSBmYWxzZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYy0zNTAwLVxcdGNvZXhfc3RhdC1cXHUwMDNld2xfaGlfcHJpX3Rhc2sxID0gZmFsc2U7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYz0zOTM2PXZvaWQgcnR3X2NvZXhfZGlzcGxheV9jb2V4X2luZm8oc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHNlcV9maWxlICptKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmMtMzk5NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYzozOTk2OlxcdH0gZWxzZSBpZiAoY29leC1cXHUwMDNlZnJlZXplKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmMtMzk5Ny1cXHRcXHRzZXFfcHV0cyhtLCBcXFwiPT09PT09PT09PT09W2NvZXhfZnJlZXplXT09PT09PT09PT09PVxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL252ZGltbS9kaW1tX2RldnMuYz00MTA9c3RhdGljIHVtb2RlX3QgbnZkaW1tX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludCBuKVxcbi0tXFxuZHJpdmVycy9udmRpbW0vZGltbV9kZXZzLmMtNDIxLVxcdFxcdC8qIEFyZSB0aGVyZSBhbnkgc3RhdGUgbXV0YXRpb24gb3BzIChtYWtlIHdyaXRhYmxlKT8gKi9cXG5kcml2ZXJzL252ZGltbS9kaW1tX2RldnMuYzo0MjI6XFx0XFx0aWYgKG52ZGltbS1cXHUwMDNlc2VjLm9wcy1cXHUwMDNlZnJlZXplIHx8IG52ZGltbS1cXHUwMDNlc2VjLm9wcy1cXHUwMDNlZGlzYWJsZVxcbmRyaXZlcnMvbnZkaW1tL2RpbW1fZGV2cy5jLTQyMy1cXHRcXHRcXHRcXHR8fCBudmRpbW0tXFx1MDAzZXNlYy5vcHMtXFx1MDAzZWNoYW5nZV9rZXlcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2RpbW1fZGV2cy5jLTQyOS1cXG5kcml2ZXJzL252ZGltbS9kaW1tX2RldnMuYzo0MzA6XFx0aWYgKG52ZGltbS1cXHUwMDNlc2VjLm9wcy1cXHUwMDNlZnJlZXplKVxcbmRyaXZlcnMvbnZkaW1tL2RpbW1fZGV2cy5jLTQzMS1cXHRcXHRyZXR1cm4gYS1cXHUwMDNlbW9kZTtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2RpbW1fZGV2cy5jPTY3MD1pbnQgbnZkaW1tX3NlY3VyaXR5X2ZyZWV6ZShzdHJ1Y3QgbnZkaW1tICpudmRpbW0pXFxuLS1cXG5kcml2ZXJzL252ZGltbS9kaW1tX2RldnMuYy02NzUtXFxuZHJpdmVycy9udmRpbW0vZGltbV9kZXZzLmM6Njc2OlxcdGlmICghbnZkaW1tLVxcdTAwM2VzZWMub3BzIHx8ICFudmRpbW0tXFx1MDAzZXNlYy5vcHMtXFx1MDAzZWZyZWV6ZSlcXG5kcml2ZXJzL252ZGltbS9kaW1tX2RldnMuYy02NzctXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuZHJpdmVycy9udmRpbW0vZGltbV9kZXZzLmMtNjg2LVxcbmRyaXZlcnMvbnZkaW1tL2RpbW1fZGV2cy5jOjY4NzpcXHRyYyA9IG52ZGltbS1cXHUwMDNlc2VjLm9wcy1cXHUwMDNlZnJlZXplKG52ZGltbSk7XFxuZHJpdmVycy9udmRpbW0vZGltbV9kZXZzLmMtNjg4LVxcdG52ZGltbS1cXHUwMDNlc2VjLmZsYWdzID0gbnZkaW1tX3NlY3VyaXR5X2ZsYWdzKG52ZGltbSwgTlZESU1NX1VTRVIpO1xcbi0tXFxuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jPTEwNjM9c3RhdGljIGludCBwY2lfcG1fZnJlZXplKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xMDg4LVxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYzoxMDg5OlxcdGlmIChwbS1cXHUwMDNlZnJlZXplKSB7XFxuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jLTEwOTAtXFx0XFx0aW50IGVycm9yO1xcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xMDkxLVxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYzoxMDkyOlxcdFxcdGVycm9yID0gcG0tXFx1MDAzZWZyZWV6ZShkZXYpO1xcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYzoxMDkzOlxcdFxcdHN1c3BlbmRfcmVwb3J0X3Jlc3VsdChkZXYsIHBtLVxcdTAwM2VmcmVlemUsIGVycm9yKTtcXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMtMTA5NC1cXHRcXHRpZiAoZXJyb3IpXFxuLS1cXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmM9MTEwMT1zdGF0aWMgaW50IHBjaV9wbV9mcmVlemVfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jLTExMDgtXFxuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jOjExMDk6XFx0aWYgKHBtIFxcdTAwMjZcXHUwMDI2IHBtLVxcdTAwM2VmcmVlemVfbm9pcnEpIHtcXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMtMTExMC1cXHRcXHRpbnQgZXJyb3I7XFxuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jLTExMTEtXFxuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jOjExMTI6XFx0XFx0ZXJyb3IgPSBwbS1cXHUwMDNlZnJlZXplX25vaXJxKGRldik7XFxuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jOjExMTM6XFx0XFx0c3VzcGVuZF9yZXBvcnRfcmVzdWx0KGRldiwgcG0tXFx1MDAzZWZyZWV6ZV9ub2lycSwgZXJyb3IpO1xcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xMTE0LVxcdFxcdGlmIChlcnJvcilcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX3BtLmM9Mjc9c3RhdGljIGludCBkb19zY3NpX2ZyZWV6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbSlcXG5kcml2ZXJzL3Njc2kvc2NzaV9wbS5jLTI4LXtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTc6NDIuNDk2MzA0Mzc2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM5MzQzMDgzMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJhY2luZyB0aGUgRnJlZXppbmcgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoaXMgcGF0Y2ggaW4gYGZzL3N1cGVyLmNgLiBJdCBzZWVtcyB0byBiZSByZWxhdGVkIHRvIGBmc19iZGV2X2ZyZWV6ZWAsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBXYWl0IGEgbWludXRlLCB3aGVyZSBpcyAqdGhhdCogY2FsbGVkIGZyb20/IFJpZ2h0LCBgZnNfYmRldl9mcmVlemVgIGlzIGludm9rZWQgYnkgYGJkZXZfZnJlZXplYC4gVGhhdCdzIGluIGBibG9jay9iZGV2LmNgLiBBbHJpZ2h0LCBzbyBsZXQncyBzaGlmdCBnZWFycyBhbmQgZGl2ZSBpbnRvIGBiZGV2X2ZyZWV6ZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgaGVyZSB0byBzZWUgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2UuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uIGluIHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDk0LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTc6NTYuNDMwNjE1OTI0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDY3MTc3NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJkZXZfZnJlZXplXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2JkZXYuYz0yODU9RVhQT1JUX1NZTUJPTChzeW5jX2Jsb2NrZGV2X3JhbmdlKTtcXG4tLVxcbmJsb2NrL2JkZXYuYy0yODctLyoqXFxuYmxvY2svYmRldi5jOjI4ODogKiBiZGV2X2ZyZWV6ZSAtIGxvY2sgYSBmaWxlc3lzdGVtIGFuZCBmb3JjZSBpdCBpbnRvIGEgY29uc2lzdGVudCBzdGF0ZVxcbmJsb2NrL2JkZXYuYy0yODktICogQGJkZXY6XFx0YmxvY2tkZXZpY2UgdG8gbG9ja1xcbi0tXFxuYmxvY2svYmRldi5jLTI5NC0gKiB1bmZyZWV6ZSBwcm9jZXNzIGNhbiB1bmZyZWV6ZSB0aGUgZnJvemVuIGZpbGVzeXN0ZW0gYWN0dWFsbHkgd2hlbiBtdWx0aXBsZVxcbmJsb2NrL2JkZXYuYzoyOTU6ICogZnJlZXplIHJlcXVlc3RzIGFycml2ZSBzaW11bHRhbmVvdXNseS4gSXQgY291bnRzIHVwIGluIGJkZXZfZnJlZXplKCkgYW5kXFxuYmxvY2svYmRldi5jLTI5Ni0gKiBjb3VudCBkb3duIGluIGJkZXZfdGhhdygpLiBXaGVuIGl0IGJlY29tZXMgMCwgdGhhd19iZGV2KCkgd2lsbCB1bmZyZWV6ZVxcbi0tXFxuYmxvY2svYmRldi5jLTMwMC0gKi9cXG5ibG9jay9iZGV2LmM6MzAxOmludCBiZGV2X2ZyZWV6ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxcbmJsb2NrL2JkZXYuYy0zMDIte1xcbi0tXFxuYmxvY2svYmRldi5jLTMyNi19XFxuYmxvY2svYmRldi5jOjMyNzpFWFBPUlRfU1lNQk9MKGJkZXZfZnJlZXplKTtcXG5ibG9jay9iZGV2LmMtMzI4LVxcbi0tXFxuYmxvY2svYmRldi5jLTMzMi0gKlxcbmJsb2NrL2JkZXYuYzozMzM6ICogVW5sb2NrcyB0aGUgZmlsZXN5c3RlbSBhbmQgbWFya3MgaXQgd3JpdGVhYmxlIGFnYWluIGFmdGVyIGJkZXZfZnJlZXplKCkuXFxuYmxvY2svYmRldi5jLTMzNC0gKlxcbi0tXFxuZHJpdmVycy9tZC9kbS5jPTI5MzI9c3RhdGljIGludCBsb2NrX2ZzKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZClcXG4tLVxcbmRyaXZlcnMvbWQvZG0uYy0yOTM3LVxcbmRyaXZlcnMvbWQvZG0uYzoyOTM4OlxcdHIgPSBiZGV2X2ZyZWV6ZShtZC1cXHUwMDNlZGlzay1cXHUwMDNlcGFydDApO1xcbmRyaXZlcnMvbWQvZG0uYy0yOTM5LVxcdGlmICghcilcXG4tLVxcbmZzL2V4ZmF0L3N1cGVyLmM9MTU1PWludCBleGZhdF9mb3JjZV9zaHV0ZG93bihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgZmxhZ3MpXFxuLS1cXG5mcy9leGZhdC9zdXBlci5jLTE2Ni1cXHRjYXNlIEVYRkFUX0dPSU5HX0RPV05fRlVMTFNZTkM6XFxuZnMvZXhmYXQvc3VwZXIuYzoxNjc6XFx0XFx0cmV0ID0gYmRldl9mcmVlemUoc2ItXFx1MDAzZXNfYmRldik7XFxuZnMvZXhmYXQvc3VwZXIuYy0xNjgtXFx0XFx0aWYgKHJldClcXG4tLVxcbmZzL2V4dDQvaW9jdGwuYz04MTA9aW50IGV4dDRfZm9yY2Vfc2h1dGRvd24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGZsYWdzKVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTgyNS1cXHRjYXNlIEVYVDRfR09JTkdfRkxBR1NfREVGQVVMVDpcXG5mcy9leHQ0L2lvY3RsLmM6ODI2OlxcdFxcdHJldCA9IGJkZXZfZnJlZXplKHNiLVxcdTAwM2VzX2JkZXYpO1xcbmZzL2V4dDQvaW9jdGwuYy04MjctXFx0XFx0aWYgKHJldClcXG4tLVxcbmZzL2YyZnMvZmlsZS5jPTI0NTM9aW50IGYyZnNfZG9fc2h1dGRvd24oc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLCB1bnNpZ25lZCBpbnQgZmxhZyxcXG4tLVxcbmZzL2YyZnMvZmlsZS5jLTI0NjAtXFx0Y2FzZSBGMkZTX0dPSU5HX0RPV05fRlVMTFNZTkM6XFxuZnMvZjJmcy9maWxlLmM6MjQ2MTpcXHRcXHRyZXQgPSBiZGV2X2ZyZWV6ZShzYi1cXHUwMDNlc19iZGV2KTtcXG5mcy9mMmZzL2ZpbGUuYy0yNDYyLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5mcy9udGZzL3N1cGVyLmM9MTgyMD1pbnQgbnRmc19mb3JjZV9zaHV0ZG93bihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgZmxhZ3MpXFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtMTgzMC1cXHRjYXNlIEZTX1NIVVRET1dOX0ZMQUdTX0xPR0ZMVVNIOlxcbmZzL250ZnMvc3VwZXIuYzoxODMxOlxcdFxcdHJldCA9IGJkZXZfZnJlZXplKHNiLVxcdTAwM2VzX2JkZXYpO1xcbmZzL250ZnMvc3VwZXIuYy0xODMyLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5mcy9udGZzMy9maWxlLmM9MTk3PXN0YXRpYyBpbnQgbnRmc19mb3JjZV9zaHV0ZG93bihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgZmxhZ3MpXFxuLS1cXG5mcy9udGZzMy9maWxlLmMtMjA1LVxcdC8qIE5vIGFkZGl0aW9uYWwgb3B0aW9ucyB5ZXQgKGZsYWdzKS4gKi9cXG5mcy9udGZzMy9maWxlLmM6MjA2OlxcdGVyciA9IGJkZXZfZnJlZXplKHNiLVxcdTAwM2VzX2JkZXYpO1xcbmZzL250ZnMzL2ZpbGUuYy0yMDctXFx0aWYgKGVycilcXG4tLVxcbmZzL3N1cGVyLmM9MTQzNz1zdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICpnZXRfYmRldl9zdXBlcihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxcbi0tXFxuZnMvc3VwZXIuYy0xNDUyLS8qKlxcbmZzL3N1cGVyLmM6MTQ1MzogKiBmc19iZGV2X2ZyZWV6ZSAtIGZyZWV6ZSBvd25pbmcgZmlsZXN5c3RlbSBvZiBibG9jayBkZXZpY2VcXG5mcy9zdXBlci5jLTE0NTQtICogQGJkZXY6IGJsb2NrIGRldmljZVxcbi0tXFxuZnMvc3VwZXIuYy0xNDY2LSAqL1xcbmZzL3N1cGVyLmM6MTQ2NzpzdGF0aWMgaW50IGZzX2JkZXZfZnJlZXplKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXFxuZnMvc3VwZXIuYy0xNDY4LXtcXG4tLVxcbmZzL3N1cGVyLmM9MTU1Mj1jb25zdCBzdHJ1Y3QgYmxrX2hvbGRlcl9vcHMgZnNfaG9sZGVyX29wcyA9IHtcXG4tLVxcbmZzL3N1cGVyLmMtMTU1NC1cXHQuc3luY1xcdFxcdFxcdD0gZnNfYmRldl9zeW5jLFxcbmZzL3N1cGVyLmM6MTU1NTpcXHQuZnJlZXplXFx0XFx0XFx0PSBmc19iZGV2X2ZyZWV6ZSxcXG5mcy9zdXBlci5jLTE1NTYtXFx0LnRoYXdcXHRcXHRcXHQ9IGZzX2JkZXZfdGhhdyxcXG4tLVxcbmZzL3hmcy94ZnNfZnNvcHMuYz00NTE9eGZzX2ZzX2dvaW5nZG93bihcXG4tLVxcbmZzL3hmcy94ZnNfZnNvcHMuYy00NTYtXFx0Y2FzZSBYRlNfRlNPUF9HT0lOR19GTEFHU19ERUZBVUxUOiB7XFxuZnMveGZzL3hmc19mc29wcy5jOjQ1NzpcXHRcXHRpZiAoIWJkZXZfZnJlZXplKG1wLVxcdTAwM2VtX3N1cGVyLVxcdTAwM2VzX2JkZXYpKSB7XFxuZnMveGZzL3hmc19mc29wcy5jLTQ1OC1cXHRcXHRcXHR4ZnNfZm9yY2Vfc2h1dGRvd24obXAsIFNIVVRET1dOX0ZPUkNFX1VNT1VOVCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oPTE4MzI9c3RhdGljIGlubGluZSBpbnQgZWFybHlfbG9va3VwX2JkZXYoY29uc3QgY2hhciAqcGF0aG5hbWUsIGRldl90ICpkZXYpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTE4MzctXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaDoxODM4OmludCBiZGV2X2ZyZWV6ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTtcXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTE4MzktaW50IGJkZXZfdGhhdyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTc6NTkuODk3ODAxNzQ0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDA2NTAzNzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzIGluIHRoZSBGaWxlc3lzdGVtIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCBzb21lIHJlY2VudCBjaGFuZ2VzIGluIHRoZSBmaWxlc3lzdGVtIGNvZGUsIHRyeWluZyB0byBpZGVudGlmeSBwcm9taXNpbmcgYXJlYXMgZm9yIGZ1enppbmcuIEZpcnN0LCBJIG5vdGljZWQgdGhhdCBgYmRldl9mcmVlemVgIGlzIGEgZnVuY3Rpb24gY2FsbGVkIGJ5IHNldmVyYWwgZmlsZXN5c3RlbS1zcGVjaWZpYyBzaHV0ZG93biByb3V0aW5lczogYGV4ZmF0X2ZvcmNlX3NodXRkb3duYCwgYGV4dDRfZm9yY2Vfc2h1dGRvd25gLCBgZjJmc19kb19zaHV0ZG93bmAsIGBudGZzX2ZvcmNlX3NodXRkb3duYCwgYHhmc19mc19nb2luZ2Rvd25gLCBhbmQgZXZlbiBpbmRpcmVjdGx5IHRocm91Z2ggYGxvY2tfZnNgIGluIGBkbS5jYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuQnV0IHRoZSBrZXkgY2hhbmdlIGlzIGluIGBmcy9zdXBlci5jYCwgc3BlY2lmaWNhbGx5IGluIGBmc19iZGV2X2ZyZWV6ZWAuIFRoaXMgcGF0Y2ggYWRkcyBlcnJvciBoYW5kbGluZyBhZnRlciB0aGUgYHN5bmNfYmxvY2tkZXZgIGNhbGwuIElmIGBzeW5jX2Jsb2NrZGV2YCBmYWlscywgdGhlIHN1cGVyYmxvY2sgaXMgbm93IHRoYXdlZC4gVGhpcyBpcyBkZWZpbml0ZWx5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlIGJlY2F1c2UgaXQgaW50cm9kdWNlcyBhIG5ldyBmYWlsdXJlIHBhdGggYW5kIHJvbGxiYWNrIHNjZW5hcmlvLiBUaGlzIGFyZWEgbmVlZHMgbW9yZSBzY3J1dGlueS4gQSBzeW5jaHJvbml6YXRpb24gZXJyb3IgZHVyaW5nIGZyZWV6ZS90aGF3IGNvdWxkIGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uIG9yIGluY29uc2lzdGVuY2llcywgYW5kIGl0J3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBjYW4gYmUgdGFyZ2V0ZWQgYnkgZnV6emluZy5cblxuTmV4dCwgSSBsb29rZWQgYXQgYSByZWxhdGVkIGNoYW5nZSBpbiBgZnMvZXhmYXQvbWlzYy5jYC4gVGhpcyBwYXRjaCBtb2RpZmllcyBob3cgZXhGQVQgaGFuZGxlcyBlcnJvcnMgd2hlbiB0aGUgYGVycm9ycz1yZW1vdW50LXJvYCBvcHRpb24gaXMgc2V0LiBJbnN0ZWFkIG9mIHNldHRpbmcgdGhlIGBTQl9SRE9OTFlgIGZsYWcgZGlyZWN0bHksIGl0IG5vdyBzZXRzIGBFWEZBVF9GTEFHU19TSFVURE9XTmAuIFRoaXMgY2hhbmdlIHNlZW1zIHN1YnRsZSBidXQgY291bGQgYWxzbyBpbnRyb2R1Y2UgbmV3IHN0YXRlcyBvciBjb2RlIHBhdGhzIHRoYXQgYXJlIHdvcnRoIGV4cGxvcmluZyB0aHJvdWdoIGZ1enppbmcuIFRoZSBjb21tZW50IGluZGljYXRlcyB0aGlzIGNoYW5nZSBoZWxwcyBhdm9pZCBwb3RlbnRpYWwgZGVhZGxvY2tzIHdpdGggYGZyZWV6ZV9zdXBlcigpYC5cblxuU28sIHRoZSBmb2N1cyBvZiBteSBmdXp6aW5nIGVmZm9ydHMgc2hvdWxkIGJlIG9uIGBmc19iZGV2X2ZyZWV6ZWAgYW5kIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gaXQsIGVzcGVjaWFsbHkgdGhlIG5ldyByb2xsYmFjayBwYXRoIGFmdGVyIGBzeW5jX2Jsb2NrZGV2YCBmYWlsdXJlLiBXZSB3YW50IHRvIGNoZWNrIGBmc19iZGV2X2ZyZWV6ZWAgYmVjYXVzZSBpdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGBGSUZSRUVaRWAgaW9jdGwsIGFzIHdlbGwgYXMgdmlhIGRtLCBhbmQgdGhlIGRpZmZlcmVudCBmaWxlc3lzdGVtIHNodXRkb3duIHBhdGhzLiBBbmQgc2Vjb25kYXJpbHksIG9uIHRoZSBlcnJvciBoYW5kbGluZyBpbiBgX19leGZhdF9mc19lcnJvcmAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gdGhvc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTI0MSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxODowOS45MDQzMDg3MDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NzQwNTg0NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnNfYmRldl9mcmVlemVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvc3VwZXIuYz0xNDM3PXN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmdldF9iZGV2X3N1cGVyKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXFxuLS1cXG5mcy9zdXBlci5jLTE0NTItLyoqXFxuZnMvc3VwZXIuYzoxNDUzOiAqIGZzX2JkZXZfZnJlZXplIC0gZnJlZXplIG93bmluZyBmaWxlc3lzdGVtIG9mIGJsb2NrIGRldmljZVxcbmZzL3N1cGVyLmMtMTQ1NC0gKiBAYmRldjogYmxvY2sgZGV2aWNlXFxuLS1cXG5mcy9zdXBlci5jLTE0NjYtICovXFxuZnMvc3VwZXIuYzoxNDY3OnN0YXRpYyBpbnQgZnNfYmRldl9mcmVlemUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcXG5mcy9zdXBlci5jLTE0Njgte1xcbi0tXFxuZnMvc3VwZXIuYz0xNTUyPWNvbnN0IHN0cnVjdCBibGtfaG9sZGVyX29wcyBmc19ob2xkZXJfb3BzID0ge1xcbi0tXFxuZnMvc3VwZXIuYy0xNTU0LVxcdC5zeW5jXFx0XFx0XFx0PSBmc19iZGV2X3N5bmMsXFxuZnMvc3VwZXIuYzoxNTU1OlxcdC5mcmVlemVcXHRcXHRcXHQ9IGZzX2JkZXZfZnJlZXplLFxcbmZzL3N1cGVyLmMtMTU1Ni1cXHQudGhhd1xcdFxcdFxcdD0gZnNfYmRldl90aGF3LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxODoxMi41NzgzNzcxMjFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzMjUwNDcwMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgRmlsZXN5c3RlbSBGcmVlemluZyBCZWhhdmlvcioqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoaXMgYGZzX2JkZXZfZnJlZXplYCBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gYmUgdHJpZ2dlcmVkIHRocm91Z2ggYGZzX2hvbGRlcl9vcHMuZnJlZXplYC4gVGhhdCBtYWtlcyBzZW5zZSwgYXMgYGZzX2hvbGRlcl9vcHNgIGFyZSwgYXMgSSByZWNhbGwsIGludm9sdmVkIHdoZW4gYSBmaWxlc3lzdGVtIGludGVyYWN0cyB3aXRoIGEgYmxvY2sgZGV2aWNlLCBvcGVuaW5nIGl0LCBsaWtlbHkgZm9yIEkvTy4gU28sIHRoZSBzZXF1ZW5jZSBpczogd2UgY2FsbCBgYmRldl9mcmVlemVgIG9uIHRoZSBibG9jayBkZXZpY2UgaXRzZWxmLCB3aGljaCBpbiB0dXJuIGhhbmRzIGNvbnRyb2wgdG8gYGZzX2JkZXZfZnJlZXplYC4gVGhlIHF1ZXN0aW9uIG5vdyBpczogd2hhdCBhY3R1YWxseSAqY2FsbHMqIGBiZGV2X2ZyZWV6ZWAgaW4gdGhlIGZpcnN0IHBsYWNlPyBNeSBndXQgZmVlbGluZyBzYXlzIGl0J3MgcmVsYXRlZCB0byB0aGUgYEZJRlJFRVpFYCBpb2N0bC4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IGh1bmNoOyBJJ2xsIHBvcCBvdmVyIHRvIGBibG9jay9pb2N0bC5jYCB0byB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDgxMywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDEwOjE4OjQzLjkwMzQyNzMxN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4NjE2MjQ1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiZGV2X2ZyZWV6ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iZGV2LmM9Mjg1PUVYUE9SVF9TWU1CT0woc3luY19ibG9ja2Rldl9yYW5nZSk7XFxuLS1cXG5ibG9jay9iZGV2LmMtMjg3LS8qKlxcbmJsb2NrL2JkZXYuYzoyODg6ICogYmRldl9mcmVlemUgLSBsb2NrIGEgZmlsZXN5c3RlbSBhbmQgZm9yY2UgaXQgaW50byBhIGNvbnNpc3RlbnQgc3RhdGVcXG5ibG9jay9iZGV2LmMtMjg5LSAqIEBiZGV2OlxcdGJsb2NrZGV2aWNlIHRvIGxvY2tcXG4tLVxcbmJsb2NrL2JkZXYuYy0yOTQtICogdW5mcmVlemUgcHJvY2VzcyBjYW4gdW5mcmVlemUgdGhlIGZyb3plbiBmaWxlc3lzdGVtIGFjdHVhbGx5IHdoZW4gbXVsdGlwbGVcXG5ibG9jay9iZGV2LmM6Mjk1OiAqIGZyZWV6ZSByZXF1ZXN0cyBhcnJpdmUgc2ltdWx0YW5lb3VzbHkuIEl0IGNvdW50cyB1cCBpbiBiZGV2X2ZyZWV6ZSgpIGFuZFxcbmJsb2NrL2JkZXYuYy0yOTYtICogY291bnQgZG93biBpbiBiZGV2X3RoYXcoKS4gV2hlbiBpdCBiZWNvbWVzIDAsIHRoYXdfYmRldigpIHdpbGwgdW5mcmVlemVcXG4tLVxcbmJsb2NrL2JkZXYuYy0zMDAtICovXFxuYmxvY2svYmRldi5jOjMwMTppbnQgYmRldl9mcmVlemUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcXG5ibG9jay9iZGV2LmMtMzAyLXtcXG4tLVxcbmJsb2NrL2JkZXYuYy0zMjYtfVxcbmJsb2NrL2JkZXYuYzozMjc6RVhQT1JUX1NZTUJPTChiZGV2X2ZyZWV6ZSk7XFxuYmxvY2svYmRldi5jLTMyOC1cXG4tLVxcbmJsb2NrL2JkZXYuYy0zMzItICpcXG5ibG9jay9iZGV2LmM6MzMzOiAqIFVubG9ja3MgdGhlIGZpbGVzeXN0ZW0gYW5kIG1hcmtzIGl0IHdyaXRlYWJsZSBhZ2FpbiBhZnRlciBiZGV2X2ZyZWV6ZSgpLlxcbmJsb2NrL2JkZXYuYy0zMzQtICpcXG4tLVxcbmRyaXZlcnMvbWQvZG0uYz0yOTMyPXN0YXRpYyBpbnQgbG9ja19mcyhzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpXFxuLS1cXG5kcml2ZXJzL21kL2RtLmMtMjkzNy1cXG5kcml2ZXJzL21kL2RtLmM6MjkzODpcXHRyID0gYmRldl9mcmVlemUobWQtXFx1MDAzZWRpc2stXFx1MDAzZXBhcnQwKTtcXG5kcml2ZXJzL21kL2RtLmMtMjkzOS1cXHRpZiAoIXIpXFxuLS1cXG5mcy9leGZhdC9zdXBlci5jPTE1NT1pbnQgZXhmYXRfZm9yY2Vfc2h1dGRvd24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGZsYWdzKVxcbi0tXFxuZnMvZXhmYXQvc3VwZXIuYy0xNjYtXFx0Y2FzZSBFWEZBVF9HT0lOR19ET1dOX0ZVTExTWU5DOlxcbmZzL2V4ZmF0L3N1cGVyLmM6MTY3OlxcdFxcdHJldCA9IGJkZXZfZnJlZXplKHNiLVxcdTAwM2VzX2JkZXYpO1xcbmZzL2V4ZmF0L3N1cGVyLmMtMTY4LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5mcy9leHQ0L2lvY3RsLmM9ODEwPWludCBleHQ0X2ZvcmNlX3NodXRkb3duKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBmbGFncylcXG4tLVxcbmZzL2V4dDQvaW9jdGwuYy04MjUtXFx0Y2FzZSBFWFQ0X0dPSU5HX0ZMQUdTX0RFRkFVTFQ6XFxuZnMvZXh0NC9pb2N0bC5jOjgyNjpcXHRcXHRyZXQgPSBiZGV2X2ZyZWV6ZShzYi1cXHUwMDNlc19iZGV2KTtcXG5mcy9leHQ0L2lvY3RsLmMtODI3LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYz0yNDUzPWludCBmMmZzX2RvX3NodXRkb3duKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSwgdW5zaWduZWQgaW50IGZsYWcsXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYy0yNDYwLVxcdGNhc2UgRjJGU19HT0lOR19ET1dOX0ZVTExTWU5DOlxcbmZzL2YyZnMvZmlsZS5jOjI0NjE6XFx0XFx0cmV0ID0gYmRldl9mcmVlemUoc2ItXFx1MDAzZXNfYmRldik7XFxuZnMvZjJmcy9maWxlLmMtMjQ2Mi1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZnMvbnRmcy9zdXBlci5jPTE4MjA9aW50IG50ZnNfZm9yY2Vfc2h1dGRvd24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGZsYWdzKVxcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTE4MzAtXFx0Y2FzZSBGU19TSFVURE9XTl9GTEFHU19MT0dGTFVTSDpcXG5mcy9udGZzL3N1cGVyLmM6MTgzMTpcXHRcXHRyZXQgPSBiZGV2X2ZyZWV6ZShzYi1cXHUwMDNlc19iZGV2KTtcXG5mcy9udGZzL3N1cGVyLmMtMTgzMi1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZnMvbnRmczMvZmlsZS5jPTE5Nz1zdGF0aWMgaW50IG50ZnNfZm9yY2Vfc2h1dGRvd24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGZsYWdzKVxcbi0tXFxuZnMvbnRmczMvZmlsZS5jLTIwNS1cXHQvKiBObyBhZGRpdGlvbmFsIG9wdGlvbnMgeWV0IChmbGFncykuICovXFxuZnMvbnRmczMvZmlsZS5jOjIwNjpcXHRlcnIgPSBiZGV2X2ZyZWV6ZShzYi1cXHUwMDNlc19iZGV2KTtcXG5mcy9udGZzMy9maWxlLmMtMjA3LVxcdGlmIChlcnIpXFxuLS1cXG5mcy9zdXBlci5jPTE0Mzc9c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqZ2V0X2JkZXZfc3VwZXIoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcXG4tLVxcbmZzL3N1cGVyLmMtMTQ1Mi0vKipcXG5mcy9zdXBlci5jOjE0NTM6ICogZnNfYmRldl9mcmVlemUgLSBmcmVlemUgb3duaW5nIGZpbGVzeXN0ZW0gb2YgYmxvY2sgZGV2aWNlXFxuZnMvc3VwZXIuYy0xNDU0LSAqIEBiZGV2OiBibG9jayBkZXZpY2VcXG4tLVxcbmZzL3N1cGVyLmMtMTQ2Ni0gKi9cXG5mcy9zdXBlci5jOjE0Njc6c3RhdGljIGludCBmc19iZGV2X2ZyZWV6ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxcbmZzL3N1cGVyLmMtMTQ2OC17XFxuLS1cXG5mcy9zdXBlci5jPTE1NTI9Y29uc3Qgc3RydWN0IGJsa19ob2xkZXJfb3BzIGZzX2hvbGRlcl9vcHMgPSB7XFxuLS1cXG5mcy9zdXBlci5jLTE1NTQtXFx0LnN5bmNcXHRcXHRcXHQ9IGZzX2JkZXZfc3luYyxcXG5mcy9zdXBlci5jOjE1NTU6XFx0LmZyZWV6ZVxcdFxcdFxcdD0gZnNfYmRldl9mcmVlemUsXFxuZnMvc3VwZXIuYy0xNTU2LVxcdC50aGF3XFx0XFx0XFx0PSBmc19iZGV2X3RoYXcsXFxuLS1cXG5mcy94ZnMveGZzX2Zzb3BzLmM9NDUxPXhmc19mc19nb2luZ2Rvd24oXFxuLS1cXG5mcy94ZnMveGZzX2Zzb3BzLmMtNDU2LVxcdGNhc2UgWEZTX0ZTT1BfR09JTkdfRkxBR1NfREVGQVVMVDoge1xcbmZzL3hmcy94ZnNfZnNvcHMuYzo0NTc6XFx0XFx0aWYgKCFiZGV2X2ZyZWV6ZShtcC1cXHUwMDNlbV9zdXBlci1cXHUwMDNlc19iZGV2KSkge1xcbmZzL3hmcy94ZnNfZnNvcHMuYy00NTgtXFx0XFx0XFx0eGZzX2ZvcmNlX3NodXRkb3duKG1wLCBTSFVURE9XTl9GT1JDRV9VTU9VTlQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaD0xODMyPXN0YXRpYyBpbmxpbmUgaW50IGVhcmx5X2xvb2t1cF9iZGV2KGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBkZXZfdCAqZGV2KVxcbi0tXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xODM3LVxcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTgzODppbnQgYmRldl9mcmVlemUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldik7XFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xODM5LWludCBiZGV2X3RoYXcoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDEwOjE4OjQ2LjI4OTU5NDQ4NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDI2NzY4OTM4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgRnJlZXplIE1lY2hhbmlzbSoqXG5cblJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBmcmVlemluZyB3b3JrcywgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGBGSUZSRUVaRWAgaW9jdGwgaW4gYGZzL2lvY3RsLmNgICpzcGVjaWZpY2FsbHkqIGNhbGxzIGBmcmVlemVfc3VwZXJgLiBUaGF0IG1ha2VzIHNlbnNlLCB0YXJnZXRpbmcgdGhlIHN1cGVyYmxvY2sgbGV2ZWwuIEJ1dCBob2xkIG9uLCBJIHJlY2FsbCBgYmRldl9mcmVlemVgIGJlaW5nIGluIHRoZSBtaXggdG9vLiBBaCB5ZXMsIEkgcmVtZW1iZXIgbm93LCBgYmRldl9mcmVlemVgIGlzIGRlZmluaXRlbHkgdXNlZCBieSB0aGUgZGV2aWNlIG1hcHBlciAoYGRtYCkgYW5kIGluIGZpbGVzeXN0ZW0gc2h1dGRvd24gaW9jdGxzIC0gdGhhdCdzIGEga2V5IGRpc3RpbmN0aW9uLiBOb3csIHRoZSBjb250ZXh0IGhhcyBzaGlmdGVkIGEgbGl0dGxlLCBJJ20gdGhpbmtpbmcgYWJvdXQgYEZJRlJFRVpFYCBvcGVyYXRpbmcgZGlyZWN0bHkgb24gYSBibG9jayBkZXZpY2UgLSB0aGF0IHJhaXNlcyBhIGZsYWcuIEkgbmVlZCB0byBiZSBzdXJlLiBTbywgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgaW4gYGJsb2NrL2lvY3RsLmNgLiBMZXQncyBnZXQgdGhlIGZ1bGwgc3RvcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNjQwLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTg6NTYuNTU3Mjg2Njg0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQxNTI3ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkZJRlJFRVpFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzcnEucnN0PTk3PUNvbW1hbmRcXHQgICAgRnVuY3Rpb25cXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzcnEucnN0LTExOC1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c3JxLnJzdDoxMTk6YGBqYGBcXHQgICAgRm9yY2libHkgXFxcIkp1c3QgdGhhdyBpdFxcXCIgLSBmaWxlc3lzdGVtcyBmcm96ZW4gYnkgdGhlIEZJRlJFRVpFIGlvY3RsLlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzcnEucnN0LTEyMC1cXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzcnEucnN0PTIxMT1wcm9jZXNzZXMuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c3JxLnJzdC0yMTMtXFxcImp1c3QgdGhhdyBgYGl0KGopYGBcXFwiIGlzIHVzZWZ1bCBpZiB5b3VyIHN5c3RlbSBiZWNvbWVzIHVucmVzcG9uc2l2ZSBkdWUgdG8gYVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzcnEucnN0OjIxNDpmcm96ZW4gKHByb2JhYmx5IHJvb3QpIGZpbGVzeXN0ZW0gdmlhIHRoZSBGSUZSRUVaRSBpb2N0bC5cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c3JxLnJzdC0yMTUtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3Q9MjIwPW9yIGJvdHRvbSBoYWxmKS5cXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdC0yOTItXFx0Y29uc2lzdGVudCBzdGF0ZS4gIFRoaXMgbWV0aG9kIGlzIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBMb2dpY2FsXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0OjI5MzpcXHRWb2x1bWUgTWFuYWdlciAoTFZNKSBhbmQgaW9jdGwoRklGUkVFWkUpLiBPcHRpb25hbC5cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QtMjk0LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvc3lzcnEucnN0PTUzPUNPTkZJR19NQUdJQ19TWVNSUV9ERUZBVUxUX0VOQUJMRSDlv4XpobvmmK/ku6UgMTYg6L+b5Yi25pWw5YaZ5YWl44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9hZG1pbi1ndWlkZS9zeXNycS5yc3QtMTE1LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2FkbWluLWd1aWRlL3N5c3JxLnJzdDoxMTY6YGBqYGBcXHQgICAg5by65Yi25oCn55qEIOKAnOino+WGu+Wug+KAnSAtIOeUqOS6juiiqyBGSUZSRUVaRSBpb2N0bCDmk43kvZzlhrvkvY/nmoTmlofku7bns7vnu5/jgIJcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9hZG1pbi1ndWlkZS9zeXNycS5yc3QtMTE3LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvc3lzcnEucnN0PTE5ND1zeXNsb2dkL2tsb2dkIOi/m+eoi+aYr+i/kOihjOeahO+8jOWug+S7rOS7jeWwhuiiq+iusOW9leOAgu+8iVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYWRtaW4tZ3VpZGUvc3lzcnEucnN0LTE5OC1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9hZG1pbi1ndWlkZS9zeXNycS5yc3Q6MTk5OlxcXCJqdXN0IHRoYXcgYGBpdChqKWBgIFxcXCIg55So5LqO5b2T5L2g55qE57O757uf55Sx5LqO5LiA5LiqIEZJRlJFRVpFIGlvY3RsIOiwg+eUqOiAjOS6p+eUn+eahOaWh+S7tlxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2FkbWluLWd1aWRlL3N5c3JxLnJzdC0yMDAt57O757uf5Ya757uT77yM6ICM5a+86Ie055qE5LiN5ZON5bqU5pe244CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9hZG1pbi1ndWlkZS9zeXNycS5yc3Q9NTM9Q09ORklHX01BR0lDX1NZU1JRX0RFRkFVTFRfRU5BQkxFIOW/hemgiOaYr+S7pSAxNiDpgLLliLbmlbjlr6vlhaXjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2FkbWluLWd1aWRlL3N5c3JxLnJzdC0xMTUtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvc3lzcnEucnN0OjExNjpgYGpgYFxcdCAgICDlvLfliLbmgKfnmoQg4oCc6Kej5YeN5a6D4oCdIC0g55So5pa86KKrIEZJRlJFRVpFIGlvY3RsIOaTjeS9nOWHjeS9j+eahOaWh+S7tuezu+e1seOAglxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2FkbWluLWd1aWRlL3N5c3JxLnJzdC0xMTctXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9hZG1pbi1ndWlkZS9zeXNycS5yc3Q9MTk0PXN5c2xvZ2Qva2xvZ2Qg6YCy56iL5piv6YGL6KGM55qE77yM5a6D5YCR5LuN5bCH6KKr6KiY6YyE44CC77yJXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9hZG1pbi1ndWlkZS9zeXNycS5yc3QtMTk4LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2FkbWluLWd1aWRlL3N5c3JxLnJzdDoxOTk6XFxcImp1c3QgdGhhdyBgYGl0KGopYGAgXFxcIiDnlKjmlrznlbbkvaDnmoTns7vntbHnlLHmlrzkuIDlgIsgRklGUkVFWkUgaW9jdGwg6Kq/55So6ICM55Si55Sf55qE5paH5Lu2XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvYWRtaW4tZ3VpZGUvc3lzcnEucnN0LTIwMC3ns7vntbHlh43ntZDvvIzogIzlsI7oh7TnmoTkuI3pn7/mh4nmmYLjgIJcXG4tLVxcbmZzL2lvY3RsLmM9NDkyPXN0YXRpYyBpbnQgZG9fdmZzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgZmQsXFxuLS1cXG5mcy9pb2N0bC5jLTUyMy1cXG5mcy9pb2N0bC5jOjUyNDpcXHRjYXNlIEZJRlJFRVpFOlxcbmZzL2lvY3RsLmMtNTI1LVxcdFxcdHJldHVybiBpb2N0bF9mc2ZyZWV6ZShmaWxwKTtcXG4tLVxcbmZzL3hmcy9saWJ4ZnMveGZzX2ZzLmg9MTE2Nz1zdHJ1Y3QgeGZzX3ZlcmlmeV9tZWRpYSB7XFxuLS1cXG5mcy94ZnMvbGlieGZzL3hmc19mcy5oLTEyNjAtXFxuZnMveGZzL2xpYnhmcy94ZnNfZnMuaDoxMjYxOiNkZWZpbmUgWEZTX0lPQ19GUkVFWkVcXHRcXHQgICAgIF9JT1dSKCdYJywgMTE5LCBpbnQpXFx0LyogYWthIEZJRlJFRVpFICovXFxuZnMveGZzL2xpYnhmcy94ZnNfZnMuaC0xMjYyLSNkZWZpbmUgWEZTX0lPQ19USEFXXFx0XFx0ICAgICBfSU9XUignWCcsIDEyMCwgaW50KVxcdC8qIGFrYSBGSVRIQVcgKi9cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oPTIyNj1zdHJ1Y3QgZmlsZV9hdHRyIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oLTMxNS0jZGVmaW5lIEZJR0VUQlNaICAgX0lPKDB4MDAsMilcXHQvKiBnZXQgdGhlIGJsb2NrIHNpemUgdXNlZCBmb3IgYm1hcCAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oOjMxNjojZGVmaW5lIEZJRlJFRVpFXFx0X0lPV1IoJ1gnLCAxMTksIGludClcXHQvKiBGcmVlemUgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0zMTctI2RlZmluZSBGSVRIQVdcXHRcXHRfSU9XUignWCcsIDEyMCwgaW50KVxcdC8qIFRoYXcgKi9cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9sYW5kbG9jay5oPTI0OD1zdHJ1Y3QgbGFuZGxvY2tfbmV0X3BvcnRfYXR0ciB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbGFuZGxvY2suaC0zMDQtICogICAqIElPQ1RMIGNvbW1hbmRzIHRhcmdldGluZyBmaWxlIGRlc2NyaXB0aW9ucyAoYGBGSU9OQklPYGAsIGBgRklPQVNZTkNgYCksXFxuaW5jbHVkZS91YXBpL2xpbnV4L2xhbmRsb2NrLmg6MzA1OiAqICAgKiBJT0NUTCBjb21tYW5kcyB0YXJnZXRpbmcgZmlsZSBzeXN0ZW1zIChgYEZJRlJFRVpFYGAsIGBgRklUSEFXYGAsXFxuaW5jbHVkZS91YXBpL2xpbnV4L2xhbmRsb2NrLmgtMzA2LSAqICAgICBgYEZJR0VUQlNaYGAsIGBgRlNfSU9DX0dFVEZTVVVJRGBgLCBgYEZTX0lPQ19HRVRGU1NZU0ZTUEFUSGBgKVxcbi0tXFxuc2VjdXJpdHkvbGFuZGxvY2svZnMuYz0xMjc9c3RhdGljIF9fYXR0cmlidXRlX2NvbnN0X18gYm9vbCBpc19tYXNrZWRfZGV2aWNlX2lvY3RsKGNvbnN0IHVuc2lnbmVkIGludCBjbWQpXFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9mcy5jLTE0Ny1cXHQvKlxcbnNlY3VyaXR5L2xhbmRsb2NrL2ZzLmM6MTQ4OlxcdCAqIEZJRlJFRVpFIGFuZCBGSVRIQVcgZnJlZXplIGFuZCB0aGF3IHRoZSBmaWxlIHN5c3RlbSB3aGljaCB0aGVcXG5zZWN1cml0eS9sYW5kbG9jay9mcy5jLTE0OS1cXHQgKiBnaXZlbiBmaWxlIGJlbG9uZ3MgdG8uICBSZXF1aXJlcyBDQVBfU1lTX0FETUlOLlxcbi0tXFxuc2VjdXJpdHkvbGFuZGxvY2svZnMuYy0xNTUtXFx0ICovXFxuc2VjdXJpdHkvbGFuZGxvY2svZnMuYzoxNTY6XFx0Y2FzZSBGSUZSRUVaRTpcXG5zZWN1cml0eS9sYW5kbG9jay9mcy5jLTE1Ny1cXHRjYXNlIEZJVEhBVzpcXG4tLVxcbnRvb2xzL2h2L2h2X3Zzc19kYWVtb24uYz0zND1zdGF0aWMgaW50IHZzc19kb19mcmVlemUoY2hhciAqZGlyLCB1bnNpZ25lZCBpbnQgY21kKVxcbi0tXFxudG9vbHMvaHYvaHZfdnNzX2RhZW1vbi5jLTUyLVxcdGlmIChyZXQpIHtcXG50b29scy9odi9odl92c3NfZGFlbW9uLmM6NTM6XFx0XFx0aWYgKChjbWQgPT0gRklGUkVFWkUgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUJVU1kpIHx8XFxudG9vbHMvaHYvaHZfdnNzX2RhZW1vbi5jLTU0LVxcdFxcdCAgICAoY21kID09IEZJVEhBVyBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFSU5WQUwpKSB7XFxuLS1cXG50b29scy9odi9odl92c3NfZGFlbW9uLmM9MTEzPXN0YXRpYyBpbnQgdnNzX29wZXJhdGUoaW50IG9wZXJhdGlvbilcXG4tLVxcbnRvb2xzL2h2L2h2X3Zzc19kYWVtb24uYy0xMjUtXFx0Y2FzZSBWU1NfT1BfRlJFRVpFOlxcbnRvb2xzL2h2L2h2X3Zzc19kYWVtb24uYzoxMjY6XFx0XFx0Y21kID0gRklGUkVFWkU7XFxudG9vbHMvaHYvaHZfdnNzX2RhZW1vbi5jLTEyNy1cXHRcXHRicmVhaztcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oPTE0Mj1zdHJ1Y3QgZnN4YXR0ciB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0yMjItI2RlZmluZSBGSUdFVEJTWiAgIF9JTygweDAwLDIpXFx0LyogZ2V0IHRoZSBibG9jayBzaXplIHVzZWQgZm9yIGJtYXAgKi9cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvZnMuaDoyMjM6I2RlZmluZSBGSUZSRUVaRVxcdF9JT1dSKCdYJywgMTE5LCBpbnQpXFx0LyogRnJlZXplICovXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMjI0LSNkZWZpbmUgRklUSEFXXFx0XFx0X0lPV1IoJ1gnLCAxMjAsIGludClcXHQvKiBUaGF3ICovXFxuLS1cXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaD0yMjY9c3RydWN0IGZpbGVfYXR0ciB7XFxuLS1cXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0zMTUtI2RlZmluZSBGSUdFVEJTWiAgIF9JTygweDAwLDIpXFx0LyogZ2V0IHRoZSBibG9jayBzaXplIHVzZWQgZm9yIGJtYXAgKi9cXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaDozMTY6I2RlZmluZSBGSUZSRUVaRVxcdF9JT1dSKCdYJywgMTE5LCBpbnQpXFx0LyogRnJlZXplICovXFxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMzE3LSNkZWZpbmUgRklUSEFXXFx0XFx0X0lPV1IoJ1gnLCAxMjAsIGludClcXHQvKiBUaGF3ICovXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9sYW5kbG9jay9mc190ZXN0LmM9NDAyMD1URVNUX0ZfRk9SSyhsYXlvdXQxLCBibGFua2V0X3Blcm1pdHRlZF9pb2N0bHMpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9sYW5kbG9jay9mc190ZXN0LmMtNDAzOC1cXHRFWFBFQ1RfTkUoRUFDQ0VTLCBpb2N0bF9lcnJvcihfbWV0YWRhdGEsIGZkLCBGSU9RU0laRSkpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xhbmRsb2NrL2ZzX3Rlc3QuYzo0MDM5OlxcdEVYUEVDVF9ORShFQUNDRVMsIGlvY3RsX2Vycm9yKF9tZXRhZGF0YSwgZmQsIEZJRlJFRVpFKSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGFuZGxvY2svZnNfdGVzdC5jLTQwNDAtXFx0RVhQRUNUX05FKEVBQ0NFUywgaW9jdGxfZXJyb3IoX21ldGFkYXRhLCBmZCwgRklUSEFXKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDEwOjE4OjU4Ljg5ODgyMjkzNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTU5MDg3NzUwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRklGUkVFWkUgTWVjaGFuaXNtKipcblxuUmlnaHQsIHNvIGBGSUZSRUVaRWAgaXMgdGhlIHN5c2NhbGwgd2UncmUgZGVhbGluZyB3aXRoIGhlcmUsIGFuZCB0aGUga2VybmVsIHVzZXMgYGlvY3RsX2ZzZnJlZXplYCB0byBoYW5kbGUgaXQuIFRoYXQgaW1tZWRpYXRlbHkgY2xpY2tzIGZvciBtZTsgYGlvY3RsX2ZzZnJlZXplYCBpcyB0aGUgb2J2aW91cyBwbGFjZSB0byBsb29rIGZvciB0aGUgbWVhdCBvZiB0aGUgZnVuY3Rpb25hbGl0eS4gTGV0J3MgZGlnIGludG8gdGhhdCBmdW5jdGlvbi4gVGltZSB0byBzZWUgcHJlY2lzZWx5IGhvdyB0aGUga2VybmVsIG9yY2hlc3RyYXRlcyB0aGlzIGZpbGUgc3lzdGVtIGZyZWV6aW5nLiBXaGF0IGFyZSB0aGUga2V5IGxvY2tpbmcgbWVjaGFuaXNtcyBiZWluZyBlbXBsb3llZD8gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgdW5kZXJseWluZyBibG9jayBkZXZpY2UgbGF5ZXJzPyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyB0byBlbnN1cmUgdGhpcyBmcmVlemluZyBhbmQgdGhhd2luZyBwcm9jZXNzIGlzIHJvYnVzdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuZm9yZXNlZW4gaXNzdWVzIGluIG15IHN5c3RlbSBkZXNpZ24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MjgwLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTk6MTQuNDg5NzAyNzc0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjcyNzUyMzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvY3RsX2ZzZnJlZXplXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lvY3RsLmM9MzYzPXN0YXRpYyBpbnQgaW9jdGxfZmlvYXN5bmModW5zaWduZWQgaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCxcXG4tLVxcbmZzL2lvY3RsLmMtMzg0LVxcbmZzL2lvY3RsLmM6Mzg1OnN0YXRpYyBpbnQgaW9jdGxfZnNmcmVlemUoc3RydWN0IGZpbGUgKmZpbHApXFxuZnMvaW9jdGwuYy0zODYte1xcbi0tXFxuZnMvaW9jdGwuYz00OTI9c3RhdGljIGludCBkb192ZnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBmZCxcXG4tLVxcbmZzL2lvY3RsLmMtNTI0LVxcdGNhc2UgRklGUkVFWkU6XFxuZnMvaW9jdGwuYzo1MjU6XFx0XFx0cmV0dXJuIGlvY3RsX2ZzZnJlZXplKGZpbHApO1xcbmZzL2lvY3RsLmMtNTI2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxOToxNy4xNjI0NjIxOTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1NTAzMzQzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGlvY3RsX2ZzZnJlZXplYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGl0J3MgYWNoaWV2aW5nLiBJJ20gYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBnZW5lcmFsIGxhbmRzY2FwZSBvZiBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgYW5kIGlvY3RsIGNhbGxzLCBidXQgdGhlIHNwZWNpZmljcyBvZiBgZnNmcmVlemVgIGFyZSB3aGF0IEknbSBmb2N1c2luZyBvbiBub3cuIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBjb25zaXN0ZW5jeSBhbmQgZGF0YSBpbnRlZ3JpdHkuIFdoYXQgYXJlIHRoZSBrZXkgdW5kZXJseWluZyBtZWNoYW5pc21zPyBXaGF0IGRvZXMgdGhpcyBtZWFuIGZvciBhIGxpdmUgc3lzdGVtPyBJdCdzIGNsZWFybHkgcmVsYXRlZCB0byBmcmVlemluZyBhIGZpbGVzeXN0ZW0sIGJ1dCBJIG5lZWQgdG8gZ3Jhc3AgdGhlIG51YW5jZXMg4oCTIGRvZXMgdGhpcyBpbnZvbHZlIGEgc2ltcGxlIHBhdXNlIGluIG9wZXJhdGlvbnMsIG9yIG1vcmUgZWxhYm9yYXRlIGNvb3JkaW5hdGlvbiB3aXRoIHRoZSBibG9jayBsYXllcj8gQXJlIHRoZXJlIGRpZmZlcmVudCBsZXZlbHMgb2YgZnJlZXppbmcgc3VwcG9ydGVkPyBJIG5lZWQgdG8gY29uc2lkZXIgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGxvY2tpbmcgc3RyYXRlZ2llcyB0aGF0IGFyZSBpbXBsZW1lbnRlZCB0byBlbnN1cmUgdGhlIGZyZWV6ZSBpcyBhdG9taWMgYW5kIHNhZmUuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBmcmVlemUvdGhhdyBpcyBpbXBvcnRhbnQgaW4gYXJlYXMgbGlrZSBiYWNrdXBzIGFuZCBzbmFwc2hvdHMuIEl0IHdpbGwgYmUgaW50ZXJlc3RpbmcgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBkZXNpZ25lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU2NTksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxOToyMS4xMTc0OTgyOTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2lvY3RsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzg1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzg1OlxcdHN0YXRpYyBpbnQgaW9jdGxfZnNmcmVlemUoc3RydWN0IGZpbGUgKmZpbHApXFxuIDM4NjpcXHR7XFxuIDM4NzpcXHRcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZmlsZV9pbm9kZShmaWxwKS1cXHUwMDNlaV9zYjtcXG4gMzg4OlxcdFxcbiAzODk6XFx0XFx0aWYgKCFuc19jYXBhYmxlKHNiLVxcdTAwM2VzX3VzZXJfbnMsIENBUF9TWVNfQURNSU4pKVxcbiAzOTA6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gMzkxOlxcdFxcbiAzOTI6XFx0XFx0LyogSWYgZmlsZXN5c3RlbSBkb2Vzbid0IHN1cHBvcnQgZnJlZXplIGZlYXR1cmUsIHJldHVybi4gKi9cXG4gMzkzOlxcdFxcdGlmIChzYi1cXHUwMDNlc19vcC1cXHUwMDNlZnJlZXplX2ZzID09IE5VTEwgXFx1MDAyNlxcdTAwMjYgc2ItXFx1MDAzZXNfb3AtXFx1MDAzZWZyZWV6ZV9zdXBlciA9PSBOVUxMKVxcbiAzOTQ6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiAzOTU6XFx0XFxuIDM5NjpcXHRcXHQvKiBGcmVlemUgKi9cXG4gMzk3OlxcdFxcdGlmIChzYi1cXHUwMDNlc19vcC1cXHUwMDNlZnJlZXplX3N1cGVyKVxcbiAzOTg6XFx0XFx0XFx0cmV0dXJuIHNiLVxcdTAwM2VzX29wLVxcdTAwM2VmcmVlemVfc3VwZXIoc2IsIEZSRUVaRV9IT0xERVJfVVNFUlNQQUNFLCBOVUxMKTtcXG4gMzk5OlxcdFxcdHJldHVybiBmcmVlemVfc3VwZXIoc2IsIEZSRUVaRV9IT0xERVJfVVNFUlNQQUNFLCBOVUxMKTtcXG4gNDAwOlxcdH1cXG4gNDAxOlxcdFxcbiA0MDI6XFx0c3RhdGljIGludCBpb2N0bF9mc3RoYXcoc3RydWN0IGZpbGUgKmZpbHApXFxuIDQwMzpcXHR7XFxuIDQwNDpcXHRcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZmlsZV9pbm9kZShmaWxwKS1cXHUwMDNlaV9zYjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTk6MjEuMTE3NjE1MTQxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MDk3OTkyMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipGcmVlemluZyB0aGUgRmlsZXN5c3RlbTogQSBDbG9zZXIgTG9vayoqXG5cblJpZ2h0LCBzbyBgaW9jdGxfZnNmcmVlemVgIGluaXRpYXRlcyB0aGUgZmlsZXN5c3RlbSBmcmVlemUgYnkgY2FsbGluZyBgZnJlZXplX3N1cGVyYC4gVGhhdCdzIHRoZSBleHBlY3RlZCBzdGFydGluZyBwb2ludC4gQnV0IEknbSBub3RpY2luZyBzb21ldGhpbmc6IGl0ICpkb2Vzbid0KiBhcHBlYXIgdG8gZGlyZWN0bHkgY2FsbCBgYmRldl9mcmVlemVgIG9yIGBmc19iZGV2X2ZyZWV6ZWAuIFRoYXQncyBhIGJpdCB1bnVzdWFsOyBJIHdvdWxkIGhhdmUgYXNzdW1lZCB0aG9zZSB3ZXJlIGludGVncmFsIHRvIGEgY29tcGxldGUgZnJlZXplIHNlcXVlbmNlLlxuXG5Ib2xkIG9uLCB0aG91Z2guLi4gZGlkbid0IEkgc2VlIGBiZGV2X2ZyZWV6ZWAgbWVudGlvbmVkIHNvbWV3aGVyZSBlbHNlPyBBaCwgeWVzISBgZXhmYXRfZm9yY2Vfc2h1dGRvd25gIHV0aWxpemVzIGBiZGV2X2ZyZWV6ZWAgYW5kIHByZXN1bWFibHkgb3RoZXIgbW9kdWxlcyB0b28uIEludGVyZXN0aW5nLiBJdCBzZWVtcyBsaWtlIHRoZSBibG9jayBkZXZpY2UgZnJlZXplIGlzIGhhbmRsZWQgc2VwYXJhdGVseSwgcGVyaGFwcyB1bmRlciBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzLiBHaXZlbiB0aGF0LCBJIHNob3VsZCBkaWcgaW50byBgZXhmYXRfZm9yY2Vfc2h1dGRvd25gIHRvIHNlZSB3aGVuIGFuZCB3aHkgYGJkZXZfZnJlZXplYCBpcyBiZWluZyBpbnZva2VkIHRoZXJlLiBUaGlzIGNvdWxkIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBmcmVlemluZyBwcm9jZXNzIGFuZCBpZGVudGlmeWluZyBhbnkgcG90ZW50aWFsIGdhcHMgb3IgaW5lZmZpY2llbmNpZXMgaW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBzcGVjaWFsIGFib3V0IGBleGZhdGAgc3VjaCB0aGF0IGl0IHVzZXMgYGJkZXZfZnJlZXplYCBleHBsaWNpdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjI0MiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTk6MjQuODI3NDE2NzA4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzYwMjIwMTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4ZmF0X2ZvcmNlX3NodXRkb3duXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4ZmF0L2V4ZmF0X2ZzLmg9NTY5PWxvbmcgZXhmYXRfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLFxcbmZzL2V4ZmF0L2V4ZmF0X2ZzLmgtNTcwLVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYXJnKTtcXG5mcy9leGZhdC9leGZhdF9mcy5oOjU3MTppbnQgZXhmYXRfZm9yY2Vfc2h1dGRvd24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGZsYWdzKTtcXG5mcy9leGZhdC9leGZhdF9mcy5oLTU3Mi1cXG4tLVxcbmZzL2V4ZmF0L2ZpbGUuYz01NDU9c3RhdGljIGludCBleGZhdF9pb2N0bF9zaHV0ZG93bihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmZzL2V4ZmF0L2ZpbGUuYy01NTQtXFxuZnMvZXhmYXQvZmlsZS5jOjU1NTpcXHRyZXR1cm4gZXhmYXRfZm9yY2Vfc2h1dGRvd24oc2IsIGZsYWdzKTtcXG5mcy9leGZhdC9maWxlLmMtNTU2LX1cXG4tLVxcbmZzL2V4ZmF0L3N1cGVyLmM9MTE2PXN0YXRpYyBpbnQgZXhmYXRfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqcm9vdClcXG4tLVxcbmZzL2V4ZmF0L3N1cGVyLmMtMTU0LVxcbmZzL2V4ZmF0L3N1cGVyLmM6MTU1OmludCBleGZhdF9mb3JjZV9zaHV0ZG93bihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgZmxhZ3MpXFxuZnMvZXhmYXQvc3VwZXIuYy0xNTYte1xcbi0tXFxuZnMvZXhmYXQvc3VwZXIuYz0xODU9c3RhdGljIHZvaWQgZXhmYXRfc2h1dGRvd24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9leGZhdC9zdXBlci5jLTE4Ni17XFxuZnMvZXhmYXQvc3VwZXIuYzoxODc6XFx0ZXhmYXRfZm9yY2Vfc2h1dGRvd24oc2IsIEVYRkFUX0dPSU5HX0RPV05fTk9TWU5DKTtcXG5mcy9leGZhdC9zdXBlci5jLTE4OC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDEwOjE5OjI3LjE4NzY0NDI0OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjgxNDg0Mzk1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgZXhGQVQgU2h1dGRvd24gTWVjaGFuaXNtKipcblxuT2theSwgc28gSSd2ZSB0cmFjZWQgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCBpdCBsb29rcyBsaWtlIGBleGZhdF9mb3JjZV9zaHV0ZG93bmAgZ2V0cyBjYWxsZWQgdGhyb3VnaCBgZXhmYXRfaW9jdGxfc2h1dGRvd25gLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhhdCBtZWFucyB0aGUgYEVYRkFUX0lPQ19TSFVURE9XTmAgaW9jdGwsIGFzIHdlbGwgYXMgc2ltaWxhciBpb2N0bHMgZnJvbSBvdGhlciBmaWxlc3lzdGVtcywgY2FuIHRyaWdnZXIgYGJkZXZfZnJlZXplYC4gVWx0aW1hdGVseSwgYGJkZXZfZnJlZXplYCB0aGVuIGNhbGxzIGBmc19iZGV2X2ZyZWV6ZWAuXG5cbk5vdywgdGhlIGNydWNpYWwgbGluayBpcyB0aGF0IGBmc19iZGV2X2ZyZWV6ZWAgaXMgaW52b2tlZCB3aGVuIGBiZGV2X2ZyZWV6ZWAgaXMgY2FsbGVkIG9uIGEgYmxvY2sgZGV2aWNlIHRoYXQgaGFzIGBmc19ob2xkZXJfb3BzYC4gQW5kLCBhcyBJIHJlY2FsbCwgd2hlbiBleEZBVCBtb3VudHMgYSBibG9jayBkZXZpY2UsIGl0IGRvZXMgc28gdXNpbmcgYGZzX2hvbGRlcl9vcHNgLiBTbywgYSBgYmRldl9mcmVlemVgIGNhbGwgb24gYHNiLVx1MDAzZXNfYmRldmAgd2lsbCwgaW4gZmFjdCwgaW52b2tlIGBmc19iZGV2X2ZyZWV6ZWAuIFRoYXQncyB0aGUgY29yZS5cblxuTGV0IG1lIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGBmc19iZGV2X2ZyZWV6ZWA6IGl0IHJldHJpZXZlcyB0aGUgc3VwZXJibG9jaywgY2hlY2tzIGZvciBpdHMgZXhpc3RlbmNlLCBhbmQgdGhlbiBjYWxscyB0aGUgc3VwZXJibG9jaydzIGBmcmVlemVfc3VwZXJgIGZ1bmN0aW9uLiBJZiB0aGF0IHN1Y2NlZWRzLCBpdCBzeW5jaHJvbml6ZXMgdGhlIGJsb2NrIGRldmljZSBhbmQgaGFuZGxlcyBhbnkgZXJyb3JzIGJ5IHRoYXdpbmcgdGhlIHN1cGVyYmxvY2suIFRoaXMgY29kZSBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgd2lsbCB3b3JrLiBUaGUgcGF0Y2ggaW4gYGZzL2V4ZmF0L21pc2MuY2AgY29uZmlybXMgdGhpcy5cblxuYGBgY1xuc3RhdGljIGludCBmc19iZGV2X2ZyZWV6ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxue1xuXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZ2V0X2JkZXZfc3VwZXIoYmRldik7XG5cdGludCBlcnJvciA9IDA7XG5cblx0aWYgKCFzYilcblx0XHRyZXR1cm4gLUVJTlZBTDtcblxuXHRpZiAoc2ItXHUwMDNlc19vcC1cdTAwM2VmcmVlemVfc3VwZXIpXG5cdFx0ZXJyb3IgPSBzYi1cdTAwM2VzX29wLVx1MDAzZWZyZWV6ZV9zdXBlcihzYixcblx0XHRcdFx0RlJFRVpFX01BWV9ORVNUIHwgRlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UsIE5VTEwpO1xuXHRlbHNlXG5cdFx0ZXJyb3IgPSBmcmVlemVfc3VwZXIoc2IsXG5cdFx0XHRcdEZSRUVaRV9NQVlfTkVTVCB8IEZSRUVaRV9IT0xERVJfVVNFUlNQQUNFLCBOVUxMKTtcblx0aWYgKCFlcnJvcikge1xuXHRcdGVycm9yID0gc3luY19ibG9ja2RldihiZGV2KTtcblx0XHRpZiAoZXJyb3IpIHtcblx0XHRcdGlmIChzYi1cdTAwM2VzX29wLVx1MDAzZXRoYXdfc3VwZXIpXG5cdFx0XHRcdCh2b2lkKXNiLVx1MDAzZXNfb3AtXHUwMDNldGhhd19zdXBlcihcblx0XHRcdFx0XHRzYixcblx0XHRcdFx0XHRGUkVFWkVfTUFZX05FU1QgfFxuXHRcdFx0XHRcdFx0RlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UsXG5cdFx0XHRcdFx0TlVMTCk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdCh2b2lkKXRoYXdfc3VwZXIoXG5cdFx0XHRcdFx0c2IsXG5cdFx0XHRcdFx0RlJFRVpFX01BWV9ORVNUIHxcblx0XHRcdFx0XHRcdEZSRUVaRV9IT0xERVJfVVNFUlNQQUNFLFxuXHRcdFx0XHRcdE5VTEwpO1xuXHRcdH1cblx0fVxuXHRkZWFjdGl2YXRlX3N1cGVyKHNiKTtcblx0cmV0dXJuIGVycm9yO1xufVxuYGBgXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgZXhmYXQgZXJyb3IgaGFuZGxpbmcuIFdlJ3JlIGludGVyZXN0ZWQgaW4gdGhlIGBfX2V4ZmF0X2ZzX2Vycm9yYCBmdW5jdGlvbi5cblxuYGBgY1xudm9pZCBfX2V4ZmF0X2ZzX2Vycm9yKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCByZXBvcnQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxue1xuLi4uXG5cdH0gZWxzZSBpZiAob3B0cy1cdTAwM2VlcnJvcnMgPT0gRVhGQVRfRVJST1JTX1JPIFx1MDAyNlx1MDAyNiAhc2JfcmRvbmx5KHNiKSkge1xuXHRcdHNldF9iaXQoRVhGQVRfRkxBR1NfU0hVVERPV04sIFx1MDAyNkVYRkFUX1NCKHNiKS1cdTAwM2VzX2V4ZmF0X2ZsYWdzKTtcblx0XHQvKlxuXHRcdCAqIFdlIGhhdmUgYWxyZWFkeSBzZXQgRVhGQVRfRkxBR1NfU0hVVERPV04gZmxhZyB0byBzdG9wIGFsbCB1cGRhdGVzXG5cdFx0ICogdG8gZmlsZXN5c3RlbSwgc28gaXQgZG9lc24ndCBuZWVkIHRvIHNldCBTQl9SRE9OTFkgZmxhZyBoZXJlXG5cdFx0ICogYmVjYXVzZSB0aGUgZmxhZyBzaG91bGQgYmUgc2V0IGNvdmVyZWQgdy8gc2ItXHUwMDNlc191bW91bnQgc2VtYXBob3JlXG5cdFx0ICogdmlhIHJlbW91bnQgcHJvY2VkdXJlLCBvdGhlcndpc2UsIGl0IHdpbGwgY29uZnVzZSBjb2RlIGxpa2Vcblx0XHQgKiBmcmVlemVfc3VwZXIoKSB3aGljaCB3aWxsIGxlYWQgdG8gZGVhZGxvY2tzIGFuZCBvdGhlciBwcm9ibGVtcy5cblx0XHQgKi9cblx0XHRleGZhdF9lcnIoc2IsIFwiRmlsZXN5c3RlbSBoYXMgYmVlbiBzZXQgcmVhZC1vbmx5XCIpO1xuXHR9XG59XG5gYGBcblxuVGhpcyBnZXRzIGNhbGxlZCB3aGVuIGFuIGVycm9yIG9jY3VycyBpbiBleEZBVCBhbmQgdGhlIGBlcnJvcnM9cmVtb3VudC1yb2Agb3B0aW9uIGlzIHNldC4gU28sIHdlIGhhdmUgdHdvIGxpa2VseSBlbnRyeSBwb2ludHM6IGBmc19iZGV2X2ZyZWV6ZWAgKHRyaWdnZXJlZCBieSB0aGUgaW9jdGwpIGFuZCBgX19leGZhdF9mc19lcnJvcmAgKHRyaWdnZXJlZCBieSBhbiBlcnJvcikuIFRoaXMgbWVhbnMgdGhlIGZvY3VzIHNob3VsZCBiZSBvbiB0aGVzZSB0d28gYXJlYXMuXG5cbkxldCBtZSBjb25maXJtIGlmIGBmc19iZGV2X2ZyZWV6ZWAgaW4gYGZzL3N1cGVyLmNgIGlzIGV4cG9ydGVkIG9yIGlmIGl0IGNhbiBiZSBtb2RpZmllZCBlYXNpbHkuIFllcywgaXQncyBhIHN0YXRpYyBmdW5jdGlvbiBzbyB3ZSBjYW4gbW9kaWZ5IGl0LiBgQ09ORklHX0VYRkFUX0ZTYCBpcywgb2J2aW91c2x5LCByZXF1aXJlZCwgYW5kIGBDT05GSUdfQkxPQ0tgIGlzIG5lZWRlZCBmb3IgdGhlIGJsb2NrIGRldmljZXMuXG5TbywgYEVYRkFUX0ZTYCBpcyB0aGUgbWFpbiBjb25maWcgd2UgbmVlZCB0byB3b3JyeSBhYm91dC4gSSdsbCB0YWtlIGFub3RoZXIgbG9vayBhdCBgZnNfYmRldl9mcmVlemVgIHRvIGVuc3VyZSBteSB1bmRlcnN0YW5kaW5nIGlzIGNvbXBsZXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjk4NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxOTo0MC4wMDI0OTE4NDhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3N1cGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ2MDpcXHQgKiBibG9jayBkZXZpY2UgYW5kIHdvbid0IGJlIHVuZnJvemVuIHVudGlsIGFsbCBibG9jayBkZXZpY2VzIGFyZVxcbjE0NjE6XFx0ICogdW5mcm96ZW4uIEVhY2ggYmxvY2sgZGV2aWNlIGNhbiBvbmx5IGZyZWV6ZSB0aGUgZmlsZXN5c3RlbSBvbmNlIGFzIHdlXFxuMTQ2MjpcXHQgKiBuZXN0IGZyZWV6ZXMgZm9yIGJsb2NrIGRldmljZXMgaW4gdGhlIGJsb2NrIGxheWVyLlxcbjE0NjM6XFx0ICpcXG4xNDY0OlxcdCAqIFJldHVybjogSWYgdGhlIGZyZWV6ZSB3YXMgc3VjY2Vzc2Z1bCB6ZXJvIGlzIHJldHVybmVkLiBJZiB0aGUgZnJlZXplXFxuMTQ2NTpcXHQgKiAgICAgICAgIGZhaWxlZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaXMgcmV0dXJuZWQuXFxuMTQ2NjpcXHQgKi9cXG4xNDY3OlxcdHN0YXRpYyBpbnQgZnNfYmRldl9mcmVlemUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcXG4xNDY4OlxcdHtcXG4xNDY5OlxcdFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2I7XFxuMTQ3MDpcXHRcXHRpbnQgZXJyb3IgPSAwO1xcbjE0NzE6XFx0XFxuMTQ3MjpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZiZGV2LVxcdTAwM2ViZF9mc2ZyZWV6ZV9tdXRleCk7XFxuMTQ3MzpcXHRcXG4xNDc0OlxcdFxcdHNiID0gZ2V0X2JkZXZfc3VwZXIoYmRldik7XFxuMTQ3NTpcXHRcXHRpZiAoIXNiKVxcbjE0NzY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTQ3NzpcXHRcXG4xNDc4OlxcdFxcdGlmIChzYi1cXHUwMDNlc19vcC1cXHUwMDNlZnJlZXplX3N1cGVyKVxcbjE0Nzk6XFx0XFx0XFx0ZXJyb3IgPSBzYi1cXHUwMDNlc19vcC1cXHUwMDNlZnJlZXplX3N1cGVyKHNiLFxcbjE0ODA6XFx0XFx0XFx0XFx0XFx0RlJFRVpFX01BWV9ORVNUIHwgRlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UsIE5VTEwpO1xcbjE0ODE6XFx0XFx0ZWxzZVxcbjE0ODI6XFx0XFx0XFx0ZXJyb3IgPSBmcmVlemVfc3VwZXIoc2IsXFxuMTQ4MzpcXHRcXHRcXHRcXHRcXHRGUkVFWkVfTUFZX05FU1QgfCBGUkVFWkVfSE9MREVSX1VTRVJTUEFDRSwgTlVMTCk7XFxuMTQ4NDpcXHRcXHRpZiAoIWVycm9yKSB7XFxuMTQ4NTpcXHRcXHRcXHRlcnJvciA9IHN5bmNfYmxvY2tkZXYoYmRldik7XFxuMTQ4NjpcXHRcXHRcXHRpZiAoZXJyb3IpIHtcXG4xNDg3OlxcdFxcdFxcdFxcdGlmIChzYi1cXHUwMDNlc19vcC1cXHUwMDNldGhhd19zdXBlcilcXG4xNDg4OlxcdFxcdFxcdFxcdFxcdCh2b2lkKXNiLVxcdTAwM2VzX29wLVxcdTAwM2V0aGF3X3N1cGVyKFxcbjE0ODk6XFx0XFx0XFx0XFx0XFx0XFx0c2IsXFxuMTQ5MDpcXHRcXHRcXHRcXHRcXHRcXHRGUkVFWkVfTUFZX05FU1QgfFxcbjE0OTE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0RlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UsXFxuMTQ5MjpcXHRcXHRcXHRcXHRcXHRcXHROVUxMKTtcXG4xNDkzOlxcdFxcdFxcdFxcdGVsc2VcXG4xNDk0OlxcdFxcdFxcdFxcdFxcdCh2b2lkKXRoYXdfc3VwZXIoXFxuMTQ5NTpcXHRcXHRcXHRcXHRcXHRcXHRzYixcXG4xNDk2OlxcdFxcdFxcdFxcdFxcdFxcdEZSRUVaRV9NQVlfTkVTVCB8XFxuMTQ5NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRGUkVFWkVfSE9MREVSX1VTRVJTUEFDRSxcXG4xNDk4OlxcdFxcdFxcdFxcdFxcdFxcdE5VTEwpO1xcbjE0OTk6XFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxOTo0MC4wMDI2MDk2ODhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjUxODM3MDIzODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlF1aWNrIFNjYW4gb2YgdGhlIFNpdHVhdGlvbioqXG5cbkFscmlnaHQsIHNvIGBmc19iZGV2X2ZyZWV6ZWAgLSBpdCdzIGEgKnN0YXRpYyogZnVuY3Rpb24uIEdvdCBpdC4gVGhhdCBpbW1lZGlhdGVseSBuYXJyb3dzIGRvd24gaXRzIHNjb3BlLiAgSXQncyBub3QgZXhwb3J0ZWQgZ2xvYmFsbHksIHNvIGl0cyB1c2UgaXMgbGlrZWx5IGNvbnRhaW5lZCB3aXRoaW4gYSBzcGVjaWZpYyBtb2R1bGUgb3IgZmlsZSwgd2hpY2ggaXMgdXNlZnVsIHRvIHJlbWVtYmVyLiBOb3csIHdoZXJlIHdhcyB0aGF0IG90aGVyIG9uZT8gIEFoIHllcywgYF9fZXhmYXRfZnNfZXJyb3JgLiBJIGtub3cgdGhhdCBvbmUgdG9vLiBJJ20gcHJldHR5IHN1cmUgaXQgcmVzaWRlcyBpbiBgZnMvZXhmYXQvbWlzYy5jYC4gIFRoYXQgZmlsZSBpcyBsaWtlIGEgY2F0Y2gtYWxsIGZvciB2YXJpb3VzIHV0aWxpdHkgZnVuY3Rpb25zIGluIHRoZSBleEZBVCBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLCBJIGNhbiB2aXN1YWxpemUgdGhlIHN0cnVjdHVyZSBvZiB0aGF0IG9uZSBwcmV0dHkgd2VsbCwgYXQgbGVhc3QgaW4gbXkgaGVhZC4gVGhpbmtpbmcgYWJvdXQgdGhvc2UgZmlsZSBuYW1lcyBhbmQgZnVuY3Rpb25zIGltbWVkaWF0ZWx5IHN0YXJ0cyB0byBwYWludCBhIHBpY3R1cmUgYWJvdXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaW5ncyBpbiB0aGUgY29kZS1iYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTU2NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MjA6MDUuMTg2MzE0NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leGZhdC9taXNjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzA6XFx0XFx0c3RydWN0IHZhX2Zvcm1hdCB2YWY7XFxuICAzMTpcXHRcXG4gIDMyOlxcdFxcdGlmIChyZXBvcnQpIHtcXG4gIDMzOlxcdFxcdFxcdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XFxuICAzNDpcXHRcXHRcXHR2YWYuZm10ID0gZm10O1xcbiAgMzU6XFx0XFx0XFx0dmFmLnZhID0gXFx1MDAyNmFyZ3M7XFxuICAzNjpcXHRcXHRcXHRleGZhdF9lcnIoc2IsIFxcXCJlcnJvciwgJXBWXFxcIiwgXFx1MDAyNnZhZik7XFxuICAzNzpcXHRcXHRcXHR2YV9lbmQoYXJncyk7XFxuICAzODpcXHRcXHR9XFxuICAzOTpcXHRcXG4gIDQwOlxcdFxcdGlmIChvcHRzLVxcdTAwM2VlcnJvcnMgPT0gRVhGQVRfRVJST1JTX1BBTklDKSB7XFxuICA0MTpcXHRcXHRcXHRwYW5pYyhcXFwiZXhGQVQtZnMgKCVzKTogZnMgcGFuaWMgZnJvbSBwcmV2aW91cyBlcnJvclxcXFxuXFxcIixcXG4gIDQyOlxcdFxcdFxcdFxcdHNiLVxcdTAwM2VzX2lkKTtcXG4gIDQzOlxcdFxcdH0gZWxzZSBpZiAob3B0cy1cXHUwMDNlZXJyb3JzID09IEVYRkFUX0VSUk9SU19STyBcXHUwMDI2XFx1MDAyNiAhc2JfcmRvbmx5KHNiKSkge1xcbiAgNDQ6XFx0XFx0XFx0c2V0X2JpdChFWEZBVF9GTEFHU19TSFVURE9XTiwgXFx1MDAyNkVYRkFUX1NCKHNiKS1cXHUwMDNlc19leGZhdF9mbGFncyk7XFxuICA0NTpcXHRcXHRcXHQvKlxcbiAgNDY6XFx0XFx0XFx0ICogV2UgaGF2ZSBhbHJlYWR5IHNldCBFWEZBVF9GTEFHU19TSFVURE9XTiBmbGFnIHRvIHN0b3AgYWxsIHVwZGF0ZXNcXG4gIDQ3OlxcdFxcdFxcdCAqIHRvIGZpbGVzeXN0ZW0sIHNvIGl0IGRvZXNuJ3QgbmVlZCB0byBzZXQgU0JfUkRPTkxZIGZsYWcgaGVyZVxcbiAgNDg6XFx0XFx0XFx0ICogYmVjYXVzZSB0aGUgZmxhZyBzaG91bGQgYmUgc2V0IGNvdmVyZWQgdy8gc2ItXFx1MDAzZXNfdW1vdW50IHNlbWFwaG9yZVxcbiAgNDk6XFx0XFx0XFx0ICogdmlhIHJlbW91bnQgcHJvY2VkdXJlLCBvdGhlcndpc2UsIGl0IHdpbGwgY29uZnVzZSBjb2RlIGxpa2VcXG4gIDUwOlxcdFxcdFxcdCAqIGZyZWV6ZV9zdXBlcigpIHdoaWNoIHdpbGwgbGVhZCB0byBkZWFkbG9ja3MgYW5kIG90aGVyIHByb2JsZW1zLlxcbiAgNTE6XFx0XFx0XFx0ICovXFxuICA1MjpcXHRcXHRcXHRleGZhdF9lcnIoc2IsIFxcXCJGaWxlc3lzdGVtIGhhcyBiZWVuIHNldCByZWFkLW9ubHlcXFwiKTtcXG4gIDUzOlxcdFxcdH1cXG4gIDU0OlxcdH1cXG4gIDU1OlxcdFxcbiAgNTY6XFx0I2RlZmluZSBTRUNTX1BFUl9NSU4gICAgKDYwKVxcbiAgNTc6XFx0I2RlZmluZSBUSU1FWk9ORV9TRUMoeClcXHQoKHgpICogMTUgKiBTRUNTX1BFUl9NSU4pXFxuICA1ODpcXHRcXG4gIDU5OlxcdHN0YXRpYyB2b2lkIGV4ZmF0X2FkanVzdF90eihzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsIHU4IHR6X29mZilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MjA6MDUuMTg2Mzk0NjRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI5MTczNTc4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFByb3Bvc2VkIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZnNfYmRldl9mcmVlemVgIGFuZCBgX19leGZhdF9mc19lcnJvcmAuIFJpZ2h0IGF3YXksIEkgc2VlIHRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMsIG1lYW5pbmcgdGhleSdyZSBub3QganVzdCBjb3NtZXRpYyBvciByZWZhY3RvcmluZywgYnV0IGFjdHVhbGx5ICpjaGFuZ2UqIGhvdyB0aGUgc3lzdGVtIGJlaGF2ZXMuIEdvb2QsIHRoYXQncyB3aGF0IHdlIG5lZWQgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcuXG5cbmBmc19iZGV2X2ZyZWV6ZWAuLi4gYWgsIHRoYXQncyB0aGUgb25lIHRoYXQgd2FzIGxlYXZpbmcgdGhlIHN1cGVyYmxvY2sgZnJvemVuIGFmdGVyIGEgYHN5bmNfYmxvY2tkZXZgIGZhaWx1cmUuIERlZmluaXRlbHkgYSBuYXN0eSBvbmUsIGFuZCBleGFjdGx5IHRoZSBraW5kIG9mIHRoaW5nIHN5emthbGxlciBsb3ZlcyB0byB0cmlwIHVwIG9uLiBFeGNlbGxlbnQuIFRoZSBvdGhlciBvbmUsIGBfX2V4ZmF0X2ZzX2Vycm9yYCwgc291bmRzIGxpa2UgaXQncyBhZGRyZXNzaW5nIGEgZGVhZGxvY2sgc2l0dWF0aW9uIHdoZW4gYFNCX1JET05MWWAgaXMgc2V0IHdpdGhvdXQgdGhlIGBzX3Vtb3VudGAgc2VtYXBob3JlLiBUaGlzIGlzIGFub3RoZXIgY2xhc3NpYy4gQ29uY3VycmVuY3kgYnVncyBhcmUgYWx3YXlzIHByaW1lIHRhcmdldHMuXG5cblBlcmZlY3QsIHRoaXMgaGl0cyB0aGUgc3dlZXQgc3BvdCBvZiBzeXprYWxsZXIncyBzdHJlbmd0aHMuIFdlICp3YW50KiB0byBmdXp6IHRoZXNlIGZpeGVzLlxuXG5MZXQncyBzZWUsIHdoYXQgY29uZmlncyBkbyB3ZSBuZWVkPyBKdXN0IGBFWEZBVF9GU2AuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjay4uLiB5ZXAsIGBDT05GSUdfRVhGQVRfRlNgIGlzIHRoZSBvbmUuIEFsbCBnb29kLlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAzMzcsIk91dHB1dFRva2VucyI6MTY5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MjA6MTEuNDc4MTMzNzM2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyMDAzOTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWEZBVF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZzX2JkZXZfZnJlZXplXCIsXG4gICAgXCJfX2V4ZmF0X2ZzX2Vycm9yXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgVkZTIGJsb2NrIGRldmljZSBmcmVlemluZyBsb2dpYyAoYGZzX2JkZXZfZnJlZXplYCkgdG8gcHJvcGVybHkgdGhhdyB0aGUgc3VwZXJibG9jayBpZiBgc3luY19ibG9ja2RldmAgZmFpbHMsIHByZXZlbnRpbmcgYSBmcm96ZW4gc3RhdGUgbGVhay4gSXQgYWxzbyBtb2RpZmllcyBleGZhdCBlcnJvciBoYW5kbGluZyAoYF9fZXhmYXRfZnNfZXJyb3JgKSB0byBzZXQgYSBzaHV0ZG93biBmbGFnIGluc3RlYWQgb2YgZGlyZWN0bHkgbW9kaWZ5aW5nIGBzYi1cXHUwMDNlc19mbGFnc2Agd2l0aCBgU0JfUkRPTkxZYCB3aXRob3V0IGhvbGRpbmcgdGhlIGBzX3Vtb3VudGAgc2VtYXBob3JlLCB3aGljaCBwcmV2aW91c2x5IGNhdXNlZCBkZWFkbG9ja3Mgd2l0aCBgZnJlZXplX3N1cGVyKClgLiBCb3RoIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYRkFUX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnNfYmRldl9mcmVlemVcIixcbiAgICBcIl9fZXhmYXRfZnNfZXJyb3JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBWRlMgYmxvY2sgZGV2aWNlIGZyZWV6aW5nIGxvZ2ljIChgZnNfYmRldl9mcmVlemVgKSB0byBwcm9wZXJseSB0aGF3IHRoZSBzdXBlcmJsb2NrIGlmIGBzeW5jX2Jsb2NrZGV2YCBmYWlscywgcHJldmVudGluZyBhIGZyb3plbiBzdGF0ZSBsZWFrLiBJdCBhbHNvIG1vZGlmaWVzIGV4ZmF0IGVycm9yIGhhbmRsaW5nIChgX19leGZhdF9mc19lcnJvcmApIHRvIHNldCBhIHNodXRkb3duIGZsYWcgaW5zdGVhZCBvZiBkaXJlY3RseSBtb2RpZnlpbmcgYHNiLVxcdTAwM2VzX2ZsYWdzYCB3aXRoIGBTQl9SRE9OTFlgIHdpdGhvdXQgaG9sZGluZyB0aGUgYHNfdW1vdW50YCBzZW1hcGhvcmUsIHdoaWNoIHByZXZpb3VzbHkgY2F1c2VkIGRlYWRsb2NrcyB3aXRoIGBmcmVlemVfc3VwZXIoKWAuIEJvdGggYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29kZSBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workfloww7rqv[1] Phase: Succeeded StartedAt: 2026-07-21 10:21:19 +0000 UTC FinishedAt: 2026-07-21 10:21:19 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7rqv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-21 10:21:19 +0000 UTC FinishedAt: 2026-07-21 10:21:19 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7rqv[2] Phase: Succeeded StartedAt: 2026-07-21 10:21:19 +0000 UTC FinishedAt: 2026-07-21 14:53:29 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7rqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"62222c22-14fe-488e-8e13-ddcb8200d9ab","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-21 10:21:19 +0000 UTC FinishedAt: 2026-07-21 14:53:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"62222c22-14fe-488e-8e13-ddcb8200d9ab","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workfloww7rqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"62222c22-14fe-488e-8e13-ddcb8200d9ab","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-21 10:21:19 +0000 UTC FinishedAt: 2026-07-21 10:21:46 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7rqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"62222c22-14fe-488e-8e13-ddcb8200d9ab","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-21 10:21:19 +0000 UTC FinishedAt: 2026-07-21 10:21:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workfloww7rqv/series-workfloww7rqv-convert-artifact-2895393077/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww7rqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"62222c22-14fe-488e-8e13-ddcb8200d9ab","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-21 10:21:46 +0000 UTC FinishedAt: 2026-07-21 11:04:31 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7rqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"62222c22-14fe-488e-8e13-ddcb8200d9ab","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-21 10:21:46 +0000 UTC FinishedAt: 2026-07-21 11:04:31 +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:*018da5fe-0d2e-4fbc-98dd-c5694dc27500,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-workfloww7rqv/series-workfloww7rqv-convert-artifact-2895393077/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": "61d7879a-7396-4eb5-94f4-8e3c49304497", "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-workfloww7rqv/series-workfloww7rqv-build-action-33680667/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww7rqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"62222c22-14fe-488e-8e13-ddcb8200d9ab","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-21 10:21:46 +0000 UTC FinishedAt: 2026-07-21 11:04:21 +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:*018da5fe-0d2e-4fbc-98dd-c5694dc27500,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-workfloww7rqv/series-workfloww7rqv-convert-artifact-2895393077/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": "61d7879a-7396-4eb5-94f4-8e3c49304497", "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-workfloww7rqv/series-workfloww7rqv-build-action-33680667/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww7rqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"62222c22-14fe-488e-8e13-ddcb8200d9ab","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-21 11:04:31 +0000 UTC FinishedAt: 2026-07-21 11:04:31 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7rqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"62222c22-14fe-488e-8e13-ddcb8200d9ab","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-21 11:04:31 +0000 UTC FinishedAt: 2026-07-21 11:04:31 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7rqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"62222c22-14fe-488e-8e13-ddcb8200d9ab","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-21 11:04:31 +0000 UTC FinishedAt: 2026-07-21 11:04:41 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7rqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"62222c22-14fe-488e-8e13-ddcb8200d9ab","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-21 11:04:31 +0000 UTC FinishedAt: 2026-07-21 11:04:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"62222c22-14fe-488e-8e13-ddcb8200d9ab","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workfloww7rqv/series-workfloww7rqv-convert-artifact-1192935568/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww7rqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"62222c22-14fe-488e-8e13-ddcb8200d9ab","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-21 11:04:41 +0000 UTC FinishedAt: 2026-07-21 11:07:14 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7rqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"62222c22-14fe-488e-8e13-ddcb8200d9ab","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-21 11:04:41 +0000 UTC FinishedAt: 2026-07-21 11:07:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*61d7879a-7396-4eb5-94f4-8e3c49304497,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-workfloww7rqv/series-workfloww7rqv-build-action-33680667/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-workfloww7rqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"62222c22-14fe-488e-8e13-ddcb8200d9ab","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-21 11:07:14 +0000 UTC FinishedAt: 2026-07-21 11:07:14 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7rqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"62222c22-14fe-488e-8e13-ddcb8200d9ab","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-21 11:07:14 +0000 UTC FinishedAt: 2026-07-21 11:07:14 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7rqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"62222c22-14fe-488e-8e13-ddcb8200d9ab","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-21 11:07:14 +0000 UTC FinishedAt: 2026-07-21 11:48:29 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7rqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"62222c22-14fe-488e-8e13-ddcb8200d9ab","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-21 11:07:14 +0000 UTC FinishedAt: 2026-07-21 11:48:29 +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:*018da5fe-0d2e-4fbc-98dd-c5694dc27500,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-workfloww7rqv/series-workfloww7rqv-convert-artifact-1192935568/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": "baa424b2-d29b-4f40-a0b5-48c2618f61b1", "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-workfloww7rqv/series-workfloww7rqv-build-action-1503706380/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww7rqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"62222c22-14fe-488e-8e13-ddcb8200d9ab","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-21 11:07:14 +0000 UTC FinishedAt: 2026-07-21 11:48:19 +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:*018da5fe-0d2e-4fbc-98dd-c5694dc27500,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-workfloww7rqv/series-workfloww7rqv-convert-artifact-1192935568/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": "baa424b2-d29b-4f40-a0b5-48c2618f61b1", "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-workfloww7rqv/series-workfloww7rqv-build-action-1503706380/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww7rqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"62222c22-14fe-488e-8e13-ddcb8200d9ab","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-21 11:48:29 +0000 UTC FinishedAt: 2026-07-21 11:48:29 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7rqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"62222c22-14fe-488e-8e13-ddcb8200d9ab","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-21 11:48:29 +0000 UTC FinishedAt: 2026-07-21 11:48:29 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7rqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"62222c22-14fe-488e-8e13-ddcb8200d9ab","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-21 11:48:29 +0000 UTC FinishedAt: 2026-07-21 11:50:35 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7rqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"62222c22-14fe-488e-8e13-ddcb8200d9ab","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-21 11:48:29 +0000 UTC FinishedAt: 2026-07-21 11:50:25 +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:*baa424b2-d29b-4f40-a0b5-48c2618f61b1,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-workfloww7rqv/series-workfloww7rqv-build-action-1503706380/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-workfloww7rqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"62222c22-14fe-488e-8e13-ddcb8200d9ab","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-21 11:50:35 +0000 UTC FinishedAt: 2026-07-21 14:53:29 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7rqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"62222c22-14fe-488e-8e13-ddcb8200d9ab","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-21 11:50:35 +0000 UTC FinishedAt: 2026-07-21 14:53:29 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"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:*61d7879a-7396-4eb5-94f4-8e3c49304497,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*baa424b2-d29b-4f40-a0b5-48c2618f61b1,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-workfloww7rqv/series-workfloww7rqv-build-action-33680667/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-workfloww7rqv/series-workfloww7rqv-build-action-1503706380/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workfloww7rqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"62222c22-14fe-488e-8e13-ddcb8200d9ab","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-21 11:50:35 +0000 UTC FinishedAt: 2026-07-21 11:50:45 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7rqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"62222c22-14fe-488e-8e13-ddcb8200d9ab","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-21 11:50:35 +0000 UTC FinishedAt: 2026-07-21 11:50:42 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"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-workfloww7rqv/series-workfloww7rqv-convert-artifact-2114969225/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww7rqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"62222c22-14fe-488e-8e13-ddcb8200d9ab","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-21 11:50:35 +0000 UTC FinishedAt: 2026-07-21 11:50:35 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7rqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"62222c22-14fe-488e-8e13-ddcb8200d9ab","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-21 11:50:35 +0000 UTC FinishedAt: 2026-07-21 11:50:35 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7rqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"62222c22-14fe-488e-8e13-ddcb8200d9ab","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-21 11:50:35 +0000 UTC FinishedAt: 2026-07-21 11:50:35 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7rqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"62222c22-14fe-488e-8e13-ddcb8200d9ab","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-21 11:50:45 +0000 UTC FinishedAt: 2026-07-21 14:53:29 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7rqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fs_bdev_freeze","__exfat_fs_error"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXFAT_FS"],"series_id":"62222c22-14fe-488e-8e13-ddcb8200d9ab","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-21 11:50:45 +0000 UTC FinishedAt: 2026-07-21 14:53:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*61d7879a-7396-4eb5-94f4-8e3c49304497,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*baa424b2-d29b-4f40-a0b5-48c2618f61b1,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-workfloww7rqv/series-workfloww7rqv-build-action-33680667/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-workfloww7rqv/series-workfloww7rqv-build-action-1503706380/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-workfloww7rqv/series-workfloww7rqv-convert-artifact-2114969225/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,}