Name: series-workflowc8z5b Phase: Succeeded StartedAt: 2026-07-02 06:24:21 +0000 UTC FinishedAt: 2026-07-02 10:40:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8z5b[0] Phase: Succeeded StartedAt: 2026-07-02 06:24:21 +0000 UTC FinishedAt: 2026-07-02 06:35:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8z5b[0].run-triage Phase: Succeeded StartedAt: 2026-07-02 06:24:21 +0000 UTC FinishedAt: 2026-07-02 06:35:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "0469d460a598d03fc85ebd97f99640e6c579e2a2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_MULTICAST" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "0469d460a598d03fc85ebd97f99640e6c579e2a2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_MULTICAST" ], "series_id": "feb9500e-fbdc-4c73-b36d-d55d3a951c0e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_mc_destroy_dev", "ip_check_mc_rcu", "ip_mc_hash_remove", "ip_mc_hash_add", "inetdev_destroy", "____ip_mc_inc_group", "__ip_mc_dec_group" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX01VTFRJQ0FTVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX21jX2Rlc3Ryb3lfZGV2JiMzNDssCiAgICAmIzM0O2lwX2NoZWNrX21jX3JjdSYjMzQ7LAogICAgJiMzNDtpcF9tY19oYXNoX3JlbW92ZSYjMzQ7LAogICAgJiMzNDtpcF9tY19oYXNoX2FkZCYjMzQ7LAogICAgJiMzNDtpbmV0ZGV2X2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7X19fX2lwX21jX2luY19ncm91cCYjMzQ7LAogICAgJiMzNDtfX2lwX21jX2RlY19ncm91cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBtdWx0aWNhc3QgZ3JvdXBzIGFyZSByZW1vdmVkIGZyb20gdGhlIGRldmljZSYjMzk7cyBgbWNfbGlzdGAgZHVyaW5nIGRldmljZSBkZXN0cnVjdGlvbiBidXQgYXJlIGxlZnQgaW4gdGhlIGBtY19oYXNoYCB0YWJsZS4gVGhpcyBjYW4gbGVhZCB0byBhIHVzZS1hZnRlci1mcmVlIGlmIHRoZSBgaW5fZGV2aWNlYCBvdXRsaXZlcyB0aGUgUkNVIGdyYWNlIHBlcmlvZCAoZS5nLiwgZHVlIHRvIGEgc29ja2V0IGhvbGRpbmcgYSByZWZlcmVuY2UpIGFuZCBgaXBfY2hlY2tfbWNfcmN1YCBpcyBjYWxsZWQsIGFjY2Vzc2luZyB0aGUgZGFuZ2xpbmcgcG9pbnRlcnMgaW4gYG1jX2hhc2hgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgSVB2NCBtdWx0aWNhc3QgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjN2JhYWI2YjFiNjM0MDNlY2U1YjkzYzZjZjJmN2Y1NWZjNzI3Zjk3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAwNjozMzo0NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pZ21wLmMgYi9uZXQvaXB2NC9pZ21wLmNcbmluZGV4IGI2MzM3YTQ3YzE0MTg1Li5kNTIwZWE0ZjZkMTQyZCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lnbXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaWdtcC5jXG5AQCAtMTkyMiw2ICYjNDM7MTkyMiw3IEBAIHZvaWQgaXBfbWNfZGVzdHJveV9kZXYoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxuICNlbmRpZlxuIFxuIFx0d2hpbGUgKChpID0gcnRubF9kZXJlZmVyZW5jZShpbl9kZXYtXHUwMDNlbWNfbGlzdCkpICE9IE5VTEwpIHtcbiYjNDM7XHRcdGlwX21jX2hhc2hfcmVtb3ZlKGluX2RldiwgaSk7XG4gXHRcdGluX2Rldi1cdTAwM2VtY19saXN0ID0gaS1cdTAwM2VuZXh0X3JjdTtcbiBcdFx0V1JJVEVfT05DRShpbl9kZXYtXHUwMDNlbWNfY291bnQsIGluX2Rldi1cdTAwM2VtY19jb3VudCAtIDEpO1xuIFx0XHRpcF9tY19jbGVhcl9zcmMoaSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfTVVMVElDQVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfbWNfZGVzdHJveV9kZXYmIzM0OywKICAgICYjMzQ7aXBfY2hlY2tfbWNfcmN1JiMzNDssCiAgICAmIzM0O2lwX21jX2hhc2hfcmVtb3ZlJiMzNDssCiAgICAmIzM0O2lwX21jX2hhc2hfYWRkJiMzNDssCiAgICAmIzM0O2luZXRkZXZfZGVzdHJveSYjMzQ7LAogICAgJiMzNDtfX19faXBfbWNfaW5jX2dyb3VwJiMzNDssCiAgICAmIzM0O19faXBfbWNfZGVjX2dyb3VwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIG11bHRpY2FzdCBncm91cHMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgZGV2aWNlJiMzOTtzIGBtY19saXN0YCBkdXJpbmcgZGV2aWNlIGRlc3RydWN0aW9uIGJ1dCBhcmUgbGVmdCBpbiB0aGUgYG1jX2hhc2hgIHRhYmxlLiBUaGlzIGNhbiBsZWFkIHRvIGEgdXNlLWFmdGVyLWZyZWUgaWYgdGhlIGBpbl9kZXZpY2VgIG91dGxpdmVzIHRoZSBSQ1UgZ3JhY2UgcGVyaW9kIChlLmcuLCBkdWUgdG8gYSBzb2NrZXQgaG9sZGluZyBhIHJlZmVyZW5jZSkgYW5kIGBpcF9jaGVja19tY19yY3VgIGlzIGNhbGxlZCwgYWNjZXNzaW5nIHRoZSBkYW5nbGluZyBwb2ludGVycyBpbiBgbWNfaGFzaGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBJUHY0IG11bHRpY2FzdCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzdiYWFiNmIxYjYzNDAzZWNlNWI5M2M2Y2YyZjdmNTVmYzcyN2Y5NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDIgMDY6MzM6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pZ21wLmMgYi9uZXQvaXB2NC9pZ21wLmMKaW5kZXggYjYzMzdhNDdjMTQxODUuLmQ1MjBlYTRmNmQxNDJkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pZ21wLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaWdtcC5jCkBAIC0xOTIyLDYgJiM0MzsxOTIyLDcgQEAgdm9pZCBpcF9tY19kZXN0cm95X2RldihzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpCiAjZW5kaWYKIAogCXdoaWxlICgoaSA9IHJ0bmxfZGVyZWZlcmVuY2UoaW5fZGV2LSZndDttY19saXN0KSkgIT0gTlVMTCkgewomIzQzOwkJaXBfbWNfaGFzaF9yZW1vdmUoaW5fZGV2LCBpKTsKIAkJaW5fZGV2LSZndDttY19saXN0ID0gaS0mZ3Q7bmV4dF9yY3U7CiAJCVdSSVRFX09OQ0UoaW5fZGV2LSZndDttY19jb3VudCwgaW5fZGV2LSZndDttY19jb3VudCAtIDEpOwogCQlpcF9tY19jbGVhcl9zcmMoaSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIGdpdmVuIHRoaXMgcGF0Y2g6CgoqKkFuYWx5emluZyBhIE5ldHdvcmsgTXVsdGljYXN0IE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgcGF0Y2ggdGhhdCYjMzk7cyBiZWVuIGFwcGxpZWQsIGFuZCBpdCYjMzk7cyB0b3VjaGluZyBgbmV0L2lwdjQvaWdtcC5jYC4gVGhhdCBmaWxlJiMzOTtzIGNsZWFybHkgZGVhbGluZyB3aXRoIEludGVybmV0IEdyb3VwIE1hbmFnZW1lbnQgUHJvdG9jb2wgKElHTVApLCBzbyB0aGlzIGlzIG11bHRpY2FzdC1yZWxhdGVkLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgdGhlIGFkZGl0aW9uIG9mIGBpcF9tY19oYXNoX3JlbW92ZShpbl9kZXYsIGkpO2Agd2l0aGluIHRoZSBgaXBfbWNfZGVzdHJveV9kZXZgIGZ1bmN0aW9uLiBNeSBleHBlcnQgZXllIGltbWVkaWF0ZWx5IHNheXMsIHRoaXMgaXMgbGlrZWx5IHRvIGNsZWFuIHVwIHNvbWUgbXVsdGljYXN0LXJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIHdoZW4gYW4gaW50ZXJmYWNlIGlzIGJlaW5nIGRlc3Ryb3llZC4KCkxldCYjMzk7cyBkaXZlIGludG8gYGlwX21jX2Rlc3Ryb3lfZGV2YCBpdHNlbGYgd2l0aGluIGBuZXQvaXB2NC9pZ21wLmNgLiBNeSBpbml0aWFsIGd1ZXNzIGlzIHRoYXQgYGlwX21jX2Rlc3Ryb3lfZGV2YCBoYW5kbGVzIHRoZSBjbGVhbnVwIHdvcmsgd2hlbiBhbiBJUCBtdWx0aWNhc3QgZGV2aWNlIGlzIG5vIGxvbmdlciByZXF1aXJlZC4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSBjYWxsZWQgd2hlbiBhbiBpbnRlcmZhY2UgZ29lcyBkb3duLCBpcyByZW1vdmVkLCBvciBpcyBvdGhlcndpc2Ugbm8gbG9uZ2VyIGFjdGl2ZSBpbiBhIG11bHRpY2FzdCBjb250ZXh0LiBUaGUgcHJlc2VuY2Ugb2YgYGlwX21jX2hhc2hfcmVtb3ZlYCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IG11bHRpY2FzdCBncm91cCBtZW1iZXJzaGlwcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBkYXRhIGFyZSBtYW5hZ2VkIHRocm91Z2ggYSBoYXNoIHRhYmxlLiBUaGUgcGF0Y2ggaXMgdGhlbiBhZGRpbmcgdGhpcyBsaW5lLCBzbyB0aGF0IHdoZW4gYSBkZXZpY2UgaXMgcmVtb3ZlZCwgYXNzb2NpYXRlZCBpdGVtcyBhcmUgcmVtb3ZlZCBmcm9tIHRoaXMgaGFzaC4gVGhpcyBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGhhc2ggaG9sZHMsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBpcF9tY19oYXNoX3JlbW92ZWAgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QsIGJ1dCBteSBmaXJzdCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBhIGNsZWFuIGFuZCByZWFzb25hYmxlIGVuaGFuY2VtZW50IHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzIG9yIHN0YWxlIGVudHJpZXMsIGltcHJvdmluZyBvdmVyYWxsIHN5c3RlbSBzdGFiaWxpdHksIHdoaWNoIHNob3VsZCBiZSB2ZXJ5IHdlbGNvbWUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfbWNfZGVzdHJveV9kZXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pZ21wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaWdtcC5jPTE4OTE9dm9pZCBpcF9tY191cChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXG4tLVxubmV0L2lwdjQvaWdtcC5jLTE5MTEtXG5uZXQvaXB2NC9pZ21wLmM6MTkxMjp2b2lkIGlwX21jX2Rlc3Ryb3lfZGV2KHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldilcbm5ldC9pcHY0L2lnbXAuYy0xOTEzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDE1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIElHTVAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgSUdNUCB3b3JrcyBhdCBhIGxvdyBsZXZlbCBpbiB0aGUga2VybmVsLiBgbmV0L2lwdjQvaWdtcC5jYCBpcyB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydC4gR2l2ZW4gd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGxpbmUgMTkxMi4gVGhhdCYjMzk7cyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgb2Ygc29tZSBmdW5jdGlvbiBvciBjb25kaXRpb25hbCB0aGF0IGRlYWxzIHdpdGggbWVtYmVyc2hpcCByZXBvcnQgcHJvY2Vzc2luZyBvciBwb3NzaWJseSBncm91cCBtYW5hZ2VtZW50IHJlc2lkZXMuIEl0JiMzOTtzIG9mdGVuIGhlbHBmdWwgdG8gcGlucG9pbnQgc3BlY2lmaWMgbGluZXMgd2hlbiBkaXNzZWN0aW5nIGEgY29tcGxleCBwaWVjZSBvZiBjb2RlLCBhcyBpdCBoZWxwcyB0cmFjZSB0aGUgbG9naWMgYW5kIHVuZGVyc3RhbmQgaG93IGRhdGEgYW5kIGNvbnRyb2wgZmxvd3MuIEkgYW50aWNpcGF0ZSBpdCBkZWFscyB3aXRoIGhvdyB0aGUgSUdNUCBtb2R1bGUgaW50ZXJhY3RzIHdpdGggdGhlIG5ldHdvcmsgc3RhY2suIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGludGVyYWN0aW9uIHdpdGggdGhlIHJvdXRpbmcgdGFibGUgYW5kIHBvdGVudGlhbGx5IHdpdGggdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGpvaW5zLCBsZWF2ZXMgYW5kIHVwZGF0ZXMgb2YgbXVsdGljYXN0IGdyb3VwIG1lbWJlcnNoaXBzLiBLbm93aW5nIHRoZSBsaW5lIG51bWJlciB3aWxsIGFsbG93IG1lIHRvIGltbWVkaWF0ZWx5IGp1bXAgdG8gdGhlIHJlbGV2YW50IGNvZGUgYW5kIHN0YXJ0IGRlY2lwaGVyaW5nIHRoZSBudWFuY2VzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lnbXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTkwMDpcdFx0Zm9yX2VhY2hfcG1jX3J0bmwoaW5fZGV2LCBwbWMpIHtcbjE5MDE6XHQjaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxuMTkwMjpcdFx0XHRpZ21wdjNfZGVsX2RlbHJlYyhpbl9kZXYsIHBtYyk7XG4xOTAzOlx0I2VuZGlmXG4xOTA0Olx0XHRcdGlnbXBfZ3JvdXBfYWRkZWQocG1jKTtcbjE5MDU6XHRcdH1cbjE5MDY6XHR9XG4xOTA3Olx0XG4xOTA4Olx0LypcbjE5MDk6XHQgKlx0RGV2aWNlIGlzIGFib3V0IHRvIGJlIGRlc3Ryb3llZDogY2xlYW4gdXAuXG4xOTEwOlx0ICovXG4xOTExOlx0XG4xOTEyOlx0dm9pZCBpcF9tY19kZXN0cm95X2RldihzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXG4xOTEzOlx0e1xuMTkxNDpcdFx0c3RydWN0IGlwX21jX2xpc3QgKmk7XG4xOTE1Olx0XG4xOTE2Olx0XHRBU1NFUlRfUlROTCgpO1xuMTkxNzpcdFxuMTkxODpcdFx0LyogRGVhY3RpdmF0ZSB0aW1lcnMgKi9cbjE5MTk6XHRcdGlwX21jX2Rvd24oaW5fZGV2KTtcbjE5MjA6XHQjaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxuMTkyMTpcdFx0aWdtcHYzX2NsZWFyX2RlbHJlYyhpbl9kZXYpO1xuMTkyMjpcdCNlbmRpZlxuMTkyMzpcdFxuMTkyNDpcdFx0d2hpbGUgKChpID0gcnRubF9kZXJlZmVyZW5jZShpbl9kZXYtXHUwMDNlbWNfbGlzdCkpICE9IE5VTEwpIHtcbjE5MjU6XHRcdFx0aXBfbWNfaGFzaF9yZW1vdmUoaW5fZGV2LCBpKTtcbjE5MjY6XHRcdFx0aW5fZGV2LVx1MDAzZW1jX2xpc3QgPSBpLVx1MDAzZW5leHRfcmN1O1xuMTkyNzpcdFx0XHRXUklURV9PTkNFKGluX2Rldi1cdTAwM2VtY19jb3VudCwgaW5fZGV2LVx1MDAzZW1jX2NvdW50IC0gMSk7XG4xOTI4Olx0XHRcdGlwX21jX2NsZWFyX3NyYyhpKTtcbjE5Mjk6XHRcdFx0aXBfbWFfcHV0KGkpO1xuMTkzMDpcdFx0fVxuMTkzMTpcdH1cbjE5MzI6XHRcbjE5MzM6XHQvKiBSVE5MIGlzIGxvY2tlZCAqL1xuMTkzNDpcdHN0YXRpYyBzdHJ1Y3QgaW5fZGV2aWNlICppcF9tY19maW5kX2RldihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9tcmVxbiAqaW1yKVxuMTkzNTpcdHtcbjE5MzY6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMO1xuMTkzNzpcdFx0c3RydWN0IGluX2RldmljZSAqaWRldiA9IE5VTEw7XG4xOTM4Olx0XG4xOTM5Olx0XHRpZiAoaW1yLVx1MDAzZWltcl9pZmluZGV4KSB7XG4xOTQwOlx0XHRcdGlkZXYgPSBpbmV0ZGV2X2J5X2luZGV4KG5ldCwgaW1yLVx1MDAzZWltcl9pZmluZGV4KTtcbjE5NDE6XHRcdFx0cmV0dXJuIGlkZXY7XG4xOTQyOlx0XHR9XG4xOTQzOlx0XHRpZiAoaW1yLVx1MDAzZWltcl9hZGRyZXNzLnNfYWRkcikge1xuMTk0NDpcdFx0XHRkZXYgPSBfX2lwX2Rldl9maW5kKG5ldCwgaW1yLVx1MDAzZWltcl9hZGRyZXNzLnNfYWRkciwgZmFsc2UpO1xuMTk0NTpcdFx0XHRpZiAoIWRldilcbjE5NDY6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbjE5NDc6XHRcdH1cbjE5NDg6XHRcbjE5NDk6XHRcdGlmICghZGV2KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ0MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCdWcgRml4OiBNdWx0aWNhc3QgSGFzaCBUYWJsZSBVcGRhdGUqKgoKT2theSwgc28gdGhpcyBwYXRjaCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIOKAkyBpdCYjMzk7cyBhZGRpbmcgYGlwX21jX2hhc2hfcmVtb3ZlKGluX2RldiwgaSk7YCB0byBgaXBfbWNfZGVzdHJveV9kZXZgLiBUaGlzIGxvb2tzIGxpa2UgYSBwdXJlbHkgZnVuY3Rpb25hbCBjaGFuZ2UsIHdoaWNoIGlzIGEgZ29vZCBzaWduLCBlc3BlY2lhbGx5IGlmIGl0JiMzOTtzIGFkZHJlc3NpbmcgYSBidWcuIFRoZSBkZXNjcmlwdGlvbiBleHBsaWNpdGx5IG1lbnRpb25zIHRoZSBtdWx0aWNhc3QgbGlzdCBoYXNoIHRhYmxlIG5vdCBiZWluZyB1cGRhdGVkIGR1cmluZyBkZXZpY2UgZGVzdHJ1Y3Rpb24uIFJpZ2h0LCB0aGF0JiMzOTtzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBpc3N1ZSBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG1lbW9yeSBsZWFrcyBvciBzdGFsZSBlbnRyaWVzLiBXZSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCB0byByZXByb2R1Y2Ugb3IgdHJpZ2dlciB0aGlzIGlzc3VlLgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoZXJlIHRoaXMgaXMgaW1wbGVtZW50ZWQ7IGBpcF9tY19kZXN0cm95X2RldmAgaXMgbGlrZWx5IGluIGBuZXQvaXB2NC9pZ21wLmNgLiBMZXQmIzM5O3MgY2hlY2sgdGhlIGBuZXQvaXB2NC9NYWtlZmlsZWAgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBpZ21wLmNgIGZpbGUgaXMgYnVpbHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGFueSBidWlsZC10aW1lIGRlcGVuZGVuY2llcyBvciBjb21waWxlLXRpbWUgb3B0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24mIzM5O3MgYmVoYXZpb3IuIFRoYXTigJlzIHRoZSBzdGFydGluZyBwb2ludCB0byBldmFsdWF0aW5nIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lnbXAubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlPTY9b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXG4tLVxubmV0L2lwdjQvTWFrZWZpbGUtMTMtXHQgICAgIHRjcF9vZmZsb2FkLm8gdGNwX3BsYi5vIGRhdGFncmFtLm8gcmF3Lm8gdWRwLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlOjE0Olx0ICAgICB1ZHBfb2ZmbG9hZC5vIGFycC5vIGljbXAubyBkZXZpbmV0Lm8gYWZfaW5ldC5vIGlnbXAubyBcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTUtXHQgICAgIGZpYl9mcm9udGVuZC5vIGZpYl9zZW1hbnRpY3MubyBmaWJfdHJpZS5vIGZpYl9ub3RpZmllci5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk2NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQdjQgTXVsdGljYXN0IERlcGVuZGVuY3kqKgoKT2theSwgc28gYGlnbXAub2AgaXMgYmVpbmcgY29tcGlsZWQgYXV0b21hdGljYWxseSBmb3IgSVB2NCwgd2hpY2ggbWVhbnMgd2UgbmVlZCB0byBlbnN1cmUgY2VydGFpbiBjb25maWd1cmF0aW9ucyBhcmUgbWV0LiBTaW5jZSBgb2JqLXlgIGlzIHVzZWQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIGFjdHVhbGx5ICpyZXF1aXJlZCouIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBDT05GSUdfSU5FVGAgaXMgdGhlIGtleSwgb3IgcGVyaGFwcyBldmVuIGBDT05GSUdfSVBfTVVMVElDQVNUYC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIGlmIGBpcF9tY19kZXN0cm95X2RldmAgaXMgZ3VhcmRlZCBieSBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIEhtbSwgaXQgbG9va3MgbGlrZSBgaXBfbWNfZGVzdHJveV9kZXZgIGlzbiYjMzk7dCBjb25kaXRpb25hbCBvbiBgQ09ORklHX0lQX01VTFRJQ0FTVGAgd2hpY2ggaXMgYSBnb29kIHNpZ24uIFRoZSBvbmx5IGZ1bmN0aW9uIEkgc2VlIHdpdGggdGhhdCBwcmVwcm9jZXNzb3IgbWFjcm8gaXMgYGlnbXB2M19jbGVhcl9kZWxyZWNgLCBub3QgdGhlIGZ1bmN0aW9uIEkmIzM5O20gY29uY2VybmVkIHdpdGguIFRoYXQgc3VnZ2VzdHMgdGhhdCBgQ09ORklHX0lORVRgIHNob3VsZCBiZSBzdWZmaWNpZW50IGJlY2F1c2UgaXQmIzM5O3MgYWx3YXlzIGVuYWJsZWQuIFdhaXQgYSBzZWNvbmQsIHNpbmNlIHdlIGFyZSB0YWxraW5nIGFib3V0IElHTVAsIGBDT05GSUdfSVBfTVVMVElDQVNUYCAqbWlnaHQqIHN0aWxsIGJlIHJlbGV2YW50LiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUgY2hlY2sgdGhlIGBuZXQvaXB2NC9LY29uZmlnYCBmaWxlIHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX01VTFRJQ0FTVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZy00LSNcbm5ldC9pcHY0L0tjb25maWc6NTpjb25maWcgSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9LY29uZmlnLTYtXHRib29sIFwmIzM0O0lQOiBtdWx0aWNhc3RpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQzNwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgZnVuY3Rpb246CgoqKkludmVzdGlnYXRpbmcgdGhlIENhbGxlcnMgb2YgYGlwX21jX2Rlc3Ryb3lfZGV2YCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgaXBfbWNfZGVzdHJveV9kZXZgIGlzIGJlaW5nIHVzZWQuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRyYWNlIGl0cyBjYWxsIHNpdGVzIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBpdHMgcm9sZSB3aXRoaW4gdGhlIHN5c3RlbS4gSXMgaXQgYSBjZW50cmFsIGNvbXBvbmVudCwgb3Igb25seSBhIGxpdHRsZSB1c2VkIHV0aWxpdHkgZnVuY3Rpb24/IFRoZSBjYWxsIHN0YWNrIHdpbGwgdGVsbCBtZSB0aGF0LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byBwZXJmb3JtIGEgc2VhcmNoIGZvciByZWZlcmVuY2VzLiBJIHdhbnQgdG8gYnVpbGQgYSB0aG9yb3VnaCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXBlbmRlbmNpZXMgb24gdGhpcyBmdW5jdGlvbi4gS25vd2xlZGdlIGlzIHBvd2VyLCBhbmQga25vd2luZyB3aGF0IHJlbGllcyBvbiBgaXBfbWNfZGVzdHJveV9kZXZgIGlzIHZpdGFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF9tY19kZXN0cm95X2RldiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2lnbXAuaD0yODA9ZXh0ZXJuIHZvaWQgaXBfbWNfaW5pdF9kZXYoc3RydWN0IGluX2RldmljZSAqKTtcbmluY2x1ZGUvbGludXgvaWdtcC5oOjI4MTpleHRlcm4gdm9pZCBpcF9tY19kZXN0cm95X2RldihzdHJ1Y3QgaW5fZGV2aWNlICopO1xuaW5jbHVkZS9saW51eC9pZ21wLmgtMjgyLWV4dGVybiB2b2lkIGlwX21jX3VwKHN0cnVjdCBpbl9kZXZpY2UgKik7XG4tLVxubmV0L2lwdjQvZGV2aW5ldC5jPTMxND1zdGF0aWMgdm9pZCBpbmV0ZGV2X2Rlc3Ryb3koc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxuLS1cbm5ldC9pcHY0L2RldmluZXQuYy0zMjQtXG5uZXQvaXB2NC9kZXZpbmV0LmM6MzI1Olx0aXBfbWNfZGVzdHJveV9kZXYoaW5fZGV2KTtcbm5ldC9pcHY0L2RldmluZXQuYy0zMjYtXG4tLVxubmV0L2lwdjQvaWdtcC5jPTE4OTE9dm9pZCBpcF9tY191cChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXG4tLVxubmV0L2lwdjQvaWdtcC5jLTE5MTEtXG5uZXQvaXB2NC9pZ21wLmM6MTkxMjp2b2lkIGlwX21jX2Rlc3Ryb3lfZGV2KHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldilcbm5ldC9pcHY0L2lnbXAuYy0xOTEzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkyNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIElQdjQgRGV2aWNlIERlc3RydWN0aW9uKioKCk9rYXksIHNvIGBpcF9tY19kZXN0cm95X2RldmAgaXMgY2FsbGVkIHdpdGhpbiBgaW5ldGRldl9kZXN0cm95YCB3aXRoaW4gYG5ldC9pcHY0L2RldmluZXQuY2AuIFRoYXQgbWVhbnMgdGhpcyBpcyBhICpyZWFsKiBjb2RlIHBhdGgsIGl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHdoZW4gYW4gSVB2NCBkZXZpY2UgaXMgZGVzdHJveWVkLiBHb29kLCB3ZSYjMzk7dmUgZ290IGEgdGFyZ2V0LgoKVGhlIHF1ZXN0aW9uIG5vdyBpcywgd2hhdCBzcGVjaWZpYyBmdW5jdGlvbnMgYXJlIG1vc3QgcHJvbWlzaW5nIGZvciBmdXp6aW5nIGFyb3VuZCB0aGlzIGFyZWE/IE9idmlvdXNseSwgYGlwX21jX2Rlc3Ryb3lfZGV2YCBpcyBhdCB0aGUgdG9wIG9mIHRoZSBsaXN0LCBzaW5jZSBpdCYjMzk7cyB0aGUgZGlyZWN0IGZ1bmN0aW9uIHdlIGtub3cgaXMgaW52b2x2ZWQuIGBpbmV0ZGV2X2Rlc3Ryb3lgIGl0c2VsZiBpcyBhIGdvb2QgY2FuZGlkYXRlIHRvbywgZ2l2ZW4gdGhhdCBpdCYjMzk7cyB0aGUgaW1tZWRpYXRlIGNhbGxlci4gV2UgbmVlZCB0byBsb29rIGZvciBpbnRlcmVzdGluZyBzcG90cyBhbmQgaG9va3MsIGFuZCB0aGUgZGVzdHJ1Y3Rpb24gaXRzZWxmLgoKQnV0IHdoYXQgYWJvdXQgdGhlIHNldHVwPyBJdCYjMzk7cyBsaWtlbHkgaW50ZXJlc3RpbmcgdG8gZnV6eiB0aGUgZnVuY3Rpb25zIGludm9sdmVkIGluIHNldHRpbmcgdXAgdGhlIG11bHRpY2FzdCBjb25maWd1cmF0aW9uIGJlaW5nIGRlc3Ryb3llZC4gV2Ugc2hvdWxkIGFsc28gaW52ZXN0aWdhdGUgZnVuY3Rpb25zIGxpa2UgYGlwX21jX2hhc2hfYWRkYCBvciBgaXBfbWNfaW5jX2dyb3VwYCwgdG8gZW5zdXJlIHRoYXQgdGhlIHByb2Nlc3MgYmVmb3JlIGRlc3RydWN0aW9uIGlzIHNvdW5kLCBhbmQgdGhhdCBhbnl0aGluZyB0aGF0IHNldHMgdXAgZGF0YSBpcyBhbHNvIGNsZWFuZWQgdXAgd2hlbiB0aGUgZGV2aWNlIGdvZXMgYXdheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfbWNfaGFzaF9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pZ21wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaWdtcC5jPTEzOTk9c3RhdGljIHUzMiBpcF9tY19oYXNoKGNvbnN0IHN0cnVjdCBpcF9tY19saXN0ICppbSlcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTQwMy1cbm5ldC9pcHY0L2lnbXAuYzoxNDA0OnN0YXRpYyB2b2lkIGlwX21jX2hhc2hfYWRkKHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldixcbm5ldC9pcHY0L2lnbXAuYy0xNDA1LVx0XHRcdCAgIHN0cnVjdCBpcF9tY19saXN0ICppbSlcbi0tXG5uZXQvaXB2NC9pZ21wLmM9MTUxOD1zdGF0aWMgdm9pZCBfX19faXBfbWNfaW5jX2dyb3VwKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIGFkZHIsXG4tLVxubmV0L2lwdjQvaWdtcC5jLTE1NzEtXG5uZXQvaXB2NC9pZ21wLmM6MTU3MjpcdGlwX21jX2hhc2hfYWRkKGluX2RldiwgaW0pO1xubmV0L2lwdjQvaWdtcC5jLTE1NzMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NDUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgSVAgTXVsdGljYXN0IEdyb3VwIEhhbmRsaW5nKioKCkFscmlnaHQsIHNvIGBfX19faXBfbWNfaW5jX2dyb3VwYCBpcyBjbGVhcmx5IHJlc3BvbnNpYmxlIGZvciBhZGRpbmcgc29tZXRoaW5nIHRvIHRoZSBoYXNoIHRhYmxlLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gYW5kIGNvbnRleHQsIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIGFkZGl0aW9uIG9mIGFuIElQIG11bHRpY2FzdCBncm91cCBlbnRyeS4gSXQmIzM5O3MgdGhlIHN0YW5kYXJkIGluY3JlbWVudC1vZi10aGUtZ3JvdXAtaW4tdGhlLWhhc2gtdGFibGUgZnVuY3Rpb24uIE1ha2VzIHNlbnNlLiBOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb21wbGVtZW50YXJ5IGZ1bmN0aW9uOiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2hhdCBgaXBfbWNfaGFzaF9yZW1vdmVgIGRvZXMuIEl0JiMzOTtzIHByb2JhYmxlIHRoYXQgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSByZW1vdmFsIG9mIGEgbXVsdGljYXN0IGdyb3VwIGVudHJ5IGZyb20gdGhlIGhhc2ggdGFibGUuIFRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gbWFuYWdlcyB0aGUgZ3JvdXBzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zLCBwYXJ0aWN1bGFybHkgdGhlIGxvZ2ljIGFyb3VuZCB0aGUgaGFzaCBrZXlzLCBjb2xsaXNpb24gcmVzb2x1dGlvbiAoaWYgYW55KSwgYW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgaGFuZGxlIHJlZmVyZW5jZSBjb3VudGluZyBvciBvdGhlciBjb25jdXJyZW5jeSBjb25jZXJucyB3aGVuIGRlbGV0aW5nIHRoZSBlbnRyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfbWNfaGFzaF9yZW1vdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pZ21wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaWdtcC5jPTE0MDQ9c3RhdGljIHZvaWQgaXBfbWNfaGFzaF9hZGQoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LFxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xNDM1LVxubmV0L2lwdjQvaWdtcC5jOjE0MzY6c3RhdGljIHZvaWQgaXBfbWNfaGFzaF9yZW1vdmUoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LFxubmV0L2lwdjQvaWdtcC5jLTE0MzctXHRcdFx0ICAgICAgc3RydWN0IGlwX21jX2xpc3QgKmltKVxuLS1cbm5ldC9pcHY0L2lnbXAuYz0xNzc2PXZvaWQgX19pcF9tY19kZWNfZ3JvdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgYWRkciwgZ2ZwX3QgZ2ZwKVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xNzkwLVx0XHRcdGlmIChuZXdfdXNlcnMgPT0gMCkge1xubmV0L2lwdjQvaWdtcC5jOjE3OTE6XHRcdFx0XHRpcF9tY19oYXNoX3JlbW92ZShpbl9kZXYsIGkpO1xubmV0L2lwdjQvaWdtcC5jLTE3OTItXHRcdFx0XHQqaXAgPSBpLVx1MDAzZW5leHRfcmN1O1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0xOTEyPXZvaWQgaXBfbWNfZGVzdHJveV9kZXYoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xOTI0LVx0d2hpbGUgKChpID0gcnRubF9kZXJlZmVyZW5jZShpbl9kZXYtXHUwMDNlbWNfbGlzdCkpICE9IE5VTEwpIHtcbm5ldC9pcHY0L2lnbXAuYzoxOTI1Olx0XHRpcF9tY19oYXNoX3JlbW92ZShpbl9kZXYsIGkpO1xubmV0L2lwdjQvaWdtcC5jLTE5MjYtXHRcdGluX2Rldi1cdTAwM2VtY19saXN0ID0gaS1cdTAwM2VuZXh0X3JjdTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIyOAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBNdWx0aWNhc3QgRGV2aWNlIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY2xlYW51cCBhbmQgbWFuYWdlbWVudCBvZiBtdWx0aWNhc3QgZGV2aWNlcyBoZXJlLiBJIHNlZSB0aGF0IGBfX2lwX21jX2RlY19ncm91cGAgYW5kIGBpcF9tY19kZXN0cm95X2RldmAgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkIGluIHJlbW92aW5nIGVudHJpZXMgZnJvbSB0aGUgcmVsZXZhbnQgaGFzaCB0YWJsZXMuIE15IHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZXNlIGZ1bmN0aW9ucywgYWxvbmcgd2l0aDoKCiogICBgaXBfbWNfZGVzdHJveV9kZXZgCiogICBgX19pcF9tY19kZWNfZ3JvdXBgCiogICBgX19fX2lwX21jX2luY19ncm91cGAKKiAgIGBpcF9tY19oYXNoX2FkZGAKKiAgIGBpcF9tY19oYXNoX3JlbW92ZWAKKiAgIGBpbmV0ZGV2X2Rlc3Ryb3lgCgpJJiMzOTttIGFsc28gY29uc2lkZXJpbmcgdGhlIGBJUF9NVUxUSUNBU1RgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBXaGlsZSBpdCYjMzk7cyBvYnZpb3VzbHkgY3J1Y2lhbCBmb3IgSUdNUCBhbmQgbXVsdGljYXN0IGZ1bmN0aW9uYWxpdHkgaW4gZ2VuZXJhbCwgaXQmIzM5O3MgaW50ZXJlc3RpbmcgdGhhdCBgaXBfbWNfZGVzdHJveV9kZXZgICpzdGlsbCogY29tcGlsZXMgYW5kIGdldHMgY2FsbGVkIGV2ZW4gaWYgYElQX01VTFRJQ0FTVGAgaXNuJiMzOTt0IGVuYWJsZWQuIEhvd2V2ZXIsIGVuYWJsaW5nIGl0IGlzIGNlcnRhaW5seSBkZXNpcmFibGUgZm9yIGNvbXByZWhlbnNpdmUgbXVsdGljYXN0IGZlYXR1cmUgdGVzdGluZy4gSSYjMzk7bSBnb2luZyB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgYElQX01VTFRJQ0FTVGAgaXMgc3RyaWN0bHkgbmVjZXNzYXJ5IHRvIHJlYWNoIGBfX19faXBfbWNfaW5jX2dyb3VwYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19fX2lwX21jX2luY19ncm91cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lnbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pZ21wLmM9MTQ4NT1zdGF0aWMgdm9pZCBpbmV0X2lmbWNhZGRyX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xNTE3LSAqL1xubmV0L2lwdjQvaWdtcC5jOjE1MTg6c3RhdGljIHZvaWQgX19fX2lwX21jX2luY19ncm91cChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiBhZGRyLFxubmV0L2lwdjQvaWdtcC5jLTE1MTktXHRcdFx0XHR1bnNpZ25lZCBpbnQgbW9kZSwgZ2ZwX3QgZ2ZwKVxuLS1cbm5ldC9pcHY0L2lnbXAuYz0xNTg1PXZvaWQgX19pcF9tY19pbmNfZ3JvdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgYWRkciwgZ2ZwX3QgZ2ZwKVxubmV0L2lwdjQvaWdtcC5jLTE1ODYte1xubmV0L2lwdjQvaWdtcC5jOjE1ODc6XHRfX19faXBfbWNfaW5jX2dyb3VwKGluX2RldiwgYWRkciwgTUNBU1RfRVhDTFVERSwgZ2ZwKTtcbm5ldC9pcHY0L2lnbXAuYy0xNTg4LX1cbi0tXG5uZXQvaXB2NC9pZ21wLmM9MjI4MD1zdGF0aWMgaW50IF9faXBfbWNfam9pbl9ncm91cChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tcmVxbiAqaW1yLFxuLS1cbm5ldC9pcHY0L2lnbXAuYy0yMzIzLVx0cmN1X2Fzc2lnbl9wb2ludGVyKGluZXQtXHUwMDNlbWNfbGlzdCwgaW1sKTtcbm5ldC9pcHY0L2lnbXAuYzoyMzI0Olx0X19fX2lwX21jX2luY19ncm91cChpbl9kZXYsIGFkZHIsIG1vZGUsIEdGUF9LRVJORUwpO1xubmV0L2lwdjQvaWdtcC5jLTIzMjUtXHRlcnIgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDkyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipNdWx0aWNhc3QgTWVtYmVyc2hpcCBNeXN0ZXJpZXMqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBtdWx0aWNhc3QgZ3JvdXAgam9pbnMgd29yayBhdCB0aGUga2VybmVsIGxldmVsLiBJJiMzOTttIHNlZWluZyB0aGF0IHRoZSBgX19pcF9tY19qb2luX2dyb3VwYCBmdW5jdGlvbiBpcyB0aGUgb25lIHRoYXQmIzM5O3MgYWN0dWFsbHkgY2FsbGVkIHdoZW4gYSBwcm9jZXNzIHRyaWVzIHRvIGpvaW4gYSBtdWx0aWNhc3QgZ3JvdXAsIHNwZWNpZmljYWxseSB0aHJvdWdoIHRoZSBzb2NrZXQgb3B0aW9ucyBsaWtlIGBJUF9BRERfTUVNQkVSU0hJUGAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIHRoZSBjb3JlIHJvdXRpbmUgZm9yIGhhbmRsaW5nIHRoYXQgcHJvY2Vzcy4KCk5vdywgbXkgcmVhbCBxdWVzdGlvbiBpczogaXMgdGhlIGBJUF9NVUxUSUNBU1RgIHNvY2tldCBvcHRpb24gYSBzdHJpY3QgcmVxdWlyZW1lbnQgZm9yIGBJUF9BRERfTUVNQkVSU0hJUGAgdG8gZnVuY3Rpb24gY29ycmVjdGx5PyBMb2dpY2FsbHksIGBJUF9BRERfTUVNQkVSU0hJUGAgaXMgc3VwcG9zZWQgdG8gZGVhbCBzcGVjaWZpY2FsbHkgd2l0aCBtdWx0aWNhc3QsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHRoaXMgZmxhZyBoYXMgdG8gYmUgZXhwbGljaXRseSBzZXQuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGludGVyYWN0aW9ucyBvciBpbXBsaWNpdCBiZWhhdmlvcnMgaW4gdGhlIGtlcm5lbCB0aGF0IEkmIzM5O20gb3Zlcmxvb2tpbmcuIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBJdCBjb3VsZCBiZSBhIHNpbXBsZSBjaGVjaywgb3IgaXQgY291bGQgYmUgZGVlcGVyLi4uIGxldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSBzYXlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUF9BRERfTUVNQkVSU0hJUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTY0MD1zdGF0aWMgYm9vbCBzZXRzb2Nrb3B0X25lZWRzX3J0bmwoaW50IG9wdG5hbWUpXG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy02NDItXHRzd2l0Y2ggKG9wdG5hbWUpIHtcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6NjQzOlx0Y2FzZSBJUF9BRERfTUVNQkVSU0hJUDpcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtNjQ0LVx0Y2FzZSBJUF9BRERfU09VUkNFX01FTUJFUlNISVA6XG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz04OTI9aW50IGRvX2lwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTIyNC1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTIyNTpcdGNhc2UgSVBfQUREX01FTUJFUlNISVA6XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTEyMjYtXHRjYXNlIElQX0RST1BfTUVNQkVSU0hJUDpcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTEyNDYtXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjEyNDc6XHRcdGlmIChvcHRuYW1lID09IElQX0FERF9NRU1CRVJTSElQKVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xMjQ4LVx0XHRcdGVyciA9IGlwX21jX2pvaW5fZ3JvdXAoc2ssIFx1MDAyNm1yZXEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzM2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBNdWx0aWNhc3QgTGFuZHNjYXBlKioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGlwX21jX2pvaW5fZ3JvdXBgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaXRzIGNvbmRpdGlvbmFsIGluY2x1c2lvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hlcmUmIzM5O3MgdGhlIGd1YXJkPyYjMzQ7IElzIHRoaXMgbXVsdGljYXN0IGZ1bmN0aW9uYWxpdHkgY29udGluZ2VudCBvbiB0aGUgYENPTkZJR19JUF9NVUxUSUNBU1RgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbj8gSSYjMzk7bSBiZXR0aW5nIGl0IGlzOyBpdCYjMzk7cyBwcmFjdGljYWxseSBzdGFuZGFyZCBwcmFjdGljZSBmb3IgbW9kdWxhcml0eS4gSSYjMzk7bGwgY2hlY2sgaWYgaXQmIzM5O3Mgd3JhcHBlZCBpbiBhbiBgI2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RgIGJsb2NrLiBUaGF0JiMzOTtsbCB0ZWxsIG1lIGlmIEkmIzM5O20gZXZlbiAqbG9va2luZyogYXQgYWN0aXZlIG11bHRpY2FzdCBjb2RlIG9yIHNvbWV0aGluZyB0aGF0JiMzOTtzIHN0dWJiZWQgb3V0IHVuZGVyIHRoYXQgZmxhZy4gS25vd2luZyB0aGlzIHdpbGwgc3RyZWFtbGluZSBteSBhbmFseXNpcywgc2F2aW5nIHRpbWUgaW4gZWl0aGVyIGEgZGVidWdnaW5nLCBjb2RlIHJldmlldywgb3IgZXZlbiBhIGZlYXR1cmUgaW1wbGVtZW50YXRpb24gc2NlbmFyaW8uIEkga25vdyB0aGUgYmFzaWNzLCBidXQgaXQmIzM5O3MgYWx3YXlzIHVzZWZ1bCB0byBzdGFydCB3aXRoIHRoZSBmb3VuZGF0aW9ucy4gSSBuZWVkIHRoZSBiaWcgcGljdHVyZSBiZWZvcmUgem9vbWluZyBpbiBvbiB0aGUgc3BlY2lmaWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF9tY19qb2luX2dyb3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaWdtcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lnbXAuYz0yMjYwPXN0YXRpYyB2b2lkIGlwX21jX2NsZWFyX3NyYyhzdHJ1Y3QgaXBfbWNfbGlzdCAqcG1jKVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0yMjc5LSAqL1xubmV0L2lwdjQvaWdtcC5jOjIyODA6c3RhdGljIGludCBfX2lwX21jX2pvaW5fZ3JvdXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXJlcW4gKmltcixcbm5ldC9pcHY0L2lnbXAuYy0yMjgxLVx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBtb2RlKVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0yMzMxLSAqL1xubmV0L2lwdjQvaWdtcC5jOjIzMzI6aW50IGlwX21jX2pvaW5fZ3JvdXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXJlcW4gKmltcilcbm5ldC9pcHY0L2lnbXAuYy0yMzMzLXtcbm5ldC9pcHY0L2lnbXAuYzoyMzM0Olx0cmV0dXJuIF9faXBfbWNfam9pbl9ncm91cChzaywgaW1yLCBNQ0FTVF9FWENMVURFKTtcbm5ldC9pcHY0L2lnbXAuYy0yMzM1LX1cbm5ldC9pcHY0L2lnbXAuYzoyMzM2OkVYUE9SVF9TWU1CT0woaXBfbWNfam9pbl9ncm91cCk7XG5uZXQvaXB2NC9pZ21wLmMtMjMzNy1cbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjMzOS0gKi9cbm5ldC9pcHY0L2lnbXAuYzoyMzQwOmludCBpcF9tY19qb2luX2dyb3VwX3NzbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tcmVxbiAqaW1yLFxubmV0L2lwdjQvaWdtcC5jLTIzNDEtXHRcdFx0IHVuc2lnbmVkIGludCBtb2RlKVxubmV0L2lwdjQvaWdtcC5jLTIzNDIte1xubmV0L2lwdjQvaWdtcC5jOjIzNDM6XHRyZXR1cm4gX19pcF9tY19qb2luX2dyb3VwKHNrLCBpbXIsIG1vZGUpO1xubmV0L2lwdjQvaWdtcC5jLTIzNDQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDY3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIE11bHRpY2FzdCBDb2RlYmFzZSoqCgpBbHJpZ2h0LCBzbyB0aGUgYnVnIGlzbiYjMzk7dCBoaWRkZW4gYXdheSB1bmRlciBhIGAjaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVGAgYmxvY2suIEdvb2QgdG8ga25vdywgdGhhdCBuYXJyb3dzIHRoaW5ncyBkb3duIGEgYml0LiBCdXQgd2FpdCwgYmVmb3JlIEkgc3RhcnQgY2hhc2luZyBnaG9zdHMgZWxzZXdoZXJlLCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcuIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGlzc3VlLCBhbmQgdGhlIGxpa2VsaWhvb2Qgb2YgbXVsdGljYXN0IGludGVyYWN0aW9ucywgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGlmIGBDT05GSUdfSVBfTVVMVElDQVNUYCBpcyBldmVuICp1c2VkKiB3aXRoaW4gdGhlIGBuZXQvaXB2NC9pZ21wLmNgIGZpbGUuIEl0IHNlZW1zIGxpa2VseSwgZ2l2ZW4gdGhlIGZpbGUmIzM5O3MgcHVycG9zZSwgYnV0IGl0JiMzOTtzIGEgcXVpY2sgY2hlY2sgdG8gZWxpbWluYXRlIGEgcG90ZW50aWFsIGZhbHNlIGxlYWQuIE5vIHBvaW50IGdvaW5nIGRvd24gYSByYWJiaXQgaG9sZSBmb3Igc29tZXRoaW5nIHRoYXQgaXNuJiMzOTt0IGNvbm5lY3RlZC4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IHVzYWdlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19JUF9NVUxUSUNBU1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pZ21wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaWdtcC5jLTEwOS1cbm5ldC9pcHY0L2lnbXAuYzoxMTA6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xMTEtLyogUGFyYW1ldGVyIG5hbWVzIGFuZCB2YWx1ZXMgYXJlIHRha2VuIGZyb20gaWdtcC12Mi0wNiBkcmFmdCAqL1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0yMDE9c3RhdGljIHZvaWQgaXBfc2ZfbGlzdF9jbGVhcl9hbGwoc3RydWN0IGlwX3NmX2xpc3QgKnBzZilcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjExLVxubmV0L2lwdjQvaWdtcC5jOjIxMjojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTIxMy1cbi0tXG5uZXQvaXB2NC9pZ21wLmM9MTE3OT1zdGF0aWMgdm9pZCBpcF9tY19maWx0ZXJfZGVsKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIGFkZHIpXG4tLVxubmV0L2lwdjQvaWdtcC5jLTExODctXG5uZXQvaXB2NC9pZ21wLmM6MTE4ODojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTExODktLypcbi0tXG5uZXQvaXB2NC9pZ21wLmM9MTMwOD1zdGF0aWMgdm9pZCBfX2lnbXBfZ3JvdXBfZHJvcHBlZChzdHJ1Y3QgaXBfbWNfbGlzdCAqaW0sIGdmcF90IGdmcClcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTMxMC1cdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IGltLVx1MDAzZWludGVyZmFjZTtcbm5ldC9pcHY0L2lnbXAuYzoxMzExOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMTMxMi1cdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoaW5fZGV2LVx1MDAzZWRldik7XG4tLVxubmV0L2lwdjQvaWdtcC5jLTEzMjAtXG5uZXQvaXB2NC9pZ21wLmM6MTMyMTojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTEzMjItXHRpZiAoaW0tXHUwMDNlbXVsdGlhZGRyID09IElHTVBfQUxMX0hPU1RTKVxuLS1cbm5ldC9pcHY0L2lnbXAuYz0xMzUyPXN0YXRpYyB2b2lkIGlnbXBfZ3JvdXBfYWRkZWQoc3RydWN0IGlwX21jX2xpc3QgKmltKVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xMzU0LVx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gaW0tXHUwMDNlaW50ZXJmYWNlO1xubmV0L2lwdjQvaWdtcC5jOjEzNTU6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xMzU2LVx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChpbl9kZXYtXHUwMDNlZGV2KTtcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTM2My1cbm5ldC9pcHY0L2lnbXAuYzoxMzY0OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMTM2NS1cdGlmIChpbS1cdTAwM2VtdWx0aWFkZHIgPT0gSUdNUF9BTExfSE9TVFMpXG4tLVxubmV0L2lwdjQvaWdtcC5jPTE1MTg9c3RhdGljIHZvaWQgX19fX2lwX21jX2luY19ncm91cChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiBhZGRyLFxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xNTYzLVx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2aW0tXHUwMDNlbG9jayk7XG5uZXQvaXB2NC9pZ21wLmM6MTU2NDojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTE1NjUtXHR0aW1lcl9zZXR1cChcdTAwMjZpbS1cdTAwM2V0aW1lciwgaWdtcF90aW1lcl9leHBpcmUsIDApO1xuLS1cbm5ldC9pcHY0L2lnbXAuYy0xNTczLVxubmV0L2lwdjQvaWdtcC5jOjE1NzQ6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xNTc1LVx0aWdtcHYzX2RlbF9kZWxyZWMoaW5fZGV2LCBpbSk7XG4tLVxubmV0L2lwdjQvaWdtcC5jPTE3NDI9c3RhdGljIHZvaWQgaXBfbWNfcmVqb2luX2dyb3VwcyhzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXG5uZXQvaXB2NC9pZ21wLmMtMTc0My17XG5uZXQvaXB2NC9pZ21wLmM6MTc0NDojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTE3NDUtXHRzdHJ1Y3QgaXBfbWNfbGlzdCAqaW07XG4tLVxubmV0L2lwdjQvaWdtcC5jPTE4MjQ9dm9pZCBpcF9tY19yZW1hcChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXG4tLVxubmV0L2lwdjQvaWdtcC5jLTE4MzAtXHRmb3JfZWFjaF9wbWNfcnRubChpbl9kZXYsIHBtYykge1xubmV0L2lwdjQvaWdtcC5jOjE4MzE6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xODMyLVx0XHRpZ21wdjNfZGVsX2RlbHJlYyhpbl9kZXYsIHBtYyk7XG4tLVxubmV0L2lwdjQvaWdtcC5jPTE4NDA9dm9pZCBpcF9tY19kb3duKHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldilcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTg0OC1cbm5ldC9pcHY0L2lnbXAuYzoxODQ5OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMTg1MC1cdFdSSVRFX09OQ0UoaW5fZGV2LVx1MDAzZW1yX2lmY19jb3VudCwgMCk7XG4tLVxubmV0L2lwdjQvaWdtcC5jLTE4NjAtXG5uZXQvaXB2NC9pZ21wLmM6MTg2MTojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTE4NjItc3RhdGljIHZvaWQgaXBfbWNfcmVzZXQoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxuLS1cbm5ldC9pcHY0L2lnbXAuYz0xODc2PXZvaWQgaXBfbWNfaW5pdF9kZXYoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xODc5LVxubmV0L2lwdjQvaWdtcC5jOjE4ODA6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xODgxLVx0dGltZXJfc2V0dXAoXHUwMDI2aW5fZGV2LVx1MDAzZW1yX2dxX3RpbWVyLCBpZ21wX2dxX3RpbWVyX2V4cGlyZSwgMCk7XG4tLVxubmV0L2lwdjQvaWdtcC5jPTE4OTE9dm9pZCBpcF9tY191cChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXG4tLVxubmV0L2lwdjQvaWdtcC5jLTE5MDAtXHRmb3JfZWFjaF9wbWNfcnRubChpbl9kZXYsIHBtYykge1xubmV0L2lwdjQvaWdtcC5jOjE5MDE6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xOTAyLVx0XHRpZ21wdjNfZGVsX2RlbHJlYyhpbl9kZXYsIHBtYyk7XG4tLVxubmV0L2lwdjQvaWdtcC5jPTE5MTI9dm9pZCBpcF9tY19kZXN0cm95X2RldihzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXG4tLVxubmV0L2lwdjQvaWdtcC5jLTE5MTktXHRpcF9tY19kb3duKGluX2Rldik7XG5uZXQvaXB2NC9pZ21wLmM6MTkyMDojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTE5MjEtXHRpZ21wdjNfY2xlYXJfZGVscmVjKGluX2Rldik7XG4tLVxubmV0L2lwdjQvaWdtcC5jPTE5NzA9c3RhdGljIGludCBpcF9tY19kZWwxX3NyYyhzdHJ1Y3QgaXBfbWNfbGlzdCAqcG1jLCBpbnQgc2Ztb2RlLFxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xOTkwLVx0aWYgKCFwc2YtXHUwMDNlc2ZfY291bnRbTUNBU1RfSU5DTFVERV0gXHUwMDI2XHUwMDI2ICFwc2YtXHUwMDNlc2ZfY291bnRbTUNBU1RfRVhDTFVERV0pIHtcbm5ldC9pcHY0L2lnbXAuYzoxOTkxOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMTk5Mi1cdFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gcG1jLVx1MDAzZWludGVyZmFjZTtcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjAwMC1cdFx0XHRwbWMtXHUwMDNlc291cmNlcyA9IHBzZi1cdTAwM2VzZl9uZXh0O1xubmV0L2lwdjQvaWdtcC5jOjIwMDE6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0yMDAyLVx0XHRpZiAocHNmLVx1MDAzZXNmX29sZGluIFx1MDAyNlx1MDAyNlxuLS1cbm5ldC9pcHY0L2lnbXAuYy0yMDE0LVxubmV0L2lwdjQvaWdtcC5jOjIwMTU6I2lmbmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMjAxNi0jZGVmaW5lIGlnbXBfaWZjX2V2ZW50KHgpXHRkbyB7IH0gd2hpbGUgKDApXG4tLVxubmV0L2lwdjQvaWdtcC5jPTIwMTk9c3RhdGljIGludCBpcF9tY19kZWxfc3JjKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyICpwbWNhLCBpbnQgc2Ztb2RlLFxuLS1cbm5ldC9pcHY0L2lnbXAuYy0yMDM5LVx0cmN1X3JlYWRfdW5sb2NrKCk7XG5uZXQvaXB2NC9pZ21wLmM6MjA0MDojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTIwNDEtXHRzZl9tYXJrc3RhdGUocG1jKTtcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjA1OS1cdCAgICBwbWMtXHUwMDNlc2Zjb3VudFtNQ0FTVF9JTkNMVURFXSkge1xubmV0L2lwdjQvaWdtcC5jOjIwNjA6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0yMDYxLVx0XHRzdHJ1Y3QgaXBfc2ZfbGlzdCAqcHNmO1xuLS1cbm5ldC9pcHY0L2lnbXAuYy0yMDY2LVx0XHRwbWMtXHUwMDNlc2Ztb2RlID0gTUNBU1RfSU5DTFVERTtcbm5ldC9pcHY0L2lnbXAuYzoyMDY3OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMjA2OC1cdFx0cG1jLVx1MDAzZWNyY291bnQgPSBpbl9kZXYtXHUwMDNlbXJfcXJ2ID86IFJFQURfT05DRShuZXQtXHUwMDNlaXB2NC5zeXNjdGxfaWdtcF9xcnYpO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0yMDg1PXN0YXRpYyBpbnQgaXBfbWNfYWRkMV9zcmMoc3RydWN0IGlwX21jX2xpc3QgKnBtYywgaW50IHNmbW9kZSxcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjExMi1cbm5ldC9pcHY0L2lnbXAuYzoyMTEzOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMjExNC1zdGF0aWMgdm9pZCBzZl9tYXJrc3RhdGUoc3RydWN0IGlwX21jX2xpc3QgKnBtYylcbi0tXG5uZXQvaXB2NC9pZ21wLmM9MjE5MT1zdGF0aWMgaW50IGlwX21jX2FkZF9zcmMoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgKnBtY2EsIGludCBzZm1vZGUsXG4tLVxubmV0L2lwdjQvaWdtcC5jLTIyMTItXG5uZXQvaXB2NC9pZ21wLmM6MjIxMzojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTIyMTQtXHRzZl9tYXJrc3RhdGUocG1jKTtcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjIzMi1cdH0gZWxzZSBpZiAoaXNleGNsdWRlICE9IChwbWMtXHUwMDNlc2Zjb3VudFtNQ0FTVF9FWENMVURFXSAhPSAwKSkge1xubmV0L2lwdjQvaWdtcC5jOjIyMzM6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0yMjM0LVx0XHRzdHJ1Y3QgaXBfc2ZfbGlzdCAqcHNmO1xuLS1cbm5ldC9pcHY0L2lnbXAuYy0yMjQzLVx0XHRcdHBtYy1cdTAwM2VzZm1vZGUgPSBNQ0FTVF9JTkNMVURFO1xubmV0L2lwdjQvaWdtcC5jOjIyNDQ6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0yMjQ1LVx0XHQvKiBlbHNlIG5vIGZpbHRlcnM7IGtlZXAgb2xkIG1vZGUgZm9yIHJlcG9ydHMgKi9cbi0tXG5uZXQvaXB2NC9pZ21wLmM9Mjk1OD1zdGF0aWMgaW50IGlnbXBfbWNfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4tLVxubmV0L2lwdjQvaWdtcC5jLTI5NjktXG5uZXQvaXB2NC9pZ21wLmM6Mjk3MDojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTI5NzEtXHRcdHF1ZXJpZXIgPSBJR01QX1YxX1NFRU4oc3RhdGUtXHUwMDNlaW5fZGV2KSA/IFwmIzM0O1YxXCYjMzQ7IDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NjkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIElQIE11bHRpY2FzdCBDb25maWd1cmF0aW9uIGFuZCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBpdCYjMzk7cyBjbGVhciB0aGF0IGBDT05GSUdfSVBfTVVMVElDQVNUYCBpcyBmdW5kYW1lbnRhbCB0byBob3cgYGlnbXAuY2Agb3BlcmF0ZXMuIEdpdmVuIHRoYXQsIGVuYWJsaW5nIGBJUF9NVUxUSUNBU1RgIHNlZW1zIGxpa2UgYSBuby1icmFpbmVyIGZvciBwcm9wZXIgZnVuY3Rpb25hbGl0eS4KCk5vdywgSSB3YXMgYSBiaXQgY29uY2VybmVkIGFib3V0IHRoZSByZWFjaGFiaWxpdHkgb2YgYGlwX21jX2Rlc3Ryb3lfZGV2YCB3aXRob3V0IGBDT05GSUdfSVBfTVVMVElDQVNUYCwgYnV0IGl0ICppcyogYWNjZXNzaWJsZS4gU3RpbGwsIHRvIGdldCBmdWxsIGNvdmVyYWdlIGFuZCBtYWtlIHN1cmUgd2UmIzM5O3JlIHRob3JvdWdobHkgdGVzdGluZyB0aGUgbXVsdGljYXN0IGZlYXR1cmVzLCBgSVBfTVVMVElDQVNUYCBpcyBkZWZpbml0ZWx5IHRoZSByaWdodCBjb25maWcgdG8gaW5jbHVkZS4KCkxldCBtZSB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGlzIHBhdGNoLi4uIEkgc2VlIHRoZSBjb2RlIGlzIG1vZGlmeWluZyBhIGxvb3AgdGhhdCYjMzk7cyBpdGVyYXRpbmcgdGhyb3VnaCBgaW5fZGV2LSZndDttY19saXN0YC4gVGhlIGtleSBhZGRpdGlvbiBpcyB0aGUgYGlwX21jX2hhc2hfcmVtb3ZlYCBjYWxsIHdpdGhpbiB0aGF0IGxvb3AuIEl0IGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgYSBidWcgZml4LCBhY3R1YWxseSDigJMgcmVsYXRlZCB0byB1cGRhdGluZyB0aGUgYG1jX2hhc2hgIHRhYmxlIHdoZW4gYG1jX2xpc3RgIGlzIGJlaW5nIGNsZWFyZWQuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHNpbWlsYXIgbWVtb3J5IGNvcnJ1cHRpb24gaWYgdGhlIGhhc2ggdGFibGUgaXMgYWNjZXNzZWQgYWZ0ZXIgdGhlIGRldmljZSBpcyBkZXN0cm95ZWQuCgpXYWl0IGEgc2Vjb25k4oCmIGBpbl9kZXZgIGlzIGJlaW5nIGRlc3Ryb3llZCwgc28gc2hvdWxkbiYjMzk7dCBpdHMgaGFzaCB0YWJsZSBhbHNvIGJlIGRlc3Ryb3llZD8gSXMgdGhlIGhhc2ggdGFibGUgc29tZWhvdyBnbG9iYWw/IEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgaXBfbWNfaGFzaF9yZW1vdmVgIHRvIGNvbmZpcm0gdGhlIHNjb3BlIG9mIHRoaXMgaGFzaCB0YWJsZS4gSXQgc2VlbXMgbGlrZSB0aGUgcGF0Y2ggaXMgbmVjZXNzYXJ5IHRvIG1haW50YWluIGRhdGEgY29uc2lzdGVuY3kgd2l0aGluIHRoZSBgaW5fZGV2YCBzdHJ1Y3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaWdtcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDMwOlx0XHRcdFJDVV9JTklUX1BPSU5URVIobWNfaGFzaFtoYXNoXSwgaW0pO1xuMTQzMTpcdFx0fVxuMTQzMjpcdFxuMTQzMzpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGluX2Rldi1cdTAwM2VtY19oYXNoLCBtY19oYXNoKTtcbjE0MzQ6XHR9XG4xNDM1Olx0XG4xNDM2Olx0c3RhdGljIHZvaWQgaXBfbWNfaGFzaF9yZW1vdmUoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LFxuMTQzNzpcdFx0XHRcdCAgICAgIHN0cnVjdCBpcF9tY19saXN0ICppbSlcbjE0Mzg6XHR7XG4xNDM5Olx0XHRzdHJ1Y3QgaXBfbWNfbGlzdCBfX3JjdSAqKm1jX2hhc2ggPSBydG5sX2RlcmVmZXJlbmNlKGluX2Rldi1cdTAwM2VtY19oYXNoKTtcbjE0NDA6XHRcdHN0cnVjdCBpcF9tY19saXN0ICphdXg7XG4xNDQxOlx0XG4xNDQyOlx0XHRpZiAoIW1jX2hhc2gpXG4xNDQzOlx0XHRcdHJldHVybjtcbjE0NDQ6XHRcdG1jX2hhc2ggJiM0Mzs9IGlwX21jX2hhc2goaW0pO1xuMTQ0NTpcdFx0d2hpbGUgKChhdXggPSBydG5sX2RlcmVmZXJlbmNlKCptY19oYXNoKSkgIT0gaW0pXG4xNDQ2Olx0XHRcdG1jX2hhc2ggPSBcdTAwMjZhdXgtXHUwMDNlbmV4dF9oYXNoO1xuMTQ0NzpcdFx0Km1jX2hhc2ggPSBpbS1cdTAwM2VuZXh0X2hhc2g7XG4xNDQ4Olx0fVxuMTQ0OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU3NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEhhc2ggVGFibGUgSXNzdWUqKgoKU28sIHRoZSBjb2RlJiMzOTtzIHVzaW5nIGEgaGFzaCB0YWJsZSAoYGluX2Rldi0mZ3Q7bWNfaGFzaGApIHRoYXQmIzM5O3Mgc3BlY2lmaWMgdG8gZWFjaCBuZXR3b3JrIGRldmljZSAoYGluX2RldmApLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzOiBpZiB0aGUgZGV2aWNlIGl0c2VsZiwgYGluX2RldmAsIGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGRlc3Ryb3llZCwgd2h5IGRvIHdlIGV2ZW4gY2FyZSBhYm91dCByZW1vdmluZyBpdCBmcm9tIHRoZSBoYXNoIHRhYmxlPyBTaG91bGRuJiMzOTt0IGl0IGp1c3QgYmVjb21lIGlycmVsZXZhbnQ/CgpCdXQgdGhlbiBhIHBvc3NpYmlsaXR5IGhpdHMgbWUuIFBlcmhhcHMgYGluX2RldmAgaXNuJiMzOTt0IGltbWVkaWF0ZWx5IGZyZWVkIGFmdGVyIGJlaW5nIG1hcmtlZCBmb3IgZGVzdHJ1Y3Rpb24uIE1heWJlIHRoZXJlJiMzOTtzIGEgd2luZG93IG9mIHRpbWUgd2hlcmUgc29tZW9uZSAqY291bGQqIHN0aWxsIHRyeSB0byBsb29rIGl0IHVwIGluIHRoZSBoYXNoIHRhYmxlLiBJZiB0aGF0JiMzOTtzIHRoZSBjYXNlLCB0aGVuIHRoaXMgcmVtb3ZhbCBvcGVyYXRpb24gYmVjb21lcyBjcnVjaWFsIHRvIGF2b2lkIGRhbmdsaW5nIHBvaW50ZXJzIG9yIG90aGVyIG5hc3R5IG1lbW9yeSBtYW5hZ2VtZW50IGlzc3Vlcy4KClRoZXJlZm9yZSwgdGhlIG5leHQgc3RlcCBpcyBjcnlzdGFsIGNsZWFyOiBJIG5lZWQgdG8gcGlucG9pbnQgZXhhY3RseSB3aGVyZSBgaW5fZGV2LSZndDttY19oYXNoYCBnZXRzIGZyZWVkLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjcml0aWNhbCBpbmZvcm1hdGlvbiB3aWxsIHJlc2lkZSwgYW5kIGZyb20gdGhhdCBJIGNhbiBkZXRlcm1pbmUgaWYgdGhlIHJlbW92YWwgaXMgbmVjZXNzYXJ5IGFuZCBjb3JyZWN0LiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBmaW5kIHRoZSBmcmVlaW5nIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttY19oYXNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaWdtcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lnbXAuYz0xMzUyPXN0YXRpYyB2b2lkIGlnbXBfZ3JvdXBfYWRkZWQoc3RydWN0IGlwX21jX2xpc3QgKmltKVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xMzk4LVxubmV0L2lwdjQvaWdtcC5jOjEzOTk6c3RhdGljIHUzMiBpcF9tY19oYXNoKGNvbnN0IHN0cnVjdCBpcF9tY19saXN0ICppbSlcbm5ldC9pcHY0L2lnbXAuYy0xNDAwLXtcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTQwMy1cbm5ldC9pcHY0L2lnbXAuYzoxNDA0OnN0YXRpYyB2b2lkIGlwX21jX2hhc2hfYWRkKHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldixcbm5ldC9pcHY0L2lnbXAuYy0xNDA1LVx0XHRcdCAgIHN0cnVjdCBpcF9tY19saXN0ICppbSlcbm5ldC9pcHY0L2lnbXAuYy0xNDA2LXtcbm5ldC9pcHY0L2lnbXAuYzoxNDA3Olx0c3RydWN0IGlwX21jX2xpc3QgX19yY3UgKiptY19oYXNoO1xubmV0L2lwdjQvaWdtcC5jLTE0MDgtXHR1MzIgaGFzaDtcbm5ldC9pcHY0L2lnbXAuYy0xNDA5LVxubmV0L2lwdjQvaWdtcC5jOjE0MTA6XHRtY19oYXNoID0gcnRubF9kZXJlZmVyZW5jZShpbl9kZXYtXHUwMDNlbWNfaGFzaCk7XG5uZXQvaXB2NC9pZ21wLmM6MTQxMTpcdGlmIChtY19oYXNoKSB7XG5uZXQvaXB2NC9pZ21wLmM6MTQxMjpcdFx0aGFzaCA9IGlwX21jX2hhc2goaW0pO1xubmV0L2lwdjQvaWdtcC5jOjE0MTM6XHRcdGltLVx1MDAzZW5leHRfaGFzaCA9IG1jX2hhc2hbaGFzaF07XG5uZXQvaXB2NC9pZ21wLmM6MTQxNDpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKG1jX2hhc2hbaGFzaF0sIGltKTtcbm5ldC9pcHY0L2lnbXAuYy0xNDE1LVx0XHRyZXR1cm47XG4tLVxubmV0L2lwdjQvaWdtcC5jLTE0MjEtXG5uZXQvaXB2NC9pZ21wLmM6MTQyMjpcdG1jX2hhc2ggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXBfbWNfbGlzdCAqKSBcdTAwM2NcdTAwM2MgTUNfSEFTSF9TWl9MT0csXG5uZXQvaXB2NC9pZ21wLmMtMTQyMy1cdFx0XHQgIEdGUF9LRVJORUwpO1xubmV0L2lwdjQvaWdtcC5jOjE0MjQ6XHRpZiAoIW1jX2hhc2gpXG5uZXQvaXB2NC9pZ21wLmMtMTQyNS1cdFx0cmV0dXJuO1xuLS1cbm5ldC9pcHY0L2lnbXAuYy0xNDI3LVx0Zm9yX2VhY2hfcG1jX3J0bmwoaW5fZGV2LCBpbSkge1xubmV0L2lwdjQvaWdtcC5jOjE0Mjg6XHRcdGhhc2ggPSBpcF9tY19oYXNoKGltKTtcbm5ldC9pcHY0L2lnbXAuYzoxNDI5Olx0XHRpbS1cdTAwM2VuZXh0X2hhc2ggPSBtY19oYXNoW2hhc2hdO1xubmV0L2lwdjQvaWdtcC5jOjE0MzA6XHRcdFJDVV9JTklUX1BPSU5URVIobWNfaGFzaFtoYXNoXSwgaW0pO1xubmV0L2lwdjQvaWdtcC5jLTE0MzEtXHR9XG5uZXQvaXB2NC9pZ21wLmMtMTQzMi1cbm5ldC9pcHY0L2lnbXAuYzoxNDMzOlx0cmN1X2Fzc2lnbl9wb2ludGVyKGluX2Rldi1cdTAwM2VtY19oYXNoLCBtY19oYXNoKTtcbm5ldC9pcHY0L2lnbXAuYy0xNDM0LX1cbm5ldC9pcHY0L2lnbXAuYy0xNDM1LVxubmV0L2lwdjQvaWdtcC5jOjE0MzY6c3RhdGljIHZvaWQgaXBfbWNfaGFzaF9yZW1vdmUoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LFxubmV0L2lwdjQvaWdtcC5jLTE0MzctXHRcdFx0ICAgICAgc3RydWN0IGlwX21jX2xpc3QgKmltKVxubmV0L2lwdjQvaWdtcC5jLTE0Mzgte1xubmV0L2lwdjQvaWdtcC5jOjE0Mzk6XHRzdHJ1Y3QgaXBfbWNfbGlzdCBfX3JjdSAqKm1jX2hhc2ggPSBydG5sX2RlcmVmZXJlbmNlKGluX2Rldi1cdTAwM2VtY19oYXNoKTtcbm5ldC9pcHY0L2lnbXAuYy0xNDQwLVx0c3RydWN0IGlwX21jX2xpc3QgKmF1eDtcbm5ldC9pcHY0L2lnbXAuYy0xNDQxLVxubmV0L2lwdjQvaWdtcC5jOjE0NDI6XHRpZiAoIW1jX2hhc2gpXG5uZXQvaXB2NC9pZ21wLmMtMTQ0My1cdFx0cmV0dXJuO1xubmV0L2lwdjQvaWdtcC5jOjE0NDQ6XHRtY19oYXNoICYjNDM7PSBpcF9tY19oYXNoKGltKTtcbm5ldC9pcHY0L2lnbXAuYzoxNDQ1Olx0d2hpbGUgKChhdXggPSBydG5sX2RlcmVmZXJlbmNlKCptY19oYXNoKSkgIT0gaW0pXG5uZXQvaXB2NC9pZ21wLmM6MTQ0NjpcdFx0bWNfaGFzaCA9IFx1MDAyNmF1eC1cdTAwM2VuZXh0X2hhc2g7XG5uZXQvaXB2NC9pZ21wLmM6MTQ0NzpcdCptY19oYXNoID0gaW0tXHUwMDNlbmV4dF9oYXNoO1xubmV0L2lwdjQvaWdtcC5jLTE0NDgtfVxuLS1cbm5ldC9pcHY0L2lnbXAuYz0xNTE4PXN0YXRpYyB2b2lkIF9fX19pcF9tY19pbmNfZ3JvdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgYWRkcixcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTUyMC17XG5uZXQvaXB2NC9pZ21wLmM6MTUyMTpcdHN0cnVjdCBpcF9tY19saXN0IF9fcmN1ICoqbWNfaGFzaDtcbm5ldC9pcHY0L2lnbXAuYy0xNTIyLVx0c3RydWN0IGlwX21jX2xpc3QgKmltO1xuLS1cbm5ldC9pcHY0L2lnbXAuYy0xNTI1LVxubmV0L2lwdjQvaWdtcC5jOjE1MjY6XHRtY19oYXNoID0gcnRubF9kZXJlZmVyZW5jZShpbl9kZXYtXHUwMDNlbWNfaGFzaCk7XG5uZXQvaXB2NC9pZ21wLmM6MTUyNzpcdGlmIChtY19oYXNoKSB7XG5uZXQvaXB2NC9pZ21wLmMtMTUyOC1cdFx0dTMyIGhhc2ggPSBoYXNoXzMyKChfX2ZvcmNlIHUzMilhZGRyLCBNQ19IQVNIX1NaX0xPRyk7XG5uZXQvaXB2NC9pZ21wLmMtMTUyOS1cbm5ldC9pcHY0L2lnbXAuYzoxNTMwOlx0XHRmb3IgKGltID0gcnRubF9kZXJlZmVyZW5jZShtY19oYXNoW2hhc2hdKTtcbm5ldC9pcHY0L2lnbXAuYy0xNTMxLVx0XHQgICAgIGltO1xuLS1cbm5ldC9pcHY0L2lnbXAuYy0xNTcxLVxubmV0L2lwdjQvaWdtcC5jOjE1NzI6XHRpcF9tY19oYXNoX2FkZChpbl9kZXYsIGltKTtcbm5ldC9pcHY0L2lnbXAuYy0xNTczLVxuLS1cbm5ldC9pcHY0L2lnbXAuYz0xNzc2PXZvaWQgX19pcF9tY19kZWNfZ3JvdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgYWRkciwgZ2ZwX3QgZ2ZwKVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xNzkwLVx0XHRcdGlmIChuZXdfdXNlcnMgPT0gMCkge1xubmV0L2lwdjQvaWdtcC5jOjE3OTE6XHRcdFx0XHRpcF9tY19oYXNoX3JlbW92ZShpbl9kZXYsIGkpO1xubmV0L2lwdjQvaWdtcC5jLTE3OTItXHRcdFx0XHQqaXAgPSBpLVx1MDAzZW5leHRfcmN1O1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0xOTEyPXZvaWQgaXBfbWNfZGVzdHJveV9kZXYoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xOTI0LVx0d2hpbGUgKChpID0gcnRubF9kZXJlZmVyZW5jZShpbl9kZXYtXHUwMDNlbWNfbGlzdCkpICE9IE5VTEwpIHtcbm5ldC9pcHY0L2lnbXAuYzoxOTI1Olx0XHRpcF9tY19oYXNoX3JlbW92ZShpbl9kZXYsIGkpO1xubmV0L2lwdjQvaWdtcC5jLTE5MjYtXHRcdGluX2Rldi1cdTAwM2VtY19saXN0ID0gaS1cdTAwM2VuZXh0X3JjdTtcbi0tXG5uZXQvaXB2NC9pZ21wLmM9MjgyNj1pbnQgaXBfY2hlY2tfbWNfcmN1KHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIG1jX2FkZHIsIF9fYmUzMiBzcmNfYWRkciwgdTggcHJvdG8pXG4tLVxubmV0L2lwdjQvaWdtcC5jLTI4MjgtXHRzdHJ1Y3QgaXBfbWNfbGlzdCAqaW07XG5uZXQvaXB2NC9pZ21wLmM6MjgyOTpcdHN0cnVjdCBpcF9tY19saXN0IF9fcmN1ICoqbWNfaGFzaDtcbm5ldC9pcHY0L2lnbXAuYy0yODMwLVx0c3RydWN0IGlwX3NmX2xpc3QgKnBzZjtcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjgzMi1cbm5ldC9pcHY0L2lnbXAuYzoyODMzOlx0bWNfaGFzaCA9IHJjdV9kZXJlZmVyZW5jZShpbl9kZXYtXHUwMDNlbWNfaGFzaCk7XG5uZXQvaXB2NC9pZ21wLmM6MjgzNDpcdGlmIChtY19oYXNoKSB7XG5uZXQvaXB2NC9pZ21wLmMtMjgzNS1cdFx0dTMyIGhhc2ggPSBoYXNoXzMyKChfX2ZvcmNlIHUzMiltY19hZGRyLCBNQ19IQVNIX1NaX0xPRyk7XG5uZXQvaXB2NC9pZ21wLmMtMjgzNi1cbm5ldC9pcHY0L2lnbXAuYzoyODM3Olx0XHRmb3IgKGltID0gcmN1X2RlcmVmZXJlbmNlKG1jX2hhc2hbaGFzaF0pO1xubmV0L2lwdjQvaWdtcC5jLTI4MzgtXHRcdCAgICAgaW0gIT0gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwNTIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqRGlnZ2luZyBpbnRvIHRoZSBgbWNfaGFzaGAgSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIG11bHRpY2FzdCBoYXNoIHRhYmxlLCBzcGVjaWZpY2FsbHkgYGluX2Rldi0mZ3Q7bWNfaGFzaGAuIE15IGltbWVkaWF0ZSBvYnNlcnZhdGlvbiBpcyB0aGF0IHRoZSBtZW1vcnkgZm9yIGl0LCB0aGF0IGBpbl9kZXYtJmd0O21jX2hhc2hgIHN0cnVjdHVyZSwgaXNuJiMzOTt0IGFsbG9jYXRlZCB1cGZyb250IGR1cmluZyB0aGUgYGluX2RldmAgc2V0dXAuIEl0JiMzOTtzIGFsbG9jYXRlZCAqbGF6aWx5KiwgaW5zaWRlIGBpcF9tY19oYXNoX2FkZGAg4oCTIHByZWNpc2VseSB3aGVuIHRoZSBmaXJzdCBtdWx0aWNhc3QgZ3JvdXAgZW50cnkgbmVlZHMgdG8gYmUgYWRkZWQgdG8gYW4gaW50ZXJmYWNlJiMzOTtzIG11bHRpY2FzdCBtZW1iZXJzaGlwLiBUaGF0IG1ha2VzIHNlbnNlLCBtaW5pbWl6ZXMgbWVtb3J5IHVzYWdlIGlmIHRoZSBpbnRlcmZhY2UgbmV2ZXIgYWN0dWFsbHkgam9pbnMgYSBtdWx0aWNhc3QgZ3JvdXAuCgpCdXQgaGFuZyBvbuKApiB0aGF0IGFsc28gbWVhbnMgSSBuZWVkIHRvIGJlICpyZWFsbHkqIGNhcmVmdWwgYWJvdXQgdGhlIGRlYWxsb2NhdGlvbiBwYXRoLiBJZiBpdCYjMzk7cyBhbGxvY2F0ZWQgb24gZGVtYW5kLCBJIG5lZWQgdG8ga25vdyAqcHJlY2lzZWx5KiB3aGVyZSBhbmQgd2hlbiBgaW5fZGV2LSZndDttY19oYXNoYCBpcyBmcmVlZC4gIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdCBhbGxvY2F0aW9uIGluIGBpcF9tY19oYXNoX2FkZGAgYW5kIGRldGVybWluZSB0aGUgY29ycmVzcG9uZGluZyBjbGVhbnVwIGZ1bmN0aW9uLCBJIG5lZWQgdG8ga25vdyB3aGljaCBldmVudHMgcmVzdWx0IGluIHRoZSBkZWFsbG9jYXRpb24uIElzIGl0IGhhbmRsZWQgZHVyaW5nIGludGVyZmFjZSB0ZWFyZG93biwgc29tZSBzb3J0IG9mIGdsb2JhbCBzaHV0ZG93biwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/ICBJIGJldHRlciBmaWd1cmUgb3V0IHRoZSBsaWZlY3ljbGUgb2YgdGhhdCBoYXNoIHRhYmxlIHRvIGF2b2lkIG1lbW9yeSBsZWFrcyBvciBkb3VibGUtZnJlZXMuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdG8gYWRkIHRvIG15IG1lbnRhbCBjaGVja2xpc3QgZm9yIHBvdGVudGlhbCBwcm9ibGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZnJlZS4qbWNfaGFzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lnbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDU1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcGx5IGZhbWlsaWFyIHdpdGggc29mdHdhcmUgZGV2ZWxvcG1lbnQgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQ6CgoqKkNoZWNraW5nIGBpbl9kZXZgIFJlc291cmNlIFJlbGVhc2UqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhlIGBpbl9kZXZgIGVudmlyb25tZW50IHJpZ2h0IG5vdy4gSSYjMzk7bSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYWJvdXQgcmVzb3VyY2UgZnJlZWluZyDigJMgYXJlIHdlIHByb3Blcmx5IHJlbGVhc2luZyBtZW1vcnksIGZpbGUgaGFuZGxlcywgY29ubmVjdGlvbnMsIGFuZCBhbGwgdGhlIG90aGVyIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhhdCBlbnZpcm9ubWVudCBhZnRlciBhIHRlc3Qgb3IgYSB0YXNrPyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IGxlYWtzIG9yIGxpbmdlcmluZyBwcm9jZXNzZXMgaW1wYWN0aW5nIHBlcmZvcm1hbmNlIG9yIHN0YWJpbGl0eS4gSXQmIzM5O3MgdGltZSB0byBkaXZlIGluIGFuZCBlbnN1cmUgd2UmIzM5O3JlIGJlaW5nIGdvb2Qgc3Rld2FyZHMgb2Ygb3VyIHJlc291cmNlcyBkdXJpbmcgZGV2ZWxvcG1lbnQuIEkgc3VzcGVjdCB0aGlzIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gYmVjYXVzZSBpdOKAmXMgYSB0eXBpY2FsIHNvdXJjZSBvZiBwcm9ibGVtcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZnJlZV9yY3UuKmluX2RldiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Njg1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgaW5ldGRldl9kZXN0cm95YCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7T2theSwgYGluZXRkZXZfZGVzdHJveWAuLi4mIzM0Oy4gVGhhdCBmdW5jdGlvbiBuYW1lIGltbWVkaWF0ZWx5IHNjcmVhbXMgSVAtc3BlY2lmaWMgbmV0d29yayBkZXZpY2UgdGVhcmRvd24uIEdpdmVuIHRoZSBjb250ZXh0LCBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSB2YXJpb3VzIGRhdGEgc3RydWN0dXJlcyBhbmQgcG90ZW50aWFsIGNsZWFudXAgc2NlbmFyaW9zIGludm9sdmVkLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGlzIGlzIGEgc2ltcGxlIGRlYWxsb2NhdGlvbiBvciBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCByb3V0aW5nIHRhYmxlcywgbmVpZ2hib3IgY2FjaGVzLCBvciBldmVuIHVwcGVyLWxheWVyIHByb3RvY29scyB0aGF0IG5lZWQgY2FyZWZ1bCBoYW5kbGluZyBkdXJpbmcgdGhpcyBkZXN0cm95IHByb2Nlc3MuIE15IGZvY3VzIGlzIG9uIGVuc3VyaW5nIHRoZXJlIGFyZSBubyBtZW1vcnkgbGVha3MsIGRhbmdsaW5nIHBvaW50ZXJzLCBvciBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIGx1cmtpbmcgd2l0aGluIHRoZSBmdW5jdGlvbiYjMzk7cyBsb2dpYy4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGxvY2tpbmcgYW5kIGNvbmN1cnJlbmN5LCBlc3BlY2lhbGx5IGlmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYSBtdWx0aS10aHJlYWRlZCBjb250ZXh0LiBBIHdlbGwtZGVzaWduZWQgZnVuY3Rpb24gd2lsbCBoYW5kbGUgYWxsIHRoZXNlIHBvdGVudGlhbCBpc3N1ZXMgZWxlZ2FudGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2RldmluZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzE0Olx0c3RhdGljIHZvaWQgaW5ldGRldl9kZXN0cm95KHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldilcbiAzMTU6XHR7XG4gMzE2Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIDMxNzpcdFx0c3RydWN0IGluX2lmYWRkciAqaWZhO1xuIDMxODpcdFxuIDMxOTpcdFx0QVNTRVJUX1JUTkwoKTtcbiAzMjA6XHRcbiAzMjE6XHRcdGRldiA9IGluX2Rldi1cdTAwM2VkZXY7XG4gMzIyOlx0XG4gMzIzOlx0XHRpbl9kZXYtXHUwMDNlZGVhZCA9IDE7XG4gMzI0Olx0XG4gMzI1Olx0XHRpcF9tY19kZXN0cm95X2Rldihpbl9kZXYpO1xuIDMyNjpcdFxuIDMyNzpcdFx0d2hpbGUgKChpZmEgPSBydG5sX2RlcmVmZXJlbmNlKGluX2Rldi1cdTAwM2VpZmFfbGlzdCkpICE9IE5VTEwpIHtcbiAzMjg6XHRcdFx0aW5ldF9kZWxfaWZhKGluX2RldiwgXHUwMDI2aW5fZGV2LVx1MDAzZWlmYV9saXN0LCAwKTtcbiAzMjk6XHRcdFx0aW5ldF9mcmVlX2lmYShpZmEpO1xuIDMzMDpcdFx0fVxuIDMzMTpcdFxuIDMzMjpcdFx0UkNVX0lOSVRfUE9JTlRFUihkZXYtXHUwMDNlaXBfcHRyLCBOVUxMKTtcbiAzMzM6XHRcbiAzMzQ6XHRcdGRldmluZXRfc3lzY3RsX3VucmVnaXN0ZXIoaW5fZGV2KTtcbiAzMzU6XHRcdG5laWdoX3Bhcm1zX3JlbGVhc2UoXHUwMDI2YXJwX3RibCwgaW5fZGV2LVx1MDAzZWFycF9wYXJtcyk7XG4gMzM2Olx0XHRhcnBfaWZkb3duKGRldik7XG4gMzM3Olx0XG4gMzM4Olx0XHRpbl9kZXZfcHV0KGluX2Rldik7XG4gMzM5Olx0fVxuIDM0MDpcdFxuIDM0MTpcdHN0YXRpYyBpbnQgX19pbml0IGluZXRfYmxhY2tob2xlX2Rldl9pbml0KHZvaWQpXG4gMzQyOlx0e1xuIDM0MzpcdFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM1OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBSZXNvdXJjZSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgaW5fZGV2X3B1dChpbl9kZXYpYC4gVGhlIGNvbW1lbnQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyBgaW5fZGV2YC4gQWxyaWdodCwgdGhhdCYjMzk7cyB0aGUgY29yZSBmdW5jdGlvbiYjMzk7cyByb2xlOiByZXNvdXJjZSBjbGVhbnVwLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBleGFtaW5lIHRoZSBkZXRhaWxzIG9mIHdoYXQgYGluX2Rldl9wdXRgIGRvZXMgdG8gYWNjb21wbGlzaCB0aGF0IGZyZWVpbmcgb2YgdGhlIGBpbl9kZXZgIHJlc291cmNlLiBUaW1lIHRvIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5fZGV2X3B1dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oPTI4NT12b2lkIGluX2Rldl9maW5pc2hfZGVzdHJveShzdHJ1Y3QgaW5fZGV2aWNlICppZGV2KTtcbmluY2x1ZGUvbGludXgvaW5ldGRldmljZS5oLTI4Ni1cbmluY2x1ZGUvbGludXgvaW5ldGRldmljZS5oOjI4NzpzdGF0aWMgaW5saW5lIHZvaWQgaW5fZGV2X3B1dChzdHJ1Y3QgaW5fZGV2aWNlICppZGV2KVxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgtMjg4LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaC0yOTItXG5pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaDoyOTM6I2RlZmluZSBfX2luX2Rldl9wdXQoaWRldikgIHJlZmNvdW50X2RlYyhcdTAwMjYoaWRldiktXHUwMDNlcmVmY250KVxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgtMjk0LSNkZWZpbmUgaW5fZGV2X2hvbGQoaWRldikgICByZWZjb3VudF9pbmMoXHUwMDI2KGlkZXYpLVx1MDAzZXJlZmNudClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3MjYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwbHkgZmFtaWxpYXIgd2l0aCBzb2Z0d2FyZSBkZXZlbG9wbWVudCBhbmQgcmVsYXRlZCB0ZXJtaW5vbG9neToKCioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBDYWxsOiBgaW5fZGV2X2ZpbmlzaF9kZXN0cm95YCoqCgpBbHJpZ2h0LCBteSBicmFpbiBqdXN0IHdlbnQgc3RyYWlnaHQgdG8gdGhhdCBmdW5jdGlvbiBuYW1lOiBgaW5fZGV2X2ZpbmlzaF9kZXN0cm95YC4gSW1tZWRpYXRlbHksIEkmIzM5O20gcGFyc2luZyB0aGF0LiBUaGUgcHJlZml4ICYjMzQ7aW5fZGV2JiMzNDsgc2NyZWFtcyAmIzM0O2RldmVsb3BtZW50IGVudmlyb25tZW50JiMzNDsgb3IgJiMzNDtkZXZlbG9wbWVudCBjb250ZXh0LiYjMzQ7IFNvLCB0aGlzIGlzbiYjMzk7dCBzb21ldGhpbmcgZGVzdGluZWQgZm9yIHByb2R1Y3Rpb24sIHRoYXQmIzM5O3MgY2xlYXIuIEl0JiMzOTtzIGxpa2VseSByZWxhdGVkIHRvIHNvbWUgc29ydCBvZiB0ZW1wb3Jhcnkgc2V0dXAsIHRlc3RpbmcsIG9yIG1heWJlIGNsZWFudXAgcmVsYXRlZCB0byBhIGRldmVsb3BtZW50IGJ1aWxkLgoKVGhlIGNvcmUgYWN0aW9uIGlzICYjMzQ7ZmluaXNoX2Rlc3Ryb3kuJiMzNDsgRGVzdHJveWluZyAqd2hhdCo/IFRoZSBjb250ZXh0IGlzIGtleS4gQW0gSSBsb29raW5nIGF0IHJlc291cmNlcywgdGVtcG9yYXJ5IGZpbGVzLCB0ZXN0IGRhdGEsIGRhdGFiYXNlIGVudHJpZXMsIG9yIGEgd2hvbGUgZGV2ZWxvcG1lbnQgaW5zdGFuY2U/IFRoZSBuYW1pbmcgY29udmVudGlvbiBzdWdnZXN0cyBpdCBpcyByZWxhdGVkIHRvIHRoZSBjbGVhbnVwIG9mIHNvbWV0aGluZyB3aGljaCBoYWQgYmVlbiBzdGFydGVkIGZvciB0aGUgJiMzNDtpbl9kZXYmIzM0OyBlbnZpcm9ubWVudC4gVGhlIHVzZSBvZiAmIzM0O2ZpbmlzaCYjMzQ7IGhpbnRzIGF0IGEgcHJvY2VzcyBvciBzdGF0ZSB0aGF0IGlzIGNvbWluZyB0byBhbiBlbmQuIEl0JiMzOTtzIG5vdCB0aGUgaW5pdGlhbCBkZXN0cnVjdGlvbiwgYnV0IHRoZSAqY29tcGxldGlvbiogb2YgdGhhdCBwcm9jZXNzLgoKSSBuZWVkIG1vcmUgY29udGV4dCwgb2J2aW91c2x5LiBCdXQgYmFzZWQgb24ganVzdCB0aGUgbmFtZSwgSSYjMzk7bSBhc3N1bWluZyB0aGF0IEkgYW0gZWl0aGVyIHRyeWluZyB0byBjbGVhbiB1cCByZXNvdXJjZXMgZnJvbSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMsIG9yIGFtIHJldmlld2luZyB0aGF0IGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luX2Rldl9maW5pc2hfZGVzdHJveSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2RldmluZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9kZXZpbmV0LmM9MjMyPXN0YXRpYyB2b2lkIGluZXRfZnJlZV9pZmEoc3RydWN0IGluX2lmYWRkciAqaWZhKVxuLS1cbm5ldC9pcHY0L2RldmluZXQuYy0yMzUtXHQgKiB0byByZWxlYXNlIHRoZSByZWZlcmVuY2UgdG8gdGhlIG5ldGRldiB0aGUgc2FtZSB3YXkuXG5uZXQvaXB2NC9kZXZpbmV0LmM6MjM2Olx0ICogaW5fZGV2X3B1dCgpIC1cdTAwM2UgaW5fZGV2X2ZpbmlzaF9kZXN0cm95KCkgLVx1MDAzZSBuZXRkZXZfcHV0KClcbm5ldC9pcHY0L2RldmluZXQuYy0yMzctXHQgKi9cbi0tXG5uZXQvaXB2NC9kZXZpbmV0LmM9MjQxPXN0YXRpYyB2b2lkIGluX2Rldl9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4tLVxubmV0L2lwdjQvZGV2aW5ldC5jLTI0OC1cbm5ldC9pcHY0L2RldmluZXQuYzoyNDk6dm9pZCBpbl9kZXZfZmluaXNoX2Rlc3Ryb3koc3RydWN0IGluX2RldmljZSAqaWRldilcbm5ldC9pcHY0L2RldmluZXQuYy0yNTAte1xuLS1cbm5ldC9pcHY0L2RldmluZXQuYy0yNjMtfVxubmV0L2lwdjQvZGV2aW5ldC5jOjI2NDpFWFBPUlRfU1lNQk9MKGluX2Rldl9maW5pc2hfZGVzdHJveSk7XG5uZXQvaXB2NC9kZXZpbmV0LmMtMjY1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzMzMgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIGFzIEkgYXBwcm9hY2ggcmVhZGluZyB0aGlzIGNvZGUgc25pcHBldDoKCioqRGVjb25zdHJ1Y3RpbmcgYGluX2Rldl9maW5pc2hfZGVzdHJveWAqKgoKQWxyaWdodCwgSSYjMzk7bSBzdGFydGluZyB3aXRoIGBpbl9kZXZfZmluaXNoX2Rlc3Ryb3lgLiBUaGUgdmVyeSBuYW1lIHN1Z2dlc3RzIHRoaXMgaXMgcmVsYXRlZCB0byBzb21ldGhpbmcgYmVpbmcgZGVzdHJveWVkLCBsaWtlbHkgaW4gYSBkZXZlbG9wbWVudCBjb250ZXh0LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCAqaXMqIGJlaW5nIGRlc3Ryb3llZD8gSXMgdGhpcyBhIGNsZWFudXAgZnVuY3Rpb24sIGEgdGVhcmRvd24sIG9yIHNvbWV0aGluZyBtb3JlIHByb2FjdGl2ZSBsaWtlIHByZXZlbnRpbmcgZnVydGhlciBvcGVyYXRpb24/IFRoZSAmIzM0O2luX2RldiYjMzQ7IHByZWZpeCBpcyBpbnRlcmVzdGluZy4gSXQgc3Ryb25nbHkgaGludHMgdGhpcyBmdW5jdGlvbiBpcyBwcm9iYWJseSBub3QgbWVhbnQgZm9yIHByb2R1Y3Rpb24gY29kZSBhbmQgaXMgbW9zdCBsaWtlbHkgZm9yIHRvb2xpbmcsIGRlYnVnZ2luZywgb3IgdGVzdCBlbnZpcm9ubWVudHMuIElzIHRoaXMgYSBmaW5hbCBjbGVhbnVwIHN0YWdlPyBJIHdvbmRlciB3aGF0IHJlc291cmNlcyBuZWVkIHRvIGJlIGZyZWVkIG9yIHdoYXQgc3RhdGUgbmVlZHMgdG8gYmUgcmVzZXQgYXQgdGhpcyBwb2ludC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBob3cgdGhlIGZ1bmN0aW9uIGlzIHVzZWQgYW5kIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIHdpdGhpbiBpdC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGFueSBkZXBlbmRlbmNpZXMgYW5kIGNhbGxzLiBUaGlzIHNob3VsZCBiZSBpbnRlcmVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9kZXZpbmV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0MTpcdHN0YXRpYyB2b2lkIGluX2Rldl9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4gMjQyOlx0e1xuIDI0MzpcdFx0c3RydWN0IGluX2RldmljZSAqaWRldiA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgaW5fZGV2aWNlLCByY3VfaGVhZCk7XG4gMjQ0Olx0XG4gMjQ1Olx0XHRrZnJlZShyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGlkZXYtXHUwMDNlbWNfaGFzaCwgMSkpO1xuIDI0NjpcdFx0a2ZyZWUoaWRldik7XG4gMjQ3Olx0fVxuIDI0ODpcdFxuIDI0OTpcdHZvaWQgaW5fZGV2X2ZpbmlzaF9kZXN0cm95KHN0cnVjdCBpbl9kZXZpY2UgKmlkZXYpXG4gMjUwOlx0e1xuIDI1MTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGlkZXYtXHUwMDNlZGV2O1xuIDI1MjpcdFxuIDI1MzpcdFx0V0FSTl9PTihpZGV2LVx1MDAzZWlmYV9saXN0KTtcbiAyNTQ6XHRcdFdBUk5fT04oaWRldi1cdTAwM2VtY19saXN0KTtcbiAyNTU6XHQjaWZkZWYgTkVUX1JFRkNOVF9ERUJVR1xuIDI1NjpcdFx0cHJfZGVidWcoXCYjMzQ7JXM6ICVwPSVzXFxuXCYjMzQ7LCBfX2Z1bmNfXywgaWRldiwgZGV2ID8gZGV2LVx1MDAzZW5hbWUgOiBcJiMzNDtOSUxcJiMzNDspO1xuIDI1NzpcdCNlbmRpZlxuIDI1ODpcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNmlkZXYtXHUwMDNlZGV2X3RyYWNrZXIpO1xuIDI1OTpcdFx0aWYgKCFpZGV2LVx1MDAzZWRlYWQpXG4gMjYwOlx0XHRcdHByX2VycihcJiMzNDtGcmVlaW5nIGFsaXZlIGluX2RldmljZSAlcFxcblwmIzM0OywgaWRldik7XG4gMjYxOlx0XHRlbHNlXG4gMjYyOlx0XHRcdGNhbGxfcmN1KFx1MDAyNmlkZXYtXHUwMDNlcmN1X2hlYWQsIGluX2Rldl9mcmVlX3JjdSk7XG4gMjYzOlx0fVxuIDI2NDpcdEVYUE9SVF9TWU1CT0woaW5fZGV2X2ZpbmlzaF9kZXN0cm95KTtcbiAyNjU6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwMDIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3NTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVXNlLUFmdGVyLUZyZWUgVnVsbmVyYWJpbGl0eSBpbiBNdWx0aWNhc3QgRGV2aWNlIEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpbiB0aGUgbXVsdGljYXN0IGRldmljZSBtYW5hZ2VtZW50LiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoYXQgYGtmcmVlKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoaWRldi0mZ3Q7bWNfaGFzaCwgMSkpO2AgaXMgaGFwcGVuaW5nIGluIGBpbl9kZXZfZnJlZV9yY3VgLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBsaWVzIGluIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBpcF9tY19kZXN0cm95X2RldmAgYW5kIGBtY19oYXNoYC4gYGlwX21jX2Rlc3Ryb3lfZGV2YCBpcyByZXNwb25zaWJsZSBmb3IgY2xlYXJpbmcgYGluX2Rldi0mZ3Q7bWNfbGlzdGAuICBUaGUga2V5IG9ic2VydmF0aW9uIGlzIHRoYXQgaWYgYGlwX21jX2Rlc3Ryb3lfZGV2YCAqZG9lc24mIzM5O3QqIGFsc28gcmVtb3ZlIGVsZW1lbnRzIGZyb20gYG1jX2hhc2hgLCB0aGVuIGBtY19oYXNoYCBpcyBsZWZ0IHdpdGggZGFuZ2xpbmcgcG9pbnRlcnMgdG8gdGhlIGBpcF9tY19saXN0YCBlbGVtZW50cy4KCkFuZCwgb2YgY291cnNlLCBgaXBfbWNfZGVzdHJveV9kZXZgIGNhbGxzIGBpcF9tYV9wdXQoaSlgIHdoaWNoIGZyZWVzIHRoZXNlIGBpcF9tY19saXN0YCBlbGVtZW50cyEgVGhpcyBtZWFucyBgbWNfaGFzaGAgZW5kcyB1cCBjb250YWluaW5nIHBvaW50ZXJzIHRvIG1lbW9yeSB0aGF0JiMzOTtzIGJlZW4gZnJlZWQuICBTbywgdGhlIHF1ZXN0aW9uIGlzLCBpcyBgbWNfaGFzaGAgYWNjZXNzZWQgKmFmdGVyKiBgaXBfbWNfZGVzdHJveV9kZXZgPwoKWWVzLCBgaW5fZGV2YCBpcyBzdGlsbCBhbGl2ZSB1bnRpbCBgaW5fZGV2X3B1dGAgZHJvcHMgaXRzIHJlZmVyZW5jZSBjb3VudCB0byB6ZXJvLiBDcnVjaWFsbHksIHRoZXJlIGNhbiBiZSBjb25jdXJyZW50IFJDVSByZWFkZXJzIGFjY2Vzc2luZyBgbWNfaGFzaGAuICBBbmQsIHllcywgYGlwX2NoZWNrX21jX3JjdWAgYWNjZXNzZXMgYG1jX2hhc2hgIHVuZGVyIFJDVS4gVGhpcyBpcyB0aGUgY3J1eCEgSWYgYGlwX21jX2Rlc3Ryb3lfZGV2YCBmcmVlcyB0aGUgZWxlbWVudHMsIGJ1dCBsZWF2ZXMgdGhlaXIgcG9pbnRlcnMgaW4gYG1jX2hhc2hgLCBhbiBSQ1UgcmVhZGVyIGNvdWxkIHBvdGVudGlhbGx5IGFjY2VzcyBhIGZyZWVkIGVsZW1lbnQuCgpIb2xkIG9uIGEgbWludXRlLCBgaXBfbWFfcHV0YCB1c2VzIGBrZnJlZV9yY3VgLCBzbyB0aGUgZWxlbWVudCBpc24mIzM5O3QgKmltbWVkaWF0ZWx5KiBmcmVlZDsgaXQmIzM5O3MgZnJlZWQgYWZ0ZXIgdGhlIFJDVSBncmFjZSBwZXJpb2QuIEJ1dCwgYG1jX2hhc2hgIGl0c2VsZiBpcyBmcmVlZCBpbiBgaW5fZGV2X2ZyZWVfcmN1YCwgd2hpY2ggYWxzbyBoYXBwZW5zIGFmdGVyIGFuIFJDVSBncmFjZSBwZXJpb2QuICBTbywgdGhlIGVsZW1lbnRzIHNob3VsZCwgdGVjaG5pY2FsbHksIHN0aWxsIGJlIHZhbGlkIHdoaWxlIGBtY19oYXNoYCBpdHNlbGYgaXMgcmVmZXJlbmNlZC4KCkhvd2V2ZXIsIGlmIGBtY19oYXNoYCBpcyBub3QgY2xlYXJlZCBhbmQgc29tZW9uZSBhdHRlbXB0cyB0byBhZGQgYmFjayB0byBgbWNfbGlzdGA/IE5vLCBubywgYGluX2Rldi0mZ3Q7ZGVhZCA9IDFgIGdldHMgc2V0IGJlZm9yZSBgaXBfbWNfZGVzdHJveV9kZXZgIHdoaWNoIHByZXZlbnRzIHRoaXMuCgpTbywgdGhlICpyZWFsKiBpc3N1ZSBpcyB0aGF0IGBpcF9tY19kZXN0cm95X2RldmAgcmVtb3ZlcyBlbGVtZW50cyBmcm9tIGBtY19saXN0YCBidXQgKm5vdCogZnJvbSBgbWNfaGFzaGAuIElmIHdlIHRyeSB0byBhZGQgYSBuZXcgZWxlbWVudCwgdGhhdCYjMzk7cyBibG9ja2VkIGJ5IHRoZSBgZGVhZGAgZmxhZy4gSWYgYGlwX2NoZWNrX21jX3JjdWAgaXMgY2FsbGVkPyBJdCB3aWxsIGl0ZXJhdGUgb3ZlciBgbWNfaGFzaGAuICBUaGUgZWxlbWVudHMgaW4gYG1jX2hhc2hgIGFyZSBmcmVlZCB2aWEgUkNVLCBidXQgaWYgYGlwX2NoZWNrX21jX3JjdWAgcnVucyAqYWZ0ZXIqIHRoZSBncmFjZSBwZXJpb2QsIGFuZCBgaW5fZGV2YCBpcyAqc3RpbGwgYWxpdmUqLCB3ZSBjb3VsZCBiZSBhY2Nlc3NpbmcgZnJlZWQgbWVtb3J5LgoKQW5kIGBpbl9kZXZgICpjb3VsZCogc3RpbGwgYmUgYWxpdmUgYmVjYXVzZSBzb21lb25lIGhvbGRzIGEgcmVmZXJlbmNlIHRvIGl0LiBGb3IgaW5zdGFuY2UsIGEgc29ja2V0IG1pZ2h0IGJlIGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gYGluX2RldmAuIFRoaXMgbWVhbnMgYGluX2RldmAgY2FuIG91dGxpdmUgdGhlIFJDVSBncmFjZSBwZXJpb2Qgb2YgdGhlIGBpcF9tY19saXN0YCBlbGVtZW50cy4gIFNvLCBgaXBfY2hlY2tfbWNfcmN1YCAod2hpY2ggKm9ubHkqIHJlcXVpcmVzIGFuIFJDVSByZWFkIGxvY2spIGNhbiBhY2Nlc3MgYGluX2Rldi0mZ3Q7bWNfaGFzaGAgYW5kIGZpbmQgdGhvc2UgZGFuZ2xpbmcgcG9pbnRlcnMhIEJvb20uCgpUaGlzIGlzIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gVGhlIHBhdGNoIGNvcnJlY3RseSBhZGRyZXNzZXMgdGhpcyBieSByZW1vdmluZyB0aGUgZWxlbWVudHMgZnJvbSBgbWNfaGFzaGAgd2l0aGluIGBpcF9tY19kZXN0cm95X2RldmAuIFRoaXMgcHJldmVudHMgdGhlIGRhbmdsaW5nIHBvaW50ZXJzLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgd29ydGggdGhvcm91Z2ggZnV6emluZyB3aXRoIHRoZSBsaXN0ZWQgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbnMuICBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIGBJUF9NVUxUSUNBU1RgIGlzICpyZWFsbHkqIG5lZWRlZCBmb3IgYGlwX2NoZWNrX21jX3JjdWAgdG8gYmUgYWN0aXZlLCBidXQgdGhpcyBsb29rcyBsaWtlIGEgZ29vZCBmaXghCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX2NoZWNrX21jX3JjdSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lnbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pZ21wLmM9MjgwMD12b2lkIGlwX21jX2Ryb3Bfc29ja2V0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjgyNS0vKiBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgKi9cbm5ldC9pcHY0L2lnbXAuYzoyODI2OmludCBpcF9jaGVja19tY19yY3Uoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgbWNfYWRkciwgX19iZTMyIHNyY19hZGRyLCB1OCBwcm90bylcbm5ldC9pcHY0L2lnbXAuYy0yODI3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4MDAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUgdGhpbmtpbmcgdGhyb3VnaCB0aGlzOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgaXBfY2hlY2tfbWNfcmN1YCBGdW5jdGlvbiBDYWxscyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZmlndXJlIG91dCB0aGUgbGFuZHNjYXBlIGFyb3VuZCBgaXBfY2hlY2tfbWNfcmN1YC4gS25vd2luZyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICp1c2VkKiBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBpbXBhY3QuIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcyB0byBnZXQgYSBncmFzcCBvbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIFVuZGVyc3RhbmRpbmcgY29udGV4dCBpcyBldmVyeXRoaW5nLCBzbyBsZXQmIzM5O3Mgc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZCBhbmQgd2hhdCBzdXJyb3VuZGluZyBjb2RlIGxvb2tzIGxpa2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX2NoZWNrX21jX3JjdSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pZ21wLmM9MjgwMD12b2lkIGlwX21jX2Ryb3Bfc29ja2V0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjgyNS0vKiBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgKi9cbm5ldC9pcHY0L2lnbXAuYzoyODI2OmludCBpcF9jaGVja19tY19yY3Uoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgbWNfYWRkciwgX19iZTMyIHNyY19hZGRyLCB1OCBwcm90bylcbm5ldC9pcHY0L2lnbXAuYy0yODI3LXtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTI0OTE9aXBfcm91dGVfaW5wdXRfcmN1KHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBkYWRkciwgX19iZTMyIHNhZGRyLFxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMjUxMy1cbm5ldC9pcHY0L3JvdXRlLmM6MjUxNDpcdFx0b3VyID0gaXBfY2hlY2tfbWNfcmN1KGluX2RldiwgZGFkZHIsIHNhZGRyLFxubmV0L2lwdjQvcm91dGUuYy0yNTE1LVx0XHRcdFx0ICAgICAgaXBfaGRyKHNrYiktXHUwMDNlcHJvdG9jb2wpO1xuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMjUyMi1cdFx0XHRpZiAobDNfaW5fZGV2KVxubmV0L2lwdjQvcm91dGUuYzoyNTIzOlx0XHRcdFx0b3VyID0gaXBfY2hlY2tfbWNfcmN1KGwzX2luX2RldiwgZGFkZHIsIHNhZGRyLFxubmV0L2lwdjQvcm91dGUuYy0yNTI0LVx0XHRcdFx0XHRcdCAgICAgIGlwX2hkcihza2IpLVx1MDAzZXByb3RvY29sKTtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTI1NTk9c3RhdGljIHN0cnVjdCBydGFibGUgKl9fbWtyb3V0ZV9vdXRwdXQoY29uc3Qgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTI1OTktXHRcdGZsYWdzIHw9IFJUQ0ZfTVVMVElDQVNUIHwgUlRDRl9MT0NBTDtcbm5ldC9pcHY0L3JvdXRlLmM6MjYwMDpcdFx0aWYgKCFpcF9jaGVja19tY19yY3UoaW5fZGV2LCBmbDQtXHUwMDNlZGFkZHIsIGZsNC1cdTAwM2VzYWRkcixcbm5ldC9pcHY0L3JvdXRlLmMtMjYwMS1cdFx0XHRcdCAgICAgZmw0LVx1MDAzZWZsb3dpNF9wcm90bykpXG4tLVxubmV0L2lwdjQvdWRwLmM9Mjc2MD1lbnVtIHNrYl9kcm9wX3JlYXNvbiB1ZHBfdjRfZWFybHlfZGVtdXgoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC91ZHAuYy0yNzg0LVxubmV0L2lwdjQvdWRwLmM6Mjc4NTpcdFx0b3VycyA9IGlwX2NoZWNrX21jX3JjdShpbl9kZXYsIGlwaC1cdTAwM2VkYWRkciwgaXBoLVx1MDAzZXNhZGRyLFxubmV0L2lwdjQvdWRwLmMtMjc4Ni1cdFx0XHRcdCAgICAgICBpcGgtXHUwMDNlcHJvdG9jb2wpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDYwMAoJCQkJCQkJb3V0cHV0OiAyMTYKCQkJCQkJCXRob3VnaHRzOiAyMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBNdWx0aWNhc3QgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgc3RlbXMgZnJvbSB0aGUgcm91dGluZyBhbmQgVURQIGVhcmx5IGRlbXV4LCBtZWFuaW5nIGl0JiMzOTtzIGhpZ2hseSBhY2Nlc3NpYmxlIGFuZCBjb3VsZCBjYXVzZSBzaWduaWZpY2FudCBpc3N1ZXMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpczogaXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cywgZ2l2ZW4gdGhlIHZ1bG5lcmFiaWxpdHksIHNob3VsZCBiZSB0aGVzZSBzcGVjaWZpYyBmdW5jdGlvbnM6IGBpcF9tY19kZXN0cm95X2RldmAsIGBpcF9jaGVja19tY19yY3VgLCBgaXBfbWNfaGFzaF9yZW1vdmVgLCBgaXBfbWNfaGFzaF9hZGRgLCBgaW5ldGRldl9kZXN0cm95YCwgYF9fX19pcF9tY19pbmNfZ3JvdXBgLCBhbmQgYF9faXBfbWNfZGVjX2dyb3VwYC4gVGhlc2UgYXJlIGNsZWFybHkgdGhlIGtleSBhcmVhcyBpbnZvbHZlZCBpbiB0aGUgbXVsdGljYXN0IGdyb3VwIG1hbmFnZW1lbnQsIGVzcGVjaWFsbHkgYXJvdW5kIGRldmljZSBkZXN0cnVjdGlvbiBhbmQgaGFzaCB0YWJsZSBvcGVyYXRpb25zLgoKVGhlIGlzc3VlLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gTXVsdGljYXN0IGdyb3VwcyBhcmUgYmVpbmcgcHJvcGVybHkgcmVtb3ZlZCBmcm9tIHRoZSBkZXZpY2UmIzM5O3MgbGlzdCwgYnV0IHRoZSBjb3JyZXNwb25kaW5nIGVudHJpZXMgaW4gdGhlIGhhc2ggdGFibGUgcmVtYWluLiBJZiB0aGUgYGluX2RldmljZWAgaW5zdGFuY2Ugb3V0bGl2ZXMgdGhlIFJDVSBncmFjZSBwZXJpb2Qg4oCTIHdoaWNoIGNhbiBlYXNpbHkgaGFwcGVuIGR1ZSB0byBhIHNvY2tldCBob2xkaW5nIGEgcmVmZXJlbmNlIOKAkyB0aGVuIGBpcF9jaGVja19tY19yY3VgIGNvdWxkIGJlIGNhbGxlZCwgYW5kIGl0IHdvdWxkIGFjY2VzcyB0aGVzZSBkYW5nbGluZyBwb2ludGVycyBpbiB0aGUgYG1jX2hhc2hgIHRhYmxlLiBUaGlzIGlzIGEgZnVuZGFtZW50YWwgZnVuY3Rpb25hbCBmbGF3IGluIHRoZSBJUHY0IG11bHRpY2FzdCBpbXBsZW1lbnRhdGlvbi4KClRoZSBrZXkgY29uZmlndXJhdGlvbiB0byBlbmFibGUgaGVyZSBpcyBgSVBfTVVMVElDQVNUYCwgZW5zdXJpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgZXZlbiBhdmFpbGFibGUgdG8gYmUgdGFyZ2V0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9NVUxUSUNBU1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF9tY19kZXN0cm95X2RldiYjMzQ7LAogICAgJiMzNDtpcF9jaGVja19tY19yY3UmIzM0OywKICAgICYjMzQ7aXBfbWNfaGFzaF9yZW1vdmUmIzM0OywKICAgICYjMzQ7aXBfbWNfaGFzaF9hZGQmIzM0OywKICAgICYjMzQ7aW5ldGRldl9kZXN0cm95JiMzNDssCiAgICAmIzM0O19fX19pcF9tY19pbmNfZ3JvdXAmIzM0OywKICAgICYjMzQ7X19pcF9tY19kZWNfZ3JvdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgbXVsdGljYXN0IGdyb3VwcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBkZXZpY2UmIzM5O3MgYG1jX2xpc3RgIGR1cmluZyBkZXZpY2UgZGVzdHJ1Y3Rpb24gYnV0IGFyZSBsZWZ0IGluIHRoZSBgbWNfaGFzaGAgdGFibGUuIFRoaXMgY2FuIGxlYWQgdG8gYSB1c2UtYWZ0ZXItZnJlZSBpZiB0aGUgYGluX2RldmljZWAgb3V0bGl2ZXMgdGhlIFJDVSBncmFjZSBwZXJpb2QgKGUuZy4sIGR1ZSB0byBhIHNvY2tldCBob2xkaW5nIGEgcmVmZXJlbmNlKSBhbmQgYGlwX2NoZWNrX21jX3JjdWAgaXMgY2FsbGVkLCBhY2Nlc3NpbmcgdGhlIGRhbmdsaW5nIHBvaW50ZXJzIGluIGBtY19oYXNoYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIElQdjQgbXVsdGljYXN0IGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9NVUxUSUNBU1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF9tY19kZXN0cm95X2RldiYjMzQ7LAogICAgJiMzNDtpcF9jaGVja19tY19yY3UmIzM0OywKICAgICYjMzQ7aXBfbWNfaGFzaF9yZW1vdmUmIzM0OywKICAgICYjMzQ7aXBfbWNfaGFzaF9hZGQmIzM0OywKICAgICYjMzQ7aW5ldGRldl9kZXN0cm95JiMzNDssCiAgICAmIzM0O19fX19pcF9tY19pbmNfZ3JvdXAmIzM0OywKICAgICYjMzQ7X19pcF9tY19kZWNfZ3JvdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgbXVsdGljYXN0IGdyb3VwcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBkZXZpY2UmIzM5O3MgYG1jX2xpc3RgIGR1cmluZyBkZXZpY2UgZGVzdHJ1Y3Rpb24gYnV0IGFyZSBsZWZ0IGluIHRoZSBgbWNfaGFzaGAgdGFibGUuIFRoaXMgY2FuIGxlYWQgdG8gYSB1c2UtYWZ0ZXItZnJlZSBpZiB0aGUgYGluX2RldmljZWAgb3V0bGl2ZXMgdGhlIFJDVSBncmFjZSBwZXJpb2QgKGUuZy4sIGR1ZSB0byBhIHNvY2tldCBob2xkaW5nIGEgcmVmZXJlbmNlKSBhbmQgYGlwX2NoZWNrX21jX3JjdWAgaXMgY2FsbGVkLCBhY2Nlc3NpbmcgdGhlIGRhbmdsaW5nIHBvaW50ZXJzIGluIGBtY19oYXNoYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIElQdjQgbXVsdGljYXN0IGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzM6NDcuNjc0NTA5NDQ1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MjIwODgxMTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX01VTFRJQ0FTVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX21jX2Rlc3Ryb3lfZGV2XCIsXG4gICAgXCJpcF9jaGVja19tY19yY3VcIixcbiAgICBcImlwX21jX2hhc2hfcmVtb3ZlXCIsXG4gICAgXCJpcF9tY19oYXNoX2FkZFwiLFxuICAgIFwiaW5ldGRldl9kZXN0cm95XCIsXG4gICAgXCJfX19faXBfbWNfaW5jX2dyb3VwXCIsXG4gICAgXCJfX2lwX21jX2RlY19ncm91cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIG11bHRpY2FzdCBncm91cHMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgZGV2aWNlJ3MgYG1jX2xpc3RgIGR1cmluZyBkZXZpY2UgZGVzdHJ1Y3Rpb24gYnV0IGFyZSBsZWZ0IGluIHRoZSBgbWNfaGFzaGAgdGFibGUuIFRoaXMgY2FuIGxlYWQgdG8gYSB1c2UtYWZ0ZXItZnJlZSBpZiB0aGUgYGluX2RldmljZWAgb3V0bGl2ZXMgdGhlIFJDVSBncmFjZSBwZXJpb2QgKGUuZy4sIGR1ZSB0byBhIHNvY2tldCBob2xkaW5nIGEgcmVmZXJlbmNlKSBhbmQgYGlwX2NoZWNrX21jX3JjdWAgaXMgY2FsbGVkLCBhY2Nlc3NpbmcgdGhlIGRhbmdsaW5nIHBvaW50ZXJzIGluIGBtY19oYXNoYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIElQdjQgbXVsdGljYXN0IGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNjozMzo0Ny42NzQ1MTMyNDVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjkxNDI3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM3YmFhYjZiMWI2MzQwM2VjZTViOTNjNmNmMmY3ZjU1ZmM3MjdmOTdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMiAwNjozMzo0NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pZ21wLmMgYi9uZXQvaXB2NC9pZ21wLmNcXG5pbmRleCBiNjMzN2E0N2MxNDE4NS4uZDUyMGVhNGY2ZDE0MmQgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaWdtcC5jXFxuKysrIGIvbmV0L2lwdjQvaWdtcC5jXFxuQEAgLTE5MjIsNiArMTkyMiw3IEBAIHZvaWQgaXBfbWNfZGVzdHJveV9kZXYoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxcbiAjZW5kaWZcXG4gXFxuIFxcdHdoaWxlICgoaSA9IHJ0bmxfZGVyZWZlcmVuY2UoaW5fZGV2LVxcdTAwM2VtY19saXN0KSkgIT0gTlVMTCkge1xcbitcXHRcXHRpcF9tY19oYXNoX3JlbW92ZShpbl9kZXYsIGkpO1xcbiBcXHRcXHRpbl9kZXYtXFx1MDAzZW1jX2xpc3QgPSBpLVxcdTAwM2VuZXh0X3JjdTtcXG4gXFx0XFx0V1JJVEVfT05DRShpbl9kZXYtXFx1MDAzZW1jX2NvdW50LCBpbl9kZXYtXFx1MDAzZW1jX2NvdW50IC0gMSk7XFxuIFxcdFxcdGlwX21jX2NsZWFyX3NyYyhpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzM6NDguMTY4MTExOTk0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDU3MjcyNjU0NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfTVVMVElDQVNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfbWNfZGVzdHJveV9kZXZcIixcbiAgICBcImlwX2NoZWNrX21jX3JjdVwiLFxuICAgIFwiaXBfbWNfaGFzaF9yZW1vdmVcIixcbiAgICBcImlwX21jX2hhc2hfYWRkXCIsXG4gICAgXCJpbmV0ZGV2X2Rlc3Ryb3lcIixcbiAgICBcIl9fX19pcF9tY19pbmNfZ3JvdXBcIixcbiAgICBcIl9faXBfbWNfZGVjX2dyb3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgbXVsdGljYXN0IGdyb3VwcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBkZXZpY2UncyBgbWNfbGlzdGAgZHVyaW5nIGRldmljZSBkZXN0cnVjdGlvbiBidXQgYXJlIGxlZnQgaW4gdGhlIGBtY19oYXNoYCB0YWJsZS4gVGhpcyBjYW4gbGVhZCB0byBhIHVzZS1hZnRlci1mcmVlIGlmIHRoZSBgaW5fZGV2aWNlYCBvdXRsaXZlcyB0aGUgUkNVIGdyYWNlIHBlcmlvZCAoZS5nLiwgZHVlIHRvIGEgc29ja2V0IGhvbGRpbmcgYSByZWZlcmVuY2UpIGFuZCBgaXBfY2hlY2tfbWNfcmN1YCBpcyBjYWxsZWQsIGFjY2Vzc2luZyB0aGUgZGFuZ2xpbmcgcG9pbnRlcnMgaW4gYG1jX2hhc2hgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgSVB2NCBtdWx0aWNhc3QgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzdiYWFiNmIxYjYzNDAzZWNlNWI5M2M2Y2YyZjdmNTVmYzcyN2Y5N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMDY6MzM6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pZ21wLmMgYi9uZXQvaXB2NC9pZ21wLmNcbmluZGV4IGI2MzM3YTQ3YzE0MTg1Li5kNTIwZWE0ZjZkMTQyZCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lnbXAuY1xuKysrIGIvbmV0L2lwdjQvaWdtcC5jXG5AQCAtMTkyMiw2ICsxOTIyLDcgQEAgdm9pZCBpcF9tY19kZXN0cm95X2RldihzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXG4gI2VuZGlmXG4gXG4gXHR3aGlsZSAoKGkgPSBydG5sX2RlcmVmZXJlbmNlKGluX2Rldi1cdTAwM2VtY19saXN0KSkgIT0gTlVMTCkge1xuK1x0XHRpcF9tY19oYXNoX3JlbW92ZShpbl9kZXYsIGkpO1xuIFx0XHRpbl9kZXYtXHUwMDNlbWNfbGlzdCA9IGktXHUwMDNlbmV4dF9yY3U7XG4gXHRcdFdSSVRFX09OQ0UoaW5fZGV2LVx1MDAzZW1jX2NvdW50LCBpbl9kZXYtXHUwMDNlbWNfY291bnQgLSAxKTtcbiBcdFx0aXBfbWNfY2xlYXJfc3JjKGkpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzM6NDguMTY4MTEzMjE0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIxNDgxOTQyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgZ2l2ZW4gdGhpcyBwYXRjaDpcblxuKipBbmFseXppbmcgYSBOZXR3b3JrIE11bHRpY2FzdCBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBwYXRjaCB0aGF0J3MgYmVlbiBhcHBsaWVkLCBhbmQgaXQncyB0b3VjaGluZyBgbmV0L2lwdjQvaWdtcC5jYC4gVGhhdCBmaWxlJ3MgY2xlYXJseSBkZWFsaW5nIHdpdGggSW50ZXJuZXQgR3JvdXAgTWFuYWdlbWVudCBQcm90b2NvbCAoSUdNUCksIHNvIHRoaXMgaXMgbXVsdGljYXN0LXJlbGF0ZWQuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSB0aGUgYWRkaXRpb24gb2YgYGlwX21jX2hhc2hfcmVtb3ZlKGluX2RldiwgaSk7YCB3aXRoaW4gdGhlIGBpcF9tY19kZXN0cm95X2RldmAgZnVuY3Rpb24uIE15IGV4cGVydCBleWUgaW1tZWRpYXRlbHkgc2F5cywgdGhpcyBpcyBsaWtlbHkgdG8gY2xlYW4gdXAgc29tZSBtdWx0aWNhc3QtcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMgd2hlbiBhbiBpbnRlcmZhY2UgaXMgYmVpbmcgZGVzdHJveWVkLlxuXG5MZXQncyBkaXZlIGludG8gYGlwX21jX2Rlc3Ryb3lfZGV2YCBpdHNlbGYgd2l0aGluIGBuZXQvaXB2NC9pZ21wLmNgLiBNeSBpbml0aWFsIGd1ZXNzIGlzIHRoYXQgYGlwX21jX2Rlc3Ryb3lfZGV2YCBoYW5kbGVzIHRoZSBjbGVhbnVwIHdvcmsgd2hlbiBhbiBJUCBtdWx0aWNhc3QgZGV2aWNlIGlzIG5vIGxvbmdlciByZXF1aXJlZC4gSXQncyBhbG1vc3QgY2VydGFpbmx5IGNhbGxlZCB3aGVuIGFuIGludGVyZmFjZSBnb2VzIGRvd24sIGlzIHJlbW92ZWQsIG9yIGlzIG90aGVyd2lzZSBubyBsb25nZXIgYWN0aXZlIGluIGEgbXVsdGljYXN0IGNvbnRleHQuIFRoZSBwcmVzZW5jZSBvZiBgaXBfbWNfaGFzaF9yZW1vdmVgIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgbXVsdGljYXN0IGdyb3VwIG1lbWJlcnNoaXBzIGFuZCB0aGVpciBhc3NvY2lhdGVkIGRhdGEgYXJlIG1hbmFnZWQgdGhyb3VnaCBhIGhhc2ggdGFibGUuIFRoZSBwYXRjaCBpcyB0aGVuIGFkZGluZyB0aGlzIGxpbmUsIHNvIHRoYXQgd2hlbiBhIGRldmljZSBpcyByZW1vdmVkLCBhc3NvY2lhdGVkIGl0ZW1zIGFyZSByZW1vdmVkIGZyb20gdGhpcyBoYXNoLiBUaGlzIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgaGFzaCBob2xkcywgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgYGlwX21jX2hhc2hfcmVtb3ZlYCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdCwgYnV0IG15IGZpcnN0IGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIGEgY2xlYW4gYW5kIHJlYXNvbmFibGUgZW5oYW5jZW1lbnQgdG8gcHJldmVudCBtZW1vcnkgbGVha3Mgb3Igc3RhbGUgZW50cmllcywgaW1wcm92aW5nIG92ZXJhbGwgc3lzdGVtIHN0YWJpbGl0eSwgd2hpY2ggc2hvdWxkIGJlIHZlcnkgd2VsY29tZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTg0OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzM6NTIuMzgyOTM0Mzk2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MzY4OTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX21jX2Rlc3Ryb3lfZGV2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lnbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pZ21wLmM9MTg5MT12b2lkIGlwX21jX3VwKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xOTExLVxcbm5ldC9pcHY0L2lnbXAuYzoxOTEyOnZvaWQgaXBfbWNfZGVzdHJveV9kZXYoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxcbm5ldC9pcHY0L2lnbXAuYy0xOTEzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzM6NTIuNDYxMzA5MjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDkzMTAyMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJR01QIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgSUdNUCB3b3JrcyBhdCBhIGxvdyBsZXZlbCBpbiB0aGUga2VybmVsLiBgbmV0L2lwdjQvaWdtcC5jYCBpcyB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydC4gR2l2ZW4gd2hhdCBJJ20gbG9va2luZyBhdCwgbGV0J3MgemVybyBpbiBvbiBsaW5lIDE5MTIuIFRoYXQncyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgb2Ygc29tZSBmdW5jdGlvbiBvciBjb25kaXRpb25hbCB0aGF0IGRlYWxzIHdpdGggbWVtYmVyc2hpcCByZXBvcnQgcHJvY2Vzc2luZyBvciBwb3NzaWJseSBncm91cCBtYW5hZ2VtZW50IHJlc2lkZXMuIEl0J3Mgb2Z0ZW4gaGVscGZ1bCB0byBwaW5wb2ludCBzcGVjaWZpYyBsaW5lcyB3aGVuIGRpc3NlY3RpbmcgYSBjb21wbGV4IHBpZWNlIG9mIGNvZGUsIGFzIGl0IGhlbHBzIHRyYWNlIHRoZSBsb2dpYyBhbmQgdW5kZXJzdGFuZCBob3cgZGF0YSBhbmQgY29udHJvbCBmbG93cy4gSSBhbnRpY2lwYXRlIGl0IGRlYWxzIHdpdGggaG93IHRoZSBJR01QIG1vZHVsZSBpbnRlcmFjdHMgd2l0aCB0aGUgbmV0d29yayBzdGFjay4gSSdsbCBiZSBsb29raW5nIGZvciBpbnRlcmFjdGlvbiB3aXRoIHRoZSByb3V0aW5nIHRhYmxlIGFuZCBwb3RlbnRpYWxseSB3aXRoIHRoZSBuZXR3b3JrIGludGVyZmFjZSB0byBzZWUgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBqb2lucywgbGVhdmVzIGFuZCB1cGRhdGVzIG9mIG11bHRpY2FzdCBncm91cCBtZW1iZXJzaGlwcy4gS25vd2luZyB0aGUgbGluZSBudW1iZXIgd2lsbCBhbGxvdyBtZSB0byBpbW1lZGlhdGVseSBqdW1wIHRvIHRoZSByZWxldmFudCBjb2RlIGFuZCBzdGFydCBkZWNpcGhlcmluZyB0aGUgbnVhbmNlcyBvZiB0aGUgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNjozMzo1NS41NTQ0MTMzN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pZ21wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTkwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTkwMDpcXHRcXHRmb3JfZWFjaF9wbWNfcnRubChpbl9kZXYsIHBtYykge1xcbjE5MDE6XFx0I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG4xOTAyOlxcdFxcdFxcdGlnbXB2M19kZWxfZGVscmVjKGluX2RldiwgcG1jKTtcXG4xOTAzOlxcdCNlbmRpZlxcbjE5MDQ6XFx0XFx0XFx0aWdtcF9ncm91cF9hZGRlZChwbWMpO1xcbjE5MDU6XFx0XFx0fVxcbjE5MDY6XFx0fVxcbjE5MDc6XFx0XFxuMTkwODpcXHQvKlxcbjE5MDk6XFx0ICpcXHREZXZpY2UgaXMgYWJvdXQgdG8gYmUgZGVzdHJveWVkOiBjbGVhbiB1cC5cXG4xOTEwOlxcdCAqL1xcbjE5MTE6XFx0XFxuMTkxMjpcXHR2b2lkIGlwX21jX2Rlc3Ryb3lfZGV2KHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldilcXG4xOTEzOlxcdHtcXG4xOTE0OlxcdFxcdHN0cnVjdCBpcF9tY19saXN0ICppO1xcbjE5MTU6XFx0XFxuMTkxNjpcXHRcXHRBU1NFUlRfUlROTCgpO1xcbjE5MTc6XFx0XFxuMTkxODpcXHRcXHQvKiBEZWFjdGl2YXRlIHRpbWVycyAqL1xcbjE5MTk6XFx0XFx0aXBfbWNfZG93bihpbl9kZXYpO1xcbjE5MjA6XFx0I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG4xOTIxOlxcdFxcdGlnbXB2M19jbGVhcl9kZWxyZWMoaW5fZGV2KTtcXG4xOTIyOlxcdCNlbmRpZlxcbjE5MjM6XFx0XFxuMTkyNDpcXHRcXHR3aGlsZSAoKGkgPSBydG5sX2RlcmVmZXJlbmNlKGluX2Rldi1cXHUwMDNlbWNfbGlzdCkpICE9IE5VTEwpIHtcXG4xOTI1OlxcdFxcdFxcdGlwX21jX2hhc2hfcmVtb3ZlKGluX2RldiwgaSk7XFxuMTkyNjpcXHRcXHRcXHRpbl9kZXYtXFx1MDAzZW1jX2xpc3QgPSBpLVxcdTAwM2VuZXh0X3JjdTtcXG4xOTI3OlxcdFxcdFxcdFdSSVRFX09OQ0UoaW5fZGV2LVxcdTAwM2VtY19jb3VudCwgaW5fZGV2LVxcdTAwM2VtY19jb3VudCAtIDEpO1xcbjE5Mjg6XFx0XFx0XFx0aXBfbWNfY2xlYXJfc3JjKGkpO1xcbjE5Mjk6XFx0XFx0XFx0aXBfbWFfcHV0KGkpO1xcbjE5MzA6XFx0XFx0fVxcbjE5MzE6XFx0fVxcbjE5MzI6XFx0XFxuMTkzMzpcXHQvKiBSVE5MIGlzIGxvY2tlZCAqL1xcbjE5MzQ6XFx0c3RhdGljIHN0cnVjdCBpbl9kZXZpY2UgKmlwX21jX2ZpbmRfZGV2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX21yZXFuICppbXIpXFxuMTkzNTpcXHR7XFxuMTkzNjpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDtcXG4xOTM3OlxcdFxcdHN0cnVjdCBpbl9kZXZpY2UgKmlkZXYgPSBOVUxMO1xcbjE5Mzg6XFx0XFxuMTkzOTpcXHRcXHRpZiAoaW1yLVxcdTAwM2VpbXJfaWZpbmRleCkge1xcbjE5NDA6XFx0XFx0XFx0aWRldiA9IGluZXRkZXZfYnlfaW5kZXgobmV0LCBpbXItXFx1MDAzZWltcl9pZmluZGV4KTtcXG4xOTQxOlxcdFxcdFxcdHJldHVybiBpZGV2O1xcbjE5NDI6XFx0XFx0fVxcbjE5NDM6XFx0XFx0aWYgKGltci1cXHUwMDNlaW1yX2FkZHJlc3Muc19hZGRyKSB7XFxuMTk0NDpcXHRcXHRcXHRkZXYgPSBfX2lwX2Rldl9maW5kKG5ldCwgaW1yLVxcdTAwM2VpbXJfYWRkcmVzcy5zX2FkZHIsIGZhbHNlKTtcXG4xOTQ1OlxcdFxcdFxcdGlmICghZGV2KVxcbjE5NDY6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTk0NzpcXHRcXHR9XFxuMTk0ODpcXHRcXG4xOTQ5OlxcdFxcdGlmICghZGV2KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjMzOjU1LjU1NDU4NTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTgyOTI1NzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJ1ZyBGaXg6IE11bHRpY2FzdCBIYXNoIFRhYmxlIFVwZGF0ZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgaXQncyBhZGRpbmcgYGlwX21jX2hhc2hfcmVtb3ZlKGluX2RldiwgaSk7YCB0byBgaXBfbWNfZGVzdHJveV9kZXZgLiBUaGlzIGxvb2tzIGxpa2UgYSBwdXJlbHkgZnVuY3Rpb25hbCBjaGFuZ2UsIHdoaWNoIGlzIGEgZ29vZCBzaWduLCBlc3BlY2lhbGx5IGlmIGl0J3MgYWRkcmVzc2luZyBhIGJ1Zy4gVGhlIGRlc2NyaXB0aW9uIGV4cGxpY2l0bHkgbWVudGlvbnMgdGhlIG11bHRpY2FzdCBsaXN0IGhhc2ggdGFibGUgbm90IGJlaW5nIHVwZGF0ZWQgZHVyaW5nIGRldmljZSBkZXN0cnVjdGlvbi4gUmlnaHQsIHRoYXQncyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gaXNzdWUgcG90ZW50aWFsbHkgbGVhZGluZyB0byBtZW1vcnkgbGVha3Mgb3Igc3RhbGUgZW50cmllcy4gV2UgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQgdG8gcmVwcm9kdWNlIG9yIHRyaWdnZXIgdGhpcyBpc3N1ZS5cblxuTm93LCBsZXQncyBzZWUgd2hlcmUgdGhpcyBpcyBpbXBsZW1lbnRlZDsgYGlwX21jX2Rlc3Ryb3lfZGV2YCBpcyBsaWtlbHkgaW4gYG5ldC9pcHY0L2lnbXAuY2AuIExldCdzIGNoZWNrIHRoZSBgbmV0L2lwdjQvTWFrZWZpbGVgIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgaWdtcC5jYCBmaWxlIGlzIGJ1aWx0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbnkgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMgb3IgY29tcGlsZS10aW1lIG9wdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uJ3MgYmVoYXZpb3IuIFRoYXTigJlzIHRoZSBzdGFydGluZyBwb2ludCB0byBldmFsdWF0aW5nIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDQyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzM6NTkuNTM3NTEzMzc4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODgwNTk5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZ21wLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcXFxcbi0tXFxubmV0L2lwdjQvTWFrZWZpbGUtMTMtXFx0ICAgICB0Y3Bfb2ZmbG9hZC5vIHRjcF9wbGIubyBkYXRhZ3JhbS5vIHJhdy5vIHVkcC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZToxNDpcXHQgICAgIHVkcF9vZmZsb2FkLm8gYXJwLm8gaWNtcC5vIGRldmluZXQubyBhZl9pbmV0Lm8gaWdtcC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZS0xNS1cXHQgICAgIGZpYl9mcm9udGVuZC5vIGZpYl9zZW1hbnRpY3MubyBmaWJfdHJpZS5vIGZpYl9ub3RpZmllci5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzM6NTkuNzY2MzIzNjgyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEwMzI3MDk0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQdjQgTXVsdGljYXN0IERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyBgaWdtcC5vYCBpcyBiZWluZyBjb21waWxlZCBhdXRvbWF0aWNhbGx5IGZvciBJUHY0LCB3aGljaCBtZWFucyB3ZSBuZWVkIHRvIGVuc3VyZSBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zIGFyZSBtZXQuIFNpbmNlIGBvYmoteWAgaXMgdXNlZCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgYWN0dWFsbHkgKnJlcXVpcmVkKi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYENPTkZJR19JTkVUYCBpcyB0aGUga2V5LCBvciBwZXJoYXBzIGV2ZW4gYENPTkZJR19JUF9NVUxUSUNBU1RgLiBMZXQncyBkaWcgaW4gYW5kIHNlZSBpZiBgaXBfbWNfZGVzdHJveV9kZXZgIGlzIGd1YXJkZWQgYnkgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBIbW0sIGl0IGxvb2tzIGxpa2UgYGlwX21jX2Rlc3Ryb3lfZGV2YCBpc24ndCBjb25kaXRpb25hbCBvbiBgQ09ORklHX0lQX01VTFRJQ0FTVGAgd2hpY2ggaXMgYSBnb29kIHNpZ24uIFRoZSBvbmx5IGZ1bmN0aW9uIEkgc2VlIHdpdGggdGhhdCBwcmVwcm9jZXNzb3IgbWFjcm8gaXMgYGlnbXB2M19jbGVhcl9kZWxyZWNgLCBub3QgdGhlIGZ1bmN0aW9uIEknbSBjb25jZXJuZWQgd2l0aC4gVGhhdCBzdWdnZXN0cyB0aGF0IGBDT05GSUdfSU5FVGAgc2hvdWxkIGJlIHN1ZmZpY2llbnQgYmVjYXVzZSBpdCdzIGFsd2F5cyBlbmFibGVkLiBXYWl0IGEgc2Vjb25kLCBzaW5jZSB3ZSBhcmUgdGFsa2luZyBhYm91dCBJR01QLCBgQ09ORklHX0lQX01VTFRJQ0FTVGAgKm1pZ2h0KiBzdGlsbCBiZSByZWxldmFudC4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlIGNoZWNrIHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZSB0byBiZSBjb21wbGV0ZWx5IGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NjUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzQ6MDMuODY5NTk2MDA2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODQyNTQ0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfTVVMVElDQVNUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZy00LSNcXG5uZXQvaXB2NC9LY29uZmlnOjU6Y29uZmlnIElQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L0tjb25maWctNi1cXHRib29sIFxcXCJJUDogbXVsdGljYXN0aW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNjozNDowMy45NTgwMzEwOThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgzOTYwNjM4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgZnVuY3Rpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbGVycyBvZiBgaXBfbWNfZGVzdHJveV9kZXZgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGlwX21jX2Rlc3Ryb3lfZGV2YCBpcyBiZWluZyB1c2VkLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIHJvbGUgd2l0aGluIHRoZSBzeXN0ZW0uIElzIGl0IGEgY2VudHJhbCBjb21wb25lbnQsIG9yIG9ubHkgYSBsaXR0bGUgdXNlZCB1dGlsaXR5IGZ1bmN0aW9uPyBUaGUgY2FsbCBzdGFjayB3aWxsIHRlbGwgbWUgdGhhdC4gSSdsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byBwZXJmb3JtIGEgc2VhcmNoIGZvciByZWZlcmVuY2VzLiBJIHdhbnQgdG8gYnVpbGQgYSB0aG9yb3VnaCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXBlbmRlbmNpZXMgb24gdGhpcyBmdW5jdGlvbi4gS25vd2xlZGdlIGlzIHBvd2VyLCBhbmQga25vd2luZyB3aGF0IHJlbGllcyBvbiBgaXBfbWNfZGVzdHJveV9kZXZgIGlzIHZpdGFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDM3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzQ6MDYuNzk3NjM5NjdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MDA4MTYwNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfbWNfZGVzdHJveV9kZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaWdtcC5oPTI4MD1leHRlcm4gdm9pZCBpcF9tY19pbml0X2RldihzdHJ1Y3QgaW5fZGV2aWNlICopO1xcbmluY2x1ZGUvbGludXgvaWdtcC5oOjI4MTpleHRlcm4gdm9pZCBpcF9tY19kZXN0cm95X2RldihzdHJ1Y3QgaW5fZGV2aWNlICopO1xcbmluY2x1ZGUvbGludXgvaWdtcC5oLTI4Mi1leHRlcm4gdm9pZCBpcF9tY191cChzdHJ1Y3QgaW5fZGV2aWNlICopO1xcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jPTMxND1zdGF0aWMgdm9pZCBpbmV0ZGV2X2Rlc3Ryb3koc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jLTMyNC1cXG5uZXQvaXB2NC9kZXZpbmV0LmM6MzI1OlxcdGlwX21jX2Rlc3Ryb3lfZGV2KGluX2Rldik7XFxubmV0L2lwdjQvZGV2aW5ldC5jLTMyNi1cXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xODkxPXZvaWQgaXBfbWNfdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTE5MTEtXFxubmV0L2lwdjQvaWdtcC5jOjE5MTI6dm9pZCBpcF9tY19kZXN0cm95X2RldihzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXFxubmV0L2lwdjQvaWdtcC5jLTE5MTMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNjozNDoxMC42OTg0NjEwODVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE3ODg4MDY2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIElQdjQgRGV2aWNlIERlc3RydWN0aW9uKipcblxuT2theSwgc28gYGlwX21jX2Rlc3Ryb3lfZGV2YCBpcyBjYWxsZWQgd2l0aGluIGBpbmV0ZGV2X2Rlc3Ryb3lgIHdpdGhpbiBgbmV0L2lwdjQvZGV2aW5ldC5jYC4gVGhhdCBtZWFucyB0aGlzIGlzIGEgKnJlYWwqIGNvZGUgcGF0aCwgaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB3aGVuIGFuIElQdjQgZGV2aWNlIGlzIGRlc3Ryb3llZC4gR29vZCwgd2UndmUgZ290IGEgdGFyZ2V0LlxuXG5UaGUgcXVlc3Rpb24gbm93IGlzLCB3aGF0IHNwZWNpZmljIGZ1bmN0aW9ucyBhcmUgbW9zdCBwcm9taXNpbmcgZm9yIGZ1enppbmcgYXJvdW5kIHRoaXMgYXJlYT8gT2J2aW91c2x5LCBgaXBfbWNfZGVzdHJveV9kZXZgIGlzIGF0IHRoZSB0b3Agb2YgdGhlIGxpc3QsIHNpbmNlIGl0J3MgdGhlIGRpcmVjdCBmdW5jdGlvbiB3ZSBrbm93IGlzIGludm9sdmVkLiBgaW5ldGRldl9kZXN0cm95YCBpdHNlbGYgaXMgYSBnb29kIGNhbmRpZGF0ZSB0b28sIGdpdmVuIHRoYXQgaXQncyB0aGUgaW1tZWRpYXRlIGNhbGxlci4gV2UgbmVlZCB0byBsb29rIGZvciBpbnRlcmVzdGluZyBzcG90cyBhbmQgaG9va3MsIGFuZCB0aGUgZGVzdHJ1Y3Rpb24gaXRzZWxmLlxuXG5CdXQgd2hhdCBhYm91dCB0aGUgc2V0dXA/IEl0J3MgbGlrZWx5IGludGVyZXN0aW5nIHRvIGZ1enogdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBzZXR0aW5nIHVwIHRoZSBtdWx0aWNhc3QgY29uZmlndXJhdGlvbiBiZWluZyBkZXN0cm95ZWQuIFdlIHNob3VsZCBhbHNvIGludmVzdGlnYXRlIGZ1bmN0aW9ucyBsaWtlIGBpcF9tY19oYXNoX2FkZGAgb3IgYGlwX21jX2luY19ncm91cGAsIHRvIGVuc3VyZSB0aGF0IHRoZSBwcm9jZXNzIGJlZm9yZSBkZXN0cnVjdGlvbiBpcyBzb3VuZCwgYW5kIHRoYXQgYW55dGhpbmcgdGhhdCBzZXRzIHVwIGRhdGEgaXMgYWxzbyBjbGVhbmVkIHVwIHdoZW4gdGhlIGRldmljZSBnb2VzIGF3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MjUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzQ6MTQuODc3MzQzNzY0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQ2NzQwOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfbWNfaGFzaF9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaWdtcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lnbXAuYz0xMzk5PXN0YXRpYyB1MzIgaXBfbWNfaGFzaChjb25zdCBzdHJ1Y3QgaXBfbWNfbGlzdCAqaW0pXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTQwMy1cXG5uZXQvaXB2NC9pZ21wLmM6MTQwNDpzdGF0aWMgdm9pZCBpcF9tY19oYXNoX2FkZChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsXFxubmV0L2lwdjQvaWdtcC5jLTE0MDUtXFx0XFx0XFx0ICAgc3RydWN0IGlwX21jX2xpc3QgKmltKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTE1MTg9c3RhdGljIHZvaWQgX19fX2lwX21jX2luY19ncm91cChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiBhZGRyLFxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTE1NzEtXFxubmV0L2lwdjQvaWdtcC5jOjE1NzI6XFx0aXBfbWNfaGFzaF9hZGQoaW5fZGV2LCBpbSk7XFxubmV0L2lwdjQvaWdtcC5jLTE1NzMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjM0OjE1LjA3MjAyNTg5NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTk5MDQzNTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBJUCBNdWx0aWNhc3QgR3JvdXAgSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCBzbyBgX19fX2lwX21jX2luY19ncm91cGAgaXMgY2xlYXJseSByZXNwb25zaWJsZSBmb3IgYWRkaW5nIHNvbWV0aGluZyB0byB0aGUgaGFzaCB0YWJsZS4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uIGFuZCBjb250ZXh0LCBJJ20gYXNzdW1pbmcgaXQncyBoYW5kbGluZyB0aGUgYWRkaXRpb24gb2YgYW4gSVAgbXVsdGljYXN0IGdyb3VwIGVudHJ5LiBJdCdzIHRoZSBzdGFuZGFyZCBpbmNyZW1lbnQtb2YtdGhlLWdyb3VwLWluLXRoZS1oYXNoLXRhYmxlIGZ1bmN0aW9uLiBNYWtlcyBzZW5zZS4gTm93LCBsZXQncyBsb29rIGF0IHRoZSBjb21wbGVtZW50YXJ5IGZ1bmN0aW9uOiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2hhdCBgaXBfbWNfaGFzaF9yZW1vdmVgIGRvZXMuIEl0J3MgcHJvYmFibGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIHJlbW92YWwgb2YgYSBtdWx0aWNhc3QgZ3JvdXAgZW50cnkgZnJvbSB0aGUgaGFzaCB0YWJsZS4gVGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgdHdvIGZ1bmN0aW9ucyB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSBtYW5hZ2VzIHRoZSBncm91cHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMsIHBhcnRpY3VsYXJseSB0aGUgbG9naWMgYXJvdW5kIHRoZSBoYXNoIGtleXMsIGNvbGxpc2lvbiByZXNvbHV0aW9uIChpZiBhbnkpLCBhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBoYW5kbGUgcmVmZXJlbmNlIGNvdW50aW5nIG9yIG90aGVyIGNvbmN1cnJlbmN5IGNvbmNlcm5zIHdoZW4gZGVsZXRpbmcgdGhlIGVudHJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTQ1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzQ6MTguNjcxMDcxOTgxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk2MzIyOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfbWNfaGFzaF9yZW1vdmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaWdtcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lnbXAuYz0xNDA0PXN0YXRpYyB2b2lkIGlwX21jX2hhc2hfYWRkKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldixcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xNDM1LVxcbm5ldC9pcHY0L2lnbXAuYzoxNDM2OnN0YXRpYyB2b2lkIGlwX21jX2hhc2hfcmVtb3ZlKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldixcXG5uZXQvaXB2NC9pZ21wLmMtMTQzNy1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgaXBfbWNfbGlzdCAqaW0pXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MTc3Nj12b2lkIF9faXBfbWNfZGVjX2dyb3VwKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIGFkZHIsIGdmcF90IGdmcClcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xNzkwLVxcdFxcdFxcdGlmIChuZXdfdXNlcnMgPT0gMCkge1xcbm5ldC9pcHY0L2lnbXAuYzoxNzkxOlxcdFxcdFxcdFxcdGlwX21jX2hhc2hfcmVtb3ZlKGluX2RldiwgaSk7XFxubmV0L2lwdjQvaWdtcC5jLTE3OTItXFx0XFx0XFx0XFx0KmlwID0gaS1cXHUwMDNlbmV4dF9yY3U7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MTkxMj12b2lkIGlwX21jX2Rlc3Ryb3lfZGV2KHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xOTI0LVxcdHdoaWxlICgoaSA9IHJ0bmxfZGVyZWZlcmVuY2UoaW5fZGV2LVxcdTAwM2VtY19saXN0KSkgIT0gTlVMTCkge1xcbm5ldC9pcHY0L2lnbXAuYzoxOTI1OlxcdFxcdGlwX21jX2hhc2hfcmVtb3ZlKGluX2RldiwgaSk7XFxubmV0L2lwdjQvaWdtcC5jLTE5MjYtXFx0XFx0aW5fZGV2LVxcdTAwM2VtY19saXN0ID0gaS1cXHUwMDNlbmV4dF9yY3U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjM0OjE4Ljg5MDcxMDQ1NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzIyNDg0NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE11bHRpY2FzdCBEZXZpY2UgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgY2xlYW51cCBhbmQgbWFuYWdlbWVudCBvZiBtdWx0aWNhc3QgZGV2aWNlcyBoZXJlLiBJIHNlZSB0aGF0IGBfX2lwX21jX2RlY19ncm91cGAgYW5kIGBpcF9tY19kZXN0cm95X2RldmAgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkIGluIHJlbW92aW5nIGVudHJpZXMgZnJvbSB0aGUgcmVsZXZhbnQgaGFzaCB0YWJsZXMuIE15IHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZXNlIGZ1bmN0aW9ucywgYWxvbmcgd2l0aDpcblxuKiAgIGBpcF9tY19kZXN0cm95X2RldmBcbiogICBgX19pcF9tY19kZWNfZ3JvdXBgXG4qICAgYF9fX19pcF9tY19pbmNfZ3JvdXBgXG4qICAgYGlwX21jX2hhc2hfYWRkYFxuKiAgIGBpcF9tY19oYXNoX3JlbW92ZWBcbiogICBgaW5ldGRldl9kZXN0cm95YFxuXG5JJ20gYWxzbyBjb25zaWRlcmluZyB0aGUgYElQX01VTFRJQ0FTVGAgY29uZmlndXJhdGlvbiBvcHRpb24uIFdoaWxlIGl0J3Mgb2J2aW91c2x5IGNydWNpYWwgZm9yIElHTVAgYW5kIG11bHRpY2FzdCBmdW5jdGlvbmFsaXR5IGluIGdlbmVyYWwsIGl0J3MgaW50ZXJlc3RpbmcgdGhhdCBgaXBfbWNfZGVzdHJveV9kZXZgICpzdGlsbCogY29tcGlsZXMgYW5kIGdldHMgY2FsbGVkIGV2ZW4gaWYgYElQX01VTFRJQ0FTVGAgaXNuJ3QgZW5hYmxlZC4gSG93ZXZlciwgZW5hYmxpbmcgaXQgaXMgY2VydGFpbmx5IGRlc2lyYWJsZSBmb3IgY29tcHJlaGVuc2l2ZSBtdWx0aWNhc3QgZmVhdHVyZSB0ZXN0aW5nLiBJJ20gZ29pbmcgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IGBJUF9NVUxUSUNBU1RgIGlzIHN0cmljdGx5IG5lY2Vzc2FyeSB0byByZWFjaCBgX19fX2lwX21jX2luY19ncm91cGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMjgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzQ6MjMuMjEzMTk4ODM1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODg5MTc4MTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fX19pcF9tY19pbmNfZ3JvdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaWdtcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lnbXAuYz0xNDg1PXN0YXRpYyB2b2lkIGluZXRfaWZtY2FkZHJfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTUxNy0gKi9cXG5uZXQvaXB2NC9pZ21wLmM6MTUxODpzdGF0aWMgdm9pZCBfX19faXBfbWNfaW5jX2dyb3VwKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIGFkZHIsXFxubmV0L2lwdjQvaWdtcC5jLTE1MTktXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IG1vZGUsIGdmcF90IGdmcClcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xNTg1PXZvaWQgX19pcF9tY19pbmNfZ3JvdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgYWRkciwgZ2ZwX3QgZ2ZwKVxcbm5ldC9pcHY0L2lnbXAuYy0xNTg2LXtcXG5uZXQvaXB2NC9pZ21wLmM6MTU4NzpcXHRfX19faXBfbWNfaW5jX2dyb3VwKGluX2RldiwgYWRkciwgTUNBU1RfRVhDTFVERSwgZ2ZwKTtcXG5uZXQvaXB2NC9pZ21wLmMtMTU4OC19XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MjI4MD1zdGF0aWMgaW50IF9faXBfbWNfam9pbl9ncm91cChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tcmVxbiAqaW1yLFxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIzMjMtXFx0cmN1X2Fzc2lnbl9wb2ludGVyKGluZXQtXFx1MDAzZW1jX2xpc3QsIGltbCk7XFxubmV0L2lwdjQvaWdtcC5jOjIzMjQ6XFx0X19fX2lwX21jX2luY19ncm91cChpbl9kZXYsIGFkZHIsIG1vZGUsIEdGUF9LRVJORUwpO1xcbm5ldC9pcHY0L2lnbXAuYy0yMzI1LVxcdGVyciA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjM0OjI1LjEwMjM4MjI0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTQxMjM0NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTXVsdGljYXN0IE1lbWJlcnNoaXAgTXlzdGVyaWVzKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gaG93IG11bHRpY2FzdCBncm91cCBqb2lucyB3b3JrIGF0IHRoZSBrZXJuZWwgbGV2ZWwuIEknbSBzZWVpbmcgdGhhdCB0aGUgYF9faXBfbWNfam9pbl9ncm91cGAgZnVuY3Rpb24gaXMgdGhlIG9uZSB0aGF0J3MgYWN0dWFsbHkgY2FsbGVkIHdoZW4gYSBwcm9jZXNzIHRyaWVzIHRvIGpvaW4gYSBtdWx0aWNhc3QgZ3JvdXAsIHNwZWNpZmljYWxseSB0aHJvdWdoIHRoZSBzb2NrZXQgb3B0aW9ucyBsaWtlIGBJUF9BRERfTUVNQkVSU0hJUGAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgdGhlIGNvcmUgcm91dGluZSBmb3IgaGFuZGxpbmcgdGhhdCBwcm9jZXNzLlxuXG5Ob3csIG15IHJlYWwgcXVlc3Rpb24gaXM6IGlzIHRoZSBgSVBfTVVMVElDQVNUYCBzb2NrZXQgb3B0aW9uIGEgc3RyaWN0IHJlcXVpcmVtZW50IGZvciBgSVBfQUREX01FTUJFUlNISVBgIHRvIGZ1bmN0aW9uIGNvcnJlY3RseT8gTG9naWNhbGx5LCBgSVBfQUREX01FTUJFUlNISVBgIGlzIHN1cHBvc2VkIHRvIGRlYWwgc3BlY2lmaWNhbGx5IHdpdGggbXVsdGljYXN0LCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGZsYWcgaGFzIHRvIGJlIGV4cGxpY2l0bHkgc2V0LiBJJ20gd29uZGVyaW5nIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGludGVyYWN0aW9ucyBvciBpbXBsaWNpdCBiZWhhdmlvcnMgaW4gdGhlIGtlcm5lbCB0aGF0IEknbSBvdmVybG9va2luZy4gSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIEl0IGNvdWxkIGJlIGEgc2ltcGxlIGNoZWNrLCBvciBpdCBjb3VsZCBiZSBkZWVwZXIuLi4gbGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgc2F5cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA5MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjM0OjI4LjcxNjUwNzQ5NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU4NDAxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBfQUREX01FTUJFUlNISVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM9NjQwPXN0YXRpYyBib29sIHNldHNvY2tvcHRfbmVlZHNfcnRubChpbnQgb3B0bmFtZSlcXG4tLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtNjQyLVxcdHN3aXRjaCAob3B0bmFtZSkge1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6NjQzOlxcdGNhc2UgSVBfQUREX01FTUJFUlNISVA6XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy02NDQtXFx0Y2FzZSBJUF9BRERfU09VUkNFX01FTUJFUlNISVA6XFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTg5Mj1pbnQgZG9faXBfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTEyMjQtXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxMjI1OlxcdGNhc2UgSVBfQUREX01FTUJFUlNISVA6XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xMjI2LVxcdGNhc2UgSVBfRFJPUF9NRU1CRVJTSElQOlxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xMjQ2LVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTI0NzpcXHRcXHRpZiAob3B0bmFtZSA9PSBJUF9BRERfTUVNQkVSU0hJUClcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTEyNDgtXFx0XFx0XFx0ZXJyID0gaXBfbWNfam9pbl9ncm91cChzaywgXFx1MDAyNm1yZXEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNjozNDoyOC44MTIzNTI2MjRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyODA3MzQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBNdWx0aWNhc3QgTGFuZHNjYXBlKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBpcF9tY19qb2luX2dyb3VwYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIGl0cyBjb25kaXRpb25hbCBpbmNsdXNpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoZXJlJ3MgdGhlIGd1YXJkP1wiIElzIHRoaXMgbXVsdGljYXN0IGZ1bmN0aW9uYWxpdHkgY29udGluZ2VudCBvbiB0aGUgYENPTkZJR19JUF9NVUxUSUNBU1RgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbj8gSSdtIGJldHRpbmcgaXQgaXM7IGl0J3MgcHJhY3RpY2FsbHkgc3RhbmRhcmQgcHJhY3RpY2UgZm9yIG1vZHVsYXJpdHkuIEknbGwgY2hlY2sgaWYgaXQncyB3cmFwcGVkIGluIGFuIGAjaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVGAgYmxvY2suIFRoYXQnbGwgdGVsbCBtZSBpZiBJJ20gZXZlbiAqbG9va2luZyogYXQgYWN0aXZlIG11bHRpY2FzdCBjb2RlIG9yIHNvbWV0aGluZyB0aGF0J3Mgc3R1YmJlZCBvdXQgdW5kZXIgdGhhdCBmbGFnLiBLbm93aW5nIHRoaXMgd2lsbCBzdHJlYW1saW5lIG15IGFuYWx5c2lzLCBzYXZpbmcgdGltZSBpbiBlaXRoZXIgYSBkZWJ1Z2dpbmcsIGNvZGUgcmV2aWV3LCBvciBldmVuIGEgZmVhdHVyZSBpbXBsZW1lbnRhdGlvbiBzY2VuYXJpby4gSSBrbm93IHRoZSBiYXNpY3MsIGJ1dCBpdCdzIGFsd2F5cyB1c2VmdWwgdG8gc3RhcnQgd2l0aCB0aGUgZm91bmRhdGlvbnMuIEkgbmVlZCB0aGUgYmlnIHBpY3R1cmUgYmVmb3JlIHpvb21pbmcgaW4gb24gdGhlIHNwZWNpZmljcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzczNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjM0OjMxLjk0MDQyODA1N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIyNTEwMjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX21jX2pvaW5fZ3JvdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaWdtcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lnbXAuYz0yMjYwPXN0YXRpYyB2b2lkIGlwX21jX2NsZWFyX3NyYyhzdHJ1Y3QgaXBfbWNfbGlzdCAqcG1jKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIyNzktICovXFxubmV0L2lwdjQvaWdtcC5jOjIyODA6c3RhdGljIGludCBfX2lwX21jX2pvaW5fZ3JvdXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXJlcW4gKmltcixcXG5uZXQvaXB2NC9pZ21wLmMtMjI4MS1cXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgbW9kZSlcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0yMzMxLSAqL1xcbm5ldC9pcHY0L2lnbXAuYzoyMzMyOmludCBpcF9tY19qb2luX2dyb3VwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21yZXFuICppbXIpXFxubmV0L2lwdjQvaWdtcC5jLTIzMzMte1xcbm5ldC9pcHY0L2lnbXAuYzoyMzM0OlxcdHJldHVybiBfX2lwX21jX2pvaW5fZ3JvdXAoc2ssIGltciwgTUNBU1RfRVhDTFVERSk7XFxubmV0L2lwdjQvaWdtcC5jLTIzMzUtfVxcbm5ldC9pcHY0L2lnbXAuYzoyMzM2OkVYUE9SVF9TWU1CT0woaXBfbWNfam9pbl9ncm91cCk7XFxubmV0L2lwdjQvaWdtcC5jLTIzMzctXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjMzOS0gKi9cXG5uZXQvaXB2NC9pZ21wLmM6MjM0MDppbnQgaXBfbWNfam9pbl9ncm91cF9zc20oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXJlcW4gKmltcixcXG5uZXQvaXB2NC9pZ21wLmMtMjM0MS1cXHRcXHRcXHQgdW5zaWduZWQgaW50IG1vZGUpXFxubmV0L2lwdjQvaWdtcC5jLTIzNDIte1xcbm5ldC9pcHY0L2lnbXAuYzoyMzQzOlxcdHJldHVybiBfX2lwX21jX2pvaW5fZ3JvdXAoc2ssIGltciwgbW9kZSk7XFxubmV0L2lwdjQvaWdtcC5jLTIzNDQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNjozNDozMi4yNjI5NDYxMTFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4Mzg3NzczMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIE11bHRpY2FzdCBDb2RlYmFzZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBidWcgaXNuJ3QgaGlkZGVuIGF3YXkgdW5kZXIgYSBgI2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RgIGJsb2NrLiBHb29kIHRvIGtub3csIHRoYXQgbmFycm93cyB0aGluZ3MgZG93biBhIGJpdC4gQnV0IHdhaXQsIGJlZm9yZSBJIHN0YXJ0IGNoYXNpbmcgZ2hvc3RzIGVsc2V3aGVyZSwgSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBpc3N1ZSwgYW5kIHRoZSBsaWtlbGlob29kIG9mIG11bHRpY2FzdCBpbnRlcmFjdGlvbnMsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBpZiBgQ09ORklHX0lQX01VTFRJQ0FTVGAgaXMgZXZlbiAqdXNlZCogd2l0aGluIHRoZSBgbmV0L2lwdjQvaWdtcC5jYCBmaWxlLiBJdCBzZWVtcyBsaWtlbHksIGdpdmVuIHRoZSBmaWxlJ3MgcHVycG9zZSwgYnV0IGl0J3MgYSBxdWljayBjaGVjayB0byBlbGltaW5hdGUgYSBwb3RlbnRpYWwgZmFsc2UgbGVhZC4gTm8gcG9pbnQgZ29pbmcgZG93biBhIHJhYmJpdCBob2xlIGZvciBzb21ldGhpbmcgdGhhdCBpc24ndCBjb25uZWN0ZWQuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCB1c2FnZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDY3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzQ6MzUuMjQ2ODI2MTkyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzAyMjI4NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0lQX01VTFRJQ0FTVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pZ21wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaWdtcC5jLTEwOS1cXG5uZXQvaXB2NC9pZ21wLmM6MTEwOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTExMS0vKiBQYXJhbWV0ZXIgbmFtZXMgYW5kIHZhbHVlcyBhcmUgdGFrZW4gZnJvbSBpZ21wLXYyLTA2IGRyYWZ0ICovXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MjAxPXN0YXRpYyB2b2lkIGlwX3NmX2xpc3RfY2xlYXJfYWxsKHN0cnVjdCBpcF9zZl9saXN0ICpwc2YpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjExLVxcbm5ldC9pcHY0L2lnbXAuYzoyMTI6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMjEzLVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTExNzk9c3RhdGljIHZvaWQgaXBfbWNfZmlsdGVyX2RlbChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiBhZGRyKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTExODctXFxubmV0L2lwdjQvaWdtcC5jOjExODg6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMTE4OS0vKlxcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTEzMDg9c3RhdGljIHZvaWQgX19pZ21wX2dyb3VwX2Ryb3BwZWQoc3RydWN0IGlwX21jX2xpc3QgKmltLCBnZnBfdCBnZnApXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTMxMC1cXHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBpbS1cXHUwMDNlaW50ZXJmYWNlO1xcbm5ldC9pcHY0L2lnbXAuYzoxMzExOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTEzMTItXFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChpbl9kZXYtXFx1MDAzZWRldik7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTMyMC1cXG5uZXQvaXB2NC9pZ21wLmM6MTMyMTojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0xMzIyLVxcdGlmIChpbS1cXHUwMDNlbXVsdGlhZGRyID09IElHTVBfQUxMX0hPU1RTKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTEzNTI9c3RhdGljIHZvaWQgaWdtcF9ncm91cF9hZGRlZChzdHJ1Y3QgaXBfbWNfbGlzdCAqaW0pXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTM1NC1cXHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBpbS1cXHUwMDNlaW50ZXJmYWNlO1xcbm5ldC9pcHY0L2lnbXAuYzoxMzU1OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTEzNTYtXFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChpbl9kZXYtXFx1MDAzZWRldik7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTM2My1cXG5uZXQvaXB2NC9pZ21wLmM6MTM2NDojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0xMzY1LVxcdGlmIChpbS1cXHUwMDNlbXVsdGlhZGRyID09IElHTVBfQUxMX0hPU1RTKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTE1MTg9c3RhdGljIHZvaWQgX19fX2lwX21jX2luY19ncm91cChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiBhZGRyLFxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTE1NjMtXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmltLVxcdTAwM2Vsb2NrKTtcXG5uZXQvaXB2NC9pZ21wLmM6MTU2NDojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0xNTY1LVxcdHRpbWVyX3NldHVwKFxcdTAwMjZpbS1cXHUwMDNldGltZXIsIGlnbXBfdGltZXJfZXhwaXJlLCAwKTtcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xNTczLVxcbm5ldC9pcHY0L2lnbXAuYzoxNTc0OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTE1NzUtXFx0aWdtcHYzX2RlbF9kZWxyZWMoaW5fZGV2LCBpbSk7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MTc0Mj1zdGF0aWMgdm9pZCBpcF9tY19yZWpvaW5fZ3JvdXBzKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldilcXG5uZXQvaXB2NC9pZ21wLmMtMTc0My17XFxubmV0L2lwdjQvaWdtcC5jOjE3NDQ6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMTc0NS1cXHRzdHJ1Y3QgaXBfbWNfbGlzdCAqaW07XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MTgyND12b2lkIGlwX21jX3JlbWFwKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xODMwLVxcdGZvcl9lYWNoX3BtY19ydG5sKGluX2RldiwgcG1jKSB7XFxubmV0L2lwdjQvaWdtcC5jOjE4MzE6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMTgzMi1cXHRcXHRpZ21wdjNfZGVsX2RlbHJlYyhpbl9kZXYsIHBtYyk7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MTg0MD12b2lkIGlwX21jX2Rvd24oc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTE4NDgtXFxubmV0L2lwdjQvaWdtcC5jOjE4NDk6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMTg1MC1cXHRXUklURV9PTkNFKGluX2Rldi1cXHUwMDNlbXJfaWZjX2NvdW50LCAwKTtcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xODYwLVxcbm5ldC9pcHY0L2lnbXAuYzoxODYxOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTE4NjItc3RhdGljIHZvaWQgaXBfbWNfcmVzZXQoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTE4NzY9dm9pZCBpcF9tY19pbml0X2RldihzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTg3OS1cXG5uZXQvaXB2NC9pZ21wLmM6MTg4MDojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0xODgxLVxcdHRpbWVyX3NldHVwKFxcdTAwMjZpbl9kZXYtXFx1MDAzZW1yX2dxX3RpbWVyLCBpZ21wX2dxX3RpbWVyX2V4cGlyZSwgMCk7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MTg5MT12b2lkIGlwX21jX3VwKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xOTAwLVxcdGZvcl9lYWNoX3BtY19ydG5sKGluX2RldiwgcG1jKSB7XFxubmV0L2lwdjQvaWdtcC5jOjE5MDE6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMTkwMi1cXHRcXHRpZ21wdjNfZGVsX2RlbHJlYyhpbl9kZXYsIHBtYyk7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MTkxMj12b2lkIGlwX21jX2Rlc3Ryb3lfZGV2KHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xOTE5LVxcdGlwX21jX2Rvd24oaW5fZGV2KTtcXG5uZXQvaXB2NC9pZ21wLmM6MTkyMDojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0xOTIxLVxcdGlnbXB2M19jbGVhcl9kZWxyZWMoaW5fZGV2KTtcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xOTcwPXN0YXRpYyBpbnQgaXBfbWNfZGVsMV9zcmMoc3RydWN0IGlwX21jX2xpc3QgKnBtYywgaW50IHNmbW9kZSxcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xOTkwLVxcdGlmICghcHNmLVxcdTAwM2VzZl9jb3VudFtNQ0FTVF9JTkNMVURFXSBcXHUwMDI2XFx1MDAyNiAhcHNmLVxcdTAwM2VzZl9jb3VudFtNQ0FTVF9FWENMVURFXSkge1xcbm5ldC9pcHY0L2lnbXAuYzoxOTkxOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTE5OTItXFx0XFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gcG1jLVxcdTAwM2VpbnRlcmZhY2U7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjAwMC1cXHRcXHRcXHRwbWMtXFx1MDAzZXNvdXJjZXMgPSBwc2YtXFx1MDAzZXNmX25leHQ7XFxubmV0L2lwdjQvaWdtcC5jOjIwMDE6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMjAwMi1cXHRcXHRpZiAocHNmLVxcdTAwM2VzZl9vbGRpbiBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIwMTQtXFxubmV0L2lwdjQvaWdtcC5jOjIwMTU6I2lmbmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTIwMTYtI2RlZmluZSBpZ21wX2lmY19ldmVudCh4KVxcdGRvIHsgfSB3aGlsZSAoMClcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0yMDE5PXN0YXRpYyBpbnQgaXBfbWNfZGVsX3NyYyhzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiAqcG1jYSwgaW50IHNmbW9kZSxcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0yMDM5LVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbm5ldC9pcHY0L2lnbXAuYzoyMDQwOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTIwNDEtXFx0c2ZfbWFya3N0YXRlKHBtYyk7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjA1OS1cXHQgICAgcG1jLVxcdTAwM2VzZmNvdW50W01DQVNUX0lOQ0xVREVdKSB7XFxubmV0L2lwdjQvaWdtcC5jOjIwNjA6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMjA2MS1cXHRcXHRzdHJ1Y3QgaXBfc2ZfbGlzdCAqcHNmO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIwNjYtXFx0XFx0cG1jLVxcdTAwM2VzZm1vZGUgPSBNQ0FTVF9JTkNMVURFO1xcbm5ldC9pcHY0L2lnbXAuYzoyMDY3OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTIwNjgtXFx0XFx0cG1jLVxcdTAwM2VjcmNvdW50ID0gaW5fZGV2LVxcdTAwM2Vtcl9xcnYgPzogUkVBRF9PTkNFKG5ldC1cXHUwMDNlaXB2NC5zeXNjdGxfaWdtcF9xcnYpO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTIwODU9c3RhdGljIGludCBpcF9tY19hZGQxX3NyYyhzdHJ1Y3QgaXBfbWNfbGlzdCAqcG1jLCBpbnQgc2Ztb2RlLFxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIxMTItXFxubmV0L2lwdjQvaWdtcC5jOjIxMTM6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMjExNC1zdGF0aWMgdm9pZCBzZl9tYXJrc3RhdGUoc3RydWN0IGlwX21jX2xpc3QgKnBtYylcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0yMTkxPXN0YXRpYyBpbnQgaXBfbWNfYWRkX3NyYyhzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiAqcG1jYSwgaW50IHNmbW9kZSxcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0yMjEyLVxcbm5ldC9pcHY0L2lnbXAuYzoyMjEzOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTIyMTQtXFx0c2ZfbWFya3N0YXRlKHBtYyk7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjIzMi1cXHR9IGVsc2UgaWYgKGlzZXhjbHVkZSAhPSAocG1jLVxcdTAwM2VzZmNvdW50W01DQVNUX0VYQ0xVREVdICE9IDApKSB7XFxubmV0L2lwdjQvaWdtcC5jOjIyMzM6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMjIzNC1cXHRcXHRzdHJ1Y3QgaXBfc2ZfbGlzdCAqcHNmO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIyNDMtXFx0XFx0XFx0cG1jLVxcdTAwM2VzZm1vZGUgPSBNQ0FTVF9JTkNMVURFO1xcbm5ldC9pcHY0L2lnbXAuYzoyMjQ0OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTIyNDUtXFx0XFx0LyogZWxzZSBubyBmaWx0ZXJzOyBrZWVwIG9sZCBtb2RlIGZvciByZXBvcnRzICovXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9Mjk1OD1zdGF0aWMgaW50IGlnbXBfbWNfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjk2OS1cXG5uZXQvaXB2NC9pZ21wLmM6Mjk3MDojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0yOTcxLVxcdFxcdHF1ZXJpZXIgPSBJR01QX1YxX1NFRU4oc3RhdGUtXFx1MDAzZWluX2RldikgPyBcXFwiVjFcXFwiIDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzQ6MzUuNDE3MDU1NjI3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNTk0MDc2ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIElQIE11bHRpY2FzdCBDb25maWd1cmF0aW9uIGFuZCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBhbmQgaXQncyBjbGVhciB0aGF0IGBDT05GSUdfSVBfTVVMVElDQVNUYCBpcyBmdW5kYW1lbnRhbCB0byBob3cgYGlnbXAuY2Agb3BlcmF0ZXMuIEdpdmVuIHRoYXQsIGVuYWJsaW5nIGBJUF9NVUxUSUNBU1RgIHNlZW1zIGxpa2UgYSBuby1icmFpbmVyIGZvciBwcm9wZXIgZnVuY3Rpb25hbGl0eS5cblxuTm93LCBJIHdhcyBhIGJpdCBjb25jZXJuZWQgYWJvdXQgdGhlIHJlYWNoYWJpbGl0eSBvZiBgaXBfbWNfZGVzdHJveV9kZXZgIHdpdGhvdXQgYENPTkZJR19JUF9NVUxUSUNBU1RgLCBidXQgaXQgKmlzKiBhY2Nlc3NpYmxlLiBTdGlsbCwgdG8gZ2V0IGZ1bGwgY292ZXJhZ2UgYW5kIG1ha2Ugc3VyZSB3ZSdyZSB0aG9yb3VnaGx5IHRlc3RpbmcgdGhlIG11bHRpY2FzdCBmZWF0dXJlcywgYElQX01VTFRJQ0FTVGAgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgY29uZmlnIHRvIGluY2x1ZGUuXG5cbkxldCBtZSB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGlzIHBhdGNoLi4uIEkgc2VlIHRoZSBjb2RlIGlzIG1vZGlmeWluZyBhIGxvb3AgdGhhdCdzIGl0ZXJhdGluZyB0aHJvdWdoIGBpbl9kZXYtXHUwMDNlbWNfbGlzdGAuIFRoZSBrZXkgYWRkaXRpb24gaXMgdGhlIGBpcF9tY19oYXNoX3JlbW92ZWAgY2FsbCB3aXRoaW4gdGhhdCBsb29wLiBJdCBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGEgYnVnIGZpeCwgYWN0dWFsbHkg4oCTIHJlbGF0ZWQgdG8gdXBkYXRpbmcgdGhlIGBtY19oYXNoYCB0YWJsZSB3aGVuIGBtY19saXN0YCBpcyBiZWluZyBjbGVhcmVkLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBzaW1pbGFyIG1lbW9yeSBjb3JydXB0aW9uIGlmIHRoZSBoYXNoIHRhYmxlIGlzIGFjY2Vzc2VkIGFmdGVyIHRoZSBkZXZpY2UgaXMgZGVzdHJveWVkLlxuXG5XYWl0IGEgc2Vjb25k4oCmIGBpbl9kZXZgIGlzIGJlaW5nIGRlc3Ryb3llZCwgc28gc2hvdWxkbid0IGl0cyBoYXNoIHRhYmxlIGFsc28gYmUgZGVzdHJveWVkPyBJcyB0aGUgaGFzaCB0YWJsZSBzb21laG93IGdsb2JhbD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBpcF9tY19oYXNoX3JlbW92ZWAgdG8gY29uZmlybSB0aGUgc2NvcGUgb2YgdGhpcyBoYXNoIHRhYmxlLiBJdCBzZWVtcyBsaWtlIHRoZSBwYXRjaCBpcyBuZWNlc3NhcnkgdG8gbWFpbnRhaW4gZGF0YSBjb25zaXN0ZW5jeSB3aXRoaW4gdGhlIGBpbl9kZXZgIHN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NjksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzQ6NDEuNjc2NDY2NTMxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzODQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pZ21wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQzMDpcXHRcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKG1jX2hhc2hbaGFzaF0sIGltKTtcXG4xNDMxOlxcdFxcdH1cXG4xNDMyOlxcdFxcbjE0MzM6XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGluX2Rldi1cXHUwMDNlbWNfaGFzaCwgbWNfaGFzaCk7XFxuMTQzNDpcXHR9XFxuMTQzNTpcXHRcXG4xNDM2OlxcdHN0YXRpYyB2b2lkIGlwX21jX2hhc2hfcmVtb3ZlKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldixcXG4xNDM3OlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBpcF9tY19saXN0ICppbSlcXG4xNDM4OlxcdHtcXG4xNDM5OlxcdFxcdHN0cnVjdCBpcF9tY19saXN0IF9fcmN1ICoqbWNfaGFzaCA9IHJ0bmxfZGVyZWZlcmVuY2UoaW5fZGV2LVxcdTAwM2VtY19oYXNoKTtcXG4xNDQwOlxcdFxcdHN0cnVjdCBpcF9tY19saXN0ICphdXg7XFxuMTQ0MTpcXHRcXG4xNDQyOlxcdFxcdGlmICghbWNfaGFzaClcXG4xNDQzOlxcdFxcdFxcdHJldHVybjtcXG4xNDQ0OlxcdFxcdG1jX2hhc2ggKz0gaXBfbWNfaGFzaChpbSk7XFxuMTQ0NTpcXHRcXHR3aGlsZSAoKGF1eCA9IHJ0bmxfZGVyZWZlcmVuY2UoKm1jX2hhc2gpKSAhPSBpbSlcXG4xNDQ2OlxcdFxcdFxcdG1jX2hhc2ggPSBcXHUwMDI2YXV4LVxcdTAwM2VuZXh0X2hhc2g7XFxuMTQ0NzpcXHRcXHQqbWNfaGFzaCA9IGltLVxcdTAwM2VuZXh0X2hhc2g7XFxuMTQ0ODpcXHR9XFxuMTQ0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzQ6NDEuNjc2ODA3MzAxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMDcwMzk5NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEhhc2ggVGFibGUgSXNzdWUqKlxuXG5TbywgdGhlIGNvZGUncyB1c2luZyBhIGhhc2ggdGFibGUgKGBpbl9kZXYtXHUwMDNlbWNfaGFzaGApIHRoYXQncyBzcGVjaWZpYyB0byBlYWNoIG5ldHdvcmsgZGV2aWNlIChgaW5fZGV2YCkuIE15IGluaXRpYWwgcXVlc3Rpb24gaXM6IGlmIHRoZSBkZXZpY2UgaXRzZWxmLCBgaW5fZGV2YCwgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZGVzdHJveWVkLCB3aHkgZG8gd2UgZXZlbiBjYXJlIGFib3V0IHJlbW92aW5nIGl0IGZyb20gdGhlIGhhc2ggdGFibGU/IFNob3VsZG4ndCBpdCBqdXN0IGJlY29tZSBpcnJlbGV2YW50P1xuXG5CdXQgdGhlbiBhIHBvc3NpYmlsaXR5IGhpdHMgbWUuIFBlcmhhcHMgYGluX2RldmAgaXNuJ3QgaW1tZWRpYXRlbHkgZnJlZWQgYWZ0ZXIgYmVpbmcgbWFya2VkIGZvciBkZXN0cnVjdGlvbi4gTWF5YmUgdGhlcmUncyBhIHdpbmRvdyBvZiB0aW1lIHdoZXJlIHNvbWVvbmUgKmNvdWxkKiBzdGlsbCB0cnkgdG8gbG9vayBpdCB1cCBpbiB0aGUgaGFzaCB0YWJsZS4gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGVuIHRoaXMgcmVtb3ZhbCBvcGVyYXRpb24gYmVjb21lcyBjcnVjaWFsIHRvIGF2b2lkIGRhbmdsaW5nIHBvaW50ZXJzIG9yIG90aGVyIG5hc3R5IG1lbW9yeSBtYW5hZ2VtZW50IGlzc3Vlcy5cblxuVGhlcmVmb3JlLCB0aGUgbmV4dCBzdGVwIGlzIGNyeXN0YWwgY2xlYXI6IEkgbmVlZCB0byBwaW5wb2ludCBleGFjdGx5IHdoZXJlIGBpbl9kZXYtXHUwMDNlbWNfaGFzaGAgZ2V0cyBmcmVlZC4gVGhhdCdzIHdoZXJlIHRoZSBjcml0aWNhbCBpbmZvcm1hdGlvbiB3aWxsIHJlc2lkZSwgYW5kIGZyb20gdGhhdCBJIGNhbiBkZXRlcm1pbmUgaWYgdGhlIHJlbW92YWwgaXMgbmVjZXNzYXJ5IGFuZCBjb3JyZWN0LiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIGZpbmQgdGhlIGZyZWVpbmcgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTc2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNjozNDo0NS44ODM4NTA0ODNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyOTgxNTExMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtY19oYXNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lnbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pZ21wLmM9MTM1Mj1zdGF0aWMgdm9pZCBpZ21wX2dyb3VwX2FkZGVkKHN0cnVjdCBpcF9tY19saXN0ICppbSlcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xMzk4LVxcbm5ldC9pcHY0L2lnbXAuYzoxMzk5OnN0YXRpYyB1MzIgaXBfbWNfaGFzaChjb25zdCBzdHJ1Y3QgaXBfbWNfbGlzdCAqaW0pXFxubmV0L2lwdjQvaWdtcC5jLTE0MDAte1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTE0MDMtXFxubmV0L2lwdjQvaWdtcC5jOjE0MDQ6c3RhdGljIHZvaWQgaXBfbWNfaGFzaF9hZGQoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LFxcbm5ldC9pcHY0L2lnbXAuYy0xNDA1LVxcdFxcdFxcdCAgIHN0cnVjdCBpcF9tY19saXN0ICppbSlcXG5uZXQvaXB2NC9pZ21wLmMtMTQwNi17XFxubmV0L2lwdjQvaWdtcC5jOjE0MDc6XFx0c3RydWN0IGlwX21jX2xpc3QgX19yY3UgKiptY19oYXNoO1xcbm5ldC9pcHY0L2lnbXAuYy0xNDA4LVxcdHUzMiBoYXNoO1xcbm5ldC9pcHY0L2lnbXAuYy0xNDA5LVxcbm5ldC9pcHY0L2lnbXAuYzoxNDEwOlxcdG1jX2hhc2ggPSBydG5sX2RlcmVmZXJlbmNlKGluX2Rldi1cXHUwMDNlbWNfaGFzaCk7XFxubmV0L2lwdjQvaWdtcC5jOjE0MTE6XFx0aWYgKG1jX2hhc2gpIHtcXG5uZXQvaXB2NC9pZ21wLmM6MTQxMjpcXHRcXHRoYXNoID0gaXBfbWNfaGFzaChpbSk7XFxubmV0L2lwdjQvaWdtcC5jOjE0MTM6XFx0XFx0aW0tXFx1MDAzZW5leHRfaGFzaCA9IG1jX2hhc2hbaGFzaF07XFxubmV0L2lwdjQvaWdtcC5jOjE0MTQ6XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKG1jX2hhc2hbaGFzaF0sIGltKTtcXG5uZXQvaXB2NC9pZ21wLmMtMTQxNS1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTQyMS1cXG5uZXQvaXB2NC9pZ21wLmM6MTQyMjpcXHRtY19oYXNoID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlwX21jX2xpc3QgKikgXFx1MDAzY1xcdTAwM2MgTUNfSEFTSF9TWl9MT0csXFxubmV0L2lwdjQvaWdtcC5jLTE0MjMtXFx0XFx0XFx0ICBHRlBfS0VSTkVMKTtcXG5uZXQvaXB2NC9pZ21wLmM6MTQyNDpcXHRpZiAoIW1jX2hhc2gpXFxubmV0L2lwdjQvaWdtcC5jLTE0MjUtXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTE0MjctXFx0Zm9yX2VhY2hfcG1jX3J0bmwoaW5fZGV2LCBpbSkge1xcbm5ldC9pcHY0L2lnbXAuYzoxNDI4OlxcdFxcdGhhc2ggPSBpcF9tY19oYXNoKGltKTtcXG5uZXQvaXB2NC9pZ21wLmM6MTQyOTpcXHRcXHRpbS1cXHUwMDNlbmV4dF9oYXNoID0gbWNfaGFzaFtoYXNoXTtcXG5uZXQvaXB2NC9pZ21wLmM6MTQzMDpcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKG1jX2hhc2hbaGFzaF0sIGltKTtcXG5uZXQvaXB2NC9pZ21wLmMtMTQzMS1cXHR9XFxubmV0L2lwdjQvaWdtcC5jLTE0MzItXFxubmV0L2lwdjQvaWdtcC5jOjE0MzM6XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGluX2Rldi1cXHUwMDNlbWNfaGFzaCwgbWNfaGFzaCk7XFxubmV0L2lwdjQvaWdtcC5jLTE0MzQtfVxcbm5ldC9pcHY0L2lnbXAuYy0xNDM1LVxcbm5ldC9pcHY0L2lnbXAuYzoxNDM2OnN0YXRpYyB2b2lkIGlwX21jX2hhc2hfcmVtb3ZlKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldixcXG5uZXQvaXB2NC9pZ21wLmMtMTQzNy1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgaXBfbWNfbGlzdCAqaW0pXFxubmV0L2lwdjQvaWdtcC5jLTE0Mzgte1xcbm5ldC9pcHY0L2lnbXAuYzoxNDM5OlxcdHN0cnVjdCBpcF9tY19saXN0IF9fcmN1ICoqbWNfaGFzaCA9IHJ0bmxfZGVyZWZlcmVuY2UoaW5fZGV2LVxcdTAwM2VtY19oYXNoKTtcXG5uZXQvaXB2NC9pZ21wLmMtMTQ0MC1cXHRzdHJ1Y3QgaXBfbWNfbGlzdCAqYXV4O1xcbm5ldC9pcHY0L2lnbXAuYy0xNDQxLVxcbm5ldC9pcHY0L2lnbXAuYzoxNDQyOlxcdGlmICghbWNfaGFzaClcXG5uZXQvaXB2NC9pZ21wLmMtMTQ0My1cXHRcXHRyZXR1cm47XFxubmV0L2lwdjQvaWdtcC5jOjE0NDQ6XFx0bWNfaGFzaCArPSBpcF9tY19oYXNoKGltKTtcXG5uZXQvaXB2NC9pZ21wLmM6MTQ0NTpcXHR3aGlsZSAoKGF1eCA9IHJ0bmxfZGVyZWZlcmVuY2UoKm1jX2hhc2gpKSAhPSBpbSlcXG5uZXQvaXB2NC9pZ21wLmM6MTQ0NjpcXHRcXHRtY19oYXNoID0gXFx1MDAyNmF1eC1cXHUwMDNlbmV4dF9oYXNoO1xcbm5ldC9pcHY0L2lnbXAuYzoxNDQ3OlxcdCptY19oYXNoID0gaW0tXFx1MDAzZW5leHRfaGFzaDtcXG5uZXQvaXB2NC9pZ21wLmMtMTQ0OC19XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MTUxOD1zdGF0aWMgdm9pZCBfX19faXBfbWNfaW5jX2dyb3VwKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIGFkZHIsXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTUyMC17XFxubmV0L2lwdjQvaWdtcC5jOjE1MjE6XFx0c3RydWN0IGlwX21jX2xpc3QgX19yY3UgKiptY19oYXNoO1xcbm5ldC9pcHY0L2lnbXAuYy0xNTIyLVxcdHN0cnVjdCBpcF9tY19saXN0ICppbTtcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xNTI1LVxcbm5ldC9pcHY0L2lnbXAuYzoxNTI2OlxcdG1jX2hhc2ggPSBydG5sX2RlcmVmZXJlbmNlKGluX2Rldi1cXHUwMDNlbWNfaGFzaCk7XFxubmV0L2lwdjQvaWdtcC5jOjE1Mjc6XFx0aWYgKG1jX2hhc2gpIHtcXG5uZXQvaXB2NC9pZ21wLmMtMTUyOC1cXHRcXHR1MzIgaGFzaCA9IGhhc2hfMzIoKF9fZm9yY2UgdTMyKWFkZHIsIE1DX0hBU0hfU1pfTE9HKTtcXG5uZXQvaXB2NC9pZ21wLmMtMTUyOS1cXG5uZXQvaXB2NC9pZ21wLmM6MTUzMDpcXHRcXHRmb3IgKGltID0gcnRubF9kZXJlZmVyZW5jZShtY19oYXNoW2hhc2hdKTtcXG5uZXQvaXB2NC9pZ21wLmMtMTUzMS1cXHRcXHQgICAgIGltO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTE1NzEtXFxubmV0L2lwdjQvaWdtcC5jOjE1NzI6XFx0aXBfbWNfaGFzaF9hZGQoaW5fZGV2LCBpbSk7XFxubmV0L2lwdjQvaWdtcC5jLTE1NzMtXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MTc3Nj12b2lkIF9faXBfbWNfZGVjX2dyb3VwKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIGFkZHIsIGdmcF90IGdmcClcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xNzkwLVxcdFxcdFxcdGlmIChuZXdfdXNlcnMgPT0gMCkge1xcbm5ldC9pcHY0L2lnbXAuYzoxNzkxOlxcdFxcdFxcdFxcdGlwX21jX2hhc2hfcmVtb3ZlKGluX2RldiwgaSk7XFxubmV0L2lwdjQvaWdtcC5jLTE3OTItXFx0XFx0XFx0XFx0KmlwID0gaS1cXHUwMDNlbmV4dF9yY3U7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MTkxMj12b2lkIGlwX21jX2Rlc3Ryb3lfZGV2KHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xOTI0LVxcdHdoaWxlICgoaSA9IHJ0bmxfZGVyZWZlcmVuY2UoaW5fZGV2LVxcdTAwM2VtY19saXN0KSkgIT0gTlVMTCkge1xcbm5ldC9pcHY0L2lnbXAuYzoxOTI1OlxcdFxcdGlwX21jX2hhc2hfcmVtb3ZlKGluX2RldiwgaSk7XFxubmV0L2lwdjQvaWdtcC5jLTE5MjYtXFx0XFx0aW5fZGV2LVxcdTAwM2VtY19saXN0ID0gaS1cXHUwMDNlbmV4dF9yY3U7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MjgyNj1pbnQgaXBfY2hlY2tfbWNfcmN1KHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIG1jX2FkZHIsIF9fYmUzMiBzcmNfYWRkciwgdTggcHJvdG8pXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjgyOC1cXHRzdHJ1Y3QgaXBfbWNfbGlzdCAqaW07XFxubmV0L2lwdjQvaWdtcC5jOjI4Mjk6XFx0c3RydWN0IGlwX21jX2xpc3QgX19yY3UgKiptY19oYXNoO1xcbm5ldC9pcHY0L2lnbXAuYy0yODMwLVxcdHN0cnVjdCBpcF9zZl9saXN0ICpwc2Y7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjgzMi1cXG5uZXQvaXB2NC9pZ21wLmM6MjgzMzpcXHRtY19oYXNoID0gcmN1X2RlcmVmZXJlbmNlKGluX2Rldi1cXHUwMDNlbWNfaGFzaCk7XFxubmV0L2lwdjQvaWdtcC5jOjI4MzQ6XFx0aWYgKG1jX2hhc2gpIHtcXG5uZXQvaXB2NC9pZ21wLmMtMjgzNS1cXHRcXHR1MzIgaGFzaCA9IGhhc2hfMzIoKF9fZm9yY2UgdTMyKW1jX2FkZHIsIE1DX0hBU0hfU1pfTE9HKTtcXG5uZXQvaXB2NC9pZ21wLmMtMjgzNi1cXG5uZXQvaXB2NC9pZ21wLmM6MjgzNzpcXHRcXHRmb3IgKGltID0gcmN1X2RlcmVmZXJlbmNlKG1jX2hhc2hbaGFzaF0pO1xcbm5ldC9pcHY0L2lnbXAuYy0yODM4LVxcdFxcdCAgICAgaW0gIT0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzQ6NDYuNDEzNjcyNTU1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5MzA1MDYxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipEaWdnaW5nIGludG8gdGhlIGBtY19oYXNoYCBJbXBsZW1lbnRhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIG11bHRpY2FzdCBoYXNoIHRhYmxlLCBzcGVjaWZpY2FsbHkgYGluX2Rldi1cdTAwM2VtY19oYXNoYC4gTXkgaW1tZWRpYXRlIG9ic2VydmF0aW9uIGlzIHRoYXQgdGhlIG1lbW9yeSBmb3IgaXQsIHRoYXQgYGluX2Rldi1cdTAwM2VtY19oYXNoYCBzdHJ1Y3R1cmUsIGlzbid0IGFsbG9jYXRlZCB1cGZyb250IGR1cmluZyB0aGUgYGluX2RldmAgc2V0dXAuIEl0J3MgYWxsb2NhdGVkICpsYXppbHkqLCBpbnNpZGUgYGlwX21jX2hhc2hfYWRkYCDigJMgcHJlY2lzZWx5IHdoZW4gdGhlIGZpcnN0IG11bHRpY2FzdCBncm91cCBlbnRyeSBuZWVkcyB0byBiZSBhZGRlZCB0byBhbiBpbnRlcmZhY2UncyBtdWx0aWNhc3QgbWVtYmVyc2hpcC4gVGhhdCBtYWtlcyBzZW5zZSwgbWluaW1pemVzIG1lbW9yeSB1c2FnZSBpZiB0aGUgaW50ZXJmYWNlIG5ldmVyIGFjdHVhbGx5IGpvaW5zIGEgbXVsdGljYXN0IGdyb3VwLlxuXG5CdXQgaGFuZyBvbuKApiB0aGF0IGFsc28gbWVhbnMgSSBuZWVkIHRvIGJlICpyZWFsbHkqIGNhcmVmdWwgYWJvdXQgdGhlIGRlYWxsb2NhdGlvbiBwYXRoLiBJZiBpdCdzIGFsbG9jYXRlZCBvbiBkZW1hbmQsIEkgbmVlZCB0byBrbm93ICpwcmVjaXNlbHkqIHdoZXJlIGFuZCB3aGVuIGBpbl9kZXYtXHUwMDNlbWNfaGFzaGAgaXMgZnJlZWQuICBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgYWxsb2NhdGlvbiBpbiBgaXBfbWNfaGFzaF9hZGRgIGFuZCBkZXRlcm1pbmUgdGhlIGNvcnJlc3BvbmRpbmcgY2xlYW51cCBmdW5jdGlvbiwgSSBuZWVkIHRvIGtub3cgd2hpY2ggZXZlbnRzIHJlc3VsdCBpbiB0aGUgZGVhbGxvY2F0aW9uLiBJcyBpdCBoYW5kbGVkIGR1cmluZyBpbnRlcmZhY2UgdGVhcmRvd24sIHNvbWUgc29ydCBvZiBnbG9iYWwgc2h1dGRvd24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyAgSSBiZXR0ZXIgZmlndXJlIG91dCB0aGUgbGlmZWN5Y2xlIG9mIHRoYXQgaGFzaCB0YWJsZSB0byBhdm9pZCBtZW1vcnkgbGVha3Mgb3IgZG91YmxlLWZyZWVzLiBUaGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIGFkZCB0byBteSBtZW50YWwgY2hlY2tsaXN0IGZvciBwb3RlbnRpYWwgcHJvYmxlbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDUyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzQ6NTIuMzQ0MTgyNzI3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU4ODA0NTgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmcmVlLiptY19oYXNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lnbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzQ6NTIuNDUwMDcyNzE1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODYxMTAyMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXBseSBmYW1pbGlhciB3aXRoIHNvZnR3YXJlIGRldmVsb3BtZW50IGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50OlxuXG4qKkNoZWNraW5nIGBpbl9kZXZgIFJlc291cmNlIFJlbGVhc2UqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoZSBgaW5fZGV2YCBlbnZpcm9ubWVudCByaWdodCBub3cuIEknbSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYWJvdXQgcmVzb3VyY2UgZnJlZWluZyDigJMgYXJlIHdlIHByb3Blcmx5IHJlbGVhc2luZyBtZW1vcnksIGZpbGUgaGFuZGxlcywgY29ubmVjdGlvbnMsIGFuZCBhbGwgdGhlIG90aGVyIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhhdCBlbnZpcm9ubWVudCBhZnRlciBhIHRlc3Qgb3IgYSB0YXNrPyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgbGVha3Mgb3IgbGluZ2VyaW5nIHByb2Nlc3NlcyBpbXBhY3RpbmcgcGVyZm9ybWFuY2Ugb3Igc3RhYmlsaXR5LiBJdCdzIHRpbWUgdG8gZGl2ZSBpbiBhbmQgZW5zdXJlIHdlJ3JlIGJlaW5nIGdvb2Qgc3Rld2FyZHMgb2Ygb3VyIHJlc291cmNlcyBkdXJpbmcgZGV2ZWxvcG1lbnQuIEkgc3VzcGVjdCB0aGlzIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gYmVjYXVzZSBpdOKAmXMgYSB0eXBpY2FsIHNvdXJjZSBvZiBwcm9ibGVtcy4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDU1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzQ6NTUuNzM2MTg1NDc1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTI4NTcwMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2ZyZWVfcmN1Lippbl9kZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNjozNDo1NS44MTc0Nzc0MThaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxNDg3NDI3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgaW5ldGRldl9kZXN0cm95YCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gdGhpbmtpbmcsIFwiT2theSwgYGluZXRkZXZfZGVzdHJveWAuLi5cIi4gVGhhdCBmdW5jdGlvbiBuYW1lIGltbWVkaWF0ZWx5IHNjcmVhbXMgSVAtc3BlY2lmaWMgbmV0d29yayBkZXZpY2UgdGVhcmRvd24uIEdpdmVuIHRoZSBjb250ZXh0LCBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIHZhcmlvdXMgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBwb3RlbnRpYWwgY2xlYW51cCBzY2VuYXJpb3MgaW52b2x2ZWQuIEknbSB3b25kZXJpbmcgaWYgdGhpcyBpcyBhIHNpbXBsZSBkZWFsbG9jYXRpb24gb3IgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggcm91dGluZyB0YWJsZXMsIG5laWdoYm9yIGNhY2hlcywgb3IgZXZlbiB1cHBlci1sYXllciBwcm90b2NvbHMgdGhhdCBuZWVkIGNhcmVmdWwgaGFuZGxpbmcgZHVyaW5nIHRoaXMgZGVzdHJveSBwcm9jZXNzLiBNeSBmb2N1cyBpcyBvbiBlbnN1cmluZyB0aGVyZSBhcmUgbm8gbWVtb3J5IGxlYWtzLCBkYW5nbGluZyBwb2ludGVycywgb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucyBsdXJraW5nIHdpdGhpbiB0aGUgZnVuY3Rpb24ncyBsb2dpYy4gSSdtIGFudGljaXBhdGluZyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggbG9ja2luZyBhbmQgY29uY3VycmVuY3ksIGVzcGVjaWFsbHkgaWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBhIG11bHRpLXRocmVhZGVkIGNvbnRleHQuIEEgd2VsbC1kZXNpZ25lZCBmdW5jdGlvbiB3aWxsIGhhbmRsZSBhbGwgdGhlc2UgcG90ZW50aWFsIGlzc3VlcyBlbGVnYW50bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Njg1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzQ6NTkuMDMyMzU0MjMzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9kZXZpbmV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzE0LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzE0OlxcdHN0YXRpYyB2b2lkIGluZXRkZXZfZGVzdHJveShzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXFxuIDMxNTpcXHR7XFxuIDMxNjpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbiAzMTc6XFx0XFx0c3RydWN0IGluX2lmYWRkciAqaWZhO1xcbiAzMTg6XFx0XFxuIDMxOTpcXHRcXHRBU1NFUlRfUlROTCgpO1xcbiAzMjA6XFx0XFxuIDMyMTpcXHRcXHRkZXYgPSBpbl9kZXYtXFx1MDAzZWRldjtcXG4gMzIyOlxcdFxcbiAzMjM6XFx0XFx0aW5fZGV2LVxcdTAwM2VkZWFkID0gMTtcXG4gMzI0OlxcdFxcbiAzMjU6XFx0XFx0aXBfbWNfZGVzdHJveV9kZXYoaW5fZGV2KTtcXG4gMzI2OlxcdFxcbiAzMjc6XFx0XFx0d2hpbGUgKChpZmEgPSBydG5sX2RlcmVmZXJlbmNlKGluX2Rldi1cXHUwMDNlaWZhX2xpc3QpKSAhPSBOVUxMKSB7XFxuIDMyODpcXHRcXHRcXHRpbmV0X2RlbF9pZmEoaW5fZGV2LCBcXHUwMDI2aW5fZGV2LVxcdTAwM2VpZmFfbGlzdCwgMCk7XFxuIDMyOTpcXHRcXHRcXHRpbmV0X2ZyZWVfaWZhKGlmYSk7XFxuIDMzMDpcXHRcXHR9XFxuIDMzMTpcXHRcXG4gMzMyOlxcdFxcdFJDVV9JTklUX1BPSU5URVIoZGV2LVxcdTAwM2VpcF9wdHIsIE5VTEwpO1xcbiAzMzM6XFx0XFxuIDMzNDpcXHRcXHRkZXZpbmV0X3N5c2N0bF91bnJlZ2lzdGVyKGluX2Rldik7XFxuIDMzNTpcXHRcXHRuZWlnaF9wYXJtc19yZWxlYXNlKFxcdTAwMjZhcnBfdGJsLCBpbl9kZXYtXFx1MDAzZWFycF9wYXJtcyk7XFxuIDMzNjpcXHRcXHRhcnBfaWZkb3duKGRldik7XFxuIDMzNzpcXHRcXG4gMzM4OlxcdFxcdGluX2Rldl9wdXQoaW5fZGV2KTtcXG4gMzM5OlxcdH1cXG4gMzQwOlxcdFxcbiAzNDE6XFx0c3RhdGljIGludCBfX2luaXQgaW5ldF9ibGFja2hvbGVfZGV2X2luaXQodm9pZClcXG4gMzQyOlxcdHtcXG4gMzQzOlxcdFxcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzQ6NTkuMDMyNTQwMzkzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDM5ODcxNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIFJlc291cmNlIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgaW5fZGV2X3B1dChpbl9kZXYpYC4gVGhlIGNvbW1lbnQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyBgaW5fZGV2YC4gQWxyaWdodCwgdGhhdCdzIHRoZSBjb3JlIGZ1bmN0aW9uJ3Mgcm9sZTogcmVzb3VyY2UgY2xlYW51cC4gTGV0J3MgZGlnIGluIGFuZCBleGFtaW5lIHRoZSBkZXRhaWxzIG9mIHdoYXQgYGluX2Rldl9wdXRgIGRvZXMgdG8gYWNjb21wbGlzaCB0aGF0IGZyZWVpbmcgb2YgdGhlIGBpbl9kZXZgIHJlc291cmNlLiBUaW1lIHRvIHNlZSB3aGF0J3MgYWN0dWFsbHkgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjM1OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzU6MDIuMjM2NTI5OTg5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk0OTEwNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5fZGV2X3B1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaD0yODU9dm9pZCBpbl9kZXZfZmluaXNoX2Rlc3Ryb3koc3RydWN0IGluX2RldmljZSAqaWRldik7XFxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgtMjg2LVxcbmluY2x1ZGUvbGludXgvaW5ldGRldmljZS5oOjI4NzpzdGF0aWMgaW5saW5lIHZvaWQgaW5fZGV2X3B1dChzdHJ1Y3QgaW5fZGV2aWNlICppZGV2KVxcbmluY2x1ZGUvbGludXgvaW5ldGRldmljZS5oLTI4OC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaC0yOTItXFxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmg6MjkzOiNkZWZpbmUgX19pbl9kZXZfcHV0KGlkZXYpICByZWZjb3VudF9kZWMoXFx1MDAyNihpZGV2KS1cXHUwMDNlcmVmY250KVxcbmluY2x1ZGUvbGludXgvaW5ldGRldmljZS5oLTI5NC0jZGVmaW5lIGluX2Rldl9ob2xkKGlkZXYpICAgcmVmY291bnRfaW5jKFxcdTAwMjYoaWRldiktXFx1MDAzZXJlZmNudClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzU6MDIuNDA2MDI3MjU1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5MzY5ODUzNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXBseSBmYW1pbGlhciB3aXRoIHNvZnR3YXJlIGRldmVsb3BtZW50IGFuZCByZWxhdGVkIHRlcm1pbm9sb2d5OlxuXG4qKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gQ2FsbDogYGluX2Rldl9maW5pc2hfZGVzdHJveWAqKlxuXG5BbHJpZ2h0LCBteSBicmFpbiBqdXN0IHdlbnQgc3RyYWlnaHQgdG8gdGhhdCBmdW5jdGlvbiBuYW1lOiBgaW5fZGV2X2ZpbmlzaF9kZXN0cm95YC4gSW1tZWRpYXRlbHksIEknbSBwYXJzaW5nIHRoYXQuIFRoZSBwcmVmaXggXCJpbl9kZXZcIiBzY3JlYW1zIFwiZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRcIiBvciBcImRldmVsb3BtZW50IGNvbnRleHQuXCIgU28sIHRoaXMgaXNuJ3Qgc29tZXRoaW5nIGRlc3RpbmVkIGZvciBwcm9kdWN0aW9uLCB0aGF0J3MgY2xlYXIuIEl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gc29tZSBzb3J0IG9mIHRlbXBvcmFyeSBzZXR1cCwgdGVzdGluZywgb3IgbWF5YmUgY2xlYW51cCByZWxhdGVkIHRvIGEgZGV2ZWxvcG1lbnQgYnVpbGQuXG5cblRoZSBjb3JlIGFjdGlvbiBpcyBcImZpbmlzaF9kZXN0cm95LlwiIERlc3Ryb3lpbmcgKndoYXQqPyBUaGUgY29udGV4dCBpcyBrZXkuIEFtIEkgbG9va2luZyBhdCByZXNvdXJjZXMsIHRlbXBvcmFyeSBmaWxlcywgdGVzdCBkYXRhLCBkYXRhYmFzZSBlbnRyaWVzLCBvciBhIHdob2xlIGRldmVsb3BtZW50IGluc3RhbmNlPyBUaGUgbmFtaW5nIGNvbnZlbnRpb24gc3VnZ2VzdHMgaXQgaXMgcmVsYXRlZCB0byB0aGUgY2xlYW51cCBvZiBzb21ldGhpbmcgd2hpY2ggaGFkIGJlZW4gc3RhcnRlZCBmb3IgdGhlIFwiaW5fZGV2XCIgZW52aXJvbm1lbnQuIFRoZSB1c2Ugb2YgXCJmaW5pc2hcIiBoaW50cyBhdCBhIHByb2Nlc3Mgb3Igc3RhdGUgdGhhdCBpcyBjb21pbmcgdG8gYW4gZW5kLiBJdCdzIG5vdCB0aGUgaW5pdGlhbCBkZXN0cnVjdGlvbiwgYnV0IHRoZSAqY29tcGxldGlvbiogb2YgdGhhdCBwcm9jZXNzLlxuXG5JIG5lZWQgbW9yZSBjb250ZXh0LCBvYnZpb3VzbHkuIEJ1dCBiYXNlZCBvbiBqdXN0IHRoZSBuYW1lLCBJJ20gYXNzdW1pbmcgdGhhdCBJIGFtIGVpdGhlciB0cnlpbmcgdG8gY2xlYW4gdXAgcmVzb3VyY2VzIGZyb20gZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzLCBvciBhbSByZXZpZXdpbmcgdGhhdCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjcyNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjM1OjA4LjM0MzAxNTExNFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgyMjA2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5fZGV2X2ZpbmlzaF9kZXN0cm95XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2RldmluZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9kZXZpbmV0LmM9MjMyPXN0YXRpYyB2b2lkIGluZXRfZnJlZV9pZmEoc3RydWN0IGluX2lmYWRkciAqaWZhKVxcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jLTIzNS1cXHQgKiB0byByZWxlYXNlIHRoZSByZWZlcmVuY2UgdG8gdGhlIG5ldGRldiB0aGUgc2FtZSB3YXkuXFxubmV0L2lwdjQvZGV2aW5ldC5jOjIzNjpcXHQgKiBpbl9kZXZfcHV0KCkgLVxcdTAwM2UgaW5fZGV2X2ZpbmlzaF9kZXN0cm95KCkgLVxcdTAwM2UgbmV0ZGV2X3B1dCgpXFxubmV0L2lwdjQvZGV2aW5ldC5jLTIzNy1cXHQgKi9cXG4tLVxcbm5ldC9pcHY0L2RldmluZXQuYz0yNDE9c3RhdGljIHZvaWQgaW5fZGV2X2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4tLVxcbm5ldC9pcHY0L2RldmluZXQuYy0yNDgtXFxubmV0L2lwdjQvZGV2aW5ldC5jOjI0OTp2b2lkIGluX2Rldl9maW5pc2hfZGVzdHJveShzdHJ1Y3QgaW5fZGV2aWNlICppZGV2KVxcbm5ldC9pcHY0L2RldmluZXQuYy0yNTAte1xcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jLTI2My19XFxubmV0L2lwdjQvZGV2aW5ldC5jOjI2NDpFWFBPUlRfU1lNQk9MKGluX2Rldl9maW5pc2hfZGVzdHJveSk7XFxubmV0L2lwdjQvZGV2aW5ldC5jLTI2NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzU6MDguNDQxMjQxNDQ0WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTM2MDU4ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIGFzIEkgYXBwcm9hY2ggcmVhZGluZyB0aGlzIGNvZGUgc25pcHBldDpcblxuKipEZWNvbnN0cnVjdGluZyBgaW5fZGV2X2ZpbmlzaF9kZXN0cm95YCoqXG5cbkFscmlnaHQsIEknbSBzdGFydGluZyB3aXRoIGBpbl9kZXZfZmluaXNoX2Rlc3Ryb3lgLiBUaGUgdmVyeSBuYW1lIHN1Z2dlc3RzIHRoaXMgaXMgcmVsYXRlZCB0byBzb21ldGhpbmcgYmVpbmcgZGVzdHJveWVkLCBsaWtlbHkgaW4gYSBkZXZlbG9wbWVudCBjb250ZXh0LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCAqaXMqIGJlaW5nIGRlc3Ryb3llZD8gSXMgdGhpcyBhIGNsZWFudXAgZnVuY3Rpb24sIGEgdGVhcmRvd24sIG9yIHNvbWV0aGluZyBtb3JlIHByb2FjdGl2ZSBsaWtlIHByZXZlbnRpbmcgZnVydGhlciBvcGVyYXRpb24/IFRoZSBcImluX2RldlwiIHByZWZpeCBpcyBpbnRlcmVzdGluZy4gSXQgc3Ryb25nbHkgaGludHMgdGhpcyBmdW5jdGlvbiBpcyBwcm9iYWJseSBub3QgbWVhbnQgZm9yIHByb2R1Y3Rpb24gY29kZSBhbmQgaXMgbW9zdCBsaWtlbHkgZm9yIHRvb2xpbmcsIGRlYnVnZ2luZywgb3IgdGVzdCBlbnZpcm9ubWVudHMuIElzIHRoaXMgYSBmaW5hbCBjbGVhbnVwIHN0YWdlPyBJIHdvbmRlciB3aGF0IHJlc291cmNlcyBuZWVkIHRvIGJlIGZyZWVkIG9yIHdoYXQgc3RhdGUgbmVlZHMgdG8gYmUgcmVzZXQgYXQgdGhpcyBwb2ludC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBob3cgdGhlIGZ1bmN0aW9uIGlzIHVzZWQgYW5kIHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcgd2l0aGluIGl0LiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBhbnkgZGVwZW5kZW5jaWVzIGFuZCBjYWxscy4gVGhpcyBzaG91bGQgYmUgaW50ZXJlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzMyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzU6MTEuNjk0ODUwMjEzWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0ODE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9kZXZpbmV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQxLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQxOlxcdHN0YXRpYyB2b2lkIGluX2Rldl9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuIDI0MjpcXHR7XFxuIDI0MzpcXHRcXHRzdHJ1Y3QgaW5fZGV2aWNlICppZGV2ID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBpbl9kZXZpY2UsIHJjdV9oZWFkKTtcXG4gMjQ0OlxcdFxcbiAyNDU6XFx0XFx0a2ZyZWUocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChpZGV2LVxcdTAwM2VtY19oYXNoLCAxKSk7XFxuIDI0NjpcXHRcXHRrZnJlZShpZGV2KTtcXG4gMjQ3OlxcdH1cXG4gMjQ4OlxcdFxcbiAyNDk6XFx0dm9pZCBpbl9kZXZfZmluaXNoX2Rlc3Ryb3koc3RydWN0IGluX2RldmljZSAqaWRldilcXG4gMjUwOlxcdHtcXG4gMjUxOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpZGV2LVxcdTAwM2VkZXY7XFxuIDI1MjpcXHRcXG4gMjUzOlxcdFxcdFdBUk5fT04oaWRldi1cXHUwMDNlaWZhX2xpc3QpO1xcbiAyNTQ6XFx0XFx0V0FSTl9PTihpZGV2LVxcdTAwM2VtY19saXN0KTtcXG4gMjU1OlxcdCNpZmRlZiBORVRfUkVGQ05UX0RFQlVHXFxuIDI1NjpcXHRcXHRwcl9kZWJ1ZyhcXFwiJXM6ICVwPSVzXFxcXG5cXFwiLCBfX2Z1bmNfXywgaWRldiwgZGV2ID8gZGV2LVxcdTAwM2VuYW1lIDogXFxcIk5JTFxcXCIpO1xcbiAyNTc6XFx0I2VuZGlmXFxuIDI1ODpcXHRcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNmlkZXYtXFx1MDAzZWRldl90cmFja2VyKTtcXG4gMjU5OlxcdFxcdGlmICghaWRldi1cXHUwMDNlZGVhZClcXG4gMjYwOlxcdFxcdFxcdHByX2VycihcXFwiRnJlZWluZyBhbGl2ZSBpbl9kZXZpY2UgJXBcXFxcblxcXCIsIGlkZXYpO1xcbiAyNjE6XFx0XFx0ZWxzZVxcbiAyNjI6XFx0XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNmlkZXYtXFx1MDAzZXJjdV9oZWFkLCBpbl9kZXZfZnJlZV9yY3UpO1xcbiAyNjM6XFx0fVxcbiAyNjQ6XFx0RVhQT1JUX1NZTUJPTChpbl9kZXZfZmluaXNoX2Rlc3Ryb3kpO1xcbiAyNjU6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjM1OjExLjY5NTIwMDk3M1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjgwOTI1NDc1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVc2UtQWZ0ZXItRnJlZSBWdWxuZXJhYmlsaXR5IGluIE11bHRpY2FzdCBEZXZpY2UgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGluIHRoZSBtdWx0aWNhc3QgZGV2aWNlIG1hbmFnZW1lbnQuIFNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCBga2ZyZWUocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChpZGV2LVx1MDAzZW1jX2hhc2gsIDEpKTtgIGlzIGhhcHBlbmluZyBpbiBgaW5fZGV2X2ZyZWVfcmN1YC4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gbGllcyBpbiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgaXBfbWNfZGVzdHJveV9kZXZgIGFuZCBgbWNfaGFzaGAuIGBpcF9tY19kZXN0cm95X2RldmAgaXMgcmVzcG9uc2libGUgZm9yIGNsZWFyaW5nIGBpbl9kZXYtXHUwMDNlbWNfbGlzdGAuICBUaGUga2V5IG9ic2VydmF0aW9uIGlzIHRoYXQgaWYgYGlwX21jX2Rlc3Ryb3lfZGV2YCAqZG9lc24ndCogYWxzbyByZW1vdmUgZWxlbWVudHMgZnJvbSBgbWNfaGFzaGAsIHRoZW4gYG1jX2hhc2hgIGlzIGxlZnQgd2l0aCBkYW5nbGluZyBwb2ludGVycyB0byB0aGUgYGlwX21jX2xpc3RgIGVsZW1lbnRzLlxuXG5BbmQsIG9mIGNvdXJzZSwgYGlwX21jX2Rlc3Ryb3lfZGV2YCBjYWxscyBgaXBfbWFfcHV0KGkpYCB3aGljaCBmcmVlcyB0aGVzZSBgaXBfbWNfbGlzdGAgZWxlbWVudHMhIFRoaXMgbWVhbnMgYG1jX2hhc2hgIGVuZHMgdXAgY29udGFpbmluZyBwb2ludGVycyB0byBtZW1vcnkgdGhhdCdzIGJlZW4gZnJlZWQuICBTbywgdGhlIHF1ZXN0aW9uIGlzLCBpcyBgbWNfaGFzaGAgYWNjZXNzZWQgKmFmdGVyKiBgaXBfbWNfZGVzdHJveV9kZXZgP1xuXG5ZZXMsIGBpbl9kZXZgIGlzIHN0aWxsIGFsaXZlIHVudGlsIGBpbl9kZXZfcHV0YCBkcm9wcyBpdHMgcmVmZXJlbmNlIGNvdW50IHRvIHplcm8uIENydWNpYWxseSwgdGhlcmUgY2FuIGJlIGNvbmN1cnJlbnQgUkNVIHJlYWRlcnMgYWNjZXNzaW5nIGBtY19oYXNoYC4gIEFuZCwgeWVzLCBgaXBfY2hlY2tfbWNfcmN1YCBhY2Nlc3NlcyBgbWNfaGFzaGAgdW5kZXIgUkNVLiBUaGlzIGlzIHRoZSBjcnV4ISBJZiBgaXBfbWNfZGVzdHJveV9kZXZgIGZyZWVzIHRoZSBlbGVtZW50cywgYnV0IGxlYXZlcyB0aGVpciBwb2ludGVycyBpbiBgbWNfaGFzaGAsIGFuIFJDVSByZWFkZXIgY291bGQgcG90ZW50aWFsbHkgYWNjZXNzIGEgZnJlZWQgZWxlbWVudC5cblxuSG9sZCBvbiBhIG1pbnV0ZSwgYGlwX21hX3B1dGAgdXNlcyBga2ZyZWVfcmN1YCwgc28gdGhlIGVsZW1lbnQgaXNuJ3QgKmltbWVkaWF0ZWx5KiBmcmVlZDsgaXQncyBmcmVlZCBhZnRlciB0aGUgUkNVIGdyYWNlIHBlcmlvZC4gQnV0LCBgbWNfaGFzaGAgaXRzZWxmIGlzIGZyZWVkIGluIGBpbl9kZXZfZnJlZV9yY3VgLCB3aGljaCBhbHNvIGhhcHBlbnMgYWZ0ZXIgYW4gUkNVIGdyYWNlIHBlcmlvZC4gIFNvLCB0aGUgZWxlbWVudHMgc2hvdWxkLCB0ZWNobmljYWxseSwgc3RpbGwgYmUgdmFsaWQgd2hpbGUgYG1jX2hhc2hgIGl0c2VsZiBpcyByZWZlcmVuY2VkLlxuXG5Ib3dldmVyLCBpZiBgbWNfaGFzaGAgaXMgbm90IGNsZWFyZWQgYW5kIHNvbWVvbmUgYXR0ZW1wdHMgdG8gYWRkIGJhY2sgdG8gYG1jX2xpc3RgPyBObywgbm8sIGBpbl9kZXYtXHUwMDNlZGVhZCA9IDFgIGdldHMgc2V0IGJlZm9yZSBgaXBfbWNfZGVzdHJveV9kZXZgIHdoaWNoIHByZXZlbnRzIHRoaXMuXG5cblNvLCB0aGUgKnJlYWwqIGlzc3VlIGlzIHRoYXQgYGlwX21jX2Rlc3Ryb3lfZGV2YCByZW1vdmVzIGVsZW1lbnRzIGZyb20gYG1jX2xpc3RgIGJ1dCAqbm90KiBmcm9tIGBtY19oYXNoYC4gSWYgd2UgdHJ5IHRvIGFkZCBhIG5ldyBlbGVtZW50LCB0aGF0J3MgYmxvY2tlZCBieSB0aGUgYGRlYWRgIGZsYWcuIElmIGBpcF9jaGVja19tY19yY3VgIGlzIGNhbGxlZD8gSXQgd2lsbCBpdGVyYXRlIG92ZXIgYG1jX2hhc2hgLiAgVGhlIGVsZW1lbnRzIGluIGBtY19oYXNoYCBhcmUgZnJlZWQgdmlhIFJDVSwgYnV0IGlmIGBpcF9jaGVja19tY19yY3VgIHJ1bnMgKmFmdGVyKiB0aGUgZ3JhY2UgcGVyaW9kLCBhbmQgYGluX2RldmAgaXMgKnN0aWxsIGFsaXZlKiwgd2UgY291bGQgYmUgYWNjZXNzaW5nIGZyZWVkIG1lbW9yeS5cblxuQW5kIGBpbl9kZXZgICpjb3VsZCogc3RpbGwgYmUgYWxpdmUgYmVjYXVzZSBzb21lb25lIGhvbGRzIGEgcmVmZXJlbmNlIHRvIGl0LiBGb3IgaW5zdGFuY2UsIGEgc29ja2V0IG1pZ2h0IGJlIGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gYGluX2RldmAuIFRoaXMgbWVhbnMgYGluX2RldmAgY2FuIG91dGxpdmUgdGhlIFJDVSBncmFjZSBwZXJpb2Qgb2YgdGhlIGBpcF9tY19saXN0YCBlbGVtZW50cy4gIFNvLCBgaXBfY2hlY2tfbWNfcmN1YCAod2hpY2ggKm9ubHkqIHJlcXVpcmVzIGFuIFJDVSByZWFkIGxvY2spIGNhbiBhY2Nlc3MgYGluX2Rldi1cdTAwM2VtY19oYXNoYCBhbmQgZmluZCB0aG9zZSBkYW5nbGluZyBwb2ludGVycyEgQm9vbS5cblxuVGhpcyBpcyBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIFRoZSBwYXRjaCBjb3JyZWN0bHkgYWRkcmVzc2VzIHRoaXMgYnkgcmVtb3ZpbmcgdGhlIGVsZW1lbnRzIGZyb20gYG1jX2hhc2hgIHdpdGhpbiBgaXBfbWNfZGVzdHJveV9kZXZgLiBUaGlzIHByZXZlbnRzIHRoZSBkYW5nbGluZyBwb2ludGVycy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgYW5kIHdvcnRoIHRob3JvdWdoIGZ1enppbmcgd2l0aCB0aGUgbGlzdGVkIHN5bWJvbHMgYW5kIGNvbmZpZ3VyYXRpb25zLiAgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiBgSVBfTVVMVElDQVNUYCBpcyAqcmVhbGx5KiBuZWVkZWQgZm9yIGBpcF9jaGVja19tY19yY3VgIHRvIGJlIGFjdGl2ZSwgYnV0IHRoaXMgbG9va3MgbGlrZSBhIGdvb2QgZml4IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxODAwMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjM1OjI0LjUwNDQ1ODE2M1oiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzMTEzNzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX2NoZWNrX21jX3JjdVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pZ21wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaWdtcC5jPTI4MDA9dm9pZCBpcF9tY19kcm9wX3NvY2tldChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjgyNS0vKiBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgKi9cXG5uZXQvaXB2NC9pZ21wLmM6MjgyNjppbnQgaXBfY2hlY2tfbWNfcmN1KHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIG1jX2FkZHIsIF9fYmUzMiBzcmNfYWRkciwgdTggcHJvdG8pXFxubmV0L2lwdjQvaWdtcC5jLTI4Mjcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNjozNToyNC42MTc1NzY5MloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDI2NDYyNDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIHRoaW5raW5nIHRocm91Z2ggdGhpczpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgaXBfY2hlY2tfbWNfcmN1YCBGdW5jdGlvbiBDYWxscyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGZpZ3VyZSBvdXQgdGhlIGxhbmRzY2FwZSBhcm91bmQgYGlwX2NoZWNrX21jX3JjdWAuIEtub3dpbmcgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqdXNlZCogaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBhbmQgaW1wYWN0LiBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgc2l0ZXMgdG8gZ2V0IGEgZ3Jhc3Agb24gdGhlIGJpZ2dlciBwaWN0dXJlLiBVbmRlcnN0YW5kaW5nIGNvbnRleHQgaXMgZXZlcnl0aGluZywgc28gbGV0J3Mgc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZCBhbmQgd2hhdCBzdXJyb3VuZGluZyBjb2RlIGxvb2tzIGxpa2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODAwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzU6MjcuNjQ0MDQyODk0WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODY3OTk4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9jaGVja19tY19yY3VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lnbXAuYz0yODAwPXZvaWQgaXBfbWNfZHJvcF9zb2NrZXQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTI4MjUtLyogY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jaygpICovXFxubmV0L2lwdjQvaWdtcC5jOjI4MjY6aW50IGlwX2NoZWNrX21jX3JjdShzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiBtY19hZGRyLCBfX2JlMzIgc3JjX2FkZHIsIHU4IHByb3RvKVxcbm5ldC9pcHY0L2lnbXAuYy0yODI3LXtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MjQ5MT1pcF9yb3V0ZV9pbnB1dF9yY3Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIGRhZGRyLCBfX2JlMzIgc2FkZHIsXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTI1MTMtXFxubmV0L2lwdjQvcm91dGUuYzoyNTE0OlxcdFxcdG91ciA9IGlwX2NoZWNrX21jX3JjdShpbl9kZXYsIGRhZGRyLCBzYWRkcixcXG5uZXQvaXB2NC9yb3V0ZS5jLTI1MTUtXFx0XFx0XFx0XFx0ICAgICAgaXBfaGRyKHNrYiktXFx1MDAzZXByb3RvY29sKTtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMjUyMi1cXHRcXHRcXHRpZiAobDNfaW5fZGV2KVxcbm5ldC9pcHY0L3JvdXRlLmM6MjUyMzpcXHRcXHRcXHRcXHRvdXIgPSBpcF9jaGVja19tY19yY3UobDNfaW5fZGV2LCBkYWRkciwgc2FkZHIsXFxubmV0L2lwdjQvcm91dGUuYy0yNTI0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGlwX2hkcihza2IpLVxcdTAwM2Vwcm90b2NvbCk7XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTI1NTk9c3RhdGljIHN0cnVjdCBydGFibGUgKl9fbWtyb3V0ZV9vdXRwdXQoY29uc3Qgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMjU5OS1cXHRcXHRmbGFncyB8PSBSVENGX01VTFRJQ0FTVCB8IFJUQ0ZfTE9DQUw7XFxubmV0L2lwdjQvcm91dGUuYzoyNjAwOlxcdFxcdGlmICghaXBfY2hlY2tfbWNfcmN1KGluX2RldiwgZmw0LVxcdTAwM2VkYWRkciwgZmw0LVxcdTAwM2VzYWRkcixcXG5uZXQvaXB2NC9yb3V0ZS5jLTI2MDEtXFx0XFx0XFx0XFx0ICAgICBmbDQtXFx1MDAzZWZsb3dpNF9wcm90bykpXFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0yNzYwPWVudW0gc2tiX2Ryb3BfcmVhc29uIHVkcF92NF9lYXJseV9kZW11eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMjc4NC1cXG5uZXQvaXB2NC91ZHAuYzoyNzg1OlxcdFxcdG91cnMgPSBpcF9jaGVja19tY19yY3UoaW5fZGV2LCBpcGgtXFx1MDAzZWRhZGRyLCBpcGgtXFx1MDAzZXNhZGRyLFxcbm5ldC9pcHY0L3VkcC5jLTI3ODYtXFx0XFx0XFx0XFx0ICAgICAgIGlwaC1cXHUwMDNlcHJvdG9jb2wpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNjozNToyNy43MzI3MjkzMTZaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk5ODg5NTc5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIE11bHRpY2FzdCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IHN0ZW1zIGZyb20gdGhlIHJvdXRpbmcgYW5kIFVEUCBlYXJseSBkZW11eCwgbWVhbmluZyBpdCdzIGhpZ2hseSBhY2Nlc3NpYmxlIGFuZCBjb3VsZCBjYXVzZSBzaWduaWZpY2FudCBpc3N1ZXMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpczogaXQncyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXG5cbk15IHByaW1hcnkgZm9jdXMsIGdpdmVuIHRoZSB2dWxuZXJhYmlsaXR5LCBzaG91bGQgYmUgdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zOiBgaXBfbWNfZGVzdHJveV9kZXZgLCBgaXBfY2hlY2tfbWNfcmN1YCwgYGlwX21jX2hhc2hfcmVtb3ZlYCwgYGlwX21jX2hhc2hfYWRkYCwgYGluZXRkZXZfZGVzdHJveWAsIGBfX19faXBfbWNfaW5jX2dyb3VwYCwgYW5kIGBfX2lwX21jX2RlY19ncm91cGAuIFRoZXNlIGFyZSBjbGVhcmx5IHRoZSBrZXkgYXJlYXMgaW52b2x2ZWQgaW4gdGhlIG11bHRpY2FzdCBncm91cCBtYW5hZ2VtZW50LCBlc3BlY2lhbGx5IGFyb3VuZCBkZXZpY2UgZGVzdHJ1Y3Rpb24gYW5kIGhhc2ggdGFibGUgb3BlcmF0aW9ucy5cblxuVGhlIGlzc3VlLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gTXVsdGljYXN0IGdyb3VwcyBhcmUgYmVpbmcgcHJvcGVybHkgcmVtb3ZlZCBmcm9tIHRoZSBkZXZpY2UncyBsaXN0LCBidXQgdGhlIGNvcnJlc3BvbmRpbmcgZW50cmllcyBpbiB0aGUgaGFzaCB0YWJsZSByZW1haW4uIElmIHRoZSBgaW5fZGV2aWNlYCBpbnN0YW5jZSBvdXRsaXZlcyB0aGUgUkNVIGdyYWNlIHBlcmlvZCDigJMgd2hpY2ggY2FuIGVhc2lseSBoYXBwZW4gZHVlIHRvIGEgc29ja2V0IGhvbGRpbmcgYSByZWZlcmVuY2Ug4oCTIHRoZW4gYGlwX2NoZWNrX21jX3JjdWAgY291bGQgYmUgY2FsbGVkLCBhbmQgaXQgd291bGQgYWNjZXNzIHRoZXNlIGRhbmdsaW5nIHBvaW50ZXJzIGluIHRoZSBgbWNfaGFzaGAgdGFibGUuIFRoaXMgaXMgYSBmdW5kYW1lbnRhbCBmdW5jdGlvbmFsIGZsYXcgaW4gdGhlIElQdjQgbXVsdGljYXN0IGltcGxlbWVudGF0aW9uLlxuXG5UaGUga2V5IGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlIGhlcmUgaXMgYElQX01VTFRJQ0FTVGAsIGVuc3VyaW5nIHRoZSBmdW5jdGlvbmFsaXR5IGlzIGV2ZW4gYXZhaWxhYmxlIHRvIGJlIHRhcmdldGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDYwMCwiT3V0cHV0VG9rZW5zIjoyMTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzU6MzMuNzMxNjI4MTgzWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzNzQzNTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9NVUxUSUNBU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF9tY19kZXN0cm95X2RldlwiLFxuICAgIFwiaXBfY2hlY2tfbWNfcmN1XCIsXG4gICAgXCJpcF9tY19oYXNoX3JlbW92ZVwiLFxuICAgIFwiaXBfbWNfaGFzaF9hZGRcIixcbiAgICBcImluZXRkZXZfZGVzdHJveVwiLFxuICAgIFwiX19fX2lwX21jX2luY19ncm91cFwiLFxuICAgIFwiX19pcF9tY19kZWNfZ3JvdXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBtdWx0aWNhc3QgZ3JvdXBzIGFyZSByZW1vdmVkIGZyb20gdGhlIGRldmljZSdzIGBtY19saXN0YCBkdXJpbmcgZGV2aWNlIGRlc3RydWN0aW9uIGJ1dCBhcmUgbGVmdCBpbiB0aGUgYG1jX2hhc2hgIHRhYmxlLiBUaGlzIGNhbiBsZWFkIHRvIGEgdXNlLWFmdGVyLWZyZWUgaWYgdGhlIGBpbl9kZXZpY2VgIG91dGxpdmVzIHRoZSBSQ1UgZ3JhY2UgcGVyaW9kIChlLmcuLCBkdWUgdG8gYSBzb2NrZXQgaG9sZGluZyBhIHJlZmVyZW5jZSkgYW5kIGBpcF9jaGVja19tY19yY3VgIGlzIGNhbGxlZCwgYWNjZXNzaW5nIHRoZSBkYW5nbGluZyBwb2ludGVycyBpbiBgbWNfaGFzaGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBJUHY0IG11bHRpY2FzdCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9NVUxUSUNBU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF9tY19kZXN0cm95X2RldlwiLFxuICAgIFwiaXBfY2hlY2tfbWNfcmN1XCIsXG4gICAgXCJpcF9tY19oYXNoX3JlbW92ZVwiLFxuICAgIFwiaXBfbWNfaGFzaF9hZGRcIixcbiAgICBcImluZXRkZXZfZGVzdHJveVwiLFxuICAgIFwiX19fX2lwX21jX2luY19ncm91cFwiLFxuICAgIFwiX19pcF9tY19kZWNfZ3JvdXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBtdWx0aWNhc3QgZ3JvdXBzIGFyZSByZW1vdmVkIGZyb20gdGhlIGRldmljZSdzIGBtY19saXN0YCBkdXJpbmcgZGV2aWNlIGRlc3RydWN0aW9uIGJ1dCBhcmUgbGVmdCBpbiB0aGUgYG1jX2hhc2hgIHRhYmxlLiBUaGlzIGNhbiBsZWFkIHRvIGEgdXNlLWFmdGVyLWZyZWUgaWYgdGhlIGBpbl9kZXZpY2VgIG91dGxpdmVzIHRoZSBSQ1UgZ3JhY2UgcGVyaW9kIChlLmcuLCBkdWUgdG8gYSBzb2NrZXQgaG9sZGluZyBhIHJlZmVyZW5jZSkgYW5kIGBpcF9jaGVja19tY19yY3VgIGlzIGNhbGxlZCwgYWNjZXNzaW5nIHRoZSBkYW5nbGluZyBwb2ludGVycyBpbiBgbWNfaGFzaGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBJUHY0IG11bHRpY2FzdCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowc8z5b[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-02 06:24:21 +0000 UTC FinishedAt: 2026-07-02 06:35:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "0469d460a598d03fc85ebd97f99640e6c579e2a2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_MULTICAST" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "0469d460a598d03fc85ebd97f99640e6c579e2a2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_MULTICAST" ], "series_id": "feb9500e-fbdc-4c73-b36d-d55d3a951c0e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_mc_destroy_dev", "ip_check_mc_rcu", "ip_mc_hash_remove", "ip_mc_hash_add", "inetdev_destroy", "____ip_mc_inc_group", "__ip_mc_dec_group" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX01VTFRJQ0FTVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX21jX2Rlc3Ryb3lfZGV2JiMzNDssCiAgICAmIzM0O2lwX2NoZWNrX21jX3JjdSYjMzQ7LAogICAgJiMzNDtpcF9tY19oYXNoX3JlbW92ZSYjMzQ7LAogICAgJiMzNDtpcF9tY19oYXNoX2FkZCYjMzQ7LAogICAgJiMzNDtpbmV0ZGV2X2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7X19fX2lwX21jX2luY19ncm91cCYjMzQ7LAogICAgJiMzNDtfX2lwX21jX2RlY19ncm91cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBtdWx0aWNhc3QgZ3JvdXBzIGFyZSByZW1vdmVkIGZyb20gdGhlIGRldmljZSYjMzk7cyBgbWNfbGlzdGAgZHVyaW5nIGRldmljZSBkZXN0cnVjdGlvbiBidXQgYXJlIGxlZnQgaW4gdGhlIGBtY19oYXNoYCB0YWJsZS4gVGhpcyBjYW4gbGVhZCB0byBhIHVzZS1hZnRlci1mcmVlIGlmIHRoZSBgaW5fZGV2aWNlYCBvdXRsaXZlcyB0aGUgUkNVIGdyYWNlIHBlcmlvZCAoZS5nLiwgZHVlIHRvIGEgc29ja2V0IGhvbGRpbmcgYSByZWZlcmVuY2UpIGFuZCBgaXBfY2hlY2tfbWNfcmN1YCBpcyBjYWxsZWQsIGFjY2Vzc2luZyB0aGUgZGFuZ2xpbmcgcG9pbnRlcnMgaW4gYG1jX2hhc2hgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgSVB2NCBtdWx0aWNhc3QgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjN2JhYWI2YjFiNjM0MDNlY2U1YjkzYzZjZjJmN2Y1NWZjNzI3Zjk3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAwNjozMzo0NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pZ21wLmMgYi9uZXQvaXB2NC9pZ21wLmNcbmluZGV4IGI2MzM3YTQ3YzE0MTg1Li5kNTIwZWE0ZjZkMTQyZCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lnbXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaWdtcC5jXG5AQCAtMTkyMiw2ICYjNDM7MTkyMiw3IEBAIHZvaWQgaXBfbWNfZGVzdHJveV9kZXYoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxuICNlbmRpZlxuIFxuIFx0d2hpbGUgKChpID0gcnRubF9kZXJlZmVyZW5jZShpbl9kZXYtXHUwMDNlbWNfbGlzdCkpICE9IE5VTEwpIHtcbiYjNDM7XHRcdGlwX21jX2hhc2hfcmVtb3ZlKGluX2RldiwgaSk7XG4gXHRcdGluX2Rldi1cdTAwM2VtY19saXN0ID0gaS1cdTAwM2VuZXh0X3JjdTtcbiBcdFx0V1JJVEVfT05DRShpbl9kZXYtXHUwMDNlbWNfY291bnQsIGluX2Rldi1cdTAwM2VtY19jb3VudCAtIDEpO1xuIFx0XHRpcF9tY19jbGVhcl9zcmMoaSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfTVVMVElDQVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfbWNfZGVzdHJveV9kZXYmIzM0OywKICAgICYjMzQ7aXBfY2hlY2tfbWNfcmN1JiMzNDssCiAgICAmIzM0O2lwX21jX2hhc2hfcmVtb3ZlJiMzNDssCiAgICAmIzM0O2lwX21jX2hhc2hfYWRkJiMzNDssCiAgICAmIzM0O2luZXRkZXZfZGVzdHJveSYjMzQ7LAogICAgJiMzNDtfX19faXBfbWNfaW5jX2dyb3VwJiMzNDssCiAgICAmIzM0O19faXBfbWNfZGVjX2dyb3VwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIG11bHRpY2FzdCBncm91cHMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgZGV2aWNlJiMzOTtzIGBtY19saXN0YCBkdXJpbmcgZGV2aWNlIGRlc3RydWN0aW9uIGJ1dCBhcmUgbGVmdCBpbiB0aGUgYG1jX2hhc2hgIHRhYmxlLiBUaGlzIGNhbiBsZWFkIHRvIGEgdXNlLWFmdGVyLWZyZWUgaWYgdGhlIGBpbl9kZXZpY2VgIG91dGxpdmVzIHRoZSBSQ1UgZ3JhY2UgcGVyaW9kIChlLmcuLCBkdWUgdG8gYSBzb2NrZXQgaG9sZGluZyBhIHJlZmVyZW5jZSkgYW5kIGBpcF9jaGVja19tY19yY3VgIGlzIGNhbGxlZCwgYWNjZXNzaW5nIHRoZSBkYW5nbGluZyBwb2ludGVycyBpbiBgbWNfaGFzaGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBJUHY0IG11bHRpY2FzdCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzdiYWFiNmIxYjYzNDAzZWNlNWI5M2M2Y2YyZjdmNTVmYzcyN2Y5NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDIgMDY6MzM6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pZ21wLmMgYi9uZXQvaXB2NC9pZ21wLmMKaW5kZXggYjYzMzdhNDdjMTQxODUuLmQ1MjBlYTRmNmQxNDJkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pZ21wLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaWdtcC5jCkBAIC0xOTIyLDYgJiM0MzsxOTIyLDcgQEAgdm9pZCBpcF9tY19kZXN0cm95X2RldihzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpCiAjZW5kaWYKIAogCXdoaWxlICgoaSA9IHJ0bmxfZGVyZWZlcmVuY2UoaW5fZGV2LSZndDttY19saXN0KSkgIT0gTlVMTCkgewomIzQzOwkJaXBfbWNfaGFzaF9yZW1vdmUoaW5fZGV2LCBpKTsKIAkJaW5fZGV2LSZndDttY19saXN0ID0gaS0mZ3Q7bmV4dF9yY3U7CiAJCVdSSVRFX09OQ0UoaW5fZGV2LSZndDttY19jb3VudCwgaW5fZGV2LSZndDttY19jb3VudCAtIDEpOwogCQlpcF9tY19jbGVhcl9zcmMoaSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIGdpdmVuIHRoaXMgcGF0Y2g6CgoqKkFuYWx5emluZyBhIE5ldHdvcmsgTXVsdGljYXN0IE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgcGF0Y2ggdGhhdCYjMzk7cyBiZWVuIGFwcGxpZWQsIGFuZCBpdCYjMzk7cyB0b3VjaGluZyBgbmV0L2lwdjQvaWdtcC5jYC4gVGhhdCBmaWxlJiMzOTtzIGNsZWFybHkgZGVhbGluZyB3aXRoIEludGVybmV0IEdyb3VwIE1hbmFnZW1lbnQgUHJvdG9jb2wgKElHTVApLCBzbyB0aGlzIGlzIG11bHRpY2FzdC1yZWxhdGVkLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgdGhlIGFkZGl0aW9uIG9mIGBpcF9tY19oYXNoX3JlbW92ZShpbl9kZXYsIGkpO2Agd2l0aGluIHRoZSBgaXBfbWNfZGVzdHJveV9kZXZgIGZ1bmN0aW9uLiBNeSBleHBlcnQgZXllIGltbWVkaWF0ZWx5IHNheXMsIHRoaXMgaXMgbGlrZWx5IHRvIGNsZWFuIHVwIHNvbWUgbXVsdGljYXN0LXJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIHdoZW4gYW4gaW50ZXJmYWNlIGlzIGJlaW5nIGRlc3Ryb3llZC4KCkxldCYjMzk7cyBkaXZlIGludG8gYGlwX21jX2Rlc3Ryb3lfZGV2YCBpdHNlbGYgd2l0aGluIGBuZXQvaXB2NC9pZ21wLmNgLiBNeSBpbml0aWFsIGd1ZXNzIGlzIHRoYXQgYGlwX21jX2Rlc3Ryb3lfZGV2YCBoYW5kbGVzIHRoZSBjbGVhbnVwIHdvcmsgd2hlbiBhbiBJUCBtdWx0aWNhc3QgZGV2aWNlIGlzIG5vIGxvbmdlciByZXF1aXJlZC4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSBjYWxsZWQgd2hlbiBhbiBpbnRlcmZhY2UgZ29lcyBkb3duLCBpcyByZW1vdmVkLCBvciBpcyBvdGhlcndpc2Ugbm8gbG9uZ2VyIGFjdGl2ZSBpbiBhIG11bHRpY2FzdCBjb250ZXh0LiBUaGUgcHJlc2VuY2Ugb2YgYGlwX21jX2hhc2hfcmVtb3ZlYCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IG11bHRpY2FzdCBncm91cCBtZW1iZXJzaGlwcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBkYXRhIGFyZSBtYW5hZ2VkIHRocm91Z2ggYSBoYXNoIHRhYmxlLiBUaGUgcGF0Y2ggaXMgdGhlbiBhZGRpbmcgdGhpcyBsaW5lLCBzbyB0aGF0IHdoZW4gYSBkZXZpY2UgaXMgcmVtb3ZlZCwgYXNzb2NpYXRlZCBpdGVtcyBhcmUgcmVtb3ZlZCBmcm9tIHRoaXMgaGFzaC4gVGhpcyBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGhhc2ggaG9sZHMsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBpcF9tY19oYXNoX3JlbW92ZWAgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QsIGJ1dCBteSBmaXJzdCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBhIGNsZWFuIGFuZCByZWFzb25hYmxlIGVuaGFuY2VtZW50IHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzIG9yIHN0YWxlIGVudHJpZXMsIGltcHJvdmluZyBvdmVyYWxsIHN5c3RlbSBzdGFiaWxpdHksIHdoaWNoIHNob3VsZCBiZSB2ZXJ5IHdlbGNvbWUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfbWNfZGVzdHJveV9kZXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pZ21wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaWdtcC5jPTE4OTE9dm9pZCBpcF9tY191cChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXG4tLVxubmV0L2lwdjQvaWdtcC5jLTE5MTEtXG5uZXQvaXB2NC9pZ21wLmM6MTkxMjp2b2lkIGlwX21jX2Rlc3Ryb3lfZGV2KHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldilcbm5ldC9pcHY0L2lnbXAuYy0xOTEzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDE1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIElHTVAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgSUdNUCB3b3JrcyBhdCBhIGxvdyBsZXZlbCBpbiB0aGUga2VybmVsLiBgbmV0L2lwdjQvaWdtcC5jYCBpcyB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydC4gR2l2ZW4gd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGxpbmUgMTkxMi4gVGhhdCYjMzk7cyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgb2Ygc29tZSBmdW5jdGlvbiBvciBjb25kaXRpb25hbCB0aGF0IGRlYWxzIHdpdGggbWVtYmVyc2hpcCByZXBvcnQgcHJvY2Vzc2luZyBvciBwb3NzaWJseSBncm91cCBtYW5hZ2VtZW50IHJlc2lkZXMuIEl0JiMzOTtzIG9mdGVuIGhlbHBmdWwgdG8gcGlucG9pbnQgc3BlY2lmaWMgbGluZXMgd2hlbiBkaXNzZWN0aW5nIGEgY29tcGxleCBwaWVjZSBvZiBjb2RlLCBhcyBpdCBoZWxwcyB0cmFjZSB0aGUgbG9naWMgYW5kIHVuZGVyc3RhbmQgaG93IGRhdGEgYW5kIGNvbnRyb2wgZmxvd3MuIEkgYW50aWNpcGF0ZSBpdCBkZWFscyB3aXRoIGhvdyB0aGUgSUdNUCBtb2R1bGUgaW50ZXJhY3RzIHdpdGggdGhlIG5ldHdvcmsgc3RhY2suIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGludGVyYWN0aW9uIHdpdGggdGhlIHJvdXRpbmcgdGFibGUgYW5kIHBvdGVudGlhbGx5IHdpdGggdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGpvaW5zLCBsZWF2ZXMgYW5kIHVwZGF0ZXMgb2YgbXVsdGljYXN0IGdyb3VwIG1lbWJlcnNoaXBzLiBLbm93aW5nIHRoZSBsaW5lIG51bWJlciB3aWxsIGFsbG93IG1lIHRvIGltbWVkaWF0ZWx5IGp1bXAgdG8gdGhlIHJlbGV2YW50IGNvZGUgYW5kIHN0YXJ0IGRlY2lwaGVyaW5nIHRoZSBudWFuY2VzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lnbXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTkwMDpcdFx0Zm9yX2VhY2hfcG1jX3J0bmwoaW5fZGV2LCBwbWMpIHtcbjE5MDE6XHQjaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxuMTkwMjpcdFx0XHRpZ21wdjNfZGVsX2RlbHJlYyhpbl9kZXYsIHBtYyk7XG4xOTAzOlx0I2VuZGlmXG4xOTA0Olx0XHRcdGlnbXBfZ3JvdXBfYWRkZWQocG1jKTtcbjE5MDU6XHRcdH1cbjE5MDY6XHR9XG4xOTA3Olx0XG4xOTA4Olx0LypcbjE5MDk6XHQgKlx0RGV2aWNlIGlzIGFib3V0IHRvIGJlIGRlc3Ryb3llZDogY2xlYW4gdXAuXG4xOTEwOlx0ICovXG4xOTExOlx0XG4xOTEyOlx0dm9pZCBpcF9tY19kZXN0cm95X2RldihzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXG4xOTEzOlx0e1xuMTkxNDpcdFx0c3RydWN0IGlwX21jX2xpc3QgKmk7XG4xOTE1Olx0XG4xOTE2Olx0XHRBU1NFUlRfUlROTCgpO1xuMTkxNzpcdFxuMTkxODpcdFx0LyogRGVhY3RpdmF0ZSB0aW1lcnMgKi9cbjE5MTk6XHRcdGlwX21jX2Rvd24oaW5fZGV2KTtcbjE5MjA6XHQjaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxuMTkyMTpcdFx0aWdtcHYzX2NsZWFyX2RlbHJlYyhpbl9kZXYpO1xuMTkyMjpcdCNlbmRpZlxuMTkyMzpcdFxuMTkyNDpcdFx0d2hpbGUgKChpID0gcnRubF9kZXJlZmVyZW5jZShpbl9kZXYtXHUwMDNlbWNfbGlzdCkpICE9IE5VTEwpIHtcbjE5MjU6XHRcdFx0aXBfbWNfaGFzaF9yZW1vdmUoaW5fZGV2LCBpKTtcbjE5MjY6XHRcdFx0aW5fZGV2LVx1MDAzZW1jX2xpc3QgPSBpLVx1MDAzZW5leHRfcmN1O1xuMTkyNzpcdFx0XHRXUklURV9PTkNFKGluX2Rldi1cdTAwM2VtY19jb3VudCwgaW5fZGV2LVx1MDAzZW1jX2NvdW50IC0gMSk7XG4xOTI4Olx0XHRcdGlwX21jX2NsZWFyX3NyYyhpKTtcbjE5Mjk6XHRcdFx0aXBfbWFfcHV0KGkpO1xuMTkzMDpcdFx0fVxuMTkzMTpcdH1cbjE5MzI6XHRcbjE5MzM6XHQvKiBSVE5MIGlzIGxvY2tlZCAqL1xuMTkzNDpcdHN0YXRpYyBzdHJ1Y3QgaW5fZGV2aWNlICppcF9tY19maW5kX2RldihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9tcmVxbiAqaW1yKVxuMTkzNTpcdHtcbjE5MzY6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMO1xuMTkzNzpcdFx0c3RydWN0IGluX2RldmljZSAqaWRldiA9IE5VTEw7XG4xOTM4Olx0XG4xOTM5Olx0XHRpZiAoaW1yLVx1MDAzZWltcl9pZmluZGV4KSB7XG4xOTQwOlx0XHRcdGlkZXYgPSBpbmV0ZGV2X2J5X2luZGV4KG5ldCwgaW1yLVx1MDAzZWltcl9pZmluZGV4KTtcbjE5NDE6XHRcdFx0cmV0dXJuIGlkZXY7XG4xOTQyOlx0XHR9XG4xOTQzOlx0XHRpZiAoaW1yLVx1MDAzZWltcl9hZGRyZXNzLnNfYWRkcikge1xuMTk0NDpcdFx0XHRkZXYgPSBfX2lwX2Rldl9maW5kKG5ldCwgaW1yLVx1MDAzZWltcl9hZGRyZXNzLnNfYWRkciwgZmFsc2UpO1xuMTk0NTpcdFx0XHRpZiAoIWRldilcbjE5NDY6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbjE5NDc6XHRcdH1cbjE5NDg6XHRcbjE5NDk6XHRcdGlmICghZGV2KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ0MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCdWcgRml4OiBNdWx0aWNhc3QgSGFzaCBUYWJsZSBVcGRhdGUqKgoKT2theSwgc28gdGhpcyBwYXRjaCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIOKAkyBpdCYjMzk7cyBhZGRpbmcgYGlwX21jX2hhc2hfcmVtb3ZlKGluX2RldiwgaSk7YCB0byBgaXBfbWNfZGVzdHJveV9kZXZgLiBUaGlzIGxvb2tzIGxpa2UgYSBwdXJlbHkgZnVuY3Rpb25hbCBjaGFuZ2UsIHdoaWNoIGlzIGEgZ29vZCBzaWduLCBlc3BlY2lhbGx5IGlmIGl0JiMzOTtzIGFkZHJlc3NpbmcgYSBidWcuIFRoZSBkZXNjcmlwdGlvbiBleHBsaWNpdGx5IG1lbnRpb25zIHRoZSBtdWx0aWNhc3QgbGlzdCBoYXNoIHRhYmxlIG5vdCBiZWluZyB1cGRhdGVkIGR1cmluZyBkZXZpY2UgZGVzdHJ1Y3Rpb24uIFJpZ2h0LCB0aGF0JiMzOTtzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBpc3N1ZSBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG1lbW9yeSBsZWFrcyBvciBzdGFsZSBlbnRyaWVzLiBXZSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCB0byByZXByb2R1Y2Ugb3IgdHJpZ2dlciB0aGlzIGlzc3VlLgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoZXJlIHRoaXMgaXMgaW1wbGVtZW50ZWQ7IGBpcF9tY19kZXN0cm95X2RldmAgaXMgbGlrZWx5IGluIGBuZXQvaXB2NC9pZ21wLmNgLiBMZXQmIzM5O3MgY2hlY2sgdGhlIGBuZXQvaXB2NC9NYWtlZmlsZWAgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBpZ21wLmNgIGZpbGUgaXMgYnVpbHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGFueSBidWlsZC10aW1lIGRlcGVuZGVuY2llcyBvciBjb21waWxlLXRpbWUgb3B0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24mIzM5O3MgYmVoYXZpb3IuIFRoYXTigJlzIHRoZSBzdGFydGluZyBwb2ludCB0byBldmFsdWF0aW5nIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lnbXAubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlPTY9b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXG4tLVxubmV0L2lwdjQvTWFrZWZpbGUtMTMtXHQgICAgIHRjcF9vZmZsb2FkLm8gdGNwX3BsYi5vIGRhdGFncmFtLm8gcmF3Lm8gdWRwLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlOjE0Olx0ICAgICB1ZHBfb2ZmbG9hZC5vIGFycC5vIGljbXAubyBkZXZpbmV0Lm8gYWZfaW5ldC5vIGlnbXAubyBcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTUtXHQgICAgIGZpYl9mcm9udGVuZC5vIGZpYl9zZW1hbnRpY3MubyBmaWJfdHJpZS5vIGZpYl9ub3RpZmllci5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk2NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQdjQgTXVsdGljYXN0IERlcGVuZGVuY3kqKgoKT2theSwgc28gYGlnbXAub2AgaXMgYmVpbmcgY29tcGlsZWQgYXV0b21hdGljYWxseSBmb3IgSVB2NCwgd2hpY2ggbWVhbnMgd2UgbmVlZCB0byBlbnN1cmUgY2VydGFpbiBjb25maWd1cmF0aW9ucyBhcmUgbWV0LiBTaW5jZSBgb2JqLXlgIGlzIHVzZWQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIGFjdHVhbGx5ICpyZXF1aXJlZCouIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBDT05GSUdfSU5FVGAgaXMgdGhlIGtleSwgb3IgcGVyaGFwcyBldmVuIGBDT05GSUdfSVBfTVVMVElDQVNUYC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIGlmIGBpcF9tY19kZXN0cm95X2RldmAgaXMgZ3VhcmRlZCBieSBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIEhtbSwgaXQgbG9va3MgbGlrZSBgaXBfbWNfZGVzdHJveV9kZXZgIGlzbiYjMzk7dCBjb25kaXRpb25hbCBvbiBgQ09ORklHX0lQX01VTFRJQ0FTVGAgd2hpY2ggaXMgYSBnb29kIHNpZ24uIFRoZSBvbmx5IGZ1bmN0aW9uIEkgc2VlIHdpdGggdGhhdCBwcmVwcm9jZXNzb3IgbWFjcm8gaXMgYGlnbXB2M19jbGVhcl9kZWxyZWNgLCBub3QgdGhlIGZ1bmN0aW9uIEkmIzM5O20gY29uY2VybmVkIHdpdGguIFRoYXQgc3VnZ2VzdHMgdGhhdCBgQ09ORklHX0lORVRgIHNob3VsZCBiZSBzdWZmaWNpZW50IGJlY2F1c2UgaXQmIzM5O3MgYWx3YXlzIGVuYWJsZWQuIFdhaXQgYSBzZWNvbmQsIHNpbmNlIHdlIGFyZSB0YWxraW5nIGFib3V0IElHTVAsIGBDT05GSUdfSVBfTVVMVElDQVNUYCAqbWlnaHQqIHN0aWxsIGJlIHJlbGV2YW50LiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUgY2hlY2sgdGhlIGBuZXQvaXB2NC9LY29uZmlnYCBmaWxlIHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX01VTFRJQ0FTVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZy00LSNcbm5ldC9pcHY0L0tjb25maWc6NTpjb25maWcgSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9LY29uZmlnLTYtXHRib29sIFwmIzM0O0lQOiBtdWx0aWNhc3RpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQzNwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgZnVuY3Rpb246CgoqKkludmVzdGlnYXRpbmcgdGhlIENhbGxlcnMgb2YgYGlwX21jX2Rlc3Ryb3lfZGV2YCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgaXBfbWNfZGVzdHJveV9kZXZgIGlzIGJlaW5nIHVzZWQuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRyYWNlIGl0cyBjYWxsIHNpdGVzIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBpdHMgcm9sZSB3aXRoaW4gdGhlIHN5c3RlbS4gSXMgaXQgYSBjZW50cmFsIGNvbXBvbmVudCwgb3Igb25seSBhIGxpdHRsZSB1c2VkIHV0aWxpdHkgZnVuY3Rpb24/IFRoZSBjYWxsIHN0YWNrIHdpbGwgdGVsbCBtZSB0aGF0LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byBwZXJmb3JtIGEgc2VhcmNoIGZvciByZWZlcmVuY2VzLiBJIHdhbnQgdG8gYnVpbGQgYSB0aG9yb3VnaCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXBlbmRlbmNpZXMgb24gdGhpcyBmdW5jdGlvbi4gS25vd2xlZGdlIGlzIHBvd2VyLCBhbmQga25vd2luZyB3aGF0IHJlbGllcyBvbiBgaXBfbWNfZGVzdHJveV9kZXZgIGlzIHZpdGFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF9tY19kZXN0cm95X2RldiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2lnbXAuaD0yODA9ZXh0ZXJuIHZvaWQgaXBfbWNfaW5pdF9kZXYoc3RydWN0IGluX2RldmljZSAqKTtcbmluY2x1ZGUvbGludXgvaWdtcC5oOjI4MTpleHRlcm4gdm9pZCBpcF9tY19kZXN0cm95X2RldihzdHJ1Y3QgaW5fZGV2aWNlICopO1xuaW5jbHVkZS9saW51eC9pZ21wLmgtMjgyLWV4dGVybiB2b2lkIGlwX21jX3VwKHN0cnVjdCBpbl9kZXZpY2UgKik7XG4tLVxubmV0L2lwdjQvZGV2aW5ldC5jPTMxND1zdGF0aWMgdm9pZCBpbmV0ZGV2X2Rlc3Ryb3koc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxuLS1cbm5ldC9pcHY0L2RldmluZXQuYy0zMjQtXG5uZXQvaXB2NC9kZXZpbmV0LmM6MzI1Olx0aXBfbWNfZGVzdHJveV9kZXYoaW5fZGV2KTtcbm5ldC9pcHY0L2RldmluZXQuYy0zMjYtXG4tLVxubmV0L2lwdjQvaWdtcC5jPTE4OTE9dm9pZCBpcF9tY191cChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXG4tLVxubmV0L2lwdjQvaWdtcC5jLTE5MTEtXG5uZXQvaXB2NC9pZ21wLmM6MTkxMjp2b2lkIGlwX21jX2Rlc3Ryb3lfZGV2KHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldilcbm5ldC9pcHY0L2lnbXAuYy0xOTEzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkyNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIElQdjQgRGV2aWNlIERlc3RydWN0aW9uKioKCk9rYXksIHNvIGBpcF9tY19kZXN0cm95X2RldmAgaXMgY2FsbGVkIHdpdGhpbiBgaW5ldGRldl9kZXN0cm95YCB3aXRoaW4gYG5ldC9pcHY0L2RldmluZXQuY2AuIFRoYXQgbWVhbnMgdGhpcyBpcyBhICpyZWFsKiBjb2RlIHBhdGgsIGl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHdoZW4gYW4gSVB2NCBkZXZpY2UgaXMgZGVzdHJveWVkLiBHb29kLCB3ZSYjMzk7dmUgZ290IGEgdGFyZ2V0LgoKVGhlIHF1ZXN0aW9uIG5vdyBpcywgd2hhdCBzcGVjaWZpYyBmdW5jdGlvbnMgYXJlIG1vc3QgcHJvbWlzaW5nIGZvciBmdXp6aW5nIGFyb3VuZCB0aGlzIGFyZWE/IE9idmlvdXNseSwgYGlwX21jX2Rlc3Ryb3lfZGV2YCBpcyBhdCB0aGUgdG9wIG9mIHRoZSBsaXN0LCBzaW5jZSBpdCYjMzk7cyB0aGUgZGlyZWN0IGZ1bmN0aW9uIHdlIGtub3cgaXMgaW52b2x2ZWQuIGBpbmV0ZGV2X2Rlc3Ryb3lgIGl0c2VsZiBpcyBhIGdvb2QgY2FuZGlkYXRlIHRvbywgZ2l2ZW4gdGhhdCBpdCYjMzk7cyB0aGUgaW1tZWRpYXRlIGNhbGxlci4gV2UgbmVlZCB0byBsb29rIGZvciBpbnRlcmVzdGluZyBzcG90cyBhbmQgaG9va3MsIGFuZCB0aGUgZGVzdHJ1Y3Rpb24gaXRzZWxmLgoKQnV0IHdoYXQgYWJvdXQgdGhlIHNldHVwPyBJdCYjMzk7cyBsaWtlbHkgaW50ZXJlc3RpbmcgdG8gZnV6eiB0aGUgZnVuY3Rpb25zIGludm9sdmVkIGluIHNldHRpbmcgdXAgdGhlIG11bHRpY2FzdCBjb25maWd1cmF0aW9uIGJlaW5nIGRlc3Ryb3llZC4gV2Ugc2hvdWxkIGFsc28gaW52ZXN0aWdhdGUgZnVuY3Rpb25zIGxpa2UgYGlwX21jX2hhc2hfYWRkYCBvciBgaXBfbWNfaW5jX2dyb3VwYCwgdG8gZW5zdXJlIHRoYXQgdGhlIHByb2Nlc3MgYmVmb3JlIGRlc3RydWN0aW9uIGlzIHNvdW5kLCBhbmQgdGhhdCBhbnl0aGluZyB0aGF0IHNldHMgdXAgZGF0YSBpcyBhbHNvIGNsZWFuZWQgdXAgd2hlbiB0aGUgZGV2aWNlIGdvZXMgYXdheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfbWNfaGFzaF9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pZ21wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaWdtcC5jPTEzOTk9c3RhdGljIHUzMiBpcF9tY19oYXNoKGNvbnN0IHN0cnVjdCBpcF9tY19saXN0ICppbSlcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTQwMy1cbm5ldC9pcHY0L2lnbXAuYzoxNDA0OnN0YXRpYyB2b2lkIGlwX21jX2hhc2hfYWRkKHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldixcbm5ldC9pcHY0L2lnbXAuYy0xNDA1LVx0XHRcdCAgIHN0cnVjdCBpcF9tY19saXN0ICppbSlcbi0tXG5uZXQvaXB2NC9pZ21wLmM9MTUxOD1zdGF0aWMgdm9pZCBfX19faXBfbWNfaW5jX2dyb3VwKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIGFkZHIsXG4tLVxubmV0L2lwdjQvaWdtcC5jLTE1NzEtXG5uZXQvaXB2NC9pZ21wLmM6MTU3MjpcdGlwX21jX2hhc2hfYWRkKGluX2RldiwgaW0pO1xubmV0L2lwdjQvaWdtcC5jLTE1NzMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NDUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgSVAgTXVsdGljYXN0IEdyb3VwIEhhbmRsaW5nKioKCkFscmlnaHQsIHNvIGBfX19faXBfbWNfaW5jX2dyb3VwYCBpcyBjbGVhcmx5IHJlc3BvbnNpYmxlIGZvciBhZGRpbmcgc29tZXRoaW5nIHRvIHRoZSBoYXNoIHRhYmxlLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gYW5kIGNvbnRleHQsIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIGFkZGl0aW9uIG9mIGFuIElQIG11bHRpY2FzdCBncm91cCBlbnRyeS4gSXQmIzM5O3MgdGhlIHN0YW5kYXJkIGluY3JlbWVudC1vZi10aGUtZ3JvdXAtaW4tdGhlLWhhc2gtdGFibGUgZnVuY3Rpb24uIE1ha2VzIHNlbnNlLiBOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb21wbGVtZW50YXJ5IGZ1bmN0aW9uOiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2hhdCBgaXBfbWNfaGFzaF9yZW1vdmVgIGRvZXMuIEl0JiMzOTtzIHByb2JhYmxlIHRoYXQgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSByZW1vdmFsIG9mIGEgbXVsdGljYXN0IGdyb3VwIGVudHJ5IGZyb20gdGhlIGhhc2ggdGFibGUuIFRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gbWFuYWdlcyB0aGUgZ3JvdXBzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zLCBwYXJ0aWN1bGFybHkgdGhlIGxvZ2ljIGFyb3VuZCB0aGUgaGFzaCBrZXlzLCBjb2xsaXNpb24gcmVzb2x1dGlvbiAoaWYgYW55KSwgYW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgaGFuZGxlIHJlZmVyZW5jZSBjb3VudGluZyBvciBvdGhlciBjb25jdXJyZW5jeSBjb25jZXJucyB3aGVuIGRlbGV0aW5nIHRoZSBlbnRyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfbWNfaGFzaF9yZW1vdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pZ21wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaWdtcC5jPTE0MDQ9c3RhdGljIHZvaWQgaXBfbWNfaGFzaF9hZGQoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LFxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xNDM1LVxubmV0L2lwdjQvaWdtcC5jOjE0MzY6c3RhdGljIHZvaWQgaXBfbWNfaGFzaF9yZW1vdmUoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LFxubmV0L2lwdjQvaWdtcC5jLTE0MzctXHRcdFx0ICAgICAgc3RydWN0IGlwX21jX2xpc3QgKmltKVxuLS1cbm5ldC9pcHY0L2lnbXAuYz0xNzc2PXZvaWQgX19pcF9tY19kZWNfZ3JvdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgYWRkciwgZ2ZwX3QgZ2ZwKVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xNzkwLVx0XHRcdGlmIChuZXdfdXNlcnMgPT0gMCkge1xubmV0L2lwdjQvaWdtcC5jOjE3OTE6XHRcdFx0XHRpcF9tY19oYXNoX3JlbW92ZShpbl9kZXYsIGkpO1xubmV0L2lwdjQvaWdtcC5jLTE3OTItXHRcdFx0XHQqaXAgPSBpLVx1MDAzZW5leHRfcmN1O1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0xOTEyPXZvaWQgaXBfbWNfZGVzdHJveV9kZXYoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xOTI0LVx0d2hpbGUgKChpID0gcnRubF9kZXJlZmVyZW5jZShpbl9kZXYtXHUwMDNlbWNfbGlzdCkpICE9IE5VTEwpIHtcbm5ldC9pcHY0L2lnbXAuYzoxOTI1Olx0XHRpcF9tY19oYXNoX3JlbW92ZShpbl9kZXYsIGkpO1xubmV0L2lwdjQvaWdtcC5jLTE5MjYtXHRcdGluX2Rldi1cdTAwM2VtY19saXN0ID0gaS1cdTAwM2VuZXh0X3JjdTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIyOAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBNdWx0aWNhc3QgRGV2aWNlIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY2xlYW51cCBhbmQgbWFuYWdlbWVudCBvZiBtdWx0aWNhc3QgZGV2aWNlcyBoZXJlLiBJIHNlZSB0aGF0IGBfX2lwX21jX2RlY19ncm91cGAgYW5kIGBpcF9tY19kZXN0cm95X2RldmAgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkIGluIHJlbW92aW5nIGVudHJpZXMgZnJvbSB0aGUgcmVsZXZhbnQgaGFzaCB0YWJsZXMuIE15IHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZXNlIGZ1bmN0aW9ucywgYWxvbmcgd2l0aDoKCiogICBgaXBfbWNfZGVzdHJveV9kZXZgCiogICBgX19pcF9tY19kZWNfZ3JvdXBgCiogICBgX19fX2lwX21jX2luY19ncm91cGAKKiAgIGBpcF9tY19oYXNoX2FkZGAKKiAgIGBpcF9tY19oYXNoX3JlbW92ZWAKKiAgIGBpbmV0ZGV2X2Rlc3Ryb3lgCgpJJiMzOTttIGFsc28gY29uc2lkZXJpbmcgdGhlIGBJUF9NVUxUSUNBU1RgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBXaGlsZSBpdCYjMzk7cyBvYnZpb3VzbHkgY3J1Y2lhbCBmb3IgSUdNUCBhbmQgbXVsdGljYXN0IGZ1bmN0aW9uYWxpdHkgaW4gZ2VuZXJhbCwgaXQmIzM5O3MgaW50ZXJlc3RpbmcgdGhhdCBgaXBfbWNfZGVzdHJveV9kZXZgICpzdGlsbCogY29tcGlsZXMgYW5kIGdldHMgY2FsbGVkIGV2ZW4gaWYgYElQX01VTFRJQ0FTVGAgaXNuJiMzOTt0IGVuYWJsZWQuIEhvd2V2ZXIsIGVuYWJsaW5nIGl0IGlzIGNlcnRhaW5seSBkZXNpcmFibGUgZm9yIGNvbXByZWhlbnNpdmUgbXVsdGljYXN0IGZlYXR1cmUgdGVzdGluZy4gSSYjMzk7bSBnb2luZyB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgYElQX01VTFRJQ0FTVGAgaXMgc3RyaWN0bHkgbmVjZXNzYXJ5IHRvIHJlYWNoIGBfX19faXBfbWNfaW5jX2dyb3VwYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19fX2lwX21jX2luY19ncm91cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lnbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pZ21wLmM9MTQ4NT1zdGF0aWMgdm9pZCBpbmV0X2lmbWNhZGRyX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xNTE3LSAqL1xubmV0L2lwdjQvaWdtcC5jOjE1MTg6c3RhdGljIHZvaWQgX19fX2lwX21jX2luY19ncm91cChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiBhZGRyLFxubmV0L2lwdjQvaWdtcC5jLTE1MTktXHRcdFx0XHR1bnNpZ25lZCBpbnQgbW9kZSwgZ2ZwX3QgZ2ZwKVxuLS1cbm5ldC9pcHY0L2lnbXAuYz0xNTg1PXZvaWQgX19pcF9tY19pbmNfZ3JvdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgYWRkciwgZ2ZwX3QgZ2ZwKVxubmV0L2lwdjQvaWdtcC5jLTE1ODYte1xubmV0L2lwdjQvaWdtcC5jOjE1ODc6XHRfX19faXBfbWNfaW5jX2dyb3VwKGluX2RldiwgYWRkciwgTUNBU1RfRVhDTFVERSwgZ2ZwKTtcbm5ldC9pcHY0L2lnbXAuYy0xNTg4LX1cbi0tXG5uZXQvaXB2NC9pZ21wLmM9MjI4MD1zdGF0aWMgaW50IF9faXBfbWNfam9pbl9ncm91cChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tcmVxbiAqaW1yLFxuLS1cbm5ldC9pcHY0L2lnbXAuYy0yMzIzLVx0cmN1X2Fzc2lnbl9wb2ludGVyKGluZXQtXHUwMDNlbWNfbGlzdCwgaW1sKTtcbm5ldC9pcHY0L2lnbXAuYzoyMzI0Olx0X19fX2lwX21jX2luY19ncm91cChpbl9kZXYsIGFkZHIsIG1vZGUsIEdGUF9LRVJORUwpO1xubmV0L2lwdjQvaWdtcC5jLTIzMjUtXHRlcnIgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDkyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipNdWx0aWNhc3QgTWVtYmVyc2hpcCBNeXN0ZXJpZXMqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBtdWx0aWNhc3QgZ3JvdXAgam9pbnMgd29yayBhdCB0aGUga2VybmVsIGxldmVsLiBJJiMzOTttIHNlZWluZyB0aGF0IHRoZSBgX19pcF9tY19qb2luX2dyb3VwYCBmdW5jdGlvbiBpcyB0aGUgb25lIHRoYXQmIzM5O3MgYWN0dWFsbHkgY2FsbGVkIHdoZW4gYSBwcm9jZXNzIHRyaWVzIHRvIGpvaW4gYSBtdWx0aWNhc3QgZ3JvdXAsIHNwZWNpZmljYWxseSB0aHJvdWdoIHRoZSBzb2NrZXQgb3B0aW9ucyBsaWtlIGBJUF9BRERfTUVNQkVSU0hJUGAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIHRoZSBjb3JlIHJvdXRpbmUgZm9yIGhhbmRsaW5nIHRoYXQgcHJvY2Vzcy4KCk5vdywgbXkgcmVhbCBxdWVzdGlvbiBpczogaXMgdGhlIGBJUF9NVUxUSUNBU1RgIHNvY2tldCBvcHRpb24gYSBzdHJpY3QgcmVxdWlyZW1lbnQgZm9yIGBJUF9BRERfTUVNQkVSU0hJUGAgdG8gZnVuY3Rpb24gY29ycmVjdGx5PyBMb2dpY2FsbHksIGBJUF9BRERfTUVNQkVSU0hJUGAgaXMgc3VwcG9zZWQgdG8gZGVhbCBzcGVjaWZpY2FsbHkgd2l0aCBtdWx0aWNhc3QsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHRoaXMgZmxhZyBoYXMgdG8gYmUgZXhwbGljaXRseSBzZXQuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGludGVyYWN0aW9ucyBvciBpbXBsaWNpdCBiZWhhdmlvcnMgaW4gdGhlIGtlcm5lbCB0aGF0IEkmIzM5O20gb3Zlcmxvb2tpbmcuIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBJdCBjb3VsZCBiZSBhIHNpbXBsZSBjaGVjaywgb3IgaXQgY291bGQgYmUgZGVlcGVyLi4uIGxldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSBzYXlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUF9BRERfTUVNQkVSU0hJUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTY0MD1zdGF0aWMgYm9vbCBzZXRzb2Nrb3B0X25lZWRzX3J0bmwoaW50IG9wdG5hbWUpXG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy02NDItXHRzd2l0Y2ggKG9wdG5hbWUpIHtcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6NjQzOlx0Y2FzZSBJUF9BRERfTUVNQkVSU0hJUDpcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtNjQ0LVx0Y2FzZSBJUF9BRERfU09VUkNFX01FTUJFUlNISVA6XG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz04OTI9aW50IGRvX2lwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTIyNC1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTIyNTpcdGNhc2UgSVBfQUREX01FTUJFUlNISVA6XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTEyMjYtXHRjYXNlIElQX0RST1BfTUVNQkVSU0hJUDpcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTEyNDYtXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjEyNDc6XHRcdGlmIChvcHRuYW1lID09IElQX0FERF9NRU1CRVJTSElQKVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xMjQ4LVx0XHRcdGVyciA9IGlwX21jX2pvaW5fZ3JvdXAoc2ssIFx1MDAyNm1yZXEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzM2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBNdWx0aWNhc3QgTGFuZHNjYXBlKioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGlwX21jX2pvaW5fZ3JvdXBgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaXRzIGNvbmRpdGlvbmFsIGluY2x1c2lvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hlcmUmIzM5O3MgdGhlIGd1YXJkPyYjMzQ7IElzIHRoaXMgbXVsdGljYXN0IGZ1bmN0aW9uYWxpdHkgY29udGluZ2VudCBvbiB0aGUgYENPTkZJR19JUF9NVUxUSUNBU1RgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbj8gSSYjMzk7bSBiZXR0aW5nIGl0IGlzOyBpdCYjMzk7cyBwcmFjdGljYWxseSBzdGFuZGFyZCBwcmFjdGljZSBmb3IgbW9kdWxhcml0eS4gSSYjMzk7bGwgY2hlY2sgaWYgaXQmIzM5O3Mgd3JhcHBlZCBpbiBhbiBgI2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RgIGJsb2NrLiBUaGF0JiMzOTtsbCB0ZWxsIG1lIGlmIEkmIzM5O20gZXZlbiAqbG9va2luZyogYXQgYWN0aXZlIG11bHRpY2FzdCBjb2RlIG9yIHNvbWV0aGluZyB0aGF0JiMzOTtzIHN0dWJiZWQgb3V0IHVuZGVyIHRoYXQgZmxhZy4gS25vd2luZyB0aGlzIHdpbGwgc3RyZWFtbGluZSBteSBhbmFseXNpcywgc2F2aW5nIHRpbWUgaW4gZWl0aGVyIGEgZGVidWdnaW5nLCBjb2RlIHJldmlldywgb3IgZXZlbiBhIGZlYXR1cmUgaW1wbGVtZW50YXRpb24gc2NlbmFyaW8uIEkga25vdyB0aGUgYmFzaWNzLCBidXQgaXQmIzM5O3MgYWx3YXlzIHVzZWZ1bCB0byBzdGFydCB3aXRoIHRoZSBmb3VuZGF0aW9ucy4gSSBuZWVkIHRoZSBiaWcgcGljdHVyZSBiZWZvcmUgem9vbWluZyBpbiBvbiB0aGUgc3BlY2lmaWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF9tY19qb2luX2dyb3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaWdtcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lnbXAuYz0yMjYwPXN0YXRpYyB2b2lkIGlwX21jX2NsZWFyX3NyYyhzdHJ1Y3QgaXBfbWNfbGlzdCAqcG1jKVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0yMjc5LSAqL1xubmV0L2lwdjQvaWdtcC5jOjIyODA6c3RhdGljIGludCBfX2lwX21jX2pvaW5fZ3JvdXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXJlcW4gKmltcixcbm5ldC9pcHY0L2lnbXAuYy0yMjgxLVx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBtb2RlKVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0yMzMxLSAqL1xubmV0L2lwdjQvaWdtcC5jOjIzMzI6aW50IGlwX21jX2pvaW5fZ3JvdXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXJlcW4gKmltcilcbm5ldC9pcHY0L2lnbXAuYy0yMzMzLXtcbm5ldC9pcHY0L2lnbXAuYzoyMzM0Olx0cmV0dXJuIF9faXBfbWNfam9pbl9ncm91cChzaywgaW1yLCBNQ0FTVF9FWENMVURFKTtcbm5ldC9pcHY0L2lnbXAuYy0yMzM1LX1cbm5ldC9pcHY0L2lnbXAuYzoyMzM2OkVYUE9SVF9TWU1CT0woaXBfbWNfam9pbl9ncm91cCk7XG5uZXQvaXB2NC9pZ21wLmMtMjMzNy1cbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjMzOS0gKi9cbm5ldC9pcHY0L2lnbXAuYzoyMzQwOmludCBpcF9tY19qb2luX2dyb3VwX3NzbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tcmVxbiAqaW1yLFxubmV0L2lwdjQvaWdtcC5jLTIzNDEtXHRcdFx0IHVuc2lnbmVkIGludCBtb2RlKVxubmV0L2lwdjQvaWdtcC5jLTIzNDIte1xubmV0L2lwdjQvaWdtcC5jOjIzNDM6XHRyZXR1cm4gX19pcF9tY19qb2luX2dyb3VwKHNrLCBpbXIsIG1vZGUpO1xubmV0L2lwdjQvaWdtcC5jLTIzNDQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDY3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIE11bHRpY2FzdCBDb2RlYmFzZSoqCgpBbHJpZ2h0LCBzbyB0aGUgYnVnIGlzbiYjMzk7dCBoaWRkZW4gYXdheSB1bmRlciBhIGAjaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVGAgYmxvY2suIEdvb2QgdG8ga25vdywgdGhhdCBuYXJyb3dzIHRoaW5ncyBkb3duIGEgYml0LiBCdXQgd2FpdCwgYmVmb3JlIEkgc3RhcnQgY2hhc2luZyBnaG9zdHMgZWxzZXdoZXJlLCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcuIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGlzc3VlLCBhbmQgdGhlIGxpa2VsaWhvb2Qgb2YgbXVsdGljYXN0IGludGVyYWN0aW9ucywgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGlmIGBDT05GSUdfSVBfTVVMVElDQVNUYCBpcyBldmVuICp1c2VkKiB3aXRoaW4gdGhlIGBuZXQvaXB2NC9pZ21wLmNgIGZpbGUuIEl0IHNlZW1zIGxpa2VseSwgZ2l2ZW4gdGhlIGZpbGUmIzM5O3MgcHVycG9zZSwgYnV0IGl0JiMzOTtzIGEgcXVpY2sgY2hlY2sgdG8gZWxpbWluYXRlIGEgcG90ZW50aWFsIGZhbHNlIGxlYWQuIE5vIHBvaW50IGdvaW5nIGRvd24gYSByYWJiaXQgaG9sZSBmb3Igc29tZXRoaW5nIHRoYXQgaXNuJiMzOTt0IGNvbm5lY3RlZC4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IHVzYWdlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19JUF9NVUxUSUNBU1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pZ21wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaWdtcC5jLTEwOS1cbm5ldC9pcHY0L2lnbXAuYzoxMTA6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xMTEtLyogUGFyYW1ldGVyIG5hbWVzIGFuZCB2YWx1ZXMgYXJlIHRha2VuIGZyb20gaWdtcC12Mi0wNiBkcmFmdCAqL1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0yMDE9c3RhdGljIHZvaWQgaXBfc2ZfbGlzdF9jbGVhcl9hbGwoc3RydWN0IGlwX3NmX2xpc3QgKnBzZilcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjExLVxubmV0L2lwdjQvaWdtcC5jOjIxMjojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTIxMy1cbi0tXG5uZXQvaXB2NC9pZ21wLmM9MTE3OT1zdGF0aWMgdm9pZCBpcF9tY19maWx0ZXJfZGVsKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIGFkZHIpXG4tLVxubmV0L2lwdjQvaWdtcC5jLTExODctXG5uZXQvaXB2NC9pZ21wLmM6MTE4ODojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTExODktLypcbi0tXG5uZXQvaXB2NC9pZ21wLmM9MTMwOD1zdGF0aWMgdm9pZCBfX2lnbXBfZ3JvdXBfZHJvcHBlZChzdHJ1Y3QgaXBfbWNfbGlzdCAqaW0sIGdmcF90IGdmcClcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTMxMC1cdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IGltLVx1MDAzZWludGVyZmFjZTtcbm5ldC9pcHY0L2lnbXAuYzoxMzExOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMTMxMi1cdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoaW5fZGV2LVx1MDAzZWRldik7XG4tLVxubmV0L2lwdjQvaWdtcC5jLTEzMjAtXG5uZXQvaXB2NC9pZ21wLmM6MTMyMTojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTEzMjItXHRpZiAoaW0tXHUwMDNlbXVsdGlhZGRyID09IElHTVBfQUxMX0hPU1RTKVxuLS1cbm5ldC9pcHY0L2lnbXAuYz0xMzUyPXN0YXRpYyB2b2lkIGlnbXBfZ3JvdXBfYWRkZWQoc3RydWN0IGlwX21jX2xpc3QgKmltKVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xMzU0LVx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gaW0tXHUwMDNlaW50ZXJmYWNlO1xubmV0L2lwdjQvaWdtcC5jOjEzNTU6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xMzU2LVx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChpbl9kZXYtXHUwMDNlZGV2KTtcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTM2My1cbm5ldC9pcHY0L2lnbXAuYzoxMzY0OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMTM2NS1cdGlmIChpbS1cdTAwM2VtdWx0aWFkZHIgPT0gSUdNUF9BTExfSE9TVFMpXG4tLVxubmV0L2lwdjQvaWdtcC5jPTE1MTg9c3RhdGljIHZvaWQgX19fX2lwX21jX2luY19ncm91cChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiBhZGRyLFxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xNTYzLVx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2aW0tXHUwMDNlbG9jayk7XG5uZXQvaXB2NC9pZ21wLmM6MTU2NDojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTE1NjUtXHR0aW1lcl9zZXR1cChcdTAwMjZpbS1cdTAwM2V0aW1lciwgaWdtcF90aW1lcl9leHBpcmUsIDApO1xuLS1cbm5ldC9pcHY0L2lnbXAuYy0xNTczLVxubmV0L2lwdjQvaWdtcC5jOjE1NzQ6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xNTc1LVx0aWdtcHYzX2RlbF9kZWxyZWMoaW5fZGV2LCBpbSk7XG4tLVxubmV0L2lwdjQvaWdtcC5jPTE3NDI9c3RhdGljIHZvaWQgaXBfbWNfcmVqb2luX2dyb3VwcyhzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXG5uZXQvaXB2NC9pZ21wLmMtMTc0My17XG5uZXQvaXB2NC9pZ21wLmM6MTc0NDojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTE3NDUtXHRzdHJ1Y3QgaXBfbWNfbGlzdCAqaW07XG4tLVxubmV0L2lwdjQvaWdtcC5jPTE4MjQ9dm9pZCBpcF9tY19yZW1hcChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXG4tLVxubmV0L2lwdjQvaWdtcC5jLTE4MzAtXHRmb3JfZWFjaF9wbWNfcnRubChpbl9kZXYsIHBtYykge1xubmV0L2lwdjQvaWdtcC5jOjE4MzE6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xODMyLVx0XHRpZ21wdjNfZGVsX2RlbHJlYyhpbl9kZXYsIHBtYyk7XG4tLVxubmV0L2lwdjQvaWdtcC5jPTE4NDA9dm9pZCBpcF9tY19kb3duKHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldilcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTg0OC1cbm5ldC9pcHY0L2lnbXAuYzoxODQ5OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMTg1MC1cdFdSSVRFX09OQ0UoaW5fZGV2LVx1MDAzZW1yX2lmY19jb3VudCwgMCk7XG4tLVxubmV0L2lwdjQvaWdtcC5jLTE4NjAtXG5uZXQvaXB2NC9pZ21wLmM6MTg2MTojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTE4NjItc3RhdGljIHZvaWQgaXBfbWNfcmVzZXQoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxuLS1cbm5ldC9pcHY0L2lnbXAuYz0xODc2PXZvaWQgaXBfbWNfaW5pdF9kZXYoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xODc5LVxubmV0L2lwdjQvaWdtcC5jOjE4ODA6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xODgxLVx0dGltZXJfc2V0dXAoXHUwMDI2aW5fZGV2LVx1MDAzZW1yX2dxX3RpbWVyLCBpZ21wX2dxX3RpbWVyX2V4cGlyZSwgMCk7XG4tLVxubmV0L2lwdjQvaWdtcC5jPTE4OTE9dm9pZCBpcF9tY191cChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXG4tLVxubmV0L2lwdjQvaWdtcC5jLTE5MDAtXHRmb3JfZWFjaF9wbWNfcnRubChpbl9kZXYsIHBtYykge1xubmV0L2lwdjQvaWdtcC5jOjE5MDE6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xOTAyLVx0XHRpZ21wdjNfZGVsX2RlbHJlYyhpbl9kZXYsIHBtYyk7XG4tLVxubmV0L2lwdjQvaWdtcC5jPTE5MTI9dm9pZCBpcF9tY19kZXN0cm95X2RldihzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXG4tLVxubmV0L2lwdjQvaWdtcC5jLTE5MTktXHRpcF9tY19kb3duKGluX2Rldik7XG5uZXQvaXB2NC9pZ21wLmM6MTkyMDojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTE5MjEtXHRpZ21wdjNfY2xlYXJfZGVscmVjKGluX2Rldik7XG4tLVxubmV0L2lwdjQvaWdtcC5jPTE5NzA9c3RhdGljIGludCBpcF9tY19kZWwxX3NyYyhzdHJ1Y3QgaXBfbWNfbGlzdCAqcG1jLCBpbnQgc2Ztb2RlLFxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xOTkwLVx0aWYgKCFwc2YtXHUwMDNlc2ZfY291bnRbTUNBU1RfSU5DTFVERV0gXHUwMDI2XHUwMDI2ICFwc2YtXHUwMDNlc2ZfY291bnRbTUNBU1RfRVhDTFVERV0pIHtcbm5ldC9pcHY0L2lnbXAuYzoxOTkxOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMTk5Mi1cdFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gcG1jLVx1MDAzZWludGVyZmFjZTtcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjAwMC1cdFx0XHRwbWMtXHUwMDNlc291cmNlcyA9IHBzZi1cdTAwM2VzZl9uZXh0O1xubmV0L2lwdjQvaWdtcC5jOjIwMDE6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0yMDAyLVx0XHRpZiAocHNmLVx1MDAzZXNmX29sZGluIFx1MDAyNlx1MDAyNlxuLS1cbm5ldC9pcHY0L2lnbXAuYy0yMDE0LVxubmV0L2lwdjQvaWdtcC5jOjIwMTU6I2lmbmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMjAxNi0jZGVmaW5lIGlnbXBfaWZjX2V2ZW50KHgpXHRkbyB7IH0gd2hpbGUgKDApXG4tLVxubmV0L2lwdjQvaWdtcC5jPTIwMTk9c3RhdGljIGludCBpcF9tY19kZWxfc3JjKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyICpwbWNhLCBpbnQgc2Ztb2RlLFxuLS1cbm5ldC9pcHY0L2lnbXAuYy0yMDM5LVx0cmN1X3JlYWRfdW5sb2NrKCk7XG5uZXQvaXB2NC9pZ21wLmM6MjA0MDojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTIwNDEtXHRzZl9tYXJrc3RhdGUocG1jKTtcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjA1OS1cdCAgICBwbWMtXHUwMDNlc2Zjb3VudFtNQ0FTVF9JTkNMVURFXSkge1xubmV0L2lwdjQvaWdtcC5jOjIwNjA6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0yMDYxLVx0XHRzdHJ1Y3QgaXBfc2ZfbGlzdCAqcHNmO1xuLS1cbm5ldC9pcHY0L2lnbXAuYy0yMDY2LVx0XHRwbWMtXHUwMDNlc2Ztb2RlID0gTUNBU1RfSU5DTFVERTtcbm5ldC9pcHY0L2lnbXAuYzoyMDY3OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMjA2OC1cdFx0cG1jLVx1MDAzZWNyY291bnQgPSBpbl9kZXYtXHUwMDNlbXJfcXJ2ID86IFJFQURfT05DRShuZXQtXHUwMDNlaXB2NC5zeXNjdGxfaWdtcF9xcnYpO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0yMDg1PXN0YXRpYyBpbnQgaXBfbWNfYWRkMV9zcmMoc3RydWN0IGlwX21jX2xpc3QgKnBtYywgaW50IHNmbW9kZSxcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjExMi1cbm5ldC9pcHY0L2lnbXAuYzoyMTEzOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMjExNC1zdGF0aWMgdm9pZCBzZl9tYXJrc3RhdGUoc3RydWN0IGlwX21jX2xpc3QgKnBtYylcbi0tXG5uZXQvaXB2NC9pZ21wLmM9MjE5MT1zdGF0aWMgaW50IGlwX21jX2FkZF9zcmMoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgKnBtY2EsIGludCBzZm1vZGUsXG4tLVxubmV0L2lwdjQvaWdtcC5jLTIyMTItXG5uZXQvaXB2NC9pZ21wLmM6MjIxMzojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTIyMTQtXHRzZl9tYXJrc3RhdGUocG1jKTtcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjIzMi1cdH0gZWxzZSBpZiAoaXNleGNsdWRlICE9IChwbWMtXHUwMDNlc2Zjb3VudFtNQ0FTVF9FWENMVURFXSAhPSAwKSkge1xubmV0L2lwdjQvaWdtcC5jOjIyMzM6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0yMjM0LVx0XHRzdHJ1Y3QgaXBfc2ZfbGlzdCAqcHNmO1xuLS1cbm5ldC9pcHY0L2lnbXAuYy0yMjQzLVx0XHRcdHBtYy1cdTAwM2VzZm1vZGUgPSBNQ0FTVF9JTkNMVURFO1xubmV0L2lwdjQvaWdtcC5jOjIyNDQ6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0yMjQ1LVx0XHQvKiBlbHNlIG5vIGZpbHRlcnM7IGtlZXAgb2xkIG1vZGUgZm9yIHJlcG9ydHMgKi9cbi0tXG5uZXQvaXB2NC9pZ21wLmM9Mjk1OD1zdGF0aWMgaW50IGlnbXBfbWNfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4tLVxubmV0L2lwdjQvaWdtcC5jLTI5NjktXG5uZXQvaXB2NC9pZ21wLmM6Mjk3MDojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTI5NzEtXHRcdHF1ZXJpZXIgPSBJR01QX1YxX1NFRU4oc3RhdGUtXHUwMDNlaW5fZGV2KSA/IFwmIzM0O1YxXCYjMzQ7IDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NjkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIElQIE11bHRpY2FzdCBDb25maWd1cmF0aW9uIGFuZCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBpdCYjMzk7cyBjbGVhciB0aGF0IGBDT05GSUdfSVBfTVVMVElDQVNUYCBpcyBmdW5kYW1lbnRhbCB0byBob3cgYGlnbXAuY2Agb3BlcmF0ZXMuIEdpdmVuIHRoYXQsIGVuYWJsaW5nIGBJUF9NVUxUSUNBU1RgIHNlZW1zIGxpa2UgYSBuby1icmFpbmVyIGZvciBwcm9wZXIgZnVuY3Rpb25hbGl0eS4KCk5vdywgSSB3YXMgYSBiaXQgY29uY2VybmVkIGFib3V0IHRoZSByZWFjaGFiaWxpdHkgb2YgYGlwX21jX2Rlc3Ryb3lfZGV2YCB3aXRob3V0IGBDT05GSUdfSVBfTVVMVElDQVNUYCwgYnV0IGl0ICppcyogYWNjZXNzaWJsZS4gU3RpbGwsIHRvIGdldCBmdWxsIGNvdmVyYWdlIGFuZCBtYWtlIHN1cmUgd2UmIzM5O3JlIHRob3JvdWdobHkgdGVzdGluZyB0aGUgbXVsdGljYXN0IGZlYXR1cmVzLCBgSVBfTVVMVElDQVNUYCBpcyBkZWZpbml0ZWx5IHRoZSByaWdodCBjb25maWcgdG8gaW5jbHVkZS4KCkxldCBtZSB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGlzIHBhdGNoLi4uIEkgc2VlIHRoZSBjb2RlIGlzIG1vZGlmeWluZyBhIGxvb3AgdGhhdCYjMzk7cyBpdGVyYXRpbmcgdGhyb3VnaCBgaW5fZGV2LSZndDttY19saXN0YC4gVGhlIGtleSBhZGRpdGlvbiBpcyB0aGUgYGlwX21jX2hhc2hfcmVtb3ZlYCBjYWxsIHdpdGhpbiB0aGF0IGxvb3AuIEl0IGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgYSBidWcgZml4LCBhY3R1YWxseSDigJMgcmVsYXRlZCB0byB1cGRhdGluZyB0aGUgYG1jX2hhc2hgIHRhYmxlIHdoZW4gYG1jX2xpc3RgIGlzIGJlaW5nIGNsZWFyZWQuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHNpbWlsYXIgbWVtb3J5IGNvcnJ1cHRpb24gaWYgdGhlIGhhc2ggdGFibGUgaXMgYWNjZXNzZWQgYWZ0ZXIgdGhlIGRldmljZSBpcyBkZXN0cm95ZWQuCgpXYWl0IGEgc2Vjb25k4oCmIGBpbl9kZXZgIGlzIGJlaW5nIGRlc3Ryb3llZCwgc28gc2hvdWxkbiYjMzk7dCBpdHMgaGFzaCB0YWJsZSBhbHNvIGJlIGRlc3Ryb3llZD8gSXMgdGhlIGhhc2ggdGFibGUgc29tZWhvdyBnbG9iYWw/IEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgaXBfbWNfaGFzaF9yZW1vdmVgIHRvIGNvbmZpcm0gdGhlIHNjb3BlIG9mIHRoaXMgaGFzaCB0YWJsZS4gSXQgc2VlbXMgbGlrZSB0aGUgcGF0Y2ggaXMgbmVjZXNzYXJ5IHRvIG1haW50YWluIGRhdGEgY29uc2lzdGVuY3kgd2l0aGluIHRoZSBgaW5fZGV2YCBzdHJ1Y3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaWdtcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDMwOlx0XHRcdFJDVV9JTklUX1BPSU5URVIobWNfaGFzaFtoYXNoXSwgaW0pO1xuMTQzMTpcdFx0fVxuMTQzMjpcdFxuMTQzMzpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGluX2Rldi1cdTAwM2VtY19oYXNoLCBtY19oYXNoKTtcbjE0MzQ6XHR9XG4xNDM1Olx0XG4xNDM2Olx0c3RhdGljIHZvaWQgaXBfbWNfaGFzaF9yZW1vdmUoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LFxuMTQzNzpcdFx0XHRcdCAgICAgIHN0cnVjdCBpcF9tY19saXN0ICppbSlcbjE0Mzg6XHR7XG4xNDM5Olx0XHRzdHJ1Y3QgaXBfbWNfbGlzdCBfX3JjdSAqKm1jX2hhc2ggPSBydG5sX2RlcmVmZXJlbmNlKGluX2Rldi1cdTAwM2VtY19oYXNoKTtcbjE0NDA6XHRcdHN0cnVjdCBpcF9tY19saXN0ICphdXg7XG4xNDQxOlx0XG4xNDQyOlx0XHRpZiAoIW1jX2hhc2gpXG4xNDQzOlx0XHRcdHJldHVybjtcbjE0NDQ6XHRcdG1jX2hhc2ggJiM0Mzs9IGlwX21jX2hhc2goaW0pO1xuMTQ0NTpcdFx0d2hpbGUgKChhdXggPSBydG5sX2RlcmVmZXJlbmNlKCptY19oYXNoKSkgIT0gaW0pXG4xNDQ2Olx0XHRcdG1jX2hhc2ggPSBcdTAwMjZhdXgtXHUwMDNlbmV4dF9oYXNoO1xuMTQ0NzpcdFx0Km1jX2hhc2ggPSBpbS1cdTAwM2VuZXh0X2hhc2g7XG4xNDQ4Olx0fVxuMTQ0OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU3NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEhhc2ggVGFibGUgSXNzdWUqKgoKU28sIHRoZSBjb2RlJiMzOTtzIHVzaW5nIGEgaGFzaCB0YWJsZSAoYGluX2Rldi0mZ3Q7bWNfaGFzaGApIHRoYXQmIzM5O3Mgc3BlY2lmaWMgdG8gZWFjaCBuZXR3b3JrIGRldmljZSAoYGluX2RldmApLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzOiBpZiB0aGUgZGV2aWNlIGl0c2VsZiwgYGluX2RldmAsIGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGRlc3Ryb3llZCwgd2h5IGRvIHdlIGV2ZW4gY2FyZSBhYm91dCByZW1vdmluZyBpdCBmcm9tIHRoZSBoYXNoIHRhYmxlPyBTaG91bGRuJiMzOTt0IGl0IGp1c3QgYmVjb21lIGlycmVsZXZhbnQ/CgpCdXQgdGhlbiBhIHBvc3NpYmlsaXR5IGhpdHMgbWUuIFBlcmhhcHMgYGluX2RldmAgaXNuJiMzOTt0IGltbWVkaWF0ZWx5IGZyZWVkIGFmdGVyIGJlaW5nIG1hcmtlZCBmb3IgZGVzdHJ1Y3Rpb24uIE1heWJlIHRoZXJlJiMzOTtzIGEgd2luZG93IG9mIHRpbWUgd2hlcmUgc29tZW9uZSAqY291bGQqIHN0aWxsIHRyeSB0byBsb29rIGl0IHVwIGluIHRoZSBoYXNoIHRhYmxlLiBJZiB0aGF0JiMzOTtzIHRoZSBjYXNlLCB0aGVuIHRoaXMgcmVtb3ZhbCBvcGVyYXRpb24gYmVjb21lcyBjcnVjaWFsIHRvIGF2b2lkIGRhbmdsaW5nIHBvaW50ZXJzIG9yIG90aGVyIG5hc3R5IG1lbW9yeSBtYW5hZ2VtZW50IGlzc3Vlcy4KClRoZXJlZm9yZSwgdGhlIG5leHQgc3RlcCBpcyBjcnlzdGFsIGNsZWFyOiBJIG5lZWQgdG8gcGlucG9pbnQgZXhhY3RseSB3aGVyZSBgaW5fZGV2LSZndDttY19oYXNoYCBnZXRzIGZyZWVkLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjcml0aWNhbCBpbmZvcm1hdGlvbiB3aWxsIHJlc2lkZSwgYW5kIGZyb20gdGhhdCBJIGNhbiBkZXRlcm1pbmUgaWYgdGhlIHJlbW92YWwgaXMgbmVjZXNzYXJ5IGFuZCBjb3JyZWN0LiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBmaW5kIHRoZSBmcmVlaW5nIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttY19oYXNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaWdtcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lnbXAuYz0xMzUyPXN0YXRpYyB2b2lkIGlnbXBfZ3JvdXBfYWRkZWQoc3RydWN0IGlwX21jX2xpc3QgKmltKVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xMzk4LVxubmV0L2lwdjQvaWdtcC5jOjEzOTk6c3RhdGljIHUzMiBpcF9tY19oYXNoKGNvbnN0IHN0cnVjdCBpcF9tY19saXN0ICppbSlcbm5ldC9pcHY0L2lnbXAuYy0xNDAwLXtcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTQwMy1cbm5ldC9pcHY0L2lnbXAuYzoxNDA0OnN0YXRpYyB2b2lkIGlwX21jX2hhc2hfYWRkKHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldixcbm5ldC9pcHY0L2lnbXAuYy0xNDA1LVx0XHRcdCAgIHN0cnVjdCBpcF9tY19saXN0ICppbSlcbm5ldC9pcHY0L2lnbXAuYy0xNDA2LXtcbm5ldC9pcHY0L2lnbXAuYzoxNDA3Olx0c3RydWN0IGlwX21jX2xpc3QgX19yY3UgKiptY19oYXNoO1xubmV0L2lwdjQvaWdtcC5jLTE0MDgtXHR1MzIgaGFzaDtcbm5ldC9pcHY0L2lnbXAuYy0xNDA5LVxubmV0L2lwdjQvaWdtcC5jOjE0MTA6XHRtY19oYXNoID0gcnRubF9kZXJlZmVyZW5jZShpbl9kZXYtXHUwMDNlbWNfaGFzaCk7XG5uZXQvaXB2NC9pZ21wLmM6MTQxMTpcdGlmIChtY19oYXNoKSB7XG5uZXQvaXB2NC9pZ21wLmM6MTQxMjpcdFx0aGFzaCA9IGlwX21jX2hhc2goaW0pO1xubmV0L2lwdjQvaWdtcC5jOjE0MTM6XHRcdGltLVx1MDAzZW5leHRfaGFzaCA9IG1jX2hhc2hbaGFzaF07XG5uZXQvaXB2NC9pZ21wLmM6MTQxNDpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKG1jX2hhc2hbaGFzaF0sIGltKTtcbm5ldC9pcHY0L2lnbXAuYy0xNDE1LVx0XHRyZXR1cm47XG4tLVxubmV0L2lwdjQvaWdtcC5jLTE0MjEtXG5uZXQvaXB2NC9pZ21wLmM6MTQyMjpcdG1jX2hhc2ggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXBfbWNfbGlzdCAqKSBcdTAwM2NcdTAwM2MgTUNfSEFTSF9TWl9MT0csXG5uZXQvaXB2NC9pZ21wLmMtMTQyMy1cdFx0XHQgIEdGUF9LRVJORUwpO1xubmV0L2lwdjQvaWdtcC5jOjE0MjQ6XHRpZiAoIW1jX2hhc2gpXG5uZXQvaXB2NC9pZ21wLmMtMTQyNS1cdFx0cmV0dXJuO1xuLS1cbm5ldC9pcHY0L2lnbXAuYy0xNDI3LVx0Zm9yX2VhY2hfcG1jX3J0bmwoaW5fZGV2LCBpbSkge1xubmV0L2lwdjQvaWdtcC5jOjE0Mjg6XHRcdGhhc2ggPSBpcF9tY19oYXNoKGltKTtcbm5ldC9pcHY0L2lnbXAuYzoxNDI5Olx0XHRpbS1cdTAwM2VuZXh0X2hhc2ggPSBtY19oYXNoW2hhc2hdO1xubmV0L2lwdjQvaWdtcC5jOjE0MzA6XHRcdFJDVV9JTklUX1BPSU5URVIobWNfaGFzaFtoYXNoXSwgaW0pO1xubmV0L2lwdjQvaWdtcC5jLTE0MzEtXHR9XG5uZXQvaXB2NC9pZ21wLmMtMTQzMi1cbm5ldC9pcHY0L2lnbXAuYzoxNDMzOlx0cmN1X2Fzc2lnbl9wb2ludGVyKGluX2Rldi1cdTAwM2VtY19oYXNoLCBtY19oYXNoKTtcbm5ldC9pcHY0L2lnbXAuYy0xNDM0LX1cbm5ldC9pcHY0L2lnbXAuYy0xNDM1LVxubmV0L2lwdjQvaWdtcC5jOjE0MzY6c3RhdGljIHZvaWQgaXBfbWNfaGFzaF9yZW1vdmUoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LFxubmV0L2lwdjQvaWdtcC5jLTE0MzctXHRcdFx0ICAgICAgc3RydWN0IGlwX21jX2xpc3QgKmltKVxubmV0L2lwdjQvaWdtcC5jLTE0Mzgte1xubmV0L2lwdjQvaWdtcC5jOjE0Mzk6XHRzdHJ1Y3QgaXBfbWNfbGlzdCBfX3JjdSAqKm1jX2hhc2ggPSBydG5sX2RlcmVmZXJlbmNlKGluX2Rldi1cdTAwM2VtY19oYXNoKTtcbm5ldC9pcHY0L2lnbXAuYy0xNDQwLVx0c3RydWN0IGlwX21jX2xpc3QgKmF1eDtcbm5ldC9pcHY0L2lnbXAuYy0xNDQxLVxubmV0L2lwdjQvaWdtcC5jOjE0NDI6XHRpZiAoIW1jX2hhc2gpXG5uZXQvaXB2NC9pZ21wLmMtMTQ0My1cdFx0cmV0dXJuO1xubmV0L2lwdjQvaWdtcC5jOjE0NDQ6XHRtY19oYXNoICYjNDM7PSBpcF9tY19oYXNoKGltKTtcbm5ldC9pcHY0L2lnbXAuYzoxNDQ1Olx0d2hpbGUgKChhdXggPSBydG5sX2RlcmVmZXJlbmNlKCptY19oYXNoKSkgIT0gaW0pXG5uZXQvaXB2NC9pZ21wLmM6MTQ0NjpcdFx0bWNfaGFzaCA9IFx1MDAyNmF1eC1cdTAwM2VuZXh0X2hhc2g7XG5uZXQvaXB2NC9pZ21wLmM6MTQ0NzpcdCptY19oYXNoID0gaW0tXHUwMDNlbmV4dF9oYXNoO1xubmV0L2lwdjQvaWdtcC5jLTE0NDgtfVxuLS1cbm5ldC9pcHY0L2lnbXAuYz0xNTE4PXN0YXRpYyB2b2lkIF9fX19pcF9tY19pbmNfZ3JvdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgYWRkcixcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTUyMC17XG5uZXQvaXB2NC9pZ21wLmM6MTUyMTpcdHN0cnVjdCBpcF9tY19saXN0IF9fcmN1ICoqbWNfaGFzaDtcbm5ldC9pcHY0L2lnbXAuYy0xNTIyLVx0c3RydWN0IGlwX21jX2xpc3QgKmltO1xuLS1cbm5ldC9pcHY0L2lnbXAuYy0xNTI1LVxubmV0L2lwdjQvaWdtcC5jOjE1MjY6XHRtY19oYXNoID0gcnRubF9kZXJlZmVyZW5jZShpbl9kZXYtXHUwMDNlbWNfaGFzaCk7XG5uZXQvaXB2NC9pZ21wLmM6MTUyNzpcdGlmIChtY19oYXNoKSB7XG5uZXQvaXB2NC9pZ21wLmMtMTUyOC1cdFx0dTMyIGhhc2ggPSBoYXNoXzMyKChfX2ZvcmNlIHUzMilhZGRyLCBNQ19IQVNIX1NaX0xPRyk7XG5uZXQvaXB2NC9pZ21wLmMtMTUyOS1cbm5ldC9pcHY0L2lnbXAuYzoxNTMwOlx0XHRmb3IgKGltID0gcnRubF9kZXJlZmVyZW5jZShtY19oYXNoW2hhc2hdKTtcbm5ldC9pcHY0L2lnbXAuYy0xNTMxLVx0XHQgICAgIGltO1xuLS1cbm5ldC9pcHY0L2lnbXAuYy0xNTcxLVxubmV0L2lwdjQvaWdtcC5jOjE1NzI6XHRpcF9tY19oYXNoX2FkZChpbl9kZXYsIGltKTtcbm5ldC9pcHY0L2lnbXAuYy0xNTczLVxuLS1cbm5ldC9pcHY0L2lnbXAuYz0xNzc2PXZvaWQgX19pcF9tY19kZWNfZ3JvdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgYWRkciwgZ2ZwX3QgZ2ZwKVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xNzkwLVx0XHRcdGlmIChuZXdfdXNlcnMgPT0gMCkge1xubmV0L2lwdjQvaWdtcC5jOjE3OTE6XHRcdFx0XHRpcF9tY19oYXNoX3JlbW92ZShpbl9kZXYsIGkpO1xubmV0L2lwdjQvaWdtcC5jLTE3OTItXHRcdFx0XHQqaXAgPSBpLVx1MDAzZW5leHRfcmN1O1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0xOTEyPXZvaWQgaXBfbWNfZGVzdHJveV9kZXYoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xOTI0LVx0d2hpbGUgKChpID0gcnRubF9kZXJlZmVyZW5jZShpbl9kZXYtXHUwMDNlbWNfbGlzdCkpICE9IE5VTEwpIHtcbm5ldC9pcHY0L2lnbXAuYzoxOTI1Olx0XHRpcF9tY19oYXNoX3JlbW92ZShpbl9kZXYsIGkpO1xubmV0L2lwdjQvaWdtcC5jLTE5MjYtXHRcdGluX2Rldi1cdTAwM2VtY19saXN0ID0gaS1cdTAwM2VuZXh0X3JjdTtcbi0tXG5uZXQvaXB2NC9pZ21wLmM9MjgyNj1pbnQgaXBfY2hlY2tfbWNfcmN1KHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIG1jX2FkZHIsIF9fYmUzMiBzcmNfYWRkciwgdTggcHJvdG8pXG4tLVxubmV0L2lwdjQvaWdtcC5jLTI4MjgtXHRzdHJ1Y3QgaXBfbWNfbGlzdCAqaW07XG5uZXQvaXB2NC9pZ21wLmM6MjgyOTpcdHN0cnVjdCBpcF9tY19saXN0IF9fcmN1ICoqbWNfaGFzaDtcbm5ldC9pcHY0L2lnbXAuYy0yODMwLVx0c3RydWN0IGlwX3NmX2xpc3QgKnBzZjtcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjgzMi1cbm5ldC9pcHY0L2lnbXAuYzoyODMzOlx0bWNfaGFzaCA9IHJjdV9kZXJlZmVyZW5jZShpbl9kZXYtXHUwMDNlbWNfaGFzaCk7XG5uZXQvaXB2NC9pZ21wLmM6MjgzNDpcdGlmIChtY19oYXNoKSB7XG5uZXQvaXB2NC9pZ21wLmMtMjgzNS1cdFx0dTMyIGhhc2ggPSBoYXNoXzMyKChfX2ZvcmNlIHUzMiltY19hZGRyLCBNQ19IQVNIX1NaX0xPRyk7XG5uZXQvaXB2NC9pZ21wLmMtMjgzNi1cbm5ldC9pcHY0L2lnbXAuYzoyODM3Olx0XHRmb3IgKGltID0gcmN1X2RlcmVmZXJlbmNlKG1jX2hhc2hbaGFzaF0pO1xubmV0L2lwdjQvaWdtcC5jLTI4MzgtXHRcdCAgICAgaW0gIT0gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwNTIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqRGlnZ2luZyBpbnRvIHRoZSBgbWNfaGFzaGAgSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIG11bHRpY2FzdCBoYXNoIHRhYmxlLCBzcGVjaWZpY2FsbHkgYGluX2Rldi0mZ3Q7bWNfaGFzaGAuIE15IGltbWVkaWF0ZSBvYnNlcnZhdGlvbiBpcyB0aGF0IHRoZSBtZW1vcnkgZm9yIGl0LCB0aGF0IGBpbl9kZXYtJmd0O21jX2hhc2hgIHN0cnVjdHVyZSwgaXNuJiMzOTt0IGFsbG9jYXRlZCB1cGZyb250IGR1cmluZyB0aGUgYGluX2RldmAgc2V0dXAuIEl0JiMzOTtzIGFsbG9jYXRlZCAqbGF6aWx5KiwgaW5zaWRlIGBpcF9tY19oYXNoX2FkZGAg4oCTIHByZWNpc2VseSB3aGVuIHRoZSBmaXJzdCBtdWx0aWNhc3QgZ3JvdXAgZW50cnkgbmVlZHMgdG8gYmUgYWRkZWQgdG8gYW4gaW50ZXJmYWNlJiMzOTtzIG11bHRpY2FzdCBtZW1iZXJzaGlwLiBUaGF0IG1ha2VzIHNlbnNlLCBtaW5pbWl6ZXMgbWVtb3J5IHVzYWdlIGlmIHRoZSBpbnRlcmZhY2UgbmV2ZXIgYWN0dWFsbHkgam9pbnMgYSBtdWx0aWNhc3QgZ3JvdXAuCgpCdXQgaGFuZyBvbuKApiB0aGF0IGFsc28gbWVhbnMgSSBuZWVkIHRvIGJlICpyZWFsbHkqIGNhcmVmdWwgYWJvdXQgdGhlIGRlYWxsb2NhdGlvbiBwYXRoLiBJZiBpdCYjMzk7cyBhbGxvY2F0ZWQgb24gZGVtYW5kLCBJIG5lZWQgdG8ga25vdyAqcHJlY2lzZWx5KiB3aGVyZSBhbmQgd2hlbiBgaW5fZGV2LSZndDttY19oYXNoYCBpcyBmcmVlZC4gIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdCBhbGxvY2F0aW9uIGluIGBpcF9tY19oYXNoX2FkZGAgYW5kIGRldGVybWluZSB0aGUgY29ycmVzcG9uZGluZyBjbGVhbnVwIGZ1bmN0aW9uLCBJIG5lZWQgdG8ga25vdyB3aGljaCBldmVudHMgcmVzdWx0IGluIHRoZSBkZWFsbG9jYXRpb24uIElzIGl0IGhhbmRsZWQgZHVyaW5nIGludGVyZmFjZSB0ZWFyZG93biwgc29tZSBzb3J0IG9mIGdsb2JhbCBzaHV0ZG93biwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/ICBJIGJldHRlciBmaWd1cmUgb3V0IHRoZSBsaWZlY3ljbGUgb2YgdGhhdCBoYXNoIHRhYmxlIHRvIGF2b2lkIG1lbW9yeSBsZWFrcyBvciBkb3VibGUtZnJlZXMuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdG8gYWRkIHRvIG15IG1lbnRhbCBjaGVja2xpc3QgZm9yIHBvdGVudGlhbCBwcm9ibGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZnJlZS4qbWNfaGFzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lnbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDU1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcGx5IGZhbWlsaWFyIHdpdGggc29mdHdhcmUgZGV2ZWxvcG1lbnQgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQ6CgoqKkNoZWNraW5nIGBpbl9kZXZgIFJlc291cmNlIFJlbGVhc2UqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhlIGBpbl9kZXZgIGVudmlyb25tZW50IHJpZ2h0IG5vdy4gSSYjMzk7bSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYWJvdXQgcmVzb3VyY2UgZnJlZWluZyDigJMgYXJlIHdlIHByb3Blcmx5IHJlbGVhc2luZyBtZW1vcnksIGZpbGUgaGFuZGxlcywgY29ubmVjdGlvbnMsIGFuZCBhbGwgdGhlIG90aGVyIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhhdCBlbnZpcm9ubWVudCBhZnRlciBhIHRlc3Qgb3IgYSB0YXNrPyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IGxlYWtzIG9yIGxpbmdlcmluZyBwcm9jZXNzZXMgaW1wYWN0aW5nIHBlcmZvcm1hbmNlIG9yIHN0YWJpbGl0eS4gSXQmIzM5O3MgdGltZSB0byBkaXZlIGluIGFuZCBlbnN1cmUgd2UmIzM5O3JlIGJlaW5nIGdvb2Qgc3Rld2FyZHMgb2Ygb3VyIHJlc291cmNlcyBkdXJpbmcgZGV2ZWxvcG1lbnQuIEkgc3VzcGVjdCB0aGlzIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gYmVjYXVzZSBpdOKAmXMgYSB0eXBpY2FsIHNvdXJjZSBvZiBwcm9ibGVtcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZnJlZV9yY3UuKmluX2RldiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Njg1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgaW5ldGRldl9kZXN0cm95YCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7T2theSwgYGluZXRkZXZfZGVzdHJveWAuLi4mIzM0Oy4gVGhhdCBmdW5jdGlvbiBuYW1lIGltbWVkaWF0ZWx5IHNjcmVhbXMgSVAtc3BlY2lmaWMgbmV0d29yayBkZXZpY2UgdGVhcmRvd24uIEdpdmVuIHRoZSBjb250ZXh0LCBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSB2YXJpb3VzIGRhdGEgc3RydWN0dXJlcyBhbmQgcG90ZW50aWFsIGNsZWFudXAgc2NlbmFyaW9zIGludm9sdmVkLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGlzIGlzIGEgc2ltcGxlIGRlYWxsb2NhdGlvbiBvciBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCByb3V0aW5nIHRhYmxlcywgbmVpZ2hib3IgY2FjaGVzLCBvciBldmVuIHVwcGVyLWxheWVyIHByb3RvY29scyB0aGF0IG5lZWQgY2FyZWZ1bCBoYW5kbGluZyBkdXJpbmcgdGhpcyBkZXN0cm95IHByb2Nlc3MuIE15IGZvY3VzIGlzIG9uIGVuc3VyaW5nIHRoZXJlIGFyZSBubyBtZW1vcnkgbGVha3MsIGRhbmdsaW5nIHBvaW50ZXJzLCBvciBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIGx1cmtpbmcgd2l0aGluIHRoZSBmdW5jdGlvbiYjMzk7cyBsb2dpYy4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGxvY2tpbmcgYW5kIGNvbmN1cnJlbmN5LCBlc3BlY2lhbGx5IGlmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYSBtdWx0aS10aHJlYWRlZCBjb250ZXh0LiBBIHdlbGwtZGVzaWduZWQgZnVuY3Rpb24gd2lsbCBoYW5kbGUgYWxsIHRoZXNlIHBvdGVudGlhbCBpc3N1ZXMgZWxlZ2FudGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2RldmluZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzE0Olx0c3RhdGljIHZvaWQgaW5ldGRldl9kZXN0cm95KHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldilcbiAzMTU6XHR7XG4gMzE2Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIDMxNzpcdFx0c3RydWN0IGluX2lmYWRkciAqaWZhO1xuIDMxODpcdFxuIDMxOTpcdFx0QVNTRVJUX1JUTkwoKTtcbiAzMjA6XHRcbiAzMjE6XHRcdGRldiA9IGluX2Rldi1cdTAwM2VkZXY7XG4gMzIyOlx0XG4gMzIzOlx0XHRpbl9kZXYtXHUwMDNlZGVhZCA9IDE7XG4gMzI0Olx0XG4gMzI1Olx0XHRpcF9tY19kZXN0cm95X2Rldihpbl9kZXYpO1xuIDMyNjpcdFxuIDMyNzpcdFx0d2hpbGUgKChpZmEgPSBydG5sX2RlcmVmZXJlbmNlKGluX2Rldi1cdTAwM2VpZmFfbGlzdCkpICE9IE5VTEwpIHtcbiAzMjg6XHRcdFx0aW5ldF9kZWxfaWZhKGluX2RldiwgXHUwMDI2aW5fZGV2LVx1MDAzZWlmYV9saXN0LCAwKTtcbiAzMjk6XHRcdFx0aW5ldF9mcmVlX2lmYShpZmEpO1xuIDMzMDpcdFx0fVxuIDMzMTpcdFxuIDMzMjpcdFx0UkNVX0lOSVRfUE9JTlRFUihkZXYtXHUwMDNlaXBfcHRyLCBOVUxMKTtcbiAzMzM6XHRcbiAzMzQ6XHRcdGRldmluZXRfc3lzY3RsX3VucmVnaXN0ZXIoaW5fZGV2KTtcbiAzMzU6XHRcdG5laWdoX3Bhcm1zX3JlbGVhc2UoXHUwMDI2YXJwX3RibCwgaW5fZGV2LVx1MDAzZWFycF9wYXJtcyk7XG4gMzM2Olx0XHRhcnBfaWZkb3duKGRldik7XG4gMzM3Olx0XG4gMzM4Olx0XHRpbl9kZXZfcHV0KGluX2Rldik7XG4gMzM5Olx0fVxuIDM0MDpcdFxuIDM0MTpcdHN0YXRpYyBpbnQgX19pbml0IGluZXRfYmxhY2tob2xlX2Rldl9pbml0KHZvaWQpXG4gMzQyOlx0e1xuIDM0MzpcdFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM1OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBSZXNvdXJjZSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgaW5fZGV2X3B1dChpbl9kZXYpYC4gVGhlIGNvbW1lbnQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyBgaW5fZGV2YC4gQWxyaWdodCwgdGhhdCYjMzk7cyB0aGUgY29yZSBmdW5jdGlvbiYjMzk7cyByb2xlOiByZXNvdXJjZSBjbGVhbnVwLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBleGFtaW5lIHRoZSBkZXRhaWxzIG9mIHdoYXQgYGluX2Rldl9wdXRgIGRvZXMgdG8gYWNjb21wbGlzaCB0aGF0IGZyZWVpbmcgb2YgdGhlIGBpbl9kZXZgIHJlc291cmNlLiBUaW1lIHRvIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5fZGV2X3B1dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oPTI4NT12b2lkIGluX2Rldl9maW5pc2hfZGVzdHJveShzdHJ1Y3QgaW5fZGV2aWNlICppZGV2KTtcbmluY2x1ZGUvbGludXgvaW5ldGRldmljZS5oLTI4Ni1cbmluY2x1ZGUvbGludXgvaW5ldGRldmljZS5oOjI4NzpzdGF0aWMgaW5saW5lIHZvaWQgaW5fZGV2X3B1dChzdHJ1Y3QgaW5fZGV2aWNlICppZGV2KVxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgtMjg4LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaC0yOTItXG5pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaDoyOTM6I2RlZmluZSBfX2luX2Rldl9wdXQoaWRldikgIHJlZmNvdW50X2RlYyhcdTAwMjYoaWRldiktXHUwMDNlcmVmY250KVxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgtMjk0LSNkZWZpbmUgaW5fZGV2X2hvbGQoaWRldikgICByZWZjb3VudF9pbmMoXHUwMDI2KGlkZXYpLVx1MDAzZXJlZmNudClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3MjYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwbHkgZmFtaWxpYXIgd2l0aCBzb2Z0d2FyZSBkZXZlbG9wbWVudCBhbmQgcmVsYXRlZCB0ZXJtaW5vbG9neToKCioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBDYWxsOiBgaW5fZGV2X2ZpbmlzaF9kZXN0cm95YCoqCgpBbHJpZ2h0LCBteSBicmFpbiBqdXN0IHdlbnQgc3RyYWlnaHQgdG8gdGhhdCBmdW5jdGlvbiBuYW1lOiBgaW5fZGV2X2ZpbmlzaF9kZXN0cm95YC4gSW1tZWRpYXRlbHksIEkmIzM5O20gcGFyc2luZyB0aGF0LiBUaGUgcHJlZml4ICYjMzQ7aW5fZGV2JiMzNDsgc2NyZWFtcyAmIzM0O2RldmVsb3BtZW50IGVudmlyb25tZW50JiMzNDsgb3IgJiMzNDtkZXZlbG9wbWVudCBjb250ZXh0LiYjMzQ7IFNvLCB0aGlzIGlzbiYjMzk7dCBzb21ldGhpbmcgZGVzdGluZWQgZm9yIHByb2R1Y3Rpb24sIHRoYXQmIzM5O3MgY2xlYXIuIEl0JiMzOTtzIGxpa2VseSByZWxhdGVkIHRvIHNvbWUgc29ydCBvZiB0ZW1wb3Jhcnkgc2V0dXAsIHRlc3RpbmcsIG9yIG1heWJlIGNsZWFudXAgcmVsYXRlZCB0byBhIGRldmVsb3BtZW50IGJ1aWxkLgoKVGhlIGNvcmUgYWN0aW9uIGlzICYjMzQ7ZmluaXNoX2Rlc3Ryb3kuJiMzNDsgRGVzdHJveWluZyAqd2hhdCo/IFRoZSBjb250ZXh0IGlzIGtleS4gQW0gSSBsb29raW5nIGF0IHJlc291cmNlcywgdGVtcG9yYXJ5IGZpbGVzLCB0ZXN0IGRhdGEsIGRhdGFiYXNlIGVudHJpZXMsIG9yIGEgd2hvbGUgZGV2ZWxvcG1lbnQgaW5zdGFuY2U/IFRoZSBuYW1pbmcgY29udmVudGlvbiBzdWdnZXN0cyBpdCBpcyByZWxhdGVkIHRvIHRoZSBjbGVhbnVwIG9mIHNvbWV0aGluZyB3aGljaCBoYWQgYmVlbiBzdGFydGVkIGZvciB0aGUgJiMzNDtpbl9kZXYmIzM0OyBlbnZpcm9ubWVudC4gVGhlIHVzZSBvZiAmIzM0O2ZpbmlzaCYjMzQ7IGhpbnRzIGF0IGEgcHJvY2VzcyBvciBzdGF0ZSB0aGF0IGlzIGNvbWluZyB0byBhbiBlbmQuIEl0JiMzOTtzIG5vdCB0aGUgaW5pdGlhbCBkZXN0cnVjdGlvbiwgYnV0IHRoZSAqY29tcGxldGlvbiogb2YgdGhhdCBwcm9jZXNzLgoKSSBuZWVkIG1vcmUgY29udGV4dCwgb2J2aW91c2x5LiBCdXQgYmFzZWQgb24ganVzdCB0aGUgbmFtZSwgSSYjMzk7bSBhc3N1bWluZyB0aGF0IEkgYW0gZWl0aGVyIHRyeWluZyB0byBjbGVhbiB1cCByZXNvdXJjZXMgZnJvbSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMsIG9yIGFtIHJldmlld2luZyB0aGF0IGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luX2Rldl9maW5pc2hfZGVzdHJveSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2RldmluZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9kZXZpbmV0LmM9MjMyPXN0YXRpYyB2b2lkIGluZXRfZnJlZV9pZmEoc3RydWN0IGluX2lmYWRkciAqaWZhKVxuLS1cbm5ldC9pcHY0L2RldmluZXQuYy0yMzUtXHQgKiB0byByZWxlYXNlIHRoZSByZWZlcmVuY2UgdG8gdGhlIG5ldGRldiB0aGUgc2FtZSB3YXkuXG5uZXQvaXB2NC9kZXZpbmV0LmM6MjM2Olx0ICogaW5fZGV2X3B1dCgpIC1cdTAwM2UgaW5fZGV2X2ZpbmlzaF9kZXN0cm95KCkgLVx1MDAzZSBuZXRkZXZfcHV0KClcbm5ldC9pcHY0L2RldmluZXQuYy0yMzctXHQgKi9cbi0tXG5uZXQvaXB2NC9kZXZpbmV0LmM9MjQxPXN0YXRpYyB2b2lkIGluX2Rldl9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4tLVxubmV0L2lwdjQvZGV2aW5ldC5jLTI0OC1cbm5ldC9pcHY0L2RldmluZXQuYzoyNDk6dm9pZCBpbl9kZXZfZmluaXNoX2Rlc3Ryb3koc3RydWN0IGluX2RldmljZSAqaWRldilcbm5ldC9pcHY0L2RldmluZXQuYy0yNTAte1xuLS1cbm5ldC9pcHY0L2RldmluZXQuYy0yNjMtfVxubmV0L2lwdjQvZGV2aW5ldC5jOjI2NDpFWFBPUlRfU1lNQk9MKGluX2Rldl9maW5pc2hfZGVzdHJveSk7XG5uZXQvaXB2NC9kZXZpbmV0LmMtMjY1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzMzMgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIGFzIEkgYXBwcm9hY2ggcmVhZGluZyB0aGlzIGNvZGUgc25pcHBldDoKCioqRGVjb25zdHJ1Y3RpbmcgYGluX2Rldl9maW5pc2hfZGVzdHJveWAqKgoKQWxyaWdodCwgSSYjMzk7bSBzdGFydGluZyB3aXRoIGBpbl9kZXZfZmluaXNoX2Rlc3Ryb3lgLiBUaGUgdmVyeSBuYW1lIHN1Z2dlc3RzIHRoaXMgaXMgcmVsYXRlZCB0byBzb21ldGhpbmcgYmVpbmcgZGVzdHJveWVkLCBsaWtlbHkgaW4gYSBkZXZlbG9wbWVudCBjb250ZXh0LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCAqaXMqIGJlaW5nIGRlc3Ryb3llZD8gSXMgdGhpcyBhIGNsZWFudXAgZnVuY3Rpb24sIGEgdGVhcmRvd24sIG9yIHNvbWV0aGluZyBtb3JlIHByb2FjdGl2ZSBsaWtlIHByZXZlbnRpbmcgZnVydGhlciBvcGVyYXRpb24/IFRoZSAmIzM0O2luX2RldiYjMzQ7IHByZWZpeCBpcyBpbnRlcmVzdGluZy4gSXQgc3Ryb25nbHkgaGludHMgdGhpcyBmdW5jdGlvbiBpcyBwcm9iYWJseSBub3QgbWVhbnQgZm9yIHByb2R1Y3Rpb24gY29kZSBhbmQgaXMgbW9zdCBsaWtlbHkgZm9yIHRvb2xpbmcsIGRlYnVnZ2luZywgb3IgdGVzdCBlbnZpcm9ubWVudHMuIElzIHRoaXMgYSBmaW5hbCBjbGVhbnVwIHN0YWdlPyBJIHdvbmRlciB3aGF0IHJlc291cmNlcyBuZWVkIHRvIGJlIGZyZWVkIG9yIHdoYXQgc3RhdGUgbmVlZHMgdG8gYmUgcmVzZXQgYXQgdGhpcyBwb2ludC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBob3cgdGhlIGZ1bmN0aW9uIGlzIHVzZWQgYW5kIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIHdpdGhpbiBpdC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGFueSBkZXBlbmRlbmNpZXMgYW5kIGNhbGxzLiBUaGlzIHNob3VsZCBiZSBpbnRlcmVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9kZXZpbmV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0MTpcdHN0YXRpYyB2b2lkIGluX2Rldl9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4gMjQyOlx0e1xuIDI0MzpcdFx0c3RydWN0IGluX2RldmljZSAqaWRldiA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgaW5fZGV2aWNlLCByY3VfaGVhZCk7XG4gMjQ0Olx0XG4gMjQ1Olx0XHRrZnJlZShyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGlkZXYtXHUwMDNlbWNfaGFzaCwgMSkpO1xuIDI0NjpcdFx0a2ZyZWUoaWRldik7XG4gMjQ3Olx0fVxuIDI0ODpcdFxuIDI0OTpcdHZvaWQgaW5fZGV2X2ZpbmlzaF9kZXN0cm95KHN0cnVjdCBpbl9kZXZpY2UgKmlkZXYpXG4gMjUwOlx0e1xuIDI1MTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGlkZXYtXHUwMDNlZGV2O1xuIDI1MjpcdFxuIDI1MzpcdFx0V0FSTl9PTihpZGV2LVx1MDAzZWlmYV9saXN0KTtcbiAyNTQ6XHRcdFdBUk5fT04oaWRldi1cdTAwM2VtY19saXN0KTtcbiAyNTU6XHQjaWZkZWYgTkVUX1JFRkNOVF9ERUJVR1xuIDI1NjpcdFx0cHJfZGVidWcoXCYjMzQ7JXM6ICVwPSVzXFxuXCYjMzQ7LCBfX2Z1bmNfXywgaWRldiwgZGV2ID8gZGV2LVx1MDAzZW5hbWUgOiBcJiMzNDtOSUxcJiMzNDspO1xuIDI1NzpcdCNlbmRpZlxuIDI1ODpcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNmlkZXYtXHUwMDNlZGV2X3RyYWNrZXIpO1xuIDI1OTpcdFx0aWYgKCFpZGV2LVx1MDAzZWRlYWQpXG4gMjYwOlx0XHRcdHByX2VycihcJiMzNDtGcmVlaW5nIGFsaXZlIGluX2RldmljZSAlcFxcblwmIzM0OywgaWRldik7XG4gMjYxOlx0XHRlbHNlXG4gMjYyOlx0XHRcdGNhbGxfcmN1KFx1MDAyNmlkZXYtXHUwMDNlcmN1X2hlYWQsIGluX2Rldl9mcmVlX3JjdSk7XG4gMjYzOlx0fVxuIDI2NDpcdEVYUE9SVF9TWU1CT0woaW5fZGV2X2ZpbmlzaF9kZXN0cm95KTtcbiAyNjU6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwMDIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3NTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVXNlLUFmdGVyLUZyZWUgVnVsbmVyYWJpbGl0eSBpbiBNdWx0aWNhc3QgRGV2aWNlIEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpbiB0aGUgbXVsdGljYXN0IGRldmljZSBtYW5hZ2VtZW50LiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoYXQgYGtmcmVlKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoaWRldi0mZ3Q7bWNfaGFzaCwgMSkpO2AgaXMgaGFwcGVuaW5nIGluIGBpbl9kZXZfZnJlZV9yY3VgLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBsaWVzIGluIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBpcF9tY19kZXN0cm95X2RldmAgYW5kIGBtY19oYXNoYC4gYGlwX21jX2Rlc3Ryb3lfZGV2YCBpcyByZXNwb25zaWJsZSBmb3IgY2xlYXJpbmcgYGluX2Rldi0mZ3Q7bWNfbGlzdGAuICBUaGUga2V5IG9ic2VydmF0aW9uIGlzIHRoYXQgaWYgYGlwX21jX2Rlc3Ryb3lfZGV2YCAqZG9lc24mIzM5O3QqIGFsc28gcmVtb3ZlIGVsZW1lbnRzIGZyb20gYG1jX2hhc2hgLCB0aGVuIGBtY19oYXNoYCBpcyBsZWZ0IHdpdGggZGFuZ2xpbmcgcG9pbnRlcnMgdG8gdGhlIGBpcF9tY19saXN0YCBlbGVtZW50cy4KCkFuZCwgb2YgY291cnNlLCBgaXBfbWNfZGVzdHJveV9kZXZgIGNhbGxzIGBpcF9tYV9wdXQoaSlgIHdoaWNoIGZyZWVzIHRoZXNlIGBpcF9tY19saXN0YCBlbGVtZW50cyEgVGhpcyBtZWFucyBgbWNfaGFzaGAgZW5kcyB1cCBjb250YWluaW5nIHBvaW50ZXJzIHRvIG1lbW9yeSB0aGF0JiMzOTtzIGJlZW4gZnJlZWQuICBTbywgdGhlIHF1ZXN0aW9uIGlzLCBpcyBgbWNfaGFzaGAgYWNjZXNzZWQgKmFmdGVyKiBgaXBfbWNfZGVzdHJveV9kZXZgPwoKWWVzLCBgaW5fZGV2YCBpcyBzdGlsbCBhbGl2ZSB1bnRpbCBgaW5fZGV2X3B1dGAgZHJvcHMgaXRzIHJlZmVyZW5jZSBjb3VudCB0byB6ZXJvLiBDcnVjaWFsbHksIHRoZXJlIGNhbiBiZSBjb25jdXJyZW50IFJDVSByZWFkZXJzIGFjY2Vzc2luZyBgbWNfaGFzaGAuICBBbmQsIHllcywgYGlwX2NoZWNrX21jX3JjdWAgYWNjZXNzZXMgYG1jX2hhc2hgIHVuZGVyIFJDVS4gVGhpcyBpcyB0aGUgY3J1eCEgSWYgYGlwX21jX2Rlc3Ryb3lfZGV2YCBmcmVlcyB0aGUgZWxlbWVudHMsIGJ1dCBsZWF2ZXMgdGhlaXIgcG9pbnRlcnMgaW4gYG1jX2hhc2hgLCBhbiBSQ1UgcmVhZGVyIGNvdWxkIHBvdGVudGlhbGx5IGFjY2VzcyBhIGZyZWVkIGVsZW1lbnQuCgpIb2xkIG9uIGEgbWludXRlLCBgaXBfbWFfcHV0YCB1c2VzIGBrZnJlZV9yY3VgLCBzbyB0aGUgZWxlbWVudCBpc24mIzM5O3QgKmltbWVkaWF0ZWx5KiBmcmVlZDsgaXQmIzM5O3MgZnJlZWQgYWZ0ZXIgdGhlIFJDVSBncmFjZSBwZXJpb2QuIEJ1dCwgYG1jX2hhc2hgIGl0c2VsZiBpcyBmcmVlZCBpbiBgaW5fZGV2X2ZyZWVfcmN1YCwgd2hpY2ggYWxzbyBoYXBwZW5zIGFmdGVyIGFuIFJDVSBncmFjZSBwZXJpb2QuICBTbywgdGhlIGVsZW1lbnRzIHNob3VsZCwgdGVjaG5pY2FsbHksIHN0aWxsIGJlIHZhbGlkIHdoaWxlIGBtY19oYXNoYCBpdHNlbGYgaXMgcmVmZXJlbmNlZC4KCkhvd2V2ZXIsIGlmIGBtY19oYXNoYCBpcyBub3QgY2xlYXJlZCBhbmQgc29tZW9uZSBhdHRlbXB0cyB0byBhZGQgYmFjayB0byBgbWNfbGlzdGA/IE5vLCBubywgYGluX2Rldi0mZ3Q7ZGVhZCA9IDFgIGdldHMgc2V0IGJlZm9yZSBgaXBfbWNfZGVzdHJveV9kZXZgIHdoaWNoIHByZXZlbnRzIHRoaXMuCgpTbywgdGhlICpyZWFsKiBpc3N1ZSBpcyB0aGF0IGBpcF9tY19kZXN0cm95X2RldmAgcmVtb3ZlcyBlbGVtZW50cyBmcm9tIGBtY19saXN0YCBidXQgKm5vdCogZnJvbSBgbWNfaGFzaGAuIElmIHdlIHRyeSB0byBhZGQgYSBuZXcgZWxlbWVudCwgdGhhdCYjMzk7cyBibG9ja2VkIGJ5IHRoZSBgZGVhZGAgZmxhZy4gSWYgYGlwX2NoZWNrX21jX3JjdWAgaXMgY2FsbGVkPyBJdCB3aWxsIGl0ZXJhdGUgb3ZlciBgbWNfaGFzaGAuICBUaGUgZWxlbWVudHMgaW4gYG1jX2hhc2hgIGFyZSBmcmVlZCB2aWEgUkNVLCBidXQgaWYgYGlwX2NoZWNrX21jX3JjdWAgcnVucyAqYWZ0ZXIqIHRoZSBncmFjZSBwZXJpb2QsIGFuZCBgaW5fZGV2YCBpcyAqc3RpbGwgYWxpdmUqLCB3ZSBjb3VsZCBiZSBhY2Nlc3NpbmcgZnJlZWQgbWVtb3J5LgoKQW5kIGBpbl9kZXZgICpjb3VsZCogc3RpbGwgYmUgYWxpdmUgYmVjYXVzZSBzb21lb25lIGhvbGRzIGEgcmVmZXJlbmNlIHRvIGl0LiBGb3IgaW5zdGFuY2UsIGEgc29ja2V0IG1pZ2h0IGJlIGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gYGluX2RldmAuIFRoaXMgbWVhbnMgYGluX2RldmAgY2FuIG91dGxpdmUgdGhlIFJDVSBncmFjZSBwZXJpb2Qgb2YgdGhlIGBpcF9tY19saXN0YCBlbGVtZW50cy4gIFNvLCBgaXBfY2hlY2tfbWNfcmN1YCAod2hpY2ggKm9ubHkqIHJlcXVpcmVzIGFuIFJDVSByZWFkIGxvY2spIGNhbiBhY2Nlc3MgYGluX2Rldi0mZ3Q7bWNfaGFzaGAgYW5kIGZpbmQgdGhvc2UgZGFuZ2xpbmcgcG9pbnRlcnMhIEJvb20uCgpUaGlzIGlzIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gVGhlIHBhdGNoIGNvcnJlY3RseSBhZGRyZXNzZXMgdGhpcyBieSByZW1vdmluZyB0aGUgZWxlbWVudHMgZnJvbSBgbWNfaGFzaGAgd2l0aGluIGBpcF9tY19kZXN0cm95X2RldmAuIFRoaXMgcHJldmVudHMgdGhlIGRhbmdsaW5nIHBvaW50ZXJzLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgd29ydGggdGhvcm91Z2ggZnV6emluZyB3aXRoIHRoZSBsaXN0ZWQgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbnMuICBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIGBJUF9NVUxUSUNBU1RgIGlzICpyZWFsbHkqIG5lZWRlZCBmb3IgYGlwX2NoZWNrX21jX3JjdWAgdG8gYmUgYWN0aXZlLCBidXQgdGhpcyBsb29rcyBsaWtlIGEgZ29vZCBmaXghCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX2NoZWNrX21jX3JjdSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lnbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pZ21wLmM9MjgwMD12b2lkIGlwX21jX2Ryb3Bfc29ja2V0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjgyNS0vKiBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgKi9cbm5ldC9pcHY0L2lnbXAuYzoyODI2OmludCBpcF9jaGVja19tY19yY3Uoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgbWNfYWRkciwgX19iZTMyIHNyY19hZGRyLCB1OCBwcm90bylcbm5ldC9pcHY0L2lnbXAuYy0yODI3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4MDAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUgdGhpbmtpbmcgdGhyb3VnaCB0aGlzOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgaXBfY2hlY2tfbWNfcmN1YCBGdW5jdGlvbiBDYWxscyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZmlndXJlIG91dCB0aGUgbGFuZHNjYXBlIGFyb3VuZCBgaXBfY2hlY2tfbWNfcmN1YC4gS25vd2luZyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICp1c2VkKiBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBpbXBhY3QuIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcyB0byBnZXQgYSBncmFzcCBvbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIFVuZGVyc3RhbmRpbmcgY29udGV4dCBpcyBldmVyeXRoaW5nLCBzbyBsZXQmIzM5O3Mgc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZCBhbmQgd2hhdCBzdXJyb3VuZGluZyBjb2RlIGxvb2tzIGxpa2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX2NoZWNrX21jX3JjdSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pZ21wLmM9MjgwMD12b2lkIGlwX21jX2Ryb3Bfc29ja2V0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjgyNS0vKiBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgKi9cbm5ldC9pcHY0L2lnbXAuYzoyODI2OmludCBpcF9jaGVja19tY19yY3Uoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgbWNfYWRkciwgX19iZTMyIHNyY19hZGRyLCB1OCBwcm90bylcbm5ldC9pcHY0L2lnbXAuYy0yODI3LXtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTI0OTE9aXBfcm91dGVfaW5wdXRfcmN1KHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBkYWRkciwgX19iZTMyIHNhZGRyLFxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMjUxMy1cbm5ldC9pcHY0L3JvdXRlLmM6MjUxNDpcdFx0b3VyID0gaXBfY2hlY2tfbWNfcmN1KGluX2RldiwgZGFkZHIsIHNhZGRyLFxubmV0L2lwdjQvcm91dGUuYy0yNTE1LVx0XHRcdFx0ICAgICAgaXBfaGRyKHNrYiktXHUwMDNlcHJvdG9jb2wpO1xuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMjUyMi1cdFx0XHRpZiAobDNfaW5fZGV2KVxubmV0L2lwdjQvcm91dGUuYzoyNTIzOlx0XHRcdFx0b3VyID0gaXBfY2hlY2tfbWNfcmN1KGwzX2luX2RldiwgZGFkZHIsIHNhZGRyLFxubmV0L2lwdjQvcm91dGUuYy0yNTI0LVx0XHRcdFx0XHRcdCAgICAgIGlwX2hkcihza2IpLVx1MDAzZXByb3RvY29sKTtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTI1NTk9c3RhdGljIHN0cnVjdCBydGFibGUgKl9fbWtyb3V0ZV9vdXRwdXQoY29uc3Qgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTI1OTktXHRcdGZsYWdzIHw9IFJUQ0ZfTVVMVElDQVNUIHwgUlRDRl9MT0NBTDtcbm5ldC9pcHY0L3JvdXRlLmM6MjYwMDpcdFx0aWYgKCFpcF9jaGVja19tY19yY3UoaW5fZGV2LCBmbDQtXHUwMDNlZGFkZHIsIGZsNC1cdTAwM2VzYWRkcixcbm5ldC9pcHY0L3JvdXRlLmMtMjYwMS1cdFx0XHRcdCAgICAgZmw0LVx1MDAzZWZsb3dpNF9wcm90bykpXG4tLVxubmV0L2lwdjQvdWRwLmM9Mjc2MD1lbnVtIHNrYl9kcm9wX3JlYXNvbiB1ZHBfdjRfZWFybHlfZGVtdXgoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC91ZHAuYy0yNzg0LVxubmV0L2lwdjQvdWRwLmM6Mjc4NTpcdFx0b3VycyA9IGlwX2NoZWNrX21jX3JjdShpbl9kZXYsIGlwaC1cdTAwM2VkYWRkciwgaXBoLVx1MDAzZXNhZGRyLFxubmV0L2lwdjQvdWRwLmMtMjc4Ni1cdFx0XHRcdCAgICAgICBpcGgtXHUwMDNlcHJvdG9jb2wpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDYwMAoJCQkJCQkJb3V0cHV0OiAyMTYKCQkJCQkJCXRob3VnaHRzOiAyMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBNdWx0aWNhc3QgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgc3RlbXMgZnJvbSB0aGUgcm91dGluZyBhbmQgVURQIGVhcmx5IGRlbXV4LCBtZWFuaW5nIGl0JiMzOTtzIGhpZ2hseSBhY2Nlc3NpYmxlIGFuZCBjb3VsZCBjYXVzZSBzaWduaWZpY2FudCBpc3N1ZXMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpczogaXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cywgZ2l2ZW4gdGhlIHZ1bG5lcmFiaWxpdHksIHNob3VsZCBiZSB0aGVzZSBzcGVjaWZpYyBmdW5jdGlvbnM6IGBpcF9tY19kZXN0cm95X2RldmAsIGBpcF9jaGVja19tY19yY3VgLCBgaXBfbWNfaGFzaF9yZW1vdmVgLCBgaXBfbWNfaGFzaF9hZGRgLCBgaW5ldGRldl9kZXN0cm95YCwgYF9fX19pcF9tY19pbmNfZ3JvdXBgLCBhbmQgYF9faXBfbWNfZGVjX2dyb3VwYC4gVGhlc2UgYXJlIGNsZWFybHkgdGhlIGtleSBhcmVhcyBpbnZvbHZlZCBpbiB0aGUgbXVsdGljYXN0IGdyb3VwIG1hbmFnZW1lbnQsIGVzcGVjaWFsbHkgYXJvdW5kIGRldmljZSBkZXN0cnVjdGlvbiBhbmQgaGFzaCB0YWJsZSBvcGVyYXRpb25zLgoKVGhlIGlzc3VlLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gTXVsdGljYXN0IGdyb3VwcyBhcmUgYmVpbmcgcHJvcGVybHkgcmVtb3ZlZCBmcm9tIHRoZSBkZXZpY2UmIzM5O3MgbGlzdCwgYnV0IHRoZSBjb3JyZXNwb25kaW5nIGVudHJpZXMgaW4gdGhlIGhhc2ggdGFibGUgcmVtYWluLiBJZiB0aGUgYGluX2RldmljZWAgaW5zdGFuY2Ugb3V0bGl2ZXMgdGhlIFJDVSBncmFjZSBwZXJpb2Qg4oCTIHdoaWNoIGNhbiBlYXNpbHkgaGFwcGVuIGR1ZSB0byBhIHNvY2tldCBob2xkaW5nIGEgcmVmZXJlbmNlIOKAkyB0aGVuIGBpcF9jaGVja19tY19yY3VgIGNvdWxkIGJlIGNhbGxlZCwgYW5kIGl0IHdvdWxkIGFjY2VzcyB0aGVzZSBkYW5nbGluZyBwb2ludGVycyBpbiB0aGUgYG1jX2hhc2hgIHRhYmxlLiBUaGlzIGlzIGEgZnVuZGFtZW50YWwgZnVuY3Rpb25hbCBmbGF3IGluIHRoZSBJUHY0IG11bHRpY2FzdCBpbXBsZW1lbnRhdGlvbi4KClRoZSBrZXkgY29uZmlndXJhdGlvbiB0byBlbmFibGUgaGVyZSBpcyBgSVBfTVVMVElDQVNUYCwgZW5zdXJpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgZXZlbiBhdmFpbGFibGUgdG8gYmUgdGFyZ2V0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9NVUxUSUNBU1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF9tY19kZXN0cm95X2RldiYjMzQ7LAogICAgJiMzNDtpcF9jaGVja19tY19yY3UmIzM0OywKICAgICYjMzQ7aXBfbWNfaGFzaF9yZW1vdmUmIzM0OywKICAgICYjMzQ7aXBfbWNfaGFzaF9hZGQmIzM0OywKICAgICYjMzQ7aW5ldGRldl9kZXN0cm95JiMzNDssCiAgICAmIzM0O19fX19pcF9tY19pbmNfZ3JvdXAmIzM0OywKICAgICYjMzQ7X19pcF9tY19kZWNfZ3JvdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgbXVsdGljYXN0IGdyb3VwcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBkZXZpY2UmIzM5O3MgYG1jX2xpc3RgIGR1cmluZyBkZXZpY2UgZGVzdHJ1Y3Rpb24gYnV0IGFyZSBsZWZ0IGluIHRoZSBgbWNfaGFzaGAgdGFibGUuIFRoaXMgY2FuIGxlYWQgdG8gYSB1c2UtYWZ0ZXItZnJlZSBpZiB0aGUgYGluX2RldmljZWAgb3V0bGl2ZXMgdGhlIFJDVSBncmFjZSBwZXJpb2QgKGUuZy4sIGR1ZSB0byBhIHNvY2tldCBob2xkaW5nIGEgcmVmZXJlbmNlKSBhbmQgYGlwX2NoZWNrX21jX3JjdWAgaXMgY2FsbGVkLCBhY2Nlc3NpbmcgdGhlIGRhbmdsaW5nIHBvaW50ZXJzIGluIGBtY19oYXNoYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIElQdjQgbXVsdGljYXN0IGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9NVUxUSUNBU1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF9tY19kZXN0cm95X2RldiYjMzQ7LAogICAgJiMzNDtpcF9jaGVja19tY19yY3UmIzM0OywKICAgICYjMzQ7aXBfbWNfaGFzaF9yZW1vdmUmIzM0OywKICAgICYjMzQ7aXBfbWNfaGFzaF9hZGQmIzM0OywKICAgICYjMzQ7aW5ldGRldl9kZXN0cm95JiMzNDssCiAgICAmIzM0O19fX19pcF9tY19pbmNfZ3JvdXAmIzM0OywKICAgICYjMzQ7X19pcF9tY19kZWNfZ3JvdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgbXVsdGljYXN0IGdyb3VwcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBkZXZpY2UmIzM5O3MgYG1jX2xpc3RgIGR1cmluZyBkZXZpY2UgZGVzdHJ1Y3Rpb24gYnV0IGFyZSBsZWZ0IGluIHRoZSBgbWNfaGFzaGAgdGFibGUuIFRoaXMgY2FuIGxlYWQgdG8gYSB1c2UtYWZ0ZXItZnJlZSBpZiB0aGUgYGluX2RldmljZWAgb3V0bGl2ZXMgdGhlIFJDVSBncmFjZSBwZXJpb2QgKGUuZy4sIGR1ZSB0byBhIHNvY2tldCBob2xkaW5nIGEgcmVmZXJlbmNlKSBhbmQgYGlwX2NoZWNrX21jX3JjdWAgaXMgY2FsbGVkLCBhY2Nlc3NpbmcgdGhlIGRhbmdsaW5nIHBvaW50ZXJzIGluIGBtY19oYXNoYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIElQdjQgbXVsdGljYXN0IGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzM6NDcuNjc0NTA5NDQ1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MjIwODgxMTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX01VTFRJQ0FTVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX21jX2Rlc3Ryb3lfZGV2XCIsXG4gICAgXCJpcF9jaGVja19tY19yY3VcIixcbiAgICBcImlwX21jX2hhc2hfcmVtb3ZlXCIsXG4gICAgXCJpcF9tY19oYXNoX2FkZFwiLFxuICAgIFwiaW5ldGRldl9kZXN0cm95XCIsXG4gICAgXCJfX19faXBfbWNfaW5jX2dyb3VwXCIsXG4gICAgXCJfX2lwX21jX2RlY19ncm91cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIG11bHRpY2FzdCBncm91cHMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgZGV2aWNlJ3MgYG1jX2xpc3RgIGR1cmluZyBkZXZpY2UgZGVzdHJ1Y3Rpb24gYnV0IGFyZSBsZWZ0IGluIHRoZSBgbWNfaGFzaGAgdGFibGUuIFRoaXMgY2FuIGxlYWQgdG8gYSB1c2UtYWZ0ZXItZnJlZSBpZiB0aGUgYGluX2RldmljZWAgb3V0bGl2ZXMgdGhlIFJDVSBncmFjZSBwZXJpb2QgKGUuZy4sIGR1ZSB0byBhIHNvY2tldCBob2xkaW5nIGEgcmVmZXJlbmNlKSBhbmQgYGlwX2NoZWNrX21jX3JjdWAgaXMgY2FsbGVkLCBhY2Nlc3NpbmcgdGhlIGRhbmdsaW5nIHBvaW50ZXJzIGluIGBtY19oYXNoYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIElQdjQgbXVsdGljYXN0IGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNjozMzo0Ny42NzQ1MTMyNDVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjkxNDI3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM3YmFhYjZiMWI2MzQwM2VjZTViOTNjNmNmMmY3ZjU1ZmM3MjdmOTdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMiAwNjozMzo0NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pZ21wLmMgYi9uZXQvaXB2NC9pZ21wLmNcXG5pbmRleCBiNjMzN2E0N2MxNDE4NS4uZDUyMGVhNGY2ZDE0MmQgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaWdtcC5jXFxuKysrIGIvbmV0L2lwdjQvaWdtcC5jXFxuQEAgLTE5MjIsNiArMTkyMiw3IEBAIHZvaWQgaXBfbWNfZGVzdHJveV9kZXYoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxcbiAjZW5kaWZcXG4gXFxuIFxcdHdoaWxlICgoaSA9IHJ0bmxfZGVyZWZlcmVuY2UoaW5fZGV2LVxcdTAwM2VtY19saXN0KSkgIT0gTlVMTCkge1xcbitcXHRcXHRpcF9tY19oYXNoX3JlbW92ZShpbl9kZXYsIGkpO1xcbiBcXHRcXHRpbl9kZXYtXFx1MDAzZW1jX2xpc3QgPSBpLVxcdTAwM2VuZXh0X3JjdTtcXG4gXFx0XFx0V1JJVEVfT05DRShpbl9kZXYtXFx1MDAzZW1jX2NvdW50LCBpbl9kZXYtXFx1MDAzZW1jX2NvdW50IC0gMSk7XFxuIFxcdFxcdGlwX21jX2NsZWFyX3NyYyhpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzM6NDguMTY4MTExOTk0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDU3MjcyNjU0NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfTVVMVElDQVNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfbWNfZGVzdHJveV9kZXZcIixcbiAgICBcImlwX2NoZWNrX21jX3JjdVwiLFxuICAgIFwiaXBfbWNfaGFzaF9yZW1vdmVcIixcbiAgICBcImlwX21jX2hhc2hfYWRkXCIsXG4gICAgXCJpbmV0ZGV2X2Rlc3Ryb3lcIixcbiAgICBcIl9fX19pcF9tY19pbmNfZ3JvdXBcIixcbiAgICBcIl9faXBfbWNfZGVjX2dyb3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgbXVsdGljYXN0IGdyb3VwcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBkZXZpY2UncyBgbWNfbGlzdGAgZHVyaW5nIGRldmljZSBkZXN0cnVjdGlvbiBidXQgYXJlIGxlZnQgaW4gdGhlIGBtY19oYXNoYCB0YWJsZS4gVGhpcyBjYW4gbGVhZCB0byBhIHVzZS1hZnRlci1mcmVlIGlmIHRoZSBgaW5fZGV2aWNlYCBvdXRsaXZlcyB0aGUgUkNVIGdyYWNlIHBlcmlvZCAoZS5nLiwgZHVlIHRvIGEgc29ja2V0IGhvbGRpbmcgYSByZWZlcmVuY2UpIGFuZCBgaXBfY2hlY2tfbWNfcmN1YCBpcyBjYWxsZWQsIGFjY2Vzc2luZyB0aGUgZGFuZ2xpbmcgcG9pbnRlcnMgaW4gYG1jX2hhc2hgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgSVB2NCBtdWx0aWNhc3QgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzdiYWFiNmIxYjYzNDAzZWNlNWI5M2M2Y2YyZjdmNTVmYzcyN2Y5N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMDY6MzM6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pZ21wLmMgYi9uZXQvaXB2NC9pZ21wLmNcbmluZGV4IGI2MzM3YTQ3YzE0MTg1Li5kNTIwZWE0ZjZkMTQyZCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lnbXAuY1xuKysrIGIvbmV0L2lwdjQvaWdtcC5jXG5AQCAtMTkyMiw2ICsxOTIyLDcgQEAgdm9pZCBpcF9tY19kZXN0cm95X2RldihzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXG4gI2VuZGlmXG4gXG4gXHR3aGlsZSAoKGkgPSBydG5sX2RlcmVmZXJlbmNlKGluX2Rldi1cdTAwM2VtY19saXN0KSkgIT0gTlVMTCkge1xuK1x0XHRpcF9tY19oYXNoX3JlbW92ZShpbl9kZXYsIGkpO1xuIFx0XHRpbl9kZXYtXHUwMDNlbWNfbGlzdCA9IGktXHUwMDNlbmV4dF9yY3U7XG4gXHRcdFdSSVRFX09OQ0UoaW5fZGV2LVx1MDAzZW1jX2NvdW50LCBpbl9kZXYtXHUwMDNlbWNfY291bnQgLSAxKTtcbiBcdFx0aXBfbWNfY2xlYXJfc3JjKGkpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzM6NDguMTY4MTEzMjE0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIxNDgxOTQyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgZ2l2ZW4gdGhpcyBwYXRjaDpcblxuKipBbmFseXppbmcgYSBOZXR3b3JrIE11bHRpY2FzdCBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBwYXRjaCB0aGF0J3MgYmVlbiBhcHBsaWVkLCBhbmQgaXQncyB0b3VjaGluZyBgbmV0L2lwdjQvaWdtcC5jYC4gVGhhdCBmaWxlJ3MgY2xlYXJseSBkZWFsaW5nIHdpdGggSW50ZXJuZXQgR3JvdXAgTWFuYWdlbWVudCBQcm90b2NvbCAoSUdNUCksIHNvIHRoaXMgaXMgbXVsdGljYXN0LXJlbGF0ZWQuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSB0aGUgYWRkaXRpb24gb2YgYGlwX21jX2hhc2hfcmVtb3ZlKGluX2RldiwgaSk7YCB3aXRoaW4gdGhlIGBpcF9tY19kZXN0cm95X2RldmAgZnVuY3Rpb24uIE15IGV4cGVydCBleWUgaW1tZWRpYXRlbHkgc2F5cywgdGhpcyBpcyBsaWtlbHkgdG8gY2xlYW4gdXAgc29tZSBtdWx0aWNhc3QtcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMgd2hlbiBhbiBpbnRlcmZhY2UgaXMgYmVpbmcgZGVzdHJveWVkLlxuXG5MZXQncyBkaXZlIGludG8gYGlwX21jX2Rlc3Ryb3lfZGV2YCBpdHNlbGYgd2l0aGluIGBuZXQvaXB2NC9pZ21wLmNgLiBNeSBpbml0aWFsIGd1ZXNzIGlzIHRoYXQgYGlwX21jX2Rlc3Ryb3lfZGV2YCBoYW5kbGVzIHRoZSBjbGVhbnVwIHdvcmsgd2hlbiBhbiBJUCBtdWx0aWNhc3QgZGV2aWNlIGlzIG5vIGxvbmdlciByZXF1aXJlZC4gSXQncyBhbG1vc3QgY2VydGFpbmx5IGNhbGxlZCB3aGVuIGFuIGludGVyZmFjZSBnb2VzIGRvd24sIGlzIHJlbW92ZWQsIG9yIGlzIG90aGVyd2lzZSBubyBsb25nZXIgYWN0aXZlIGluIGEgbXVsdGljYXN0IGNvbnRleHQuIFRoZSBwcmVzZW5jZSBvZiBgaXBfbWNfaGFzaF9yZW1vdmVgIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgbXVsdGljYXN0IGdyb3VwIG1lbWJlcnNoaXBzIGFuZCB0aGVpciBhc3NvY2lhdGVkIGRhdGEgYXJlIG1hbmFnZWQgdGhyb3VnaCBhIGhhc2ggdGFibGUuIFRoZSBwYXRjaCBpcyB0aGVuIGFkZGluZyB0aGlzIGxpbmUsIHNvIHRoYXQgd2hlbiBhIGRldmljZSBpcyByZW1vdmVkLCBhc3NvY2lhdGVkIGl0ZW1zIGFyZSByZW1vdmVkIGZyb20gdGhpcyBoYXNoLiBUaGlzIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgaGFzaCBob2xkcywgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgYGlwX21jX2hhc2hfcmVtb3ZlYCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdCwgYnV0IG15IGZpcnN0IGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIGEgY2xlYW4gYW5kIHJlYXNvbmFibGUgZW5oYW5jZW1lbnQgdG8gcHJldmVudCBtZW1vcnkgbGVha3Mgb3Igc3RhbGUgZW50cmllcywgaW1wcm92aW5nIG92ZXJhbGwgc3lzdGVtIHN0YWJpbGl0eSwgd2hpY2ggc2hvdWxkIGJlIHZlcnkgd2VsY29tZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTg0OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzM6NTIuMzgyOTM0Mzk2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MzY4OTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX21jX2Rlc3Ryb3lfZGV2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lnbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pZ21wLmM9MTg5MT12b2lkIGlwX21jX3VwKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xOTExLVxcbm5ldC9pcHY0L2lnbXAuYzoxOTEyOnZvaWQgaXBfbWNfZGVzdHJveV9kZXYoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxcbm5ldC9pcHY0L2lnbXAuYy0xOTEzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzM6NTIuNDYxMzA5MjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDkzMTAyMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJR01QIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgSUdNUCB3b3JrcyBhdCBhIGxvdyBsZXZlbCBpbiB0aGUga2VybmVsLiBgbmV0L2lwdjQvaWdtcC5jYCBpcyB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydC4gR2l2ZW4gd2hhdCBJJ20gbG9va2luZyBhdCwgbGV0J3MgemVybyBpbiBvbiBsaW5lIDE5MTIuIFRoYXQncyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgb2Ygc29tZSBmdW5jdGlvbiBvciBjb25kaXRpb25hbCB0aGF0IGRlYWxzIHdpdGggbWVtYmVyc2hpcCByZXBvcnQgcHJvY2Vzc2luZyBvciBwb3NzaWJseSBncm91cCBtYW5hZ2VtZW50IHJlc2lkZXMuIEl0J3Mgb2Z0ZW4gaGVscGZ1bCB0byBwaW5wb2ludCBzcGVjaWZpYyBsaW5lcyB3aGVuIGRpc3NlY3RpbmcgYSBjb21wbGV4IHBpZWNlIG9mIGNvZGUsIGFzIGl0IGhlbHBzIHRyYWNlIHRoZSBsb2dpYyBhbmQgdW5kZXJzdGFuZCBob3cgZGF0YSBhbmQgY29udHJvbCBmbG93cy4gSSBhbnRpY2lwYXRlIGl0IGRlYWxzIHdpdGggaG93IHRoZSBJR01QIG1vZHVsZSBpbnRlcmFjdHMgd2l0aCB0aGUgbmV0d29yayBzdGFjay4gSSdsbCBiZSBsb29raW5nIGZvciBpbnRlcmFjdGlvbiB3aXRoIHRoZSByb3V0aW5nIHRhYmxlIGFuZCBwb3RlbnRpYWxseSB3aXRoIHRoZSBuZXR3b3JrIGludGVyZmFjZSB0byBzZWUgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBqb2lucywgbGVhdmVzIGFuZCB1cGRhdGVzIG9mIG11bHRpY2FzdCBncm91cCBtZW1iZXJzaGlwcy4gS25vd2luZyB0aGUgbGluZSBudW1iZXIgd2lsbCBhbGxvdyBtZSB0byBpbW1lZGlhdGVseSBqdW1wIHRvIHRoZSByZWxldmFudCBjb2RlIGFuZCBzdGFydCBkZWNpcGhlcmluZyB0aGUgbnVhbmNlcyBvZiB0aGUgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNjozMzo1NS41NTQ0MTMzN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pZ21wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTkwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTkwMDpcXHRcXHRmb3JfZWFjaF9wbWNfcnRubChpbl9kZXYsIHBtYykge1xcbjE5MDE6XFx0I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG4xOTAyOlxcdFxcdFxcdGlnbXB2M19kZWxfZGVscmVjKGluX2RldiwgcG1jKTtcXG4xOTAzOlxcdCNlbmRpZlxcbjE5MDQ6XFx0XFx0XFx0aWdtcF9ncm91cF9hZGRlZChwbWMpO1xcbjE5MDU6XFx0XFx0fVxcbjE5MDY6XFx0fVxcbjE5MDc6XFx0XFxuMTkwODpcXHQvKlxcbjE5MDk6XFx0ICpcXHREZXZpY2UgaXMgYWJvdXQgdG8gYmUgZGVzdHJveWVkOiBjbGVhbiB1cC5cXG4xOTEwOlxcdCAqL1xcbjE5MTE6XFx0XFxuMTkxMjpcXHR2b2lkIGlwX21jX2Rlc3Ryb3lfZGV2KHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldilcXG4xOTEzOlxcdHtcXG4xOTE0OlxcdFxcdHN0cnVjdCBpcF9tY19saXN0ICppO1xcbjE5MTU6XFx0XFxuMTkxNjpcXHRcXHRBU1NFUlRfUlROTCgpO1xcbjE5MTc6XFx0XFxuMTkxODpcXHRcXHQvKiBEZWFjdGl2YXRlIHRpbWVycyAqL1xcbjE5MTk6XFx0XFx0aXBfbWNfZG93bihpbl9kZXYpO1xcbjE5MjA6XFx0I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG4xOTIxOlxcdFxcdGlnbXB2M19jbGVhcl9kZWxyZWMoaW5fZGV2KTtcXG4xOTIyOlxcdCNlbmRpZlxcbjE5MjM6XFx0XFxuMTkyNDpcXHRcXHR3aGlsZSAoKGkgPSBydG5sX2RlcmVmZXJlbmNlKGluX2Rldi1cXHUwMDNlbWNfbGlzdCkpICE9IE5VTEwpIHtcXG4xOTI1OlxcdFxcdFxcdGlwX21jX2hhc2hfcmVtb3ZlKGluX2RldiwgaSk7XFxuMTkyNjpcXHRcXHRcXHRpbl9kZXYtXFx1MDAzZW1jX2xpc3QgPSBpLVxcdTAwM2VuZXh0X3JjdTtcXG4xOTI3OlxcdFxcdFxcdFdSSVRFX09OQ0UoaW5fZGV2LVxcdTAwM2VtY19jb3VudCwgaW5fZGV2LVxcdTAwM2VtY19jb3VudCAtIDEpO1xcbjE5Mjg6XFx0XFx0XFx0aXBfbWNfY2xlYXJfc3JjKGkpO1xcbjE5Mjk6XFx0XFx0XFx0aXBfbWFfcHV0KGkpO1xcbjE5MzA6XFx0XFx0fVxcbjE5MzE6XFx0fVxcbjE5MzI6XFx0XFxuMTkzMzpcXHQvKiBSVE5MIGlzIGxvY2tlZCAqL1xcbjE5MzQ6XFx0c3RhdGljIHN0cnVjdCBpbl9kZXZpY2UgKmlwX21jX2ZpbmRfZGV2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX21yZXFuICppbXIpXFxuMTkzNTpcXHR7XFxuMTkzNjpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDtcXG4xOTM3OlxcdFxcdHN0cnVjdCBpbl9kZXZpY2UgKmlkZXYgPSBOVUxMO1xcbjE5Mzg6XFx0XFxuMTkzOTpcXHRcXHRpZiAoaW1yLVxcdTAwM2VpbXJfaWZpbmRleCkge1xcbjE5NDA6XFx0XFx0XFx0aWRldiA9IGluZXRkZXZfYnlfaW5kZXgobmV0LCBpbXItXFx1MDAzZWltcl9pZmluZGV4KTtcXG4xOTQxOlxcdFxcdFxcdHJldHVybiBpZGV2O1xcbjE5NDI6XFx0XFx0fVxcbjE5NDM6XFx0XFx0aWYgKGltci1cXHUwMDNlaW1yX2FkZHJlc3Muc19hZGRyKSB7XFxuMTk0NDpcXHRcXHRcXHRkZXYgPSBfX2lwX2Rldl9maW5kKG5ldCwgaW1yLVxcdTAwM2VpbXJfYWRkcmVzcy5zX2FkZHIsIGZhbHNlKTtcXG4xOTQ1OlxcdFxcdFxcdGlmICghZGV2KVxcbjE5NDY6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTk0NzpcXHRcXHR9XFxuMTk0ODpcXHRcXG4xOTQ5OlxcdFxcdGlmICghZGV2KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjMzOjU1LjU1NDU4NTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTgyOTI1NzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJ1ZyBGaXg6IE11bHRpY2FzdCBIYXNoIFRhYmxlIFVwZGF0ZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgaXQncyBhZGRpbmcgYGlwX21jX2hhc2hfcmVtb3ZlKGluX2RldiwgaSk7YCB0byBgaXBfbWNfZGVzdHJveV9kZXZgLiBUaGlzIGxvb2tzIGxpa2UgYSBwdXJlbHkgZnVuY3Rpb25hbCBjaGFuZ2UsIHdoaWNoIGlzIGEgZ29vZCBzaWduLCBlc3BlY2lhbGx5IGlmIGl0J3MgYWRkcmVzc2luZyBhIGJ1Zy4gVGhlIGRlc2NyaXB0aW9uIGV4cGxpY2l0bHkgbWVudGlvbnMgdGhlIG11bHRpY2FzdCBsaXN0IGhhc2ggdGFibGUgbm90IGJlaW5nIHVwZGF0ZWQgZHVyaW5nIGRldmljZSBkZXN0cnVjdGlvbi4gUmlnaHQsIHRoYXQncyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gaXNzdWUgcG90ZW50aWFsbHkgbGVhZGluZyB0byBtZW1vcnkgbGVha3Mgb3Igc3RhbGUgZW50cmllcy4gV2UgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQgdG8gcmVwcm9kdWNlIG9yIHRyaWdnZXIgdGhpcyBpc3N1ZS5cblxuTm93LCBsZXQncyBzZWUgd2hlcmUgdGhpcyBpcyBpbXBsZW1lbnRlZDsgYGlwX21jX2Rlc3Ryb3lfZGV2YCBpcyBsaWtlbHkgaW4gYG5ldC9pcHY0L2lnbXAuY2AuIExldCdzIGNoZWNrIHRoZSBgbmV0L2lwdjQvTWFrZWZpbGVgIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgaWdtcC5jYCBmaWxlIGlzIGJ1aWx0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbnkgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMgb3IgY29tcGlsZS10aW1lIG9wdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uJ3MgYmVoYXZpb3IuIFRoYXTigJlzIHRoZSBzdGFydGluZyBwb2ludCB0byBldmFsdWF0aW5nIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDQyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzM6NTkuNTM3NTEzMzc4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODgwNTk5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZ21wLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcXFxcbi0tXFxubmV0L2lwdjQvTWFrZWZpbGUtMTMtXFx0ICAgICB0Y3Bfb2ZmbG9hZC5vIHRjcF9wbGIubyBkYXRhZ3JhbS5vIHJhdy5vIHVkcC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZToxNDpcXHQgICAgIHVkcF9vZmZsb2FkLm8gYXJwLm8gaWNtcC5vIGRldmluZXQubyBhZl9pbmV0Lm8gaWdtcC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZS0xNS1cXHQgICAgIGZpYl9mcm9udGVuZC5vIGZpYl9zZW1hbnRpY3MubyBmaWJfdHJpZS5vIGZpYl9ub3RpZmllci5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzM6NTkuNzY2MzIzNjgyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEwMzI3MDk0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQdjQgTXVsdGljYXN0IERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyBgaWdtcC5vYCBpcyBiZWluZyBjb21waWxlZCBhdXRvbWF0aWNhbGx5IGZvciBJUHY0LCB3aGljaCBtZWFucyB3ZSBuZWVkIHRvIGVuc3VyZSBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zIGFyZSBtZXQuIFNpbmNlIGBvYmoteWAgaXMgdXNlZCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgYWN0dWFsbHkgKnJlcXVpcmVkKi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYENPTkZJR19JTkVUYCBpcyB0aGUga2V5LCBvciBwZXJoYXBzIGV2ZW4gYENPTkZJR19JUF9NVUxUSUNBU1RgLiBMZXQncyBkaWcgaW4gYW5kIHNlZSBpZiBgaXBfbWNfZGVzdHJveV9kZXZgIGlzIGd1YXJkZWQgYnkgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBIbW0sIGl0IGxvb2tzIGxpa2UgYGlwX21jX2Rlc3Ryb3lfZGV2YCBpc24ndCBjb25kaXRpb25hbCBvbiBgQ09ORklHX0lQX01VTFRJQ0FTVGAgd2hpY2ggaXMgYSBnb29kIHNpZ24uIFRoZSBvbmx5IGZ1bmN0aW9uIEkgc2VlIHdpdGggdGhhdCBwcmVwcm9jZXNzb3IgbWFjcm8gaXMgYGlnbXB2M19jbGVhcl9kZWxyZWNgLCBub3QgdGhlIGZ1bmN0aW9uIEknbSBjb25jZXJuZWQgd2l0aC4gVGhhdCBzdWdnZXN0cyB0aGF0IGBDT05GSUdfSU5FVGAgc2hvdWxkIGJlIHN1ZmZpY2llbnQgYmVjYXVzZSBpdCdzIGFsd2F5cyBlbmFibGVkLiBXYWl0IGEgc2Vjb25kLCBzaW5jZSB3ZSBhcmUgdGFsa2luZyBhYm91dCBJR01QLCBgQ09ORklHX0lQX01VTFRJQ0FTVGAgKm1pZ2h0KiBzdGlsbCBiZSByZWxldmFudC4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlIGNoZWNrIHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZSB0byBiZSBjb21wbGV0ZWx5IGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NjUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzQ6MDMuODY5NTk2MDA2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODQyNTQ0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfTVVMVElDQVNUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZy00LSNcXG5uZXQvaXB2NC9LY29uZmlnOjU6Y29uZmlnIElQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L0tjb25maWctNi1cXHRib29sIFxcXCJJUDogbXVsdGljYXN0aW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNjozNDowMy45NTgwMzEwOThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgzOTYwNjM4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgZnVuY3Rpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbGVycyBvZiBgaXBfbWNfZGVzdHJveV9kZXZgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGlwX21jX2Rlc3Ryb3lfZGV2YCBpcyBiZWluZyB1c2VkLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIHJvbGUgd2l0aGluIHRoZSBzeXN0ZW0uIElzIGl0IGEgY2VudHJhbCBjb21wb25lbnQsIG9yIG9ubHkgYSBsaXR0bGUgdXNlZCB1dGlsaXR5IGZ1bmN0aW9uPyBUaGUgY2FsbCBzdGFjayB3aWxsIHRlbGwgbWUgdGhhdC4gSSdsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byBwZXJmb3JtIGEgc2VhcmNoIGZvciByZWZlcmVuY2VzLiBJIHdhbnQgdG8gYnVpbGQgYSB0aG9yb3VnaCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXBlbmRlbmNpZXMgb24gdGhpcyBmdW5jdGlvbi4gS25vd2xlZGdlIGlzIHBvd2VyLCBhbmQga25vd2luZyB3aGF0IHJlbGllcyBvbiBgaXBfbWNfZGVzdHJveV9kZXZgIGlzIHZpdGFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDM3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzQ6MDYuNzk3NjM5NjdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MDA4MTYwNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfbWNfZGVzdHJveV9kZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaWdtcC5oPTI4MD1leHRlcm4gdm9pZCBpcF9tY19pbml0X2RldihzdHJ1Y3QgaW5fZGV2aWNlICopO1xcbmluY2x1ZGUvbGludXgvaWdtcC5oOjI4MTpleHRlcm4gdm9pZCBpcF9tY19kZXN0cm95X2RldihzdHJ1Y3QgaW5fZGV2aWNlICopO1xcbmluY2x1ZGUvbGludXgvaWdtcC5oLTI4Mi1leHRlcm4gdm9pZCBpcF9tY191cChzdHJ1Y3QgaW5fZGV2aWNlICopO1xcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jPTMxND1zdGF0aWMgdm9pZCBpbmV0ZGV2X2Rlc3Ryb3koc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jLTMyNC1cXG5uZXQvaXB2NC9kZXZpbmV0LmM6MzI1OlxcdGlwX21jX2Rlc3Ryb3lfZGV2KGluX2Rldik7XFxubmV0L2lwdjQvZGV2aW5ldC5jLTMyNi1cXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xODkxPXZvaWQgaXBfbWNfdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTE5MTEtXFxubmV0L2lwdjQvaWdtcC5jOjE5MTI6dm9pZCBpcF9tY19kZXN0cm95X2RldihzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXFxubmV0L2lwdjQvaWdtcC5jLTE5MTMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNjozNDoxMC42OTg0NjEwODVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE3ODg4MDY2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIElQdjQgRGV2aWNlIERlc3RydWN0aW9uKipcblxuT2theSwgc28gYGlwX21jX2Rlc3Ryb3lfZGV2YCBpcyBjYWxsZWQgd2l0aGluIGBpbmV0ZGV2X2Rlc3Ryb3lgIHdpdGhpbiBgbmV0L2lwdjQvZGV2aW5ldC5jYC4gVGhhdCBtZWFucyB0aGlzIGlzIGEgKnJlYWwqIGNvZGUgcGF0aCwgaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB3aGVuIGFuIElQdjQgZGV2aWNlIGlzIGRlc3Ryb3llZC4gR29vZCwgd2UndmUgZ290IGEgdGFyZ2V0LlxuXG5UaGUgcXVlc3Rpb24gbm93IGlzLCB3aGF0IHNwZWNpZmljIGZ1bmN0aW9ucyBhcmUgbW9zdCBwcm9taXNpbmcgZm9yIGZ1enppbmcgYXJvdW5kIHRoaXMgYXJlYT8gT2J2aW91c2x5LCBgaXBfbWNfZGVzdHJveV9kZXZgIGlzIGF0IHRoZSB0b3Agb2YgdGhlIGxpc3QsIHNpbmNlIGl0J3MgdGhlIGRpcmVjdCBmdW5jdGlvbiB3ZSBrbm93IGlzIGludm9sdmVkLiBgaW5ldGRldl9kZXN0cm95YCBpdHNlbGYgaXMgYSBnb29kIGNhbmRpZGF0ZSB0b28sIGdpdmVuIHRoYXQgaXQncyB0aGUgaW1tZWRpYXRlIGNhbGxlci4gV2UgbmVlZCB0byBsb29rIGZvciBpbnRlcmVzdGluZyBzcG90cyBhbmQgaG9va3MsIGFuZCB0aGUgZGVzdHJ1Y3Rpb24gaXRzZWxmLlxuXG5CdXQgd2hhdCBhYm91dCB0aGUgc2V0dXA/IEl0J3MgbGlrZWx5IGludGVyZXN0aW5nIHRvIGZ1enogdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBzZXR0aW5nIHVwIHRoZSBtdWx0aWNhc3QgY29uZmlndXJhdGlvbiBiZWluZyBkZXN0cm95ZWQuIFdlIHNob3VsZCBhbHNvIGludmVzdGlnYXRlIGZ1bmN0aW9ucyBsaWtlIGBpcF9tY19oYXNoX2FkZGAgb3IgYGlwX21jX2luY19ncm91cGAsIHRvIGVuc3VyZSB0aGF0IHRoZSBwcm9jZXNzIGJlZm9yZSBkZXN0cnVjdGlvbiBpcyBzb3VuZCwgYW5kIHRoYXQgYW55dGhpbmcgdGhhdCBzZXRzIHVwIGRhdGEgaXMgYWxzbyBjbGVhbmVkIHVwIHdoZW4gdGhlIGRldmljZSBnb2VzIGF3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MjUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzQ6MTQuODc3MzQzNzY0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQ2NzQwOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfbWNfaGFzaF9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaWdtcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lnbXAuYz0xMzk5PXN0YXRpYyB1MzIgaXBfbWNfaGFzaChjb25zdCBzdHJ1Y3QgaXBfbWNfbGlzdCAqaW0pXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTQwMy1cXG5uZXQvaXB2NC9pZ21wLmM6MTQwNDpzdGF0aWMgdm9pZCBpcF9tY19oYXNoX2FkZChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsXFxubmV0L2lwdjQvaWdtcC5jLTE0MDUtXFx0XFx0XFx0ICAgc3RydWN0IGlwX21jX2xpc3QgKmltKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTE1MTg9c3RhdGljIHZvaWQgX19fX2lwX21jX2luY19ncm91cChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiBhZGRyLFxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTE1NzEtXFxubmV0L2lwdjQvaWdtcC5jOjE1NzI6XFx0aXBfbWNfaGFzaF9hZGQoaW5fZGV2LCBpbSk7XFxubmV0L2lwdjQvaWdtcC5jLTE1NzMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjM0OjE1LjA3MjAyNTg5NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTk5MDQzNTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBJUCBNdWx0aWNhc3QgR3JvdXAgSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCBzbyBgX19fX2lwX21jX2luY19ncm91cGAgaXMgY2xlYXJseSByZXNwb25zaWJsZSBmb3IgYWRkaW5nIHNvbWV0aGluZyB0byB0aGUgaGFzaCB0YWJsZS4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uIGFuZCBjb250ZXh0LCBJJ20gYXNzdW1pbmcgaXQncyBoYW5kbGluZyB0aGUgYWRkaXRpb24gb2YgYW4gSVAgbXVsdGljYXN0IGdyb3VwIGVudHJ5LiBJdCdzIHRoZSBzdGFuZGFyZCBpbmNyZW1lbnQtb2YtdGhlLWdyb3VwLWluLXRoZS1oYXNoLXRhYmxlIGZ1bmN0aW9uLiBNYWtlcyBzZW5zZS4gTm93LCBsZXQncyBsb29rIGF0IHRoZSBjb21wbGVtZW50YXJ5IGZ1bmN0aW9uOiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2hhdCBgaXBfbWNfaGFzaF9yZW1vdmVgIGRvZXMuIEl0J3MgcHJvYmFibGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIHJlbW92YWwgb2YgYSBtdWx0aWNhc3QgZ3JvdXAgZW50cnkgZnJvbSB0aGUgaGFzaCB0YWJsZS4gVGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgdHdvIGZ1bmN0aW9ucyB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSBtYW5hZ2VzIHRoZSBncm91cHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMsIHBhcnRpY3VsYXJseSB0aGUgbG9naWMgYXJvdW5kIHRoZSBoYXNoIGtleXMsIGNvbGxpc2lvbiByZXNvbHV0aW9uIChpZiBhbnkpLCBhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBoYW5kbGUgcmVmZXJlbmNlIGNvdW50aW5nIG9yIG90aGVyIGNvbmN1cnJlbmN5IGNvbmNlcm5zIHdoZW4gZGVsZXRpbmcgdGhlIGVudHJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTQ1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzQ6MTguNjcxMDcxOTgxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk2MzIyOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfbWNfaGFzaF9yZW1vdmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaWdtcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lnbXAuYz0xNDA0PXN0YXRpYyB2b2lkIGlwX21jX2hhc2hfYWRkKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldixcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xNDM1LVxcbm5ldC9pcHY0L2lnbXAuYzoxNDM2OnN0YXRpYyB2b2lkIGlwX21jX2hhc2hfcmVtb3ZlKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldixcXG5uZXQvaXB2NC9pZ21wLmMtMTQzNy1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgaXBfbWNfbGlzdCAqaW0pXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MTc3Nj12b2lkIF9faXBfbWNfZGVjX2dyb3VwKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIGFkZHIsIGdmcF90IGdmcClcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xNzkwLVxcdFxcdFxcdGlmIChuZXdfdXNlcnMgPT0gMCkge1xcbm5ldC9pcHY0L2lnbXAuYzoxNzkxOlxcdFxcdFxcdFxcdGlwX21jX2hhc2hfcmVtb3ZlKGluX2RldiwgaSk7XFxubmV0L2lwdjQvaWdtcC5jLTE3OTItXFx0XFx0XFx0XFx0KmlwID0gaS1cXHUwMDNlbmV4dF9yY3U7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MTkxMj12b2lkIGlwX21jX2Rlc3Ryb3lfZGV2KHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xOTI0LVxcdHdoaWxlICgoaSA9IHJ0bmxfZGVyZWZlcmVuY2UoaW5fZGV2LVxcdTAwM2VtY19saXN0KSkgIT0gTlVMTCkge1xcbm5ldC9pcHY0L2lnbXAuYzoxOTI1OlxcdFxcdGlwX21jX2hhc2hfcmVtb3ZlKGluX2RldiwgaSk7XFxubmV0L2lwdjQvaWdtcC5jLTE5MjYtXFx0XFx0aW5fZGV2LVxcdTAwM2VtY19saXN0ID0gaS1cXHUwMDNlbmV4dF9yY3U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjM0OjE4Ljg5MDcxMDQ1NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzIyNDg0NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE11bHRpY2FzdCBEZXZpY2UgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgY2xlYW51cCBhbmQgbWFuYWdlbWVudCBvZiBtdWx0aWNhc3QgZGV2aWNlcyBoZXJlLiBJIHNlZSB0aGF0IGBfX2lwX21jX2RlY19ncm91cGAgYW5kIGBpcF9tY19kZXN0cm95X2RldmAgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkIGluIHJlbW92aW5nIGVudHJpZXMgZnJvbSB0aGUgcmVsZXZhbnQgaGFzaCB0YWJsZXMuIE15IHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZXNlIGZ1bmN0aW9ucywgYWxvbmcgd2l0aDpcblxuKiAgIGBpcF9tY19kZXN0cm95X2RldmBcbiogICBgX19pcF9tY19kZWNfZ3JvdXBgXG4qICAgYF9fX19pcF9tY19pbmNfZ3JvdXBgXG4qICAgYGlwX21jX2hhc2hfYWRkYFxuKiAgIGBpcF9tY19oYXNoX3JlbW92ZWBcbiogICBgaW5ldGRldl9kZXN0cm95YFxuXG5JJ20gYWxzbyBjb25zaWRlcmluZyB0aGUgYElQX01VTFRJQ0FTVGAgY29uZmlndXJhdGlvbiBvcHRpb24uIFdoaWxlIGl0J3Mgb2J2aW91c2x5IGNydWNpYWwgZm9yIElHTVAgYW5kIG11bHRpY2FzdCBmdW5jdGlvbmFsaXR5IGluIGdlbmVyYWwsIGl0J3MgaW50ZXJlc3RpbmcgdGhhdCBgaXBfbWNfZGVzdHJveV9kZXZgICpzdGlsbCogY29tcGlsZXMgYW5kIGdldHMgY2FsbGVkIGV2ZW4gaWYgYElQX01VTFRJQ0FTVGAgaXNuJ3QgZW5hYmxlZC4gSG93ZXZlciwgZW5hYmxpbmcgaXQgaXMgY2VydGFpbmx5IGRlc2lyYWJsZSBmb3IgY29tcHJlaGVuc2l2ZSBtdWx0aWNhc3QgZmVhdHVyZSB0ZXN0aW5nLiBJJ20gZ29pbmcgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IGBJUF9NVUxUSUNBU1RgIGlzIHN0cmljdGx5IG5lY2Vzc2FyeSB0byByZWFjaCBgX19fX2lwX21jX2luY19ncm91cGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMjgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzQ6MjMuMjEzMTk4ODM1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODg5MTc4MTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fX19pcF9tY19pbmNfZ3JvdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaWdtcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lnbXAuYz0xNDg1PXN0YXRpYyB2b2lkIGluZXRfaWZtY2FkZHJfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTUxNy0gKi9cXG5uZXQvaXB2NC9pZ21wLmM6MTUxODpzdGF0aWMgdm9pZCBfX19faXBfbWNfaW5jX2dyb3VwKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIGFkZHIsXFxubmV0L2lwdjQvaWdtcC5jLTE1MTktXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IG1vZGUsIGdmcF90IGdmcClcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xNTg1PXZvaWQgX19pcF9tY19pbmNfZ3JvdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgYWRkciwgZ2ZwX3QgZ2ZwKVxcbm5ldC9pcHY0L2lnbXAuYy0xNTg2LXtcXG5uZXQvaXB2NC9pZ21wLmM6MTU4NzpcXHRfX19faXBfbWNfaW5jX2dyb3VwKGluX2RldiwgYWRkciwgTUNBU1RfRVhDTFVERSwgZ2ZwKTtcXG5uZXQvaXB2NC9pZ21wLmMtMTU4OC19XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MjI4MD1zdGF0aWMgaW50IF9faXBfbWNfam9pbl9ncm91cChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tcmVxbiAqaW1yLFxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIzMjMtXFx0cmN1X2Fzc2lnbl9wb2ludGVyKGluZXQtXFx1MDAzZW1jX2xpc3QsIGltbCk7XFxubmV0L2lwdjQvaWdtcC5jOjIzMjQ6XFx0X19fX2lwX21jX2luY19ncm91cChpbl9kZXYsIGFkZHIsIG1vZGUsIEdGUF9LRVJORUwpO1xcbm5ldC9pcHY0L2lnbXAuYy0yMzI1LVxcdGVyciA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjM0OjI1LjEwMjM4MjI0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTQxMjM0NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTXVsdGljYXN0IE1lbWJlcnNoaXAgTXlzdGVyaWVzKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gaG93IG11bHRpY2FzdCBncm91cCBqb2lucyB3b3JrIGF0IHRoZSBrZXJuZWwgbGV2ZWwuIEknbSBzZWVpbmcgdGhhdCB0aGUgYF9faXBfbWNfam9pbl9ncm91cGAgZnVuY3Rpb24gaXMgdGhlIG9uZSB0aGF0J3MgYWN0dWFsbHkgY2FsbGVkIHdoZW4gYSBwcm9jZXNzIHRyaWVzIHRvIGpvaW4gYSBtdWx0aWNhc3QgZ3JvdXAsIHNwZWNpZmljYWxseSB0aHJvdWdoIHRoZSBzb2NrZXQgb3B0aW9ucyBsaWtlIGBJUF9BRERfTUVNQkVSU0hJUGAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgdGhlIGNvcmUgcm91dGluZSBmb3IgaGFuZGxpbmcgdGhhdCBwcm9jZXNzLlxuXG5Ob3csIG15IHJlYWwgcXVlc3Rpb24gaXM6IGlzIHRoZSBgSVBfTVVMVElDQVNUYCBzb2NrZXQgb3B0aW9uIGEgc3RyaWN0IHJlcXVpcmVtZW50IGZvciBgSVBfQUREX01FTUJFUlNISVBgIHRvIGZ1bmN0aW9uIGNvcnJlY3RseT8gTG9naWNhbGx5LCBgSVBfQUREX01FTUJFUlNISVBgIGlzIHN1cHBvc2VkIHRvIGRlYWwgc3BlY2lmaWNhbGx5IHdpdGggbXVsdGljYXN0LCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGZsYWcgaGFzIHRvIGJlIGV4cGxpY2l0bHkgc2V0LiBJJ20gd29uZGVyaW5nIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGludGVyYWN0aW9ucyBvciBpbXBsaWNpdCBiZWhhdmlvcnMgaW4gdGhlIGtlcm5lbCB0aGF0IEknbSBvdmVybG9va2luZy4gSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIEl0IGNvdWxkIGJlIGEgc2ltcGxlIGNoZWNrLCBvciBpdCBjb3VsZCBiZSBkZWVwZXIuLi4gbGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgc2F5cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA5MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjM0OjI4LjcxNjUwNzQ5NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU4NDAxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBfQUREX01FTUJFUlNISVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM9NjQwPXN0YXRpYyBib29sIHNldHNvY2tvcHRfbmVlZHNfcnRubChpbnQgb3B0bmFtZSlcXG4tLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtNjQyLVxcdHN3aXRjaCAob3B0bmFtZSkge1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6NjQzOlxcdGNhc2UgSVBfQUREX01FTUJFUlNISVA6XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy02NDQtXFx0Y2FzZSBJUF9BRERfU09VUkNFX01FTUJFUlNISVA6XFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTg5Mj1pbnQgZG9faXBfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTEyMjQtXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxMjI1OlxcdGNhc2UgSVBfQUREX01FTUJFUlNISVA6XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xMjI2LVxcdGNhc2UgSVBfRFJPUF9NRU1CRVJTSElQOlxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xMjQ2LVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTI0NzpcXHRcXHRpZiAob3B0bmFtZSA9PSBJUF9BRERfTUVNQkVSU0hJUClcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTEyNDgtXFx0XFx0XFx0ZXJyID0gaXBfbWNfam9pbl9ncm91cChzaywgXFx1MDAyNm1yZXEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNjozNDoyOC44MTIzNTI2MjRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyODA3MzQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBNdWx0aWNhc3QgTGFuZHNjYXBlKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBpcF9tY19qb2luX2dyb3VwYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIGl0cyBjb25kaXRpb25hbCBpbmNsdXNpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoZXJlJ3MgdGhlIGd1YXJkP1wiIElzIHRoaXMgbXVsdGljYXN0IGZ1bmN0aW9uYWxpdHkgY29udGluZ2VudCBvbiB0aGUgYENPTkZJR19JUF9NVUxUSUNBU1RgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbj8gSSdtIGJldHRpbmcgaXQgaXM7IGl0J3MgcHJhY3RpY2FsbHkgc3RhbmRhcmQgcHJhY3RpY2UgZm9yIG1vZHVsYXJpdHkuIEknbGwgY2hlY2sgaWYgaXQncyB3cmFwcGVkIGluIGFuIGAjaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVGAgYmxvY2suIFRoYXQnbGwgdGVsbCBtZSBpZiBJJ20gZXZlbiAqbG9va2luZyogYXQgYWN0aXZlIG11bHRpY2FzdCBjb2RlIG9yIHNvbWV0aGluZyB0aGF0J3Mgc3R1YmJlZCBvdXQgdW5kZXIgdGhhdCBmbGFnLiBLbm93aW5nIHRoaXMgd2lsbCBzdHJlYW1saW5lIG15IGFuYWx5c2lzLCBzYXZpbmcgdGltZSBpbiBlaXRoZXIgYSBkZWJ1Z2dpbmcsIGNvZGUgcmV2aWV3LCBvciBldmVuIGEgZmVhdHVyZSBpbXBsZW1lbnRhdGlvbiBzY2VuYXJpby4gSSBrbm93IHRoZSBiYXNpY3MsIGJ1dCBpdCdzIGFsd2F5cyB1c2VmdWwgdG8gc3RhcnQgd2l0aCB0aGUgZm91bmRhdGlvbnMuIEkgbmVlZCB0aGUgYmlnIHBpY3R1cmUgYmVmb3JlIHpvb21pbmcgaW4gb24gdGhlIHNwZWNpZmljcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzczNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjM0OjMxLjk0MDQyODA1N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIyNTEwMjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX21jX2pvaW5fZ3JvdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaWdtcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lnbXAuYz0yMjYwPXN0YXRpYyB2b2lkIGlwX21jX2NsZWFyX3NyYyhzdHJ1Y3QgaXBfbWNfbGlzdCAqcG1jKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIyNzktICovXFxubmV0L2lwdjQvaWdtcC5jOjIyODA6c3RhdGljIGludCBfX2lwX21jX2pvaW5fZ3JvdXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXJlcW4gKmltcixcXG5uZXQvaXB2NC9pZ21wLmMtMjI4MS1cXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgbW9kZSlcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0yMzMxLSAqL1xcbm5ldC9pcHY0L2lnbXAuYzoyMzMyOmludCBpcF9tY19qb2luX2dyb3VwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21yZXFuICppbXIpXFxubmV0L2lwdjQvaWdtcC5jLTIzMzMte1xcbm5ldC9pcHY0L2lnbXAuYzoyMzM0OlxcdHJldHVybiBfX2lwX21jX2pvaW5fZ3JvdXAoc2ssIGltciwgTUNBU1RfRVhDTFVERSk7XFxubmV0L2lwdjQvaWdtcC5jLTIzMzUtfVxcbm5ldC9pcHY0L2lnbXAuYzoyMzM2OkVYUE9SVF9TWU1CT0woaXBfbWNfam9pbl9ncm91cCk7XFxubmV0L2lwdjQvaWdtcC5jLTIzMzctXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjMzOS0gKi9cXG5uZXQvaXB2NC9pZ21wLmM6MjM0MDppbnQgaXBfbWNfam9pbl9ncm91cF9zc20oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXJlcW4gKmltcixcXG5uZXQvaXB2NC9pZ21wLmMtMjM0MS1cXHRcXHRcXHQgdW5zaWduZWQgaW50IG1vZGUpXFxubmV0L2lwdjQvaWdtcC5jLTIzNDIte1xcbm5ldC9pcHY0L2lnbXAuYzoyMzQzOlxcdHJldHVybiBfX2lwX21jX2pvaW5fZ3JvdXAoc2ssIGltciwgbW9kZSk7XFxubmV0L2lwdjQvaWdtcC5jLTIzNDQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNjozNDozMi4yNjI5NDYxMTFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4Mzg3NzczMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIE11bHRpY2FzdCBDb2RlYmFzZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBidWcgaXNuJ3QgaGlkZGVuIGF3YXkgdW5kZXIgYSBgI2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RgIGJsb2NrLiBHb29kIHRvIGtub3csIHRoYXQgbmFycm93cyB0aGluZ3MgZG93biBhIGJpdC4gQnV0IHdhaXQsIGJlZm9yZSBJIHN0YXJ0IGNoYXNpbmcgZ2hvc3RzIGVsc2V3aGVyZSwgSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBpc3N1ZSwgYW5kIHRoZSBsaWtlbGlob29kIG9mIG11bHRpY2FzdCBpbnRlcmFjdGlvbnMsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBpZiBgQ09ORklHX0lQX01VTFRJQ0FTVGAgaXMgZXZlbiAqdXNlZCogd2l0aGluIHRoZSBgbmV0L2lwdjQvaWdtcC5jYCBmaWxlLiBJdCBzZWVtcyBsaWtlbHksIGdpdmVuIHRoZSBmaWxlJ3MgcHVycG9zZSwgYnV0IGl0J3MgYSBxdWljayBjaGVjayB0byBlbGltaW5hdGUgYSBwb3RlbnRpYWwgZmFsc2UgbGVhZC4gTm8gcG9pbnQgZ29pbmcgZG93biBhIHJhYmJpdCBob2xlIGZvciBzb21ldGhpbmcgdGhhdCBpc24ndCBjb25uZWN0ZWQuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCB1c2FnZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDY3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzQ6MzUuMjQ2ODI2MTkyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzAyMjI4NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0lQX01VTFRJQ0FTVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pZ21wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaWdtcC5jLTEwOS1cXG5uZXQvaXB2NC9pZ21wLmM6MTEwOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTExMS0vKiBQYXJhbWV0ZXIgbmFtZXMgYW5kIHZhbHVlcyBhcmUgdGFrZW4gZnJvbSBpZ21wLXYyLTA2IGRyYWZ0ICovXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MjAxPXN0YXRpYyB2b2lkIGlwX3NmX2xpc3RfY2xlYXJfYWxsKHN0cnVjdCBpcF9zZl9saXN0ICpwc2YpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjExLVxcbm5ldC9pcHY0L2lnbXAuYzoyMTI6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMjEzLVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTExNzk9c3RhdGljIHZvaWQgaXBfbWNfZmlsdGVyX2RlbChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiBhZGRyKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTExODctXFxubmV0L2lwdjQvaWdtcC5jOjExODg6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMTE4OS0vKlxcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTEzMDg9c3RhdGljIHZvaWQgX19pZ21wX2dyb3VwX2Ryb3BwZWQoc3RydWN0IGlwX21jX2xpc3QgKmltLCBnZnBfdCBnZnApXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTMxMC1cXHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBpbS1cXHUwMDNlaW50ZXJmYWNlO1xcbm5ldC9pcHY0L2lnbXAuYzoxMzExOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTEzMTItXFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChpbl9kZXYtXFx1MDAzZWRldik7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTMyMC1cXG5uZXQvaXB2NC9pZ21wLmM6MTMyMTojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0xMzIyLVxcdGlmIChpbS1cXHUwMDNlbXVsdGlhZGRyID09IElHTVBfQUxMX0hPU1RTKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTEzNTI9c3RhdGljIHZvaWQgaWdtcF9ncm91cF9hZGRlZChzdHJ1Y3QgaXBfbWNfbGlzdCAqaW0pXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTM1NC1cXHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBpbS1cXHUwMDNlaW50ZXJmYWNlO1xcbm5ldC9pcHY0L2lnbXAuYzoxMzU1OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTEzNTYtXFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChpbl9kZXYtXFx1MDAzZWRldik7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTM2My1cXG5uZXQvaXB2NC9pZ21wLmM6MTM2NDojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0xMzY1LVxcdGlmIChpbS1cXHUwMDNlbXVsdGlhZGRyID09IElHTVBfQUxMX0hPU1RTKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTE1MTg9c3RhdGljIHZvaWQgX19fX2lwX21jX2luY19ncm91cChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiBhZGRyLFxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTE1NjMtXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmltLVxcdTAwM2Vsb2NrKTtcXG5uZXQvaXB2NC9pZ21wLmM6MTU2NDojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0xNTY1LVxcdHRpbWVyX3NldHVwKFxcdTAwMjZpbS1cXHUwMDNldGltZXIsIGlnbXBfdGltZXJfZXhwaXJlLCAwKTtcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xNTczLVxcbm5ldC9pcHY0L2lnbXAuYzoxNTc0OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTE1NzUtXFx0aWdtcHYzX2RlbF9kZWxyZWMoaW5fZGV2LCBpbSk7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MTc0Mj1zdGF0aWMgdm9pZCBpcF9tY19yZWpvaW5fZ3JvdXBzKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldilcXG5uZXQvaXB2NC9pZ21wLmMtMTc0My17XFxubmV0L2lwdjQvaWdtcC5jOjE3NDQ6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMTc0NS1cXHRzdHJ1Y3QgaXBfbWNfbGlzdCAqaW07XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MTgyND12b2lkIGlwX21jX3JlbWFwKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xODMwLVxcdGZvcl9lYWNoX3BtY19ydG5sKGluX2RldiwgcG1jKSB7XFxubmV0L2lwdjQvaWdtcC5jOjE4MzE6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMTgzMi1cXHRcXHRpZ21wdjNfZGVsX2RlbHJlYyhpbl9kZXYsIHBtYyk7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MTg0MD12b2lkIGlwX21jX2Rvd24oc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTE4NDgtXFxubmV0L2lwdjQvaWdtcC5jOjE4NDk6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMTg1MC1cXHRXUklURV9PTkNFKGluX2Rldi1cXHUwMDNlbXJfaWZjX2NvdW50LCAwKTtcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xODYwLVxcbm5ldC9pcHY0L2lnbXAuYzoxODYxOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTE4NjItc3RhdGljIHZvaWQgaXBfbWNfcmVzZXQoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTE4NzY9dm9pZCBpcF9tY19pbml0X2RldihzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTg3OS1cXG5uZXQvaXB2NC9pZ21wLmM6MTg4MDojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0xODgxLVxcdHRpbWVyX3NldHVwKFxcdTAwMjZpbl9kZXYtXFx1MDAzZW1yX2dxX3RpbWVyLCBpZ21wX2dxX3RpbWVyX2V4cGlyZSwgMCk7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MTg5MT12b2lkIGlwX21jX3VwKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xOTAwLVxcdGZvcl9lYWNoX3BtY19ydG5sKGluX2RldiwgcG1jKSB7XFxubmV0L2lwdjQvaWdtcC5jOjE5MDE6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMTkwMi1cXHRcXHRpZ21wdjNfZGVsX2RlbHJlYyhpbl9kZXYsIHBtYyk7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MTkxMj12b2lkIGlwX21jX2Rlc3Ryb3lfZGV2KHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xOTE5LVxcdGlwX21jX2Rvd24oaW5fZGV2KTtcXG5uZXQvaXB2NC9pZ21wLmM6MTkyMDojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0xOTIxLVxcdGlnbXB2M19jbGVhcl9kZWxyZWMoaW5fZGV2KTtcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xOTcwPXN0YXRpYyBpbnQgaXBfbWNfZGVsMV9zcmMoc3RydWN0IGlwX21jX2xpc3QgKnBtYywgaW50IHNmbW9kZSxcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xOTkwLVxcdGlmICghcHNmLVxcdTAwM2VzZl9jb3VudFtNQ0FTVF9JTkNMVURFXSBcXHUwMDI2XFx1MDAyNiAhcHNmLVxcdTAwM2VzZl9jb3VudFtNQ0FTVF9FWENMVURFXSkge1xcbm5ldC9pcHY0L2lnbXAuYzoxOTkxOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTE5OTItXFx0XFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gcG1jLVxcdTAwM2VpbnRlcmZhY2U7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjAwMC1cXHRcXHRcXHRwbWMtXFx1MDAzZXNvdXJjZXMgPSBwc2YtXFx1MDAzZXNmX25leHQ7XFxubmV0L2lwdjQvaWdtcC5jOjIwMDE6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMjAwMi1cXHRcXHRpZiAocHNmLVxcdTAwM2VzZl9vbGRpbiBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIwMTQtXFxubmV0L2lwdjQvaWdtcC5jOjIwMTU6I2lmbmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTIwMTYtI2RlZmluZSBpZ21wX2lmY19ldmVudCh4KVxcdGRvIHsgfSB3aGlsZSAoMClcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0yMDE5PXN0YXRpYyBpbnQgaXBfbWNfZGVsX3NyYyhzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiAqcG1jYSwgaW50IHNmbW9kZSxcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0yMDM5LVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbm5ldC9pcHY0L2lnbXAuYzoyMDQwOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTIwNDEtXFx0c2ZfbWFya3N0YXRlKHBtYyk7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjA1OS1cXHQgICAgcG1jLVxcdTAwM2VzZmNvdW50W01DQVNUX0lOQ0xVREVdKSB7XFxubmV0L2lwdjQvaWdtcC5jOjIwNjA6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMjA2MS1cXHRcXHRzdHJ1Y3QgaXBfc2ZfbGlzdCAqcHNmO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIwNjYtXFx0XFx0cG1jLVxcdTAwM2VzZm1vZGUgPSBNQ0FTVF9JTkNMVURFO1xcbm5ldC9pcHY0L2lnbXAuYzoyMDY3OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTIwNjgtXFx0XFx0cG1jLVxcdTAwM2VjcmNvdW50ID0gaW5fZGV2LVxcdTAwM2Vtcl9xcnYgPzogUkVBRF9PTkNFKG5ldC1cXHUwMDNlaXB2NC5zeXNjdGxfaWdtcF9xcnYpO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTIwODU9c3RhdGljIGludCBpcF9tY19hZGQxX3NyYyhzdHJ1Y3QgaXBfbWNfbGlzdCAqcG1jLCBpbnQgc2Ztb2RlLFxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIxMTItXFxubmV0L2lwdjQvaWdtcC5jOjIxMTM6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMjExNC1zdGF0aWMgdm9pZCBzZl9tYXJrc3RhdGUoc3RydWN0IGlwX21jX2xpc3QgKnBtYylcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0yMTkxPXN0YXRpYyBpbnQgaXBfbWNfYWRkX3NyYyhzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiAqcG1jYSwgaW50IHNmbW9kZSxcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0yMjEyLVxcbm5ldC9pcHY0L2lnbXAuYzoyMjEzOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTIyMTQtXFx0c2ZfbWFya3N0YXRlKHBtYyk7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjIzMi1cXHR9IGVsc2UgaWYgKGlzZXhjbHVkZSAhPSAocG1jLVxcdTAwM2VzZmNvdW50W01DQVNUX0VYQ0xVREVdICE9IDApKSB7XFxubmV0L2lwdjQvaWdtcC5jOjIyMzM6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMjIzNC1cXHRcXHRzdHJ1Y3QgaXBfc2ZfbGlzdCAqcHNmO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIyNDMtXFx0XFx0XFx0cG1jLVxcdTAwM2VzZm1vZGUgPSBNQ0FTVF9JTkNMVURFO1xcbm5ldC9pcHY0L2lnbXAuYzoyMjQ0OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTIyNDUtXFx0XFx0LyogZWxzZSBubyBmaWx0ZXJzOyBrZWVwIG9sZCBtb2RlIGZvciByZXBvcnRzICovXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9Mjk1OD1zdGF0aWMgaW50IGlnbXBfbWNfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjk2OS1cXG5uZXQvaXB2NC9pZ21wLmM6Mjk3MDojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0yOTcxLVxcdFxcdHF1ZXJpZXIgPSBJR01QX1YxX1NFRU4oc3RhdGUtXFx1MDAzZWluX2RldikgPyBcXFwiVjFcXFwiIDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzQ6MzUuNDE3MDU1NjI3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNTk0MDc2ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIElQIE11bHRpY2FzdCBDb25maWd1cmF0aW9uIGFuZCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBhbmQgaXQncyBjbGVhciB0aGF0IGBDT05GSUdfSVBfTVVMVElDQVNUYCBpcyBmdW5kYW1lbnRhbCB0byBob3cgYGlnbXAuY2Agb3BlcmF0ZXMuIEdpdmVuIHRoYXQsIGVuYWJsaW5nIGBJUF9NVUxUSUNBU1RgIHNlZW1zIGxpa2UgYSBuby1icmFpbmVyIGZvciBwcm9wZXIgZnVuY3Rpb25hbGl0eS5cblxuTm93LCBJIHdhcyBhIGJpdCBjb25jZXJuZWQgYWJvdXQgdGhlIHJlYWNoYWJpbGl0eSBvZiBgaXBfbWNfZGVzdHJveV9kZXZgIHdpdGhvdXQgYENPTkZJR19JUF9NVUxUSUNBU1RgLCBidXQgaXQgKmlzKiBhY2Nlc3NpYmxlLiBTdGlsbCwgdG8gZ2V0IGZ1bGwgY292ZXJhZ2UgYW5kIG1ha2Ugc3VyZSB3ZSdyZSB0aG9yb3VnaGx5IHRlc3RpbmcgdGhlIG11bHRpY2FzdCBmZWF0dXJlcywgYElQX01VTFRJQ0FTVGAgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgY29uZmlnIHRvIGluY2x1ZGUuXG5cbkxldCBtZSB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGlzIHBhdGNoLi4uIEkgc2VlIHRoZSBjb2RlIGlzIG1vZGlmeWluZyBhIGxvb3AgdGhhdCdzIGl0ZXJhdGluZyB0aHJvdWdoIGBpbl9kZXYtXHUwMDNlbWNfbGlzdGAuIFRoZSBrZXkgYWRkaXRpb24gaXMgdGhlIGBpcF9tY19oYXNoX3JlbW92ZWAgY2FsbCB3aXRoaW4gdGhhdCBsb29wLiBJdCBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGEgYnVnIGZpeCwgYWN0dWFsbHkg4oCTIHJlbGF0ZWQgdG8gdXBkYXRpbmcgdGhlIGBtY19oYXNoYCB0YWJsZSB3aGVuIGBtY19saXN0YCBpcyBiZWluZyBjbGVhcmVkLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBzaW1pbGFyIG1lbW9yeSBjb3JydXB0aW9uIGlmIHRoZSBoYXNoIHRhYmxlIGlzIGFjY2Vzc2VkIGFmdGVyIHRoZSBkZXZpY2UgaXMgZGVzdHJveWVkLlxuXG5XYWl0IGEgc2Vjb25k4oCmIGBpbl9kZXZgIGlzIGJlaW5nIGRlc3Ryb3llZCwgc28gc2hvdWxkbid0IGl0cyBoYXNoIHRhYmxlIGFsc28gYmUgZGVzdHJveWVkPyBJcyB0aGUgaGFzaCB0YWJsZSBzb21laG93IGdsb2JhbD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBpcF9tY19oYXNoX3JlbW92ZWAgdG8gY29uZmlybSB0aGUgc2NvcGUgb2YgdGhpcyBoYXNoIHRhYmxlLiBJdCBzZWVtcyBsaWtlIHRoZSBwYXRjaCBpcyBuZWNlc3NhcnkgdG8gbWFpbnRhaW4gZGF0YSBjb25zaXN0ZW5jeSB3aXRoaW4gdGhlIGBpbl9kZXZgIHN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NjksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzQ6NDEuNjc2NDY2NTMxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzODQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pZ21wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQzMDpcXHRcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKG1jX2hhc2hbaGFzaF0sIGltKTtcXG4xNDMxOlxcdFxcdH1cXG4xNDMyOlxcdFxcbjE0MzM6XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGluX2Rldi1cXHUwMDNlbWNfaGFzaCwgbWNfaGFzaCk7XFxuMTQzNDpcXHR9XFxuMTQzNTpcXHRcXG4xNDM2OlxcdHN0YXRpYyB2b2lkIGlwX21jX2hhc2hfcmVtb3ZlKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldixcXG4xNDM3OlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBpcF9tY19saXN0ICppbSlcXG4xNDM4OlxcdHtcXG4xNDM5OlxcdFxcdHN0cnVjdCBpcF9tY19saXN0IF9fcmN1ICoqbWNfaGFzaCA9IHJ0bmxfZGVyZWZlcmVuY2UoaW5fZGV2LVxcdTAwM2VtY19oYXNoKTtcXG4xNDQwOlxcdFxcdHN0cnVjdCBpcF9tY19saXN0ICphdXg7XFxuMTQ0MTpcXHRcXG4xNDQyOlxcdFxcdGlmICghbWNfaGFzaClcXG4xNDQzOlxcdFxcdFxcdHJldHVybjtcXG4xNDQ0OlxcdFxcdG1jX2hhc2ggKz0gaXBfbWNfaGFzaChpbSk7XFxuMTQ0NTpcXHRcXHR3aGlsZSAoKGF1eCA9IHJ0bmxfZGVyZWZlcmVuY2UoKm1jX2hhc2gpKSAhPSBpbSlcXG4xNDQ2OlxcdFxcdFxcdG1jX2hhc2ggPSBcXHUwMDI2YXV4LVxcdTAwM2VuZXh0X2hhc2g7XFxuMTQ0NzpcXHRcXHQqbWNfaGFzaCA9IGltLVxcdTAwM2VuZXh0X2hhc2g7XFxuMTQ0ODpcXHR9XFxuMTQ0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzQ6NDEuNjc2ODA3MzAxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMDcwMzk5NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEhhc2ggVGFibGUgSXNzdWUqKlxuXG5TbywgdGhlIGNvZGUncyB1c2luZyBhIGhhc2ggdGFibGUgKGBpbl9kZXYtXHUwMDNlbWNfaGFzaGApIHRoYXQncyBzcGVjaWZpYyB0byBlYWNoIG5ldHdvcmsgZGV2aWNlIChgaW5fZGV2YCkuIE15IGluaXRpYWwgcXVlc3Rpb24gaXM6IGlmIHRoZSBkZXZpY2UgaXRzZWxmLCBgaW5fZGV2YCwgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZGVzdHJveWVkLCB3aHkgZG8gd2UgZXZlbiBjYXJlIGFib3V0IHJlbW92aW5nIGl0IGZyb20gdGhlIGhhc2ggdGFibGU/IFNob3VsZG4ndCBpdCBqdXN0IGJlY29tZSBpcnJlbGV2YW50P1xuXG5CdXQgdGhlbiBhIHBvc3NpYmlsaXR5IGhpdHMgbWUuIFBlcmhhcHMgYGluX2RldmAgaXNuJ3QgaW1tZWRpYXRlbHkgZnJlZWQgYWZ0ZXIgYmVpbmcgbWFya2VkIGZvciBkZXN0cnVjdGlvbi4gTWF5YmUgdGhlcmUncyBhIHdpbmRvdyBvZiB0aW1lIHdoZXJlIHNvbWVvbmUgKmNvdWxkKiBzdGlsbCB0cnkgdG8gbG9vayBpdCB1cCBpbiB0aGUgaGFzaCB0YWJsZS4gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGVuIHRoaXMgcmVtb3ZhbCBvcGVyYXRpb24gYmVjb21lcyBjcnVjaWFsIHRvIGF2b2lkIGRhbmdsaW5nIHBvaW50ZXJzIG9yIG90aGVyIG5hc3R5IG1lbW9yeSBtYW5hZ2VtZW50IGlzc3Vlcy5cblxuVGhlcmVmb3JlLCB0aGUgbmV4dCBzdGVwIGlzIGNyeXN0YWwgY2xlYXI6IEkgbmVlZCB0byBwaW5wb2ludCBleGFjdGx5IHdoZXJlIGBpbl9kZXYtXHUwMDNlbWNfaGFzaGAgZ2V0cyBmcmVlZC4gVGhhdCdzIHdoZXJlIHRoZSBjcml0aWNhbCBpbmZvcm1hdGlvbiB3aWxsIHJlc2lkZSwgYW5kIGZyb20gdGhhdCBJIGNhbiBkZXRlcm1pbmUgaWYgdGhlIHJlbW92YWwgaXMgbmVjZXNzYXJ5IGFuZCBjb3JyZWN0LiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIGZpbmQgdGhlIGZyZWVpbmcgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTc2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNjozNDo0NS44ODM4NTA0ODNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyOTgxNTExMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtY19oYXNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lnbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pZ21wLmM9MTM1Mj1zdGF0aWMgdm9pZCBpZ21wX2dyb3VwX2FkZGVkKHN0cnVjdCBpcF9tY19saXN0ICppbSlcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xMzk4LVxcbm5ldC9pcHY0L2lnbXAuYzoxMzk5OnN0YXRpYyB1MzIgaXBfbWNfaGFzaChjb25zdCBzdHJ1Y3QgaXBfbWNfbGlzdCAqaW0pXFxubmV0L2lwdjQvaWdtcC5jLTE0MDAte1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTE0MDMtXFxubmV0L2lwdjQvaWdtcC5jOjE0MDQ6c3RhdGljIHZvaWQgaXBfbWNfaGFzaF9hZGQoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LFxcbm5ldC9pcHY0L2lnbXAuYy0xNDA1LVxcdFxcdFxcdCAgIHN0cnVjdCBpcF9tY19saXN0ICppbSlcXG5uZXQvaXB2NC9pZ21wLmMtMTQwNi17XFxubmV0L2lwdjQvaWdtcC5jOjE0MDc6XFx0c3RydWN0IGlwX21jX2xpc3QgX19yY3UgKiptY19oYXNoO1xcbm5ldC9pcHY0L2lnbXAuYy0xNDA4LVxcdHUzMiBoYXNoO1xcbm5ldC9pcHY0L2lnbXAuYy0xNDA5LVxcbm5ldC9pcHY0L2lnbXAuYzoxNDEwOlxcdG1jX2hhc2ggPSBydG5sX2RlcmVmZXJlbmNlKGluX2Rldi1cXHUwMDNlbWNfaGFzaCk7XFxubmV0L2lwdjQvaWdtcC5jOjE0MTE6XFx0aWYgKG1jX2hhc2gpIHtcXG5uZXQvaXB2NC9pZ21wLmM6MTQxMjpcXHRcXHRoYXNoID0gaXBfbWNfaGFzaChpbSk7XFxubmV0L2lwdjQvaWdtcC5jOjE0MTM6XFx0XFx0aW0tXFx1MDAzZW5leHRfaGFzaCA9IG1jX2hhc2hbaGFzaF07XFxubmV0L2lwdjQvaWdtcC5jOjE0MTQ6XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKG1jX2hhc2hbaGFzaF0sIGltKTtcXG5uZXQvaXB2NC9pZ21wLmMtMTQxNS1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTQyMS1cXG5uZXQvaXB2NC9pZ21wLmM6MTQyMjpcXHRtY19oYXNoID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlwX21jX2xpc3QgKikgXFx1MDAzY1xcdTAwM2MgTUNfSEFTSF9TWl9MT0csXFxubmV0L2lwdjQvaWdtcC5jLTE0MjMtXFx0XFx0XFx0ICBHRlBfS0VSTkVMKTtcXG5uZXQvaXB2NC9pZ21wLmM6MTQyNDpcXHRpZiAoIW1jX2hhc2gpXFxubmV0L2lwdjQvaWdtcC5jLTE0MjUtXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTE0MjctXFx0Zm9yX2VhY2hfcG1jX3J0bmwoaW5fZGV2LCBpbSkge1xcbm5ldC9pcHY0L2lnbXAuYzoxNDI4OlxcdFxcdGhhc2ggPSBpcF9tY19oYXNoKGltKTtcXG5uZXQvaXB2NC9pZ21wLmM6MTQyOTpcXHRcXHRpbS1cXHUwMDNlbmV4dF9oYXNoID0gbWNfaGFzaFtoYXNoXTtcXG5uZXQvaXB2NC9pZ21wLmM6MTQzMDpcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKG1jX2hhc2hbaGFzaF0sIGltKTtcXG5uZXQvaXB2NC9pZ21wLmMtMTQzMS1cXHR9XFxubmV0L2lwdjQvaWdtcC5jLTE0MzItXFxubmV0L2lwdjQvaWdtcC5jOjE0MzM6XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGluX2Rldi1cXHUwMDNlbWNfaGFzaCwgbWNfaGFzaCk7XFxubmV0L2lwdjQvaWdtcC5jLTE0MzQtfVxcbm5ldC9pcHY0L2lnbXAuYy0xNDM1LVxcbm5ldC9pcHY0L2lnbXAuYzoxNDM2OnN0YXRpYyB2b2lkIGlwX21jX2hhc2hfcmVtb3ZlKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldixcXG5uZXQvaXB2NC9pZ21wLmMtMTQzNy1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgaXBfbWNfbGlzdCAqaW0pXFxubmV0L2lwdjQvaWdtcC5jLTE0Mzgte1xcbm5ldC9pcHY0L2lnbXAuYzoxNDM5OlxcdHN0cnVjdCBpcF9tY19saXN0IF9fcmN1ICoqbWNfaGFzaCA9IHJ0bmxfZGVyZWZlcmVuY2UoaW5fZGV2LVxcdTAwM2VtY19oYXNoKTtcXG5uZXQvaXB2NC9pZ21wLmMtMTQ0MC1cXHRzdHJ1Y3QgaXBfbWNfbGlzdCAqYXV4O1xcbm5ldC9pcHY0L2lnbXAuYy0xNDQxLVxcbm5ldC9pcHY0L2lnbXAuYzoxNDQyOlxcdGlmICghbWNfaGFzaClcXG5uZXQvaXB2NC9pZ21wLmMtMTQ0My1cXHRcXHRyZXR1cm47XFxubmV0L2lwdjQvaWdtcC5jOjE0NDQ6XFx0bWNfaGFzaCArPSBpcF9tY19oYXNoKGltKTtcXG5uZXQvaXB2NC9pZ21wLmM6MTQ0NTpcXHR3aGlsZSAoKGF1eCA9IHJ0bmxfZGVyZWZlcmVuY2UoKm1jX2hhc2gpKSAhPSBpbSlcXG5uZXQvaXB2NC9pZ21wLmM6MTQ0NjpcXHRcXHRtY19oYXNoID0gXFx1MDAyNmF1eC1cXHUwMDNlbmV4dF9oYXNoO1xcbm5ldC9pcHY0L2lnbXAuYzoxNDQ3OlxcdCptY19oYXNoID0gaW0tXFx1MDAzZW5leHRfaGFzaDtcXG5uZXQvaXB2NC9pZ21wLmMtMTQ0OC19XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MTUxOD1zdGF0aWMgdm9pZCBfX19faXBfbWNfaW5jX2dyb3VwKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIGFkZHIsXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTUyMC17XFxubmV0L2lwdjQvaWdtcC5jOjE1MjE6XFx0c3RydWN0IGlwX21jX2xpc3QgX19yY3UgKiptY19oYXNoO1xcbm5ldC9pcHY0L2lnbXAuYy0xNTIyLVxcdHN0cnVjdCBpcF9tY19saXN0ICppbTtcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xNTI1LVxcbm5ldC9pcHY0L2lnbXAuYzoxNTI2OlxcdG1jX2hhc2ggPSBydG5sX2RlcmVmZXJlbmNlKGluX2Rldi1cXHUwMDNlbWNfaGFzaCk7XFxubmV0L2lwdjQvaWdtcC5jOjE1Mjc6XFx0aWYgKG1jX2hhc2gpIHtcXG5uZXQvaXB2NC9pZ21wLmMtMTUyOC1cXHRcXHR1MzIgaGFzaCA9IGhhc2hfMzIoKF9fZm9yY2UgdTMyKWFkZHIsIE1DX0hBU0hfU1pfTE9HKTtcXG5uZXQvaXB2NC9pZ21wLmMtMTUyOS1cXG5uZXQvaXB2NC9pZ21wLmM6MTUzMDpcXHRcXHRmb3IgKGltID0gcnRubF9kZXJlZmVyZW5jZShtY19oYXNoW2hhc2hdKTtcXG5uZXQvaXB2NC9pZ21wLmMtMTUzMS1cXHRcXHQgICAgIGltO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTE1NzEtXFxubmV0L2lwdjQvaWdtcC5jOjE1NzI6XFx0aXBfbWNfaGFzaF9hZGQoaW5fZGV2LCBpbSk7XFxubmV0L2lwdjQvaWdtcC5jLTE1NzMtXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MTc3Nj12b2lkIF9faXBfbWNfZGVjX2dyb3VwKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIGFkZHIsIGdmcF90IGdmcClcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xNzkwLVxcdFxcdFxcdGlmIChuZXdfdXNlcnMgPT0gMCkge1xcbm5ldC9pcHY0L2lnbXAuYzoxNzkxOlxcdFxcdFxcdFxcdGlwX21jX2hhc2hfcmVtb3ZlKGluX2RldiwgaSk7XFxubmV0L2lwdjQvaWdtcC5jLTE3OTItXFx0XFx0XFx0XFx0KmlwID0gaS1cXHUwMDNlbmV4dF9yY3U7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MTkxMj12b2lkIGlwX21jX2Rlc3Ryb3lfZGV2KHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xOTI0LVxcdHdoaWxlICgoaSA9IHJ0bmxfZGVyZWZlcmVuY2UoaW5fZGV2LVxcdTAwM2VtY19saXN0KSkgIT0gTlVMTCkge1xcbm5ldC9pcHY0L2lnbXAuYzoxOTI1OlxcdFxcdGlwX21jX2hhc2hfcmVtb3ZlKGluX2RldiwgaSk7XFxubmV0L2lwdjQvaWdtcC5jLTE5MjYtXFx0XFx0aW5fZGV2LVxcdTAwM2VtY19saXN0ID0gaS1cXHUwMDNlbmV4dF9yY3U7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MjgyNj1pbnQgaXBfY2hlY2tfbWNfcmN1KHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIG1jX2FkZHIsIF9fYmUzMiBzcmNfYWRkciwgdTggcHJvdG8pXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjgyOC1cXHRzdHJ1Y3QgaXBfbWNfbGlzdCAqaW07XFxubmV0L2lwdjQvaWdtcC5jOjI4Mjk6XFx0c3RydWN0IGlwX21jX2xpc3QgX19yY3UgKiptY19oYXNoO1xcbm5ldC9pcHY0L2lnbXAuYy0yODMwLVxcdHN0cnVjdCBpcF9zZl9saXN0ICpwc2Y7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjgzMi1cXG5uZXQvaXB2NC9pZ21wLmM6MjgzMzpcXHRtY19oYXNoID0gcmN1X2RlcmVmZXJlbmNlKGluX2Rldi1cXHUwMDNlbWNfaGFzaCk7XFxubmV0L2lwdjQvaWdtcC5jOjI4MzQ6XFx0aWYgKG1jX2hhc2gpIHtcXG5uZXQvaXB2NC9pZ21wLmMtMjgzNS1cXHRcXHR1MzIgaGFzaCA9IGhhc2hfMzIoKF9fZm9yY2UgdTMyKW1jX2FkZHIsIE1DX0hBU0hfU1pfTE9HKTtcXG5uZXQvaXB2NC9pZ21wLmMtMjgzNi1cXG5uZXQvaXB2NC9pZ21wLmM6MjgzNzpcXHRcXHRmb3IgKGltID0gcmN1X2RlcmVmZXJlbmNlKG1jX2hhc2hbaGFzaF0pO1xcbm5ldC9pcHY0L2lnbXAuYy0yODM4LVxcdFxcdCAgICAgaW0gIT0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzQ6NDYuNDEzNjcyNTU1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5MzA1MDYxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipEaWdnaW5nIGludG8gdGhlIGBtY19oYXNoYCBJbXBsZW1lbnRhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIG11bHRpY2FzdCBoYXNoIHRhYmxlLCBzcGVjaWZpY2FsbHkgYGluX2Rldi1cdTAwM2VtY19oYXNoYC4gTXkgaW1tZWRpYXRlIG9ic2VydmF0aW9uIGlzIHRoYXQgdGhlIG1lbW9yeSBmb3IgaXQsIHRoYXQgYGluX2Rldi1cdTAwM2VtY19oYXNoYCBzdHJ1Y3R1cmUsIGlzbid0IGFsbG9jYXRlZCB1cGZyb250IGR1cmluZyB0aGUgYGluX2RldmAgc2V0dXAuIEl0J3MgYWxsb2NhdGVkICpsYXppbHkqLCBpbnNpZGUgYGlwX21jX2hhc2hfYWRkYCDigJMgcHJlY2lzZWx5IHdoZW4gdGhlIGZpcnN0IG11bHRpY2FzdCBncm91cCBlbnRyeSBuZWVkcyB0byBiZSBhZGRlZCB0byBhbiBpbnRlcmZhY2UncyBtdWx0aWNhc3QgbWVtYmVyc2hpcC4gVGhhdCBtYWtlcyBzZW5zZSwgbWluaW1pemVzIG1lbW9yeSB1c2FnZSBpZiB0aGUgaW50ZXJmYWNlIG5ldmVyIGFjdHVhbGx5IGpvaW5zIGEgbXVsdGljYXN0IGdyb3VwLlxuXG5CdXQgaGFuZyBvbuKApiB0aGF0IGFsc28gbWVhbnMgSSBuZWVkIHRvIGJlICpyZWFsbHkqIGNhcmVmdWwgYWJvdXQgdGhlIGRlYWxsb2NhdGlvbiBwYXRoLiBJZiBpdCdzIGFsbG9jYXRlZCBvbiBkZW1hbmQsIEkgbmVlZCB0byBrbm93ICpwcmVjaXNlbHkqIHdoZXJlIGFuZCB3aGVuIGBpbl9kZXYtXHUwMDNlbWNfaGFzaGAgaXMgZnJlZWQuICBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgYWxsb2NhdGlvbiBpbiBgaXBfbWNfaGFzaF9hZGRgIGFuZCBkZXRlcm1pbmUgdGhlIGNvcnJlc3BvbmRpbmcgY2xlYW51cCBmdW5jdGlvbiwgSSBuZWVkIHRvIGtub3cgd2hpY2ggZXZlbnRzIHJlc3VsdCBpbiB0aGUgZGVhbGxvY2F0aW9uLiBJcyBpdCBoYW5kbGVkIGR1cmluZyBpbnRlcmZhY2UgdGVhcmRvd24sIHNvbWUgc29ydCBvZiBnbG9iYWwgc2h1dGRvd24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyAgSSBiZXR0ZXIgZmlndXJlIG91dCB0aGUgbGlmZWN5Y2xlIG9mIHRoYXQgaGFzaCB0YWJsZSB0byBhdm9pZCBtZW1vcnkgbGVha3Mgb3IgZG91YmxlLWZyZWVzLiBUaGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIGFkZCB0byBteSBtZW50YWwgY2hlY2tsaXN0IGZvciBwb3RlbnRpYWwgcHJvYmxlbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDUyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzQ6NTIuMzQ0MTgyNzI3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU4ODA0NTgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmcmVlLiptY19oYXNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lnbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzQ6NTIuNDUwMDcyNzE1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODYxMTAyMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXBseSBmYW1pbGlhciB3aXRoIHNvZnR3YXJlIGRldmVsb3BtZW50IGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50OlxuXG4qKkNoZWNraW5nIGBpbl9kZXZgIFJlc291cmNlIFJlbGVhc2UqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoZSBgaW5fZGV2YCBlbnZpcm9ubWVudCByaWdodCBub3cuIEknbSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYWJvdXQgcmVzb3VyY2UgZnJlZWluZyDigJMgYXJlIHdlIHByb3Blcmx5IHJlbGVhc2luZyBtZW1vcnksIGZpbGUgaGFuZGxlcywgY29ubmVjdGlvbnMsIGFuZCBhbGwgdGhlIG90aGVyIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhhdCBlbnZpcm9ubWVudCBhZnRlciBhIHRlc3Qgb3IgYSB0YXNrPyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgbGVha3Mgb3IgbGluZ2VyaW5nIHByb2Nlc3NlcyBpbXBhY3RpbmcgcGVyZm9ybWFuY2Ugb3Igc3RhYmlsaXR5LiBJdCdzIHRpbWUgdG8gZGl2ZSBpbiBhbmQgZW5zdXJlIHdlJ3JlIGJlaW5nIGdvb2Qgc3Rld2FyZHMgb2Ygb3VyIHJlc291cmNlcyBkdXJpbmcgZGV2ZWxvcG1lbnQuIEkgc3VzcGVjdCB0aGlzIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gYmVjYXVzZSBpdOKAmXMgYSB0eXBpY2FsIHNvdXJjZSBvZiBwcm9ibGVtcy4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDU1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzQ6NTUuNzM2MTg1NDc1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTI4NTcwMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2ZyZWVfcmN1Lippbl9kZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNjozNDo1NS44MTc0Nzc0MThaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxNDg3NDI3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgaW5ldGRldl9kZXN0cm95YCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gdGhpbmtpbmcsIFwiT2theSwgYGluZXRkZXZfZGVzdHJveWAuLi5cIi4gVGhhdCBmdW5jdGlvbiBuYW1lIGltbWVkaWF0ZWx5IHNjcmVhbXMgSVAtc3BlY2lmaWMgbmV0d29yayBkZXZpY2UgdGVhcmRvd24uIEdpdmVuIHRoZSBjb250ZXh0LCBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIHZhcmlvdXMgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBwb3RlbnRpYWwgY2xlYW51cCBzY2VuYXJpb3MgaW52b2x2ZWQuIEknbSB3b25kZXJpbmcgaWYgdGhpcyBpcyBhIHNpbXBsZSBkZWFsbG9jYXRpb24gb3IgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggcm91dGluZyB0YWJsZXMsIG5laWdoYm9yIGNhY2hlcywgb3IgZXZlbiB1cHBlci1sYXllciBwcm90b2NvbHMgdGhhdCBuZWVkIGNhcmVmdWwgaGFuZGxpbmcgZHVyaW5nIHRoaXMgZGVzdHJveSBwcm9jZXNzLiBNeSBmb2N1cyBpcyBvbiBlbnN1cmluZyB0aGVyZSBhcmUgbm8gbWVtb3J5IGxlYWtzLCBkYW5nbGluZyBwb2ludGVycywgb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucyBsdXJraW5nIHdpdGhpbiB0aGUgZnVuY3Rpb24ncyBsb2dpYy4gSSdtIGFudGljaXBhdGluZyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggbG9ja2luZyBhbmQgY29uY3VycmVuY3ksIGVzcGVjaWFsbHkgaWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBhIG11bHRpLXRocmVhZGVkIGNvbnRleHQuIEEgd2VsbC1kZXNpZ25lZCBmdW5jdGlvbiB3aWxsIGhhbmRsZSBhbGwgdGhlc2UgcG90ZW50aWFsIGlzc3VlcyBlbGVnYW50bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Njg1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzQ6NTkuMDMyMzU0MjMzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9kZXZpbmV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzE0LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzE0OlxcdHN0YXRpYyB2b2lkIGluZXRkZXZfZGVzdHJveShzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXFxuIDMxNTpcXHR7XFxuIDMxNjpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbiAzMTc6XFx0XFx0c3RydWN0IGluX2lmYWRkciAqaWZhO1xcbiAzMTg6XFx0XFxuIDMxOTpcXHRcXHRBU1NFUlRfUlROTCgpO1xcbiAzMjA6XFx0XFxuIDMyMTpcXHRcXHRkZXYgPSBpbl9kZXYtXFx1MDAzZWRldjtcXG4gMzIyOlxcdFxcbiAzMjM6XFx0XFx0aW5fZGV2LVxcdTAwM2VkZWFkID0gMTtcXG4gMzI0OlxcdFxcbiAzMjU6XFx0XFx0aXBfbWNfZGVzdHJveV9kZXYoaW5fZGV2KTtcXG4gMzI2OlxcdFxcbiAzMjc6XFx0XFx0d2hpbGUgKChpZmEgPSBydG5sX2RlcmVmZXJlbmNlKGluX2Rldi1cXHUwMDNlaWZhX2xpc3QpKSAhPSBOVUxMKSB7XFxuIDMyODpcXHRcXHRcXHRpbmV0X2RlbF9pZmEoaW5fZGV2LCBcXHUwMDI2aW5fZGV2LVxcdTAwM2VpZmFfbGlzdCwgMCk7XFxuIDMyOTpcXHRcXHRcXHRpbmV0X2ZyZWVfaWZhKGlmYSk7XFxuIDMzMDpcXHRcXHR9XFxuIDMzMTpcXHRcXG4gMzMyOlxcdFxcdFJDVV9JTklUX1BPSU5URVIoZGV2LVxcdTAwM2VpcF9wdHIsIE5VTEwpO1xcbiAzMzM6XFx0XFxuIDMzNDpcXHRcXHRkZXZpbmV0X3N5c2N0bF91bnJlZ2lzdGVyKGluX2Rldik7XFxuIDMzNTpcXHRcXHRuZWlnaF9wYXJtc19yZWxlYXNlKFxcdTAwMjZhcnBfdGJsLCBpbl9kZXYtXFx1MDAzZWFycF9wYXJtcyk7XFxuIDMzNjpcXHRcXHRhcnBfaWZkb3duKGRldik7XFxuIDMzNzpcXHRcXG4gMzM4OlxcdFxcdGluX2Rldl9wdXQoaW5fZGV2KTtcXG4gMzM5OlxcdH1cXG4gMzQwOlxcdFxcbiAzNDE6XFx0c3RhdGljIGludCBfX2luaXQgaW5ldF9ibGFja2hvbGVfZGV2X2luaXQodm9pZClcXG4gMzQyOlxcdHtcXG4gMzQzOlxcdFxcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzQ6NTkuMDMyNTQwMzkzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDM5ODcxNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIFJlc291cmNlIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgaW5fZGV2X3B1dChpbl9kZXYpYC4gVGhlIGNvbW1lbnQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyBgaW5fZGV2YC4gQWxyaWdodCwgdGhhdCdzIHRoZSBjb3JlIGZ1bmN0aW9uJ3Mgcm9sZTogcmVzb3VyY2UgY2xlYW51cC4gTGV0J3MgZGlnIGluIGFuZCBleGFtaW5lIHRoZSBkZXRhaWxzIG9mIHdoYXQgYGluX2Rldl9wdXRgIGRvZXMgdG8gYWNjb21wbGlzaCB0aGF0IGZyZWVpbmcgb2YgdGhlIGBpbl9kZXZgIHJlc291cmNlLiBUaW1lIHRvIHNlZSB3aGF0J3MgYWN0dWFsbHkgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjM1OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzU6MDIuMjM2NTI5OTg5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk0OTEwNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5fZGV2X3B1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaD0yODU9dm9pZCBpbl9kZXZfZmluaXNoX2Rlc3Ryb3koc3RydWN0IGluX2RldmljZSAqaWRldik7XFxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgtMjg2LVxcbmluY2x1ZGUvbGludXgvaW5ldGRldmljZS5oOjI4NzpzdGF0aWMgaW5saW5lIHZvaWQgaW5fZGV2X3B1dChzdHJ1Y3QgaW5fZGV2aWNlICppZGV2KVxcbmluY2x1ZGUvbGludXgvaW5ldGRldmljZS5oLTI4OC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaC0yOTItXFxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmg6MjkzOiNkZWZpbmUgX19pbl9kZXZfcHV0KGlkZXYpICByZWZjb3VudF9kZWMoXFx1MDAyNihpZGV2KS1cXHUwMDNlcmVmY250KVxcbmluY2x1ZGUvbGludXgvaW5ldGRldmljZS5oLTI5NC0jZGVmaW5lIGluX2Rldl9ob2xkKGlkZXYpICAgcmVmY291bnRfaW5jKFxcdTAwMjYoaWRldiktXFx1MDAzZXJlZmNudClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzU6MDIuNDA2MDI3MjU1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5MzY5ODUzNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXBseSBmYW1pbGlhciB3aXRoIHNvZnR3YXJlIGRldmVsb3BtZW50IGFuZCByZWxhdGVkIHRlcm1pbm9sb2d5OlxuXG4qKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gQ2FsbDogYGluX2Rldl9maW5pc2hfZGVzdHJveWAqKlxuXG5BbHJpZ2h0LCBteSBicmFpbiBqdXN0IHdlbnQgc3RyYWlnaHQgdG8gdGhhdCBmdW5jdGlvbiBuYW1lOiBgaW5fZGV2X2ZpbmlzaF9kZXN0cm95YC4gSW1tZWRpYXRlbHksIEknbSBwYXJzaW5nIHRoYXQuIFRoZSBwcmVmaXggXCJpbl9kZXZcIiBzY3JlYW1zIFwiZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRcIiBvciBcImRldmVsb3BtZW50IGNvbnRleHQuXCIgU28sIHRoaXMgaXNuJ3Qgc29tZXRoaW5nIGRlc3RpbmVkIGZvciBwcm9kdWN0aW9uLCB0aGF0J3MgY2xlYXIuIEl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gc29tZSBzb3J0IG9mIHRlbXBvcmFyeSBzZXR1cCwgdGVzdGluZywgb3IgbWF5YmUgY2xlYW51cCByZWxhdGVkIHRvIGEgZGV2ZWxvcG1lbnQgYnVpbGQuXG5cblRoZSBjb3JlIGFjdGlvbiBpcyBcImZpbmlzaF9kZXN0cm95LlwiIERlc3Ryb3lpbmcgKndoYXQqPyBUaGUgY29udGV4dCBpcyBrZXkuIEFtIEkgbG9va2luZyBhdCByZXNvdXJjZXMsIHRlbXBvcmFyeSBmaWxlcywgdGVzdCBkYXRhLCBkYXRhYmFzZSBlbnRyaWVzLCBvciBhIHdob2xlIGRldmVsb3BtZW50IGluc3RhbmNlPyBUaGUgbmFtaW5nIGNvbnZlbnRpb24gc3VnZ2VzdHMgaXQgaXMgcmVsYXRlZCB0byB0aGUgY2xlYW51cCBvZiBzb21ldGhpbmcgd2hpY2ggaGFkIGJlZW4gc3RhcnRlZCBmb3IgdGhlIFwiaW5fZGV2XCIgZW52aXJvbm1lbnQuIFRoZSB1c2Ugb2YgXCJmaW5pc2hcIiBoaW50cyBhdCBhIHByb2Nlc3Mgb3Igc3RhdGUgdGhhdCBpcyBjb21pbmcgdG8gYW4gZW5kLiBJdCdzIG5vdCB0aGUgaW5pdGlhbCBkZXN0cnVjdGlvbiwgYnV0IHRoZSAqY29tcGxldGlvbiogb2YgdGhhdCBwcm9jZXNzLlxuXG5JIG5lZWQgbW9yZSBjb250ZXh0LCBvYnZpb3VzbHkuIEJ1dCBiYXNlZCBvbiBqdXN0IHRoZSBuYW1lLCBJJ20gYXNzdW1pbmcgdGhhdCBJIGFtIGVpdGhlciB0cnlpbmcgdG8gY2xlYW4gdXAgcmVzb3VyY2VzIGZyb20gZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzLCBvciBhbSByZXZpZXdpbmcgdGhhdCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjcyNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjM1OjA4LjM0MzAxNTExNFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgyMjA2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5fZGV2X2ZpbmlzaF9kZXN0cm95XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2RldmluZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9kZXZpbmV0LmM9MjMyPXN0YXRpYyB2b2lkIGluZXRfZnJlZV9pZmEoc3RydWN0IGluX2lmYWRkciAqaWZhKVxcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jLTIzNS1cXHQgKiB0byByZWxlYXNlIHRoZSByZWZlcmVuY2UgdG8gdGhlIG5ldGRldiB0aGUgc2FtZSB3YXkuXFxubmV0L2lwdjQvZGV2aW5ldC5jOjIzNjpcXHQgKiBpbl9kZXZfcHV0KCkgLVxcdTAwM2UgaW5fZGV2X2ZpbmlzaF9kZXN0cm95KCkgLVxcdTAwM2UgbmV0ZGV2X3B1dCgpXFxubmV0L2lwdjQvZGV2aW5ldC5jLTIzNy1cXHQgKi9cXG4tLVxcbm5ldC9pcHY0L2RldmluZXQuYz0yNDE9c3RhdGljIHZvaWQgaW5fZGV2X2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4tLVxcbm5ldC9pcHY0L2RldmluZXQuYy0yNDgtXFxubmV0L2lwdjQvZGV2aW5ldC5jOjI0OTp2b2lkIGluX2Rldl9maW5pc2hfZGVzdHJveShzdHJ1Y3QgaW5fZGV2aWNlICppZGV2KVxcbm5ldC9pcHY0L2RldmluZXQuYy0yNTAte1xcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jLTI2My19XFxubmV0L2lwdjQvZGV2aW5ldC5jOjI2NDpFWFBPUlRfU1lNQk9MKGluX2Rldl9maW5pc2hfZGVzdHJveSk7XFxubmV0L2lwdjQvZGV2aW5ldC5jLTI2NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzU6MDguNDQxMjQxNDQ0WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTM2MDU4ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIGFzIEkgYXBwcm9hY2ggcmVhZGluZyB0aGlzIGNvZGUgc25pcHBldDpcblxuKipEZWNvbnN0cnVjdGluZyBgaW5fZGV2X2ZpbmlzaF9kZXN0cm95YCoqXG5cbkFscmlnaHQsIEknbSBzdGFydGluZyB3aXRoIGBpbl9kZXZfZmluaXNoX2Rlc3Ryb3lgLiBUaGUgdmVyeSBuYW1lIHN1Z2dlc3RzIHRoaXMgaXMgcmVsYXRlZCB0byBzb21ldGhpbmcgYmVpbmcgZGVzdHJveWVkLCBsaWtlbHkgaW4gYSBkZXZlbG9wbWVudCBjb250ZXh0LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCAqaXMqIGJlaW5nIGRlc3Ryb3llZD8gSXMgdGhpcyBhIGNsZWFudXAgZnVuY3Rpb24sIGEgdGVhcmRvd24sIG9yIHNvbWV0aGluZyBtb3JlIHByb2FjdGl2ZSBsaWtlIHByZXZlbnRpbmcgZnVydGhlciBvcGVyYXRpb24/IFRoZSBcImluX2RldlwiIHByZWZpeCBpcyBpbnRlcmVzdGluZy4gSXQgc3Ryb25nbHkgaGludHMgdGhpcyBmdW5jdGlvbiBpcyBwcm9iYWJseSBub3QgbWVhbnQgZm9yIHByb2R1Y3Rpb24gY29kZSBhbmQgaXMgbW9zdCBsaWtlbHkgZm9yIHRvb2xpbmcsIGRlYnVnZ2luZywgb3IgdGVzdCBlbnZpcm9ubWVudHMuIElzIHRoaXMgYSBmaW5hbCBjbGVhbnVwIHN0YWdlPyBJIHdvbmRlciB3aGF0IHJlc291cmNlcyBuZWVkIHRvIGJlIGZyZWVkIG9yIHdoYXQgc3RhdGUgbmVlZHMgdG8gYmUgcmVzZXQgYXQgdGhpcyBwb2ludC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBob3cgdGhlIGZ1bmN0aW9uIGlzIHVzZWQgYW5kIHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcgd2l0aGluIGl0LiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBhbnkgZGVwZW5kZW5jaWVzIGFuZCBjYWxscy4gVGhpcyBzaG91bGQgYmUgaW50ZXJlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzMyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzU6MTEuNjk0ODUwMjEzWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0ODE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9kZXZpbmV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQxLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQxOlxcdHN0YXRpYyB2b2lkIGluX2Rldl9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuIDI0MjpcXHR7XFxuIDI0MzpcXHRcXHRzdHJ1Y3QgaW5fZGV2aWNlICppZGV2ID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBpbl9kZXZpY2UsIHJjdV9oZWFkKTtcXG4gMjQ0OlxcdFxcbiAyNDU6XFx0XFx0a2ZyZWUocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChpZGV2LVxcdTAwM2VtY19oYXNoLCAxKSk7XFxuIDI0NjpcXHRcXHRrZnJlZShpZGV2KTtcXG4gMjQ3OlxcdH1cXG4gMjQ4OlxcdFxcbiAyNDk6XFx0dm9pZCBpbl9kZXZfZmluaXNoX2Rlc3Ryb3koc3RydWN0IGluX2RldmljZSAqaWRldilcXG4gMjUwOlxcdHtcXG4gMjUxOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpZGV2LVxcdTAwM2VkZXY7XFxuIDI1MjpcXHRcXG4gMjUzOlxcdFxcdFdBUk5fT04oaWRldi1cXHUwMDNlaWZhX2xpc3QpO1xcbiAyNTQ6XFx0XFx0V0FSTl9PTihpZGV2LVxcdTAwM2VtY19saXN0KTtcXG4gMjU1OlxcdCNpZmRlZiBORVRfUkVGQ05UX0RFQlVHXFxuIDI1NjpcXHRcXHRwcl9kZWJ1ZyhcXFwiJXM6ICVwPSVzXFxcXG5cXFwiLCBfX2Z1bmNfXywgaWRldiwgZGV2ID8gZGV2LVxcdTAwM2VuYW1lIDogXFxcIk5JTFxcXCIpO1xcbiAyNTc6XFx0I2VuZGlmXFxuIDI1ODpcXHRcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNmlkZXYtXFx1MDAzZWRldl90cmFja2VyKTtcXG4gMjU5OlxcdFxcdGlmICghaWRldi1cXHUwMDNlZGVhZClcXG4gMjYwOlxcdFxcdFxcdHByX2VycihcXFwiRnJlZWluZyBhbGl2ZSBpbl9kZXZpY2UgJXBcXFxcblxcXCIsIGlkZXYpO1xcbiAyNjE6XFx0XFx0ZWxzZVxcbiAyNjI6XFx0XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNmlkZXYtXFx1MDAzZXJjdV9oZWFkLCBpbl9kZXZfZnJlZV9yY3UpO1xcbiAyNjM6XFx0fVxcbiAyNjQ6XFx0RVhQT1JUX1NZTUJPTChpbl9kZXZfZmluaXNoX2Rlc3Ryb3kpO1xcbiAyNjU6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjM1OjExLjY5NTIwMDk3M1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjgwOTI1NDc1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVc2UtQWZ0ZXItRnJlZSBWdWxuZXJhYmlsaXR5IGluIE11bHRpY2FzdCBEZXZpY2UgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGluIHRoZSBtdWx0aWNhc3QgZGV2aWNlIG1hbmFnZW1lbnQuIFNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCBga2ZyZWUocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChpZGV2LVx1MDAzZW1jX2hhc2gsIDEpKTtgIGlzIGhhcHBlbmluZyBpbiBgaW5fZGV2X2ZyZWVfcmN1YC4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gbGllcyBpbiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgaXBfbWNfZGVzdHJveV9kZXZgIGFuZCBgbWNfaGFzaGAuIGBpcF9tY19kZXN0cm95X2RldmAgaXMgcmVzcG9uc2libGUgZm9yIGNsZWFyaW5nIGBpbl9kZXYtXHUwMDNlbWNfbGlzdGAuICBUaGUga2V5IG9ic2VydmF0aW9uIGlzIHRoYXQgaWYgYGlwX21jX2Rlc3Ryb3lfZGV2YCAqZG9lc24ndCogYWxzbyByZW1vdmUgZWxlbWVudHMgZnJvbSBgbWNfaGFzaGAsIHRoZW4gYG1jX2hhc2hgIGlzIGxlZnQgd2l0aCBkYW5nbGluZyBwb2ludGVycyB0byB0aGUgYGlwX21jX2xpc3RgIGVsZW1lbnRzLlxuXG5BbmQsIG9mIGNvdXJzZSwgYGlwX21jX2Rlc3Ryb3lfZGV2YCBjYWxscyBgaXBfbWFfcHV0KGkpYCB3aGljaCBmcmVlcyB0aGVzZSBgaXBfbWNfbGlzdGAgZWxlbWVudHMhIFRoaXMgbWVhbnMgYG1jX2hhc2hgIGVuZHMgdXAgY29udGFpbmluZyBwb2ludGVycyB0byBtZW1vcnkgdGhhdCdzIGJlZW4gZnJlZWQuICBTbywgdGhlIHF1ZXN0aW9uIGlzLCBpcyBgbWNfaGFzaGAgYWNjZXNzZWQgKmFmdGVyKiBgaXBfbWNfZGVzdHJveV9kZXZgP1xuXG5ZZXMsIGBpbl9kZXZgIGlzIHN0aWxsIGFsaXZlIHVudGlsIGBpbl9kZXZfcHV0YCBkcm9wcyBpdHMgcmVmZXJlbmNlIGNvdW50IHRvIHplcm8uIENydWNpYWxseSwgdGhlcmUgY2FuIGJlIGNvbmN1cnJlbnQgUkNVIHJlYWRlcnMgYWNjZXNzaW5nIGBtY19oYXNoYC4gIEFuZCwgeWVzLCBgaXBfY2hlY2tfbWNfcmN1YCBhY2Nlc3NlcyBgbWNfaGFzaGAgdW5kZXIgUkNVLiBUaGlzIGlzIHRoZSBjcnV4ISBJZiBgaXBfbWNfZGVzdHJveV9kZXZgIGZyZWVzIHRoZSBlbGVtZW50cywgYnV0IGxlYXZlcyB0aGVpciBwb2ludGVycyBpbiBgbWNfaGFzaGAsIGFuIFJDVSByZWFkZXIgY291bGQgcG90ZW50aWFsbHkgYWNjZXNzIGEgZnJlZWQgZWxlbWVudC5cblxuSG9sZCBvbiBhIG1pbnV0ZSwgYGlwX21hX3B1dGAgdXNlcyBga2ZyZWVfcmN1YCwgc28gdGhlIGVsZW1lbnQgaXNuJ3QgKmltbWVkaWF0ZWx5KiBmcmVlZDsgaXQncyBmcmVlZCBhZnRlciB0aGUgUkNVIGdyYWNlIHBlcmlvZC4gQnV0LCBgbWNfaGFzaGAgaXRzZWxmIGlzIGZyZWVkIGluIGBpbl9kZXZfZnJlZV9yY3VgLCB3aGljaCBhbHNvIGhhcHBlbnMgYWZ0ZXIgYW4gUkNVIGdyYWNlIHBlcmlvZC4gIFNvLCB0aGUgZWxlbWVudHMgc2hvdWxkLCB0ZWNobmljYWxseSwgc3RpbGwgYmUgdmFsaWQgd2hpbGUgYG1jX2hhc2hgIGl0c2VsZiBpcyByZWZlcmVuY2VkLlxuXG5Ib3dldmVyLCBpZiBgbWNfaGFzaGAgaXMgbm90IGNsZWFyZWQgYW5kIHNvbWVvbmUgYXR0ZW1wdHMgdG8gYWRkIGJhY2sgdG8gYG1jX2xpc3RgPyBObywgbm8sIGBpbl9kZXYtXHUwMDNlZGVhZCA9IDFgIGdldHMgc2V0IGJlZm9yZSBgaXBfbWNfZGVzdHJveV9kZXZgIHdoaWNoIHByZXZlbnRzIHRoaXMuXG5cblNvLCB0aGUgKnJlYWwqIGlzc3VlIGlzIHRoYXQgYGlwX21jX2Rlc3Ryb3lfZGV2YCByZW1vdmVzIGVsZW1lbnRzIGZyb20gYG1jX2xpc3RgIGJ1dCAqbm90KiBmcm9tIGBtY19oYXNoYC4gSWYgd2UgdHJ5IHRvIGFkZCBhIG5ldyBlbGVtZW50LCB0aGF0J3MgYmxvY2tlZCBieSB0aGUgYGRlYWRgIGZsYWcuIElmIGBpcF9jaGVja19tY19yY3VgIGlzIGNhbGxlZD8gSXQgd2lsbCBpdGVyYXRlIG92ZXIgYG1jX2hhc2hgLiAgVGhlIGVsZW1lbnRzIGluIGBtY19oYXNoYCBhcmUgZnJlZWQgdmlhIFJDVSwgYnV0IGlmIGBpcF9jaGVja19tY19yY3VgIHJ1bnMgKmFmdGVyKiB0aGUgZ3JhY2UgcGVyaW9kLCBhbmQgYGluX2RldmAgaXMgKnN0aWxsIGFsaXZlKiwgd2UgY291bGQgYmUgYWNjZXNzaW5nIGZyZWVkIG1lbW9yeS5cblxuQW5kIGBpbl9kZXZgICpjb3VsZCogc3RpbGwgYmUgYWxpdmUgYmVjYXVzZSBzb21lb25lIGhvbGRzIGEgcmVmZXJlbmNlIHRvIGl0LiBGb3IgaW5zdGFuY2UsIGEgc29ja2V0IG1pZ2h0IGJlIGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gYGluX2RldmAuIFRoaXMgbWVhbnMgYGluX2RldmAgY2FuIG91dGxpdmUgdGhlIFJDVSBncmFjZSBwZXJpb2Qgb2YgdGhlIGBpcF9tY19saXN0YCBlbGVtZW50cy4gIFNvLCBgaXBfY2hlY2tfbWNfcmN1YCAod2hpY2ggKm9ubHkqIHJlcXVpcmVzIGFuIFJDVSByZWFkIGxvY2spIGNhbiBhY2Nlc3MgYGluX2Rldi1cdTAwM2VtY19oYXNoYCBhbmQgZmluZCB0aG9zZSBkYW5nbGluZyBwb2ludGVycyEgQm9vbS5cblxuVGhpcyBpcyBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIFRoZSBwYXRjaCBjb3JyZWN0bHkgYWRkcmVzc2VzIHRoaXMgYnkgcmVtb3ZpbmcgdGhlIGVsZW1lbnRzIGZyb20gYG1jX2hhc2hgIHdpdGhpbiBgaXBfbWNfZGVzdHJveV9kZXZgLiBUaGlzIHByZXZlbnRzIHRoZSBkYW5nbGluZyBwb2ludGVycy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgYW5kIHdvcnRoIHRob3JvdWdoIGZ1enppbmcgd2l0aCB0aGUgbGlzdGVkIHN5bWJvbHMgYW5kIGNvbmZpZ3VyYXRpb25zLiAgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiBgSVBfTVVMVElDQVNUYCBpcyAqcmVhbGx5KiBuZWVkZWQgZm9yIGBpcF9jaGVja19tY19yY3VgIHRvIGJlIGFjdGl2ZSwgYnV0IHRoaXMgbG9va3MgbGlrZSBhIGdvb2QgZml4IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxODAwMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjM1OjI0LjUwNDQ1ODE2M1oiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzMTEzNzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX2NoZWNrX21jX3JjdVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pZ21wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaWdtcC5jPTI4MDA9dm9pZCBpcF9tY19kcm9wX3NvY2tldChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjgyNS0vKiBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgKi9cXG5uZXQvaXB2NC9pZ21wLmM6MjgyNjppbnQgaXBfY2hlY2tfbWNfcmN1KHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIG1jX2FkZHIsIF9fYmUzMiBzcmNfYWRkciwgdTggcHJvdG8pXFxubmV0L2lwdjQvaWdtcC5jLTI4Mjcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNjozNToyNC42MTc1NzY5MloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDI2NDYyNDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIHRoaW5raW5nIHRocm91Z2ggdGhpczpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgaXBfY2hlY2tfbWNfcmN1YCBGdW5jdGlvbiBDYWxscyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGZpZ3VyZSBvdXQgdGhlIGxhbmRzY2FwZSBhcm91bmQgYGlwX2NoZWNrX21jX3JjdWAuIEtub3dpbmcgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqdXNlZCogaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBhbmQgaW1wYWN0LiBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgc2l0ZXMgdG8gZ2V0IGEgZ3Jhc3Agb24gdGhlIGJpZ2dlciBwaWN0dXJlLiBVbmRlcnN0YW5kaW5nIGNvbnRleHQgaXMgZXZlcnl0aGluZywgc28gbGV0J3Mgc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZCBhbmQgd2hhdCBzdXJyb3VuZGluZyBjb2RlIGxvb2tzIGxpa2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODAwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzU6MjcuNjQ0MDQyODk0WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODY3OTk4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9jaGVja19tY19yY3VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lnbXAuYz0yODAwPXZvaWQgaXBfbWNfZHJvcF9zb2NrZXQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTI4MjUtLyogY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jaygpICovXFxubmV0L2lwdjQvaWdtcC5jOjI4MjY6aW50IGlwX2NoZWNrX21jX3JjdShzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiBtY19hZGRyLCBfX2JlMzIgc3JjX2FkZHIsIHU4IHByb3RvKVxcbm5ldC9pcHY0L2lnbXAuYy0yODI3LXtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MjQ5MT1pcF9yb3V0ZV9pbnB1dF9yY3Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIGRhZGRyLCBfX2JlMzIgc2FkZHIsXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTI1MTMtXFxubmV0L2lwdjQvcm91dGUuYzoyNTE0OlxcdFxcdG91ciA9IGlwX2NoZWNrX21jX3JjdShpbl9kZXYsIGRhZGRyLCBzYWRkcixcXG5uZXQvaXB2NC9yb3V0ZS5jLTI1MTUtXFx0XFx0XFx0XFx0ICAgICAgaXBfaGRyKHNrYiktXFx1MDAzZXByb3RvY29sKTtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMjUyMi1cXHRcXHRcXHRpZiAobDNfaW5fZGV2KVxcbm5ldC9pcHY0L3JvdXRlLmM6MjUyMzpcXHRcXHRcXHRcXHRvdXIgPSBpcF9jaGVja19tY19yY3UobDNfaW5fZGV2LCBkYWRkciwgc2FkZHIsXFxubmV0L2lwdjQvcm91dGUuYy0yNTI0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGlwX2hkcihza2IpLVxcdTAwM2Vwcm90b2NvbCk7XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTI1NTk9c3RhdGljIHN0cnVjdCBydGFibGUgKl9fbWtyb3V0ZV9vdXRwdXQoY29uc3Qgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMjU5OS1cXHRcXHRmbGFncyB8PSBSVENGX01VTFRJQ0FTVCB8IFJUQ0ZfTE9DQUw7XFxubmV0L2lwdjQvcm91dGUuYzoyNjAwOlxcdFxcdGlmICghaXBfY2hlY2tfbWNfcmN1KGluX2RldiwgZmw0LVxcdTAwM2VkYWRkciwgZmw0LVxcdTAwM2VzYWRkcixcXG5uZXQvaXB2NC9yb3V0ZS5jLTI2MDEtXFx0XFx0XFx0XFx0ICAgICBmbDQtXFx1MDAzZWZsb3dpNF9wcm90bykpXFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0yNzYwPWVudW0gc2tiX2Ryb3BfcmVhc29uIHVkcF92NF9lYXJseV9kZW11eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMjc4NC1cXG5uZXQvaXB2NC91ZHAuYzoyNzg1OlxcdFxcdG91cnMgPSBpcF9jaGVja19tY19yY3UoaW5fZGV2LCBpcGgtXFx1MDAzZWRhZGRyLCBpcGgtXFx1MDAzZXNhZGRyLFxcbm5ldC9pcHY0L3VkcC5jLTI3ODYtXFx0XFx0XFx0XFx0ICAgICAgIGlwaC1cXHUwMDNlcHJvdG9jb2wpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNjozNToyNy43MzI3MjkzMTZaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk5ODg5NTc5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIE11bHRpY2FzdCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IHN0ZW1zIGZyb20gdGhlIHJvdXRpbmcgYW5kIFVEUCBlYXJseSBkZW11eCwgbWVhbmluZyBpdCdzIGhpZ2hseSBhY2Nlc3NpYmxlIGFuZCBjb3VsZCBjYXVzZSBzaWduaWZpY2FudCBpc3N1ZXMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpczogaXQncyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXG5cbk15IHByaW1hcnkgZm9jdXMsIGdpdmVuIHRoZSB2dWxuZXJhYmlsaXR5LCBzaG91bGQgYmUgdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zOiBgaXBfbWNfZGVzdHJveV9kZXZgLCBgaXBfY2hlY2tfbWNfcmN1YCwgYGlwX21jX2hhc2hfcmVtb3ZlYCwgYGlwX21jX2hhc2hfYWRkYCwgYGluZXRkZXZfZGVzdHJveWAsIGBfX19faXBfbWNfaW5jX2dyb3VwYCwgYW5kIGBfX2lwX21jX2RlY19ncm91cGAuIFRoZXNlIGFyZSBjbGVhcmx5IHRoZSBrZXkgYXJlYXMgaW52b2x2ZWQgaW4gdGhlIG11bHRpY2FzdCBncm91cCBtYW5hZ2VtZW50LCBlc3BlY2lhbGx5IGFyb3VuZCBkZXZpY2UgZGVzdHJ1Y3Rpb24gYW5kIGhhc2ggdGFibGUgb3BlcmF0aW9ucy5cblxuVGhlIGlzc3VlLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gTXVsdGljYXN0IGdyb3VwcyBhcmUgYmVpbmcgcHJvcGVybHkgcmVtb3ZlZCBmcm9tIHRoZSBkZXZpY2UncyBsaXN0LCBidXQgdGhlIGNvcnJlc3BvbmRpbmcgZW50cmllcyBpbiB0aGUgaGFzaCB0YWJsZSByZW1haW4uIElmIHRoZSBgaW5fZGV2aWNlYCBpbnN0YW5jZSBvdXRsaXZlcyB0aGUgUkNVIGdyYWNlIHBlcmlvZCDigJMgd2hpY2ggY2FuIGVhc2lseSBoYXBwZW4gZHVlIHRvIGEgc29ja2V0IGhvbGRpbmcgYSByZWZlcmVuY2Ug4oCTIHRoZW4gYGlwX2NoZWNrX21jX3JjdWAgY291bGQgYmUgY2FsbGVkLCBhbmQgaXQgd291bGQgYWNjZXNzIHRoZXNlIGRhbmdsaW5nIHBvaW50ZXJzIGluIHRoZSBgbWNfaGFzaGAgdGFibGUuIFRoaXMgaXMgYSBmdW5kYW1lbnRhbCBmdW5jdGlvbmFsIGZsYXcgaW4gdGhlIElQdjQgbXVsdGljYXN0IGltcGxlbWVudGF0aW9uLlxuXG5UaGUga2V5IGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlIGhlcmUgaXMgYElQX01VTFRJQ0FTVGAsIGVuc3VyaW5nIHRoZSBmdW5jdGlvbmFsaXR5IGlzIGV2ZW4gYXZhaWxhYmxlIHRvIGJlIHRhcmdldGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDYwMCwiT3V0cHV0VG9rZW5zIjoyMTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzU6MzMuNzMxNjI4MTgzWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzNzQzNTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9NVUxUSUNBU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF9tY19kZXN0cm95X2RldlwiLFxuICAgIFwiaXBfY2hlY2tfbWNfcmN1XCIsXG4gICAgXCJpcF9tY19oYXNoX3JlbW92ZVwiLFxuICAgIFwiaXBfbWNfaGFzaF9hZGRcIixcbiAgICBcImluZXRkZXZfZGVzdHJveVwiLFxuICAgIFwiX19fX2lwX21jX2luY19ncm91cFwiLFxuICAgIFwiX19pcF9tY19kZWNfZ3JvdXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBtdWx0aWNhc3QgZ3JvdXBzIGFyZSByZW1vdmVkIGZyb20gdGhlIGRldmljZSdzIGBtY19saXN0YCBkdXJpbmcgZGV2aWNlIGRlc3RydWN0aW9uIGJ1dCBhcmUgbGVmdCBpbiB0aGUgYG1jX2hhc2hgIHRhYmxlLiBUaGlzIGNhbiBsZWFkIHRvIGEgdXNlLWFmdGVyLWZyZWUgaWYgdGhlIGBpbl9kZXZpY2VgIG91dGxpdmVzIHRoZSBSQ1UgZ3JhY2UgcGVyaW9kIChlLmcuLCBkdWUgdG8gYSBzb2NrZXQgaG9sZGluZyBhIHJlZmVyZW5jZSkgYW5kIGBpcF9jaGVja19tY19yY3VgIGlzIGNhbGxlZCwgYWNjZXNzaW5nIHRoZSBkYW5nbGluZyBwb2ludGVycyBpbiBgbWNfaGFzaGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBJUHY0IG11bHRpY2FzdCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9NVUxUSUNBU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF9tY19kZXN0cm95X2RldlwiLFxuICAgIFwiaXBfY2hlY2tfbWNfcmN1XCIsXG4gICAgXCJpcF9tY19oYXNoX3JlbW92ZVwiLFxuICAgIFwiaXBfbWNfaGFzaF9hZGRcIixcbiAgICBcImluZXRkZXZfZGVzdHJveVwiLFxuICAgIFwiX19fX2lwX21jX2luY19ncm91cFwiLFxuICAgIFwiX19pcF9tY19kZWNfZ3JvdXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBtdWx0aWNhc3QgZ3JvdXBzIGFyZSByZW1vdmVkIGZyb20gdGhlIGRldmljZSdzIGBtY19saXN0YCBkdXJpbmcgZGV2aWNlIGRlc3RydWN0aW9uIGJ1dCBhcmUgbGVmdCBpbiB0aGUgYG1jX2hhc2hgIHRhYmxlLiBUaGlzIGNhbiBsZWFkIHRvIGEgdXNlLWFmdGVyLWZyZWUgaWYgdGhlIGBpbl9kZXZpY2VgIG91dGxpdmVzIHRoZSBSQ1UgZ3JhY2UgcGVyaW9kIChlLmcuLCBkdWUgdG8gYSBzb2NrZXQgaG9sZGluZyBhIHJlZmVyZW5jZSkgYW5kIGBpcF9jaGVja19tY19yY3VgIGlzIGNhbGxlZCwgYWNjZXNzaW5nIHRoZSBkYW5nbGluZyBwb2ludGVycyBpbiBgbWNfaGFzaGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBJUHY0IG11bHRpY2FzdCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowc8z5b[1] Phase: Succeeded StartedAt: 2026-07-02 06:35:46 +0000 UTC FinishedAt: 2026-07-02 06:35:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8z5b[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-02 06:35:46 +0000 UTC FinishedAt: 2026-07-02 06:35:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8z5b[2] Phase: Succeeded StartedAt: 2026-07-02 06:35:46 +0000 UTC FinishedAt: 2026-07-02 10:40:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8z5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"feb9500e-fbdc-4c73-b36d-d55d3a951c0e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-02 06:35:46 +0000 UTC FinishedAt: 2026-07-02 10:40:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"feb9500e-fbdc-4c73-b36d-d55d3a951c0e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowc8z5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"feb9500e-fbdc-4c73-b36d-d55d3a951c0e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-02 06:35:46 +0000 UTC FinishedAt: 2026-07-02 06:36:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8z5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"feb9500e-fbdc-4c73-b36d-d55d3a951c0e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-02 06:35:46 +0000 UTC FinishedAt: 2026-07-02 06:35:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowc8z5b/series-workflowc8z5b-convert-artifact-236408155/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc8z5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"feb9500e-fbdc-4c73-b36d-d55d3a951c0e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-02 06:36:06 +0000 UTC FinishedAt: 2026-07-02 07:07:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8z5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"feb9500e-fbdc-4c73-b36d-d55d3a951c0e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-02 06:36:06 +0000 UTC FinishedAt: 2026-07-02 07:07:58 +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:*74d40bcd-6796-499d-b98f-7d86d6154abe,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-workflowc8z5b/series-workflowc8z5b-convert-artifact-236408155/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": "e0765315-a92a-4c0e-9a22-f036c9290b22", "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-workflowc8z5b/series-workflowc8z5b-build-action-1409223321/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc8z5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"feb9500e-fbdc-4c73-b36d-d55d3a951c0e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-02 06:36:06 +0000 UTC FinishedAt: 2026-07-02 07:07:48 +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:*74d40bcd-6796-499d-b98f-7d86d6154abe,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-workflowc8z5b/series-workflowc8z5b-convert-artifact-236408155/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": "e0765315-a92a-4c0e-9a22-f036c9290b22", "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-workflowc8z5b/series-workflowc8z5b-build-action-1409223321/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc8z5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"feb9500e-fbdc-4c73-b36d-d55d3a951c0e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-02 07:07:58 +0000 UTC FinishedAt: 2026-07-02 07:07:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8z5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"feb9500e-fbdc-4c73-b36d-d55d3a951c0e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-02 07:07:58 +0000 UTC FinishedAt: 2026-07-02 07:07:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8z5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"feb9500e-fbdc-4c73-b36d-d55d3a951c0e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-02 07:07:58 +0000 UTC FinishedAt: 2026-07-02 07:08:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8z5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"feb9500e-fbdc-4c73-b36d-d55d3a951c0e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-02 07:07:58 +0000 UTC FinishedAt: 2026-07-02 07:08:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"feb9500e-fbdc-4c73-b36d-d55d3a951c0e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowc8z5b/series-workflowc8z5b-convert-artifact-3556315058/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc8z5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"feb9500e-fbdc-4c73-b36d-d55d3a951c0e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-02 07:08:08 +0000 UTC FinishedAt: 2026-07-02 07:09:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8z5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"feb9500e-fbdc-4c73-b36d-d55d3a951c0e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-02 07:08:08 +0000 UTC FinishedAt: 2026-07-02 07:09:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e0765315-a92a-4c0e-9a22-f036c9290b22,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-workflowc8z5b/series-workflowc8z5b-build-action-1409223321/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-workflowc8z5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"feb9500e-fbdc-4c73-b36d-d55d3a951c0e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-02 07:09:57 +0000 UTC FinishedAt: 2026-07-02 07:09:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8z5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"feb9500e-fbdc-4c73-b36d-d55d3a951c0e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-02 07:09:57 +0000 UTC FinishedAt: 2026-07-02 07:09:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8z5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"feb9500e-fbdc-4c73-b36d-d55d3a951c0e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-02 07:09:57 +0000 UTC FinishedAt: 2026-07-02 07:34:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8z5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"feb9500e-fbdc-4c73-b36d-d55d3a951c0e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-02 07:09:57 +0000 UTC FinishedAt: 2026-07-02 07:34:51 +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:*74d40bcd-6796-499d-b98f-7d86d6154abe,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-workflowc8z5b/series-workflowc8z5b-convert-artifact-3556315058/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": "c5310e8c-1b10-444a-a151-bc951cb1d05e", "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-workflowc8z5b/series-workflowc8z5b-build-action-4197843270/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc8z5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"feb9500e-fbdc-4c73-b36d-d55d3a951c0e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-02 07:09:57 +0000 UTC FinishedAt: 2026-07-02 07:34:40 +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:*74d40bcd-6796-499d-b98f-7d86d6154abe,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-workflowc8z5b/series-workflowc8z5b-convert-artifact-3556315058/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": "c5310e8c-1b10-444a-a151-bc951cb1d05e", "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-workflowc8z5b/series-workflowc8z5b-build-action-4197843270/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc8z5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"feb9500e-fbdc-4c73-b36d-d55d3a951c0e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-02 07:34:51 +0000 UTC FinishedAt: 2026-07-02 07:34:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8z5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"feb9500e-fbdc-4c73-b36d-d55d3a951c0e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-02 07:34:51 +0000 UTC FinishedAt: 2026-07-02 07:34:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8z5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"feb9500e-fbdc-4c73-b36d-d55d3a951c0e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-02 07:34:51 +0000 UTC FinishedAt: 2026-07-02 07:37:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8z5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"feb9500e-fbdc-4c73-b36d-d55d3a951c0e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-02 07:34:51 +0000 UTC FinishedAt: 2026-07-02 07:37:00 +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:*c5310e8c-1b10-444a-a151-bc951cb1d05e,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-workflowc8z5b/series-workflowc8z5b-build-action-4197843270/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-workflowc8z5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"feb9500e-fbdc-4c73-b36d-d55d3a951c0e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-02 07:37:10 +0000 UTC FinishedAt: 2026-07-02 10:40:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8z5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"feb9500e-fbdc-4c73-b36d-d55d3a951c0e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-02 07:37:10 +0000 UTC FinishedAt: 2026-07-02 10:40:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"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:*e0765315-a92a-4c0e-9a22-f036c9290b22,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c5310e8c-1b10-444a-a151-bc951cb1d05e,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-workflowc8z5b/series-workflowc8z5b-build-action-1409223321/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-workflowc8z5b/series-workflowc8z5b-build-action-4197843270/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowc8z5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"feb9500e-fbdc-4c73-b36d-d55d3a951c0e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-02 07:37:10 +0000 UTC FinishedAt: 2026-07-02 07:37:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8z5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"feb9500e-fbdc-4c73-b36d-d55d3a951c0e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-02 07:37:10 +0000 UTC FinishedAt: 2026-07-02 07:37:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"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-workflowc8z5b/series-workflowc8z5b-convert-artifact-67945223/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc8z5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"feb9500e-fbdc-4c73-b36d-d55d3a951c0e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-02 07:37:10 +0000 UTC FinishedAt: 2026-07-02 07:37:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8z5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"feb9500e-fbdc-4c73-b36d-d55d3a951c0e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-02 07:37:10 +0000 UTC FinishedAt: 2026-07-02 07:37:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8z5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"feb9500e-fbdc-4c73-b36d-d55d3a951c0e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-02 07:37:10 +0000 UTC FinishedAt: 2026-07-02 07:37:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8z5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"feb9500e-fbdc-4c73-b36d-d55d3a951c0e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-02 07:37:36 +0000 UTC FinishedAt: 2026-07-02 10:40:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8z5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_destroy_dev","ip_check_mc_rcu","ip_mc_hash_remove","ip_mc_hash_add","inetdev_destroy","____ip_mc_inc_group","__ip_mc_dec_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTICAST"],"series_id":"feb9500e-fbdc-4c73-b36d-d55d3a951c0e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-02 07:37:36 +0000 UTC FinishedAt: 2026-07-02 10:40:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e0765315-a92a-4c0e-9a22-f036c9290b22,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c5310e8c-1b10-444a-a151-bc951cb1d05e,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-workflowc8z5b/series-workflowc8z5b-build-action-1409223321/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-workflowc8z5b/series-workflowc8z5b-build-action-4197843270/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-workflowc8z5b/series-workflowc8z5b-convert-artifact-67945223/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,}