Name: series-workflowhh52f Phase: Succeeded StartedAt: 2026-06-29 09:12:42 +0000 UTC FinishedAt: 2026-06-29 13:33:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh52f[0] Phase: Succeeded StartedAt: 2026-06-29 09:12:42 +0000 UTC FinishedAt: 2026-06-29 09:27:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh52f[0].run-triage Phase: Succeeded StartedAt: 2026-06-29 09:12:42 +0000 UTC FinishedAt: 2026-06-29 09:27:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_NVMEM", "BT_HCIUART_QCA" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_NVMEM", "BT_HCIUART_QCA" ], "series_id": "c05fa482-aa60-497e-9913-7d4d7c8bea9b" }, "track": "KASAN", "fuzz": { "focus": [ "fs", "net" ], "focus_symbols": [ "blk_nvmem_reg_read", "blk_nvmem_add", "hci_dev_get_bd_addr_from_nvmem", "of_get_nvmem_eui48" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA5OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19OVk1FTSYjMzQ7LAogICAgJiMzNDtCVF9IQ0lVQVJUX1FDQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jsa19udm1lbV9yZWdfcmVhZCYjMzQ7LAogICAgJiMzNDtibGtfbnZtZW1fYWRkJiMzNDssCiAgICAmIzM0O2hjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9udm1lbSYjMzQ7LAogICAgJiMzNDtvZl9nZXRfbnZtZW1fZXVpNDgmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBibG9jayBkZXZpY2UgTlZNRU0gcHJvdmlkZXIgd2hpY2ggYWxsb3dzIGJsb2NrIGRldmljZXMgdG8gYWN0IGFzIE5WTUVNIHByb3ZpZGVycy4gSXQgYWxzbyBhZGRzIGxvZ2ljIHRvIHJlYWQgQmx1ZXRvb3RoIGRldmljZSBhZGRyZXNzZXMgYW5kIE1BQyBhZGRyZXNzZXMgZnJvbSBOVk1FTSBjZWxscy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgYmxvY2ssIG5ldCwgYW5kIGJsdWV0b290aCBzdWJzeXN0ZW1zIHRoYXQgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGUuZy4sIHdoZW4gYWRkaW5nIGEgYmxvY2sgZGV2aWNlIG9yIHNldHRpbmcgdXAgYSB2aXJ0dWFsIEhDSSBkZXZpY2Ugd2l0aCB0aGUgYXBwcm9wcmlhdGUgcXVpcmtzKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwOToyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDUzNmYwZGUyNmUyNjVhNjI4Zjc2NWQwNTI0MDMxM2VjNGVmOTJiYzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyOSAwOToyNjo1MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tYy1jYXJkLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tYy1jYXJkLnlhbWxcbmluZGV4IGE2MWQ2Yzk2ZGY3NTkxLi5jYTkwN2FkNzMwOTU5MiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvbW1jLWNhcmQueWFtbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21tYy9tbWMtY2FyZC55YW1sXG5AQCAtNDAsNiAmIzQzOzQwLDkgQEAgcGF0dGVyblByb3BlcnRpZXM6XG4gICAgICAgICBjb250YWluczpcbiAgICAgICAgICAgY29uc3Q6IGZpeGVkLXBhcnRpdGlvbnNcbiBcbiYjNDM7ICAgICAgbnZtZW0tbGF5b3V0OlxuJiM0MzsgICAgICAgICRyZWY6IC9zY2hlbWFzL252bWVtL2xheW91dHMvbnZtZW0tbGF5b3V0LnlhbWxcbiYjNDM7XG4gcmVxdWlyZWQ6XG4gICAtIGNvbXBhdGlibGVcbiAgIC0gcmVnXG5AQCAtODYsNiAmIzQzOzg5LDMyIEBAIGV4YW1wbGVzOlxuICAgICAgICAgICAgICAgICAgICAgcmVhZC1vbmx5O1xuICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgIH07XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICBwYXJ0aXRpb25zLWJvb3QyIHtcbiYjNDM7ICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDtmaXhlZC1wYXJ0aXRpb25zXCYjMzQ7O1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgICAgICBudm1lbS1sYXlvdXQge1xuJiM0MzsgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDtmaXhlZC1sYXlvdXRcJiMzNDs7XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgIG1hYy1hZGRyQDQ0MDAge1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7bWFjLWJhc2VcJiMzNDs7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzB4NDQwMCAweDZcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICNudm1lbS1jZWxsLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICB9O1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBiZC1hZGRyQDU0MDAge1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7bWFjLWJhc2VcJiMzNDs7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzB4NTQwMCAweDZcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICNudm1lbS1jZWxsLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICB9O1xuJiM0MzsgICAgICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiAgICAgICAgIH07XG4gICAgIH07XG4gXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9ibHVldG9vdGgvcWNvbSxibHVldG9vdGgtY29tbW9uLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2JsdWV0b290aC9xY29tLGJsdWV0b290aC1jb21tb24ueWFtbFxuaW5kZXggYzhlOWM1NWMxYWZiNGMuLjdjYjI4ZjMwYzlhZjAzIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9ibHVldG9vdGgvcWNvbSxibHVldG9vdGgtY29tbW9uLnlhbWxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYmx1ZXRvb3RoL3Fjb20sYmx1ZXRvb3RoLWNvbW1vbi55YW1sXG5AQCAtMjIsNCAmIzQzOzIyLDEzIEBAIHByb3BlcnRpZXM6XG4gICAgIGRlc2NyaXB0aW9uOlxuICAgICAgIGJvb3QgZmlybXdhcmUgaXMgaW5jb3JyZWN0bHkgcGFzc2luZyB0aGUgYWRkcmVzcyBpbiBiaWctZW5kaWFuIG9yZGVyXG4gXG4mIzQzOyAgbnZtZW0tY2VsbHM6XG4mIzQzOyAgICBtYXhJdGVtczogMVxuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIE52bWVtIGRhdGEgY2VsbCB0aGF0IGNvbnRhaW5zIGEgNiBieXRlIEJEIGFkZHJlc3Mgd2l0aCB0aGUgbW9zdFxuJiM0MzsgICAgICBzaWduaWZpY2FudCBieXRlIGZpcnN0IChiaWctZW5kaWFuKS5cbiYjNDM7XG4mIzQzOyAgbnZtZW0tY2VsbC1uYW1lczpcbiYjNDM7ICAgIGNvbnN0OiBsb2NhbC1iZC1hZGRyZXNzXG4mIzQzO1xuIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB0cnVlXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9xY29tLGF0aDEway55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9xY29tLGF0aDEway55YW1sXG5pbmRleCBkNGY0ZDcyZWUwZDM4OC4uN2Y5ZDE2Y2I3YzE0MzMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL3Fjb20sYXRoMTBrLnlhbWxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3MvcWNvbSxhdGgxMGsueWFtbFxuQEAgLTkyLDYgJiM0Mzs5MiwyMiBAQCBwcm9wZXJ0aWVzOlxuIFxuICAgaWVlZTgwMjExLWZyZXEtbGltaXQ6IHRydWVcbiBcbiYjNDM7ICBudm1lbS1jZWxsczpcbiYjNDM7ICAgIG1pbkl0ZW1zOiAxXG4mIzQzOyAgICBtYXhJdGVtczogM1xuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIFJlZmVyZW5jZXMgdG8gbnZtZW0gY2VsbHMgZm9yIE1BQyBhZGRyZXNzIGFuZC9vciBjYWxpYnJhdGlvbiBkYXRhLlxuJiM0MzsgICAgICBTdXBwb3J0ZWQgY2VsbCBuYW1lcyBhcmUgbWFjLWFkZHJlc3MsIGNhbGlicmF0aW9uLCBhbmQgcHJlLWNhbGlicmF0aW9uLlxuJiM0MztcbiYjNDM7ICBudm1lbS1jZWxsLW5hbWVzOlxuJiM0MzsgICAgbWluSXRlbXM6IDFcbiYjNDM7ICAgIG1heEl0ZW1zOiAzXG4mIzQzOyAgICBpdGVtczpcbiYjNDM7ICAgICAgZW51bTpcbiYjNDM7ICAgICAgICAtIG1hYy1hZGRyZXNzXG4mIzQzOyAgICAgICAgLSBjYWxpYnJhdGlvblxuJiM0MzsgICAgICAgIC0gcHJlLWNhbGlicmF0aW9uXG4mIzQzO1xuICAgcWNvbSxjYWxpYnJhdGlvbi1kYXRhOlxuICAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy91aW50OC1hcnJheVxuICAgICBkZXNjcmlwdGlvbjpcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vcXJiMjIxMC1hcmR1aW5vLWltb2xhLmR0cyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9xcmIyMjEwLWFyZHVpbm8taW1vbGEuZHRzXG5pbmRleCBiZjA4OGZhOTgwN2YwNC4uMTI4YzdhN2U3NmI1YjAgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vcXJiMjIxMC1hcmR1aW5vLWltb2xhLmR0c1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL3FyYjIyMTAtYXJkdWluby1pbW9sYS5kdHNcbkBAIC00MDksNyAmIzQzOzQwOSw0MCBAQCBcdTAwMjZzZGhjXzEge1xuIFx0bm8tc2RpbztcbiBcdG5vLXNkO1xuIFxuJiM0MztcdCNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7XHQjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzO1xuIFx0c3RhdHVzID0gXCYjMzQ7b2theVwmIzM0OztcbiYjNDM7XG4mIzQzO1x0Y2FyZEAwIHtcbiYjNDM7XHRcdGNvbXBhdGlibGUgPSBcJiMzNDttbWMtY2FyZFwmIzM0OztcbiYjNDM7XHRcdHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzO1xuJiM0MztcdFx0cGFydGl0aW9ucy1ib290MSB7XG4mIzQzO1x0XHRcdGNvbXBhdGlibGUgPSBcJiMzNDtmaXhlZC1wYXJ0aXRpb25zXCYjMzQ7O1xuJiM0MztcbiYjNDM7XHRcdFx0I2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MztcdFx0XHQjc2l6ZS1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzO1xuJiM0MztcdFx0XHRudm1lbS1sYXlvdXQge1xuJiM0MztcdFx0XHRcdGNvbXBhdGlibGUgPSBcJiMzNDtmaXhlZC1sYXlvdXRcJiMzNDs7XG4mIzQzO1x0XHRcdFx0I2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MztcdFx0XHRcdCNzaXplLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0d2lmaV9tYWNfYWRkcjogbWFjLWFkZHJANDQwMCB7XG4mIzQzO1x0XHRcdFx0XHRjb21wYXRpYmxlID0gXCYjMzQ7bWFjLWJhc2VcJiMzNDs7XG4mIzQzO1x0XHRcdFx0XHRyZWcgPSBcdTAwM2MweDQ0MDAgMHg2XHUwMDNlO1xuJiM0MztcdFx0XHRcdFx0I252bWVtLWNlbGwtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MztcdFx0XHRcdH07XG4mIzQzO1xuJiM0MztcdFx0XHRcdGJkX2FkZHI6IGJkLWFkZHJANTQwMCB7XG4mIzQzO1x0XHRcdFx0XHRjb21wYXRpYmxlID0gXCYjMzQ7bWFjLWJhc2VcJiMzNDs7XG4mIzQzO1x0XHRcdFx0XHRyZWcgPSBcdTAwM2MweDU0MDAgMHg2XHUwMDNlO1xuJiM0MztcdFx0XHRcdFx0I252bWVtLWNlbGwtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MztcdFx0XHRcdH07XG4mIzQzO1x0XHRcdH07XG4mIzQzO1x0XHR9O1xuJiM0MztcdH07XG4gfTtcbiBcbiBcdTAwMjZzcGk1IHtcbkBAIC01MTIsNiAmIzQzOzU0NSw5IEBAIGJsdWV0b290aCB7XG4gXHRcdHZkZGNoMC1zdXBwbHkgPSBcdTAwM2NcdTAwMjZwbTQxMjVfbDIyXHUwMDNlO1xuIFx0XHRlbmFibGUtZ3Bpb3MgPSBcdTAwM2NcdTAwMjZ0bG1tIDg3IEdQSU9fQUNUSVZFX0hJR0hcdTAwM2U7XG4gXHRcdG1heC1zcGVlZCA9IFx1MDAzYzMwMDAwMDBcdTAwM2U7XG4mIzQzO1xuJiM0MztcdFx0bnZtZW0tY2VsbHMgPSBcdTAwM2NcdTAwMjZiZF9hZGRyIDBcdTAwM2U7XG4mIzQzO1x0XHRudm1lbS1jZWxsLW5hbWVzID0gXCYjMzQ7bG9jYWwtYmQtYWRkcmVzc1wmIzM0OztcbiBcdH07XG4gfTtcbiBcbkBAIC01NTcsNiAmIzQzOzU5Myw5IEBAIFx1MDAyNndpZmkge1xuIFx0cWNvbSxhdGgxMGstY2FsaWJyYXRpb24tdmFyaWFudCA9IFwmIzM0O0FyZHVpbm9JbW9sYVwmIzM0OztcbiBcdGZpcm13YXJlLW5hbWUgPSBcJiMzNDtxY20yMjkwXCYjMzQ7O1xuIFxuJiM0MztcdG52bWVtLWNlbGxzID0gXHUwMDNjXHUwMDI2d2lmaV9tYWNfYWRkciAwXHUwMDNlO1xuJiM0MztcdG52bWVtLWNlbGwtbmFtZXMgPSBcJiMzNDttYWMtYWRkcmVzc1wmIzM0OztcbiYjNDM7XG4gXHRzdGF0dXMgPSBcJiMzNDtva2F5XCYjMzQ7O1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvYmxvY2svS2NvbmZpZyBiL2Jsb2NrL0tjb25maWdcbmluZGV4IDcwZTRhNjZkOTQxZmY2Li5hZWM1ZDlmYzEzYTNkMyAxMDA2NDRcbi0tLSBhL2Jsb2NrL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL0tjb25maWdcbkBAIC0yMDksNiAmIzQzOzIwOSwxNSBAQCBjb25maWcgQkxLX0lOTElORV9FTkNSWVBUSU9OX0ZBTExCQUNLXG4gXHQgIGJ5IGZhbGxpbmcgYmFjayB0byB0aGUga2VybmVsIGNyeXB0byBBUEkgd2hlbiBpbmxpbmVcbiBcdCAgZW5jcnlwdGlvbiBoYXJkd2FyZSBpcyBub3QgcHJlc2VudC5cbiBcbiYjNDM7Y29uZmlnIEJMS19OVk1FTVxuJiM0MztcdGJvb2wgXCYjMzQ7QmxvY2sgZGV2aWNlIE5WTUVNIHByb3ZpZGVyXCYjMzQ7XG4mIzQzO1x0ZGVwZW5kcyBvbiBPRlxuJiM0MztcdGRlcGVuZHMgb24gTlZNRU1cbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBBbGxvdyBibG9jayBkZXZpY2VzIChvciBwYXJ0aXRpb25zKSB0byBhY3QgYXMgTlZNRU0gcHJvdmlkZXJzLFxuJiM0MztcdCAgdHlwaWNhbGx5IHVzZWQgd2l0aCBlTU1DIHRvIHN0b3JlIE1BQyBhZGRyZXNzZXMgb3IgV2ktRmlcbiYjNDM7XHQgIGNhbGlicmF0aW9uIGRhdGEgb24gZW1iZWRkZWQgZGV2aWNlcy5cbiYjNDM7XG4gc291cmNlIFwmIzM0O2Jsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZ1wmIzM0O1xuIFxuIGNvbmZpZyBCTEtfUE1cbmRpZmYgLS1naXQgYS9ibG9jay9NYWtlZmlsZSBiL2Jsb2NrL01ha2VmaWxlXG5pbmRleCBlN2JkMzIwZTNkNjk3MS4uODIwMDI5N2ZiY2JhYjMgMTAwNjQ0XG4tLS0gYS9ibG9jay9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svTWFrZWZpbGVcbkBAIC0zOSwzICYjNDM7MzksNCBAQCBvYmotJChDT05GSUdfQkxLX0lOTElORV9FTkNSWVBUSU9OKVx0JiM0Mzs9IGJsay1jcnlwdG8ubyBibGstY3J5cHRvLXByb2ZpbGUubyBcXFxuIFx0XHRcdFx0XHQgICBibGstY3J5cHRvLXN5c2ZzLm9cbiBvYmotJChDT05GSUdfQkxLX0lOTElORV9FTkNSWVBUSU9OX0ZBTExCQUNLKVx0JiM0Mzs9IGJsay1jcnlwdG8tZmFsbGJhY2sub1xuIG9iai0kKENPTkZJR19CTE9DS19IT0xERVJfREVQUkVDQVRFRClcdCYjNDM7PSBob2xkZXIub1xuJiM0MztvYmotJChDT05GSUdfQkxLX05WTUVNKSAgICAgICAgICAgICAgICAmIzQzOz0gYmxrLW52bWVtLm9cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstbnZtZW0uYyBiL2Jsb2NrL2Jsay1udm1lbS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjRiMzVhNzQyNTUwNTkzXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstbnZtZW0uY1xuQEAgLTAsMCAmIzQzOzEsMTExIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4mIzQzOy8qXG4mIzQzOyAqIGJsb2NrIGRldmljZSBOVk1FTSBwcm92aWRlclxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjQgRGFuaWVsIEdvbGxlIFx1MDAzY2RhbmllbEBtYWtyb3RvcGlhLm9yZ1x1MDAzZVxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIFF1YWxjb21tIFRlY2hub2xvZ2llcywgSW5jLiBhbmQvb3IgaXRzIHN1YnNpZGlhcmllcy5cbiYjNDM7ICpcbiYjNDM7ICogVXNlZnVsIG9uIGRldmljZXMgdXNpbmcgYSBwYXJ0aXRpb24gb24gYW4gZU1NQyBmb3IgTUFDIGFkZHJlc3NlcyBvclxuJiM0MzsgKiBXaS1GaSBjYWxpYnJhdGlvbiBFRVBST00gZGF0YS5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbnZtZW0tcHJvdmlkZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9udm1lbS1jb25zdW1lci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2Jsay5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGJsa19udm1lbV9yZWdfcmVhZCh2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgZnJvbSwgdm9pZCAqdmFsLCBzaXplX3QgYnl0ZXMpXG4mIzQzO3tcbiYjNDM7XHRkZXZfdCBkZXZ0ID0gKGRldl90KSh1aW50cHRyX3QpcHJpdjtcbiYjNDM7XHRzaXplX3QgYnl0ZXNfbGVmdCA9IGJ5dGVzO1xuJiM0MztcdGxvZmZfdCBwb3MgPSBmcm9tO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3QgZmlsZSAqYmRldl9maWxlIF9fZnJlZShmcHV0KSA9XG4mIzQzO1x0XHRiZGV2X2ZpbGVfb3Blbl9ieV9kZXYoZGV2dCwgQkxLX09QRU5fUkVBRCwgTlVMTCwgTlVMTCk7XG4mIzQzO1x0aWYgKElTX0VSUihiZGV2X2ZpbGUpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoYmRldl9maWxlKTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGJ5dGVzX2xlZnQpIHtcbiYjNDM7XHRcdHBnb2ZmX3QgZl9pbmRleCA9IHBvcyBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiYjNDM7XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4mIzQzO1x0XHRzaXplX3QgZm9saW9fb2ZmO1xuJiM0MztcdFx0c2l6ZV90IHRvX3JlYWQ7XG4mIzQzO1xuJiM0MztcdFx0Zm9saW8gPSByZWFkX21hcHBpbmdfZm9saW8oYmRldl9maWxlLVx1MDAzZWZfbWFwcGluZywgZl9pbmRleCwgTlVMTCk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKGZvbGlvKSkge1xuJiM0MztcdFx0XHRyZXQgPSBQVFJfRVJSKGZvbGlvKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0Zm9saW9fb2ZmID0gb2Zmc2V0X2luX2ZvbGlvKGZvbGlvLCBwb3MpO1xuJiM0MztcdFx0dG9fcmVhZCA9IG1pbihieXRlc19sZWZ0LCBmb2xpb19zaXplKGZvbGlvKSAtIGZvbGlvX29mZik7XG4mIzQzO1x0XHRtZW1jcHlfZnJvbV9mb2xpbyh2YWwsIGZvbGlvLCBmb2xpb19vZmYsIHRvX3JlYWQpO1xuJiM0MztcdFx0cG9zICYjNDM7PSB0b19yZWFkO1xuJiM0MztcdFx0Ynl0ZXNfbGVmdCAtPSB0b19yZWFkO1xuJiM0MztcdFx0dmFsICYjNDM7PSB0b19yZWFkO1xuJiM0MztcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBibGtfbnZtZW1fYWRkKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZiZGV2LVx1MDAzZWJkX2RldmljZTtcbiYjNDM7XHRzdHJ1Y3QgbnZtZW1fY29uZmlnIGNvbmZpZyA9IHt9O1xuJiM0MztcbiYjNDM7XHQvKiBza2lwIGRldmljZXMgd2hpY2ggZG8gbm90IGhhdmUgYSBkZXZpY2UgdHJlZSBub2RlICovXG4mIzQzO1x0aWYgKCFkZXZfb2Zfbm9kZShkZXYpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIHNraXAgZGV2aWNlcyB3aXRob3V0IGFuIG52bWVtIGxheW91dCBkZWZpbmVkICovXG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpjaGlsZCBfX2ZyZWUoZGV2aWNlX25vZGUpID1cbiYjNDM7XHRcdG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldl9vZl9ub2RlKGRldiksIFwmIzM0O252bWVtLWxheW91dFwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFjaGlsZClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIHNraXAgYmxvY2sgZGV2aWNlIHRvbyBsYXJnZSB0byBiZSByZXByZXNlbnRlZCBhcyBOVk1FTSBkZXZpY2VzLFxuJiM0MztcdCAqIG52bWVtX2NvbmZpZy5zaXplIGlzIGEgc2lnbmVkIGludFxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChiZGV2X25yX2J5dGVzKGJkZXYpIFx1MDAzZSBJTlRfTUFYKSB7XG4mIzQzO1x0XHRkZXZfd2FybihkZXYsIFwmIzM0O2Jsb2NrIGRldmljZSB0b28gbGFyZ2UgdG8gYmUgYW4gTlZNRU0gcHJvdmlkZXJcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjb25maWcuaWQgPSBOVk1FTV9ERVZJRF9OT05FO1xuJiM0MztcdGNvbmZpZy5kZXYgPSBkZXY7XG4mIzQzO1x0Y29uZmlnLm5hbWUgPSBkZXZfbmFtZShkZXYpO1xuJiM0MztcdGNvbmZpZy5vd25lciA9IFRISVNfTU9EVUxFO1xuJiM0MztcdGNvbmZpZy5wcml2ID0gKHZvaWQgKikodWludHB0cl90KWRldi1cdTAwM2VkZXZ0O1xuJiM0MztcdGNvbmZpZy5yZWdfcmVhZCA9IGJsa19udm1lbV9yZWdfcmVhZDtcbiYjNDM7XHRjb25maWcuc2l6ZSA9IGJkZXZfbnJfYnl0ZXMoYmRldik7XG4mIzQzO1x0Y29uZmlnLndvcmRfc2l6ZSA9IDE7XG4mIzQzO1x0Y29uZmlnLnN0cmlkZSA9IDE7XG4mIzQzO1x0Y29uZmlnLnJlYWRfb25seSA9IHRydWU7XG4mIzQzO1x0Y29uZmlnLnJvb3Rfb25seSA9IHRydWU7XG4mIzQzO1x0Y29uZmlnLmlnbm9yZV93cCA9IHRydWU7XG4mIzQzO1x0Y29uZmlnLm9mX25vZGUgPSB0b19vZl9ub2RlKGRldi1cdTAwM2Vmd25vZGUpO1xuJiM0MztcbiYjNDM7XHRiZGV2LVx1MDAzZWJkX252bWVtID0gbnZtZW1fcmVnaXN0ZXIoXHUwMDI2Y29uZmlnKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGJkZXYtXHUwMDNlYmRfbnZtZW0pKSB7XG4mIzQzO1x0XHRpbnQgcmV0ID0gUFRSX0VSUihiZGV2LVx1MDAzZWJkX252bWVtKTtcbiYjNDM7XG4mIzQzO1x0XHRiZGV2LVx1MDAzZWJkX252bWVtID0gTlVMTDtcbiYjNDM7XHRcdGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFwmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBOVk1FTSBkZXZpY2VcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGJsa19udm1lbV9kZWwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbiYjNDM7e1xuJiM0MztcdG52bWVtX3VucmVnaXN0ZXIoYmRldi1cdTAwM2ViZF9udm1lbSk7XG4mIzQzO1x0YmRldi1cdTAwM2ViZF9udm1lbSA9IE5VTEw7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9ibG9jay9ibGsuaCBiL2Jsb2NrL2Jsay5oXG5pbmRleCAyNWFmOGFjNWVmMGY3Ny4uZGFkOGYwZDdhMjE4ZWQgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGsuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLmhcbkBAIC04MTAsNCAmIzQzOzgxMCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYmxrX2RlYnVnZnNfdW5sb2NrKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuIFx0bWVtYWxsb2Nfbm9pb19yZXN0b3JlKG1lbWZsYWdzKTtcbiB9XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfQkxLX05WTUVNXG4mIzQzO2ludCBibGtfbnZtZW1fYWRkKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpO1xuJiM0Mzt2b2lkIGJsa19udm1lbV9kZWwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldik7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGJsa19udm1lbV9hZGQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikgeyByZXR1cm4gMDsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgYmxrX252bWVtX2RlbChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KSB7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gI2VuZGlmIC8qIEJMS19JTlRFUk5BTF9IICovXG5kaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmNcbmluZGV4IGY4NGI2YTM1NWI1NzRhLi4wYzljNWU1ZWE3YmFmZiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2dlbmhkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2dlbmhkLmNcbkBAIC00MjEsNiAmIzQzOzQyMSw4IEBAIHN0YXRpYyB2b2lkIGFkZF9kaXNrX2ZpbmFsKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIFx0XHQgKi9cbiBcdFx0ZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoZGRldiwgMCk7XG4gXHRcdGRpc2tfdWV2ZW50KGRpc2ssIEtPQkpfQUREKTtcbiYjNDM7XG4mIzQzO1x0XHRibGtfbnZtZW1fYWRkKGRpc2stXHUwMDNlcGFydDApO1xuIFx0fVxuIFxuIFx0YmxrX2FwcGx5X2JkaV9saW1pdHMoZGlzay1cdTAwM2ViZGksIFx1MDAyNmRpc2stXHUwMDNlcXVldWUtXHUwMDNlbGltaXRzKTtcbkBAIC03MDQsNiAmIzQzOzcwNiw4IEBAIHN0YXRpYyB2b2lkIF9fZGVsX2dlbmRpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXG4gXHRkaXNrX2RlbF9ldmVudHMoZGlzayk7XG4gXG4mIzQzO1x0YmxrX252bWVtX2RlbChkaXNrLVx1MDAzZXBhcnQwKTtcbiYjNDM7XG4gXHQvKlxuIFx0ICogUHJldmVudCBuZXcgb3BlbmVycyBieSB1bmxpbmtlZCB0aGUgYmRldiBpbm9kZS5cbiBcdCAqL1xuZGlmZiAtLWdpdCBhL2Jsb2NrL3BhcnRpdGlvbnMvb2YuYyBiL2Jsb2NrL3BhcnRpdGlvbnMvb2YuY1xuaW5kZXggNTM2NjRlYTA2YjY1NDAuLjYwYWEzZDY5MDZjYTFkIDEwMDY0NFxuLS0tIGEvYmxvY2svcGFydGl0aW9ucy9vZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9wYXJ0aXRpb25zL29mLmNcbkBAIC0xNSw2ICYjNDM7MTUsMTAgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9vZl9wYXJ0aXRpb24oc3RydWN0IGRldmljZV9ub2RlICpucCwgaW50IHNsb3QpXG4gXHRpbnQgYV9jZWxscyA9IG9mX25fYWRkcl9jZWxscyhucCk7XG4gXHRpbnQgc19jZWxscyA9IG9mX25fc2l6ZV9jZWxscyhucCk7XG4gXG4mIzQzO1x0LyogU2tpcCBub2RlcyB3aXRob3V0IGEgcmVnIHByb3BlcnR5IChlLmcuIG52bWVtLWxheW91dCkgKi9cbiYjNDM7XHRpZiAoIXJlZylcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcbiBcdC8qIE1ha2Ugc3VyZSByZWcgbGVuIG1hdGNoIHRoZSBleHBlY3RlZCBhZGRyIGFuZCBzaXplIGNlbGxzICovXG4gXHRpZiAobGVuIC8gc2l6ZW9mKCpyZWcpICE9IGFfY2VsbHMgJiM0Mzsgc19jZWxscylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtODIsMTQgJiM0Mzs4NiwxNSBAQCBpbnQgb2ZfcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUpXG4gXHRzbG90ID0gMTtcbiBcdC8qIFZhbGlkYXRlIHBhcml0aW9uIG9mZnNldCBhbmQgc2l6ZSAqL1xuIFx0Zm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShwYXJ0aXRpb25zX25wLCBucCkge1xuLVx0XHRpZiAodmFsaWRhdGVfb2ZfcGFydGl0aW9uKG5wLCBzbG90KSkge1xuJiM0MztcdFx0aW50IGVyciA9IHZhbGlkYXRlX29mX3BhcnRpdGlvbihucCwgc2xvdCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRcdG9mX25vZGVfcHV0KG5wKTtcbiBcdFx0XHRvZl9ub2RlX3B1dChwYXJ0aXRpb25zX25wKTtcbi1cbiBcdFx0XHRyZXR1cm4gLTE7XG4gXHRcdH1cbi1cbi1cdFx0c2xvdCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRpZiAoIWVycilcbiYjNDM7XHRcdFx0c2xvdCYjNDM7JiM0Mzs7XG4gXHR9XG4gXG4gXHRzbG90ID0gMTtcbkBAIC05OSw5ICYjNDM7MTA0LDEwIEBAIGludCBvZl9wYXJ0aXRpb24oc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSlcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuLVx0XHRhZGRfb2ZfcGFydGl0aW9uKHN0YXRlLCBzbG90LCBucCk7XG4tXG4tXHRcdHNsb3QmIzQzOyYjNDM7O1xuJiM0MztcdFx0aWYgKG9mX3Byb3BlcnR5X3ByZXNlbnQobnAsIFwmIzM0O3JlZ1wmIzM0OykpIHtcbiYjNDM7XHRcdFx0YWRkX29mX3BhcnRpdGlvbihzdGF0ZSwgc2xvdCwgbnApO1xuJiM0MztcdFx0XHRzbG90JiM0MzsmIzQzOztcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdHNlcV9idWZfcHV0cyhcdTAwMjZzdGF0ZS1cdTAwM2VwcF9idWYsIFwmIzM0O1xcblwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmNcbmluZGV4IDA0ZWJlMjkwYmM3ODRlLi4wNmNiNzg3YjA1NTlmMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmNcbkBAIC03MjMsOCAmIzQzOzcyMywxMSBAQCBzdGF0aWMgaW50IHFjYV9jaGVja19iZGFkZHIoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGNvbnN0IHN0cnVjdCBxY2FfZndfY29uZmlnICpjb1xuIFx0fVxuIFxuIFx0YmRhID0gKHN0cnVjdCBoY2lfcnBfcmVhZF9iZF9hZGRyICopc2tiLVx1MDAzZWRhdGE7XG4tXHRpZiAoIWJhY21wKFx1MDAyNmJkYS1cdTAwM2ViZGFkZHIsIFx1MDAyNmNvbmZpZy1cdTAwM2ViZGFkZHIpKVxuJiM0MztcdGlmICghYmFjbXAoXHUwMDI2YmRhLVx1MDAzZWJkYWRkciwgXHUwMDI2Y29uZmlnLVx1MDAzZWJkYWRkcikpIHtcbiBcdFx0aGNpX3NldF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfVVNFX0JEQUREUl9QUk9QRVJUWSk7XG4mIzQzO1x0XHRoY2lfc2V0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19VU0VfQkRBRERSX05WTUVNKTtcbiYjNDM7XHRcdGhjaV9zZXRfcXVpcmsoaGRldiwgSENJX1FVSVJLX0JEQUREUl9OVk1FTV9CRSk7XG4mIzQzO1x0fVxuIFxuIFx0a2ZyZWVfc2tiKHNrYik7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbmluZGV4IDg4MDhlZTc2ZTczYzA5Li5hY2U2ZjU5Yjg2MGQwOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbkBAIC03Myw2ICYjNDM7NzMsOSBAQCBzdHJ1Y3QgYmxvY2tfZGV2aWNlIHtcbiBcdGludFx0XHRcdGJkX3dyaXRlcnM7XG4gI2lmZGVmIENPTkZJR19TRUNVUklUWVxuIFx0dm9pZFx0XHRcdCpiZF9zZWN1cml0eTtcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZmRlZiBDT05GSUdfQkxLX05WTUVNXG4mIzQzO1x0c3RydWN0IG52bWVtX2RldmljZVx0KmJkX252bWVtO1xuICNlbmRpZlxuIFx0LypcbiBcdCAqIGtlZXAgdGhpcyBvdXQtb2YtbGluZSBhcyBpdCYjMzk7cyBib3RoIGJpZyBhbmQgbm90IG5lZWRlZCBpbiB0aGUgZmFzdFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5pbmRleCA5MjEzYTU3MTZmOTVhNy4uNWE3NGJkNWZiYTk4NDAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5AQCAtMzAsNiAmIzQzOzMwLDcgQEBcbiBcbiBzdHJ1Y3QgbW9kdWxlO1xuIHN0cnVjdCByZXF1ZXN0X3F1ZXVlO1xuJiM0MztzdHJ1Y3QgbnZtZW1fZGV2aWNlO1xuIHN0cnVjdCBlbGV2YXRvcl9xdWV1ZTtcbiBzdHJ1Y3QgYmxrX3RyYWNlO1xuIHN0cnVjdCByZXF1ZXN0O1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb2ZfbmV0LmggYi9pbmNsdWRlL2xpbnV4L29mX25ldC5oXG5pbmRleCBkODg3MTVhMGIzYTUyZi4uNzg1NGJhNTU1ZDlhNTUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L29mX25ldC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L29mX25ldC5oXG5AQCAtMTUsNiAmIzQzOzE1LDcgQEAgc3RydWN0IG5ldF9kZXZpY2U7XG4gZXh0ZXJuIGludCBvZl9nZXRfcGh5X21vZGUoc3RydWN0IGRldmljZV9ub2RlICpucCwgcGh5X2ludGVyZmFjZV90ICppbnRlcmZhY2UpO1xuIGV4dGVybiBpbnQgb2ZfZ2V0X21hY19hZGRyZXNzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHU4ICptYWMpO1xuIGV4dGVybiBpbnQgb2ZfZ2V0X21hY19hZGRyZXNzX252bWVtKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHU4ICptYWMpO1xuJiM0MztpbnQgb2ZfZ2V0X252bWVtX2V1aTQ4KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGNvbnN0IGNoYXIgKmNlbGxfbmFtZSwgdTggKmFkZHIpO1xuIGludCBvZl9nZXRfZXRoZGV2X2FkZHJlc3Moc3RydWN0IGRldmljZV9ub2RlICpucCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICpvZl9maW5kX25ldF9kZXZpY2VfYnlfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTtcbiAjZWxzZVxuQEAgLTM0LDYgJiM0MzszNSwxMiBAQCBzdGF0aWMgaW5saW5lIGludCBvZl9nZXRfbWFjX2FkZHJlc3NfbnZtZW0oc3RydWN0IGRldmljZV9ub2RlICpucCwgdTggKm1hYylcbiBcdHJldHVybiAtRU5PREVWO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgb2ZfZ2V0X252bWVtX2V1aTQ4KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4mIzQzO1x0XHRcdFx0ICAgICAgY29uc3QgY2hhciAqY2VsbF9uYW1lLCB1OCAqYWRkcilcbiYjNDM7e1xuJiM0MztcdHJldHVybiAtRU5PREVWO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgaW50IG9mX2dldF9ldGhkZXZfYWRkcmVzcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHJldHVybiAtRU5PREVWO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaFxuaW5kZXggMzgxODZhMjQ1ZjE0ZGIuLjE0NWFiOTRlNTE0ODJmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmhcbkBAIC0xNjEsNiAmIzQzOzE2MSwyNCBAQCBlbnVtIHtcbiBcdCAqL1xuIFx0SENJX1FVSVJLX0JEQUREUl9QUk9QRVJUWV9CUk9LRU4sXG4gXG4mIzQzO1x0LyogV2hlbiB0aGlzIHF1aXJrIGlzIHNldCwgdGhlIHB1YmxpYyBCbHVldG9vdGggYWRkcmVzc1xuJiM0MztcdCAqIGluaXRpYWxseSByZXBvcnRlZCBieSBIQ0kgUmVhZCBCRCBBZGRyZXNzIGNvbW1hbmRcbiYjNDM7XHQgKiBpcyBjb25zaWRlcmVkIGludmFsaWQuIFRoZSBwdWJsaWMgQkQgQWRkcmVzcyBjYW4gYmVcbiYjNDM7XHQgKiByZXRyaWV2ZWQgdmlhIGEgJiMzOTtsb2NhbC1iZC1hZGRyZXNzJiMzOTsgTlZNRU0gY2VsbC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoaXMgcXVpcmsgY2FuIGJlIHNldCBiZWZvcmUgaGNpX3JlZ2lzdGVyX2RldiBpcyBjYWxsZWQgb3JcbiYjNDM7XHQgKiBkdXJpbmcgdGhlIGhkZXYtXHUwMDNlc2V0dXAgdmVuZG9yIGNhbGxiYWNrLlxuJiM0MztcdCAqL1xuJiM0MztcdEhDSV9RVUlSS19VU0VfQkRBRERSX05WTUVNLFxuJiM0MztcbiYjNDM7XHQvKiBXaGVuIHRoaXMgcXVpcmsgaXMgc2V0LCB0aGUgQmx1ZXRvb3RoIERldmljZSBBZGRyZXNzIHByb3ZpZGVkIGJ5XG4mIzQzO1x0ICogdGhlICYjMzk7bG9jYWwtYmQtYWRkcmVzcyYjMzk7IE5WTUVNIGlzIHN0b3JlZCBpbiBiaWctZW5kaWFuIG9yZGVyLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGhpcyBxdWlyayBjYW4gYmUgc2V0IGJlZm9yZSBoY2lfcmVnaXN0ZXJfZGV2IGlzIGNhbGxlZCBvclxuJiM0MztcdCAqIGR1cmluZyB0aGUgaGRldi1cdTAwM2VzZXR1cCB2ZW5kb3IgY2FsbGJhY2suXG4mIzQzO1x0ICovXG4mIzQzO1x0SENJX1FVSVJLX0JEQUREUl9OVk1FTV9CRSxcbiYjNDM7XG4gXHQvKiBXaGVuIHRoaXMgcXVpcmsgaXMgc2V0LCB0aGUgZHVwbGljYXRlIGZpbHRlcmluZyBkdXJpbmdcbiBcdCAqIHNjYW5uaW5nIGlzIGJhc2VkIG9uIEJsdWV0b290aCBkZXZpY2VzIGFkZHJlc3Nlcy4gVG8gYWxsb3dcbiBcdCAqIFJTU0kgYmFzZWQgdXBkYXRlcywgcmVzdGFydCBzY2FubmluZyBpZiBuZWVkZWQuXG5kaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfc3luYy5jIGIvbmV0L2JsdWV0b290aC9oY2lfc3luYy5jXG5pbmRleCAzYmU4YzM1ODFjNmNhYS4uNzM0ZWVkMjBkZTA0NGIgMTAwNjQ0XG4tLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ibHVldG9vdGgvaGNpX3N5bmMuY1xuQEAgLTcsNiAmIzQzOzcsNyBAQFxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfbmV0LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2JsdWV0b290aC9oY2lfY29yZS5oXHUwMDNlXG5AQCAtMzU5Myw2ICYjNDM7MzU5NCwzNyBAQCBpbnQgaGNpX3Bvd2VyZWRfdXBkYXRlX3N5bmMoc3RydWN0IGhjaV9kZXYgKmhkZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBoY2lfZGV2X2dldF9iZF9hZGRyX2Zyb21fbnZtZW0gLSBHZXQgdGhlIEJsdWV0b290aCBEZXZpY2UgQWRkcmVzc1xuJiM0MzsgKlx0XHRcdFx0ICAgIChCRF9BRERSKSBmb3IgYSBIQ0kgZGV2aWNlIGZyb21cbiYjNDM7ICpcdFx0XHRcdCAgICBhbiBOVk1FTSBjZWxsLlxuJiM0MzsgKiBAaGRldjpcdFRoZSBIQ0kgZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFNlYXJjaCBmb3IgJiMzOTtsb2NhbC1iZC1hZGRyZXNzJiMzOTsgTlZNRU0gY2VsbCBpbiB0aGUgZGV2aWNlIGZpcm13YXJlIG5vZGUuXG4mIzQzOyAqXG4mIzQzOyAqIEFsbC16ZXJvIEJEIGFkZHJlc3NlcyBhcmUgcmVqZWN0ZWQgKHVucHJvdmlzaW9uZWQpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBoY2lfZGV2X2dldF9iZF9hZGRyX2Zyb21fbnZtZW0oc3RydWN0IGhjaV9kZXYgKmhkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2X29mX25vZGUoaGRldi1cdTAwM2VkZXYucGFyZW50KTtcbiYjNDM7XHR1OCBiYVtzaXplb2YoYmRhZGRyX3QpXTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoIW5wKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdGVyciA9IG9mX2dldF9udm1lbV9ldWk0OChucCwgXCYjMzQ7bG9jYWwtYmQtYWRkcmVzc1wmIzM0OywgYmEpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX0JEQUREUl9OVk1FTV9CRSkpXG4mIzQzO1x0XHRiYXN3YXAoXHUwMDI2aGRldi1cdTAwM2VwdWJsaWNfYWRkciwgKGJkYWRkcl90ICopYmEpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGJhY3B5KFx1MDAyNmhkZXYtXHUwMDNlcHVibGljX2FkZHIsIChiZGFkZHJfdCAqKWJhKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaGNpX2Rldl9nZXRfYmRfYWRkcl9mcm9tX3Byb3BlcnR5IC0gR2V0IHRoZSBCbHVldG9vdGggRGV2aWNlIEFkZHJlc3NcbiAgKlx0XHRcdFx0ICAgICAgIChCRF9BRERSKSBmb3IgYSBIQ0kgZGV2aWNlIGZyb21cbkBAIC01MDcyLDEyICYjNDM7NTEwNCwxNyBAQCBzdGF0aWMgaW50IGhjaV9kZXZfc2V0dXBfc3luYyhzdHJ1Y3QgaGNpX2RldiAqaGRldilcbiBcdCAqIGl0cyBzZXR1cCBjYWxsYmFjay5cbiBcdCAqL1xuIFx0aW52YWxpZF9iZGFkZHIgPSBoY2lfdGVzdF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfSU5WQUxJRF9CREFERFIpIHx8XG4tXHRcdFx0IGhjaV90ZXN0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19VU0VfQkRBRERSX1BST1BFUlRZKTtcbiYjNDM7XHRcdFx0IGhjaV90ZXN0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19VU0VfQkRBRERSX1BST1BFUlRZKSB8fFxuJiM0MztcdFx0XHQgaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX1VTRV9CREFERFJfTlZNRU0pO1xuIFx0aWYgKCFyZXQpIHtcbiBcdFx0aWYgKGhjaV90ZXN0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19VU0VfQkRBRERSX1BST1BFUlRZKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFiYWNtcChcdTAwMjZoZGV2LVx1MDAzZXB1YmxpY19hZGRyLCBCREFERFJfQU5ZKSlcbiBcdFx0XHRoY2lfZGV2X2dldF9iZF9hZGRyX2Zyb21fcHJvcGVydHkoaGRldik7XG4gXG4mIzQzO1x0XHRpZiAoaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX1VTRV9CREFERFJfTlZNRU0pIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICFiYWNtcChcdTAwMjZoZGV2LVx1MDAzZXB1YmxpY19hZGRyLCBCREFERFJfQU5ZKSlcbiYjNDM7XHRcdFx0aGNpX2Rldl9nZXRfYmRfYWRkcl9mcm9tX252bWVtKGhkZXYpO1xuJiM0MztcbiBcdFx0aWYgKGludmFsaWRfYmRhZGRyIFx1MDAyNlx1MDAyNiBiYWNtcChcdTAwMjZoZGV2LVx1MDAzZXB1YmxpY19hZGRyLCBCREFERFJfQU5ZKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGhkZXYtXHUwMDNlc2V0X2JkYWRkcikge1xuIFx0XHRcdHJldCA9IGhkZXYtXHUwMDNlc2V0X2JkYWRkcihoZGV2LCBcdTAwMjZoZGV2LVx1MDAzZXB1YmxpY19hZGRyKTtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9vZl9uZXQuYyBiL25ldC9jb3JlL29mX25ldC5jXG5pbmRleCA5M2VhNDI1YjkyNDhhMi4uMTFjMWFjY2ExNTEyNjYgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9vZl9uZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvb2ZfbmV0LmNcbkBAIC02MSw5ICYjNDM7NjEsNyBAQCBzdGF0aWMgaW50IG9mX2dldF9tYWNfYWRkcihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBjb25zdCBjaGFyICpuYW1lLCB1OCAqYWRkcilcbiBpbnQgb2ZfZ2V0X21hY19hZGRyZXNzX252bWVtKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHU4ICphZGRyKVxuIHtcbiBcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKG5wKTtcbi1cdHN0cnVjdCBudm1lbV9jZWxsICpjZWxsO1xuLVx0Y29uc3Qgdm9pZCAqbWFjO1xuLVx0c2l6ZV90IGxlbjtcbiYjNDM7XHR1OCBtYWNbRVRIX0FMRU5dIF9fYWxpZ25lZChzaXplb2YodTE2KSk7XG4gXHRpbnQgcmV0O1xuIFxuIFx0LyogVHJ5IGxvb2t1cCBieSBkZXZpY2UgZmlyc3QsIHRoZXJlIG1pZ2h0IGJlIGEgbnZtZW1fY2VsbF9sb29rdXBcbkBAIC03NSwyNyAmIzQzOzczLDU0IEBAIGludCBvZl9nZXRfbWFjX2FkZHJlc3NfbnZtZW0oc3RydWN0IGRldmljZV9ub2RlICpucCwgdTggKmFkZHIpXG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4tXHRjZWxsID0gb2ZfbnZtZW1fY2VsbF9nZXQobnAsIFwmIzM0O21hYy1hZGRyZXNzXCYjMzQ7KTtcbiYjNDM7XHRyZXQgPSBvZl9nZXRfbnZtZW1fZXVpNDgobnAsIFwmIzM0O21hYy1hZGRyZXNzXCYjMzQ7LCBtYWMpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobWFjKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRldGhlcl9hZGRyX2NvcHkoYWRkciwgbWFjKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKG9mX2dldF9tYWNfYWRkcmVzc19udm1lbSk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogb2ZfZ2V0X252bWVtX2V1aTQ4IC0gUmVhZCBhIDYtYnl0ZSBFVUktNDggYWRkcmVzcyBmcm9tIGEgbmFtZWQgTlZNRU0gY2VsbC5cbiYjNDM7ICogQG5wOlx0XHREZXZpY2Ugbm9kZSB0byBsb29rIHVwIHRoZSBOVk1FTSBjZWxsIGZyb20uXG4mIzQzOyAqIEBjZWxsX25hbWU6XHROYW1lIG9mIHRoZSBOVk1FTSBjZWxsIChlLmcuIFwmIzM0O21hYy1hZGRyZXNzXCYjMzQ7LCBcJiMzNDtsb2NhbC1iZC1hZGRyZXNzXCYjMzQ7KS5cbiYjNDM7ICogQGFkZHI6XHRPdXRwdXQgYnVmZmVyIGZvciB0aGUgNi1ieXRlIGFkZHJlc3MuXG4mIzQzOyAqXG4mIzQzOyAqIFJlYWRzIHRoZSBuYW1lZCBOVk1FTSBjZWxsIGFuZCB2YWxpZGF0ZXMgdGhhdCBpdCBjb250YWlucyBhIG5vbi16ZXJvIDYtYnl0ZVxuJiM0MzsgKiBhZGRyZXNzLiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO2ludCBvZl9nZXRfbnZtZW1fZXVpNDgoc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3QgY2hhciAqY2VsbF9uYW1lLCB1OCAqYWRkcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBudm1lbV9jZWxsICpjZWxsO1xuJiM0MztcdGNvbnN0IHZvaWQgKmV1aTQ4O1xuJiM0MztcdHNpemVfdCBsZW47XG4mIzQzO1xuJiM0MztcdGNlbGwgPSBvZl9udm1lbV9jZWxsX2dldChucCwgY2VsbF9uYW1lKTtcbiBcdGlmIChJU19FUlIoY2VsbCkpXG4gXHRcdHJldHVybiBQVFJfRVJSKGNlbGwpO1xuIFxuLVx0bWFjID0gbnZtZW1fY2VsbF9yZWFkKGNlbGwsIFx1MDAyNmxlbik7XG4mIzQzO1x0ZXVpNDggPSBudm1lbV9jZWxsX3JlYWQoY2VsbCwgXHUwMDI2bGVuKTtcbiBcdG52bWVtX2NlbGxfcHV0KGNlbGwpO1xuIFxuLVx0aWYgKElTX0VSUihtYWMpKVxuLVx0XHRyZXR1cm4gUFRSX0VSUihtYWMpO1xuJiM0MztcdGlmIChJU19FUlIoZXVpNDgpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoZXVpNDgpO1xuIFxuLVx0aWYgKGxlbiAhPSBFVEhfQUxFTiB8fCAhaXNfdmFsaWRfZXRoZXJfYWRkcihtYWMpKSB7XG4tXHRcdGtmcmVlKG1hYyk7XG4mIzQzO1x0aWYgKGxlbiAhPSBFVEhfQUxFTiB8fCAhbWVtY2hyX2ludihldWk0OCwgMCwgRVRIX0FMRU4pKSB7XG4mIzQzO1x0XHRrZnJlZShldWk0OCk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuLVx0bWVtY3B5KGFkZHIsIG1hYywgRVRIX0FMRU4pO1xuLVx0a2ZyZWUobWFjKTtcbiYjNDM7XHRtZW1jcHkoYWRkciwgZXVpNDgsIEVUSF9BTEVOKTtcbiYjNDM7XHRrZnJlZShldWk0OCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4tRVhQT1JUX1NZTUJPTChvZl9nZXRfbWFjX2FkZHJlc3NfbnZtZW0pO1xuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChvZl9nZXRfbnZtZW1fZXVpNDgpO1xuIFxuIC8qKlxuICAqIG9mX2dldF9tYWNfYWRkcmVzcygpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDk6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX05WTUVNJiMzNDssCiAgICAmIzM0O0JUX0hDSVVBUlRfUUNBJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmxrX252bWVtX3JlZ19yZWFkJiMzNDssCiAgICAmIzM0O2Jsa19udm1lbV9hZGQmIzM0OywKICAgICYjMzQ7aGNpX2Rldl9nZXRfYmRfYWRkcl9mcm9tX252bWVtJiMzNDssCiAgICAmIzM0O29mX2dldF9udm1lbV9ldWk0OCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGJsb2NrIGRldmljZSBOVk1FTSBwcm92aWRlciB3aGljaCBhbGxvd3MgYmxvY2sgZGV2aWNlcyB0byBhY3QgYXMgTlZNRU0gcHJvdmlkZXJzLiBJdCBhbHNvIGFkZHMgbG9naWMgdG8gcmVhZCBCbHVldG9vdGggZGV2aWNlIGFkZHJlc3NlcyBhbmQgTUFDIGFkZHJlc3NlcyBmcm9tIE5WTUVNIGNlbGxzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBibG9jaywgbmV0LCBhbmQgYmx1ZXRvb3RoIHN1YnN5c3RlbXMgdGhhdCBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoZS5nLiwgd2hlbiBhZGRpbmcgYSBibG9jayBkZXZpY2Ugb3Igc2V0dGluZyB1cCBhIHZpcnR1YWwgSENJIGRldmljZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBxdWlya3MpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1MzZmMGRlMjZlMjY1YTYyOGY3NjVkMDUyNDAzMTNlYzRlZjkyYmM3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdW4gMjkgMDk6MjY6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tYy1jYXJkLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tYy1jYXJkLnlhbWwKaW5kZXggYTYxZDZjOTZkZjc1OTEuLmNhOTA3YWQ3MzA5NTkyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tYy1jYXJkLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21tYy9tbWMtY2FyZC55YW1sCkBAIC00MCw2ICYjNDM7NDAsOSBAQCBwYXR0ZXJuUHJvcGVydGllczoKICAgICAgICAgY29udGFpbnM6CiAgICAgICAgICAgY29uc3Q6IGZpeGVkLXBhcnRpdGlvbnMKIAomIzQzOyAgICAgIG52bWVtLWxheW91dDoKJiM0MzsgICAgICAgICRyZWY6IC9zY2hlbWFzL252bWVtL2xheW91dHMvbnZtZW0tbGF5b3V0LnlhbWwKJiM0MzsKIHJlcXVpcmVkOgogICAtIGNvbXBhdGlibGUKICAgLSByZWcKQEAgLTg2LDYgJiM0Mzs4OSwzMiBAQCBleGFtcGxlczoKICAgICAgICAgICAgICAgICAgICAgcmVhZC1vbmx5OwogICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICB9OwomIzQzOwomIzQzOyAgICAgICAgICAgIHBhcnRpdGlvbnMtYm9vdDIgewomIzQzOyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gJiMzNDtmaXhlZC1wYXJ0aXRpb25zJiMzNDs7CiYjNDM7CiYjNDM7ICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICAgICAgbnZtZW0tbGF5b3V0IHsKJiM0MzsgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O2ZpeGVkLWxheW91dCYjMzQ7OwomIzQzOwomIzQzOyAgICAgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICAgICAgICAgIG1hYy1hZGRyQDQ0MDAgewomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O21hYy1iYXNlJiMzNDs7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gJmx0OzB4NDQwMCAweDYmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICNudm1lbS1jZWxsLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAgICAgfTsKJiM0MzsKJiM0MzsgICAgICAgICAgICAgICAgICAgIGJkLWFkZHJANTQwMCB7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7bWFjLWJhc2UmIzM0OzsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSAmbHQ7MHg1NDAwIDB4NiZndDs7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgI252bWVtLWNlbGwtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgICAgIH07CiAgICAgICAgIH07CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9ibHVldG9vdGgvcWNvbSxibHVldG9vdGgtY29tbW9uLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2JsdWV0b290aC9xY29tLGJsdWV0b290aC1jb21tb24ueWFtbAppbmRleCBjOGU5YzU1YzFhZmI0Yy4uN2NiMjhmMzBjOWFmMDMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYmx1ZXRvb3RoL3Fjb20sYmx1ZXRvb3RoLWNvbW1vbi55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYmx1ZXRvb3RoL3Fjb20sYmx1ZXRvb3RoLWNvbW1vbi55YW1sCkBAIC0yMiw0ICYjNDM7MjIsMTMgQEAgcHJvcGVydGllczoKICAgICBkZXNjcmlwdGlvbjoKICAgICAgIGJvb3QgZmlybXdhcmUgaXMgaW5jb3JyZWN0bHkgcGFzc2luZyB0aGUgYWRkcmVzcyBpbiBiaWctZW5kaWFuIG9yZGVyCiAKJiM0MzsgIG52bWVtLWNlbGxzOgomIzQzOyAgICBtYXhJdGVtczogMQomIzQzOyAgICBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICBOdm1lbSBkYXRhIGNlbGwgdGhhdCBjb250YWlucyBhIDYgYnl0ZSBCRCBhZGRyZXNzIHdpdGggdGhlIG1vc3QKJiM0MzsgICAgICBzaWduaWZpY2FudCBieXRlIGZpcnN0IChiaWctZW5kaWFuKS4KJiM0MzsKJiM0MzsgIG52bWVtLWNlbGwtbmFtZXM6CiYjNDM7ICAgIGNvbnN0OiBsb2NhbC1iZC1hZGRyZXNzCiYjNDM7CiBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9xY29tLGF0aDEway55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9xY29tLGF0aDEway55YW1sCmluZGV4IGQ0ZjRkNzJlZTBkMzg4Li43ZjlkMTZjYjdjMTQzMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9xY29tLGF0aDEway55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3MvcWNvbSxhdGgxMGsueWFtbApAQCAtOTIsNiAmIzQzOzkyLDIyIEBAIHByb3BlcnRpZXM6CiAKICAgaWVlZTgwMjExLWZyZXEtbGltaXQ6IHRydWUKIAomIzQzOyAgbnZtZW0tY2VsbHM6CiYjNDM7ICAgIG1pbkl0ZW1zOiAxCiYjNDM7ICAgIG1heEl0ZW1zOiAzCiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIFJlZmVyZW5jZXMgdG8gbnZtZW0gY2VsbHMgZm9yIE1BQyBhZGRyZXNzIGFuZC9vciBjYWxpYnJhdGlvbiBkYXRhLgomIzQzOyAgICAgIFN1cHBvcnRlZCBjZWxsIG5hbWVzIGFyZSBtYWMtYWRkcmVzcywgY2FsaWJyYXRpb24sIGFuZCBwcmUtY2FsaWJyYXRpb24uCiYjNDM7CiYjNDM7ICBudm1lbS1jZWxsLW5hbWVzOgomIzQzOyAgICBtaW5JdGVtczogMQomIzQzOyAgICBtYXhJdGVtczogMwomIzQzOyAgICBpdGVtczoKJiM0MzsgICAgICBlbnVtOgomIzQzOyAgICAgICAgLSBtYWMtYWRkcmVzcwomIzQzOyAgICAgICAgLSBjYWxpYnJhdGlvbgomIzQzOyAgICAgICAgLSBwcmUtY2FsaWJyYXRpb24KJiM0MzsKICAgcWNvbSxjYWxpYnJhdGlvbi1kYXRhOgogICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3VpbnQ4LWFycmF5CiAgICAgZGVzY3JpcHRpb246CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vcXJiMjIxMC1hcmR1aW5vLWltb2xhLmR0cyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9xcmIyMjEwLWFyZHVpbm8taW1vbGEuZHRzCmluZGV4IGJmMDg4ZmE5ODA3ZjA0Li4xMjhjN2E3ZTc2YjViMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL3FyYjIyMTAtYXJkdWluby1pbW9sYS5kdHMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL3FyYjIyMTAtYXJkdWluby1pbW9sYS5kdHMKQEAgLTQwOSw3ICYjNDM7NDA5LDQwIEBAICZhbXA7c2RoY18xIHsKIAluby1zZGlvOwogCW5vLXNkOwogCiYjNDM7CSNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOwkjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsKIAlzdGF0dXMgPSAmIzM0O29rYXkmIzM0OzsKJiM0MzsKJiM0MzsJY2FyZEAwIHsKJiM0MzsJCWNvbXBhdGlibGUgPSAmIzM0O21tYy1jYXJkJiMzNDs7CiYjNDM7CQlyZWcgPSAmbHQ7MCZndDs7CiYjNDM7CiYjNDM7CQlwYXJ0aXRpb25zLWJvb3QxIHsKJiM0MzsJCQljb21wYXRpYmxlID0gJiMzNDtmaXhlZC1wYXJ0aXRpb25zJiMzNDs7CiYjNDM7CiYjNDM7CQkJI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7CQkJI3NpemUtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7CiYjNDM7CQkJbnZtZW0tbGF5b3V0IHsKJiM0MzsJCQkJY29tcGF0aWJsZSA9ICYjMzQ7Zml4ZWQtbGF5b3V0JiMzNDs7CiYjNDM7CQkJCSNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOwkJCQkjc2l6ZS1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsKJiM0MzsJCQkJd2lmaV9tYWNfYWRkcjogbWFjLWFkZHJANDQwMCB7CiYjNDM7CQkJCQljb21wYXRpYmxlID0gJiMzNDttYWMtYmFzZSYjMzQ7OwomIzQzOwkJCQkJcmVnID0gJmx0OzB4NDQwMCAweDYmZ3Q7OwomIzQzOwkJCQkJI252bWVtLWNlbGwtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7CQkJCX07CiYjNDM7CiYjNDM7CQkJCWJkX2FkZHI6IGJkLWFkZHJANTQwMCB7CiYjNDM7CQkJCQljb21wYXRpYmxlID0gJiMzNDttYWMtYmFzZSYjMzQ7OwomIzQzOwkJCQkJcmVnID0gJmx0OzB4NTQwMCAweDYmZ3Q7OwomIzQzOwkJCQkJI252bWVtLWNlbGwtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7CQkJCX07CiYjNDM7CQkJfTsKJiM0MzsJCX07CiYjNDM7CX07CiB9OwogCiAmYW1wO3NwaTUgewpAQCAtNTEyLDYgJiM0Mzs1NDUsOSBAQCBibHVldG9vdGggewogCQl2ZGRjaDAtc3VwcGx5ID0gJmx0OyZhbXA7cG00MTI1X2wyMiZndDs7CiAJCWVuYWJsZS1ncGlvcyA9ICZsdDsmYW1wO3RsbW0gODcgR1BJT19BQ1RJVkVfSElHSCZndDs7CiAJCW1heC1zcGVlZCA9ICZsdDszMDAwMDAwJmd0OzsKJiM0MzsKJiM0MzsJCW52bWVtLWNlbGxzID0gJmx0OyZhbXA7YmRfYWRkciAwJmd0OzsKJiM0MzsJCW52bWVtLWNlbGwtbmFtZXMgPSAmIzM0O2xvY2FsLWJkLWFkZHJlc3MmIzM0OzsKIAl9OwogfTsKIApAQCAtNTU3LDYgJiM0Mzs1OTMsOSBAQCAmYW1wO3dpZmkgewogCXFjb20sYXRoMTBrLWNhbGlicmF0aW9uLXZhcmlhbnQgPSAmIzM0O0FyZHVpbm9JbW9sYSYjMzQ7OwogCWZpcm13YXJlLW5hbWUgPSAmIzM0O3FjbTIyOTAmIzM0OzsKIAomIzQzOwludm1lbS1jZWxscyA9ICZsdDsmYW1wO3dpZmlfbWFjX2FkZHIgMCZndDs7CiYjNDM7CW52bWVtLWNlbGwtbmFtZXMgPSAmIzM0O21hYy1hZGRyZXNzJiMzNDs7CiYjNDM7CiAJc3RhdHVzID0gJiMzNDtva2F5JiMzNDs7CiB9OwogCmRpZmYgLS1naXQgYS9ibG9jay9LY29uZmlnIGIvYmxvY2svS2NvbmZpZwppbmRleCA3MGU0YTY2ZDk0MWZmNi4uYWVjNWQ5ZmMxM2EzZDMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svS2NvbmZpZwpAQCAtMjA5LDYgJiM0MzsyMDksMTUgQEAgY29uZmlnIEJMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDSwogCSAgYnkgZmFsbGluZyBiYWNrIHRvIHRoZSBrZXJuZWwgY3J5cHRvIEFQSSB3aGVuIGlubGluZQogCSAgZW5jcnlwdGlvbiBoYXJkd2FyZSBpcyBub3QgcHJlc2VudC4KIAomIzQzO2NvbmZpZyBCTEtfTlZNRU0KJiM0MzsJYm9vbCAmIzM0O0Jsb2NrIGRldmljZSBOVk1FTSBwcm92aWRlciYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gT0YKJiM0MzsJZGVwZW5kcyBvbiBOVk1FTQomIzQzOwloZWxwCiYjNDM7CSAgQWxsb3cgYmxvY2sgZGV2aWNlcyAob3IgcGFydGl0aW9ucykgdG8gYWN0IGFzIE5WTUVNIHByb3ZpZGVycywKJiM0MzsJICB0eXBpY2FsbHkgdXNlZCB3aXRoIGVNTUMgdG8gc3RvcmUgTUFDIGFkZHJlc3NlcyBvciBXaS1GaQomIzQzOwkgIGNhbGlicmF0aW9uIGRhdGEgb24gZW1iZWRkZWQgZGV2aWNlcy4KJiM0MzsKIHNvdXJjZSAmIzM0O2Jsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZyYjMzQ7CiAKIGNvbmZpZyBCTEtfUE0KZGlmZiAtLWdpdCBhL2Jsb2NrL01ha2VmaWxlIGIvYmxvY2svTWFrZWZpbGUKaW5kZXggZTdiZDMyMGUzZDY5NzEuLjgyMDAyOTdmYmNiYWIzIDEwMDY0NAotLS0gYS9ibG9jay9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9NYWtlZmlsZQpAQCAtMzksMyAmIzQzOzM5LDQgQEAgb2JqLSQoQ09ORklHX0JMS19JTkxJTkVfRU5DUllQVElPTikJJiM0Mzs9IGJsay1jcnlwdG8ubyBibGstY3J5cHRvLXByb2ZpbGUubyBcCiAJCQkJCSAgIGJsay1jcnlwdG8tc3lzZnMubwogb2JqLSQoQ09ORklHX0JMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDSykJJiM0Mzs9IGJsay1jcnlwdG8tZmFsbGJhY2subwogb2JqLSQoQ09ORklHX0JMT0NLX0hPTERFUl9ERVBSRUNBVEVEKQkmIzQzOz0gaG9sZGVyLm8KJiM0MztvYmotJChDT05GSUdfQkxLX05WTUVNKSAgICAgICAgICAgICAgICAmIzQzOz0gYmxrLW52bWVtLm8KZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1udm1lbS5jIGIvYmxvY2svYmxrLW52bWVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjRiMzVhNzQyNTUwNTkzCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLW52bWVtLmMKQEAgLTAsMCAmIzQzOzEsMTExIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKJiM0MzsvKgomIzQzOyAqIGJsb2NrIGRldmljZSBOVk1FTSBwcm92aWRlcgomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI0IERhbmllbCBHb2xsZSAmbHQ7ZGFuaWVsQG1ha3JvdG9waWEub3JnJmd0OwomIzQzOyAqIENvcHlyaWdodCAoYykgUXVhbGNvbW0gVGVjaG5vbG9naWVzLCBJbmMuIGFuZC9vciBpdHMgc3Vic2lkaWFyaWVzLgomIzQzOyAqCiYjNDM7ICogVXNlZnVsIG9uIGRldmljZXMgdXNpbmcgYSBwYXJ0aXRpb24gb24gYW4gZU1NQyBmb3IgTUFDIGFkZHJlc3NlcyBvcgomIzQzOyAqIFdpLUZpIGNhbGlicmF0aW9uIEVFUFJPTSBkYXRhLgomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9maWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L252bWVtLXByb3ZpZGVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L252bWVtLWNvbnN1bWVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2VtYXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHJvcGVydHkuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2Jsay5oJiMzNDsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGJsa19udm1lbV9yZWdfcmVhZCh2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgZnJvbSwgdm9pZCAqdmFsLCBzaXplX3QgYnl0ZXMpCiYjNDM7ewomIzQzOwlkZXZfdCBkZXZ0ID0gKGRldl90KSh1aW50cHRyX3QpcHJpdjsKJiM0MzsJc2l6ZV90IGJ5dGVzX2xlZnQgPSBieXRlczsKJiM0MzsJbG9mZl90IHBvcyA9IGZyb207CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlzdHJ1Y3QgZmlsZSAqYmRldl9maWxlIF9fZnJlZShmcHV0KSA9CiYjNDM7CQliZGV2X2ZpbGVfb3Blbl9ieV9kZXYoZGV2dCwgQkxLX09QRU5fUkVBRCwgTlVMTCwgTlVMTCk7CiYjNDM7CWlmIChJU19FUlIoYmRldl9maWxlKSkKJiM0MzsJCXJldHVybiBQVFJfRVJSKGJkZXZfZmlsZSk7CiYjNDM7CiYjNDM7CXdoaWxlIChieXRlc19sZWZ0KSB7CiYjNDM7CQlwZ29mZl90IGZfaW5kZXggPSBwb3MgJmd0OyZndDsgUEFHRV9TSElGVDsKJiM0MzsJCXN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CQlzaXplX3QgZm9saW9fb2ZmOwomIzQzOwkJc2l6ZV90IHRvX3JlYWQ7CiYjNDM7CiYjNDM7CQlmb2xpbyA9IHJlYWRfbWFwcGluZ19mb2xpbyhiZGV2X2ZpbGUtJmd0O2ZfbWFwcGluZywgZl9pbmRleCwgTlVMTCk7CiYjNDM7CQlpZiAoSVNfRVJSKGZvbGlvKSkgewomIzQzOwkJCXJldCA9IFBUUl9FUlIoZm9saW8pOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZm9saW9fb2ZmID0gb2Zmc2V0X2luX2ZvbGlvKGZvbGlvLCBwb3MpOwomIzQzOwkJdG9fcmVhZCA9IG1pbihieXRlc19sZWZ0LCBmb2xpb19zaXplKGZvbGlvKSAtIGZvbGlvX29mZik7CiYjNDM7CQltZW1jcHlfZnJvbV9mb2xpbyh2YWwsIGZvbGlvLCBmb2xpb19vZmYsIHRvX3JlYWQpOwomIzQzOwkJcG9zICYjNDM7PSB0b19yZWFkOwomIzQzOwkJYnl0ZXNfbGVmdCAtPSB0b19yZWFkOwomIzQzOwkJdmFsICYjNDM7PSB0b19yZWFkOwomIzQzOwkJZm9saW9fcHV0KGZvbGlvKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztpbnQgYmxrX252bWVtX2FkZChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtiZGV2LSZndDtiZF9kZXZpY2U7CiYjNDM7CXN0cnVjdCBudm1lbV9jb25maWcgY29uZmlnID0ge307CiYjNDM7CiYjNDM7CS8qIHNraXAgZGV2aWNlcyB3aGljaCBkbyBub3QgaGF2ZSBhIGRldmljZSB0cmVlIG5vZGUgKi8KJiM0MzsJaWYgKCFkZXZfb2Zfbm9kZShkZXYpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIHNraXAgZGV2aWNlcyB3aXRob3V0IGFuIG52bWVtIGxheW91dCBkZWZpbmVkICovCiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQgX19mcmVlKGRldmljZV9ub2RlKSA9CiYjNDM7CQlvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXZfb2Zfbm9kZShkZXYpLCAmIzM0O252bWVtLWxheW91dCYjMzQ7KTsKJiM0MzsJaWYgKCFjaGlsZCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBza2lwIGJsb2NrIGRldmljZSB0b28gbGFyZ2UgdG8gYmUgcmVwcmVzZW50ZWQgYXMgTlZNRU0gZGV2aWNlcywKJiM0MzsJICogbnZtZW1fY29uZmlnLnNpemUgaXMgYSBzaWduZWQgaW50CiYjNDM7CSAqLwomIzQzOwlpZiAoYmRldl9ucl9ieXRlcyhiZGV2KSAmZ3Q7IElOVF9NQVgpIHsKJiM0MzsJCWRldl93YXJuKGRldiwgJiMzNDtibG9jayBkZXZpY2UgdG9vIGxhcmdlIHRvIGJlIGFuIE5WTUVNIHByb3ZpZGVyXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwljb25maWcuaWQgPSBOVk1FTV9ERVZJRF9OT05FOwomIzQzOwljb25maWcuZGV2ID0gZGV2OwomIzQzOwljb25maWcubmFtZSA9IGRldl9uYW1lKGRldik7CiYjNDM7CWNvbmZpZy5vd25lciA9IFRISVNfTU9EVUxFOwomIzQzOwljb25maWcucHJpdiA9ICh2b2lkICopKHVpbnRwdHJfdClkZXYtJmd0O2RldnQ7CiYjNDM7CWNvbmZpZy5yZWdfcmVhZCA9IGJsa19udm1lbV9yZWdfcmVhZDsKJiM0MzsJY29uZmlnLnNpemUgPSBiZGV2X25yX2J5dGVzKGJkZXYpOwomIzQzOwljb25maWcud29yZF9zaXplID0gMTsKJiM0MzsJY29uZmlnLnN0cmlkZSA9IDE7CiYjNDM7CWNvbmZpZy5yZWFkX29ubHkgPSB0cnVlOwomIzQzOwljb25maWcucm9vdF9vbmx5ID0gdHJ1ZTsKJiM0MzsJY29uZmlnLmlnbm9yZV93cCA9IHRydWU7CiYjNDM7CWNvbmZpZy5vZl9ub2RlID0gdG9fb2Zfbm9kZShkZXYtJmd0O2Z3bm9kZSk7CiYjNDM7CiYjNDM7CWJkZXYtJmd0O2JkX252bWVtID0gbnZtZW1fcmVnaXN0ZXIoJmFtcDtjb25maWcpOwomIzQzOwlpZiAoSVNfRVJSKGJkZXYtJmd0O2JkX252bWVtKSkgewomIzQzOwkJaW50IHJldCA9IFBUUl9FUlIoYmRldi0mZ3Q7YmRfbnZtZW0pOwomIzQzOwomIzQzOwkJYmRldi0mZ3Q7YmRfbnZtZW0gPSBOVUxMOwomIzQzOwkJZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgTlZNRU0gZGV2aWNlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGJsa19udm1lbV9kZWwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKJiM0Mzt7CiYjNDM7CW52bWVtX3VucmVnaXN0ZXIoYmRldi0mZ3Q7YmRfbnZtZW0pOwomIzQzOwliZGV2LSZndDtiZF9udm1lbSA9IE5VTEw7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLmggYi9ibG9jay9ibGsuaAppbmRleCAyNWFmOGFjNWVmMGY3Ny4uZGFkOGYwZDdhMjE4ZWQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay5oCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay5oCkBAIC04MTAsNCAmIzQzOzgxMCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYmxrX2RlYnVnZnNfdW5sb2NrKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAogCW1lbWFsbG9jX25vaW9fcmVzdG9yZShtZW1mbGFncyk7CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0JMS19OVk1FTQomIzQzO2ludCBibGtfbnZtZW1fYWRkKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpOwomIzQzO3ZvaWQgYmxrX252bWVtX2RlbChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGJsa19udm1lbV9hZGQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikgeyByZXR1cm4gMDsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBibGtfbnZtZW1fZGVsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpIHt9CiYjNDM7I2VuZGlmCiYjNDM7CiAjZW5kaWYgLyogQkxLX0lOVEVSTkFMX0ggKi8KZGlmZiAtLWdpdCBhL2Jsb2NrL2dlbmhkLmMgYi9ibG9jay9nZW5oZC5jCmluZGV4IGY4NGI2YTM1NWI1NzRhLi4wYzljNWU1ZWE3YmFmZiAxMDA2NDQKLS0tIGEvYmxvY2svZ2VuaGQuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9nZW5oZC5jCkBAIC00MjEsNiAmIzQzOzQyMSw4IEBAIHN0YXRpYyB2b2lkIGFkZF9kaXNrX2ZpbmFsKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogCQkgKi8KIAkJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoZGRldiwgMCk7CiAJCWRpc2tfdWV2ZW50KGRpc2ssIEtPQkpfQUREKTsKJiM0MzsKJiM0MzsJCWJsa19udm1lbV9hZGQoZGlzay0mZ3Q7cGFydDApOwogCX0KIAogCWJsa19hcHBseV9iZGlfbGltaXRzKGRpc2stJmd0O2JkaSwgJmFtcDtkaXNrLSZndDtxdWV1ZS0mZ3Q7bGltaXRzKTsKQEAgLTcwNCw2ICYjNDM7NzA2LDggQEAgc3RhdGljIHZvaWQgX19kZWxfZ2VuZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIAogCWRpc2tfZGVsX2V2ZW50cyhkaXNrKTsKIAomIzQzOwlibGtfbnZtZW1fZGVsKGRpc2stJmd0O3BhcnQwKTsKJiM0MzsKIAkvKgogCSAqIFByZXZlbnQgbmV3IG9wZW5lcnMgYnkgdW5saW5rZWQgdGhlIGJkZXYgaW5vZGUuCiAJICovCmRpZmYgLS1naXQgYS9ibG9jay9wYXJ0aXRpb25zL29mLmMgYi9ibG9jay9wYXJ0aXRpb25zL29mLmMKaW5kZXggNTM2NjRlYTA2YjY1NDAuLjYwYWEzZDY5MDZjYTFkIDEwMDY0NAotLS0gYS9ibG9jay9wYXJ0aXRpb25zL29mLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svcGFydGl0aW9ucy9vZi5jCkBAIC0xNSw2ICYjNDM7MTUsMTAgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9vZl9wYXJ0aXRpb24oc3RydWN0IGRldmljZV9ub2RlICpucCwgaW50IHNsb3QpCiAJaW50IGFfY2VsbHMgPSBvZl9uX2FkZHJfY2VsbHMobnApOwogCWludCBzX2NlbGxzID0gb2Zfbl9zaXplX2NlbGxzKG5wKTsKIAomIzQzOwkvKiBTa2lwIG5vZGVzIHdpdGhvdXQgYSByZWcgcHJvcGVydHkgKGUuZy4gbnZtZW0tbGF5b3V0KSAqLwomIzQzOwlpZiAoIXJlZykKJiM0MzsJCXJldHVybiAxOwomIzQzOwogCS8qIE1ha2Ugc3VyZSByZWcgbGVuIG1hdGNoIHRoZSBleHBlY3RlZCBhZGRyIGFuZCBzaXplIGNlbGxzICovCiAJaWYgKGxlbiAvIHNpemVvZigqcmVnKSAhPSBhX2NlbGxzICYjNDM7IHNfY2VsbHMpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtODIsMTQgJiM0Mzs4NiwxNSBAQCBpbnQgb2ZfcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUpCiAJc2xvdCA9IDE7CiAJLyogVmFsaWRhdGUgcGFyaXRpb24gb2Zmc2V0IGFuZCBzaXplICovCiAJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShwYXJ0aXRpb25zX25wLCBucCkgewotCQlpZiAodmFsaWRhdGVfb2ZfcGFydGl0aW9uKG5wLCBzbG90KSkgewomIzQzOwkJaW50IGVyciA9IHZhbGlkYXRlX29mX3BhcnRpdGlvbihucCwgc2xvdCk7CiYjNDM7CiYjNDM7CQlpZiAoZXJyICZsdDsgMCkgewogCQkJb2Zfbm9kZV9wdXQobnApOwogCQkJb2Zfbm9kZV9wdXQocGFydGl0aW9uc19ucCk7Ci0KIAkJCXJldHVybiAtMTsKIAkJfQotCi0JCXNsb3QmIzQzOyYjNDM7OwomIzQzOwkJaWYgKCFlcnIpCiYjNDM7CQkJc2xvdCYjNDM7JiM0Mzs7CiAJfQogCiAJc2xvdCA9IDE7CkBAIC05OSw5ICYjNDM7MTA0LDEwIEBAIGludCBvZl9wYXJ0aXRpb24oc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSkKIAkJCWJyZWFrOwogCQl9CiAKLQkJYWRkX29mX3BhcnRpdGlvbihzdGF0ZSwgc2xvdCwgbnApOwotCi0JCXNsb3QmIzQzOyYjNDM7OwomIzQzOwkJaWYgKG9mX3Byb3BlcnR5X3ByZXNlbnQobnAsICYjMzQ7cmVnJiMzNDspKSB7CiYjNDM7CQkJYWRkX29mX3BhcnRpdGlvbihzdGF0ZSwgc2xvdCwgbnApOwomIzQzOwkJCXNsb3QmIzQzOyYjNDM7OwomIzQzOwkJfQogCX0KIAogCXNlcV9idWZfcHV0cygmYW1wO3N0YXRlLSZndDtwcF9idWYsICYjMzQ7XG4mIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYwppbmRleCAwNGViZTI5MGJjNzg0ZS4uMDZjYjc4N2IwNTU5ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYwpAQCAtNzIzLDggJiM0Mzs3MjMsMTEgQEAgc3RhdGljIGludCBxY2FfY2hlY2tfYmRhZGRyKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBjb25zdCBzdHJ1Y3QgcWNhX2Z3X2NvbmZpZyAqY28KIAl9CiAKIAliZGEgPSAoc3RydWN0IGhjaV9ycF9yZWFkX2JkX2FkZHIgKilza2ItJmd0O2RhdGE7Ci0JaWYgKCFiYWNtcCgmYW1wO2JkYS0mZ3Q7YmRhZGRyLCAmYW1wO2NvbmZpZy0mZ3Q7YmRhZGRyKSkKJiM0MzsJaWYgKCFiYWNtcCgmYW1wO2JkYS0mZ3Q7YmRhZGRyLCAmYW1wO2NvbmZpZy0mZ3Q7YmRhZGRyKSkgewogCQloY2lfc2V0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19VU0VfQkRBRERSX1BST1BFUlRZKTsKJiM0MzsJCWhjaV9zZXRfcXVpcmsoaGRldiwgSENJX1FVSVJLX1VTRV9CREFERFJfTlZNRU0pOwomIzQzOwkJaGNpX3NldF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfQkRBRERSX05WTUVNX0JFKTsKJiM0MzsJfQogCiAJa2ZyZWVfc2tiKHNrYik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oCmluZGV4IDg4MDhlZTc2ZTczYzA5Li5hY2U2ZjU5Yjg2MGQwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oCkBAIC03Myw2ICYjNDM7NzMsOSBAQCBzdHJ1Y3QgYmxvY2tfZGV2aWNlIHsKIAlpbnQJCQliZF93cml0ZXJzOwogI2lmZGVmIENPTkZJR19TRUNVUklUWQogCXZvaWQJCQkqYmRfc2VjdXJpdHk7CiYjNDM7I2VuZGlmCiYjNDM7I2lmZGVmIENPTkZJR19CTEtfTlZNRU0KJiM0MzsJc3RydWN0IG52bWVtX2RldmljZQkqYmRfbnZtZW07CiAjZW5kaWYKIAkvKgogCSAqIGtlZXAgdGhpcyBvdXQtb2YtbGluZSBhcyBpdCYjMzk7cyBib3RoIGJpZyBhbmQgbm90IG5lZWRlZCBpbiB0aGUgZmFzdApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggOTIxM2E1NzE2Zjk1YTcuLjVhNzRiZDVmYmE5ODQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKQEAgLTMwLDYgJiM0MzszMCw3IEBACiAKIHN0cnVjdCBtb2R1bGU7CiBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZTsKJiM0MztzdHJ1Y3QgbnZtZW1fZGV2aWNlOwogc3RydWN0IGVsZXZhdG9yX3F1ZXVlOwogc3RydWN0IGJsa190cmFjZTsKIHN0cnVjdCByZXF1ZXN0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vZl9uZXQuaCBiL2luY2x1ZGUvbGludXgvb2ZfbmV0LmgKaW5kZXggZDg4NzE1YTBiM2E1MmYuLjc4NTRiYTU1NWQ5YTU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L29mX25ldC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvb2ZfbmV0LmgKQEAgLTE1LDYgJiM0MzsxNSw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlOwogZXh0ZXJuIGludCBvZl9nZXRfcGh5X21vZGUoc3RydWN0IGRldmljZV9ub2RlICpucCwgcGh5X2ludGVyZmFjZV90ICppbnRlcmZhY2UpOwogZXh0ZXJuIGludCBvZl9nZXRfbWFjX2FkZHJlc3Moc3RydWN0IGRldmljZV9ub2RlICpucCwgdTggKm1hYyk7CiBleHRlcm4gaW50IG9mX2dldF9tYWNfYWRkcmVzc19udm1lbShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCB1OCAqbWFjKTsKJiM0MztpbnQgb2ZfZ2V0X252bWVtX2V1aTQ4KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGNvbnN0IGNoYXIgKmNlbGxfbmFtZSwgdTggKmFkZHIpOwogaW50IG9mX2dldF9ldGhkZXZfYWRkcmVzcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqb2ZfZmluZF9uZXRfZGV2aWNlX2J5X25vZGUoc3RydWN0IGRldmljZV9ub2RlICpucCk7CiAjZWxzZQpAQCAtMzQsNiAmIzQzOzM1LDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IG9mX2dldF9tYWNfYWRkcmVzc19udm1lbShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCB1OCAqbWFjKQogCXJldHVybiAtRU5PREVWOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBpbnQgb2ZfZ2V0X252bWVtX2V1aTQ4KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCiYjNDM7CQkJCSAgICAgIGNvbnN0IGNoYXIgKmNlbGxfbmFtZSwgdTggKmFkZHIpCiYjNDM7ewomIzQzOwlyZXR1cm4gLUVOT0RFVjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGludCBvZl9nZXRfZXRoZGV2X2FkZHJlc3Moc3RydWN0IGRldmljZV9ub2RlICpucCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaAppbmRleCAzODE4NmEyNDVmMTRkYi4uMTQ1YWI5NGU1MTQ4MmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmgKQEAgLTE2MSw2ICYjNDM7MTYxLDI0IEBAIGVudW0gewogCSAqLwogCUhDSV9RVUlSS19CREFERFJfUFJPUEVSVFlfQlJPS0VOLAogCiYjNDM7CS8qIFdoZW4gdGhpcyBxdWlyayBpcyBzZXQsIHRoZSBwdWJsaWMgQmx1ZXRvb3RoIGFkZHJlc3MKJiM0MzsJICogaW5pdGlhbGx5IHJlcG9ydGVkIGJ5IEhDSSBSZWFkIEJEIEFkZHJlc3MgY29tbWFuZAomIzQzOwkgKiBpcyBjb25zaWRlcmVkIGludmFsaWQuIFRoZSBwdWJsaWMgQkQgQWRkcmVzcyBjYW4gYmUKJiM0MzsJICogcmV0cmlldmVkIHZpYSBhICYjMzk7bG9jYWwtYmQtYWRkcmVzcyYjMzk7IE5WTUVNIGNlbGwuCiYjNDM7CSAqCiYjNDM7CSAqIFRoaXMgcXVpcmsgY2FuIGJlIHNldCBiZWZvcmUgaGNpX3JlZ2lzdGVyX2RldiBpcyBjYWxsZWQgb3IKJiM0MzsJICogZHVyaW5nIHRoZSBoZGV2LSZndDtzZXR1cCB2ZW5kb3IgY2FsbGJhY2suCiYjNDM7CSAqLwomIzQzOwlIQ0lfUVVJUktfVVNFX0JEQUREUl9OVk1FTSwKJiM0MzsKJiM0MzsJLyogV2hlbiB0aGlzIHF1aXJrIGlzIHNldCwgdGhlIEJsdWV0b290aCBEZXZpY2UgQWRkcmVzcyBwcm92aWRlZCBieQomIzQzOwkgKiB0aGUgJiMzOTtsb2NhbC1iZC1hZGRyZXNzJiMzOTsgTlZNRU0gaXMgc3RvcmVkIGluIGJpZy1lbmRpYW4gb3JkZXIuCiYjNDM7CSAqCiYjNDM7CSAqIFRoaXMgcXVpcmsgY2FuIGJlIHNldCBiZWZvcmUgaGNpX3JlZ2lzdGVyX2RldiBpcyBjYWxsZWQgb3IKJiM0MzsJICogZHVyaW5nIHRoZSBoZGV2LSZndDtzZXR1cCB2ZW5kb3IgY2FsbGJhY2suCiYjNDM7CSAqLwomIzQzOwlIQ0lfUVVJUktfQkRBRERSX05WTUVNX0JFLAomIzQzOwogCS8qIFdoZW4gdGhpcyBxdWlyayBpcyBzZXQsIHRoZSBkdXBsaWNhdGUgZmlsdGVyaW5nIGR1cmluZwogCSAqIHNjYW5uaW5nIGlzIGJhc2VkIG9uIEJsdWV0b290aCBkZXZpY2VzIGFkZHJlc3Nlcy4gVG8gYWxsb3cKIAkgKiBSU1NJIGJhc2VkIHVwZGF0ZXMsIHJlc3RhcnQgc2Nhbm5pbmcgaWYgbmVlZGVkLgpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfc3luYy5jIGIvbmV0L2JsdWV0b290aC9oY2lfc3luYy5jCmluZGV4IDNiZThjMzU4MWM2Y2FhLi43MzRlZWQyMGRlMDQ0YiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfc3luYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ibHVldG9vdGgvaGNpX3N5bmMuYwpAQCAtNyw2ICYjNDM7Nyw3IEBACiAgKi8KIAogI2luY2x1ZGUgJmx0O2xpbnV4L3Byb3BlcnR5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mX25ldC5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7bmV0L2JsdWV0b290aC9ibHVldG9vdGguaCZndDsKICNpbmNsdWRlICZsdDtuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgmZ3Q7CkBAIC0zNTkzLDYgJiM0MzszNTk0LDM3IEBAIGludCBoY2lfcG93ZXJlZF91cGRhdGVfc3luYyhzdHJ1Y3QgaGNpX2RldiAqaGRldikKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGhjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9udm1lbSAtIEdldCB0aGUgQmx1ZXRvb3RoIERldmljZSBBZGRyZXNzCiYjNDM7ICoJCQkJICAgIChCRF9BRERSKSBmb3IgYSBIQ0kgZGV2aWNlIGZyb20KJiM0MzsgKgkJCQkgICAgYW4gTlZNRU0gY2VsbC4KJiM0MzsgKiBAaGRldjoJVGhlIEhDSSBkZXZpY2UKJiM0MzsgKgomIzQzOyAqIFNlYXJjaCBmb3IgJiMzOTtsb2NhbC1iZC1hZGRyZXNzJiMzOTsgTlZNRU0gY2VsbCBpbiB0aGUgZGV2aWNlIGZpcm13YXJlIG5vZGUuCiYjNDM7ICoKJiM0MzsgKiBBbGwtemVybyBCRCBhZGRyZXNzZXMgYXJlIHJlamVjdGVkICh1bnByb3Zpc2lvbmVkKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGhjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9udm1lbShzdHJ1Y3QgaGNpX2RldiAqaGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXZfb2Zfbm9kZShoZGV2LSZndDtkZXYucGFyZW50KTsKJiM0MzsJdTggYmFbc2l6ZW9mKGJkYWRkcl90KV07CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmICghbnApCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJZXJyID0gb2ZfZ2V0X252bWVtX2V1aTQ4KG5wLCAmIzM0O2xvY2FsLWJkLWFkZHJlc3MmIzM0OywgYmEpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJaWYgKGhjaV90ZXN0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19CREFERFJfTlZNRU1fQkUpKQomIzQzOwkJYmFzd2FwKCZhbXA7aGRldi0mZ3Q7cHVibGljX2FkZHIsIChiZGFkZHJfdCAqKWJhKTsKJiM0MzsJZWxzZQomIzQzOwkJYmFjcHkoJmFtcDtoZGV2LSZndDtwdWJsaWNfYWRkciwgKGJkYWRkcl90ICopYmEpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGhjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9wcm9wZXJ0eSAtIEdldCB0aGUgQmx1ZXRvb3RoIERldmljZSBBZGRyZXNzCiAgKgkJCQkgICAgICAgKEJEX0FERFIpIGZvciBhIEhDSSBkZXZpY2UgZnJvbQpAQCAtNTA3MiwxMiAmIzQzOzUxMDQsMTcgQEAgc3RhdGljIGludCBoY2lfZGV2X3NldHVwX3N5bmMoc3RydWN0IGhjaV9kZXYgKmhkZXYpCiAJICogaXRzIHNldHVwIGNhbGxiYWNrLgogCSAqLwogCWludmFsaWRfYmRhZGRyID0gaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX0lOVkFMSURfQkRBRERSKSB8fAotCQkJIGhjaV90ZXN0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19VU0VfQkRBRERSX1BST1BFUlRZKTsKJiM0MzsJCQkgaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX1VTRV9CREFERFJfUFJPUEVSVFkpIHx8CiYjNDM7CQkJIGhjaV90ZXN0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19VU0VfQkRBRERSX05WTUVNKTsKIAlpZiAoIXJldCkgewogCQlpZiAoaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX1VTRV9CREFERFJfUFJPUEVSVFkpICZhbXA7JmFtcDsKIAkJICAgICFiYWNtcCgmYW1wO2hkZXYtJmd0O3B1YmxpY19hZGRyLCBCREFERFJfQU5ZKSkKIAkJCWhjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9wcm9wZXJ0eShoZGV2KTsKIAomIzQzOwkJaWYgKGhjaV90ZXN0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19VU0VfQkRBRERSX05WTUVNKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIWJhY21wKCZhbXA7aGRldi0mZ3Q7cHVibGljX2FkZHIsIEJEQUREUl9BTlkpKQomIzQzOwkJCWhjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9udm1lbShoZGV2KTsKJiM0MzsKIAkJaWYgKGludmFsaWRfYmRhZGRyICZhbXA7JmFtcDsgYmFjbXAoJmFtcDtoZGV2LSZndDtwdWJsaWNfYWRkciwgQkRBRERSX0FOWSkgJmFtcDsmYW1wOwogCQkgICAgaGRldi0mZ3Q7c2V0X2JkYWRkcikgewogCQkJcmV0ID0gaGRldi0mZ3Q7c2V0X2JkYWRkcihoZGV2LCAmYW1wO2hkZXYtJmd0O3B1YmxpY19hZGRyKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL29mX25ldC5jIGIvbmV0L2NvcmUvb2ZfbmV0LmMKaW5kZXggOTNlYTQyNWI5MjQ4YTIuLjExYzFhY2NhMTUxMjY2IDEwMDY0NAotLS0gYS9uZXQvY29yZS9vZl9uZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9vZl9uZXQuYwpAQCAtNjEsOSAmIzQzOzYxLDcgQEAgc3RhdGljIGludCBvZl9nZXRfbWFjX2FkZHIoc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3QgY2hhciAqbmFtZSwgdTggKmFkZHIpCiBpbnQgb2ZfZ2V0X21hY19hZGRyZXNzX252bWVtKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHU4ICphZGRyKQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKG5wKTsKLQlzdHJ1Y3QgbnZtZW1fY2VsbCAqY2VsbDsKLQljb25zdCB2b2lkICptYWM7Ci0Jc2l6ZV90IGxlbjsKJiM0MzsJdTggbWFjW0VUSF9BTEVOXSBfX2FsaWduZWQoc2l6ZW9mKHUxNikpOwogCWludCByZXQ7CiAKIAkvKiBUcnkgbG9va3VwIGJ5IGRldmljZSBmaXJzdCwgdGhlcmUgbWlnaHQgYmUgYSBudm1lbV9jZWxsX2xvb2t1cApAQCAtNzUsMjcgJiM0Mzs3Myw1NCBAQCBpbnQgb2ZfZ2V0X21hY19hZGRyZXNzX252bWVtKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHU4ICphZGRyKQogCQlyZXR1cm4gcmV0OwogCX0KIAotCWNlbGwgPSBvZl9udm1lbV9jZWxsX2dldChucCwgJiMzNDttYWMtYWRkcmVzcyYjMzQ7KTsKJiM0MzsJcmV0ID0gb2ZfZ2V0X252bWVtX2V1aTQ4KG5wLCAmIzM0O21hYy1hZGRyZXNzJiMzNDssIG1hYyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobWFjKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlldGhlcl9hZGRyX2NvcHkoYWRkciwgbWFjKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wob2ZfZ2V0X21hY19hZGRyZXNzX252bWVtKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBvZl9nZXRfbnZtZW1fZXVpNDggLSBSZWFkIGEgNi1ieXRlIEVVSS00OCBhZGRyZXNzIGZyb20gYSBuYW1lZCBOVk1FTSBjZWxsLgomIzQzOyAqIEBucDoJCURldmljZSBub2RlIHRvIGxvb2sgdXAgdGhlIE5WTUVNIGNlbGwgZnJvbS4KJiM0MzsgKiBAY2VsbF9uYW1lOglOYW1lIG9mIHRoZSBOVk1FTSBjZWxsIChlLmcuICYjMzQ7bWFjLWFkZHJlc3MmIzM0OywgJiMzNDtsb2NhbC1iZC1hZGRyZXNzJiMzNDspLgomIzQzOyAqIEBhZGRyOglPdXRwdXQgYnVmZmVyIGZvciB0aGUgNi1ieXRlIGFkZHJlc3MuCiYjNDM7ICoKJiM0MzsgKiBSZWFkcyB0aGUgbmFtZWQgTlZNRU0gY2VsbCBhbmQgdmFsaWRhdGVzIHRoYXQgaXQgY29udGFpbnMgYSBub24temVybyA2LWJ5dGUKJiM0MzsgKiBhZGRyZXNzLiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztpbnQgb2ZfZ2V0X252bWVtX2V1aTQ4KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGNvbnN0IGNoYXIgKmNlbGxfbmFtZSwgdTggKmFkZHIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbnZtZW1fY2VsbCAqY2VsbDsKJiM0MzsJY29uc3Qgdm9pZCAqZXVpNDg7CiYjNDM7CXNpemVfdCBsZW47CiYjNDM7CiYjNDM7CWNlbGwgPSBvZl9udm1lbV9jZWxsX2dldChucCwgY2VsbF9uYW1lKTsKIAlpZiAoSVNfRVJSKGNlbGwpKQogCQlyZXR1cm4gUFRSX0VSUihjZWxsKTsKIAotCW1hYyA9IG52bWVtX2NlbGxfcmVhZChjZWxsLCAmYW1wO2xlbik7CiYjNDM7CWV1aTQ4ID0gbnZtZW1fY2VsbF9yZWFkKGNlbGwsICZhbXA7bGVuKTsKIAludm1lbV9jZWxsX3B1dChjZWxsKTsKIAotCWlmIChJU19FUlIobWFjKSkKLQkJcmV0dXJuIFBUUl9FUlIobWFjKTsKJiM0MzsJaWYgKElTX0VSUihldWk0OCkpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihldWk0OCk7CiAKLQlpZiAobGVuICE9IEVUSF9BTEVOIHx8ICFpc192YWxpZF9ldGhlcl9hZGRyKG1hYykpIHsKLQkJa2ZyZWUobWFjKTsKJiM0MzsJaWYgKGxlbiAhPSBFVEhfQUxFTiB8fCAhbWVtY2hyX2ludihldWk0OCwgMCwgRVRIX0FMRU4pKSB7CiYjNDM7CQlrZnJlZShldWk0OCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCW1lbWNweShhZGRyLCBtYWMsIEVUSF9BTEVOKTsKLQlrZnJlZShtYWMpOwomIzQzOwltZW1jcHkoYWRkciwgZXVpNDgsIEVUSF9BTEVOKTsKJiM0MzsJa2ZyZWUoZXVpNDgpOwogCiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKG9mX2dldF9tYWNfYWRkcmVzc19udm1lbSk7CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwob2ZfZ2V0X252bWVtX2V1aTQ4KTsKIAogLyoqCiAgKiBvZl9nZXRfbWFjX2FkZHJlc3MoKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwOToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDk3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2ggYW5kIEZ1enphYmlsaXR5IG9mIHRoZSBCTEtfTlZNRU0gUGF0Y2gqKgoKT2theSwgc28gd2UgaGF2ZSB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBhIGBCTEtfTlZNRU1gIGJsb2NrIGRldmljZSBOVk1FTSBwcm92aWRlci4gRXNzZW50aWFsbHksIHRoaXMgbWVhbnMgd2UgY2FuIHRyZWF0IGJsb2NrIGRldmljZXMgKG9yIHBhcnRpdGlvbnMpIGFzIE5WTUVNIHByb3ZpZGVycy4gVGhlIHBhdGNoIHRvdWNoZXMgYSBmZXcga2V5IGFyZWFzLCB3aGljaCBpcyBnb29kIHRvIHNlZSBmcm9tIGEgY292ZXJhZ2UgcGVyc3BlY3RpdmUuIEkmIzM5O20gbm90aW5nIGNoYW5nZXMgaW4gYGJsb2NrL2dlbmhkLmNgIChzcGVjaWZpY2FsbHkgY2FsbHMgdG8gYGJsa19udm1lbV9hZGRgIGFuZCBgYmxrX252bWVtX2RlbGApLCBgYmxvY2svcGFydGl0aW9ucy9vZi5jYCAoc2tpcHBpbmcgbm9kZXMgd2l0aG91dCB0aGUgYHJlZ2AgcHJvcGVydHkpLCBhbmQgZXZlbiBzb21lIEJsdWV0b290aCBhbmQgbmV0d29ya2luZyBjb2RlIChgZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuY2AsIGBuZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmNgLCBhbmQgYG5ldC9jb3JlL29mX25ldC5jYCkuIEl0IHNlZW1zIHF1aXRlIHBlcnZhc2l2ZTsgaXQmIzM5O3MgdXNpbmcgdGhlIGNvbmNlcHQgb2YgYmxvY2sgZGV2aWNlcyBhcyBOVlJBTSBzdG9yYWdlIGFjcm9zcyBhIG51bWJlciBvZiBkcml2ZXJzLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpdHMgcmVhY2hhYmlsaXR5IGFuZCBwb3RlbnRpYWwgZm9yIGZ1enppbmcuIFRoZSBrZXkgY2hhbmdlcyBpbiB0aGUgYmxvY2sgbGF5ZXIsIGVzcGVjaWFsbHkgaW4gYGJsb2NrL2Jsay1udm1lbS5jYCBhbmQgYGJsb2NrL2dlbmhkLmNgLCBhcmUgd2hhdCBJJiMzOTttIGZvY3VzZWQgb24gZmlyc3QuIEkga25vdyB0aGF0IGBibGtfbnZtZW1fYWRkYCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgZGlzayBhZGRlZCB2aWEgYGFkZF9kaXNrX2ZpbmFsYCwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIFZNIHNldHVwLiBMb29wIGRldmljZXMsIG9yIGFueSBvdGhlciBibG9jayBkZXZpY2UgdGhhdCBnZXRzIGFkZGVkLCBzaG91bGQgdHJpZ2dlciB0aGlzLiBUaGUgY3JpdGljYWwgZnVuY3Rpb24gaGVyZSBhcHBlYXJzIHRvIGJlIGBibGtfbnZtZW1fcmVnX3JlYWRgLCB3aGljaCB1c2VzIGByZWFkX21hcHBpbmdfZm9saW9gIHRvIGFjdHVhbGx5IHJlYWQgZGF0YSBmcm9tIHRoZSBibG9jayBkZXZpY2UuIFRoaXMgcmVhZHMgZGlyZWN0bHkgZnJvbSBhIG1hcHBpbmcuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uLiBJIGNhbiBzZWUgdGhhdCBgQ09ORklHX0JMS19OVk1FTWAgaXMgZGVmaW5lZCBpbiBgYmxvY2svS2NvbmZpZ2AsIGFuZCBpdCBkZXBlbmRzIG9uIGJvdGggYE9GYCBhbmQgYE5WTUVNYC4gVGhpcyBzaG91bGQgbWFrZSBlbmFibGluZyBpdCByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSByZWxldmFudCBmdW5jdGlvbnMgaW4gYGJsb2NrL2Jsay1udm1lbS5jYCwgYG5ldC9jb3JlL29mX25ldC5jYCwgYW5kIGBuZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmNgIHRvIHNlZSB0aGUgcG9pbnRzIHRoYXQgd291bGQgYmUgZXhwb3NlZCB0byBhIGZ1enplcjogYGJsa19udm1lbV9yZWdfcmVhZGAsIGBibGtfbnZtZW1fYWRkYCwgYGJsa19udm1lbV9kZWxgLCBgb2ZfZ2V0X252bWVtX2V1aTQ4YCwgYW5kIGBoY2lfZGV2X2dldF9iZF9hZGRyX2Zyb21fbnZtZW1gLgoKT2theSwgc28gYENPTkZJR19CTEtfTlZNRU1gIHNlZW1zIGxpa2UgYSB2aWFibGUgdGFyZ2V0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgYENPTkZJR19CVF9IQ0lVQVJUX1FDQWAgcHJlcmVxdWlzaXRlIGZvciB0aGUgYGJ0cWNhLmNgIG1vZGlmaWNhdGlvbnMuIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIEJsdWV0b290aCBNYWtlZmlsZSBvciBLY29uZmlnIHRvIGNvbmZpcm0gdGhpcyBkZXBlbmRlbmN5LiBPdmVyYWxsLCB0aGlzIHBhdGNoIGhhcyB0aGUgcG90ZW50aWFsIHRvIGV4cG9zZSBzZXZlcmFsIGludGVyZXN0aW5nIGF0dGFjayBzdXJmYWNlcy4gVGhlIHJlbGlhbmNlIG9uIGJsb2NrIGRldmljZSBpbnRlcmFjdGlvbiwgY291cGxlZCB3aXRoIGhvdyB0aGUgYWRkcmVzcyBpcyByZWFkIGFuZCB1c2VkLCBsb29rcyB0byBiZSBhIHByb21pc2luZyBhdmVudWUgdG8gZXhwbG9yZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwOToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCVF9IQ0lVQVJUX1FDQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmx1ZXRvb3RoLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2JsdWV0b290aC9LY29uZmlnPTIyNz1jb25maWcgQlRfSENJVUFSVF9SVExcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTI0MC1cbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWc6MjQxOmNvbmZpZyBCVF9IQ0lVQVJUX1FDQVxuZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZy0yNDItXHRib29sIFwmIzM0O1F1YWxjb21tIEF0aGVyb3MgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL01ha2VmaWxlPTQ3PWhjaV91YXJ0LSQoQ09ORklHX0JUX0hDSVVBUlRfQkNNKVx0JiM0Mzs9IGhjaV9iY20ub1xuZHJpdmVycy9ibHVldG9vdGgvTWFrZWZpbGU6NDg6aGNpX3VhcnQtJChDT05GSUdfQlRfSENJVUFSVF9RQ0EpXHQmIzQzOz0gaGNpX3FjYS5vXG5kcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZS00OS1oY2lfdWFydC0kKENPTkZJR19CVF9IQ0lVQVJUX0FHNlhYKVx0JiM0Mzs9IGhjaV9hZzZ4eC5vXG4tLVxuZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmM9ODc3PXN0YXRpYyBpbnQgX19pbml0IGhjaV91YXJ0X2luaXQodm9pZClcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYy05MTAtI2VuZGlmXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYzo5MTE6I2lmZGVmIENPTkZJR19CVF9IQ0lVQVJUX1FDQVxuZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmMtOTEyLVx0cWNhX2luaXQoKTtcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYz05MjY9c3RhdGljIHZvaWQgX19leGl0IGhjaV91YXJ0X2V4aXQodm9pZClcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYy05NDgtI2VuZGlmXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYzo5NDk6I2lmZGVmIENPTkZJR19CVF9IQ0lVQVJUX1FDQVxuZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmMtOTUwLVx0cWNhX2RlaW5pdCgpO1xuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV91YXJ0Lmg9MTk3PWludCBiY21fZGVpbml0KHZvaWQpO1xuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV91YXJ0LmgtMTk5LVxuZHJpdmVycy9ibHVldG9vdGgvaGNpX3VhcnQuaDoyMDA6I2lmZGVmIENPTkZJR19CVF9IQ0lVQVJUX1FDQVxuZHJpdmVycy9ibHVldG9vdGgvaGNpX3VhcnQuaC0yMDEtaW50IHFjYV9pbml0KHZvaWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA5OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTczCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYGJ0cWNhLmNgIENvbXBpbGF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZm9jdXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBgYnRxY2EuY2AgY29tcGlsYXRpb24gaXMgY2xlYW4uIEl0JiMzOTtzIGEgY3JpdGljYWwgY29tcG9uZW50LCBzbyBhIHF1aWNrIHZlcmlmaWNhdGlvbiBpcyBpbiBvcmRlci4gSSYjMzk7bSBub3QgZXhwZWN0aW5nIGFueSBtYWpvciBpc3N1ZXMsIGJ1dCB5b3UgY2FuJiMzOTt0IGJlIHRvbyBjb21wbGFjZW50LiBHb3R0YSBjYXRjaCBhbnkgcG90ZW50aWFsIHNuYWdzIGVhcmx5LCBiZWZvcmUgdGhleSBjYXNjYWRlIGludG8gc29tZXRoaW5nIGJpZ2dlci4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgZmxhZ3Mgb3IgZXJyb3JzIHBvcHBpbmcgdXAuIFRpbWUgdG8gY2hlY2sgdGhlIGJ1aWxkIGxvZ3MuLi4gbGV0JiMzOTtzIGdldCB0byBpdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwOToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtidHFjYS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibHVldG9vdGgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmx1ZXRvb3RoL01ha2VmaWxlPTI1PW9iai0kKENPTkZJR19CVF9SVEwpXHRcdCYjNDM7PSBidHJ0bC5vXG5kcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfQlRfUUNBKVx0XHQmIzQzOz0gYnRxY2Eub1xuZHJpdmVycy9ibHVldG9vdGgvTWFrZWZpbGUtMjctb2JqLSQoQ09ORklHX0JUX01USylcdFx0JiM0Mzs9IGJ0bXRrLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwOToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQzNQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOgoKKipCbHVldG9vdGggUUNBIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCkFscmlnaHQsIHRoZSBzeXN0ZW0mIzM5O3MgZmxhZ2dlZCB0aGF0IGBDT05GSUdfQlRfUUNBYCBpcyBhIHJlcXVpcmVtZW50LiBUaGF0IGltbWVkaWF0ZWx5IGNsaWNrcyAtICpvZiBjb3Vyc2UqLCB3ZSBuZWVkIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24uIE5vdywgdGhlIG5leHQgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyB3aGV0aGVyIGBidHFjYS5jYCBpcyBjb3JyZWN0bHkgY29tcGlsZWQgd2l0aCBgQ09ORklHX0JUX1FDQWAgZW5hYmxlZCwgYXMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucy4gTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgdGhhdCBieSBjaGVja2luZyB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGF0IGRyaXZlci4gTGV0JiMzOTtzIG5hdmlnYXRlIG92ZXIgdG8gYGRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWdgIHRvIHNlZSB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwOToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlRfUUNBJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibHVldG9vdGgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWc9MTQ9Y29uZmlnIEJUX1JUTFxuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWctMTctXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnOjE4OmNvbmZpZyBCVF9RQ0FcbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWctMTktXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA5OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzI0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIGEgQmx1ZXRvb3RoIERyaXZlciBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWV0aGluZyB0aGF0IHNlZW1zIHRvIGJlIGEgdHJpc3RhdGUsIGFuZCBteSBpbW1lZGlhdGUgaHVuY2ggaXMgdGhhdCBpdCYjMzk7cyBsaWtlbHkgc2VsZWN0ZWQgYnkgZWl0aGVyIGBCVF9IQ0lVQVJUX1FDQWAgb3IgYEJUX0hDSUJUVVNCX1FDQWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBzdGFydCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZXNlIHNvcnRzIG9mIEJsdWV0b290aCBjb25maWd1cmF0aW9ucy4gVGhvc2UgUXVhbGNvbW0tc3BlY2lmaWMgVUFSVCBhbmQgVVNCIGRyaXZlcnMgYXJlIHVzdWFsbHkgdGhlIGN1bHByaXRzIGluIHRoZXNlIHNjZW5hcmlvcy4KCk5vdywgdG8gY29uZmlybSBhbmQgZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24sIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBgQkxLX05WTUVNYCBvcHRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBgYmxvY2svS2NvbmZpZ2AgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgc2VsZWN0aW9uIGFuZCBkZXBlbmRlbmNpZXMgb2YgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2Uga2luZHMgb2Ygc2V0dGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA5OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfTlZNRU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZz0yMDI9Y29uZmlnIEJMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDS1xuLS1cbmJsb2NrL0tjb25maWctMjExLVxuYmxvY2svS2NvbmZpZzoyMTI6Y29uZmlnIEJMS19OVk1FTVxuYmxvY2svS2NvbmZpZy0yMTMtXHRib29sIFwmIzM0O0Jsb2NrIGRldmljZSBOVk1FTSBwcm92aWRlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwOToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA4MQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQ3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQmxvY2sgTlZNZU0gUHJvdmlkZXIgYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGZvY3VzIGhlcmUgaXMgdGhlIGBCTEtfTlZNRU1gIGNvbmZpZ3VyYXRpb24sIHRoZSBjb3JlIG9mIHRoZSBibG9jayBudm1lbSBwcm92aWRlci4gVGhlIHByaW1hcnkgZnVuY3Rpb25zIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBhcmUgYGJsa19udm1lbV9yZWdfcmVhZGAsIGBibGtfbnZtZW1fYWRkYCwgYGhjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9udm1lbWAsIGFuZCBgb2ZfZ2V0X252bWVtX2V1aTQ4YC4KCkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBwYXRocy4gYGJsa19udm1lbV9hZGRgIGlzIHJlYWNoYWJsZTsgSSBzZWUgdGhhdCBpdCYjMzk7cyBpbnZva2VkIGJ5IGBhZGRfZGlza19maW5hbGAgd2l0aGluIGBibG9jay9nZW5oZC5jYC4gVGhhdCYjMzk7cyBnb29kOyBpdCBjb25maXJtcyB0aGF0IHRoZSBhZGQgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSBpbiB1c2UuIGBibGtfbnZtZW1fcmVnX3JlYWRgLCBob3dldmVyLCBpcyBhIGJpdCBtb3JlIHN0cmFpZ2h0Zm9yd2FyZDsgaXQmIzM5O3MgdGhlIGByZWdfcmVhZGAgY2FsbGJhY2sgZm9yIHRoZSBOVk1FTSBwcm92aWRlci4gU28sIHdoZW5ldmVyIGFuIE5WTUVNIGNvbnN1bWVyIHBlcmZvcm1zIGEgcmVhZCwgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgZW5nYWdlZC4KCk5vdywgbGV0JiMzOTtzIGV4cGxvcmUgdGhlIHJlYWNoYWJpbGl0eSBvZiBgb2ZfZ2V0X252bWVtX2V1aTQ4YC4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYG9mX2dldF9tYWNfYWRkcmVzc19udm1lbWAgYW5kIGBoY2lfZGV2X2dldF9iZF9hZGRyX2Zyb21fbnZtZW1gLiBgb2ZfZ2V0X21hY19hZGRyZXNzX252bWVtYCBmZWVkcyBpbnRvIGBvZl9nZXRfbWFjX2FkZHJlc3NgLCB3aGljaCwgYXMgSSBrbm93LCBpcyBhIGNvbW1vbmx5IHVzZWQgZnVuY3Rpb24gd2l0aGluIG5ldHdvcmsgZHJpdmVycy4gYGhjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9udm1lbWAgaXMgY2FsbGVkIGZyb20gYGhjaV9kZXZfc2V0dXBfc3luY2AgaW4gYG5ldC9ibHVldG9vdGgvaGNpX3N5bmMuY2AuIFRoaXMgaXMgYWxsIHVzZWZ1bCBpbmZvcm1hdGlvbi4KCk5leHQsIEkmIzM5O2xsIGJyaWVmbHkgbG9vayBhdCB0aGUgZGV2aWNlIHRyZWUgcGFydGl0aW9uIGhhbmRsaW5nLiBJdCBsb29rcyBsaWtlIGBvZl9wYXJ0aXRpb25gIGluIGBibG9jay9wYXJ0aXRpb25zL29mLmNgIGhhcyBiZWVuIG1vZGlmaWVkIHRvIHNraXAgbm9kZXMgbWlzc2luZyB0aGUgYHJlZ2AgcHJvcGVydHkuIE1ha2VzIHNlbnNlLiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgcGFydGl0aW9uIHBhcnNpbmcgZnJvbSB0aGUgZGV2aWNlIHRyZWUuCgpPa2F5LCBzbyB0aGUgY29uZmlncyB0byBlbmFibGUgc2VlbSBjbGVhci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQkxLX05WTUVNYCBpcyBlbmFibGVkLiBCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIGNvbnNpZGVyIEJsdWV0b290aCBzdXBwb3J0IHNpbmNlIHRoZSBCbHVldG9vdGggZnVuY3Rpb25zIGFyZSB1c2luZyB0aGUgbnZtZW0gcHJvdmlkZXIsIG1lYW5pbmcgdGhhdCBgQlRfUUNBYCAob3Igc29tZXRoaW5nIGxpa2UgYEJUX0hDSVVBUlRfUUNBYCAvIGBCVF9IQ0lCVFVTQmAgYmFzZWQgb24gdGhlIGNoaXApIGlzIGFub3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbi4gSG93ZXZlciwgYEJUX1FDQWAgaXMgc2VsZWN0ZWQgYnkgb3RoZXJzLiBJIGNhbiBjaGVjayB3aGF0IHNlbGVjdHMgYEJUX1FDQWAgbGF0ZXIuIEZvciBub3csIG15IHByaW1hcnkgY29uY2VybiBpcyBlbmFibGluZyBgQkxLX05WTUVNYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDk6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEJUX1FDQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmx1ZXRvb3RoLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2JsdWV0b290aC9LY29uZmlnPTI0MT1jb25maWcgQlRfSENJVUFSVF9RQ0Fcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTI0NS1cdHNlbGVjdCBCVF9IQ0lVQVJUX0g0XG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnOjI0NjpcdHNlbGVjdCBCVF9RQ0FcbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWctMjQ3LVx0aGVscFxuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWc9NDE2PWNvbmZpZyBCVF9RQ09NU01EXG4tLVxuZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZy00MTktXHRkZXBlbmRzIG9uIFFDT01fV0NOU1NfQ1RSTCB8fCAoQ09NUElMRV9URVNUIFx1MDAyNlx1MDAyNiBRQ09NX1dDTlNTX0NUUkw9bilcbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWc6NDIwOlx0c2VsZWN0IEJUX1FDQVxuZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZy00MjEtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA5OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzE0CgkJCQkJCQlvdXRwdXQ6IDE4MgoJCQkJCQkJdGhvdWdodHM6IDQ0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTlZNRU0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBCVF9IQ0lVQVJUX1FDQWAgYW5kIGBCVF9RQ09NU01EYCBhcmUgc2VsZWN0aW5nIGBCVF9RQ0FgLCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdC4gSSBjYW4gbGlzdCBgQlRfSENJVUFSVF9RQ0FgIGFzIGEgc3RhcnRpbmcgcG9pbnQuIExldCYjMzk7cyBzZWUuLi4gdGhlIGZvY3VzIGhlcmUgaXMgZGVmaW5pdGVseSBvbiB0aGVzZSBmdW5jdGlvbnM6IGBibGtfbnZtZW1fcmVnX3JlYWRgLCBgYmxrX252bWVtX2FkZGAsIGBoY2lfZGV2X2dldF9iZF9hZGRyX2Zyb21fbnZtZW1gLCBhbmQgYG9mX2dldF9udm1lbV9ldWk0OGAuCgpGaXJzdCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBzY29wZS4gYGJsa19udm1lbV9yZWdfcmVhZGAgaXMgaW5kZWVkIHN0YXRpYywgc28gdGhhdCYjMzk7cyBoZWxwZnVsIGluIHVuZGVyc3RhbmRpbmcgd2hlcmUgaXTigJlzIHVzZWQuIGBibGtfbnZtZW1fYWRkYCwgaG93ZXZlciwgaXNuJiMzOTt0IGV4cG9ydGVkLiBIbW0sIGl0JiMzOTtzIGluIGBibG9jay9ibGstbnZtZW0uY2AgYW5kIGlzIGNhbGxlZCBmcm9tIGBibG9jay9nZW5oZC5jYC4gVGhlbiBgaGNpX2Rldl9nZXRfYmRfYWRkcl9mcm9tX252bWVtYCBpcyBhbHNvIHN0YXRpYywgcmVzaWRpbmcgaW4gYG5ldC9ibHVldG9vdGgvaGNpX3N5bmMuY2AuIEFuZCBgb2ZfZ2V0X252bWVtX2V1aTQ4YCBpcyBleHBvcnRlZCBpbiBgbmV0L2NvcmUvb2ZfbmV0LmNgLgoKTm93LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIElzIGBCTEtfTlZNRU1gIHN1ZmZpY2llbnQ/IExldCBtZSBkb3VibGUtY2hlY2suIE9rYXksIGl0IGRlcGVuZHMgb24gYm90aCBgT0ZgIGFuZCBgTlZNRU1gLiBUaGF0JiMzOTtzIGdvb2QsIGBPRmAgaXMgd2lkZWx5IGVuYWJsZWQgYWNyb3NzIHZhcmlvdXMgYXJjaGl0ZWN0dXJlcywgYW5kIGBOVk1FTWAgaXMgY29tbW9uIGFzIHdlbGwuCgpCYXNlZCBvbiBhbGwgb2YgdGhpcywgSSYjMzk7bSBjb21mb3J0YWJsZSBlbm91Z2ggdG8gY29uY2x1ZGUgdGhhdCB0aGlzIHBhdGNoIHdhcnJhbnRzIGZ1enppbmcsIGFuZCBJIHRoaW5rIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIGtleSBmdW5jdGlvbnMgZm9yIGFuYWx5c2lzLiBNeSByZWFzb25pbmcgaXMgdGhhdCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBibG9jayBkZXZpY2UgTlZNRU0gcHJvdmlkZXIgYWxsb3dpbmcgYmxvY2sgZGV2aWNlcyB0byBhY3QgYXMgTlZNRU0gcHJvdmlkZXJzLCBhbmQgaGFzIGludHJvZHVjZWQgQmx1ZXRvb3RoIGRldmljZSBhZGRyZXNzZXMgZnJvbSBOVk1FTSBjZWxscy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcywgd2l0aCByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBhZGRpbmcgYSBibG9jayBkZXZpY2Ugb3Igc2V0dGluZyB1cCBhIHZpcnR1YWwgSENJIGRldmljZSB3aXRoIHRoZSByaWdodCBxdWlya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA5OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfTlZNRU0mIzM0OywKICAgICYjMzQ7QlRfSENJVUFSVF9RQ0EmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibGtfbnZtZW1fcmVnX3JlYWQmIzM0OywKICAgICYjMzQ7YmxrX252bWVtX2FkZCYjMzQ7LAogICAgJiMzNDtoY2lfZGV2X2dldF9iZF9hZGRyX2Zyb21fbnZtZW0mIzM0OywKICAgICYjMzQ7b2ZfZ2V0X252bWVtX2V1aTQ4JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYmxvY2sgZGV2aWNlIE5WTUVNIHByb3ZpZGVyIHdoaWNoIGFsbG93cyBibG9jayBkZXZpY2VzIHRvIGFjdCBhcyBOVk1FTSBwcm92aWRlcnMuIEl0IGFsc28gYWRkcyBsb2dpYyB0byByZWFkIEJsdWV0b290aCBkZXZpY2UgYWRkcmVzc2VzIGFuZCBNQUMgYWRkcmVzc2VzIGZyb20gTlZNRU0gY2VsbHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGJsb2NrLCBuZXQsIGFuZCBibHVldG9vdGggc3Vic3lzdGVtcyB0aGF0IGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChlLmcuLCB3aGVuIGFkZGluZyBhIGJsb2NrIGRldmljZSBvciBzZXR0aW5nIHVwIGEgdmlydHVhbCBIQ0kgZGV2aWNlIHdpdGggdGhlIGFwcHJvcHJpYXRlIHF1aXJrcykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19OVk1FTSYjMzQ7LAogICAgJiMzNDtCVF9IQ0lVQVJUX1FDQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jsa19udm1lbV9yZWdfcmVhZCYjMzQ7LAogICAgJiMzNDtibGtfbnZtZW1fYWRkJiMzNDssCiAgICAmIzM0O2hjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9udm1lbSYjMzQ7LAogICAgJiMzNDtvZl9nZXRfbnZtZW1fZXVpNDgmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBibG9jayBkZXZpY2UgTlZNRU0gcHJvdmlkZXIgd2hpY2ggYWxsb3dzIGJsb2NrIGRldmljZXMgdG8gYWN0IGFzIE5WTUVNIHByb3ZpZGVycy4gSXQgYWxzbyBhZGRzIGxvZ2ljIHRvIHJlYWQgQmx1ZXRvb3RoIGRldmljZSBhZGRyZXNzZXMgYW5kIE1BQyBhZGRyZXNzZXMgZnJvbSBOVk1FTSBjZWxscy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgYmxvY2ssIG5ldCwgYW5kIGJsdWV0b290aCBzdWJzeXN0ZW1zIHRoYXQgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGUuZy4sIHdoZW4gYWRkaW5nIGEgYmxvY2sgZGV2aWNlIG9yIHNldHRpbmcgdXAgYSB2aXJ0dWFsIEhDSSBkZXZpY2Ugd2l0aCB0aGUgYXBwcm9wcmlhdGUgcXVpcmtzKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA5OjI2OjU0LjY1ODA2MjQxOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MDE5ODg3OTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19OVk1FTVwiLFxuICAgIFwiQlRfSENJVUFSVF9RQ0FcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibGtfbnZtZW1fcmVnX3JlYWRcIixcbiAgICBcImJsa19udm1lbV9hZGRcIixcbiAgICBcImhjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9udm1lbVwiLFxuICAgIFwib2ZfZ2V0X252bWVtX2V1aTQ4XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBibG9jayBkZXZpY2UgTlZNRU0gcHJvdmlkZXIgd2hpY2ggYWxsb3dzIGJsb2NrIGRldmljZXMgdG8gYWN0IGFzIE5WTUVNIHByb3ZpZGVycy4gSXQgYWxzbyBhZGRzIGxvZ2ljIHRvIHJlYWQgQmx1ZXRvb3RoIGRldmljZSBhZGRyZXNzZXMgYW5kIE1BQyBhZGRyZXNzZXMgZnJvbSBOVk1FTSBjZWxscy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgYmxvY2ssIG5ldCwgYW5kIGJsdWV0b290aCBzdWJzeXN0ZW1zIHRoYXQgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGUuZy4sIHdoZW4gYWRkaW5nIGEgYmxvY2sgZGV2aWNlIG9yIHNldHRpbmcgdXAgYSB2aXJ0dWFsIEhDSSBkZXZpY2Ugd2l0aCB0aGUgYXBwcm9wcmlhdGUgcXVpcmtzKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6MjY6NTQuNjU4MDczMjU5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODA0MDQ2ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1MzZmMGRlMjZlMjY1YTYyOGY3NjVkMDUyNDAzMTNlYzRlZjkyYmM3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVuIDI5IDA5OjI2OjUzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvbW1jLWNhcmQueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvbW1jLWNhcmQueWFtbFxcbmluZGV4IGE2MWQ2Yzk2ZGY3NTkxLi5jYTkwN2FkNzMwOTU5MiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tYy1jYXJkLnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tYy1jYXJkLnlhbWxcXG5AQCAtNDAsNiArNDAsOSBAQCBwYXR0ZXJuUHJvcGVydGllczpcXG4gICAgICAgICBjb250YWluczpcXG4gICAgICAgICAgIGNvbnN0OiBmaXhlZC1wYXJ0aXRpb25zXFxuIFxcbisgICAgICBudm1lbS1sYXlvdXQ6XFxuKyAgICAgICAgJHJlZjogL3NjaGVtYXMvbnZtZW0vbGF5b3V0cy9udm1lbS1sYXlvdXQueWFtbFxcbitcXG4gcmVxdWlyZWQ6XFxuICAgLSBjb21wYXRpYmxlXFxuICAgLSByZWdcXG5AQCAtODYsNiArODksMzIgQEAgZXhhbXBsZXM6XFxuICAgICAgICAgICAgICAgICAgICAgcmVhZC1vbmx5O1xcbiAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgfTtcXG4rXFxuKyAgICAgICAgICAgIHBhcnRpdGlvbnMtYm9vdDIge1xcbisgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJmaXhlZC1wYXJ0aXRpb25zXFxcIjtcXG4rXFxuKyAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbitcXG4rICAgICAgICAgICAgICAgIG52bWVtLWxheW91dCB7XFxuKyAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJmaXhlZC1sYXlvdXRcXFwiO1xcbitcXG4rICAgICAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgICAgICAgICAgICAgbWFjLWFkZHJANDQwMCB7XFxuKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwibWFjLWJhc2VcXFwiO1xcbisgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSBcXHUwMDNjMHg0NDAwIDB4NlxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICAgICAgICAgICNudm1lbS1jZWxsLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgICAgIH07XFxuK1xcbisgICAgICAgICAgICAgICAgICAgIGJkLWFkZHJANTQwMCB7XFxuKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwibWFjLWJhc2VcXFwiO1xcbisgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSBcXHUwMDNjMHg1NDAwIDB4NlxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICAgICAgICAgICNudm1lbS1jZWxsLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgICAgIH07XFxuKyAgICAgICAgICAgICAgICB9O1xcbisgICAgICAgICAgICB9O1xcbiAgICAgICAgIH07XFxuICAgICB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9ibHVldG9vdGgvcWNvbSxibHVldG9vdGgtY29tbW9uLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2JsdWV0b290aC9xY29tLGJsdWV0b290aC1jb21tb24ueWFtbFxcbmluZGV4IGM4ZTljNTVjMWFmYjRjLi43Y2IyOGYzMGM5YWYwMyAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2JsdWV0b290aC9xY29tLGJsdWV0b290aC1jb21tb24ueWFtbFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYmx1ZXRvb3RoL3Fjb20sYmx1ZXRvb3RoLWNvbW1vbi55YW1sXFxuQEAgLTIyLDQgKzIyLDEzIEBAIHByb3BlcnRpZXM6XFxuICAgICBkZXNjcmlwdGlvbjpcXG4gICAgICAgYm9vdCBmaXJtd2FyZSBpcyBpbmNvcnJlY3RseSBwYXNzaW5nIHRoZSBhZGRyZXNzIGluIGJpZy1lbmRpYW4gb3JkZXJcXG4gXFxuKyAgbnZtZW0tY2VsbHM6XFxuKyAgICBtYXhJdGVtczogMVxcbisgICAgZGVzY3JpcHRpb246XFxuKyAgICAgIE52bWVtIGRhdGEgY2VsbCB0aGF0IGNvbnRhaW5zIGEgNiBieXRlIEJEIGFkZHJlc3Mgd2l0aCB0aGUgbW9zdFxcbisgICAgICBzaWduaWZpY2FudCBieXRlIGZpcnN0IChiaWctZW5kaWFuKS5cXG4rXFxuKyAgbnZtZW0tY2VsbC1uYW1lczpcXG4rICAgIGNvbnN0OiBsb2NhbC1iZC1hZGRyZXNzXFxuK1xcbiBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZVxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL3Fjb20sYXRoMTBrLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL3Fjb20sYXRoMTBrLnlhbWxcXG5pbmRleCBkNGY0ZDcyZWUwZDM4OC4uN2Y5ZDE2Y2I3YzE0MzMgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9xY29tLGF0aDEway55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9xY29tLGF0aDEway55YW1sXFxuQEAgLTkyLDYgKzkyLDIyIEBAIHByb3BlcnRpZXM6XFxuIFxcbiAgIGllZWU4MDIxMS1mcmVxLWxpbWl0OiB0cnVlXFxuIFxcbisgIG52bWVtLWNlbGxzOlxcbisgICAgbWluSXRlbXM6IDFcXG4rICAgIG1heEl0ZW1zOiAzXFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgUmVmZXJlbmNlcyB0byBudm1lbSBjZWxscyBmb3IgTUFDIGFkZHJlc3MgYW5kL29yIGNhbGlicmF0aW9uIGRhdGEuXFxuKyAgICAgIFN1cHBvcnRlZCBjZWxsIG5hbWVzIGFyZSBtYWMtYWRkcmVzcywgY2FsaWJyYXRpb24sIGFuZCBwcmUtY2FsaWJyYXRpb24uXFxuK1xcbisgIG52bWVtLWNlbGwtbmFtZXM6XFxuKyAgICBtaW5JdGVtczogMVxcbisgICAgbWF4SXRlbXM6IDNcXG4rICAgIGl0ZW1zOlxcbisgICAgICBlbnVtOlxcbisgICAgICAgIC0gbWFjLWFkZHJlc3NcXG4rICAgICAgICAtIGNhbGlicmF0aW9uXFxuKyAgICAgICAgLSBwcmUtY2FsaWJyYXRpb25cXG4rXFxuICAgcWNvbSxjYWxpYnJhdGlvbi1kYXRhOlxcbiAgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvdWludDgtYXJyYXlcXG4gICAgIGRlc2NyaXB0aW9uOlxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vcXJiMjIxMC1hcmR1aW5vLWltb2xhLmR0cyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9xcmIyMjEwLWFyZHVpbm8taW1vbGEuZHRzXFxuaW5kZXggYmYwODhmYTk4MDdmMDQuLjEyOGM3YTdlNzZiNWIwIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9xcmIyMjEwLWFyZHVpbm8taW1vbGEuZHRzXFxuKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL3FyYjIyMTAtYXJkdWluby1pbW9sYS5kdHNcXG5AQCAtNDA5LDcgKzQwOSw0MCBAQCBcXHUwMDI2c2RoY18xIHtcXG4gXFx0bm8tc2RpbztcXG4gXFx0bm8tc2Q7XFxuIFxcbitcXHQjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rXFx0I3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcbiBcXHRzdGF0dXMgPSBcXFwib2theVxcXCI7XFxuK1xcbitcXHRjYXJkQDAge1xcbitcXHRcXHRjb21wYXRpYmxlID0gXFxcIm1tYy1jYXJkXFxcIjtcXG4rXFx0XFx0cmVnID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rXFx0XFx0cGFydGl0aW9ucy1ib290MSB7XFxuK1xcdFxcdFxcdGNvbXBhdGlibGUgPSBcXFwiZml4ZWQtcGFydGl0aW9uc1xcXCI7XFxuK1xcbitcXHRcXHRcXHQjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rXFx0XFx0XFx0I3NpemUtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuK1xcbitcXHRcXHRcXHRudm1lbS1sYXlvdXQge1xcbitcXHRcXHRcXHRcXHRjb21wYXRpYmxlID0gXFxcImZpeGVkLWxheW91dFxcXCI7XFxuK1xcdFxcdFxcdFxcdCNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbitcXHRcXHRcXHRcXHQjc2l6ZS1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rXFxuK1xcdFxcdFxcdFxcdHdpZmlfbWFjX2FkZHI6IG1hYy1hZGRyQDQ0MDAge1xcbitcXHRcXHRcXHRcXHRcXHRjb21wYXRpYmxlID0gXFxcIm1hYy1iYXNlXFxcIjtcXG4rXFx0XFx0XFx0XFx0XFx0cmVnID0gXFx1MDAzYzB4NDQwMCAweDZcXHUwMDNlO1xcbitcXHRcXHRcXHRcXHRcXHQjbnZtZW0tY2VsbC1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rXFx0XFx0XFx0XFx0fTtcXG4rXFxuK1xcdFxcdFxcdFxcdGJkX2FkZHI6IGJkLWFkZHJANTQwMCB7XFxuK1xcdFxcdFxcdFxcdFxcdGNvbXBhdGlibGUgPSBcXFwibWFjLWJhc2VcXFwiO1xcbitcXHRcXHRcXHRcXHRcXHRyZWcgPSBcXHUwMDNjMHg1NDAwIDB4NlxcdTAwM2U7XFxuK1xcdFxcdFxcdFxcdFxcdCNudm1lbS1jZWxsLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbitcXHRcXHRcXHRcXHR9O1xcbitcXHRcXHRcXHR9O1xcbitcXHRcXHR9O1xcbitcXHR9O1xcbiB9O1xcbiBcXG4gXFx1MDAyNnNwaTUge1xcbkBAIC01MTIsNiArNTQ1LDkgQEAgYmx1ZXRvb3RoIHtcXG4gXFx0XFx0dmRkY2gwLXN1cHBseSA9IFxcdTAwM2NcXHUwMDI2cG00MTI1X2wyMlxcdTAwM2U7XFxuIFxcdFxcdGVuYWJsZS1ncGlvcyA9IFxcdTAwM2NcXHUwMDI2dGxtbSA4NyBHUElPX0FDVElWRV9ISUdIXFx1MDAzZTtcXG4gXFx0XFx0bWF4LXNwZWVkID0gXFx1MDAzYzMwMDAwMDBcXHUwMDNlO1xcbitcXG4rXFx0XFx0bnZtZW0tY2VsbHMgPSBcXHUwMDNjXFx1MDAyNmJkX2FkZHIgMFxcdTAwM2U7XFxuK1xcdFxcdG52bWVtLWNlbGwtbmFtZXMgPSBcXFwibG9jYWwtYmQtYWRkcmVzc1xcXCI7XFxuIFxcdH07XFxuIH07XFxuIFxcbkBAIC01NTcsNiArNTkzLDkgQEAgXFx1MDAyNndpZmkge1xcbiBcXHRxY29tLGF0aDEway1jYWxpYnJhdGlvbi12YXJpYW50ID0gXFxcIkFyZHVpbm9JbW9sYVxcXCI7XFxuIFxcdGZpcm13YXJlLW5hbWUgPSBcXFwicWNtMjI5MFxcXCI7XFxuIFxcbitcXHRudm1lbS1jZWxscyA9IFxcdTAwM2NcXHUwMDI2d2lmaV9tYWNfYWRkciAwXFx1MDAzZTtcXG4rXFx0bnZtZW0tY2VsbC1uYW1lcyA9IFxcXCJtYWMtYWRkcmVzc1xcXCI7XFxuK1xcbiBcXHRzdGF0dXMgPSBcXFwib2theVxcXCI7XFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9ibG9jay9LY29uZmlnIGIvYmxvY2svS2NvbmZpZ1xcbmluZGV4IDcwZTRhNjZkOTQxZmY2Li5hZWM1ZDlmYzEzYTNkMyAxMDA2NDRcXG4tLS0gYS9ibG9jay9LY29uZmlnXFxuKysrIGIvYmxvY2svS2NvbmZpZ1xcbkBAIC0yMDksNiArMjA5LDE1IEBAIGNvbmZpZyBCTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0tcXG4gXFx0ICBieSBmYWxsaW5nIGJhY2sgdG8gdGhlIGtlcm5lbCBjcnlwdG8gQVBJIHdoZW4gaW5saW5lXFxuIFxcdCAgZW5jcnlwdGlvbiBoYXJkd2FyZSBpcyBub3QgcHJlc2VudC5cXG4gXFxuK2NvbmZpZyBCTEtfTlZNRU1cXG4rXFx0Ym9vbCBcXFwiQmxvY2sgZGV2aWNlIE5WTUVNIHByb3ZpZGVyXFxcIlxcbitcXHRkZXBlbmRzIG9uIE9GXFxuK1xcdGRlcGVuZHMgb24gTlZNRU1cXG4rXFx0aGVscFxcbitcXHQgIEFsbG93IGJsb2NrIGRldmljZXMgKG9yIHBhcnRpdGlvbnMpIHRvIGFjdCBhcyBOVk1FTSBwcm92aWRlcnMsXFxuK1xcdCAgdHlwaWNhbGx5IHVzZWQgd2l0aCBlTU1DIHRvIHN0b3JlIE1BQyBhZGRyZXNzZXMgb3IgV2ktRmlcXG4rXFx0ICBjYWxpYnJhdGlvbiBkYXRhIG9uIGVtYmVkZGVkIGRldmljZXMuXFxuK1xcbiBzb3VyY2UgXFxcImJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZ1xcXCJcXG4gXFxuIGNvbmZpZyBCTEtfUE1cXG5kaWZmIC0tZ2l0IGEvYmxvY2svTWFrZWZpbGUgYi9ibG9jay9NYWtlZmlsZVxcbmluZGV4IGU3YmQzMjBlM2Q2OTcxLi44MjAwMjk3ZmJjYmFiMyAxMDA2NDRcXG4tLS0gYS9ibG9jay9NYWtlZmlsZVxcbisrKyBiL2Jsb2NrL01ha2VmaWxlXFxuQEAgLTM5LDMgKzM5LDQgQEAgb2JqLSQoQ09ORklHX0JMS19JTkxJTkVfRU5DUllQVElPTilcXHQrPSBibGstY3J5cHRvLm8gYmxrLWNyeXB0by1wcm9maWxlLm8gXFxcXFxcbiBcXHRcXHRcXHRcXHRcXHQgICBibGstY3J5cHRvLXN5c2ZzLm9cXG4gb2JqLSQoQ09ORklHX0JMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDSylcXHQrPSBibGstY3J5cHRvLWZhbGxiYWNrLm9cXG4gb2JqLSQoQ09ORklHX0JMT0NLX0hPTERFUl9ERVBSRUNBVEVEKVxcdCs9IGhvbGRlci5vXFxuK29iai0kKENPTkZJR19CTEtfTlZNRU0pICAgICAgICAgICAgICAgICs9IGJsay1udm1lbS5vXFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1udm1lbS5jIGIvYmxvY2svYmxrLW52bWVtLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40YjM1YTc0MjU1MDU5M1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9ibG9jay9ibGstbnZtZW0uY1xcbkBAIC0wLDAgKzEsMTExIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuKy8qXFxuKyAqIGJsb2NrIGRldmljZSBOVk1FTSBwcm92aWRlclxcbisgKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjQgRGFuaWVsIEdvbGxlIFxcdTAwM2NkYW5pZWxAbWFrcm90b3BpYS5vcmdcXHUwMDNlXFxuKyAqIENvcHlyaWdodCAoYykgUXVhbGNvbW0gVGVjaG5vbG9naWVzLCBJbmMuIGFuZC9vciBpdHMgc3Vic2lkaWFyaWVzLlxcbisgKlxcbisgKiBVc2VmdWwgb24gZGV2aWNlcyB1c2luZyBhIHBhcnRpdGlvbiBvbiBhbiBlTU1DIGZvciBNQUMgYWRkcmVzc2VzIG9yXFxuKyAqIFdpLUZpIGNhbGlicmF0aW9uIEVFUFJPTSBkYXRhLlxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9maWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9udm1lbS1wcm92aWRlci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbnZtZW0tY29uc3VtZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlbWFwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImJsay5oXFxcIlxcbitcXG4rc3RhdGljIGludCBibGtfbnZtZW1fcmVnX3JlYWQodm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGZyb20sIHZvaWQgKnZhbCwgc2l6ZV90IGJ5dGVzKVxcbit7XFxuK1xcdGRldl90IGRldnQgPSAoZGV2X3QpKHVpbnRwdHJfdClwcml2O1xcbitcXHRzaXplX3QgYnl0ZXNfbGVmdCA9IGJ5dGVzO1xcbitcXHRsb2ZmX3QgcG9zID0gZnJvbTtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRzdHJ1Y3QgZmlsZSAqYmRldl9maWxlIF9fZnJlZShmcHV0KSA9XFxuK1xcdFxcdGJkZXZfZmlsZV9vcGVuX2J5X2RldihkZXZ0LCBCTEtfT1BFTl9SRUFELCBOVUxMLCBOVUxMKTtcXG4rXFx0aWYgKElTX0VSUihiZGV2X2ZpbGUpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihiZGV2X2ZpbGUpO1xcbitcXG4rXFx0d2hpbGUgKGJ5dGVzX2xlZnQpIHtcXG4rXFx0XFx0cGdvZmZfdCBmX2luZGV4ID0gcG9zIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuK1xcdFxcdHNpemVfdCBmb2xpb19vZmY7XFxuK1xcdFxcdHNpemVfdCB0b19yZWFkO1xcbitcXG4rXFx0XFx0Zm9saW8gPSByZWFkX21hcHBpbmdfZm9saW8oYmRldl9maWxlLVxcdTAwM2VmX21hcHBpbmcsIGZfaW5kZXgsIE5VTEwpO1xcbitcXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xcbitcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKGZvbGlvKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGZvbGlvX29mZiA9IG9mZnNldF9pbl9mb2xpbyhmb2xpbywgcG9zKTtcXG4rXFx0XFx0dG9fcmVhZCA9IG1pbihieXRlc19sZWZ0LCBmb2xpb19zaXplKGZvbGlvKSAtIGZvbGlvX29mZik7XFxuK1xcdFxcdG1lbWNweV9mcm9tX2ZvbGlvKHZhbCwgZm9saW8sIGZvbGlvX29mZiwgdG9fcmVhZCk7XFxuK1xcdFxcdHBvcyArPSB0b19yZWFkO1xcbitcXHRcXHRieXRlc19sZWZ0IC09IHRvX3JlYWQ7XFxuK1xcdFxcdHZhbCArPSB0b19yZWFkO1xcbitcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitpbnQgYmxrX252bWVtX2FkZChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZiZGV2LVxcdTAwM2ViZF9kZXZpY2U7XFxuK1xcdHN0cnVjdCBudm1lbV9jb25maWcgY29uZmlnID0ge307XFxuK1xcbitcXHQvKiBza2lwIGRldmljZXMgd2hpY2ggZG8gbm90IGhhdmUgYSBkZXZpY2UgdHJlZSBub2RlICovXFxuK1xcdGlmICghZGV2X29mX25vZGUoZGV2KSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBza2lwIGRldmljZXMgd2l0aG91dCBhbiBudm1lbSBsYXlvdXQgZGVmaW5lZCAqL1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkIF9fZnJlZShkZXZpY2Vfbm9kZSkgPVxcbitcXHRcXHRvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXZfb2Zfbm9kZShkZXYpLCBcXFwibnZtZW0tbGF5b3V0XFxcIik7XFxuK1xcdGlmICghY2hpbGQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LypcXG4rXFx0ICogc2tpcCBibG9jayBkZXZpY2UgdG9vIGxhcmdlIHRvIGJlIHJlcHJlc2VudGVkIGFzIE5WTUVNIGRldmljZXMsXFxuK1xcdCAqIG52bWVtX2NvbmZpZy5zaXplIGlzIGEgc2lnbmVkIGludFxcbitcXHQgKi9cXG4rXFx0aWYgKGJkZXZfbnJfYnl0ZXMoYmRldikgXFx1MDAzZSBJTlRfTUFYKSB7XFxuK1xcdFxcdGRldl93YXJuKGRldiwgXFxcImJsb2NrIGRldmljZSB0b28gbGFyZ2UgdG8gYmUgYW4gTlZNRU0gcHJvdmlkZXJcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0Y29uZmlnLmlkID0gTlZNRU1fREVWSURfTk9ORTtcXG4rXFx0Y29uZmlnLmRldiA9IGRldjtcXG4rXFx0Y29uZmlnLm5hbWUgPSBkZXZfbmFtZShkZXYpO1xcbitcXHRjb25maWcub3duZXIgPSBUSElTX01PRFVMRTtcXG4rXFx0Y29uZmlnLnByaXYgPSAodm9pZCAqKSh1aW50cHRyX3QpZGV2LVxcdTAwM2VkZXZ0O1xcbitcXHRjb25maWcucmVnX3JlYWQgPSBibGtfbnZtZW1fcmVnX3JlYWQ7XFxuK1xcdGNvbmZpZy5zaXplID0gYmRldl9ucl9ieXRlcyhiZGV2KTtcXG4rXFx0Y29uZmlnLndvcmRfc2l6ZSA9IDE7XFxuK1xcdGNvbmZpZy5zdHJpZGUgPSAxO1xcbitcXHRjb25maWcucmVhZF9vbmx5ID0gdHJ1ZTtcXG4rXFx0Y29uZmlnLnJvb3Rfb25seSA9IHRydWU7XFxuK1xcdGNvbmZpZy5pZ25vcmVfd3AgPSB0cnVlO1xcbitcXHRjb25maWcub2Zfbm9kZSA9IHRvX29mX25vZGUoZGV2LVxcdTAwM2Vmd25vZGUpO1xcbitcXG4rXFx0YmRldi1cXHUwMDNlYmRfbnZtZW0gPSBudm1lbV9yZWdpc3RlcihcXHUwMDI2Y29uZmlnKTtcXG4rXFx0aWYgKElTX0VSUihiZGV2LVxcdTAwM2ViZF9udm1lbSkpIHtcXG4rXFx0XFx0aW50IHJldCA9IFBUUl9FUlIoYmRldi1cXHUwMDNlYmRfbnZtZW0pO1xcbitcXG4rXFx0XFx0YmRldi1cXHUwMDNlYmRfbnZtZW0gPSBOVUxMO1xcbitcXHRcXHRkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCBcXFwiRmFpbGVkIHRvIHJlZ2lzdGVyIE5WTUVNIGRldmljZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbit2b2lkIGJsa19udm1lbV9kZWwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcXG4re1xcbitcXHRudm1lbV91bnJlZ2lzdGVyKGJkZXYtXFx1MDAzZWJkX252bWVtKTtcXG4rXFx0YmRldi1cXHUwMDNlYmRfbnZtZW0gPSBOVUxMO1xcbit9XFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay5oIGIvYmxvY2svYmxrLmhcXG5pbmRleCAyNWFmOGFjNWVmMGY3Ny4uZGFkOGYwZDdhMjE4ZWQgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmxrLmhcXG4rKysgYi9ibG9jay9ibGsuaFxcbkBAIC04MTAsNCArODEwLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBibGtfZGVidWdmc191bmxvY2soc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXFxuIFxcdG1lbWFsbG9jX25vaW9fcmVzdG9yZShtZW1mbGFncyk7XFxuIH1cXG4gXFxuKyNpZmRlZiBDT05GSUdfQkxLX05WTUVNXFxuK2ludCBibGtfbnZtZW1fYWRkKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpO1xcbit2b2lkIGJsa19udm1lbV9kZWwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldik7XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgaW50IGJsa19udm1lbV9hZGQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikgeyByZXR1cm4gMDsgfVxcbitzdGF0aWMgaW5saW5lIHZvaWQgYmxrX252bWVtX2RlbChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KSB7fVxcbisjZW5kaWZcXG4rXFxuICNlbmRpZiAvKiBCTEtfSU5URVJOQUxfSCAqL1xcbmRpZmYgLS1naXQgYS9ibG9jay9nZW5oZC5jIGIvYmxvY2svZ2VuaGQuY1xcbmluZGV4IGY4NGI2YTM1NWI1NzRhLi4wYzljNWU1ZWE3YmFmZiAxMDA2NDRcXG4tLS0gYS9ibG9jay9nZW5oZC5jXFxuKysrIGIvYmxvY2svZ2VuaGQuY1xcbkBAIC00MjEsNiArNDIxLDggQEAgc3RhdGljIHZvaWQgYWRkX2Rpc2tfZmluYWwoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRkZXZfc2V0X3VldmVudF9zdXBwcmVzcyhkZGV2LCAwKTtcXG4gXFx0XFx0ZGlza191ZXZlbnQoZGlzaywgS09CSl9BREQpO1xcbitcXG4rXFx0XFx0YmxrX252bWVtX2FkZChkaXNrLVxcdTAwM2VwYXJ0MCk7XFxuIFxcdH1cXG4gXFxuIFxcdGJsa19hcHBseV9iZGlfbGltaXRzKGRpc2stXFx1MDAzZWJkaSwgXFx1MDAyNmRpc2stXFx1MDAzZXF1ZXVlLVxcdTAwM2VsaW1pdHMpO1xcbkBAIC03MDQsNiArNzA2LDggQEAgc3RhdGljIHZvaWQgX19kZWxfZ2VuZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4gXFxuIFxcdGRpc2tfZGVsX2V2ZW50cyhkaXNrKTtcXG4gXFxuK1xcdGJsa19udm1lbV9kZWwoZGlzay1cXHUwMDNlcGFydDApO1xcbitcXG4gXFx0LypcXG4gXFx0ICogUHJldmVudCBuZXcgb3BlbmVycyBieSB1bmxpbmtlZCB0aGUgYmRldiBpbm9kZS5cXG4gXFx0ICovXFxuZGlmZiAtLWdpdCBhL2Jsb2NrL3BhcnRpdGlvbnMvb2YuYyBiL2Jsb2NrL3BhcnRpdGlvbnMvb2YuY1xcbmluZGV4IDUzNjY0ZWEwNmI2NTQwLi42MGFhM2Q2OTA2Y2ExZCAxMDA2NDRcXG4tLS0gYS9ibG9jay9wYXJ0aXRpb25zL29mLmNcXG4rKysgYi9ibG9jay9wYXJ0aXRpb25zL29mLmNcXG5AQCAtMTUsNiArMTUsMTAgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9vZl9wYXJ0aXRpb24oc3RydWN0IGRldmljZV9ub2RlICpucCwgaW50IHNsb3QpXFxuIFxcdGludCBhX2NlbGxzID0gb2Zfbl9hZGRyX2NlbGxzKG5wKTtcXG4gXFx0aW50IHNfY2VsbHMgPSBvZl9uX3NpemVfY2VsbHMobnApO1xcbiBcXG4rXFx0LyogU2tpcCBub2RlcyB3aXRob3V0IGEgcmVnIHByb3BlcnR5IChlLmcuIG52bWVtLWxheW91dCkgKi9cXG4rXFx0aWYgKCFyZWcpXFxuK1xcdFxcdHJldHVybiAxO1xcbitcXG4gXFx0LyogTWFrZSBzdXJlIHJlZyBsZW4gbWF0Y2ggdGhlIGV4cGVjdGVkIGFkZHIgYW5kIHNpemUgY2VsbHMgKi9cXG4gXFx0aWYgKGxlbiAvIHNpemVvZigqcmVnKSAhPSBhX2NlbGxzICsgc19jZWxscylcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTgyLDE0ICs4NiwxNSBAQCBpbnQgb2ZfcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUpXFxuIFxcdHNsb3QgPSAxO1xcbiBcXHQvKiBWYWxpZGF0ZSBwYXJpdGlvbiBvZmZzZXQgYW5kIHNpemUgKi9cXG4gXFx0Zm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShwYXJ0aXRpb25zX25wLCBucCkge1xcbi1cXHRcXHRpZiAodmFsaWRhdGVfb2ZfcGFydGl0aW9uKG5wLCBzbG90KSkge1xcbitcXHRcXHRpbnQgZXJyID0gdmFsaWRhdGVfb2ZfcGFydGl0aW9uKG5wLCBzbG90KTtcXG4rXFxuK1xcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdFxcdG9mX25vZGVfcHV0KG5wKTtcXG4gXFx0XFx0XFx0b2Zfbm9kZV9wdXQocGFydGl0aW9uc19ucCk7XFxuLVxcbiBcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdFxcdH1cXG4tXFxuLVxcdFxcdHNsb3QrKztcXG4rXFx0XFx0aWYgKCFlcnIpXFxuK1xcdFxcdFxcdHNsb3QrKztcXG4gXFx0fVxcbiBcXG4gXFx0c2xvdCA9IDE7XFxuQEAgLTk5LDkgKzEwNCwxMCBAQCBpbnQgb2ZfcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRhZGRfb2ZfcGFydGl0aW9uKHN0YXRlLCBzbG90LCBucCk7XFxuLVxcbi1cXHRcXHRzbG90Kys7XFxuK1xcdFxcdGlmIChvZl9wcm9wZXJ0eV9wcmVzZW50KG5wLCBcXFwicmVnXFxcIikpIHtcXG4rXFx0XFx0XFx0YWRkX29mX3BhcnRpdGlvbihzdGF0ZSwgc2xvdCwgbnApO1xcbitcXHRcXHRcXHRzbG90Kys7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0c2VxX2J1Zl9wdXRzKFxcdTAwMjZzdGF0ZS1cXHUwMDNlcHBfYnVmLCBcXFwiXFxcXG5cXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmNcXG5pbmRleCAwNGViZTI5MGJjNzg0ZS4uMDZjYjc4N2IwNTU5ZjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuY1xcbisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmNcXG5AQCAtNzIzLDggKzcyMywxMSBAQCBzdGF0aWMgaW50IHFjYV9jaGVja19iZGFkZHIoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGNvbnN0IHN0cnVjdCBxY2FfZndfY29uZmlnICpjb1xcbiBcXHR9XFxuIFxcbiBcXHRiZGEgPSAoc3RydWN0IGhjaV9ycF9yZWFkX2JkX2FkZHIgKilza2ItXFx1MDAzZWRhdGE7XFxuLVxcdGlmICghYmFjbXAoXFx1MDAyNmJkYS1cXHUwMDNlYmRhZGRyLCBcXHUwMDI2Y29uZmlnLVxcdTAwM2ViZGFkZHIpKVxcbitcXHRpZiAoIWJhY21wKFxcdTAwMjZiZGEtXFx1MDAzZWJkYWRkciwgXFx1MDAyNmNvbmZpZy1cXHUwMDNlYmRhZGRyKSkge1xcbiBcXHRcXHRoY2lfc2V0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19VU0VfQkRBRERSX1BST1BFUlRZKTtcXG4rXFx0XFx0aGNpX3NldF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfVVNFX0JEQUREUl9OVk1FTSk7XFxuK1xcdFxcdGhjaV9zZXRfcXVpcmsoaGRldiwgSENJX1FVSVJLX0JEQUREUl9OVk1FTV9CRSk7XFxuK1xcdH1cXG4gXFxuIFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcXG5pbmRleCA4ODA4ZWU3NmU3M2MwOS4uYWNlNmY1OWI4NjBkMDggMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcXG5AQCAtNzMsNiArNzMsOSBAQCBzdHJ1Y3QgYmxvY2tfZGV2aWNlIHtcXG4gXFx0aW50XFx0XFx0XFx0YmRfd3JpdGVycztcXG4gI2lmZGVmIENPTkZJR19TRUNVUklUWVxcbiBcXHR2b2lkXFx0XFx0XFx0KmJkX3NlY3VyaXR5O1xcbisjZW5kaWZcXG4rI2lmZGVmIENPTkZJR19CTEtfTlZNRU1cXG4rXFx0c3RydWN0IG52bWVtX2RldmljZVxcdCpiZF9udm1lbTtcXG4gI2VuZGlmXFxuIFxcdC8qXFxuIFxcdCAqIGtlZXAgdGhpcyBvdXQtb2YtbGluZSBhcyBpdCdzIGJvdGggYmlnIGFuZCBub3QgbmVlZGVkIGluIHRoZSBmYXN0XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXFxuaW5kZXggOTIxM2E1NzE2Zjk1YTcuLjVhNzRiZDVmYmE5ODQwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXFxuQEAgLTMwLDYgKzMwLDcgQEBcXG4gXFxuIHN0cnVjdCBtb2R1bGU7XFxuIHN0cnVjdCByZXF1ZXN0X3F1ZXVlO1xcbitzdHJ1Y3QgbnZtZW1fZGV2aWNlO1xcbiBzdHJ1Y3QgZWxldmF0b3JfcXVldWU7XFxuIHN0cnVjdCBibGtfdHJhY2U7XFxuIHN0cnVjdCByZXF1ZXN0O1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29mX25ldC5oIGIvaW5jbHVkZS9saW51eC9vZl9uZXQuaFxcbmluZGV4IGQ4ODcxNWEwYjNhNTJmLi43ODU0YmE1NTVkOWE1NSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L29mX25ldC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9vZl9uZXQuaFxcbkBAIC0xNSw2ICsxNSw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlO1xcbiBleHRlcm4gaW50IG9mX2dldF9waHlfbW9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBwaHlfaW50ZXJmYWNlX3QgKmludGVyZmFjZSk7XFxuIGV4dGVybiBpbnQgb2ZfZ2V0X21hY19hZGRyZXNzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHU4ICptYWMpO1xcbiBleHRlcm4gaW50IG9mX2dldF9tYWNfYWRkcmVzc19udm1lbShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCB1OCAqbWFjKTtcXG4raW50IG9mX2dldF9udm1lbV9ldWk0OChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBjb25zdCBjaGFyICpjZWxsX25hbWUsIHU4ICphZGRyKTtcXG4gaW50IG9mX2dldF9ldGhkZXZfYWRkcmVzcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4gZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICpvZl9maW5kX25ldF9kZXZpY2VfYnlfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTtcXG4gI2Vsc2VcXG5AQCAtMzQsNiArMzUsMTIgQEAgc3RhdGljIGlubGluZSBpbnQgb2ZfZ2V0X21hY19hZGRyZXNzX252bWVtKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHU4ICptYWMpXFxuIFxcdHJldHVybiAtRU5PREVWO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGludCBvZl9nZXRfbnZtZW1fZXVpNDgoc3RydWN0IGRldmljZV9ub2RlICpucCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgY29uc3QgY2hhciAqY2VsbF9uYW1lLCB1OCAqYWRkcilcXG4re1xcbitcXHRyZXR1cm4gLUVOT0RFVjtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBpbnQgb2ZfZ2V0X2V0aGRldl9hZGRyZXNzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4gXFx0cmV0dXJuIC1FTk9ERVY7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaFxcbmluZGV4IDM4MTg2YTI0NWYxNGRiLi4xNDVhYjk0ZTUxNDgyZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmhcXG4rKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmhcXG5AQCAtMTYxLDYgKzE2MSwyNCBAQCBlbnVtIHtcXG4gXFx0ICovXFxuIFxcdEhDSV9RVUlSS19CREFERFJfUFJPUEVSVFlfQlJPS0VOLFxcbiBcXG4rXFx0LyogV2hlbiB0aGlzIHF1aXJrIGlzIHNldCwgdGhlIHB1YmxpYyBCbHVldG9vdGggYWRkcmVzc1xcbitcXHQgKiBpbml0aWFsbHkgcmVwb3J0ZWQgYnkgSENJIFJlYWQgQkQgQWRkcmVzcyBjb21tYW5kXFxuK1xcdCAqIGlzIGNvbnNpZGVyZWQgaW52YWxpZC4gVGhlIHB1YmxpYyBCRCBBZGRyZXNzIGNhbiBiZVxcbitcXHQgKiByZXRyaWV2ZWQgdmlhIGEgJ2xvY2FsLWJkLWFkZHJlc3MnIE5WTUVNIGNlbGwuXFxuK1xcdCAqXFxuK1xcdCAqIFRoaXMgcXVpcmsgY2FuIGJlIHNldCBiZWZvcmUgaGNpX3JlZ2lzdGVyX2RldiBpcyBjYWxsZWQgb3JcXG4rXFx0ICogZHVyaW5nIHRoZSBoZGV2LVxcdTAwM2VzZXR1cCB2ZW5kb3IgY2FsbGJhY2suXFxuK1xcdCAqL1xcbitcXHRIQ0lfUVVJUktfVVNFX0JEQUREUl9OVk1FTSxcXG4rXFxuK1xcdC8qIFdoZW4gdGhpcyBxdWlyayBpcyBzZXQsIHRoZSBCbHVldG9vdGggRGV2aWNlIEFkZHJlc3MgcHJvdmlkZWQgYnlcXG4rXFx0ICogdGhlICdsb2NhbC1iZC1hZGRyZXNzJyBOVk1FTSBpcyBzdG9yZWQgaW4gYmlnLWVuZGlhbiBvcmRlci5cXG4rXFx0ICpcXG4rXFx0ICogVGhpcyBxdWlyayBjYW4gYmUgc2V0IGJlZm9yZSBoY2lfcmVnaXN0ZXJfZGV2IGlzIGNhbGxlZCBvclxcbitcXHQgKiBkdXJpbmcgdGhlIGhkZXYtXFx1MDAzZXNldHVwIHZlbmRvciBjYWxsYmFjay5cXG4rXFx0ICovXFxuK1xcdEhDSV9RVUlSS19CREFERFJfTlZNRU1fQkUsXFxuK1xcbiBcXHQvKiBXaGVuIHRoaXMgcXVpcmsgaXMgc2V0LCB0aGUgZHVwbGljYXRlIGZpbHRlcmluZyBkdXJpbmdcXG4gXFx0ICogc2Nhbm5pbmcgaXMgYmFzZWQgb24gQmx1ZXRvb3RoIGRldmljZXMgYWRkcmVzc2VzLiBUbyBhbGxvd1xcbiBcXHQgKiBSU1NJIGJhc2VkIHVwZGF0ZXMsIHJlc3RhcnQgc2Nhbm5pbmcgaWYgbmVlZGVkLlxcbmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmNcXG5pbmRleCAzYmU4YzM1ODFjNmNhYS4uNzM0ZWVkMjBkZTA0NGIgMTAwNjQ0XFxuLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfc3luYy5jXFxuKysrIGIvbmV0L2JsdWV0b290aC9oY2lfc3luYy5jXFxuQEAgLTcsNiArNyw3IEBAXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9uZXQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2JsdWV0b290aC9oY2lfY29yZS5oXFx1MDAzZVxcbkBAIC0zNTkzLDYgKzM1OTQsMzcgQEAgaW50IGhjaV9wb3dlcmVkX3VwZGF0ZV9zeW5jKHN0cnVjdCBoY2lfZGV2ICpoZGV2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGhjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9udm1lbSAtIEdldCB0aGUgQmx1ZXRvb3RoIERldmljZSBBZGRyZXNzXFxuKyAqXFx0XFx0XFx0XFx0ICAgIChCRF9BRERSKSBmb3IgYSBIQ0kgZGV2aWNlIGZyb21cXG4rICpcXHRcXHRcXHRcXHQgICAgYW4gTlZNRU0gY2VsbC5cXG4rICogQGhkZXY6XFx0VGhlIEhDSSBkZXZpY2VcXG4rICpcXG4rICogU2VhcmNoIGZvciAnbG9jYWwtYmQtYWRkcmVzcycgTlZNRU0gY2VsbCBpbiB0aGUgZGV2aWNlIGZpcm13YXJlIG5vZGUuXFxuKyAqXFxuKyAqIEFsbC16ZXJvIEJEIGFkZHJlc3NlcyBhcmUgcmVqZWN0ZWQgKHVucHJvdmlzaW9uZWQpLlxcbisgKi9cXG4rc3RhdGljIGludCBoY2lfZGV2X2dldF9iZF9hZGRyX2Zyb21fbnZtZW0oc3RydWN0IGhjaV9kZXYgKmhkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldl9vZl9ub2RlKGhkZXYtXFx1MDAzZWRldi5wYXJlbnQpO1xcbitcXHR1OCBiYVtzaXplb2YoYmRhZGRyX3QpXTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmICghbnApXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0ZXJyID0gb2ZfZ2V0X252bWVtX2V1aTQ4KG5wLCBcXFwibG9jYWwtYmQtYWRkcmVzc1xcXCIsIGJhKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGlmIChoY2lfdGVzdF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfQkRBRERSX05WTUVNX0JFKSlcXG4rXFx0XFx0YmFzd2FwKFxcdTAwMjZoZGV2LVxcdTAwM2VwdWJsaWNfYWRkciwgKGJkYWRkcl90ICopYmEpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGJhY3B5KFxcdTAwMjZoZGV2LVxcdTAwM2VwdWJsaWNfYWRkciwgKGJkYWRkcl90ICopYmEpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBoY2lfZGV2X2dldF9iZF9hZGRyX2Zyb21fcHJvcGVydHkgLSBHZXQgdGhlIEJsdWV0b290aCBEZXZpY2UgQWRkcmVzc1xcbiAgKlxcdFxcdFxcdFxcdCAgICAgICAoQkRfQUREUikgZm9yIGEgSENJIGRldmljZSBmcm9tXFxuQEAgLTUwNzIsMTIgKzUxMDQsMTcgQEAgc3RhdGljIGludCBoY2lfZGV2X3NldHVwX3N5bmMoc3RydWN0IGhjaV9kZXYgKmhkZXYpXFxuIFxcdCAqIGl0cyBzZXR1cCBjYWxsYmFjay5cXG4gXFx0ICovXFxuIFxcdGludmFsaWRfYmRhZGRyID0gaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX0lOVkFMSURfQkRBRERSKSB8fFxcbi1cXHRcXHRcXHQgaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX1VTRV9CREFERFJfUFJPUEVSVFkpO1xcbitcXHRcXHRcXHQgaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX1VTRV9CREFERFJfUFJPUEVSVFkpIHx8XFxuK1xcdFxcdFxcdCBoY2lfdGVzdF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfVVNFX0JEQUREUl9OVk1FTSk7XFxuIFxcdGlmICghcmV0KSB7XFxuIFxcdFxcdGlmIChoY2lfdGVzdF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfVVNFX0JEQUREUl9QUk9QRVJUWSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICFiYWNtcChcXHUwMDI2aGRldi1cXHUwMDNlcHVibGljX2FkZHIsIEJEQUREUl9BTlkpKVxcbiBcXHRcXHRcXHRoY2lfZGV2X2dldF9iZF9hZGRyX2Zyb21fcHJvcGVydHkoaGRldik7XFxuIFxcbitcXHRcXHRpZiAoaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX1VTRV9CREFERFJfTlZNRU0pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhYmFjbXAoXFx1MDAyNmhkZXYtXFx1MDAzZXB1YmxpY19hZGRyLCBCREFERFJfQU5ZKSlcXG4rXFx0XFx0XFx0aGNpX2Rldl9nZXRfYmRfYWRkcl9mcm9tX252bWVtKGhkZXYpO1xcbitcXG4gXFx0XFx0aWYgKGludmFsaWRfYmRhZGRyIFxcdTAwMjZcXHUwMDI2IGJhY21wKFxcdTAwMjZoZGV2LVxcdTAwM2VwdWJsaWNfYWRkciwgQkRBRERSX0FOWSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIGhkZXYtXFx1MDAzZXNldF9iZGFkZHIpIHtcXG4gXFx0XFx0XFx0cmV0ID0gaGRldi1cXHUwMDNlc2V0X2JkYWRkcihoZGV2LCBcXHUwMDI2aGRldi1cXHUwMDNlcHVibGljX2FkZHIpO1xcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9vZl9uZXQuYyBiL25ldC9jb3JlL29mX25ldC5jXFxuaW5kZXggOTNlYTQyNWI5MjQ4YTIuLjExYzFhY2NhMTUxMjY2IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL29mX25ldC5jXFxuKysrIGIvbmV0L2NvcmUvb2ZfbmV0LmNcXG5AQCAtNjEsOSArNjEsNyBAQCBzdGF0aWMgaW50IG9mX2dldF9tYWNfYWRkcihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBjb25zdCBjaGFyICpuYW1lLCB1OCAqYWRkcilcXG4gaW50IG9mX2dldF9tYWNfYWRkcmVzc19udm1lbShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCB1OCAqYWRkcilcXG4ge1xcbiBcXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShucCk7XFxuLVxcdHN0cnVjdCBudm1lbV9jZWxsICpjZWxsO1xcbi1cXHRjb25zdCB2b2lkICptYWM7XFxuLVxcdHNpemVfdCBsZW47XFxuK1xcdHU4IG1hY1tFVEhfQUxFTl0gX19hbGlnbmVkKHNpemVvZih1MTYpKTtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdC8qIFRyeSBsb29rdXAgYnkgZGV2aWNlIGZpcnN0LCB0aGVyZSBtaWdodCBiZSBhIG52bWVtX2NlbGxfbG9va3VwXFxuQEAgLTc1LDI3ICs3Myw1NCBAQCBpbnQgb2ZfZ2V0X21hY19hZGRyZXNzX252bWVtKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHU4ICphZGRyKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcbi1cXHRjZWxsID0gb2ZfbnZtZW1fY2VsbF9nZXQobnAsIFxcXCJtYWMtYWRkcmVzc1xcXCIpO1xcbitcXHRyZXQgPSBvZl9nZXRfbnZtZW1fZXVpNDgobnAsIFxcXCJtYWMtYWRkcmVzc1xcXCIsIG1hYyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobWFjKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRldGhlcl9hZGRyX2NvcHkoYWRkciwgbWFjKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChvZl9nZXRfbWFjX2FkZHJlc3NfbnZtZW0pO1xcbitcXG4rLyoqXFxuKyAqIG9mX2dldF9udm1lbV9ldWk0OCAtIFJlYWQgYSA2LWJ5dGUgRVVJLTQ4IGFkZHJlc3MgZnJvbSBhIG5hbWVkIE5WTUVNIGNlbGwuXFxuKyAqIEBucDpcXHRcXHREZXZpY2Ugbm9kZSB0byBsb29rIHVwIHRoZSBOVk1FTSBjZWxsIGZyb20uXFxuKyAqIEBjZWxsX25hbWU6XFx0TmFtZSBvZiB0aGUgTlZNRU0gY2VsbCAoZS5nLiBcXFwibWFjLWFkZHJlc3NcXFwiLCBcXFwibG9jYWwtYmQtYWRkcmVzc1xcXCIpLlxcbisgKiBAYWRkcjpcXHRPdXRwdXQgYnVmZmVyIGZvciB0aGUgNi1ieXRlIGFkZHJlc3MuXFxuKyAqXFxuKyAqIFJlYWRzIHRoZSBuYW1lZCBOVk1FTSBjZWxsIGFuZCB2YWxpZGF0ZXMgdGhhdCBpdCBjb250YWlucyBhIG5vbi16ZXJvIDYtYnl0ZVxcbisgKiBhZGRyZXNzLiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cXG4rICovXFxuK2ludCBvZl9nZXRfbnZtZW1fZXVpNDgoc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3QgY2hhciAqY2VsbF9uYW1lLCB1OCAqYWRkcilcXG4re1xcbitcXHRzdHJ1Y3QgbnZtZW1fY2VsbCAqY2VsbDtcXG4rXFx0Y29uc3Qgdm9pZCAqZXVpNDg7XFxuK1xcdHNpemVfdCBsZW47XFxuK1xcbitcXHRjZWxsID0gb2ZfbnZtZW1fY2VsbF9nZXQobnAsIGNlbGxfbmFtZSk7XFxuIFxcdGlmIChJU19FUlIoY2VsbCkpXFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKGNlbGwpO1xcbiBcXG4tXFx0bWFjID0gbnZtZW1fY2VsbF9yZWFkKGNlbGwsIFxcdTAwMjZsZW4pO1xcbitcXHRldWk0OCA9IG52bWVtX2NlbGxfcmVhZChjZWxsLCBcXHUwMDI2bGVuKTtcXG4gXFx0bnZtZW1fY2VsbF9wdXQoY2VsbCk7XFxuIFxcbi1cXHRpZiAoSVNfRVJSKG1hYykpXFxuLVxcdFxcdHJldHVybiBQVFJfRVJSKG1hYyk7XFxuK1xcdGlmIChJU19FUlIoZXVpNDgpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihldWk0OCk7XFxuIFxcbi1cXHRpZiAobGVuICE9IEVUSF9BTEVOIHx8ICFpc192YWxpZF9ldGhlcl9hZGRyKG1hYykpIHtcXG4tXFx0XFx0a2ZyZWUobWFjKTtcXG4rXFx0aWYgKGxlbiAhPSBFVEhfQUxFTiB8fCAhbWVtY2hyX2ludihldWk0OCwgMCwgRVRIX0FMRU4pKSB7XFxuK1xcdFxcdGtmcmVlKGV1aTQ4KTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuLVxcdG1lbWNweShhZGRyLCBtYWMsIEVUSF9BTEVOKTtcXG4tXFx0a2ZyZWUobWFjKTtcXG4rXFx0bWVtY3B5KGFkZHIsIGV1aTQ4LCBFVEhfQUxFTik7XFxuK1xcdGtmcmVlKGV1aTQ4KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuLUVYUE9SVF9TWU1CT0wob2ZfZ2V0X21hY19hZGRyZXNzX252bWVtKTtcXG4rRVhQT1JUX1NZTUJPTF9HUEwob2ZfZ2V0X252bWVtX2V1aTQ4KTtcXG4gXFxuIC8qKlxcbiAgKiBvZl9nZXRfbWFjX2FkZHJlc3MoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwOToyNjo1NS4xMzkzNDAzMTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NTM4NTk3Njk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19OVk1FTVwiLFxuICAgIFwiQlRfSENJVUFSVF9RQ0FcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibGtfbnZtZW1fcmVnX3JlYWRcIixcbiAgICBcImJsa19udm1lbV9hZGRcIixcbiAgICBcImhjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9udm1lbVwiLFxuICAgIFwib2ZfZ2V0X252bWVtX2V1aTQ4XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBibG9jayBkZXZpY2UgTlZNRU0gcHJvdmlkZXIgd2hpY2ggYWxsb3dzIGJsb2NrIGRldmljZXMgdG8gYWN0IGFzIE5WTUVNIHByb3ZpZGVycy4gSXQgYWxzbyBhZGRzIGxvZ2ljIHRvIHJlYWQgQmx1ZXRvb3RoIGRldmljZSBhZGRyZXNzZXMgYW5kIE1BQyBhZGRyZXNzZXMgZnJvbSBOVk1FTSBjZWxscy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgYmxvY2ssIG5ldCwgYW5kIGJsdWV0b290aCBzdWJzeXN0ZW1zIHRoYXQgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGUuZy4sIHdoZW4gYWRkaW5nIGEgYmxvY2sgZGV2aWNlIG9yIHNldHRpbmcgdXAgYSB2aXJ0dWFsIEhDSSBkZXZpY2Ugd2l0aCB0aGUgYXBwcm9wcmlhdGUgcXVpcmtzKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MzZmMGRlMjZlMjY1YTYyOGY3NjVkMDUyNDAzMTNlYzRlZjkyYmM3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjkgMDk6MjY6NTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tYy1jYXJkLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tYy1jYXJkLnlhbWxcbmluZGV4IGE2MWQ2Yzk2ZGY3NTkxLi5jYTkwN2FkNzMwOTU5MiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvbW1jLWNhcmQueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21tYy9tbWMtY2FyZC55YW1sXG5AQCAtNDAsNiArNDAsOSBAQCBwYXR0ZXJuUHJvcGVydGllczpcbiAgICAgICAgIGNvbnRhaW5zOlxuICAgICAgICAgICBjb25zdDogZml4ZWQtcGFydGl0aW9uc1xuIFxuKyAgICAgIG52bWVtLWxheW91dDpcbisgICAgICAgICRyZWY6IC9zY2hlbWFzL252bWVtL2xheW91dHMvbnZtZW0tbGF5b3V0LnlhbWxcbitcbiByZXF1aXJlZDpcbiAgIC0gY29tcGF0aWJsZVxuICAgLSByZWdcbkBAIC04Niw2ICs4OSwzMiBAQCBleGFtcGxlczpcbiAgICAgICAgICAgICAgICAgICAgIHJlYWQtb25seTtcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICB9O1xuK1xuKyAgICAgICAgICAgIHBhcnRpdGlvbnMtYm9vdDIge1xuKyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJmaXhlZC1wYXJ0aXRpb25zXCI7XG4rXG4rICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuK1xuKyAgICAgICAgICAgICAgICBudm1lbS1sYXlvdXQge1xuKyAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwiZml4ZWQtbGF5b3V0XCI7XG4rXG4rICAgICAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rXG4rICAgICAgICAgICAgICAgICAgICBtYWMtYWRkckA0NDAwIHtcbisgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJtYWMtYmFzZVwiO1xuKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzB4NDQwMCAweDZcdTAwM2U7XG4rICAgICAgICAgICAgICAgICAgICAgICAgI252bWVtLWNlbGwtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAgICAgfTtcbitcbisgICAgICAgICAgICAgICAgICAgIGJkLWFkZHJANTQwMCB7XG4rICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwibWFjLWJhc2VcIjtcbisgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MweDU0MDAgMHg2XHUwMDNlO1xuKyAgICAgICAgICAgICAgICAgICAgICAgICNudm1lbS1jZWxsLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICAgICAgICAgICAgIH07XG4rICAgICAgICAgICAgICAgIH07XG4rICAgICAgICAgICAgfTtcbiAgICAgICAgIH07XG4gICAgIH07XG4gXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9ibHVldG9vdGgvcWNvbSxibHVldG9vdGgtY29tbW9uLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2JsdWV0b290aC9xY29tLGJsdWV0b290aC1jb21tb24ueWFtbFxuaW5kZXggYzhlOWM1NWMxYWZiNGMuLjdjYjI4ZjMwYzlhZjAzIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9ibHVldG9vdGgvcWNvbSxibHVldG9vdGgtY29tbW9uLnlhbWxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYmx1ZXRvb3RoL3Fjb20sYmx1ZXRvb3RoLWNvbW1vbi55YW1sXG5AQCAtMjIsNCArMjIsMTMgQEAgcHJvcGVydGllczpcbiAgICAgZGVzY3JpcHRpb246XG4gICAgICAgYm9vdCBmaXJtd2FyZSBpcyBpbmNvcnJlY3RseSBwYXNzaW5nIHRoZSBhZGRyZXNzIGluIGJpZy1lbmRpYW4gb3JkZXJcbiBcbisgIG52bWVtLWNlbGxzOlxuKyAgICBtYXhJdGVtczogMVxuKyAgICBkZXNjcmlwdGlvbjpcbisgICAgICBOdm1lbSBkYXRhIGNlbGwgdGhhdCBjb250YWlucyBhIDYgYnl0ZSBCRCBhZGRyZXNzIHdpdGggdGhlIG1vc3RcbisgICAgICBzaWduaWZpY2FudCBieXRlIGZpcnN0IChiaWctZW5kaWFuKS5cbitcbisgIG52bWVtLWNlbGwtbmFtZXM6XG4rICAgIGNvbnN0OiBsb2NhbC1iZC1hZGRyZXNzXG4rXG4gYWRkaXRpb25hbFByb3BlcnRpZXM6IHRydWVcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL3Fjb20sYXRoMTBrLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL3Fjb20sYXRoMTBrLnlhbWxcbmluZGV4IGQ0ZjRkNzJlZTBkMzg4Li43ZjlkMTZjYjdjMTQzMyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3MvcWNvbSxhdGgxMGsueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9xY29tLGF0aDEway55YW1sXG5AQCAtOTIsNiArOTIsMjIgQEAgcHJvcGVydGllczpcbiBcbiAgIGllZWU4MDIxMS1mcmVxLWxpbWl0OiB0cnVlXG4gXG4rICBudm1lbS1jZWxsczpcbisgICAgbWluSXRlbXM6IDFcbisgICAgbWF4SXRlbXM6IDNcbisgICAgZGVzY3JpcHRpb246XG4rICAgICAgUmVmZXJlbmNlcyB0byBudm1lbSBjZWxscyBmb3IgTUFDIGFkZHJlc3MgYW5kL29yIGNhbGlicmF0aW9uIGRhdGEuXG4rICAgICAgU3VwcG9ydGVkIGNlbGwgbmFtZXMgYXJlIG1hYy1hZGRyZXNzLCBjYWxpYnJhdGlvbiwgYW5kIHByZS1jYWxpYnJhdGlvbi5cbitcbisgIG52bWVtLWNlbGwtbmFtZXM6XG4rICAgIG1pbkl0ZW1zOiAxXG4rICAgIG1heEl0ZW1zOiAzXG4rICAgIGl0ZW1zOlxuKyAgICAgIGVudW06XG4rICAgICAgICAtIG1hYy1hZGRyZXNzXG4rICAgICAgICAtIGNhbGlicmF0aW9uXG4rICAgICAgICAtIHByZS1jYWxpYnJhdGlvblxuK1xuICAgcWNvbSxjYWxpYnJhdGlvbi1kYXRhOlxuICAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy91aW50OC1hcnJheVxuICAgICBkZXNjcmlwdGlvbjpcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vcXJiMjIxMC1hcmR1aW5vLWltb2xhLmR0cyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9xcmIyMjEwLWFyZHVpbm8taW1vbGEuZHRzXG5pbmRleCBiZjA4OGZhOTgwN2YwNC4uMTI4YzdhN2U3NmI1YjAgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vcXJiMjIxMC1hcmR1aW5vLWltb2xhLmR0c1xuKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL3FyYjIyMTAtYXJkdWluby1pbW9sYS5kdHNcbkBAIC00MDksNyArNDA5LDQwIEBAIFx1MDAyNnNkaGNfMSB7XG4gXHRuby1zZGlvO1xuIFx0bm8tc2Q7XG4gXG4rXHQjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rXHQjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4gXHRzdGF0dXMgPSBcIm9rYXlcIjtcbitcbitcdGNhcmRAMCB7XG4rXHRcdGNvbXBhdGlibGUgPSBcIm1tYy1jYXJkXCI7XG4rXHRcdHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rXHRcdHBhcnRpdGlvbnMtYm9vdDEge1xuK1x0XHRcdGNvbXBhdGlibGUgPSBcImZpeGVkLXBhcnRpdGlvbnNcIjtcbitcbitcdFx0XHQjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rXHRcdFx0I3NpemUtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuK1xuK1x0XHRcdG52bWVtLWxheW91dCB7XG4rXHRcdFx0XHRjb21wYXRpYmxlID0gXCJmaXhlZC1sYXlvdXRcIjtcbitcdFx0XHRcdCNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbitcdFx0XHRcdCNzaXplLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbitcbitcdFx0XHRcdHdpZmlfbWFjX2FkZHI6IG1hYy1hZGRyQDQ0MDAge1xuK1x0XHRcdFx0XHRjb21wYXRpYmxlID0gXCJtYWMtYmFzZVwiO1xuK1x0XHRcdFx0XHRyZWcgPSBcdTAwM2MweDQ0MDAgMHg2XHUwMDNlO1xuK1x0XHRcdFx0XHQjbnZtZW0tY2VsbC1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rXHRcdFx0XHR9O1xuK1xuK1x0XHRcdFx0YmRfYWRkcjogYmQtYWRkckA1NDAwIHtcbitcdFx0XHRcdFx0Y29tcGF0aWJsZSA9IFwibWFjLWJhc2VcIjtcbitcdFx0XHRcdFx0cmVnID0gXHUwMDNjMHg1NDAwIDB4Nlx1MDAzZTtcbitcdFx0XHRcdFx0I252bWVtLWNlbGwtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuK1x0XHRcdFx0fTtcbitcdFx0XHR9O1xuK1x0XHR9O1xuK1x0fTtcbiB9O1xuIFxuIFx1MDAyNnNwaTUge1xuQEAgLTUxMiw2ICs1NDUsOSBAQCBibHVldG9vdGgge1xuIFx0XHR2ZGRjaDAtc3VwcGx5ID0gXHUwMDNjXHUwMDI2cG00MTI1X2wyMlx1MDAzZTtcbiBcdFx0ZW5hYmxlLWdwaW9zID0gXHUwMDNjXHUwMDI2dGxtbSA4NyBHUElPX0FDVElWRV9ISUdIXHUwMDNlO1xuIFx0XHRtYXgtc3BlZWQgPSBcdTAwM2MzMDAwMDAwXHUwMDNlO1xuK1xuK1x0XHRudm1lbS1jZWxscyA9IFx1MDAzY1x1MDAyNmJkX2FkZHIgMFx1MDAzZTtcbitcdFx0bnZtZW0tY2VsbC1uYW1lcyA9IFwibG9jYWwtYmQtYWRkcmVzc1wiO1xuIFx0fTtcbiB9O1xuIFxuQEAgLTU1Nyw2ICs1OTMsOSBAQCBcdTAwMjZ3aWZpIHtcbiBcdHFjb20sYXRoMTBrLWNhbGlicmF0aW9uLXZhcmlhbnQgPSBcIkFyZHVpbm9JbW9sYVwiO1xuIFx0ZmlybXdhcmUtbmFtZSA9IFwicWNtMjI5MFwiO1xuIFxuK1x0bnZtZW0tY2VsbHMgPSBcdTAwM2NcdTAwMjZ3aWZpX21hY19hZGRyIDBcdTAwM2U7XG4rXHRudm1lbS1jZWxsLW5hbWVzID0gXCJtYWMtYWRkcmVzc1wiO1xuK1xuIFx0c3RhdHVzID0gXCJva2F5XCI7XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9ibG9jay9LY29uZmlnIGIvYmxvY2svS2NvbmZpZ1xuaW5kZXggNzBlNGE2NmQ5NDFmZjYuLmFlYzVkOWZjMTNhM2QzIDEwMDY0NFxuLS0tIGEvYmxvY2svS2NvbmZpZ1xuKysrIGIvYmxvY2svS2NvbmZpZ1xuQEAgLTIwOSw2ICsyMDksMTUgQEAgY29uZmlnIEJMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDS1xuIFx0ICBieSBmYWxsaW5nIGJhY2sgdG8gdGhlIGtlcm5lbCBjcnlwdG8gQVBJIHdoZW4gaW5saW5lXG4gXHQgIGVuY3J5cHRpb24gaGFyZHdhcmUgaXMgbm90IHByZXNlbnQuXG4gXG4rY29uZmlnIEJMS19OVk1FTVxuK1x0Ym9vbCBcIkJsb2NrIGRldmljZSBOVk1FTSBwcm92aWRlclwiXG4rXHRkZXBlbmRzIG9uIE9GXG4rXHRkZXBlbmRzIG9uIE5WTUVNXG4rXHRoZWxwXG4rXHQgIEFsbG93IGJsb2NrIGRldmljZXMgKG9yIHBhcnRpdGlvbnMpIHRvIGFjdCBhcyBOVk1FTSBwcm92aWRlcnMsXG4rXHQgIHR5cGljYWxseSB1c2VkIHdpdGggZU1NQyB0byBzdG9yZSBNQUMgYWRkcmVzc2VzIG9yIFdpLUZpXG4rXHQgIGNhbGlicmF0aW9uIGRhdGEgb24gZW1iZWRkZWQgZGV2aWNlcy5cbitcbiBzb3VyY2UgXCJibG9jay9wYXJ0aXRpb25zL0tjb25maWdcIlxuIFxuIGNvbmZpZyBCTEtfUE1cbmRpZmYgLS1naXQgYS9ibG9jay9NYWtlZmlsZSBiL2Jsb2NrL01ha2VmaWxlXG5pbmRleCBlN2JkMzIwZTNkNjk3MS4uODIwMDI5N2ZiY2JhYjMgMTAwNjQ0XG4tLS0gYS9ibG9jay9NYWtlZmlsZVxuKysrIGIvYmxvY2svTWFrZWZpbGVcbkBAIC0zOSwzICszOSw0IEBAIG9iai0kKENPTkZJR19CTEtfSU5MSU5FX0VOQ1JZUFRJT04pXHQrPSBibGstY3J5cHRvLm8gYmxrLWNyeXB0by1wcm9maWxlLm8gXFxcbiBcdFx0XHRcdFx0ICAgYmxrLWNyeXB0by1zeXNmcy5vXG4gb2JqLSQoQ09ORklHX0JMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDSylcdCs9IGJsay1jcnlwdG8tZmFsbGJhY2sub1xuIG9iai0kKENPTkZJR19CTE9DS19IT0xERVJfREVQUkVDQVRFRClcdCs9IGhvbGRlci5vXG4rb2JqLSQoQ09ORklHX0JMS19OVk1FTSkgICAgICAgICAgICAgICAgKz0gYmxrLW52bWVtLm9cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstbnZtZW0uYyBiL2Jsb2NrL2Jsay1udm1lbS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjRiMzVhNzQyNTUwNTkzXG4tLS0gL2Rldi9udWxsXG4rKysgYi9ibG9jay9ibGstbnZtZW0uY1xuQEAgLTAsMCArMSwxMTEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuKy8qXG4rICogYmxvY2sgZGV2aWNlIE5WTUVNIHByb3ZpZGVyXG4rICpcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjQgRGFuaWVsIEdvbGxlIFx1MDAzY2RhbmllbEBtYWtyb3RvcGlhLm9yZ1x1MDAzZVxuKyAqIENvcHlyaWdodCAoYykgUXVhbGNvbW0gVGVjaG5vbG9naWVzLCBJbmMuIGFuZC9vciBpdHMgc3Vic2lkaWFyaWVzLlxuKyAqXG4rICogVXNlZnVsIG9uIGRldmljZXMgdXNpbmcgYSBwYXJ0aXRpb24gb24gYW4gZU1NQyBmb3IgTUFDIGFkZHJlc3NlcyBvclxuKyAqIFdpLUZpIGNhbGlicmF0aW9uIEVFUFJPTSBkYXRhLlxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L252bWVtLXByb3ZpZGVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9udm1lbS1jb25zdW1lci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImJsay5oXCJcbitcbitzdGF0aWMgaW50IGJsa19udm1lbV9yZWdfcmVhZCh2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgZnJvbSwgdm9pZCAqdmFsLCBzaXplX3QgYnl0ZXMpXG4re1xuK1x0ZGV2X3QgZGV2dCA9IChkZXZfdCkodWludHB0cl90KXByaXY7XG4rXHRzaXplX3QgYnl0ZXNfbGVmdCA9IGJ5dGVzO1xuK1x0bG9mZl90IHBvcyA9IGZyb207XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdHN0cnVjdCBmaWxlICpiZGV2X2ZpbGUgX19mcmVlKGZwdXQpID1cbitcdFx0YmRldl9maWxlX29wZW5fYnlfZGV2KGRldnQsIEJMS19PUEVOX1JFQUQsIE5VTEwsIE5VTEwpO1xuK1x0aWYgKElTX0VSUihiZGV2X2ZpbGUpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihiZGV2X2ZpbGUpO1xuK1xuK1x0d2hpbGUgKGJ5dGVzX2xlZnQpIHtcbitcdFx0cGdvZmZfdCBmX2luZGV4ID0gcG9zIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1x0XHRzaXplX3QgZm9saW9fb2ZmO1xuK1x0XHRzaXplX3QgdG9fcmVhZDtcbitcbitcdFx0Zm9saW8gPSByZWFkX21hcHBpbmdfZm9saW8oYmRldl9maWxlLVx1MDAzZWZfbWFwcGluZywgZl9pbmRleCwgTlVMTCk7XG4rXHRcdGlmIChJU19FUlIoZm9saW8pKSB7XG4rXHRcdFx0cmV0ID0gUFRSX0VSUihmb2xpbyk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcbitcdFx0Zm9saW9fb2ZmID0gb2Zmc2V0X2luX2ZvbGlvKGZvbGlvLCBwb3MpO1xuK1x0XHR0b19yZWFkID0gbWluKGJ5dGVzX2xlZnQsIGZvbGlvX3NpemUoZm9saW8pIC0gZm9saW9fb2ZmKTtcbitcdFx0bWVtY3B5X2Zyb21fZm9saW8odmFsLCBmb2xpbywgZm9saW9fb2ZmLCB0b19yZWFkKTtcbitcdFx0cG9zICs9IHRvX3JlYWQ7XG4rXHRcdGJ5dGVzX2xlZnQgLT0gdG9fcmVhZDtcbitcdFx0dmFsICs9IHRvX3JlYWQ7XG4rXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitpbnQgYmxrX252bWVtX2FkZChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmJkZXYtXHUwMDNlYmRfZGV2aWNlO1xuK1x0c3RydWN0IG52bWVtX2NvbmZpZyBjb25maWcgPSB7fTtcbitcbitcdC8qIHNraXAgZGV2aWNlcyB3aGljaCBkbyBub3QgaGF2ZSBhIGRldmljZSB0cmVlIG5vZGUgKi9cbitcdGlmICghZGV2X29mX25vZGUoZGV2KSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBza2lwIGRldmljZXMgd2l0aG91dCBhbiBudm1lbSBsYXlvdXQgZGVmaW5lZCAqL1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpjaGlsZCBfX2ZyZWUoZGV2aWNlX25vZGUpID1cbitcdFx0b2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2X29mX25vZGUoZGV2KSwgXCJudm1lbS1sYXlvdXRcIik7XG4rXHRpZiAoIWNoaWxkKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qXG4rXHQgKiBza2lwIGJsb2NrIGRldmljZSB0b28gbGFyZ2UgdG8gYmUgcmVwcmVzZW50ZWQgYXMgTlZNRU0gZGV2aWNlcyxcbitcdCAqIG52bWVtX2NvbmZpZy5zaXplIGlzIGEgc2lnbmVkIGludFxuK1x0ICovXG4rXHRpZiAoYmRldl9ucl9ieXRlcyhiZGV2KSBcdTAwM2UgSU5UX01BWCkge1xuK1x0XHRkZXZfd2FybihkZXYsIFwiYmxvY2sgZGV2aWNlIHRvbyBsYXJnZSB0byBiZSBhbiBOVk1FTSBwcm92aWRlclxcblwiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRjb25maWcuaWQgPSBOVk1FTV9ERVZJRF9OT05FO1xuK1x0Y29uZmlnLmRldiA9IGRldjtcbitcdGNvbmZpZy5uYW1lID0gZGV2X25hbWUoZGV2KTtcbitcdGNvbmZpZy5vd25lciA9IFRISVNfTU9EVUxFO1xuK1x0Y29uZmlnLnByaXYgPSAodm9pZCAqKSh1aW50cHRyX3QpZGV2LVx1MDAzZWRldnQ7XG4rXHRjb25maWcucmVnX3JlYWQgPSBibGtfbnZtZW1fcmVnX3JlYWQ7XG4rXHRjb25maWcuc2l6ZSA9IGJkZXZfbnJfYnl0ZXMoYmRldik7XG4rXHRjb25maWcud29yZF9zaXplID0gMTtcbitcdGNvbmZpZy5zdHJpZGUgPSAxO1xuK1x0Y29uZmlnLnJlYWRfb25seSA9IHRydWU7XG4rXHRjb25maWcucm9vdF9vbmx5ID0gdHJ1ZTtcbitcdGNvbmZpZy5pZ25vcmVfd3AgPSB0cnVlO1xuK1x0Y29uZmlnLm9mX25vZGUgPSB0b19vZl9ub2RlKGRldi1cdTAwM2Vmd25vZGUpO1xuK1xuK1x0YmRldi1cdTAwM2ViZF9udm1lbSA9IG52bWVtX3JlZ2lzdGVyKFx1MDAyNmNvbmZpZyk7XG4rXHRpZiAoSVNfRVJSKGJkZXYtXHUwMDNlYmRfbnZtZW0pKSB7XG4rXHRcdGludCByZXQgPSBQVFJfRVJSKGJkZXYtXHUwMDNlYmRfbnZtZW0pO1xuK1xuK1x0XHRiZGV2LVx1MDAzZWJkX252bWVtID0gTlVMTDtcbitcdFx0ZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgXCJGYWlsZWQgdG8gcmVnaXN0ZXIgTlZNRU0gZGV2aWNlXFxuXCIpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3ZvaWQgYmxrX252bWVtX2RlbChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuK3tcbitcdG52bWVtX3VucmVnaXN0ZXIoYmRldi1cdTAwM2ViZF9udm1lbSk7XG4rXHRiZGV2LVx1MDAzZWJkX252bWVtID0gTlVMTDtcbit9XG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLmggYi9ibG9jay9ibGsuaFxuaW5kZXggMjVhZjhhYzVlZjBmNzcuLmRhZDhmMGQ3YTIxOGVkIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLmhcbisrKyBiL2Jsb2NrL2Jsay5oXG5AQCAtODEwLDQgKzgxMCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYmxrX2RlYnVnZnNfdW5sb2NrKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuIFx0bWVtYWxsb2Nfbm9pb19yZXN0b3JlKG1lbWZsYWdzKTtcbiB9XG4gXG4rI2lmZGVmIENPTkZJR19CTEtfTlZNRU1cbitpbnQgYmxrX252bWVtX2FkZChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTtcbit2b2lkIGJsa19udm1lbV9kZWwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldik7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGludCBibGtfbnZtZW1fYWRkKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpIHsgcmV0dXJuIDA7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgYmxrX252bWVtX2RlbChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KSB7fVxuKyNlbmRpZlxuK1xuICNlbmRpZiAvKiBCTEtfSU5URVJOQUxfSCAqL1xuZGlmZiAtLWdpdCBhL2Jsb2NrL2dlbmhkLmMgYi9ibG9jay9nZW5oZC5jXG5pbmRleCBmODRiNmEzNTViNTc0YS4uMGM5YzVlNWVhN2JhZmYgMTAwNjQ0XG4tLS0gYS9ibG9jay9nZW5oZC5jXG4rKysgYi9ibG9jay9nZW5oZC5jXG5AQCAtNDIxLDYgKzQyMSw4IEBAIHN0YXRpYyB2b2lkIGFkZF9kaXNrX2ZpbmFsKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIFx0XHQgKi9cbiBcdFx0ZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoZGRldiwgMCk7XG4gXHRcdGRpc2tfdWV2ZW50KGRpc2ssIEtPQkpfQUREKTtcbitcbitcdFx0YmxrX252bWVtX2FkZChkaXNrLVx1MDAzZXBhcnQwKTtcbiBcdH1cbiBcbiBcdGJsa19hcHBseV9iZGlfbGltaXRzKGRpc2stXHUwMDNlYmRpLCBcdTAwMjZkaXNrLVx1MDAzZXF1ZXVlLVx1MDAzZWxpbWl0cyk7XG5AQCAtNzA0LDYgKzcwNiw4IEBAIHN0YXRpYyB2b2lkIF9fZGVsX2dlbmRpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXG4gXHRkaXNrX2RlbF9ldmVudHMoZGlzayk7XG4gXG4rXHRibGtfbnZtZW1fZGVsKGRpc2stXHUwMDNlcGFydDApO1xuK1xuIFx0LypcbiBcdCAqIFByZXZlbnQgbmV3IG9wZW5lcnMgYnkgdW5saW5rZWQgdGhlIGJkZXYgaW5vZGUuXG4gXHQgKi9cbmRpZmYgLS1naXQgYS9ibG9jay9wYXJ0aXRpb25zL29mLmMgYi9ibG9jay9wYXJ0aXRpb25zL29mLmNcbmluZGV4IDUzNjY0ZWEwNmI2NTQwLi42MGFhM2Q2OTA2Y2ExZCAxMDA2NDRcbi0tLSBhL2Jsb2NrL3BhcnRpdGlvbnMvb2YuY1xuKysrIGIvYmxvY2svcGFydGl0aW9ucy9vZi5jXG5AQCAtMTUsNiArMTUsMTAgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9vZl9wYXJ0aXRpb24oc3RydWN0IGRldmljZV9ub2RlICpucCwgaW50IHNsb3QpXG4gXHRpbnQgYV9jZWxscyA9IG9mX25fYWRkcl9jZWxscyhucCk7XG4gXHRpbnQgc19jZWxscyA9IG9mX25fc2l6ZV9jZWxscyhucCk7XG4gXG4rXHQvKiBTa2lwIG5vZGVzIHdpdGhvdXQgYSByZWcgcHJvcGVydHkgKGUuZy4gbnZtZW0tbGF5b3V0KSAqL1xuK1x0aWYgKCFyZWcpXG4rXHRcdHJldHVybiAxO1xuK1xuIFx0LyogTWFrZSBzdXJlIHJlZyBsZW4gbWF0Y2ggdGhlIGV4cGVjdGVkIGFkZHIgYW5kIHNpemUgY2VsbHMgKi9cbiBcdGlmIChsZW4gLyBzaXplb2YoKnJlZykgIT0gYV9jZWxscyArIHNfY2VsbHMpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTgyLDE0ICs4NiwxNSBAQCBpbnQgb2ZfcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUpXG4gXHRzbG90ID0gMTtcbiBcdC8qIFZhbGlkYXRlIHBhcml0aW9uIG9mZnNldCBhbmQgc2l6ZSAqL1xuIFx0Zm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShwYXJ0aXRpb25zX25wLCBucCkge1xuLVx0XHRpZiAodmFsaWRhdGVfb2ZfcGFydGl0aW9uKG5wLCBzbG90KSkge1xuK1x0XHRpbnQgZXJyID0gdmFsaWRhdGVfb2ZfcGFydGl0aW9uKG5wLCBzbG90KTtcbitcbitcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRcdG9mX25vZGVfcHV0KG5wKTtcbiBcdFx0XHRvZl9ub2RlX3B1dChwYXJ0aXRpb25zX25wKTtcbi1cbiBcdFx0XHRyZXR1cm4gLTE7XG4gXHRcdH1cbi1cbi1cdFx0c2xvdCsrO1xuK1x0XHRpZiAoIWVycilcbitcdFx0XHRzbG90Kys7XG4gXHR9XG4gXG4gXHRzbG90ID0gMTtcbkBAIC05OSw5ICsxMDQsMTAgQEAgaW50IG9mX3BhcnRpdGlvbihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4tXHRcdGFkZF9vZl9wYXJ0aXRpb24oc3RhdGUsIHNsb3QsIG5wKTtcbi1cbi1cdFx0c2xvdCsrO1xuK1x0XHRpZiAob2ZfcHJvcGVydHlfcHJlc2VudChucCwgXCJyZWdcIikpIHtcbitcdFx0XHRhZGRfb2ZfcGFydGl0aW9uKHN0YXRlLCBzbG90LCBucCk7XG4rXHRcdFx0c2xvdCsrO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRzZXFfYnVmX3B1dHMoXHUwMDI2c3RhdGUtXHUwMDNlcHBfYnVmLCBcIlxcblwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuY1xuaW5kZXggMDRlYmUyOTBiYzc4NGUuLjA2Y2I3ODdiMDU1OWYzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuY1xuKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuY1xuQEAgLTcyMyw4ICs3MjMsMTEgQEAgc3RhdGljIGludCBxY2FfY2hlY2tfYmRhZGRyKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBjb25zdCBzdHJ1Y3QgcWNhX2Z3X2NvbmZpZyAqY29cbiBcdH1cbiBcbiBcdGJkYSA9IChzdHJ1Y3QgaGNpX3JwX3JlYWRfYmRfYWRkciAqKXNrYi1cdTAwM2VkYXRhO1xuLVx0aWYgKCFiYWNtcChcdTAwMjZiZGEtXHUwMDNlYmRhZGRyLCBcdTAwMjZjb25maWctXHUwMDNlYmRhZGRyKSlcbitcdGlmICghYmFjbXAoXHUwMDI2YmRhLVx1MDAzZWJkYWRkciwgXHUwMDI2Y29uZmlnLVx1MDAzZWJkYWRkcikpIHtcbiBcdFx0aGNpX3NldF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfVVNFX0JEQUREUl9QUk9QRVJUWSk7XG4rXHRcdGhjaV9zZXRfcXVpcmsoaGRldiwgSENJX1FVSVJLX1VTRV9CREFERFJfTlZNRU0pO1xuK1x0XHRoY2lfc2V0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19CREFERFJfTlZNRU1fQkUpO1xuK1x0fVxuIFxuIFx0a2ZyZWVfc2tiKHNrYik7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbmluZGV4IDg4MDhlZTc2ZTczYzA5Li5hY2U2ZjU5Yjg2MGQwOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbkBAIC03Myw2ICs3Myw5IEBAIHN0cnVjdCBibG9ja19kZXZpY2Uge1xuIFx0aW50XHRcdFx0YmRfd3JpdGVycztcbiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZXG4gXHR2b2lkXHRcdFx0KmJkX3NlY3VyaXR5O1xuKyNlbmRpZlxuKyNpZmRlZiBDT05GSUdfQkxLX05WTUVNXG4rXHRzdHJ1Y3QgbnZtZW1fZGV2aWNlXHQqYmRfbnZtZW07XG4gI2VuZGlmXG4gXHQvKlxuIFx0ICoga2VlcCB0aGlzIG91dC1vZi1saW5lIGFzIGl0J3MgYm90aCBiaWcgYW5kIG5vdCBuZWVkZWQgaW4gdGhlIGZhc3RcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuaW5kZXggOTIxM2E1NzE2Zjk1YTcuLjVhNzRiZDVmYmE5ODQwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuQEAgLTMwLDYgKzMwLDcgQEBcbiBcbiBzdHJ1Y3QgbW9kdWxlO1xuIHN0cnVjdCByZXF1ZXN0X3F1ZXVlO1xuK3N0cnVjdCBudm1lbV9kZXZpY2U7XG4gc3RydWN0IGVsZXZhdG9yX3F1ZXVlO1xuIHN0cnVjdCBibGtfdHJhY2U7XG4gc3RydWN0IHJlcXVlc3Q7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vZl9uZXQuaCBiL2luY2x1ZGUvbGludXgvb2ZfbmV0LmhcbmluZGV4IGQ4ODcxNWEwYjNhNTJmLi43ODU0YmE1NTVkOWE1NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvb2ZfbmV0LmhcbisrKyBiL2luY2x1ZGUvbGludXgvb2ZfbmV0LmhcbkBAIC0xNSw2ICsxNSw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlO1xuIGV4dGVybiBpbnQgb2ZfZ2V0X3BoeV9tb2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHBoeV9pbnRlcmZhY2VfdCAqaW50ZXJmYWNlKTtcbiBleHRlcm4gaW50IG9mX2dldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCB1OCAqbWFjKTtcbiBleHRlcm4gaW50IG9mX2dldF9tYWNfYWRkcmVzc19udm1lbShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCB1OCAqbWFjKTtcbitpbnQgb2ZfZ2V0X252bWVtX2V1aTQ4KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGNvbnN0IGNoYXIgKmNlbGxfbmFtZSwgdTggKmFkZHIpO1xuIGludCBvZl9nZXRfZXRoZGV2X2FkZHJlc3Moc3RydWN0IGRldmljZV9ub2RlICpucCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICpvZl9maW5kX25ldF9kZXZpY2VfYnlfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTtcbiAjZWxzZVxuQEAgLTM0LDYgKzM1LDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IG9mX2dldF9tYWNfYWRkcmVzc19udm1lbShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCB1OCAqbWFjKVxuIFx0cmV0dXJuIC1FTk9ERVY7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgaW50IG9mX2dldF9udm1lbV9ldWk0OChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuK1x0XHRcdFx0ICAgICAgY29uc3QgY2hhciAqY2VsbF9uYW1lLCB1OCAqYWRkcilcbit7XG4rXHRyZXR1cm4gLUVOT0RFVjtcbit9XG4rXG4gc3RhdGljIGlubGluZSBpbnQgb2ZfZ2V0X2V0aGRldl9hZGRyZXNzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0cmV0dXJuIC1FTk9ERVY7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oXG5pbmRleCAzODE4NmEyNDVmMTRkYi4uMTQ1YWI5NGU1MTQ4MmYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmhcbisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaFxuQEAgLTE2MSw2ICsxNjEsMjQgQEAgZW51bSB7XG4gXHQgKi9cbiBcdEhDSV9RVUlSS19CREFERFJfUFJPUEVSVFlfQlJPS0VOLFxuIFxuK1x0LyogV2hlbiB0aGlzIHF1aXJrIGlzIHNldCwgdGhlIHB1YmxpYyBCbHVldG9vdGggYWRkcmVzc1xuK1x0ICogaW5pdGlhbGx5IHJlcG9ydGVkIGJ5IEhDSSBSZWFkIEJEIEFkZHJlc3MgY29tbWFuZFxuK1x0ICogaXMgY29uc2lkZXJlZCBpbnZhbGlkLiBUaGUgcHVibGljIEJEIEFkZHJlc3MgY2FuIGJlXG4rXHQgKiByZXRyaWV2ZWQgdmlhIGEgJ2xvY2FsLWJkLWFkZHJlc3MnIE5WTUVNIGNlbGwuXG4rXHQgKlxuK1x0ICogVGhpcyBxdWlyayBjYW4gYmUgc2V0IGJlZm9yZSBoY2lfcmVnaXN0ZXJfZGV2IGlzIGNhbGxlZCBvclxuK1x0ICogZHVyaW5nIHRoZSBoZGV2LVx1MDAzZXNldHVwIHZlbmRvciBjYWxsYmFjay5cbitcdCAqL1xuK1x0SENJX1FVSVJLX1VTRV9CREFERFJfTlZNRU0sXG4rXG4rXHQvKiBXaGVuIHRoaXMgcXVpcmsgaXMgc2V0LCB0aGUgQmx1ZXRvb3RoIERldmljZSBBZGRyZXNzIHByb3ZpZGVkIGJ5XG4rXHQgKiB0aGUgJ2xvY2FsLWJkLWFkZHJlc3MnIE5WTUVNIGlzIHN0b3JlZCBpbiBiaWctZW5kaWFuIG9yZGVyLlxuK1x0ICpcbitcdCAqIFRoaXMgcXVpcmsgY2FuIGJlIHNldCBiZWZvcmUgaGNpX3JlZ2lzdGVyX2RldiBpcyBjYWxsZWQgb3JcbitcdCAqIGR1cmluZyB0aGUgaGRldi1cdTAwM2VzZXR1cCB2ZW5kb3IgY2FsbGJhY2suXG4rXHQgKi9cbitcdEhDSV9RVUlSS19CREFERFJfTlZNRU1fQkUsXG4rXG4gXHQvKiBXaGVuIHRoaXMgcXVpcmsgaXMgc2V0LCB0aGUgZHVwbGljYXRlIGZpbHRlcmluZyBkdXJpbmdcbiBcdCAqIHNjYW5uaW5nIGlzIGJhc2VkIG9uIEJsdWV0b290aCBkZXZpY2VzIGFkZHJlc3Nlcy4gVG8gYWxsb3dcbiBcdCAqIFJTU0kgYmFzZWQgdXBkYXRlcywgcmVzdGFydCBzY2FubmluZyBpZiBuZWVkZWQuXG5kaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfc3luYy5jIGIvbmV0L2JsdWV0b290aC9oY2lfc3luYy5jXG5pbmRleCAzYmU4YzM1ODFjNmNhYS4uNzM0ZWVkMjBkZTA0NGIgMTAwNjQ0XG4tLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmNcbisrKyBiL25ldC9ibHVldG9vdGgvaGNpX3N5bmMuY1xuQEAgLTcsNiArNyw3IEBAXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX25ldC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2JsdWV0b290aC9ibHVldG9vdGguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaFx1MDAzZVxuQEAgLTM1OTMsNiArMzU5NCwzNyBAQCBpbnQgaGNpX3Bvd2VyZWRfdXBkYXRlX3N5bmMoc3RydWN0IGhjaV9kZXYgKmhkZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyoqXG4rICogaGNpX2Rldl9nZXRfYmRfYWRkcl9mcm9tX252bWVtIC0gR2V0IHRoZSBCbHVldG9vdGggRGV2aWNlIEFkZHJlc3NcbisgKlx0XHRcdFx0ICAgIChCRF9BRERSKSBmb3IgYSBIQ0kgZGV2aWNlIGZyb21cbisgKlx0XHRcdFx0ICAgIGFuIE5WTUVNIGNlbGwuXG4rICogQGhkZXY6XHRUaGUgSENJIGRldmljZVxuKyAqXG4rICogU2VhcmNoIGZvciAnbG9jYWwtYmQtYWRkcmVzcycgTlZNRU0gY2VsbCBpbiB0aGUgZGV2aWNlIGZpcm13YXJlIG5vZGUuXG4rICpcbisgKiBBbGwtemVybyBCRCBhZGRyZXNzZXMgYXJlIHJlamVjdGVkICh1bnByb3Zpc2lvbmVkKS5cbisgKi9cbitzdGF0aWMgaW50IGhjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9udm1lbShzdHJ1Y3QgaGNpX2RldiAqaGRldilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2X29mX25vZGUoaGRldi1cdTAwM2VkZXYucGFyZW50KTtcbitcdHU4IGJhW3NpemVvZihiZGFkZHJfdCldO1xuK1x0aW50IGVycjtcbitcbitcdGlmICghbnApXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0ZXJyID0gb2ZfZ2V0X252bWVtX2V1aTQ4KG5wLCBcImxvY2FsLWJkLWFkZHJlc3NcIiwgYmEpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGlmIChoY2lfdGVzdF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfQkRBRERSX05WTUVNX0JFKSlcbitcdFx0YmFzd2FwKFx1MDAyNmhkZXYtXHUwMDNlcHVibGljX2FkZHIsIChiZGFkZHJfdCAqKWJhKTtcbitcdGVsc2VcbitcdFx0YmFjcHkoXHUwMDI2aGRldi1cdTAwM2VwdWJsaWNfYWRkciwgKGJkYWRkcl90ICopYmEpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qKlxuICAqIGhjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9wcm9wZXJ0eSAtIEdldCB0aGUgQmx1ZXRvb3RoIERldmljZSBBZGRyZXNzXG4gICpcdFx0XHRcdCAgICAgICAoQkRfQUREUikgZm9yIGEgSENJIGRldmljZSBmcm9tXG5AQCAtNTA3MiwxMiArNTEwNCwxNyBAQCBzdGF0aWMgaW50IGhjaV9kZXZfc2V0dXBfc3luYyhzdHJ1Y3QgaGNpX2RldiAqaGRldilcbiBcdCAqIGl0cyBzZXR1cCBjYWxsYmFjay5cbiBcdCAqL1xuIFx0aW52YWxpZF9iZGFkZHIgPSBoY2lfdGVzdF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfSU5WQUxJRF9CREFERFIpIHx8XG4tXHRcdFx0IGhjaV90ZXN0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19VU0VfQkRBRERSX1BST1BFUlRZKTtcbitcdFx0XHQgaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX1VTRV9CREFERFJfUFJPUEVSVFkpIHx8XG4rXHRcdFx0IGhjaV90ZXN0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19VU0VfQkRBRERSX05WTUVNKTtcbiBcdGlmICghcmV0KSB7XG4gXHRcdGlmIChoY2lfdGVzdF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfVVNFX0JEQUREUl9QUk9QRVJUWSkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhYmFjbXAoXHUwMDI2aGRldi1cdTAwM2VwdWJsaWNfYWRkciwgQkRBRERSX0FOWSkpXG4gXHRcdFx0aGNpX2Rldl9nZXRfYmRfYWRkcl9mcm9tX3Byb3BlcnR5KGhkZXYpO1xuIFxuK1x0XHRpZiAoaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX1VTRV9CREFERFJfTlZNRU0pIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIWJhY21wKFx1MDAyNmhkZXYtXHUwMDNlcHVibGljX2FkZHIsIEJEQUREUl9BTlkpKVxuK1x0XHRcdGhjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9udm1lbShoZGV2KTtcbitcbiBcdFx0aWYgKGludmFsaWRfYmRhZGRyIFx1MDAyNlx1MDAyNiBiYWNtcChcdTAwMjZoZGV2LVx1MDAzZXB1YmxpY19hZGRyLCBCREFERFJfQU5ZKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGhkZXYtXHUwMDNlc2V0X2JkYWRkcikge1xuIFx0XHRcdHJldCA9IGhkZXYtXHUwMDNlc2V0X2JkYWRkcihoZGV2LCBcdTAwMjZoZGV2LVx1MDAzZXB1YmxpY19hZGRyKTtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9vZl9uZXQuYyBiL25ldC9jb3JlL29mX25ldC5jXG5pbmRleCA5M2VhNDI1YjkyNDhhMi4uMTFjMWFjY2ExNTEyNjYgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9vZl9uZXQuY1xuKysrIGIvbmV0L2NvcmUvb2ZfbmV0LmNcbkBAIC02MSw5ICs2MSw3IEBAIHN0YXRpYyBpbnQgb2ZfZ2V0X21hY19hZGRyKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGNvbnN0IGNoYXIgKm5hbWUsIHU4ICphZGRyKVxuIGludCBvZl9nZXRfbWFjX2FkZHJlc3NfbnZtZW0oc3RydWN0IGRldmljZV9ub2RlICpucCwgdTggKmFkZHIpXG4ge1xuIFx0c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUobnApO1xuLVx0c3RydWN0IG52bWVtX2NlbGwgKmNlbGw7XG4tXHRjb25zdCB2b2lkICptYWM7XG4tXHRzaXplX3QgbGVuO1xuK1x0dTggbWFjW0VUSF9BTEVOXSBfX2FsaWduZWQoc2l6ZW9mKHUxNikpO1xuIFx0aW50IHJldDtcbiBcbiBcdC8qIFRyeSBsb29rdXAgYnkgZGV2aWNlIGZpcnN0LCB0aGVyZSBtaWdodCBiZSBhIG52bWVtX2NlbGxfbG9va3VwXG5AQCAtNzUsMjcgKzczLDU0IEBAIGludCBvZl9nZXRfbWFjX2FkZHJlc3NfbnZtZW0oc3RydWN0IGRldmljZV9ub2RlICpucCwgdTggKmFkZHIpXG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4tXHRjZWxsID0gb2ZfbnZtZW1fY2VsbF9nZXQobnAsIFwibWFjLWFkZHJlc3NcIik7XG4rXHRyZXQgPSBvZl9nZXRfbnZtZW1fZXVpNDgobnAsIFwibWFjLWFkZHJlc3NcIiwgbWFjKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobWFjKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRldGhlcl9hZGRyX2NvcHkoYWRkciwgbWFjKTtcbitcdHJldHVybiAwO1xuK31cbitFWFBPUlRfU1lNQk9MKG9mX2dldF9tYWNfYWRkcmVzc19udm1lbSk7XG4rXG4rLyoqXG4rICogb2ZfZ2V0X252bWVtX2V1aTQ4IC0gUmVhZCBhIDYtYnl0ZSBFVUktNDggYWRkcmVzcyBmcm9tIGEgbmFtZWQgTlZNRU0gY2VsbC5cbisgKiBAbnA6XHRcdERldmljZSBub2RlIHRvIGxvb2sgdXAgdGhlIE5WTUVNIGNlbGwgZnJvbS5cbisgKiBAY2VsbF9uYW1lOlx0TmFtZSBvZiB0aGUgTlZNRU0gY2VsbCAoZS5nLiBcIm1hYy1hZGRyZXNzXCIsIFwibG9jYWwtYmQtYWRkcmVzc1wiKS5cbisgKiBAYWRkcjpcdE91dHB1dCBidWZmZXIgZm9yIHRoZSA2LWJ5dGUgYWRkcmVzcy5cbisgKlxuKyAqIFJlYWRzIHRoZSBuYW1lZCBOVk1FTSBjZWxsIGFuZCB2YWxpZGF0ZXMgdGhhdCBpdCBjb250YWlucyBhIG5vbi16ZXJvIDYtYnl0ZVxuKyAqIGFkZHJlc3MuIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxuKyAqL1xuK2ludCBvZl9nZXRfbnZtZW1fZXVpNDgoc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3QgY2hhciAqY2VsbF9uYW1lLCB1OCAqYWRkcilcbit7XG4rXHRzdHJ1Y3QgbnZtZW1fY2VsbCAqY2VsbDtcbitcdGNvbnN0IHZvaWQgKmV1aTQ4O1xuK1x0c2l6ZV90IGxlbjtcbitcbitcdGNlbGwgPSBvZl9udm1lbV9jZWxsX2dldChucCwgY2VsbF9uYW1lKTtcbiBcdGlmIChJU19FUlIoY2VsbCkpXG4gXHRcdHJldHVybiBQVFJfRVJSKGNlbGwpO1xuIFxuLVx0bWFjID0gbnZtZW1fY2VsbF9yZWFkKGNlbGwsIFx1MDAyNmxlbik7XG4rXHRldWk0OCA9IG52bWVtX2NlbGxfcmVhZChjZWxsLCBcdTAwMjZsZW4pO1xuIFx0bnZtZW1fY2VsbF9wdXQoY2VsbCk7XG4gXG4tXHRpZiAoSVNfRVJSKG1hYykpXG4tXHRcdHJldHVybiBQVFJfRVJSKG1hYyk7XG4rXHRpZiAoSVNfRVJSKGV1aTQ4KSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoZXVpNDgpO1xuIFxuLVx0aWYgKGxlbiAhPSBFVEhfQUxFTiB8fCAhaXNfdmFsaWRfZXRoZXJfYWRkcihtYWMpKSB7XG4tXHRcdGtmcmVlKG1hYyk7XG4rXHRpZiAobGVuICE9IEVUSF9BTEVOIHx8ICFtZW1jaHJfaW52KGV1aTQ4LCAwLCBFVEhfQUxFTikpIHtcbitcdFx0a2ZyZWUoZXVpNDgpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdG1lbWNweShhZGRyLCBtYWMsIEVUSF9BTEVOKTtcbi1cdGtmcmVlKG1hYyk7XG4rXHRtZW1jcHkoYWRkciwgZXVpNDgsIEVUSF9BTEVOKTtcbitcdGtmcmVlKGV1aTQ4KTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbi1FWFBPUlRfU1lNQk9MKG9mX2dldF9tYWNfYWRkcmVzc19udm1lbSk7XG4rRVhQT1JUX1NZTUJPTF9HUEwob2ZfZ2V0X252bWVtX2V1aTQ4KTtcbiBcbiAvKipcbiAgKiBvZl9nZXRfbWFjX2FkZHJlc3MoKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6MjY6NTUuMTM5MzQ1ODkxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE1Njc2MjQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoIGFuZCBGdXp6YWJpbGl0eSBvZiB0aGUgQkxLX05WTUVNIFBhdGNoKipcblxuT2theSwgc28gd2UgaGF2ZSB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBhIGBCTEtfTlZNRU1gIGJsb2NrIGRldmljZSBOVk1FTSBwcm92aWRlci4gRXNzZW50aWFsbHksIHRoaXMgbWVhbnMgd2UgY2FuIHRyZWF0IGJsb2NrIGRldmljZXMgKG9yIHBhcnRpdGlvbnMpIGFzIE5WTUVNIHByb3ZpZGVycy4gVGhlIHBhdGNoIHRvdWNoZXMgYSBmZXcga2V5IGFyZWFzLCB3aGljaCBpcyBnb29kIHRvIHNlZSBmcm9tIGEgY292ZXJhZ2UgcGVyc3BlY3RpdmUuIEknbSBub3RpbmcgY2hhbmdlcyBpbiBgYmxvY2svZ2VuaGQuY2AgKHNwZWNpZmljYWxseSBjYWxscyB0byBgYmxrX252bWVtX2FkZGAgYW5kIGBibGtfbnZtZW1fZGVsYCksIGBibG9jay9wYXJ0aXRpb25zL29mLmNgIChza2lwcGluZyBub2RlcyB3aXRob3V0IHRoZSBgcmVnYCBwcm9wZXJ0eSksIGFuZCBldmVuIHNvbWUgQmx1ZXRvb3RoIGFuZCBuZXR3b3JraW5nIGNvZGUgKGBkcml2ZXJzL2JsdWV0b290aC9idHFjYS5jYCwgYG5ldC9ibHVldG9vdGgvaGNpX3N5bmMuY2AsIGFuZCBgbmV0L2NvcmUvb2ZfbmV0LmNgKS4gSXQgc2VlbXMgcXVpdGUgcGVydmFzaXZlOyBpdCdzIHVzaW5nIHRoZSBjb25jZXB0IG9mIGJsb2NrIGRldmljZXMgYXMgTlZSQU0gc3RvcmFnZSBhY3Jvc3MgYSBudW1iZXIgb2YgZHJpdmVycy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpdHMgcmVhY2hhYmlsaXR5IGFuZCBwb3RlbnRpYWwgZm9yIGZ1enppbmcuIFRoZSBrZXkgY2hhbmdlcyBpbiB0aGUgYmxvY2sgbGF5ZXIsIGVzcGVjaWFsbHkgaW4gYGJsb2NrL2Jsay1udm1lbS5jYCBhbmQgYGJsb2NrL2dlbmhkLmNgLCBhcmUgd2hhdCBJJ20gZm9jdXNlZCBvbiBmaXJzdC4gSSBrbm93IHRoYXQgYGJsa19udm1lbV9hZGRgIGdldHMgY2FsbGVkIGZvciBldmVyeSBkaXNrIGFkZGVkIHZpYSBgYWRkX2Rpc2tfZmluYWxgLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgVk0gc2V0dXAuIExvb3AgZGV2aWNlcywgb3IgYW55IG90aGVyIGJsb2NrIGRldmljZSB0aGF0IGdldHMgYWRkZWQsIHNob3VsZCB0cmlnZ2VyIHRoaXMuIFRoZSBjcml0aWNhbCBmdW5jdGlvbiBoZXJlIGFwcGVhcnMgdG8gYmUgYGJsa19udm1lbV9yZWdfcmVhZGAsIHdoaWNoIHVzZXMgYHJlYWRfbWFwcGluZ19mb2xpb2AgdG8gYWN0dWFsbHkgcmVhZCBkYXRhIGZyb20gdGhlIGJsb2NrIGRldmljZS4gVGhpcyByZWFkcyBkaXJlY3RseSBmcm9tIGEgbWFwcGluZy5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uLiBJIGNhbiBzZWUgdGhhdCBgQ09ORklHX0JMS19OVk1FTWAgaXMgZGVmaW5lZCBpbiBgYmxvY2svS2NvbmZpZ2AsIGFuZCBpdCBkZXBlbmRzIG9uIGJvdGggYE9GYCBhbmQgYE5WTUVNYC4gVGhpcyBzaG91bGQgbWFrZSBlbmFibGluZyBpdCByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBpbiBgYmxvY2svYmxrLW52bWVtLmNgLCBgbmV0L2NvcmUvb2ZfbmV0LmNgLCBhbmQgYG5ldC9ibHVldG9vdGgvaGNpX3N5bmMuY2AgdG8gc2VlIHRoZSBwb2ludHMgdGhhdCB3b3VsZCBiZSBleHBvc2VkIHRvIGEgZnV6emVyOiBgYmxrX252bWVtX3JlZ19yZWFkYCwgYGJsa19udm1lbV9hZGRgLCBgYmxrX252bWVtX2RlbGAsIGBvZl9nZXRfbnZtZW1fZXVpNDhgLCBhbmQgYGhjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9udm1lbWAuXG5cbk9rYXksIHNvIGBDT05GSUdfQkxLX05WTUVNYCBzZWVtcyBsaWtlIGEgdmlhYmxlIHRhcmdldC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGBDT05GSUdfQlRfSENJVUFSVF9RQ0FgIHByZXJlcXVpc2l0ZSBmb3IgdGhlIGBidHFjYS5jYCBtb2RpZmljYXRpb25zLiBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIEJsdWV0b290aCBNYWtlZmlsZSBvciBLY29uZmlnIHRvIGNvbmZpcm0gdGhpcyBkZXBlbmRlbmN5LiBPdmVyYWxsLCB0aGlzIHBhdGNoIGhhcyB0aGUgcG90ZW50aWFsIHRvIGV4cG9zZSBzZXZlcmFsIGludGVyZXN0aW5nIGF0dGFjayBzdXJmYWNlcy4gVGhlIHJlbGlhbmNlIG9uIGJsb2NrIGRldmljZSBpbnRlcmFjdGlvbiwgY291cGxlZCB3aXRoIGhvdyB0aGUgYWRkcmVzcyBpcyByZWFkIGFuZCB1c2VkLCBsb29rcyB0byBiZSBhIHByb21pc2luZyBhdmVudWUgdG8gZXhwbG9yZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ5NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA5OjI3OjA0LjI5NjExMTI3OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTAwMjM5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCVF9IQ0lVQVJUX1FDQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2JsdWV0b290aC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZz0yMjc9Y29uZmlnIEJUX0hDSVVBUlRfUlRMXFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTI0MC1cXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnOjI0MTpjb25maWcgQlRfSENJVUFSVF9RQ0FcXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTI0Mi1cXHRib29sIFxcXCJRdWFsY29tbSBBdGhlcm9zIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZT00Nz1oY2lfdWFydC0kKENPTkZJR19CVF9IQ0lVQVJUX0JDTSlcXHQrPSBoY2lfYmNtLm9cXG5kcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZTo0ODpoY2lfdWFydC0kKENPTkZJR19CVF9IQ0lVQVJUX1FDQSlcXHQrPSBoY2lfcWNhLm9cXG5kcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZS00OS1oY2lfdWFydC0kKENPTkZJR19CVF9IQ0lVQVJUX0FHNlhYKVxcdCs9IGhjaV9hZzZ4eC5vXFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYz04Nzc9c3RhdGljIGludCBfX2luaXQgaGNpX3VhcnRfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmMtOTEwLSNlbmRpZlxcbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jOjkxMTojaWZkZWYgQ09ORklHX0JUX0hDSVVBUlRfUUNBXFxuZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmMtOTEyLVxcdHFjYV9pbml0KCk7XFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYz05MjY9c3RhdGljIHZvaWQgX19leGl0IGhjaV91YXJ0X2V4aXQodm9pZClcXG4tLVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jLTk0OC0jZW5kaWZcXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYzo5NDk6I2lmZGVmIENPTkZJR19CVF9IQ0lVQVJUX1FDQVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jLTk1MC1cXHRxY2FfZGVpbml0KCk7XFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfdWFydC5oPTE5Nz1pbnQgYmNtX2RlaW5pdCh2b2lkKTtcXG4tLVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV91YXJ0LmgtMTk5LVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV91YXJ0Lmg6MjAwOiNpZmRlZiBDT05GSUdfQlRfSENJVUFSVF9RQ0FcXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfdWFydC5oLTIwMS1pbnQgcWNhX2luaXQodm9pZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA5OjI3OjA0LjM3MTEzMDE2MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNTcxMjUxNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBidHFjYS5jYCBDb21waWxhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZm9jdXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBgYnRxY2EuY2AgY29tcGlsYXRpb24gaXMgY2xlYW4uIEl0J3MgYSBjcml0aWNhbCBjb21wb25lbnQsIHNvIGEgcXVpY2sgdmVyaWZpY2F0aW9uIGlzIGluIG9yZGVyLiBJJ20gbm90IGV4cGVjdGluZyBhbnkgbWFqb3IgaXNzdWVzLCBidXQgeW91IGNhbid0IGJlIHRvbyBjb21wbGFjZW50LiBHb3R0YSBjYXRjaCBhbnkgcG90ZW50aWFsIHNuYWdzIGVhcmx5LCBiZWZvcmUgdGhleSBjYXNjYWRlIGludG8gc29tZXRoaW5nIGJpZ2dlci4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBmbGFncyBvciBlcnJvcnMgcG9wcGluZyB1cC4gVGltZSB0byBjaGVjayB0aGUgYnVpbGQgbG9ncy4uLiBsZXQncyBnZXQgdG8gaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTczLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6Mjc6MDguNTI4MjU4NDQzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDk5MDg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJidHFjYS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmx1ZXRvb3RoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZT0yNT1vYmotJChDT05GSUdfQlRfUlRMKVxcdFxcdCs9IGJ0cnRsLm9cXG5kcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfQlRfUUNBKVxcdFxcdCs9IGJ0cWNhLm9cXG5kcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZS0yNy1vYmotJChDT05GSUdfQlRfTVRLKVxcdFxcdCs9IGJ0bXRrLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6Mjc6MDguNjMzMjU3MDEzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzMjE3MTg2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOlxuXG4qKkJsdWV0b290aCBRQ0EgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCB0aGUgc3lzdGVtJ3MgZmxhZ2dlZCB0aGF0IGBDT05GSUdfQlRfUUNBYCBpcyBhIHJlcXVpcmVtZW50LiBUaGF0IGltbWVkaWF0ZWx5IGNsaWNrcyAtICpvZiBjb3Vyc2UqLCB3ZSBuZWVkIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24uIE5vdywgdGhlIG5leHQgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyB3aGV0aGVyIGBidHFjYS5jYCBpcyBjb3JyZWN0bHkgY29tcGlsZWQgd2l0aCBgQ09ORklHX0JUX1FDQWAgZW5hYmxlZCwgYXMgdGhhdCdzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLiBMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGF0IGJ5IGNoZWNraW5nIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoYXQgZHJpdmVyLiBMZXQncyBuYXZpZ2F0ZSBvdmVyIHRvIGBkcml2ZXJzL2JsdWV0b290aC9LY29uZmlnYCB0byBzZWUgdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDM1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6Mjc6MTIuMTY1NDMyNDg2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4ODA4MzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCVF9RQ0FcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibHVldG9vdGgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWc9MTQ9Y29uZmlnIEJUX1JUTFxcbi0tXFxuZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZy0xNy1cXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnOjE4OmNvbmZpZyBCVF9RQ0FcXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTE5LVxcdHRyaXN0YXRlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA5OjI3OjEyLjIyNDI1MjMzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2MzI1OTY3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIGEgQmx1ZXRvb3RoIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBzb21ldGhpbmcgdGhhdCBzZWVtcyB0byBiZSBhIHRyaXN0YXRlLCBhbmQgbXkgaW1tZWRpYXRlIGh1bmNoIGlzIHRoYXQgaXQncyBsaWtlbHkgc2VsZWN0ZWQgYnkgZWl0aGVyIGBCVF9IQ0lVQVJUX1FDQWAgb3IgYEJUX0hDSUJUVVNCX1FDQWAuIFRoYXQncyB3aGVyZSBJJ2Qgc3RhcnQsIGdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGVzZSBzb3J0cyBvZiBCbHVldG9vdGggY29uZmlndXJhdGlvbnMuIFRob3NlIFF1YWxjb21tLXNwZWNpZmljIFVBUlQgYW5kIFVTQiBkcml2ZXJzIGFyZSB1c3VhbGx5IHRoZSBjdWxwcml0cyBpbiB0aGVzZSBzY2VuYXJpb3MuXG5cbk5vdywgdG8gY29uZmlybSBhbmQgZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHdoYXQncyBnb2luZyBvbiwgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgYEJMS19OVk1FTWAgb3B0aW9uLiBJJ2xsIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBgYmxvY2svS2NvbmZpZ2AgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgc2VsZWN0aW9uIGFuZCBkZXBlbmRlbmNpZXMgb2YgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhhdCdzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gZmluZCBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBraW5kcyBvZiBzZXR0aW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3MjQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwOToyNzoxNS43ODc1MTUzN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE3OTU4NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19OVk1FTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz0yMDI9Y29uZmlnIEJMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDS1xcbi0tXFxuYmxvY2svS2NvbmZpZy0yMTEtXFxuYmxvY2svS2NvbmZpZzoyMTI6Y29uZmlnIEJMS19OVk1FTVxcbmJsb2NrL0tjb25maWctMjEzLVxcdGJvb2wgXFxcIkJsb2NrIGRldmljZSBOVk1FTSBwcm92aWRlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6Mjc6MTUuODQ5MzE5MjI0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwODM5MDQ2ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJsb2NrIE5WTWVNIFByb3ZpZGVyIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgaGVyZSBpcyB0aGUgYEJMS19OVk1FTWAgY29uZmlndXJhdGlvbiwgdGhlIGNvcmUgb2YgdGhlIGJsb2NrIG52bWVtIHByb3ZpZGVyLiBUaGUgcHJpbWFyeSBmdW5jdGlvbnMgSSdtIGludGVyZXN0ZWQgaW4gYXJlIGBibGtfbnZtZW1fcmVnX3JlYWRgLCBgYmxrX252bWVtX2FkZGAsIGBoY2lfZGV2X2dldF9iZF9hZGRyX2Zyb21fbnZtZW1gLCBhbmQgYG9mX2dldF9udm1lbV9ldWk0OGAuXG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBwYXRocy4gYGJsa19udm1lbV9hZGRgIGlzIHJlYWNoYWJsZTsgSSBzZWUgdGhhdCBpdCdzIGludm9rZWQgYnkgYGFkZF9kaXNrX2ZpbmFsYCB3aXRoaW4gYGJsb2NrL2dlbmhkLmNgLiBUaGF0J3MgZ29vZDsgaXQgY29uZmlybXMgdGhhdCB0aGUgYWRkIGZ1bmN0aW9uIGlzIGRlZmluaXRlbHkgaW4gdXNlLiBgYmxrX252bWVtX3JlZ19yZWFkYCwgaG93ZXZlciwgaXMgYSBiaXQgbW9yZSBzdHJhaWdodGZvcndhcmQ7IGl0J3MgdGhlIGByZWdfcmVhZGAgY2FsbGJhY2sgZm9yIHRoZSBOVk1FTSBwcm92aWRlci4gU28sIHdoZW5ldmVyIGFuIE5WTUVNIGNvbnN1bWVyIHBlcmZvcm1zIGEgcmVhZCwgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgZW5nYWdlZC5cblxuTm93LCBsZXQncyBleHBsb3JlIHRoZSByZWFjaGFiaWxpdHkgb2YgYG9mX2dldF9udm1lbV9ldWk0OGAuIEl0J3MgY2FsbGVkIGZyb20gYG9mX2dldF9tYWNfYWRkcmVzc19udm1lbWAgYW5kIGBoY2lfZGV2X2dldF9iZF9hZGRyX2Zyb21fbnZtZW1gLiBgb2ZfZ2V0X21hY19hZGRyZXNzX252bWVtYCBmZWVkcyBpbnRvIGBvZl9nZXRfbWFjX2FkZHJlc3NgLCB3aGljaCwgYXMgSSBrbm93LCBpcyBhIGNvbW1vbmx5IHVzZWQgZnVuY3Rpb24gd2l0aGluIG5ldHdvcmsgZHJpdmVycy4gYGhjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9udm1lbWAgaXMgY2FsbGVkIGZyb20gYGhjaV9kZXZfc2V0dXBfc3luY2AgaW4gYG5ldC9ibHVldG9vdGgvaGNpX3N5bmMuY2AuIFRoaXMgaXMgYWxsIHVzZWZ1bCBpbmZvcm1hdGlvbi5cblxuTmV4dCwgSSdsbCBicmllZmx5IGxvb2sgYXQgdGhlIGRldmljZSB0cmVlIHBhcnRpdGlvbiBoYW5kbGluZy4gSXQgbG9va3MgbGlrZSBgb2ZfcGFydGl0aW9uYCBpbiBgYmxvY2svcGFydGl0aW9ucy9vZi5jYCBoYXMgYmVlbiBtb2RpZmllZCB0byBza2lwIG5vZGVzIG1pc3NpbmcgdGhlIGByZWdgIHByb3BlcnR5LiBNYWtlcyBzZW5zZS4gVGhpcyBpcyBjYWxsZWQgZHVyaW5nIHBhcnRpdGlvbiBwYXJzaW5nIGZyb20gdGhlIGRldmljZSB0cmVlLlxuXG5Pa2F5LCBzbyB0aGUgY29uZmlncyB0byBlbmFibGUgc2VlbSBjbGVhci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQkxLX05WTUVNYCBpcyBlbmFibGVkLiBCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIGNvbnNpZGVyIEJsdWV0b290aCBzdXBwb3J0IHNpbmNlIHRoZSBCbHVldG9vdGggZnVuY3Rpb25zIGFyZSB1c2luZyB0aGUgbnZtZW0gcHJvdmlkZXIsIG1lYW5pbmcgdGhhdCBgQlRfUUNBYCAob3Igc29tZXRoaW5nIGxpa2UgYEJUX0hDSVVBUlRfUUNBYCAvIGBCVF9IQ0lCVFVTQmAgYmFzZWQgb24gdGhlIGNoaXApIGlzIGFub3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbi4gSG93ZXZlciwgYEJUX1FDQWAgaXMgc2VsZWN0ZWQgYnkgb3RoZXJzLiBJIGNhbiBjaGVjayB3aGF0IHNlbGVjdHMgYEJUX1FDQWAgbGF0ZXIuIEZvciBub3csIG15IHByaW1hcnkgY29uY2VybiBpcyBlbmFibGluZyBgQkxLX05WTUVNYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwODEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6Mjc6MjMuOTMzMjI3ODhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4ODExNzczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBCVF9RQ0FcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibHVldG9vdGgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWc9MjQxPWNvbmZpZyBCVF9IQ0lVQVJUX1FDQVxcbi0tXFxuZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZy0yNDUtXFx0c2VsZWN0IEJUX0hDSVVBUlRfSDRcXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnOjI0NjpcXHRzZWxlY3QgQlRfUUNBXFxuZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZy0yNDctXFx0aGVscFxcbi0tXFxuZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZz00MTY9Y29uZmlnIEJUX1FDT01TTURcXG4tLVxcbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWctNDE5LVxcdGRlcGVuZHMgb24gUUNPTV9XQ05TU19DVFJMIHx8IChDT01QSUxFX1RFU1QgXFx1MDAyNlxcdTAwMjYgUUNPTV9XQ05TU19DVFJMPW4pXFxuZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZzo0MjA6XFx0c2VsZWN0IEJUX1FDQVxcbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWctNDIxLVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6Mjc6MjQuMDAyMDUxMjEzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1NjA2NTUwNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE5WTUVNIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYEJUX0hDSVVBUlRfUUNBYCBhbmQgYEJUX1FDT01TTURgIGFyZSBzZWxlY3RpbmcgYEJUX1FDQWAsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LiBJIGNhbiBsaXN0IGBCVF9IQ0lVQVJUX1FDQWAgYXMgYSBzdGFydGluZyBwb2ludC4gTGV0J3Mgc2VlLi4uIHRoZSBmb2N1cyBoZXJlIGlzIGRlZmluaXRlbHkgb24gdGhlc2UgZnVuY3Rpb25zOiBgYmxrX252bWVtX3JlZ19yZWFkYCwgYGJsa19udm1lbV9hZGRgLCBgaGNpX2Rldl9nZXRfYmRfYWRkcl9mcm9tX252bWVtYCwgYW5kIGBvZl9nZXRfbnZtZW1fZXVpNDhgLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBzY29wZS4gYGJsa19udm1lbV9yZWdfcmVhZGAgaXMgaW5kZWVkIHN0YXRpYywgc28gdGhhdCdzIGhlbHBmdWwgaW4gdW5kZXJzdGFuZGluZyB3aGVyZSBpdOKAmXMgdXNlZC4gYGJsa19udm1lbV9hZGRgLCBob3dldmVyLCBpc24ndCBleHBvcnRlZC4gSG1tLCBpdCdzIGluIGBibG9jay9ibGstbnZtZW0uY2AgYW5kIGlzIGNhbGxlZCBmcm9tIGBibG9jay9nZW5oZC5jYC4gVGhlbiBgaGNpX2Rldl9nZXRfYmRfYWRkcl9mcm9tX252bWVtYCBpcyBhbHNvIHN0YXRpYywgcmVzaWRpbmcgaW4gYG5ldC9ibHVldG9vdGgvaGNpX3N5bmMuY2AuIEFuZCBgb2ZfZ2V0X252bWVtX2V1aTQ4YCBpcyBleHBvcnRlZCBpbiBgbmV0L2NvcmUvb2ZfbmV0LmNgLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJcyBgQkxLX05WTUVNYCBzdWZmaWNpZW50PyBMZXQgbWUgZG91YmxlLWNoZWNrLiBPa2F5LCBpdCBkZXBlbmRzIG9uIGJvdGggYE9GYCBhbmQgYE5WTUVNYC4gVGhhdCdzIGdvb2QsIGBPRmAgaXMgd2lkZWx5IGVuYWJsZWQgYWNyb3NzIHZhcmlvdXMgYXJjaGl0ZWN0dXJlcywgYW5kIGBOVk1FTWAgaXMgY29tbW9uIGFzIHdlbGwuXG5cbkJhc2VkIG9uIGFsbCBvZiB0aGlzLCBJJ20gY29tZm9ydGFibGUgZW5vdWdoIHRvIGNvbmNsdWRlIHRoYXQgdGhpcyBwYXRjaCB3YXJyYW50cyBmdXp6aW5nLCBhbmQgSSB0aGluayBJJ3ZlIGlkZW50aWZpZWQgdGhlIGtleSBmdW5jdGlvbnMgZm9yIGFuYWx5c2lzLiBNeSByZWFzb25pbmcgaXMgdGhhdCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBibG9jayBkZXZpY2UgTlZNRU0gcHJvdmlkZXIgYWxsb3dpbmcgYmxvY2sgZGV2aWNlcyB0byBhY3QgYXMgTlZNRU0gcHJvdmlkZXJzLCBhbmQgaGFzIGludHJvZHVjZWQgQmx1ZXRvb3RoIGRldmljZSBhZGRyZXNzZXMgZnJvbSBOVk1FTSBjZWxscy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcywgd2l0aCByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBhZGRpbmcgYSBibG9jayBkZXZpY2Ugb3Igc2V0dGluZyB1cCBhIHZpcnR1YWwgSENJIGRldmljZSB3aXRoIHRoZSByaWdodCBxdWlya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzE0LCJPdXRwdXRUb2tlbnMiOjE4MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwOToyNzozMi41NjI3MDkzMDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTUyMjM5NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19OVk1FTVwiLFxuICAgIFwiQlRfSENJVUFSVF9RQ0FcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibGtfbnZtZW1fcmVnX3JlYWRcIixcbiAgICBcImJsa19udm1lbV9hZGRcIixcbiAgICBcImhjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9udm1lbVwiLFxuICAgIFwib2ZfZ2V0X252bWVtX2V1aTQ4XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBibG9jayBkZXZpY2UgTlZNRU0gcHJvdmlkZXIgd2hpY2ggYWxsb3dzIGJsb2NrIGRldmljZXMgdG8gYWN0IGFzIE5WTUVNIHByb3ZpZGVycy4gSXQgYWxzbyBhZGRzIGxvZ2ljIHRvIHJlYWQgQmx1ZXRvb3RoIGRldmljZSBhZGRyZXNzZXMgYW5kIE1BQyBhZGRyZXNzZXMgZnJvbSBOVk1FTSBjZWxscy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgYmxvY2ssIG5ldCwgYW5kIGJsdWV0b290aCBzdWJzeXN0ZW1zIHRoYXQgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGUuZy4sIHdoZW4gYWRkaW5nIGEgYmxvY2sgZGV2aWNlIG9yIHNldHRpbmcgdXAgYSB2aXJ0dWFsIEhDSSBkZXZpY2Ugd2l0aCB0aGUgYXBwcm9wcmlhdGUgcXVpcmtzKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfTlZNRU1cIixcbiAgICBcIkJUX0hDSVVBUlRfUUNBXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmxrX252bWVtX3JlZ19yZWFkXCIsXG4gICAgXCJibGtfbnZtZW1fYWRkXCIsXG4gICAgXCJoY2lfZGV2X2dldF9iZF9hZGRyX2Zyb21fbnZtZW1cIixcbiAgICBcIm9mX2dldF9udm1lbV9ldWk0OFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYmxvY2sgZGV2aWNlIE5WTUVNIHByb3ZpZGVyIHdoaWNoIGFsbG93cyBibG9jayBkZXZpY2VzIHRvIGFjdCBhcyBOVk1FTSBwcm92aWRlcnMuIEl0IGFsc28gYWRkcyBsb2dpYyB0byByZWFkIEJsdWV0b290aCBkZXZpY2UgYWRkcmVzc2VzIGFuZCBNQUMgYWRkcmVzc2VzIGZyb20gTlZNRU0gY2VsbHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGJsb2NrLCBuZXQsIGFuZCBibHVldG9vdGggc3Vic3lzdGVtcyB0aGF0IGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChlLmcuLCB3aGVuIGFkZGluZyBhIGJsb2NrIGRldmljZSBvciBzZXR0aW5nIHVwIGEgdmlydHVhbCBIQ0kgZGV2aWNlIHdpdGggdGhlIGFwcHJvcHJpYXRlIHF1aXJrcykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhh52f[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-29 09:12:42 +0000 UTC FinishedAt: 2026-06-29 09:27:35 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_NVMEM", "BT_HCIUART_QCA" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_NVMEM", "BT_HCIUART_QCA" ], "series_id": "c05fa482-aa60-497e-9913-7d4d7c8bea9b" }, "track": "KASAN", "fuzz": { "focus": [ "fs", "net" ], "focus_symbols": [ "blk_nvmem_reg_read", "blk_nvmem_add", "hci_dev_get_bd_addr_from_nvmem", "of_get_nvmem_eui48" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA5OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19OVk1FTSYjMzQ7LAogICAgJiMzNDtCVF9IQ0lVQVJUX1FDQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jsa19udm1lbV9yZWdfcmVhZCYjMzQ7LAogICAgJiMzNDtibGtfbnZtZW1fYWRkJiMzNDssCiAgICAmIzM0O2hjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9udm1lbSYjMzQ7LAogICAgJiMzNDtvZl9nZXRfbnZtZW1fZXVpNDgmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBibG9jayBkZXZpY2UgTlZNRU0gcHJvdmlkZXIgd2hpY2ggYWxsb3dzIGJsb2NrIGRldmljZXMgdG8gYWN0IGFzIE5WTUVNIHByb3ZpZGVycy4gSXQgYWxzbyBhZGRzIGxvZ2ljIHRvIHJlYWQgQmx1ZXRvb3RoIGRldmljZSBhZGRyZXNzZXMgYW5kIE1BQyBhZGRyZXNzZXMgZnJvbSBOVk1FTSBjZWxscy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgYmxvY2ssIG5ldCwgYW5kIGJsdWV0b290aCBzdWJzeXN0ZW1zIHRoYXQgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGUuZy4sIHdoZW4gYWRkaW5nIGEgYmxvY2sgZGV2aWNlIG9yIHNldHRpbmcgdXAgYSB2aXJ0dWFsIEhDSSBkZXZpY2Ugd2l0aCB0aGUgYXBwcm9wcmlhdGUgcXVpcmtzKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwOToyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDUzNmYwZGUyNmUyNjVhNjI4Zjc2NWQwNTI0MDMxM2VjNGVmOTJiYzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyOSAwOToyNjo1MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tYy1jYXJkLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tYy1jYXJkLnlhbWxcbmluZGV4IGE2MWQ2Yzk2ZGY3NTkxLi5jYTkwN2FkNzMwOTU5MiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvbW1jLWNhcmQueWFtbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21tYy9tbWMtY2FyZC55YW1sXG5AQCAtNDAsNiAmIzQzOzQwLDkgQEAgcGF0dGVyblByb3BlcnRpZXM6XG4gICAgICAgICBjb250YWluczpcbiAgICAgICAgICAgY29uc3Q6IGZpeGVkLXBhcnRpdGlvbnNcbiBcbiYjNDM7ICAgICAgbnZtZW0tbGF5b3V0OlxuJiM0MzsgICAgICAgICRyZWY6IC9zY2hlbWFzL252bWVtL2xheW91dHMvbnZtZW0tbGF5b3V0LnlhbWxcbiYjNDM7XG4gcmVxdWlyZWQ6XG4gICAtIGNvbXBhdGlibGVcbiAgIC0gcmVnXG5AQCAtODYsNiAmIzQzOzg5LDMyIEBAIGV4YW1wbGVzOlxuICAgICAgICAgICAgICAgICAgICAgcmVhZC1vbmx5O1xuICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgIH07XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICBwYXJ0aXRpb25zLWJvb3QyIHtcbiYjNDM7ICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDtmaXhlZC1wYXJ0aXRpb25zXCYjMzQ7O1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgICAgICBudm1lbS1sYXlvdXQge1xuJiM0MzsgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDtmaXhlZC1sYXlvdXRcJiMzNDs7XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgIG1hYy1hZGRyQDQ0MDAge1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7bWFjLWJhc2VcJiMzNDs7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzB4NDQwMCAweDZcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICNudm1lbS1jZWxsLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICB9O1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBiZC1hZGRyQDU0MDAge1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7bWFjLWJhc2VcJiMzNDs7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzB4NTQwMCAweDZcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICNudm1lbS1jZWxsLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICB9O1xuJiM0MzsgICAgICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiAgICAgICAgIH07XG4gICAgIH07XG4gXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9ibHVldG9vdGgvcWNvbSxibHVldG9vdGgtY29tbW9uLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2JsdWV0b290aC9xY29tLGJsdWV0b290aC1jb21tb24ueWFtbFxuaW5kZXggYzhlOWM1NWMxYWZiNGMuLjdjYjI4ZjMwYzlhZjAzIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9ibHVldG9vdGgvcWNvbSxibHVldG9vdGgtY29tbW9uLnlhbWxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYmx1ZXRvb3RoL3Fjb20sYmx1ZXRvb3RoLWNvbW1vbi55YW1sXG5AQCAtMjIsNCAmIzQzOzIyLDEzIEBAIHByb3BlcnRpZXM6XG4gICAgIGRlc2NyaXB0aW9uOlxuICAgICAgIGJvb3QgZmlybXdhcmUgaXMgaW5jb3JyZWN0bHkgcGFzc2luZyB0aGUgYWRkcmVzcyBpbiBiaWctZW5kaWFuIG9yZGVyXG4gXG4mIzQzOyAgbnZtZW0tY2VsbHM6XG4mIzQzOyAgICBtYXhJdGVtczogMVxuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIE52bWVtIGRhdGEgY2VsbCB0aGF0IGNvbnRhaW5zIGEgNiBieXRlIEJEIGFkZHJlc3Mgd2l0aCB0aGUgbW9zdFxuJiM0MzsgICAgICBzaWduaWZpY2FudCBieXRlIGZpcnN0IChiaWctZW5kaWFuKS5cbiYjNDM7XG4mIzQzOyAgbnZtZW0tY2VsbC1uYW1lczpcbiYjNDM7ICAgIGNvbnN0OiBsb2NhbC1iZC1hZGRyZXNzXG4mIzQzO1xuIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB0cnVlXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9xY29tLGF0aDEway55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9xY29tLGF0aDEway55YW1sXG5pbmRleCBkNGY0ZDcyZWUwZDM4OC4uN2Y5ZDE2Y2I3YzE0MzMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL3Fjb20sYXRoMTBrLnlhbWxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3MvcWNvbSxhdGgxMGsueWFtbFxuQEAgLTkyLDYgJiM0Mzs5MiwyMiBAQCBwcm9wZXJ0aWVzOlxuIFxuICAgaWVlZTgwMjExLWZyZXEtbGltaXQ6IHRydWVcbiBcbiYjNDM7ICBudm1lbS1jZWxsczpcbiYjNDM7ICAgIG1pbkl0ZW1zOiAxXG4mIzQzOyAgICBtYXhJdGVtczogM1xuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIFJlZmVyZW5jZXMgdG8gbnZtZW0gY2VsbHMgZm9yIE1BQyBhZGRyZXNzIGFuZC9vciBjYWxpYnJhdGlvbiBkYXRhLlxuJiM0MzsgICAgICBTdXBwb3J0ZWQgY2VsbCBuYW1lcyBhcmUgbWFjLWFkZHJlc3MsIGNhbGlicmF0aW9uLCBhbmQgcHJlLWNhbGlicmF0aW9uLlxuJiM0MztcbiYjNDM7ICBudm1lbS1jZWxsLW5hbWVzOlxuJiM0MzsgICAgbWluSXRlbXM6IDFcbiYjNDM7ICAgIG1heEl0ZW1zOiAzXG4mIzQzOyAgICBpdGVtczpcbiYjNDM7ICAgICAgZW51bTpcbiYjNDM7ICAgICAgICAtIG1hYy1hZGRyZXNzXG4mIzQzOyAgICAgICAgLSBjYWxpYnJhdGlvblxuJiM0MzsgICAgICAgIC0gcHJlLWNhbGlicmF0aW9uXG4mIzQzO1xuICAgcWNvbSxjYWxpYnJhdGlvbi1kYXRhOlxuICAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy91aW50OC1hcnJheVxuICAgICBkZXNjcmlwdGlvbjpcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vcXJiMjIxMC1hcmR1aW5vLWltb2xhLmR0cyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9xcmIyMjEwLWFyZHVpbm8taW1vbGEuZHRzXG5pbmRleCBiZjA4OGZhOTgwN2YwNC4uMTI4YzdhN2U3NmI1YjAgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vcXJiMjIxMC1hcmR1aW5vLWltb2xhLmR0c1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL3FyYjIyMTAtYXJkdWluby1pbW9sYS5kdHNcbkBAIC00MDksNyAmIzQzOzQwOSw0MCBAQCBcdTAwMjZzZGhjXzEge1xuIFx0bm8tc2RpbztcbiBcdG5vLXNkO1xuIFxuJiM0MztcdCNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7XHQjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzO1xuIFx0c3RhdHVzID0gXCYjMzQ7b2theVwmIzM0OztcbiYjNDM7XG4mIzQzO1x0Y2FyZEAwIHtcbiYjNDM7XHRcdGNvbXBhdGlibGUgPSBcJiMzNDttbWMtY2FyZFwmIzM0OztcbiYjNDM7XHRcdHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzO1xuJiM0MztcdFx0cGFydGl0aW9ucy1ib290MSB7XG4mIzQzO1x0XHRcdGNvbXBhdGlibGUgPSBcJiMzNDtmaXhlZC1wYXJ0aXRpb25zXCYjMzQ7O1xuJiM0MztcbiYjNDM7XHRcdFx0I2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MztcdFx0XHQjc2l6ZS1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzO1xuJiM0MztcdFx0XHRudm1lbS1sYXlvdXQge1xuJiM0MztcdFx0XHRcdGNvbXBhdGlibGUgPSBcJiMzNDtmaXhlZC1sYXlvdXRcJiMzNDs7XG4mIzQzO1x0XHRcdFx0I2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MztcdFx0XHRcdCNzaXplLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0d2lmaV9tYWNfYWRkcjogbWFjLWFkZHJANDQwMCB7XG4mIzQzO1x0XHRcdFx0XHRjb21wYXRpYmxlID0gXCYjMzQ7bWFjLWJhc2VcJiMzNDs7XG4mIzQzO1x0XHRcdFx0XHRyZWcgPSBcdTAwM2MweDQ0MDAgMHg2XHUwMDNlO1xuJiM0MztcdFx0XHRcdFx0I252bWVtLWNlbGwtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MztcdFx0XHRcdH07XG4mIzQzO1xuJiM0MztcdFx0XHRcdGJkX2FkZHI6IGJkLWFkZHJANTQwMCB7XG4mIzQzO1x0XHRcdFx0XHRjb21wYXRpYmxlID0gXCYjMzQ7bWFjLWJhc2VcJiMzNDs7XG4mIzQzO1x0XHRcdFx0XHRyZWcgPSBcdTAwM2MweDU0MDAgMHg2XHUwMDNlO1xuJiM0MztcdFx0XHRcdFx0I252bWVtLWNlbGwtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MztcdFx0XHRcdH07XG4mIzQzO1x0XHRcdH07XG4mIzQzO1x0XHR9O1xuJiM0MztcdH07XG4gfTtcbiBcbiBcdTAwMjZzcGk1IHtcbkBAIC01MTIsNiAmIzQzOzU0NSw5IEBAIGJsdWV0b290aCB7XG4gXHRcdHZkZGNoMC1zdXBwbHkgPSBcdTAwM2NcdTAwMjZwbTQxMjVfbDIyXHUwMDNlO1xuIFx0XHRlbmFibGUtZ3Bpb3MgPSBcdTAwM2NcdTAwMjZ0bG1tIDg3IEdQSU9fQUNUSVZFX0hJR0hcdTAwM2U7XG4gXHRcdG1heC1zcGVlZCA9IFx1MDAzYzMwMDAwMDBcdTAwM2U7XG4mIzQzO1xuJiM0MztcdFx0bnZtZW0tY2VsbHMgPSBcdTAwM2NcdTAwMjZiZF9hZGRyIDBcdTAwM2U7XG4mIzQzO1x0XHRudm1lbS1jZWxsLW5hbWVzID0gXCYjMzQ7bG9jYWwtYmQtYWRkcmVzc1wmIzM0OztcbiBcdH07XG4gfTtcbiBcbkBAIC01NTcsNiAmIzQzOzU5Myw5IEBAIFx1MDAyNndpZmkge1xuIFx0cWNvbSxhdGgxMGstY2FsaWJyYXRpb24tdmFyaWFudCA9IFwmIzM0O0FyZHVpbm9JbW9sYVwmIzM0OztcbiBcdGZpcm13YXJlLW5hbWUgPSBcJiMzNDtxY20yMjkwXCYjMzQ7O1xuIFxuJiM0MztcdG52bWVtLWNlbGxzID0gXHUwMDNjXHUwMDI2d2lmaV9tYWNfYWRkciAwXHUwMDNlO1xuJiM0MztcdG52bWVtLWNlbGwtbmFtZXMgPSBcJiMzNDttYWMtYWRkcmVzc1wmIzM0OztcbiYjNDM7XG4gXHRzdGF0dXMgPSBcJiMzNDtva2F5XCYjMzQ7O1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvYmxvY2svS2NvbmZpZyBiL2Jsb2NrL0tjb25maWdcbmluZGV4IDcwZTRhNjZkOTQxZmY2Li5hZWM1ZDlmYzEzYTNkMyAxMDA2NDRcbi0tLSBhL2Jsb2NrL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL0tjb25maWdcbkBAIC0yMDksNiAmIzQzOzIwOSwxNSBAQCBjb25maWcgQkxLX0lOTElORV9FTkNSWVBUSU9OX0ZBTExCQUNLXG4gXHQgIGJ5IGZhbGxpbmcgYmFjayB0byB0aGUga2VybmVsIGNyeXB0byBBUEkgd2hlbiBpbmxpbmVcbiBcdCAgZW5jcnlwdGlvbiBoYXJkd2FyZSBpcyBub3QgcHJlc2VudC5cbiBcbiYjNDM7Y29uZmlnIEJMS19OVk1FTVxuJiM0MztcdGJvb2wgXCYjMzQ7QmxvY2sgZGV2aWNlIE5WTUVNIHByb3ZpZGVyXCYjMzQ7XG4mIzQzO1x0ZGVwZW5kcyBvbiBPRlxuJiM0MztcdGRlcGVuZHMgb24gTlZNRU1cbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBBbGxvdyBibG9jayBkZXZpY2VzIChvciBwYXJ0aXRpb25zKSB0byBhY3QgYXMgTlZNRU0gcHJvdmlkZXJzLFxuJiM0MztcdCAgdHlwaWNhbGx5IHVzZWQgd2l0aCBlTU1DIHRvIHN0b3JlIE1BQyBhZGRyZXNzZXMgb3IgV2ktRmlcbiYjNDM7XHQgIGNhbGlicmF0aW9uIGRhdGEgb24gZW1iZWRkZWQgZGV2aWNlcy5cbiYjNDM7XG4gc291cmNlIFwmIzM0O2Jsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZ1wmIzM0O1xuIFxuIGNvbmZpZyBCTEtfUE1cbmRpZmYgLS1naXQgYS9ibG9jay9NYWtlZmlsZSBiL2Jsb2NrL01ha2VmaWxlXG5pbmRleCBlN2JkMzIwZTNkNjk3MS4uODIwMDI5N2ZiY2JhYjMgMTAwNjQ0XG4tLS0gYS9ibG9jay9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svTWFrZWZpbGVcbkBAIC0zOSwzICYjNDM7MzksNCBAQCBvYmotJChDT05GSUdfQkxLX0lOTElORV9FTkNSWVBUSU9OKVx0JiM0Mzs9IGJsay1jcnlwdG8ubyBibGstY3J5cHRvLXByb2ZpbGUubyBcXFxuIFx0XHRcdFx0XHQgICBibGstY3J5cHRvLXN5c2ZzLm9cbiBvYmotJChDT05GSUdfQkxLX0lOTElORV9FTkNSWVBUSU9OX0ZBTExCQUNLKVx0JiM0Mzs9IGJsay1jcnlwdG8tZmFsbGJhY2sub1xuIG9iai0kKENPTkZJR19CTE9DS19IT0xERVJfREVQUkVDQVRFRClcdCYjNDM7PSBob2xkZXIub1xuJiM0MztvYmotJChDT05GSUdfQkxLX05WTUVNKSAgICAgICAgICAgICAgICAmIzQzOz0gYmxrLW52bWVtLm9cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstbnZtZW0uYyBiL2Jsb2NrL2Jsay1udm1lbS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjRiMzVhNzQyNTUwNTkzXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstbnZtZW0uY1xuQEAgLTAsMCAmIzQzOzEsMTExIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4mIzQzOy8qXG4mIzQzOyAqIGJsb2NrIGRldmljZSBOVk1FTSBwcm92aWRlclxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjQgRGFuaWVsIEdvbGxlIFx1MDAzY2RhbmllbEBtYWtyb3RvcGlhLm9yZ1x1MDAzZVxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIFF1YWxjb21tIFRlY2hub2xvZ2llcywgSW5jLiBhbmQvb3IgaXRzIHN1YnNpZGlhcmllcy5cbiYjNDM7ICpcbiYjNDM7ICogVXNlZnVsIG9uIGRldmljZXMgdXNpbmcgYSBwYXJ0aXRpb24gb24gYW4gZU1NQyBmb3IgTUFDIGFkZHJlc3NlcyBvclxuJiM0MzsgKiBXaS1GaSBjYWxpYnJhdGlvbiBFRVBST00gZGF0YS5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbnZtZW0tcHJvdmlkZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9udm1lbS1jb25zdW1lci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2Jsay5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGJsa19udm1lbV9yZWdfcmVhZCh2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgZnJvbSwgdm9pZCAqdmFsLCBzaXplX3QgYnl0ZXMpXG4mIzQzO3tcbiYjNDM7XHRkZXZfdCBkZXZ0ID0gKGRldl90KSh1aW50cHRyX3QpcHJpdjtcbiYjNDM7XHRzaXplX3QgYnl0ZXNfbGVmdCA9IGJ5dGVzO1xuJiM0MztcdGxvZmZfdCBwb3MgPSBmcm9tO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3QgZmlsZSAqYmRldl9maWxlIF9fZnJlZShmcHV0KSA9XG4mIzQzO1x0XHRiZGV2X2ZpbGVfb3Blbl9ieV9kZXYoZGV2dCwgQkxLX09QRU5fUkVBRCwgTlVMTCwgTlVMTCk7XG4mIzQzO1x0aWYgKElTX0VSUihiZGV2X2ZpbGUpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoYmRldl9maWxlKTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGJ5dGVzX2xlZnQpIHtcbiYjNDM7XHRcdHBnb2ZmX3QgZl9pbmRleCA9IHBvcyBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiYjNDM7XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4mIzQzO1x0XHRzaXplX3QgZm9saW9fb2ZmO1xuJiM0MztcdFx0c2l6ZV90IHRvX3JlYWQ7XG4mIzQzO1xuJiM0MztcdFx0Zm9saW8gPSByZWFkX21hcHBpbmdfZm9saW8oYmRldl9maWxlLVx1MDAzZWZfbWFwcGluZywgZl9pbmRleCwgTlVMTCk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKGZvbGlvKSkge1xuJiM0MztcdFx0XHRyZXQgPSBQVFJfRVJSKGZvbGlvKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0Zm9saW9fb2ZmID0gb2Zmc2V0X2luX2ZvbGlvKGZvbGlvLCBwb3MpO1xuJiM0MztcdFx0dG9fcmVhZCA9IG1pbihieXRlc19sZWZ0LCBmb2xpb19zaXplKGZvbGlvKSAtIGZvbGlvX29mZik7XG4mIzQzO1x0XHRtZW1jcHlfZnJvbV9mb2xpbyh2YWwsIGZvbGlvLCBmb2xpb19vZmYsIHRvX3JlYWQpO1xuJiM0MztcdFx0cG9zICYjNDM7PSB0b19yZWFkO1xuJiM0MztcdFx0Ynl0ZXNfbGVmdCAtPSB0b19yZWFkO1xuJiM0MztcdFx0dmFsICYjNDM7PSB0b19yZWFkO1xuJiM0MztcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBibGtfbnZtZW1fYWRkKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZiZGV2LVx1MDAzZWJkX2RldmljZTtcbiYjNDM7XHRzdHJ1Y3QgbnZtZW1fY29uZmlnIGNvbmZpZyA9IHt9O1xuJiM0MztcbiYjNDM7XHQvKiBza2lwIGRldmljZXMgd2hpY2ggZG8gbm90IGhhdmUgYSBkZXZpY2UgdHJlZSBub2RlICovXG4mIzQzO1x0aWYgKCFkZXZfb2Zfbm9kZShkZXYpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIHNraXAgZGV2aWNlcyB3aXRob3V0IGFuIG52bWVtIGxheW91dCBkZWZpbmVkICovXG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpjaGlsZCBfX2ZyZWUoZGV2aWNlX25vZGUpID1cbiYjNDM7XHRcdG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldl9vZl9ub2RlKGRldiksIFwmIzM0O252bWVtLWxheW91dFwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFjaGlsZClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIHNraXAgYmxvY2sgZGV2aWNlIHRvbyBsYXJnZSB0byBiZSByZXByZXNlbnRlZCBhcyBOVk1FTSBkZXZpY2VzLFxuJiM0MztcdCAqIG52bWVtX2NvbmZpZy5zaXplIGlzIGEgc2lnbmVkIGludFxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChiZGV2X25yX2J5dGVzKGJkZXYpIFx1MDAzZSBJTlRfTUFYKSB7XG4mIzQzO1x0XHRkZXZfd2FybihkZXYsIFwmIzM0O2Jsb2NrIGRldmljZSB0b28gbGFyZ2UgdG8gYmUgYW4gTlZNRU0gcHJvdmlkZXJcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjb25maWcuaWQgPSBOVk1FTV9ERVZJRF9OT05FO1xuJiM0MztcdGNvbmZpZy5kZXYgPSBkZXY7XG4mIzQzO1x0Y29uZmlnLm5hbWUgPSBkZXZfbmFtZShkZXYpO1xuJiM0MztcdGNvbmZpZy5vd25lciA9IFRISVNfTU9EVUxFO1xuJiM0MztcdGNvbmZpZy5wcml2ID0gKHZvaWQgKikodWludHB0cl90KWRldi1cdTAwM2VkZXZ0O1xuJiM0MztcdGNvbmZpZy5yZWdfcmVhZCA9IGJsa19udm1lbV9yZWdfcmVhZDtcbiYjNDM7XHRjb25maWcuc2l6ZSA9IGJkZXZfbnJfYnl0ZXMoYmRldik7XG4mIzQzO1x0Y29uZmlnLndvcmRfc2l6ZSA9IDE7XG4mIzQzO1x0Y29uZmlnLnN0cmlkZSA9IDE7XG4mIzQzO1x0Y29uZmlnLnJlYWRfb25seSA9IHRydWU7XG4mIzQzO1x0Y29uZmlnLnJvb3Rfb25seSA9IHRydWU7XG4mIzQzO1x0Y29uZmlnLmlnbm9yZV93cCA9IHRydWU7XG4mIzQzO1x0Y29uZmlnLm9mX25vZGUgPSB0b19vZl9ub2RlKGRldi1cdTAwM2Vmd25vZGUpO1xuJiM0MztcbiYjNDM7XHRiZGV2LVx1MDAzZWJkX252bWVtID0gbnZtZW1fcmVnaXN0ZXIoXHUwMDI2Y29uZmlnKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGJkZXYtXHUwMDNlYmRfbnZtZW0pKSB7XG4mIzQzO1x0XHRpbnQgcmV0ID0gUFRSX0VSUihiZGV2LVx1MDAzZWJkX252bWVtKTtcbiYjNDM7XG4mIzQzO1x0XHRiZGV2LVx1MDAzZWJkX252bWVtID0gTlVMTDtcbiYjNDM7XHRcdGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFwmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBOVk1FTSBkZXZpY2VcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGJsa19udm1lbV9kZWwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbiYjNDM7e1xuJiM0MztcdG52bWVtX3VucmVnaXN0ZXIoYmRldi1cdTAwM2ViZF9udm1lbSk7XG4mIzQzO1x0YmRldi1cdTAwM2ViZF9udm1lbSA9IE5VTEw7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9ibG9jay9ibGsuaCBiL2Jsb2NrL2Jsay5oXG5pbmRleCAyNWFmOGFjNWVmMGY3Ny4uZGFkOGYwZDdhMjE4ZWQgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGsuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLmhcbkBAIC04MTAsNCAmIzQzOzgxMCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYmxrX2RlYnVnZnNfdW5sb2NrKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuIFx0bWVtYWxsb2Nfbm9pb19yZXN0b3JlKG1lbWZsYWdzKTtcbiB9XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfQkxLX05WTUVNXG4mIzQzO2ludCBibGtfbnZtZW1fYWRkKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpO1xuJiM0Mzt2b2lkIGJsa19udm1lbV9kZWwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldik7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGJsa19udm1lbV9hZGQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikgeyByZXR1cm4gMDsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgYmxrX252bWVtX2RlbChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KSB7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gI2VuZGlmIC8qIEJMS19JTlRFUk5BTF9IICovXG5kaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmNcbmluZGV4IGY4NGI2YTM1NWI1NzRhLi4wYzljNWU1ZWE3YmFmZiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2dlbmhkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2dlbmhkLmNcbkBAIC00MjEsNiAmIzQzOzQyMSw4IEBAIHN0YXRpYyB2b2lkIGFkZF9kaXNrX2ZpbmFsKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIFx0XHQgKi9cbiBcdFx0ZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoZGRldiwgMCk7XG4gXHRcdGRpc2tfdWV2ZW50KGRpc2ssIEtPQkpfQUREKTtcbiYjNDM7XG4mIzQzO1x0XHRibGtfbnZtZW1fYWRkKGRpc2stXHUwMDNlcGFydDApO1xuIFx0fVxuIFxuIFx0YmxrX2FwcGx5X2JkaV9saW1pdHMoZGlzay1cdTAwM2ViZGksIFx1MDAyNmRpc2stXHUwMDNlcXVldWUtXHUwMDNlbGltaXRzKTtcbkBAIC03MDQsNiAmIzQzOzcwNiw4IEBAIHN0YXRpYyB2b2lkIF9fZGVsX2dlbmRpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXG4gXHRkaXNrX2RlbF9ldmVudHMoZGlzayk7XG4gXG4mIzQzO1x0YmxrX252bWVtX2RlbChkaXNrLVx1MDAzZXBhcnQwKTtcbiYjNDM7XG4gXHQvKlxuIFx0ICogUHJldmVudCBuZXcgb3BlbmVycyBieSB1bmxpbmtlZCB0aGUgYmRldiBpbm9kZS5cbiBcdCAqL1xuZGlmZiAtLWdpdCBhL2Jsb2NrL3BhcnRpdGlvbnMvb2YuYyBiL2Jsb2NrL3BhcnRpdGlvbnMvb2YuY1xuaW5kZXggNTM2NjRlYTA2YjY1NDAuLjYwYWEzZDY5MDZjYTFkIDEwMDY0NFxuLS0tIGEvYmxvY2svcGFydGl0aW9ucy9vZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9wYXJ0aXRpb25zL29mLmNcbkBAIC0xNSw2ICYjNDM7MTUsMTAgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9vZl9wYXJ0aXRpb24oc3RydWN0IGRldmljZV9ub2RlICpucCwgaW50IHNsb3QpXG4gXHRpbnQgYV9jZWxscyA9IG9mX25fYWRkcl9jZWxscyhucCk7XG4gXHRpbnQgc19jZWxscyA9IG9mX25fc2l6ZV9jZWxscyhucCk7XG4gXG4mIzQzO1x0LyogU2tpcCBub2RlcyB3aXRob3V0IGEgcmVnIHByb3BlcnR5IChlLmcuIG52bWVtLWxheW91dCkgKi9cbiYjNDM7XHRpZiAoIXJlZylcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcbiBcdC8qIE1ha2Ugc3VyZSByZWcgbGVuIG1hdGNoIHRoZSBleHBlY3RlZCBhZGRyIGFuZCBzaXplIGNlbGxzICovXG4gXHRpZiAobGVuIC8gc2l6ZW9mKCpyZWcpICE9IGFfY2VsbHMgJiM0Mzsgc19jZWxscylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtODIsMTQgJiM0Mzs4NiwxNSBAQCBpbnQgb2ZfcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUpXG4gXHRzbG90ID0gMTtcbiBcdC8qIFZhbGlkYXRlIHBhcml0aW9uIG9mZnNldCBhbmQgc2l6ZSAqL1xuIFx0Zm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShwYXJ0aXRpb25zX25wLCBucCkge1xuLVx0XHRpZiAodmFsaWRhdGVfb2ZfcGFydGl0aW9uKG5wLCBzbG90KSkge1xuJiM0MztcdFx0aW50IGVyciA9IHZhbGlkYXRlX29mX3BhcnRpdGlvbihucCwgc2xvdCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRcdG9mX25vZGVfcHV0KG5wKTtcbiBcdFx0XHRvZl9ub2RlX3B1dChwYXJ0aXRpb25zX25wKTtcbi1cbiBcdFx0XHRyZXR1cm4gLTE7XG4gXHRcdH1cbi1cbi1cdFx0c2xvdCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRpZiAoIWVycilcbiYjNDM7XHRcdFx0c2xvdCYjNDM7JiM0Mzs7XG4gXHR9XG4gXG4gXHRzbG90ID0gMTtcbkBAIC05OSw5ICYjNDM7MTA0LDEwIEBAIGludCBvZl9wYXJ0aXRpb24oc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSlcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuLVx0XHRhZGRfb2ZfcGFydGl0aW9uKHN0YXRlLCBzbG90LCBucCk7XG4tXG4tXHRcdHNsb3QmIzQzOyYjNDM7O1xuJiM0MztcdFx0aWYgKG9mX3Byb3BlcnR5X3ByZXNlbnQobnAsIFwmIzM0O3JlZ1wmIzM0OykpIHtcbiYjNDM7XHRcdFx0YWRkX29mX3BhcnRpdGlvbihzdGF0ZSwgc2xvdCwgbnApO1xuJiM0MztcdFx0XHRzbG90JiM0MzsmIzQzOztcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdHNlcV9idWZfcHV0cyhcdTAwMjZzdGF0ZS1cdTAwM2VwcF9idWYsIFwmIzM0O1xcblwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmNcbmluZGV4IDA0ZWJlMjkwYmM3ODRlLi4wNmNiNzg3YjA1NTlmMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmNcbkBAIC03MjMsOCAmIzQzOzcyMywxMSBAQCBzdGF0aWMgaW50IHFjYV9jaGVja19iZGFkZHIoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGNvbnN0IHN0cnVjdCBxY2FfZndfY29uZmlnICpjb1xuIFx0fVxuIFxuIFx0YmRhID0gKHN0cnVjdCBoY2lfcnBfcmVhZF9iZF9hZGRyICopc2tiLVx1MDAzZWRhdGE7XG4tXHRpZiAoIWJhY21wKFx1MDAyNmJkYS1cdTAwM2ViZGFkZHIsIFx1MDAyNmNvbmZpZy1cdTAwM2ViZGFkZHIpKVxuJiM0MztcdGlmICghYmFjbXAoXHUwMDI2YmRhLVx1MDAzZWJkYWRkciwgXHUwMDI2Y29uZmlnLVx1MDAzZWJkYWRkcikpIHtcbiBcdFx0aGNpX3NldF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfVVNFX0JEQUREUl9QUk9QRVJUWSk7XG4mIzQzO1x0XHRoY2lfc2V0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19VU0VfQkRBRERSX05WTUVNKTtcbiYjNDM7XHRcdGhjaV9zZXRfcXVpcmsoaGRldiwgSENJX1FVSVJLX0JEQUREUl9OVk1FTV9CRSk7XG4mIzQzO1x0fVxuIFxuIFx0a2ZyZWVfc2tiKHNrYik7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbmluZGV4IDg4MDhlZTc2ZTczYzA5Li5hY2U2ZjU5Yjg2MGQwOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbkBAIC03Myw2ICYjNDM7NzMsOSBAQCBzdHJ1Y3QgYmxvY2tfZGV2aWNlIHtcbiBcdGludFx0XHRcdGJkX3dyaXRlcnM7XG4gI2lmZGVmIENPTkZJR19TRUNVUklUWVxuIFx0dm9pZFx0XHRcdCpiZF9zZWN1cml0eTtcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZmRlZiBDT05GSUdfQkxLX05WTUVNXG4mIzQzO1x0c3RydWN0IG52bWVtX2RldmljZVx0KmJkX252bWVtO1xuICNlbmRpZlxuIFx0LypcbiBcdCAqIGtlZXAgdGhpcyBvdXQtb2YtbGluZSBhcyBpdCYjMzk7cyBib3RoIGJpZyBhbmQgbm90IG5lZWRlZCBpbiB0aGUgZmFzdFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5pbmRleCA5MjEzYTU3MTZmOTVhNy4uNWE3NGJkNWZiYTk4NDAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5AQCAtMzAsNiAmIzQzOzMwLDcgQEBcbiBcbiBzdHJ1Y3QgbW9kdWxlO1xuIHN0cnVjdCByZXF1ZXN0X3F1ZXVlO1xuJiM0MztzdHJ1Y3QgbnZtZW1fZGV2aWNlO1xuIHN0cnVjdCBlbGV2YXRvcl9xdWV1ZTtcbiBzdHJ1Y3QgYmxrX3RyYWNlO1xuIHN0cnVjdCByZXF1ZXN0O1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb2ZfbmV0LmggYi9pbmNsdWRlL2xpbnV4L29mX25ldC5oXG5pbmRleCBkODg3MTVhMGIzYTUyZi4uNzg1NGJhNTU1ZDlhNTUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L29mX25ldC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L29mX25ldC5oXG5AQCAtMTUsNiAmIzQzOzE1LDcgQEAgc3RydWN0IG5ldF9kZXZpY2U7XG4gZXh0ZXJuIGludCBvZl9nZXRfcGh5X21vZGUoc3RydWN0IGRldmljZV9ub2RlICpucCwgcGh5X2ludGVyZmFjZV90ICppbnRlcmZhY2UpO1xuIGV4dGVybiBpbnQgb2ZfZ2V0X21hY19hZGRyZXNzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHU4ICptYWMpO1xuIGV4dGVybiBpbnQgb2ZfZ2V0X21hY19hZGRyZXNzX252bWVtKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHU4ICptYWMpO1xuJiM0MztpbnQgb2ZfZ2V0X252bWVtX2V1aTQ4KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGNvbnN0IGNoYXIgKmNlbGxfbmFtZSwgdTggKmFkZHIpO1xuIGludCBvZl9nZXRfZXRoZGV2X2FkZHJlc3Moc3RydWN0IGRldmljZV9ub2RlICpucCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICpvZl9maW5kX25ldF9kZXZpY2VfYnlfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTtcbiAjZWxzZVxuQEAgLTM0LDYgJiM0MzszNSwxMiBAQCBzdGF0aWMgaW5saW5lIGludCBvZl9nZXRfbWFjX2FkZHJlc3NfbnZtZW0oc3RydWN0IGRldmljZV9ub2RlICpucCwgdTggKm1hYylcbiBcdHJldHVybiAtRU5PREVWO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgb2ZfZ2V0X252bWVtX2V1aTQ4KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4mIzQzO1x0XHRcdFx0ICAgICAgY29uc3QgY2hhciAqY2VsbF9uYW1lLCB1OCAqYWRkcilcbiYjNDM7e1xuJiM0MztcdHJldHVybiAtRU5PREVWO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgaW50IG9mX2dldF9ldGhkZXZfYWRkcmVzcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHJldHVybiAtRU5PREVWO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaFxuaW5kZXggMzgxODZhMjQ1ZjE0ZGIuLjE0NWFiOTRlNTE0ODJmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmhcbkBAIC0xNjEsNiAmIzQzOzE2MSwyNCBAQCBlbnVtIHtcbiBcdCAqL1xuIFx0SENJX1FVSVJLX0JEQUREUl9QUk9QRVJUWV9CUk9LRU4sXG4gXG4mIzQzO1x0LyogV2hlbiB0aGlzIHF1aXJrIGlzIHNldCwgdGhlIHB1YmxpYyBCbHVldG9vdGggYWRkcmVzc1xuJiM0MztcdCAqIGluaXRpYWxseSByZXBvcnRlZCBieSBIQ0kgUmVhZCBCRCBBZGRyZXNzIGNvbW1hbmRcbiYjNDM7XHQgKiBpcyBjb25zaWRlcmVkIGludmFsaWQuIFRoZSBwdWJsaWMgQkQgQWRkcmVzcyBjYW4gYmVcbiYjNDM7XHQgKiByZXRyaWV2ZWQgdmlhIGEgJiMzOTtsb2NhbC1iZC1hZGRyZXNzJiMzOTsgTlZNRU0gY2VsbC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoaXMgcXVpcmsgY2FuIGJlIHNldCBiZWZvcmUgaGNpX3JlZ2lzdGVyX2RldiBpcyBjYWxsZWQgb3JcbiYjNDM7XHQgKiBkdXJpbmcgdGhlIGhkZXYtXHUwMDNlc2V0dXAgdmVuZG9yIGNhbGxiYWNrLlxuJiM0MztcdCAqL1xuJiM0MztcdEhDSV9RVUlSS19VU0VfQkRBRERSX05WTUVNLFxuJiM0MztcbiYjNDM7XHQvKiBXaGVuIHRoaXMgcXVpcmsgaXMgc2V0LCB0aGUgQmx1ZXRvb3RoIERldmljZSBBZGRyZXNzIHByb3ZpZGVkIGJ5XG4mIzQzO1x0ICogdGhlICYjMzk7bG9jYWwtYmQtYWRkcmVzcyYjMzk7IE5WTUVNIGlzIHN0b3JlZCBpbiBiaWctZW5kaWFuIG9yZGVyLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGhpcyBxdWlyayBjYW4gYmUgc2V0IGJlZm9yZSBoY2lfcmVnaXN0ZXJfZGV2IGlzIGNhbGxlZCBvclxuJiM0MztcdCAqIGR1cmluZyB0aGUgaGRldi1cdTAwM2VzZXR1cCB2ZW5kb3IgY2FsbGJhY2suXG4mIzQzO1x0ICovXG4mIzQzO1x0SENJX1FVSVJLX0JEQUREUl9OVk1FTV9CRSxcbiYjNDM7XG4gXHQvKiBXaGVuIHRoaXMgcXVpcmsgaXMgc2V0LCB0aGUgZHVwbGljYXRlIGZpbHRlcmluZyBkdXJpbmdcbiBcdCAqIHNjYW5uaW5nIGlzIGJhc2VkIG9uIEJsdWV0b290aCBkZXZpY2VzIGFkZHJlc3Nlcy4gVG8gYWxsb3dcbiBcdCAqIFJTU0kgYmFzZWQgdXBkYXRlcywgcmVzdGFydCBzY2FubmluZyBpZiBuZWVkZWQuXG5kaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfc3luYy5jIGIvbmV0L2JsdWV0b290aC9oY2lfc3luYy5jXG5pbmRleCAzYmU4YzM1ODFjNmNhYS4uNzM0ZWVkMjBkZTA0NGIgMTAwNjQ0XG4tLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ibHVldG9vdGgvaGNpX3N5bmMuY1xuQEAgLTcsNiAmIzQzOzcsNyBAQFxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfbmV0LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2JsdWV0b290aC9oY2lfY29yZS5oXHUwMDNlXG5AQCAtMzU5Myw2ICYjNDM7MzU5NCwzNyBAQCBpbnQgaGNpX3Bvd2VyZWRfdXBkYXRlX3N5bmMoc3RydWN0IGhjaV9kZXYgKmhkZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBoY2lfZGV2X2dldF9iZF9hZGRyX2Zyb21fbnZtZW0gLSBHZXQgdGhlIEJsdWV0b290aCBEZXZpY2UgQWRkcmVzc1xuJiM0MzsgKlx0XHRcdFx0ICAgIChCRF9BRERSKSBmb3IgYSBIQ0kgZGV2aWNlIGZyb21cbiYjNDM7ICpcdFx0XHRcdCAgICBhbiBOVk1FTSBjZWxsLlxuJiM0MzsgKiBAaGRldjpcdFRoZSBIQ0kgZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFNlYXJjaCBmb3IgJiMzOTtsb2NhbC1iZC1hZGRyZXNzJiMzOTsgTlZNRU0gY2VsbCBpbiB0aGUgZGV2aWNlIGZpcm13YXJlIG5vZGUuXG4mIzQzOyAqXG4mIzQzOyAqIEFsbC16ZXJvIEJEIGFkZHJlc3NlcyBhcmUgcmVqZWN0ZWQgKHVucHJvdmlzaW9uZWQpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBoY2lfZGV2X2dldF9iZF9hZGRyX2Zyb21fbnZtZW0oc3RydWN0IGhjaV9kZXYgKmhkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2X29mX25vZGUoaGRldi1cdTAwM2VkZXYucGFyZW50KTtcbiYjNDM7XHR1OCBiYVtzaXplb2YoYmRhZGRyX3QpXTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoIW5wKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdGVyciA9IG9mX2dldF9udm1lbV9ldWk0OChucCwgXCYjMzQ7bG9jYWwtYmQtYWRkcmVzc1wmIzM0OywgYmEpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX0JEQUREUl9OVk1FTV9CRSkpXG4mIzQzO1x0XHRiYXN3YXAoXHUwMDI2aGRldi1cdTAwM2VwdWJsaWNfYWRkciwgKGJkYWRkcl90ICopYmEpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGJhY3B5KFx1MDAyNmhkZXYtXHUwMDNlcHVibGljX2FkZHIsIChiZGFkZHJfdCAqKWJhKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaGNpX2Rldl9nZXRfYmRfYWRkcl9mcm9tX3Byb3BlcnR5IC0gR2V0IHRoZSBCbHVldG9vdGggRGV2aWNlIEFkZHJlc3NcbiAgKlx0XHRcdFx0ICAgICAgIChCRF9BRERSKSBmb3IgYSBIQ0kgZGV2aWNlIGZyb21cbkBAIC01MDcyLDEyICYjNDM7NTEwNCwxNyBAQCBzdGF0aWMgaW50IGhjaV9kZXZfc2V0dXBfc3luYyhzdHJ1Y3QgaGNpX2RldiAqaGRldilcbiBcdCAqIGl0cyBzZXR1cCBjYWxsYmFjay5cbiBcdCAqL1xuIFx0aW52YWxpZF9iZGFkZHIgPSBoY2lfdGVzdF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfSU5WQUxJRF9CREFERFIpIHx8XG4tXHRcdFx0IGhjaV90ZXN0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19VU0VfQkRBRERSX1BST1BFUlRZKTtcbiYjNDM7XHRcdFx0IGhjaV90ZXN0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19VU0VfQkRBRERSX1BST1BFUlRZKSB8fFxuJiM0MztcdFx0XHQgaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX1VTRV9CREFERFJfTlZNRU0pO1xuIFx0aWYgKCFyZXQpIHtcbiBcdFx0aWYgKGhjaV90ZXN0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19VU0VfQkRBRERSX1BST1BFUlRZKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFiYWNtcChcdTAwMjZoZGV2LVx1MDAzZXB1YmxpY19hZGRyLCBCREFERFJfQU5ZKSlcbiBcdFx0XHRoY2lfZGV2X2dldF9iZF9hZGRyX2Zyb21fcHJvcGVydHkoaGRldik7XG4gXG4mIzQzO1x0XHRpZiAoaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX1VTRV9CREFERFJfTlZNRU0pIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICFiYWNtcChcdTAwMjZoZGV2LVx1MDAzZXB1YmxpY19hZGRyLCBCREFERFJfQU5ZKSlcbiYjNDM7XHRcdFx0aGNpX2Rldl9nZXRfYmRfYWRkcl9mcm9tX252bWVtKGhkZXYpO1xuJiM0MztcbiBcdFx0aWYgKGludmFsaWRfYmRhZGRyIFx1MDAyNlx1MDAyNiBiYWNtcChcdTAwMjZoZGV2LVx1MDAzZXB1YmxpY19hZGRyLCBCREFERFJfQU5ZKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGhkZXYtXHUwMDNlc2V0X2JkYWRkcikge1xuIFx0XHRcdHJldCA9IGhkZXYtXHUwMDNlc2V0X2JkYWRkcihoZGV2LCBcdTAwMjZoZGV2LVx1MDAzZXB1YmxpY19hZGRyKTtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9vZl9uZXQuYyBiL25ldC9jb3JlL29mX25ldC5jXG5pbmRleCA5M2VhNDI1YjkyNDhhMi4uMTFjMWFjY2ExNTEyNjYgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9vZl9uZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvb2ZfbmV0LmNcbkBAIC02MSw5ICYjNDM7NjEsNyBAQCBzdGF0aWMgaW50IG9mX2dldF9tYWNfYWRkcihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBjb25zdCBjaGFyICpuYW1lLCB1OCAqYWRkcilcbiBpbnQgb2ZfZ2V0X21hY19hZGRyZXNzX252bWVtKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHU4ICphZGRyKVxuIHtcbiBcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKG5wKTtcbi1cdHN0cnVjdCBudm1lbV9jZWxsICpjZWxsO1xuLVx0Y29uc3Qgdm9pZCAqbWFjO1xuLVx0c2l6ZV90IGxlbjtcbiYjNDM7XHR1OCBtYWNbRVRIX0FMRU5dIF9fYWxpZ25lZChzaXplb2YodTE2KSk7XG4gXHRpbnQgcmV0O1xuIFxuIFx0LyogVHJ5IGxvb2t1cCBieSBkZXZpY2UgZmlyc3QsIHRoZXJlIG1pZ2h0IGJlIGEgbnZtZW1fY2VsbF9sb29rdXBcbkBAIC03NSwyNyAmIzQzOzczLDU0IEBAIGludCBvZl9nZXRfbWFjX2FkZHJlc3NfbnZtZW0oc3RydWN0IGRldmljZV9ub2RlICpucCwgdTggKmFkZHIpXG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4tXHRjZWxsID0gb2ZfbnZtZW1fY2VsbF9nZXQobnAsIFwmIzM0O21hYy1hZGRyZXNzXCYjMzQ7KTtcbiYjNDM7XHRyZXQgPSBvZl9nZXRfbnZtZW1fZXVpNDgobnAsIFwmIzM0O21hYy1hZGRyZXNzXCYjMzQ7LCBtYWMpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobWFjKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRldGhlcl9hZGRyX2NvcHkoYWRkciwgbWFjKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKG9mX2dldF9tYWNfYWRkcmVzc19udm1lbSk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogb2ZfZ2V0X252bWVtX2V1aTQ4IC0gUmVhZCBhIDYtYnl0ZSBFVUktNDggYWRkcmVzcyBmcm9tIGEgbmFtZWQgTlZNRU0gY2VsbC5cbiYjNDM7ICogQG5wOlx0XHREZXZpY2Ugbm9kZSB0byBsb29rIHVwIHRoZSBOVk1FTSBjZWxsIGZyb20uXG4mIzQzOyAqIEBjZWxsX25hbWU6XHROYW1lIG9mIHRoZSBOVk1FTSBjZWxsIChlLmcuIFwmIzM0O21hYy1hZGRyZXNzXCYjMzQ7LCBcJiMzNDtsb2NhbC1iZC1hZGRyZXNzXCYjMzQ7KS5cbiYjNDM7ICogQGFkZHI6XHRPdXRwdXQgYnVmZmVyIGZvciB0aGUgNi1ieXRlIGFkZHJlc3MuXG4mIzQzOyAqXG4mIzQzOyAqIFJlYWRzIHRoZSBuYW1lZCBOVk1FTSBjZWxsIGFuZCB2YWxpZGF0ZXMgdGhhdCBpdCBjb250YWlucyBhIG5vbi16ZXJvIDYtYnl0ZVxuJiM0MzsgKiBhZGRyZXNzLiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO2ludCBvZl9nZXRfbnZtZW1fZXVpNDgoc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3QgY2hhciAqY2VsbF9uYW1lLCB1OCAqYWRkcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBudm1lbV9jZWxsICpjZWxsO1xuJiM0MztcdGNvbnN0IHZvaWQgKmV1aTQ4O1xuJiM0MztcdHNpemVfdCBsZW47XG4mIzQzO1xuJiM0MztcdGNlbGwgPSBvZl9udm1lbV9jZWxsX2dldChucCwgY2VsbF9uYW1lKTtcbiBcdGlmIChJU19FUlIoY2VsbCkpXG4gXHRcdHJldHVybiBQVFJfRVJSKGNlbGwpO1xuIFxuLVx0bWFjID0gbnZtZW1fY2VsbF9yZWFkKGNlbGwsIFx1MDAyNmxlbik7XG4mIzQzO1x0ZXVpNDggPSBudm1lbV9jZWxsX3JlYWQoY2VsbCwgXHUwMDI2bGVuKTtcbiBcdG52bWVtX2NlbGxfcHV0KGNlbGwpO1xuIFxuLVx0aWYgKElTX0VSUihtYWMpKVxuLVx0XHRyZXR1cm4gUFRSX0VSUihtYWMpO1xuJiM0MztcdGlmIChJU19FUlIoZXVpNDgpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoZXVpNDgpO1xuIFxuLVx0aWYgKGxlbiAhPSBFVEhfQUxFTiB8fCAhaXNfdmFsaWRfZXRoZXJfYWRkcihtYWMpKSB7XG4tXHRcdGtmcmVlKG1hYyk7XG4mIzQzO1x0aWYgKGxlbiAhPSBFVEhfQUxFTiB8fCAhbWVtY2hyX2ludihldWk0OCwgMCwgRVRIX0FMRU4pKSB7XG4mIzQzO1x0XHRrZnJlZShldWk0OCk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuLVx0bWVtY3B5KGFkZHIsIG1hYywgRVRIX0FMRU4pO1xuLVx0a2ZyZWUobWFjKTtcbiYjNDM7XHRtZW1jcHkoYWRkciwgZXVpNDgsIEVUSF9BTEVOKTtcbiYjNDM7XHRrZnJlZShldWk0OCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4tRVhQT1JUX1NZTUJPTChvZl9nZXRfbWFjX2FkZHJlc3NfbnZtZW0pO1xuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChvZl9nZXRfbnZtZW1fZXVpNDgpO1xuIFxuIC8qKlxuICAqIG9mX2dldF9tYWNfYWRkcmVzcygpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDk6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX05WTUVNJiMzNDssCiAgICAmIzM0O0JUX0hDSVVBUlRfUUNBJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmxrX252bWVtX3JlZ19yZWFkJiMzNDssCiAgICAmIzM0O2Jsa19udm1lbV9hZGQmIzM0OywKICAgICYjMzQ7aGNpX2Rldl9nZXRfYmRfYWRkcl9mcm9tX252bWVtJiMzNDssCiAgICAmIzM0O29mX2dldF9udm1lbV9ldWk0OCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGJsb2NrIGRldmljZSBOVk1FTSBwcm92aWRlciB3aGljaCBhbGxvd3MgYmxvY2sgZGV2aWNlcyB0byBhY3QgYXMgTlZNRU0gcHJvdmlkZXJzLiBJdCBhbHNvIGFkZHMgbG9naWMgdG8gcmVhZCBCbHVldG9vdGggZGV2aWNlIGFkZHJlc3NlcyBhbmQgTUFDIGFkZHJlc3NlcyBmcm9tIE5WTUVNIGNlbGxzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBibG9jaywgbmV0LCBhbmQgYmx1ZXRvb3RoIHN1YnN5c3RlbXMgdGhhdCBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoZS5nLiwgd2hlbiBhZGRpbmcgYSBibG9jayBkZXZpY2Ugb3Igc2V0dGluZyB1cCBhIHZpcnR1YWwgSENJIGRldmljZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBxdWlya3MpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1MzZmMGRlMjZlMjY1YTYyOGY3NjVkMDUyNDAzMTNlYzRlZjkyYmM3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdW4gMjkgMDk6MjY6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tYy1jYXJkLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tYy1jYXJkLnlhbWwKaW5kZXggYTYxZDZjOTZkZjc1OTEuLmNhOTA3YWQ3MzA5NTkyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tYy1jYXJkLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21tYy9tbWMtY2FyZC55YW1sCkBAIC00MCw2ICYjNDM7NDAsOSBAQCBwYXR0ZXJuUHJvcGVydGllczoKICAgICAgICAgY29udGFpbnM6CiAgICAgICAgICAgY29uc3Q6IGZpeGVkLXBhcnRpdGlvbnMKIAomIzQzOyAgICAgIG52bWVtLWxheW91dDoKJiM0MzsgICAgICAgICRyZWY6IC9zY2hlbWFzL252bWVtL2xheW91dHMvbnZtZW0tbGF5b3V0LnlhbWwKJiM0MzsKIHJlcXVpcmVkOgogICAtIGNvbXBhdGlibGUKICAgLSByZWcKQEAgLTg2LDYgJiM0Mzs4OSwzMiBAQCBleGFtcGxlczoKICAgICAgICAgICAgICAgICAgICAgcmVhZC1vbmx5OwogICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICB9OwomIzQzOwomIzQzOyAgICAgICAgICAgIHBhcnRpdGlvbnMtYm9vdDIgewomIzQzOyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gJiMzNDtmaXhlZC1wYXJ0aXRpb25zJiMzNDs7CiYjNDM7CiYjNDM7ICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICAgICAgbnZtZW0tbGF5b3V0IHsKJiM0MzsgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O2ZpeGVkLWxheW91dCYjMzQ7OwomIzQzOwomIzQzOyAgICAgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICAgICAgICAgIG1hYy1hZGRyQDQ0MDAgewomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O21hYy1iYXNlJiMzNDs7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gJmx0OzB4NDQwMCAweDYmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICNudm1lbS1jZWxsLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAgICAgfTsKJiM0MzsKJiM0MzsgICAgICAgICAgICAgICAgICAgIGJkLWFkZHJANTQwMCB7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7bWFjLWJhc2UmIzM0OzsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSAmbHQ7MHg1NDAwIDB4NiZndDs7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgI252bWVtLWNlbGwtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgICAgIH07CiAgICAgICAgIH07CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9ibHVldG9vdGgvcWNvbSxibHVldG9vdGgtY29tbW9uLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2JsdWV0b290aC9xY29tLGJsdWV0b290aC1jb21tb24ueWFtbAppbmRleCBjOGU5YzU1YzFhZmI0Yy4uN2NiMjhmMzBjOWFmMDMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYmx1ZXRvb3RoL3Fjb20sYmx1ZXRvb3RoLWNvbW1vbi55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYmx1ZXRvb3RoL3Fjb20sYmx1ZXRvb3RoLWNvbW1vbi55YW1sCkBAIC0yMiw0ICYjNDM7MjIsMTMgQEAgcHJvcGVydGllczoKICAgICBkZXNjcmlwdGlvbjoKICAgICAgIGJvb3QgZmlybXdhcmUgaXMgaW5jb3JyZWN0bHkgcGFzc2luZyB0aGUgYWRkcmVzcyBpbiBiaWctZW5kaWFuIG9yZGVyCiAKJiM0MzsgIG52bWVtLWNlbGxzOgomIzQzOyAgICBtYXhJdGVtczogMQomIzQzOyAgICBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICBOdm1lbSBkYXRhIGNlbGwgdGhhdCBjb250YWlucyBhIDYgYnl0ZSBCRCBhZGRyZXNzIHdpdGggdGhlIG1vc3QKJiM0MzsgICAgICBzaWduaWZpY2FudCBieXRlIGZpcnN0IChiaWctZW5kaWFuKS4KJiM0MzsKJiM0MzsgIG52bWVtLWNlbGwtbmFtZXM6CiYjNDM7ICAgIGNvbnN0OiBsb2NhbC1iZC1hZGRyZXNzCiYjNDM7CiBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9xY29tLGF0aDEway55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9xY29tLGF0aDEway55YW1sCmluZGV4IGQ0ZjRkNzJlZTBkMzg4Li43ZjlkMTZjYjdjMTQzMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9xY29tLGF0aDEway55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3MvcWNvbSxhdGgxMGsueWFtbApAQCAtOTIsNiAmIzQzOzkyLDIyIEBAIHByb3BlcnRpZXM6CiAKICAgaWVlZTgwMjExLWZyZXEtbGltaXQ6IHRydWUKIAomIzQzOyAgbnZtZW0tY2VsbHM6CiYjNDM7ICAgIG1pbkl0ZW1zOiAxCiYjNDM7ICAgIG1heEl0ZW1zOiAzCiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIFJlZmVyZW5jZXMgdG8gbnZtZW0gY2VsbHMgZm9yIE1BQyBhZGRyZXNzIGFuZC9vciBjYWxpYnJhdGlvbiBkYXRhLgomIzQzOyAgICAgIFN1cHBvcnRlZCBjZWxsIG5hbWVzIGFyZSBtYWMtYWRkcmVzcywgY2FsaWJyYXRpb24sIGFuZCBwcmUtY2FsaWJyYXRpb24uCiYjNDM7CiYjNDM7ICBudm1lbS1jZWxsLW5hbWVzOgomIzQzOyAgICBtaW5JdGVtczogMQomIzQzOyAgICBtYXhJdGVtczogMwomIzQzOyAgICBpdGVtczoKJiM0MzsgICAgICBlbnVtOgomIzQzOyAgICAgICAgLSBtYWMtYWRkcmVzcwomIzQzOyAgICAgICAgLSBjYWxpYnJhdGlvbgomIzQzOyAgICAgICAgLSBwcmUtY2FsaWJyYXRpb24KJiM0MzsKICAgcWNvbSxjYWxpYnJhdGlvbi1kYXRhOgogICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3VpbnQ4LWFycmF5CiAgICAgZGVzY3JpcHRpb246CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vcXJiMjIxMC1hcmR1aW5vLWltb2xhLmR0cyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9xcmIyMjEwLWFyZHVpbm8taW1vbGEuZHRzCmluZGV4IGJmMDg4ZmE5ODA3ZjA0Li4xMjhjN2E3ZTc2YjViMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL3FyYjIyMTAtYXJkdWluby1pbW9sYS5kdHMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL3FyYjIyMTAtYXJkdWluby1pbW9sYS5kdHMKQEAgLTQwOSw3ICYjNDM7NDA5LDQwIEBAICZhbXA7c2RoY18xIHsKIAluby1zZGlvOwogCW5vLXNkOwogCiYjNDM7CSNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOwkjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsKIAlzdGF0dXMgPSAmIzM0O29rYXkmIzM0OzsKJiM0MzsKJiM0MzsJY2FyZEAwIHsKJiM0MzsJCWNvbXBhdGlibGUgPSAmIzM0O21tYy1jYXJkJiMzNDs7CiYjNDM7CQlyZWcgPSAmbHQ7MCZndDs7CiYjNDM7CiYjNDM7CQlwYXJ0aXRpb25zLWJvb3QxIHsKJiM0MzsJCQljb21wYXRpYmxlID0gJiMzNDtmaXhlZC1wYXJ0aXRpb25zJiMzNDs7CiYjNDM7CiYjNDM7CQkJI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7CQkJI3NpemUtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7CiYjNDM7CQkJbnZtZW0tbGF5b3V0IHsKJiM0MzsJCQkJY29tcGF0aWJsZSA9ICYjMzQ7Zml4ZWQtbGF5b3V0JiMzNDs7CiYjNDM7CQkJCSNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOwkJCQkjc2l6ZS1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsKJiM0MzsJCQkJd2lmaV9tYWNfYWRkcjogbWFjLWFkZHJANDQwMCB7CiYjNDM7CQkJCQljb21wYXRpYmxlID0gJiMzNDttYWMtYmFzZSYjMzQ7OwomIzQzOwkJCQkJcmVnID0gJmx0OzB4NDQwMCAweDYmZ3Q7OwomIzQzOwkJCQkJI252bWVtLWNlbGwtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7CQkJCX07CiYjNDM7CiYjNDM7CQkJCWJkX2FkZHI6IGJkLWFkZHJANTQwMCB7CiYjNDM7CQkJCQljb21wYXRpYmxlID0gJiMzNDttYWMtYmFzZSYjMzQ7OwomIzQzOwkJCQkJcmVnID0gJmx0OzB4NTQwMCAweDYmZ3Q7OwomIzQzOwkJCQkJI252bWVtLWNlbGwtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7CQkJCX07CiYjNDM7CQkJfTsKJiM0MzsJCX07CiYjNDM7CX07CiB9OwogCiAmYW1wO3NwaTUgewpAQCAtNTEyLDYgJiM0Mzs1NDUsOSBAQCBibHVldG9vdGggewogCQl2ZGRjaDAtc3VwcGx5ID0gJmx0OyZhbXA7cG00MTI1X2wyMiZndDs7CiAJCWVuYWJsZS1ncGlvcyA9ICZsdDsmYW1wO3RsbW0gODcgR1BJT19BQ1RJVkVfSElHSCZndDs7CiAJCW1heC1zcGVlZCA9ICZsdDszMDAwMDAwJmd0OzsKJiM0MzsKJiM0MzsJCW52bWVtLWNlbGxzID0gJmx0OyZhbXA7YmRfYWRkciAwJmd0OzsKJiM0MzsJCW52bWVtLWNlbGwtbmFtZXMgPSAmIzM0O2xvY2FsLWJkLWFkZHJlc3MmIzM0OzsKIAl9OwogfTsKIApAQCAtNTU3LDYgJiM0Mzs1OTMsOSBAQCAmYW1wO3dpZmkgewogCXFjb20sYXRoMTBrLWNhbGlicmF0aW9uLXZhcmlhbnQgPSAmIzM0O0FyZHVpbm9JbW9sYSYjMzQ7OwogCWZpcm13YXJlLW5hbWUgPSAmIzM0O3FjbTIyOTAmIzM0OzsKIAomIzQzOwludm1lbS1jZWxscyA9ICZsdDsmYW1wO3dpZmlfbWFjX2FkZHIgMCZndDs7CiYjNDM7CW52bWVtLWNlbGwtbmFtZXMgPSAmIzM0O21hYy1hZGRyZXNzJiMzNDs7CiYjNDM7CiAJc3RhdHVzID0gJiMzNDtva2F5JiMzNDs7CiB9OwogCmRpZmYgLS1naXQgYS9ibG9jay9LY29uZmlnIGIvYmxvY2svS2NvbmZpZwppbmRleCA3MGU0YTY2ZDk0MWZmNi4uYWVjNWQ5ZmMxM2EzZDMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svS2NvbmZpZwpAQCAtMjA5LDYgJiM0MzsyMDksMTUgQEAgY29uZmlnIEJMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDSwogCSAgYnkgZmFsbGluZyBiYWNrIHRvIHRoZSBrZXJuZWwgY3J5cHRvIEFQSSB3aGVuIGlubGluZQogCSAgZW5jcnlwdGlvbiBoYXJkd2FyZSBpcyBub3QgcHJlc2VudC4KIAomIzQzO2NvbmZpZyBCTEtfTlZNRU0KJiM0MzsJYm9vbCAmIzM0O0Jsb2NrIGRldmljZSBOVk1FTSBwcm92aWRlciYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gT0YKJiM0MzsJZGVwZW5kcyBvbiBOVk1FTQomIzQzOwloZWxwCiYjNDM7CSAgQWxsb3cgYmxvY2sgZGV2aWNlcyAob3IgcGFydGl0aW9ucykgdG8gYWN0IGFzIE5WTUVNIHByb3ZpZGVycywKJiM0MzsJICB0eXBpY2FsbHkgdXNlZCB3aXRoIGVNTUMgdG8gc3RvcmUgTUFDIGFkZHJlc3NlcyBvciBXaS1GaQomIzQzOwkgIGNhbGlicmF0aW9uIGRhdGEgb24gZW1iZWRkZWQgZGV2aWNlcy4KJiM0MzsKIHNvdXJjZSAmIzM0O2Jsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZyYjMzQ7CiAKIGNvbmZpZyBCTEtfUE0KZGlmZiAtLWdpdCBhL2Jsb2NrL01ha2VmaWxlIGIvYmxvY2svTWFrZWZpbGUKaW5kZXggZTdiZDMyMGUzZDY5NzEuLjgyMDAyOTdmYmNiYWIzIDEwMDY0NAotLS0gYS9ibG9jay9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9NYWtlZmlsZQpAQCAtMzksMyAmIzQzOzM5LDQgQEAgb2JqLSQoQ09ORklHX0JMS19JTkxJTkVfRU5DUllQVElPTikJJiM0Mzs9IGJsay1jcnlwdG8ubyBibGstY3J5cHRvLXByb2ZpbGUubyBcCiAJCQkJCSAgIGJsay1jcnlwdG8tc3lzZnMubwogb2JqLSQoQ09ORklHX0JMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDSykJJiM0Mzs9IGJsay1jcnlwdG8tZmFsbGJhY2subwogb2JqLSQoQ09ORklHX0JMT0NLX0hPTERFUl9ERVBSRUNBVEVEKQkmIzQzOz0gaG9sZGVyLm8KJiM0MztvYmotJChDT05GSUdfQkxLX05WTUVNKSAgICAgICAgICAgICAgICAmIzQzOz0gYmxrLW52bWVtLm8KZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1udm1lbS5jIGIvYmxvY2svYmxrLW52bWVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjRiMzVhNzQyNTUwNTkzCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLW52bWVtLmMKQEAgLTAsMCAmIzQzOzEsMTExIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKJiM0MzsvKgomIzQzOyAqIGJsb2NrIGRldmljZSBOVk1FTSBwcm92aWRlcgomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI0IERhbmllbCBHb2xsZSAmbHQ7ZGFuaWVsQG1ha3JvdG9waWEub3JnJmd0OwomIzQzOyAqIENvcHlyaWdodCAoYykgUXVhbGNvbW0gVGVjaG5vbG9naWVzLCBJbmMuIGFuZC9vciBpdHMgc3Vic2lkaWFyaWVzLgomIzQzOyAqCiYjNDM7ICogVXNlZnVsIG9uIGRldmljZXMgdXNpbmcgYSBwYXJ0aXRpb24gb24gYW4gZU1NQyBmb3IgTUFDIGFkZHJlc3NlcyBvcgomIzQzOyAqIFdpLUZpIGNhbGlicmF0aW9uIEVFUFJPTSBkYXRhLgomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9maWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L252bWVtLXByb3ZpZGVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L252bWVtLWNvbnN1bWVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2VtYXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHJvcGVydHkuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2Jsay5oJiMzNDsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGJsa19udm1lbV9yZWdfcmVhZCh2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgZnJvbSwgdm9pZCAqdmFsLCBzaXplX3QgYnl0ZXMpCiYjNDM7ewomIzQzOwlkZXZfdCBkZXZ0ID0gKGRldl90KSh1aW50cHRyX3QpcHJpdjsKJiM0MzsJc2l6ZV90IGJ5dGVzX2xlZnQgPSBieXRlczsKJiM0MzsJbG9mZl90IHBvcyA9IGZyb207CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlzdHJ1Y3QgZmlsZSAqYmRldl9maWxlIF9fZnJlZShmcHV0KSA9CiYjNDM7CQliZGV2X2ZpbGVfb3Blbl9ieV9kZXYoZGV2dCwgQkxLX09QRU5fUkVBRCwgTlVMTCwgTlVMTCk7CiYjNDM7CWlmIChJU19FUlIoYmRldl9maWxlKSkKJiM0MzsJCXJldHVybiBQVFJfRVJSKGJkZXZfZmlsZSk7CiYjNDM7CiYjNDM7CXdoaWxlIChieXRlc19sZWZ0KSB7CiYjNDM7CQlwZ29mZl90IGZfaW5kZXggPSBwb3MgJmd0OyZndDsgUEFHRV9TSElGVDsKJiM0MzsJCXN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CQlzaXplX3QgZm9saW9fb2ZmOwomIzQzOwkJc2l6ZV90IHRvX3JlYWQ7CiYjNDM7CiYjNDM7CQlmb2xpbyA9IHJlYWRfbWFwcGluZ19mb2xpbyhiZGV2X2ZpbGUtJmd0O2ZfbWFwcGluZywgZl9pbmRleCwgTlVMTCk7CiYjNDM7CQlpZiAoSVNfRVJSKGZvbGlvKSkgewomIzQzOwkJCXJldCA9IFBUUl9FUlIoZm9saW8pOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZm9saW9fb2ZmID0gb2Zmc2V0X2luX2ZvbGlvKGZvbGlvLCBwb3MpOwomIzQzOwkJdG9fcmVhZCA9IG1pbihieXRlc19sZWZ0LCBmb2xpb19zaXplKGZvbGlvKSAtIGZvbGlvX29mZik7CiYjNDM7CQltZW1jcHlfZnJvbV9mb2xpbyh2YWwsIGZvbGlvLCBmb2xpb19vZmYsIHRvX3JlYWQpOwomIzQzOwkJcG9zICYjNDM7PSB0b19yZWFkOwomIzQzOwkJYnl0ZXNfbGVmdCAtPSB0b19yZWFkOwomIzQzOwkJdmFsICYjNDM7PSB0b19yZWFkOwomIzQzOwkJZm9saW9fcHV0KGZvbGlvKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztpbnQgYmxrX252bWVtX2FkZChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtiZGV2LSZndDtiZF9kZXZpY2U7CiYjNDM7CXN0cnVjdCBudm1lbV9jb25maWcgY29uZmlnID0ge307CiYjNDM7CiYjNDM7CS8qIHNraXAgZGV2aWNlcyB3aGljaCBkbyBub3QgaGF2ZSBhIGRldmljZSB0cmVlIG5vZGUgKi8KJiM0MzsJaWYgKCFkZXZfb2Zfbm9kZShkZXYpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIHNraXAgZGV2aWNlcyB3aXRob3V0IGFuIG52bWVtIGxheW91dCBkZWZpbmVkICovCiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQgX19mcmVlKGRldmljZV9ub2RlKSA9CiYjNDM7CQlvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXZfb2Zfbm9kZShkZXYpLCAmIzM0O252bWVtLWxheW91dCYjMzQ7KTsKJiM0MzsJaWYgKCFjaGlsZCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBza2lwIGJsb2NrIGRldmljZSB0b28gbGFyZ2UgdG8gYmUgcmVwcmVzZW50ZWQgYXMgTlZNRU0gZGV2aWNlcywKJiM0MzsJICogbnZtZW1fY29uZmlnLnNpemUgaXMgYSBzaWduZWQgaW50CiYjNDM7CSAqLwomIzQzOwlpZiAoYmRldl9ucl9ieXRlcyhiZGV2KSAmZ3Q7IElOVF9NQVgpIHsKJiM0MzsJCWRldl93YXJuKGRldiwgJiMzNDtibG9jayBkZXZpY2UgdG9vIGxhcmdlIHRvIGJlIGFuIE5WTUVNIHByb3ZpZGVyXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwljb25maWcuaWQgPSBOVk1FTV9ERVZJRF9OT05FOwomIzQzOwljb25maWcuZGV2ID0gZGV2OwomIzQzOwljb25maWcubmFtZSA9IGRldl9uYW1lKGRldik7CiYjNDM7CWNvbmZpZy5vd25lciA9IFRISVNfTU9EVUxFOwomIzQzOwljb25maWcucHJpdiA9ICh2b2lkICopKHVpbnRwdHJfdClkZXYtJmd0O2RldnQ7CiYjNDM7CWNvbmZpZy5yZWdfcmVhZCA9IGJsa19udm1lbV9yZWdfcmVhZDsKJiM0MzsJY29uZmlnLnNpemUgPSBiZGV2X25yX2J5dGVzKGJkZXYpOwomIzQzOwljb25maWcud29yZF9zaXplID0gMTsKJiM0MzsJY29uZmlnLnN0cmlkZSA9IDE7CiYjNDM7CWNvbmZpZy5yZWFkX29ubHkgPSB0cnVlOwomIzQzOwljb25maWcucm9vdF9vbmx5ID0gdHJ1ZTsKJiM0MzsJY29uZmlnLmlnbm9yZV93cCA9IHRydWU7CiYjNDM7CWNvbmZpZy5vZl9ub2RlID0gdG9fb2Zfbm9kZShkZXYtJmd0O2Z3bm9kZSk7CiYjNDM7CiYjNDM7CWJkZXYtJmd0O2JkX252bWVtID0gbnZtZW1fcmVnaXN0ZXIoJmFtcDtjb25maWcpOwomIzQzOwlpZiAoSVNfRVJSKGJkZXYtJmd0O2JkX252bWVtKSkgewomIzQzOwkJaW50IHJldCA9IFBUUl9FUlIoYmRldi0mZ3Q7YmRfbnZtZW0pOwomIzQzOwomIzQzOwkJYmRldi0mZ3Q7YmRfbnZtZW0gPSBOVUxMOwomIzQzOwkJZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgTlZNRU0gZGV2aWNlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGJsa19udm1lbV9kZWwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKJiM0Mzt7CiYjNDM7CW52bWVtX3VucmVnaXN0ZXIoYmRldi0mZ3Q7YmRfbnZtZW0pOwomIzQzOwliZGV2LSZndDtiZF9udm1lbSA9IE5VTEw7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLmggYi9ibG9jay9ibGsuaAppbmRleCAyNWFmOGFjNWVmMGY3Ny4uZGFkOGYwZDdhMjE4ZWQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay5oCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay5oCkBAIC04MTAsNCAmIzQzOzgxMCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYmxrX2RlYnVnZnNfdW5sb2NrKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAogCW1lbWFsbG9jX25vaW9fcmVzdG9yZShtZW1mbGFncyk7CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0JMS19OVk1FTQomIzQzO2ludCBibGtfbnZtZW1fYWRkKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpOwomIzQzO3ZvaWQgYmxrX252bWVtX2RlbChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGJsa19udm1lbV9hZGQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikgeyByZXR1cm4gMDsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBibGtfbnZtZW1fZGVsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpIHt9CiYjNDM7I2VuZGlmCiYjNDM7CiAjZW5kaWYgLyogQkxLX0lOVEVSTkFMX0ggKi8KZGlmZiAtLWdpdCBhL2Jsb2NrL2dlbmhkLmMgYi9ibG9jay9nZW5oZC5jCmluZGV4IGY4NGI2YTM1NWI1NzRhLi4wYzljNWU1ZWE3YmFmZiAxMDA2NDQKLS0tIGEvYmxvY2svZ2VuaGQuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9nZW5oZC5jCkBAIC00MjEsNiAmIzQzOzQyMSw4IEBAIHN0YXRpYyB2b2lkIGFkZF9kaXNrX2ZpbmFsKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogCQkgKi8KIAkJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoZGRldiwgMCk7CiAJCWRpc2tfdWV2ZW50KGRpc2ssIEtPQkpfQUREKTsKJiM0MzsKJiM0MzsJCWJsa19udm1lbV9hZGQoZGlzay0mZ3Q7cGFydDApOwogCX0KIAogCWJsa19hcHBseV9iZGlfbGltaXRzKGRpc2stJmd0O2JkaSwgJmFtcDtkaXNrLSZndDtxdWV1ZS0mZ3Q7bGltaXRzKTsKQEAgLTcwNCw2ICYjNDM7NzA2LDggQEAgc3RhdGljIHZvaWQgX19kZWxfZ2VuZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIAogCWRpc2tfZGVsX2V2ZW50cyhkaXNrKTsKIAomIzQzOwlibGtfbnZtZW1fZGVsKGRpc2stJmd0O3BhcnQwKTsKJiM0MzsKIAkvKgogCSAqIFByZXZlbnQgbmV3IG9wZW5lcnMgYnkgdW5saW5rZWQgdGhlIGJkZXYgaW5vZGUuCiAJICovCmRpZmYgLS1naXQgYS9ibG9jay9wYXJ0aXRpb25zL29mLmMgYi9ibG9jay9wYXJ0aXRpb25zL29mLmMKaW5kZXggNTM2NjRlYTA2YjY1NDAuLjYwYWEzZDY5MDZjYTFkIDEwMDY0NAotLS0gYS9ibG9jay9wYXJ0aXRpb25zL29mLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svcGFydGl0aW9ucy9vZi5jCkBAIC0xNSw2ICYjNDM7MTUsMTAgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9vZl9wYXJ0aXRpb24oc3RydWN0IGRldmljZV9ub2RlICpucCwgaW50IHNsb3QpCiAJaW50IGFfY2VsbHMgPSBvZl9uX2FkZHJfY2VsbHMobnApOwogCWludCBzX2NlbGxzID0gb2Zfbl9zaXplX2NlbGxzKG5wKTsKIAomIzQzOwkvKiBTa2lwIG5vZGVzIHdpdGhvdXQgYSByZWcgcHJvcGVydHkgKGUuZy4gbnZtZW0tbGF5b3V0KSAqLwomIzQzOwlpZiAoIXJlZykKJiM0MzsJCXJldHVybiAxOwomIzQzOwogCS8qIE1ha2Ugc3VyZSByZWcgbGVuIG1hdGNoIHRoZSBleHBlY3RlZCBhZGRyIGFuZCBzaXplIGNlbGxzICovCiAJaWYgKGxlbiAvIHNpemVvZigqcmVnKSAhPSBhX2NlbGxzICYjNDM7IHNfY2VsbHMpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtODIsMTQgJiM0Mzs4NiwxNSBAQCBpbnQgb2ZfcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUpCiAJc2xvdCA9IDE7CiAJLyogVmFsaWRhdGUgcGFyaXRpb24gb2Zmc2V0IGFuZCBzaXplICovCiAJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShwYXJ0aXRpb25zX25wLCBucCkgewotCQlpZiAodmFsaWRhdGVfb2ZfcGFydGl0aW9uKG5wLCBzbG90KSkgewomIzQzOwkJaW50IGVyciA9IHZhbGlkYXRlX29mX3BhcnRpdGlvbihucCwgc2xvdCk7CiYjNDM7CiYjNDM7CQlpZiAoZXJyICZsdDsgMCkgewogCQkJb2Zfbm9kZV9wdXQobnApOwogCQkJb2Zfbm9kZV9wdXQocGFydGl0aW9uc19ucCk7Ci0KIAkJCXJldHVybiAtMTsKIAkJfQotCi0JCXNsb3QmIzQzOyYjNDM7OwomIzQzOwkJaWYgKCFlcnIpCiYjNDM7CQkJc2xvdCYjNDM7JiM0Mzs7CiAJfQogCiAJc2xvdCA9IDE7CkBAIC05OSw5ICYjNDM7MTA0LDEwIEBAIGludCBvZl9wYXJ0aXRpb24oc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSkKIAkJCWJyZWFrOwogCQl9CiAKLQkJYWRkX29mX3BhcnRpdGlvbihzdGF0ZSwgc2xvdCwgbnApOwotCi0JCXNsb3QmIzQzOyYjNDM7OwomIzQzOwkJaWYgKG9mX3Byb3BlcnR5X3ByZXNlbnQobnAsICYjMzQ7cmVnJiMzNDspKSB7CiYjNDM7CQkJYWRkX29mX3BhcnRpdGlvbihzdGF0ZSwgc2xvdCwgbnApOwomIzQzOwkJCXNsb3QmIzQzOyYjNDM7OwomIzQzOwkJfQogCX0KIAogCXNlcV9idWZfcHV0cygmYW1wO3N0YXRlLSZndDtwcF9idWYsICYjMzQ7XG4mIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYwppbmRleCAwNGViZTI5MGJjNzg0ZS4uMDZjYjc4N2IwNTU5ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYwpAQCAtNzIzLDggJiM0Mzs3MjMsMTEgQEAgc3RhdGljIGludCBxY2FfY2hlY2tfYmRhZGRyKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBjb25zdCBzdHJ1Y3QgcWNhX2Z3X2NvbmZpZyAqY28KIAl9CiAKIAliZGEgPSAoc3RydWN0IGhjaV9ycF9yZWFkX2JkX2FkZHIgKilza2ItJmd0O2RhdGE7Ci0JaWYgKCFiYWNtcCgmYW1wO2JkYS0mZ3Q7YmRhZGRyLCAmYW1wO2NvbmZpZy0mZ3Q7YmRhZGRyKSkKJiM0MzsJaWYgKCFiYWNtcCgmYW1wO2JkYS0mZ3Q7YmRhZGRyLCAmYW1wO2NvbmZpZy0mZ3Q7YmRhZGRyKSkgewogCQloY2lfc2V0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19VU0VfQkRBRERSX1BST1BFUlRZKTsKJiM0MzsJCWhjaV9zZXRfcXVpcmsoaGRldiwgSENJX1FVSVJLX1VTRV9CREFERFJfTlZNRU0pOwomIzQzOwkJaGNpX3NldF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfQkRBRERSX05WTUVNX0JFKTsKJiM0MzsJfQogCiAJa2ZyZWVfc2tiKHNrYik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oCmluZGV4IDg4MDhlZTc2ZTczYzA5Li5hY2U2ZjU5Yjg2MGQwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oCkBAIC03Myw2ICYjNDM7NzMsOSBAQCBzdHJ1Y3QgYmxvY2tfZGV2aWNlIHsKIAlpbnQJCQliZF93cml0ZXJzOwogI2lmZGVmIENPTkZJR19TRUNVUklUWQogCXZvaWQJCQkqYmRfc2VjdXJpdHk7CiYjNDM7I2VuZGlmCiYjNDM7I2lmZGVmIENPTkZJR19CTEtfTlZNRU0KJiM0MzsJc3RydWN0IG52bWVtX2RldmljZQkqYmRfbnZtZW07CiAjZW5kaWYKIAkvKgogCSAqIGtlZXAgdGhpcyBvdXQtb2YtbGluZSBhcyBpdCYjMzk7cyBib3RoIGJpZyBhbmQgbm90IG5lZWRlZCBpbiB0aGUgZmFzdApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggOTIxM2E1NzE2Zjk1YTcuLjVhNzRiZDVmYmE5ODQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKQEAgLTMwLDYgJiM0MzszMCw3IEBACiAKIHN0cnVjdCBtb2R1bGU7CiBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZTsKJiM0MztzdHJ1Y3QgbnZtZW1fZGV2aWNlOwogc3RydWN0IGVsZXZhdG9yX3F1ZXVlOwogc3RydWN0IGJsa190cmFjZTsKIHN0cnVjdCByZXF1ZXN0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vZl9uZXQuaCBiL2luY2x1ZGUvbGludXgvb2ZfbmV0LmgKaW5kZXggZDg4NzE1YTBiM2E1MmYuLjc4NTRiYTU1NWQ5YTU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L29mX25ldC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvb2ZfbmV0LmgKQEAgLTE1LDYgJiM0MzsxNSw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlOwogZXh0ZXJuIGludCBvZl9nZXRfcGh5X21vZGUoc3RydWN0IGRldmljZV9ub2RlICpucCwgcGh5X2ludGVyZmFjZV90ICppbnRlcmZhY2UpOwogZXh0ZXJuIGludCBvZl9nZXRfbWFjX2FkZHJlc3Moc3RydWN0IGRldmljZV9ub2RlICpucCwgdTggKm1hYyk7CiBleHRlcm4gaW50IG9mX2dldF9tYWNfYWRkcmVzc19udm1lbShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCB1OCAqbWFjKTsKJiM0MztpbnQgb2ZfZ2V0X252bWVtX2V1aTQ4KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGNvbnN0IGNoYXIgKmNlbGxfbmFtZSwgdTggKmFkZHIpOwogaW50IG9mX2dldF9ldGhkZXZfYWRkcmVzcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqb2ZfZmluZF9uZXRfZGV2aWNlX2J5X25vZGUoc3RydWN0IGRldmljZV9ub2RlICpucCk7CiAjZWxzZQpAQCAtMzQsNiAmIzQzOzM1LDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IG9mX2dldF9tYWNfYWRkcmVzc19udm1lbShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCB1OCAqbWFjKQogCXJldHVybiAtRU5PREVWOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBpbnQgb2ZfZ2V0X252bWVtX2V1aTQ4KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCiYjNDM7CQkJCSAgICAgIGNvbnN0IGNoYXIgKmNlbGxfbmFtZSwgdTggKmFkZHIpCiYjNDM7ewomIzQzOwlyZXR1cm4gLUVOT0RFVjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGludCBvZl9nZXRfZXRoZGV2X2FkZHJlc3Moc3RydWN0IGRldmljZV9ub2RlICpucCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaAppbmRleCAzODE4NmEyNDVmMTRkYi4uMTQ1YWI5NGU1MTQ4MmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmgKQEAgLTE2MSw2ICYjNDM7MTYxLDI0IEBAIGVudW0gewogCSAqLwogCUhDSV9RVUlSS19CREFERFJfUFJPUEVSVFlfQlJPS0VOLAogCiYjNDM7CS8qIFdoZW4gdGhpcyBxdWlyayBpcyBzZXQsIHRoZSBwdWJsaWMgQmx1ZXRvb3RoIGFkZHJlc3MKJiM0MzsJICogaW5pdGlhbGx5IHJlcG9ydGVkIGJ5IEhDSSBSZWFkIEJEIEFkZHJlc3MgY29tbWFuZAomIzQzOwkgKiBpcyBjb25zaWRlcmVkIGludmFsaWQuIFRoZSBwdWJsaWMgQkQgQWRkcmVzcyBjYW4gYmUKJiM0MzsJICogcmV0cmlldmVkIHZpYSBhICYjMzk7bG9jYWwtYmQtYWRkcmVzcyYjMzk7IE5WTUVNIGNlbGwuCiYjNDM7CSAqCiYjNDM7CSAqIFRoaXMgcXVpcmsgY2FuIGJlIHNldCBiZWZvcmUgaGNpX3JlZ2lzdGVyX2RldiBpcyBjYWxsZWQgb3IKJiM0MzsJICogZHVyaW5nIHRoZSBoZGV2LSZndDtzZXR1cCB2ZW5kb3IgY2FsbGJhY2suCiYjNDM7CSAqLwomIzQzOwlIQ0lfUVVJUktfVVNFX0JEQUREUl9OVk1FTSwKJiM0MzsKJiM0MzsJLyogV2hlbiB0aGlzIHF1aXJrIGlzIHNldCwgdGhlIEJsdWV0b290aCBEZXZpY2UgQWRkcmVzcyBwcm92aWRlZCBieQomIzQzOwkgKiB0aGUgJiMzOTtsb2NhbC1iZC1hZGRyZXNzJiMzOTsgTlZNRU0gaXMgc3RvcmVkIGluIGJpZy1lbmRpYW4gb3JkZXIuCiYjNDM7CSAqCiYjNDM7CSAqIFRoaXMgcXVpcmsgY2FuIGJlIHNldCBiZWZvcmUgaGNpX3JlZ2lzdGVyX2RldiBpcyBjYWxsZWQgb3IKJiM0MzsJICogZHVyaW5nIHRoZSBoZGV2LSZndDtzZXR1cCB2ZW5kb3IgY2FsbGJhY2suCiYjNDM7CSAqLwomIzQzOwlIQ0lfUVVJUktfQkRBRERSX05WTUVNX0JFLAomIzQzOwogCS8qIFdoZW4gdGhpcyBxdWlyayBpcyBzZXQsIHRoZSBkdXBsaWNhdGUgZmlsdGVyaW5nIGR1cmluZwogCSAqIHNjYW5uaW5nIGlzIGJhc2VkIG9uIEJsdWV0b290aCBkZXZpY2VzIGFkZHJlc3Nlcy4gVG8gYWxsb3cKIAkgKiBSU1NJIGJhc2VkIHVwZGF0ZXMsIHJlc3RhcnQgc2Nhbm5pbmcgaWYgbmVlZGVkLgpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfc3luYy5jIGIvbmV0L2JsdWV0b290aC9oY2lfc3luYy5jCmluZGV4IDNiZThjMzU4MWM2Y2FhLi43MzRlZWQyMGRlMDQ0YiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfc3luYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ibHVldG9vdGgvaGNpX3N5bmMuYwpAQCAtNyw2ICYjNDM7Nyw3IEBACiAgKi8KIAogI2luY2x1ZGUgJmx0O2xpbnV4L3Byb3BlcnR5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mX25ldC5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7bmV0L2JsdWV0b290aC9ibHVldG9vdGguaCZndDsKICNpbmNsdWRlICZsdDtuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgmZ3Q7CkBAIC0zNTkzLDYgJiM0MzszNTk0LDM3IEBAIGludCBoY2lfcG93ZXJlZF91cGRhdGVfc3luYyhzdHJ1Y3QgaGNpX2RldiAqaGRldikKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGhjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9udm1lbSAtIEdldCB0aGUgQmx1ZXRvb3RoIERldmljZSBBZGRyZXNzCiYjNDM7ICoJCQkJICAgIChCRF9BRERSKSBmb3IgYSBIQ0kgZGV2aWNlIGZyb20KJiM0MzsgKgkJCQkgICAgYW4gTlZNRU0gY2VsbC4KJiM0MzsgKiBAaGRldjoJVGhlIEhDSSBkZXZpY2UKJiM0MzsgKgomIzQzOyAqIFNlYXJjaCBmb3IgJiMzOTtsb2NhbC1iZC1hZGRyZXNzJiMzOTsgTlZNRU0gY2VsbCBpbiB0aGUgZGV2aWNlIGZpcm13YXJlIG5vZGUuCiYjNDM7ICoKJiM0MzsgKiBBbGwtemVybyBCRCBhZGRyZXNzZXMgYXJlIHJlamVjdGVkICh1bnByb3Zpc2lvbmVkKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGhjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9udm1lbShzdHJ1Y3QgaGNpX2RldiAqaGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXZfb2Zfbm9kZShoZGV2LSZndDtkZXYucGFyZW50KTsKJiM0MzsJdTggYmFbc2l6ZW9mKGJkYWRkcl90KV07CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmICghbnApCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJZXJyID0gb2ZfZ2V0X252bWVtX2V1aTQ4KG5wLCAmIzM0O2xvY2FsLWJkLWFkZHJlc3MmIzM0OywgYmEpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJaWYgKGhjaV90ZXN0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19CREFERFJfTlZNRU1fQkUpKQomIzQzOwkJYmFzd2FwKCZhbXA7aGRldi0mZ3Q7cHVibGljX2FkZHIsIChiZGFkZHJfdCAqKWJhKTsKJiM0MzsJZWxzZQomIzQzOwkJYmFjcHkoJmFtcDtoZGV2LSZndDtwdWJsaWNfYWRkciwgKGJkYWRkcl90ICopYmEpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGhjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9wcm9wZXJ0eSAtIEdldCB0aGUgQmx1ZXRvb3RoIERldmljZSBBZGRyZXNzCiAgKgkJCQkgICAgICAgKEJEX0FERFIpIGZvciBhIEhDSSBkZXZpY2UgZnJvbQpAQCAtNTA3MiwxMiAmIzQzOzUxMDQsMTcgQEAgc3RhdGljIGludCBoY2lfZGV2X3NldHVwX3N5bmMoc3RydWN0IGhjaV9kZXYgKmhkZXYpCiAJICogaXRzIHNldHVwIGNhbGxiYWNrLgogCSAqLwogCWludmFsaWRfYmRhZGRyID0gaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX0lOVkFMSURfQkRBRERSKSB8fAotCQkJIGhjaV90ZXN0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19VU0VfQkRBRERSX1BST1BFUlRZKTsKJiM0MzsJCQkgaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX1VTRV9CREFERFJfUFJPUEVSVFkpIHx8CiYjNDM7CQkJIGhjaV90ZXN0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19VU0VfQkRBRERSX05WTUVNKTsKIAlpZiAoIXJldCkgewogCQlpZiAoaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX1VTRV9CREFERFJfUFJPUEVSVFkpICZhbXA7JmFtcDsKIAkJICAgICFiYWNtcCgmYW1wO2hkZXYtJmd0O3B1YmxpY19hZGRyLCBCREFERFJfQU5ZKSkKIAkJCWhjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9wcm9wZXJ0eShoZGV2KTsKIAomIzQzOwkJaWYgKGhjaV90ZXN0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19VU0VfQkRBRERSX05WTUVNKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIWJhY21wKCZhbXA7aGRldi0mZ3Q7cHVibGljX2FkZHIsIEJEQUREUl9BTlkpKQomIzQzOwkJCWhjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9udm1lbShoZGV2KTsKJiM0MzsKIAkJaWYgKGludmFsaWRfYmRhZGRyICZhbXA7JmFtcDsgYmFjbXAoJmFtcDtoZGV2LSZndDtwdWJsaWNfYWRkciwgQkRBRERSX0FOWSkgJmFtcDsmYW1wOwogCQkgICAgaGRldi0mZ3Q7c2V0X2JkYWRkcikgewogCQkJcmV0ID0gaGRldi0mZ3Q7c2V0X2JkYWRkcihoZGV2LCAmYW1wO2hkZXYtJmd0O3B1YmxpY19hZGRyKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL29mX25ldC5jIGIvbmV0L2NvcmUvb2ZfbmV0LmMKaW5kZXggOTNlYTQyNWI5MjQ4YTIuLjExYzFhY2NhMTUxMjY2IDEwMDY0NAotLS0gYS9uZXQvY29yZS9vZl9uZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9vZl9uZXQuYwpAQCAtNjEsOSAmIzQzOzYxLDcgQEAgc3RhdGljIGludCBvZl9nZXRfbWFjX2FkZHIoc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3QgY2hhciAqbmFtZSwgdTggKmFkZHIpCiBpbnQgb2ZfZ2V0X21hY19hZGRyZXNzX252bWVtKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHU4ICphZGRyKQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKG5wKTsKLQlzdHJ1Y3QgbnZtZW1fY2VsbCAqY2VsbDsKLQljb25zdCB2b2lkICptYWM7Ci0Jc2l6ZV90IGxlbjsKJiM0MzsJdTggbWFjW0VUSF9BTEVOXSBfX2FsaWduZWQoc2l6ZW9mKHUxNikpOwogCWludCByZXQ7CiAKIAkvKiBUcnkgbG9va3VwIGJ5IGRldmljZSBmaXJzdCwgdGhlcmUgbWlnaHQgYmUgYSBudm1lbV9jZWxsX2xvb2t1cApAQCAtNzUsMjcgJiM0Mzs3Myw1NCBAQCBpbnQgb2ZfZ2V0X21hY19hZGRyZXNzX252bWVtKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHU4ICphZGRyKQogCQlyZXR1cm4gcmV0OwogCX0KIAotCWNlbGwgPSBvZl9udm1lbV9jZWxsX2dldChucCwgJiMzNDttYWMtYWRkcmVzcyYjMzQ7KTsKJiM0MzsJcmV0ID0gb2ZfZ2V0X252bWVtX2V1aTQ4KG5wLCAmIzM0O21hYy1hZGRyZXNzJiMzNDssIG1hYyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobWFjKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlldGhlcl9hZGRyX2NvcHkoYWRkciwgbWFjKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wob2ZfZ2V0X21hY19hZGRyZXNzX252bWVtKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBvZl9nZXRfbnZtZW1fZXVpNDggLSBSZWFkIGEgNi1ieXRlIEVVSS00OCBhZGRyZXNzIGZyb20gYSBuYW1lZCBOVk1FTSBjZWxsLgomIzQzOyAqIEBucDoJCURldmljZSBub2RlIHRvIGxvb2sgdXAgdGhlIE5WTUVNIGNlbGwgZnJvbS4KJiM0MzsgKiBAY2VsbF9uYW1lOglOYW1lIG9mIHRoZSBOVk1FTSBjZWxsIChlLmcuICYjMzQ7bWFjLWFkZHJlc3MmIzM0OywgJiMzNDtsb2NhbC1iZC1hZGRyZXNzJiMzNDspLgomIzQzOyAqIEBhZGRyOglPdXRwdXQgYnVmZmVyIGZvciB0aGUgNi1ieXRlIGFkZHJlc3MuCiYjNDM7ICoKJiM0MzsgKiBSZWFkcyB0aGUgbmFtZWQgTlZNRU0gY2VsbCBhbmQgdmFsaWRhdGVzIHRoYXQgaXQgY29udGFpbnMgYSBub24temVybyA2LWJ5dGUKJiM0MzsgKiBhZGRyZXNzLiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztpbnQgb2ZfZ2V0X252bWVtX2V1aTQ4KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGNvbnN0IGNoYXIgKmNlbGxfbmFtZSwgdTggKmFkZHIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbnZtZW1fY2VsbCAqY2VsbDsKJiM0MzsJY29uc3Qgdm9pZCAqZXVpNDg7CiYjNDM7CXNpemVfdCBsZW47CiYjNDM7CiYjNDM7CWNlbGwgPSBvZl9udm1lbV9jZWxsX2dldChucCwgY2VsbF9uYW1lKTsKIAlpZiAoSVNfRVJSKGNlbGwpKQogCQlyZXR1cm4gUFRSX0VSUihjZWxsKTsKIAotCW1hYyA9IG52bWVtX2NlbGxfcmVhZChjZWxsLCAmYW1wO2xlbik7CiYjNDM7CWV1aTQ4ID0gbnZtZW1fY2VsbF9yZWFkKGNlbGwsICZhbXA7bGVuKTsKIAludm1lbV9jZWxsX3B1dChjZWxsKTsKIAotCWlmIChJU19FUlIobWFjKSkKLQkJcmV0dXJuIFBUUl9FUlIobWFjKTsKJiM0MzsJaWYgKElTX0VSUihldWk0OCkpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihldWk0OCk7CiAKLQlpZiAobGVuICE9IEVUSF9BTEVOIHx8ICFpc192YWxpZF9ldGhlcl9hZGRyKG1hYykpIHsKLQkJa2ZyZWUobWFjKTsKJiM0MzsJaWYgKGxlbiAhPSBFVEhfQUxFTiB8fCAhbWVtY2hyX2ludihldWk0OCwgMCwgRVRIX0FMRU4pKSB7CiYjNDM7CQlrZnJlZShldWk0OCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCW1lbWNweShhZGRyLCBtYWMsIEVUSF9BTEVOKTsKLQlrZnJlZShtYWMpOwomIzQzOwltZW1jcHkoYWRkciwgZXVpNDgsIEVUSF9BTEVOKTsKJiM0MzsJa2ZyZWUoZXVpNDgpOwogCiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKG9mX2dldF9tYWNfYWRkcmVzc19udm1lbSk7CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwob2ZfZ2V0X252bWVtX2V1aTQ4KTsKIAogLyoqCiAgKiBvZl9nZXRfbWFjX2FkZHJlc3MoKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwOToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDk3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2ggYW5kIEZ1enphYmlsaXR5IG9mIHRoZSBCTEtfTlZNRU0gUGF0Y2gqKgoKT2theSwgc28gd2UgaGF2ZSB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBhIGBCTEtfTlZNRU1gIGJsb2NrIGRldmljZSBOVk1FTSBwcm92aWRlci4gRXNzZW50aWFsbHksIHRoaXMgbWVhbnMgd2UgY2FuIHRyZWF0IGJsb2NrIGRldmljZXMgKG9yIHBhcnRpdGlvbnMpIGFzIE5WTUVNIHByb3ZpZGVycy4gVGhlIHBhdGNoIHRvdWNoZXMgYSBmZXcga2V5IGFyZWFzLCB3aGljaCBpcyBnb29kIHRvIHNlZSBmcm9tIGEgY292ZXJhZ2UgcGVyc3BlY3RpdmUuIEkmIzM5O20gbm90aW5nIGNoYW5nZXMgaW4gYGJsb2NrL2dlbmhkLmNgIChzcGVjaWZpY2FsbHkgY2FsbHMgdG8gYGJsa19udm1lbV9hZGRgIGFuZCBgYmxrX252bWVtX2RlbGApLCBgYmxvY2svcGFydGl0aW9ucy9vZi5jYCAoc2tpcHBpbmcgbm9kZXMgd2l0aG91dCB0aGUgYHJlZ2AgcHJvcGVydHkpLCBhbmQgZXZlbiBzb21lIEJsdWV0b290aCBhbmQgbmV0d29ya2luZyBjb2RlIChgZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuY2AsIGBuZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmNgLCBhbmQgYG5ldC9jb3JlL29mX25ldC5jYCkuIEl0IHNlZW1zIHF1aXRlIHBlcnZhc2l2ZTsgaXQmIzM5O3MgdXNpbmcgdGhlIGNvbmNlcHQgb2YgYmxvY2sgZGV2aWNlcyBhcyBOVlJBTSBzdG9yYWdlIGFjcm9zcyBhIG51bWJlciBvZiBkcml2ZXJzLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpdHMgcmVhY2hhYmlsaXR5IGFuZCBwb3RlbnRpYWwgZm9yIGZ1enppbmcuIFRoZSBrZXkgY2hhbmdlcyBpbiB0aGUgYmxvY2sgbGF5ZXIsIGVzcGVjaWFsbHkgaW4gYGJsb2NrL2Jsay1udm1lbS5jYCBhbmQgYGJsb2NrL2dlbmhkLmNgLCBhcmUgd2hhdCBJJiMzOTttIGZvY3VzZWQgb24gZmlyc3QuIEkga25vdyB0aGF0IGBibGtfbnZtZW1fYWRkYCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgZGlzayBhZGRlZCB2aWEgYGFkZF9kaXNrX2ZpbmFsYCwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIFZNIHNldHVwLiBMb29wIGRldmljZXMsIG9yIGFueSBvdGhlciBibG9jayBkZXZpY2UgdGhhdCBnZXRzIGFkZGVkLCBzaG91bGQgdHJpZ2dlciB0aGlzLiBUaGUgY3JpdGljYWwgZnVuY3Rpb24gaGVyZSBhcHBlYXJzIHRvIGJlIGBibGtfbnZtZW1fcmVnX3JlYWRgLCB3aGljaCB1c2VzIGByZWFkX21hcHBpbmdfZm9saW9gIHRvIGFjdHVhbGx5IHJlYWQgZGF0YSBmcm9tIHRoZSBibG9jayBkZXZpY2UuIFRoaXMgcmVhZHMgZGlyZWN0bHkgZnJvbSBhIG1hcHBpbmcuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uLiBJIGNhbiBzZWUgdGhhdCBgQ09ORklHX0JMS19OVk1FTWAgaXMgZGVmaW5lZCBpbiBgYmxvY2svS2NvbmZpZ2AsIGFuZCBpdCBkZXBlbmRzIG9uIGJvdGggYE9GYCBhbmQgYE5WTUVNYC4gVGhpcyBzaG91bGQgbWFrZSBlbmFibGluZyBpdCByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSByZWxldmFudCBmdW5jdGlvbnMgaW4gYGJsb2NrL2Jsay1udm1lbS5jYCwgYG5ldC9jb3JlL29mX25ldC5jYCwgYW5kIGBuZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmNgIHRvIHNlZSB0aGUgcG9pbnRzIHRoYXQgd291bGQgYmUgZXhwb3NlZCB0byBhIGZ1enplcjogYGJsa19udm1lbV9yZWdfcmVhZGAsIGBibGtfbnZtZW1fYWRkYCwgYGJsa19udm1lbV9kZWxgLCBgb2ZfZ2V0X252bWVtX2V1aTQ4YCwgYW5kIGBoY2lfZGV2X2dldF9iZF9hZGRyX2Zyb21fbnZtZW1gLgoKT2theSwgc28gYENPTkZJR19CTEtfTlZNRU1gIHNlZW1zIGxpa2UgYSB2aWFibGUgdGFyZ2V0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgYENPTkZJR19CVF9IQ0lVQVJUX1FDQWAgcHJlcmVxdWlzaXRlIGZvciB0aGUgYGJ0cWNhLmNgIG1vZGlmaWNhdGlvbnMuIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIEJsdWV0b290aCBNYWtlZmlsZSBvciBLY29uZmlnIHRvIGNvbmZpcm0gdGhpcyBkZXBlbmRlbmN5LiBPdmVyYWxsLCB0aGlzIHBhdGNoIGhhcyB0aGUgcG90ZW50aWFsIHRvIGV4cG9zZSBzZXZlcmFsIGludGVyZXN0aW5nIGF0dGFjayBzdXJmYWNlcy4gVGhlIHJlbGlhbmNlIG9uIGJsb2NrIGRldmljZSBpbnRlcmFjdGlvbiwgY291cGxlZCB3aXRoIGhvdyB0aGUgYWRkcmVzcyBpcyByZWFkIGFuZCB1c2VkLCBsb29rcyB0byBiZSBhIHByb21pc2luZyBhdmVudWUgdG8gZXhwbG9yZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwOToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCVF9IQ0lVQVJUX1FDQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmx1ZXRvb3RoLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2JsdWV0b290aC9LY29uZmlnPTIyNz1jb25maWcgQlRfSENJVUFSVF9SVExcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTI0MC1cbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWc6MjQxOmNvbmZpZyBCVF9IQ0lVQVJUX1FDQVxuZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZy0yNDItXHRib29sIFwmIzM0O1F1YWxjb21tIEF0aGVyb3MgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL01ha2VmaWxlPTQ3PWhjaV91YXJ0LSQoQ09ORklHX0JUX0hDSVVBUlRfQkNNKVx0JiM0Mzs9IGhjaV9iY20ub1xuZHJpdmVycy9ibHVldG9vdGgvTWFrZWZpbGU6NDg6aGNpX3VhcnQtJChDT05GSUdfQlRfSENJVUFSVF9RQ0EpXHQmIzQzOz0gaGNpX3FjYS5vXG5kcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZS00OS1oY2lfdWFydC0kKENPTkZJR19CVF9IQ0lVQVJUX0FHNlhYKVx0JiM0Mzs9IGhjaV9hZzZ4eC5vXG4tLVxuZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmM9ODc3PXN0YXRpYyBpbnQgX19pbml0IGhjaV91YXJ0X2luaXQodm9pZClcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYy05MTAtI2VuZGlmXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYzo5MTE6I2lmZGVmIENPTkZJR19CVF9IQ0lVQVJUX1FDQVxuZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmMtOTEyLVx0cWNhX2luaXQoKTtcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYz05MjY9c3RhdGljIHZvaWQgX19leGl0IGhjaV91YXJ0X2V4aXQodm9pZClcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYy05NDgtI2VuZGlmXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYzo5NDk6I2lmZGVmIENPTkZJR19CVF9IQ0lVQVJUX1FDQVxuZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmMtOTUwLVx0cWNhX2RlaW5pdCgpO1xuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV91YXJ0Lmg9MTk3PWludCBiY21fZGVpbml0KHZvaWQpO1xuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV91YXJ0LmgtMTk5LVxuZHJpdmVycy9ibHVldG9vdGgvaGNpX3VhcnQuaDoyMDA6I2lmZGVmIENPTkZJR19CVF9IQ0lVQVJUX1FDQVxuZHJpdmVycy9ibHVldG9vdGgvaGNpX3VhcnQuaC0yMDEtaW50IHFjYV9pbml0KHZvaWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA5OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTczCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYGJ0cWNhLmNgIENvbXBpbGF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZm9jdXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBgYnRxY2EuY2AgY29tcGlsYXRpb24gaXMgY2xlYW4uIEl0JiMzOTtzIGEgY3JpdGljYWwgY29tcG9uZW50LCBzbyBhIHF1aWNrIHZlcmlmaWNhdGlvbiBpcyBpbiBvcmRlci4gSSYjMzk7bSBub3QgZXhwZWN0aW5nIGFueSBtYWpvciBpc3N1ZXMsIGJ1dCB5b3UgY2FuJiMzOTt0IGJlIHRvbyBjb21wbGFjZW50LiBHb3R0YSBjYXRjaCBhbnkgcG90ZW50aWFsIHNuYWdzIGVhcmx5LCBiZWZvcmUgdGhleSBjYXNjYWRlIGludG8gc29tZXRoaW5nIGJpZ2dlci4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgZmxhZ3Mgb3IgZXJyb3JzIHBvcHBpbmcgdXAuIFRpbWUgdG8gY2hlY2sgdGhlIGJ1aWxkIGxvZ3MuLi4gbGV0JiMzOTtzIGdldCB0byBpdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwOToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtidHFjYS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibHVldG9vdGgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmx1ZXRvb3RoL01ha2VmaWxlPTI1PW9iai0kKENPTkZJR19CVF9SVEwpXHRcdCYjNDM7PSBidHJ0bC5vXG5kcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfQlRfUUNBKVx0XHQmIzQzOz0gYnRxY2Eub1xuZHJpdmVycy9ibHVldG9vdGgvTWFrZWZpbGUtMjctb2JqLSQoQ09ORklHX0JUX01USylcdFx0JiM0Mzs9IGJ0bXRrLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwOToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQzNQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOgoKKipCbHVldG9vdGggUUNBIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCkFscmlnaHQsIHRoZSBzeXN0ZW0mIzM5O3MgZmxhZ2dlZCB0aGF0IGBDT05GSUdfQlRfUUNBYCBpcyBhIHJlcXVpcmVtZW50LiBUaGF0IGltbWVkaWF0ZWx5IGNsaWNrcyAtICpvZiBjb3Vyc2UqLCB3ZSBuZWVkIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24uIE5vdywgdGhlIG5leHQgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyB3aGV0aGVyIGBidHFjYS5jYCBpcyBjb3JyZWN0bHkgY29tcGlsZWQgd2l0aCBgQ09ORklHX0JUX1FDQWAgZW5hYmxlZCwgYXMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucy4gTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgdGhhdCBieSBjaGVja2luZyB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGF0IGRyaXZlci4gTGV0JiMzOTtzIG5hdmlnYXRlIG92ZXIgdG8gYGRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWdgIHRvIHNlZSB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwOToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlRfUUNBJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibHVldG9vdGgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWc9MTQ9Y29uZmlnIEJUX1JUTFxuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWctMTctXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnOjE4OmNvbmZpZyBCVF9RQ0FcbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWctMTktXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA5OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzI0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIGEgQmx1ZXRvb3RoIERyaXZlciBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWV0aGluZyB0aGF0IHNlZW1zIHRvIGJlIGEgdHJpc3RhdGUsIGFuZCBteSBpbW1lZGlhdGUgaHVuY2ggaXMgdGhhdCBpdCYjMzk7cyBsaWtlbHkgc2VsZWN0ZWQgYnkgZWl0aGVyIGBCVF9IQ0lVQVJUX1FDQWAgb3IgYEJUX0hDSUJUVVNCX1FDQWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBzdGFydCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZXNlIHNvcnRzIG9mIEJsdWV0b290aCBjb25maWd1cmF0aW9ucy4gVGhvc2UgUXVhbGNvbW0tc3BlY2lmaWMgVUFSVCBhbmQgVVNCIGRyaXZlcnMgYXJlIHVzdWFsbHkgdGhlIGN1bHByaXRzIGluIHRoZXNlIHNjZW5hcmlvcy4KCk5vdywgdG8gY29uZmlybSBhbmQgZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24sIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBgQkxLX05WTUVNYCBvcHRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBgYmxvY2svS2NvbmZpZ2AgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgc2VsZWN0aW9uIGFuZCBkZXBlbmRlbmNpZXMgb2YgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2Uga2luZHMgb2Ygc2V0dGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA5OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfTlZNRU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZz0yMDI9Y29uZmlnIEJMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDS1xuLS1cbmJsb2NrL0tjb25maWctMjExLVxuYmxvY2svS2NvbmZpZzoyMTI6Y29uZmlnIEJMS19OVk1FTVxuYmxvY2svS2NvbmZpZy0yMTMtXHRib29sIFwmIzM0O0Jsb2NrIGRldmljZSBOVk1FTSBwcm92aWRlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwOToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA4MQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQ3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQmxvY2sgTlZNZU0gUHJvdmlkZXIgYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGZvY3VzIGhlcmUgaXMgdGhlIGBCTEtfTlZNRU1gIGNvbmZpZ3VyYXRpb24sIHRoZSBjb3JlIG9mIHRoZSBibG9jayBudm1lbSBwcm92aWRlci4gVGhlIHByaW1hcnkgZnVuY3Rpb25zIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBhcmUgYGJsa19udm1lbV9yZWdfcmVhZGAsIGBibGtfbnZtZW1fYWRkYCwgYGhjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9udm1lbWAsIGFuZCBgb2ZfZ2V0X252bWVtX2V1aTQ4YC4KCkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBwYXRocy4gYGJsa19udm1lbV9hZGRgIGlzIHJlYWNoYWJsZTsgSSBzZWUgdGhhdCBpdCYjMzk7cyBpbnZva2VkIGJ5IGBhZGRfZGlza19maW5hbGAgd2l0aGluIGBibG9jay9nZW5oZC5jYC4gVGhhdCYjMzk7cyBnb29kOyBpdCBjb25maXJtcyB0aGF0IHRoZSBhZGQgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSBpbiB1c2UuIGBibGtfbnZtZW1fcmVnX3JlYWRgLCBob3dldmVyLCBpcyBhIGJpdCBtb3JlIHN0cmFpZ2h0Zm9yd2FyZDsgaXQmIzM5O3MgdGhlIGByZWdfcmVhZGAgY2FsbGJhY2sgZm9yIHRoZSBOVk1FTSBwcm92aWRlci4gU28sIHdoZW5ldmVyIGFuIE5WTUVNIGNvbnN1bWVyIHBlcmZvcm1zIGEgcmVhZCwgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgZW5nYWdlZC4KCk5vdywgbGV0JiMzOTtzIGV4cGxvcmUgdGhlIHJlYWNoYWJpbGl0eSBvZiBgb2ZfZ2V0X252bWVtX2V1aTQ4YC4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYG9mX2dldF9tYWNfYWRkcmVzc19udm1lbWAgYW5kIGBoY2lfZGV2X2dldF9iZF9hZGRyX2Zyb21fbnZtZW1gLiBgb2ZfZ2V0X21hY19hZGRyZXNzX252bWVtYCBmZWVkcyBpbnRvIGBvZl9nZXRfbWFjX2FkZHJlc3NgLCB3aGljaCwgYXMgSSBrbm93LCBpcyBhIGNvbW1vbmx5IHVzZWQgZnVuY3Rpb24gd2l0aGluIG5ldHdvcmsgZHJpdmVycy4gYGhjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9udm1lbWAgaXMgY2FsbGVkIGZyb20gYGhjaV9kZXZfc2V0dXBfc3luY2AgaW4gYG5ldC9ibHVldG9vdGgvaGNpX3N5bmMuY2AuIFRoaXMgaXMgYWxsIHVzZWZ1bCBpbmZvcm1hdGlvbi4KCk5leHQsIEkmIzM5O2xsIGJyaWVmbHkgbG9vayBhdCB0aGUgZGV2aWNlIHRyZWUgcGFydGl0aW9uIGhhbmRsaW5nLiBJdCBsb29rcyBsaWtlIGBvZl9wYXJ0aXRpb25gIGluIGBibG9jay9wYXJ0aXRpb25zL29mLmNgIGhhcyBiZWVuIG1vZGlmaWVkIHRvIHNraXAgbm9kZXMgbWlzc2luZyB0aGUgYHJlZ2AgcHJvcGVydHkuIE1ha2VzIHNlbnNlLiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgcGFydGl0aW9uIHBhcnNpbmcgZnJvbSB0aGUgZGV2aWNlIHRyZWUuCgpPa2F5LCBzbyB0aGUgY29uZmlncyB0byBlbmFibGUgc2VlbSBjbGVhci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQkxLX05WTUVNYCBpcyBlbmFibGVkLiBCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIGNvbnNpZGVyIEJsdWV0b290aCBzdXBwb3J0IHNpbmNlIHRoZSBCbHVldG9vdGggZnVuY3Rpb25zIGFyZSB1c2luZyB0aGUgbnZtZW0gcHJvdmlkZXIsIG1lYW5pbmcgdGhhdCBgQlRfUUNBYCAob3Igc29tZXRoaW5nIGxpa2UgYEJUX0hDSVVBUlRfUUNBYCAvIGBCVF9IQ0lCVFVTQmAgYmFzZWQgb24gdGhlIGNoaXApIGlzIGFub3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbi4gSG93ZXZlciwgYEJUX1FDQWAgaXMgc2VsZWN0ZWQgYnkgb3RoZXJzLiBJIGNhbiBjaGVjayB3aGF0IHNlbGVjdHMgYEJUX1FDQWAgbGF0ZXIuIEZvciBub3csIG15IHByaW1hcnkgY29uY2VybiBpcyBlbmFibGluZyBgQkxLX05WTUVNYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDk6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEJUX1FDQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmx1ZXRvb3RoLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2JsdWV0b290aC9LY29uZmlnPTI0MT1jb25maWcgQlRfSENJVUFSVF9RQ0Fcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTI0NS1cdHNlbGVjdCBCVF9IQ0lVQVJUX0g0XG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnOjI0NjpcdHNlbGVjdCBCVF9RQ0FcbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWctMjQ3LVx0aGVscFxuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWc9NDE2PWNvbmZpZyBCVF9RQ09NU01EXG4tLVxuZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZy00MTktXHRkZXBlbmRzIG9uIFFDT01fV0NOU1NfQ1RSTCB8fCAoQ09NUElMRV9URVNUIFx1MDAyNlx1MDAyNiBRQ09NX1dDTlNTX0NUUkw9bilcbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWc6NDIwOlx0c2VsZWN0IEJUX1FDQVxuZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZy00MjEtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA5OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzE0CgkJCQkJCQlvdXRwdXQ6IDE4MgoJCQkJCQkJdGhvdWdodHM6IDQ0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTlZNRU0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBCVF9IQ0lVQVJUX1FDQWAgYW5kIGBCVF9RQ09NU01EYCBhcmUgc2VsZWN0aW5nIGBCVF9RQ0FgLCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdC4gSSBjYW4gbGlzdCBgQlRfSENJVUFSVF9RQ0FgIGFzIGEgc3RhcnRpbmcgcG9pbnQuIExldCYjMzk7cyBzZWUuLi4gdGhlIGZvY3VzIGhlcmUgaXMgZGVmaW5pdGVseSBvbiB0aGVzZSBmdW5jdGlvbnM6IGBibGtfbnZtZW1fcmVnX3JlYWRgLCBgYmxrX252bWVtX2FkZGAsIGBoY2lfZGV2X2dldF9iZF9hZGRyX2Zyb21fbnZtZW1gLCBhbmQgYG9mX2dldF9udm1lbV9ldWk0OGAuCgpGaXJzdCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBzY29wZS4gYGJsa19udm1lbV9yZWdfcmVhZGAgaXMgaW5kZWVkIHN0YXRpYywgc28gdGhhdCYjMzk7cyBoZWxwZnVsIGluIHVuZGVyc3RhbmRpbmcgd2hlcmUgaXTigJlzIHVzZWQuIGBibGtfbnZtZW1fYWRkYCwgaG93ZXZlciwgaXNuJiMzOTt0IGV4cG9ydGVkLiBIbW0sIGl0JiMzOTtzIGluIGBibG9jay9ibGstbnZtZW0uY2AgYW5kIGlzIGNhbGxlZCBmcm9tIGBibG9jay9nZW5oZC5jYC4gVGhlbiBgaGNpX2Rldl9nZXRfYmRfYWRkcl9mcm9tX252bWVtYCBpcyBhbHNvIHN0YXRpYywgcmVzaWRpbmcgaW4gYG5ldC9ibHVldG9vdGgvaGNpX3N5bmMuY2AuIEFuZCBgb2ZfZ2V0X252bWVtX2V1aTQ4YCBpcyBleHBvcnRlZCBpbiBgbmV0L2NvcmUvb2ZfbmV0LmNgLgoKTm93LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIElzIGBCTEtfTlZNRU1gIHN1ZmZpY2llbnQ/IExldCBtZSBkb3VibGUtY2hlY2suIE9rYXksIGl0IGRlcGVuZHMgb24gYm90aCBgT0ZgIGFuZCBgTlZNRU1gLiBUaGF0JiMzOTtzIGdvb2QsIGBPRmAgaXMgd2lkZWx5IGVuYWJsZWQgYWNyb3NzIHZhcmlvdXMgYXJjaGl0ZWN0dXJlcywgYW5kIGBOVk1FTWAgaXMgY29tbW9uIGFzIHdlbGwuCgpCYXNlZCBvbiBhbGwgb2YgdGhpcywgSSYjMzk7bSBjb21mb3J0YWJsZSBlbm91Z2ggdG8gY29uY2x1ZGUgdGhhdCB0aGlzIHBhdGNoIHdhcnJhbnRzIGZ1enppbmcsIGFuZCBJIHRoaW5rIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIGtleSBmdW5jdGlvbnMgZm9yIGFuYWx5c2lzLiBNeSByZWFzb25pbmcgaXMgdGhhdCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBibG9jayBkZXZpY2UgTlZNRU0gcHJvdmlkZXIgYWxsb3dpbmcgYmxvY2sgZGV2aWNlcyB0byBhY3QgYXMgTlZNRU0gcHJvdmlkZXJzLCBhbmQgaGFzIGludHJvZHVjZWQgQmx1ZXRvb3RoIGRldmljZSBhZGRyZXNzZXMgZnJvbSBOVk1FTSBjZWxscy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcywgd2l0aCByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBhZGRpbmcgYSBibG9jayBkZXZpY2Ugb3Igc2V0dGluZyB1cCBhIHZpcnR1YWwgSENJIGRldmljZSB3aXRoIHRoZSByaWdodCBxdWlya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA5OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfTlZNRU0mIzM0OywKICAgICYjMzQ7QlRfSENJVUFSVF9RQ0EmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibGtfbnZtZW1fcmVnX3JlYWQmIzM0OywKICAgICYjMzQ7YmxrX252bWVtX2FkZCYjMzQ7LAogICAgJiMzNDtoY2lfZGV2X2dldF9iZF9hZGRyX2Zyb21fbnZtZW0mIzM0OywKICAgICYjMzQ7b2ZfZ2V0X252bWVtX2V1aTQ4JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYmxvY2sgZGV2aWNlIE5WTUVNIHByb3ZpZGVyIHdoaWNoIGFsbG93cyBibG9jayBkZXZpY2VzIHRvIGFjdCBhcyBOVk1FTSBwcm92aWRlcnMuIEl0IGFsc28gYWRkcyBsb2dpYyB0byByZWFkIEJsdWV0b290aCBkZXZpY2UgYWRkcmVzc2VzIGFuZCBNQUMgYWRkcmVzc2VzIGZyb20gTlZNRU0gY2VsbHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGJsb2NrLCBuZXQsIGFuZCBibHVldG9vdGggc3Vic3lzdGVtcyB0aGF0IGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChlLmcuLCB3aGVuIGFkZGluZyBhIGJsb2NrIGRldmljZSBvciBzZXR0aW5nIHVwIGEgdmlydHVhbCBIQ0kgZGV2aWNlIHdpdGggdGhlIGFwcHJvcHJpYXRlIHF1aXJrcykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19OVk1FTSYjMzQ7LAogICAgJiMzNDtCVF9IQ0lVQVJUX1FDQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jsa19udm1lbV9yZWdfcmVhZCYjMzQ7LAogICAgJiMzNDtibGtfbnZtZW1fYWRkJiMzNDssCiAgICAmIzM0O2hjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9udm1lbSYjMzQ7LAogICAgJiMzNDtvZl9nZXRfbnZtZW1fZXVpNDgmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBibG9jayBkZXZpY2UgTlZNRU0gcHJvdmlkZXIgd2hpY2ggYWxsb3dzIGJsb2NrIGRldmljZXMgdG8gYWN0IGFzIE5WTUVNIHByb3ZpZGVycy4gSXQgYWxzbyBhZGRzIGxvZ2ljIHRvIHJlYWQgQmx1ZXRvb3RoIGRldmljZSBhZGRyZXNzZXMgYW5kIE1BQyBhZGRyZXNzZXMgZnJvbSBOVk1FTSBjZWxscy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgYmxvY2ssIG5ldCwgYW5kIGJsdWV0b290aCBzdWJzeXN0ZW1zIHRoYXQgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGUuZy4sIHdoZW4gYWRkaW5nIGEgYmxvY2sgZGV2aWNlIG9yIHNldHRpbmcgdXAgYSB2aXJ0dWFsIEhDSSBkZXZpY2Ugd2l0aCB0aGUgYXBwcm9wcmlhdGUgcXVpcmtzKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA5OjI2OjU0LjY1ODA2MjQxOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MDE5ODg3OTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19OVk1FTVwiLFxuICAgIFwiQlRfSENJVUFSVF9RQ0FcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibGtfbnZtZW1fcmVnX3JlYWRcIixcbiAgICBcImJsa19udm1lbV9hZGRcIixcbiAgICBcImhjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9udm1lbVwiLFxuICAgIFwib2ZfZ2V0X252bWVtX2V1aTQ4XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBibG9jayBkZXZpY2UgTlZNRU0gcHJvdmlkZXIgd2hpY2ggYWxsb3dzIGJsb2NrIGRldmljZXMgdG8gYWN0IGFzIE5WTUVNIHByb3ZpZGVycy4gSXQgYWxzbyBhZGRzIGxvZ2ljIHRvIHJlYWQgQmx1ZXRvb3RoIGRldmljZSBhZGRyZXNzZXMgYW5kIE1BQyBhZGRyZXNzZXMgZnJvbSBOVk1FTSBjZWxscy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgYmxvY2ssIG5ldCwgYW5kIGJsdWV0b290aCBzdWJzeXN0ZW1zIHRoYXQgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGUuZy4sIHdoZW4gYWRkaW5nIGEgYmxvY2sgZGV2aWNlIG9yIHNldHRpbmcgdXAgYSB2aXJ0dWFsIEhDSSBkZXZpY2Ugd2l0aCB0aGUgYXBwcm9wcmlhdGUgcXVpcmtzKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6MjY6NTQuNjU4MDczMjU5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODA0MDQ2ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1MzZmMGRlMjZlMjY1YTYyOGY3NjVkMDUyNDAzMTNlYzRlZjkyYmM3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVuIDI5IDA5OjI2OjUzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvbW1jLWNhcmQueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvbW1jLWNhcmQueWFtbFxcbmluZGV4IGE2MWQ2Yzk2ZGY3NTkxLi5jYTkwN2FkNzMwOTU5MiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tYy1jYXJkLnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tYy1jYXJkLnlhbWxcXG5AQCAtNDAsNiArNDAsOSBAQCBwYXR0ZXJuUHJvcGVydGllczpcXG4gICAgICAgICBjb250YWluczpcXG4gICAgICAgICAgIGNvbnN0OiBmaXhlZC1wYXJ0aXRpb25zXFxuIFxcbisgICAgICBudm1lbS1sYXlvdXQ6XFxuKyAgICAgICAgJHJlZjogL3NjaGVtYXMvbnZtZW0vbGF5b3V0cy9udm1lbS1sYXlvdXQueWFtbFxcbitcXG4gcmVxdWlyZWQ6XFxuICAgLSBjb21wYXRpYmxlXFxuICAgLSByZWdcXG5AQCAtODYsNiArODksMzIgQEAgZXhhbXBsZXM6XFxuICAgICAgICAgICAgICAgICAgICAgcmVhZC1vbmx5O1xcbiAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgfTtcXG4rXFxuKyAgICAgICAgICAgIHBhcnRpdGlvbnMtYm9vdDIge1xcbisgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJmaXhlZC1wYXJ0aXRpb25zXFxcIjtcXG4rXFxuKyAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbitcXG4rICAgICAgICAgICAgICAgIG52bWVtLWxheW91dCB7XFxuKyAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJmaXhlZC1sYXlvdXRcXFwiO1xcbitcXG4rICAgICAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgICAgICAgICAgICAgbWFjLWFkZHJANDQwMCB7XFxuKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwibWFjLWJhc2VcXFwiO1xcbisgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSBcXHUwMDNjMHg0NDAwIDB4NlxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICAgICAgICAgICNudm1lbS1jZWxsLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgICAgIH07XFxuK1xcbisgICAgICAgICAgICAgICAgICAgIGJkLWFkZHJANTQwMCB7XFxuKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwibWFjLWJhc2VcXFwiO1xcbisgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSBcXHUwMDNjMHg1NDAwIDB4NlxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICAgICAgICAgICNudm1lbS1jZWxsLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgICAgIH07XFxuKyAgICAgICAgICAgICAgICB9O1xcbisgICAgICAgICAgICB9O1xcbiAgICAgICAgIH07XFxuICAgICB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9ibHVldG9vdGgvcWNvbSxibHVldG9vdGgtY29tbW9uLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2JsdWV0b290aC9xY29tLGJsdWV0b290aC1jb21tb24ueWFtbFxcbmluZGV4IGM4ZTljNTVjMWFmYjRjLi43Y2IyOGYzMGM5YWYwMyAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2JsdWV0b290aC9xY29tLGJsdWV0b290aC1jb21tb24ueWFtbFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYmx1ZXRvb3RoL3Fjb20sYmx1ZXRvb3RoLWNvbW1vbi55YW1sXFxuQEAgLTIyLDQgKzIyLDEzIEBAIHByb3BlcnRpZXM6XFxuICAgICBkZXNjcmlwdGlvbjpcXG4gICAgICAgYm9vdCBmaXJtd2FyZSBpcyBpbmNvcnJlY3RseSBwYXNzaW5nIHRoZSBhZGRyZXNzIGluIGJpZy1lbmRpYW4gb3JkZXJcXG4gXFxuKyAgbnZtZW0tY2VsbHM6XFxuKyAgICBtYXhJdGVtczogMVxcbisgICAgZGVzY3JpcHRpb246XFxuKyAgICAgIE52bWVtIGRhdGEgY2VsbCB0aGF0IGNvbnRhaW5zIGEgNiBieXRlIEJEIGFkZHJlc3Mgd2l0aCB0aGUgbW9zdFxcbisgICAgICBzaWduaWZpY2FudCBieXRlIGZpcnN0IChiaWctZW5kaWFuKS5cXG4rXFxuKyAgbnZtZW0tY2VsbC1uYW1lczpcXG4rICAgIGNvbnN0OiBsb2NhbC1iZC1hZGRyZXNzXFxuK1xcbiBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZVxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL3Fjb20sYXRoMTBrLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL3Fjb20sYXRoMTBrLnlhbWxcXG5pbmRleCBkNGY0ZDcyZWUwZDM4OC4uN2Y5ZDE2Y2I3YzE0MzMgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9xY29tLGF0aDEway55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9xY29tLGF0aDEway55YW1sXFxuQEAgLTkyLDYgKzkyLDIyIEBAIHByb3BlcnRpZXM6XFxuIFxcbiAgIGllZWU4MDIxMS1mcmVxLWxpbWl0OiB0cnVlXFxuIFxcbisgIG52bWVtLWNlbGxzOlxcbisgICAgbWluSXRlbXM6IDFcXG4rICAgIG1heEl0ZW1zOiAzXFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgUmVmZXJlbmNlcyB0byBudm1lbSBjZWxscyBmb3IgTUFDIGFkZHJlc3MgYW5kL29yIGNhbGlicmF0aW9uIGRhdGEuXFxuKyAgICAgIFN1cHBvcnRlZCBjZWxsIG5hbWVzIGFyZSBtYWMtYWRkcmVzcywgY2FsaWJyYXRpb24sIGFuZCBwcmUtY2FsaWJyYXRpb24uXFxuK1xcbisgIG52bWVtLWNlbGwtbmFtZXM6XFxuKyAgICBtaW5JdGVtczogMVxcbisgICAgbWF4SXRlbXM6IDNcXG4rICAgIGl0ZW1zOlxcbisgICAgICBlbnVtOlxcbisgICAgICAgIC0gbWFjLWFkZHJlc3NcXG4rICAgICAgICAtIGNhbGlicmF0aW9uXFxuKyAgICAgICAgLSBwcmUtY2FsaWJyYXRpb25cXG4rXFxuICAgcWNvbSxjYWxpYnJhdGlvbi1kYXRhOlxcbiAgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvdWludDgtYXJyYXlcXG4gICAgIGRlc2NyaXB0aW9uOlxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vcXJiMjIxMC1hcmR1aW5vLWltb2xhLmR0cyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9xcmIyMjEwLWFyZHVpbm8taW1vbGEuZHRzXFxuaW5kZXggYmYwODhmYTk4MDdmMDQuLjEyOGM3YTdlNzZiNWIwIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9xcmIyMjEwLWFyZHVpbm8taW1vbGEuZHRzXFxuKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL3FyYjIyMTAtYXJkdWluby1pbW9sYS5kdHNcXG5AQCAtNDA5LDcgKzQwOSw0MCBAQCBcXHUwMDI2c2RoY18xIHtcXG4gXFx0bm8tc2RpbztcXG4gXFx0bm8tc2Q7XFxuIFxcbitcXHQjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rXFx0I3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcbiBcXHRzdGF0dXMgPSBcXFwib2theVxcXCI7XFxuK1xcbitcXHRjYXJkQDAge1xcbitcXHRcXHRjb21wYXRpYmxlID0gXFxcIm1tYy1jYXJkXFxcIjtcXG4rXFx0XFx0cmVnID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rXFx0XFx0cGFydGl0aW9ucy1ib290MSB7XFxuK1xcdFxcdFxcdGNvbXBhdGlibGUgPSBcXFwiZml4ZWQtcGFydGl0aW9uc1xcXCI7XFxuK1xcbitcXHRcXHRcXHQjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rXFx0XFx0XFx0I3NpemUtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuK1xcbitcXHRcXHRcXHRudm1lbS1sYXlvdXQge1xcbitcXHRcXHRcXHRcXHRjb21wYXRpYmxlID0gXFxcImZpeGVkLWxheW91dFxcXCI7XFxuK1xcdFxcdFxcdFxcdCNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbitcXHRcXHRcXHRcXHQjc2l6ZS1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rXFxuK1xcdFxcdFxcdFxcdHdpZmlfbWFjX2FkZHI6IG1hYy1hZGRyQDQ0MDAge1xcbitcXHRcXHRcXHRcXHRcXHRjb21wYXRpYmxlID0gXFxcIm1hYy1iYXNlXFxcIjtcXG4rXFx0XFx0XFx0XFx0XFx0cmVnID0gXFx1MDAzYzB4NDQwMCAweDZcXHUwMDNlO1xcbitcXHRcXHRcXHRcXHRcXHQjbnZtZW0tY2VsbC1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rXFx0XFx0XFx0XFx0fTtcXG4rXFxuK1xcdFxcdFxcdFxcdGJkX2FkZHI6IGJkLWFkZHJANTQwMCB7XFxuK1xcdFxcdFxcdFxcdFxcdGNvbXBhdGlibGUgPSBcXFwibWFjLWJhc2VcXFwiO1xcbitcXHRcXHRcXHRcXHRcXHRyZWcgPSBcXHUwMDNjMHg1NDAwIDB4NlxcdTAwM2U7XFxuK1xcdFxcdFxcdFxcdFxcdCNudm1lbS1jZWxsLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbitcXHRcXHRcXHRcXHR9O1xcbitcXHRcXHRcXHR9O1xcbitcXHRcXHR9O1xcbitcXHR9O1xcbiB9O1xcbiBcXG4gXFx1MDAyNnNwaTUge1xcbkBAIC01MTIsNiArNTQ1LDkgQEAgYmx1ZXRvb3RoIHtcXG4gXFx0XFx0dmRkY2gwLXN1cHBseSA9IFxcdTAwM2NcXHUwMDI2cG00MTI1X2wyMlxcdTAwM2U7XFxuIFxcdFxcdGVuYWJsZS1ncGlvcyA9IFxcdTAwM2NcXHUwMDI2dGxtbSA4NyBHUElPX0FDVElWRV9ISUdIXFx1MDAzZTtcXG4gXFx0XFx0bWF4LXNwZWVkID0gXFx1MDAzYzMwMDAwMDBcXHUwMDNlO1xcbitcXG4rXFx0XFx0bnZtZW0tY2VsbHMgPSBcXHUwMDNjXFx1MDAyNmJkX2FkZHIgMFxcdTAwM2U7XFxuK1xcdFxcdG52bWVtLWNlbGwtbmFtZXMgPSBcXFwibG9jYWwtYmQtYWRkcmVzc1xcXCI7XFxuIFxcdH07XFxuIH07XFxuIFxcbkBAIC01NTcsNiArNTkzLDkgQEAgXFx1MDAyNndpZmkge1xcbiBcXHRxY29tLGF0aDEway1jYWxpYnJhdGlvbi12YXJpYW50ID0gXFxcIkFyZHVpbm9JbW9sYVxcXCI7XFxuIFxcdGZpcm13YXJlLW5hbWUgPSBcXFwicWNtMjI5MFxcXCI7XFxuIFxcbitcXHRudm1lbS1jZWxscyA9IFxcdTAwM2NcXHUwMDI2d2lmaV9tYWNfYWRkciAwXFx1MDAzZTtcXG4rXFx0bnZtZW0tY2VsbC1uYW1lcyA9IFxcXCJtYWMtYWRkcmVzc1xcXCI7XFxuK1xcbiBcXHRzdGF0dXMgPSBcXFwib2theVxcXCI7XFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9ibG9jay9LY29uZmlnIGIvYmxvY2svS2NvbmZpZ1xcbmluZGV4IDcwZTRhNjZkOTQxZmY2Li5hZWM1ZDlmYzEzYTNkMyAxMDA2NDRcXG4tLS0gYS9ibG9jay9LY29uZmlnXFxuKysrIGIvYmxvY2svS2NvbmZpZ1xcbkBAIC0yMDksNiArMjA5LDE1IEBAIGNvbmZpZyBCTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0tcXG4gXFx0ICBieSBmYWxsaW5nIGJhY2sgdG8gdGhlIGtlcm5lbCBjcnlwdG8gQVBJIHdoZW4gaW5saW5lXFxuIFxcdCAgZW5jcnlwdGlvbiBoYXJkd2FyZSBpcyBub3QgcHJlc2VudC5cXG4gXFxuK2NvbmZpZyBCTEtfTlZNRU1cXG4rXFx0Ym9vbCBcXFwiQmxvY2sgZGV2aWNlIE5WTUVNIHByb3ZpZGVyXFxcIlxcbitcXHRkZXBlbmRzIG9uIE9GXFxuK1xcdGRlcGVuZHMgb24gTlZNRU1cXG4rXFx0aGVscFxcbitcXHQgIEFsbG93IGJsb2NrIGRldmljZXMgKG9yIHBhcnRpdGlvbnMpIHRvIGFjdCBhcyBOVk1FTSBwcm92aWRlcnMsXFxuK1xcdCAgdHlwaWNhbGx5IHVzZWQgd2l0aCBlTU1DIHRvIHN0b3JlIE1BQyBhZGRyZXNzZXMgb3IgV2ktRmlcXG4rXFx0ICBjYWxpYnJhdGlvbiBkYXRhIG9uIGVtYmVkZGVkIGRldmljZXMuXFxuK1xcbiBzb3VyY2UgXFxcImJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZ1xcXCJcXG4gXFxuIGNvbmZpZyBCTEtfUE1cXG5kaWZmIC0tZ2l0IGEvYmxvY2svTWFrZWZpbGUgYi9ibG9jay9NYWtlZmlsZVxcbmluZGV4IGU3YmQzMjBlM2Q2OTcxLi44MjAwMjk3ZmJjYmFiMyAxMDA2NDRcXG4tLS0gYS9ibG9jay9NYWtlZmlsZVxcbisrKyBiL2Jsb2NrL01ha2VmaWxlXFxuQEAgLTM5LDMgKzM5LDQgQEAgb2JqLSQoQ09ORklHX0JMS19JTkxJTkVfRU5DUllQVElPTilcXHQrPSBibGstY3J5cHRvLm8gYmxrLWNyeXB0by1wcm9maWxlLm8gXFxcXFxcbiBcXHRcXHRcXHRcXHRcXHQgICBibGstY3J5cHRvLXN5c2ZzLm9cXG4gb2JqLSQoQ09ORklHX0JMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDSylcXHQrPSBibGstY3J5cHRvLWZhbGxiYWNrLm9cXG4gb2JqLSQoQ09ORklHX0JMT0NLX0hPTERFUl9ERVBSRUNBVEVEKVxcdCs9IGhvbGRlci5vXFxuK29iai0kKENPTkZJR19CTEtfTlZNRU0pICAgICAgICAgICAgICAgICs9IGJsay1udm1lbS5vXFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1udm1lbS5jIGIvYmxvY2svYmxrLW52bWVtLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40YjM1YTc0MjU1MDU5M1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9ibG9jay9ibGstbnZtZW0uY1xcbkBAIC0wLDAgKzEsMTExIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuKy8qXFxuKyAqIGJsb2NrIGRldmljZSBOVk1FTSBwcm92aWRlclxcbisgKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjQgRGFuaWVsIEdvbGxlIFxcdTAwM2NkYW5pZWxAbWFrcm90b3BpYS5vcmdcXHUwMDNlXFxuKyAqIENvcHlyaWdodCAoYykgUXVhbGNvbW0gVGVjaG5vbG9naWVzLCBJbmMuIGFuZC9vciBpdHMgc3Vic2lkaWFyaWVzLlxcbisgKlxcbisgKiBVc2VmdWwgb24gZGV2aWNlcyB1c2luZyBhIHBhcnRpdGlvbiBvbiBhbiBlTU1DIGZvciBNQUMgYWRkcmVzc2VzIG9yXFxuKyAqIFdpLUZpIGNhbGlicmF0aW9uIEVFUFJPTSBkYXRhLlxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9maWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9udm1lbS1wcm92aWRlci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbnZtZW0tY29uc3VtZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlbWFwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImJsay5oXFxcIlxcbitcXG4rc3RhdGljIGludCBibGtfbnZtZW1fcmVnX3JlYWQodm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGZyb20sIHZvaWQgKnZhbCwgc2l6ZV90IGJ5dGVzKVxcbit7XFxuK1xcdGRldl90IGRldnQgPSAoZGV2X3QpKHVpbnRwdHJfdClwcml2O1xcbitcXHRzaXplX3QgYnl0ZXNfbGVmdCA9IGJ5dGVzO1xcbitcXHRsb2ZmX3QgcG9zID0gZnJvbTtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRzdHJ1Y3QgZmlsZSAqYmRldl9maWxlIF9fZnJlZShmcHV0KSA9XFxuK1xcdFxcdGJkZXZfZmlsZV9vcGVuX2J5X2RldihkZXZ0LCBCTEtfT1BFTl9SRUFELCBOVUxMLCBOVUxMKTtcXG4rXFx0aWYgKElTX0VSUihiZGV2X2ZpbGUpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihiZGV2X2ZpbGUpO1xcbitcXG4rXFx0d2hpbGUgKGJ5dGVzX2xlZnQpIHtcXG4rXFx0XFx0cGdvZmZfdCBmX2luZGV4ID0gcG9zIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuK1xcdFxcdHNpemVfdCBmb2xpb19vZmY7XFxuK1xcdFxcdHNpemVfdCB0b19yZWFkO1xcbitcXG4rXFx0XFx0Zm9saW8gPSByZWFkX21hcHBpbmdfZm9saW8oYmRldl9maWxlLVxcdTAwM2VmX21hcHBpbmcsIGZfaW5kZXgsIE5VTEwpO1xcbitcXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xcbitcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKGZvbGlvKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGZvbGlvX29mZiA9IG9mZnNldF9pbl9mb2xpbyhmb2xpbywgcG9zKTtcXG4rXFx0XFx0dG9fcmVhZCA9IG1pbihieXRlc19sZWZ0LCBmb2xpb19zaXplKGZvbGlvKSAtIGZvbGlvX29mZik7XFxuK1xcdFxcdG1lbWNweV9mcm9tX2ZvbGlvKHZhbCwgZm9saW8sIGZvbGlvX29mZiwgdG9fcmVhZCk7XFxuK1xcdFxcdHBvcyArPSB0b19yZWFkO1xcbitcXHRcXHRieXRlc19sZWZ0IC09IHRvX3JlYWQ7XFxuK1xcdFxcdHZhbCArPSB0b19yZWFkO1xcbitcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitpbnQgYmxrX252bWVtX2FkZChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZiZGV2LVxcdTAwM2ViZF9kZXZpY2U7XFxuK1xcdHN0cnVjdCBudm1lbV9jb25maWcgY29uZmlnID0ge307XFxuK1xcbitcXHQvKiBza2lwIGRldmljZXMgd2hpY2ggZG8gbm90IGhhdmUgYSBkZXZpY2UgdHJlZSBub2RlICovXFxuK1xcdGlmICghZGV2X29mX25vZGUoZGV2KSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBza2lwIGRldmljZXMgd2l0aG91dCBhbiBudm1lbSBsYXlvdXQgZGVmaW5lZCAqL1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkIF9fZnJlZShkZXZpY2Vfbm9kZSkgPVxcbitcXHRcXHRvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXZfb2Zfbm9kZShkZXYpLCBcXFwibnZtZW0tbGF5b3V0XFxcIik7XFxuK1xcdGlmICghY2hpbGQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LypcXG4rXFx0ICogc2tpcCBibG9jayBkZXZpY2UgdG9vIGxhcmdlIHRvIGJlIHJlcHJlc2VudGVkIGFzIE5WTUVNIGRldmljZXMsXFxuK1xcdCAqIG52bWVtX2NvbmZpZy5zaXplIGlzIGEgc2lnbmVkIGludFxcbitcXHQgKi9cXG4rXFx0aWYgKGJkZXZfbnJfYnl0ZXMoYmRldikgXFx1MDAzZSBJTlRfTUFYKSB7XFxuK1xcdFxcdGRldl93YXJuKGRldiwgXFxcImJsb2NrIGRldmljZSB0b28gbGFyZ2UgdG8gYmUgYW4gTlZNRU0gcHJvdmlkZXJcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0Y29uZmlnLmlkID0gTlZNRU1fREVWSURfTk9ORTtcXG4rXFx0Y29uZmlnLmRldiA9IGRldjtcXG4rXFx0Y29uZmlnLm5hbWUgPSBkZXZfbmFtZShkZXYpO1xcbitcXHRjb25maWcub3duZXIgPSBUSElTX01PRFVMRTtcXG4rXFx0Y29uZmlnLnByaXYgPSAodm9pZCAqKSh1aW50cHRyX3QpZGV2LVxcdTAwM2VkZXZ0O1xcbitcXHRjb25maWcucmVnX3JlYWQgPSBibGtfbnZtZW1fcmVnX3JlYWQ7XFxuK1xcdGNvbmZpZy5zaXplID0gYmRldl9ucl9ieXRlcyhiZGV2KTtcXG4rXFx0Y29uZmlnLndvcmRfc2l6ZSA9IDE7XFxuK1xcdGNvbmZpZy5zdHJpZGUgPSAxO1xcbitcXHRjb25maWcucmVhZF9vbmx5ID0gdHJ1ZTtcXG4rXFx0Y29uZmlnLnJvb3Rfb25seSA9IHRydWU7XFxuK1xcdGNvbmZpZy5pZ25vcmVfd3AgPSB0cnVlO1xcbitcXHRjb25maWcub2Zfbm9kZSA9IHRvX29mX25vZGUoZGV2LVxcdTAwM2Vmd25vZGUpO1xcbitcXG4rXFx0YmRldi1cXHUwMDNlYmRfbnZtZW0gPSBudm1lbV9yZWdpc3RlcihcXHUwMDI2Y29uZmlnKTtcXG4rXFx0aWYgKElTX0VSUihiZGV2LVxcdTAwM2ViZF9udm1lbSkpIHtcXG4rXFx0XFx0aW50IHJldCA9IFBUUl9FUlIoYmRldi1cXHUwMDNlYmRfbnZtZW0pO1xcbitcXG4rXFx0XFx0YmRldi1cXHUwMDNlYmRfbnZtZW0gPSBOVUxMO1xcbitcXHRcXHRkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCBcXFwiRmFpbGVkIHRvIHJlZ2lzdGVyIE5WTUVNIGRldmljZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbit2b2lkIGJsa19udm1lbV9kZWwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcXG4re1xcbitcXHRudm1lbV91bnJlZ2lzdGVyKGJkZXYtXFx1MDAzZWJkX252bWVtKTtcXG4rXFx0YmRldi1cXHUwMDNlYmRfbnZtZW0gPSBOVUxMO1xcbit9XFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay5oIGIvYmxvY2svYmxrLmhcXG5pbmRleCAyNWFmOGFjNWVmMGY3Ny4uZGFkOGYwZDdhMjE4ZWQgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmxrLmhcXG4rKysgYi9ibG9jay9ibGsuaFxcbkBAIC04MTAsNCArODEwLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBibGtfZGVidWdmc191bmxvY2soc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXFxuIFxcdG1lbWFsbG9jX25vaW9fcmVzdG9yZShtZW1mbGFncyk7XFxuIH1cXG4gXFxuKyNpZmRlZiBDT05GSUdfQkxLX05WTUVNXFxuK2ludCBibGtfbnZtZW1fYWRkKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpO1xcbit2b2lkIGJsa19udm1lbV9kZWwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldik7XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgaW50IGJsa19udm1lbV9hZGQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikgeyByZXR1cm4gMDsgfVxcbitzdGF0aWMgaW5saW5lIHZvaWQgYmxrX252bWVtX2RlbChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KSB7fVxcbisjZW5kaWZcXG4rXFxuICNlbmRpZiAvKiBCTEtfSU5URVJOQUxfSCAqL1xcbmRpZmYgLS1naXQgYS9ibG9jay9nZW5oZC5jIGIvYmxvY2svZ2VuaGQuY1xcbmluZGV4IGY4NGI2YTM1NWI1NzRhLi4wYzljNWU1ZWE3YmFmZiAxMDA2NDRcXG4tLS0gYS9ibG9jay9nZW5oZC5jXFxuKysrIGIvYmxvY2svZ2VuaGQuY1xcbkBAIC00MjEsNiArNDIxLDggQEAgc3RhdGljIHZvaWQgYWRkX2Rpc2tfZmluYWwoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRkZXZfc2V0X3VldmVudF9zdXBwcmVzcyhkZGV2LCAwKTtcXG4gXFx0XFx0ZGlza191ZXZlbnQoZGlzaywgS09CSl9BREQpO1xcbitcXG4rXFx0XFx0YmxrX252bWVtX2FkZChkaXNrLVxcdTAwM2VwYXJ0MCk7XFxuIFxcdH1cXG4gXFxuIFxcdGJsa19hcHBseV9iZGlfbGltaXRzKGRpc2stXFx1MDAzZWJkaSwgXFx1MDAyNmRpc2stXFx1MDAzZXF1ZXVlLVxcdTAwM2VsaW1pdHMpO1xcbkBAIC03MDQsNiArNzA2LDggQEAgc3RhdGljIHZvaWQgX19kZWxfZ2VuZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4gXFxuIFxcdGRpc2tfZGVsX2V2ZW50cyhkaXNrKTtcXG4gXFxuK1xcdGJsa19udm1lbV9kZWwoZGlzay1cXHUwMDNlcGFydDApO1xcbitcXG4gXFx0LypcXG4gXFx0ICogUHJldmVudCBuZXcgb3BlbmVycyBieSB1bmxpbmtlZCB0aGUgYmRldiBpbm9kZS5cXG4gXFx0ICovXFxuZGlmZiAtLWdpdCBhL2Jsb2NrL3BhcnRpdGlvbnMvb2YuYyBiL2Jsb2NrL3BhcnRpdGlvbnMvb2YuY1xcbmluZGV4IDUzNjY0ZWEwNmI2NTQwLi42MGFhM2Q2OTA2Y2ExZCAxMDA2NDRcXG4tLS0gYS9ibG9jay9wYXJ0aXRpb25zL29mLmNcXG4rKysgYi9ibG9jay9wYXJ0aXRpb25zL29mLmNcXG5AQCAtMTUsNiArMTUsMTAgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9vZl9wYXJ0aXRpb24oc3RydWN0IGRldmljZV9ub2RlICpucCwgaW50IHNsb3QpXFxuIFxcdGludCBhX2NlbGxzID0gb2Zfbl9hZGRyX2NlbGxzKG5wKTtcXG4gXFx0aW50IHNfY2VsbHMgPSBvZl9uX3NpemVfY2VsbHMobnApO1xcbiBcXG4rXFx0LyogU2tpcCBub2RlcyB3aXRob3V0IGEgcmVnIHByb3BlcnR5IChlLmcuIG52bWVtLWxheW91dCkgKi9cXG4rXFx0aWYgKCFyZWcpXFxuK1xcdFxcdHJldHVybiAxO1xcbitcXG4gXFx0LyogTWFrZSBzdXJlIHJlZyBsZW4gbWF0Y2ggdGhlIGV4cGVjdGVkIGFkZHIgYW5kIHNpemUgY2VsbHMgKi9cXG4gXFx0aWYgKGxlbiAvIHNpemVvZigqcmVnKSAhPSBhX2NlbGxzICsgc19jZWxscylcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTgyLDE0ICs4NiwxNSBAQCBpbnQgb2ZfcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUpXFxuIFxcdHNsb3QgPSAxO1xcbiBcXHQvKiBWYWxpZGF0ZSBwYXJpdGlvbiBvZmZzZXQgYW5kIHNpemUgKi9cXG4gXFx0Zm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShwYXJ0aXRpb25zX25wLCBucCkge1xcbi1cXHRcXHRpZiAodmFsaWRhdGVfb2ZfcGFydGl0aW9uKG5wLCBzbG90KSkge1xcbitcXHRcXHRpbnQgZXJyID0gdmFsaWRhdGVfb2ZfcGFydGl0aW9uKG5wLCBzbG90KTtcXG4rXFxuK1xcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdFxcdG9mX25vZGVfcHV0KG5wKTtcXG4gXFx0XFx0XFx0b2Zfbm9kZV9wdXQocGFydGl0aW9uc19ucCk7XFxuLVxcbiBcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdFxcdH1cXG4tXFxuLVxcdFxcdHNsb3QrKztcXG4rXFx0XFx0aWYgKCFlcnIpXFxuK1xcdFxcdFxcdHNsb3QrKztcXG4gXFx0fVxcbiBcXG4gXFx0c2xvdCA9IDE7XFxuQEAgLTk5LDkgKzEwNCwxMCBAQCBpbnQgb2ZfcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRhZGRfb2ZfcGFydGl0aW9uKHN0YXRlLCBzbG90LCBucCk7XFxuLVxcbi1cXHRcXHRzbG90Kys7XFxuK1xcdFxcdGlmIChvZl9wcm9wZXJ0eV9wcmVzZW50KG5wLCBcXFwicmVnXFxcIikpIHtcXG4rXFx0XFx0XFx0YWRkX29mX3BhcnRpdGlvbihzdGF0ZSwgc2xvdCwgbnApO1xcbitcXHRcXHRcXHRzbG90Kys7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0c2VxX2J1Zl9wdXRzKFxcdTAwMjZzdGF0ZS1cXHUwMDNlcHBfYnVmLCBcXFwiXFxcXG5cXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmNcXG5pbmRleCAwNGViZTI5MGJjNzg0ZS4uMDZjYjc4N2IwNTU5ZjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuY1xcbisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0cWNhLmNcXG5AQCAtNzIzLDggKzcyMywxMSBAQCBzdGF0aWMgaW50IHFjYV9jaGVja19iZGFkZHIoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGNvbnN0IHN0cnVjdCBxY2FfZndfY29uZmlnICpjb1xcbiBcXHR9XFxuIFxcbiBcXHRiZGEgPSAoc3RydWN0IGhjaV9ycF9yZWFkX2JkX2FkZHIgKilza2ItXFx1MDAzZWRhdGE7XFxuLVxcdGlmICghYmFjbXAoXFx1MDAyNmJkYS1cXHUwMDNlYmRhZGRyLCBcXHUwMDI2Y29uZmlnLVxcdTAwM2ViZGFkZHIpKVxcbitcXHRpZiAoIWJhY21wKFxcdTAwMjZiZGEtXFx1MDAzZWJkYWRkciwgXFx1MDAyNmNvbmZpZy1cXHUwMDNlYmRhZGRyKSkge1xcbiBcXHRcXHRoY2lfc2V0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19VU0VfQkRBRERSX1BST1BFUlRZKTtcXG4rXFx0XFx0aGNpX3NldF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfVVNFX0JEQUREUl9OVk1FTSk7XFxuK1xcdFxcdGhjaV9zZXRfcXVpcmsoaGRldiwgSENJX1FVSVJLX0JEQUREUl9OVk1FTV9CRSk7XFxuK1xcdH1cXG4gXFxuIFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcXG5pbmRleCA4ODA4ZWU3NmU3M2MwOS4uYWNlNmY1OWI4NjBkMDggMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcXG5AQCAtNzMsNiArNzMsOSBAQCBzdHJ1Y3QgYmxvY2tfZGV2aWNlIHtcXG4gXFx0aW50XFx0XFx0XFx0YmRfd3JpdGVycztcXG4gI2lmZGVmIENPTkZJR19TRUNVUklUWVxcbiBcXHR2b2lkXFx0XFx0XFx0KmJkX3NlY3VyaXR5O1xcbisjZW5kaWZcXG4rI2lmZGVmIENPTkZJR19CTEtfTlZNRU1cXG4rXFx0c3RydWN0IG52bWVtX2RldmljZVxcdCpiZF9udm1lbTtcXG4gI2VuZGlmXFxuIFxcdC8qXFxuIFxcdCAqIGtlZXAgdGhpcyBvdXQtb2YtbGluZSBhcyBpdCdzIGJvdGggYmlnIGFuZCBub3QgbmVlZGVkIGluIHRoZSBmYXN0XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXFxuaW5kZXggOTIxM2E1NzE2Zjk1YTcuLjVhNzRiZDVmYmE5ODQwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXFxuQEAgLTMwLDYgKzMwLDcgQEBcXG4gXFxuIHN0cnVjdCBtb2R1bGU7XFxuIHN0cnVjdCByZXF1ZXN0X3F1ZXVlO1xcbitzdHJ1Y3QgbnZtZW1fZGV2aWNlO1xcbiBzdHJ1Y3QgZWxldmF0b3JfcXVldWU7XFxuIHN0cnVjdCBibGtfdHJhY2U7XFxuIHN0cnVjdCByZXF1ZXN0O1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29mX25ldC5oIGIvaW5jbHVkZS9saW51eC9vZl9uZXQuaFxcbmluZGV4IGQ4ODcxNWEwYjNhNTJmLi43ODU0YmE1NTVkOWE1NSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L29mX25ldC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9vZl9uZXQuaFxcbkBAIC0xNSw2ICsxNSw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlO1xcbiBleHRlcm4gaW50IG9mX2dldF9waHlfbW9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBwaHlfaW50ZXJmYWNlX3QgKmludGVyZmFjZSk7XFxuIGV4dGVybiBpbnQgb2ZfZ2V0X21hY19hZGRyZXNzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHU4ICptYWMpO1xcbiBleHRlcm4gaW50IG9mX2dldF9tYWNfYWRkcmVzc19udm1lbShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCB1OCAqbWFjKTtcXG4raW50IG9mX2dldF9udm1lbV9ldWk0OChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBjb25zdCBjaGFyICpjZWxsX25hbWUsIHU4ICphZGRyKTtcXG4gaW50IG9mX2dldF9ldGhkZXZfYWRkcmVzcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4gZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICpvZl9maW5kX25ldF9kZXZpY2VfYnlfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTtcXG4gI2Vsc2VcXG5AQCAtMzQsNiArMzUsMTIgQEAgc3RhdGljIGlubGluZSBpbnQgb2ZfZ2V0X21hY19hZGRyZXNzX252bWVtKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHU4ICptYWMpXFxuIFxcdHJldHVybiAtRU5PREVWO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGludCBvZl9nZXRfbnZtZW1fZXVpNDgoc3RydWN0IGRldmljZV9ub2RlICpucCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgY29uc3QgY2hhciAqY2VsbF9uYW1lLCB1OCAqYWRkcilcXG4re1xcbitcXHRyZXR1cm4gLUVOT0RFVjtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBpbnQgb2ZfZ2V0X2V0aGRldl9hZGRyZXNzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4gXFx0cmV0dXJuIC1FTk9ERVY7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaFxcbmluZGV4IDM4MTg2YTI0NWYxNGRiLi4xNDVhYjk0ZTUxNDgyZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmhcXG4rKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmhcXG5AQCAtMTYxLDYgKzE2MSwyNCBAQCBlbnVtIHtcXG4gXFx0ICovXFxuIFxcdEhDSV9RVUlSS19CREFERFJfUFJPUEVSVFlfQlJPS0VOLFxcbiBcXG4rXFx0LyogV2hlbiB0aGlzIHF1aXJrIGlzIHNldCwgdGhlIHB1YmxpYyBCbHVldG9vdGggYWRkcmVzc1xcbitcXHQgKiBpbml0aWFsbHkgcmVwb3J0ZWQgYnkgSENJIFJlYWQgQkQgQWRkcmVzcyBjb21tYW5kXFxuK1xcdCAqIGlzIGNvbnNpZGVyZWQgaW52YWxpZC4gVGhlIHB1YmxpYyBCRCBBZGRyZXNzIGNhbiBiZVxcbitcXHQgKiByZXRyaWV2ZWQgdmlhIGEgJ2xvY2FsLWJkLWFkZHJlc3MnIE5WTUVNIGNlbGwuXFxuK1xcdCAqXFxuK1xcdCAqIFRoaXMgcXVpcmsgY2FuIGJlIHNldCBiZWZvcmUgaGNpX3JlZ2lzdGVyX2RldiBpcyBjYWxsZWQgb3JcXG4rXFx0ICogZHVyaW5nIHRoZSBoZGV2LVxcdTAwM2VzZXR1cCB2ZW5kb3IgY2FsbGJhY2suXFxuK1xcdCAqL1xcbitcXHRIQ0lfUVVJUktfVVNFX0JEQUREUl9OVk1FTSxcXG4rXFxuK1xcdC8qIFdoZW4gdGhpcyBxdWlyayBpcyBzZXQsIHRoZSBCbHVldG9vdGggRGV2aWNlIEFkZHJlc3MgcHJvdmlkZWQgYnlcXG4rXFx0ICogdGhlICdsb2NhbC1iZC1hZGRyZXNzJyBOVk1FTSBpcyBzdG9yZWQgaW4gYmlnLWVuZGlhbiBvcmRlci5cXG4rXFx0ICpcXG4rXFx0ICogVGhpcyBxdWlyayBjYW4gYmUgc2V0IGJlZm9yZSBoY2lfcmVnaXN0ZXJfZGV2IGlzIGNhbGxlZCBvclxcbitcXHQgKiBkdXJpbmcgdGhlIGhkZXYtXFx1MDAzZXNldHVwIHZlbmRvciBjYWxsYmFjay5cXG4rXFx0ICovXFxuK1xcdEhDSV9RVUlSS19CREFERFJfTlZNRU1fQkUsXFxuK1xcbiBcXHQvKiBXaGVuIHRoaXMgcXVpcmsgaXMgc2V0LCB0aGUgZHVwbGljYXRlIGZpbHRlcmluZyBkdXJpbmdcXG4gXFx0ICogc2Nhbm5pbmcgaXMgYmFzZWQgb24gQmx1ZXRvb3RoIGRldmljZXMgYWRkcmVzc2VzLiBUbyBhbGxvd1xcbiBcXHQgKiBSU1NJIGJhc2VkIHVwZGF0ZXMsIHJlc3RhcnQgc2Nhbm5pbmcgaWYgbmVlZGVkLlxcbmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmNcXG5pbmRleCAzYmU4YzM1ODFjNmNhYS4uNzM0ZWVkMjBkZTA0NGIgMTAwNjQ0XFxuLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfc3luYy5jXFxuKysrIGIvbmV0L2JsdWV0b290aC9oY2lfc3luYy5jXFxuQEAgLTcsNiArNyw3IEBAXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9uZXQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2JsdWV0b290aC9oY2lfY29yZS5oXFx1MDAzZVxcbkBAIC0zNTkzLDYgKzM1OTQsMzcgQEAgaW50IGhjaV9wb3dlcmVkX3VwZGF0ZV9zeW5jKHN0cnVjdCBoY2lfZGV2ICpoZGV2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGhjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9udm1lbSAtIEdldCB0aGUgQmx1ZXRvb3RoIERldmljZSBBZGRyZXNzXFxuKyAqXFx0XFx0XFx0XFx0ICAgIChCRF9BRERSKSBmb3IgYSBIQ0kgZGV2aWNlIGZyb21cXG4rICpcXHRcXHRcXHRcXHQgICAgYW4gTlZNRU0gY2VsbC5cXG4rICogQGhkZXY6XFx0VGhlIEhDSSBkZXZpY2VcXG4rICpcXG4rICogU2VhcmNoIGZvciAnbG9jYWwtYmQtYWRkcmVzcycgTlZNRU0gY2VsbCBpbiB0aGUgZGV2aWNlIGZpcm13YXJlIG5vZGUuXFxuKyAqXFxuKyAqIEFsbC16ZXJvIEJEIGFkZHJlc3NlcyBhcmUgcmVqZWN0ZWQgKHVucHJvdmlzaW9uZWQpLlxcbisgKi9cXG4rc3RhdGljIGludCBoY2lfZGV2X2dldF9iZF9hZGRyX2Zyb21fbnZtZW0oc3RydWN0IGhjaV9kZXYgKmhkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldl9vZl9ub2RlKGhkZXYtXFx1MDAzZWRldi5wYXJlbnQpO1xcbitcXHR1OCBiYVtzaXplb2YoYmRhZGRyX3QpXTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmICghbnApXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0ZXJyID0gb2ZfZ2V0X252bWVtX2V1aTQ4KG5wLCBcXFwibG9jYWwtYmQtYWRkcmVzc1xcXCIsIGJhKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGlmIChoY2lfdGVzdF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfQkRBRERSX05WTUVNX0JFKSlcXG4rXFx0XFx0YmFzd2FwKFxcdTAwMjZoZGV2LVxcdTAwM2VwdWJsaWNfYWRkciwgKGJkYWRkcl90ICopYmEpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGJhY3B5KFxcdTAwMjZoZGV2LVxcdTAwM2VwdWJsaWNfYWRkciwgKGJkYWRkcl90ICopYmEpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBoY2lfZGV2X2dldF9iZF9hZGRyX2Zyb21fcHJvcGVydHkgLSBHZXQgdGhlIEJsdWV0b290aCBEZXZpY2UgQWRkcmVzc1xcbiAgKlxcdFxcdFxcdFxcdCAgICAgICAoQkRfQUREUikgZm9yIGEgSENJIGRldmljZSBmcm9tXFxuQEAgLTUwNzIsMTIgKzUxMDQsMTcgQEAgc3RhdGljIGludCBoY2lfZGV2X3NldHVwX3N5bmMoc3RydWN0IGhjaV9kZXYgKmhkZXYpXFxuIFxcdCAqIGl0cyBzZXR1cCBjYWxsYmFjay5cXG4gXFx0ICovXFxuIFxcdGludmFsaWRfYmRhZGRyID0gaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX0lOVkFMSURfQkRBRERSKSB8fFxcbi1cXHRcXHRcXHQgaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX1VTRV9CREFERFJfUFJPUEVSVFkpO1xcbitcXHRcXHRcXHQgaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX1VTRV9CREFERFJfUFJPUEVSVFkpIHx8XFxuK1xcdFxcdFxcdCBoY2lfdGVzdF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfVVNFX0JEQUREUl9OVk1FTSk7XFxuIFxcdGlmICghcmV0KSB7XFxuIFxcdFxcdGlmIChoY2lfdGVzdF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfVVNFX0JEQUREUl9QUk9QRVJUWSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICFiYWNtcChcXHUwMDI2aGRldi1cXHUwMDNlcHVibGljX2FkZHIsIEJEQUREUl9BTlkpKVxcbiBcXHRcXHRcXHRoY2lfZGV2X2dldF9iZF9hZGRyX2Zyb21fcHJvcGVydHkoaGRldik7XFxuIFxcbitcXHRcXHRpZiAoaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX1VTRV9CREFERFJfTlZNRU0pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhYmFjbXAoXFx1MDAyNmhkZXYtXFx1MDAzZXB1YmxpY19hZGRyLCBCREFERFJfQU5ZKSlcXG4rXFx0XFx0XFx0aGNpX2Rldl9nZXRfYmRfYWRkcl9mcm9tX252bWVtKGhkZXYpO1xcbitcXG4gXFx0XFx0aWYgKGludmFsaWRfYmRhZGRyIFxcdTAwMjZcXHUwMDI2IGJhY21wKFxcdTAwMjZoZGV2LVxcdTAwM2VwdWJsaWNfYWRkciwgQkRBRERSX0FOWSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIGhkZXYtXFx1MDAzZXNldF9iZGFkZHIpIHtcXG4gXFx0XFx0XFx0cmV0ID0gaGRldi1cXHUwMDNlc2V0X2JkYWRkcihoZGV2LCBcXHUwMDI2aGRldi1cXHUwMDNlcHVibGljX2FkZHIpO1xcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9vZl9uZXQuYyBiL25ldC9jb3JlL29mX25ldC5jXFxuaW5kZXggOTNlYTQyNWI5MjQ4YTIuLjExYzFhY2NhMTUxMjY2IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL29mX25ldC5jXFxuKysrIGIvbmV0L2NvcmUvb2ZfbmV0LmNcXG5AQCAtNjEsOSArNjEsNyBAQCBzdGF0aWMgaW50IG9mX2dldF9tYWNfYWRkcihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBjb25zdCBjaGFyICpuYW1lLCB1OCAqYWRkcilcXG4gaW50IG9mX2dldF9tYWNfYWRkcmVzc19udm1lbShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCB1OCAqYWRkcilcXG4ge1xcbiBcXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShucCk7XFxuLVxcdHN0cnVjdCBudm1lbV9jZWxsICpjZWxsO1xcbi1cXHRjb25zdCB2b2lkICptYWM7XFxuLVxcdHNpemVfdCBsZW47XFxuK1xcdHU4IG1hY1tFVEhfQUxFTl0gX19hbGlnbmVkKHNpemVvZih1MTYpKTtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdC8qIFRyeSBsb29rdXAgYnkgZGV2aWNlIGZpcnN0LCB0aGVyZSBtaWdodCBiZSBhIG52bWVtX2NlbGxfbG9va3VwXFxuQEAgLTc1LDI3ICs3Myw1NCBAQCBpbnQgb2ZfZ2V0X21hY19hZGRyZXNzX252bWVtKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHU4ICphZGRyKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcbi1cXHRjZWxsID0gb2ZfbnZtZW1fY2VsbF9nZXQobnAsIFxcXCJtYWMtYWRkcmVzc1xcXCIpO1xcbitcXHRyZXQgPSBvZl9nZXRfbnZtZW1fZXVpNDgobnAsIFxcXCJtYWMtYWRkcmVzc1xcXCIsIG1hYyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobWFjKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRldGhlcl9hZGRyX2NvcHkoYWRkciwgbWFjKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChvZl9nZXRfbWFjX2FkZHJlc3NfbnZtZW0pO1xcbitcXG4rLyoqXFxuKyAqIG9mX2dldF9udm1lbV9ldWk0OCAtIFJlYWQgYSA2LWJ5dGUgRVVJLTQ4IGFkZHJlc3MgZnJvbSBhIG5hbWVkIE5WTUVNIGNlbGwuXFxuKyAqIEBucDpcXHRcXHREZXZpY2Ugbm9kZSB0byBsb29rIHVwIHRoZSBOVk1FTSBjZWxsIGZyb20uXFxuKyAqIEBjZWxsX25hbWU6XFx0TmFtZSBvZiB0aGUgTlZNRU0gY2VsbCAoZS5nLiBcXFwibWFjLWFkZHJlc3NcXFwiLCBcXFwibG9jYWwtYmQtYWRkcmVzc1xcXCIpLlxcbisgKiBAYWRkcjpcXHRPdXRwdXQgYnVmZmVyIGZvciB0aGUgNi1ieXRlIGFkZHJlc3MuXFxuKyAqXFxuKyAqIFJlYWRzIHRoZSBuYW1lZCBOVk1FTSBjZWxsIGFuZCB2YWxpZGF0ZXMgdGhhdCBpdCBjb250YWlucyBhIG5vbi16ZXJvIDYtYnl0ZVxcbisgKiBhZGRyZXNzLiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cXG4rICovXFxuK2ludCBvZl9nZXRfbnZtZW1fZXVpNDgoc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3QgY2hhciAqY2VsbF9uYW1lLCB1OCAqYWRkcilcXG4re1xcbitcXHRzdHJ1Y3QgbnZtZW1fY2VsbCAqY2VsbDtcXG4rXFx0Y29uc3Qgdm9pZCAqZXVpNDg7XFxuK1xcdHNpemVfdCBsZW47XFxuK1xcbitcXHRjZWxsID0gb2ZfbnZtZW1fY2VsbF9nZXQobnAsIGNlbGxfbmFtZSk7XFxuIFxcdGlmIChJU19FUlIoY2VsbCkpXFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKGNlbGwpO1xcbiBcXG4tXFx0bWFjID0gbnZtZW1fY2VsbF9yZWFkKGNlbGwsIFxcdTAwMjZsZW4pO1xcbitcXHRldWk0OCA9IG52bWVtX2NlbGxfcmVhZChjZWxsLCBcXHUwMDI2bGVuKTtcXG4gXFx0bnZtZW1fY2VsbF9wdXQoY2VsbCk7XFxuIFxcbi1cXHRpZiAoSVNfRVJSKG1hYykpXFxuLVxcdFxcdHJldHVybiBQVFJfRVJSKG1hYyk7XFxuK1xcdGlmIChJU19FUlIoZXVpNDgpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihldWk0OCk7XFxuIFxcbi1cXHRpZiAobGVuICE9IEVUSF9BTEVOIHx8ICFpc192YWxpZF9ldGhlcl9hZGRyKG1hYykpIHtcXG4tXFx0XFx0a2ZyZWUobWFjKTtcXG4rXFx0aWYgKGxlbiAhPSBFVEhfQUxFTiB8fCAhbWVtY2hyX2ludihldWk0OCwgMCwgRVRIX0FMRU4pKSB7XFxuK1xcdFxcdGtmcmVlKGV1aTQ4KTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuLVxcdG1lbWNweShhZGRyLCBtYWMsIEVUSF9BTEVOKTtcXG4tXFx0a2ZyZWUobWFjKTtcXG4rXFx0bWVtY3B5KGFkZHIsIGV1aTQ4LCBFVEhfQUxFTik7XFxuK1xcdGtmcmVlKGV1aTQ4KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuLUVYUE9SVF9TWU1CT0wob2ZfZ2V0X21hY19hZGRyZXNzX252bWVtKTtcXG4rRVhQT1JUX1NZTUJPTF9HUEwob2ZfZ2V0X252bWVtX2V1aTQ4KTtcXG4gXFxuIC8qKlxcbiAgKiBvZl9nZXRfbWFjX2FkZHJlc3MoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwOToyNjo1NS4xMzkzNDAzMTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NTM4NTk3Njk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19OVk1FTVwiLFxuICAgIFwiQlRfSENJVUFSVF9RQ0FcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibGtfbnZtZW1fcmVnX3JlYWRcIixcbiAgICBcImJsa19udm1lbV9hZGRcIixcbiAgICBcImhjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9udm1lbVwiLFxuICAgIFwib2ZfZ2V0X252bWVtX2V1aTQ4XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBibG9jayBkZXZpY2UgTlZNRU0gcHJvdmlkZXIgd2hpY2ggYWxsb3dzIGJsb2NrIGRldmljZXMgdG8gYWN0IGFzIE5WTUVNIHByb3ZpZGVycy4gSXQgYWxzbyBhZGRzIGxvZ2ljIHRvIHJlYWQgQmx1ZXRvb3RoIGRldmljZSBhZGRyZXNzZXMgYW5kIE1BQyBhZGRyZXNzZXMgZnJvbSBOVk1FTSBjZWxscy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgYmxvY2ssIG5ldCwgYW5kIGJsdWV0b290aCBzdWJzeXN0ZW1zIHRoYXQgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGUuZy4sIHdoZW4gYWRkaW5nIGEgYmxvY2sgZGV2aWNlIG9yIHNldHRpbmcgdXAgYSB2aXJ0dWFsIEhDSSBkZXZpY2Ugd2l0aCB0aGUgYXBwcm9wcmlhdGUgcXVpcmtzKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MzZmMGRlMjZlMjY1YTYyOGY3NjVkMDUyNDAzMTNlYzRlZjkyYmM3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjkgMDk6MjY6NTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tYy1jYXJkLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tYy1jYXJkLnlhbWxcbmluZGV4IGE2MWQ2Yzk2ZGY3NTkxLi5jYTkwN2FkNzMwOTU5MiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvbW1jLWNhcmQueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21tYy9tbWMtY2FyZC55YW1sXG5AQCAtNDAsNiArNDAsOSBAQCBwYXR0ZXJuUHJvcGVydGllczpcbiAgICAgICAgIGNvbnRhaW5zOlxuICAgICAgICAgICBjb25zdDogZml4ZWQtcGFydGl0aW9uc1xuIFxuKyAgICAgIG52bWVtLWxheW91dDpcbisgICAgICAgICRyZWY6IC9zY2hlbWFzL252bWVtL2xheW91dHMvbnZtZW0tbGF5b3V0LnlhbWxcbitcbiByZXF1aXJlZDpcbiAgIC0gY29tcGF0aWJsZVxuICAgLSByZWdcbkBAIC04Niw2ICs4OSwzMiBAQCBleGFtcGxlczpcbiAgICAgICAgICAgICAgICAgICAgIHJlYWQtb25seTtcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICB9O1xuK1xuKyAgICAgICAgICAgIHBhcnRpdGlvbnMtYm9vdDIge1xuKyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJmaXhlZC1wYXJ0aXRpb25zXCI7XG4rXG4rICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuK1xuKyAgICAgICAgICAgICAgICBudm1lbS1sYXlvdXQge1xuKyAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwiZml4ZWQtbGF5b3V0XCI7XG4rXG4rICAgICAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rXG4rICAgICAgICAgICAgICAgICAgICBtYWMtYWRkckA0NDAwIHtcbisgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJtYWMtYmFzZVwiO1xuKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzB4NDQwMCAweDZcdTAwM2U7XG4rICAgICAgICAgICAgICAgICAgICAgICAgI252bWVtLWNlbGwtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAgICAgfTtcbitcbisgICAgICAgICAgICAgICAgICAgIGJkLWFkZHJANTQwMCB7XG4rICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwibWFjLWJhc2VcIjtcbisgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MweDU0MDAgMHg2XHUwMDNlO1xuKyAgICAgICAgICAgICAgICAgICAgICAgICNudm1lbS1jZWxsLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICAgICAgICAgICAgIH07XG4rICAgICAgICAgICAgICAgIH07XG4rICAgICAgICAgICAgfTtcbiAgICAgICAgIH07XG4gICAgIH07XG4gXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9ibHVldG9vdGgvcWNvbSxibHVldG9vdGgtY29tbW9uLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2JsdWV0b290aC9xY29tLGJsdWV0b290aC1jb21tb24ueWFtbFxuaW5kZXggYzhlOWM1NWMxYWZiNGMuLjdjYjI4ZjMwYzlhZjAzIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9ibHVldG9vdGgvcWNvbSxibHVldG9vdGgtY29tbW9uLnlhbWxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYmx1ZXRvb3RoL3Fjb20sYmx1ZXRvb3RoLWNvbW1vbi55YW1sXG5AQCAtMjIsNCArMjIsMTMgQEAgcHJvcGVydGllczpcbiAgICAgZGVzY3JpcHRpb246XG4gICAgICAgYm9vdCBmaXJtd2FyZSBpcyBpbmNvcnJlY3RseSBwYXNzaW5nIHRoZSBhZGRyZXNzIGluIGJpZy1lbmRpYW4gb3JkZXJcbiBcbisgIG52bWVtLWNlbGxzOlxuKyAgICBtYXhJdGVtczogMVxuKyAgICBkZXNjcmlwdGlvbjpcbisgICAgICBOdm1lbSBkYXRhIGNlbGwgdGhhdCBjb250YWlucyBhIDYgYnl0ZSBCRCBhZGRyZXNzIHdpdGggdGhlIG1vc3RcbisgICAgICBzaWduaWZpY2FudCBieXRlIGZpcnN0IChiaWctZW5kaWFuKS5cbitcbisgIG52bWVtLWNlbGwtbmFtZXM6XG4rICAgIGNvbnN0OiBsb2NhbC1iZC1hZGRyZXNzXG4rXG4gYWRkaXRpb25hbFByb3BlcnRpZXM6IHRydWVcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL3Fjb20sYXRoMTBrLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL3Fjb20sYXRoMTBrLnlhbWxcbmluZGV4IGQ0ZjRkNzJlZTBkMzg4Li43ZjlkMTZjYjdjMTQzMyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3MvcWNvbSxhdGgxMGsueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9xY29tLGF0aDEway55YW1sXG5AQCAtOTIsNiArOTIsMjIgQEAgcHJvcGVydGllczpcbiBcbiAgIGllZWU4MDIxMS1mcmVxLWxpbWl0OiB0cnVlXG4gXG4rICBudm1lbS1jZWxsczpcbisgICAgbWluSXRlbXM6IDFcbisgICAgbWF4SXRlbXM6IDNcbisgICAgZGVzY3JpcHRpb246XG4rICAgICAgUmVmZXJlbmNlcyB0byBudm1lbSBjZWxscyBmb3IgTUFDIGFkZHJlc3MgYW5kL29yIGNhbGlicmF0aW9uIGRhdGEuXG4rICAgICAgU3VwcG9ydGVkIGNlbGwgbmFtZXMgYXJlIG1hYy1hZGRyZXNzLCBjYWxpYnJhdGlvbiwgYW5kIHByZS1jYWxpYnJhdGlvbi5cbitcbisgIG52bWVtLWNlbGwtbmFtZXM6XG4rICAgIG1pbkl0ZW1zOiAxXG4rICAgIG1heEl0ZW1zOiAzXG4rICAgIGl0ZW1zOlxuKyAgICAgIGVudW06XG4rICAgICAgICAtIG1hYy1hZGRyZXNzXG4rICAgICAgICAtIGNhbGlicmF0aW9uXG4rICAgICAgICAtIHByZS1jYWxpYnJhdGlvblxuK1xuICAgcWNvbSxjYWxpYnJhdGlvbi1kYXRhOlxuICAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy91aW50OC1hcnJheVxuICAgICBkZXNjcmlwdGlvbjpcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vcXJiMjIxMC1hcmR1aW5vLWltb2xhLmR0cyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9xcmIyMjEwLWFyZHVpbm8taW1vbGEuZHRzXG5pbmRleCBiZjA4OGZhOTgwN2YwNC4uMTI4YzdhN2U3NmI1YjAgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vcXJiMjIxMC1hcmR1aW5vLWltb2xhLmR0c1xuKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9xY29tL3FyYjIyMTAtYXJkdWluby1pbW9sYS5kdHNcbkBAIC00MDksNyArNDA5LDQwIEBAIFx1MDAyNnNkaGNfMSB7XG4gXHRuby1zZGlvO1xuIFx0bm8tc2Q7XG4gXG4rXHQjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rXHQjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4gXHRzdGF0dXMgPSBcIm9rYXlcIjtcbitcbitcdGNhcmRAMCB7XG4rXHRcdGNvbXBhdGlibGUgPSBcIm1tYy1jYXJkXCI7XG4rXHRcdHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rXHRcdHBhcnRpdGlvbnMtYm9vdDEge1xuK1x0XHRcdGNvbXBhdGlibGUgPSBcImZpeGVkLXBhcnRpdGlvbnNcIjtcbitcbitcdFx0XHQjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rXHRcdFx0I3NpemUtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuK1xuK1x0XHRcdG52bWVtLWxheW91dCB7XG4rXHRcdFx0XHRjb21wYXRpYmxlID0gXCJmaXhlZC1sYXlvdXRcIjtcbitcdFx0XHRcdCNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbitcdFx0XHRcdCNzaXplLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbitcbitcdFx0XHRcdHdpZmlfbWFjX2FkZHI6IG1hYy1hZGRyQDQ0MDAge1xuK1x0XHRcdFx0XHRjb21wYXRpYmxlID0gXCJtYWMtYmFzZVwiO1xuK1x0XHRcdFx0XHRyZWcgPSBcdTAwM2MweDQ0MDAgMHg2XHUwMDNlO1xuK1x0XHRcdFx0XHQjbnZtZW0tY2VsbC1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rXHRcdFx0XHR9O1xuK1xuK1x0XHRcdFx0YmRfYWRkcjogYmQtYWRkckA1NDAwIHtcbitcdFx0XHRcdFx0Y29tcGF0aWJsZSA9IFwibWFjLWJhc2VcIjtcbitcdFx0XHRcdFx0cmVnID0gXHUwMDNjMHg1NDAwIDB4Nlx1MDAzZTtcbitcdFx0XHRcdFx0I252bWVtLWNlbGwtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuK1x0XHRcdFx0fTtcbitcdFx0XHR9O1xuK1x0XHR9O1xuK1x0fTtcbiB9O1xuIFxuIFx1MDAyNnNwaTUge1xuQEAgLTUxMiw2ICs1NDUsOSBAQCBibHVldG9vdGgge1xuIFx0XHR2ZGRjaDAtc3VwcGx5ID0gXHUwMDNjXHUwMDI2cG00MTI1X2wyMlx1MDAzZTtcbiBcdFx0ZW5hYmxlLWdwaW9zID0gXHUwMDNjXHUwMDI2dGxtbSA4NyBHUElPX0FDVElWRV9ISUdIXHUwMDNlO1xuIFx0XHRtYXgtc3BlZWQgPSBcdTAwM2MzMDAwMDAwXHUwMDNlO1xuK1xuK1x0XHRudm1lbS1jZWxscyA9IFx1MDAzY1x1MDAyNmJkX2FkZHIgMFx1MDAzZTtcbitcdFx0bnZtZW0tY2VsbC1uYW1lcyA9IFwibG9jYWwtYmQtYWRkcmVzc1wiO1xuIFx0fTtcbiB9O1xuIFxuQEAgLTU1Nyw2ICs1OTMsOSBAQCBcdTAwMjZ3aWZpIHtcbiBcdHFjb20sYXRoMTBrLWNhbGlicmF0aW9uLXZhcmlhbnQgPSBcIkFyZHVpbm9JbW9sYVwiO1xuIFx0ZmlybXdhcmUtbmFtZSA9IFwicWNtMjI5MFwiO1xuIFxuK1x0bnZtZW0tY2VsbHMgPSBcdTAwM2NcdTAwMjZ3aWZpX21hY19hZGRyIDBcdTAwM2U7XG4rXHRudm1lbS1jZWxsLW5hbWVzID0gXCJtYWMtYWRkcmVzc1wiO1xuK1xuIFx0c3RhdHVzID0gXCJva2F5XCI7XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9ibG9jay9LY29uZmlnIGIvYmxvY2svS2NvbmZpZ1xuaW5kZXggNzBlNGE2NmQ5NDFmZjYuLmFlYzVkOWZjMTNhM2QzIDEwMDY0NFxuLS0tIGEvYmxvY2svS2NvbmZpZ1xuKysrIGIvYmxvY2svS2NvbmZpZ1xuQEAgLTIwOSw2ICsyMDksMTUgQEAgY29uZmlnIEJMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDS1xuIFx0ICBieSBmYWxsaW5nIGJhY2sgdG8gdGhlIGtlcm5lbCBjcnlwdG8gQVBJIHdoZW4gaW5saW5lXG4gXHQgIGVuY3J5cHRpb24gaGFyZHdhcmUgaXMgbm90IHByZXNlbnQuXG4gXG4rY29uZmlnIEJMS19OVk1FTVxuK1x0Ym9vbCBcIkJsb2NrIGRldmljZSBOVk1FTSBwcm92aWRlclwiXG4rXHRkZXBlbmRzIG9uIE9GXG4rXHRkZXBlbmRzIG9uIE5WTUVNXG4rXHRoZWxwXG4rXHQgIEFsbG93IGJsb2NrIGRldmljZXMgKG9yIHBhcnRpdGlvbnMpIHRvIGFjdCBhcyBOVk1FTSBwcm92aWRlcnMsXG4rXHQgIHR5cGljYWxseSB1c2VkIHdpdGggZU1NQyB0byBzdG9yZSBNQUMgYWRkcmVzc2VzIG9yIFdpLUZpXG4rXHQgIGNhbGlicmF0aW9uIGRhdGEgb24gZW1iZWRkZWQgZGV2aWNlcy5cbitcbiBzb3VyY2UgXCJibG9jay9wYXJ0aXRpb25zL0tjb25maWdcIlxuIFxuIGNvbmZpZyBCTEtfUE1cbmRpZmYgLS1naXQgYS9ibG9jay9NYWtlZmlsZSBiL2Jsb2NrL01ha2VmaWxlXG5pbmRleCBlN2JkMzIwZTNkNjk3MS4uODIwMDI5N2ZiY2JhYjMgMTAwNjQ0XG4tLS0gYS9ibG9jay9NYWtlZmlsZVxuKysrIGIvYmxvY2svTWFrZWZpbGVcbkBAIC0zOSwzICszOSw0IEBAIG9iai0kKENPTkZJR19CTEtfSU5MSU5FX0VOQ1JZUFRJT04pXHQrPSBibGstY3J5cHRvLm8gYmxrLWNyeXB0by1wcm9maWxlLm8gXFxcbiBcdFx0XHRcdFx0ICAgYmxrLWNyeXB0by1zeXNmcy5vXG4gb2JqLSQoQ09ORklHX0JMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDSylcdCs9IGJsay1jcnlwdG8tZmFsbGJhY2sub1xuIG9iai0kKENPTkZJR19CTE9DS19IT0xERVJfREVQUkVDQVRFRClcdCs9IGhvbGRlci5vXG4rb2JqLSQoQ09ORklHX0JMS19OVk1FTSkgICAgICAgICAgICAgICAgKz0gYmxrLW52bWVtLm9cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstbnZtZW0uYyBiL2Jsb2NrL2Jsay1udm1lbS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjRiMzVhNzQyNTUwNTkzXG4tLS0gL2Rldi9udWxsXG4rKysgYi9ibG9jay9ibGstbnZtZW0uY1xuQEAgLTAsMCArMSwxMTEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuKy8qXG4rICogYmxvY2sgZGV2aWNlIE5WTUVNIHByb3ZpZGVyXG4rICpcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjQgRGFuaWVsIEdvbGxlIFx1MDAzY2RhbmllbEBtYWtyb3RvcGlhLm9yZ1x1MDAzZVxuKyAqIENvcHlyaWdodCAoYykgUXVhbGNvbW0gVGVjaG5vbG9naWVzLCBJbmMuIGFuZC9vciBpdHMgc3Vic2lkaWFyaWVzLlxuKyAqXG4rICogVXNlZnVsIG9uIGRldmljZXMgdXNpbmcgYSBwYXJ0aXRpb24gb24gYW4gZU1NQyBmb3IgTUFDIGFkZHJlc3NlcyBvclxuKyAqIFdpLUZpIGNhbGlicmF0aW9uIEVFUFJPTSBkYXRhLlxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L252bWVtLXByb3ZpZGVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9udm1lbS1jb25zdW1lci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImJsay5oXCJcbitcbitzdGF0aWMgaW50IGJsa19udm1lbV9yZWdfcmVhZCh2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgZnJvbSwgdm9pZCAqdmFsLCBzaXplX3QgYnl0ZXMpXG4re1xuK1x0ZGV2X3QgZGV2dCA9IChkZXZfdCkodWludHB0cl90KXByaXY7XG4rXHRzaXplX3QgYnl0ZXNfbGVmdCA9IGJ5dGVzO1xuK1x0bG9mZl90IHBvcyA9IGZyb207XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdHN0cnVjdCBmaWxlICpiZGV2X2ZpbGUgX19mcmVlKGZwdXQpID1cbitcdFx0YmRldl9maWxlX29wZW5fYnlfZGV2KGRldnQsIEJMS19PUEVOX1JFQUQsIE5VTEwsIE5VTEwpO1xuK1x0aWYgKElTX0VSUihiZGV2X2ZpbGUpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihiZGV2X2ZpbGUpO1xuK1xuK1x0d2hpbGUgKGJ5dGVzX2xlZnQpIHtcbitcdFx0cGdvZmZfdCBmX2luZGV4ID0gcG9zIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1x0XHRzaXplX3QgZm9saW9fb2ZmO1xuK1x0XHRzaXplX3QgdG9fcmVhZDtcbitcbitcdFx0Zm9saW8gPSByZWFkX21hcHBpbmdfZm9saW8oYmRldl9maWxlLVx1MDAzZWZfbWFwcGluZywgZl9pbmRleCwgTlVMTCk7XG4rXHRcdGlmIChJU19FUlIoZm9saW8pKSB7XG4rXHRcdFx0cmV0ID0gUFRSX0VSUihmb2xpbyk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcbitcdFx0Zm9saW9fb2ZmID0gb2Zmc2V0X2luX2ZvbGlvKGZvbGlvLCBwb3MpO1xuK1x0XHR0b19yZWFkID0gbWluKGJ5dGVzX2xlZnQsIGZvbGlvX3NpemUoZm9saW8pIC0gZm9saW9fb2ZmKTtcbitcdFx0bWVtY3B5X2Zyb21fZm9saW8odmFsLCBmb2xpbywgZm9saW9fb2ZmLCB0b19yZWFkKTtcbitcdFx0cG9zICs9IHRvX3JlYWQ7XG4rXHRcdGJ5dGVzX2xlZnQgLT0gdG9fcmVhZDtcbitcdFx0dmFsICs9IHRvX3JlYWQ7XG4rXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitpbnQgYmxrX252bWVtX2FkZChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmJkZXYtXHUwMDNlYmRfZGV2aWNlO1xuK1x0c3RydWN0IG52bWVtX2NvbmZpZyBjb25maWcgPSB7fTtcbitcbitcdC8qIHNraXAgZGV2aWNlcyB3aGljaCBkbyBub3QgaGF2ZSBhIGRldmljZSB0cmVlIG5vZGUgKi9cbitcdGlmICghZGV2X29mX25vZGUoZGV2KSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBza2lwIGRldmljZXMgd2l0aG91dCBhbiBudm1lbSBsYXlvdXQgZGVmaW5lZCAqL1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpjaGlsZCBfX2ZyZWUoZGV2aWNlX25vZGUpID1cbitcdFx0b2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2X29mX25vZGUoZGV2KSwgXCJudm1lbS1sYXlvdXRcIik7XG4rXHRpZiAoIWNoaWxkKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qXG4rXHQgKiBza2lwIGJsb2NrIGRldmljZSB0b28gbGFyZ2UgdG8gYmUgcmVwcmVzZW50ZWQgYXMgTlZNRU0gZGV2aWNlcyxcbitcdCAqIG52bWVtX2NvbmZpZy5zaXplIGlzIGEgc2lnbmVkIGludFxuK1x0ICovXG4rXHRpZiAoYmRldl9ucl9ieXRlcyhiZGV2KSBcdTAwM2UgSU5UX01BWCkge1xuK1x0XHRkZXZfd2FybihkZXYsIFwiYmxvY2sgZGV2aWNlIHRvbyBsYXJnZSB0byBiZSBhbiBOVk1FTSBwcm92aWRlclxcblwiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRjb25maWcuaWQgPSBOVk1FTV9ERVZJRF9OT05FO1xuK1x0Y29uZmlnLmRldiA9IGRldjtcbitcdGNvbmZpZy5uYW1lID0gZGV2X25hbWUoZGV2KTtcbitcdGNvbmZpZy5vd25lciA9IFRISVNfTU9EVUxFO1xuK1x0Y29uZmlnLnByaXYgPSAodm9pZCAqKSh1aW50cHRyX3QpZGV2LVx1MDAzZWRldnQ7XG4rXHRjb25maWcucmVnX3JlYWQgPSBibGtfbnZtZW1fcmVnX3JlYWQ7XG4rXHRjb25maWcuc2l6ZSA9IGJkZXZfbnJfYnl0ZXMoYmRldik7XG4rXHRjb25maWcud29yZF9zaXplID0gMTtcbitcdGNvbmZpZy5zdHJpZGUgPSAxO1xuK1x0Y29uZmlnLnJlYWRfb25seSA9IHRydWU7XG4rXHRjb25maWcucm9vdF9vbmx5ID0gdHJ1ZTtcbitcdGNvbmZpZy5pZ25vcmVfd3AgPSB0cnVlO1xuK1x0Y29uZmlnLm9mX25vZGUgPSB0b19vZl9ub2RlKGRldi1cdTAwM2Vmd25vZGUpO1xuK1xuK1x0YmRldi1cdTAwM2ViZF9udm1lbSA9IG52bWVtX3JlZ2lzdGVyKFx1MDAyNmNvbmZpZyk7XG4rXHRpZiAoSVNfRVJSKGJkZXYtXHUwMDNlYmRfbnZtZW0pKSB7XG4rXHRcdGludCByZXQgPSBQVFJfRVJSKGJkZXYtXHUwMDNlYmRfbnZtZW0pO1xuK1xuK1x0XHRiZGV2LVx1MDAzZWJkX252bWVtID0gTlVMTDtcbitcdFx0ZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgXCJGYWlsZWQgdG8gcmVnaXN0ZXIgTlZNRU0gZGV2aWNlXFxuXCIpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3ZvaWQgYmxrX252bWVtX2RlbChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuK3tcbitcdG52bWVtX3VucmVnaXN0ZXIoYmRldi1cdTAwM2ViZF9udm1lbSk7XG4rXHRiZGV2LVx1MDAzZWJkX252bWVtID0gTlVMTDtcbit9XG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLmggYi9ibG9jay9ibGsuaFxuaW5kZXggMjVhZjhhYzVlZjBmNzcuLmRhZDhmMGQ3YTIxOGVkIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLmhcbisrKyBiL2Jsb2NrL2Jsay5oXG5AQCAtODEwLDQgKzgxMCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYmxrX2RlYnVnZnNfdW5sb2NrKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuIFx0bWVtYWxsb2Nfbm9pb19yZXN0b3JlKG1lbWZsYWdzKTtcbiB9XG4gXG4rI2lmZGVmIENPTkZJR19CTEtfTlZNRU1cbitpbnQgYmxrX252bWVtX2FkZChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTtcbit2b2lkIGJsa19udm1lbV9kZWwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldik7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGludCBibGtfbnZtZW1fYWRkKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpIHsgcmV0dXJuIDA7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgYmxrX252bWVtX2RlbChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KSB7fVxuKyNlbmRpZlxuK1xuICNlbmRpZiAvKiBCTEtfSU5URVJOQUxfSCAqL1xuZGlmZiAtLWdpdCBhL2Jsb2NrL2dlbmhkLmMgYi9ibG9jay9nZW5oZC5jXG5pbmRleCBmODRiNmEzNTViNTc0YS4uMGM5YzVlNWVhN2JhZmYgMTAwNjQ0XG4tLS0gYS9ibG9jay9nZW5oZC5jXG4rKysgYi9ibG9jay9nZW5oZC5jXG5AQCAtNDIxLDYgKzQyMSw4IEBAIHN0YXRpYyB2b2lkIGFkZF9kaXNrX2ZpbmFsKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIFx0XHQgKi9cbiBcdFx0ZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoZGRldiwgMCk7XG4gXHRcdGRpc2tfdWV2ZW50KGRpc2ssIEtPQkpfQUREKTtcbitcbitcdFx0YmxrX252bWVtX2FkZChkaXNrLVx1MDAzZXBhcnQwKTtcbiBcdH1cbiBcbiBcdGJsa19hcHBseV9iZGlfbGltaXRzKGRpc2stXHUwMDNlYmRpLCBcdTAwMjZkaXNrLVx1MDAzZXF1ZXVlLVx1MDAzZWxpbWl0cyk7XG5AQCAtNzA0LDYgKzcwNiw4IEBAIHN0YXRpYyB2b2lkIF9fZGVsX2dlbmRpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXG4gXHRkaXNrX2RlbF9ldmVudHMoZGlzayk7XG4gXG4rXHRibGtfbnZtZW1fZGVsKGRpc2stXHUwMDNlcGFydDApO1xuK1xuIFx0LypcbiBcdCAqIFByZXZlbnQgbmV3IG9wZW5lcnMgYnkgdW5saW5rZWQgdGhlIGJkZXYgaW5vZGUuXG4gXHQgKi9cbmRpZmYgLS1naXQgYS9ibG9jay9wYXJ0aXRpb25zL29mLmMgYi9ibG9jay9wYXJ0aXRpb25zL29mLmNcbmluZGV4IDUzNjY0ZWEwNmI2NTQwLi42MGFhM2Q2OTA2Y2ExZCAxMDA2NDRcbi0tLSBhL2Jsb2NrL3BhcnRpdGlvbnMvb2YuY1xuKysrIGIvYmxvY2svcGFydGl0aW9ucy9vZi5jXG5AQCAtMTUsNiArMTUsMTAgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9vZl9wYXJ0aXRpb24oc3RydWN0IGRldmljZV9ub2RlICpucCwgaW50IHNsb3QpXG4gXHRpbnQgYV9jZWxscyA9IG9mX25fYWRkcl9jZWxscyhucCk7XG4gXHRpbnQgc19jZWxscyA9IG9mX25fc2l6ZV9jZWxscyhucCk7XG4gXG4rXHQvKiBTa2lwIG5vZGVzIHdpdGhvdXQgYSByZWcgcHJvcGVydHkgKGUuZy4gbnZtZW0tbGF5b3V0KSAqL1xuK1x0aWYgKCFyZWcpXG4rXHRcdHJldHVybiAxO1xuK1xuIFx0LyogTWFrZSBzdXJlIHJlZyBsZW4gbWF0Y2ggdGhlIGV4cGVjdGVkIGFkZHIgYW5kIHNpemUgY2VsbHMgKi9cbiBcdGlmIChsZW4gLyBzaXplb2YoKnJlZykgIT0gYV9jZWxscyArIHNfY2VsbHMpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTgyLDE0ICs4NiwxNSBAQCBpbnQgb2ZfcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUpXG4gXHRzbG90ID0gMTtcbiBcdC8qIFZhbGlkYXRlIHBhcml0aW9uIG9mZnNldCBhbmQgc2l6ZSAqL1xuIFx0Zm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShwYXJ0aXRpb25zX25wLCBucCkge1xuLVx0XHRpZiAodmFsaWRhdGVfb2ZfcGFydGl0aW9uKG5wLCBzbG90KSkge1xuK1x0XHRpbnQgZXJyID0gdmFsaWRhdGVfb2ZfcGFydGl0aW9uKG5wLCBzbG90KTtcbitcbitcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRcdG9mX25vZGVfcHV0KG5wKTtcbiBcdFx0XHRvZl9ub2RlX3B1dChwYXJ0aXRpb25zX25wKTtcbi1cbiBcdFx0XHRyZXR1cm4gLTE7XG4gXHRcdH1cbi1cbi1cdFx0c2xvdCsrO1xuK1x0XHRpZiAoIWVycilcbitcdFx0XHRzbG90Kys7XG4gXHR9XG4gXG4gXHRzbG90ID0gMTtcbkBAIC05OSw5ICsxMDQsMTAgQEAgaW50IG9mX3BhcnRpdGlvbihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4tXHRcdGFkZF9vZl9wYXJ0aXRpb24oc3RhdGUsIHNsb3QsIG5wKTtcbi1cbi1cdFx0c2xvdCsrO1xuK1x0XHRpZiAob2ZfcHJvcGVydHlfcHJlc2VudChucCwgXCJyZWdcIikpIHtcbitcdFx0XHRhZGRfb2ZfcGFydGl0aW9uKHN0YXRlLCBzbG90LCBucCk7XG4rXHRcdFx0c2xvdCsrO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRzZXFfYnVmX3B1dHMoXHUwMDI2c3RhdGUtXHUwMDNlcHBfYnVmLCBcIlxcblwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idHFjYS5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuY1xuaW5kZXggMDRlYmUyOTBiYzc4NGUuLjA2Y2I3ODdiMDU1OWYzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuY1xuKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnRxY2EuY1xuQEAgLTcyMyw4ICs3MjMsMTEgQEAgc3RhdGljIGludCBxY2FfY2hlY2tfYmRhZGRyKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBjb25zdCBzdHJ1Y3QgcWNhX2Z3X2NvbmZpZyAqY29cbiBcdH1cbiBcbiBcdGJkYSA9IChzdHJ1Y3QgaGNpX3JwX3JlYWRfYmRfYWRkciAqKXNrYi1cdTAwM2VkYXRhO1xuLVx0aWYgKCFiYWNtcChcdTAwMjZiZGEtXHUwMDNlYmRhZGRyLCBcdTAwMjZjb25maWctXHUwMDNlYmRhZGRyKSlcbitcdGlmICghYmFjbXAoXHUwMDI2YmRhLVx1MDAzZWJkYWRkciwgXHUwMDI2Y29uZmlnLVx1MDAzZWJkYWRkcikpIHtcbiBcdFx0aGNpX3NldF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfVVNFX0JEQUREUl9QUk9QRVJUWSk7XG4rXHRcdGhjaV9zZXRfcXVpcmsoaGRldiwgSENJX1FVSVJLX1VTRV9CREFERFJfTlZNRU0pO1xuK1x0XHRoY2lfc2V0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19CREFERFJfTlZNRU1fQkUpO1xuK1x0fVxuIFxuIFx0a2ZyZWVfc2tiKHNrYik7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbmluZGV4IDg4MDhlZTc2ZTczYzA5Li5hY2U2ZjU5Yjg2MGQwOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbkBAIC03Myw2ICs3Myw5IEBAIHN0cnVjdCBibG9ja19kZXZpY2Uge1xuIFx0aW50XHRcdFx0YmRfd3JpdGVycztcbiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZXG4gXHR2b2lkXHRcdFx0KmJkX3NlY3VyaXR5O1xuKyNlbmRpZlxuKyNpZmRlZiBDT05GSUdfQkxLX05WTUVNXG4rXHRzdHJ1Y3QgbnZtZW1fZGV2aWNlXHQqYmRfbnZtZW07XG4gI2VuZGlmXG4gXHQvKlxuIFx0ICoga2VlcCB0aGlzIG91dC1vZi1saW5lIGFzIGl0J3MgYm90aCBiaWcgYW5kIG5vdCBuZWVkZWQgaW4gdGhlIGZhc3RcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuaW5kZXggOTIxM2E1NzE2Zjk1YTcuLjVhNzRiZDVmYmE5ODQwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuQEAgLTMwLDYgKzMwLDcgQEBcbiBcbiBzdHJ1Y3QgbW9kdWxlO1xuIHN0cnVjdCByZXF1ZXN0X3F1ZXVlO1xuK3N0cnVjdCBudm1lbV9kZXZpY2U7XG4gc3RydWN0IGVsZXZhdG9yX3F1ZXVlO1xuIHN0cnVjdCBibGtfdHJhY2U7XG4gc3RydWN0IHJlcXVlc3Q7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vZl9uZXQuaCBiL2luY2x1ZGUvbGludXgvb2ZfbmV0LmhcbmluZGV4IGQ4ODcxNWEwYjNhNTJmLi43ODU0YmE1NTVkOWE1NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvb2ZfbmV0LmhcbisrKyBiL2luY2x1ZGUvbGludXgvb2ZfbmV0LmhcbkBAIC0xNSw2ICsxNSw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlO1xuIGV4dGVybiBpbnQgb2ZfZ2V0X3BoeV9tb2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHBoeV9pbnRlcmZhY2VfdCAqaW50ZXJmYWNlKTtcbiBleHRlcm4gaW50IG9mX2dldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCB1OCAqbWFjKTtcbiBleHRlcm4gaW50IG9mX2dldF9tYWNfYWRkcmVzc19udm1lbShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCB1OCAqbWFjKTtcbitpbnQgb2ZfZ2V0X252bWVtX2V1aTQ4KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGNvbnN0IGNoYXIgKmNlbGxfbmFtZSwgdTggKmFkZHIpO1xuIGludCBvZl9nZXRfZXRoZGV2X2FkZHJlc3Moc3RydWN0IGRldmljZV9ub2RlICpucCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICpvZl9maW5kX25ldF9kZXZpY2VfYnlfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTtcbiAjZWxzZVxuQEAgLTM0LDYgKzM1LDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IG9mX2dldF9tYWNfYWRkcmVzc19udm1lbShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCB1OCAqbWFjKVxuIFx0cmV0dXJuIC1FTk9ERVY7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgaW50IG9mX2dldF9udm1lbV9ldWk0OChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuK1x0XHRcdFx0ICAgICAgY29uc3QgY2hhciAqY2VsbF9uYW1lLCB1OCAqYWRkcilcbit7XG4rXHRyZXR1cm4gLUVOT0RFVjtcbit9XG4rXG4gc3RhdGljIGlubGluZSBpbnQgb2ZfZ2V0X2V0aGRldl9hZGRyZXNzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0cmV0dXJuIC1FTk9ERVY7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oXG5pbmRleCAzODE4NmEyNDVmMTRkYi4uMTQ1YWI5NGU1MTQ4MmYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmhcbisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaFxuQEAgLTE2MSw2ICsxNjEsMjQgQEAgZW51bSB7XG4gXHQgKi9cbiBcdEhDSV9RVUlSS19CREFERFJfUFJPUEVSVFlfQlJPS0VOLFxuIFxuK1x0LyogV2hlbiB0aGlzIHF1aXJrIGlzIHNldCwgdGhlIHB1YmxpYyBCbHVldG9vdGggYWRkcmVzc1xuK1x0ICogaW5pdGlhbGx5IHJlcG9ydGVkIGJ5IEhDSSBSZWFkIEJEIEFkZHJlc3MgY29tbWFuZFxuK1x0ICogaXMgY29uc2lkZXJlZCBpbnZhbGlkLiBUaGUgcHVibGljIEJEIEFkZHJlc3MgY2FuIGJlXG4rXHQgKiByZXRyaWV2ZWQgdmlhIGEgJ2xvY2FsLWJkLWFkZHJlc3MnIE5WTUVNIGNlbGwuXG4rXHQgKlxuK1x0ICogVGhpcyBxdWlyayBjYW4gYmUgc2V0IGJlZm9yZSBoY2lfcmVnaXN0ZXJfZGV2IGlzIGNhbGxlZCBvclxuK1x0ICogZHVyaW5nIHRoZSBoZGV2LVx1MDAzZXNldHVwIHZlbmRvciBjYWxsYmFjay5cbitcdCAqL1xuK1x0SENJX1FVSVJLX1VTRV9CREFERFJfTlZNRU0sXG4rXG4rXHQvKiBXaGVuIHRoaXMgcXVpcmsgaXMgc2V0LCB0aGUgQmx1ZXRvb3RoIERldmljZSBBZGRyZXNzIHByb3ZpZGVkIGJ5XG4rXHQgKiB0aGUgJ2xvY2FsLWJkLWFkZHJlc3MnIE5WTUVNIGlzIHN0b3JlZCBpbiBiaWctZW5kaWFuIG9yZGVyLlxuK1x0ICpcbitcdCAqIFRoaXMgcXVpcmsgY2FuIGJlIHNldCBiZWZvcmUgaGNpX3JlZ2lzdGVyX2RldiBpcyBjYWxsZWQgb3JcbitcdCAqIGR1cmluZyB0aGUgaGRldi1cdTAwM2VzZXR1cCB2ZW5kb3IgY2FsbGJhY2suXG4rXHQgKi9cbitcdEhDSV9RVUlSS19CREFERFJfTlZNRU1fQkUsXG4rXG4gXHQvKiBXaGVuIHRoaXMgcXVpcmsgaXMgc2V0LCB0aGUgZHVwbGljYXRlIGZpbHRlcmluZyBkdXJpbmdcbiBcdCAqIHNjYW5uaW5nIGlzIGJhc2VkIG9uIEJsdWV0b290aCBkZXZpY2VzIGFkZHJlc3Nlcy4gVG8gYWxsb3dcbiBcdCAqIFJTU0kgYmFzZWQgdXBkYXRlcywgcmVzdGFydCBzY2FubmluZyBpZiBuZWVkZWQuXG5kaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfc3luYy5jIGIvbmV0L2JsdWV0b290aC9oY2lfc3luYy5jXG5pbmRleCAzYmU4YzM1ODFjNmNhYS4uNzM0ZWVkMjBkZTA0NGIgMTAwNjQ0XG4tLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmNcbisrKyBiL25ldC9ibHVldG9vdGgvaGNpX3N5bmMuY1xuQEAgLTcsNiArNyw3IEBAXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX25ldC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2JsdWV0b290aC9ibHVldG9vdGguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaFx1MDAzZVxuQEAgLTM1OTMsNiArMzU5NCwzNyBAQCBpbnQgaGNpX3Bvd2VyZWRfdXBkYXRlX3N5bmMoc3RydWN0IGhjaV9kZXYgKmhkZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyoqXG4rICogaGNpX2Rldl9nZXRfYmRfYWRkcl9mcm9tX252bWVtIC0gR2V0IHRoZSBCbHVldG9vdGggRGV2aWNlIEFkZHJlc3NcbisgKlx0XHRcdFx0ICAgIChCRF9BRERSKSBmb3IgYSBIQ0kgZGV2aWNlIGZyb21cbisgKlx0XHRcdFx0ICAgIGFuIE5WTUVNIGNlbGwuXG4rICogQGhkZXY6XHRUaGUgSENJIGRldmljZVxuKyAqXG4rICogU2VhcmNoIGZvciAnbG9jYWwtYmQtYWRkcmVzcycgTlZNRU0gY2VsbCBpbiB0aGUgZGV2aWNlIGZpcm13YXJlIG5vZGUuXG4rICpcbisgKiBBbGwtemVybyBCRCBhZGRyZXNzZXMgYXJlIHJlamVjdGVkICh1bnByb3Zpc2lvbmVkKS5cbisgKi9cbitzdGF0aWMgaW50IGhjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9udm1lbShzdHJ1Y3QgaGNpX2RldiAqaGRldilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2X29mX25vZGUoaGRldi1cdTAwM2VkZXYucGFyZW50KTtcbitcdHU4IGJhW3NpemVvZihiZGFkZHJfdCldO1xuK1x0aW50IGVycjtcbitcbitcdGlmICghbnApXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0ZXJyID0gb2ZfZ2V0X252bWVtX2V1aTQ4KG5wLCBcImxvY2FsLWJkLWFkZHJlc3NcIiwgYmEpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGlmIChoY2lfdGVzdF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfQkRBRERSX05WTUVNX0JFKSlcbitcdFx0YmFzd2FwKFx1MDAyNmhkZXYtXHUwMDNlcHVibGljX2FkZHIsIChiZGFkZHJfdCAqKWJhKTtcbitcdGVsc2VcbitcdFx0YmFjcHkoXHUwMDI2aGRldi1cdTAwM2VwdWJsaWNfYWRkciwgKGJkYWRkcl90ICopYmEpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qKlxuICAqIGhjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9wcm9wZXJ0eSAtIEdldCB0aGUgQmx1ZXRvb3RoIERldmljZSBBZGRyZXNzXG4gICpcdFx0XHRcdCAgICAgICAoQkRfQUREUikgZm9yIGEgSENJIGRldmljZSBmcm9tXG5AQCAtNTA3MiwxMiArNTEwNCwxNyBAQCBzdGF0aWMgaW50IGhjaV9kZXZfc2V0dXBfc3luYyhzdHJ1Y3QgaGNpX2RldiAqaGRldilcbiBcdCAqIGl0cyBzZXR1cCBjYWxsYmFjay5cbiBcdCAqL1xuIFx0aW52YWxpZF9iZGFkZHIgPSBoY2lfdGVzdF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfSU5WQUxJRF9CREFERFIpIHx8XG4tXHRcdFx0IGhjaV90ZXN0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19VU0VfQkRBRERSX1BST1BFUlRZKTtcbitcdFx0XHQgaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX1VTRV9CREFERFJfUFJPUEVSVFkpIHx8XG4rXHRcdFx0IGhjaV90ZXN0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19VU0VfQkRBRERSX05WTUVNKTtcbiBcdGlmICghcmV0KSB7XG4gXHRcdGlmIChoY2lfdGVzdF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfVVNFX0JEQUREUl9QUk9QRVJUWSkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhYmFjbXAoXHUwMDI2aGRldi1cdTAwM2VwdWJsaWNfYWRkciwgQkRBRERSX0FOWSkpXG4gXHRcdFx0aGNpX2Rldl9nZXRfYmRfYWRkcl9mcm9tX3Byb3BlcnR5KGhkZXYpO1xuIFxuK1x0XHRpZiAoaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX1VTRV9CREFERFJfTlZNRU0pIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIWJhY21wKFx1MDAyNmhkZXYtXHUwMDNlcHVibGljX2FkZHIsIEJEQUREUl9BTlkpKVxuK1x0XHRcdGhjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9udm1lbShoZGV2KTtcbitcbiBcdFx0aWYgKGludmFsaWRfYmRhZGRyIFx1MDAyNlx1MDAyNiBiYWNtcChcdTAwMjZoZGV2LVx1MDAzZXB1YmxpY19hZGRyLCBCREFERFJfQU5ZKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGhkZXYtXHUwMDNlc2V0X2JkYWRkcikge1xuIFx0XHRcdHJldCA9IGhkZXYtXHUwMDNlc2V0X2JkYWRkcihoZGV2LCBcdTAwMjZoZGV2LVx1MDAzZXB1YmxpY19hZGRyKTtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9vZl9uZXQuYyBiL25ldC9jb3JlL29mX25ldC5jXG5pbmRleCA5M2VhNDI1YjkyNDhhMi4uMTFjMWFjY2ExNTEyNjYgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9vZl9uZXQuY1xuKysrIGIvbmV0L2NvcmUvb2ZfbmV0LmNcbkBAIC02MSw5ICs2MSw3IEBAIHN0YXRpYyBpbnQgb2ZfZ2V0X21hY19hZGRyKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGNvbnN0IGNoYXIgKm5hbWUsIHU4ICphZGRyKVxuIGludCBvZl9nZXRfbWFjX2FkZHJlc3NfbnZtZW0oc3RydWN0IGRldmljZV9ub2RlICpucCwgdTggKmFkZHIpXG4ge1xuIFx0c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUobnApO1xuLVx0c3RydWN0IG52bWVtX2NlbGwgKmNlbGw7XG4tXHRjb25zdCB2b2lkICptYWM7XG4tXHRzaXplX3QgbGVuO1xuK1x0dTggbWFjW0VUSF9BTEVOXSBfX2FsaWduZWQoc2l6ZW9mKHUxNikpO1xuIFx0aW50IHJldDtcbiBcbiBcdC8qIFRyeSBsb29rdXAgYnkgZGV2aWNlIGZpcnN0LCB0aGVyZSBtaWdodCBiZSBhIG52bWVtX2NlbGxfbG9va3VwXG5AQCAtNzUsMjcgKzczLDU0IEBAIGludCBvZl9nZXRfbWFjX2FkZHJlc3NfbnZtZW0oc3RydWN0IGRldmljZV9ub2RlICpucCwgdTggKmFkZHIpXG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4tXHRjZWxsID0gb2ZfbnZtZW1fY2VsbF9nZXQobnAsIFwibWFjLWFkZHJlc3NcIik7XG4rXHRyZXQgPSBvZl9nZXRfbnZtZW1fZXVpNDgobnAsIFwibWFjLWFkZHJlc3NcIiwgbWFjKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobWFjKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRldGhlcl9hZGRyX2NvcHkoYWRkciwgbWFjKTtcbitcdHJldHVybiAwO1xuK31cbitFWFBPUlRfU1lNQk9MKG9mX2dldF9tYWNfYWRkcmVzc19udm1lbSk7XG4rXG4rLyoqXG4rICogb2ZfZ2V0X252bWVtX2V1aTQ4IC0gUmVhZCBhIDYtYnl0ZSBFVUktNDggYWRkcmVzcyBmcm9tIGEgbmFtZWQgTlZNRU0gY2VsbC5cbisgKiBAbnA6XHRcdERldmljZSBub2RlIHRvIGxvb2sgdXAgdGhlIE5WTUVNIGNlbGwgZnJvbS5cbisgKiBAY2VsbF9uYW1lOlx0TmFtZSBvZiB0aGUgTlZNRU0gY2VsbCAoZS5nLiBcIm1hYy1hZGRyZXNzXCIsIFwibG9jYWwtYmQtYWRkcmVzc1wiKS5cbisgKiBAYWRkcjpcdE91dHB1dCBidWZmZXIgZm9yIHRoZSA2LWJ5dGUgYWRkcmVzcy5cbisgKlxuKyAqIFJlYWRzIHRoZSBuYW1lZCBOVk1FTSBjZWxsIGFuZCB2YWxpZGF0ZXMgdGhhdCBpdCBjb250YWlucyBhIG5vbi16ZXJvIDYtYnl0ZVxuKyAqIGFkZHJlc3MuIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxuKyAqL1xuK2ludCBvZl9nZXRfbnZtZW1fZXVpNDgoc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3QgY2hhciAqY2VsbF9uYW1lLCB1OCAqYWRkcilcbit7XG4rXHRzdHJ1Y3QgbnZtZW1fY2VsbCAqY2VsbDtcbitcdGNvbnN0IHZvaWQgKmV1aTQ4O1xuK1x0c2l6ZV90IGxlbjtcbitcbitcdGNlbGwgPSBvZl9udm1lbV9jZWxsX2dldChucCwgY2VsbF9uYW1lKTtcbiBcdGlmIChJU19FUlIoY2VsbCkpXG4gXHRcdHJldHVybiBQVFJfRVJSKGNlbGwpO1xuIFxuLVx0bWFjID0gbnZtZW1fY2VsbF9yZWFkKGNlbGwsIFx1MDAyNmxlbik7XG4rXHRldWk0OCA9IG52bWVtX2NlbGxfcmVhZChjZWxsLCBcdTAwMjZsZW4pO1xuIFx0bnZtZW1fY2VsbF9wdXQoY2VsbCk7XG4gXG4tXHRpZiAoSVNfRVJSKG1hYykpXG4tXHRcdHJldHVybiBQVFJfRVJSKG1hYyk7XG4rXHRpZiAoSVNfRVJSKGV1aTQ4KSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoZXVpNDgpO1xuIFxuLVx0aWYgKGxlbiAhPSBFVEhfQUxFTiB8fCAhaXNfdmFsaWRfZXRoZXJfYWRkcihtYWMpKSB7XG4tXHRcdGtmcmVlKG1hYyk7XG4rXHRpZiAobGVuICE9IEVUSF9BTEVOIHx8ICFtZW1jaHJfaW52KGV1aTQ4LCAwLCBFVEhfQUxFTikpIHtcbitcdFx0a2ZyZWUoZXVpNDgpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdG1lbWNweShhZGRyLCBtYWMsIEVUSF9BTEVOKTtcbi1cdGtmcmVlKG1hYyk7XG4rXHRtZW1jcHkoYWRkciwgZXVpNDgsIEVUSF9BTEVOKTtcbitcdGtmcmVlKGV1aTQ4KTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbi1FWFBPUlRfU1lNQk9MKG9mX2dldF9tYWNfYWRkcmVzc19udm1lbSk7XG4rRVhQT1JUX1NZTUJPTF9HUEwob2ZfZ2V0X252bWVtX2V1aTQ4KTtcbiBcbiAvKipcbiAgKiBvZl9nZXRfbWFjX2FkZHJlc3MoKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6MjY6NTUuMTM5MzQ1ODkxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE1Njc2MjQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoIGFuZCBGdXp6YWJpbGl0eSBvZiB0aGUgQkxLX05WTUVNIFBhdGNoKipcblxuT2theSwgc28gd2UgaGF2ZSB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBhIGBCTEtfTlZNRU1gIGJsb2NrIGRldmljZSBOVk1FTSBwcm92aWRlci4gRXNzZW50aWFsbHksIHRoaXMgbWVhbnMgd2UgY2FuIHRyZWF0IGJsb2NrIGRldmljZXMgKG9yIHBhcnRpdGlvbnMpIGFzIE5WTUVNIHByb3ZpZGVycy4gVGhlIHBhdGNoIHRvdWNoZXMgYSBmZXcga2V5IGFyZWFzLCB3aGljaCBpcyBnb29kIHRvIHNlZSBmcm9tIGEgY292ZXJhZ2UgcGVyc3BlY3RpdmUuIEknbSBub3RpbmcgY2hhbmdlcyBpbiBgYmxvY2svZ2VuaGQuY2AgKHNwZWNpZmljYWxseSBjYWxscyB0byBgYmxrX252bWVtX2FkZGAgYW5kIGBibGtfbnZtZW1fZGVsYCksIGBibG9jay9wYXJ0aXRpb25zL29mLmNgIChza2lwcGluZyBub2RlcyB3aXRob3V0IHRoZSBgcmVnYCBwcm9wZXJ0eSksIGFuZCBldmVuIHNvbWUgQmx1ZXRvb3RoIGFuZCBuZXR3b3JraW5nIGNvZGUgKGBkcml2ZXJzL2JsdWV0b290aC9idHFjYS5jYCwgYG5ldC9ibHVldG9vdGgvaGNpX3N5bmMuY2AsIGFuZCBgbmV0L2NvcmUvb2ZfbmV0LmNgKS4gSXQgc2VlbXMgcXVpdGUgcGVydmFzaXZlOyBpdCdzIHVzaW5nIHRoZSBjb25jZXB0IG9mIGJsb2NrIGRldmljZXMgYXMgTlZSQU0gc3RvcmFnZSBhY3Jvc3MgYSBudW1iZXIgb2YgZHJpdmVycy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpdHMgcmVhY2hhYmlsaXR5IGFuZCBwb3RlbnRpYWwgZm9yIGZ1enppbmcuIFRoZSBrZXkgY2hhbmdlcyBpbiB0aGUgYmxvY2sgbGF5ZXIsIGVzcGVjaWFsbHkgaW4gYGJsb2NrL2Jsay1udm1lbS5jYCBhbmQgYGJsb2NrL2dlbmhkLmNgLCBhcmUgd2hhdCBJJ20gZm9jdXNlZCBvbiBmaXJzdC4gSSBrbm93IHRoYXQgYGJsa19udm1lbV9hZGRgIGdldHMgY2FsbGVkIGZvciBldmVyeSBkaXNrIGFkZGVkIHZpYSBgYWRkX2Rpc2tfZmluYWxgLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgVk0gc2V0dXAuIExvb3AgZGV2aWNlcywgb3IgYW55IG90aGVyIGJsb2NrIGRldmljZSB0aGF0IGdldHMgYWRkZWQsIHNob3VsZCB0cmlnZ2VyIHRoaXMuIFRoZSBjcml0aWNhbCBmdW5jdGlvbiBoZXJlIGFwcGVhcnMgdG8gYmUgYGJsa19udm1lbV9yZWdfcmVhZGAsIHdoaWNoIHVzZXMgYHJlYWRfbWFwcGluZ19mb2xpb2AgdG8gYWN0dWFsbHkgcmVhZCBkYXRhIGZyb20gdGhlIGJsb2NrIGRldmljZS4gVGhpcyByZWFkcyBkaXJlY3RseSBmcm9tIGEgbWFwcGluZy5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uLiBJIGNhbiBzZWUgdGhhdCBgQ09ORklHX0JMS19OVk1FTWAgaXMgZGVmaW5lZCBpbiBgYmxvY2svS2NvbmZpZ2AsIGFuZCBpdCBkZXBlbmRzIG9uIGJvdGggYE9GYCBhbmQgYE5WTUVNYC4gVGhpcyBzaG91bGQgbWFrZSBlbmFibGluZyBpdCByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBpbiBgYmxvY2svYmxrLW52bWVtLmNgLCBgbmV0L2NvcmUvb2ZfbmV0LmNgLCBhbmQgYG5ldC9ibHVldG9vdGgvaGNpX3N5bmMuY2AgdG8gc2VlIHRoZSBwb2ludHMgdGhhdCB3b3VsZCBiZSBleHBvc2VkIHRvIGEgZnV6emVyOiBgYmxrX252bWVtX3JlZ19yZWFkYCwgYGJsa19udm1lbV9hZGRgLCBgYmxrX252bWVtX2RlbGAsIGBvZl9nZXRfbnZtZW1fZXVpNDhgLCBhbmQgYGhjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9udm1lbWAuXG5cbk9rYXksIHNvIGBDT05GSUdfQkxLX05WTUVNYCBzZWVtcyBsaWtlIGEgdmlhYmxlIHRhcmdldC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGBDT05GSUdfQlRfSENJVUFSVF9RQ0FgIHByZXJlcXVpc2l0ZSBmb3IgdGhlIGBidHFjYS5jYCBtb2RpZmljYXRpb25zLiBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIEJsdWV0b290aCBNYWtlZmlsZSBvciBLY29uZmlnIHRvIGNvbmZpcm0gdGhpcyBkZXBlbmRlbmN5LiBPdmVyYWxsLCB0aGlzIHBhdGNoIGhhcyB0aGUgcG90ZW50aWFsIHRvIGV4cG9zZSBzZXZlcmFsIGludGVyZXN0aW5nIGF0dGFjayBzdXJmYWNlcy4gVGhlIHJlbGlhbmNlIG9uIGJsb2NrIGRldmljZSBpbnRlcmFjdGlvbiwgY291cGxlZCB3aXRoIGhvdyB0aGUgYWRkcmVzcyBpcyByZWFkIGFuZCB1c2VkLCBsb29rcyB0byBiZSBhIHByb21pc2luZyBhdmVudWUgdG8gZXhwbG9yZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ5NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA5OjI3OjA0LjI5NjExMTI3OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTAwMjM5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCVF9IQ0lVQVJUX1FDQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2JsdWV0b290aC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZz0yMjc9Y29uZmlnIEJUX0hDSVVBUlRfUlRMXFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTI0MC1cXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnOjI0MTpjb25maWcgQlRfSENJVUFSVF9RQ0FcXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTI0Mi1cXHRib29sIFxcXCJRdWFsY29tbSBBdGhlcm9zIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZT00Nz1oY2lfdWFydC0kKENPTkZJR19CVF9IQ0lVQVJUX0JDTSlcXHQrPSBoY2lfYmNtLm9cXG5kcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZTo0ODpoY2lfdWFydC0kKENPTkZJR19CVF9IQ0lVQVJUX1FDQSlcXHQrPSBoY2lfcWNhLm9cXG5kcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZS00OS1oY2lfdWFydC0kKENPTkZJR19CVF9IQ0lVQVJUX0FHNlhYKVxcdCs9IGhjaV9hZzZ4eC5vXFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYz04Nzc9c3RhdGljIGludCBfX2luaXQgaGNpX3VhcnRfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmMtOTEwLSNlbmRpZlxcbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jOjkxMTojaWZkZWYgQ09ORklHX0JUX0hDSVVBUlRfUUNBXFxuZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmMtOTEyLVxcdHFjYV9pbml0KCk7XFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYz05MjY9c3RhdGljIHZvaWQgX19leGl0IGhjaV91YXJ0X2V4aXQodm9pZClcXG4tLVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jLTk0OC0jZW5kaWZcXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYzo5NDk6I2lmZGVmIENPTkZJR19CVF9IQ0lVQVJUX1FDQVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jLTk1MC1cXHRxY2FfZGVpbml0KCk7XFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfdWFydC5oPTE5Nz1pbnQgYmNtX2RlaW5pdCh2b2lkKTtcXG4tLVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV91YXJ0LmgtMTk5LVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV91YXJ0Lmg6MjAwOiNpZmRlZiBDT05GSUdfQlRfSENJVUFSVF9RQ0FcXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfdWFydC5oLTIwMS1pbnQgcWNhX2luaXQodm9pZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA5OjI3OjA0LjM3MTEzMDE2MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNTcxMjUxNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBidHFjYS5jYCBDb21waWxhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZm9jdXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBgYnRxY2EuY2AgY29tcGlsYXRpb24gaXMgY2xlYW4uIEl0J3MgYSBjcml0aWNhbCBjb21wb25lbnQsIHNvIGEgcXVpY2sgdmVyaWZpY2F0aW9uIGlzIGluIG9yZGVyLiBJJ20gbm90IGV4cGVjdGluZyBhbnkgbWFqb3IgaXNzdWVzLCBidXQgeW91IGNhbid0IGJlIHRvbyBjb21wbGFjZW50LiBHb3R0YSBjYXRjaCBhbnkgcG90ZW50aWFsIHNuYWdzIGVhcmx5LCBiZWZvcmUgdGhleSBjYXNjYWRlIGludG8gc29tZXRoaW5nIGJpZ2dlci4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBmbGFncyBvciBlcnJvcnMgcG9wcGluZyB1cC4gVGltZSB0byBjaGVjayB0aGUgYnVpbGQgbG9ncy4uLiBsZXQncyBnZXQgdG8gaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTczLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6Mjc6MDguNTI4MjU4NDQzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDk5MDg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJidHFjYS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmx1ZXRvb3RoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZT0yNT1vYmotJChDT05GSUdfQlRfUlRMKVxcdFxcdCs9IGJ0cnRsLm9cXG5kcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfQlRfUUNBKVxcdFxcdCs9IGJ0cWNhLm9cXG5kcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZS0yNy1vYmotJChDT05GSUdfQlRfTVRLKVxcdFxcdCs9IGJ0bXRrLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6Mjc6MDguNjMzMjU3MDEzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzMjE3MTg2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOlxuXG4qKkJsdWV0b290aCBRQ0EgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCB0aGUgc3lzdGVtJ3MgZmxhZ2dlZCB0aGF0IGBDT05GSUdfQlRfUUNBYCBpcyBhIHJlcXVpcmVtZW50LiBUaGF0IGltbWVkaWF0ZWx5IGNsaWNrcyAtICpvZiBjb3Vyc2UqLCB3ZSBuZWVkIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24uIE5vdywgdGhlIG5leHQgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyB3aGV0aGVyIGBidHFjYS5jYCBpcyBjb3JyZWN0bHkgY29tcGlsZWQgd2l0aCBgQ09ORklHX0JUX1FDQWAgZW5hYmxlZCwgYXMgdGhhdCdzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLiBMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGF0IGJ5IGNoZWNraW5nIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoYXQgZHJpdmVyLiBMZXQncyBuYXZpZ2F0ZSBvdmVyIHRvIGBkcml2ZXJzL2JsdWV0b290aC9LY29uZmlnYCB0byBzZWUgdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDM1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6Mjc6MTIuMTY1NDMyNDg2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4ODA4MzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCVF9RQ0FcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibHVldG9vdGgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWc9MTQ9Y29uZmlnIEJUX1JUTFxcbi0tXFxuZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZy0xNy1cXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnOjE4OmNvbmZpZyBCVF9RQ0FcXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTE5LVxcdHRyaXN0YXRlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA5OjI3OjEyLjIyNDI1MjMzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2MzI1OTY3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIGEgQmx1ZXRvb3RoIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBzb21ldGhpbmcgdGhhdCBzZWVtcyB0byBiZSBhIHRyaXN0YXRlLCBhbmQgbXkgaW1tZWRpYXRlIGh1bmNoIGlzIHRoYXQgaXQncyBsaWtlbHkgc2VsZWN0ZWQgYnkgZWl0aGVyIGBCVF9IQ0lVQVJUX1FDQWAgb3IgYEJUX0hDSUJUVVNCX1FDQWAuIFRoYXQncyB3aGVyZSBJJ2Qgc3RhcnQsIGdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGVzZSBzb3J0cyBvZiBCbHVldG9vdGggY29uZmlndXJhdGlvbnMuIFRob3NlIFF1YWxjb21tLXNwZWNpZmljIFVBUlQgYW5kIFVTQiBkcml2ZXJzIGFyZSB1c3VhbGx5IHRoZSBjdWxwcml0cyBpbiB0aGVzZSBzY2VuYXJpb3MuXG5cbk5vdywgdG8gY29uZmlybSBhbmQgZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHdoYXQncyBnb2luZyBvbiwgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgYEJMS19OVk1FTWAgb3B0aW9uLiBJJ2xsIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBgYmxvY2svS2NvbmZpZ2AgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgc2VsZWN0aW9uIGFuZCBkZXBlbmRlbmNpZXMgb2YgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhhdCdzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gZmluZCBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBraW5kcyBvZiBzZXR0aW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3MjQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwOToyNzoxNS43ODc1MTUzN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE3OTU4NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19OVk1FTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz0yMDI9Y29uZmlnIEJMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDS1xcbi0tXFxuYmxvY2svS2NvbmZpZy0yMTEtXFxuYmxvY2svS2NvbmZpZzoyMTI6Y29uZmlnIEJMS19OVk1FTVxcbmJsb2NrL0tjb25maWctMjEzLVxcdGJvb2wgXFxcIkJsb2NrIGRldmljZSBOVk1FTSBwcm92aWRlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6Mjc6MTUuODQ5MzE5MjI0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwODM5MDQ2ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJsb2NrIE5WTWVNIFByb3ZpZGVyIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgaGVyZSBpcyB0aGUgYEJMS19OVk1FTWAgY29uZmlndXJhdGlvbiwgdGhlIGNvcmUgb2YgdGhlIGJsb2NrIG52bWVtIHByb3ZpZGVyLiBUaGUgcHJpbWFyeSBmdW5jdGlvbnMgSSdtIGludGVyZXN0ZWQgaW4gYXJlIGBibGtfbnZtZW1fcmVnX3JlYWRgLCBgYmxrX252bWVtX2FkZGAsIGBoY2lfZGV2X2dldF9iZF9hZGRyX2Zyb21fbnZtZW1gLCBhbmQgYG9mX2dldF9udm1lbV9ldWk0OGAuXG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBwYXRocy4gYGJsa19udm1lbV9hZGRgIGlzIHJlYWNoYWJsZTsgSSBzZWUgdGhhdCBpdCdzIGludm9rZWQgYnkgYGFkZF9kaXNrX2ZpbmFsYCB3aXRoaW4gYGJsb2NrL2dlbmhkLmNgLiBUaGF0J3MgZ29vZDsgaXQgY29uZmlybXMgdGhhdCB0aGUgYWRkIGZ1bmN0aW9uIGlzIGRlZmluaXRlbHkgaW4gdXNlLiBgYmxrX252bWVtX3JlZ19yZWFkYCwgaG93ZXZlciwgaXMgYSBiaXQgbW9yZSBzdHJhaWdodGZvcndhcmQ7IGl0J3MgdGhlIGByZWdfcmVhZGAgY2FsbGJhY2sgZm9yIHRoZSBOVk1FTSBwcm92aWRlci4gU28sIHdoZW5ldmVyIGFuIE5WTUVNIGNvbnN1bWVyIHBlcmZvcm1zIGEgcmVhZCwgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgZW5nYWdlZC5cblxuTm93LCBsZXQncyBleHBsb3JlIHRoZSByZWFjaGFiaWxpdHkgb2YgYG9mX2dldF9udm1lbV9ldWk0OGAuIEl0J3MgY2FsbGVkIGZyb20gYG9mX2dldF9tYWNfYWRkcmVzc19udm1lbWAgYW5kIGBoY2lfZGV2X2dldF9iZF9hZGRyX2Zyb21fbnZtZW1gLiBgb2ZfZ2V0X21hY19hZGRyZXNzX252bWVtYCBmZWVkcyBpbnRvIGBvZl9nZXRfbWFjX2FkZHJlc3NgLCB3aGljaCwgYXMgSSBrbm93LCBpcyBhIGNvbW1vbmx5IHVzZWQgZnVuY3Rpb24gd2l0aGluIG5ldHdvcmsgZHJpdmVycy4gYGhjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9udm1lbWAgaXMgY2FsbGVkIGZyb20gYGhjaV9kZXZfc2V0dXBfc3luY2AgaW4gYG5ldC9ibHVldG9vdGgvaGNpX3N5bmMuY2AuIFRoaXMgaXMgYWxsIHVzZWZ1bCBpbmZvcm1hdGlvbi5cblxuTmV4dCwgSSdsbCBicmllZmx5IGxvb2sgYXQgdGhlIGRldmljZSB0cmVlIHBhcnRpdGlvbiBoYW5kbGluZy4gSXQgbG9va3MgbGlrZSBgb2ZfcGFydGl0aW9uYCBpbiBgYmxvY2svcGFydGl0aW9ucy9vZi5jYCBoYXMgYmVlbiBtb2RpZmllZCB0byBza2lwIG5vZGVzIG1pc3NpbmcgdGhlIGByZWdgIHByb3BlcnR5LiBNYWtlcyBzZW5zZS4gVGhpcyBpcyBjYWxsZWQgZHVyaW5nIHBhcnRpdGlvbiBwYXJzaW5nIGZyb20gdGhlIGRldmljZSB0cmVlLlxuXG5Pa2F5LCBzbyB0aGUgY29uZmlncyB0byBlbmFibGUgc2VlbSBjbGVhci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQkxLX05WTUVNYCBpcyBlbmFibGVkLiBCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIGNvbnNpZGVyIEJsdWV0b290aCBzdXBwb3J0IHNpbmNlIHRoZSBCbHVldG9vdGggZnVuY3Rpb25zIGFyZSB1c2luZyB0aGUgbnZtZW0gcHJvdmlkZXIsIG1lYW5pbmcgdGhhdCBgQlRfUUNBYCAob3Igc29tZXRoaW5nIGxpa2UgYEJUX0hDSVVBUlRfUUNBYCAvIGBCVF9IQ0lCVFVTQmAgYmFzZWQgb24gdGhlIGNoaXApIGlzIGFub3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbi4gSG93ZXZlciwgYEJUX1FDQWAgaXMgc2VsZWN0ZWQgYnkgb3RoZXJzLiBJIGNhbiBjaGVjayB3aGF0IHNlbGVjdHMgYEJUX1FDQWAgbGF0ZXIuIEZvciBub3csIG15IHByaW1hcnkgY29uY2VybiBpcyBlbmFibGluZyBgQkxLX05WTUVNYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwODEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6Mjc6MjMuOTMzMjI3ODhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4ODExNzczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBCVF9RQ0FcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibHVldG9vdGgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWc9MjQxPWNvbmZpZyBCVF9IQ0lVQVJUX1FDQVxcbi0tXFxuZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZy0yNDUtXFx0c2VsZWN0IEJUX0hDSVVBUlRfSDRcXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnOjI0NjpcXHRzZWxlY3QgQlRfUUNBXFxuZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZy0yNDctXFx0aGVscFxcbi0tXFxuZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZz00MTY9Y29uZmlnIEJUX1FDT01TTURcXG4tLVxcbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWctNDE5LVxcdGRlcGVuZHMgb24gUUNPTV9XQ05TU19DVFJMIHx8IChDT01QSUxFX1RFU1QgXFx1MDAyNlxcdTAwMjYgUUNPTV9XQ05TU19DVFJMPW4pXFxuZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZzo0MjA6XFx0c2VsZWN0IEJUX1FDQVxcbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWctNDIxLVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6Mjc6MjQuMDAyMDUxMjEzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1NjA2NTUwNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE5WTUVNIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYEJUX0hDSVVBUlRfUUNBYCBhbmQgYEJUX1FDT01TTURgIGFyZSBzZWxlY3RpbmcgYEJUX1FDQWAsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LiBJIGNhbiBsaXN0IGBCVF9IQ0lVQVJUX1FDQWAgYXMgYSBzdGFydGluZyBwb2ludC4gTGV0J3Mgc2VlLi4uIHRoZSBmb2N1cyBoZXJlIGlzIGRlZmluaXRlbHkgb24gdGhlc2UgZnVuY3Rpb25zOiBgYmxrX252bWVtX3JlZ19yZWFkYCwgYGJsa19udm1lbV9hZGRgLCBgaGNpX2Rldl9nZXRfYmRfYWRkcl9mcm9tX252bWVtYCwgYW5kIGBvZl9nZXRfbnZtZW1fZXVpNDhgLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBzY29wZS4gYGJsa19udm1lbV9yZWdfcmVhZGAgaXMgaW5kZWVkIHN0YXRpYywgc28gdGhhdCdzIGhlbHBmdWwgaW4gdW5kZXJzdGFuZGluZyB3aGVyZSBpdOKAmXMgdXNlZC4gYGJsa19udm1lbV9hZGRgLCBob3dldmVyLCBpc24ndCBleHBvcnRlZC4gSG1tLCBpdCdzIGluIGBibG9jay9ibGstbnZtZW0uY2AgYW5kIGlzIGNhbGxlZCBmcm9tIGBibG9jay9nZW5oZC5jYC4gVGhlbiBgaGNpX2Rldl9nZXRfYmRfYWRkcl9mcm9tX252bWVtYCBpcyBhbHNvIHN0YXRpYywgcmVzaWRpbmcgaW4gYG5ldC9ibHVldG9vdGgvaGNpX3N5bmMuY2AuIEFuZCBgb2ZfZ2V0X252bWVtX2V1aTQ4YCBpcyBleHBvcnRlZCBpbiBgbmV0L2NvcmUvb2ZfbmV0LmNgLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJcyBgQkxLX05WTUVNYCBzdWZmaWNpZW50PyBMZXQgbWUgZG91YmxlLWNoZWNrLiBPa2F5LCBpdCBkZXBlbmRzIG9uIGJvdGggYE9GYCBhbmQgYE5WTUVNYC4gVGhhdCdzIGdvb2QsIGBPRmAgaXMgd2lkZWx5IGVuYWJsZWQgYWNyb3NzIHZhcmlvdXMgYXJjaGl0ZWN0dXJlcywgYW5kIGBOVk1FTWAgaXMgY29tbW9uIGFzIHdlbGwuXG5cbkJhc2VkIG9uIGFsbCBvZiB0aGlzLCBJJ20gY29tZm9ydGFibGUgZW5vdWdoIHRvIGNvbmNsdWRlIHRoYXQgdGhpcyBwYXRjaCB3YXJyYW50cyBmdXp6aW5nLCBhbmQgSSB0aGluayBJJ3ZlIGlkZW50aWZpZWQgdGhlIGtleSBmdW5jdGlvbnMgZm9yIGFuYWx5c2lzLiBNeSByZWFzb25pbmcgaXMgdGhhdCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBibG9jayBkZXZpY2UgTlZNRU0gcHJvdmlkZXIgYWxsb3dpbmcgYmxvY2sgZGV2aWNlcyB0byBhY3QgYXMgTlZNRU0gcHJvdmlkZXJzLCBhbmQgaGFzIGludHJvZHVjZWQgQmx1ZXRvb3RoIGRldmljZSBhZGRyZXNzZXMgZnJvbSBOVk1FTSBjZWxscy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcywgd2l0aCByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBhZGRpbmcgYSBibG9jayBkZXZpY2Ugb3Igc2V0dGluZyB1cCBhIHZpcnR1YWwgSENJIGRldmljZSB3aXRoIHRoZSByaWdodCBxdWlya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzE0LCJPdXRwdXRUb2tlbnMiOjE4MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwOToyNzozMi41NjI3MDkzMDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTUyMjM5NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19OVk1FTVwiLFxuICAgIFwiQlRfSENJVUFSVF9RQ0FcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibGtfbnZtZW1fcmVnX3JlYWRcIixcbiAgICBcImJsa19udm1lbV9hZGRcIixcbiAgICBcImhjaV9kZXZfZ2V0X2JkX2FkZHJfZnJvbV9udm1lbVwiLFxuICAgIFwib2ZfZ2V0X252bWVtX2V1aTQ4XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBibG9jayBkZXZpY2UgTlZNRU0gcHJvdmlkZXIgd2hpY2ggYWxsb3dzIGJsb2NrIGRldmljZXMgdG8gYWN0IGFzIE5WTUVNIHByb3ZpZGVycy4gSXQgYWxzbyBhZGRzIGxvZ2ljIHRvIHJlYWQgQmx1ZXRvb3RoIGRldmljZSBhZGRyZXNzZXMgYW5kIE1BQyBhZGRyZXNzZXMgZnJvbSBOVk1FTSBjZWxscy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgYmxvY2ssIG5ldCwgYW5kIGJsdWV0b290aCBzdWJzeXN0ZW1zIHRoYXQgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGUuZy4sIHdoZW4gYWRkaW5nIGEgYmxvY2sgZGV2aWNlIG9yIHNldHRpbmcgdXAgYSB2aXJ0dWFsIEhDSSBkZXZpY2Ugd2l0aCB0aGUgYXBwcm9wcmlhdGUgcXVpcmtzKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfTlZNRU1cIixcbiAgICBcIkJUX0hDSVVBUlRfUUNBXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmxrX252bWVtX3JlZ19yZWFkXCIsXG4gICAgXCJibGtfbnZtZW1fYWRkXCIsXG4gICAgXCJoY2lfZGV2X2dldF9iZF9hZGRyX2Zyb21fbnZtZW1cIixcbiAgICBcIm9mX2dldF9udm1lbV9ldWk0OFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYmxvY2sgZGV2aWNlIE5WTUVNIHByb3ZpZGVyIHdoaWNoIGFsbG93cyBibG9jayBkZXZpY2VzIHRvIGFjdCBhcyBOVk1FTSBwcm92aWRlcnMuIEl0IGFsc28gYWRkcyBsb2dpYyB0byByZWFkIEJsdWV0b290aCBkZXZpY2UgYWRkcmVzc2VzIGFuZCBNQUMgYWRkcmVzc2VzIGZyb20gTlZNRU0gY2VsbHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGJsb2NrLCBuZXQsIGFuZCBibHVldG9vdGggc3Vic3lzdGVtcyB0aGF0IGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChlLmcuLCB3aGVuIGFkZGluZyBhIGJsb2NrIGRldmljZSBvciBzZXR0aW5nIHVwIGEgdmlydHVhbCBIQ0kgZGV2aWNlIHdpdGggdGhlIGFwcHJvcHJpYXRlIHF1aXJrcykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhh52f[1] Phase: Succeeded StartedAt: 2026-06-29 09:27:45 +0000 UTC FinishedAt: 2026-06-29 09:27:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh52f[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-29 09:27:45 +0000 UTC FinishedAt: 2026-06-29 09:27:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh52f[2] Phase: Succeeded StartedAt: 2026-06-29 09:27:45 +0000 UTC FinishedAt: 2026-06-29 13:33:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh52f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"c05fa482-aa60-497e-9913-7d4d7c8bea9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-29 09:27:45 +0000 UTC FinishedAt: 2026-06-29 13:33:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"c05fa482-aa60-497e-9913-7d4d7c8bea9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhh52f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"c05fa482-aa60-497e-9913-7d4d7c8bea9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-29 09:27:45 +0000 UTC FinishedAt: 2026-06-29 09:27:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh52f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"c05fa482-aa60-497e-9913-7d4d7c8bea9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-29 09:27:45 +0000 UTC FinishedAt: 2026-06-29 09:27:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhh52f/series-workflowhh52f-convert-artifact-3972413436/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhh52f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"c05fa482-aa60-497e-9913-7d4d7c8bea9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-29 09:27:55 +0000 UTC FinishedAt: 2026-06-29 09:59:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh52f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"c05fa482-aa60-497e-9913-7d4d7c8bea9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-29 09:27:55 +0000 UTC FinishedAt: 2026-06-29 09:59:49 +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:*bbb19ced-597f-40d7-9f4c-fbbb270ac42f,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-workflowhh52f/series-workflowhh52f-convert-artifact-3972413436/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": "29a12ab4-59b8-4547-a5c9-aee1296ef4bb", "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-workflowhh52f/series-workflowhh52f-build-action-1869755178/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhh52f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"c05fa482-aa60-497e-9913-7d4d7c8bea9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-29 09:27:55 +0000 UTC FinishedAt: 2026-06-29 09:58:59 +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:*bbb19ced-597f-40d7-9f4c-fbbb270ac42f,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-workflowhh52f/series-workflowhh52f-convert-artifact-3972413436/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": "29a12ab4-59b8-4547-a5c9-aee1296ef4bb", "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-workflowhh52f/series-workflowhh52f-build-action-1869755178/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhh52f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"c05fa482-aa60-497e-9913-7d4d7c8bea9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-29 09:59:49 +0000 UTC FinishedAt: 2026-06-29 09:59:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh52f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"c05fa482-aa60-497e-9913-7d4d7c8bea9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-29 09:59:49 +0000 UTC FinishedAt: 2026-06-29 09:59:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh52f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"c05fa482-aa60-497e-9913-7d4d7c8bea9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-29 09:59:49 +0000 UTC FinishedAt: 2026-06-29 10:00:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh52f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"c05fa482-aa60-497e-9913-7d4d7c8bea9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-29 09:59:49 +0000 UTC FinishedAt: 2026-06-29 10:00:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"c05fa482-aa60-497e-9913-7d4d7c8bea9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhh52f/series-workflowhh52f-convert-artifact-418078011/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhh52f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"c05fa482-aa60-497e-9913-7d4d7c8bea9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-29 10:00:38 +0000 UTC FinishedAt: 2026-06-29 10:02:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh52f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"c05fa482-aa60-497e-9913-7d4d7c8bea9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-29 10:00:38 +0000 UTC FinishedAt: 2026-06-29 10:02:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*29a12ab4-59b8-4547-a5c9-aee1296ef4bb,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-workflowhh52f/series-workflowhh52f-build-action-1869755178/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-workflowhh52f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"c05fa482-aa60-497e-9913-7d4d7c8bea9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-29 10:02:52 +0000 UTC FinishedAt: 2026-06-29 10:02:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh52f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"c05fa482-aa60-497e-9913-7d4d7c8bea9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-29 10:02:52 +0000 UTC FinishedAt: 2026-06-29 10:02:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh52f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"c05fa482-aa60-497e-9913-7d4d7c8bea9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-29 10:02:52 +0000 UTC FinishedAt: 2026-06-29 10:28:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh52f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"c05fa482-aa60-497e-9913-7d4d7c8bea9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-29 10:02:52 +0000 UTC FinishedAt: 2026-06-29 10:28:33 +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:*bbb19ced-597f-40d7-9f4c-fbbb270ac42f,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-workflowhh52f/series-workflowhh52f-convert-artifact-418078011/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": "e5db32c5-895d-4444-8905-6c2db6a0e3b0", "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-workflowhh52f/series-workflowhh52f-build-action-4026783839/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhh52f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"c05fa482-aa60-497e-9913-7d4d7c8bea9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-29 10:02:52 +0000 UTC FinishedAt: 2026-06-29 10:28:22 +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:*bbb19ced-597f-40d7-9f4c-fbbb270ac42f,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-workflowhh52f/series-workflowhh52f-convert-artifact-418078011/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": "e5db32c5-895d-4444-8905-6c2db6a0e3b0", "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-workflowhh52f/series-workflowhh52f-build-action-4026783839/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhh52f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"c05fa482-aa60-497e-9913-7d4d7c8bea9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-29 10:28:33 +0000 UTC FinishedAt: 2026-06-29 10:28:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh52f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"c05fa482-aa60-497e-9913-7d4d7c8bea9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-29 10:28:33 +0000 UTC FinishedAt: 2026-06-29 10:28:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh52f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"c05fa482-aa60-497e-9913-7d4d7c8bea9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-29 10:28:33 +0000 UTC FinishedAt: 2026-06-29 10:30:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh52f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"c05fa482-aa60-497e-9913-7d4d7c8bea9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-29 10:28:33 +0000 UTC FinishedAt: 2026-06-29 10:30:37 +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:*e5db32c5-895d-4444-8905-6c2db6a0e3b0,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-workflowhh52f/series-workflowhh52f-build-action-4026783839/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-workflowhh52f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"c05fa482-aa60-497e-9913-7d4d7c8bea9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-29 10:30:48 +0000 UTC FinishedAt: 2026-06-29 13:33:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh52f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"c05fa482-aa60-497e-9913-7d4d7c8bea9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-29 10:30:48 +0000 UTC FinishedAt: 2026-06-29 13:33:51 +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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"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:*29a12ab4-59b8-4547-a5c9-aee1296ef4bb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e5db32c5-895d-4444-8905-6c2db6a0e3b0,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-workflowhh52f/series-workflowhh52f-build-action-1869755178/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-workflowhh52f/series-workflowhh52f-build-action-4026783839/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhh52f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"c05fa482-aa60-497e-9913-7d4d7c8bea9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-29 10:30:48 +0000 UTC FinishedAt: 2026-06-29 10:31:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh52f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"c05fa482-aa60-497e-9913-7d4d7c8bea9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-29 10:30:48 +0000 UTC FinishedAt: 2026-06-29 10:31:49 +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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"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-workflowhh52f/series-workflowhh52f-convert-artifact-29768500/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhh52f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"c05fa482-aa60-497e-9913-7d4d7c8bea9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-29 10:30:48 +0000 UTC FinishedAt: 2026-06-29 10:30:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh52f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"c05fa482-aa60-497e-9913-7d4d7c8bea9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-29 10:30:48 +0000 UTC FinishedAt: 2026-06-29 10:30:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh52f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"c05fa482-aa60-497e-9913-7d4d7c8bea9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-29 10:30:49 +0000 UTC FinishedAt: 2026-06-29 10:30:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh52f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"c05fa482-aa60-497e-9913-7d4d7c8bea9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-29 10:31:59 +0000 UTC FinishedAt: 2026-06-29 13:33:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh52f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["blk_nvmem_reg_read","blk_nvmem_add","hci_dev_get_bd_addr_from_nvmem","of_get_nvmem_eui48"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_NVMEM","BT_HCIUART_QCA"],"series_id":"c05fa482-aa60-497e-9913-7d4d7c8bea9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-29 10:31:59 +0000 UTC FinishedAt: 2026-06-29 13:33:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*29a12ab4-59b8-4547-a5c9-aee1296ef4bb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e5db32c5-895d-4444-8905-6c2db6a0e3b0,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-workflowhh52f/series-workflowhh52f-build-action-1869755178/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-workflowhh52f/series-workflowhh52f-build-action-4026783839/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-workflowhh52f/series-workflowhh52f-convert-artifact-29768500/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,}